<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.kde.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugs.kde.org/"
          
          maintainer="sysadmin@kde.org"
>

    <bug>
          <bug_id>246678</bug_id>
          
          <creation_ts>2010-08-04 09:17:52 +0000</creation_ts>
          <short_desc>virtuoso: Usage of CPU is much too high</short_desc>
          <delta_ts>2013-12-01 16:17:04 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>10</classification_id>
          <classification>Unmaintained</classification>
          <product>nepomuk</product>
          <component>general</component>
          <version>4.1</version>
          <rep_platform>Debian testing</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>HI</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin L ü c h e m">Heinrich20</reporter>
          <assigned_to name="Sebastian Trueg">sebastian</assigned_to>
          <cc>83magdalenka</cc>
    
    <cc>a.harrowell</cc>
    
    <cc>aheinecke</cc>
    
    <cc>alejandronova</cc>
    
    <cc>amrecio</cc>
    
    <cc>arthur</cc>
    
    <cc>aspotashev</cc>
    
    <cc>bero</cc>
    
    <cc>cfigura77</cc>
    
    <cc>christopher.tanner</cc>
    
    <cc>csw</cc>
    
    <cc>domlyons</cc>
    
    <cc>edneymatias</cc>
    
    <cc>heri+kde</cc>
    
    <cc>kde</cc>
    
    <cc>loacoon</cc>
    
    <cc>mail</cc>
    
    <cc>meyerm</cc>
    
    <cc>mlinchits</cc>
    
    <cc>mueller</cc>
    
    <cc>mutlu_inek</cc>
    
    <cc>nt1277</cc>
    
    <cc>rdieter</cc>
    
    <cc>richb1908</cc>
    
    <cc>rm</cc>
    
    <cc>rudd-o</cc>
    
    <cc>sebas</cc>
    
    <cc>sonichedgehog_hyperblast00</cc>
    
    <cc>sven.burmeister</cc>
    
    <cc>t.bracken</cc>
    
    <cc>tassilo</cc>
    
    <cc>thelwyn</cc>
    
    <cc>tomas.linhart</cc>
    
    <cc>trueg</cc>
    
    <cc>wstephenson</cc>
    
    <cc>ya.maxis11</cc>
          
          <cf_commitlink></cf_commitlink>
          <cf_versionfixedin>4.6.1</cf_versionfixedin>
          <cf_sentryurl></cf_sentryurl>
          <votes>82</votes>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>998265</commentid>
    <comment_count>0</comment_count>
    <who name="Martin L ü c h e m">Heinrich20</who>
    <bug_when>2010-08-04 09:17:52 +0000</bug_when>
    <thetext>Version:           4.1 (using KDE 4.4.5) 
OS:                Linux

Normal working with my notebook. Writing mails with KMail. Then suddenly the application is blocked totally. Nothing happenes. I can see that virtuoso uses more than 50% CPU. Together with KMail using more than 20% and I do not knowhow much memory Kmail is blocked and my system is blocked - annoying!

I did not switch of strigi but switched of indexing of multimedia files. No idea if this will help. Anyway, to work productively with my notebook shall I switch of this whole strigi/nepomuk stuff?

Reproducible: Always

Steps to Reproduce:
no way to reproduce it. 

Actual Results:  
The problem occurs during normal work.


OS: Linux (x86_64) release 2.6.32-5-amd64
Compiler: cc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011500</commentid>
    <comment_count>1</comment_count>
    <who name="Rosetzky Cedric">loacoon</who>
    <bug_when>2010-08-30 18:34:05 +0000</bug_when>
    <thetext>Same here, virtuoso-t often uses 50 to 70% of each cores of my CPU for around 2 or 3 minutes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012064</commentid>
    <comment_count>2</comment_count>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2010-08-31 16:05:43 +0000</bug_when>
    <thetext>It would be really interesting to track down in which situations Virtuoso takes this much CPU.
Does this only happen when using KMail or also if KMail is not running?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012071</commentid>
    <comment_count>3</comment_count>
    <who name="Rosetzky Cedric">loacoon</who>
    <bug_when>2010-08-31 16:11:15 +0000</bug_when>
    <thetext>I don&apos;t use Kmail at all so this can&apos;t be it. It seems to happen when &quot;playing&quot; with files. Moving, erasing or copying a certain amount of files seems to trigger this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012086</commentid>
    <comment_count>4</comment_count>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2010-08-31 16:24:01 +0000</bug_when>
    <thetext>Is this still on 4.4.x or 4.5.0?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012158</commentid>
    <comment_count>5</comment_count>
    <who name="Rosetzky Cedric">loacoon</who>
    <bug_when>2010-08-31 17:46:15 +0000</bug_when>
    <thetext>4.5.0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013353</commentid>
    <comment_count>6</comment_count>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2010-09-02 16:27:45 +0000</bug_when>
    <thetext>can you try a patch for kdebase?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013363</commentid>
    <comment_count>7</comment_count>
    <who name="Rosetzky Cedric">loacoon</who>
    <bug_when>2010-09-02 16:37:13 +0000</bug_when>
    <thetext>I&apos;m using a Gentoo overlay ebuild, so I can try to patch it, but I&apos;m not sure I&apos;ll manage to do it (it doesn&apos;t look complicated though).
By the way, I just switched to 4.5.1, in case it changes something to your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015366</commentid>
    <comment_count>8</comment_count>
    <who name="Kolia">thelwyn</who>
    <bug_when>2010-09-07 01:16:25 +0000</bug_when>
    <thetext>KDE 4.5.1 here and noticing the same behavior. It was not indexing at the moment. The only particular thing I can think of when it happened is that it started just after I made a svn checkout of kdelibs (thus lots of files written suddenly).

Regards,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027279</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Tanner">christopher.tanner</who>
    <bug_when>2010-10-03 21:13:54 +0000</bug_when>
    <thetext>Running a version called 4.5.68 on Mandriva Cooker, and am noticing the same behaviour. CPU usage is not dependent on whether or not kmail is running. Anything that I can look for to help debug this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030944</commentid>
    <comment_count>10</comment_count>
    <who name="Manuel Amador (Rudd-O)">rudd-o</who>
    <bug_when>2010-10-12 13:44:38 +0000</bug_when>
    <thetext>The absolute exact same thing happens to me.  It makes KDE completely unusable.  When you strace it, all you can see is a metric ton of futex calls and very little work actually being done.  I really wish I could use KDE but the fact of the matter is, I can&apos;t let this destroy my laptop battery life.

Please already confirm this and put some real effort in fixing this problem, OK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030987</commentid>
    <comment_count>11</comment_count>
    <who name="Rosetzky Cedric">loacoon</who>
    <bug_when>2010-10-12 15:30:49 +0000</bug_when>
    <thetext>You still can use KDE, you just have to disable Strigi and Nepomuk. No more CPU problems, and ~150Mo or RAM saved (which is also way too much).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030992</commentid>
    <comment_count>12</comment_count>
    <who name="Manuel Amador (Rudd-O)">rudd-o</who>
    <bug_when>2010-10-12 15:33:56 +0000</bug_when>
    <thetext>I fail to see the point of using KDE without these KDE technologies.  I admit, there is not that much those technologies are useful for, right now, but saying &quot;Turn off nepomuk and strigi&quot; is sort of like saying &quot;Well, you do without desktop search and semantic information, which is an advertised feature of KDE&quot;.  You can drive your car... but forget about turning the radio and A/C on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031064</commentid>
    <comment_count>13</comment_count>
    <who name="Rosetzky Cedric">loacoon</who>
    <bug_when>2010-10-12 17:07:08 +0000</bug_when>
    <thetext>KDE is not only this, and as you said, it&apos;s still not quite useful. But you&apos;re right, Linux gives this choice, and there are many desktop environments much more stable than KDE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039568</commentid>
    <comment_count>14</comment_count>
    <who name="Alex Harrowell">a.harrowell</who>
    <bug_when>2010-11-02 12:54:08 +0000</bug_when>
    <thetext>I&apos;ve got this problem as well, w/KDE4.4.4 and OpenSUSE11.3/2GB RAM/Intel T1700.

Typically, it&apos;s associated with KMail, which will happily spend 15 minutes hammering the disk I/O and basically hanging every time it starts up. During that period you either have KMail pulling 25-30% CPU and a *lot* of disk activity, or else Virtuoso running up to 90~% CPU. Interestingly, it is NOT REPEAT NOT hitting the swap - during these events there is typically well over 1GB of RAM available.

This has recently started to be a problem - I don&apos;t know whether this is as a result of an update or whether there&apos;s some critical folder or mailbox size.

I take the point that you could turn off desktop search, but I don&apos;t *have* desktop search and haven&apos;t since KDE3.5.7 and good old kerry beagle. I&apos;d like to have a desktop search application rather than KFind. Strigi is disabled through System Settings.

I am at a loss to see the purpose of the whole complex of Akonadi/Strigi/Nepomuk/Virtuoso. It just appears to be a selection of processes that burn enormous quantities of system resources and do nothing whatsoever of any use, except mangling my data now and again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058897</commentid>
    <comment_count>15</comment_count>
    <who name="Bernhard Rosenkraenzer">bero</who>
    <bug_when>2010-12-14 20:06:55 +0000</bug_when>
    <thetext>This just happened for me with 4.6.0-beta2:

- Installed 4.6.0-beta2 with a clean ~/.kde
- Opened kmail and imported mails from our IMAP server and contacts and calendars from SOGo
- Quit kmail and did completely unrelated things

Suddenly the system turned sluggish and virtuoso-t consumed 450% CPU (this is a 4-core system with hyperthreading, so the 450% number is ok).
After waiting for about half an hour (assuming it might be related to having imported thousands of messages from an imap server - akonadi is still running even after exiting kmail), virtuoso-t went down to 247%, where it has remained stable for the last couple of hours.

The systemsettings Nepomuk configuration tool says &quot;File indexer is idle&quot;, so it&apos;s not indexing new files.

As with the other people reporting this, strace shows virtuoso-t doing virtually nothing but futex calls.

There are 164GB spread across 10380 files in my home directory (but again the indexer claims to be idle).

Running processes that may be in some way related:

akonadi_control
akonadiserver
akonadi_agent_server
akonadi_nepomuk_calendar_feeder
akonadi_nepomuk_email_feeder
akonadi_nepomuk_contact_feeder
akonadi_maildispatcher_agent
akonadi_imap_resource
akonadi_davgroupware_resource
akonadi_davgroupware_resource (running twice with different identifiers)
nepomukserver
nepomukservicestub nepomukremovablestorageservice
nepomukservicestub nepomukstorage
nepomukservicestub nepomukstrigiservice
nepomukservicestub nepomukbackupsync
nepomukservicestub nepomukqueryservice
nepomukservicestub nepomukfilewatch
nepomukservicestub nepomukremovablestorageservice


There&apos;s no extraordinary spewage in .xsession-errors or the likes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058903</commentid>
    <comment_count>16</comment_count>
    <who name="Bernhard Rosenkraenzer">bero</who>
    <bug_when>2010-12-14 20:16:42 +0000</bug_when>
    <thetext>I killed the related processes manually one by one.
virtuoso-t insanity stopped when I killed

nepomukservicestub nepomukstorage

Incidentally, this is the last process I killed, so the others are quite probably not to blame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059294</commentid>
    <comment_count>17</comment_count>
    <who name="Alex Harrowell">a.harrowell</who>
    <bug_when>2010-12-15 16:17:28 +0000</bug_when>
    <thetext>On Tuesday 14 December 2010 19:06:59 Bernhard Rosenkraenzer wrote:
&gt; https://bugs.kde.org/show_bug.cgi?id=246678
&gt; 

The problem has been resolved for me; I wonder if a recent update changed 
anything?

&gt; 
&gt; Bernhard Rosenkraenzer &lt;bero@arklinux.org&gt; changed:
&gt; 
&gt;            What    |Removed                     |Added
&gt; ---------------------------------------------------------------------------
&gt; - CC|                            |bero@arklinux.org
&gt; 
&gt; 
&gt; 
&gt; 
&gt; --- Comment #15 from Bernhard Rosenkraenzer &lt;bero arklinux org&gt;  2010-12-14
&gt; 20:06:55 --- This just happened for me with 4.6.0-beta2:
&gt; 
&gt; - Installed 4.6.0-beta2 with a clean ~/.kde
&gt; - Opened kmail and imported mails from our IMAP server and contacts and
&gt; calendars from SOGo
&gt; - Quit kmail and did completely unrelated things
&gt; 
&gt; Suddenly the system turned sluggish and virtuoso-t consumed 450% CPU (this
&gt; is a 4-core system with hyperthreading, so the 450% number is ok).
&gt; After waiting for about half an hour (assuming it might be related to
&gt; having imported thousands of messages from an imap server - akonadi is
&gt; still running even after exiting kmail), virtuoso-t went down to 247%,
&gt; where it has remained stable for the last couple of hours.
&gt; 
&gt; The systemsettings Nepomuk configuration tool says &quot;File indexer is idle&quot;,
&gt; so it&apos;s not indexing new files.
&gt; 
&gt; As with the other people reporting this, strace shows virtuoso-t doing
&gt; virtually nothing but futex calls.
&gt; 
&gt; There are 164GB spread across 10380 files in my home directory (but again
&gt; the indexer claims to be idle).
&gt; 
&gt; Running processes that may be in some way related:
&gt; 
&gt; akonadi_control
&gt; akonadiserver
&gt; akonadi_agent_server
&gt; akonadi_nepomuk_calendar_feeder
&gt; akonadi_nepomuk_email_feeder
&gt; akonadi_nepomuk_contact_feeder
&gt; akonadi_maildispatcher_agent
&gt; akonadi_imap_resource
&gt; akonadi_davgroupware_resource
&gt; akonadi_davgroupware_resource (running twice with different identifiers)
&gt; nepomukserver
&gt; nepomukservicestub nepomukremovablestorageservice
&gt; nepomukservicestub nepomukstorage
&gt; nepomukservicestub nepomukstrigiservice
&gt; nepomukservicestub nepomukbackupsync
&gt; nepomukservicestub nepomukqueryservice
&gt; nepomukservicestub nepomukfilewatch
&gt; nepomukservicestub nepomukremovablestorageservice
&gt; 
&gt; 
&gt; There&apos;s no extraordinary spewage in .xsession-errors or the likes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064268</commentid>
    <comment_count>18</comment_count>
    <who name="Aitor">mail</who>
    <bug_when>2010-12-26 14:03:39 +0000</bug_when>
    <thetext>The same to me here.
On system preferences it says Strigi is waiting, but virtuoso-t process is taking 159% CPU (2 Cores)

Running KDE 4.6 RC1 on x86_64
Nopomuk Details:
  34369 files in index
  5.3 GB store size

Akonadi precesses:
 3370 ?        00:00:01 akonadi_control
 3372 ?        00:00:53 akonadiserver
 3409 ?        00:00:00 akonadi_agent_l
 3410 ?        00:00:00 akonadi_agent_l
 3411 ?        00:00:00 akonadi_birthda
 3412 ?        00:00:04 akonadi_davgrou
 3413 ?        00:00:00 akonadi_agent_l
 3414 ?        00:00:01 akonadi_imap_re
 3415 ?        00:00:24 akonadi_imap_re
 3416 ?        00:01:27 akonadi_imap_re
 3417 ?        00:00:05 akonadi_imap_re
 3418 ?        00:00:04 akonadi_maildis
 3419 ?        00:00:00 akonadi_microbl
 3420 ?        00:00:00 akonadi_microbl
 3421 ?        00:00:00 akonadi_mixedma
 3422 ?        00:00:00 akonadi_nepomuk
 3423 ?        00:00:00 akonadi_nepomuk
 3424 ?        00:00:06 akonadi_nepomuk
 3425 ?        00:00:00 akonadi_nepomuk
 3426 ?        00:00:03 akonadi_agent_l
 3544 ?        00:00:00 akonadi_agent_s

Nepomuk services:
3422 ?        00:00:00 akonadi_nepomuk
 3423 ?        00:00:00 akonadi_nepomuk
 3424 ?        00:00:06 akonadi_nepomuk
 3425 ?        00:00:00 akonadi_nepomuk
 3466 ?        00:00:00 nepomukserver
 3496 ?        00:00:44 nepomukservices
 3671 ?        00:00:00 nepomukservices
 3672 ?        00:00:08 nepomukservices
 3673 ?        00:00:00 nepomukservices
 3675 ?        00:00:00 nepomukservices
 3676 ?        00:00:33 nepomukservices</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068319</commentid>
    <comment_count>19</comment_count>
    <who name="Bernhard Rosenkraenzer">bero</who>
    <bug_when>2011-01-05 10:12:36 +0000</bug_when>
    <thetext>Happened again here today.
When I got into the office, my work box (which I already updated to 4.6.0-rc2 yesterday) was using up almost all available CPU power in virtuoso-t, and once again, killing the nepomukstorage process fixed it.

So the problem is not fixed, though maybe it&apos;s less common than before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068400</commentid>
    <comment_count>20</comment_count>
    <who name="Luca Beltrame">lbeltrame</who>
    <bug_when>2011-01-05 12:35:22 +0000</bug_when>
    <thetext>If you&apos;re using PIM 4.6 (the betas), the problem can be workarounded by disabling the Nepomuk Search runner in krunner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068408</commentid>
    <comment_count>21</comment_count>
    <who name="Martin L ü c h e m">Heinrich20</who>
    <bug_when>2011-01-05 12:45:04 +0000</bug_when>
    <thetext>Thank you a lot! Can you explain this briefly?

Am Mittwoch, 5. Januar 2011, um 12:35:33 schrieb Luca Beltrame:
&gt; If you&apos;re using PIM 4.6 (the betas), the problem can be workarounded by
&gt; disabling the Nepomuk Search runner in krunner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068467</commentid>
    <comment_count>22</comment_count>
    <who name="Luca Beltrame">lbeltrame</who>
    <bug_when>2011-01-05 14:58:02 +0000</bug_when>
    <thetext>This is not the only cause of the problem, but according to http://lists.kde.org/?t=129170918700001&amp;r=1&amp;w=2 some KRunner queries hang virtuoso-t. Hence, opening up KRunner and disabling the search plugin (wrench -&gt; uncheck &quot;Nepomuk Search&quot;) will work around the problem.

It is *not* a fix, it merely prevents the issue from appearing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068479</commentid>
    <comment_count>23</comment_count>
    <who name="Martin L ü c h e m">Heinrich20</who>
    <bug_when>2011-01-05 15:13:13 +0000</bug_when>
    <thetext>Thank you, Luca but I do not understand a word! krunner is a kde script to 
start applications, correct? How do I inactivate processes, etc. in this way?

Martin

Am Mittwoch, 5. Januar 2011, um 14:58:05 schrieb Luca Beltrame:
&gt; https://bugs.kde.org/show_bug.cgi?id=246678
&gt; 
&gt; 
&gt; 
&gt; 
&gt; 
&gt; --- Comment #22 from Luca Beltrame &lt;einar heavensinferno net&gt;  2011-01-05
&gt; 14:58:02 --- This is not the only cause of the problem, but according to
&gt; http://lists.kde.org/?t=129170918700001&amp;r=1&amp;w=2 some KRunner queries hang
&gt; virtuoso-t. Hence, opening up KRunner and disabling the search plugin
&gt; (wrench -&gt; uncheck &quot;Nepomuk Search&quot;) will work around the problem.
&gt; 
&gt; It is *not* a fix, it merely prevents the issue from appearing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068520</commentid>
    <comment_count>24</comment_count>
    <who name="mutlu inek">mutlu_inek</who>
    <bug_when>2011-01-05 15:49:55 +0000</bug_when>
    <thetext>@ Martin: Open Krunner (Alt+F2), then click on the wrench symbol to the very left of Krunner. Then disable the Nepomuk Desktop Search runner plugin and click &quot;apply&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068556</commentid>
    <comment_count>25</comment_count>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-01-05 16:39:12 +0000</bug_when>
    <thetext>*** Bug 258039 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068759</commentid>
    <comment_count>26</comment_count>
    <who name="Martin L ü c h e m">Heinrich20</who>
    <bug_when>2011-01-05 21:24:46 +0000</bug_when>
    <thetext>Am Mittwoch, 5. Januar 2011, um 15:50:06 schrieb mutlu inek:
&gt; @ Martin: Open Krunner (Alt+F2), then click on the wrench symbol to the
&gt; very left of Krunner. Then disable the Nepomuk Desktop Search runner
&gt; plugin and click &quot;apply&quot;.

Hey Mutlu, thankx a lot! ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068930</commentid>
    <comment_count>27</comment_count>
    <who name="Martin L ü c h e m">Heinrich20</who>
    <bug_when>2011-01-06 09:12:26 +0000</bug_when>
    <thetext>Starting up my system including KMail without Desktop Search this morning was 
even slower than yesterday! :-(

Result: There are really serious problems with KMail since KDE 4.x and noone 
really has an idea what the reason might be and even more: noone cares! Sorry 
for that!

/&quot;Off-Topic&quot;
To no longer be blamed that I am constantly running a Debian test system I 
changed to kubuntu 10.10. No big difference! Yes Kubuntu normally is faster 
when starting up but the problems within KDE persist!
/End

Am Mittwoch, 5. Januar 2011, um 21:24:49 schrieb Martin L ü c h e m:
&gt; [Bug 246678] virtuoso: Usage of CPU is much too high</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069174</commentid>
    <comment_count>28</comment_count>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-01-06 16:37:15 +0000</bug_when>
    <thetext>*** Bug 228081 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069240</commentid>
    <comment_count>29</comment_count>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-01-06 19:02:01 +0000</bug_when>
    <thetext>*** Bug 228884 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069242</commentid>
    <comment_count>30</comment_count>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-01-06 19:02:36 +0000</bug_when>
    <thetext>*** Bug 230400 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073556</commentid>
    <comment_count>31</comment_count>
    <who name="Peter Paulsen">kdebugs.99.urgwurz</who>
    <bug_when>2011-01-15 15:11:12 +0000</bug_when>
    <thetext>*** This bug has been confirmed by popular vote. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075768</commentid>
    <comment_count>32</comment_count>
    <who name="Dirk Mueller">mueller</who>
    <bug_when>2011-01-19 22:46:19 +0000</bug_when>
    <thetext>Sebastian, whats the status here? this is the only remaining 4.6.0 blocker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075816</commentid>
    <comment_count>33</comment_count>
    <who name="Edney Matias">edneymatias</who>
    <bug_when>2011-01-20 01:05:00 +0000</bug_when>
    <thetext>Running KDE 4.6.0 RC 1  with Nepomuk krunner disabled and performance it&apos;s ok. Didn&apos;t give a try enabling it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075882</commentid>
    <comment_count>34</comment_count>
      <attachid>56212</attachid>
    <who name="Will Stephenson">wstephenson</who>
    <bug_when>2011-01-20 09:46:51 +0000</bug_when>
    <thetext>Created attachment 56212
Patch 1/2 kdelibs patch by trueg 

This is the patch that Sebastian proposed, which has the drawback that it creates a lot of CPU usage on first run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075883</commentid>
    <comment_count>35</comment_count>
      <attachid>56213</attachid>
    <who name="Will Stephenson">wstephenson</who>
    <bug_when>2011-01-20 09:48:26 +0000</bug_when>
    <thetext>Created attachment 56213
Patch 2/2 kdebase patch by trueg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075984</commentid>
    <comment_count>36</comment_count>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-01-20 13:25:11 +0000</bug_when>
    <thetext>The patch Will proposes introduces two optimizations. I could probably reduce the first-run issue if I removed one of the optimizations. I will have to test that though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075996</commentid>
    <comment_count>37</comment_count>
    <who name="Dirk Mueller">mueller</who>
    <bug_when>2011-01-20 13:37:47 +0000</bug_when>
    <thetext>I would be fine with a mitigation. 

it seems I can change the default of this to false:

[Service-nepomukstrigiservice]
autostart=false

or to disable the krunner plugin. which one actually helps?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076000</commentid>
    <comment_count>38</comment_count>
    <who name="Dirk Mueller">mueller</who>
    <bug_when>2011-01-20 13:40:54 +0000</bug_when>
    <thetext>how do I disable the krunner plugin btw (I mean the default of it being disabled)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076051</commentid>
    <comment_count>39</comment_count>
    <who name="Rex Dieter">rdieter</who>
    <bug_when>2011-01-20 14:39:32 +0000</bug_when>
    <thetext>Will,Sebastian, patch in comment #35 (Patch 2/2 kdebase) seems to be a dup of that from comment #34 (Patch 1/2 kdelibs).

Do either of you want this tested more?  If so, could you repost the kdebase patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076108</commentid>
    <comment_count>40</comment_count>
    <who name="Martin Tlustos">martin.tlustos</who>
    <bug_when>2011-01-20 16:05:28 +0000</bug_when>
    <thetext>@ Dirk (Comment #38): ALT-F2 and then disable the plugin in the options dialogue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076118</commentid>
    <comment_count>41</comment_count>
      <attachid>56242</attachid>
    <who name="Will Stephenson">wstephenson</who>
    <bug_when>2011-01-20 16:16:44 +0000</bug_when>
    <thetext>Created attachment 56242
Patch 2/2 kdebase patch by trueg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076146</commentid>
    <comment_count>42</comment_count>
    <who name="Sebastian Trueg">sebastian</who>
    <bug_when>2011-01-20 17:04:06 +0000</bug_when>
    <thetext>SVN commit 1215973 by trueg:

Backport:
* Fixed the handling of quotes and keywords such as &quot;AND&quot;, &quot;OR&quot;, and &quot;NOT&quot; in LiteralTerm.
  Now correct bif:contains or regex filters are created for values.
* Made the query parser merge LiteralTerms into a single one to improve query performance.
  While merging two LiteralTerms into one does not yield the exact same query (when merged
  both literal tokens need to appear in the same property value while with separate LiteralTerms
  the tokens can appear in different properties) it should cover close to all typical use cases
  while increasing the performance significantly and getting rid of the nasty &quot;Virtuoso goes
  crazy when I use KRunner&quot; bug.

CCBUG: 246678


 M  +91 -48    literalterm.cpp  
 M  +40 -5     queryparser.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&amp;revision=1215973</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076291</commentid>
    <comment_count>43</comment_count>
      <attachid>56252</attachid>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-01-20 20:11:31 +0000</bug_when>
    <thetext>Created attachment 56252
Patch which introduces the new query terms (kdelibs/nepomuk)

Could someone please test this and the next patch on kde 4.6 and confirm that it fixes the virtuoso going crazy bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076293</commentid>
    <comment_count>44</comment_count>
      <attachid>56253</attachid>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-01-20 20:12:36 +0000</bug_when>
    <thetext>Created attachment 56253
Patch that creates the data necessary for the new query terms in nepomukquery

And this is the second patch to test in combination with the former one on kde 4.6.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076296</commentid>
    <comment_count>45</comment_count>
      <attachid>56254</attachid>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-01-20 20:13:43 +0000</bug_when>
    <thetext>Created attachment 56254
Updated patch which contains missing files (kdebase/runtime/nepomuk)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076364</commentid>
    <comment_count>46</comment_count>
      <attachid>56258</attachid>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-01-20 22:44:36 +0000</bug_when>
    <thetext>Created attachment 56258
Updated patch which adds faster pim data conversion (kdebase/runtime/nepomuk)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076368</commentid>
    <comment_count>47</comment_count>
      <attachid>56259</attachid>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-01-20 22:54:10 +0000</bug_when>
    <thetext>Created attachment 56259
yet another update for kdebase/runtime/nepomuk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076370</commentid>
    <comment_count>48</comment_count>
    <who name="Thomas Bracken">t.bracken</who>
    <bug_when>2011-01-20 22:54:57 +0000</bug_when>
    <thetext>Hi,

This message is for all who want to get rid
of the nepomuk process which is using up all the 
CPU cycles on the Linux KDE desktop.

I found out where the nepomuk is started up from.

Its in the /usr/share/autostart directory ,
under the file nepomukserver.desktop .

As someone wrote below,

http://forums.opensuse.org/applications/418846-how-do-i-get-rid-nepomuk-virus.html

renaming this file (/usr/share/autostart/nepomukserver.desktop) 
with a non .desktop extension and
clearing out the $HOME/.kde4/share/apps/nepomuk directory
seems to stop this service from running on startup.

Cheers!

Tom Bracken</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076480</commentid>
    <comment_count>49</comment_count>
    <who name="Martin L ü c h e m">Heinrich20</who>
    <bug_when>2011-01-21 07:16:17 +0000</bug_when>
    <thetext>Thanks Thomas but shouldn&apos;t there be an easier way? I mean KDE 4 was developed 
comletely new and there is no way to prevent this system from running a 
process easier? I would assume a simple switch in kcontrol!!!

Am Donnerstag, 20. Januar 2011, um 22:55:06 schrieb Thomas Bracken:
&gt; https://bugs.kde.org/show_bug.cgi?id=246678
&gt; 
&gt; 
&gt; 
&gt; 
&gt; 
&gt; --- Comment #48 from Thomas Bracken &lt;t bracken shaw ca&gt;  2011-01-20
&gt; 22:54:57 --- Hi,
&gt; 
&gt; This message is for all who want to get rid
&gt; of the nepomuk process which is using up all the
&gt; CPU cycles on the Linux KDE desktop.
&gt; 
&gt; I found out where the nepomuk is started up from.
&gt; 
&gt; Its in the /usr/share/autostart directory ,
&gt; under the file nepomukserver.desktop .
&gt; 
&gt; As someone wrote below,
&gt; 
&gt; http://forums.opensuse.org/applications/418846-how-do-i-get-rid-nepomuk-vir
&gt; us.html
&gt; 
&gt; renaming this file (/usr/share/autostart/nepomukserver.desktop)
&gt; with a non .desktop extension and
&gt; clearing out the $HOME/.kde4/share/apps/nepomuk directory
&gt; seems to stop this service from running on startup.
&gt; 
&gt; Cheers!
&gt; 
&gt; Tom Bracken</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076497</commentid>
    <comment_count>50</comment_count>
    <who name="Will Stephenson">wstephenson</who>
    <bug_when>2011-01-21 09:08:23 +0000</bug_when>
    <thetext>@Martin: Yes, there is.  Look in &apos;Desktop Search&apos; in systemsettings.  This setting is per-user though.

@Thomas: There is no need to take a crowbar to the autostart .desktop file to prevent Nepomuk starting.  This will prevent any user from locally configuring it to start in the future, and breaks the integrity of the package (rpm -V kdebase4-workspace to see what I mean).  There is an elegant way (which I&apos;ve just been using to configure Nepomuk and Strigi indexing default settings for openSUSE 11.4).

If you look inside the nepomukserver.desktop autostart there is 

X-KDE-autostart-condition=nepomukserverrc:Basic Settings:Start Nepomuk:true

This means if, per user
$HOME/.kde4/share/config/nepomukserverrc
or system wide
/etc/kde4/share/config/nepomukserverrc

contain 

[Basic Settings]
Start Nepomuk=false

the autostart desktop file evaluates this file and does not start nepomukserver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076529</commentid>
    <comment_count>51</comment_count>
      <attachid>56273</attachid>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-01-21 10:46:02 +0000</bug_when>
    <thetext>Created attachment 56273
Another update for Will S. - cutting down initial update time again (kdebase/runtime/nepomuk)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076534</commentid>
    <comment_count>52</comment_count>
      <attachid>56274</attachid>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-01-21 10:53:44 +0000</bug_when>
    <thetext>Created attachment 56274
Updating patches like crazy: this is probably the best I can do for the initial update. (kdebase/runtime/nepomuk)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076578</commentid>
    <comment_count>53</comment_count>
    <who name="Will Stephenson">wstephenson</who>
    <bug_when>2011-01-21 12:19:35 +0000</bug_when>
    <thetext>Re patch in c52: It&apos;s still not terminating.  Something else is going on here.  I can make the database available to you privately if you want.  For now I will try with a newly-created non-Akonadi-data database.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078504</commentid>
    <comment_count>54</comment_count>
    <who name="Alejandro Nova">alejandronova</who>
    <bug_when>2011-01-25 15:08:46 +0000</bug_when>
    <thetext>With pre-release KDE 4.6.0 packages (Rex Dieter repo):

- The first search in KRunner works perfectly.
- The second search in KRunner eats one core.
- The third search in KRunner eats the other core.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078506</commentid>
    <comment_count>55</comment_count>
    <who name="Alejandro Nova">alejandronova</who>
    <bug_when>2011-01-25 15:17:55 +0000</bug_when>
    <thetext>That was with the Nepomuk file search KRunner Plugin. Now, disabling that, restarting Nepomuk, and enabling Contacts KRunner Plugin...

Works perfectly! I can send mail to contacts instantly, without a wait, without thrashing a core. Kudos!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078771</commentid>
    <comment_count>56</comment_count>
      <attachid>56434</attachid>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-01-26 09:05:30 +0000</bug_when>
    <thetext>Created attachment 56434
Updated patch: yet another improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078941</commentid>
    <comment_count>57</comment_count>
    <who name="Will Stephenson">wstephenson</who>
    <bug_when>2011-01-26 16:52:01 +0000</bug_when>
    <thetext>@Sebastian [/space/kde/installs/4_6/bin/nepomukservicestub] nepomukstorage(10378)/nepomuk (storage service) CrappyInferencer2::UpdateAllResourcesThread::run: 4 resources updated. Elapsed: 31.703 sec

using my pathological 90000 PIM items database on the core2 1.8GHz machine.

And I can&apos;t trigger the busy cpu now with the nepomuk runner, so I&apos;m happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079495</commentid>
    <comment_count>58</comment_count>
      <attachid>56522</attachid>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-01-27 17:41:32 +0000</bug_when>
    <thetext>Created attachment 56522
Updated patch which adds subtype inference (kdebase/runtime/nepomuk)

Hey Will, please test this patch. I am not at home and cannot test it with real data but am very curious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079604</commentid>
    <comment_count>59</comment_count>
    <who name="Will Stephenson">wstephenson</who>
    <bug_when>2011-01-27 21:05:21 +0000</bug_when>
    <thetext>I don&apos;t think the new code in CrappyInferencer2::UpdateAllResourcesThread even runs.  I don&apos;t see the Elapsed debug output, neither is there a noticeable CPU spike.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079936</commentid>
    <comment_count>60</comment_count>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-01-28 11:56:52 +0000</bug_when>
    <thetext>@Will: ok, could you please do me a last favor and provide the output of 

nepoukcmd list &quot;&quot; &quot;&quot; &quot;&quot; &quot;&lt;urn:crappyinference2:inferredtriples&gt;&quot;

(This is after the run with the latest patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080077</commentid>
    <comment_count>61</comment_count>
    <who name="Will Stephenson">wstephenson</who>
    <bug_when>2011-01-28 15:46:15 +0000</bug_when>
    <thetext>Total Results: 0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080834</commentid>
    <comment_count>62</comment_count>
    <who name="Will Stephenson">wstephenson</who>
    <bug_when>2011-01-29 19:37:23 +0000</bug_when>
    <thetext>I just logged in and the conversion took place on login.  Elapsed time: 41s.  I couldn&apos;t make it happen by starting nepomukserver in a running session.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081100</commentid>
    <comment_count>63</comment_count>
    <who name="Marc Deop">kde</who>
    <bug_when>2011-01-30 13:42:02 +0000</bug_when>
    <thetext>*** Bug 259517 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081727</commentid>
    <comment_count>64</comment_count>
    <who name="Charlie Figura">cfigura77</who>
    <bug_when>2011-01-31 14:15:41 +0000</bug_when>
    <thetext>I&apos;m regularly seeing nepomuk-t consume at least 50% CPU.  I saw the thread above (e.g. comment #24) and checked and found that the nepomuk plugin in krunner was *already* disabled.  So virtuoso-t is *still* burning up my CPU.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081729</commentid>
    <comment_count>65</comment_count>
    <who name="Charlie Figura">cfigura77</who>
    <bug_when>2011-01-31 14:17:17 +0000</bug_when>
    <thetext>Sorry, I left out that I&apos;m running the released 4.6 version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081734</commentid>
    <comment_count>66</comment_count>
    <who name="Sebastian Kügler">sebas</who>
    <bug_when>2011-01-31 14:24:08 +0000</bug_when>
    <thetext>@#64: Did you also disable the Contacts runner?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081747</commentid>
    <comment_count>67</comment_count>
    <who name="Alvaro Manuel Recio Perez">amrecio</who>
    <bug_when>2011-01-31 14:45:56 +0000</bug_when>
    <thetext>I can confirm the same problem as Charles Figura. I&apos;m using Kubuntu and I don&apos;t have a Contacts runner, only Nepomuk.

However, the problem only occurs when using the new Akonadi-enabled PIM suite with Akonadi 1.4.95. Disabling Akonadi and restarting Nepomuk makes virtuoso-t behave as a normal process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081765</commentid>
    <comment_count>68</comment_count>
    <who name="Marc Deop">kde</who>
    <bug_when>2011-01-31 15:17:09 +0000</bug_when>
    <thetext>I agree with Álvaro. I have gone back to KDEPIM 4.4.10 and virtuoso is no longer getting crazy.

Maybe the new version triggers something wrong with nepomuk?

Regards</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081837</commentid>
    <comment_count>69</comment_count>
    <who name="Ralph Moenchmeyer">rm</who>
    <bug_when>2011-01-31 17:53:28 +0000</bug_when>
    <thetext>(In reply to comment #68)
&gt; I agree with Álvaro. I have gone back to KDEPIM 4.4.10 and virtuoso is no
&gt; longer getting crazy.
&gt; 

I can confirm that the problem started with the newer Akonadi/Nepomuk versions. 

I, too, have meanwhile given up KDE 4.6 Beta 1/Beta2 and have gone back to KDEPIM 4.4.10. Everything is normal there. 

However, Nepomuk/Akonadi consume permanently 100% of one CPU core in KDE 4.6 Beta 1 and Beta 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081937</commentid>
    <comment_count>70</comment_count>
    <who name="Alejandro Nova">alejandronova</who>
    <bug_when>2011-01-31 21:24:12 +0000</bug_when>
    <thetext>I can confirm the problems with KDE PIM/Akonadi. But my own experience is a little different. 2 different machines, one running Ubuntu, the other one Fedora.

1. I began with almost empty databases, because of the known problems with migration between KDE PIM 4.4.x and KDE PIM/Akonadi. With Fedora, I couldn&apos;t trigger the bug, but with Ubuntu I triggered the Virtuoso bug more than once. I narrowed it to the Akonadi-Nepomuk Email Feeder.

2. To workaround the issues I was experiencing with Kubuntu, I tried to remove and recreate the resources with Akonadi Console, and after a try, mail began to flow and Virtuoso core-wasting somewhat stopped. The behavior of Virtuoso this time was different: it was using ~70% of one core, while akonadi_nepomuk_email_feeder was shown as running. Certainly, akonadi_nepomuk_email_feeder can hog a system just like (or more than) Strigi, and this flew under everyone&apos;s radar.

3. I simply left akonadi_nepomuk_email_feeder index all the mail. After half an hour, akonadi_nepomuk_email_feeder seemed to finish, because there wasn&apos;t more mail to index, and my Virtuoso (hence, NEPOMUK) CPU usage went to the single digits and stayed there.

With Fedora the behavior was more straightforward, but similar. After no recreating resources, but simply using what I had, akonadi_nepomuk_email_feeder pushed my CPU to 70% out of 200%. After a while, all mail was indexed, and NEPOMUK CPU usage went to the single digits.

I filed a separate bug against akonadi_nepomuk_email_feeder (bug 249828) because that process doesn&apos;t suspend on batteries like Strigi does. Also, its interaction with Virtuoso and NEPOMUK should be monitored.

This also means that, for everyone affected, a spot-on workaround should be to remove the Nepomuk E-Mail Feeder resource from your Akonadi pool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081943</commentid>
    <comment_count>71</comment_count>
    <who name="Alejandro Nova">alejandronova</who>
    <bug_when>2011-01-31 21:34:50 +0000</bug_when>
    <thetext>I forgot one important thing: the size of the mail-folders:

- Folder A: ~1,000 POP3 resource, connected.
- Folder B: ~20,000 IMAP resource, GMail, connected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082418</commentid>
    <comment_count>72</comment_count>
    <who name="Alvaro Manuel Recio Perez">amrecio</who>
    <bug_when>2011-02-01 18:57:24 +0000</bug_when>
    <thetext>After reading about akonadi_email_feeder I was going to write that in my case that wouldn&apos;t be the cause of the problem because I have a very small email folder. To prove it, I even removed it from Akonadi and restarted KDE.

Of course, virtuoso-t was again using 100% of a core but to double check I opened Akonadi Console and removed &quot;Nepomuk EMail Feeder&quot;. Nothing changed.

But then I noticed &quot;Nepomuk Contact Feeder&quot; and &quot;Nepomuk Calendar Feeder&quot;. Indeed, I have some calendars in Akonadi so I tried removing those feeders.

Then, virtuoso-t started behaving. Barely 1% of CPU usage and Nepomuk was indeed working, as I could use Dolphin search and Bangarang.

So, to summarize, there seems to be something in those Nepomuk feeders that is triggering the 100% CPU usage bug. At least, that&apos;s what it was causing the problem for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082435</commentid>
    <comment_count>73</comment_count>
    <who name="Tamás Németh">nt1277</who>
    <bug_when>2011-02-01 19:23:25 +0000</bug_when>
    <thetext>http://nice.nyme.hu/c60cg.pdf

This PDF files makes a nepomukservices process consuming 100% CPU virtually forever if strigi is enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082443</commentid>
    <comment_count>74</comment_count>
    <who name="Alvaro Manuel Recio Perez">amrecio</who>
    <bug_when>2011-02-01 19:37:08 +0000</bug_when>
    <thetext>In my machine it seems Strigi/Nepomuk managed to index the PDF without problems.

I downloaded it, searched for words contained in the PDF using Dolphin and it found it without hanging.

I&apos;m using the packages for KDE SC 4.6 from the Kubuntu Backports PPA (I don&apos;t know how to get the version of Strigi I&apos;m running).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082495</commentid>
    <comment_count>75</comment_count>
    <who name="mbc111">mlinchits</who>
    <bug_when>2011-02-01 21:14:39 +0000</bug_when>
    <thetext>Virtuoso no longer displays this cpu-sucking behavior. It&apos;d behaved
very well since kde 4.5

On Tue, Feb 1, 2011 at 1:37 PM, Alvaro Manuel Recio Perez
&lt;amrecio@gmail.com&gt; wrote:
&gt; https://bugs.kde.org/show_bug.cgi?id=246678
&gt;
&gt;
&gt;
&gt;
&gt;
&gt; --- Comment #74 from Alvaro Manuel Recio Perez &lt;amrecio gmail com&gt;  2011-02-01 19:37:08 ---
&gt; In my machine it seems Strigi/Nepomuk managed to index the PDF without
&gt; problems.
&gt;
&gt; I downloaded it, searched for words contained in the PDF using Dolphin and it
&gt; found it without hanging.
&gt;
&gt; I&apos;m using the packages for KDE SC 4.6 from the Kubuntu Backports PPA (I don&apos;t
&gt; know how to get the version of Strigi I&apos;m running).
&gt;
&gt; --
&gt; Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email
&gt; ------- You are receiving this mail because: -------
&gt; You are on the CC list for the bug.
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082642</commentid>
    <comment_count>76</comment_count>
    <who name="Alejandro Nova">alejandronova</who>
    <bug_when>2011-02-02 03:08:12 +0000</bug_when>
    <thetext>Your PDF is &quot;only&quot; 918 pages long.

I have the ultimate hell for the NEPOMUK text indexing engine: a collection of 11 PDFs with ~1,200 pages each of pure text, containing the History of the Chilean Constitution. That&apos;s really long, and those PDFs use 41 MB. Believe me: 41 MB of PURE TEXT with NO GRAPHICS and NO FONTS is really too much. Of course, those PDFs clogged the Virtuoso engine here, but only for a minute, and half of that time it wasn&apos;t actually Virtuoso what was forcing my CPU, but PDF2Text.

NEPOMUK guys, if you wish, you can download those PDFs directly from http://www.bcn.cl/lc/cpolitica/actas_oficiales-r . It doesn&apos;t matter that you don&apos;t understand Spanish, those PDFs would be great to torture NEPOMUK and to watch the real impact of small optimizations in the text indexing engine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082717</commentid>
    <comment_count>77</comment_count>
    <who name="Sebastian Kügler">sebas</who>
    <bug_when>2011-02-02 11:56:04 +0000</bug_when>
    <thetext>@all: This thread is NOT a collection of &quot;everything that makes Nepomuk eat CPU&quot;. Please file individual bugreports if you find strigi / Nepomuk choking on a file. That&apos;s a completely different issue from this one though, and only makes it harder to get the useful information out of *this* bugreport.

This bugreports is about Nepomuk eating CPU due to a hanging query. Those hanging queries are, for example causes by the contacts or Nepomuk runners. As workaround, these have been disabled in 4.6.0, and we&apos;re looking for a structural fix in 4.6.1.

Please, before reacting to this bugreport, makes sure it&apos;s this exact issue. If it&apos;s not -&gt; file another bugreport (after checking for possible dupes). That makes it much easier to track this bug, and fix it. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082733</commentid>
    <comment_count>78</comment_count>
    <who name="Alejandro Nova">alejandronova</who>
    <bug_when>2011-02-02 13:13:23 +0000</bug_when>
    <thetext>@Sebastian: Sorry about helping somewhat to derail this thread.

I only wanted to report that, in my system, the Nepomuk E-Mail feeder can trigger the same behavior (a hanging query). Alvaro reports that the Nepomuk Contacts feeder can also trigger the same behavior.

There&apos;s a pattern here: just like KRunner plugins, those feeders exercise the same parts of NEPOMUK and can produce the same bugs. So, if KRunner plugins are fixed, those runners must be fixed too as part of this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082738</commentid>
    <comment_count>79</comment_count>
    <who name="Sebastian Kügler">sebas</who>
    <bug_when>2011-02-02 13:25:31 +0000</bug_when>
    <thetext>@Alejandro: The runners are only the symptom (and the akonadi feeders other symptoms, apparently).

There&apos;s fix available as attachment to this thread (be sure to pick the latest version) which needs some testing. It would be very helpful if you could try this patch and confirm if it fixes your email feeder symptoms as well. (And how long the conversion takes.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082743</commentid>
    <comment_count>80</comment_count>
    <who name="Marc Deop">kde</who>
    <bug_when>2011-02-02 13:35:43 +0000</bug_when>
    <thetext>I thought I had reported my experience with the patches but apparently I forgot. Well, I tried both patches and they didn&apos;t help a bit with the kdepim 4.6 beta3. In fact, the behaviour becomes much worse  :S. Without the akonadi version of kdepim everything runs just fine though.

Regards</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082767</commentid>
    <comment_count>81</comment_count>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-02-02 14:25:04 +0000</bug_when>
    <thetext>@Marc: just to be clear: you patched both kdelibs and kdebase, reinstalled, and then restarted Nepomuk and the problem still persists?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082779</commentid>
    <comment_count>82</comment_count>
    <who name="Marc Deop">kde</who>
    <bug_when>2011-02-02 15:01:17 +0000</bug_when>
    <thetext>(In reply to comment #81)
&gt; @Marc: just to be clear: you patched both kdelibs and kdebase, reinstalled, and
&gt; then restarted Nepomuk and the problem still persists?

I did so ( and I can tell you it takes some time in my near 5 years old laptop). Not only restarted but rebooted the machine (ya know, just in case).

I still have the packages I made ready to install again. I can test them again tonight or probably tomorrow morning (both with kdepim 4.4.10 and kdepim 4.6beta3).

Regards</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084839</commentid>
    <comment_count>83</comment_count>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-02-07 09:43:30 +0000</bug_when>
    <thetext>@Marc: could I please get some feedback with the latest patches?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085151</commentid>
    <comment_count>84</comment_count>
    <who name="Marc Deop">kde</who>
    <bug_when>2011-02-08 01:55:15 +0000</bug_when>
    <thetext>@Sebastian sorry for the delay.

I&apos;ve tried the patches and everything seems to be fine as long as it&apos;s a new user/config.

When I tried with my regular user account virtuoso went crazy for over one and a half hours... untill I killed the processes and started fresh. I guess I should try it more hours to be sure all is ok. I&apos;ll report back here soon</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085257</commentid>
    <comment_count>85</comment_count>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-02-08 11:00:06 +0000</bug_when>
    <thetext>@Marc: could you please while virtuoso is going crazy check its status via:

&gt; isql localhost:&lt;PORT&gt; dba dba
&gt; status();

where &lt;PORT&gt; is the port virtuoso was started on. You can get this by checking the config file you see in &quot;ps aux|grep virtuoso&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085937</commentid>
    <comment_count>86</comment_count>
    <who name="Marc Deop">kde</who>
    <bug_when>2011-02-09 20:14:11 +0000</bug_when>
    <thetext>@Sebastian: I&apos;m sorry to tell you that I started from zero with my own user and haven&apos;t found the virtuoso problem yet. (this is with your patches applied)

My apologies :(

Regards</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086634</commentid>
    <comment_count>87</comment_count>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-02-11 11:04:07 +0000</bug_when>
    <thetext>@Marc: isn&apos;t this a good thing? Does that mean you cannot reproduce? Or does it still happen if you use your existing data?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086637</commentid>
    <comment_count>88</comment_count>
    <who name="Marc Deop">kde</who>
    <bug_when>2011-02-11 11:10:24 +0000</bug_when>
    <thetext>@Sebastian: it is for me! I just thought you wanted to debug why happened in the first place while upgrading to a new version. I&apos;ve run into some trouble with the akonadi kdepim version but the virtuoso-t eating all of my cpu cycles is here no more! :)

Thanks for the work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086647</commentid>
    <comment_count>89</comment_count>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-02-11 11:24:36 +0000</bug_when>
    <thetext>Great. So I can apply the patch for KDE 4.6.1. Thanks for all the testing guys.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087749</commentid>
    <comment_count>90</comment_count>
    <who name="Sebastian Trueg">trueg</who>
    <bug_when>2011-02-14 16:19:08 +0000</bug_when>
    <thetext>Patches are commited to git master and KDE/4.6. 4.6.1 will contain the fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097031</commentid>
    <comment_count>91</comment_count>
    <who name="Ralph Moenchmeyer">rm</who>
    <bug_when>2011-03-14 19:21:28 +0000</bug_when>
    <thetext>Can confirm that everything is OK now with 
Opensuse 11.4, KDE 4.6.1 and a Cyrus imap server.

Good job !</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097053</commentid>
    <comment_count>92</comment_count>
    <who name="Alejandro Nova">alejandronova</who>
    <bug_when>2011-03-14 19:51:49 +0000</bug_when>
    <thetext>Kudos! Sorry about not testing the fix, but I didn&apos;t know how to pull a remote branch directly using git until now.

This bugfix is seriously lacking publicity and I tried my best to counter that. Again, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097174</commentid>
    <comment_count>93</comment_count>
    <who name="Edney Matias">edneymatias</who>
    <bug_when>2011-03-15 02:44:35 +0000</bug_when>
    <thetext>Is this patch already part of KDE SC 4.6.1?

Thank you for the fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129069</commentid>
    <comment_count>94</comment_count>
      <attachid>60798</attachid>
    <who name="Ettore Atalan">atalanttore</who>
    <bug_when>2011-06-08 23:08:02 +0000</bug_when>
    <thetext>Created attachment 60798
syslog

This problem still exists in KDE 4.6.2 (running Kubuntu 11.04).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133907</commentid>
    <comment_count>95</comment_count>
    <who name="">meyerm</who>
    <bug_when>2011-06-22 12:30:47 +0000</bug_when>
    <thetext>Same behaviour on KDE 4.6.4 and KDEPIM 4.6.0. The runners are disabled, strigi not running (disabled in system settings; nepomuk enabled of course). virtuoso-t is using up one of my two cores. Second to virtuoso-t concerning the totally used up cpu time on my computer is now dbus-daemon (not before the update) and third nepomukservicestub.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133908</commentid>
    <comment_count>96</comment_count>
    <who name="">meyerm</who>
    <bug_when>2011-06-22 12:32:26 +0000</bug_when>
    <thetext>Oh, sorry. &quot;nepomukservicestub nepomukstorage&quot; to be precise ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134102</commentid>
    <comment_count>97</comment_count>
    <who name="Ralph Moenchmeyer">rm</who>
    <bug_when>2011-06-22 23:47:13 +0000</bug_when>
    <thetext>The same problem here. 

Today, after a long time I tested KDEPIM 4.6.0 again with KDE 4.6.4 on an Opensuse 11.4 system. (Basic KDE 4.6.4 components from Opensuse&apos;s KDE factory repository and KDEPIM 4.6.0 from an KDE-&quot;Unstable&quot; repository of Opensuse.) 

Kmail was connected to a cyrus imap server with tons of mails. All the imap folders were nevertheless built up and filled in Kmail/Akonadi surprisingly  rapidly. However, when starting KDE itself again nepomuk and virtuoso-t ran amok.  

I have an Intel i7 950 quadcore with hyperthreading (8 threads). The cpu consumption of vituoso-t and nepomuk appear to be  distributed over all cpu threads. However, in sum and on average the load of virtuoso-t consumes at least one cpu thread completely. According to ksysguard the following processes determine the cpu load (8x100%) :      

virtuoso-t : 96% - 126 % (i.e. on average more than one cpu thread of 8 is used completely) 

nepomukservices : 8% - 12 % (kind of a leading nepomukservices process)

dbus-daemon : 2% - 8%

several other nepomukservices processes: each with 2% - 4% 

akonadi-nepomuk: 2% - 4% 
 
This pattern was active over 20 minutes with no end in sight. The same after a new start of the system. I gave up then and went back to KDEPIM 4.4.11 (with Kmail 1.13.7). 

So my impression is that the problem is not fixed or resolved. 

Regarding my comment #91: 
After looking into some logs I now think I reported wrongly. My positive impression at that time probably came from an Opensuse system that mixed KDE 4.6 with KDEPIM 4.4. Sorry for any confusion comment #91 may have caused. 

Off topic: KDEPIM 4.6.0 apparently does not offer any chance to connect to Open-Xchange calendars or OX address books. So OX users can&apos;t use it productively, anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135928</commentid>
    <comment_count>98</comment_count>
    <who name="Andre Heinecke">aheinecke</who>
    <bug_when>2011-06-27 09:16:09 +0000</bug_when>
    <thetext>Hi,
I have gotten reports from multiple users of KDEPIM on Windows that they see the same behavior (CPU Spiking of Nepomuk for a short time and blocking the system)
The Version they use is latest 4.6 branches.
We are probably talking about another bug here then the one fixed for kde 4.6 but there are still issues with the cpu consumption at least when kdepim is used.

Is there any advice on how to get better debug information on this? Like turn on some Virtuoso logging to see what is going on?

With the reports from #97 #95 and #94 I&apos;ve reopened this bug, I hope that was ok or should i also have then removed the kde-4.6.0-blocker keyword. I just want to avoid that this bug gets lost as resolved.

Regards</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136076</commentid>
    <comment_count>99</comment_count>
    <who name="Andre Heinecke">aheinecke</who>
    <bug_when>2011-06-27 16:07:28 +0000</bug_when>
    <thetext>I was able to reproduce a bug that specific to the complaints i&apos;ve gotten and opened bug 276620 for this which is more specific (Marking Mails with KMail causes virtuoso to spike in cpu usage):
 https://bugs.kde.org/show_bug.cgi?id=276620

Apologies for reopening this bug i am marking it as resolved again because the issue mentioned for most of this report is appearantly fixed and i am seeing a different virtuoso cpu spike.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138482</commentid>
    <comment_count>100</comment_count>
    <who name="S. Burmeister">sven.burmeister</who>
    <bug_when>2011-07-05 13:11:18 +0000</bug_when>
    <thetext>Unfortunately the bug does seem to exist in KDE 4.6.4. It was said that one can test whether it really got stuck by disabling nepomuk. If virtuoso-t stops some time after that as well, everything is &quot;ok&quot; since it was just working on something and not just stuck. But now it seems that virtuoso-t is stuck in some loop, i.e. it uses one full core even 10 minutes after nepomuk was disabled and strace does not show any activity as well.

ps aux | grep virtuos
user   2454  1.6  4.1 250936 84940 ?        SNl  Jun29 135:54 /usr/bin/virtuoso-t +foreground +configfile /tmp/virtuoso_nn2440.ini +wait


strace -p 2454 -tt -s 1000
Process 2454 attached - interrupt to quit
15:04:42.952129 futex(0x108a424, FUTEX_WAIT_PRIVATE, 2439, NULL

and no change after minutes.

Attaching gdb to the process is somehow not possible, i.e. it reports:

Attaching to process 2454
/usr/bin/virtuoso-t (deleted): file or directory not found.

I can see the process in the list though and that file exists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151872</commentid>
    <comment_count>101</comment_count>
    <who name="Edney Matias">edneymatias</who>
    <bug_when>2011-08-09 13:45:27 +0000</bug_when>
    <thetext>Hi there.

I can confirm the strange behavior but also can confirm that disabling nepomuk, virtuoso-t stops some time later. Is it possible to find out where he is stuck, what he is doing?

Anyway I will let it do its thing.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151979</commentid>
    <comment_count>102</comment_count>
    <who name="Ralph Moenchmeyer">rm</who>
    <bug_when>2011-08-09 17:22:25 +0000</bug_when>
    <thetext>Follow up of comment #97: 

Meanwhile, I have upgraded from KDE 4.6 to KDE 4.7. And for KDE 4.7 I cannot reproduce the strange CPU consuming behavior of Akonadi/Nepomuk/virtuoso-t anymore. 

I use Kmail 4.7. I connected it via an Akonadi resource to an IMAP server with tons of mails. After the initial Akonadi update with all IMAP mail information from some hundred mailfolders there was indeed some background activity of Nepomuk/virtuoso-t. 

But: It occured mainly during periods of low system activity and it did not last forever. It stopped after some time - maybe 10 minutes. No comparison to KDE 4.6.x. So, with KDE 4.7 I see a much better and maybe more intelligent performance regarding Nepomuk/virtuoso-t.

Now, when starting KDE I sometimes see some minor Nepomuk activity for a short period of time (&lt; 30 seconds). But this is not really worth mentioning.   

This is something I can live with. Good job.       

Off topic: Kontact 4.7 still does not work with Open-Xchange 5 servers. Only with Open-Xchange 6 servers. But for OX 6 it really works very well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214451</commentid>
    <comment_count>103</comment_count>
    <who name="">richb1908</who>
    <bug_when>2012-01-14 16:59:58 +0000</bug_when>
    <thetext>Same happening with KDE 4.8 RC2 in Kubuntu 11.10. Virtuoso-t consumes 50% cpu during any type of computer use. It happens every time Nepomuk is enabled. 
Disabling Nepomuk while this is happening keeps virtuoso-t a running process indefinitely. If I kill it, it just restarts. Logging out and back in the session after disabling Nepomuk corrects the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214463</commentid>
    <comment_count>104</comment_count>
    <who name="Alejandro Nova">alejandronova</who>
    <bug_when>2012-01-14 17:20:51 +0000</bug_when>
    <thetext>@richb1908@gmail.com: Some things you can do.

There are 2 things that will make your Virtuoso install to use 100% CPU in KDE 4.8. Both are normal.

- Virtuoso is indexing files.
- Virtuoso is indexing mail.

1. To counter the heat, run the following command as root:

echo 1 &gt; /sys/devices/system/cpu/cpufreq/ondemand/ignore_nice_load

That will stop your processor speed to scale up, if it gets used by Virtuoso.

2. See what Virtuoso is doing.

- If you have a &quot;&amp;&quot; like icon in your system tray, Virtuoso is indexing files.
- If you don&apos;t have that, run akonadiconsole and look for a resource named &quot;Akonadi Nepomuk Feeder&quot;. If it&apos;s indexing mail, leave it alone. It will stop working when you are using the computer and it will resume indexing when you leave.

The third cause (Virtuoso eating CPU like crazy) shouldn&apos;t exist in KDE 4.8. Check if you have Akonadi 1.6.90 or higher.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214466</commentid>
    <comment_count>105</comment_count>
    <who name="">richb1908</who>
    <bug_when>2012-01-14 17:41:14 +0000</bug_when>
    <thetext>The third case may be the problem. I have akonadi-server 1.6.2-0ubuntu1. It
is the only version available through the beta ppa for KDE 4.8
Richard


On Sat, Jan 14, 2012 at 12:20 PM, Alejandro Nova &lt;alejandronova@gmail.com&gt;wrote:

&gt; https://bugs.kde.org/show_bug.cgi?id=246678
&gt;
&gt;
&gt;
&gt;
&gt;
&gt; --- Comment #104 from Alejandro Nova &lt;alejandronova gmail com&gt;  2012-01-14
&gt; 17:20:51 ---
&gt; @richb1908@gmail.com: Some things you can do.
&gt;
&gt; There are 2 things that will make your Virtuoso install to use 100% CPU in
&gt; KDE
&gt; 4.8. Both are normal.
&gt;
&gt; - Virtuoso is indexing files.
&gt; - Virtuoso is indexing mail.
&gt;
&gt; 1. To counter the heat, run the following command as root:
&gt;
&gt; echo 1 &gt; /sys/devices/system/cpu/cpufreq/ondemand/ignore_nice_load
&gt;
&gt; That will stop your processor speed to scale up, if it gets used by
&gt; Virtuoso.
&gt;
&gt; 2. See what Virtuoso is doing.
&gt;
&gt; - If you have a &quot;&amp;&quot; like icon in your system tray, Virtuoso is indexing
&gt; files.
&gt; - If you don&apos;t have that, run akonadiconsole and look for a resource named
&gt; &quot;Akonadi Nepomuk Feeder&quot;. If it&apos;s indexing mail, leave it alone. It will
&gt; stop
&gt; working when you are using the computer and it will resume indexing when
&gt; you
&gt; leave.
&gt;
&gt; The third cause (Virtuoso eating CPU like crazy) shouldn&apos;t exist in KDE
&gt; 4.8.
&gt; Check if you have Akonadi 1.6.90 or higher.
&gt;
&gt; --
&gt; Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email
&gt; ------- You are receiving this mail because: -------
&gt; You are on the CC list for the bug.
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214822</commentid>
    <comment_count>106</comment_count>
    <who name="Alejandro Nova">alejandronova</who>
    <bug_when>2012-01-15 19:27:09 +0000</bug_when>
    <thetext>Please, file a bug against Kubuntu. Historically, there have been problems with 3 packages essential to Nepomuk/Akonadi: strigi; soprano and akonadi. Strangely, they are not covered by Kubuntu official PPAs, and if those packages are not updated to their latest releases, you WILL face problems. Currently:

- Strigi is at 0.7.7.
- Akonadi is at 1.6.90 (for KDE SC 4.8)
- Soprano is at 2.7.4 (2.7.5 is imminent).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214823</commentid>
    <comment_count>107</comment_count>
    <who name="">richb1908</who>
    <bug_when>2012-01-15 19:31:42 +0000</bug_when>
    <thetext>Thanks Your suggestion:

echo 1 &gt; /sys/devices/system/cpu/cpufreq/ondemand/ignore_nice_load


Has kept the cpu  and temps down.

I will file the bug report.
Richard


On Sun, Jan 15, 2012 at 2:27 PM, Alejandro Nova &lt;alejandronova@gmail.com&gt;wrote:

&gt; https://bugs.kde.org/show_bug.cgi?id=246678
&gt;
&gt;
&gt;
&gt;
&gt;
&gt; --- Comment #106 from Alejandro Nova &lt;alejandronova gmail com&gt;  2012-01-15
&gt; 19:27:09 ---
&gt; Please, file a bug against Kubuntu. Historically, there have been problems
&gt; with
&gt; 3 packages essential to Nepomuk/Akonadi: strigi; soprano and akonadi.
&gt; Strangely, they are not covered by Kubuntu official PPAs, and if those
&gt; packages
&gt; are not updated to their latest releases, you WILL face problems.
&gt; Currently:
&gt;
&gt; - Strigi is at 0.7.7.
&gt; - Akonadi is at 1.6.90 (for KDE SC 4.8)
&gt; - Soprano is at 2.7.4 (2.7.5 is imminent).
&gt;
&gt; --
&gt; Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email
&gt; ------- You are receiving this mail because: -------
&gt; You are on the CC list for the bug.
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1214827</commentid>
    <comment_count>108</comment_count>
    <who name="Alejandro Nova">alejandronova</who>
    <bug_when>2012-01-15 19:58:26 +0000</bug_when>
    <thetext>Already filed it:

https://bugs.launchpad.net/kubuntu-packaging/+bug/916903

Please, vote for that report!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215023</commentid>
    <comment_count>109</comment_count>
    <who name="Edney Matias">edneymatias</who>
    <bug_when>2012-01-16 12:23:34 +0000</bug_when>
    <thetext>Hi there!

Right now running Fedora 16 with KDE 4.8 RC 2 from Red Hat KDE Repository. These are my packages version

strigi-libs-0.7.7-1.fc16.x86_64
kdegraphics-strigi-analyzer-4.7.97-1.fc16.x86_64
akonadi-1.6.90-1.fc16.x86_64
kdepimlibs-akonadi-4.7.97-1.fc16.x86_64
soprano-2.7.4-1.fc16.x86_64

There&apos;s no &apos;&amp;&apos; on my tray, it&apos;s hidden and stating that the file indexer is idle. Akonadi Nepomuk Feeder states &quot;system busy, indexing suspended&quot;. Virtuoso is at 99.3% of my 4 core CPU, since i activated it again. My machine was shut off once since then because of overheating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215106</commentid>
    <comment_count>110</comment_count>
    <who name="Edney Matias">edneymatias</who>
    <bug_when>2012-01-16 16:29:10 +0000</bug_when>
    <thetext>...since my last comment, virtuoso is at 99.4% of my CPU.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215168</commentid>
    <comment_count>111</comment_count>
    <who name="Martin L ü c h e m">Heinrich20</who>
    <bug_when>2012-01-16 17:57:13 +0000</bug_when>
    <thetext>Hi all,

Directly translated from German we would say: &quot;I am loosing all my hopes for KDE&quot;

Ok, sorry, not very quailfied! But anyway I wonder what really happens in this area. I am working with a 4 years old dual-core Notebook and this problem really hurts. But Edney&apos;s machine is much faster and the system brings the machine down anyway. Is this system design or the rollout strategy for virtuoso, nepomuk, akonadi and all the rest of this nicely designed system framework?

Regards, Martin
-------- Original-Nachricht --------
&gt; Datum: Mon, 16 Jan 2012 16:29:12 +0000
&gt; Von: Edney Matias &lt;edneymatias@gmail.com&gt;
&gt; An: Heinrich20@gmx.de
&gt; Betreff: [Bug 246678] virtuoso: Usage of CPU is much too high

&gt; https://bugs.kde.org/show_bug.cgi?id=246678
&gt; 
&gt; 
&gt; 
&gt; 
&gt; 
&gt; --- Comment #110 from Edney Matias &lt;edneymatias gmail com&gt;  2012-01-16
&gt; 16:29:10 ---
&gt; ...since my last comment, virtuoso is at 99.4% of my CPU.
&gt; 
&gt; -- 
&gt; Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email
&gt; ------- You are receiving this mail because: -------
&gt; You reported the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215183</commentid>
    <comment_count>112</comment_count>
    <who name="S. Burmeister">sven.burmeister</who>
    <bug_when>2012-01-16 18:32:13 +0000</bug_when>
    <thetext>If you want to &quot;use&quot; nepomuk you have to remove its database from time to time. You will lose your tags etc. and you might have high CPU usage because it re-indexes all files – but at least that cpu usage ends at some point. And to be honest, nepomuk is of no use as desktop search anyway, compared to state-of-the-art desktop searches.

Sadly it happens very often that at some point or after an upgrade from KDE 4.x to 4.y virtuoso uses the cpu constantly, never comes to an end.

There are some hints at http://kdeatopensuse.wordpress.com/2011/11/09/debugging-nepomukvirtuosos-cpu-usage/ on how to debug.

But as I mentioned, the quickest way of getting around that buggy piece of software is to just remove its database from time to time. Does not sound nice and I wish it was different, but these issues have been around for years and are still not resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215187</commentid>
    <comment_count>113</comment_count>
    <who name="S. Burmeister">sven.burmeister</who>
    <bug_when>2012-01-16 18:37:14 +0000</bug_when>
    <thetext>Forgot the most important part:

As user issue rm -rf ~/.kde4/share/apps/nepomuk or use dolphin to remove that folder and get rid of all nepomuk data.

If you want to play nice you can disable nepomuk before doing so and re-enable it afterwards.

For some distros it might be ~/.kde/…

And BTW, please do not confuse nepomuk with akonadi which did not have years yet to stabilise and did in fact get quite stable within a short time and works very well in 4.8 – unlike nepomuk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215198</commentid>
    <comment_count>114</comment_count>
    <who name="Alejandro Nova">alejandronova</who>
    <bug_when>2012-01-16 19:04:35 +0000</bug_when>
    <thetext>@S.Burmeister: from my experience, there have been multiple super-bugs with Nepomuk, and now all of them lie in the Akonadi Nepomuk Feeder. Make the test; open akonadiconsole, disable the Akonadi Nepomuk Feeder and in all cases your CPU use will decrease to zero in a matter of minutes (if you have some files left to index, your HDD will get used, but Nepomuk will scale up and down quickly).

If there is a way to permanently disable the Akonadi Nepomuk Feeder, that would bring an end to all of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215203</commentid>
    <comment_count>115</comment_count>
    <who name="S. Burmeister">sven.burmeister</who>
    <bug_when>2012-01-16 19:10:24 +0000</bug_when>
    <thetext>Nope, sorry. The feeder did/does have its bugs but its not the sole/main cause of all nepomuk issues and virtuoso cpu hogging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215295</commentid>
    <comment_count>116</comment_count>
    <who name="Martin L ü c h e m">Heinrich20</who>
    <bug_when>2012-01-16 22:36:12 +0000</bug_when>
    <thetext>Hi Folks,

the Akonadi framework is the main reason for me to quit KMail. Sinse 
1999 I have been using KMail, most of the time I thought, this was one 
of the best mail clients to get. Easy to use and working!

But with KDE 4 and &quot;I don&apos;t now what&quot; corresponding version of PIM/KMail 
(4.?) the situation ended up getting catastrophically. Know I will move 
to thunderbird and one step further after more than ten years of using 
Linux/KDE might be to move to Windows 7. Not a fault of M$! I might 
leave a platform that I thought it really was an alternative one.

Regards, Martin

PS: Last bug I found was in kdewallet, ending up to become very slow. I 
wonder which application on my system really works.

m 16.01.2012 20:10, schrieb S. Burmeister:
&gt; https://bugs.kde.org/show_bug.cgi?id=246678
&gt;
&gt;
&gt;
&gt;
&gt;
&gt; --- Comment #115 from S. Burmeister&lt;sven burmeister gmx net&gt;   2012-01-16 19:10:24 ---
&gt; Nope, sorry. The feeder did/does have its bugs but its not the sole/main cause
&gt; of all nepomuk issues and virtuoso cpu hogging.
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215300</commentid>
    <comment_count>117</comment_count>
    <who name="S. Burmeister">sven.burmeister</who>
    <bug_when>2012-01-16 22:47:15 +0000</bug_when>
    <thetext>Please do not spam this bug with unrelated issues but only info that helps to fix or work around this bug!

Please do only quote text you refer to.

Akonadi/kwallet/whatsoever bugs belong into another bug report and everything OT belongs on some personal blog, forum or mailinglist but not the bug tracker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215312</commentid>
    <comment_count>118</comment_count>
    <who name="Martin L ü c h e m">Heinrich20</who>
    <bug_when>2012-01-16 23:19:16 +0000</bug_when>
    <thetext>Hi Sven,

would you kindly have a look at the history of this issue? I know what I 
did! I myself started this bug report! How long ago? Was this problem 
really solved? Maybe, maybe not! Noone looks at this situation from a 
global perspective that tells us that KDE really runs out of acceptance 
because if one bug is fixed two others are opened.

Maybe this is Spam and there is noone to be blamed because nowadays 
there are really not enough developers to solve all the problems that 
are the result of a ambitious project. A pity!

Martin

Am 16.01.2012 23:47, schrieb S. Burmeister:
&gt; https://bugs.kde.org/show_bug.cgi?id=246678
&gt;
&gt;
&gt;
&gt;
&gt;
&gt; --- Comment #117 from S. Burmeister&lt;sven burmeister gmx net&gt;   2012-01-16 22:47:15 ---
&gt; Please do not spam this bug with unrelated issues but only info that helps to
&gt; fix or work around this bug!
&gt;
&gt; Please do only quote text you refer to.
&gt;
&gt; Akonadi/kwallet/whatsoever bugs belong into another bug report and everything
&gt; OT belongs on some personal blog, forum or mailinglist but not the bug tracker.
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215314</commentid>
    <comment_count>119</comment_count>
    <who name="">richb1908</who>
    <bug_when>2012-01-16 23:30:43 +0000</bug_when>
    <thetext>Martin,
Yous is an editorial comment and does not further the solution of this problem. And I just editorialized again.

To get back on track, The suggestions made in an earlier post

echo 1 &gt; /sys/devices/system/cpu/cpufreq/ondemand/ignore_nice_load

Has &quot;corrected&apos; the problem for me in KDE 4.8 RC2. Corrected in quotes as it has prevented high cpu and overheating. Also the latest strigi, akonadi and soprano packages were not included in the upgrade to KDE that my distro provided and may just be a packaging issue. So it is still an open issue.

Let&apos;s give information to the developers that resolves the problem please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215316</commentid>
    <comment_count>120</comment_count>
    <who name="Edney Matias">edneymatias</who>
    <bug_when>2012-01-16 23:33:36 +0000</bug_when>
    <thetext>Hi there.

Writing to let you know that after many hours virtuoso now sit quite on my process list. This already happened before and an update to the system put it crazy again.

Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215326</commentid>
    <comment_count>121</comment_count>
    <who name="Alejandro Nova">alejandronova</who>
    <bug_when>2012-01-17 00:35:08 +0000</bug_when>
    <thetext>Basically this issue connects several bugs. Some of the most memorable ones are:

- Virtuoso being locked up with strigi, one core sleeping - killed with KDE 4.6.1.
- Various memory leaks, some with Virtuoso, some with nepomukstorage, and even some with dbus-daemon. The last one of those was fixed with Soprano 2.7.3.
- Virtuoso being locked up with akonadi-nepomuk-email-feeder, one core wasted. That one haunted KDE 4.7.x until ~4.7.4.
- Virtuoso being locked up with akonadi-nepomuk-feeder, one core wasted. That is the latest incarnation of this bug, and is what richb1908@gmail.com was experiencing.

All of these real issues were amplified by more downstream issues.

- Strigi lacks a real release policy. During most of 2010 and part of 2011, Debian shipped Strigi 0.7.2, an extremely buggy and ancient release.
- Akonadi and Soprano are not updated with KDE, in KDE dependent distros.

So, you can&apos;t really fix this, unless:

- You require a Virtuoso + Soprano + Akonadi + Strigi + Shared Desktop Ontologies stack, and maintain it with a KDE 4.x release cycle.
- You assign a real maintainer to akonadi-nepomuk-feeder (that package is somewhat orphan, unlike Nepomuk).
- You REQUIRE distros shipping KDE to UPDATE their packages. That can be made easily through CMakeFiles (if you ship KDE 4.8, then you must have certain versions of Soprano, Akonadi, Strigi and shared-desktop-ontologies)
- You MAKE a &quot;Update my Ontologies&quot; app like what Bangarang has. That&apos;s a necessity.

Once you have all of this sorted out, you can really begin with bug triaging and reporting. Reporting bugs without all of these requirements unmet will be a waste of time for the reporter and for the developer.

About the Nepomuk database erasing: if I read correctly Sebastian Trueg&apos;s blogs and dev history, KDE SC 4.8 is going to be the last release that will require erasing everything to work well. The Akonadi Nepomuk Feeder is fresh code, made with something called DMS (AFAIK, replacing hand tuned SQL queries with queries generated automatically)

Please, be more constructive about how to fix this. I really hate Nepomuk bugs, I really want the thing to work, but we won&apos;t get anywhere if we just kill the thing. Remember that Nepomuk is the very thing (WinFS) that Microsoft FAILED to implement, and Sebastian Trueg has made tremendous strides to do what  Microsoft failed to do, with no resources, and (as of late) with no money.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215425</commentid>
    <comment_count>122</comment_count>
    <who name="Martin L ü c h e m">Heinrich20</who>
    <bug_when>2012-01-17 08:55:12 +0000</bug_when>
    <thetext>Hi Alejandro,

thanks a lot for the information! Some of it I do understand, some I don&apos;t. I myself have the project lead in a commercial development project where not all the time I do understand the dependencies. The whole KDE 4.x - project, is there anyone who understands the dependencies and the release plan (if there is one)?

Talking about this issue: What shall we do, reopen it or keep it running in parallel?

Only someone who really understands how the different parts work together could track an issue like that. I myself do not have time and (no longer) patience to do so. 

I am a KDE/Linux user who tried to help but stopped writing bug reports because there are too many. I have no idea where to start and where this might end!

Regards, Martin
-------- Original-Nachricht --------
&gt; Datum: Tue, 17 Jan 2012 00:35:10 +0000
&gt; Von: Alejandro Nova &lt;alejandronova@gmail.com&gt;
&gt; An: Heinrich20@gmx.de
&gt; Betreff: [Bug 246678] virtuoso: Usage of CPU is much too high

&gt; https://bugs.kde.org/show_bug.cgi?id=246678
&gt; 
&gt; 
&gt; 
&gt; 
&gt; 
&gt; --- Comment #121 from Alejandro Nova &lt;alejandronova gmail com&gt;  2012-01-17
&gt; 00:35:08 ---
&gt; Basically this issue connects several bugs. Some of the most memorable
&gt; ones
&gt; are:
&gt; 
&gt; - Virtuoso being locked up with strigi, one core sleeping - killed with
&gt; KDE
&gt; 4.6.1.
&gt; - Various memory leaks, some with Virtuoso, some with nepomukstorage, and
&gt; even
&gt; some with dbus-daemon. The last one of those was fixed with Soprano 2.7.3.
&gt; - Virtuoso being locked up with akonadi-nepomuk-email-feeder, one core
&gt; wasted.
&gt; That one haunted KDE 4.7.x until ~4.7.4.
&gt; - Virtuoso being locked up with akonadi-nepomuk-feeder, one core wasted.
&gt; That
&gt; is the latest incarnation of this bug, and is what richb1908@gmail.com was
&gt; experiencing.
&gt; 
&gt; All of these real issues were amplified by more downstream issues.
&gt; 
&gt; - Strigi lacks a real release policy. During most of 2010 and part of
&gt; 2011,
&gt; Debian shipped Strigi 0.7.2, an extremely buggy and ancient release.
&gt; - Akonadi and Soprano are not updated with KDE, in KDE dependent distros.
&gt; 
&gt; So, you can&apos;t really fix this, unless:
&gt; 
&gt; - You require a Virtuoso + Soprano + Akonadi + Strigi + Shared Desktop
&gt; Ontologies stack, and maintain it with a KDE 4.x release cycle.
&gt; - You assign a real maintainer to akonadi-nepomuk-feeder (that package is
&gt; somewhat orphan, unlike Nepomuk).
&gt; - You REQUIRE distros shipping KDE to UPDATE their packages. That can be
&gt; made
&gt; easily through CMakeFiles (if you ship KDE 4.8, then you must have certain
&gt; versions of Soprano, Akonadi, Strigi and shared-desktop-ontologies)
&gt; - You MAKE a &quot;Update my Ontologies&quot; app like what Bangarang has. That&apos;s a
&gt; necessity.
&gt; 
&gt; Once you have all of this sorted out, you can really begin with bug
&gt; triaging
&gt; and reporting. Reporting bugs without all of these requirements unmet will
&gt; be a
&gt; waste of time for the reporter and for the developer.
&gt; 
&gt; About the Nepomuk database erasing: if I read correctly Sebastian Trueg&apos;s
&gt; blogs
&gt; and dev history, KDE SC 4.8 is going to be the last release that will
&gt; require
&gt; erasing everything to work well. The Akonadi Nepomuk Feeder is fresh code,
&gt; made
&gt; with something called DMS (AFAIK, replacing hand tuned SQL queries with
&gt; queries
&gt; generated automatically)
&gt; 
&gt; Please, be more constructive about how to fix this. I really hate Nepomuk
&gt; bugs,
&gt; I really want the thing to work, but we won&apos;t get anywhere if we just kill
&gt; the
&gt; thing. Remember that Nepomuk is the very thing (WinFS) that Microsoft
&gt; FAILED to
&gt; implement, and Sebastian Trueg has made tremendous strides to do what 
&gt; Microsoft failed to do, with no resources, and (as of late) with no money.
&gt; 
&gt; -- 
&gt; Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email
&gt; ------- You are receiving this mail because: -------
&gt; You reported the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215437</commentid>
    <comment_count>123</comment_count>
    <who name="S. Burmeister">sven.burmeister</who>
    <bug_when>2012-01-17 09:10:56 +0000</bug_when>
    <thetext>Martin, would you please stop quoting the full comment of somebody else!

Have a look at https://bugs.kde.org/show_bug.cgi?id=246678#c122 if you do not know what I&apos;m talking about!

If virtuoso shows high CPU usage you have to debug it, find the queries that causes the cpu usage etc. A start would be http://kdeatopensuse.wordpress.com/2011/11/09/debugging-nepomukvirtuosos-cpu-usage/ as already pointed out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215542</commentid>
    <comment_count>124</comment_count>
    <who name="Martin L ü c h e m">Heinrich20</who>
    <bug_when>2012-01-17 13:19:23 +0000</bug_when>
    <thetext>Sven, 

I can see, what you pointed out. This is, what happened within the GMX client and I did not take care about. Sorry for that! But anyway, when we start to discuss about quoting like that or not, the way we communicate has reached a quality that not at all helps to solve the problem.

Two things where I wonder, how to improve the situation out of the persepctive (=role) of a user:

1. Debugging as described by your link is far too complicated to make that happen by a user.

2. How an where would I start? When would I start debugging? Which application to debug first. This is not cynism, I do think this to be a real problem for users.

/Off-Topic
Even though we are &quot;only&quot; users of KDE/Linux we do a real hard job. We stay on a platform (in case of KDE 4.x) that is shipped with Ubuntu but is really far away from being stable. If e.g. I try to write bug reports I even run into problems with that because I  c a n n o t  describe the bug itself appearing in a very complex system environment that is far to complecated. See 1. So by the time you wonder what you could do and find out: nothing!
/

Regards, Martin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215554</commentid>
    <comment_count>125</comment_count>
    <who name="Edney Matias">edneymatias</who>
    <bug_when>2012-01-17 13:42:46 +0000</bug_when>
    <thetext>Hi there.

I tried to follow the instructions to debug the problem but couldn&apos;t find the isql-vt tool neither the package that contains it. I know it&apos;s a distribution problem, but it&apos;s just another one that sums up. Running Fedora 16 here.

Regards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215555</commentid>
    <comment_count>126</comment_count>
    <who name="Rex Dieter">rdieter</who>
    <bug_when>2012-01-17 13:52:47 +0000</bug_when>
    <thetext>on fedora, 
yum install virtuoso-opensource-utils

look in /usr/libexec/virtuoso/
for isql, isqlw, inifile

I&apos;m not sure what isql-tw is supposed to refer to, but I&apos;m guessing just the &apos;isql&apos; tool (maybe suse renamed it or something).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216082</commentid>
    <comment_count>127</comment_count>
    <who name="Edney Matias">edneymatias</who>
    <bug_when>2012-01-18 16:39:46 +0000</bug_when>
    <thetext>Hi there!

Trying to exec this line isql-vt -H localhost -P 1111 -U dba -P dba from the tutorial available here http://kdeatopensuse.wordpress.com/2011/11/09/debugging-nepomukvirtuosos-cpu-usage/ gives me that on Fedora 16:

[matias@padme ~]$ /usr/libexec/virtuoso/isql -H localhost -P 1114 -U dba -P dba

*** Error IM002: [iODBC][Driver Manager]Data source name not found and no default driver specified. Driver could not be loaded
at line 0 of Top-Level:

Any clues?

My virtuoso is crazy again after a restart on akonadi server from the control painel. :S

top command shows:

top - 14:38:57 up 2 days,  4:46,  3 users,  load average: 1.67, 1.59, 1.10
Tasks: 198 total,   2 running, 196 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.4%us,  1.0%sy, 49.6%ni, 46.6%id,  0.0%wa,  0.3%hi,  0.1%si,  0.0%st
Mem:   3943656k total,  3776300k used,   167356k free,    52392k buffers
Swap:  4194300k total,   340968k used,  3853332k free,   990336k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                    
 1704 matias    39  19 1514m 513m 3888 S 198.5 13.3 317:24.94 virtuoso-t 

Thank you</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216088</commentid>
    <comment_count>128</comment_count>
    <who name="Edney Matias">edneymatias</who>
    <bug_when>2012-01-18 16:52:25 +0000</bug_when>
    <thetext>two minutes after posting my last comment virtuoso shut my machine off! :S</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216105</commentid>
    <comment_count>129</comment_count>
    <who name="Rex Dieter">rdieter</who>
    <bug_when>2012-01-18 18:00:15 +0000</bug_when>
    <thetext>comment #127 highlights a problem in fedora&apos;s packaging that I&apos;m fixing now (we ship only the iodbc variants of these utilities, which apparently do not work in this context).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1216657</commentid>
    <comment_count>130</comment_count>
    <who name="Alejandro Nova">alejandronova</who>
    <bug_when>2012-01-20 00:20:53 +0000</bug_when>
    <thetext>@Edney Matias: Run the command I posted. It won&apos;t do anything about your Virtuoso problems, but it will protect your computer from overheating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229416</commentid>
    <comment_count>131</comment_count>
    <who name="Edney Matias">edneymatias</who>
    <bug_when>2012-02-22 12:54:30 +0000</bug_when>
    <thetext>Hi!

I&apos;m writing to let you know that virtuoso is fine now for a few days. I&apos;m running Fedora 16 and here are my versions:

[matias@padme ~]$ rpm -qa | grep virtuoso
redland-virtuoso-1.0.14-1.fc16.x86_64
virtuoso-opensource-6.1.4-4.fc16.x86_64
virtuoso-opensource-utils-6.1.4-4.fc16.x86_64

[matias@padme ~]$ rpm -qa | grep akonadi
kdepimlibs-akonadi-4.8.0-1.fc16.x86_64
pykde4-akonadi-4.8.0-1.fc16.x86_64
akonadi-1.7.0-1.fc16.x86_64

[matias@padme ~]$ rpm -qa | grep kdelibs
kdelibs-devel-4.8.0-1.fc16.x86_64
kdelibs-common-4.8.0-1.fc16.x86_64
kdelibs-4.8.0-1.fc16.x86_64

[matias@padme ~]$ rpm -qa | grep kde-workspace
kde-workspace-4.8.0-7.fc16.x86_64
kde-workspace-libs-4.8.0-7.fc16.x86_64
kde-workspace-devel-4.8.0-7.fc16.x86_64

Anything else?

Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229575</commentid>
    <comment_count>132</comment_count>
    <who name="Alejandro Nova">alejandronova</who>
    <bug_when>2012-02-22 22:01:48 +0000</bug_when>
    <thetext>kde-runtime-4.8.0-3 ;)

Check for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1412782</commentid>
    <comment_count>133</comment_count>
    <who name="Maxim">ya.maxis11</who>
    <bug_when>2013-11-19 20:29:52 +0000</bug_when>
    <thetext>virtuoso-t eats 50% of cpu in 4.11.2 and in dmesg

[39851.714273] virtuoso-t[12371]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f4b143aad50 error 7 in virtuoso-t[400000+b09000]
[39861.327093] virtuoso-t[12388]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f840fddbd50 error 7 in virtuoso-t[400000+b09000]
[39872.752638] virtuoso-t[12416]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f501f336d50 error 7 in virtuoso-t[400000+b09000]
[39882.341785] virtuoso-t[12452]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f538e8fdd50 error 7 in virtuoso-t[400000+b09000]
[39894.538014] virtuoso-t[12691]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007fb4dc1c8d50 error 7 in virtuoso-t[400000+b09000]
[39904.505139] virtuoso-t[12728]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f42807ebd50 error 7 in virtuoso-t[400000+b09000]
[39914.684411] virtuoso-t[12773]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f9af605ad50 error 7 in virtuoso-t[400000+b09000]
[39924.794001] virtuoso-t[12800]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f0df1aaad50 error 7 in virtuoso-t[400000+b09000]
[39934.491591] virtuoso-t[12837]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007fc61eabdd50 error 7 in virtuoso-t[400000+b09000]
[39944.314952] virtuoso-t[12853]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f724b51bd50 error 7 in virtuoso-t[400000+b09000]
[39953.429060] virtuoso-t[12881]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007fecb1702d50 error 7 in virtuoso-t[400000+b09000]
[39962.463541] virtuoso-t[12910]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f21cf69dd50 error 7 in virtuoso-t[400000+b09000]
[39972.012866] virtuoso-t[12932]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f11b9f3bd50 error 7 in virtuoso-t[400000+b09000]
[39982.649058] virtuoso-t[12971]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007fce9a230d50 error 7 in virtuoso-t[400000+b09000]
[39991.769957] virtuoso-t[12992]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007fe2aa716d50 error 7 in virtuoso-t[400000+b09000]
[40002.143040] virtuoso-t[13026]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007fc1e09b4d50 error 7 in virtuoso-t[400000+b09000]
[40012.900378] virtuoso-t[13057]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007fed11668d50 error 7 in virtuoso-t[400000+b09000]
[40022.103676] virtuoso-t[13091]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f7dbf637d50 error 7 in virtuoso-t[400000+b09000]
[40032.376944] virtuoso-t[13130]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f70b8d63d50 error 7 in virtuoso-t[400000+b09000]
[40042.807790] virtuoso-t[13146]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f9d3a718d50 error 7 in virtuoso-t[400000+b09000]
[40052.312900] virtuoso-t[13173]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f3d6dd58d50 error 7 in virtuoso-t[400000+b09000]
[40062.013635] virtuoso-t[13203]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f857cea9d50 error 7 in virtuoso-t[400000+b09000]
[40073.095813] virtuoso-t[13241]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007fddd00f0d50 error 7 in virtuoso-t[400000+b09000]
[40084.440517] virtuoso-t[13273]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007fbf66733d50 error 7 in virtuoso-t[400000+b09000]
[40096.103124] virtuoso-t[13300]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f3f60af0d50 error 7 in virtuoso-t[400000+b09000]
[40107.109641] virtuoso-t[13335]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f711a1e4d50 error 7 in virtuoso-t[400000+b09000]
[40116.487367] virtuoso-t[13379]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f7479bc7d50 error 7 in virtuoso-t[400000+b09000]
[40126.086257] virtuoso-t[13414]: segfault at ffffffffffffffff ip 0000000000939d75 sp 00007f25baabbd50 error 7 in virtuoso-t[400000+b09000]</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56212</attachid>
            <date>2011-01-20 09:46:51 +0000</date>
            <delta_ts>2011-01-20 20:11:31 +0000</delta_ts>
            <desc>Patch 1/2 kdelibs patch by trueg </desc>
            <filename>kdelibs_bko246678.diff</filename>
            <type>text/plain</type>
            <size>33344</size>
            <attacher name="Will Stephenson">wstephenson</attacher>
            
              <data encoding="base64">SW5kZXg6IGtkZWxpYnMvbmVwb211ay90ZXN0L3F1ZXJ5dGVzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2RlbGlicy9uZXBvbXVrL3Rlc3QvcXVlcnl0ZXN0LmNwcAkocmV2aXNpb24gMTIxNTcwNSkKKysr
IGtkZWxpYnMvbmVwb211ay90ZXN0L3F1ZXJ5dGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
OCwxNyArMTI4LDEzIEBACiAKICAgICBRVGVzdDo6bmV3Um93KCAidHlwZSBxdWVyeSIgKQogICAg
ICAgICA8PCBRdWVyeSggUmVzb3VyY2VUeXBlVGVybSggU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFP
OjpUYWcoKSApICkKLSAgICAgICAgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0IGRpc3Rp
bmN0ID9yIHdoZXJlIHsgP3IgYSA/djEgLiA/djEgJTEgJTIgLiB9IikKLSAgICAgICAgLmFyZyhT
b3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3Vi
Q2xhc3NPZigpKSkKKyAgICAgICAgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0IGRpc3Rp
bmN0ID9yIHdoZXJlIHsgP3IgYSAlMSAuIH0iKQogICAgICAgICAuYXJnKFNvcHJhbm86Ok5vZGU6
OnJlc291cmNlVG9OMyhTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OlRhZygpKSk7CiAKICAgICBR
VGVzdDo6bmV3Um93KCAibmVnYXRlZCByZXNvdXJjZSB0eXBlIiApCiAgICAgICAgIDw8IFF1ZXJ5
KCBOZWdhdGlvblRlcm06Om5lZ2F0ZVRlcm0oIFJlc291cmNlVHlwZVRlcm0oIFNvcHJhbm86OlZv
Y2FidWxhcnk6Ok5BTzo6VGFnKCkgKSApICkKLSAgICAgICAgPDwgUVN0cmluZzo6ZnJvbUxhdGlu
MSgic2VsZWN0IGRpc3RpbmN0ID9yIHdoZXJlIHsgeyBGSUxURVIoIWJpZjpleGlzdHMoKHNlbGVj
dCAoMSkgd2hlcmUgeyA/ciBhID92MSAuID92MSAlMSAlMiAuIH0pKSkgLiAiCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIj9yICUzID92MiAuIH0gLiB9IikKLSAgICAgICAgLmFyZyhT
b3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3Vi
Q2xhc3NPZigpKSwKLSAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoU29w
cmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjpUYWcoKSksCi0gICAgICAgICAgICAgU29wcmFubzo6Tm9k
ZTo6cmVzb3VyY2VUb04zKFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpKSk7CisgICAg
ICAgIDw8IFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCBkaXN0aW5jdCA/ciB3aGVyZSB7ID9y
IGEgP3YxIC4gRklMVEVSKCFiaWY6ZXhpc3RzKChzZWxlY3QgKDEpIHdoZXJlIHsgP3IgYSAlMSAu
IH0pKSkgLiB9IikKKyAgICAgICAgICAgLmFyZyhTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMo
U29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjpUYWcoKSkpOwogCiAgICAgUURhdGVUaW1lIG5vdyA9
IFFEYXRlVGltZTo6Y3VycmVudERhdGVUaW1lKCk7CiAgICAgUVRlc3Q6Om5ld1JvdyggIm5pZTps
YXN0TW9kaWZpZWQiICkKQEAgLTE2MSwxMCArMTU3LDggQEAKIAogICAgIFFUZXN0OjpuZXdSb3co
ICJuZWdhdGVkIGhhc3RhZyB3aXRoIHJlc291cmNlIiApCiAgICAgICAgIDw8IFF1ZXJ5KCBOZWdh
dGlvblRlcm06Om5lZ2F0ZVRlcm0oQ29tcGFyaXNvblRlcm0oIFNvcHJhbm86OlZvY2FidWxhcnk6
Ok5BTzo6aGFzVGFnKCksIFJlc291cmNlVGVybSggUVVybCgibmVwb211azovcmVzL2Zvb2JhciIp
ICkgKSkpCi0gICAgICAgIDw8IFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCBkaXN0aW5jdCA/
ciB3aGVyZSB7IHsgRklMVEVSKCFiaWY6ZXhpc3RzKChzZWxlY3QgKDEpIHdoZXJlIHsgP3IgJTEg
PG5lcG9tdWs6L3Jlcy9mb29iYXI+IC4gfSkpKSAuICIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiP3IgJTIgP3YxIC4gfSAuIH0iKQotICAgICAgICAuYXJnKFNvcHJhbm86Ok5vZGU6
OnJlc291cmNlVG9OMyhTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86Omhhc1RhZygpKSwKLSAgICAg
ICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCkpKTsKKyAgICAgICAgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0IGRp
c3RpbmN0ID9yIHdoZXJlIHsgP3IgYSA/djEgLiBGSUxURVIoIWJpZjpleGlzdHMoKHNlbGVjdCAo
MSkgd2hlcmUgeyA/ciAlMSA8bmVwb211azovcmVzL2Zvb2Jhcj4gLiB9KSkpIC4gfSIpCisgICAg
ICAgICAgIC5hcmcoU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKFNvcHJhbm86OlZvY2FidWxh
cnk6Ok5BTzo6aGFzVGFnKCkpKTsKIAogICAgIFFUZXN0OjpuZXdSb3coICJjb21wYXJhdG9ycyA8
IiApCiAgICAgICAgIDw8IFF1ZXJ5KCBDb21wYXJpc29uVGVybSggU29wcmFubzo6Vm9jYWJ1bGFy
eTo6TkFPOjpudW1lcmljUmF0aW5nKCksIExpdGVyYWxUZXJtKDQpLCBDb21wYXJpc29uVGVybTo6
U21hbGxlciApICkKQEAgLTIxNyw5ICsyMTEsOCBAQAogICAgIHNldFZhck5hbWVUZXJtMS5zZXRW
YXJpYWJsZU5hbWUoIm15dmFyIik7CiAgICAgUVRlc3Q6Om5ld1JvdyggInNldCB2YXJpYWJsZSBu
YW1lIDEiICkKICAgICAgICAgPDwgUXVlcnkoIHNldFZhck5hbWVUZXJtMSApCi0gICAgICAgIDw8
IFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCBkaXN0aW5jdCA/ciA/bXl2YXIgd2hlcmUgeyA/
ciAlMSA/bXl2YXIgLiA/bXl2YXIgYSA/djEgLiA/djEgJTIgJTMgLiB9IikKKyAgICAgICAgPDwg
UVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0IGRpc3RpbmN0ID9yID9teXZhciB3aGVyZSB7ID9y
ICUxID9teXZhciAuID9teXZhciBhICUyIC4gfSIpCiAgICAgICAgIC5hcmcoU29wcmFubzo6Tm9k
ZTo6cmVzb3VyY2VUb04zKFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6aGFzVGFnKCkpLAotICAg
ICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyhTb3ByYW5vOjpWb2NhYnVsYXJ5
OjpSREZTOjpzdWJDbGFzc09mKCkpLAogICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291
cmNlVG9OMyhTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OlRhZygpKSk7CiAKICAgICBDb21wYXJp
c29uVGVybSBzZXRWYXJOYW1lVGVybTIoIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6aGFzVGFn
KCksIExpdGVyYWxUZXJtKCAibmVwb211ayIgKSApOwpAQCAtMzUyLDYgKzM0NSwxOSBAQAogICAg
ICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoTmVwb211azo6Vm9jYWJ1bGFy
eTo6TkZPOjpGb2xkZXIoKSksCiAgICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291cmNl
VG9OMyhOZXBvbXVrOjpWb2NhYnVsYXJ5OjpORk86OkZpbGVEYXRhT2JqZWN0KCkpICk7CiAKKwor
ICAgIFFUZXN0OjpuZXdSb3coICJRdWVyeSBvbmUgcmVzb3VyY2UiICkKKyAgICAgICAgICAgIDw8
IFF1ZXJ5KFJlc291cmNlVGVybShRVXJsKCJuZXBvbXVrOi9BIikpKQorICAgICAgICAgICAgPDwg
UVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0IGRpc3RpbmN0ID9yIHdoZXJlIHsgP3IgYSA/djEg
LiBGSUxURVIoP3I9PG5lcG9tdWs6L0E+KSAuIH0iKTsKKworICAgIFFUZXN0OjpuZXdSb3coICJR
dWVyeSBzZXZlcmFsIHJlc291cmNlcyByZXNvdXJjZSIgKQorICAgICAgICAgICAgPDwgUXVlcnko
T3JUZXJtKFJlc291cmNlVGVybShRVXJsKCJuZXBvbXVrOi9BIikpLCBSZXNvdXJjZVRlcm0oUVVy
bCgibmVwb211azovQiIpKSwgUmVzb3VyY2VUZXJtKFFVcmwoIm5lcG9tdWs6L0MiKSkpKQorICAg
ICAgICAgICAgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0IGRpc3RpbmN0ID9yIHdoZXJl
IHsgeyA/ciBhID92MSAuIEZJTFRFUig/cj08bmVwb211azovQT4pIC4gfSBVTklPTiB7ID9yIGEg
P3YyIC4gRklMVEVSKD9yPTxuZXBvbXVrOi9CPikgLiB9IFVOSU9OIHsgP3IgYSA/djMgLiBGSUxU
RVIoP3I9PG5lcG9tdWs6L0M+KSAuIH0gLiB9Iik7CisKKyAgICBRVGVzdDo6bmV3Um93KCAiUG9p
bnRsZXNzIGJ1dCBjb3JyZWN0OiBRdWVyeSBzZXZlcmFsIHJlc291cmNlcyByZXNvdXJjZSAyIiAp
CisgICAgICAgICAgICA8PCBRdWVyeShBbmRUZXJtKFJlc291cmNlVGVybShRVXJsKCJuZXBvbXVr
Oi9BIikpLCBSZXNvdXJjZVRlcm0oUVVybCgibmVwb211azovQiIpKSwgUmVzb3VyY2VUZXJtKFFV
cmwoIm5lcG9tdWs6L0MiKSkpKQorICAgICAgICAgICAgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgi
c2VsZWN0IGRpc3RpbmN0ID9yIHdoZXJlIHsgeyA/ciBhID92MSAuIEZJTFRFUig/cj08bmVwb211
azovQT4pIC4gP3IgYSA/djIgLiBGSUxURVIoP3I9PG5lcG9tdWs6L0I+KSAuID9yIGEgP3YzIC4g
RklMVEVSKD9yPTxuZXBvbXVrOi9DPikgLiB9IC4gfSIpOworCiAgICAgLy8KICAgICAvLyBBIG1v
cmUgY29tcGxleCBleGFtcGxlCiAgICAgLy8KQEAgLTM3NSwxMiArMzgxLDExIEBACiAKICAgICBt
YWluVGVybS5hZGRTdWJUZXJtKGN0LmludmVydGVkKCkpOwogCi0gICAgUVN0cmluZyBzcGFycWwg
PSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgZGlzdGluY3QgP3IgY291bnQoP3Y1KSBhcyA/
Y250IHdoZXJlIHsgeyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ7ID9yIGEgP3YxIC4gP3YxICUxICUyIC4gfSBVTklPTiB7ID9yIGEgP3YyIC4gP3YyICUxICUz
IC4gfSAuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZJTFRF
UighYmlmOmV4aXN0cygoc2VsZWN0ICgxKSB3aGVyZSB7IDxuZXBvbXVrOi9yZXMvZm9vYmFyPiA/
djMgP3IgLiB9KSkpIC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiP3Y1ID92NCA/ciAuIH0gLiB9IE9SREVSIEJZIERFU0MgKCA/Y250ICkiKQotICAgICAgICAg
ICAgICAgICAgICAgLmFyZyhTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
U29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKE5lcG9tdWs6OlZvY2FidWxhcnk6Ok5GTzo6UmFz
dGVySW1hZ2UoKSksCisgICAgUVN0cmluZyBzcGFycWwgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJz
ZWxlY3QgZGlzdGluY3QgP3IgY291bnQoP3YzKSBhcyA/Y250IHdoZXJlIHsgeyAiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7ID9yIGEgJTEgLiB9IFVOSU9OIHsg
P3IgYSAlMiAuIH0gLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJGSUxURVIoIWJpZjpleGlzdHMoKHNlbGVjdCAoMSkgd2hlcmUgeyA8bmVwb211azovcmVzL2Zv
b2Jhcj4gP3YxID9yIC4gfSkpKSAuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIj92MyA/djIgP3IgLiB9IC4gfSBPUkRFUiBCWSBERVNDICggP2NudCApIikKKyAg
ICAgICAgICAgICAgICAgICAgIC5hcmcoU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKE5lcG9t
dWs6OlZvY2FidWxhcnk6Ok5GTzo6UmFzdGVySW1hZ2UoKSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyhOZXBvbXVrOjpWb2NhYnVsYXJ5OjpO
Rk86OkF1ZGlvKCkpKTsKIAogICAgIFFUZXN0OjpuZXdSb3coICJhIGNvbXBsZXggb25lIiApCklu
ZGV4OiBrZGVsaWJzL25lcG9tdWsvcXVlcnkvb3B0aW9uYWx0ZXJtX3AuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrZGVsaWJzL25lcG9tdWsvcXVlcnkvb3B0aW9uYWx0ZXJtX3AuaAkocmV2aXNpb24gMTIxNTcw
NSkKKysrIGtkZWxpYnMvbmVwb211ay9xdWVyeS9vcHRpb25hbHRlcm1fcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw3ICszNSw3IEBACiAKICAgICAgICAgICAgIFRlcm1Qcml2YXRlKiBjbG9uZSgp
IGNvbnN0IHsgcmV0dXJuIG5ldyBPcHRpb25hbFRlcm1Qcml2YXRlKCAqdGhpcyApOyB9CiAKLSAg
ICAgICAgICAgIFFTdHJpbmcgdG9TcGFycWxHcmFwaFBhdHRlcm4oIGNvbnN0IFFTdHJpbmcmIHJl
c291cmNlVmFyTmFtZSwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkgY29uc3Q7CisgICAgICAgICAg
ICBRU3RyaW5nIHRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZh
ck5hbWUsIGNvbnN0IFRlcm1Qcml2YXRlKiBwYXJlbnRUZXJtLCBRdWVyeUJ1aWxkZXJEYXRhKiBx
YmQgKSBjb25zdDsKICAgICAgICAgfTsKICAgICB9CiB9CkluZGV4OiBrZGVsaWJzL25lcG9tdWsv
cXVlcnkvY29tcGFyaXNvbnRlcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtkZWxpYnMvbmVwb211ay9x
dWVyeS9jb21wYXJpc29udGVybS5jcHAJKHJldmlzaW9uIDEyMTU3MDUpCisrKyBrZGVsaWJzL25l
cG9tdWsvcXVlcnkvY29tcGFyaXNvbnRlcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsOCAr
MTA2LDEwIEBACiAgICAgICAgIHJldHVybiBOZXBvbXVrOjpRdWVyeTo6Q29tcGFyaXNvblRlcm06
OkNvbnRhaW5zOwogfQogCi1RU3RyaW5nIE5lcG9tdWs6OlF1ZXJ5OjpDb21wYXJpc29uVGVybVBy
aXZhdGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZhck5h
bWUsIFF1ZXJ5QnVpbGRlckRhdGEqIHFiZCApIGNvbnN0CitRU3RyaW5nIE5lcG9tdWs6OlF1ZXJ5
OjpDb21wYXJpc29uVGVybVByaXZhdGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3Ry
aW5nJiByZXNvdXJjZVZhck5hbWUsIGNvbnN0IFRlcm1Qcml2YXRlKiBwYXJlbnRUZXJtLCBRdWVy
eUJ1aWxkZXJEYXRhKiBxYmQgKSBjb25zdAogeworICAgIFFfVU5VU0VEKHBhcmVudFRlcm0pOwor
CiAgICAgLy8KICAgICAvLyAxLiBwcm9wZXJ0eSByYW5nZTogbGl0ZXJhbAogICAgIC8vIDEuMS4g
b3BlcmF0b3IgPQpAQCAtMjYwLDEzICsyNjIsMTMgQEAKICAgICAgICAgfQogICAgICAgICBlbHNl
IGlmICggbV9zdWJUZXJtLmlzUmVzb3VyY2VUZXJtKCkgKSB7CiAgICAgICAgICAgICAvLyA/ciA8
cHJvcD4gPHJlcz4KLSAgICAgICAgICAgIHJldHVybiBjb3JlUGF0dGVybi5hcmcoIG1fc3ViVGVy
bS5kX3B0ci0+dG9TcGFycWxHcmFwaFBhdHRlcm4oIHJlc291cmNlVmFyTmFtZSwgcWJkICkgKTsK
KyAgICAgICAgICAgIHJldHVybiBjb3JlUGF0dGVybi5hcmcoIFNvcHJhbm86Ok5vZGU6OnJlc291
cmNlVG9OMyhtX3N1YlRlcm0udG9SZXNvdXJjZVRlcm0oKS5yZXNvdXJjZSgpLnJlc291cmNlVXJp
KCkpICk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyA/ciA8cHJv
cD4gP3YxIC4gP3YxIC4uLgogICAgICAgICAgICAgUVN0cmluZyB2ID0gZ2V0TWFpblZhcmlhYmxl
TmFtZShxYmQpOwogICAgICAgICAgICAgcWJkLT5pbmNyZWFzZURlcHRoKCk7Ci0gICAgICAgICAg
ICBRU3RyaW5nIHN1YlRlcm1TcGFycWwgPSBtX3N1YlRlcm0uZF9wdHItPnRvU3BhcnFsR3JhcGhQ
YXR0ZXJuKCB2LCBxYmQgKTsKKyAgICAgICAgICAgIFFTdHJpbmcgc3ViVGVybVNwYXJxbCA9IG1f
c3ViVGVybS5kX3B0ci0+dG9TcGFycWxHcmFwaFBhdHRlcm4oIHYsIHRoaXMsIHFiZCApOwogICAg
ICAgICAgICAgcWJkLT5kZWNyZWFzZURlcHRoKCk7CiAgICAgICAgICAgICByZXR1cm4gY29yZVBh
dHRlcm4uYXJnKHYpICsgc3ViVGVybVNwYXJxbDsKICAgICAgICAgfQpJbmRleDoga2RlbGlicy9u
ZXBvbXVrL3F1ZXJ5L3Jlc291cmNldGVybV9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2RlbGlicy9uZXBv
bXVrL3F1ZXJ5L3Jlc291cmNldGVybV9wLmgJKHJldmlzaW9uIDEyMTU3MDUpCisrKyBrZGVsaWJz
L25lcG9tdWsvcXVlcnkvcmVzb3VyY2V0ZXJtX3AuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsNyBAQAogCiAgICAgICAgICAgICBib29sIGVxdWFscyggY29uc3QgVGVybVByaXZhdGUqIG90
aGVyICkgY29uc3Q7CiAgICAgICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBt
X3Jlc291cmNlLmlzVmFsaWQoKTsgfQotICAgICAgICAgICAgUVN0cmluZyB0b1NwYXJxbEdyYXBo
UGF0dGVybiggY29uc3QgUVN0cmluZyYgcmVzb3VyY2VWYXJOYW1lLCBRdWVyeUJ1aWxkZXJEYXRh
KiBxYmQgKSBjb25zdDsKKyAgICAgICAgICAgIFFTdHJpbmcgdG9TcGFycWxHcmFwaFBhdHRlcm4o
IGNvbnN0IFFTdHJpbmcmIHJlc291cmNlVmFyTmFtZSwgY29uc3QgVGVybVByaXZhdGUqIHBhcmVu
dFRlcm0sIFF1ZXJ5QnVpbGRlckRhdGEqIHFiZCApIGNvbnN0OwogCiAgICAgICAgICAgICBSZXNv
dXJjZSBtX3Jlc291cmNlOwogICAgICAgICB9OwpJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1ZXJ5
L3F1ZXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrZGVsaWJzL25lcG9tdWsvcXVlcnkvcXVlcnkuY3Bw
CShyZXZpc2lvbiAxMjE1NzA1KQorKysga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L3F1ZXJ5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzAsMTIxICs3MCw2IEBACiAqLwogCiAKLW5hbWVzcGFjZSB7Ci0g
ICAgTmVwb211azo6UXVlcnk6OlRlcm0gcHJlcGFyZUZvclNwYXJxbCggY29uc3QgTmVwb211azo6
UXVlcnk6OlRlcm0mIHRlcm0gKQotICAgIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQSBuZWdh
dGlvbiBpcyBleHByZXNzZWQgdmlhIGEgZmlsdGVyLiBTaW5jZSBmaWx0ZXJzIGNhbiBvbmx5IHdv
cmsgb24gYSAicmVhbCIgZ3JhcGggcGF0dGVybgotICAgICAgICAvLyB3ZSBuZWVkIHRvIG1ha2Ug
c3VyZSB0aGF0IHN1Y2ggYSBwYXR0ZXJuIGV4aXN0cy4gVGhpcyBjYW4gYmUgZG9uZSBieSBzZWFy
Y2hpbmcgb25lIGluIGEKLSAgICAgICAgLy8gc3Vycm91bmRpbmcgYW5kIHRlcm0uCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIFdoeSBpcyB0aGF0IGVub3VnaD8KLSAgICAgICAgLy8gTmVzdGVkIEFu
ZFRlcm1zIGFyZSBmbGF0dGVuZWQgYmVmb3JlIHRoZSBTUEFSUUwgcXVlcnkgaXMgY29uc3RydWN0
ZWQgaW4gUXVlcnkuIFRodXMsIGFuIEFuZFRlcm0gY2FuCi0gICAgICAgIC8vIG9ubHkgYmUgZW1i
ZWRkZWQgaW4gYW4gT3JUZXJtIG9yIGFzIGEgY2hpbGQgdGVybSB0byBlaXRoZXIgYSBDb21wYXJp
c29uVGVybSBvciBhbiBPcHRpb25hbFRlcm0uCi0gICAgICAgIC8vIEluIGJvdGggY2FzZXMgd2Ug
bmVlZCBhIHJlYWwgcGF0dGVybiBpbnNpZGUgdGhlIEFuZFRlcm0uCi0gICAgICAgIC8vCi0gICAg
ICAgIC8vIFdlIHVzZSBhIHR5cGUgcGF0dGVybiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gVGh1
cywgd2UgYXNzdW1lIHRoYXQgZWFjaCByZXNvdXJjZSBoYXMgYSB0eXBlLiBUaGlzCi0gICAgICAg
IC8vIGlzIG5vdCBwZXJmZWN0IGJ1dCBtdWNoIGZhc3RlciB0aGFuIHVzaW5nIGEgd2lsZGNhcmQg
Zm9yIHRoZSBwcm9wZXJ0eS4gQW5kIGluIHRoZSBlbmQgYWxsIE5lcG9tdWsKLSAgICAgICAgLy8g
cmVzb3VyY2VzIHNob3VsZCBoYXZlIGEgcHJvcGVybHkgZGVmaW5lZCB0eXBlLgotICAgICAgICAv
LwotCi0gICAgICAgIHN3aXRjaCggdGVybS50eXBlKCkgKSB7Ci0gICAgICAgIGNhc2UgTmVwb211
azo6UXVlcnk6OlRlcm06OkFuZDogewotICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJl
IG5lZ2F0aW9uIHRlcm1zIHdpdGhvdXQgcHJvcGVyIHBhdHRlcm5zCi0gICAgICAgICAgICBOZXBv
bXVrOjpRdWVyeTo6QW5kVGVybSBhdCA9IHRlcm0udG9BbmRUZXJtKCk7Ci0gICAgICAgICAgICBO
ZXBvbXVrOjpRdWVyeTo6QW5kVGVybSBuZXdBbmRUZXJtOwotICAgICAgICAgICAgYm9vbCBoYXZl
TmVnYXRpb25UZXJtID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhdmVSZWFsVGVybSA9IGZh
bHNlOwotICAgICAgICAgICAgUV9GT1JFQUNIKCBjb25zdCBOZXBvbXVrOjpRdWVyeTo6VGVybSYg
dGVybSwgYXQuc3ViVGVybXMoKSApIHsKLSAgICAgICAgICAgICAgICBpZiggdGVybS5pc05lZ2F0
aW9uVGVybSgpICkgewotICAgICAgICAgICAgICAgICAgICBoYXZlTmVnYXRpb25UZXJtID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgbmV3QW5kVGVybS5hZGRTdWJUZXJtKCB0ZXJtICk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBpZiggdGVybS5pc0NvbXBhcmlzb25UZXJtKCkgfHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRlcm0uaXNSZXNvdXJjZVR5cGVUZXJtKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRlcm0uaXNMaXRlcmFsVGVybSgpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZVJl
YWxUZXJtID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBuZXdBbmRUZXJtLmFkZFN1YlRlcm0oIHByZXBhcmVGb3JTcGFycWwoIHRlcm0gKSApOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKCBoYXZlTmVnYXRp
b25UZXJtICYmICFoYXZlUmVhbFRlcm0gKSB7Ci0gICAgICAgICAgICAgICAgbmV3QW5kVGVybS5h
ZGRTdWJUZXJtKCBOZXBvbXVrOjpRdWVyeTo6Q29tcGFyaXNvblRlcm0oIFNvcHJhbm86OlZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpLCBOZXBvbXVrOjpRdWVyeTo6VGVybSgpICkgKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiBuZXdBbmRUZXJtOwotICAgICAgICB9Ci0KLSAgICAg
ICAgY2FzZSBOZXBvbXVrOjpRdWVyeTo6VGVybTo6T3I6IHsKLSAgICAgICAgICAgIC8vIGNhbGwg
cHJlcGFyZUZvclNwYXJxbCBvbiBhbGwgc3VidGVybXMKLSAgICAgICAgICAgIFFMaXN0PE5lcG9t
dWs6OlF1ZXJ5OjpUZXJtPiBzdWJUZXJtcyA9IHRlcm0udG9PclRlcm0oKS5zdWJUZXJtcygpOwot
ICAgICAgICAgICAgUUxpc3Q8TmVwb211azo6UXVlcnk6OlRlcm0+IG5ld1N1YlRlcm1zOwotICAg
ICAgICAgICAgUV9GT1JFQUNIKCBjb25zdCBOZXBvbXVrOjpRdWVyeTo6VGVybSYgdGVybSwgc3Vi
VGVybXMgKSB7Ci0gICAgICAgICAgICAgICAgbmV3U3ViVGVybXMuYXBwZW5kKCBwcmVwYXJlRm9y
U3BhcnFsKCB0ZXJtICkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBOZXBv
bXVrOjpRdWVyeTo6T3JUZXJtKCBuZXdTdWJUZXJtcyApOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FzZSBOZXBvbXVrOjpRdWVyeTo6VGVybTo6TmVnYXRpb246IHsKLSAgICAgICAgICAgIC8vIGFk
ZCBhbiBhZGRpdGlvbmFsIHR5cGUgdGVybSBzaW5jZSB0aGVyZSBpcyBubyB1c2VmdWwgcGF0dGVy
bi4gT3RoZXJ3aXNlCi0gICAgICAgICAgICAvLyB3ZSB3b3VsZCBoYXZlIGNhdWdodCBpdCBhYm92
ZQotICAgICAgICAgICAgcmV0dXJuIE5lcG9tdWs6OlF1ZXJ5OjpBbmRUZXJtKAotICAgICAgICAg
ICAgICAgIHRlcm0sCi0gICAgICAgICAgICAgICAgTmVwb211azo6UXVlcnk6OkNvbXBhcmlzb25U
ZXJtKCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgTmVwb211azo6UXVlcnk6OlRl
cm0oKSApICk7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIE5lcG9tdWs6OlF1ZXJ5OjpUZXJt
OjpPcHRpb25hbDogewotICAgICAgICAgICAgcmV0dXJuIE5lcG9tdWs6OlF1ZXJ5OjpPcHRpb25h
bFRlcm06Om9wdGlvbmFsaXplVGVybSggcHJlcGFyZUZvclNwYXJxbCggdGVybS50b09wdGlvbmFs
VGVybSgpLnN1YlRlcm0oKSApICk7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIE5lcG9tdWs6
OlF1ZXJ5OjpUZXJtOjpDb21wYXJpc29uOiB7Ci0gICAgICAgICAgICBOZXBvbXVrOjpRdWVyeTo6
Q29tcGFyaXNvblRlcm0gY3QgPSB0ZXJtLnRvQ29tcGFyaXNvblRlcm0oKTsKLSAgICAgICAgICAg
IGN0LnNldFN1YlRlcm0oIHByZXBhcmVGb3JTcGFycWwoIGN0LnN1YlRlcm0oKSApICk7Ci0gICAg
ICAgICAgICByZXR1cm4gY3Q7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIHRlcm07Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAq
IHRlcm0gaXMgb3B0aW1pemVkIGFuZCByYW4gdGhyb3VnaCBwcmVwYXJlRm9yU3BhcnFsLiBUaGUg
b25seSB0eXBlIHRlcm1zCi0gICAgICogd2UgYXJlIGludGVyZXN0ZWQgaW4gYXJlIHRob3NlIHRo
YXQgYXJlIG5vbi1vcHRpb25hbC4KLSAgICAgKi8KLSAgICBib29sIGNvbnRhaW5zUmVzb3VyY2VU
eXBlVGVybSggY29uc3QgTmVwb211azo6UXVlcnk6OlRlcm0mIHRlcm0gKQotICAgIHsKLSAgICAg
ICAgaWYoIHRlcm0uaXNSZXNvdXJjZVR5cGVUZXJtKCkgKSB7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGluIGFuIGFuZC10ZXJtIGEgc2luZ2xlIHJl
c291cmNlIHR5cGUgdGVybSBpcyBzdWZmaWNpZW50Ci0gICAgICAgIGVsc2UgaWYoIHRlcm0uaXNB
bmRUZXJtKCkgKSB7Ci0gICAgICAgICAgICBRX0ZPUkVBQ0goIGNvbnN0IE5lcG9tdWs6OlF1ZXJ5
OjpUZXJtJiBzdWJUZXJtLCB0ZXJtLnRvQW5kVGVybSgpLnN1YlRlcm1zKCkgKSB7Ci0gICAgICAg
ICAgICAgICAgaWYoIGNvbnRhaW5zUmVzb3VyY2VUeXBlVGVybShzdWJUZXJtKSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gYW4gb3ItdGVybSB3aGljaCBvbmx5IGNvbnNp
c3RzIG9mIHJlc291cmNlIHR5cGUgdGVybXMgaXMgdmFsaWQgYWxzbwotICAgICAgICBlbHNlIGlm
KCB0ZXJtLmlzT3JUZXJtKCkgKSB7Ci0gICAgICAgICAgICBRX0ZPUkVBQ0goIGNvbnN0IE5lcG9t
dWs6OlF1ZXJ5OjpUZXJtJiBzdWJUZXJtLCB0ZXJtLnRvT3JUZXJtKCkuc3ViVGVybXMoKSApIHsK
LSAgICAgICAgICAgICAgICBpZiggIWNvbnRhaW5zUmVzb3VyY2VUeXBlVGVybShzdWJUZXJtKSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQgYWxsIHN1YnRlcm1z
IGNvbnRhaW4gYSBub24tb3B0aW9uYWwgcmVzb3VyY2UgdHlwZSB0ZXJtCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGZhbGxiYWNrCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLQogUVN0cmluZyBOZXBvbXVrOjpRdWVyeTo6UXVlcnlQ
cml2YXRlOjpjcmVhdGVGb2xkZXJGaWx0ZXIoIGNvbnN0IFFTdHJpbmcmIHJlc291cmNlVmFyTmFt
ZSwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkgY29uc3QKIHsKICAgICBpZiAoIG1faW5jbHVkZUZv
bGRlcnMuY291bnQoKSArIG1fZXhjbHVkZUZvbGRlcnMuY291bnQoKSApIHsKQEAgLTQ3MCwxMyAr
MzU1LDM1IEBACiAKIAogICAgIC8vIG9wdGltaXplIHdoYXRldmVyIHdlIGNhbgotICAgIHRlcm0g
PSBwcmVwYXJlRm9yU3BhcnFsKCB0ZXJtICkub3B0aW1pemVkKCk7CisgICAgdGVybSA9IHRlcm0u
b3B0aW1pemVkKCk7CiAKKwogICAgIC8vIGFjdHVhbGx5IGJ1aWxkIHRoZSBTUEFSUUwgcXVlcnkg
cGF0dGVybnMKICAgICBRdWVyeUJ1aWxkZXJEYXRhIHFiZCggZC5jb25zdERhdGEoKSwgc3BhcnFs
RmxhZ3MgKTsKKworCisgICAgLy8gV2UgcmVzdHJpY3QgcmVzdWx0cyB0byB1c2VyIHZpc2libGUg
dHlwZXMgb25seS4KKyAgICAvLworICAgIC8vIEhlcmUgd2UgdXNlIGFuIG9wdGltaXphdGlvbnM6
CisgICAgLy8gVGhlIHN0b3JhZ2Ugc2VydmljZSBjcmVhdGVzICJuYW86dXNlclZpc2libGUgMSIg
ZW50cmllcyBmb3IgYWxsIHZpc2libGUgcmVzb3VyY2VzLiBUaGlzIGNvbnRhaW5zIHR3byBvcHRp
bWl6YXRpb25zOgorICAgIC8vIC0gV2UgdXNlIGFuIGludGVnZXIgaW5zdGVhZCBvZiBhIGJvb2xl
YW4gYmVjYXVzZSBWaXJ0dW9zbyBkb2VzIG5vdCBzdXBwb3J0IGJvb2xlYW5zIGFuZCwgdGh1cywg
U29wcmFubyBjb252ZXJ0cworICAgIC8vICAgYm9vbGVhbnMgaW50byBhIGZha2UgdHlwZSB3aGlj
aCBpcyBzdG9yZWQgYXMgYSBzdHJpbmcuIFRoaXMgbWFrZXMgY29tcGFyaXNpb24gbXVjaCBzbG93
ZXIuCisgICAgLy8gLSBJbnN0ZWFkIG9mIHVzaW5nIGNyYXBweSBpbmZlcmVuY2UgdmlhICI/ciBh
ID90IC4gP3QgbmFvOnVzZXJWaXNpYmxlIHRydWUiIHdlIGNhbiBkaXJlY3RseSBjaGVjayB0aGUg
cmVzb3VyY2VzLgorICAgIC8vIC0gSW5zdGVhZCBvZiByZXN0cmljdGluZyB0aGUgdmlzaWJpbGl0
eSB0byAxIHdlIHRyaWNrIHRoZSBWaXJ0dW9zbyBxdWVyeSBvcHRpbWl6ZXIgc28gaXQgd29uJ3Qg
dHJ5IHRvIHVzZSB0aGUgdmlzaWJpbGl0eQorICAgIC8vICAgYXMgcHJpb3JpdHkuIFdlIGRvIHRo
aXMgd2l0aCBhIGZpbHRlciB0aGF0IGRvZXMgbm90IHRlc3QgZm9yIGVxdWFsaXR5LiBVc2luZyAi
P3IgbmFvOnVzZXJWaXNpYmxlIDEiIGhhcyBhIGRyYXN0aWMKKyAgICAvLyAgIHBlcmZvcm1hbmNl
IGltcGFjdCB3aGljaCB0aGUgZmlsdGVyIGhhcyBub3QuCisgICAgLy8KKyAgICBRU3RyaW5nIHVz
ZXJWaXNpYmlsaXR5UmVzdHJpY3Rpb247CisgICAgaWYoICEocXVlcnlGbGFncygpJk5vUmVzdWx0
UmVzdHJpY3Rpb25zKSApIHsKKyAgICAgICAgdXNlclZpc2liaWxpdHlSZXN0cmljdGlvbiA9IFFT
dHJpbmc6OmZyb21MYXRpbjEoIj9yICUxICUyIC4gRklMVEVSKCUyPjApIC4gIikKKyAgICAgICAg
ICAgICAgICAuYXJnKFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyhTb3ByYW5vOjpWb2NhYnVs
YXJ5OjpOQU86OnVzZXJWaXNpYmxlKCkpLAorICAgICAgICAgICAgICAgICAgICAgcWJkLnVuaXF1
ZVZhck5hbWUoKSk7CisgICAgfQorCisKICAgICBRU3RyaW5nIHRlcm1HcmFwaFBhdHRlcm47CiAg
ICAgaWYoIHRlcm0uaXNWYWxpZCgpICkgewotICAgICAgICB0ZXJtR3JhcGhQYXR0ZXJuID0gdGVy
bS5kX3B0ci0+dG9TcGFycWxHcmFwaFBhdHRlcm4oIFFMYXRpbjFTdHJpbmcoICI/ciIgKSwgJnFi
ZCApOworICAgICAgICB0ZXJtR3JhcGhQYXR0ZXJuID0gdGVybS5kX3B0ci0+dG9TcGFycWxHcmFw
aFBhdHRlcm4oIFFMYXRpbjFTdHJpbmcoICI/ciIgKSwgMCwgJnFiZCApOwogICAgICAgICBpZigg
dGVybUdyYXBoUGF0dGVybi5pc0VtcHR5KCkgKSB7CiAgICAgICAgICAgICBrRGVidWcoKSA8PCAi
R290IG5vIHZhbGlkIFNQQVJRTCBwYXR0ZXJuIGZyb20iIDw8IHRlcm07CiAgICAgICAgICAgICBy
ZXR1cm4gUVN0cmluZygpOwpAQCAtNDkzLDE4ICs0MDAsNiBAQAogICAgICAgICAgICAgc2VsZWN0
VmFyaWFibGVzIDw8IHNjb3JpbmdFeHByZXNzaW9uOwogICAgIH0KIAotICAgIC8vIHJlc3RyaWN0
IHRvIHJlc291cmNlcyB0byB1c2VyIHZpc2libGUgdHlwZXMgb25seS4gVGhlcmUgaXMgbm8gbmVl
ZCB0byBkbyB0aGF0IGZvciBmaWxlIHF1ZXJpZXMKLSAgICAvLyBhcyB0aG9zZSBhbHJlYWR5IHJl
c3RyaWN0IHRoZSB0eXBlLgotICAgIC8vIFNpbmNlIHdlIGRvIHRoZSByZXN0cmljdGlvbiBvbiB0
aGUgdHlwZSBpdCBnZXRzIHVzZWxlc3MgYXMgc29vbiBhcyB0aGUgcXVlcnkgY29udGFpbnMgYSBu
b24tb3B0aW9uYWwKLSAgICAvLyB0eXBlIHRlcm0gaXRzZWxmCi0gICAgUVN0cmluZyB1c2VyVmlz
aWJpbGl0eVJlc3RyaWN0aW9uOwotICAgIGlmKCAhZC0+bV9pc0ZpbGVRdWVyeSAmJiAhY29udGFp
bnNSZXNvdXJjZVR5cGVUZXJtKHRlcm0pICYmICEocXVlcnlGbGFncygpJk5vUmVzdWx0UmVzdHJp
Y3Rpb25zKSApIHsKLSAgICAgICAgdXNlclZpc2liaWxpdHlSZXN0cmljdGlvbiA9IFFTdHJpbmc6
OmZyb21MYXRpbjEoICI/ciBhICUxIC4gJTEgJTIgJTMgLiAiICkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5hcmcoIHFiZC51bmlxdWVWYXJOYW1lKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRv
TjMoU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OmxpdGVyYWxUb04z
KHRydWUpICk7Ci0gICAgfQotCiAgICAgLy8gYnVpbGQgdGhlIGNvcmUgb2YgdGhlIHF1ZXJ5IC0g
dGhlIHBhcnQgdGhhdCBuZXZlciBjaGFuZ2VzCiAgICAgUVN0cmluZyBxdWVyeUJhc2UgPSBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCAid2hlcmUgeyAlMSAlMiAlMyB9IiApCiAgICAgICAgICAgICAgICAg
ICAgICAgICAuYXJnKCB0ZXJtR3JhcGhQYXR0ZXJuLApJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1
ZXJ5L3Jlc291cmNldHlwZXRlcm1fcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtkZWxpYnMvbmVwb211ay9x
dWVyeS9yZXNvdXJjZXR5cGV0ZXJtX3AuaAkocmV2aXNpb24gMTIxNTcwNSkKKysrIGtkZWxpYnMv
bmVwb211ay9xdWVyeS9yZXNvdXJjZXR5cGV0ZXJtX3AuaAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NyArNDAsNyBAQAogCiAgICAgICAgICAgICBib29sIGVxdWFscyggY29uc3QgVGVybVByaXZhdGUq
IG90aGVyICkgY29uc3Q7CiAgICAgICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biBtX2NsYXNzLmlzVmFsaWQoKTsgfQotICAgICAgICAgICAgUVN0cmluZyB0b1NwYXJxbEdyYXBo
UGF0dGVybiggY29uc3QgUVN0cmluZyYgcmVzb3VyY2VWYXJOYW1lLCBRdWVyeUJ1aWxkZXJEYXRh
KiBxYmQgKSBjb25zdDsKKyAgICAgICAgICAgIFFTdHJpbmcgdG9TcGFycWxHcmFwaFBhdHRlcm4o
IGNvbnN0IFFTdHJpbmcmIHJlc291cmNlVmFyTmFtZSwgY29uc3QgVGVybVByaXZhdGUqIHBhcmVu
dFRlcm0sIFF1ZXJ5QnVpbGRlckRhdGEqIHFiZCApIGNvbnN0OwogCiAgICAgICAgICAgICBUeXBl
czo6Q2xhc3MgbV9jbGFzczsKICAgICAgICAgfTsKSW5kZXg6IGtkZWxpYnMvbmVwb211ay9xdWVy
eS9saXRlcmFsdGVybV9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L2xp
dGVyYWx0ZXJtX3AuaAkocmV2aXNpb24gMTIxNTcwNSkKKysrIGtkZWxpYnMvbmVwb211ay9xdWVy
eS9saXRlcmFsdGVybV9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIAogICAg
ICAgICAgICAgYm9vbCBlcXVhbHMoIGNvbnN0IFRlcm1Qcml2YXRlKiBvdGhlciApIGNvbnN0Owog
ICAgICAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5pc1ZhbGlk
KCk7IH0KLSAgICAgICAgICAgIFFTdHJpbmcgdG9TcGFycWxHcmFwaFBhdHRlcm4oIGNvbnN0IFFT
dHJpbmcmIHJlc291cmNlVmFyTmFtZSwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkgY29uc3Q7Cisg
ICAgICAgICAgICBRU3RyaW5nIHRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiBy
ZXNvdXJjZVZhck5hbWUsIGNvbnN0IFRlcm1Qcml2YXRlKiBwYXJlbnRUZXJtLCBRdWVyeUJ1aWxk
ZXJEYXRhKiBxYmQgKSBjb25zdDsKIAogICAgICAgICAgICAgc3RhdGljIFFTdHJpbmcgY3JlYXRl
Q29udGFpbnNQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiB2YXJOYW1lLCBjb25zdCBRU3RyaW5nJiB0
ZXh0LCBRdWVyeUJ1aWxkZXJEYXRhKiBxYmQgKTsKIApJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1
ZXJ5L25lZ2F0aW9udGVybV9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2RlbGlicy9uZXBvbXVrL3F1ZXJ5
L25lZ2F0aW9udGVybV9wLmgJKHJldmlzaW9uIDEyMTU3MDUpCisrKyBrZGVsaWJzL25lcG9tdWsv
cXVlcnkvbmVnYXRpb250ZXJtX3AuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAog
CiAgICAgICAgICAgICBUZXJtUHJpdmF0ZSogY2xvbmUoKSBjb25zdCB7IHJldHVybiBuZXcgTmVn
YXRpb25UZXJtUHJpdmF0ZSggKnRoaXMgKTsgfQogCi0gICAgICAgICAgICBRU3RyaW5nIHRvU3Bh
cnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZhck5hbWUsIFF1ZXJ5QnVp
bGRlckRhdGEqIHFiZCApIGNvbnN0OworICAgICAgICAgICAgUVN0cmluZyB0b1NwYXJxbEdyYXBo
UGF0dGVybiggY29uc3QgUVN0cmluZyYgcmVzb3VyY2VWYXJOYW1lLCBjb25zdCBUZXJtUHJpdmF0
ZSogcGFyZW50VGVybSwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkgY29uc3Q7CiAgICAgICAgIH07
CiAgICAgfQogfQpJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L2NvbXBhcmlzb250ZXJtX3Au
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrZGVsaWJzL25lcG9tdWsvcXVlcnkvY29tcGFyaXNvbnRlcm1fcC5o
CShyZXZpc2lvbiAxMjE1NzA1KQorKysga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L2NvbXBhcmlzb250
ZXJtX3AuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogCiAgICAgICAgICAgICBi
b29sIGVxdWFscyggY29uc3QgVGVybVByaXZhdGUqIG90aGVyICkgY29uc3Q7CiAgICAgICAgICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdDsKLSAgICAgICAgICAgIFFTdHJpbmcgdG9TcGFycWxHcmFw
aFBhdHRlcm4oIGNvbnN0IFFTdHJpbmcmIHJlc291cmNlVmFyTmFtZSwgUXVlcnlCdWlsZGVyRGF0
YSogcWJkICkgY29uc3Q7CisgICAgICAgICAgICBRU3RyaW5nIHRvU3BhcnFsR3JhcGhQYXR0ZXJu
KCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZhck5hbWUsIGNvbnN0IFRlcm1Qcml2YXRlKiBwYXJl
bnRUZXJtLCBRdWVyeUJ1aWxkZXJEYXRhKiBxYmQgKSBjb25zdDsKIAogICAgICAgICAgICAgLyoq
CiAgICAgICAgICAgICAgKiByZXR1cm4gbV92YXJpYWJsZU5hbWUgYW5kIHJlZ2lzdGVyIGl0IHdp
dGggcWJkCkluZGV4OiBrZGVsaWJzL25lcG9tdWsvcXVlcnkvYW5kdGVybS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L2FuZHRlcm0uY3BwCShyZXZpc2lvbiAxMjE1NzA1
KQorKysga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L2FuZHRlcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSwxMyArMjUsMTUgQEAKIAogI2luY2x1ZGUgPFF0Q29yZS9RU3RyaW5nTGlzdD4KIAotUVN0
cmluZyBOZXBvbXVrOjpRdWVyeTo6QW5kVGVybVByaXZhdGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJu
KCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZhck5hbWUsIFF1ZXJ5QnVpbGRlckRhdGEqIHFiZCAp
IGNvbnN0CitRU3RyaW5nIE5lcG9tdWs6OlF1ZXJ5OjpBbmRUZXJtUHJpdmF0ZTo6dG9TcGFycWxH
cmFwaFBhdHRlcm4oIGNvbnN0IFFTdHJpbmcmIHJlc291cmNlVmFyTmFtZSwgY29uc3QgVGVybVBy
aXZhdGUqIHBhcmVudFRlcm0sIFF1ZXJ5QnVpbGRlckRhdGEqIHFiZCApIGNvbnN0CiB7CisgICAg
UV9VTlVTRUQocGFyZW50VGVybSk7CisKICAgICBRU3RyaW5nTGlzdCBwYXR0ZXJuOwogCiAgICAg
cWJkLT5wdXNoR3JvdXBUZXJtKHRoaXMpOwogICAgIGZvcmVhY2goIGNvbnN0IE5lcG9tdWs6OlF1
ZXJ5OjpUZXJtICZ0LCBtX3N1YlRlcm1zICkgewotICAgICAgICBwYXR0ZXJuICs9IHQuZF9wdHIt
PnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCByZXNvdXJjZVZhck5hbWUsIHFiZCApOworICAgICAgICBw
YXR0ZXJuICs9IHQuZF9wdHItPnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCByZXNvdXJjZVZhck5hbWUs
IHRoaXMsIHFiZCApOwogICAgIH0KICAgICBxYmQtPnBvcEdyb3VwVGVybSgpOwogCkBAIC0zOSw2
ICs0MSwxOSBAQAogfQogCiAKK2Jvb2wgTmVwb211azo6UXVlcnk6OkFuZFRlcm1Qcml2YXRlOjpo
YXNSZWFsUGF0dGVybigpIGNvbnN0Cit7CisgICAgUV9GT1JFQUNIKCBjb25zdCBOZXBvbXVrOjpR
dWVyeTo6VGVybSYgdGVybSwgbV9zdWJUZXJtcyApIHsKKyAgICAgICAgaWYoIHRlcm0uaXNDb21w
YXJpc29uVGVybSgpIHx8CisgICAgICAgICAgICAgICAgdGVybS5pc1Jlc291cmNlVHlwZVRlcm0o
KSB8fAorICAgICAgICAgICAgICAgIHRlcm0uaXNMaXRlcmFsVGVybSgpICkgeworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CisKIE5lcG9tdWs6OlF1ZXJ5OjpBbmRUZXJtOjpBbmRUZXJtKCkKICAgICA6IEdyb3VwVGVybSgg
bmV3IEFuZFRlcm1Qcml2YXRlKCkgKQogewpJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L29y
dGVybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L29ydGVybS5jcHAJ
KHJldmlzaW9uIDEyMTU3MDUpCisrKyBrZGVsaWJzL25lcG9tdWsvcXVlcnkvb3J0ZXJtLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsMTMgKzI1LDE1IEBACiAKICNpbmNsdWRlIDxRdENvcmUvUVN0
cmluZ0xpc3Q+CiAKLVFTdHJpbmcgTmVwb211azo6UXVlcnk6Ok9yVGVybVByaXZhdGU6OnRvU3Bh
cnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZhck5hbWUsIFF1ZXJ5QnVp
bGRlckRhdGEqIHFiZCApIGNvbnN0CitRU3RyaW5nIE5lcG9tdWs6OlF1ZXJ5OjpPclRlcm1Qcml2
YXRlOjp0b1NwYXJxbEdyYXBoUGF0dGVybiggY29uc3QgUVN0cmluZyYgcmVzb3VyY2VWYXJOYW1l
LCBjb25zdCBUZXJtUHJpdmF0ZSogcGFyZW50VGVybSwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkg
Y29uc3QKIHsKKyAgICBRX1VOVVNFRChwYXJlbnRUZXJtKTsKKwogICAgIFFTdHJpbmdMaXN0IHBh
dHRlcm47CiAKICAgICBxYmQtPnB1c2hHcm91cFRlcm0odGhpcyk7CiAgICAgZm9yZWFjaCggY29u
c3QgTmVwb211azo6UXVlcnk6OlRlcm0gJnQsIG1fc3ViVGVybXMgKSB7Ci0gICAgICAgIHBhdHRl
cm4gKz0gdC5kX3B0ci0+dG9TcGFycWxHcmFwaFBhdHRlcm4oIHJlc291cmNlVmFyTmFtZSwgcWJk
ICk7CisgICAgICAgIHBhdHRlcm4gKz0gdC5kX3B0ci0+dG9TcGFycWxHcmFwaFBhdHRlcm4oIHJl
c291cmNlVmFyTmFtZSwgdGhpcywgcWJkICk7CiAgICAgfQogICAgIHFiZC0+cG9wR3JvdXBUZXJt
KCk7CiAKSW5kZXg6IGtkZWxpYnMvbmVwb211ay9xdWVyeS9xdWVyeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtkZWxpYnMvbmVwb211ay9xdWVyeS9xdWVyeS5oCShyZXZpc2lvbiAxMjE1NzA1KQorKysga2Rl
bGlicy9uZXBvbXVrL3F1ZXJ5L3F1ZXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMCw2ICs0MDAs
OSBAQAogICAgICAgICAgICAgICogQ29udmVydCB0aGUgcXVlcnkgaW50byBhIFNQQVJRTCBxdWVy
eSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIHRoZQogICAgICAgICAgICAgICogTmVwb211ayBxdWVy
eSBzZXJ2aWNlIG9yIGRpcmVjdGx5IGluIFNvcHJhbm86Ok1vZGVsOjpleGVjdXRlUXVlcnkuCiAg
ICAgICAgICAgICAgKgorICAgICAgICAgICAgICogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIFF1
ZXJ5U2VydmljZUNsaWVudCBpbnN0ZWFkIG9mIGNyZWF0aW5nCisgICAgICAgICAgICAgKiB0aGUg
U1BBUlFMIHF1ZXJ5IHRoaXMgd2F5LgorICAgICAgICAgICAgICoKICAgICAgICAgICAgICAqIFRo
ZSByZXN1bHRpbmcgcXVlcnkgd2lsbCBiaW5kIHRoZSByZXN1bHRzIHRvIHZhcmlhYmxlIFxwICdy
Jy4gUmVxdWVzdAogICAgICAgICAgICAgICogcHJvcGVydGllcyB3aWxsIGJlIGJvdW5kIHRvIHZh
cmlhYmxlcyBccCAncmVxUHJvcDEnIHRocm91Z2ggXHAgJ3JlcVByb3BOJwogICAgICAgICAgICAg
ICogKHRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBhIGNvdW50IHF1ZXJ5IGNyZWF0ZWQgdmlhIHRoZSBD
cmVhdGVDb3VudFF1ZXJ5IGZsYWcpLgpJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L29wdGlv
bmFsdGVybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L29wdGlvbmFs
dGVybS5jcHAJKHJldmlzaW9uIDEyMTU3MDUpCisrKyBrZGVsaWJzL25lcG9tdWsvcXVlcnkvb3B0
aW9uYWx0ZXJtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTAgKzIzLDEyIEBACiAjaW5jbHVk
ZSAib3B0aW9uYWx0ZXJtX3AuaCIKICNpbmNsdWRlICJxdWVyeWJ1aWxkZXJkYXRhX3AuaCIKIAot
UVN0cmluZyBOZXBvbXVrOjpRdWVyeTo6T3B0aW9uYWxUZXJtUHJpdmF0ZTo6dG9TcGFycWxHcmFw
aFBhdHRlcm4oIGNvbnN0IFFTdHJpbmcmIHJlc291cmNlVmFyTmFtZSwgUXVlcnlCdWlsZGVyRGF0
YSogcWJkICkgY29uc3QKK1FTdHJpbmcgTmVwb211azo6UXVlcnk6Ok9wdGlvbmFsVGVybVByaXZh
dGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZhck5hbWUs
IGNvbnN0IFRlcm1Qcml2YXRlKiBwYXJlbnRUZXJtLCBRdWVyeUJ1aWxkZXJEYXRhKiBxYmQgKSBj
b25zdAogeworICAgIFFfVU5VU0VEKHBhcmVudFRlcm0pOworCiAgICAgcmV0dXJuIFFTdHJpbmco
ICJPUFRJT05BTCB7ICUxfSAiICkKLSAgICAgICAgLmFyZyggbV9zdWJUZXJtLmRfcHRyLT50b1Nw
YXJxbEdyYXBoUGF0dGVybiggcmVzb3VyY2VWYXJOYW1lLCBxYmQgKSApOworICAgICAgICAuYXJn
KCBtX3N1YlRlcm0uZF9wdHItPnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCByZXNvdXJjZVZhck5hbWUs
IHRoaXMsIHFiZCApICk7CiB9CiAKIApJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L2FuZHRl
cm1fcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtkZWxpYnMvbmVwb211ay9xdWVyeS9hbmR0ZXJtX3AuaAko
cmV2aXNpb24gMTIxNTcwNSkKKysrIGtkZWxpYnMvbmVwb211ay9xdWVyeS9hbmR0ZXJtX3AuaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsMjQgQEAKIAogICAgICAgICAgICAgVGVybVByaXZh
dGUqIGNsb25lKCkgY29uc3QgeyByZXR1cm4gbmV3IEFuZFRlcm1Qcml2YXRlKCAqdGhpcyApOyB9
CiAKLSAgICAgICAgICAgIFFTdHJpbmcgdG9TcGFycWxHcmFwaFBhdHRlcm4oIGNvbnN0IFFTdHJp
bmcmIHJlc291cmNlVmFyTmFtZSwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkgY29uc3Q7CisgICAg
ICAgICAgICBRU3RyaW5nIHRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNv
dXJjZVZhck5hbWUsIGNvbnN0IFRlcm1Qcml2YXRlKiwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkg
Y29uc3Q7CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogU2luY2UgZmlsdGVycyBj
YW4gb25seSB3b3JrIG9uIGEgInJlYWwiIGdyYXBoIHBhdHRlcm4KKyAgICAgICAgICAgICAqIHdl
IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgc3VjaCBhIHBhdHRlcm4gZXhpc3RzLiBUaGlzIGNhbiBi
ZSBkb25lIGJ5IHNlYXJjaGluZyBvbmUgaW4gYQorICAgICAgICAgICAgICogc3Vycm91bmRpbmcg
QW5kVGVybS4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBXaHkgaXMgdGhhdCBlbm91
Z2g/CisgICAgICAgICAgICAgKiBOZXN0ZWQgQW5kVGVybXMgYXJlIGZsYXR0ZW5lZCBiZWZvcmUg
dGhlIFNQQVJRTCBxdWVyeSBpcyBjb25zdHJ1Y3RlZCBpbiBRdWVyeS4gVGh1cywgYW4gQW5kVGVy
bSBjYW4KKyAgICAgICAgICAgICAqIG9ubHkgYmUgZW1iZWRkZWQgaW4gYW4gT3JUZXJtIG9yIGFz
IGEgY2hpbGQgdGVybSB0byBlaXRoZXIgYSBDb21wYXJpc29uVGVybSBvciBhbiBPcHRpb25hbFRl
cm0uCisgICAgICAgICAgICAgKiBJbiBib3RoIGNhc2VzIHdlIG5lZWQgYSByZWFsIHBhdHRlcm4g
aW5zaWRlIHRoZSBBbmRUZXJtLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIFRoaXMg
bWV0aG9kIGNoZWNrcyBpZiB0aGUgYW5kIHRlcm0gaGFzIGEgInJlYWwiIG5vbi1maWx0ZXIgc3Vi
dGVybS4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2Vk
IGJ5IE5lZ2F0aW9uVGVybSBhbmQgUmVzb3VyY2VUZXJtIHRvIGNoZWNrIGlmIHRoZXkgbmVlZCB0
byBhZGQgYW4gYXJ0aWZpY2lhbCAicmVhbCIKKyAgICAgICAgICAgICAqIHBhdHRlcm4uCisgICAg
ICAgICAgICAgKi8KKyAgICAgICAgICAgIGJvb2wgaGFzUmVhbFBhdHRlcm4oKSBjb25zdDsKICAg
ICAgICAgfTsKICAgICB9CiB9CkluZGV4OiBrZGVsaWJzL25lcG9tdWsvcXVlcnkvcmVzb3VyY2V0
ZXJtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrZGVsaWJzL25lcG9tdWsvcXVlcnkvcmVzb3VyY2V0ZXJt
LmNwcAkocmV2aXNpb24gMTIxNTcwNSkKKysrIGtkZWxpYnMvbmVwb211ay9xdWVyeS9yZXNvdXJj
ZXRlcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBACiAKICNpbmNsdWRlICJy
ZXNvdXJjZXRlcm0uaCIKICNpbmNsdWRlICJyZXNvdXJjZXRlcm1fcC5oIgorI2luY2x1ZGUgInF1
ZXJ5YnVpbGRlcmRhdGFfcC5oIgorI2luY2x1ZGUgImFuZHRlcm1fcC5oIgogCiAjaW5jbHVkZSA8
U29wcmFuby9Ob2RlPgogCkBAIC0zNyw5ICszOSwzOCBAQAogfQogCiAKLVFTdHJpbmcgTmVwb211
azo6UXVlcnk6OlJlc291cmNlVGVybVByaXZhdGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25z
dCBRU3RyaW5nJiwgUXVlcnlCdWlsZGVyRGF0YSogKSBjb25zdAorUVN0cmluZyBOZXBvbXVrOjpR
dWVyeTo6UmVzb3VyY2VUZXJtUHJpdmF0ZTo6dG9TcGFycWxHcmFwaFBhdHRlcm4oIGNvbnN0IFFT
dHJpbmcmIHZhck5hbWUsIGNvbnN0IFRlcm1Qcml2YXRlKiBwYXJlbnRUZXJtLCBRdWVyeUJ1aWxk
ZXJEYXRhKiBxYmQgKSBjb25zdAogewotICAgIHJldHVybiBTb3ByYW5vOjpOb2RlOjpyZXNvdXJj
ZVRvTjMoIG1fcmVzb3VyY2UucmVzb3VyY2VVcmkoKSApOworICAgIC8vCisgICAgLy8gQSBuZWdh
dGlvbiBpcyBleHByZXNzZWQgdmlhIGEgZmlsdGVyLiBTaW5jZSBmaWx0ZXJzIGNhbiBvbmx5IHdv
cmsgb24gYSAicmVhbCIgZ3JhcGggcGF0dGVybgorICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJl
IHRoYXQgc3VjaCBhIHBhdHRlcm4gZXhpc3RzLiBUaGlzIGNhbiBiZSBkb25lIGJ5IHNlYXJjaGlu
ZyBvbmUgaW4gYQorICAgIC8vIHN1cnJvdW5kaW5nIEFuZFRlcm0uCisgICAgLy8KKyAgICAvLyBX
aHkgaXMgdGhhdCBlbm91Z2g/CisgICAgLy8gTmVzdGVkIEFuZFRlcm1zIGFyZSBmbGF0dGVuZWQg
YmVmb3JlIHRoZSBTUEFSUUwgcXVlcnkgaXMgY29uc3RydWN0ZWQgaW4gUXVlcnkuIFRodXMsIGFu
IEFuZFRlcm0gY2FuCisgICAgLy8gb25seSBiZSBlbWJlZGRlZCBpbiBhbiBPclRlcm0gb3IgYXMg
YSBjaGlsZCB0ZXJtIHRvIGVpdGhlciBhIENvbXBhcmlzb25UZXJtIG9yIGFuIE9wdGlvbmFsVGVy
bS4KKyAgICAvLyBJbiBib3RoIGNhc2VzIHdlIG5lZWQgYSByZWFsIHBhdHRlcm4gaW5zaWRlIHRo
ZSBBbmRUZXJtLgorICAgIC8vCisgICAgLy8gV2UgdXNlIGEgdHlwZSBwYXR0ZXJuIGZvciBwZXJm
b3JtYW5jZSByZWFzb25zLiBUaHVzLCB3ZSBhc3N1bWUgdGhhdCBlYWNoIHJlc291cmNlIGhhcyBh
IHR5cGUuIFRoaXMKKyAgICAvLyBpcyBub3QgcGVyZmVjdCBidXQgbXVjaCBmYXN0ZXIgdGhhbiB1
c2luZyBhIHdpbGRjYXJkIGZvciB0aGUgcHJvcGVydHkuIEFuZCBpbiB0aGUgZW5kIGFsbCBOZXBv
bXVrCisgICAgLy8gcmVzb3VyY2VzIHNob3VsZCBoYXZlIGEgcHJvcGVybHkgZGVmaW5lZCB0eXBl
LgorICAgIC8vCisgICAgYm9vbCBoYXZlUmVhbFRlcm0gPSBmYWxzZTsKKyAgICBpZiggcGFyZW50
VGVybSAmJiBwYXJlbnRUZXJtLT5tX3R5cGUgPT0gVGVybTo6QW5kICkgeworICAgICAgICBoYXZl
UmVhbFRlcm0gPSBzdGF0aWNfY2FzdDxjb25zdCBBbmRUZXJtUHJpdmF0ZSo+KHBhcmVudFRlcm0p
LT5oYXNSZWFsUGF0dGVybigpOworICAgIH0KKworICAgIFFTdHJpbmcgdGVybTsKKyAgICBpZigg
IWhhdmVSZWFsVGVybSApIHsKKyAgICAgICAgdGVybSArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCIl
MSBhICUyIC4gIikKKyAgICAgICAgICAgICAgICAuYXJnKCB2YXJOYW1lLCBxYmQtPnVuaXF1ZVZh
ck5hbWUoKSApOworICAgIH0KKworICAgIHRlcm0gKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiRklM
VEVSKCUxPSUyKSAuICIpCisgICAgICAgICAgICAuYXJnKCB2YXJOYW1lLAorICAgICAgICAgICAg
ICAgICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBtX3Jlc291cmNlLnJlc291cmNlVXJp
KCkgKSApOworCisgICAgcmV0dXJuIHRlcm07CiB9CiAKIApJbmRleDoga2RlbGlicy9uZXBvbXVr
L3F1ZXJ5L3Jlc291cmNldHlwZXRlcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtkZWxpYnMvbmVwb211
ay9xdWVyeS9yZXNvdXJjZXR5cGV0ZXJtLmNwcAkocmV2aXNpb24gMTIxNTcwNSkKKysrIGtkZWxp
YnMvbmVwb211ay9xdWVyeS9yZXNvdXJjZXR5cGV0ZXJtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzksMTQgKzM5LDE0IEBACiB9CiAKIAotUVN0cmluZyBOZXBvbXVrOjpRdWVyeTo6UmVzb3VyY2VU
eXBlVGVybVByaXZhdGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNO
YW1lLCBRdWVyeUJ1aWxkZXJEYXRhKiBxYmQgKSBjb25zdAorUVN0cmluZyBOZXBvbXVrOjpRdWVy
eTo6UmVzb3VyY2VUeXBlVGVybVByaXZhdGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBR
U3RyaW5nJiByZXNOYW1lLCBjb25zdCBUZXJtUHJpdmF0ZSogcGFyZW50VGVybSwgUXVlcnlCdWls
ZGVyRGF0YSogKSBjb25zdAogeworICAgIFFfVU5VU0VEKHBhcmVudFRlcm0pOworCiAgICAgLy8g
d2UgYXJlIHVzaW5nIHRoZSBjcmFwcHkgaW5mZXJlbmNpbmcgcHJvdmlkZWQgYnkgdGhlIG5lcG9t
dWsgb250b2xvZ3kgc2VydmljZSB3aGVyZQogICAgIC8vIGVhY2ggY2xhc3MgaXMgYWxzbyBhIHN1
YmNsYXNzIG9mIGl0c2VsZi4KLSAgICByZXR1cm4gUVN0cmluZzo6ZnJvbUxhdGluMSgiJTEgYSAl
MiAuICUyICUzICU0IC4gIikKKyAgICByZXR1cm4gUVN0cmluZzo6ZnJvbUxhdGluMSgiJTEgYSAl
MiAuICIpCiAgICAgICAgIC5hcmcoIHJlc05hbWUsCi0gICAgICAgICAgICAgIHFiZC0+dW5pcXVl
VmFyTmFtZSgpLAotICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSApLAogICAgICAgICAgICAgICBT
b3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIG1fY2xhc3MudXJpKCkgKSApOwogfQogCkluZGV4
OiBrZGVsaWJzL25lcG9tdWsvcXVlcnkvbGl0ZXJhbHRlcm0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtk
ZWxpYnMvbmVwb211ay9xdWVyeS9saXRlcmFsdGVybS5jcHAJKHJldmlzaW9uIDEyMTU3MDUpCisr
KyBrZGVsaWJzL25lcG9tdWsvcXVlcnkvbGl0ZXJhbHRlcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw4ICs1MCwxMCBAQAogLy8gQnV0IHNpbmNlIG1hbnkgcmVsYXRpb25zIGxpa2UgbmFvOmhh
c1RhZyBvciBubW06cGVyZm9ybWVyIG9yIHNpbWlsYXIgYXJlIGNvbnNpZGVyZWQgYXMgcGxhaW4g
dGV4dCBmaWVsZHMgd2UgZXh0ZW5kIHRoZSBwYXR0ZXJuIGJ5IGFkZGluZwogLy8gcmVsYXRpb25z
IHRvIHJlc291cmNlcyB0aGF0IGhhdmUgbGFiZWxzIGNvbnRhaW5pbmcgdGhlIHF1ZXJ5IHRleHQu
CiAvLwotUVN0cmluZyBOZXBvbXVrOjpRdWVyeTo6TGl0ZXJhbFRlcm1Qcml2YXRlOjp0b1NwYXJx
bEdyYXBoUGF0dGVybiggY29uc3QgUVN0cmluZyYgcmVzb3VyY2VWYXJOYW1lLCBRdWVyeUJ1aWxk
ZXJEYXRhKiBxYmQgKSBjb25zdAorUVN0cmluZyBOZXBvbXVrOjpRdWVyeTo6TGl0ZXJhbFRlcm1Q
cml2YXRlOjp0b1NwYXJxbEdyYXBoUGF0dGVybiggY29uc3QgUVN0cmluZyYgcmVzb3VyY2VWYXJO
YW1lLCBjb25zdCBUZXJtUHJpdmF0ZSogcGFyZW50VGVybSwgUXVlcnlCdWlsZGVyRGF0YSogcWJk
ICkgY29uc3QKIHsKKyAgICBRX1VOVVNFRChwYXJlbnRUZXJtKTsKKwogICAgIGNvbnN0IFFTdHJp
bmcgdjEgPSBxYmQtPnVuaXF1ZVZhck5hbWUoKTsKICAgICBjb25zdCBRU3RyaW5nIHYyID0gcWJk
LT51bmlxdWVWYXJOYW1lKCk7CiAgICAgY29uc3QgUVN0cmluZyB2MyA9IHFiZC0+dW5pcXVlVmFy
TmFtZSgpOwpJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L3Rlcm1fcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtkZWxpYnMvbmVwb211ay9xdWVyeS90ZXJtX3AuaAkocmV2aXNpb24gMTIxNTcwNSkKKysr
IGtkZWxpYnMvbmVwb211ay9xdWVyeS90ZXJtX3AuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyAr
NDEsNyBAQAogICAgICAgICAgICAgdmlydHVhbCBUZXJtUHJpdmF0ZSogY2xvbmUoKSBjb25zdCB7
IHJldHVybiBuZXcgVGVybVByaXZhdGUoICp0aGlzICk7IH0KIAogICAgICAgICAgICAgdmlydHVh
bCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICAgICAgdmly
dHVhbCBRU3RyaW5nIHRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiwgUXVlcnlC
dWlsZGVyRGF0YSogKSBjb25zdCB7IHJldHVybiBRU3RyaW5nKCk7IH0KKyAgICAgICAgICAgIHZp
cnR1YWwgUVN0cmluZyB0b1NwYXJxbEdyYXBoUGF0dGVybiggY29uc3QgUVN0cmluZyYsIGNvbnN0
IFRlcm1Qcml2YXRlKiwgUXVlcnlCdWlsZGVyRGF0YSogKSBjb25zdCB7IHJldHVybiBRU3RyaW5n
KCk7IH0KICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoIGNvbnN0IFRlcm1Qcml2YXRl
KiBvdGhlciApIGNvbnN0IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbV90eXBlID09IG90aGVy
LT5tX3R5cGU7CiAgICAgICAgICAgICB9CkluZGV4OiBrZGVsaWJzL25lcG9tdWsvcXVlcnkvb3J0
ZXJtX3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrZGVsaWJzL25lcG9tdWsvcXVlcnkvb3J0ZXJtX3AuaAko
cmV2aXNpb24gMTIxNTcwNSkKKysrIGtkZWxpYnMvbmVwb211ay9xdWVyeS9vcnRlcm1fcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKICAgICAgICAgICAgIFRlcm1Qcml2YXRl
KiBjbG9uZSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBPclRlcm1Qcml2YXRlKCAqdGhpcyApOyB9CiAK
LSAgICAgICAgICAgIFFTdHJpbmcgdG9TcGFycWxHcmFwaFBhdHRlcm4oIGNvbnN0IFFTdHJpbmcm
IHJlc291cmNlVmFyTmFtZSwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkgY29uc3Q7CisgICAgICAg
ICAgICBRU3RyaW5nIHRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNvdXJj
ZVZhck5hbWUsIGNvbnN0IFRlcm1Qcml2YXRlKiwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkgY29u
c3Q7CiAgICAgICAgIH07CiAgICAgfQogfQpJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L25l
Z2F0aW9udGVybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L25lZ2F0
aW9udGVybS5jcHAJKHJldmlzaW9uIDEyMTU3MDUpCisrKyBrZGVsaWJzL25lcG9tdWsvcXVlcnkv
bmVnYXRpb250ZXJtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTEgKzIyLDQwIEBACiAjaW5j
bHVkZSAibmVnYXRpb250ZXJtLmgiCiAjaW5jbHVkZSAibmVnYXRpb250ZXJtX3AuaCIKICNpbmNs
dWRlICJxdWVyeWJ1aWxkZXJkYXRhX3AuaCIKKyNpbmNsdWRlICJhbmR0ZXJtLmgiCisjaW5jbHVk
ZSAiYW5kdGVybV9wLmgiCiAKLVFTdHJpbmcgTmVwb211azo6UXVlcnk6Ok5lZ2F0aW9uVGVybVBy
aXZhdGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZhck5h
bWUsIFF1ZXJ5QnVpbGRlckRhdGEqIHFiZCApIGNvbnN0CitRU3RyaW5nIE5lcG9tdWs6OlF1ZXJ5
OjpOZWdhdGlvblRlcm1Qcml2YXRlOjp0b1NwYXJxbEdyYXBoUGF0dGVybiggY29uc3QgUVN0cmlu
ZyYgcmVzb3VyY2VWYXJOYW1lLCBjb25zdCBUZXJtUHJpdmF0ZSogcGFyZW50VGVybSwgUXVlcnlC
dWlsZGVyRGF0YSogcWJkICkgY29uc3QKIHsKLSAgICByZXR1cm4gUVN0cmluZyggIkZJTFRFUigh
YmlmOmV4aXN0cygoc2VsZWN0ICgxKSB3aGVyZSB7ICUxIH0pKSkgLiAiICkKLSAgICAgICAgLmFy
ZyggbV9zdWJUZXJtLmRfcHRyLT50b1NwYXJxbEdyYXBoUGF0dGVybiggcmVzb3VyY2VWYXJOYW1l
LCBxYmQgKSApOworICAgIC8vCisgICAgLy8gQSBuZWdhdGlvbiBpcyBleHByZXNzZWQgdmlhIGEg
ZmlsdGVyLiBTaW5jZSBmaWx0ZXJzIGNhbiBvbmx5IHdvcmsgb24gYSAicmVhbCIgZ3JhcGggcGF0
dGVybgorICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgc3VjaCBhIHBhdHRlcm4gZXhp
c3RzLiBUaGlzIGNhbiBiZSBkb25lIGJ5IHNlYXJjaGluZyBvbmUgaW4gYQorICAgIC8vIHN1cnJv
dW5kaW5nIEFuZFRlcm0uCisgICAgLy8KKyAgICAvLyBXaHkgaXMgdGhhdCBlbm91Z2g/CisgICAg
Ly8gTmVzdGVkIEFuZFRlcm1zIGFyZSBmbGF0dGVuZWQgYmVmb3JlIHRoZSBTUEFSUUwgcXVlcnkg
aXMgY29uc3RydWN0ZWQgaW4gUXVlcnkuIFRodXMsIGFuIEFuZFRlcm0gY2FuCisgICAgLy8gb25s
eSBiZSBlbWJlZGRlZCBpbiBhbiBPclRlcm0gb3IgYXMgYSBjaGlsZCB0ZXJtIHRvIGVpdGhlciBh
IENvbXBhcmlzb25UZXJtIG9yIGFuIE9wdGlvbmFsVGVybS4KKyAgICAvLyBJbiBib3RoIGNhc2Vz
IHdlIG5lZWQgYSByZWFsIHBhdHRlcm4gaW5zaWRlIHRoZSBBbmRUZXJtLgorICAgIC8vCisgICAg
Ly8gV2UgdXNlIGEgdHlwZSBwYXR0ZXJuIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBUaHVzLCB3
ZSBhc3N1bWUgdGhhdCBlYWNoIHJlc291cmNlIGhhcyBhIHR5cGUuIFRoaXMKKyAgICAvLyBpcyBu
b3QgcGVyZmVjdCBidXQgbXVjaCBmYXN0ZXIgdGhhbiB1c2luZyBhIHdpbGRjYXJkIGZvciB0aGUg
cHJvcGVydHkuIEFuZCBpbiB0aGUgZW5kIGFsbCBOZXBvbXVrCisgICAgLy8gcmVzb3VyY2VzIHNo
b3VsZCBoYXZlIGEgcHJvcGVybHkgZGVmaW5lZCB0eXBlLgorICAgIC8vCisgICAgYm9vbCBoYXZl
UmVhbFRlcm0gPSBmYWxzZTsKKyAgICBpZiggcGFyZW50VGVybSAmJiBwYXJlbnRUZXJtLT5tX3R5
cGUgPT0gVGVybTo6QW5kICkgeworICAgICAgICBoYXZlUmVhbFRlcm0gPSBzdGF0aWNfY2FzdDxj
b25zdCBBbmRUZXJtUHJpdmF0ZSo+KHBhcmVudFRlcm0pLT5oYXNSZWFsUGF0dGVybigpOworICAg
IH0KKworICAgIFFTdHJpbmcgdGVybTsKKyAgICBpZiggIWhhdmVSZWFsVGVybSApIHsKKyAgICAg
ICAgdGVybSArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCIlMSBhICUyIC4gIikKKyAgICAgICAgICAg
ICAgICAuYXJnKCByZXNvdXJjZVZhck5hbWUsIHFiZC0+dW5pcXVlVmFyTmFtZSgpICk7CisgICAg
fQorCisgICAgdGVybSArPSBRU3RyaW5nKCAiRklMVEVSKCFiaWY6ZXhpc3RzKChzZWxlY3QgKDEp
IHdoZXJlIHsgJTEgfSkpKSAuICIgKQorICAgICAgICAgICAgLmFyZyggbV9zdWJUZXJtLmRfcHRy
LT50b1NwYXJxbEdyYXBoUGF0dGVybiggcmVzb3VyY2VWYXJOYW1lLCB0aGlzLCBxYmQgKSApOwor
CisgICAgcmV0dXJuIHRlcm07CiB9CiAKIApJbmRleDoga2RlbGlicy9uZXBvbXVrL2NvcmUvcmVz
b3VyY2VkYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrZGVsaWJzL25lcG9tdWsvY29yZS9yZXNvdXJj
ZWRhdGEuY3BwCShyZXZpc2lvbiAxMjE1NzA1KQorKysga2RlbGlicy9uZXBvbXVrL2NvcmUvcmVz
b3VyY2VkYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDggKzM3MSwxMiBAQAogICAgICAg
ICBtX2NhY2hlLmNsZWFyKCk7CiAKICAgICAgICAgaWYgKCBtX3VyaS5pc1ZhbGlkKCkgKSB7Cisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2UgZXhjbHVkZSBwcm9wZXJ0aWVzIHRoYXQg
YXJlIHBhcnQgb2YgdGhlIGluZmVyZW5jZSBncmFwaAorICAgICAgICAgICAgLy8gSXQgd291bGQg
b25seSBwb2xsdXRlIHRoZSB1c2VyIGludGVyZmFjZQorICAgICAgICAgICAgLy8KICAgICAgICAg
ICAgIFNvcHJhbm86OlF1ZXJ5UmVzdWx0SXRlcmF0b3IgaXQgPSBNQUlOTU9ERUwtPmV4ZWN1dGVR
dWVyeShRU3RyaW5nKCJzZWxlY3QgZGlzdGluY3QgP3AgP28gd2hlcmUgeyAiCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiJTEgP3AgP28gLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3JhcGggP2cg
eyAlMSA/cCA/byAuIH0gLiBGSUxURVIoP2chPTx1cm46Y3JhcHB5aW5mZXJlbmNlMjppbmZlcnJl
ZHRyaXBsZXM+KSAuICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9IikuYXJnKFNvcHJhbm86Ok5v
ZGU6OnJlc291cmNlVG9OMyhtX3VyaSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlF1ZXJ5OjpR
dWVyeUxhbmd1YWdlU3BhcnFsKTsKICAgICAgICAgICAgIHdoaWxlICggaXQubmV4dCgpICkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56213</attachid>
            <date>2011-01-20 09:48:26 +0000</date>
            <delta_ts>2011-01-20 16:16:44 +0000</delta_ts>
            <desc>Patch 2/2 kdebase patch by trueg </desc>
            <filename>kdelibs_bko246678.diff</filename>
            <type>text/plain</type>
            <size>33344</size>
            <attacher name="Will Stephenson">wstephenson</attacher>
            
              <data encoding="base64">SW5kZXg6IGtkZWxpYnMvbmVwb211ay90ZXN0L3F1ZXJ5dGVzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2RlbGlicy9uZXBvbXVrL3Rlc3QvcXVlcnl0ZXN0LmNwcAkocmV2aXNpb24gMTIxNTcwNSkKKysr
IGtkZWxpYnMvbmVwb211ay90ZXN0L3F1ZXJ5dGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
OCwxNyArMTI4LDEzIEBACiAKICAgICBRVGVzdDo6bmV3Um93KCAidHlwZSBxdWVyeSIgKQogICAg
ICAgICA8PCBRdWVyeSggUmVzb3VyY2VUeXBlVGVybSggU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFP
OjpUYWcoKSApICkKLSAgICAgICAgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0IGRpc3Rp
bmN0ID9yIHdoZXJlIHsgP3IgYSA/djEgLiA/djEgJTEgJTIgLiB9IikKLSAgICAgICAgLmFyZyhT
b3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3Vi
Q2xhc3NPZigpKSkKKyAgICAgICAgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0IGRpc3Rp
bmN0ID9yIHdoZXJlIHsgP3IgYSAlMSAuIH0iKQogICAgICAgICAuYXJnKFNvcHJhbm86Ok5vZGU6
OnJlc291cmNlVG9OMyhTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OlRhZygpKSk7CiAKICAgICBR
VGVzdDo6bmV3Um93KCAibmVnYXRlZCByZXNvdXJjZSB0eXBlIiApCiAgICAgICAgIDw8IFF1ZXJ5
KCBOZWdhdGlvblRlcm06Om5lZ2F0ZVRlcm0oIFJlc291cmNlVHlwZVRlcm0oIFNvcHJhbm86OlZv
Y2FidWxhcnk6Ok5BTzo6VGFnKCkgKSApICkKLSAgICAgICAgPDwgUVN0cmluZzo6ZnJvbUxhdGlu
MSgic2VsZWN0IGRpc3RpbmN0ID9yIHdoZXJlIHsgeyBGSUxURVIoIWJpZjpleGlzdHMoKHNlbGVj
dCAoMSkgd2hlcmUgeyA/ciBhID92MSAuID92MSAlMSAlMiAuIH0pKSkgLiAiCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIj9yICUzID92MiAuIH0gLiB9IikKLSAgICAgICAgLmFyZyhT
b3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3Vi
Q2xhc3NPZigpKSwKLSAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoU29w
cmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjpUYWcoKSksCi0gICAgICAgICAgICAgU29wcmFubzo6Tm9k
ZTo6cmVzb3VyY2VUb04zKFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpKSk7CisgICAg
ICAgIDw8IFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCBkaXN0aW5jdCA/ciB3aGVyZSB7ID9y
IGEgP3YxIC4gRklMVEVSKCFiaWY6ZXhpc3RzKChzZWxlY3QgKDEpIHdoZXJlIHsgP3IgYSAlMSAu
IH0pKSkgLiB9IikKKyAgICAgICAgICAgLmFyZyhTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMo
U29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjpUYWcoKSkpOwogCiAgICAgUURhdGVUaW1lIG5vdyA9
IFFEYXRlVGltZTo6Y3VycmVudERhdGVUaW1lKCk7CiAgICAgUVRlc3Q6Om5ld1JvdyggIm5pZTps
YXN0TW9kaWZpZWQiICkKQEAgLTE2MSwxMCArMTU3LDggQEAKIAogICAgIFFUZXN0OjpuZXdSb3co
ICJuZWdhdGVkIGhhc3RhZyB3aXRoIHJlc291cmNlIiApCiAgICAgICAgIDw8IFF1ZXJ5KCBOZWdh
dGlvblRlcm06Om5lZ2F0ZVRlcm0oQ29tcGFyaXNvblRlcm0oIFNvcHJhbm86OlZvY2FidWxhcnk6
Ok5BTzo6aGFzVGFnKCksIFJlc291cmNlVGVybSggUVVybCgibmVwb211azovcmVzL2Zvb2JhciIp
ICkgKSkpCi0gICAgICAgIDw8IFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCBkaXN0aW5jdCA/
ciB3aGVyZSB7IHsgRklMVEVSKCFiaWY6ZXhpc3RzKChzZWxlY3QgKDEpIHdoZXJlIHsgP3IgJTEg
PG5lcG9tdWs6L3Jlcy9mb29iYXI+IC4gfSkpKSAuICIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiP3IgJTIgP3YxIC4gfSAuIH0iKQotICAgICAgICAuYXJnKFNvcHJhbm86Ok5vZGU6
OnJlc291cmNlVG9OMyhTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86Omhhc1RhZygpKSwKLSAgICAg
ICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCkpKTsKKyAgICAgICAgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0IGRp
c3RpbmN0ID9yIHdoZXJlIHsgP3IgYSA/djEgLiBGSUxURVIoIWJpZjpleGlzdHMoKHNlbGVjdCAo
MSkgd2hlcmUgeyA/ciAlMSA8bmVwb211azovcmVzL2Zvb2Jhcj4gLiB9KSkpIC4gfSIpCisgICAg
ICAgICAgIC5hcmcoU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKFNvcHJhbm86OlZvY2FidWxh
cnk6Ok5BTzo6aGFzVGFnKCkpKTsKIAogICAgIFFUZXN0OjpuZXdSb3coICJjb21wYXJhdG9ycyA8
IiApCiAgICAgICAgIDw8IFF1ZXJ5KCBDb21wYXJpc29uVGVybSggU29wcmFubzo6Vm9jYWJ1bGFy
eTo6TkFPOjpudW1lcmljUmF0aW5nKCksIExpdGVyYWxUZXJtKDQpLCBDb21wYXJpc29uVGVybTo6
U21hbGxlciApICkKQEAgLTIxNyw5ICsyMTEsOCBAQAogICAgIHNldFZhck5hbWVUZXJtMS5zZXRW
YXJpYWJsZU5hbWUoIm15dmFyIik7CiAgICAgUVRlc3Q6Om5ld1JvdyggInNldCB2YXJpYWJsZSBu
YW1lIDEiICkKICAgICAgICAgPDwgUXVlcnkoIHNldFZhck5hbWVUZXJtMSApCi0gICAgICAgIDw8
IFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCBkaXN0aW5jdCA/ciA/bXl2YXIgd2hlcmUgeyA/
ciAlMSA/bXl2YXIgLiA/bXl2YXIgYSA/djEgLiA/djEgJTIgJTMgLiB9IikKKyAgICAgICAgPDwg
UVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0IGRpc3RpbmN0ID9yID9teXZhciB3aGVyZSB7ID9y
ICUxID9teXZhciAuID9teXZhciBhICUyIC4gfSIpCiAgICAgICAgIC5hcmcoU29wcmFubzo6Tm9k
ZTo6cmVzb3VyY2VUb04zKFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6aGFzVGFnKCkpLAotICAg
ICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyhTb3ByYW5vOjpWb2NhYnVsYXJ5
OjpSREZTOjpzdWJDbGFzc09mKCkpLAogICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291
cmNlVG9OMyhTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OlRhZygpKSk7CiAKICAgICBDb21wYXJp
c29uVGVybSBzZXRWYXJOYW1lVGVybTIoIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6aGFzVGFn
KCksIExpdGVyYWxUZXJtKCAibmVwb211ayIgKSApOwpAQCAtMzUyLDYgKzM0NSwxOSBAQAogICAg
ICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoTmVwb211azo6Vm9jYWJ1bGFy
eTo6TkZPOjpGb2xkZXIoKSksCiAgICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291cmNl
VG9OMyhOZXBvbXVrOjpWb2NhYnVsYXJ5OjpORk86OkZpbGVEYXRhT2JqZWN0KCkpICk7CiAKKwor
ICAgIFFUZXN0OjpuZXdSb3coICJRdWVyeSBvbmUgcmVzb3VyY2UiICkKKyAgICAgICAgICAgIDw8
IFF1ZXJ5KFJlc291cmNlVGVybShRVXJsKCJuZXBvbXVrOi9BIikpKQorICAgICAgICAgICAgPDwg
UVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0IGRpc3RpbmN0ID9yIHdoZXJlIHsgP3IgYSA/djEg
LiBGSUxURVIoP3I9PG5lcG9tdWs6L0E+KSAuIH0iKTsKKworICAgIFFUZXN0OjpuZXdSb3coICJR
dWVyeSBzZXZlcmFsIHJlc291cmNlcyByZXNvdXJjZSIgKQorICAgICAgICAgICAgPDwgUXVlcnko
T3JUZXJtKFJlc291cmNlVGVybShRVXJsKCJuZXBvbXVrOi9BIikpLCBSZXNvdXJjZVRlcm0oUVVy
bCgibmVwb211azovQiIpKSwgUmVzb3VyY2VUZXJtKFFVcmwoIm5lcG9tdWs6L0MiKSkpKQorICAg
ICAgICAgICAgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0IGRpc3RpbmN0ID9yIHdoZXJl
IHsgeyA/ciBhID92MSAuIEZJTFRFUig/cj08bmVwb211azovQT4pIC4gfSBVTklPTiB7ID9yIGEg
P3YyIC4gRklMVEVSKD9yPTxuZXBvbXVrOi9CPikgLiB9IFVOSU9OIHsgP3IgYSA/djMgLiBGSUxU
RVIoP3I9PG5lcG9tdWs6L0M+KSAuIH0gLiB9Iik7CisKKyAgICBRVGVzdDo6bmV3Um93KCAiUG9p
bnRsZXNzIGJ1dCBjb3JyZWN0OiBRdWVyeSBzZXZlcmFsIHJlc291cmNlcyByZXNvdXJjZSAyIiAp
CisgICAgICAgICAgICA8PCBRdWVyeShBbmRUZXJtKFJlc291cmNlVGVybShRVXJsKCJuZXBvbXVr
Oi9BIikpLCBSZXNvdXJjZVRlcm0oUVVybCgibmVwb211azovQiIpKSwgUmVzb3VyY2VUZXJtKFFV
cmwoIm5lcG9tdWs6L0MiKSkpKQorICAgICAgICAgICAgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgi
c2VsZWN0IGRpc3RpbmN0ID9yIHdoZXJlIHsgeyA/ciBhID92MSAuIEZJTFRFUig/cj08bmVwb211
azovQT4pIC4gP3IgYSA/djIgLiBGSUxURVIoP3I9PG5lcG9tdWs6L0I+KSAuID9yIGEgP3YzIC4g
RklMVEVSKD9yPTxuZXBvbXVrOi9DPikgLiB9IC4gfSIpOworCiAgICAgLy8KICAgICAvLyBBIG1v
cmUgY29tcGxleCBleGFtcGxlCiAgICAgLy8KQEAgLTM3NSwxMiArMzgxLDExIEBACiAKICAgICBt
YWluVGVybS5hZGRTdWJUZXJtKGN0LmludmVydGVkKCkpOwogCi0gICAgUVN0cmluZyBzcGFycWwg
PSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgZGlzdGluY3QgP3IgY291bnQoP3Y1KSBhcyA/
Y250IHdoZXJlIHsgeyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ7ID9yIGEgP3YxIC4gP3YxICUxICUyIC4gfSBVTklPTiB7ID9yIGEgP3YyIC4gP3YyICUxICUz
IC4gfSAuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZJTFRF
UighYmlmOmV4aXN0cygoc2VsZWN0ICgxKSB3aGVyZSB7IDxuZXBvbXVrOi9yZXMvZm9vYmFyPiA/
djMgP3IgLiB9KSkpIC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiP3Y1ID92NCA/ciAuIH0gLiB9IE9SREVSIEJZIERFU0MgKCA/Y250ICkiKQotICAgICAgICAg
ICAgICAgICAgICAgLmFyZyhTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
U29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKE5lcG9tdWs6OlZvY2FidWxhcnk6Ok5GTzo6UmFz
dGVySW1hZ2UoKSksCisgICAgUVN0cmluZyBzcGFycWwgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJz
ZWxlY3QgZGlzdGluY3QgP3IgY291bnQoP3YzKSBhcyA/Y250IHdoZXJlIHsgeyAiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7ID9yIGEgJTEgLiB9IFVOSU9OIHsg
P3IgYSAlMiAuIH0gLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJGSUxURVIoIWJpZjpleGlzdHMoKHNlbGVjdCAoMSkgd2hlcmUgeyA8bmVwb211azovcmVzL2Zv
b2Jhcj4gP3YxID9yIC4gfSkpKSAuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIj92MyA/djIgP3IgLiB9IC4gfSBPUkRFUiBCWSBERVNDICggP2NudCApIikKKyAg
ICAgICAgICAgICAgICAgICAgIC5hcmcoU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKE5lcG9t
dWs6OlZvY2FidWxhcnk6Ok5GTzo6UmFzdGVySW1hZ2UoKSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyhOZXBvbXVrOjpWb2NhYnVsYXJ5OjpO
Rk86OkF1ZGlvKCkpKTsKIAogICAgIFFUZXN0OjpuZXdSb3coICJhIGNvbXBsZXggb25lIiApCklu
ZGV4OiBrZGVsaWJzL25lcG9tdWsvcXVlcnkvb3B0aW9uYWx0ZXJtX3AuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrZGVsaWJzL25lcG9tdWsvcXVlcnkvb3B0aW9uYWx0ZXJtX3AuaAkocmV2aXNpb24gMTIxNTcw
NSkKKysrIGtkZWxpYnMvbmVwb211ay9xdWVyeS9vcHRpb25hbHRlcm1fcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw3ICszNSw3IEBACiAKICAgICAgICAgICAgIFRlcm1Qcml2YXRlKiBjbG9uZSgp
IGNvbnN0IHsgcmV0dXJuIG5ldyBPcHRpb25hbFRlcm1Qcml2YXRlKCAqdGhpcyApOyB9CiAKLSAg
ICAgICAgICAgIFFTdHJpbmcgdG9TcGFycWxHcmFwaFBhdHRlcm4oIGNvbnN0IFFTdHJpbmcmIHJl
c291cmNlVmFyTmFtZSwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkgY29uc3Q7CisgICAgICAgICAg
ICBRU3RyaW5nIHRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZh
ck5hbWUsIGNvbnN0IFRlcm1Qcml2YXRlKiBwYXJlbnRUZXJtLCBRdWVyeUJ1aWxkZXJEYXRhKiBx
YmQgKSBjb25zdDsKICAgICAgICAgfTsKICAgICB9CiB9CkluZGV4OiBrZGVsaWJzL25lcG9tdWsv
cXVlcnkvY29tcGFyaXNvbnRlcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtkZWxpYnMvbmVwb211ay9x
dWVyeS9jb21wYXJpc29udGVybS5jcHAJKHJldmlzaW9uIDEyMTU3MDUpCisrKyBrZGVsaWJzL25l
cG9tdWsvcXVlcnkvY29tcGFyaXNvbnRlcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsOCAr
MTA2LDEwIEBACiAgICAgICAgIHJldHVybiBOZXBvbXVrOjpRdWVyeTo6Q29tcGFyaXNvblRlcm06
OkNvbnRhaW5zOwogfQogCi1RU3RyaW5nIE5lcG9tdWs6OlF1ZXJ5OjpDb21wYXJpc29uVGVybVBy
aXZhdGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZhck5h
bWUsIFF1ZXJ5QnVpbGRlckRhdGEqIHFiZCApIGNvbnN0CitRU3RyaW5nIE5lcG9tdWs6OlF1ZXJ5
OjpDb21wYXJpc29uVGVybVByaXZhdGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3Ry
aW5nJiByZXNvdXJjZVZhck5hbWUsIGNvbnN0IFRlcm1Qcml2YXRlKiBwYXJlbnRUZXJtLCBRdWVy
eUJ1aWxkZXJEYXRhKiBxYmQgKSBjb25zdAogeworICAgIFFfVU5VU0VEKHBhcmVudFRlcm0pOwor
CiAgICAgLy8KICAgICAvLyAxLiBwcm9wZXJ0eSByYW5nZTogbGl0ZXJhbAogICAgIC8vIDEuMS4g
b3BlcmF0b3IgPQpAQCAtMjYwLDEzICsyNjIsMTMgQEAKICAgICAgICAgfQogICAgICAgICBlbHNl
IGlmICggbV9zdWJUZXJtLmlzUmVzb3VyY2VUZXJtKCkgKSB7CiAgICAgICAgICAgICAvLyA/ciA8
cHJvcD4gPHJlcz4KLSAgICAgICAgICAgIHJldHVybiBjb3JlUGF0dGVybi5hcmcoIG1fc3ViVGVy
bS5kX3B0ci0+dG9TcGFycWxHcmFwaFBhdHRlcm4oIHJlc291cmNlVmFyTmFtZSwgcWJkICkgKTsK
KyAgICAgICAgICAgIHJldHVybiBjb3JlUGF0dGVybi5hcmcoIFNvcHJhbm86Ok5vZGU6OnJlc291
cmNlVG9OMyhtX3N1YlRlcm0udG9SZXNvdXJjZVRlcm0oKS5yZXNvdXJjZSgpLnJlc291cmNlVXJp
KCkpICk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyA/ciA8cHJv
cD4gP3YxIC4gP3YxIC4uLgogICAgICAgICAgICAgUVN0cmluZyB2ID0gZ2V0TWFpblZhcmlhYmxl
TmFtZShxYmQpOwogICAgICAgICAgICAgcWJkLT5pbmNyZWFzZURlcHRoKCk7Ci0gICAgICAgICAg
ICBRU3RyaW5nIHN1YlRlcm1TcGFycWwgPSBtX3N1YlRlcm0uZF9wdHItPnRvU3BhcnFsR3JhcGhQ
YXR0ZXJuKCB2LCBxYmQgKTsKKyAgICAgICAgICAgIFFTdHJpbmcgc3ViVGVybVNwYXJxbCA9IG1f
c3ViVGVybS5kX3B0ci0+dG9TcGFycWxHcmFwaFBhdHRlcm4oIHYsIHRoaXMsIHFiZCApOwogICAg
ICAgICAgICAgcWJkLT5kZWNyZWFzZURlcHRoKCk7CiAgICAgICAgICAgICByZXR1cm4gY29yZVBh
dHRlcm4uYXJnKHYpICsgc3ViVGVybVNwYXJxbDsKICAgICAgICAgfQpJbmRleDoga2RlbGlicy9u
ZXBvbXVrL3F1ZXJ5L3Jlc291cmNldGVybV9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2RlbGlicy9uZXBv
bXVrL3F1ZXJ5L3Jlc291cmNldGVybV9wLmgJKHJldmlzaW9uIDEyMTU3MDUpCisrKyBrZGVsaWJz
L25lcG9tdWsvcXVlcnkvcmVzb3VyY2V0ZXJtX3AuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsNyBAQAogCiAgICAgICAgICAgICBib29sIGVxdWFscyggY29uc3QgVGVybVByaXZhdGUqIG90
aGVyICkgY29uc3Q7CiAgICAgICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBt
X3Jlc291cmNlLmlzVmFsaWQoKTsgfQotICAgICAgICAgICAgUVN0cmluZyB0b1NwYXJxbEdyYXBo
UGF0dGVybiggY29uc3QgUVN0cmluZyYgcmVzb3VyY2VWYXJOYW1lLCBRdWVyeUJ1aWxkZXJEYXRh
KiBxYmQgKSBjb25zdDsKKyAgICAgICAgICAgIFFTdHJpbmcgdG9TcGFycWxHcmFwaFBhdHRlcm4o
IGNvbnN0IFFTdHJpbmcmIHJlc291cmNlVmFyTmFtZSwgY29uc3QgVGVybVByaXZhdGUqIHBhcmVu
dFRlcm0sIFF1ZXJ5QnVpbGRlckRhdGEqIHFiZCApIGNvbnN0OwogCiAgICAgICAgICAgICBSZXNv
dXJjZSBtX3Jlc291cmNlOwogICAgICAgICB9OwpJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1ZXJ5
L3F1ZXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrZGVsaWJzL25lcG9tdWsvcXVlcnkvcXVlcnkuY3Bw
CShyZXZpc2lvbiAxMjE1NzA1KQorKysga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L3F1ZXJ5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzAsMTIxICs3MCw2IEBACiAqLwogCiAKLW5hbWVzcGFjZSB7Ci0g
ICAgTmVwb211azo6UXVlcnk6OlRlcm0gcHJlcGFyZUZvclNwYXJxbCggY29uc3QgTmVwb211azo6
UXVlcnk6OlRlcm0mIHRlcm0gKQotICAgIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQSBuZWdh
dGlvbiBpcyBleHByZXNzZWQgdmlhIGEgZmlsdGVyLiBTaW5jZSBmaWx0ZXJzIGNhbiBvbmx5IHdv
cmsgb24gYSAicmVhbCIgZ3JhcGggcGF0dGVybgotICAgICAgICAvLyB3ZSBuZWVkIHRvIG1ha2Ug
c3VyZSB0aGF0IHN1Y2ggYSBwYXR0ZXJuIGV4aXN0cy4gVGhpcyBjYW4gYmUgZG9uZSBieSBzZWFy
Y2hpbmcgb25lIGluIGEKLSAgICAgICAgLy8gc3Vycm91bmRpbmcgYW5kIHRlcm0uCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIFdoeSBpcyB0aGF0IGVub3VnaD8KLSAgICAgICAgLy8gTmVzdGVkIEFu
ZFRlcm1zIGFyZSBmbGF0dGVuZWQgYmVmb3JlIHRoZSBTUEFSUUwgcXVlcnkgaXMgY29uc3RydWN0
ZWQgaW4gUXVlcnkuIFRodXMsIGFuIEFuZFRlcm0gY2FuCi0gICAgICAgIC8vIG9ubHkgYmUgZW1i
ZWRkZWQgaW4gYW4gT3JUZXJtIG9yIGFzIGEgY2hpbGQgdGVybSB0byBlaXRoZXIgYSBDb21wYXJp
c29uVGVybSBvciBhbiBPcHRpb25hbFRlcm0uCi0gICAgICAgIC8vIEluIGJvdGggY2FzZXMgd2Ug
bmVlZCBhIHJlYWwgcGF0dGVybiBpbnNpZGUgdGhlIEFuZFRlcm0uCi0gICAgICAgIC8vCi0gICAg
ICAgIC8vIFdlIHVzZSBhIHR5cGUgcGF0dGVybiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gVGh1
cywgd2UgYXNzdW1lIHRoYXQgZWFjaCByZXNvdXJjZSBoYXMgYSB0eXBlLiBUaGlzCi0gICAgICAg
IC8vIGlzIG5vdCBwZXJmZWN0IGJ1dCBtdWNoIGZhc3RlciB0aGFuIHVzaW5nIGEgd2lsZGNhcmQg
Zm9yIHRoZSBwcm9wZXJ0eS4gQW5kIGluIHRoZSBlbmQgYWxsIE5lcG9tdWsKLSAgICAgICAgLy8g
cmVzb3VyY2VzIHNob3VsZCBoYXZlIGEgcHJvcGVybHkgZGVmaW5lZCB0eXBlLgotICAgICAgICAv
LwotCi0gICAgICAgIHN3aXRjaCggdGVybS50eXBlKCkgKSB7Ci0gICAgICAgIGNhc2UgTmVwb211
azo6UXVlcnk6OlRlcm06OkFuZDogewotICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJl
IG5lZ2F0aW9uIHRlcm1zIHdpdGhvdXQgcHJvcGVyIHBhdHRlcm5zCi0gICAgICAgICAgICBOZXBv
bXVrOjpRdWVyeTo6QW5kVGVybSBhdCA9IHRlcm0udG9BbmRUZXJtKCk7Ci0gICAgICAgICAgICBO
ZXBvbXVrOjpRdWVyeTo6QW5kVGVybSBuZXdBbmRUZXJtOwotICAgICAgICAgICAgYm9vbCBoYXZl
TmVnYXRpb25UZXJtID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGhhdmVSZWFsVGVybSA9IGZh
bHNlOwotICAgICAgICAgICAgUV9GT1JFQUNIKCBjb25zdCBOZXBvbXVrOjpRdWVyeTo6VGVybSYg
dGVybSwgYXQuc3ViVGVybXMoKSApIHsKLSAgICAgICAgICAgICAgICBpZiggdGVybS5pc05lZ2F0
aW9uVGVybSgpICkgewotICAgICAgICAgICAgICAgICAgICBoYXZlTmVnYXRpb25UZXJtID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgbmV3QW5kVGVybS5hZGRTdWJUZXJtKCB0ZXJtICk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBpZiggdGVybS5pc0NvbXBhcmlzb25UZXJtKCkgfHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRlcm0uaXNSZXNvdXJjZVR5cGVUZXJtKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRlcm0uaXNMaXRlcmFsVGVybSgpICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZVJl
YWxUZXJtID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBuZXdBbmRUZXJtLmFkZFN1YlRlcm0oIHByZXBhcmVGb3JTcGFycWwoIHRlcm0gKSApOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKCBoYXZlTmVnYXRp
b25UZXJtICYmICFoYXZlUmVhbFRlcm0gKSB7Ci0gICAgICAgICAgICAgICAgbmV3QW5kVGVybS5h
ZGRTdWJUZXJtKCBOZXBvbXVrOjpRdWVyeTo6Q29tcGFyaXNvblRlcm0oIFNvcHJhbm86OlZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpLCBOZXBvbXVrOjpRdWVyeTo6VGVybSgpICkgKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiBuZXdBbmRUZXJtOwotICAgICAgICB9Ci0KLSAgICAg
ICAgY2FzZSBOZXBvbXVrOjpRdWVyeTo6VGVybTo6T3I6IHsKLSAgICAgICAgICAgIC8vIGNhbGwg
cHJlcGFyZUZvclNwYXJxbCBvbiBhbGwgc3VidGVybXMKLSAgICAgICAgICAgIFFMaXN0PE5lcG9t
dWs6OlF1ZXJ5OjpUZXJtPiBzdWJUZXJtcyA9IHRlcm0udG9PclRlcm0oKS5zdWJUZXJtcygpOwot
ICAgICAgICAgICAgUUxpc3Q8TmVwb211azo6UXVlcnk6OlRlcm0+IG5ld1N1YlRlcm1zOwotICAg
ICAgICAgICAgUV9GT1JFQUNIKCBjb25zdCBOZXBvbXVrOjpRdWVyeTo6VGVybSYgdGVybSwgc3Vi
VGVybXMgKSB7Ci0gICAgICAgICAgICAgICAgbmV3U3ViVGVybXMuYXBwZW5kKCBwcmVwYXJlRm9y
U3BhcnFsKCB0ZXJtICkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBOZXBv
bXVrOjpRdWVyeTo6T3JUZXJtKCBuZXdTdWJUZXJtcyApOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FzZSBOZXBvbXVrOjpRdWVyeTo6VGVybTo6TmVnYXRpb246IHsKLSAgICAgICAgICAgIC8vIGFk
ZCBhbiBhZGRpdGlvbmFsIHR5cGUgdGVybSBzaW5jZSB0aGVyZSBpcyBubyB1c2VmdWwgcGF0dGVy
bi4gT3RoZXJ3aXNlCi0gICAgICAgICAgICAvLyB3ZSB3b3VsZCBoYXZlIGNhdWdodCBpdCBhYm92
ZQotICAgICAgICAgICAgcmV0dXJuIE5lcG9tdWs6OlF1ZXJ5OjpBbmRUZXJtKAotICAgICAgICAg
ICAgICAgIHRlcm0sCi0gICAgICAgICAgICAgICAgTmVwb211azo6UXVlcnk6OkNvbXBhcmlzb25U
ZXJtKCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgTmVwb211azo6UXVlcnk6OlRl
cm0oKSApICk7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIE5lcG9tdWs6OlF1ZXJ5OjpUZXJt
OjpPcHRpb25hbDogewotICAgICAgICAgICAgcmV0dXJuIE5lcG9tdWs6OlF1ZXJ5OjpPcHRpb25h
bFRlcm06Om9wdGlvbmFsaXplVGVybSggcHJlcGFyZUZvclNwYXJxbCggdGVybS50b09wdGlvbmFs
VGVybSgpLnN1YlRlcm0oKSApICk7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIE5lcG9tdWs6
OlF1ZXJ5OjpUZXJtOjpDb21wYXJpc29uOiB7Ci0gICAgICAgICAgICBOZXBvbXVrOjpRdWVyeTo6
Q29tcGFyaXNvblRlcm0gY3QgPSB0ZXJtLnRvQ29tcGFyaXNvblRlcm0oKTsKLSAgICAgICAgICAg
IGN0LnNldFN1YlRlcm0oIHByZXBhcmVGb3JTcGFycWwoIGN0LnN1YlRlcm0oKSApICk7Ci0gICAg
ICAgICAgICByZXR1cm4gY3Q7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIHRlcm07Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAq
IHRlcm0gaXMgb3B0aW1pemVkIGFuZCByYW4gdGhyb3VnaCBwcmVwYXJlRm9yU3BhcnFsLiBUaGUg
b25seSB0eXBlIHRlcm1zCi0gICAgICogd2UgYXJlIGludGVyZXN0ZWQgaW4gYXJlIHRob3NlIHRo
YXQgYXJlIG5vbi1vcHRpb25hbC4KLSAgICAgKi8KLSAgICBib29sIGNvbnRhaW5zUmVzb3VyY2VU
eXBlVGVybSggY29uc3QgTmVwb211azo6UXVlcnk6OlRlcm0mIHRlcm0gKQotICAgIHsKLSAgICAg
ICAgaWYoIHRlcm0uaXNSZXNvdXJjZVR5cGVUZXJtKCkgKSB7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGluIGFuIGFuZC10ZXJtIGEgc2luZ2xlIHJl
c291cmNlIHR5cGUgdGVybSBpcyBzdWZmaWNpZW50Ci0gICAgICAgIGVsc2UgaWYoIHRlcm0uaXNB
bmRUZXJtKCkgKSB7Ci0gICAgICAgICAgICBRX0ZPUkVBQ0goIGNvbnN0IE5lcG9tdWs6OlF1ZXJ5
OjpUZXJtJiBzdWJUZXJtLCB0ZXJtLnRvQW5kVGVybSgpLnN1YlRlcm1zKCkgKSB7Ci0gICAgICAg
ICAgICAgICAgaWYoIGNvbnRhaW5zUmVzb3VyY2VUeXBlVGVybShzdWJUZXJtKSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gYW4gb3ItdGVybSB3aGljaCBvbmx5IGNvbnNp
c3RzIG9mIHJlc291cmNlIHR5cGUgdGVybXMgaXMgdmFsaWQgYWxzbwotICAgICAgICBlbHNlIGlm
KCB0ZXJtLmlzT3JUZXJtKCkgKSB7Ci0gICAgICAgICAgICBRX0ZPUkVBQ0goIGNvbnN0IE5lcG9t
dWs6OlF1ZXJ5OjpUZXJtJiBzdWJUZXJtLCB0ZXJtLnRvT3JUZXJtKCkuc3ViVGVybXMoKSApIHsK
LSAgICAgICAgICAgICAgICBpZiggIWNvbnRhaW5zUmVzb3VyY2VUeXBlVGVybShzdWJUZXJtKSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQgYWxsIHN1YnRlcm1z
IGNvbnRhaW4gYSBub24tb3B0aW9uYWwgcmVzb3VyY2UgdHlwZSB0ZXJtCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGZhbGxiYWNrCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLQogUVN0cmluZyBOZXBvbXVrOjpRdWVyeTo6UXVlcnlQ
cml2YXRlOjpjcmVhdGVGb2xkZXJGaWx0ZXIoIGNvbnN0IFFTdHJpbmcmIHJlc291cmNlVmFyTmFt
ZSwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkgY29uc3QKIHsKICAgICBpZiAoIG1faW5jbHVkZUZv
bGRlcnMuY291bnQoKSArIG1fZXhjbHVkZUZvbGRlcnMuY291bnQoKSApIHsKQEAgLTQ3MCwxMyAr
MzU1LDM1IEBACiAKIAogICAgIC8vIG9wdGltaXplIHdoYXRldmVyIHdlIGNhbgotICAgIHRlcm0g
PSBwcmVwYXJlRm9yU3BhcnFsKCB0ZXJtICkub3B0aW1pemVkKCk7CisgICAgdGVybSA9IHRlcm0u
b3B0aW1pemVkKCk7CiAKKwogICAgIC8vIGFjdHVhbGx5IGJ1aWxkIHRoZSBTUEFSUUwgcXVlcnkg
cGF0dGVybnMKICAgICBRdWVyeUJ1aWxkZXJEYXRhIHFiZCggZC5jb25zdERhdGEoKSwgc3BhcnFs
RmxhZ3MgKTsKKworCisgICAgLy8gV2UgcmVzdHJpY3QgcmVzdWx0cyB0byB1c2VyIHZpc2libGUg
dHlwZXMgb25seS4KKyAgICAvLworICAgIC8vIEhlcmUgd2UgdXNlIGFuIG9wdGltaXphdGlvbnM6
CisgICAgLy8gVGhlIHN0b3JhZ2Ugc2VydmljZSBjcmVhdGVzICJuYW86dXNlclZpc2libGUgMSIg
ZW50cmllcyBmb3IgYWxsIHZpc2libGUgcmVzb3VyY2VzLiBUaGlzIGNvbnRhaW5zIHR3byBvcHRp
bWl6YXRpb25zOgorICAgIC8vIC0gV2UgdXNlIGFuIGludGVnZXIgaW5zdGVhZCBvZiBhIGJvb2xl
YW4gYmVjYXVzZSBWaXJ0dW9zbyBkb2VzIG5vdCBzdXBwb3J0IGJvb2xlYW5zIGFuZCwgdGh1cywg
U29wcmFubyBjb252ZXJ0cworICAgIC8vICAgYm9vbGVhbnMgaW50byBhIGZha2UgdHlwZSB3aGlj
aCBpcyBzdG9yZWQgYXMgYSBzdHJpbmcuIFRoaXMgbWFrZXMgY29tcGFyaXNpb24gbXVjaCBzbG93
ZXIuCisgICAgLy8gLSBJbnN0ZWFkIG9mIHVzaW5nIGNyYXBweSBpbmZlcmVuY2UgdmlhICI/ciBh
ID90IC4gP3QgbmFvOnVzZXJWaXNpYmxlIHRydWUiIHdlIGNhbiBkaXJlY3RseSBjaGVjayB0aGUg
cmVzb3VyY2VzLgorICAgIC8vIC0gSW5zdGVhZCBvZiByZXN0cmljdGluZyB0aGUgdmlzaWJpbGl0
eSB0byAxIHdlIHRyaWNrIHRoZSBWaXJ0dW9zbyBxdWVyeSBvcHRpbWl6ZXIgc28gaXQgd29uJ3Qg
dHJ5IHRvIHVzZSB0aGUgdmlzaWJpbGl0eQorICAgIC8vICAgYXMgcHJpb3JpdHkuIFdlIGRvIHRo
aXMgd2l0aCBhIGZpbHRlciB0aGF0IGRvZXMgbm90IHRlc3QgZm9yIGVxdWFsaXR5LiBVc2luZyAi
P3IgbmFvOnVzZXJWaXNpYmxlIDEiIGhhcyBhIGRyYXN0aWMKKyAgICAvLyAgIHBlcmZvcm1hbmNl
IGltcGFjdCB3aGljaCB0aGUgZmlsdGVyIGhhcyBub3QuCisgICAgLy8KKyAgICBRU3RyaW5nIHVz
ZXJWaXNpYmlsaXR5UmVzdHJpY3Rpb247CisgICAgaWYoICEocXVlcnlGbGFncygpJk5vUmVzdWx0
UmVzdHJpY3Rpb25zKSApIHsKKyAgICAgICAgdXNlclZpc2liaWxpdHlSZXN0cmljdGlvbiA9IFFT
dHJpbmc6OmZyb21MYXRpbjEoIj9yICUxICUyIC4gRklMVEVSKCUyPjApIC4gIikKKyAgICAgICAg
ICAgICAgICAuYXJnKFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyhTb3ByYW5vOjpWb2NhYnVs
YXJ5OjpOQU86OnVzZXJWaXNpYmxlKCkpLAorICAgICAgICAgICAgICAgICAgICAgcWJkLnVuaXF1
ZVZhck5hbWUoKSk7CisgICAgfQorCisKICAgICBRU3RyaW5nIHRlcm1HcmFwaFBhdHRlcm47CiAg
ICAgaWYoIHRlcm0uaXNWYWxpZCgpICkgewotICAgICAgICB0ZXJtR3JhcGhQYXR0ZXJuID0gdGVy
bS5kX3B0ci0+dG9TcGFycWxHcmFwaFBhdHRlcm4oIFFMYXRpbjFTdHJpbmcoICI/ciIgKSwgJnFi
ZCApOworICAgICAgICB0ZXJtR3JhcGhQYXR0ZXJuID0gdGVybS5kX3B0ci0+dG9TcGFycWxHcmFw
aFBhdHRlcm4oIFFMYXRpbjFTdHJpbmcoICI/ciIgKSwgMCwgJnFiZCApOwogICAgICAgICBpZigg
dGVybUdyYXBoUGF0dGVybi5pc0VtcHR5KCkgKSB7CiAgICAgICAgICAgICBrRGVidWcoKSA8PCAi
R290IG5vIHZhbGlkIFNQQVJRTCBwYXR0ZXJuIGZyb20iIDw8IHRlcm07CiAgICAgICAgICAgICBy
ZXR1cm4gUVN0cmluZygpOwpAQCAtNDkzLDE4ICs0MDAsNiBAQAogICAgICAgICAgICAgc2VsZWN0
VmFyaWFibGVzIDw8IHNjb3JpbmdFeHByZXNzaW9uOwogICAgIH0KIAotICAgIC8vIHJlc3RyaWN0
IHRvIHJlc291cmNlcyB0byB1c2VyIHZpc2libGUgdHlwZXMgb25seS4gVGhlcmUgaXMgbm8gbmVl
ZCB0byBkbyB0aGF0IGZvciBmaWxlIHF1ZXJpZXMKLSAgICAvLyBhcyB0aG9zZSBhbHJlYWR5IHJl
c3RyaWN0IHRoZSB0eXBlLgotICAgIC8vIFNpbmNlIHdlIGRvIHRoZSByZXN0cmljdGlvbiBvbiB0
aGUgdHlwZSBpdCBnZXRzIHVzZWxlc3MgYXMgc29vbiBhcyB0aGUgcXVlcnkgY29udGFpbnMgYSBu
b24tb3B0aW9uYWwKLSAgICAvLyB0eXBlIHRlcm0gaXRzZWxmCi0gICAgUVN0cmluZyB1c2VyVmlz
aWJpbGl0eVJlc3RyaWN0aW9uOwotICAgIGlmKCAhZC0+bV9pc0ZpbGVRdWVyeSAmJiAhY29udGFp
bnNSZXNvdXJjZVR5cGVUZXJtKHRlcm0pICYmICEocXVlcnlGbGFncygpJk5vUmVzdWx0UmVzdHJp
Y3Rpb25zKSApIHsKLSAgICAgICAgdXNlclZpc2liaWxpdHlSZXN0cmljdGlvbiA9IFFTdHJpbmc6
OmZyb21MYXRpbjEoICI/ciBhICUxIC4gJTEgJTIgJTMgLiAiICkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5hcmcoIHFiZC51bmlxdWVWYXJOYW1lKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRv
TjMoU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OmxpdGVyYWxUb04z
KHRydWUpICk7Ci0gICAgfQotCiAgICAgLy8gYnVpbGQgdGhlIGNvcmUgb2YgdGhlIHF1ZXJ5IC0g
dGhlIHBhcnQgdGhhdCBuZXZlciBjaGFuZ2VzCiAgICAgUVN0cmluZyBxdWVyeUJhc2UgPSBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCAid2hlcmUgeyAlMSAlMiAlMyB9IiApCiAgICAgICAgICAgICAgICAg
ICAgICAgICAuYXJnKCB0ZXJtR3JhcGhQYXR0ZXJuLApJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1
ZXJ5L3Jlc291cmNldHlwZXRlcm1fcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtkZWxpYnMvbmVwb211ay9x
dWVyeS9yZXNvdXJjZXR5cGV0ZXJtX3AuaAkocmV2aXNpb24gMTIxNTcwNSkKKysrIGtkZWxpYnMv
bmVwb211ay9xdWVyeS9yZXNvdXJjZXR5cGV0ZXJtX3AuaAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NyArNDAsNyBAQAogCiAgICAgICAgICAgICBib29sIGVxdWFscyggY29uc3QgVGVybVByaXZhdGUq
IG90aGVyICkgY29uc3Q7CiAgICAgICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biBtX2NsYXNzLmlzVmFsaWQoKTsgfQotICAgICAgICAgICAgUVN0cmluZyB0b1NwYXJxbEdyYXBo
UGF0dGVybiggY29uc3QgUVN0cmluZyYgcmVzb3VyY2VWYXJOYW1lLCBRdWVyeUJ1aWxkZXJEYXRh
KiBxYmQgKSBjb25zdDsKKyAgICAgICAgICAgIFFTdHJpbmcgdG9TcGFycWxHcmFwaFBhdHRlcm4o
IGNvbnN0IFFTdHJpbmcmIHJlc291cmNlVmFyTmFtZSwgY29uc3QgVGVybVByaXZhdGUqIHBhcmVu
dFRlcm0sIFF1ZXJ5QnVpbGRlckRhdGEqIHFiZCApIGNvbnN0OwogCiAgICAgICAgICAgICBUeXBl
czo6Q2xhc3MgbV9jbGFzczsKICAgICAgICAgfTsKSW5kZXg6IGtkZWxpYnMvbmVwb211ay9xdWVy
eS9saXRlcmFsdGVybV9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L2xp
dGVyYWx0ZXJtX3AuaAkocmV2aXNpb24gMTIxNTcwNSkKKysrIGtkZWxpYnMvbmVwb211ay9xdWVy
eS9saXRlcmFsdGVybV9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKIAogICAg
ICAgICAgICAgYm9vbCBlcXVhbHMoIGNvbnN0IFRlcm1Qcml2YXRlKiBvdGhlciApIGNvbnN0Owog
ICAgICAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5pc1ZhbGlk
KCk7IH0KLSAgICAgICAgICAgIFFTdHJpbmcgdG9TcGFycWxHcmFwaFBhdHRlcm4oIGNvbnN0IFFT
dHJpbmcmIHJlc291cmNlVmFyTmFtZSwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkgY29uc3Q7Cisg
ICAgICAgICAgICBRU3RyaW5nIHRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiBy
ZXNvdXJjZVZhck5hbWUsIGNvbnN0IFRlcm1Qcml2YXRlKiBwYXJlbnRUZXJtLCBRdWVyeUJ1aWxk
ZXJEYXRhKiBxYmQgKSBjb25zdDsKIAogICAgICAgICAgICAgc3RhdGljIFFTdHJpbmcgY3JlYXRl
Q29udGFpbnNQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiB2YXJOYW1lLCBjb25zdCBRU3RyaW5nJiB0
ZXh0LCBRdWVyeUJ1aWxkZXJEYXRhKiBxYmQgKTsKIApJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1
ZXJ5L25lZ2F0aW9udGVybV9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2RlbGlicy9uZXBvbXVrL3F1ZXJ5
L25lZ2F0aW9udGVybV9wLmgJKHJldmlzaW9uIDEyMTU3MDUpCisrKyBrZGVsaWJzL25lcG9tdWsv
cXVlcnkvbmVnYXRpb250ZXJtX3AuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAog
CiAgICAgICAgICAgICBUZXJtUHJpdmF0ZSogY2xvbmUoKSBjb25zdCB7IHJldHVybiBuZXcgTmVn
YXRpb25UZXJtUHJpdmF0ZSggKnRoaXMgKTsgfQogCi0gICAgICAgICAgICBRU3RyaW5nIHRvU3Bh
cnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZhck5hbWUsIFF1ZXJ5QnVp
bGRlckRhdGEqIHFiZCApIGNvbnN0OworICAgICAgICAgICAgUVN0cmluZyB0b1NwYXJxbEdyYXBo
UGF0dGVybiggY29uc3QgUVN0cmluZyYgcmVzb3VyY2VWYXJOYW1lLCBjb25zdCBUZXJtUHJpdmF0
ZSogcGFyZW50VGVybSwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkgY29uc3Q7CiAgICAgICAgIH07
CiAgICAgfQogfQpJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L2NvbXBhcmlzb250ZXJtX3Au
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrZGVsaWJzL25lcG9tdWsvcXVlcnkvY29tcGFyaXNvbnRlcm1fcC5o
CShyZXZpc2lvbiAxMjE1NzA1KQorKysga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L2NvbXBhcmlzb250
ZXJtX3AuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogCiAgICAgICAgICAgICBi
b29sIGVxdWFscyggY29uc3QgVGVybVByaXZhdGUqIG90aGVyICkgY29uc3Q7CiAgICAgICAgICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdDsKLSAgICAgICAgICAgIFFTdHJpbmcgdG9TcGFycWxHcmFw
aFBhdHRlcm4oIGNvbnN0IFFTdHJpbmcmIHJlc291cmNlVmFyTmFtZSwgUXVlcnlCdWlsZGVyRGF0
YSogcWJkICkgY29uc3Q7CisgICAgICAgICAgICBRU3RyaW5nIHRvU3BhcnFsR3JhcGhQYXR0ZXJu
KCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZhck5hbWUsIGNvbnN0IFRlcm1Qcml2YXRlKiBwYXJl
bnRUZXJtLCBRdWVyeUJ1aWxkZXJEYXRhKiBxYmQgKSBjb25zdDsKIAogICAgICAgICAgICAgLyoq
CiAgICAgICAgICAgICAgKiByZXR1cm4gbV92YXJpYWJsZU5hbWUgYW5kIHJlZ2lzdGVyIGl0IHdp
dGggcWJkCkluZGV4OiBrZGVsaWJzL25lcG9tdWsvcXVlcnkvYW5kdGVybS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L2FuZHRlcm0uY3BwCShyZXZpc2lvbiAxMjE1NzA1
KQorKysga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L2FuZHRlcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSwxMyArMjUsMTUgQEAKIAogI2luY2x1ZGUgPFF0Q29yZS9RU3RyaW5nTGlzdD4KIAotUVN0
cmluZyBOZXBvbXVrOjpRdWVyeTo6QW5kVGVybVByaXZhdGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJu
KCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZhck5hbWUsIFF1ZXJ5QnVpbGRlckRhdGEqIHFiZCAp
IGNvbnN0CitRU3RyaW5nIE5lcG9tdWs6OlF1ZXJ5OjpBbmRUZXJtUHJpdmF0ZTo6dG9TcGFycWxH
cmFwaFBhdHRlcm4oIGNvbnN0IFFTdHJpbmcmIHJlc291cmNlVmFyTmFtZSwgY29uc3QgVGVybVBy
aXZhdGUqIHBhcmVudFRlcm0sIFF1ZXJ5QnVpbGRlckRhdGEqIHFiZCApIGNvbnN0CiB7CisgICAg
UV9VTlVTRUQocGFyZW50VGVybSk7CisKICAgICBRU3RyaW5nTGlzdCBwYXR0ZXJuOwogCiAgICAg
cWJkLT5wdXNoR3JvdXBUZXJtKHRoaXMpOwogICAgIGZvcmVhY2goIGNvbnN0IE5lcG9tdWs6OlF1
ZXJ5OjpUZXJtICZ0LCBtX3N1YlRlcm1zICkgewotICAgICAgICBwYXR0ZXJuICs9IHQuZF9wdHIt
PnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCByZXNvdXJjZVZhck5hbWUsIHFiZCApOworICAgICAgICBw
YXR0ZXJuICs9IHQuZF9wdHItPnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCByZXNvdXJjZVZhck5hbWUs
IHRoaXMsIHFiZCApOwogICAgIH0KICAgICBxYmQtPnBvcEdyb3VwVGVybSgpOwogCkBAIC0zOSw2
ICs0MSwxOSBAQAogfQogCiAKK2Jvb2wgTmVwb211azo6UXVlcnk6OkFuZFRlcm1Qcml2YXRlOjpo
YXNSZWFsUGF0dGVybigpIGNvbnN0Cit7CisgICAgUV9GT1JFQUNIKCBjb25zdCBOZXBvbXVrOjpR
dWVyeTo6VGVybSYgdGVybSwgbV9zdWJUZXJtcyApIHsKKyAgICAgICAgaWYoIHRlcm0uaXNDb21w
YXJpc29uVGVybSgpIHx8CisgICAgICAgICAgICAgICAgdGVybS5pc1Jlc291cmNlVHlwZVRlcm0o
KSB8fAorICAgICAgICAgICAgICAgIHRlcm0uaXNMaXRlcmFsVGVybSgpICkgeworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CisKIE5lcG9tdWs6OlF1ZXJ5OjpBbmRUZXJtOjpBbmRUZXJtKCkKICAgICA6IEdyb3VwVGVybSgg
bmV3IEFuZFRlcm1Qcml2YXRlKCkgKQogewpJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L29y
dGVybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L29ydGVybS5jcHAJ
KHJldmlzaW9uIDEyMTU3MDUpCisrKyBrZGVsaWJzL25lcG9tdWsvcXVlcnkvb3J0ZXJtLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsMTMgKzI1LDE1IEBACiAKICNpbmNsdWRlIDxRdENvcmUvUVN0
cmluZ0xpc3Q+CiAKLVFTdHJpbmcgTmVwb211azo6UXVlcnk6Ok9yVGVybVByaXZhdGU6OnRvU3Bh
cnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZhck5hbWUsIFF1ZXJ5QnVp
bGRlckRhdGEqIHFiZCApIGNvbnN0CitRU3RyaW5nIE5lcG9tdWs6OlF1ZXJ5OjpPclRlcm1Qcml2
YXRlOjp0b1NwYXJxbEdyYXBoUGF0dGVybiggY29uc3QgUVN0cmluZyYgcmVzb3VyY2VWYXJOYW1l
LCBjb25zdCBUZXJtUHJpdmF0ZSogcGFyZW50VGVybSwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkg
Y29uc3QKIHsKKyAgICBRX1VOVVNFRChwYXJlbnRUZXJtKTsKKwogICAgIFFTdHJpbmdMaXN0IHBh
dHRlcm47CiAKICAgICBxYmQtPnB1c2hHcm91cFRlcm0odGhpcyk7CiAgICAgZm9yZWFjaCggY29u
c3QgTmVwb211azo6UXVlcnk6OlRlcm0gJnQsIG1fc3ViVGVybXMgKSB7Ci0gICAgICAgIHBhdHRl
cm4gKz0gdC5kX3B0ci0+dG9TcGFycWxHcmFwaFBhdHRlcm4oIHJlc291cmNlVmFyTmFtZSwgcWJk
ICk7CisgICAgICAgIHBhdHRlcm4gKz0gdC5kX3B0ci0+dG9TcGFycWxHcmFwaFBhdHRlcm4oIHJl
c291cmNlVmFyTmFtZSwgdGhpcywgcWJkICk7CiAgICAgfQogICAgIHFiZC0+cG9wR3JvdXBUZXJt
KCk7CiAKSW5kZXg6IGtkZWxpYnMvbmVwb211ay9xdWVyeS9xdWVyeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtkZWxpYnMvbmVwb211ay9xdWVyeS9xdWVyeS5oCShyZXZpc2lvbiAxMjE1NzA1KQorKysga2Rl
bGlicy9uZXBvbXVrL3F1ZXJ5L3F1ZXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMCw2ICs0MDAs
OSBAQAogICAgICAgICAgICAgICogQ29udmVydCB0aGUgcXVlcnkgaW50byBhIFNQQVJRTCBxdWVy
eSB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIHRoZQogICAgICAgICAgICAgICogTmVwb211ayBxdWVy
eSBzZXJ2aWNlIG9yIGRpcmVjdGx5IGluIFNvcHJhbm86Ok1vZGVsOjpleGVjdXRlUXVlcnkuCiAg
ICAgICAgICAgICAgKgorICAgICAgICAgICAgICogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIFF1
ZXJ5U2VydmljZUNsaWVudCBpbnN0ZWFkIG9mIGNyZWF0aW5nCisgICAgICAgICAgICAgKiB0aGUg
U1BBUlFMIHF1ZXJ5IHRoaXMgd2F5LgorICAgICAgICAgICAgICoKICAgICAgICAgICAgICAqIFRo
ZSByZXN1bHRpbmcgcXVlcnkgd2lsbCBiaW5kIHRoZSByZXN1bHRzIHRvIHZhcmlhYmxlIFxwICdy
Jy4gUmVxdWVzdAogICAgICAgICAgICAgICogcHJvcGVydGllcyB3aWxsIGJlIGJvdW5kIHRvIHZh
cmlhYmxlcyBccCAncmVxUHJvcDEnIHRocm91Z2ggXHAgJ3JlcVByb3BOJwogICAgICAgICAgICAg
ICogKHRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBhIGNvdW50IHF1ZXJ5IGNyZWF0ZWQgdmlhIHRoZSBD
cmVhdGVDb3VudFF1ZXJ5IGZsYWcpLgpJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L29wdGlv
bmFsdGVybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L29wdGlvbmFs
dGVybS5jcHAJKHJldmlzaW9uIDEyMTU3MDUpCisrKyBrZGVsaWJzL25lcG9tdWsvcXVlcnkvb3B0
aW9uYWx0ZXJtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTAgKzIzLDEyIEBACiAjaW5jbHVk
ZSAib3B0aW9uYWx0ZXJtX3AuaCIKICNpbmNsdWRlICJxdWVyeWJ1aWxkZXJkYXRhX3AuaCIKIAot
UVN0cmluZyBOZXBvbXVrOjpRdWVyeTo6T3B0aW9uYWxUZXJtUHJpdmF0ZTo6dG9TcGFycWxHcmFw
aFBhdHRlcm4oIGNvbnN0IFFTdHJpbmcmIHJlc291cmNlVmFyTmFtZSwgUXVlcnlCdWlsZGVyRGF0
YSogcWJkICkgY29uc3QKK1FTdHJpbmcgTmVwb211azo6UXVlcnk6Ok9wdGlvbmFsVGVybVByaXZh
dGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZhck5hbWUs
IGNvbnN0IFRlcm1Qcml2YXRlKiBwYXJlbnRUZXJtLCBRdWVyeUJ1aWxkZXJEYXRhKiBxYmQgKSBj
b25zdAogeworICAgIFFfVU5VU0VEKHBhcmVudFRlcm0pOworCiAgICAgcmV0dXJuIFFTdHJpbmco
ICJPUFRJT05BTCB7ICUxfSAiICkKLSAgICAgICAgLmFyZyggbV9zdWJUZXJtLmRfcHRyLT50b1Nw
YXJxbEdyYXBoUGF0dGVybiggcmVzb3VyY2VWYXJOYW1lLCBxYmQgKSApOworICAgICAgICAuYXJn
KCBtX3N1YlRlcm0uZF9wdHItPnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCByZXNvdXJjZVZhck5hbWUs
IHRoaXMsIHFiZCApICk7CiB9CiAKIApJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L2FuZHRl
cm1fcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtkZWxpYnMvbmVwb211ay9xdWVyeS9hbmR0ZXJtX3AuaAko
cmV2aXNpb24gMTIxNTcwNSkKKysrIGtkZWxpYnMvbmVwb211ay9xdWVyeS9hbmR0ZXJtX3AuaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsMjQgQEAKIAogICAgICAgICAgICAgVGVybVByaXZh
dGUqIGNsb25lKCkgY29uc3QgeyByZXR1cm4gbmV3IEFuZFRlcm1Qcml2YXRlKCAqdGhpcyApOyB9
CiAKLSAgICAgICAgICAgIFFTdHJpbmcgdG9TcGFycWxHcmFwaFBhdHRlcm4oIGNvbnN0IFFTdHJp
bmcmIHJlc291cmNlVmFyTmFtZSwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkgY29uc3Q7CisgICAg
ICAgICAgICBRU3RyaW5nIHRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNv
dXJjZVZhck5hbWUsIGNvbnN0IFRlcm1Qcml2YXRlKiwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkg
Y29uc3Q7CisKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogU2luY2UgZmlsdGVycyBj
YW4gb25seSB3b3JrIG9uIGEgInJlYWwiIGdyYXBoIHBhdHRlcm4KKyAgICAgICAgICAgICAqIHdl
IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgc3VjaCBhIHBhdHRlcm4gZXhpc3RzLiBUaGlzIGNhbiBi
ZSBkb25lIGJ5IHNlYXJjaGluZyBvbmUgaW4gYQorICAgICAgICAgICAgICogc3Vycm91bmRpbmcg
QW5kVGVybS4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBXaHkgaXMgdGhhdCBlbm91
Z2g/CisgICAgICAgICAgICAgKiBOZXN0ZWQgQW5kVGVybXMgYXJlIGZsYXR0ZW5lZCBiZWZvcmUg
dGhlIFNQQVJRTCBxdWVyeSBpcyBjb25zdHJ1Y3RlZCBpbiBRdWVyeS4gVGh1cywgYW4gQW5kVGVy
bSBjYW4KKyAgICAgICAgICAgICAqIG9ubHkgYmUgZW1iZWRkZWQgaW4gYW4gT3JUZXJtIG9yIGFz
IGEgY2hpbGQgdGVybSB0byBlaXRoZXIgYSBDb21wYXJpc29uVGVybSBvciBhbiBPcHRpb25hbFRl
cm0uCisgICAgICAgICAgICAgKiBJbiBib3RoIGNhc2VzIHdlIG5lZWQgYSByZWFsIHBhdHRlcm4g
aW5zaWRlIHRoZSBBbmRUZXJtLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIFRoaXMg
bWV0aG9kIGNoZWNrcyBpZiB0aGUgYW5kIHRlcm0gaGFzIGEgInJlYWwiIG5vbi1maWx0ZXIgc3Vi
dGVybS4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2Vk
IGJ5IE5lZ2F0aW9uVGVybSBhbmQgUmVzb3VyY2VUZXJtIHRvIGNoZWNrIGlmIHRoZXkgbmVlZCB0
byBhZGQgYW4gYXJ0aWZpY2lhbCAicmVhbCIKKyAgICAgICAgICAgICAqIHBhdHRlcm4uCisgICAg
ICAgICAgICAgKi8KKyAgICAgICAgICAgIGJvb2wgaGFzUmVhbFBhdHRlcm4oKSBjb25zdDsKICAg
ICAgICAgfTsKICAgICB9CiB9CkluZGV4OiBrZGVsaWJzL25lcG9tdWsvcXVlcnkvcmVzb3VyY2V0
ZXJtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrZGVsaWJzL25lcG9tdWsvcXVlcnkvcmVzb3VyY2V0ZXJt
LmNwcAkocmV2aXNpb24gMTIxNTcwNSkKKysrIGtkZWxpYnMvbmVwb211ay9xdWVyeS9yZXNvdXJj
ZXRlcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw4IEBACiAKICNpbmNsdWRlICJy
ZXNvdXJjZXRlcm0uaCIKICNpbmNsdWRlICJyZXNvdXJjZXRlcm1fcC5oIgorI2luY2x1ZGUgInF1
ZXJ5YnVpbGRlcmRhdGFfcC5oIgorI2luY2x1ZGUgImFuZHRlcm1fcC5oIgogCiAjaW5jbHVkZSA8
U29wcmFuby9Ob2RlPgogCkBAIC0zNyw5ICszOSwzOCBAQAogfQogCiAKLVFTdHJpbmcgTmVwb211
azo6UXVlcnk6OlJlc291cmNlVGVybVByaXZhdGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25z
dCBRU3RyaW5nJiwgUXVlcnlCdWlsZGVyRGF0YSogKSBjb25zdAorUVN0cmluZyBOZXBvbXVrOjpR
dWVyeTo6UmVzb3VyY2VUZXJtUHJpdmF0ZTo6dG9TcGFycWxHcmFwaFBhdHRlcm4oIGNvbnN0IFFT
dHJpbmcmIHZhck5hbWUsIGNvbnN0IFRlcm1Qcml2YXRlKiBwYXJlbnRUZXJtLCBRdWVyeUJ1aWxk
ZXJEYXRhKiBxYmQgKSBjb25zdAogewotICAgIHJldHVybiBTb3ByYW5vOjpOb2RlOjpyZXNvdXJj
ZVRvTjMoIG1fcmVzb3VyY2UucmVzb3VyY2VVcmkoKSApOworICAgIC8vCisgICAgLy8gQSBuZWdh
dGlvbiBpcyBleHByZXNzZWQgdmlhIGEgZmlsdGVyLiBTaW5jZSBmaWx0ZXJzIGNhbiBvbmx5IHdv
cmsgb24gYSAicmVhbCIgZ3JhcGggcGF0dGVybgorICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJl
IHRoYXQgc3VjaCBhIHBhdHRlcm4gZXhpc3RzLiBUaGlzIGNhbiBiZSBkb25lIGJ5IHNlYXJjaGlu
ZyBvbmUgaW4gYQorICAgIC8vIHN1cnJvdW5kaW5nIEFuZFRlcm0uCisgICAgLy8KKyAgICAvLyBX
aHkgaXMgdGhhdCBlbm91Z2g/CisgICAgLy8gTmVzdGVkIEFuZFRlcm1zIGFyZSBmbGF0dGVuZWQg
YmVmb3JlIHRoZSBTUEFSUUwgcXVlcnkgaXMgY29uc3RydWN0ZWQgaW4gUXVlcnkuIFRodXMsIGFu
IEFuZFRlcm0gY2FuCisgICAgLy8gb25seSBiZSBlbWJlZGRlZCBpbiBhbiBPclRlcm0gb3IgYXMg
YSBjaGlsZCB0ZXJtIHRvIGVpdGhlciBhIENvbXBhcmlzb25UZXJtIG9yIGFuIE9wdGlvbmFsVGVy
bS4KKyAgICAvLyBJbiBib3RoIGNhc2VzIHdlIG5lZWQgYSByZWFsIHBhdHRlcm4gaW5zaWRlIHRo
ZSBBbmRUZXJtLgorICAgIC8vCisgICAgLy8gV2UgdXNlIGEgdHlwZSBwYXR0ZXJuIGZvciBwZXJm
b3JtYW5jZSByZWFzb25zLiBUaHVzLCB3ZSBhc3N1bWUgdGhhdCBlYWNoIHJlc291cmNlIGhhcyBh
IHR5cGUuIFRoaXMKKyAgICAvLyBpcyBub3QgcGVyZmVjdCBidXQgbXVjaCBmYXN0ZXIgdGhhbiB1
c2luZyBhIHdpbGRjYXJkIGZvciB0aGUgcHJvcGVydHkuIEFuZCBpbiB0aGUgZW5kIGFsbCBOZXBv
bXVrCisgICAgLy8gcmVzb3VyY2VzIHNob3VsZCBoYXZlIGEgcHJvcGVybHkgZGVmaW5lZCB0eXBl
LgorICAgIC8vCisgICAgYm9vbCBoYXZlUmVhbFRlcm0gPSBmYWxzZTsKKyAgICBpZiggcGFyZW50
VGVybSAmJiBwYXJlbnRUZXJtLT5tX3R5cGUgPT0gVGVybTo6QW5kICkgeworICAgICAgICBoYXZl
UmVhbFRlcm0gPSBzdGF0aWNfY2FzdDxjb25zdCBBbmRUZXJtUHJpdmF0ZSo+KHBhcmVudFRlcm0p
LT5oYXNSZWFsUGF0dGVybigpOworICAgIH0KKworICAgIFFTdHJpbmcgdGVybTsKKyAgICBpZigg
IWhhdmVSZWFsVGVybSApIHsKKyAgICAgICAgdGVybSArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCIl
MSBhICUyIC4gIikKKyAgICAgICAgICAgICAgICAuYXJnKCB2YXJOYW1lLCBxYmQtPnVuaXF1ZVZh
ck5hbWUoKSApOworICAgIH0KKworICAgIHRlcm0gKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiRklM
VEVSKCUxPSUyKSAuICIpCisgICAgICAgICAgICAuYXJnKCB2YXJOYW1lLAorICAgICAgICAgICAg
ICAgICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBtX3Jlc291cmNlLnJlc291cmNlVXJp
KCkgKSApOworCisgICAgcmV0dXJuIHRlcm07CiB9CiAKIApJbmRleDoga2RlbGlicy9uZXBvbXVr
L3F1ZXJ5L3Jlc291cmNldHlwZXRlcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtkZWxpYnMvbmVwb211
ay9xdWVyeS9yZXNvdXJjZXR5cGV0ZXJtLmNwcAkocmV2aXNpb24gMTIxNTcwNSkKKysrIGtkZWxp
YnMvbmVwb211ay9xdWVyeS9yZXNvdXJjZXR5cGV0ZXJtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzksMTQgKzM5LDE0IEBACiB9CiAKIAotUVN0cmluZyBOZXBvbXVrOjpRdWVyeTo6UmVzb3VyY2VU
eXBlVGVybVByaXZhdGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNO
YW1lLCBRdWVyeUJ1aWxkZXJEYXRhKiBxYmQgKSBjb25zdAorUVN0cmluZyBOZXBvbXVrOjpRdWVy
eTo6UmVzb3VyY2VUeXBlVGVybVByaXZhdGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBR
U3RyaW5nJiByZXNOYW1lLCBjb25zdCBUZXJtUHJpdmF0ZSogcGFyZW50VGVybSwgUXVlcnlCdWls
ZGVyRGF0YSogKSBjb25zdAogeworICAgIFFfVU5VU0VEKHBhcmVudFRlcm0pOworCiAgICAgLy8g
d2UgYXJlIHVzaW5nIHRoZSBjcmFwcHkgaW5mZXJlbmNpbmcgcHJvdmlkZWQgYnkgdGhlIG5lcG9t
dWsgb250b2xvZ3kgc2VydmljZSB3aGVyZQogICAgIC8vIGVhY2ggY2xhc3MgaXMgYWxzbyBhIHN1
YmNsYXNzIG9mIGl0c2VsZi4KLSAgICByZXR1cm4gUVN0cmluZzo6ZnJvbUxhdGluMSgiJTEgYSAl
MiAuICUyICUzICU0IC4gIikKKyAgICByZXR1cm4gUVN0cmluZzo6ZnJvbUxhdGluMSgiJTEgYSAl
MiAuICIpCiAgICAgICAgIC5hcmcoIHJlc05hbWUsCi0gICAgICAgICAgICAgIHFiZC0+dW5pcXVl
VmFyTmFtZSgpLAotICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSApLAogICAgICAgICAgICAgICBT
b3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIG1fY2xhc3MudXJpKCkgKSApOwogfQogCkluZGV4
OiBrZGVsaWJzL25lcG9tdWsvcXVlcnkvbGl0ZXJhbHRlcm0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtk
ZWxpYnMvbmVwb211ay9xdWVyeS9saXRlcmFsdGVybS5jcHAJKHJldmlzaW9uIDEyMTU3MDUpCisr
KyBrZGVsaWJzL25lcG9tdWsvcXVlcnkvbGl0ZXJhbHRlcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw4ICs1MCwxMCBAQAogLy8gQnV0IHNpbmNlIG1hbnkgcmVsYXRpb25zIGxpa2UgbmFvOmhh
c1RhZyBvciBubW06cGVyZm9ybWVyIG9yIHNpbWlsYXIgYXJlIGNvbnNpZGVyZWQgYXMgcGxhaW4g
dGV4dCBmaWVsZHMgd2UgZXh0ZW5kIHRoZSBwYXR0ZXJuIGJ5IGFkZGluZwogLy8gcmVsYXRpb25z
IHRvIHJlc291cmNlcyB0aGF0IGhhdmUgbGFiZWxzIGNvbnRhaW5pbmcgdGhlIHF1ZXJ5IHRleHQu
CiAvLwotUVN0cmluZyBOZXBvbXVrOjpRdWVyeTo6TGl0ZXJhbFRlcm1Qcml2YXRlOjp0b1NwYXJx
bEdyYXBoUGF0dGVybiggY29uc3QgUVN0cmluZyYgcmVzb3VyY2VWYXJOYW1lLCBRdWVyeUJ1aWxk
ZXJEYXRhKiBxYmQgKSBjb25zdAorUVN0cmluZyBOZXBvbXVrOjpRdWVyeTo6TGl0ZXJhbFRlcm1Q
cml2YXRlOjp0b1NwYXJxbEdyYXBoUGF0dGVybiggY29uc3QgUVN0cmluZyYgcmVzb3VyY2VWYXJO
YW1lLCBjb25zdCBUZXJtUHJpdmF0ZSogcGFyZW50VGVybSwgUXVlcnlCdWlsZGVyRGF0YSogcWJk
ICkgY29uc3QKIHsKKyAgICBRX1VOVVNFRChwYXJlbnRUZXJtKTsKKwogICAgIGNvbnN0IFFTdHJp
bmcgdjEgPSBxYmQtPnVuaXF1ZVZhck5hbWUoKTsKICAgICBjb25zdCBRU3RyaW5nIHYyID0gcWJk
LT51bmlxdWVWYXJOYW1lKCk7CiAgICAgY29uc3QgUVN0cmluZyB2MyA9IHFiZC0+dW5pcXVlVmFy
TmFtZSgpOwpJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L3Rlcm1fcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtkZWxpYnMvbmVwb211ay9xdWVyeS90ZXJtX3AuaAkocmV2aXNpb24gMTIxNTcwNSkKKysr
IGtkZWxpYnMvbmVwb211ay9xdWVyeS90ZXJtX3AuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyAr
NDEsNyBAQAogICAgICAgICAgICAgdmlydHVhbCBUZXJtUHJpdmF0ZSogY2xvbmUoKSBjb25zdCB7
IHJldHVybiBuZXcgVGVybVByaXZhdGUoICp0aGlzICk7IH0KIAogICAgICAgICAgICAgdmlydHVh
bCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICAgICAgdmly
dHVhbCBRU3RyaW5nIHRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiwgUXVlcnlC
dWlsZGVyRGF0YSogKSBjb25zdCB7IHJldHVybiBRU3RyaW5nKCk7IH0KKyAgICAgICAgICAgIHZp
cnR1YWwgUVN0cmluZyB0b1NwYXJxbEdyYXBoUGF0dGVybiggY29uc3QgUVN0cmluZyYsIGNvbnN0
IFRlcm1Qcml2YXRlKiwgUXVlcnlCdWlsZGVyRGF0YSogKSBjb25zdCB7IHJldHVybiBRU3RyaW5n
KCk7IH0KICAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoIGNvbnN0IFRlcm1Qcml2YXRl
KiBvdGhlciApIGNvbnN0IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbV90eXBlID09IG90aGVy
LT5tX3R5cGU7CiAgICAgICAgICAgICB9CkluZGV4OiBrZGVsaWJzL25lcG9tdWsvcXVlcnkvb3J0
ZXJtX3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrZGVsaWJzL25lcG9tdWsvcXVlcnkvb3J0ZXJtX3AuaAko
cmV2aXNpb24gMTIxNTcwNSkKKysrIGtkZWxpYnMvbmVwb211ay9xdWVyeS9vcnRlcm1fcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKICAgICAgICAgICAgIFRlcm1Qcml2YXRl
KiBjbG9uZSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBPclRlcm1Qcml2YXRlKCAqdGhpcyApOyB9CiAK
LSAgICAgICAgICAgIFFTdHJpbmcgdG9TcGFycWxHcmFwaFBhdHRlcm4oIGNvbnN0IFFTdHJpbmcm
IHJlc291cmNlVmFyTmFtZSwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkgY29uc3Q7CisgICAgICAg
ICAgICBRU3RyaW5nIHRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNvdXJj
ZVZhck5hbWUsIGNvbnN0IFRlcm1Qcml2YXRlKiwgUXVlcnlCdWlsZGVyRGF0YSogcWJkICkgY29u
c3Q7CiAgICAgICAgIH07CiAgICAgfQogfQpJbmRleDoga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L25l
Z2F0aW9udGVybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2RlbGlicy9uZXBvbXVrL3F1ZXJ5L25lZ2F0
aW9udGVybS5jcHAJKHJldmlzaW9uIDEyMTU3MDUpCisrKyBrZGVsaWJzL25lcG9tdWsvcXVlcnkv
bmVnYXRpb250ZXJtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTEgKzIyLDQwIEBACiAjaW5j
bHVkZSAibmVnYXRpb250ZXJtLmgiCiAjaW5jbHVkZSAibmVnYXRpb250ZXJtX3AuaCIKICNpbmNs
dWRlICJxdWVyeWJ1aWxkZXJkYXRhX3AuaCIKKyNpbmNsdWRlICJhbmR0ZXJtLmgiCisjaW5jbHVk
ZSAiYW5kdGVybV9wLmgiCiAKLVFTdHJpbmcgTmVwb211azo6UXVlcnk6Ok5lZ2F0aW9uVGVybVBy
aXZhdGU6OnRvU3BhcnFsR3JhcGhQYXR0ZXJuKCBjb25zdCBRU3RyaW5nJiByZXNvdXJjZVZhck5h
bWUsIFF1ZXJ5QnVpbGRlckRhdGEqIHFiZCApIGNvbnN0CitRU3RyaW5nIE5lcG9tdWs6OlF1ZXJ5
OjpOZWdhdGlvblRlcm1Qcml2YXRlOjp0b1NwYXJxbEdyYXBoUGF0dGVybiggY29uc3QgUVN0cmlu
ZyYgcmVzb3VyY2VWYXJOYW1lLCBjb25zdCBUZXJtUHJpdmF0ZSogcGFyZW50VGVybSwgUXVlcnlC
dWlsZGVyRGF0YSogcWJkICkgY29uc3QKIHsKLSAgICByZXR1cm4gUVN0cmluZyggIkZJTFRFUigh
YmlmOmV4aXN0cygoc2VsZWN0ICgxKSB3aGVyZSB7ICUxIH0pKSkgLiAiICkKLSAgICAgICAgLmFy
ZyggbV9zdWJUZXJtLmRfcHRyLT50b1NwYXJxbEdyYXBoUGF0dGVybiggcmVzb3VyY2VWYXJOYW1l
LCBxYmQgKSApOworICAgIC8vCisgICAgLy8gQSBuZWdhdGlvbiBpcyBleHByZXNzZWQgdmlhIGEg
ZmlsdGVyLiBTaW5jZSBmaWx0ZXJzIGNhbiBvbmx5IHdvcmsgb24gYSAicmVhbCIgZ3JhcGggcGF0
dGVybgorICAgIC8vIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgc3VjaCBhIHBhdHRlcm4gZXhp
c3RzLiBUaGlzIGNhbiBiZSBkb25lIGJ5IHNlYXJjaGluZyBvbmUgaW4gYQorICAgIC8vIHN1cnJv
dW5kaW5nIEFuZFRlcm0uCisgICAgLy8KKyAgICAvLyBXaHkgaXMgdGhhdCBlbm91Z2g/CisgICAg
Ly8gTmVzdGVkIEFuZFRlcm1zIGFyZSBmbGF0dGVuZWQgYmVmb3JlIHRoZSBTUEFSUUwgcXVlcnkg
aXMgY29uc3RydWN0ZWQgaW4gUXVlcnkuIFRodXMsIGFuIEFuZFRlcm0gY2FuCisgICAgLy8gb25s
eSBiZSBlbWJlZGRlZCBpbiBhbiBPclRlcm0gb3IgYXMgYSBjaGlsZCB0ZXJtIHRvIGVpdGhlciBh
IENvbXBhcmlzb25UZXJtIG9yIGFuIE9wdGlvbmFsVGVybS4KKyAgICAvLyBJbiBib3RoIGNhc2Vz
IHdlIG5lZWQgYSByZWFsIHBhdHRlcm4gaW5zaWRlIHRoZSBBbmRUZXJtLgorICAgIC8vCisgICAg
Ly8gV2UgdXNlIGEgdHlwZSBwYXR0ZXJuIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBUaHVzLCB3
ZSBhc3N1bWUgdGhhdCBlYWNoIHJlc291cmNlIGhhcyBhIHR5cGUuIFRoaXMKKyAgICAvLyBpcyBu
b3QgcGVyZmVjdCBidXQgbXVjaCBmYXN0ZXIgdGhhbiB1c2luZyBhIHdpbGRjYXJkIGZvciB0aGUg
cHJvcGVydHkuIEFuZCBpbiB0aGUgZW5kIGFsbCBOZXBvbXVrCisgICAgLy8gcmVzb3VyY2VzIHNo
b3VsZCBoYXZlIGEgcHJvcGVybHkgZGVmaW5lZCB0eXBlLgorICAgIC8vCisgICAgYm9vbCBoYXZl
UmVhbFRlcm0gPSBmYWxzZTsKKyAgICBpZiggcGFyZW50VGVybSAmJiBwYXJlbnRUZXJtLT5tX3R5
cGUgPT0gVGVybTo6QW5kICkgeworICAgICAgICBoYXZlUmVhbFRlcm0gPSBzdGF0aWNfY2FzdDxj
b25zdCBBbmRUZXJtUHJpdmF0ZSo+KHBhcmVudFRlcm0pLT5oYXNSZWFsUGF0dGVybigpOworICAg
IH0KKworICAgIFFTdHJpbmcgdGVybTsKKyAgICBpZiggIWhhdmVSZWFsVGVybSApIHsKKyAgICAg
ICAgdGVybSArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCIlMSBhICUyIC4gIikKKyAgICAgICAgICAg
ICAgICAuYXJnKCByZXNvdXJjZVZhck5hbWUsIHFiZC0+dW5pcXVlVmFyTmFtZSgpICk7CisgICAg
fQorCisgICAgdGVybSArPSBRU3RyaW5nKCAiRklMVEVSKCFiaWY6ZXhpc3RzKChzZWxlY3QgKDEp
IHdoZXJlIHsgJTEgfSkpKSAuICIgKQorICAgICAgICAgICAgLmFyZyggbV9zdWJUZXJtLmRfcHRy
LT50b1NwYXJxbEdyYXBoUGF0dGVybiggcmVzb3VyY2VWYXJOYW1lLCB0aGlzLCBxYmQgKSApOwor
CisgICAgcmV0dXJuIHRlcm07CiB9CiAKIApJbmRleDoga2RlbGlicy9uZXBvbXVrL2NvcmUvcmVz
b3VyY2VkYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrZGVsaWJzL25lcG9tdWsvY29yZS9yZXNvdXJj
ZWRhdGEuY3BwCShyZXZpc2lvbiAxMjE1NzA1KQorKysga2RlbGlicy9uZXBvbXVrL2NvcmUvcmVz
b3VyY2VkYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDggKzM3MSwxMiBAQAogICAgICAg
ICBtX2NhY2hlLmNsZWFyKCk7CiAKICAgICAgICAgaWYgKCBtX3VyaS5pc1ZhbGlkKCkgKSB7Cisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2UgZXhjbHVkZSBwcm9wZXJ0aWVzIHRoYXQg
YXJlIHBhcnQgb2YgdGhlIGluZmVyZW5jZSBncmFwaAorICAgICAgICAgICAgLy8gSXQgd291bGQg
b25seSBwb2xsdXRlIHRoZSB1c2VyIGludGVyZmFjZQorICAgICAgICAgICAgLy8KICAgICAgICAg
ICAgIFNvcHJhbm86OlF1ZXJ5UmVzdWx0SXRlcmF0b3IgaXQgPSBNQUlOTU9ERUwtPmV4ZWN1dGVR
dWVyeShRU3RyaW5nKCJzZWxlY3QgZGlzdGluY3QgP3AgP28gd2hlcmUgeyAiCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiJTEgP3AgP28gLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3JhcGggP2cg
eyAlMSA/cCA/byAuIH0gLiBGSUxURVIoP2chPTx1cm46Y3JhcHB5aW5mZXJlbmNlMjppbmZlcnJl
ZHRyaXBsZXM+KSAuICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9IikuYXJnKFNvcHJhbm86Ok5v
ZGU6OnJlc291cmNlVG9OMyhtX3VyaSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlF1ZXJ5OjpR
dWVyeUxhbmd1YWdlU3BhcnFsKTsKICAgICAgICAgICAgIHdoaWxlICggaXQubmV4dCgpICkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56242</attachid>
            <date>2011-01-20 16:16:44 +0000</date>
            <delta_ts>2011-01-20 20:12:36 +0000</delta_ts>
            <desc>Patch 2/2 kdebase patch by trueg </desc>
            <filename>kdebase_bko246678.diff</filename>
            <type>text/plain</type>
            <size>81887</size>
            <attacher name="Will Stephenson">wstephenson</attacher>
            
              <data encoding="base64">SW5kZXg6IGtkZWJhc2UvcnVudGltZS9uZXBvbXVrL29udG9sb2dpZXMva3V2by50cmlnCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtkZWJhc2UvcnVudGltZS9uZXBvbXVrL29udG9sb2dpZXMva3V2by50cmlnCShy
ZXZpc2lvbiAxMjE1NzA1KQorKysga2RlYmFzZS9ydW50aW1lL25lcG9tdWsvb250b2xvZ2llcy9r
dXZvLnRyaWcJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDkgQEAKICAgICByZGZzOlJlc291
cmNlCiAgICAgICAgIG5hbzp1c2VyVmlzaWJsZSB0cnVlIC4KIAorICAgIG5hbzp1c2VyVmlzaWJs
ZQorICAgICAgICBuYW86dXNlclZpc2libGUgZmFsc2UgLgorCiAgICAgbnVhbzpFdmVudAogICAg
ICAgICBuYW86dXNlclZpc2libGUgZmFsc2UgLgogCkluZGV4OiBrZGViYXNlL3J1bnRpbWUvbmVw
b211ay9zZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvdHlwZXZpc2liaWxpdHl0cmVldGVzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtkZWJhc2UvcnVudGltZS9uZXBvbXVrL3NlcnZpY2VzL3N0b3JhZ2UvdGVzdC90
eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmgJKHJldmlzaW9uIDApCisrKyBrZGViYXNlL3J1bnRpbWUv
bmVwb211ay9zZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvdHlwZXZpc2liaWxpdHl0cmVldGVzdC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIE5lcG9tdWsgS0RFIHByb2plY3QuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFu
IFRydWVnIDx0cnVlZ0BrZGUub3JnPgorCisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNp
b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywgb3Ig
YW55CisgICBsYXRlciB2ZXJzaW9uIGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBl
LlYuIChvciBpdHMKKyAgIHN1Y2Nlc3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBL
REUgZS5WLiksIHdoaWNoIHNoYWxsCisgICBhY3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rp
b24gNiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxpY2Vuc2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2lm
bmRlZiBUWVBFVklTSUJJTElUWVRSRUVURVNUX0gKKyNkZWZpbmUgVFlQRVZJU0lCSUxJVFlUUkVF
VEVTVF9ICisKKyNpbmNsdWRlIDxRT2JqZWN0PgorCitjbGFzcyBLVGVtcERpcjsKK2NsYXNzIFR5
cGVWaXNpYmlsaXR5VHJlZTsKK25hbWVzcGFjZSBTb3ByYW5vIHsKK2NsYXNzIE1vZGVsOworfQor
CitjbGFzcyBUeXBlVmlzaWJpbGl0eVRyZWVUZXN0IDogcHVibGljIFFPYmplY3QKK3sKKyAgICBR
X09CSkVDVAorCitwcml2YXRlIFFfU0xPVFM6CisgICAgdm9pZCBpbml0VGVzdENhc2UoKTsKKyAg
ICB2b2lkIGNsZWFudXBUZXN0Q2FzZSgpOworICAgIHZvaWQgaW5pdCgpOworICAgIHZvaWQgdGVz
dFR5cGVWaXNpYmlsaXR5VHJlZSgpOworCitwcml2YXRlOgorICAgIEtUZW1wRGlyKiBtX3N0b3Jh
Z2VEaXI7CisgICAgU29wcmFubzo6TW9kZWwqIG1fbW9kZWw7CisgICAgVHlwZVZpc2liaWxpdHlU
cmVlKiBtX3R5cGVUcmVlOworfTsKKworI2VuZGlmIC8vIFRZUEVWSVNJQklMSVRZVFJFRVRFU1Rf
SApJbmRleDoga2RlYmFzZS9ydW50aW1lL25lcG9tdWsvc2VydmljZXMvc3RvcmFnZS90ZXN0L2Ny
YXBweWluZmVyZW5jZXIydGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2RlYmFzZS9ydW50aW1lL25l
cG9tdWsvc2VydmljZXMvc3RvcmFnZS90ZXN0L2NyYXBweWluZmVyZW5jZXIydGVzdC5jcHAJKHJl
dmlzaW9uIDApCisrKyBrZGViYXNlL3J1bnRpbWUvbmVwb211ay9zZXJ2aWNlcy9zdG9yYWdlL3Rl
c3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMTQg
QEAKKy8qCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUgcHJvamVjdC4K
KyAgIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5vcmc+CisK
KyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZlcnNpb24gYWNj
ZXB0ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAgc3VjY2Vzc29y
IGFwcHJvdmVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2ggc2hhbGwKKyAg
IGFjdCBhcyBhIHByb3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24gMyBvZiB0aGUg
bGljZW5zZS4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAg
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3
dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiY3JhcHB5aW5mZXJlbmNlcjJ0
ZXN0LmgiCisjaW5jbHVkZSAiLi4vY3JhcHB5aW5mZXJlbmNlcjIuaCIKKworI2luY2x1ZGUgPFF0
VGVzdD4KKyNpbmNsdWRlICJxdGVzdF9rZGUuaCIKKworI2luY2x1ZGUgPFNvcHJhbm8vU29wcmFu
bz4KKworI2luY2x1ZGUgPGt0ZW1wZGlyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBTb3ByYW5vOwor
CitRX0RFQ0xBUkVfTUVUQVRZUEUoU29wcmFubzo6U3RhdGVtZW50KQorCit2b2lkIENyYXBweUlu
ZmVyZW5jZXIyVGVzdDo6aW5pdFRlc3RDYXNlKCkKK3sKKyAgICBxUmVnaXN0ZXJNZXRhVHlwZTxT
b3ByYW5vOjpTdGF0ZW1lbnQ+KCk7CisKKyAgICAvLyB3ZSBuZWVkIHRvIHVzZSBhIFZpcnR1b3Nv
IG1vZGVsIGFzIHRtcCBtb2RlbCBzaW5jZSByZWRsYW5kIG1pc3NlcyBpbXBvcnRhbnQgU1BBUlFM
IGZlYXR1cmVzCisgICAgLy8gdGhhdCBhcmUgdXNlZCBieSBsaWJuZXBvbXVrIGJlbG93CisgICAg
Y29uc3QgU29wcmFubzo6QmFja2VuZCogYmFja2VuZCA9IFNvcHJhbm86OlBsdWdpbk1hbmFnZXI6
Omluc3RhbmNlKCktPmRpc2NvdmVyQmFja2VuZEJ5TmFtZSggInZpcnR1b3NvYmFja2VuZCIgKTsK
KyAgICBRVkVSSUZZKCBiYWNrZW5kICk7CisgICAgbV9zdG9yYWdlRGlyID0gbmV3IEtUZW1wRGly
KCk7CisgICAgbV9iYXNlTW9kZWwgPSBiYWNrZW5kLT5jcmVhdGVNb2RlbCggU29wcmFubzo6QmFj
a2VuZFNldHRpbmdzKCkgPDwgU29wcmFubzo6QmFja2VuZFNldHRpbmcoU29wcmFubzo6QmFja2Vu
ZE9wdGlvblN0b3JhZ2VEaXIsIG1fc3RvcmFnZURpci0+bmFtZSgpKSApOworICAgIFFWRVJJRlko
IG1fYmFzZU1vZGVsICk7CisKKyAgICBtX21vZGVsID0gbmV3IENyYXBweUluZmVyZW5jZXIyKCBt
X2Jhc2VNb2RlbCApOworfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6Y2xlYW51cFRl
c3RDYXNlKCkKK3sKKyAgICBkZWxldGUgbV9tb2RlbDsKKyAgICBkZWxldGUgbV9iYXNlTW9kZWw7
CisgICAgZGVsZXRlIG1fc3RvcmFnZURpcjsKK30KKworCit2b2lkIENyYXBweUluZmVyZW5jZXIy
VGVzdDo6aW5pdCgpCit7CisgICAgbV9iYXNlTW9kZWwtPnJlbW92ZUFsbFN0YXRlbWVudHMoKTsK
KworICAgIC8vCisgICAgLy8gd2UgY3JlYXRlIG9uZSBmYWtlIG9udG9sb2d5CisgICAgLy8KKyAg
ICAvLyBBCisgICAgLy8gfC0gQgorICAgIC8vICAgIHwtIEMgLSBpbnZpc2libGUKKyAgICAvLyAg
ICAgICB8LSBECisgICAgLy8gICAgICAgfC0gRQorICAgIC8vCisgICAgLy8gRgorICAgIC8vIHwt
IEUKKyAgICAvLworICAgIC8vIEwxCisgICAgLy8gfC0gTDIKKyAgICAvLyAgICB8LSBMMQorICAg
IC8vCisgICAgUVVybCBncmFwaCgiZ3JhcGg6L29udG8iKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRk
U3RhdGVtZW50KCBncmFwaCwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJh
bm86OlZvY2FidWxhcnk6Ok5STDo6T250b2xvZ3koKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2Rl
bC0+YWRkU3RhdGVtZW50KCBRVXJsKCJuZXBvbXVrOi9HIiksIFNvcHJhbm86OlZvY2FidWxhcnk6
OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOUkw6Okluc3RhbmNlQmFzZSgpLCBn
cmFwaCApOworCisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovQSIp
LCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBR
VXJsKCJvbnRvOi9CIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVsLT5h
ZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0MiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0
eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAg
bV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRCIpLCBTb3ByYW5vOjpWb2Nh
YnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwg
Z3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9FIiks
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFV
cmwoIm9udG86L0YiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisKKyAgICBtX2Jhc2VNb2RlbC0+
YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9FIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6
OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQyIpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVs
LT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0IiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Uzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9BIiksIGdyYXBoICk7CisgICAgbV9iYXNlTW9k
ZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovQyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0IiKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VN
b2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9EIiksIFNvcHJhbm86OlZvY2FidWxhcnk6
OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQyIpLCBncmFwaCApOworICAgIG1fYmFz
ZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0UiKSwgU29wcmFubzo6Vm9jYWJ1bGFy
eTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9GIiksIGdyYXBoICk7CisKKyAgICBt
X21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0MiKSwgU29wcmFubzo6Vm9jYWJ1bGFy
eTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUoZmFsc2UpLCBncmFwaCApOworCisg
ICAgLy8gdGhlIGxvb3B5IGNsYXNzZXMKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBR
VXJsKCJvbnRvOi9MMSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+
YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9MMSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZT
OjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0wyIiksIGdyYXBoICk7CisgICAgbV9iYXNlTW9k
ZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovTDIiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7
CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovTDIiKSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9MMSIpLCBncmFw
aCApOworCisgICAgbV9tb2RlbC0+dXBkYXRlSW5mZXJlbmNlSW5kZXgoKTsKK30KKworLy8gbWFr
ZSBzdXJlIG9ubHkgdGhlIG9uZSBzdGF0ZW1lbnQgaXMgYWRkZWQKK3ZvaWQgQ3JhcHB5SW5mZXJl
bmNlcjJUZXN0Ojp0ZXN0QWRkQW55U3RhdGVtZW50KCkKK3sKKyAgICBjb25zdCBpbnQgY250ID0g
bV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKTsKKyAgICBTdGF0ZW1lbnQgcyggUVVybCgibmVwb211
azovQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86Omhhc1RhZygpLCBRVXJsKCJuZXBvbXVr
Oi9UIiksIFFVcmwoIm5lcG9tdWs6L0ciKSApOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmFkZFN0
YXRlbWVudChzKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250
KzEpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNTdGF0ZW1lbnQocykpOworfQorCisv
LyBtYWtlIHN1cmUgYWxsIHN1cGVyY2xhc3NlcyBhcmUgYWRkZWQgYXMgdHlwZSwgdG9vCit2b2lk
IENyYXBweUluZmVyZW5jZXIyVGVzdDo6dGVzdEFkZFR5cGVTdGF0ZW1lbnQoKQoreworICAgIGlu
dCBjbnQgPSBtX21vZGVsLT5zdGF0ZW1lbnRDb3VudCgpOworICAgIFFVcmwgcmVzQSgibmVwb211
azovQSIpOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVs
YXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOwor
ICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCszKTsKKyAgICBRVkVS
SUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6
dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKSk7CisgICAgUVZF
UklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpOQU86
OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworCisgICAgY250ID0gbV9tb2RlbC0+
c3RhdGVtZW50Q291bnQoKTsKKyAgICBRVXJsIHJlc0IoIm5lcG9tdWs6L0IiKTsKKyAgICBtX21v
ZGVsLT5hZGRTdGF0ZW1lbnQocmVzQiwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IFFVcmwoIm9udG86L0IiKSwgUVVybCgibmVwb211azovRyIpKTsKKyAgICBRQ09NUEFSRShtX21v
ZGVsLT5zdGF0ZW1lbnRDb3VudCgpLCBjbnQrNCk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250
YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250
bzovQiIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNC
LCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpKSk7CisgICAgUVZFUklG
WShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5
cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJ
RlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgVm9jYWJ1bGFyeTo6TkFPOjp1
c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUoMSkpKTsKKworICAgIGNudCA9IG1fbW9kZWwtPnN0
YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNDKCJuZXBvbXVrOi9DIik7CisgICAgbV9tb2Rl
bC0+YWRkU3RhdGVtZW50KHJlc0MsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBR
VXJsKCJvbnRvOi9DIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNPTVBBUkUobV9tb2Rl
bC0+c3RhdGVtZW50Q291bnQoKSwgY250KzQpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFp
bnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86
L0MiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywg
Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlko
bV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBl
KCksIFFVcmwoIm9udG86L0EiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlT
dGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxh
cnk6OlJERlM6OlJlc291cmNlKCkpKTsKKworICAgIGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENv
dW50KCk7CisgICAgUVVybCByZXNEKCJuZXBvbXVrOi9EIik7CisgICAgbV9tb2RlbC0+YWRkU3Rh
dGVtZW50KHJlc0QsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRv
Oi9FIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVt
ZW50Q291bnQoKSwgY250KzcpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0
ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0YiKSkpOwor
ICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFy
eTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0UiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+
Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwo
Im9udG86L0MiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQo
cmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSkpOworICAgIFFW
RVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRG
Ojp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFp
bnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRh
aW5zQW55U3RhdGVtZW50KHJlc0QsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0
ZXJhbFZhbHVlKDEpKSk7Cit9CisKKy8vIG1ha2Ugc3VyZSB0aGUgbmV3IHJlbGF0aW9uIGlzIHRh
a2VuIGludG8gYWNjb3VudCB3aXRoIHRoZSBuZXh0IGFkZFN0YXRlbWVudAordm9pZCBDcmFwcHlJ
bmZlcmVuY2VyMlRlc3Q6OnRlc3RBZGRTdWJDbGFzc09mU3RhdGVtZW50KCkKK3sKKyAgICBRRVhQ
RUNUX0ZBSUwoIiIsICJOb3QgaW1wbGVtZW50ZWQgeWV0IiwgQWJvcnQpOworfQorCisvLyBtYWtl
IHN1cmUgb25seSB0aGUgb25lIHN0YXRlbWVudCBpcyByZW1vdmVkCit2b2lkIENyYXBweUluZmVy
ZW5jZXIyVGVzdDo6dGVzdFJlbW92ZUFueVN0YXRlbWVudCgpCit7Cit9CisKKy8vIG1ha2Ugc3Vy
ZSB0aGUgYXBwcm9wcmlhdGUgdHlwZXMgYXJlIHJlbW92ZWQsIHRvbworLy8gY2hlY2sgMiBjYXNl
czogMS4gb25seSB0aGUgb25lIHR5cGUsIDIuIHR3byB0eXBlcyB3aXRoIGludGVyc2VjdGluZyBz
dXBlcmNsYXNzZXMKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0UmVtb3ZlVHlwZVN0
YXRlbWVudCgpCit7CisgICAgaW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7Cisg
ICAgUVVybCByZXNBKCJuZXBvbXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJl
c0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFV
cmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+cmVtb3ZlU3RhdGVtZW50KHJlc0EsIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5l
cG9tdWs6L0ciKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250
KTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2Nh
YnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpKSk7CisgICAgUVZFUklGWSghbV9t
b2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAgICBRVkVSSUZZKCFt
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJW
aXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworCisgICAgLy8gYWRkIHR3byB0eXBlcyB3aXRo
IGludGVyc2VjdGluZyBzdXBlciB0eXBlcworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNB
LCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQiIpLCBRVXJs
KCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBRVXJsKCJuZXBvbXVr
Oi9HIikpOworICAgIC8vIHJlbW92ZSBvbmUgb2YgdGhlbQorICAgIG1fbW9kZWwtPnJlbW92ZVN0
YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250
bzovQiIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIC8vIG1ha2Ugc3VyZSBhbGwgaXMgd2Vs
bAorICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCs3KTsKKyAgICBR
VkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJE
Rjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRh
aW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRv
Oi9FIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0Es
IFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIikpKTsKKyAgICBRVkVSSUZZ
KG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLCBRVXJsKCJvbnRvOi9CIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55
U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIikp
KTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgp
KSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2Nh
YnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworfQorCisvLyBt
YWtlIHN1cmUgdGhlIHJlbW92ZWQgc3ViY2xhc3MgcmVsYXRpb24gaXMgdGFrZW4gaW50byBhY2Nv
dW50IHdpdGggdGhlIG5leHQgYWRkU3RhdGVtZW50CisvLyBtYWtlIHN1cmUgdHlwZSBzdGF0ZW1l
bnRzIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZCBhcmUgcmVtb3ZlZAordm9pZCBDcmFwcHlJbmZl
cmVuY2VyMlRlc3Q6OnRlc3RSZW1vdmVTdWJDbGFzc09mU3RhdGVtZW50KCkKK3sKKyAgICBRRVhQ
RUNUX0ZBSUwoIiIsICJOb3QgaW1wbGVtZW50ZWQgeWV0IiwgQWJvcnQpOworfQorCisvLyBtYWtl
IHN1cmUgdGhlIGNvcnJlc3BvbmluZyBzdGF0ZW1lbnRzIGFyZSByZW1vdmVkIGFuZCBub3RoaW5n
IGVsc2UKKy8vIHRlc3QgYWxsIGNvbWJpbmF0aW9ucyBvZiBpbnZhbGlkIGFuZCB2YWxpZCBub2Rl
cyBpZiBwb3NzaWJsZQordm9pZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRlc3RSZW1vdmVBbGxT
dGF0ZW1lbnRzKCkKK3sKKyAgICAvLyAxLiByZW1vdmUgdGhlIHdob2xlIHJlc291cmNlCisgICAg
aW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNBKCJuZXBv
bXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7
CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
RlM6OmxhYmVsKCksIExpdGVyYWxWYWx1ZShRTGF0aW4xU3RyaW5nKCJBIikpLCBRVXJsKCJuZXBv
bXVrOi9HIikpOworICAgIG1fbW9kZWwtPnJlbW92ZUFsbFN0YXRlbWVudHMocmVzQSwgTm9kZSgp
LCBOb2RlKCkpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCk7
CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgTm9kZSgp
LCBOb2RlKCksIE5vZGUoKSkpOworCisgICAgLy8gMi4gcmVtb3ZlIGEgdHlwZSBmcm9tIHNldmVy
YWwgcmVzb3VyY2VzCisgICAgUVVybCByZXNCKCJuZXBvbXVrOi9CIik7CisgICAgbV9tb2RlbC0+
YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJs
KCJvbnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVt
ZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9G
IiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0Is
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9CIiksIFFVcmwo
Im5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0IsIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIiksIFFVcmwoIm5lcG9tdWs6
L0ciKSk7CisgICAgbV9tb2RlbC0+cmVtb3ZlQWxsU3RhdGVtZW50cyhOb2RlKCksIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpOworICAgIFFWRVJJRlko
bV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBl
KCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAgICBRVkVSSUZZ
KG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLCBRVXJsKCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0Fu
eVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRiIp
KSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2Nh
YnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2Uo
KSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgVm9j
YWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkpOworICAgIFFWRVJJRlkobV9t
b2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQW55U3Rh
dGVtZW50KHJlc0IsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpKTsK
KyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxh
cnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJW
aXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRl
bWVudENvdW50KCksIGNudCs3KTsKKworICAgIC8vIDMuIHJlbW92ZSBhbGwgdHlwZXMgZnJvbSBv
bmUgcmVzb3VyY2UKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0UiKSwgUVVybCgibmVwb211azovRyIp
KTsKKyAgICBtX21vZGVsLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHJlc0EsIFNvcHJhbm86OlZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpLCBOb2RlKCksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUVZF
UklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIE5vZGUoKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRh
aW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0
ZXJhbFZhbHVlKDEpKSk7CisKKyAgICAvLyA0LiByZW1vdmUgYSBncmFwaAorICAgIG1fbW9kZWwt
PmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVy
bCgib250bzovRSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9kZWwtPmFkZFN0YXRl
bWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzov
QSIpLCBRVXJsKCJuZXBvbXVrOi9HMiIpKTsKKyAgICBtX21vZGVsLT5yZW1vdmVDb250ZXh0KFFV
cmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0
ZW1lbnQocmVzQiwgTm9kZSgpLCBOb2RlKCkpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRh
aW5zQW55U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBR
VXJsKCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRl
bWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzov
RSIpKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwg
U29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0QiKSkpOworICAg
IFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIikpKTsKKyAgICBRVkVSSUZZKCFt
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REY6OnR5cGUoKSwgUVVybCgib250bzovQiIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250
YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwg
U29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJRlkoIW1f
bW9kZWwtPmNvbnRhaW5zQ29udGV4dChRVXJsKCJuZXBvbXVrOi9HIikpKTsKK30KKworLy8gbWFr
ZSBzdXJlIHdlIGRvIG5vdCBydW4gaW50byBhbiBlbmRsZXNzIGxvb3AKK3ZvaWQgQ3JhcHB5SW5m
ZXJlbmNlcjJUZXN0Ojp0ZXN0Q3ljbGljU3ViQ2xhc3NSZWxhdGlvbigpCit7CisgICAgaW50IGNu
dCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNBKCJuZXBvbXVrOi9B
Iik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6
OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9MMSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAg
IFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCs0KTsgLy8gKzQgc2luY2Ug
TDEgaXMgdGhlcmUgdHdpY2U6IHRoZSBvbmUgd2UgYWRkZWQgYW5kIHRoZSBzdXBlcmNsYXNzIG9m
IEwyCisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2Nh
YnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovTDEiKSkpOworICAgIFFWRVJJRlkobV9t
b2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IFFVcmwoIm9udG86L0wyIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3Rh
dGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5
OjpSREZTOjpSZXNvdXJjZSgpKSk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0
ZXN0VXBkYXRlQWxsUmVzb3VyY2VzKCkKK3sKKyAgICAvLyB3ZSBhZGQgYSBidW5jaCBvZiBzdGF0
ZW1lbnRzIHRvIHRoZSBiYXNlIG1vZGVsIGluc3RlYWQgb2YgZ29pbmcgdGhyb3VnaCB0aGUgY3Jh
cHB5IGluZmVyZW5jZSBtb2RlbAorICAgIFFVcmwgcmVzQSgibmVwb211azovQSIpOworICAgIFFV
cmwgcmVzQigibmVwb211azovQiIpOworICAgIFFVcmwgcmVzQygibmVwb211azovQyIpOworICAg
IFFVcmwgcmVzRCgibmVwb211azovRCIpOworCisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVu
dChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIp
LCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQocmVz
QiwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSwgUVVy
bCgibmVwb211azovRyIpKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KHJlc0MsIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIiksIFFVcmwoIm5l
cG9tdWs6L0ciKSk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudChyZXNELCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBRVXJsKCJuZXBvbXVr
Oi9HIikpOworCisgICAgbV9tb2RlbC0+dXBkYXRlQWxsUmVzb3VyY2VzKCk7CisKKyAgICAvLyB3
YWl0IGZvciB0aGUgYWJvdmUgY2FsbCB0byBmaW5pc2gKKyAgICBRRXZlbnRMb29wIGxvb3A7Cisg
ICAgY29ubmVjdChtX21vZGVsLCBTSUdOQUwoYWxsUmVzb3VyY2VzVXBkYXRlZCgpKSwgJmxvb3As
IFNMT1QocXVpdCgpKSk7CisgICAgbG9vcC5leGVjKCk7CisKKyAgICBRVkVSSUZZKG1fbW9kZWwt
PmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJs
KCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50
KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZT
OjpSZXNvdXJjZSgpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNBLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkp
OworCisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2Nh
YnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQiIpKSk7CisgICAgUVZFUklGWShtX21v
ZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwg
UVVybCgib250bzovQSIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRl
bWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGUzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0
ZW1lbnQocmVzQiwgVm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUo
MSkpKTsKKworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywg
Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0MiKSkpOworICAgIFFWRVJJRlko
bV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBl
KCksIFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlT
dGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkp
OworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkp
KTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNDLCBWb2Nh
YnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworCisgICAgUVZF
UklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNELCBWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgUVVybCgib250bzovRiIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWlu
c0FueVN0YXRlbWVudChyZXNELCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzov
RSIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNELCBW
b2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQyIpKSk7CisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNELCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgUVVybCgib250bzovQiIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0
YXRlbWVudChyZXNELCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpKSk7
CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNELCBWb2NhYnVs
YXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkp
OworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1
bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUoMSkpKTsKK30KKworUVRFU1Rf
S0RFTUFJTl9DT1JFKENyYXBweUluZmVyZW5jZXIyVGVzdCkKKworI2luY2x1ZGUgImNyYXBweWlu
ZmVyZW5jZXIydGVzdC5tb2MiCkluZGV4OiBrZGViYXNlL3J1bnRpbWUvbmVwb211ay9zZXJ2aWNl
cy9zdG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2Rl
YmFzZS9ydW50aW1lL25lcG9tdWsvc2VydmljZXMvc3RvcmFnZS90ZXN0L2NyYXBweWluZmVyZW5j
ZXIydGVzdC5oCShyZXZpc2lvbiAwKQorKysga2RlYmFzZS9ydW50aW1lL25lcG9tdWsvc2Vydmlj
ZXMvc3RvcmFnZS90ZXN0L2NyYXBweWluZmVyZW5jZXIydGVzdC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU3IEBACisvKgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE5lcG9tdWsgS0RF
IHByb2plY3QuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0Br
ZGUub3JnPgorCisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55CisgICBsYXRlciB2
ZXJzaW9uIGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuIChvciBpdHMKKyAg
IHN1Y2Nlc3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiksIHdoaWNo
IHNoYWxsCisgICBhY3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24gNiBvZiB2ZXJzaW9u
IDMgb2YgdGhlIGxpY2Vuc2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiAgSWYgbm90LCBzZWUg
PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2lmbmRlZiBDUkFQUFlJTkZF
UkVOQ0VSMlRFU1RfSAorI2RlZmluZSBDUkFQUFlJTkZFUkVOQ0VSMlRFU1RfSAorCisjaW5jbHVk
ZSA8UU9iamVjdD4KKworY2xhc3MgS1RlbXBEaXI7CitjbGFzcyBDcmFwcHlJbmZlcmVuY2VyMjsK
K25hbWVzcGFjZSBTb3ByYW5vIHsKK2NsYXNzIE1vZGVsOworfQorCitjbGFzcyBDcmFwcHlJbmZl
cmVuY2VyMlRlc3QgOiBwdWJsaWMgUU9iamVjdAoreworICAgIFFfT0JKRUNUCisKK3ByaXZhdGUg
UV9TTE9UUzoKKyAgICB2b2lkIGluaXRUZXN0Q2FzZSgpOworICAgIHZvaWQgY2xlYW51cFRlc3RD
YXNlKCk7CisgICAgdm9pZCBpbml0KCk7CisgICAgdm9pZCB0ZXN0QWRkQW55U3RhdGVtZW50KCk7
CisgICAgdm9pZCB0ZXN0QWRkVHlwZVN0YXRlbWVudCgpOworICAgIHZvaWQgdGVzdEFkZFN1YkNs
YXNzT2ZTdGF0ZW1lbnQoKTsKKyAgICB2b2lkIHRlc3RSZW1vdmVBbnlTdGF0ZW1lbnQoKTsKKyAg
ICB2b2lkIHRlc3RSZW1vdmVUeXBlU3RhdGVtZW50KCk7CisgICAgdm9pZCB0ZXN0UmVtb3ZlU3Vi
Q2xhc3NPZlN0YXRlbWVudCgpOworICAgIHZvaWQgdGVzdFJlbW92ZUFsbFN0YXRlbWVudHMoKTsK
KyAgICB2b2lkIHRlc3RDeWNsaWNTdWJDbGFzc1JlbGF0aW9uKCk7CisgICAgdm9pZCB0ZXN0VXBk
YXRlQWxsUmVzb3VyY2VzKCk7CisKK3ByaXZhdGU6CisgICAgS1RlbXBEaXIqIG1fc3RvcmFnZURp
cjsKKyAgICBTb3ByYW5vOjpNb2RlbCogbV9iYXNlTW9kZWw7CisgICAgQ3JhcHB5SW5mZXJlbmNl
cjIqIG1fbW9kZWw7Cit9OworCisjZW5kaWYKSW5kZXg6IGtkZWJhc2UvcnVudGltZS9uZXBvbXVr
L3NlcnZpY2VzL3N0b3JhZ2UvdGVzdC90eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrZGViYXNlL3J1bnRpbWUvbmVwb211ay9zZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvdHlw
ZXZpc2liaWxpdHl0cmVldGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBrZGViYXNlL3J1bnRpbWUv
bmVwb211ay9zZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvdHlwZXZpc2liaWxpdHl0cmVldGVzdC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIE5lcG9tdWsgS0RFIHByb2plY3QuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0
aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorCisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZl
cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywg
b3IgYW55CisgICBsYXRlciB2ZXJzaW9uIGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtE
RSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nlc3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBv
ZiBLREUgZS5WLiksIHdoaWNoIHNoYWxsCisgICBhY3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNl
Y3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxpY2Vuc2UuCisKKyAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKwor
I2luY2x1ZGUgInR5cGV2aXNpYmlsaXR5dHJlZXRlc3QuaCIKKyNpbmNsdWRlICIuLi90eXBldmlz
aWJpbGl0eXRyZWUuaCIKKworI2luY2x1ZGUgPFF0VGVzdD4KKyNpbmNsdWRlICJxdGVzdF9rZGUu
aCIKKworI2luY2x1ZGUgPFNvcHJhbm8vU29wcmFubz4KKworI2luY2x1ZGUgPGt0ZW1wZGlyLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBTb3ByYW5vOworCit2b2lkIFR5cGVWaXNpYmlsaXR5VHJlZVRl
c3Q6OmluaXRUZXN0Q2FzZSgpCit7CisgICAgLy8gd2UgbmVlZCB0byB1c2UgYSBWaXJ0dW9zbyBt
b2RlbCBhcyB0bXAgbW9kZWwgc2luY2UgcmVkbGFuZCBtaXNzZXMgaW1wb3J0YW50IFNQQVJRTCBm
ZWF0dXJlcworICAgIC8vIHRoYXQgYXJlIHVzZWQgYnkgbGlibmVwb211ayBiZWxvdworICAgIGNv
bnN0IFNvcHJhbm86OkJhY2tlbmQqIGJhY2tlbmQgPSBTb3ByYW5vOjpQbHVnaW5NYW5hZ2VyOjpp
bnN0YW5jZSgpLT5kaXNjb3ZlckJhY2tlbmRCeU5hbWUoICJ2aXJ0dW9zb2JhY2tlbmQiICk7Cisg
ICAgUVZFUklGWSggYmFja2VuZCApOworICAgIG1fc3RvcmFnZURpciA9IG5ldyBLVGVtcERpcigp
OworICAgIG1fbW9kZWwgPSBiYWNrZW5kLT5jcmVhdGVNb2RlbCggU29wcmFubzo6QmFja2VuZFNl
dHRpbmdzKCkgPDwgU29wcmFubzo6QmFja2VuZFNldHRpbmcoU29wcmFubzo6QmFja2VuZE9wdGlv
blN0b3JhZ2VEaXIsIG1fc3RvcmFnZURpci0+bmFtZSgpKSApOworICAgIFFWRVJJRlkoIG1fbW9k
ZWwgKTsKKworICAgIG1fdHlwZVRyZWUgPSBuZXcgVHlwZVZpc2liaWxpdHlUcmVlKCBtX21vZGVs
ICk7Cit9CisKK3ZvaWQgVHlwZVZpc2liaWxpdHlUcmVlVGVzdDo6Y2xlYW51cFRlc3RDYXNlKCkK
K3sKKyAgICBkZWxldGUgbV9tb2RlbDsKKyAgICBkZWxldGUgbV90eXBlVHJlZTsKKyAgICBkZWxl
dGUgbV9zdG9yYWdlRGlyOworfQorCisKK3ZvaWQgVHlwZVZpc2liaWxpdHlUcmVlVGVzdDo6aW5p
dCgpCit7CisgICAgbV9tb2RlbC0+cmVtb3ZlQWxsU3RhdGVtZW50cygpOworCisgICAgLy8gd2Ug
Y3JlYXRlIG9uZSBmYWtlIG9udG9sb2d5CisgICAgLy8KKyAgICAvLyBzaXR1YXRpb25zIHdlIG5l
ZWQgdG8gdGVzdDoKKyAgICAvLyAqIGNsYXNzIHRoYXQgaXMgbWFya2VkIHZpc2libGUgc2hvdWxk
IHN0YXkgdmlzaWJsZQorICAgIC8vICogY2xhc3MgdGhhdCBpcyBtYXJrZWQgaW52aXNpYmxlIHNo
b3VsZCBzdGF5IGludmlzaWJsZQorICAgIC8vICogbm9uLW1hcmtlZCBzdWJjbGFzcyBvZiB2aXNp
YmxlIHNob3VsZCBiZSB2aXNpYmxlLCB0b28KKyAgICAvLyAqIG5vbi1tYXJrZWQgc3ViY2xhc3Mg
b2YgaW52aXNpYmxlIHNob3VsZCBiZSBpbnZpc2libGUsIHRvbworICAgIC8vICogbWFya2VkIHN1
YmNsYXNzIHNob3VsZCBrZWVwIGl0cyBvd24gdmlzaWJsaXR5IGFuZCBub3QgaW5oZXJpdCBmcm9t
IHBhcmVudAorICAgIC8vICogd2hvbGUgYnJhbmNoIHNob3VsZCBpbmhlcml0IGZyb20gcGFyZW50
CisgICAgLy8gKiBpZiBvbmUgcGFyZW50IGlzIHZpc2libGUgdGhlIGNsYXNzIGlzIHZpc2libGUs
IHRvbywgZXZlbiBpZiBOIG90aGVyIHBhcmVudHMgYXJlIG5vdAorICAgIC8vICogaWYgYWxsIHBh
cmVudHMgYXJlIGludmlzaWJsZSwgdGhlIGNsYXNzIGlzIGludmlzaWJsZSwgZXZlbiBpZiBoaWdo
ZXIgdXAgaW4gdGhlIGJyYW5jaCBhIGNsYXNzIGlzIHZpc2libGUKKyAgICAvLyAqIHByb3Blcmx5
IGhhbmRsZSBsb29wcyAoYXMgaW46IGRvIG5vdCBydW4gaW50byBhbiBlbmRsZXNzIGxvb3ApCisg
ICAgLy8KKyAgICAvLyBBCisgICAgLy8gfC0gQiAtIGludmlzaWJsZQorICAgIC8vICAgIHwtIEMK
KyAgICAvLyAgICAgICB8LSBEIC0gdmlzaWJsZQorICAgIC8vICAgICAgICAgIHwtIEUKKyAgICAv
LyAgICAgICAgICAgICB8LSBGCisgICAgLy8gICAgfC0gRworICAgIC8vCisgICAgLy8gQUEgLSBp
bnZpc2libGUKKyAgICAvLyB8IC0gRgorICAgIC8vIHwgLSBHCisgICAgLy8KKyAgICAvLyBYCisg
ICAgLy8gfC0gWSAtIGludmlzaWJsZQorICAgIC8vICAgIHwtIFoKKyAgICAvLyAgICAgICB8LSBY
CisKKyAgICBRVXJsIGdyYXBoKCJncmFwaDovb250byIpOworICAgIG1fbW9kZWwtPmFkZFN0YXRl
bWVudCggZ3JhcGgsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpOUkw6Ok9udG9sb2d5KCksIGdyYXBoICk7CisKKyAgICBtX21vZGVsLT5hZGRT
dGF0ZW1lbnQoIFFVcmwoIm9udG86L0EiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBl
KCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9t
b2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9CIiksIFNvcHJhbm86OlZvY2FidWxhcnk6
OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCAp
OworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovQyIpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3Mo
KSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0QiKSwg
U29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
RlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJv
bnRvOi9FIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2Nh
YnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVu
dCggUVVybCgib250bzovRiIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5h
ZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0ciKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0
eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAg
bV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9BQSIpLCBTb3ByYW5vOjpWb2NhYnVs
YXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3Jh
cGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L1giKSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNs
YXNzKCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9Z
IiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5
OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVy
bCgib250bzovWiIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKworICAgIG1fbW9kZWwtPmFkZFN0
YXRlbWVudCggUVVybCgib250bzovQiIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJD
bGFzc09mKCksIFFVcmwoIm9udG86L0EiKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0
ZW1lbnQoIFFVcmwoIm9udG86L0MiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xh
c3NPZigpLCBRVXJsKCJvbnRvOi9CIiksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVt
ZW50KCBRVXJsKCJvbnRvOi9EIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNz
T2YoKSwgUVVybCgib250bzovQyIpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVu
dCggUVVybCgib250bzovRSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09m
KCksIFFVcmwoIm9udG86L0QiKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQo
IFFVcmwoIm9udG86L0YiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigp
LCBRVXJsKCJvbnRvOi9FIiksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBR
VXJsKCJvbnRvOi9HIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwg
UVVybCgib250bzovQiIpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVy
bCgib250bzovRiIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFV
cmwoIm9udG86L0FBIiksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJs
KCJvbnRvOi9HIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVy
bCgib250bzovQUEiKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwo
Im9udG86L1kiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJs
KCJvbnRvOi9YIiksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJv
bnRvOi9aIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgi
b250bzovWSIpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250
bzovWCIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9u
dG86L1oiKSwgZ3JhcGggKTsKKworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250
bzovQiIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxW
YWx1ZShmYWxzZSksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJv
bnRvOi9EIiksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJh
bFZhbHVlKHRydWUpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgi
b250bzovQUEiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRl
cmFsVmFsdWUoZmFsc2UpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVy
bCgib250bzovWSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExp
dGVyYWxWYWx1ZShmYWxzZSksIGdyYXBoICk7CisKKyAgICBtX3R5cGVUcmVlLT5yZWJ1aWxkVHJl
ZSgpOworfQorCit2b2lkIFR5cGVWaXNpYmlsaXR5VHJlZVRlc3Q6OnRlc3RUeXBlVmlzaWJpbGl0
eVRyZWUoKQoreworICAgIFFWRVJJRlkobV90eXBlVHJlZS0+aXNWaXNpYmxlKFFVcmwoIm9udG86
L0EiKSkpOworICAgIFFWRVJJRlkoIW1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9C
IikpKTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgib250bzovQyIp
KSk7CisgICAgUVZFUklGWShtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgib250bzovRCIpKSk7
CisgICAgUVZFUklGWShtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgib250bzovRSIpKSk7Cisg
ICAgUVZFUklGWShtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgib250bzovRiIpKSk7CisgICAg
UVZFUklGWSghbV90eXBlVHJlZS0+aXNWaXNpYmxlKFFVcmwoIm9udG86L0ciKSkpOworICAgIFFW
RVJJRlkoIW1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9BQSIpKSk7CisgICAgUVZF
UklGWSghbV90eXBlVHJlZS0+aXNWaXNpYmxlKFFVcmwoIm9udG86L1giKSkpOyAvLyBiZWNhdXNl
IG9ubHkgdG9wLWxldmVsIGNsYXNzZXMgaW5oZXJpdCBmcm9tIHJkZnM6UmVzb3VyY2UKKyAgICBR
VkVSSUZZKCFtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgib250bzovWSIpKSk7CisgICAgUVZF
UklGWSghbV90eXBlVHJlZS0+aXNWaXNpYmxlKFFVcmwoIm9udG86L1oiKSkpOworfQorCitRVEVT
VF9LREVNQUlOX0NPUkUoVHlwZVZpc2liaWxpdHlUcmVlVGVzdCkKKworI2luY2x1ZGUgInR5cGV2
aXNpYmlsaXR5dHJlZXRlc3QubW9jIgpJbmRleDoga2RlYmFzZS9ydW50aW1lL25lcG9tdWsvc2Vy
dmljZXMvc3RvcmFnZS90ZXN0L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtkZWJhc2Uv
cnVudGltZS9uZXBvbXVrL3NlcnZpY2VzL3N0b3JhZ2UvdGVzdC9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMCkKKysrIGtkZWJhc2UvcnVudGltZS9uZXBvbXVrL3NlcnZpY2VzL3N0b3JhZ2UvdGVz
dC9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorc2V0KCBFWEVD
VVRBQkxFX09VVFBVVF9QQVRIICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSApCisKK2tkZTRf
YWRkX3VuaXRfdGVzdChjcmFwcHlpbmZlcmVuY2VyMnRlc3QKKyAgY3JhcHB5aW5mZXJlbmNlcjJ0
ZXN0LmNwcAorICAuLi9jcmFwcHlpbmZlcmVuY2VyMi5jcHAKKyAgLi4vdHlwZXZpc2liaWxpdHl0
cmVlLmNwcCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhjcmFwcHlpbmZlcmVuY2VyMnRlc3QKKyAg
JHtRVF9RVFRFU1RfTElCUkFSWX0KKyAgJHtTT1BSQU5PX0xJQlJBUklFU30KKyAgJHtLREU0X0tE
RUNPUkVfTElCU30pCisKK2tkZTRfYWRkX3VuaXRfdGVzdCh0eXBldmlzaWJpbGl0eXRyZWV0ZXN0
CisgIHR5cGV2aXNpYmlsaXR5dHJlZXRlc3QuY3BwCisgIC4uL3R5cGV2aXNpYmlsaXR5dHJlZS5j
cHApCit0YXJnZXRfbGlua19saWJyYXJpZXModHlwZXZpc2liaWxpdHl0cmVldGVzdAorICAke1FU
X1FUVEVTVF9MSUJSQVJZfQorICAke1NPUFJBTk9fTElCUkFSSUVTfQorICAke0tERTRfS0RFQ09S
RV9MSUJTfSkKSW5kZXg6IGtkZWJhc2UvcnVudGltZS9uZXBvbXVrL3NlcnZpY2VzL3N0b3JhZ2Uv
b250b2xvZ3lsb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtkZWJhc2UvcnVudGltZS9uZXBvbXVr
L3NlcnZpY2VzL3N0b3JhZ2Uvb250b2xvZ3lsb2FkZXIuY3BwCShyZXZpc2lvbiAxMjE1NzA1KQor
Kysga2RlYmFzZS9ydW50aW1lL25lcG9tdWsvc2VydmljZXMvc3RvcmFnZS9vbnRvbG9neWxvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE0ICsyNCwxMCBAQAogCiAjaW5jbHVkZSA8U29w
cmFuby9HbG9iYWw+CiAjaW5jbHVkZSA8U29wcmFuby9Ob2RlPgotI2luY2x1ZGUgPFNvcHJhbm8v
TGl0ZXJhbFZhbHVlPgogI2luY2x1ZGUgPFNvcHJhbm8vTW9kZWw+CiAjaW5jbHVkZSA8U29wcmFu
by9QbHVnaW5NYW5hZ2VyPgogI2luY2x1ZGUgPFNvcHJhbm8vU3RhdGVtZW50SXRlcmF0b3I+Ci0j
aW5jbHVkZSA8U29wcmFuby9RdWVyeVJlc3VsdEl0ZXJhdG9yPgogI2luY2x1ZGUgPFNvcHJhbm8v
UGFyc2VyPgotI2luY2x1ZGUgPFNvcHJhbm8vVm9jYWJ1bGFyeS9OQU8+Ci0jaW5jbHVkZSA8U29w
cmFuby9Wb2NhYnVsYXJ5L1JERlM+CiAKICNpbmNsdWRlIDxLQ29uZmlnPgogI2luY2x1ZGUgPEtD
b25maWdHcm91cD4KQEAgLTE4OCw3ICsxODQsNiBAQAogICAgIGVsc2UgewogICAgICAgICBkLT5m
b3JjZU9udG9sb2d5VXBkYXRlID0gZmFsc2U7CiAgICAgICAgIGQtPnVwZGF0ZVRpbWVyLnN0b3Ao
KTsKLSAgICAgICAgdXBkYXRlVXNlclZpc2liaWxpdHkoKTsKICAgICAgICAgZW1pdCBvbnRvbG9n
eUxvYWRpbmdGaW5pc2hlZCh0aGlzKTsKICAgICB9CiB9CkBAIC0yMjUsMTE1ICsyMjAsNCBAQAog
ICAgIH0KIH0KIAotCi1uYW1lc3BhY2UgewotICAgIHN0cnVjdCBVc2VyVmlzaWJsZU5vZGUgewot
ICAgICAgICBVc2VyVmlzaWJsZU5vZGUoIGNvbnN0IFFVcmwmIHIgKQotICAgICAgICAgICAgOiB1
cmkoIHIgKSwKLSAgICAgICAgICAgICAgdXNlclZpc2libGUoIDAgKSB7Ci0gICAgICAgIH0KLQot
ICAgICAgICBRVXJsIHVyaTsKLSAgICAgICAgaW50IHVzZXJWaXNpYmxlOwotICAgICAgICBRSGFz
aDxRVXJsLCBVc2VyVmlzaWJsZU5vZGUqPiBwYXJlbnRzOwotCi0gICAgICAgIC8qKgotICAgICAg
ICAgKiBTZXQgdGhlIHZhbHVlIG9mIG5hbzp1c2VyVmlzaWJsZSBhbmQgYWRkIHRoZSBjb3JyZXNw
b25kaW5nCi0gICAgICAgICAqIHN0YXRlbWVudCB0byB0aGUgbGlzdCBvZiBzdGF0ZW1lbnRzIGlu
IGNhc2UgdGhlIHZhbHVlIHdhcwotICAgICAgICAgKiBub3QgZGVmaW5lZCB5ZXQuCi0gICAgICAg
ICAqLwotICAgICAgICBpbnQgdXBkYXRlVXNlclZpc2liaWxpdHkoIFFMaXN0PFNvcHJhbm86OlN0
YXRlbWVudD4mIHN0YXRlbWVudHMgKSB7Ci0gICAgICAgICAgICBpZiAoIHVzZXJWaXNpYmxlICE9
IDAgKSB7Ci0gICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgIlVzZXIgdmlzaWJpbGl0eSBhbHJl
YWR5IHNldCIgPDwgdXJpLnRvU3RyaW5nKCkgPDwgKCB1c2VyVmlzaWJsZSA9PSAxICk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHVzZXJWaXNpYmxlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCAhcGFyZW50cy5pc0VtcHR5KCkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAoIFFIYXNoPFFVcmwsIFVzZXJWaXNpYmxlTm9kZSo+Ojpp
dGVyYXRvciBpdCA9IHBhcmVudHMuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
aXQgIT0gcGFyZW50cy5lbmQoKTsgKytpdCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGtE
ZWJ1ZygpIDw8IHVyaS50b1N0cmluZygpIDw8ICJDaGVja2luZyBwYXJlbnQgY2xhc3MiIDw8IGl0
LnZhbHVlKCktPnVyaS50b1N0cmluZygpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBp
dC52YWx1ZSgpLT51cGRhdGVVc2VyVmlzaWJpbGl0eSggc3RhdGVtZW50cyApID09IC0xICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJWaXNpYmxlID0gLTE7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KCB1c2VyVmlzaWJsZSA9PSAwICkgewotICAgICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHRv
IHZpc2libGUKLSAgICAgICAgICAgICAgICAgICAgdXNlclZpc2libGUgPSAxOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBzdGF0ZW1lbnRzIDw8IFNvcHJhbm86OlN0YXRlbWVu
dCggdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OkxpdGVyYWxWYWx1
ZSggdXNlclZpc2libGUgPT0gMSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOZXBvbXVrOjpWb2NhYnVsYXJ5OjpLVVZPOjpucmxPbnRvbG9neUdy
YXBoKCkgKTsKLSAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiU2V0dGluZyBuYW86dXNlclZp
c2libGUgb2YiIDw8IHVyaS50b1N0cmluZygpIDw8ICggdXNlclZpc2libGUgPT0gMSApOwotICAg
ICAgICAgICAgICAgIHJldHVybiB1c2VyVmlzaWJsZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH07Ci19Ci0KLXZvaWQgTmVwb211azo6T250b2xvZ3lMb2FkZXI6OnVwZGF0ZVVzZXJW
aXNpYmlsaXR5KCkKLXsKLSAgICAvLwotICAgIC8vIGJ1aWxkIGEgdHJlZSBvZiBhbGwgY2xhc3Nl
cyBhbmQgcHJvcGVydGllcwotICAgIC8vCi0gICAgUVN0cmluZyBxdWVyeQotICAgICAgICA9IFFT
dHJpbmc6OmZyb21MYXRpbjEoICJzZWxlY3QgZGlzdGluY3QgP3IgP3AgP3Ygd2hlcmUgeyAiCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInsgP3IgYSByZGZzOkNsYXNzIC4gIgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPUFRJT05BTCB7ID9yIHJkZnM6c3ViQ2xhc3NP
ZiA/cCAuID9wIGEgcmRmczpDbGFzcyAuIH0gLiB9ICIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiVU5JT04gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7ID9yIGEg
cmRmOlByb3BlcnR5IC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPUFRJT05B
TCB7ID9yIHJkZnM6c3ViUHJvcGVydHlPZiA/cCAuID9wIGEgcmRmOlByb3BlcnR5IC4gfSAuIH0g
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPUFRJT05BTCB7ID9yICUxID92IC4g
fSAuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRklMVEVSKD9yIT1yZGZzOlJl
c291cmNlKSAuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSIgKQotICAgICAg
ICAuYXJnKCBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIFNvcHJhbm86OlZvY2FidWxhcnk6
Ok5BTzo6dXNlclZpc2libGUoKSApICk7Ci0gICAga0RlYnVnKCkgPDwgcXVlcnk7Ci0gICAgUUhh
c2g8UVVybCwgVXNlclZpc2libGVOb2RlKj4gYWxsOwotICAgIHsKLSAgICAgICAgU29wcmFubzo6
UXVlcnlSZXN1bHRJdGVyYXRvciBpdAotICAgICAgICAgICAgPSBkLT5tb2RlbC0+ZXhlY3V0ZVF1
ZXJ5KCBxdWVyeSwgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwgKTsKLSAgICAg
ICAgd2hpbGUoIGl0Lm5leHQoKSApIHsKLSAgICAgICAgICAgIGNvbnN0IFFVcmwgciA9IGl0WyJy
Il0udXJpKCk7Ci0gICAgICAgICAgICBjb25zdCBTb3ByYW5vOjpOb2RlIHAgPSBpdFsicCJdOwot
ICAgICAgICAgICAgY29uc3QgU29wcmFubzo6Tm9kZSB2ID0gaXRbInYiXTsKLQotICAgICAgICAg
ICAgaWYgKCAhYWxsLmNvbnRhaW5zKCByICkgKSB7Ci0gICAgICAgICAgICAgICAgVXNlclZpc2li
bGVOb2RlKiByX3V2biA9IG5ldyBVc2VyVmlzaWJsZU5vZGUoIHIgKTsKLSAgICAgICAgICAgICAg
ICBhbGwuaW5zZXJ0KCByLCByX3V2biApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYo
IHYuaXNMaXRlcmFsKCkgKQotICAgICAgICAgICAgICAgIGFsbFtyXS0+dXNlclZpc2libGUgPSAo
di5saXRlcmFsKCkudG9Cb29sKCkgPyAxIDogLTEpOwotICAgICAgICAgICAgaWYgKCBwLmlzUmVz
b3VyY2UoKSAmJgotICAgICAgICAgICAgICAgICBwLnVyaSgpICE9IHIgJiYKLSAgICAgICAgICAg
ICAgICAgcC51cmkoKSAhPSBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpICkg
ewotICAgICAgICAgICAgICAgIGlmICggIWFsbC5jb250YWlucyggcC51cmkoKSApICkgewotICAg
ICAgICAgICAgICAgICAgICBVc2VyVmlzaWJsZU5vZGUqIHBfdXZuID0gbmV3IFVzZXJWaXNpYmxl
Tm9kZSggcC51cmkoKSApOwotICAgICAgICAgICAgICAgICAgICBhbGwuaW5zZXJ0KCBwLnVyaSgp
LCBwX3V2biApOwotICAgICAgICAgICAgICAgICAgICBhbGxbcl0tPnBhcmVudHMuaW5zZXJ0KCBw
LnVyaSgpLCBwX3V2biApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgYWxsW3JdLT5wYXJlbnRzLmluc2VydCggcC51cmkoKSwg
YWxsW3AudXJpKCldICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBjcmVhdGUgYSBsaXN0IG9mIGFsbCBzdGF0ZW1l
bnRzIHdlIG5lZWQgdG8gYWRkCi0gICAgLy8KLSAgICBRTGlzdDxTb3ByYW5vOjpTdGF0ZW1lbnQ+
IHN0YXRlbWVudHM7Ci0gICAgZm9yICggUUhhc2g8UVVybCwgVXNlclZpc2libGVOb2RlKj46Oml0
ZXJhdG9yIGl0ID0gYWxsLmJlZ2luKCk7Ci0gICAgICAgICAgaXQgIT0gYWxsLmVuZCgpOyArK2l0
ICkgewotICAgICAgICBpdC52YWx1ZSgpLT51cGRhdGVVc2VyVmlzaWJpbGl0eSggc3RhdGVtZW50
cyApOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gY2xlYW51cCBhbmQgYWRkIGFsbCB0aGUgbmVj
ZXNzYXJ5IHN0YXRlbWVudHMgdG8gdGhlIG1haW4gbW9kZWwKLSAgICAvLwotICAgIHFEZWxldGVB
bGwoIGFsbCApOwotICAgIGQtPm1vZGVsLT5hZGRTdGF0ZW1lbnRzKCBzdGF0ZW1lbnRzICk7Ci19
Ci0KICNpbmNsdWRlICJvbnRvbG9neWxvYWRlci5tb2MiCkluZGV4OiBrZGViYXNlL3J1bnRpbWUv
bmVwb211ay9zZXJ2aWNlcy9zdG9yYWdlL29udG9sb2d5bG9hZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2RlYmFzZS9ydW50aW1lL25lcG9tdWsvc2VydmljZXMvc3RvcmFnZS9vbnRvbG9neWxvYWRlci5o
CShyZXZpc2lvbiAxMjE1NzA1KQorKysga2RlYmFzZS9ydW50aW1lL25lcG9tdWsvc2VydmljZXMv
c3RvcmFnZS9vbnRvbG9neWxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxMiArNjUsNiBA
QAogICAgICAgICAgKi8KICAgICAgICAgdm9pZCBpbXBvcnRPbnRvbG9neSggY29uc3QgUVN0cmlu
ZyYgdXJsICk7CiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIENyZWF0ZXMgbmFvOnVzZXJWaXNp
YmxlIHByb3BlcnRpZXMgZm9yIGFsbCBjbGFzc2VzIGFuZCBwcm9wZXJ0aWVzCi0gICAgICAgICAq
IGFuZCBzdG9yZXMgdGhlbSBpbiB0aGUga3V2byBuYW1lc3BhY2UuCi0gICAgICAgICAqLwotICAg
ICAgICB2b2lkIHVwZGF0ZVVzZXJWaXNpYmlsaXR5KCk7Ci0KICAgICBRX1NJR05BTFM6CiAgICAg
ICAgIC8qKgogICAgICAgICAgKiBFbWl0dGVkIG9uY2UgdGhlIHVwZGF0ZSBvZiB0aGUgb250b2xv
Z2llcyBpcyBkb25lLgpJbmRleDoga2RlYmFzZS9ydW50aW1lL25lcG9tdWsvc2VydmljZXMvc3Rv
cmFnZS90eXBldmlzaWJpbGl0eXRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtkZWJhc2UvcnVudGlt
ZS9uZXBvbXVrL3NlcnZpY2VzL3N0b3JhZ2UvdHlwZXZpc2liaWxpdHl0cmVlLmNwcAkocmV2aXNp
b24gMCkKKysrIGtkZWJhc2UvcnVudGltZS9uZXBvbXVrL3NlcnZpY2VzL3N0b3JhZ2UvdHlwZXZp
c2liaWxpdHl0cmVlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUgcHJvamVjdC4KKyAgIENvcHlyaWdo
dCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5vcmc+CisKKyAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZlcnNpb24gYWNjZXB0ZWQgYnkgdGhl
IG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAgc3VjY2Vzc29yIGFwcHJvdmVkIGJ5
IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2ggc2hhbGwKKyAgIGFjdCBhcyBhIHBy
b3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24gMyBvZiB0aGUgbGljZW5zZS4KKwor
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp
Y2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAidHlwZXZpc2liaWxpdHl0cmVlLmgiCisKKyNpbmNs
dWRlIDxTb3ByYW5vL01vZGVsPgorI2luY2x1ZGUgPFNvcHJhbm8vUXVlcnlSZXN1bHRJdGVyYXRv
cj4KKyNpbmNsdWRlIDxTb3ByYW5vL05vZGU+CisjaW5jbHVkZSA8U29wcmFuby9MaXRlcmFsVmFs
dWU+CisjaW5jbHVkZSA8U29wcmFuby9Wb2NhYnVsYXJ5L05BTz4KKyNpbmNsdWRlIDxTb3ByYW5v
L1ZvY2FidWxhcnkvUkRGUz4KKworI2luY2x1ZGUgPFF0Q29yZS9RTXV0ZXhMb2NrZXI+CisKKyNp
bmNsdWRlIDxLRGVidWc+CisKKworY2xhc3MgVHlwZVZpc2liaWxpdHlUcmVlOjpUeXBlVmlzaWJp
bGl0eU5vZGUKK3sKK3B1YmxpYzoKKyAgICBUeXBlVmlzaWJpbGl0eU5vZGUoIGNvbnN0IFFVcmwm
IHIgKQorICAgICAgICA6IHVyaSggciApLAorICAgICAgICAgIHVzZXJWaXNpYmxlKCAwICkgewor
ICAgIH0KKworICAgIFFVcmwgdXJpOworICAgIGludCB1c2VyVmlzaWJsZTsKKyAgICBRU2V0PFR5
cGVWaXNpYmlsaXR5Tm9kZSo+IHBhcmVudHM7CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIHZh
bHVlIG9mIG5hbzp1c2VyVmlzaWJsZS4KKyAgICAgKiBBIGNsYXNzIGlzIHZpc2libGUgaWYgaXQg
aGFzIGF0IGxlYXN0IG9uZSB2aXNpYmxlIGRpcmVjdCBwYXJlbnQgY2xhc3MuCisgICAgICovCisg
ICAgaW50IHVwZGF0ZVVzZXJWaXNpYmlsaXR5KCBRU2V0PFR5cGVWaXNpYmlsaXR5Tm9kZSo+JiB2
aXNpdGVkTm9kZXMgKSB7CisgICAgICAgIGlmICggdXNlclZpc2libGUgIT0gMCApIHsKKyAgICAg
ICAgICAgIHJldHVybiB1c2VyVmlzaWJsZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGlmICggIXBhcmVudHMuaXNFbXB0eSgpICkgeworICAgICAgICAgICAgICAgIGZv
ciAoIFFTZXQ8VHlwZVZpc2liaWxpdHlOb2RlKj46Oml0ZXJhdG9yIGl0ID0gcGFyZW50cy5iZWdp
bigpOworICAgICAgICAgICAgICAgICAgICAgaXQgIT0gcGFyZW50cy5lbmQoKTsgKytpdCApIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gYXZvaWQgZW5kbGVzcyBsb29wcworICAgICAgICAgICAg
ICAgICAgICBpZiggdmlzaXRlZE5vZGVzLmNvbnRhaW5zKCppdCkgKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIHZpc2l0ZWROb2Rlcy5pbnNl
cnQoICppdCApOworICAgICAgICAgICAgICAgICAgICBpZiAoICgqaXQpLT51cGRhdGVVc2VyVmlz
aWJpbGl0eSggdmlzaXRlZE5vZGVzICkgPT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVzZXJWaXNpYmxlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKCB1c2VyVmlzaWJsZSA9PSAwICkgeworICAgICAgICAgICAgICAgIC8vIGRlZmF1
bHQgdG8gaW52aXNpYmxlCisgICAgICAgICAgICAgICAgdXNlclZpc2libGUgPSAtMTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJTZXR0aW5nIG5hbzp1c2VyVmlzaWJs
ZSBvZiIgPDwgdXJpLnRvU3RyaW5nKCkgPDwgKCB1c2VyVmlzaWJsZSA9PSAxICk7CisgICAgICAg
ICAgICByZXR1cm4gdXNlclZpc2libGU7CisgICAgICAgIH0KKyAgICB9Cit9OworCitUeXBlVmlz
aWJpbGl0eVRyZWU6OlR5cGVWaXNpYmlsaXR5VHJlZSggU29wcmFubzo6TW9kZWwqIG1vZGVsICkK
KyAgICA6IG1fbW9kZWwobW9kZWwpCit7Cit9CisKK1R5cGVWaXNpYmlsaXR5VHJlZTo6flR5cGVW
aXNpYmlsaXR5VHJlZSgpCit7CisgICAgUU11dGV4TG9ja2VyIGxvY2soICZtX211dGV4ICk7Cit9
CisKK3ZvaWQgVHlwZVZpc2liaWxpdHlUcmVlOjpyZWJ1aWxkVHJlZSgpCit7CisgICAgUU11dGV4
TG9ja2VyIGxvY2soICZtX211dGV4ICk7CisKKyAgICAvLyBjbGVhbnVwCisgICAgbV92aXNpYmls
aXR5SGFzaC5jbGVhcigpOworCisgICAgLy8gd2UgYnVpbGQgYSB0ZW1wb3JhcnkgaGVscGVyIHRy
ZWUKKyAgICBRSGFzaDxRVXJsLCBUeXBlVmlzaWJpbGl0eU5vZGUqPiB0cmVlOworCisgICAgY29u
c3QgUVN0cmluZyBxdWVyeQorICAgICAgICA9IFFTdHJpbmc6OmZyb21MYXRpbjEoICJzZWxlY3Qg
ZGlzdGluY3QgP3IgP3AgP3Ygd2hlcmUgeyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInsgP3IgYSByZGZzOkNsYXNzIC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJPUFRJT05BTCB7ID9yIHJkZnM6c3ViQ2xhc3NPZiA/cCAuID9wIGEgcmRmczpDbGFzcyAuIH0g
LiB9ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVU5JT04gIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ7ID9yIGEgcmRmOlByb3BlcnR5IC4gIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJPUFRJT05BTCB7ID9yIHJkZnM6c3ViUHJvcGVydHlPZiA/
cCAuID9wIGEgcmRmOlByb3BlcnR5IC4gfSAuIH0gIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJPUFRJT05BTCB7ID9yICUxID92IC4gfSAuICIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiRklMVEVSKD9yIT1yZGZzOlJlc291cmNlKSAuICIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAifSIgKQorICAgICAgICAgICAgLmFyZyggU29wcmFubzo6Tm9kZTo6
cmVzb3VyY2VUb04zKCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCkgKSAp
OworICAgIGtEZWJ1ZygpIDw8IHF1ZXJ5OworICAgIFNvcHJhbm86OlF1ZXJ5UmVzdWx0SXRlcmF0
b3IgaXQKKyAgICAgICAgICAgID0gbV9tb2RlbC0+ZXhlY3V0ZVF1ZXJ5KCBxdWVyeSwgU29wcmFu
bzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwgKTsKKyAgICB3aGlsZSggaXQubmV4dCgpICkg
eworICAgICAgICBjb25zdCBRVXJsIHIgPSBpdFsiciJdLnVyaSgpOworICAgICAgICBjb25zdCBT
b3ByYW5vOjpOb2RlIHAgPSBpdFsicCJdOworICAgICAgICBjb25zdCBTb3ByYW5vOjpOb2RlIHYg
PSBpdFsidiJdOworCisgICAgICAgIGlmICggIXRyZWUuY29udGFpbnMoIHIgKSApIHsKKyAgICAg
ICAgICAgIFR5cGVWaXNpYmlsaXR5Tm9kZSogcl91dm4gPSBuZXcgVHlwZVZpc2liaWxpdHlOb2Rl
KCByICk7CisgICAgICAgICAgICB0cmVlLmluc2VydCggciwgcl91dm4gKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiggdi5pc0xpdGVyYWwoKSApCisgICAgICAgICAgICB0cmVlW3JdLT51c2VyVmlz
aWJsZSA9ICh2LmxpdGVyYWwoKS50b0Jvb2woKSA/IDEgOiAtMSk7CisgICAgICAgIGlmICggcC5p
c1Jlc291cmNlKCkgJiYKKyAgICAgICAgICAgICAgICBwLnVyaSgpICE9IHIgJiYKKyAgICAgICAg
ICAgICAgICBwLnVyaSgpICE9IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkg
KSB7CisgICAgICAgICAgICBpZiAoICF0cmVlLmNvbnRhaW5zKCBwLnVyaSgpICkgKSB7CisgICAg
ICAgICAgICAgICAgVHlwZVZpc2liaWxpdHlOb2RlKiBwX3V2biA9IG5ldyBUeXBlVmlzaWJpbGl0
eU5vZGUoIHAudXJpKCkgKTsKKyAgICAgICAgICAgICAgICB0cmVlLmluc2VydCggcC51cmkoKSwg
cF91dm4gKTsKKyAgICAgICAgICAgICAgICB0cmVlW3JdLT5wYXJlbnRzLmluc2VydCggcF91dm4g
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRy
ZWVbcl0tPnBhcmVudHMuaW5zZXJ0KCB0cmVlW3AudXJpKCldICk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBtYWtlIHN1cmUgcmRmczpSZXNvdXJjZSBpcyB2aXNp
YmxlIGJ5IGRlZmF1bHQKKyAgICBUeXBlVmlzaWJpbGl0eU5vZGUqIHJkZnNSZXNvdXJjZU5vZGUg
PSAwOworICAgIFFIYXNoPFFVcmwsIFR5cGVWaXNpYmlsaXR5Tm9kZSo+OjppdGVyYXRvciByZGZz
UmVzb3VyY2VJdCA9IHRyZWUuZmluZChTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJj
ZSgpKTsKKyAgICBpZiggcmRmc1Jlc291cmNlSXQgPT0gdHJlZS5lbmQoKSApIHsKKyAgICAgICAg
cmRmc1Jlc291cmNlTm9kZSA9IG5ldyBUeXBlVmlzaWJpbGl0eU5vZGUoU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSk7CisgICAgICAgIHRyZWUuaW5zZXJ0KCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpLCByZGZzUmVzb3VyY2VOb2RlICk7CisgICAgfQor
ICAgIGVsc2UgeworICAgICAgICByZGZzUmVzb3VyY2VOb2RlID0gcmRmc1Jlc291cmNlSXQudmFs
dWUoKTsKKyAgICB9CisgICAgaWYoIHJkZnNSZXNvdXJjZU5vZGUtPnVzZXJWaXNpYmxlID09IDAg
KSB7CisgICAgICAgIHJkZnNSZXNvdXJjZU5vZGUtPnVzZXJWaXNpYmxlID0gMTsKKyAgICB9Cisg
ICAgLy8gYWRkIHJkZnM6UmVzb3VyY2UgYXMgcGFyZW50IGZvciBhbGwgdG9wLWxldmVsIGNsYXNz
ZXMKKyAgICBmb3IgKCBRSGFzaDxRVXJsLCBUeXBlVmlzaWJpbGl0eU5vZGUqPjo6aXRlcmF0b3Ig
aXQgPSB0cmVlLmJlZ2luKCk7CisgICAgICAgICAgaXQgIT0gdHJlZS5lbmQoKTsgKytpdCApIHsK
KyAgICAgICAgaWYoIGl0LnZhbHVlKCkgIT0gcmRmc1Jlc291cmNlTm9kZSAmJiBpdC52YWx1ZSgp
LT5wYXJlbnRzLmlzRW1wdHkoKSApIHsKKyAgICAgICAgICAgIGl0LnZhbHVlKCktPnBhcmVudHMu
aW5zZXJ0KCByZGZzUmVzb3VyY2VOb2RlICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBm
aW5hbGx5IGRldGVybWluZSB2aXNpYmlsaXR5IG9mIGFsbCBub2RlcworICAgIGZvciAoIFFIYXNo
PFFVcmwsIFR5cGVWaXNpYmlsaXR5Tm9kZSo+OjppdGVyYXRvciBpdCA9IHRyZWUuYmVnaW4oKTsK
KyAgICAgICAgICBpdCAhPSB0cmVlLmVuZCgpOyArK2l0ICkgeworICAgICAgICBRU2V0PFR5cGVW
aXNpYmlsaXR5Tm9kZSo+IHZpc2l0ZWROb2RlczsKKyAgICAgICAgbV92aXNpYmlsaXR5SGFzaC5p
bnNlcnQoaXQua2V5KCksIGl0LnZhbHVlKCktPnVwZGF0ZVVzZXJWaXNpYmlsaXR5KCB2aXNpdGVk
Tm9kZXMgKSA9PSAxICk7CisgICAgfQorCisgICAgLy8gZ2V0IHJpZCBvZiB0aGUgdGVtcCB0cmVl
CisgICAgcURlbGV0ZUFsbCh0cmVlKTsKK30KKworYm9vbCBUeXBlVmlzaWJpbGl0eVRyZWU6Omlz
VmlzaWJsZShjb25zdCBRVXJsICZ0eXBlKSBjb25zdAoreworICAgIFFNdXRleExvY2tlciBsb2Nr
KCAmbV9tdXRleCApOworCisgICAgUUhhc2g8UVVybCwgYm9vbD46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV92aXNpYmlsaXR5SGFzaC5jb25zdEZpbmQodHlwZSk7CisgICAgaWYoIGl0ICE9IG1fdmlz
aWJpbGl0eUhhc2guY29uc3RFbmQoKSApIHsKKyAgICAgICAgcmV0dXJuICppdDsKKyAgICB9Cisg
ICAgZWxzZSB7CisgICAgICAgIGtEZWJ1ZygpIDw8ICJDb3VsZCBub3QgZmluZCB0eXBlIiA8PCB0
eXBlIDw8ICJpbiB0cmVlLiBEZWZhdWx0aW5nIHRvIHZpc2libGUuIjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorfQpJbmRleDoga2RlYmFzZS9ydW50aW1lL25lcG9tdWsvc2VydmljZXMv
c3RvcmFnZS90eXBldmlzaWJpbGl0eXRyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrZGViYXNlL3J1bnRp
bWUvbmVwb211ay9zZXJ2aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmlsaXR5dHJlZS5oCShyZXZpc2lv
biAwKQorKysga2RlYmFzZS9ydW50aW1lL25lcG9tdWsvc2VydmljZXMvc3RvcmFnZS90eXBldmlz
aWJpbGl0eXRyZWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBOZXBvbXVrIEtERSBwcm9qZWN0LgorICAgQ29weXJpZ2h0IChD
KSAyMDEwIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKworICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSB2ZXJzaW9uIDMsIG9yIGFueQorICAgbGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBieSB0aGUgbWVt
YmVyc2hpcCBvZiBLREUgZS5WLiAob3IgaXRzCisgICBzdWNjZXNzb3IgYXBwcm92ZWQgYnkgdGhl
IG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4pLCB3aGljaCBzaGFsbAorICAgYWN0IGFzIGEgcHJveHkg
ZGVmaW5lZCBpbiBTZWN0aW9uIDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNlLgorCisgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z
ZXMvPi4KKyovCisKKyNpZm5kZWYgVFlQRVZJU0lCSUxJVFlUUkVFX0gKKyNkZWZpbmUgVFlQRVZJ
U0lCSUxJVFlUUkVFX0gKKworI2luY2x1ZGUgPFF0Q29yZS9RVXJsPgorI2luY2x1ZGUgPFF0Q29y
ZS9RSGFzaD4KKyNpbmNsdWRlIDxRdENvcmUvUU11dGV4PgorCituYW1lc3BhY2UgU29wcmFubyB7
CitjbGFzcyBNb2RlbDsKK30KKworLyoqCisgKiBCdWlsZHMgYSB0eXBlIHRyZWUgdGhhdCBhbGxv
d3MgdG8gY2hlY2sgdGhlIG5hbzp1c2VyVmlzaWJsZQorICogdmFsdWUgZm9yIGVhY2ggZXhpc3Rp
bmcgdHlwZS4KKyAqLworY2xhc3MgVHlwZVZpc2liaWxpdHlUcmVlCit7CitwdWJsaWM6CisgICAg
VHlwZVZpc2liaWxpdHlUcmVlKCBTb3ByYW5vOjpNb2RlbCogbW9kZWwgKTsKKyAgICB+VHlwZVZp
c2liaWxpdHlUcmVlKCk7CisKKyAgICB2b2lkIHJlYnVpbGRUcmVlKCk7CisKKyAgICAvKioKKyAg
ICAgKiBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIHR5cGUgaXMgdmlzaWJsZS4KKyAgICAgKi8KKyAg
ICBib29sIGlzVmlzaWJsZSggY29uc3QgUVVybCYgdHlwZSApIGNvbnN0OworCitwcml2YXRlOgor
ICAgIFNvcHJhbm86Ok1vZGVsKiBtX21vZGVsOworICAgIGNsYXNzIFR5cGVWaXNpYmlsaXR5Tm9k
ZTsKKyAgICBRSGFzaDxRVXJsLCBib29sPiBtX3Zpc2liaWxpdHlIYXNoOworICAgIG11dGFibGUg
UU11dGV4IG1fbXV0ZXg7Cit9OworCisjZW5kaWYgLy8gVFlQRVZJU0lCSUxJVFlUUkVFX0gKSW5k
ZXg6IGtkZWJhc2UvcnVudGltZS9uZXBvbXVrL3NlcnZpY2VzL3N0b3JhZ2UvcmVwb3NpdG9yeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga2RlYmFzZS9ydW50aW1lL25lcG9tdWsvc2VydmljZXMvc3RvcmFn
ZS9yZXBvc2l0b3J5LmNwcAkocmV2aXNpb24gMTIxNTcwNSkKKysrIGtkZWJhc2UvcnVudGltZS9u
ZXBvbXVrL3NlcnZpY2VzL3N0b3JhZ2UvcmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0LDYgKzE0LDcgQEAKIAogI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJtb2Rl
bGNvcHlqb2IuaCIKKyNpbmNsdWRlICJjcmFwcHlpbmZlcmVuY2VyMi5oIgogCiAjaW5jbHVkZSA8
U29wcmFuby9CYWNrZW5kPgogI2luY2x1ZGUgPFNvcHJhbm8vUGx1Z2luTWFuYWdlcj4KQEAgLTY5
LDYgKzcwLDkgQEAKIHsKICAgICBrRGVidWcoKSA8PCBtX25hbWU7CiAKKyAgICBkZWxldGUgbV9p
bmZlcmVuY2VyOworICAgIG1faW5mZXJlbmNlciA9IDA7CisKICAgICBkZWxldGUgbV9tb2RlbENv
cHlKb2I7CiAgICAgbV9tb2RlbENvcHlKb2IgPSAwOwogCkBAIC0xNjUsOSArMTY5LDEzIEBACiAg
ICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgU29wcmFubzo6VXRp
bDo6U2lnbmFsQ2FjaGVNb2RlbCogc2NtID0gbmV3IFNvcHJhbm86OlV0aWw6OlNpZ25hbENhY2hl
TW9kZWwoIG1fbW9kZWwgKTsKICAgICBzY20tPnNldFBhcmVudCh0aGlzKTsgLy8gbWVtb3J5IG1h
bmFnZW1lbnQKLQogICAgIHNldFBhcmVudE1vZGVsKCBzY20gKTsKIAorICAgIC8vIGNyZWF0ZSB0
aGUgY3JhcHB5IGluZmVyZW5jZSBtb2RlbCB3aGljaCBoYW5kbGVzIHJkZnM6c3ViQ2xhc3NPZiBv
bmx5IC0+IHdlIG9ubHkgdXNlIHRoaXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBvZiBSZXNvdXJj
ZVR5cGVUZXJtcworICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAg
IG1faW5mZXJlbmNlciA9IG5ldyBDcmFwcHlJbmZlcmVuY2VyMiggc2NtICk7CisgICAgc2V0UGFy
ZW50TW9kZWwobV9pbmZlcmVuY2VyKTsKKwogICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgdG8gY29u
dmVydAogICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIGJvb2wg
Y29udmVydGluZ0RhdGEgPSBmYWxzZTsKQEAgLTMzNyw3ICszNDUsMTggQEAKICAgICAvLyBuZWVk
cyB0byBiZSBhZGRyZXNzZWQgYXMgd2VsbAogICAgIHNldHRpbmdzIDw8IFNvcHJhbm86OkJhY2tl
bmRTZXR0aW5nKCAiU2VydmVyVGhyZWFkcyIsIDEwMCApOwogCisgICAgLy8gTmV2ZXIgdGFrZSBt
b3JlIHRoYW4gNSBtaW51dGVzIHRvIGFuc3dlciBhIHF1ZXJ5ICh0aGlzIGlzIHRvIGZpbHRlciBv
dXQgYnJva2VuIHF1ZXJpZXMgYW5kIGJ1Z3MgaW4gVmlydHVvc28ncyBxdWVyeSBvcHRpbWl6ZXIp
CisgICAgLy8gdHJ1ZWc6IFdlIGNhbm5vdCBhY3RpdmF0ZSB0aGlzIHlldC4gMS4gVmlydHVvc28g
PCA2LjMgY3Jhc2hlcyBhbmQgMi4gZXZlbiBvcGVuIGN1cnNvcnMgYXJlIHN1YmplY3QgdG8gdGhl
IHRpbWVvdXQgd2hpY2ggaXMgcmVhbGx5CisgICAgLy8gICAgICAgIG5vdCB3aGF0IHdlIHdhbnQh
CisvLyAgICBzZXR0aW5ncyA8PCBTb3ByYW5vOjpCYWNrZW5kU2V0dGluZyggIlF1ZXJ5VGltZW91
dCIsIDUqNjAwMDAgKTsKKwogICAgIHJldHVybiBzZXR0aW5nczsKIH0KIAordm9pZCBOZXBvbXVr
OjpSZXBvc2l0b3J5Ojp1cGRhdGVJbmZlcmVuY2UoKQoreworICAgIG1faW5mZXJlbmNlci0+dXBk
YXRlSW5mZXJlbmNlSW5kZXgoKTsKKyAgICBtX2luZmVyZW5jZXItPnVwZGF0ZUFsbFJlc291cmNl
cygpOworfQorCiAjaW5jbHVkZSAicmVwb3NpdG9yeS5tb2MiCkluZGV4OiBrZGViYXNlL3J1bnRp
bWUvbmVwb211ay9zZXJ2aWNlcy9zdG9yYWdlL2NyYXBweWluZmVyZW5jZXIyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrZGViYXNlL3J1bnRpbWUvbmVwb211ay9zZXJ2aWNlcy9zdG9yYWdlL2NyYXBweWlu
ZmVyZW5jZXIyLmNwcAkocmV2aXNpb24gMCkKKysrIGtkZWJhc2UvcnVudGltZS9uZXBvbXVrL3Nl
cnZpY2VzL3N0b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDU5NCBAQAorLyoKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBOZXBvbXVrIEtERSBw
cm9qZWN0LgorICAgQ29weXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2Rl
Lm9yZz4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFueQorICAgbGF0ZXIgdmVy
c2lvbiBhY2NlcHRlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiAob3IgaXRzCisgICBz
dWNjZXNzb3IgYXBwcm92ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4pLCB3aGljaCBz
aGFsbAorICAgYWN0IGFzIGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9uIDYgb2YgdmVyc2lvbiAz
IG9mIHRoZSBsaWNlbnNlLgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4gIElmIG5vdCwgc2VlIDxo
dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJjcmFwcHlpbmZl
cmVuY2VyMi5oIgorI2luY2x1ZGUgInR5cGV2aXNpYmlsaXR5dHJlZS5oIgorCisjaW5jbHVkZSA8
U29wcmFuby9Wb2NhYnVsYXJ5L05STD4KKyNpbmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvTkFP
PgorI2luY2x1ZGUgPFNvcHJhbm8vVm9jYWJ1bGFyeS9SREY+CisjaW5jbHVkZSA8U29wcmFuby9W
b2NhYnVsYXJ5L1JERlM+CisjaW5jbHVkZSA8U29wcmFuby9TdGF0ZW1lbnQ+CisjaW5jbHVkZSA8
U29wcmFuby9TdGF0ZW1lbnRJdGVyYXRvcj4KKyNpbmNsdWRlIDxTb3ByYW5vL05vZGU+CisjaW5j
bHVkZSA8U29wcmFuby9Ob2RlSXRlcmF0b3I+CisjaW5jbHVkZSA8U29wcmFuby9HcmFwaD4KKyNp
bmNsdWRlIDxTb3ByYW5vL1F1ZXJ5UmVzdWx0SXRlcmF0b3I+CisKKyNpbmNsdWRlIDxRdENvcmUv
UVRpbWU+CisjaW5jbHVkZSA8UXRDb3JlL1FNdXRleD4KKyNpbmNsdWRlIDxRdENvcmUvUU11dGV4
TG9ja2VyPgorI2luY2x1ZGUgPFF0Q29yZS9RVGhyZWFkPgorCisjaW5jbHVkZSA8a2RlYnVnLmg+
CisKKworLyoqCisgKiBTaW1wbGUgaGVscGVyIHRocmVhZCB3aGljaCB1cGRhdGVzIHRoZSBzdWJj
bGFzcyBhbmQgdmlzaWJpbGl0eSBpbmZlcmVuY2Ugb24gYWxsIHJlc291cmNlcworICogaW4gdGhl
IGRhdGFiYXNlLiBUaGlzIGlzIGRvbmUgaW4gYSBzZXBhcmF0ZSB0aHJlYWQgc2luY2UgaXQgdGFr
ZXMgdXAgdG8gaGFsZiBhbiBob3VyIHRoZSBmaXJzdCB0aW1lLgorICovCitjbGFzcyBDcmFwcHlJ
bmZlcmVuY2VyMjo6VXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkIDogcHVibGljIFFUaHJlYWQKK3sK
K3B1YmxpYzoKKyAgICBVcGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQoIENyYXBweUluZmVyZW5jZXIy
KiBwYXJlbnQgKQorICAgICAgICA6IFFUaHJlYWQocGFyZW50KSwKKyAgICAgICAgICBtX2NhbmNl
bGVkKGZhbHNlKSwKKyAgICAgICAgICBtX21vZGVsKHBhcmVudCkgeworICAgIH0KKworICAgIHZv
aWQgY2FuY2VsKCkgeworICAgICAgICBrRGVidWcoKTsKKyAgICAgICAgbV9jYW5jZWxlZCA9IHRy
dWU7CisgICAgfQorCisgICAgdm9pZCBydW4oKSB7CisgICAgICAgIGtEZWJ1ZygpOworICAgICAg
ICBtX2NhbmNlbGVkID0gZmFsc2U7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBRVGltZSB0aW1l
cjsKKyAgICAgICAgdGltZXIuc3RhcnQoKTsKKyAgICAgICAgaW50IGNudCA9IDA7CisjZW5kaWYK
KyAgICAgICAgLy8gZm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IHdlIG9ubHkgaGFuZGxlIHJl
c291cmNlcyBpbiBJbnN0YW5jZUJhc2VzLiBUaGUgcmVzdCB3ZSBhbG1vc3QgbmV2ZXIgcXVlcnkg
YW55d2F5LgorICAgICAgICBTb3ByYW5vOjpRdWVyeVJlc3VsdEl0ZXJhdG9yIGl0ID0gbV9tb2Rl
bC0+ZXhlY3V0ZVF1ZXJ5KCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgZGlzdGluY3QgP3Ig
d2hlcmUgeyBncmFwaCA/ZyB7ID9yIGEgP3QgLiB9IC4gIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJGSUxURVIoP2cgIT0gJTEpIC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ7ID9nIGEgJTIgLiB9IFVOSU9OIHsgP2cgYSAlMyAuIH0gLiB9IiApCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZygg
U29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBtX21vZGVsLT5jcmFwcHlJbmZlcmVuY2VDb250
ZXh0KCkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIFNvcHJh
bm86OlZvY2FidWxhcnk6Ok5STDo6RGlzY2FyZGFibGVJbnN0YW5jZUJhc2UoKSApLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6
TlJMOjpJbnN0YW5jZUJhc2UoKSApICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFu
Z3VhZ2VTcGFycWwgKTsKKyAgICAgICAgd2hpbGUoICFtX2NhbmNlbGVkICYmIGl0Lm5leHQoKSAp
IHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICArK2NudDsKKyNlbmRpZgorICAgICAgICAg
ICAgY29uc3QgUVVybCByZXMgPSBpdFswXS51cmkoKTsKKyAgICAgICAgICAgIC8vIHdlIHNraXAg
YWxyZWFkeSBoYW5kbGVkIHJlc291cmNlcyAodGhlIFZpcnR1b3NvIHF1ZXJ5IGVuZ2luZSBzZWVt
cyB0byBjaG9rZSB3aGVuIHdlIGFkZCB0aGUgYmlmOmV4aXN0cyBjb25kaXRpb24gaW4gdGhlIHF1
ZXJ5IGFib3ZlKQorICAgICAgICAgICAgU29wcmFubzo6UXVlcnlSZXN1bHRJdGVyYXRvciB0eXBl
SXQgPSBtX21vZGVsLT5leGVjdXRlUXVlcnkoIFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCBk
aXN0aW5jdCA/dCB3aGVyZSB7ICUxIGEgP3QgLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiRklMVEVSKCFiaWY6ZXhpc3RzKChzZWxlY3QgKDEpIHdoZXJlIHsgZ3JhcGgg
JTIgeyAlMSBhID90dCAuIH0gLiB9KSkpIC4gfSIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKCBTb3By
YW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMocmVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJh
bm86Ok5vZGU6OnJlc291cmNlVG9OMyggbV9tb2RlbC0+Y3JhcHB5SW5mZXJlbmNlQ29udGV4dCgp
ICkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwg
KTsKKyAgICAgICAgICAgIFFTZXQ8UVVybD4gYmFzZVR5cGVzOworICAgICAgICAgICAgd2hpbGUo
dHlwZUl0Lm5leHQoKSkgeworICAgICAgICAgICAgICAgIGJhc2VUeXBlcyA8PCB0eXBlSXRbMF0u
dXJpKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiggIWJhc2VUeXBlcy5pc0VtcHR5
KCkgKSB7CisgICAgICAgICAgICAgICAgbV9tb2RlbC0+YWRkSW5mZXJlbmNlU3RhdGVtZW50cygg
cmVzLCBiYXNlVHlwZXMgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2lmbmRlZiBOREVC
VUcKKyAgICAgICAga0RlYnVnKCkgPDwgY250IDw8ICJyZXNvdXJjZXMgdXBkYXRlZC4gRWxhcHNl
ZDoiIDw8IHRpbWVyLmVsYXBzZWQoKTsKKyNlbmRpZgorICAgIH0KKworcHJpdmF0ZToKKyAgICBi
b29sIG1fY2FuY2VsZWQ7CisgICAgQ3JhcHB5SW5mZXJlbmNlcjIqIG1fbW9kZWw7Cit9OworCisK
K2NsYXNzIENyYXBweUluZmVyZW5jZXIyOjpQcml2YXRlCit7CitwdWJsaWM6CisgICAgUHJpdmF0
ZSgpCisgICAgICAgIDogbV91cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQoMCkgeworICAgIH0KKwor
ICAgIC8vLyBnZXQgdGhlIGxpc3Qgb2Ygc3VwZXIgdHlwZXMgZm9yIFxwIHR5cGUKKyAgICBRU2V0
PFFVcmw+IHN1cGVyQ2xhc3NlcyggY29uc3QgUVVybCYgdHlwZSApIGNvbnN0OworCisgICAgLy8v
IENoZWNrIGlmIGEgcmVzb3VyY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHR5cGVzIGlzIHZpc2libGUu
CisgICAgYm9vbCBpc1Zpc2libGVGcm9tVHlwZXMoIGNvbnN0IFFTZXQ8UVVybD4mIHR5cGVzICkg
Y29uc3Q7CisKKyAgICAvLy8gUGVyZm9ybXMgYSBxdWVyeSB0byByZXRyaWV2ZSBhbGwgdHlwZXMg
dGhhdCB3ZXJlIG5vdCBhZGRlZCBieSB1cworICAgIFFTZXQ8UVVybD4gcXVlcnlSZXNvdXJjZVR5
cGVzKCBjb25zdCBRVXJsJiByZXNvdXJjZSApIGNvbnN0OworCisgICAgLy8vIHVzZWQgdG8gYnVp
bGQgbV9zdXBlckNsYXNzZXMgKGFuZCBub3RoaW5nIGVsc2UhKQorICAgIFFTZXQ8UVVybD4gYnVp
bGRTdXBlckNsYXNzZXNIYXNoKCBjb25zdCBRVXJsJiB0eXBlLCBRU2V0PFFVcmw+JiB2aXNpdGVk
VHlwZXMsIGNvbnN0IFFNdWx0aUhhc2g8UVVybCwgUVVybD4mIHJkZnNTdWJDbGFzc1JlbGF0aW9u
cyApOworCisgICAgUUhhc2g8UVVybCwgUVNldDxRVXJsPiA+IG1fc3VwZXJDbGFzc2VzOworICAg
IFR5cGVWaXNpYmlsaXR5VHJlZSogbV90eXBlVmlzaWJpbGl0eVRyZWU7CisgICAgUU11dGV4IG1f
bXV0ZXg7CisKKyAgICBVcGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQqIG1fdXBkYXRlQWxsUmVzb3Vy
Y2VzVGhyZWFkOworCisgICAgUVVybCBtX2luZmVyZW5jZUNvbnRleHQ7CisKKyAgICBDcmFwcHlJ
bmZlcmVuY2VyMiogcTsKK307CisKKworCitRU2V0PFFVcmw+IENyYXBweUluZmVyZW5jZXIyOjpQ
cml2YXRlOjpzdXBlckNsYXNzZXMoIGNvbnN0IFFVcmwmIHR5cGUgKSBjb25zdAoreworICAgIFFI
YXNoPFFVcmwsIFFTZXQ8UVVybD4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N1cGVyQ2xhc3Nl
cy5jb25zdEZpbmQodHlwZSk7CisgICAgaWYoIGl0ICE9IG1fc3VwZXJDbGFzc2VzLmNvbnN0RW5k
KCkgKSB7CisgICAgICAgIHJldHVybiBpdC52YWx1ZSgpOworICAgIH0KKyAgICBlbHNlIHsKKyAg
ICAgICAgcmV0dXJuIFFTZXQ8UVVybD4oKSA8PCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpS
ZXNvdXJjZSgpOworICAgIH0KK30KKworYm9vbCBDcmFwcHlJbmZlcmVuY2VyMjo6UHJpdmF0ZTo6
aXNWaXNpYmxlRnJvbVR5cGVzKGNvbnN0IFFTZXQ8UVVybD4gJnR5cGVzKSBjb25zdAoreworICAg
IC8vIFdlIG5lZWQgdG8gZXh0cmFjdCB0aGUgbGVhZiB0eXBlcyBpbiB0aGUgc3ViZ3JhcGggdGhh
dCBpcyB0eXBlcworICAgIC8vIGFzIHRob3NlIGFyZSB0aGUgdHlwZXMgdGhhdCBkZWZpbmUgaWYg
dGhlIHJlc291cmNlIHdpbGwgYmUgdmlzaWJsZQorCisgICAgLy8gVE9ETzogZG8gdGhlIGZvbGxv
d2luZyBpbiBhbiBlZmZpY2llbnQgd2F5CisgICAgLy8gd2UgcmVtb3ZlIGFsbCBzdXBlcnR5cGVz
IGZyb20gdGhlIHNldCBvZiB0eXBlcyBhbmQgYXJlIGxlZnQgd2l0aCB0aGUgbGVhZiB0eXBlcwor
ICAgIFFTZXQ8UVVybD4gbGVhZlR5cGVzKHR5cGVzKTsKKyAgICBRX0ZPUkVBQ0goY29uc3QgUVVy
bCYgdHlwZSwgdHlwZXMpIHsKKyAgICAgICAgbGVhZlR5cGVzIC09IHN1cGVyQ2xhc3Nlcyh0eXBl
KTsKKyAgICAgICAgaWYobGVhZlR5cGVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIC8vIGlmIHRoZXJlIGlzIG9uZSBsZWFmIHR5cGUgbGVmdCB0aGF0IGlzIHZp
c2libGUgdGhlIHJlc291cmNlIGlzIHZpc2libGUsIHRvbworICAgIFFfRk9SRUFDSCggY29uc3Qg
UVVybCYgdHlwZSwgbGVhZlR5cGVzICkgeworICAgICAgICBpZiggbV90eXBlVmlzaWJpbGl0eVRy
ZWUtPmlzVmlzaWJsZSh0eXBlKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gbm8gdmlzaWJsZSB0eXBlIGZvdW5kCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitRU2V0PFFVcmw+IENyYXBweUluZmVyZW5jZXIyOjpQcml2YXRlOjpxdWVyeVJl
c291cmNlVHlwZXMoY29uc3QgUVVybCAmcmVzb3VyY2UpIGNvbnN0Cit7CisgICAgUVNldDxRVXJs
PiByZXNvdXJjZVR5cGVzOworICAgIFNvcHJhbm86OlF1ZXJ5UmVzdWx0SXRlcmF0b3IgaXQKKyAg
ICAgICAgICAgID0gcS0+cGFyZW50TW9kZWwoKS0+ZXhlY3V0ZVF1ZXJ5KCBRU3RyaW5nOjpmcm9t
TGF0aW4xKCJzZWxlY3QgP3Qgd2hlcmUgeyBncmFwaCA/ZyB7ICUxIGEgP3QgLiB9IC4gRklMVEVS
KD9nIT0lMikgLiB9IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5hcmcoU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKHJlc291cmNlKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZTo6
cmVzb3VyY2VUb04zKG1faW5mZXJlbmNlQ29udGV4dCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFy
cWwpOworICAgIHdoaWxlKGl0Lm5leHQoKSkgeworICAgICAgICByZXNvdXJjZVR5cGVzIDw8IGl0
WzBdLnVyaSgpOworICAgIH0KKworICAgIHJldHVybiByZXNvdXJjZVR5cGVzOworfQorCitRU2V0
PFFVcmw+IENyYXBweUluZmVyZW5jZXIyOjpQcml2YXRlOjpidWlsZFN1cGVyQ2xhc3Nlc0hhc2go
IGNvbnN0IFFVcmwmIHR5cGUsIFFTZXQ8UVVybD4mIHZpc2l0ZWRUeXBlcywgY29uc3QgUU11bHRp
SGFzaDxRVXJsLCBRVXJsPiYgcmRmc1N1YkNsYXNzUmVsYXRpb25zID0gUU11bHRpSGFzaDxRVXJs
LCBRVXJsPigpICkKK3sKKyAgICBRSGFzaDxRVXJsLCBRU2V0PFFVcmw+ID46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9zdXBlckNsYXNzZXMuY29uc3RGaW5kKHR5cGUpOworICAgIGlmKCBpdCA9PSBt
X3N1cGVyQ2xhc3Nlcy5jb25zdEVuZCgpICkgeworICAgICAgICBRU2V0PFFVcmw+IHN1cGVyVHlw
ZXM7CisgICAgICAgIGZvcihRTXVsdGlIYXNoPFFVcmwsIFFVcmw+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IHJkZnNTdWJDbGFzc1JlbGF0aW9ucy5jb25zdEZpbmQodHlwZSk7CisgICAgICAgICAgICBp
dCAhPSByZGZzU3ViQ2xhc3NSZWxhdGlvbnMuY29uc3RFbmQoKSAmJiBpdC5rZXkoKSA9PSB0eXBl
OyArK2l0KSB7CisgICAgICAgICAgICAvLyBhdm9pZCBlbmRsZXNzIGxvb3BzIGluIGNhc2Ugd2Ug
aGF2ZSBjaXJjdWxhciBoaWVyYXJjaGllcworICAgICAgICAgICAgaWYoICF2aXNpdGVkVHlwZXMu
Y29udGFpbnMoIGl0LnZhbHVlKCkgKSApIHsKKyAgICAgICAgICAgICAgICB2aXNpdGVkVHlwZXMg
PDwgaXQudmFsdWUoKTsKKyAgICAgICAgICAgICAgICBzdXBlclR5cGVzIDw8IGl0LnZhbHVlKCk7
CisgICAgICAgICAgICAgICAgc3VwZXJUeXBlcyArPSBidWlsZFN1cGVyQ2xhc3Nlc0hhc2goIGl0
LnZhbHVlKCksIHZpc2l0ZWRUeXBlcywgcmRmc1N1YkNsYXNzUmVsYXRpb25zICk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9zdXBlckNsYXNzZXMuaW5zZXJ0KCB0eXBlLCBz
dXBlclR5cGVzICk7CisgICAgICAgIHJldHVybiBzdXBlclR5cGVzOworICAgIH0KKyAgICBlbHNl
IHsKKyAgICAgICAgcmV0dXJuIGl0LnZhbHVlKCk7CisgICAgfQorfQorCitDcmFwcHlJbmZlcmVu
Y2VyMjo6Q3JhcHB5SW5mZXJlbmNlcjIoU29wcmFubzo6TW9kZWwqIHBhcmVudCkKKyAgICA6IFNv
cHJhbm86OkZpbHRlck1vZGVsKHBhcmVudCksCisgICAgICBkKG5ldyBQcml2YXRlKCkpCit7Cisg
ICAgZC0+cSA9IHRoaXM7CisgICAgZC0+bV9pbmZlcmVuY2VDb250ZXh0ID0gUVVybDo6ZnJvbUVu
Y29kZWQoInVybjpjcmFwcHlpbmZlcmVuY2UyOmluZmVycmVkdHJpcGxlcyIpOworICAgIGQtPm1f
dHlwZVZpc2liaWxpdHlUcmVlID0gbmV3IFR5cGVWaXNpYmlsaXR5VHJlZSh0aGlzKTsKKyAgICBp
ZiAoIHBhcmVudCApCisgICAgICAgIHVwZGF0ZUluZmVyZW5jZUluZGV4KCk7Cit9CisKK0NyYXBw
eUluZmVyZW5jZXIyOjp+Q3JhcHB5SW5mZXJlbmNlcjIoKQoreworICAgIGlmKCBkLT5tX3VwZGF0
ZUFsbFJlc291cmNlc1RocmVhZCApIHsKKyAgICAgICAgZC0+bV91cGRhdGVBbGxSZXNvdXJjZXNU
aHJlYWQtPmNhbmNlbCgpOworICAgICAgICBkLT5tX3VwZGF0ZUFsbFJlc291cmNlc1RocmVhZC0+
d2FpdCgpOworICAgIH0KKyAgICBkZWxldGUgZDsKK30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2Vy
Mjo6c2V0UGFyZW50TW9kZWwoU29wcmFubzo6TW9kZWwgKm1vZGVsKQoreworICAgIEZpbHRlck1v
ZGVsOjpzZXRQYXJlbnRNb2RlbCggbW9kZWwgKTsKKyAgICB1cGRhdGVJbmZlcmVuY2VJbmRleCgp
OworfQorCitTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIENyYXBweUluZmVyZW5jZXIyOjphZGRT
dGF0ZW1lbnQoY29uc3QgU29wcmFubzo6U3RhdGVtZW50ICZzdGF0ZW1lbnQpCit7CisgICAgaWYo
IHN0YXRlbWVudC5jb250ZXh0KCkgPT0gZC0+bV9pbmZlcmVuY2VDb250ZXh0ICkgeworI2lmZGVm
IE5ERUJVRworICAgICAgICBrRGVidWcoKSA8PCAiTm8gYWN0aW9ucyBhcmUgYWxsb3dlZCBvbiB0
aGUgY3JhcHB5IGluZmVyZW5jZXIgY29udGV4dCBpbiByZWxlYXNlIG1vZGUhIiA8PCBzdGF0ZW1l
bnQ7CisgICAgICAgIHJldHVybiBTb3ByYW5vOjpFcnJvcjo6RXJyb3JJbnZhbGlkQXJndW1lbnQ7
CisjZWxzZQorICAgICAgICBrV2FybmluZygpIDw8ICJXQVJOSU5HISEhISEhISEhISEgQWRkaW5n
IHN0YXRlbWVudCBpbiBjcmFwcHkgaW5mZXJlbmNlciBjb250ZXh0ISEhISEhISEhISEhIiA8PCBz
dGF0ZW1lbnQ7CisjZW5kaWYKKyAgICB9CisKKyAgICBRTXV0ZXhMb2NrZXIgbG9jayggJmQtPm1f
bXV0ZXggKTsKKworICAgIFNvcHJhbm86OkVycm9yOjpFcnJvckNvZGUgciA9IHBhcmVudE1vZGVs
KCktPmFkZFN0YXRlbWVudCggc3RhdGVtZW50ICk7CisgICAgaWYoIHIgPT0gU29wcmFubzo6RXJy
b3I6OkVycm9yTm9uZSApIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSGFuZGxlIHRoZSBpbmZl
cmVuY2UKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKCBzdGF0ZW1lbnQuc3ViamVjdCgpLmlzUmVz
b3VyY2UoKSAmJgorICAgICAgICAgICAgICAgIHN0YXRlbWVudC5vYmplY3QoKS5pc1Jlc291cmNl
KCkgJiYKKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQucHJlZGljYXRlKCkgPT0gU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCkgKSB7CisgICAgICAgICAgICBhZGRJbmZlcmVuY2VTdGF0
ZW1lbnRzKCBzdGF0ZW1lbnQuc3ViamVjdCgpLnVyaSgpLCBzdGF0ZW1lbnQub2JqZWN0KCkudXJp
KCkgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByOworfQorCitTb3ByYW5vOjpF
cnJvcjo6RXJyb3JDb2RlIENyYXBweUluZmVyZW5jZXIyOjpyZW1vdmVTdGF0ZW1lbnQoY29uc3Qg
U29wcmFubzo6U3RhdGVtZW50ICZzdGF0ZW1lbnQpCit7CisgICAgaWYoIHN0YXRlbWVudC5jb250
ZXh0KCkgPT0gZC0+bV9pbmZlcmVuY2VDb250ZXh0ICkgeworI2lmZGVmIE5ERUJVRworICAgICAg
ICBrRGVidWcoKSA8PCAiTm8gYWN0aW9ucyBhcmUgYWxsb3dlZCBvbiB0aGUgY3JhcHB5IGluZmVy
ZW5jZXIgY29udGV4dCBpbiByZWxlYXNlIG1vZGUhIiA8PCBzdGF0ZW1lbnQ7CisgICAgICAgIHJl
dHVybiBTb3ByYW5vOjpFcnJvcjo6RXJyb3JJbnZhbGlkQXJndW1lbnQ7CisjZWxzZQorICAgICAg
ICBrV2FybmluZygpIDw8ICJXQVJOSU5HISEhISEhISEhISEgUmVtb3Zpbmcgc3RhdGVtZW50IGZy
b20gY3JhcHB5IGluZmVyZW5jZXIgY29udGV4dCEhISEhISEhISEhISIgPDwgc3RhdGVtZW50Owor
I2VuZGlmCisgICAgfQorCisgICAgUU11dGV4TG9ja2VyIGxvY2soICZkLT5tX211dGV4ICk7CisK
KyAgICBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIGVycm9yID0gcGFyZW50TW9kZWwoKS0+cmVt
b3ZlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgaWYoIGVycm9yID09IFNvcHJhbm86OkVycm9y
OjpFcnJvck5vbmUgKSB7CisgICAgICAgIGlmICggc3RhdGVtZW50LmlzVmFsaWQoKSAmJgorICAg
ICAgICAgICAgICAgIHN0YXRlbWVudC5zdWJqZWN0KCkuaXNSZXNvdXJjZSgpICYmCisgICAgICAg
ICAgICAgICAgc3RhdGVtZW50Lm9iamVjdCgpLmlzUmVzb3VyY2UoKSAmJgorICAgICAgICAgICAg
ICAgIHN0YXRlbWVudC5wcmVkaWNhdGUoKSA9PSBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5
cGUoKSApIHsKKyAgICAgICAgICAgIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIHN0YXRlbWVu
dC5zdWJqZWN0KCkudXJpKCksIHN0YXRlbWVudC5vYmplY3QoKS51cmkoKSApOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBTb3ByYW5vOjpFcnJvcjo6RXJyb3JOb25lOworICAgIH0KKyAgICBl
bHNlIHsKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KK30KKworU29wcmFubzo6RXJyb3I6
OkVycm9yQ29kZSBDcmFwcHlJbmZlcmVuY2VyMjo6cmVtb3ZlQWxsU3RhdGVtZW50cyhjb25zdCBT
b3ByYW5vOjpTdGF0ZW1lbnQgJnN0YXRlbWVudCkKK3sKKyAgICBpZiggc3RhdGVtZW50LmNvbnRl
eHQoKSA9PSBkLT5tX2luZmVyZW5jZUNvbnRleHQgKSB7CisjaWZkZWYgTkRFQlVHCisgICAgICAg
IGtEZWJ1ZygpIDw8ICJObyBhY3Rpb25zIGFyZSBhbGxvd2VkIG9uIHRoZSBjcmFwcHkgaW5mZXJl
bmNlciBjb250ZXh0IGluIHJlbGVhc2UgbW9kZSEiIDw8IHN0YXRlbWVudDsKKyAgICAgICAgcmV0
dXJuIFNvcHJhbm86OkVycm9yOjpFcnJvckludmFsaWRBcmd1bWVudDsKKyNlbHNlCisgICAgICAg
IGtXYXJuaW5nKCkgPDwgIldBUk5JTkchISEhISEhISEhISBSZW1vdmluZyBzdGF0ZW1lbnRzIGZy
b20gY3JhcHB5IGluZmVyZW5jZXIgY29udGV4dCEhISEhISEhISEhISIgPDwgc3RhdGVtZW50Owor
I2VuZGlmCisgICAgfQorCisgICAgUU11dGV4TG9ja2VyIGxvY2soICZkLT5tX211dGV4ICk7CisK
KyAgICAvLworICAgIC8vIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBuZWVkIHRvIGJlIG1ldCBp
biBvcmRlciBmb3IgdXMgdG8gbmVlZCB0byBjaGVjayBmb3IgdHlwZXMKKyAgICAvLyAxLiBPYmpl
Y3Qgb3IgY29udGV4dCBuZWVkIHRvIGJlIHZhbGlkLiBPdGhlcndpc2Ugb3VyIHR5cGVzIGFyZSBy
ZW1vdmVkIGFueXdheQorICAgIC8vIDIuIE9iamVjdCBuZWVkcyB0byBiZSBlbXB0eSBvciBhIHJl
c291cmNlLiBMaXRlcmFscyBhcmUgbmV2ZXIgdHlwZXMKKyAgICAvLyAzLiBQcmVkaWNhdGUgbmVl
ZHMgdG8gYmUgZW1wdHkgb3IgcmRmOnR5cGUuIE90aGVyd2lzZSB0aGUgY2FsbCBpcyBub3QgcmVs
YXRlZCB0byB0eXBlcy4KKyAgICAvLworICAgIGlmICggc3RhdGVtZW50LmNvbnRleHQoKSAhPSBk
LT5tX2luZmVyZW5jZUNvbnRleHQgJiYKKyAgICAgICAgICAgICggKCBzdGF0ZW1lbnQucHJlZGlj
YXRlKCkuaXNFbXB0eSgpIHx8CisgICAgICAgICAgICAgICBzdGF0ZW1lbnQucHJlZGljYXRlKCkg
PT0gU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCkgKSAmJgorICAgICAgICAgICAgICgg
c3RhdGVtZW50Lm9iamVjdCgpLmlzRW1wdHkoKSB8fAorICAgICAgICAgICAgICBzdGF0ZW1lbnQu
b2JqZWN0KCkuaXNSZXNvdXJjZSgpICkgJiYKKyAgICAgICAgICAgICAoIHN0YXRlbWVudC5vYmpl
Y3QoKS5pc1ZhbGlkKCkgfHwKKyAgICAgICAgICAgICAgc3RhdGVtZW50LmNvbnRleHQoKS5pc1Zh
bGlkKCkgKSApICkgeworICAgICAgICAvLworICAgICAgICAvLyBJZiBib3RoIHJlc291cmNlIGFu
ZCB0eXBlIGFyZSBkZWZpbmVkIHdlIGNhbiBzaW1wbHkgY2FsbCByZW1vdmVJbmZlcmVuY2VTdGF0
ZW1lbnRzKCkgb24gdGhlbQorICAgICAgICAvLworICAgICAgICBpZiggc3RhdGVtZW50LnN1Ympl
Y3QoKS5pc1Jlc291cmNlKCkgJiYKKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQub2JqZWN0KCku
aXNSZXNvdXJjZSgpICkgeworICAgICAgICAgICAgY29uc3QgU29wcmFubzo6RXJyb3I6OkVycm9y
Q29kZSBlcnJvciA9IHBhcmVudE1vZGVsKCktPnJlbW92ZUFsbFN0YXRlbWVudHMoc3RhdGVtZW50
KTsKKyAgICAgICAgICAgIGlmKCBlcnJvciA9PSBTb3ByYW5vOjpFcnJvcjo6RXJyb3JOb25lICkg
eworICAgICAgICAgICAgICAgIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIHN0YXRlbWVudC5z
dWJqZWN0KCkudXJpKCksIHN0YXRlbWVudC5vYmplY3QoKS51cmkoKSApOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gaWYgb25seSB0aGUgdHlwZSBpcyB1bmRlZmluZWQgd2UgZ2V0IHRoZSB0eXBlcyBh
bmQgdGhlbiBjYWxsIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoKS4gVGhpcyBhdm9pZHMKKyAg
ICAgICAgLy8gcGVyZm9ybWluZyB0aGUgcXVlcnkgaW4gdGhlIGxhdHRlciBtZXRob2Qgb3ZlciBh
bmQgb3ZlciBmb3IgZWFjaCB0eXBlCisgICAgICAgIC8vCisgICAgICAgIGVsc2UgaWYoIHN0YXRl
bWVudC5zdWJqZWN0KCkuaXNWYWxpZCgpICkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIHdlIG5lZWQgdG8gZmlyc3QgZ2V0IHRoZSB0eXBlcyB0byByZW1vdmUsIHRoZW4gcmVtb3Zl
IHRoZSBzdGF0ZW1lbnRzLCBhbmQgb25seSB0aGVuIGNhbGwKKyAgICAgICAgICAgIC8vIHJlbW92
ZUluZmVyZW5jZVN0YXRlbWVudHMoKS4gVGhpcyBpcyBzaW5jZSB0aGUgbGF0dGVyIG1ha2VzIHVz
ZSBvZiB0aGUgdHlwZXMgaW4gdGhlIG1vZGVsCisgICAgICAgICAgICAvLworICAgICAgICAgICAg
UVN0cmluZyBxdWVyeTsKKyAgICAgICAgICAgIGlmKCBzdGF0ZW1lbnQuY29udGV4dCgpLmlzVmFs
aWQoKSApIHsKKyAgICAgICAgICAgICAgICBxdWVyeSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoInNl
bGVjdCA/dCB3aGVyZSB7IGdyYXBoICUyIHsgJTEgYSA/dCAuIH0gLiB9IikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC5hcmcoc3RhdGVtZW50LnN1YmplY3QoKS50b04zKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC5jb250ZXh0KCkudG9OMygpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHF1ZXJ5ID0gUVN0cmlu
Zzo6ZnJvbUxhdGluMSgic2VsZWN0ID90IHdoZXJlIHsgZ3JhcGggP2cgeyAlMSBhID90IC4gfSAu
IEZJTFRFUig/ZyE9JTIpIC4gfSIpCisgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKHN0YXRl
bWVudC5zdWJqZWN0KCkudG9OMygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3By
YW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjb25zdCBRTGlzdDxTb3ByYW5vOjpOb2RlPiB0eXBlcyA9
IGV4ZWN1dGVRdWVyeSggcXVlcnksIFNvcHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFs
ICkuaXRlcmF0ZUJpbmRpbmdzKDApLmFsbE5vZGVzKCk7CisgICAgICAgICAgICBjb25zdCBTb3By
YW5vOjpFcnJvcjo6RXJyb3JDb2RlIGVycm9yID0gcGFyZW50TW9kZWwoKS0+cmVtb3ZlQWxsU3Rh
dGVtZW50cyhzdGF0ZW1lbnQpOworICAgICAgICAgICAgaWYoIGVycm9yID09IFNvcHJhbm86OkVy
cm9yOjpFcnJvck5vbmUgKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlSW5mZXJlbmNlU3RhdGVt
ZW50cyggc3RhdGVtZW50LnN1YmplY3QoKS51cmkoKSwgdHlwZXMgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAg
ICAgIC8vIElmIHRoZSBzdWJqZWN0IGlzIG5vdCBkZWZpbmVkIGJ1dCB0aGUgdHlwZSBpcyB3ZSBu
ZWVkIHRvIHVwZGF0ZSBzZXZlcmFsIHJlc291cmNlcy4gVGhlcmUgaXMgbm8gd2F5IGFyb3VuZAor
ICAgICAgICAvLyBjYWxsaW5nIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoKSBmb3IgZWFjaCBy
ZXNvdXJjZS4KKyAgICAgICAgLy8KKyAgICAgICAgZWxzZSBpZiggc3RhdGVtZW50Lm9iamVjdCgp
LmlzVmFsaWQoKSApIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBXZSBuZWVkIHRv
IGdldCB0aGUgcmVzb3VyY2VzIGJlZm9yZSBhY3R1YWxseSByZW1vdmluZyB0aGUgc3RhdGVtZW50
cyBzaW5jZSBvdGhlcndpc2Ugd2UgbWlnaHQgbWlzcyB0aGVtCisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgUVN0cmluZyBxdWVyeTsKKyAgICAgICAgICAgIGlmKCBzdGF0ZW1lbnQuY29udGV4
dCgpLmlzVmFsaWQoKSApIHsKKyAgICAgICAgICAgICAgICBxdWVyeSA9IFFTdHJpbmc6OmZyb21M
YXRpbjEoInNlbGVjdCA/ciB3aGVyZSB7IGdyYXBoICUyIHsgP3IgYSAlMSAuIH0gLiB9IikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC5hcmcoc3RhdGVtZW50Lm9iamVjdCgpLnRvTjMoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmNvbnRleHQoKS50b04zKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcXVlcnkg
PSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgP3Igd2hlcmUgeyBncmFwaCA/ZyB7ID9yIGEg
JTEgLiB9IC4gRklMVEVSKD9nIT0lMikgLiB9IikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5h
cmcoc3RhdGVtZW50Lm9iamVjdCgpLnRvTjMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc3QgUUxpc3Q8U29wcmFubzo6Tm9kZT4g
cmVzb3VyY2VzID0gZXhlY3V0ZVF1ZXJ5KCBxdWVyeSwgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFu
Z3VhZ2VTcGFycWwgKS5pdGVyYXRlQmluZGluZ3MoMCkuYWxsTm9kZXMoKTsKKyAgICAgICAgICAg
IGNvbnN0IFNvcHJhbm86OkVycm9yOjpFcnJvckNvZGUgZXJyb3IgPSBwYXJlbnRNb2RlbCgpLT5y
ZW1vdmVBbGxTdGF0ZW1lbnRzKHN0YXRlbWVudCk7CisgICAgICAgICAgICBpZiggZXJyb3IgPT0g
U29wcmFubzo6RXJyb3I6OkVycm9yTm9uZSApIHsKKyAgICAgICAgICAgICAgICBRX0ZPUkVBQ0go
IGNvbnN0IFNvcHJhbm86Ok5vZGUmIHJlcywgcmVzb3VyY2VzICkgeworICAgICAgICAgICAgICAg
ICAgICByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCByZXMudXJpKCksIHN0YXRlbWVudC5vYmpl
Y3QoKS51cmkoKSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIE5l
aXRoZXIgc3ViamVjdCBub3Igb2JqZWN0IGFyZSBkZWZpbmVkCisgICAgICAgIC8vCisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgUUhhc2g8UVVybCwgUUxpc3Q8UVVybD4gPiByZXNUeXBlSGFz
aDsKKyAgICAgICAgICAgIFFTdHJpbmcgcXVlcnk7CisgICAgICAgICAgICBpZiggc3RhdGVtZW50
LmNvbnRleHQoKS5pc1ZhbGlkKCkgKSB7CisgICAgICAgICAgICAgICAgcXVlcnkgPSBRU3RyaW5n
Ojpmcm9tTGF0aW4xKCJzZWxlY3QgZGlzdGluY3QgP3IgP3Qgd2hlcmUgeyBncmFwaCAlMSB7ID9y
IGEgP3QgLiB9IC4gfSIpCisgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKHN0YXRlbWVudC5j
b250ZXh0KCkudG9OMygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIHF1ZXJ5ID0gUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0IGRpc3RpbmN0
ID9yID90IHdoZXJlIHsgZ3JhcGggP2cgeyA/ciBhID90IC4gfSAuIEZJTFRFUig/ZyE9JTEpIC4g
fSIpCisgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKFNvcHJhbm86Ok5vZGU6OnJlc291cmNl
VG9OMyhjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIFNvcHJhbm86OlF1ZXJ5UmVzdWx0SXRlcmF0b3IgaXQgPSBwYXJlbnRNb2RlbCgpLT5leGVj
dXRlUXVlcnkoIHF1ZXJ5LCBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApOwor
ICAgICAgICAgICAgd2hpbGUoIGl0Lm5leHQoKSApIHsKKyAgICAgICAgICAgICAgICByZXNUeXBl
SGFzaFtpdFsiciJdLnVyaSgpXS5hcHBlbmQoIGl0WyJ0Il0udXJpKCkgKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNvbnN0IFNvcHJhbm86OkVycm9yOjpFcnJvckNvZGUgZXJyb3IgPSBw
YXJlbnRNb2RlbCgpLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHN0YXRlbWVudCk7CisgICAgICAgICAg
ICBpZiggZXJyb3IgPT0gU29wcmFubzo6RXJyb3I6OkVycm9yTm9uZSApIHsKKyAgICAgICAgICAg
ICAgICBRSGFzaDxRVXJsLCBRTGlzdDxRVXJsPiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNU
eXBlSGFzaC5jb25zdEVuZCgpOworICAgICAgICAgICAgICAgIGZvciggUUhhc2g8UVVybCwgUUxp
c3Q8UVVybD4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNUeXBlSGFzaC5jb25zdEJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSW5mZXJlbmNl
U3RhdGVtZW50cyggaXQua2V5KCksIGl0LnZhbHVlKCkgKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybiBwYXJlbnRNb2RlbCgpLT5yZW1vdmVBbGxTdGF0
ZW1lbnRzKHN0YXRlbWVudCk7CisgICAgfQorfQorCitRVXJsIENyYXBweUluZmVyZW5jZXIyOjpj
cmFwcHlJbmZlcmVuY2VDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+bV9pbmZlcmVu
Y2VDb250ZXh0OworfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyOjp1cGRhdGVJbmZlcmVuY2VJ
bmRleCgpCit7CisgICAga0RlYnVnKCk7CisKKyAgICBRTXV0ZXhMb2NrZXIgbG9jayggJmQtPm1f
bXV0ZXggKTsKKworICAgIC8vIEJ1aWxkIHN1cGVyY2xhc3NlcyBoYXNoCisgICAgLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLy8gY2xlYXIg
Y2FjaGUKKyAgICBkLT5tX3N1cGVyQ2xhc3Nlcy5jbGVhcigpOworCisgICAgLy8gY2FjaGUgc3Vi
Q2xhc3NPZiByZWxhdGlvbnMgKG9ubHkgdGhlIG9yaWdpbmFsIG9uZXMpCisgICAgUU11bHRpSGFz
aDxRVXJsLCBRVXJsPiByZGZzU3ViQ2xhc3NSZWxhdGlvbnM7CisgICAgU29wcmFubzo6UXVlcnlS
ZXN1bHRJdGVyYXRvciBpdCA9IGV4ZWN1dGVRdWVyeSggUVN0cmluZzo6ZnJvbUxhdGluMSgic2Vs
ZWN0ID94ID95IHdoZXJlIHsgZ3JhcGggP2cgeyA/eCAlMSA/eSAuIH0gLiAiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiRklMVEVSKD9nICE9IDx1cm46Y3JhcHB5aW5mZXJlbmNlOmluZmVycmVkdHJpcGxlcz4p
IC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIkZJTFRFUig/eCE9P3kpIC4gfSIgKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoIFNvcHJhbm86Ok5v
ZGU6OnJlc291cmNlVG9OMyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigp
ICkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApOworICAgIHdoaWxlICggaXQu
bmV4dCgpICkgeworICAgICAgICByZGZzU3ViQ2xhc3NSZWxhdGlvbnMuaW5zZXJ0KCBpdFsieCJd
LnVyaSgpLCBpdFsieSJdLnVyaSgpICk7CisgICAgfQorCisgICAgLy8gY29tcGxldGUgdGhlIG1h
cCBvZiBzdXBlciBjbGFzc2VzCisgICAgUV9GT1JFQUNIKCBjb25zdCBRVXJsJiB0eXBlLCByZGZz
U3ViQ2xhc3NSZWxhdGlvbnMua2V5cygpICkgeworICAgICAgICBRU2V0PFFVcmw+IHZpc2l0ZWRD
bGFzc2VzOworICAgICAgICBkLT5idWlsZFN1cGVyQ2xhc3Nlc0hhc2goIHR5cGUsIHZpc2l0ZWRD
bGFzc2VzLCByZGZzU3ViQ2xhc3NSZWxhdGlvbnMgKTsKKyAgICB9CisKKyAgICAvLyBnZXQgdGhl
IGNsYXNzZXMgdGhhdCBkbyBub3QgaGF2ZSBhbnkgcGFyZW50IGNsYXNzCisgICAgaXQgPSBleGVj
dXRlUXVlcnkoIFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCA/YyB3aGVyZSB7ID9jIGEgJTEg
LiBPUFRJT05BTCB7ID9jICUyID9wIC4gfSAuIEZJTFRFUighQk9VTkQoP3ApKSAuIH0iICkKKyAg
ICAgICAgICAgICAgICAgICAgICAuYXJnKCBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCkgKSApCisgICAgICAgICAgICAgICAgICAg
ICAgLmFyZyggU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3ByYW5vOjpWb2NhYnVsYXJ5
OjpSREZTOjpzdWJDbGFzc09mKCkgKSApLAorICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86
OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsICk7CisgICAgd2hpbGUgKCBpdC5uZXh0KCkgKSB7
CisgICAgICAgIGQtPm1fc3VwZXJDbGFzc2VzLmluc2VydCggaXRbImMiXS51cmkoKSwgUVNldDxR
VXJsPigpICk7CisgICAgfQorCisgICAgLy8gYWRkIHJkZnM6UmVzb3VyY2UgYXMgcGFyZW50IGZv
ciBhbGwgY2xhc3NlcworICAgIFFNdXRhYmxlSGFzaEl0ZXJhdG9yPFFVcmwsIFFTZXQ8UVVybD4g
PiByZGZzUmVzSXQoIGQtPm1fc3VwZXJDbGFzc2VzICk7CisgICAgd2hpbGUoIHJkZnNSZXNJdC5o
YXNOZXh0KCkgKSB7CisgICAgICAgIHJkZnNSZXNJdC5uZXh0KCk7CisgICAgICAgIHJkZnNSZXNJ
dC52YWx1ZSgpLmluc2VydChTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKTsK
KyAgICB9CisKKyAgICAvLyBCdWlsZCB2aXNpYmlsaXR5IHRyZWUKKyAgICAvLyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgZC0+bV90eXBlVmlzaWJp
bGl0eVRyZWUtPnJlYnVpbGRUcmVlKCk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gY291bnQg
Zm9yIGRlYnVnZ2luZworICAgIGludCBjbnQgPSAwOworICAgIGZvciggUUhhc2g8UVVybCwgUVNl
dDxRVXJsPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGQtPm1fc3VwZXJDbGFzc2VzLmNvbnN0QmVn
aW4oKTsKKyAgICAgICAgIGl0ICE9IGQtPm1fc3VwZXJDbGFzc2VzLmNvbnN0RW5kKCk7ICsraXQg
KSB7CisgICAgICAgIGtEZWJ1ZygpIDw8IGl0LmtleSgpIDw8ICItPiIgPDwgaXQudmFsdWUoKTsK
KyAgICAgICAgY250ICs9IGl0LnZhbHVlKCkuY291bnQoKTsKKyAgICB9CisgICAga0RlYnVnKCkg
PDwgIk51bWJlciBvZiBjbGFzc2VzOiAgICAgICAgICAgIiA8PCBkLT5tX3N1cGVyQ2xhc3Nlcy5j
b3VudCgpOworICAgIGtEZWJ1ZygpIDw8ICJOdW1iZXIgb2Ygc3ViY2xhc3MgcmVsYXRpb25zOiIg
PDwgY250OworI2VuZGlmCit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6OnVwZGF0ZUFsbFJl
c291cmNlcygpCit7CisgICAga0RlYnVnKCk7CisgICAgaWYoICFkLT5tX3VwZGF0ZUFsbFJlc291
cmNlc1RocmVhZCApIHsKKyAgICAgICAgZC0+bV91cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQgPSBu
ZXcgVXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkKHRoaXMpOworICAgICAgICBjb25uZWN0KGQtPm1f
dXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkLCBTSUdOQUwoZmluaXNoZWQoKSksIHRoaXMsIFNJR05B
TChhbGxSZXNvdXJjZXNVcGRhdGVkKCkpKTsKKyAgICB9CisgICAgZC0+bV91cGRhdGVBbGxSZXNv
dXJjZXNUaHJlYWQtPnN0YXJ0KCk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6OmFkZElu
ZmVyZW5jZVN0YXRlbWVudHMoIGNvbnN0IFFVcmwmIHJlc291cmNlLCBjb25zdCBRVXJsJiB0eXBl
ICkKK3sKKyAgICByZXR1cm4gYWRkSW5mZXJlbmNlU3RhdGVtZW50cyggcmVzb3VyY2UsIFFTZXQ8
UVVybD4oKSA8PCB0eXBlICk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6OmFkZEluZmVy
ZW5jZVN0YXRlbWVudHMoIGNvbnN0IFFVcmwmIHJlc291cmNlLCBjb25zdCBRU2V0PFFVcmw+JiB0
eXBlcyApCit7CisgICAgLy8gYWRkIG1pc3NpbmcgdHlwZXMKKyAgICBib29sIGhhdmVWaXNpYmxl
VHlwZSA9IGZhbHNlOworICAgIFFTZXQ8UVVybD4gc3VwZXJUeXBlczsKKyAgICBRX0ZPUkVBQ0go
IGNvbnN0IFFVcmwmIHR5cGUsIHR5cGVzICkgeworICAgICAgICBzdXBlclR5cGVzICs9IGQtPnN1
cGVyQ2xhc3Nlcyh0eXBlKTsKKyAgICAgICAgaWYoICFoYXZlVmlzaWJsZVR5cGUgJiYgZC0+bV90
eXBlVmlzaWJpbGl0eVRyZWUtPmlzVmlzaWJsZSh0eXBlKSApCisgICAgICAgICAgICBoYXZlVmlz
aWJsZVR5cGUgPSB0cnVlOworICAgIH0KKyAgICBRU2V0PFFVcmw+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBzdXBlclR5cGVzLmNvbnN0RW5kKCk7CisgICAgZm9yKCBRU2V0PFFVcmw+Ojpjb25zdF9p
dGVyYXRvciB0eXBlSXQgPSBzdXBlclR5cGVzLmNvbnN0QmVnaW4oKTsgdHlwZUl0ICE9IGVuZDsg
Kyt0eXBlSXQgKSB7CisgICAgICAgIHBhcmVudE1vZGVsKCktPmFkZFN0YXRlbWVudChyZXNvdXJj
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnR5
cGVJdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyYXBweUluZmVyZW5j
ZUNvbnRleHQoKSk7CisgICAgfQorCisgICAgLy8gdGhlIHZpc2liaWxpdHkgY2FuIG9ubHkgY2hh
bmdlIGlmIHdlIGFkZCBhIHZpc2libGUgdHlwZQorICAgIC8vIG90aGVyd2lzZSB0aGVyZSBpcyBu
byBuZWVkIHRvIHBlcmZvcm0gdGhlIGFkZGl0aW9uYWwgcXVlcnkKKyAgICBpZiggaGF2ZVZpc2li
bGVUeXBlICkgeworICAgICAgICBzZXRWaXNpYmlsaXR5KCByZXNvdXJjZSwgZC0+aXNWaXNpYmxl
RnJvbVR5cGVzKGQtPnF1ZXJ5UmVzb3VyY2VUeXBlcyhyZXNvdXJjZSkpICk7CisgICAgfQorfQor
Cit2b2lkIENyYXBweUluZmVyZW5jZXIyOjpyZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKGNvbnN0
IFFVcmwgJnJlc291cmNlLCBjb25zdCBRVXJsICZ0eXBlKQoreworICAgIHJlbW92ZUluZmVyZW5j
ZVN0YXRlbWVudHMoIHJlc291cmNlLCBRTGlzdDxRVXJsPigpIDw8IHR5cGUgKTsKK30KKwordm9p
ZCBDcmFwcHlJbmZlcmVuY2VyMjo6cmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3QgUVVy
bCYgcmVzb3VyY2UsIGNvbnN0IFFMaXN0PFNvcHJhbm86Ok5vZGU+JiB0eXBlcyApCit7CisgICAg
UUxpc3Q8UVVybD4gdXJpczsKKyAgICBRX0ZPUkVBQ0goIGNvbnN0IFNvcHJhbm86Ok5vZGUmIG5v
ZGUsIHR5cGVzICkKKyAgICAgICAgdXJpcyA8PCBub2RlLnVyaSgpOworICAgIHJlbW92ZUluZmVy
ZW5jZVN0YXRlbWVudHMoIHJlc291cmNlLCB1cmlzICk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJl
bmNlcjI6OnJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoY29uc3QgUVVybCAmcmVzb3VyY2UsIGNv
bnN0IFFMaXN0PFFVcmw+ICZ0eXBlcykKK3sKKyAgICAvLyB3ZSBjYW5ub3Qgc2ltcGx5IHJlbW92
ZSBhbGwgc3VwZXIgdHlwZXMgc2luY2UgdGhlIHJlc291cmNlIG1pZ2h0IHN0aWxsIGhhdmUgdHlw
ZXMgdGhhdCBhcmUgc29tZXdoZXJlIGluIHRoYXQgaGllcmFyY2h5CisKKyAgICAvLyBkZXRlcm1p
bmUgdGhlIHR5cGVzIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBkYXRhYmFzZSBub3cKKyAgICBjb25z
dCBRU2V0PFFVcmw+IGNvcnJlY3RUeXBlcyA9IGQtPnF1ZXJ5UmVzb3VyY2VUeXBlcyhyZXNvdXJj
ZSk7CisgICAgUVNldDxRVXJsPiBjb3JyZWN0U3VwZXJUeXBlczsKKyAgICBRX0ZPUkVBQ0goIGNv
bnN0IFFVcmwmIHR5cGUsIGNvcnJlY3RUeXBlcyApIHsKKyAgICAgICAgY29ycmVjdFN1cGVyVHlw
ZXMgKz0gZC0+c3VwZXJDbGFzc2VzKHR5cGUpOworICAgIH0KKworICAgIC8vIG5vdyBjb21wYXJl
IHRoYXQgbGlzdCB3aXRoIHRoZSBvbmVzIHRoYXQgd2UgY291bGQgcmVtb3ZlCisgICAgUVNldDxR
VXJsPiB0eXBlc1RvUmVtb3ZlOworICAgIFFfRk9SRUFDSCggY29uc3QgUVVybCYgdHlwZSwgUVNl
dDxRVXJsPjo6ZnJvbUxpc3QodHlwZXMpICkKKyAgICAgICAgdHlwZXNUb1JlbW92ZSArPSBkLT5z
dXBlckNsYXNzZXModHlwZSk7CisgICAgdHlwZXNUb1JlbW92ZSAtPSBjb3JyZWN0U3VwZXJUeXBl
czsKKworICAgIGJvb2wgaGF2ZVZpc2libGVUeXBlID0gZmFsc2U7CisgICAgUV9GT1JFQUNIKCBj
b25zdCBRVXJsJiB0eXBlVG9SZW1vdmUsIHR5cGVzVG9SZW1vdmUgKSB7CisgICAgICAgIGlmKCAh
aGF2ZVZpc2libGVUeXBlICYmIGQtPm1fdHlwZVZpc2liaWxpdHlUcmVlLT5pc1Zpc2libGUodHlw
ZVRvUmVtb3ZlKSApCisgICAgICAgICAgICBoYXZlVmlzaWJsZVR5cGUgPSB0cnVlOworICAgICAg
ICBwYXJlbnRNb2RlbCgpLT5yZW1vdmVTdGF0ZW1lbnQocmVzb3VyY2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVUb1JlbW92ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyYXBweUluZmVyZW5jZUNv
bnRleHQoKSk7CisgICAgfQorCisgICAgLy8gcmVtb3ZlIHRoZSB2aXNpYmlsaXR5IGlmIG5lY2Vz
c2FyeQorICAgIC8vIG9ubHkgYmUgcmVtb3ZpbmcgdmlzaWJsZSB0eXBlcyB3ZSBjYW4gY2hhbmdl
IHRoZSBhY3R1YWwgdmlzaWJpbGl0eQorICAgIGlmKCBoYXZlVmlzaWJsZVR5cGUgKSB7CisgICAg
ICAgIHNldFZpc2liaWxpdHkoIHJlc291cmNlLCBkLT5pc1Zpc2libGVGcm9tVHlwZXMoY29ycmVj
dFR5cGVzKSApOworICAgIH0KK30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMjo6c2V0VmlzaWJp
bGl0eShjb25zdCBRVXJsICZyZXNvdXJjZSwgYm9vbCB2aXNpYmxlKQoreworICAgIC8vIHdlIHVz
ZSBhbiBpbnRlZ2VyIGluc3RlYWQgb2YgYSBib29sZWFuIGZvciBwZXJmb3JtYW5jZSByZWFzb25z
OiB2aXJ0dW9zbyBkb2VzIG5vdCBzdXBwb3J0IGJvb2wgYW5kIFNvcHJhbm8gY29udmVydHMgdGhl
bSB0byBzdHJpbmdzCisgICAgaWYoIHZpc2libGUgKSB7CisgICAgICAgIHBhcmVudE1vZGVsKCkt
PmFkZFN0YXRlbWVudChyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OkxpdGVyYWxWYWx1ZSgxKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSk7
CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBwYXJlbnRNb2RlbCgpLT5yZW1vdmVTdGF0ZW1l
bnQocmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3By
YW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpMaXRlcmFsVmFsdWUoMSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpOwor
ICAgIH0KK30KKworI2luY2x1ZGUgImNyYXBweWluZmVyZW5jZXIyLm1vYyIKSW5kZXg6IGtkZWJh
c2UvcnVudGltZS9uZXBvbXVrL3NlcnZpY2VzL3N0b3JhZ2UvcmVwb3NpdG9yeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtkZWJhc2UvcnVudGltZS9uZXBvbXVrL3NlcnZpY2VzL3N0b3JhZ2UvcmVwb3NpdG9y
eS5oCShyZXZpc2lvbiAxMjE1NzA1KQorKysga2RlYmFzZS9ydW50aW1lL25lcG9tdWsvc2Vydmlj
ZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwyNyBA
QAogfQogCiBjbGFzcyBLSm9iOworY2xhc3MgQ3JhcHB5SW5mZXJlbmNlcjI7CiAKIG5hbWVzcGFj
ZSBOZXBvbXVrIHsKIAogICAgIGNsYXNzIE1vZGVsQ29weUpvYjsKIAorICAgIC8qKgorICAgICAq
IFJlcHJlc2VudHMgdGhlIG1haW4gTmVwb211ayBtb2RlbC4gV2hpbGUgaXQgbG9va3MgYXMgaWYg
dGhlcmUgY291bGQgYmUgbW9yZSB0aGFuCisgICAgICogb25lIGluc3RhbmNlIG9mIFJlcG9zaXRv
cnkgdGhlcmUgaXMgb25seSB0aGUgb25lLgorICAgICAqCisgICAgICogUmVwb3NpdG9yeSBpcyBi
YXNlZCBvbiBOUkxNb2RlbCBvbmx5IGZvciB0aGUgcXVlcnkgcHJlZml4IGV4cGFuc2lvbiBmZWF0
dXJlLiBJdAorICAgICAqIHVzZXMgYSBTb3ByYW5vOjpVdGlsczo6U2lnbmFsQ2FjaGVNb2RlbCB0
byBjb21wYWN0IHRoZSBzZXZlcmFsIHN0YXRlbWVudHNBZGRlZCgpCisgICAgICogYW5kIHN0YXRl
bWVudHNSZW1vdmVkKCkgc2lnbmFscywgYW5kIHVzZXMgQ3JhcHB5SW5mZXJlbmNlcjIgdG8ga2Vl
cCByZGZzOnN1YkNsYXNzT2YKKyAgICAgKiBhbmQgbmFvOnVzZXJWaXNpYmxlIGluZmVyZW5jZSB1
cC10by1kYXRlLgorICAgICAqCisgICAgICogT24gY29uc3RydWN0aW9uIGl0IGNoZWNrcyBmb3Ig
YW5kIG9wdGlvbmFsbHkgcGVyZm9ybXMgY29udmVyc2lvbiBmcm9tIGFuIG9sZCByZXBvc2l0b3J5
CisgICAgICogdHlwZSAocHJlLVZpcnR1b3NvIHRpbWVzKSBhbmQgcnVucyBDcmFwcHlJbmZlcmVu
Y2VyMjo6dXBkYXRlQWxsUmVzb3VyY2VzKCkgd2hpY2ggaXMKKyAgICAgKiBwZXJmb3JtZWQgaW4g
YSBzZXBhcmF0ZSB0aHJlYWQuCisgICAgICoKKyAgICAgKiBcYXV0aG9yIFNlYmFzdGlhbiBUcnVl
ZyA8dHJ1ZWdAa2RlLm9yZz4KKyAgICAgKi8KICAgICBjbGFzcyBSZXBvc2l0b3J5IDogcHVibGlj
IFNvcHJhbm86Ok5STE1vZGVsCiAgICAgewogICAgICAgICBRX09CSkVDVApAQCAtNTksOSArNzUs
MTAgQEAKICAgICAgICAgICogV2lsbCBlbWl0IHRoZSBvcGVuZWQgc2lnbmFsCiAgICAgICAgICAq
LwogICAgICAgICB2b2lkIG9wZW4oKTsKLQogICAgICAgICB2b2lkIGNsb3NlKCk7CiAKKyAgICAg
ICAgdm9pZCB1cGRhdGVJbmZlcmVuY2UoKTsKKwogICAgIFFfU0lHTkFMUzoKICAgICAgICAgdm9p
ZCBvcGVuZWQoIFJlcG9zaXRvcnkqLCBib29sIHN1Y2Nlc3MgKTsKIApAQCAtNzUsNiArOTIsNyBA
QAogICAgICAgICBTdGF0ZSBtX3N0YXRlOwogCiAgICAgICAgIFNvcHJhbm86Ok1vZGVsKiBtX21v
ZGVsOworICAgICAgICBDcmFwcHlJbmZlcmVuY2VyMiogbV9pbmZlcmVuY2VyOwogICAgICAgICBj
b25zdCBTb3ByYW5vOjpCYWNrZW5kKiBtX2JhY2tlbmQ7CiAKICAgICAgICAgLy8gb25seSB1c2Vk
IGR1cmluZyBvcGVuaW5nCkluZGV4OiBrZGViYXNlL3J1bnRpbWUvbmVwb211ay9zZXJ2aWNlcy9z
dG9yYWdlL29udG9sb2d5bWFuYWdlcm1vZGVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrZGViYXNlL3J1
bnRpbWUvbmVwb211ay9zZXJ2aWNlcy9zdG9yYWdlL29udG9sb2d5bWFuYWdlcm1vZGVsLmNwcAko
cmV2aXNpb24gMTIxNTcwNSkKKysrIGtkZWJhc2UvcnVudGltZS9uZXBvbXVrL3NlcnZpY2VzL3N0
b3JhZ2Uvb250b2xvZ3ltYW5hZ2VybW9kZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsy
MSw3IEBACiAKICNpbmNsdWRlIDxRdENvcmUvUVVybD4KICNpbmNsdWRlIDxRdENvcmUvUURhdGVU
aW1lPgorI2luY2x1ZGUgPFF0Q29yZS9RU2NvcGVkUG9pbnRlcj4KIAogI2luY2x1ZGUgPFNvcHJh
bm8vQmFja2VuZD4KICNpbmNsdWRlIDxTb3ByYW5vL1ZlcnNpb24+CkBAIC0yMjUsMjMgKzIyNiw2
IEBACiAgICAgICAgIHRtcE1vZGVsLT5hZGRTdGF0ZW1lbnQoIFNvcHJhbm86OlN0YXRlbWVudCgg
ZGF0YUdyYXBoVXJpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86Omhhc0RlZmF1bHROYW1lc3Bh
Y2UoKSwgTGl0ZXJhbFZhbHVlKCBucy50b1N0cmluZygpICksIG1ldGFEYXRhR3JhcGhVcmkgKSAp
OwogI2VuZGlmCiAgICAgfQotCi0gICAgLyoqCi0gICAgICogU2ltcGxlIGdhcmJhZ2UgY29sbGVj
dGlvbiBjbGFzcy4KLSAgICAgKi8KLSAgICBjbGFzcyBPYmplY3RHYXJiYWdlQ29sbGVjdG9yCi0g
ICAgewotICAgIHB1YmxpYzoKLSAgICAgICAgT2JqZWN0R2FyYmFnZUNvbGxlY3RvciggUU9iamVj
dCogbyApCi0gICAgICAgICAgICA6IG1fb2JqZWN0KCBvICkgewotICAgICAgICB9Ci0gICAgICAg
IH5PYmplY3RHYXJiYWdlQ29sbGVjdG9yKCkgewotICAgICAgICAgICAgZGVsZXRlIG1fb2JqZWN0
OwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBRT2JqZWN0KiBtX29iamVjdDsK
LSAgICB9OwogfQogCiAKQEAgLTMwOCw3ICsyOTIsNyBAQAogICAgIH0KIAogICAgIC8vIHNvIHdl
IGRvIG5vdCBoYXZlIHRvIGNhcmUgYWJvdXQgZGVsZXRpbmcgb3V0IHRtcE1vZGVsIGFueW1vcmUu
Ci0gICAgT2JqZWN0R2FyYmFnZUNvbGxlY3RvciBtb2RlbEdhcmJhZ2VDb2xsZWN0b3IoIHRtcE1v
ZGVsICk7CisgICAgUVNjb3BlZFBvaW50ZXI8U29wcmFubzo6TW9kZWw+IG1vZGVsR2FyYmFnZUNv
bGxlY3RvciggdG1wTW9kZWwgKTsKIAogICAgIC8vIGltcG9ydCB0aGUgZGF0YSBpbnRvIG91ciB0
bXAgbW9kZWwKICAgICB3aGlsZSAoIGRhdGEubmV4dCgpICkgewpJbmRleDoga2RlYmFzZS9ydW50
aW1lL25lcG9tdWsvc2VydmljZXMvc3RvcmFnZS9jcmFwcHlpbmZlcmVuY2VyMi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtkZWJhc2UvcnVudGltZS9uZXBvbXVrL3NlcnZpY2VzL3N0b3JhZ2UvY3JhcHB5aW5m
ZXJlbmNlcjIuaAkocmV2aXNpb24gMCkKKysrIGtkZWJhc2UvcnVudGltZS9uZXBvbXVrL3NlcnZp
Y2VzL3N0b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
NyBAQAorLyoKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBOZXBvbXVrIEtERSBwcm9qZWN0
LgorICAgQ29weXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4K
KworICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFueQorICAgbGF0ZXIgdmVyc2lvbiBh
Y2NlcHRlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiAob3IgaXRzCisgICBzdWNjZXNz
b3IgYXBwcm92ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4pLCB3aGljaCBzaGFsbAor
ICAgYWN0IGFzIGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9uIDYgb2YgdmVyc2lvbiAzIG9mIHRo
ZSBsaWNlbnNlLgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4gIElmIG5vdCwgc2VlIDxodHRwOi8v
d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpZm5kZWYgQ1JBUFBZSU5GRVJFTkNFUjJf
SAorI2RlZmluZSBDUkFQUFlJTkZFUkVOQ0VSMl9ICisKKyNpbmNsdWRlIDxTb3ByYW5vL0ZpbHRl
ck1vZGVsPgorCisvKioKKyAqIFRoZSBzZWNvbmQgdmVyc2lvbiBvZiB0aGUgY3JhcHB5IGluZmVy
ZW5jZXIgaXQgZXZlbiBjcmFwcGllciB0aGFuIHRoZSBmaXJzdC4KKyAqIEl0IG9ubHkgZG9lcyBy
ZGY6dHlwZSBpbmZlcmVuY2luZywgbm90aGluZyBlbHNlLiBJbiB0aGUgbG9uZyBydW4gdGhpcyBp
cyBub3QKKyAqIGVub3VnaCBidXQgZm9yIG5vdyBpdCBpcyB0aGUgb25seSBraW5kIG9mIGluZmVy
ZW5jZSB3ZSB1c2UgaW4gTmVwb211ay4KKyAqIFRodXMsIGl0IGlzIGVub3VnaCBhbmQgbWFrZXMg
Zm9yIG11Y2ggZmFzdGVyIHF1ZXJpZXMgdGhhbiB0aGUgZmlyc3QKKyAqIGNyYXBweSBpbmZlcmVu
Y2VyLgorICoKKyAqIFxhdXRob3IgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorICov
CitjbGFzcyBDcmFwcHlJbmZlcmVuY2VyMiA6IHB1YmxpYyBTb3ByYW5vOjpGaWx0ZXJNb2RlbAor
eworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgICBDcmFwcHlJbmZlcmVuY2VyMihTb3ByYW5v
OjpNb2RlbCogcGFyZW50ID0gMCk7CisgICAgfkNyYXBweUluZmVyZW5jZXIyKCk7CisKKyAgICAv
KioKKyAgICAgKiBccmVpbXBsIHRvIHVwZGF0ZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzCisgICAgICov
CisgICAgdm9pZCBzZXRQYXJlbnRNb2RlbCggU29wcmFubzo6TW9kZWwqIG1vZGVsICk7CisKKyAg
ICBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIGFkZFN0YXRlbWVudCggY29uc3QgU29wcmFubzo6
U3RhdGVtZW50JiBzdGF0ZW1lbnQgKTsKKyAgICBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIHJl
bW92ZVN0YXRlbWVudCggY29uc3QgU29wcmFubzo6U3RhdGVtZW50JiBzdGF0ZW1lbnQgKTsKKyAg
ICBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIHJlbW92ZUFsbFN0YXRlbWVudHMoIGNvbnN0IFNv
cHJhbm86OlN0YXRlbWVudCYgc3RhdGVtZW50ICk7CisKKyAgICB1c2luZyBTb3ByYW5vOjpGaWx0
ZXJNb2RlbDo6YWRkU3RhdGVtZW50OworICAgIHVzaW5nIFNvcHJhbm86OkZpbHRlck1vZGVsOjpy
ZW1vdmVTdGF0ZW1lbnQ7CisgICAgdXNpbmcgU29wcmFubzo6RmlsdGVyTW9kZWw6OnJlbW92ZUFs
bFN0YXRlbWVudHM7CisKKyAgICAvKioKKyAgICAgKiBBbGwgaW5mZXJyZWQgdHJpcGxlcyBhcmUg
c3RvcmVkIGluIHRoZSBvbmUgY3JhcHB5IGluZmVyZW5jZSBncmFwaC4KKyAgICAgKiBUaHVzLCBy
ZW1vdmluZyBpbmZlcmVuY2UgaXMgYXMgc2ltcGxlIGFzIHJlbW92aW5nIHRoaXMgb25lIGdyYXBo
LgorICAgICAqLworICAgIFFVcmwgY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpIGNvbnN0OworCitR
X1NJR05BTFM6CisgICAgLyoqCisgICAgICogRW1pdHRlZCBvbmNlIGEgY2FsbCB0byB1cGRhdGVB
bGxSZXNvdXJjZXMoKSBoYXMgZmluaXNoZWQuCisgICAgICovCisgICAgdm9pZCBhbGxSZXNvdXJj
ZXNVcGRhdGVkKCk7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIC8qKgorICAgICAqIFVwZGF0ZSB0
aGUgaW50ZXJuYWwgbWFwIG9mIHN1cGVyIHR5cGVzIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUg
d2hpY2gKKyAgICAgKiB0eXBlIHN0YXRlbWVudHMgbmVlZCB0byBiZSBhZGRlZCBhbmQgcmVtb3Zl
ZC4gSXQgbWFrZXMgc2Vuc2UgdG8gY2FsbCB0aGlzCisgICAgICogd2hlbiB0aGUgb250b2xvZ2ll
cyBpbiB0aGUgbW9kZWwgY2hhbmdlLgorICAgICAqLworICAgIHZvaWQgdXBkYXRlSW5mZXJlbmNl
SW5kZXgoKTsKKworICAgIC8qKgorICAgICAqIFVwZGF0ZSBhbGwgdHlwZXMgb2YgYWxsIHJlc291
cmNlcyBpbiB0aGUgbW9kZWwuIFRoaXMgbWV0aG9kIHdpbGwgYWRkIHN1cGVydHlwZQorICAgICAq
IHN0YXRlbWVudHMgYnV0IE5PVCByZW1vdmUgYW55IHN1cGVyZmx1b3VzIHN0YXRlbWVudHMuIFRv
IGFjaGlldmUgdGhlIGxhdHRlciBjYWxsCisgICAgICogcmVtb3ZlQ29udGV4dChjcmFwcHlJbmZl
cmVuY2VDb250ZXh0KCkpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLgorICAgICAqLworICAg
IHZvaWQgdXBkYXRlQWxsUmVzb3VyY2VzKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRJbmZl
cmVuY2VTdGF0ZW1lbnRzKCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUVVybCYgdHlwZSAp
OworICAgIHZvaWQgYWRkSW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3QgUVVybCYgcmVzb3VyY2Us
IGNvbnN0IFFTZXQ8UVVybD4mIHR5cGVzICk7CisgICAgdm9pZCByZW1vdmVJbmZlcmVuY2VTdGF0
ZW1lbnRzKCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUVVybCYgdHlwZSApOworICAgIHZv
aWQgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3QgUVVybCYgcmVzb3VyY2UsIGNvbnN0
IFFMaXN0PFFVcmw+JiB0eXBlcyApOworICAgIHZvaWQgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50
cyggY29uc3QgUVVybCYgcmVzb3VyY2UsIGNvbnN0IFFMaXN0PFNvcHJhbm86Ok5vZGU+JiB0eXBl
cyApOworICAgIHZvaWQgc2V0VmlzaWJpbGl0eShjb25zdCBRVXJsJiByZXNvdXJjZSwgYm9vbCB2
aXNpYmxlKTsKKworICAgIGNsYXNzIFVwZGF0ZUFsbFJlc291cmNlc1RocmVhZDsKKyAgICBjbGFz
cyBQcml2YXRlOworICAgIFByaXZhdGUqIGNvbnN0IGQ7Cit9OworCisjZW5kaWYgLy8gQ1JBUFBZ
SU5GRVJFTkNFUjJfSApJbmRleDoga2RlYmFzZS9ydW50aW1lL25lcG9tdWsvc2VydmljZXMvc3Rv
cmFnZS9uZXBvbXVrY29yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2RlYmFzZS9ydW50aW1lL25lcG9t
dWsvc2VydmljZXMvc3RvcmFnZS9uZXBvbXVrY29yZS5jcHAJKHJldmlzaW9uIDEyMTU3MDUpCisr
KyBrZGViYXNlL3J1bnRpbWUvbmVwb211ay9zZXJ2aWNlcy9zdG9yYWdlL25lcG9tdWtjb3JlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsOSBAQAogICAgIG1fcmVwb3NpdG9yeS0+c2V0
RW5hYmxlUXVlcnlQcmVmaXhFeHBhbnNpb24oZmFsc2UpOwogICAgIG1fcmVwb3NpdG9yeS0+c2V0
RW5hYmxlUXVlcnlQcmVmaXhFeHBhbnNpb24odHJ1ZSk7CiAKKyAgICAvLyB0aGUgZmlyc3QgdGlt
ZSB0aGlzIGlzIGEgdmVyeSBsb25nIHByb2NlZHVyZS4gVGh1cywgd2UgZG8gaXQgd2hpbGUgTmVw
b211ayBpcyBhY3RpdmUgYWx0aG91Z2ggdGhlbiBzb21lIHF1ZXJpZXMgbWlnaHQgcmV0dXJuIGlu
dmFsaWQgcmVzdWx0cworICAgIG1fcmVwb3NpdG9yeS0+dXBkYXRlSW5mZXJlbmNlKCk7CisKICAg
ICBpZiAoICFtX2luaXRpYWxpemVkICkgewogICAgICAgICAvLyBhbmQgZmluYWxseSB3ZSBhcmUg
ZG9uZTogdGhlIHJlcG9zaXRvcnkgaXMgb25saW5lIGFuZCB0aGUgb250b2xvZ2llcyBhcmUgbG9h
ZGVkLgogICAgICAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKSW5kZXg6IGtkZWJhc2UvcnVudGlt
ZS9uZXBvbXVrL3NlcnZpY2VzL3N0b3JhZ2UvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2RlYmFzZS9ydW50aW1lL25lcG9tdWsvc2VydmljZXMvc3RvcmFnZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMTIxNTcwNSkKKysrIGtkZWJhc2UvcnVudGltZS9uZXBvbXVrL3NlcnZpY2VzL3N0
b3JhZ2UvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE3LDYgKzE3LDggQEAKICAg
b250b2xvZ3ltYW5hZ2VybW9kZWwuY3BwCiAgIGdyYXBocmV0cmlldmVyLmNwcAogICBjcmFwcHlp
bmZlcmVuY2VyLmNwcAorICBjcmFwcHlpbmZlcmVuY2VyMi5jcHAKKyAgdHlwZXZpc2liaWxpdHl0
cmVlLmNwcAogICApCiAKIHNvcHJhbm9fYWRkX29udG9sb2d5KHN0b3JhZ2VfU1JDUwpAQCAtNTQs
MyArNTYsNSBAQAogICBUQVJHRVRTIG5lcG9tdWtzdG9yYWdlCiAgIERFU1RJTkFUSU9OICR7UExV
R0lOX0lOU1RBTExfRElSfSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWRk
X3N1YmRpcmVjdG9yeSh0ZXN0KQpJbmRleDoga2RlYmFzZS9ydW50aW1lL25lcG9tdWsvc2Vydmlj
ZXMvZmlsZXdhdGNoL21ldGFkYXRhbW92ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtkZWJhc2UvcnVu
dGltZS9uZXBvbXVrL3NlcnZpY2VzL2ZpbGV3YXRjaC9tZXRhZGF0YW1vdmVyLmNwcAkocmV2aXNp
b24gMTIxNTcwNSkKKysrIGtkZWJhc2UvcnVudGltZS9uZXBvbXVrL3NlcnZpY2VzL2ZpbGV3YXRj
aC9tZXRhZGF0YW1vdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsOCBAQAogdm9p
ZCBOZXBvbXVrOjpNZXRhZGF0YU1vdmVyOjptb3ZlRmlsZU1ldGFkYXRhKCBjb25zdCBLVXJsJiBm
cm9tLCBjb25zdCBLVXJsJiB0byApCiB7CiAgICAga0RlYnVnKCkgPDwgZnJvbSA8PCB0bzsKKyAg
ICBRX0FTU0VSVCggIWZyb20ucGF0aCgpLmlzRW1wdHkoKSAmJiBmcm9tLnBhdGgoKSAhPSAiLyIg
KTsKKyAgICBRX0FTU0VSVCggIXRvLnBhdGgoKS5pc0VtcHR5KCkgJiYgdG8ucGF0aCgpICE9ICIv
IiApOwogICAgIG1fcXVldWVNdXRleC5sb2NrKCk7CiAgICAgVXBkYXRlUmVxdWVzdCByZXEoIGZy
b20sIHRvICk7CiAgICAgaWYgKCAhbV91cGRhdGVRdWV1ZS5jb250YWlucyggcmVxICkgJiYKQEAg
LTg5LDYgKzkxLDcgQEAKIAogdm9pZCBOZXBvbXVrOjpNZXRhZGF0YU1vdmVyOjpyZW1vdmVGaWxl
TWV0YWRhdGEoIGNvbnN0IEtVcmwmIGZpbGUgKQogeworICAgIFFfQVNTRVJUKCAhZmlsZS5wYXRo
KCkuaXNFbXB0eSgpICYmIGZpbGUucGF0aCgpICE9ICIvIiApOwogICAgIHJlbW92ZUZpbGVNZXRh
ZGF0YSggS1VybDo6TGlzdCgpIDw8IGZpbGUgKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56252</attachid>
            <date>2011-01-20 20:11:31 +0000</date>
            <delta_ts>2011-01-20 20:14:55 +0000</delta_ts>
            <desc>Patch which introduces the new query terms (kdelibs/nepomuk)</desc>
            <filename>kdelibs-nepomuk.diff</filename>
            <type>text/plain</type>
            <size>3849</size>
            <attacher name="Sebastian Trueg">trueg</attacher>
            
              <data encoding="base64">SW5kZXg6IHF1ZXJ5L3F1ZXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdWVyeS9xdWVyeS5jcHAJKHJl
dmlzaW9uIDEyMTU5NzIpCisrKyBxdWVyeS9xdWVyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
Miw4ICs0NzIsMzAgQEAKICAgICAvLyBvcHRpbWl6ZSB3aGF0ZXZlciB3ZSBjYW4KICAgICB0ZXJt
ID0gcHJlcGFyZUZvclNwYXJxbCggdGVybSApLm9wdGltaXplZCgpOwogCisKICAgICAvLyBhY3R1
YWxseSBidWlsZCB0aGUgU1BBUlFMIHF1ZXJ5IHBhdHRlcm5zCiAgICAgUXVlcnlCdWlsZGVyRGF0
YSBxYmQoIGQuY29uc3REYXRhKCksIHNwYXJxbEZsYWdzICk7CisKKworICAgIC8vIFdlIHJlc3Ry
aWN0IHJlc3VsdHMgdG8gdXNlciB2aXNpYmxlIHR5cGVzIG9ubHkuCisgICAgLy8KKyAgICAvLyBI
ZXJlIHdlIHVzZSBhbiBvcHRpbWl6YXRpb25zOgorICAgIC8vIFRoZSBzdG9yYWdlIHNlcnZpY2Ug
Y3JlYXRlcyAibmFvOnVzZXJWaXNpYmxlIDEiIGVudHJpZXMgZm9yIGFsbCB2aXNpYmxlIHJlc291
cmNlcy4gVGhpcyBjb250YWlucyB0d28gb3B0aW1pemF0aW9uczoKKyAgICAvLyAtIFdlIHVzZSBh
biBpbnRlZ2VyIGluc3RlYWQgb2YgYSBib29sZWFuIGJlY2F1c2UgVmlydHVvc28gZG9lcyBub3Qg
c3VwcG9ydCBib29sZWFucyBhbmQsIHRodXMsIFNvcHJhbm8gY29udmVydHMKKyAgICAvLyAgIGJv
b2xlYW5zIGludG8gYSBmYWtlIHR5cGUgd2hpY2ggaXMgc3RvcmVkIGFzIGEgc3RyaW5nLiBUaGlz
IG1ha2VzIGNvbXBhcmlzaW9uIG11Y2ggc2xvd2VyLgorICAgIC8vIC0gSW5zdGVhZCBvZiB1c2lu
ZyBjcmFwcHkgaW5mZXJlbmNlIHZpYSAiP3IgYSA/dCAuID90IG5hbzp1c2VyVmlzaWJsZSB0cnVl
IiB3ZSBjYW4gZGlyZWN0bHkgY2hlY2sgdGhlIHJlc291cmNlcy4KKyAgICAvLyAtIEluc3RlYWQg
b2YgcmVzdHJpY3RpbmcgdGhlIHZpc2liaWxpdHkgdG8gMSB3ZSB0cmljayB0aGUgVmlydHVvc28g
cXVlcnkgb3B0aW1pemVyIHNvIGl0IHdvbid0IHRyeSB0byB1c2UgdGhlIHZpc2liaWxpdHkKKyAg
ICAvLyAgIGFzIHByaW9yaXR5LiBXZSBkbyB0aGlzIHdpdGggYSBmaWx0ZXIgdGhhdCBkb2VzIG5v
dCB0ZXN0IGZvciBlcXVhbGl0eS4gVXNpbmcgIj9yIG5hbzp1c2VyVmlzaWJsZSAxIiBoYXMgYSBk
cmFzdGljCisgICAgLy8gICBwZXJmb3JtYW5jZSBpbXBhY3Qgd2hpY2ggdGhlIGZpbHRlciBoYXMg
bm90LgorICAgIC8vCisgICAgUVN0cmluZyB1c2VyVmlzaWJpbGl0eVJlc3RyaWN0aW9uOworICAg
IGlmKCAhKHF1ZXJ5RmxhZ3MoKSZOb1Jlc3VsdFJlc3RyaWN0aW9ucykgKSB7CisgICAgICAgIHVz
ZXJWaXNpYmlsaXR5UmVzdHJpY3Rpb24gPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCI/ciAlMSAlMiAu
IEZJTFRFUiglMj4wKSAuICIpCisgICAgICAgICAgICAgICAgLmFyZyhTb3ByYW5vOjpOb2RlOjpy
ZXNvdXJjZVRvTjMoU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpKSwKKyAg
ICAgICAgICAgICAgICAgICAgIHFiZC51bmlxdWVWYXJOYW1lKCkpOworICAgIH0KKworCiAgICAg
UVN0cmluZyB0ZXJtR3JhcGhQYXR0ZXJuOwogICAgIGlmKCB0ZXJtLmlzVmFsaWQoKSApIHsKICAg
ICAgICAgdGVybUdyYXBoUGF0dGVybiA9IHRlcm0uZF9wdHItPnRvU3BhcnFsR3JhcGhQYXR0ZXJu
KCBRTGF0aW4xU3RyaW5nKCAiP3IiICksICZxYmQgKTsKQEAgLTQ5MywxOCArNTE1LDYgQEAKICAg
ICAgICAgICAgIHNlbGVjdFZhcmlhYmxlcyA8PCBzY29yaW5nRXhwcmVzc2lvbjsKICAgICB9CiAK
LSAgICAvLyByZXN0cmljdCB0byByZXNvdXJjZXMgdG8gdXNlciB2aXNpYmxlIHR5cGVzIG9ubHku
IFRoZXJlIGlzIG5vIG5lZWQgdG8gZG8gdGhhdCBmb3IgZmlsZSBxdWVyaWVzCi0gICAgLy8gYXMg
dGhvc2UgYWxyZWFkeSByZXN0cmljdCB0aGUgdHlwZS4KLSAgICAvLyBTaW5jZSB3ZSBkbyB0aGUg
cmVzdHJpY3Rpb24gb24gdGhlIHR5cGUgaXQgZ2V0cyB1c2VsZXNzIGFzIHNvb24gYXMgdGhlIHF1
ZXJ5IGNvbnRhaW5zIGEgbm9uLW9wdGlvbmFsCi0gICAgLy8gdHlwZSB0ZXJtIGl0c2VsZgotICAg
IFFTdHJpbmcgdXNlclZpc2liaWxpdHlSZXN0cmljdGlvbjsKLSAgICBpZiggIWQtPm1faXNGaWxl
UXVlcnkgJiYgIWNvbnRhaW5zUmVzb3VyY2VUeXBlVGVybSh0ZXJtKSAmJiAhKHF1ZXJ5RmxhZ3Mo
KSZOb1Jlc3VsdFJlc3RyaWN0aW9ucykgKSB7Ci0gICAgICAgIHVzZXJWaXNpYmlsaXR5UmVzdHJp
Y3Rpb24gPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCAiP3IgYSAlMSAuICUxICUyICUzIC4gIiApCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKCBxYmQudW5pcXVlVmFyTmFt
ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6
Tm9kZTo6cmVzb3VyY2VUb04zKFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUo
KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpO
b2RlOjpsaXRlcmFsVG9OMyh0cnVlKSApOwotICAgIH0KLQogICAgIC8vIGJ1aWxkIHRoZSBjb3Jl
IG9mIHRoZSBxdWVyeSAtIHRoZSBwYXJ0IHRoYXQgbmV2ZXIgY2hhbmdlcwogICAgIFFTdHJpbmcg
cXVlcnlCYXNlID0gUVN0cmluZzo6ZnJvbUxhdGluMSggIndoZXJlIHsgJTEgJTIgJTMgfSIgKQog
ICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyggdGVybUdyYXBoUGF0dGVybiwKSW5kZXg6IGNv
cmUvcmVzb3VyY2VkYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb3JlL3Jlc291cmNlZGF0YS5jcHAJ
KHJldmlzaW9uIDEyMTM5MzQpCisrKyBjb3JlL3Jlc291cmNlZGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3MSw4ICszNzEsMTIgQEAKICAgICAgICAgbV9jYWNoZS5jbGVhcigpOwogCiAgICAg
ICAgIGlmICggbV91cmkuaXNWYWxpZCgpICkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIFdlIGV4Y2x1ZGUgcHJvcGVydGllcyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBpbmZlcmVuY2Ug
Z3JhcGgKKyAgICAgICAgICAgIC8vIEl0IHdvdWxkIG9ubHkgcG9sbHV0ZSB0aGUgdXNlciBpbnRl
cmZhY2UKKyAgICAgICAgICAgIC8vCiAgICAgICAgICAgICBTb3ByYW5vOjpRdWVyeVJlc3VsdEl0
ZXJhdG9yIGl0ID0gTUFJTk1PREVMLT5leGVjdXRlUXVlcnkoUVN0cmluZygic2VsZWN0IGRpc3Rp
bmN0ID9wID9vIHdoZXJlIHsgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUxID9wID9vIC4gIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImdyYXBoID9nIHsgJTEgP3AgP28gLiB9IC4gRklMVEVSKD9n
IT08dXJuOmNyYXBweWluZmVyZW5jZTI6aW5mZXJyZWR0cmlwbGVzPikgLiAiCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAifSIpLmFyZyhTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMobV91cmkpKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCk7CiAgICAg
ICAgICAgICB3aGlsZSAoIGl0Lm5leHQoKSApIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56253</attachid>
            <date>2011-01-20 20:12:36 +0000</date>
            <delta_ts>2011-01-20 20:13:43 +0000</delta_ts>
            <desc>Patch that creates the data necessary for the new query terms in nepomukquery</desc>
            <filename>kdebase-runtime-nepomuk-storage.diff</filename>
            <type>text/plain</type>
            <size>12153</size>
            <attacher name="Sebastian Trueg">trueg</attacher>
            
              <data encoding="base64">SW5kZXg6IG9udG9sb2dpZXMva3V2by50cmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG9udG9sb2dpZXMva3V2
by50cmlnCShyZXZpc2lvbiAxMjEzOTQwKQorKysgb250b2xvZ2llcy9rdXZvLnRyaWcJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDYgKzQ3LDkgQEAKICAgICByZGZzOlJlc291cmNlCiAgICAgICAgIG5h
bzp1c2VyVmlzaWJsZSB0cnVlIC4KIAorICAgIG5hbzp1c2VyVmlzaWJsZQorICAgICAgICBuYW86
dXNlclZpc2libGUgZmFsc2UgLgorCiAgICAgbnVhbzpFdmVudAogICAgICAgICBuYW86dXNlclZp
c2libGUgZmFsc2UgLgogCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL29udG9sb2d5bG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL29udG9sb2d5bG9hZGVyLmNwcAkocmV2
aXNpb24gMTIxMzk0MCkKKysrIHNlcnZpY2VzL3N0b3JhZ2Uvb250b2xvZ3lsb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCwxNCArMjQsMTAgQEAKIAogI2luY2x1ZGUgPFNvcHJhbm8vR2xv
YmFsPgogI2luY2x1ZGUgPFNvcHJhbm8vTm9kZT4KLSNpbmNsdWRlIDxTb3ByYW5vL0xpdGVyYWxW
YWx1ZT4KICNpbmNsdWRlIDxTb3ByYW5vL01vZGVsPgogI2luY2x1ZGUgPFNvcHJhbm8vUGx1Z2lu
TWFuYWdlcj4KICNpbmNsdWRlIDxTb3ByYW5vL1N0YXRlbWVudEl0ZXJhdG9yPgotI2luY2x1ZGUg
PFNvcHJhbm8vUXVlcnlSZXN1bHRJdGVyYXRvcj4KICNpbmNsdWRlIDxTb3ByYW5vL1BhcnNlcj4K
LSNpbmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvTkFPPgotI2luY2x1ZGUgPFNvcHJhbm8vVm9j
YWJ1bGFyeS9SREZTPgogCiAjaW5jbHVkZSA8S0NvbmZpZz4KICNpbmNsdWRlIDxLQ29uZmlnR3Jv
dXA+CkBAIC0xODgsNyArMTg0LDYgQEAKICAgICBlbHNlIHsKICAgICAgICAgZC0+Zm9yY2VPbnRv
bG9neVVwZGF0ZSA9IGZhbHNlOwogICAgICAgICBkLT51cGRhdGVUaW1lci5zdG9wKCk7Ci0gICAg
ICAgIHVwZGF0ZVVzZXJWaXNpYmlsaXR5KCk7CiAgICAgICAgIGVtaXQgb250b2xvZ3lMb2FkaW5n
RmluaXNoZWQodGhpcyk7CiAgICAgfQogfQpAQCAtMjI1LDExNSArMjIwLDQgQEAKICAgICB9CiB9
CiAKLQotbmFtZXNwYWNlIHsKLSAgICBzdHJ1Y3QgVXNlclZpc2libGVOb2RlIHsKLSAgICAgICAg
VXNlclZpc2libGVOb2RlKCBjb25zdCBRVXJsJiByICkKLSAgICAgICAgICAgIDogdXJpKCByICks
Ci0gICAgICAgICAgICAgIHVzZXJWaXNpYmxlKCAwICkgewotICAgICAgICB9Ci0KLSAgICAgICAg
UVVybCB1cmk7Ci0gICAgICAgIGludCB1c2VyVmlzaWJsZTsKLSAgICAgICAgUUhhc2g8UVVybCwg
VXNlclZpc2libGVOb2RlKj4gcGFyZW50czsKLQotICAgICAgICAvKioKLSAgICAgICAgICogU2V0
IHRoZSB2YWx1ZSBvZiBuYW86dXNlclZpc2libGUgYW5kIGFkZCB0aGUgY29ycmVzcG9uZGluZwot
ICAgICAgICAgKiBzdGF0ZW1lbnQgdG8gdGhlIGxpc3Qgb2Ygc3RhdGVtZW50cyBpbiBjYXNlIHRo
ZSB2YWx1ZSB3YXMKLSAgICAgICAgICogbm90IGRlZmluZWQgeWV0LgotICAgICAgICAgKi8KLSAg
ICAgICAgaW50IHVwZGF0ZVVzZXJWaXNpYmlsaXR5KCBRTGlzdDxTb3ByYW5vOjpTdGF0ZW1lbnQ+
JiBzdGF0ZW1lbnRzICkgewotICAgICAgICAgICAgaWYgKCB1c2VyVmlzaWJsZSAhPSAwICkgewot
ICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJVc2VyIHZpc2liaWxpdHkgYWxyZWFkeSBzZXQi
IDw8IHVyaS50b1N0cmluZygpIDw8ICggdXNlclZpc2libGUgPT0gMSApOwotICAgICAgICAgICAg
ICAgIHJldHVybiB1c2VyVmlzaWJsZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIGlmICggIXBhcmVudHMuaXNFbXB0eSgpICkgewotICAgICAgICAg
ICAgICAgICAgICBmb3IgKCBRSGFzaDxRVXJsLCBVc2VyVmlzaWJsZU5vZGUqPjo6aXRlcmF0b3Ig
aXQgPSBwYXJlbnRzLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ICE9IHBh
cmVudHMuZW5kKCk7ICsraXQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrRGVidWcoKSA8
PCB1cmkudG9TdHJpbmcoKSA8PCAiQ2hlY2tpbmcgcGFyZW50IGNsYXNzIiA8PCBpdC52YWx1ZSgp
LT51cmkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXQudmFsdWUo
KS0+dXBkYXRlVXNlclZpc2liaWxpdHkoIHN0YXRlbWVudHMgKSA9PSAtMSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1c2VyVmlzaWJsZSA9IC0xOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggdXNlclZp
c2libGUgPT0gMCApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byB2aXNpYmxl
Ci0gICAgICAgICAgICAgICAgICAgIHVzZXJWaXNpYmxlID0gMTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgc3RhdGVtZW50cyA8PCBTb3ByYW5vOjpTdGF0ZW1lbnQoIHVyaSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpMaXRlcmFsVmFsdWUoIHVzZXJW
aXNpYmxlID09IDEgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTmVwb211azo6Vm9jYWJ1bGFyeTo6S1VWTzo6bnJsT250b2xvZ3lHcmFwaCgpICk7
Ci0gICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgIlNldHRpbmcgbmFvOnVzZXJWaXNpYmxlIG9m
IiA8PCB1cmkudG9TdHJpbmcoKSA8PCAoIHVzZXJWaXNpYmxlID09IDEgKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdXNlclZpc2libGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
OwotfQotCi12b2lkIE5lcG9tdWs6Ok9udG9sb2d5TG9hZGVyOjp1cGRhdGVVc2VyVmlzaWJpbGl0
eSgpCi17Ci0gICAgLy8KLSAgICAvLyBidWlsZCBhIHRyZWUgb2YgYWxsIGNsYXNzZXMgYW5kIHBy
b3BlcnRpZXMKLSAgICAvLwotICAgIFFTdHJpbmcgcXVlcnkKLSAgICAgICAgPSBRU3RyaW5nOjpm
cm9tTGF0aW4xKCAic2VsZWN0IGRpc3RpbmN0ID9yID9wID92IHdoZXJlIHsgIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ7ID9yIGEgcmRmczpDbGFzcyAuICIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiT1BUSU9OQUwgeyA/ciByZGZzOnN1YkNsYXNzT2YgP3AgLiA/
cCBhIHJkZnM6Q2xhc3MgLiB9IC4gfSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IlVOSU9OICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyA/ciBhIHJkZjpQcm9w
ZXJ0eSAuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT1BUSU9OQUwgeyA/ciBy
ZGZzOnN1YlByb3BlcnR5T2YgP3AgLiA/cCBhIHJkZjpQcm9wZXJ0eSAuIH0gLiB9ICIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiT1BUSU9OQUwgeyA/ciAlMSA/diAuIH0gLiAiCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZJTFRFUig/ciE9cmRmczpSZXNvdXJjZSkg
LiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn0iICkKLSAgICAgICAgLmFyZygg
U29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVz
ZXJWaXNpYmxlKCkgKSApOwotICAgIGtEZWJ1ZygpIDw8IHF1ZXJ5OwotICAgIFFIYXNoPFFVcmws
IFVzZXJWaXNpYmxlTm9kZSo+IGFsbDsKLSAgICB7Ci0gICAgICAgIFNvcHJhbm86OlF1ZXJ5UmVz
dWx0SXRlcmF0b3IgaXQKLSAgICAgICAgICAgID0gZC0+bW9kZWwtPmV4ZWN1dGVRdWVyeSggcXVl
cnksIFNvcHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsICk7Ci0gICAgICAgIHdoaWxl
KCBpdC5uZXh0KCkgKSB7Ci0gICAgICAgICAgICBjb25zdCBRVXJsIHIgPSBpdFsiciJdLnVyaSgp
OwotICAgICAgICAgICAgY29uc3QgU29wcmFubzo6Tm9kZSBwID0gaXRbInAiXTsKLSAgICAgICAg
ICAgIGNvbnN0IFNvcHJhbm86Ok5vZGUgdiA9IGl0WyJ2Il07Ci0KLSAgICAgICAgICAgIGlmICgg
IWFsbC5jb250YWlucyggciApICkgewotICAgICAgICAgICAgICAgIFVzZXJWaXNpYmxlTm9kZSog
cl91dm4gPSBuZXcgVXNlclZpc2libGVOb2RlKCByICk7Ci0gICAgICAgICAgICAgICAgYWxsLmlu
c2VydCggciwgcl91dm4gKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKCB2LmlzTGl0
ZXJhbCgpICkKLSAgICAgICAgICAgICAgICBhbGxbcl0tPnVzZXJWaXNpYmxlID0gKHYubGl0ZXJh
bCgpLnRvQm9vbCgpID8gMSA6IC0xKTsKLSAgICAgICAgICAgIGlmICggcC5pc1Jlc291cmNlKCkg
JiYKLSAgICAgICAgICAgICAgICAgcC51cmkoKSAhPSByICYmCi0gICAgICAgICAgICAgICAgIHAu
dXJpKCkgIT0gU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSApIHsKLSAgICAg
ICAgICAgICAgICBpZiAoICFhbGwuY29udGFpbnMoIHAudXJpKCkgKSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgVXNlclZpc2libGVOb2RlKiBwX3V2biA9IG5ldyBVc2VyVmlzaWJsZU5vZGUoIHAu
dXJpKCkgKTsKLSAgICAgICAgICAgICAgICAgICAgYWxsLmluc2VydCggcC51cmkoKSwgcF91dm4g
KTsKLSAgICAgICAgICAgICAgICAgICAgYWxsW3JdLT5wYXJlbnRzLmluc2VydCggcC51cmkoKSwg
cF91dm4gKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGFsbFtyXS0+cGFyZW50cy5pbnNlcnQoIHAudXJpKCksIGFsbFtwLnVy
aSgpXSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vCi0gICAgLy8gY3JlYXRlIGEgbGlzdCBvZiBhbGwgc3RhdGVtZW50cyB3ZSBu
ZWVkIHRvIGFkZAotICAgIC8vCi0gICAgUUxpc3Q8U29wcmFubzo6U3RhdGVtZW50PiBzdGF0ZW1l
bnRzOwotICAgIGZvciAoIFFIYXNoPFFVcmwsIFVzZXJWaXNpYmxlTm9kZSo+OjppdGVyYXRvciBp
dCA9IGFsbC5iZWdpbigpOwotICAgICAgICAgIGl0ICE9IGFsbC5lbmQoKTsgKytpdCApIHsKLSAg
ICAgICAgaXQudmFsdWUoKS0+dXBkYXRlVXNlclZpc2liaWxpdHkoIHN0YXRlbWVudHMgKTsKLSAg
ICB9Ci0KLSAgICAvLwotICAgIC8vIGNsZWFudXAgYW5kIGFkZCBhbGwgdGhlIG5lY2Vzc2FyeSBz
dGF0ZW1lbnRzIHRvIHRoZSBtYWluIG1vZGVsCi0gICAgLy8KLSAgICBxRGVsZXRlQWxsKCBhbGwg
KTsKLSAgICBkLT5tb2RlbC0+YWRkU3RhdGVtZW50cyggc3RhdGVtZW50cyApOwotfQotCiAjaW5j
bHVkZSAib250b2xvZ3lsb2FkZXIubW9jIgpJbmRleDogc2VydmljZXMvc3RvcmFnZS9vbnRvbG9n
eWxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2Uvb250b2xvZ3lsb2FkZXIu
aAkocmV2aXNpb24gMTIxMzk0MCkKKysrIHNlcnZpY2VzL3N0b3JhZ2Uvb250b2xvZ3lsb2FkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTIgKzY1LDYgQEAKICAgICAgICAgICovCiAgICAgICAg
IHZvaWQgaW1wb3J0T250b2xvZ3koIGNvbnN0IFFTdHJpbmcmIHVybCApOwogCi0gICAgICAgIC8q
KgotICAgICAgICAgKiBDcmVhdGVzIG5hbzp1c2VyVmlzaWJsZSBwcm9wZXJ0aWVzIGZvciBhbGwg
Y2xhc3NlcyBhbmQgcHJvcGVydGllcwotICAgICAgICAgKiBhbmQgc3RvcmVzIHRoZW0gaW4gdGhl
IGt1dm8gbmFtZXNwYWNlLgotICAgICAgICAgKi8KLSAgICAgICAgdm9pZCB1cGRhdGVVc2VyVmlz
aWJpbGl0eSgpOwotCiAgICAgUV9TSUdOQUxTOgogICAgICAgICAvKioKICAgICAgICAgICogRW1p
dHRlZCBvbmNlIHRoZSB1cGRhdGUgb2YgdGhlIG9udG9sb2dpZXMgaXMgZG9uZS4KSW5kZXg6IHNl
cnZpY2VzL3N0b3JhZ2UvcmVwb3NpdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3Rv
cmFnZS9yZXBvc2l0b3J5LmNwcAkocmV2aXNpb24gMTIxMzk0MCkKKysrIHNlcnZpY2VzL3N0b3Jh
Z2UvcmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0LDYgKzE0LDcgQEAKIAogI2lu
Y2x1ZGUgInJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJtb2RlbGNvcHlqb2IuaCIKKyNpbmNsdWRl
ICJjcmFwcHlpbmZlcmVuY2VyMi5oIgogCiAjaW5jbHVkZSA8U29wcmFuby9CYWNrZW5kPgogI2lu
Y2x1ZGUgPFNvcHJhbm8vUGx1Z2luTWFuYWdlcj4KQEAgLTY5LDYgKzcwLDkgQEAKIHsKICAgICBr
RGVidWcoKSA8PCBtX25hbWU7CiAKKyAgICBkZWxldGUgbV9pbmZlcmVuY2VyOworICAgIG1faW5m
ZXJlbmNlciA9IDA7CisKICAgICBkZWxldGUgbV9tb2RlbENvcHlKb2I7CiAgICAgbV9tb2RlbENv
cHlKb2IgPSAwOwogCkBAIC0xNjUsOSArMTY5LDEzIEBACiAgICAgLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CiAgICAgU29wcmFubzo6VXRpbDo6U2lnbmFsQ2FjaGVNb2RlbCog
c2NtID0gbmV3IFNvcHJhbm86OlV0aWw6OlNpZ25hbENhY2hlTW9kZWwoIG1fbW9kZWwgKTsKICAg
ICBzY20tPnNldFBhcmVudCh0aGlzKTsgLy8gbWVtb3J5IG1hbmFnZW1lbnQKLQogICAgIHNldFBh
cmVudE1vZGVsKCBzY20gKTsKIAorICAgIC8vIGNyZWF0ZSB0aGUgY3JhcHB5IGluZmVyZW5jZSBt
b2RlbCB3aGljaCBoYW5kbGVzIHJkZnM6c3ViQ2xhc3NPZiBvbmx5IC0+IHdlIG9ubHkgdXNlIHRo
aXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBvZiBSZXNvdXJjZVR5cGVUZXJtcworICAgIC8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIG1faW5mZXJlbmNlciA9IG5ldyBD
cmFwcHlJbmZlcmVuY2VyMiggc2NtICk7CisgICAgc2V0UGFyZW50TW9kZWwobV9pbmZlcmVuY2Vy
KTsKKwogICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgdG8gY29udmVydAogICAgIC8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIGJvb2wgY29udmVydGluZ0RhdGEgPSBmYWxz
ZTsKQEAgLTMzNyw3ICszNDUsMTggQEAKICAgICAvLyBuZWVkcyB0byBiZSBhZGRyZXNzZWQgYXMg
d2VsbAogICAgIHNldHRpbmdzIDw8IFNvcHJhbm86OkJhY2tlbmRTZXR0aW5nKCAiU2VydmVyVGhy
ZWFkcyIsIDEwMCApOwogCisgICAgLy8gTmV2ZXIgdGFrZSBtb3JlIHRoYW4gNSBtaW51dGVzIHRv
IGFuc3dlciBhIHF1ZXJ5ICh0aGlzIGlzIHRvIGZpbHRlciBvdXQgYnJva2VuIHF1ZXJpZXMgYW5k
IGJ1Z3MgaW4gVmlydHVvc28ncyBxdWVyeSBvcHRpbWl6ZXIpCisgICAgLy8gdHJ1ZWc6IFdlIGNh
bm5vdCBhY3RpdmF0ZSB0aGlzIHlldC4gMS4gVmlydHVvc28gPCA2LjMgY3Jhc2hlcyBhbmQgMi4g
ZXZlbiBvcGVuIGN1cnNvcnMgYXJlIHN1YmplY3QgdG8gdGhlIHRpbWVvdXQgd2hpY2ggaXMgcmVh
bGx5CisgICAgLy8gICAgICAgIG5vdCB3aGF0IHdlIHdhbnQhCisvLyAgICBzZXR0aW5ncyA8PCBT
b3ByYW5vOjpCYWNrZW5kU2V0dGluZyggIlF1ZXJ5VGltZW91dCIsIDUqNjAwMDAgKTsKKwogICAg
IHJldHVybiBzZXR0aW5nczsKIH0KIAordm9pZCBOZXBvbXVrOjpSZXBvc2l0b3J5Ojp1cGRhdGVJ
bmZlcmVuY2UoKQoreworICAgIG1faW5mZXJlbmNlci0+dXBkYXRlSW5mZXJlbmNlSW5kZXgoKTsK
KyAgICBtX2luZmVyZW5jZXItPnVwZGF0ZUFsbFJlc291cmNlcygpOworfQorCiAjaW5jbHVkZSAi
cmVwb3NpdG9yeS5tb2MiCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3JlcG9zaXRvcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL3JlcG9zaXRvcnkuaAkocmV2aXNpb24gMTIxMzk0
MCkKKysrIHNlcnZpY2VzL3N0b3JhZ2UvcmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSwxMSArMjksMjcgQEAKIH0KIAogY2xhc3MgS0pvYjsKK2NsYXNzIENyYXBweUluZmVyZW5jZXIy
OwogCiBuYW1lc3BhY2UgTmVwb211ayB7CiAKICAgICBjbGFzcyBNb2RlbENvcHlKb2I7CiAKKyAg
ICAvKioKKyAgICAgKiBSZXByZXNlbnRzIHRoZSBtYWluIE5lcG9tdWsgbW9kZWwuIFdoaWxlIGl0
IGxvb2tzIGFzIGlmIHRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhbgorICAgICAqIG9uZSBpbnN0YW5j
ZSBvZiBSZXBvc2l0b3J5IHRoZXJlIGlzIG9ubHkgdGhlIG9uZS4KKyAgICAgKgorICAgICAqIFJl
cG9zaXRvcnkgaXMgYmFzZWQgb24gTlJMTW9kZWwgb25seSBmb3IgdGhlIHF1ZXJ5IHByZWZpeCBl
eHBhbnNpb24gZmVhdHVyZS4gSXQKKyAgICAgKiB1c2VzIGEgU29wcmFubzo6VXRpbHM6OlNpZ25h
bENhY2hlTW9kZWwgdG8gY29tcGFjdCB0aGUgc2V2ZXJhbCBzdGF0ZW1lbnRzQWRkZWQoKQorICAg
ICAqIGFuZCBzdGF0ZW1lbnRzUmVtb3ZlZCgpIHNpZ25hbHMsIGFuZCB1c2VzIENyYXBweUluZmVy
ZW5jZXIyIHRvIGtlZXAgcmRmczpzdWJDbGFzc09mCisgICAgICogYW5kIG5hbzp1c2VyVmlzaWJs
ZSBpbmZlcmVuY2UgdXAtdG8tZGF0ZS4KKyAgICAgKgorICAgICAqIE9uIGNvbnN0cnVjdGlvbiBp
dCBjaGVja3MgZm9yIGFuZCBvcHRpb25hbGx5IHBlcmZvcm1zIGNvbnZlcnNpb24gZnJvbSBhbiBv
bGQgcmVwb3NpdG9yeQorICAgICAqIHR5cGUgKHByZS1WaXJ0dW9zbyB0aW1lcykgYW5kIHJ1bnMg
Q3JhcHB5SW5mZXJlbmNlcjI6OnVwZGF0ZUFsbFJlc291cmNlcygpIHdoaWNoIGlzCisgICAgICog
cGVyZm9ybWVkIGluIGEgc2VwYXJhdGUgdGhyZWFkLgorICAgICAqCisgICAgICogXGF1dGhvciBT
ZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5vcmc+CisgICAgICovCiAgICAgY2xhc3MgUmVwb3Np
dG9yeSA6IHB1YmxpYyBTb3ByYW5vOjpOUkxNb2RlbAogICAgIHsKICAgICAgICAgUV9PQkpFQ1QK
QEAgLTU5LDkgKzc1LDEwIEBACiAgICAgICAgICAqIFdpbGwgZW1pdCB0aGUgb3BlbmVkIHNpZ25h
bAogICAgICAgICAgKi8KICAgICAgICAgdm9pZCBvcGVuKCk7Ci0KICAgICAgICAgdm9pZCBjbG9z
ZSgpOwogCisgICAgICAgIHZvaWQgdXBkYXRlSW5mZXJlbmNlKCk7CisKICAgICBRX1NJR05BTFM6
CiAgICAgICAgIHZvaWQgb3BlbmVkKCBSZXBvc2l0b3J5KiwgYm9vbCBzdWNjZXNzICk7CiAKQEAg
LTc1LDYgKzkyLDcgQEAKICAgICAgICAgU3RhdGUgbV9zdGF0ZTsKIAogICAgICAgICBTb3ByYW5v
OjpNb2RlbCogbV9tb2RlbDsKKyAgICAgICAgQ3JhcHB5SW5mZXJlbmNlcjIqIG1faW5mZXJlbmNl
cjsKICAgICAgICAgY29uc3QgU29wcmFubzo6QmFja2VuZCogbV9iYWNrZW5kOwogCiAgICAgICAg
IC8vIG9ubHkgdXNlZCBkdXJpbmcgb3BlbmluZwpJbmRleDogc2VydmljZXMvc3RvcmFnZS9vbnRv
bG9neW1hbmFnZXJtb2RlbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS9vbnRv
bG9neW1hbmFnZXJtb2RlbC5jcHAJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdG9y
YWdlL29udG9sb2d5bWFuYWdlcm1vZGVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEs
NyBAQAogCiAjaW5jbHVkZSA8UXRDb3JlL1FVcmw+CiAjaW5jbHVkZSA8UXRDb3JlL1FEYXRlVGlt
ZT4KKyNpbmNsdWRlIDxRdENvcmUvUVNjb3BlZFBvaW50ZXI+CiAKICNpbmNsdWRlIDxTb3ByYW5v
L0JhY2tlbmQ+CiAjaW5jbHVkZSA8U29wcmFuby9WZXJzaW9uPgpAQCAtMjI1LDIzICsyMjYsNiBA
QAogICAgICAgICB0bXBNb2RlbC0+YWRkU3RhdGVtZW50KCBTb3ByYW5vOjpTdGF0ZW1lbnQoIGRh
dGFHcmFwaFVyaSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjpoYXNEZWZhdWx0TmFtZXNwYWNl
KCksIExpdGVyYWxWYWx1ZSggbnMudG9TdHJpbmcoKSApLCBtZXRhRGF0YUdyYXBoVXJpICkgKTsK
ICNlbmRpZgogICAgIH0KLQotICAgIC8qKgotICAgICAqIFNpbXBsZSBnYXJiYWdlIGNvbGxlY3Rp
b24gY2xhc3MuCi0gICAgICovCi0gICAgY2xhc3MgT2JqZWN0R2FyYmFnZUNvbGxlY3RvcgotICAg
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIE9iamVjdEdhcmJhZ2VDb2xsZWN0b3IoIFFPYmplY3Qq
IG8gKQotICAgICAgICAgICAgOiBtX29iamVjdCggbyApIHsKLSAgICAgICAgfQotICAgICAgICB+
T2JqZWN0R2FyYmFnZUNvbGxlY3RvcigpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtX29iamVjdDsK
LSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUU9iamVjdCogbV9vYmplY3Q7Ci0g
ICAgfTsKIH0KIAogCkBAIC0zMDgsNyArMjkyLDcgQEAKICAgICB9CiAKICAgICAvLyBzbyB3ZSBk
byBub3QgaGF2ZSB0byBjYXJlIGFib3V0IGRlbGV0aW5nIG91dCB0bXBNb2RlbCBhbnltb3JlLgot
ICAgIE9iamVjdEdhcmJhZ2VDb2xsZWN0b3IgbW9kZWxHYXJiYWdlQ29sbGVjdG9yKCB0bXBNb2Rl
bCApOworICAgIFFTY29wZWRQb2ludGVyPFNvcHJhbm86Ok1vZGVsPiBtb2RlbEdhcmJhZ2VDb2xs
ZWN0b3IoIHRtcE1vZGVsICk7CiAKICAgICAvLyBpbXBvcnQgdGhlIGRhdGEgaW50byBvdXIgdG1w
IG1vZGVsCiAgICAgd2hpbGUgKCBkYXRhLm5leHQoKSApIHsKSW5kZXg6IHNlcnZpY2VzL3N0b3Jh
Z2UvbmVwb211a2NvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvbmVwb211
a2NvcmUuY3BwCShyZXZpc2lvbiAxMjEzOTQwKQorKysgc2VydmljZXMvc3RvcmFnZS9uZXBvbXVr
Y29yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDkgQEAKICAgICBtX3JlcG9zaXRv
cnktPnNldEVuYWJsZVF1ZXJ5UHJlZml4RXhwYW5zaW9uKGZhbHNlKTsKICAgICBtX3JlcG9zaXRv
cnktPnNldEVuYWJsZVF1ZXJ5UHJlZml4RXhwYW5zaW9uKHRydWUpOwogCisgICAgLy8gdGhlIGZp
cnN0IHRpbWUgdGhpcyBpcyBhIHZlcnkgbG9uZyBwcm9jZWR1cmUuIFRodXMsIHdlIGRvIGl0IHdo
aWxlIE5lcG9tdWsgaXMgYWN0aXZlIGFsdGhvdWdoIHRoZW4gc29tZSBxdWVyaWVzIG1pZ2h0IHJl
dHVybiBpbnZhbGlkIHJlc3VsdHMKKyAgICBtX3JlcG9zaXRvcnktPnVwZGF0ZUluZmVyZW5jZSgp
OworCiAgICAgaWYgKCAhbV9pbml0aWFsaXplZCApIHsKICAgICAgICAgLy8gYW5kIGZpbmFsbHkg
d2UgYXJlIGRvbmU6IHRoZSByZXBvc2l0b3J5IGlzIG9ubGluZSBhbmQgdGhlIG9udG9sb2dpZXMg
YXJlIGxvYWRlZC4KICAgICAgICAgbV9pbml0aWFsaXplZCA9IHRydWU7CkluZGV4OiBzZXJ2aWNl
cy9zdG9yYWdlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2Uv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNyw2ICsxNyw4IEBACiAgIG9udG9sb2d5
bWFuYWdlcm1vZGVsLmNwcAogICBncmFwaHJldHJpZXZlci5jcHAKICAgY3JhcHB5aW5mZXJlbmNl
ci5jcHAKKyAgY3JhcHB5aW5mZXJlbmNlcjIuY3BwCisgIHR5cGV2aXNpYmlsaXR5dHJlZS5jcHAK
ICAgKQogCiBzb3ByYW5vX2FkZF9vbnRvbG9neShzdG9yYWdlX1NSQ1MKQEAgLTU0LDMgKzU2LDUg
QEAKICAgVEFSR0VUUyBuZXBvbXVrc3RvcmFnZQogICBERVNUSU5BVElPTiAke1BMVUdJTl9JTlNU
QUxMX0RJUn0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FkZF9zdWJkaXJl
Y3RvcnkodGVzdCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56254</attachid>
            <date>2011-01-20 20:13:43 +0000</date>
            <delta_ts>2011-01-20 22:44:36 +0000</delta_ts>
            <desc>Updated patch which contains missing files (kdebase/runtime/nepomuk)</desc>
            <filename>kdebase-runtime-nepomuk-storage.diff</filename>
            <type>text/plain</type>
            <size>80848</size>
            <attacher name="Sebastian Trueg">trueg</attacher>
            
              <data encoding="base64">SW5kZXg6IG9udG9sb2dpZXMva3V2by50cmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG9udG9sb2dpZXMva3V2
by50cmlnCShyZXZpc2lvbiAxMjEzOTQwKQorKysgb250b2xvZ2llcy9rdXZvLnRyaWcJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDYgKzQ3LDkgQEAKICAgICByZGZzOlJlc291cmNlCiAgICAgICAgIG5h
bzp1c2VyVmlzaWJsZSB0cnVlIC4KIAorICAgIG5hbzp1c2VyVmlzaWJsZQorICAgICAgICBuYW86
dXNlclZpc2libGUgZmFsc2UgLgorCiAgICAgbnVhbzpFdmVudAogICAgICAgICBuYW86dXNlclZp
c2libGUgZmFsc2UgLgogCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvdHlwZXZpc2liaWxp
dHl0cmVldGVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvdGVzdC90eXBldmlz
aWJpbGl0eXRyZWV0ZXN0LmgJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3Qv
dHlwZXZpc2liaWxpdHl0cmVldGVzdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisv
KgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE5lcG9tdWsgS0RFIHByb2plY3QuCisgICBD
b3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorCisgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55CisgICBsYXRlciB2ZXJzaW9uIGFjY2VwdGVk
IGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nlc3NvciBhcHBy
b3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiksIHdoaWNoIHNoYWxsCisgICBhY3Qg
YXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxpY2Vu
c2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251
Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2lmbmRlZiBUWVBFVklTSUJJTElUWVRSRUVURVNUX0gK
KyNkZWZpbmUgVFlQRVZJU0lCSUxJVFlUUkVFVEVTVF9ICisKKyNpbmNsdWRlIDxRT2JqZWN0Pgor
CitjbGFzcyBLVGVtcERpcjsKK2NsYXNzIFR5cGVWaXNpYmlsaXR5VHJlZTsKK25hbWVzcGFjZSBT
b3ByYW5vIHsKK2NsYXNzIE1vZGVsOworfQorCitjbGFzcyBUeXBlVmlzaWJpbGl0eVRyZWVUZXN0
IDogcHVibGljIFFPYmplY3QKK3sKKyAgICBRX09CSkVDVAorCitwcml2YXRlIFFfU0xPVFM6Cisg
ICAgdm9pZCBpbml0VGVzdENhc2UoKTsKKyAgICB2b2lkIGNsZWFudXBUZXN0Q2FzZSgpOworICAg
IHZvaWQgaW5pdCgpOworICAgIHZvaWQgdGVzdFR5cGVWaXNpYmlsaXR5VHJlZSgpOworCitwcml2
YXRlOgorICAgIEtUZW1wRGlyKiBtX3N0b3JhZ2VEaXI7CisgICAgU29wcmFubzo6TW9kZWwqIG1f
bW9kZWw7CisgICAgVHlwZVZpc2liaWxpdHlUcmVlKiBtX3R5cGVUcmVlOworfTsKKworI2VuZGlm
IC8vIFRZUEVWSVNJQklMSVRZVFJFRVRFU1RfSApJbmRleDogc2VydmljZXMvc3RvcmFnZS90ZXN0
L2NyYXBweWluZmVyZW5jZXIydGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFn
ZS90ZXN0L2NyYXBweWluZmVyZW5jZXIydGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNl
cy9zdG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyOTkgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBL
REUgcHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVn
QGtkZS5vcmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVy
IHZlcnNpb24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cwor
ICAgc3VjY2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hp
Y2ggc2hhbGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNp
b24gMyBvZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNl
ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiY3JhcHB5
aW5mZXJlbmNlcjJ0ZXN0LmgiCisjaW5jbHVkZSAiLi4vY3JhcHB5aW5mZXJlbmNlcjIuaCIKKwor
I2luY2x1ZGUgPFF0VGVzdD4KKyNpbmNsdWRlICJxdGVzdF9rZGUuaCIKKworI2luY2x1ZGUgPFNv
cHJhbm8vU29wcmFubz4KKworI2luY2x1ZGUgPGt0ZW1wZGlyLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBTb3ByYW5vOworCitRX0RFQ0xBUkVfTUVUQVRZUEUoU29wcmFubzo6U3RhdGVtZW50KQorCit2
b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6aW5pdFRlc3RDYXNlKCkKK3sKKyAgICBxUmVnaXN0
ZXJNZXRhVHlwZTxTb3ByYW5vOjpTdGF0ZW1lbnQ+KCk7CisKKyAgICAvLyB3ZSBuZWVkIHRvIHVz
ZSBhIFZpcnR1b3NvIG1vZGVsIGFzIHRtcCBtb2RlbCBzaW5jZSByZWRsYW5kIG1pc3NlcyBpbXBv
cnRhbnQgU1BBUlFMIGZlYXR1cmVzCisgICAgLy8gdGhhdCBhcmUgdXNlZCBieSBsaWJuZXBvbXVr
IGJlbG93CisgICAgY29uc3QgU29wcmFubzo6QmFja2VuZCogYmFja2VuZCA9IFNvcHJhbm86OlBs
dWdpbk1hbmFnZXI6Omluc3RhbmNlKCktPmRpc2NvdmVyQmFja2VuZEJ5TmFtZSggInZpcnR1b3Nv
YmFja2VuZCIgKTsKKyAgICBRVkVSSUZZKCBiYWNrZW5kICk7CisgICAgbV9zdG9yYWdlRGlyID0g
bmV3IEtUZW1wRGlyKCk7CisgICAgbV9iYXNlTW9kZWwgPSBiYWNrZW5kLT5jcmVhdGVNb2RlbCgg
U29wcmFubzo6QmFja2VuZFNldHRpbmdzKCkgPDwgU29wcmFubzo6QmFja2VuZFNldHRpbmcoU29w
cmFubzo6QmFja2VuZE9wdGlvblN0b3JhZ2VEaXIsIG1fc3RvcmFnZURpci0+bmFtZSgpKSApOwor
ICAgIFFWRVJJRlkoIG1fYmFzZU1vZGVsICk7CisKKyAgICBtX21vZGVsID0gbmV3IENyYXBweUlu
ZmVyZW5jZXIyKCBtX2Jhc2VNb2RlbCApOworfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVz
dDo6Y2xlYW51cFRlc3RDYXNlKCkKK3sKKyAgICBkZWxldGUgbV9tb2RlbDsKKyAgICBkZWxldGUg
bV9iYXNlTW9kZWw7CisgICAgZGVsZXRlIG1fc3RvcmFnZURpcjsKK30KKworCit2b2lkIENyYXBw
eUluZmVyZW5jZXIyVGVzdDo6aW5pdCgpCit7CisgICAgbV9iYXNlTW9kZWwtPnJlbW92ZUFsbFN0
YXRlbWVudHMoKTsKKworICAgIC8vCisgICAgLy8gd2UgY3JlYXRlIG9uZSBmYWtlIG9udG9sb2d5
CisgICAgLy8KKyAgICAvLyBBCisgICAgLy8gfC0gQgorICAgIC8vICAgIHwtIEMgLSBpbnZpc2li
bGUKKyAgICAvLyAgICAgICB8LSBECisgICAgLy8gICAgICAgfC0gRQorICAgIC8vCisgICAgLy8g
RgorICAgIC8vIHwtIEUKKyAgICAvLworICAgIC8vIEwxCisgICAgLy8gfC0gTDIKKyAgICAvLyAg
ICB8LSBMMQorICAgIC8vCisgICAgUVVybCBncmFwaCgiZ3JhcGg6L29udG8iKTsKKyAgICBtX2Jh
c2VNb2RlbC0+YWRkU3RhdGVtZW50KCBncmFwaCwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0
eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5STDo6T250b2xvZ3koKSwgZ3JhcGggKTsKKyAg
ICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJuZXBvbXVrOi9HIiksIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOUkw6Okluc3Rh
bmNlQmFzZSgpLCBncmFwaCApOworCisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVy
bCgib250bzovQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9CIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1f
YmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0MiKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdy
YXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRCIpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Uzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJs
KCJvbnRvOi9FIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRT
dGF0ZW1lbnQoIFFVcmwoIm9udG86L0YiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBl
KCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisKKyAgICBt
X2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9FIiksIFNvcHJhbm86OlZvY2Fi
dWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQyIpLCBncmFwaCApOworICAg
IG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0IiKSwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9BIiksIGdyYXBoICk7Cisg
ICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovQyIpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0IiKSwgZ3JhcGggKTsK
KyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9EIiksIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQyIpLCBncmFwaCAp
OworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0UiKSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9GIiksIGdyYXBo
ICk7CisKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0MiKSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUoZmFsc2UpLCBn
cmFwaCApOworCisgICAgLy8gdGhlIGxvb3B5IGNsYXNzZXMKKyAgICBtX2Jhc2VNb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9MMSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5
cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBt
X2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9MMSIpLCBTb3ByYW5vOjpWb2Nh
YnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0wyIiksIGdyYXBoICk7Cisg
ICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovTDIiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNz
KCksIGdyYXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzov
TDIiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRv
Oi9MMSIpLCBncmFwaCApOworCisgICAgbV9tb2RlbC0+dXBkYXRlSW5mZXJlbmNlSW5kZXgoKTsK
K30KKworLy8gbWFrZSBzdXJlIG9ubHkgdGhlIG9uZSBzdGF0ZW1lbnQgaXMgYWRkZWQKK3ZvaWQg
Q3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0QWRkQW55U3RhdGVtZW50KCkKK3sKKyAgICBjb25z
dCBpbnQgY250ID0gbV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKTsKKyAgICBTdGF0ZW1lbnQgcygg
UVVybCgibmVwb211azovQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86Omhhc1RhZygpLCBR
VXJsKCJuZXBvbXVrOi9UIiksIFFVcmwoIm5lcG9tdWs6L0ciKSApOworICAgIFFWRVJJRlkoIW1f
bW9kZWwtPmFkZFN0YXRlbWVudChzKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50
Q291bnQoKSwgY250KzEpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNTdGF0ZW1lbnQo
cykpOworfQorCisvLyBtYWtlIHN1cmUgYWxsIHN1cGVyY2xhc3NlcyBhcmUgYWRkZWQgYXMgdHlw
ZSwgdG9vCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6dGVzdEFkZFR5cGVTdGF0ZW1lbnQo
KQoreworICAgIGludCBjbnQgPSBtX21vZGVsLT5zdGF0ZW1lbnRDb3VudCgpOworICAgIFFVcmwg
cmVzQSgibmVwb211azovQSIpOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3By
YW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpLCBRVXJsKCJuZXBv
bXVrOi9HIikpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCsz
KTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgp
KSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2Nh
YnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworCisgICAgY250
ID0gbV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKTsKKyAgICBRVXJsIHJlc0IoIm5lcG9tdWs6L0Ii
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQiwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSwgUVVybCgibmVwb211azovRyIpKTsKKyAgICBR
Q09NUEFSRShtX21vZGVsLT5zdGF0ZW1lbnRDb3VudCgpLCBjbnQrNCk7CisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgUVVybCgib250bzovQiIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0
YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpKSk7
CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVs
YXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkp
OworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgVm9jYWJ1
bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUoMSkpKTsKKworICAgIGNudCA9
IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNDKCJuZXBvbXVrOi9DIik7
CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0MsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
Rjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNP
TVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KzQpOworICAgIFFWRVJJRlkobV9t
b2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IFFVcmwoIm9udG86L0MiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0
ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSkpOwor
ICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFy
eTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+
Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKworICAgIGNudCA9IG1fbW9kZWwt
PnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNEKCJuZXBvbXVrOi9EIik7CisgICAgbV9t
b2RlbC0+YWRkU3RhdGVtZW50KHJlc0QsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgp
LCBRVXJsKCJvbnRvOi9FIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNPTVBBUkUobV9t
b2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KzcpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29u
dGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9u
dG86L0YiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVz
RCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0UiKSkpOworICAgIFFWRVJJ
RlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0
eXBlKCksIFFVcmwoIm9udG86L0MiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNB
bnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0Ii
KSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9j
YWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkpOworICAgIFFWRVJJRlkobV9t
b2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAgICBRVkVSSUZZKG1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0QsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZp
c2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7Cit9CisKKy8vIG1ha2Ugc3VyZSB0aGUgbmV3IHJl
bGF0aW9uIGlzIHRha2VuIGludG8gYWNjb3VudCB3aXRoIHRoZSBuZXh0IGFkZFN0YXRlbWVudAor
dm9pZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRlc3RBZGRTdWJDbGFzc09mU3RhdGVtZW50KCkK
K3sKKyAgICBRRVhQRUNUX0ZBSUwoIiIsICJOb3QgaW1wbGVtZW50ZWQgeWV0IiwgQWJvcnQpOwor
fQorCisvLyBtYWtlIHN1cmUgb25seSB0aGUgb25lIHN0YXRlbWVudCBpcyByZW1vdmVkCit2b2lk
IENyYXBweUluZmVyZW5jZXIyVGVzdDo6dGVzdFJlbW92ZUFueVN0YXRlbWVudCgpCit7Cit9CisK
Ky8vIG1ha2Ugc3VyZSB0aGUgYXBwcm9wcmlhdGUgdHlwZXMgYXJlIHJlbW92ZWQsIHRvbworLy8g
Y2hlY2sgMiBjYXNlczogMS4gb25seSB0aGUgb25lIHR5cGUsIDIuIHR3byB0eXBlcyB3aXRoIGlu
dGVyc2VjdGluZyBzdXBlcmNsYXNzZXMKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0
UmVtb3ZlVHlwZVN0YXRlbWVudCgpCit7CisgICAgaW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVu
dENvdW50KCk7CisgICAgUVVybCByZXNBKCJuZXBvbXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRk
U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJv
bnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+cmVtb3ZlU3RhdGVt
ZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9B
IiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50
Q291bnQoKSwgY250KTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpKSk7CisgICAg
UVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAg
ICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5
OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworCisgICAgLy8gYWRkIHR3
byB0eXBlcyB3aXRoIGludGVyc2VjdGluZyBzdXBlciB0eXBlcworICAgIG1fbW9kZWwtPmFkZFN0
YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250
bzovQiIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChy
ZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBR
VXJsKCJuZXBvbXVrOi9HIikpOworICAgIC8vIHJlbW92ZSBvbmUgb2YgdGhlbQorICAgIG1fbW9k
ZWwtPnJlbW92ZVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgUVVybCgib250bzovQiIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIC8vIG1ha2Ugc3Vy
ZSBhbGwgaXMgd2VsbAorICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNu
dCs3KTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZv
Y2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKG1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgp
LCBRVXJsKCJvbnRvOi9FIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3Rh
dGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIikpKTsK
KyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9CIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwt
PmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJs
KCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50
KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZT
OjpSZXNvdXJjZSgpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNBLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkp
OworfQorCisvLyBtYWtlIHN1cmUgdGhlIHJlbW92ZWQgc3ViY2xhc3MgcmVsYXRpb24gaXMgdGFr
ZW4gaW50byBhY2NvdW50IHdpdGggdGhlIG5leHQgYWRkU3RhdGVtZW50CisvLyBtYWtlIHN1cmUg
dHlwZSBzdGF0ZW1lbnRzIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZCBhcmUgcmVtb3ZlZAordm9p
ZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRlc3RSZW1vdmVTdWJDbGFzc09mU3RhdGVtZW50KCkK
K3sKKyAgICBRRVhQRUNUX0ZBSUwoIiIsICJOb3QgaW1wbGVtZW50ZWQgeWV0IiwgQWJvcnQpOwor
fQorCisvLyBtYWtlIHN1cmUgdGhlIGNvcnJlc3BvbmluZyBzdGF0ZW1lbnRzIGFyZSByZW1vdmVk
IGFuZCBub3RoaW5nIGVsc2UKKy8vIHRlc3QgYWxsIGNvbWJpbmF0aW9ucyBvZiBpbnZhbGlkIGFu
ZCB2YWxpZCBub2RlcyBpZiBwb3NzaWJsZQordm9pZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRl
c3RSZW1vdmVBbGxTdGF0ZW1lbnRzKCkKK3sKKyAgICAvLyAxLiByZW1vdmUgdGhlIHdob2xlIHJl
c291cmNlCisgICAgaW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVy
bCByZXNBKCJuZXBvbXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5l
cG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OmxhYmVsKCksIExpdGVyYWxWYWx1ZShRTGF0aW4xU3RyaW5nKCJBIikp
LCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9kZWwtPnJlbW92ZUFsbFN0YXRlbWVudHMo
cmVzQSwgTm9kZSgpLCBOb2RlKCkpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENv
dW50KCksIGNudCk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQo
cmVzQSwgTm9kZSgpLCBOb2RlKCksIE5vZGUoKSkpOworCisgICAgLy8gMi4gcmVtb3ZlIGEgdHlw
ZSBmcm9tIHNldmVyYWwgcmVzb3VyY2VzCisgICAgUVVybCByZXNCKCJuZXBvbXVrOi9CIik7Cisg
ICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6
dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2Rl
bC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBR
VXJsKCJvbnRvOi9GIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3Rh
dGVtZW50KHJlc0IsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRv
Oi9CIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJl
c0IsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIiksIFFV
cmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+cmVtb3ZlQWxsU3RhdGVtZW50cyhOb2Rl
KCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpOwor
ICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFy
eTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsK
KyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVs
LT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVy
bCgib250bzovRiIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Uzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1l
bnQocmVzQiwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkpOworICAg
IFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgVm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNv
bnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJv
bnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJl
c0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7Cisg
ICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5
OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworICAgIFFDT01QQVJFKG1f
bW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCs3KTsKKworICAgIC8vIDMuIHJlbW92ZSBhbGwg
dHlwZXMgZnJvbSBvbmUgcmVzb3VyY2UKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQSwg
U29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0UiKSwgUVVybCgi
bmVwb211azovRyIpKTsKKyAgICBtX21vZGVsLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHJlc0EsIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBOb2RlKCksIFFVcmwoIm5lcG9tdWs6L0ci
KSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIE5vZGUoKSkpOworICAgIFFWRVJJRlkoIW1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZp
c2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICAvLyA0LiByZW1vdmUgYSBncmFwaAor
ICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9k
ZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwg
UVVybCgib250bzovQSIpLCBRVXJsKCJuZXBvbXVrOi9HMiIpKTsKKyAgICBtX21vZGVsLT5yZW1v
dmVDb250ZXh0KFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29u
dGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgTm9kZSgpLCBOb2RlKCkpKTsKKyAgICBRVkVSSUZZKG1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
Rjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250
YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwg
UVVybCgib250bzovRSIpKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0
ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86
L0QiKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0Es
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIikpKTsKKyAg
ICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQiIpKSk7CisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkpOworICAg
IFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQ29udGV4dChRVXJsKCJuZXBvbXVrOi9HIikpKTsK
K30KKworLy8gbWFrZSBzdXJlIHdlIGRvIG5vdCBydW4gaW50byBhbiBlbmRsZXNzIGxvb3AKK3Zv
aWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0Q3ljbGljU3ViQ2xhc3NSZWxhdGlvbigpCit7
CisgICAgaW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNB
KCJuZXBvbXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9MMSIpLCBRVXJsKCJuZXBvbXVr
Oi9HIikpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCs0KTsg
Ly8gKzQgc2luY2UgTDEgaXMgdGhlcmUgdHdpY2U6IHRoZSBvbmUgd2UgYWRkZWQgYW5kIHRoZSBz
dXBlcmNsYXNzIG9mIEwyCisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovTDEiKSkpOworICAg
IFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0wyIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNv
bnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKSk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJl
bmNlcjJUZXN0Ojp0ZXN0VXBkYXRlQWxsUmVzb3VyY2VzKCkKK3sKKyAgICAvLyB3ZSBhZGQgYSBi
dW5jaCBvZiBzdGF0ZW1lbnRzIHRvIHRoZSBiYXNlIG1vZGVsIGluc3RlYWQgb2YgZ29pbmcgdGhy
b3VnaCB0aGUgY3JhcHB5IGluZmVyZW5jZSBtb2RlbAorICAgIFFVcmwgcmVzQSgibmVwb211azov
QSIpOworICAgIFFVcmwgcmVzQigibmVwb211azovQiIpOworICAgIFFVcmwgcmVzQygibmVwb211
azovQyIpOworICAgIFFVcmwgcmVzRCgibmVwb211azovRCIpOworCisgICAgbV9iYXNlTW9kZWwt
PmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVy
bCgib250bzovQSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fYmFzZU1vZGVsLT5hZGRT
dGF0ZW1lbnQocmVzQiwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9u
dG86L0IiKSwgUVVybCgibmVwb211azovRyIpKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVt
ZW50KHJlc0MsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9D
IiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudChy
ZXNELCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBR
VXJsKCJuZXBvbXVrOi9HIikpOworCisgICAgbV9tb2RlbC0+dXBkYXRlQWxsUmVzb3VyY2VzKCk7
CisKKyAgICAvLyB3YWl0IGZvciB0aGUgYWJvdmUgY2FsbCB0byBmaW5pc2gKKyAgICBRRXZlbnRM
b29wIGxvb3A7CisgICAgY29ubmVjdChtX21vZGVsLCBTSUdOQUwoYWxsUmVzb3VyY2VzVXBkYXRl
ZCgpKSwgJmxvb3AsIFNMT1QocXVpdCgpKSk7CisgICAgbG9vcC5leGVjKCk7CisKKyAgICBRVkVS
SUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6Ok5BTzo6
dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICBRVkVSSUZZKG1fbW9kZWwt
PmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUo
KSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0Fu
eVN0YXRlbWVudChyZXNDLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxW
YWx1ZSgxKSkpOworCisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChy
ZXNELCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOwor
fQorCitRVEVTVF9LREVNQUlOX0NPUkUoQ3JhcHB5SW5mZXJlbmNlcjJUZXN0KQorCisjaW5jbHVk
ZSAiY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0Lm1vYyIKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvdGVz
dC9jcmFwcHlpbmZlcmVuY2VyMnRlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdl
L3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmgJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9z
dG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTcgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUgcHJv
amVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5v
cmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZlcnNp
b24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAgc3Vj
Y2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2ggc2hh
bGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24gMyBv
ZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0
cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaWZuZGVmIENSQVBQWUlORkVSRU5D
RVIyVEVTVF9ICisjZGVmaW5lIENSQVBQWUlORkVSRU5DRVIyVEVTVF9ICisKKyNpbmNsdWRlIDxR
T2JqZWN0PgorCitjbGFzcyBLVGVtcERpcjsKK2NsYXNzIENyYXBweUluZmVyZW5jZXIyOworbmFt
ZXNwYWNlIFNvcHJhbm8geworY2xhc3MgTW9kZWw7Cit9CisKK2NsYXNzIENyYXBweUluZmVyZW5j
ZXIyVGVzdCA6IHB1YmxpYyBRT2JqZWN0Cit7CisgICAgUV9PQkpFQ1QKKworcHJpdmF0ZSBRX1NM
T1RTOgorICAgIHZvaWQgaW5pdFRlc3RDYXNlKCk7CisgICAgdm9pZCBjbGVhbnVwVGVzdENhc2Uo
KTsKKyAgICB2b2lkIGluaXQoKTsKKyAgICB2b2lkIHRlc3RBZGRBbnlTdGF0ZW1lbnQoKTsKKyAg
ICB2b2lkIHRlc3RBZGRUeXBlU3RhdGVtZW50KCk7CisgICAgdm9pZCB0ZXN0QWRkU3ViQ2xhc3NP
ZlN0YXRlbWVudCgpOworICAgIHZvaWQgdGVzdFJlbW92ZUFueVN0YXRlbWVudCgpOworICAgIHZv
aWQgdGVzdFJlbW92ZVR5cGVTdGF0ZW1lbnQoKTsKKyAgICB2b2lkIHRlc3RSZW1vdmVTdWJDbGFz
c09mU3RhdGVtZW50KCk7CisgICAgdm9pZCB0ZXN0UmVtb3ZlQWxsU3RhdGVtZW50cygpOworICAg
IHZvaWQgdGVzdEN5Y2xpY1N1YkNsYXNzUmVsYXRpb24oKTsKKyAgICB2b2lkIHRlc3RVcGRhdGVB
bGxSZXNvdXJjZXMoKTsKKworcHJpdmF0ZToKKyAgICBLVGVtcERpciogbV9zdG9yYWdlRGlyOwor
ICAgIFNvcHJhbm86Ok1vZGVsKiBtX2Jhc2VNb2RlbDsKKyAgICBDcmFwcHlJbmZlcmVuY2VyMiog
bV9tb2RlbDsKK307CisKKyNlbmRpZgpJbmRleDogc2VydmljZXMvc3RvcmFnZS90ZXN0L3R5cGV2
aXNpYmlsaXR5dHJlZXRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvdGVz
dC90eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmNwcAkocmV2aXNpb24gMCkKKysrIHNlcnZpY2VzL3N0
b3JhZ2UvdGVzdC90eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNDEgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUg
cHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtk
ZS5vcmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZl
cnNpb24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAg
c3VjY2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2gg
c2hhbGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24g
MyBvZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8
aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAidHlwZXZpc2li
aWxpdHl0cmVldGVzdC5oIgorI2luY2x1ZGUgIi4uL3R5cGV2aXNpYmlsaXR5dHJlZS5oIgorCisj
aW5jbHVkZSA8UXRUZXN0PgorI2luY2x1ZGUgInF0ZXN0X2tkZS5oIgorCisjaW5jbHVkZSA8U29w
cmFuby9Tb3ByYW5vPgorCisjaW5jbHVkZSA8a3RlbXBkaXIuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFNvcHJhbm87CisKK3ZvaWQgVHlwZVZpc2liaWxpdHlUcmVlVGVzdDo6aW5pdFRlc3RDYXNlKCkK
K3sKKyAgICAvLyB3ZSBuZWVkIHRvIHVzZSBhIFZpcnR1b3NvIG1vZGVsIGFzIHRtcCBtb2RlbCBz
aW5jZSByZWRsYW5kIG1pc3NlcyBpbXBvcnRhbnQgU1BBUlFMIGZlYXR1cmVzCisgICAgLy8gdGhh
dCBhcmUgdXNlZCBieSBsaWJuZXBvbXVrIGJlbG93CisgICAgY29uc3QgU29wcmFubzo6QmFja2Vu
ZCogYmFja2VuZCA9IFNvcHJhbm86OlBsdWdpbk1hbmFnZXI6Omluc3RhbmNlKCktPmRpc2NvdmVy
QmFja2VuZEJ5TmFtZSggInZpcnR1b3NvYmFja2VuZCIgKTsKKyAgICBRVkVSSUZZKCBiYWNrZW5k
ICk7CisgICAgbV9zdG9yYWdlRGlyID0gbmV3IEtUZW1wRGlyKCk7CisgICAgbV9tb2RlbCA9IGJh
Y2tlbmQtPmNyZWF0ZU1vZGVsKCBTb3ByYW5vOjpCYWNrZW5kU2V0dGluZ3MoKSA8PCBTb3ByYW5v
OjpCYWNrZW5kU2V0dGluZyhTb3ByYW5vOjpCYWNrZW5kT3B0aW9uU3RvcmFnZURpciwgbV9zdG9y
YWdlRGlyLT5uYW1lKCkpICk7CisgICAgUVZFUklGWSggbV9tb2RlbCApOworCisgICAgbV90eXBl
VHJlZSA9IG5ldyBUeXBlVmlzaWJpbGl0eVRyZWUoIG1fbW9kZWwgKTsKK30KKwordm9pZCBUeXBl
VmlzaWJpbGl0eVRyZWVUZXN0OjpjbGVhbnVwVGVzdENhc2UoKQoreworICAgIGRlbGV0ZSBtX21v
ZGVsOworICAgIGRlbGV0ZSBtX3R5cGVUcmVlOworICAgIGRlbGV0ZSBtX3N0b3JhZ2VEaXI7Cit9
CisKKwordm9pZCBUeXBlVmlzaWJpbGl0eVRyZWVUZXN0Ojppbml0KCkKK3sKKyAgICBtX21vZGVs
LT5yZW1vdmVBbGxTdGF0ZW1lbnRzKCk7CisKKyAgICAvLyB3ZSBjcmVhdGUgb25lIGZha2Ugb250
b2xvZ3kKKyAgICAvLworICAgIC8vIHNpdHVhdGlvbnMgd2UgbmVlZCB0byB0ZXN0OgorICAgIC8v
ICogY2xhc3MgdGhhdCBpcyBtYXJrZWQgdmlzaWJsZSBzaG91bGQgc3RheSB2aXNpYmxlCisgICAg
Ly8gKiBjbGFzcyB0aGF0IGlzIG1hcmtlZCBpbnZpc2libGUgc2hvdWxkIHN0YXkgaW52aXNpYmxl
CisgICAgLy8gKiBub24tbWFya2VkIHN1YmNsYXNzIG9mIHZpc2libGUgc2hvdWxkIGJlIHZpc2li
bGUsIHRvbworICAgIC8vICogbm9uLW1hcmtlZCBzdWJjbGFzcyBvZiBpbnZpc2libGUgc2hvdWxk
IGJlIGludmlzaWJsZSwgdG9vCisgICAgLy8gKiBtYXJrZWQgc3ViY2xhc3Mgc2hvdWxkIGtlZXAg
aXRzIG93biB2aXNpYmxpdHkgYW5kIG5vdCBpbmhlcml0IGZyb20gcGFyZW50CisgICAgLy8gKiB3
aG9sZSBicmFuY2ggc2hvdWxkIGluaGVyaXQgZnJvbSBwYXJlbnQKKyAgICAvLyAqIGlmIG9uZSBw
YXJlbnQgaXMgdmlzaWJsZSB0aGUgY2xhc3MgaXMgdmlzaWJsZSwgdG9vLCBldmVuIGlmIE4gb3Ro
ZXIgcGFyZW50cyBhcmUgbm90CisgICAgLy8gKiBpZiBhbGwgcGFyZW50cyBhcmUgaW52aXNpYmxl
LCB0aGUgY2xhc3MgaXMgaW52aXNpYmxlLCBldmVuIGlmIGhpZ2hlciB1cCBpbiB0aGUgYnJhbmNo
IGEgY2xhc3MgaXMgdmlzaWJsZQorICAgIC8vICogcHJvcGVybHkgaGFuZGxlIGxvb3BzIChhcyBp
bjogZG8gbm90IHJ1biBpbnRvIGFuIGVuZGxlc3MgbG9vcCkKKyAgICAvLworICAgIC8vIEEKKyAg
ICAvLyB8LSBCIC0gaW52aXNpYmxlCisgICAgLy8gICAgfC0gQworICAgIC8vICAgICAgIHwtIEQg
LSB2aXNpYmxlCisgICAgLy8gICAgICAgICAgfC0gRQorICAgIC8vICAgICAgICAgICAgIHwtIEYK
KyAgICAvLyAgICB8LSBHCisgICAgLy8KKyAgICAvLyBBQSAtIGludmlzaWJsZQorICAgIC8vIHwg
LSBGCisgICAgLy8gfCAtIEcKKyAgICAvLworICAgIC8vIFgKKyAgICAvLyB8LSBZIC0gaW52aXNp
YmxlCisgICAgLy8gICAgfC0gWgorICAgIC8vICAgICAgIHwtIFgKKworICAgIFFVcmwgZ3JhcGgo
ImdyYXBoOi9vbnRvIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBncmFwaCwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5STDo6T250
b2xvZ3koKSwgZ3JhcGggKTsKKworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250
bzovQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQo
IFFVcmwoIm9udG86L0IiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9DIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1f
bW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRCIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5
OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGgg
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0UiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNz
KCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9GIiks
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgi
b250bzovRyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1l
bnQoIFFVcmwoIm9udG86L0FBIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fbW9kZWwt
PmFkZFN0YXRlbWVudCggUVVybCgib250bzovWCIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAg
ICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L1kiKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdy
YXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9aIiksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpD
bGFzcygpLCBncmFwaCApOworCisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRv
Oi9CIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250
bzovQSIpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzov
QyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86
L0IiKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0Qi
KSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9D
IiksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9FIiks
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovRCIp
LCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRiIpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0UiKSwg
Z3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0ciKSwgU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9CIiksIGdy
YXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9GIiksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQUEiKSwgZ3Jh
cGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0ciKSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9BQSIpLCBncmFw
aCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovWSIpLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L1giKSwgZ3JhcGgg
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L1oiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9ZIiksIGdyYXBoICk7
CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9YIiksIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovWiIpLCBncmFwaCApOwor
CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9CIiksIFNvcHJhbm86OlZv
Y2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKGZhbHNlKSwgZ3JhcGgg
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0QiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUodHJ1ZSksIGdyYXBo
ICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9BQSIpLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZShmYWxzZSksIGdy
YXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9ZIiksIFNvcHJh
bm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKGZhbHNlKSwg
Z3JhcGggKTsKKworICAgIG1fdHlwZVRyZWUtPnJlYnVpbGRUcmVlKCk7Cit9CisKK3ZvaWQgVHlw
ZVZpc2liaWxpdHlUcmVlVGVzdDo6dGVzdFR5cGVWaXNpYmlsaXR5VHJlZSgpCit7CisgICAgUVZF
UklGWShtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgib250bzovQSIpKSk7CisgICAgUVZFUklG
WSghbV90eXBlVHJlZS0+aXNWaXNpYmxlKFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlko
IW1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9DIikpKTsKKyAgICBRVkVSSUZZKG1f
dHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9EIikpKTsKKyAgICBRVkVSSUZZKG1fdHlw
ZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9FIikpKTsKKyAgICBRVkVSSUZZKG1fdHlwZVRy
ZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVl
LT5pc1Zpc2libGUoUVVybCgib250bzovRyIpKSk7CisgICAgUVZFUklGWSghbV90eXBlVHJlZS0+
aXNWaXNpYmxlKFFVcmwoIm9udG86L0FBIikpKTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5p
c1Zpc2libGUoUVVybCgib250bzovWCIpKSk7IC8vIGJlY2F1c2Ugb25seSB0b3AtbGV2ZWwgY2xh
c3NlcyBpbmhlcml0IGZyb20gcmRmczpSZXNvdXJjZQorICAgIFFWRVJJRlkoIW1fdHlwZVRyZWUt
PmlzVmlzaWJsZShRVXJsKCJvbnRvOi9ZIikpKTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5p
c1Zpc2libGUoUVVybCgib250bzovWiIpKSk7Cit9CisKK1FURVNUX0tERU1BSU5fQ09SRShUeXBl
VmlzaWJpbGl0eVRyZWVUZXN0KQorCisjaW5jbHVkZSAidHlwZXZpc2liaWxpdHl0cmVldGVzdC5t
b2MiCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gc2VydmljZXMvc3RvcmFnZS90ZXN0L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAwKQor
Kysgc2VydmljZXMvc3RvcmFnZS90ZXN0L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE4IEBACitzZXQoIEVYRUNVVEFCTEVfT1VUUFVUX1BBVEggJHtDTUFLRV9DVVJSRU5U
X0JJTkFSWV9ESVJ9ICkKKwora2RlNF9hZGRfdW5pdF90ZXN0KGNyYXBweWluZmVyZW5jZXIydGVz
dAorICBjcmFwcHlpbmZlcmVuY2VyMnRlc3QuY3BwCisgIC4uL2NyYXBweWluZmVyZW5jZXIyLmNw
cAorICAuLi90eXBldmlzaWJpbGl0eXRyZWUuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNy
YXBweWluZmVyZW5jZXIydGVzdAorICAke1FUX1FUVEVTVF9MSUJSQVJZfQorICAke1NPUFJBTk9f
TElCUkFSSUVTfQorICAke0tERTRfS0RFQ09SRV9MSUJTfSkKKwora2RlNF9hZGRfdW5pdF90ZXN0
KHR5cGV2aXNpYmlsaXR5dHJlZXRlc3QKKyAgdHlwZXZpc2liaWxpdHl0cmVldGVzdC5jcHAKKyAg
Li4vdHlwZXZpc2liaWxpdHl0cmVlLmNwcCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0eXBldmlz
aWJpbGl0eXRyZWV0ZXN0CisgICR7UVRfUVRURVNUX0xJQlJBUll9CisgICR7U09QUkFOT19MSUJS
QVJJRVN9CisgICR7S0RFNF9LREVDT1JFX0xJQlN9KQpJbmRleDogc2VydmljZXMvc3RvcmFnZS9v
bnRvbG9neWxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS9vbnRvbG9n
eWxvYWRlci5jcHAJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL29udG9s
b2d5bG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTQgKzI0LDEwIEBACiAKICNpbmNs
dWRlIDxTb3ByYW5vL0dsb2JhbD4KICNpbmNsdWRlIDxTb3ByYW5vL05vZGU+Ci0jaW5jbHVkZSA8
U29wcmFuby9MaXRlcmFsVmFsdWU+CiAjaW5jbHVkZSA8U29wcmFuby9Nb2RlbD4KICNpbmNsdWRl
IDxTb3ByYW5vL1BsdWdpbk1hbmFnZXI+CiAjaW5jbHVkZSA8U29wcmFuby9TdGF0ZW1lbnRJdGVy
YXRvcj4KLSNpbmNsdWRlIDxTb3ByYW5vL1F1ZXJ5UmVzdWx0SXRlcmF0b3I+CiAjaW5jbHVkZSA8
U29wcmFuby9QYXJzZXI+Ci0jaW5jbHVkZSA8U29wcmFuby9Wb2NhYnVsYXJ5L05BTz4KLSNpbmNs
dWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvUkRGUz4KIAogI2luY2x1ZGUgPEtDb25maWc+CiAjaW5j
bHVkZSA8S0NvbmZpZ0dyb3VwPgpAQCAtMTg4LDcgKzE4NCw2IEBACiAgICAgZWxzZSB7CiAgICAg
ICAgIGQtPmZvcmNlT250b2xvZ3lVcGRhdGUgPSBmYWxzZTsKICAgICAgICAgZC0+dXBkYXRlVGlt
ZXIuc3RvcCgpOwotICAgICAgICB1cGRhdGVVc2VyVmlzaWJpbGl0eSgpOwogICAgICAgICBlbWl0
IG9udG9sb2d5TG9hZGluZ0ZpbmlzaGVkKHRoaXMpOwogICAgIH0KIH0KQEAgLTIyNSwxMTUgKzIy
MCw0IEBACiAgICAgfQogfQogCi0KLW5hbWVzcGFjZSB7Ci0gICAgc3RydWN0IFVzZXJWaXNpYmxl
Tm9kZSB7Ci0gICAgICAgIFVzZXJWaXNpYmxlTm9kZSggY29uc3QgUVVybCYgciApCi0gICAgICAg
ICAgICA6IHVyaSggciApLAotICAgICAgICAgICAgICB1c2VyVmlzaWJsZSggMCApIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIFFVcmwgdXJpOwotICAgICAgICBpbnQgdXNlclZpc2libGU7Ci0gICAg
ICAgIFFIYXNoPFFVcmwsIFVzZXJWaXNpYmxlTm9kZSo+IHBhcmVudHM7Ci0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAqIFNldCB0aGUgdmFsdWUgb2YgbmFvOnVzZXJWaXNpYmxlIGFuZCBhZGQgdGhl
IGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICogc3RhdGVtZW50IHRvIHRoZSBsaXN0IG9mIHN0YXRl
bWVudHMgaW4gY2FzZSB0aGUgdmFsdWUgd2FzCi0gICAgICAgICAqIG5vdCBkZWZpbmVkIHlldC4K
LSAgICAgICAgICovCi0gICAgICAgIGludCB1cGRhdGVVc2VyVmlzaWJpbGl0eSggUUxpc3Q8U29w
cmFubzo6U3RhdGVtZW50PiYgc3RhdGVtZW50cyApIHsKLSAgICAgICAgICAgIGlmICggdXNlclZp
c2libGUgIT0gMCApIHsKLSAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiVXNlciB2aXNpYmls
aXR5IGFscmVhZHkgc2V0IiA8PCB1cmkudG9TdHJpbmcoKSA8PCAoIHVzZXJWaXNpYmxlID09IDEg
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdXNlclZpc2libGU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoICFwYXJlbnRzLmlzRW1wdHko
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICggUUhhc2g8UVVybCwgVXNlclZpc2libGVO
b2RlKj46Oml0ZXJhdG9yIGl0ID0gcGFyZW50cy5iZWdpbigpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICBpdCAhPSBwYXJlbnRzLmVuZCgpOyArK2l0ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAga0RlYnVnKCkgPDwgdXJpLnRvU3RyaW5nKCkgPDwgIkNoZWNraW5nIHBhcmVudCBjbGFz
cyIgPDwgaXQudmFsdWUoKS0+dXJpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGl0LnZhbHVlKCktPnVwZGF0ZVVzZXJWaXNpYmlsaXR5KCBzdGF0ZW1lbnRzICkgPT0g
LTEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlclZpc2libGUgPSAtMTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoIHVzZXJWaXNpYmxlID09IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGRl
ZmF1bHQgdG8gdmlzaWJsZQotICAgICAgICAgICAgICAgICAgICB1c2VyVmlzaWJsZSA9IDE7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHN0YXRlbWVudHMgPDwgU29wcmFubzo6
U3RhdGVtZW50KCB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6TGl0
ZXJhbFZhbHVlKCB1c2VyVmlzaWJsZSA9PSAxICksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5lcG9tdWs6OlZvY2FidWxhcnk6OktVVk86Om5ybE9u
dG9sb2d5R3JhcGgoKSApOwotICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJTZXR0aW5nIG5h
bzp1c2VyVmlzaWJsZSBvZiIgPDwgdXJpLnRvU3RyaW5nKCkgPDwgKCB1c2VyVmlzaWJsZSA9PSAx
ICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJWaXNpYmxlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfTsKLX0KLQotdm9pZCBOZXBvbXVrOjpPbnRvbG9neUxvYWRlcjo6dXBk
YXRlVXNlclZpc2liaWxpdHkoKQotewotICAgIC8vCi0gICAgLy8gYnVpbGQgYSB0cmVlIG9mIGFs
bCBjbGFzc2VzIGFuZCBwcm9wZXJ0aWVzCi0gICAgLy8KLSAgICBRU3RyaW5nIHF1ZXJ5Ci0gICAg
ICAgID0gUVN0cmluZzo6ZnJvbUxhdGluMSggInNlbGVjdCBkaXN0aW5jdCA/ciA/cCA/diB3aGVy
ZSB7ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyA/ciBhIHJkZnM6Q2xhc3Mg
LiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpz
dWJDbGFzc09mID9wIC4gP3AgYSByZGZzOkNsYXNzIC4gfSAuIH0gIgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJVTklPTiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InsgP3IgYSByZGY6UHJvcGVydHkgLiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ik9QVElPTkFMIHsgP3IgcmRmczpzdWJQcm9wZXJ0eU9mID9wIC4gP3AgYSByZGY6UHJvcGVydHkg
LiB9IC4gfSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3Ig
JTEgP3YgLiB9IC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGSUxURVIoP3Ih
PXJkZnM6UmVzb3VyY2UpIC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9IiAp
Ci0gICAgICAgIC5hcmcoIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggU29wcmFubzo6Vm9j
YWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpICkgKTsKLSAgICBrRGVidWcoKSA8PCBxdWVyeTsK
LSAgICBRSGFzaDxRVXJsLCBVc2VyVmlzaWJsZU5vZGUqPiBhbGw7Ci0gICAgewotICAgICAgICBT
b3ByYW5vOjpRdWVyeVJlc3VsdEl0ZXJhdG9yIGl0Ci0gICAgICAgICAgICA9IGQtPm1vZGVsLT5l
eGVjdXRlUXVlcnkoIHF1ZXJ5LCBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCAp
OwotICAgICAgICB3aGlsZSggaXQubmV4dCgpICkgewotICAgICAgICAgICAgY29uc3QgUVVybCBy
ID0gaXRbInIiXS51cmkoKTsKLSAgICAgICAgICAgIGNvbnN0IFNvcHJhbm86Ok5vZGUgcCA9IGl0
WyJwIl07Ci0gICAgICAgICAgICBjb25zdCBTb3ByYW5vOjpOb2RlIHYgPSBpdFsidiJdOwotCi0g
ICAgICAgICAgICBpZiAoICFhbGwuY29udGFpbnMoIHIgKSApIHsKLSAgICAgICAgICAgICAgICBV
c2VyVmlzaWJsZU5vZGUqIHJfdXZuID0gbmV3IFVzZXJWaXNpYmxlTm9kZSggciApOwotICAgICAg
ICAgICAgICAgIGFsbC5pbnNlcnQoIHIsIHJfdXZuICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiggdi5pc0xpdGVyYWwoKSApCi0gICAgICAgICAgICAgICAgYWxsW3JdLT51c2VyVmlz
aWJsZSA9ICh2LmxpdGVyYWwoKS50b0Jvb2woKSA/IDEgOiAtMSk7Ci0gICAgICAgICAgICBpZiAo
IHAuaXNSZXNvdXJjZSgpICYmCi0gICAgICAgICAgICAgICAgIHAudXJpKCkgIT0gciAmJgotICAg
ICAgICAgICAgICAgICBwLnVyaSgpICE9IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291
cmNlKCkgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCAhYWxsLmNvbnRhaW5zKCBwLnVyaSgpICkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFVzZXJWaXNpYmxlTm9kZSogcF91dm4gPSBuZXcgVXNl
clZpc2libGVOb2RlKCBwLnVyaSgpICk7Ci0gICAgICAgICAgICAgICAgICAgIGFsbC5pbnNlcnQo
IHAudXJpKCksIHBfdXZuICk7Ci0gICAgICAgICAgICAgICAgICAgIGFsbFtyXS0+cGFyZW50cy5p
bnNlcnQoIHAudXJpKCksIHBfdXZuICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhbGxbcl0tPnBhcmVudHMuaW5zZXJ0KCBw
LnVyaSgpLCBhbGxbcC51cmkoKV0gKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIGNyZWF0ZSBhIGxpc3Qgb2YgYWxs
IHN0YXRlbWVudHMgd2UgbmVlZCB0byBhZGQKLSAgICAvLwotICAgIFFMaXN0PFNvcHJhbm86OlN0
YXRlbWVudD4gc3RhdGVtZW50czsKLSAgICBmb3IgKCBRSGFzaDxRVXJsLCBVc2VyVmlzaWJsZU5v
ZGUqPjo6aXRlcmF0b3IgaXQgPSBhbGwuYmVnaW4oKTsKLSAgICAgICAgICBpdCAhPSBhbGwuZW5k
KCk7ICsraXQgKSB7Ci0gICAgICAgIGl0LnZhbHVlKCktPnVwZGF0ZVVzZXJWaXNpYmlsaXR5KCBz
dGF0ZW1lbnRzICk7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBjbGVhbnVwIGFuZCBhZGQgYWxs
IHRoZSBuZWNlc3Nhcnkgc3RhdGVtZW50cyB0byB0aGUgbWFpbiBtb2RlbAotICAgIC8vCi0gICAg
cURlbGV0ZUFsbCggYWxsICk7Ci0gICAgZC0+bW9kZWwtPmFkZFN0YXRlbWVudHMoIHN0YXRlbWVu
dHMgKTsKLX0KLQogI2luY2x1ZGUgIm9udG9sb2d5bG9hZGVyLm1vYyIKSW5kZXg6IHNlcnZpY2Vz
L3N0b3JhZ2Uvb250b2xvZ3lsb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdl
L29udG9sb2d5bG9hZGVyLmgJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdl
L29udG9sb2d5bG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDEyICs2NSw2IEBACiAgICAg
ICAgICAqLwogICAgICAgICB2b2lkIGltcG9ydE9udG9sb2d5KCBjb25zdCBRU3RyaW5nJiB1cmwg
KTsKIAotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBuYW86dXNlclZpc2libGUgcHJv
cGVydGllcyBmb3IgYWxsIGNsYXNzZXMgYW5kIHByb3BlcnRpZXMKLSAgICAgICAgICogYW5kIHN0
b3JlcyB0aGVtIGluIHRoZSBrdXZvIG5hbWVzcGFjZS4KLSAgICAgICAgICovCi0gICAgICAgIHZv
aWQgdXBkYXRlVXNlclZpc2liaWxpdHkoKTsKLQogICAgIFFfU0lHTkFMUzoKICAgICAgICAgLyoq
CiAgICAgICAgICAqIEVtaXR0ZWQgb25jZSB0aGUgdXBkYXRlIG9mIHRoZSBvbnRvbG9naWVzIGlz
IGRvbmUuCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmlsaXR5dHJlZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS90eXBldmlzaWJpbGl0eXRyZWUuY3BwCShyZXZp
c2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFnZS90eXBldmlzaWJpbGl0eXRyZWUuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBOZXBvbXVrIEtERSBwcm9qZWN0LgorICAgQ29weXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBU
cnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9u
IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFu
eQorICAgbGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5W
LiAob3IgaXRzCisgICBzdWNjZXNzb3IgYXBwcm92ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RF
IGUuVi4pLCB3aGljaCBzaGFsbAorICAgYWN0IGFzIGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9u
IDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNlLgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4g
IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNs
dWRlICJ0eXBldmlzaWJpbGl0eXRyZWUuaCIKKworI2luY2x1ZGUgPFNvcHJhbm8vTW9kZWw+Cisj
aW5jbHVkZSA8U29wcmFuby9RdWVyeVJlc3VsdEl0ZXJhdG9yPgorI2luY2x1ZGUgPFNvcHJhbm8v
Tm9kZT4KKyNpbmNsdWRlIDxTb3ByYW5vL0xpdGVyYWxWYWx1ZT4KKyNpbmNsdWRlIDxTb3ByYW5v
L1ZvY2FidWxhcnkvTkFPPgorI2luY2x1ZGUgPFNvcHJhbm8vVm9jYWJ1bGFyeS9SREZTPgorCisj
aW5jbHVkZSA8UXRDb3JlL1FNdXRleExvY2tlcj4KKworI2luY2x1ZGUgPEtEZWJ1Zz4KKworCitj
bGFzcyBUeXBlVmlzaWJpbGl0eVRyZWU6OlR5cGVWaXNpYmlsaXR5Tm9kZQoreworcHVibGljOgor
ICAgIFR5cGVWaXNpYmlsaXR5Tm9kZSggY29uc3QgUVVybCYgciApCisgICAgICAgIDogdXJpKCBy
ICksCisgICAgICAgICAgdXNlclZpc2libGUoIDAgKSB7CisgICAgfQorCisgICAgUVVybCB1cmk7
CisgICAgaW50IHVzZXJWaXNpYmxlOworICAgIFFTZXQ8VHlwZVZpc2liaWxpdHlOb2RlKj4gcGFy
ZW50czsKKworICAgIC8qKgorICAgICAqIFNldCB0aGUgdmFsdWUgb2YgbmFvOnVzZXJWaXNpYmxl
LgorICAgICAqIEEgY2xhc3MgaXMgdmlzaWJsZSBpZiBpdCBoYXMgYXQgbGVhc3Qgb25lIHZpc2li
bGUgZGlyZWN0IHBhcmVudCBjbGFzcy4KKyAgICAgKi8KKyAgICBpbnQgdXBkYXRlVXNlclZpc2li
aWxpdHkoIFFTZXQ8VHlwZVZpc2liaWxpdHlOb2RlKj4mIHZpc2l0ZWROb2RlcyApIHsKKyAgICAg
ICAgaWYgKCB1c2VyVmlzaWJsZSAhPSAwICkgeworICAgICAgICAgICAgcmV0dXJuIHVzZXJWaXNp
YmxlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKCAhcGFyZW50
cy5pc0VtcHR5KCkgKSB7CisgICAgICAgICAgICAgICAgZm9yICggUVNldDxUeXBlVmlzaWJpbGl0
eU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBwYXJlbnRzLmJlZ2luKCk7CisgICAgICAgICAgICAgICAg
ICAgICBpdCAhPSBwYXJlbnRzLmVuZCgpOyArK2l0ICkgeworICAgICAgICAgICAgICAgICAgICAv
LyBhdm9pZCBlbmRsZXNzIGxvb3BzCisgICAgICAgICAgICAgICAgICAgIGlmKCB2aXNpdGVkTm9k
ZXMuY29udGFpbnMoKml0KSApCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgdmlzaXRlZE5vZGVzLmluc2VydCggKml0ICk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICggKCppdCktPnVwZGF0ZVVzZXJWaXNpYmlsaXR5KCB2aXNpdGVkTm9kZXMg
KSA9PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdXNlclZpc2libGUgPSAxOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIHVzZXJWaXNpYmxl
ID09IDAgKSB7CisgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBpbnZpc2libGUKKyAgICAg
ICAgICAgICAgICB1c2VyVmlzaWJsZSA9IC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
a0RlYnVnKCkgPDwgIlNldHRpbmcgbmFvOnVzZXJWaXNpYmxlIG9mIiA8PCB1cmkudG9TdHJpbmco
KSA8PCAoIHVzZXJWaXNpYmxlID09IDEgKTsKKyAgICAgICAgICAgIHJldHVybiB1c2VyVmlzaWJs
ZTsKKyAgICAgICAgfQorICAgIH0KK307CisKK1R5cGVWaXNpYmlsaXR5VHJlZTo6VHlwZVZpc2li
aWxpdHlUcmVlKCBTb3ByYW5vOjpNb2RlbCogbW9kZWwgKQorICAgIDogbV9tb2RlbChtb2RlbCkK
K3sKK30KKworVHlwZVZpc2liaWxpdHlUcmVlOjp+VHlwZVZpc2liaWxpdHlUcmVlKCkKK3sKKyAg
ICBRTXV0ZXhMb2NrZXIgbG9jayggJm1fbXV0ZXggKTsKK30KKwordm9pZCBUeXBlVmlzaWJpbGl0
eVRyZWU6OnJlYnVpbGRUcmVlKCkKK3sKKyAgICBRTXV0ZXhMb2NrZXIgbG9jayggJm1fbXV0ZXgg
KTsKKworICAgIC8vIGNsZWFudXAKKyAgICBtX3Zpc2liaWxpdHlIYXNoLmNsZWFyKCk7CisKKyAg
ICAvLyB3ZSBidWlsZCBhIHRlbXBvcmFyeSBoZWxwZXIgdHJlZQorICAgIFFIYXNoPFFVcmwsIFR5
cGVWaXNpYmlsaXR5Tm9kZSo+IHRyZWU7CisKKyAgICBjb25zdCBRU3RyaW5nIHF1ZXJ5CisgICAg
ICAgID0gUVN0cmluZzo6ZnJvbUxhdGluMSggInNlbGVjdCBkaXN0aW5jdCA/ciA/cCA/diB3aGVy
ZSB7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyA/ciBhIHJkZnM6Q2xhc3Mg
LiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpz
dWJDbGFzc09mID9wIC4gP3AgYSByZGZzOkNsYXNzIC4gfSAuIH0gIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJVTklPTiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InsgP3IgYSByZGY6UHJvcGVydHkgLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ik9QVElPTkFMIHsgP3IgcmRmczpzdWJQcm9wZXJ0eU9mID9wIC4gP3AgYSByZGY6UHJvcGVydHkg
LiB9IC4gfSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3Ig
JTEgP3YgLiB9IC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGSUxURVIoP3Ih
PXJkZnM6UmVzb3VyY2UpIC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9IiAp
CisgICAgICAgICAgICAuYXJnKCBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIFNvcHJhbm86
OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSApICk7CisgICAga0RlYnVnKCkgPDwgcXVl
cnk7CisgICAgU29wcmFubzo6UXVlcnlSZXN1bHRJdGVyYXRvciBpdAorICAgICAgICAgICAgPSBt
X21vZGVsLT5leGVjdXRlUXVlcnkoIHF1ZXJ5LCBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFn
ZVNwYXJxbCApOworICAgIHdoaWxlKCBpdC5uZXh0KCkgKSB7CisgICAgICAgIGNvbnN0IFFVcmwg
ciA9IGl0WyJyIl0udXJpKCk7CisgICAgICAgIGNvbnN0IFNvcHJhbm86Ok5vZGUgcCA9IGl0WyJw
Il07CisgICAgICAgIGNvbnN0IFNvcHJhbm86Ok5vZGUgdiA9IGl0WyJ2Il07CisKKyAgICAgICAg
aWYgKCAhdHJlZS5jb250YWlucyggciApICkgeworICAgICAgICAgICAgVHlwZVZpc2liaWxpdHlO
b2RlKiByX3V2biA9IG5ldyBUeXBlVmlzaWJpbGl0eU5vZGUoIHIgKTsKKyAgICAgICAgICAgIHRy
ZWUuaW5zZXJ0KCByLCByX3V2biApOworICAgICAgICB9CisgICAgICAgIGlmKCB2LmlzTGl0ZXJh
bCgpICkKKyAgICAgICAgICAgIHRyZWVbcl0tPnVzZXJWaXNpYmxlID0gKHYubGl0ZXJhbCgpLnRv
Qm9vbCgpID8gMSA6IC0xKTsKKyAgICAgICAgaWYgKCBwLmlzUmVzb3VyY2UoKSAmJgorICAgICAg
ICAgICAgICAgIHAudXJpKCkgIT0gciAmJgorICAgICAgICAgICAgICAgIHAudXJpKCkgIT0gU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSApIHsKKyAgICAgICAgICAgIGlmICgg
IXRyZWUuY29udGFpbnMoIHAudXJpKCkgKSApIHsKKyAgICAgICAgICAgICAgICBUeXBlVmlzaWJp
bGl0eU5vZGUqIHBfdXZuID0gbmV3IFR5cGVWaXNpYmlsaXR5Tm9kZSggcC51cmkoKSApOworICAg
ICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KCBwLnVyaSgpLCBwX3V2biApOworICAgICAgICAgICAg
ICAgIHRyZWVbcl0tPnBhcmVudHMuaW5zZXJ0KCBwX3V2biApOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdHJlZVtyXS0+cGFyZW50cy5pbnNlcnQo
IHRyZWVbcC51cmkoKV0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIG1ha2Ugc3VyZSByZGZzOlJlc291cmNlIGlzIHZpc2libGUgYnkgZGVmYXVsdAorICAgIFR5
cGVWaXNpYmlsaXR5Tm9kZSogcmRmc1Jlc291cmNlTm9kZSA9IDA7CisgICAgUUhhc2g8UVVybCwg
VHlwZVZpc2liaWxpdHlOb2RlKj46Oml0ZXJhdG9yIHJkZnNSZXNvdXJjZUl0ID0gdHJlZS5maW5k
KFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpOworICAgIGlmKCByZGZzUmVz
b3VyY2VJdCA9PSB0cmVlLmVuZCgpICkgeworICAgICAgICByZGZzUmVzb3VyY2VOb2RlID0gbmV3
IFR5cGVWaXNpYmlsaXR5Tm9kZShTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgp
KTsKKyAgICAgICAgdHJlZS5pbnNlcnQoIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291
cmNlKCksIHJkZnNSZXNvdXJjZU5vZGUgKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJk
ZnNSZXNvdXJjZU5vZGUgPSByZGZzUmVzb3VyY2VJdC52YWx1ZSgpOworICAgIH0KKyAgICBpZigg
cmRmc1Jlc291cmNlTm9kZS0+dXNlclZpc2libGUgPT0gMCApIHsKKyAgICAgICAgcmRmc1Jlc291
cmNlTm9kZS0+dXNlclZpc2libGUgPSAxOworICAgIH0KKyAgICAvLyBhZGQgcmRmczpSZXNvdXJj
ZSBhcyBwYXJlbnQgZm9yIGFsbCB0b3AtbGV2ZWwgY2xhc3NlcworICAgIGZvciAoIFFIYXNoPFFV
cmwsIFR5cGVWaXNpYmlsaXR5Tm9kZSo+OjppdGVyYXRvciBpdCA9IHRyZWUuYmVnaW4oKTsKKyAg
ICAgICAgICBpdCAhPSB0cmVlLmVuZCgpOyArK2l0ICkgeworICAgICAgICBpZiggaXQudmFsdWUo
KSAhPSByZGZzUmVzb3VyY2VOb2RlICYmIGl0LnZhbHVlKCktPnBhcmVudHMuaXNFbXB0eSgpICkg
eworICAgICAgICAgICAgaXQudmFsdWUoKS0+cGFyZW50cy5pbnNlcnQoIHJkZnNSZXNvdXJjZU5v
ZGUgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGZpbmFsbHkgZGV0ZXJtaW5lIHZpc2li
aWxpdHkgb2YgYWxsIG5vZGVzCisgICAgZm9yICggUUhhc2g8UVVybCwgVHlwZVZpc2liaWxpdHlO
b2RlKj46Oml0ZXJhdG9yIGl0ID0gdHJlZS5iZWdpbigpOworICAgICAgICAgIGl0ICE9IHRyZWUu
ZW5kKCk7ICsraXQgKSB7CisgICAgICAgIFFTZXQ8VHlwZVZpc2liaWxpdHlOb2RlKj4gdmlzaXRl
ZE5vZGVzOworICAgICAgICBtX3Zpc2liaWxpdHlIYXNoLmluc2VydChpdC5rZXkoKSwgaXQudmFs
dWUoKS0+dXBkYXRlVXNlclZpc2liaWxpdHkoIHZpc2l0ZWROb2RlcyApID09IDEgKTsKKyAgICB9
CisKKyAgICAvLyBnZXQgcmlkIG9mIHRoZSB0ZW1wIHRyZWUKKyAgICBxRGVsZXRlQWxsKHRyZWUp
OworfQorCitib29sIFR5cGVWaXNpYmlsaXR5VHJlZTo6aXNWaXNpYmxlKGNvbnN0IFFVcmwgJnR5
cGUpIGNvbnN0Cit7CisgICAgUU11dGV4TG9ja2VyIGxvY2soICZtX211dGV4ICk7CisKKyAgICBR
SGFzaDxRVXJsLCBib29sPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Zpc2liaWxpdHlIYXNoLmNv
bnN0RmluZCh0eXBlKTsKKyAgICBpZiggaXQgIT0gbV92aXNpYmlsaXR5SGFzaC5jb25zdEVuZCgp
ICkgeworICAgICAgICByZXR1cm4gKml0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAga0Rl
YnVnKCkgPDwgIkNvdWxkIG5vdCBmaW5kIHR5cGUiIDw8IHR5cGUgPDwgImluIHRyZWUuIERlZmF1
bHRpbmcgdG8gdmlzaWJsZS4iOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CkluZGV4
OiBzZXJ2aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmlsaXR5dHJlZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNl
cnZpY2VzL3N0b3JhZ2UvdHlwZXZpc2liaWxpdHl0cmVlLmgJKHJldmlzaW9uIDApCisrKyBzZXJ2
aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmlsaXR5dHJlZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU3IEBACisvKgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE5lcG9tdWsgS0RFIHByb2pl
Y3QuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3Jn
PgorCisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55CisgICBsYXRlciB2ZXJzaW9u
IGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nl
c3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiksIHdoaWNoIHNoYWxs
CisgICBhY3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2Yg
dGhlIGxpY2Vuc2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6
Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2lmbmRlZiBUWVBFVklTSUJJTElUWVRS
RUVfSAorI2RlZmluZSBUWVBFVklTSUJJTElUWVRSRUVfSAorCisjaW5jbHVkZSA8UXRDb3JlL1FV
cmw+CisjaW5jbHVkZSA8UXRDb3JlL1FIYXNoPgorI2luY2x1ZGUgPFF0Q29yZS9RTXV0ZXg+CisK
K25hbWVzcGFjZSBTb3ByYW5vIHsKK2NsYXNzIE1vZGVsOworfQorCisvKioKKyAqIEJ1aWxkcyBh
IHR5cGUgdHJlZSB0aGF0IGFsbG93cyB0byBjaGVjayB0aGUgbmFvOnVzZXJWaXNpYmxlCisgKiB2
YWx1ZSBmb3IgZWFjaCBleGlzdGluZyB0eXBlLgorICovCitjbGFzcyBUeXBlVmlzaWJpbGl0eVRy
ZWUKK3sKK3B1YmxpYzoKKyAgICBUeXBlVmlzaWJpbGl0eVRyZWUoIFNvcHJhbm86Ok1vZGVsKiBt
b2RlbCApOworICAgIH5UeXBlVmlzaWJpbGl0eVRyZWUoKTsKKworICAgIHZvaWQgcmVidWlsZFRy
ZWUoKTsKKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBzcGVjaWZpZWQgdHlwZSBpcyB2
aXNpYmxlLgorICAgICAqLworICAgIGJvb2wgaXNWaXNpYmxlKCBjb25zdCBRVXJsJiB0eXBlICkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgU29wcmFubzo6TW9kZWwqIG1fbW9kZWw7CisgICAgY2xh
c3MgVHlwZVZpc2liaWxpdHlOb2RlOworICAgIFFIYXNoPFFVcmwsIGJvb2w+IG1fdmlzaWJpbGl0
eUhhc2g7CisgICAgbXV0YWJsZSBRTXV0ZXggbV9tdXRleDsKK307CisKKyNlbmRpZiAvLyBUWVBF
VklTSUJJTElUWVRSRUVfSApJbmRleDogc2VydmljZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL3JlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAx
MjEzOTQwKQorKysgc2VydmljZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgogI2luY2x1ZGUg
Im1vZGVsY29weWpvYi5oIgorI2luY2x1ZGUgImNyYXBweWluZmVyZW5jZXIyLmgiCiAKICNpbmNs
dWRlIDxTb3ByYW5vL0JhY2tlbmQ+CiAjaW5jbHVkZSA8U29wcmFuby9QbHVnaW5NYW5hZ2VyPgpA
QCAtNjksNiArNzAsOSBAQAogewogICAgIGtEZWJ1ZygpIDw8IG1fbmFtZTsKIAorICAgIGRlbGV0
ZSBtX2luZmVyZW5jZXI7CisgICAgbV9pbmZlcmVuY2VyID0gMDsKKwogICAgIGRlbGV0ZSBtX21v
ZGVsQ29weUpvYjsKICAgICBtX21vZGVsQ29weUpvYiA9IDA7CiAKQEAgLTE2NSw5ICsxNjksMTMg
QEAKICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBTb3ByYW5v
OjpVdGlsOjpTaWduYWxDYWNoZU1vZGVsKiBzY20gPSBuZXcgU29wcmFubzo6VXRpbDo6U2lnbmFs
Q2FjaGVNb2RlbCggbV9tb2RlbCApOwogICAgIHNjbS0+c2V0UGFyZW50KHRoaXMpOyAvLyBtZW1v
cnkgbWFuYWdlbWVudAotCiAgICAgc2V0UGFyZW50TW9kZWwoIHNjbSApOwogCisgICAgLy8gY3Jl
YXRlIHRoZSBjcmFwcHkgaW5mZXJlbmNlIG1vZGVsIHdoaWNoIGhhbmRsZXMgcmRmczpzdWJDbGFz
c09mIG9ubHkgLT4gd2Ugb25seSB1c2UgdGhpcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIFJl
c291cmNlVHlwZVRlcm1zCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisgICAgbV9pbmZlcmVuY2VyID0gbmV3IENyYXBweUluZmVyZW5jZXIyKCBzY20gKTsKKyAgICBz
ZXRQYXJlbnRNb2RlbChtX2luZmVyZW5jZXIpOworCiAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0
byBjb252ZXJ0CiAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAg
Ym9vbCBjb252ZXJ0aW5nRGF0YSA9IGZhbHNlOwpAQCAtMzM3LDcgKzM0NSwxOCBAQAogICAgIC8v
IG5lZWRzIHRvIGJlIGFkZHJlc3NlZCBhcyB3ZWxsCiAgICAgc2V0dGluZ3MgPDwgU29wcmFubzo6
QmFja2VuZFNldHRpbmcoICJTZXJ2ZXJUaHJlYWRzIiwgMTAwICk7CiAKKyAgICAvLyBOZXZlciB0
YWtlIG1vcmUgdGhhbiA1IG1pbnV0ZXMgdG8gYW5zd2VyIGEgcXVlcnkgKHRoaXMgaXMgdG8gZmls
dGVyIG91dCBicm9rZW4gcXVlcmllcyBhbmQgYnVncyBpbiBWaXJ0dW9zbydzIHF1ZXJ5IG9wdGlt
aXplcikKKyAgICAvLyB0cnVlZzogV2UgY2Fubm90IGFjdGl2YXRlIHRoaXMgeWV0LiAxLiBWaXJ0
dW9zbyA8IDYuMyBjcmFzaGVzIGFuZCAyLiBldmVuIG9wZW4gY3Vyc29ycyBhcmUgc3ViamVjdCB0
byB0aGUgdGltZW91dCB3aGljaCBpcyByZWFsbHkKKyAgICAvLyAgICAgICAgbm90IHdoYXQgd2Ug
d2FudCEKKy8vICAgIHNldHRpbmdzIDw8IFNvcHJhbm86OkJhY2tlbmRTZXR0aW5nKCAiUXVlcnlU
aW1lb3V0IiwgNSo2MDAwMCApOworCiAgICAgcmV0dXJuIHNldHRpbmdzOwogfQogCit2b2lkIE5l
cG9tdWs6OlJlcG9zaXRvcnk6OnVwZGF0ZUluZmVyZW5jZSgpCit7CisgICAgbV9pbmZlcmVuY2Vy
LT51cGRhdGVJbmZlcmVuY2VJbmRleCgpOworICAgIG1faW5mZXJlbmNlci0+dXBkYXRlQWxsUmVz
b3VyY2VzKCk7Cit9CisKICNpbmNsdWRlICJyZXBvc2l0b3J5Lm1vYyIKSW5kZXg6IHNlcnZpY2Vz
L3N0b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0
b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIuY3BwCShyZXZpc2lvbiAwKQorKysgc2VydmljZXMvc3Rv
cmFnZS9jcmFwcHlpbmZlcmVuY2VyMi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQyIEBA
CisvKgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE5lcG9tdWsgS0RFIHByb2plY3QuCisg
ICBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorCisg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55CisgICBsYXRlciB2ZXJzaW9uIGFjY2Vw
dGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nlc3NvciBh
cHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiksIHdoaWNoIHNoYWxsCisgICBh
Y3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxp
Y2Vuc2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu
Z251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImNyYXBweWluZmVyZW5jZXIyLmgi
CisjaW5jbHVkZSAidHlwZXZpc2liaWxpdHl0cmVlLmgiCisKKyNpbmNsdWRlIDxTb3ByYW5vL1Zv
Y2FidWxhcnkvTlJMPgorI2luY2x1ZGUgPFNvcHJhbm8vVm9jYWJ1bGFyeS9OQU8+CisjaW5jbHVk
ZSA8U29wcmFuby9Wb2NhYnVsYXJ5L1JERj4KKyNpbmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkv
UkRGUz4KKyNpbmNsdWRlIDxTb3ByYW5vL1N0YXRlbWVudD4KKyNpbmNsdWRlIDxTb3ByYW5vL1N0
YXRlbWVudEl0ZXJhdG9yPgorI2luY2x1ZGUgPFNvcHJhbm8vTm9kZT4KKyNpbmNsdWRlIDxTb3By
YW5vL05vZGVJdGVyYXRvcj4KKyNpbmNsdWRlIDxTb3ByYW5vL0dyYXBoPgorI2luY2x1ZGUgPFNv
cHJhbm8vUXVlcnlSZXN1bHRJdGVyYXRvcj4KKworI2luY2x1ZGUgPFF0Q29yZS9RVGltZT4KKyNp
bmNsdWRlIDxRdENvcmUvUU11dGV4PgorI2luY2x1ZGUgPFF0Q29yZS9RTXV0ZXhMb2NrZXI+Cisj
aW5jbHVkZSA8UXRDb3JlL1FUaHJlYWQ+CisKKyNpbmNsdWRlIDxrZGVidWcuaD4KKworCisvKioK
KyAqIFNpbXBsZSBoZWxwZXIgdGhyZWFkIHdoaWNoIHVwZGF0ZXMgdGhlIHN1YmNsYXNzIGFuZCB2
aXNpYmlsaXR5IGluZmVyZW5jZSBvbiBhbGwgcmVzb3VyY2VzCisgKiBpbiB0aGUgZGF0YWJhc2Uu
IFRoaXMgaXMgZG9uZSBpbiBhIHNlcGFyYXRlIHRocmVhZCBzaW5jZSBpdCB0YWtlcyB1cCB0byBo
YWxmIGFuIGhvdXIgdGhlIGZpcnN0IHRpbWUuCisgKi8KK2NsYXNzIENyYXBweUluZmVyZW5jZXIy
OjpVcGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQgOiBwdWJsaWMgUVRocmVhZAoreworcHVibGljOgor
ICAgIFVwZGF0ZUFsbFJlc291cmNlc1RocmVhZCggQ3JhcHB5SW5mZXJlbmNlcjIqIHBhcmVudCAp
CisgICAgICAgIDogUVRocmVhZChwYXJlbnQpLAorICAgICAgICAgIG1fY2FuY2VsZWQoZmFsc2Up
LAorICAgICAgICAgIG1fbW9kZWwocGFyZW50KSB7CisgICAgfQorCisgICAgdm9pZCBjYW5jZWwo
KSB7CisgICAgICAgIGtEZWJ1ZygpOworICAgICAgICBtX2NhbmNlbGVkID0gdHJ1ZTsKKyAgICB9
CisKKyAgICB2b2lkIHJ1bigpIHsKKyAgICAgICAga0RlYnVnKCk7CisgICAgICAgIG1fY2FuY2Vs
ZWQgPSBmYWxzZTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIFFUaW1lIHRpbWVyOworICAgICAg
ICB0aW1lci5zdGFydCgpOworICAgICAgICBpbnQgY250ID0gMDsKKyNlbmRpZgorICAgICAgICAv
LyB1cGRhdGluZyBhbGwgcmVzb3VyY2VzIHRha2VzIGEgbG90IG9mIHRpbWUuIFRodXMsIHdlIHVz
ZSBhbiBvcHRpbWl6YXRpb246IHNpbXBseSBtYWtlIGFsbCBmaWxlcyB2aXNpYmxlCisgICAgICAg
IFFMaXN0PFNvcHJhbm86Ok5vZGU+IHJlc3VsdHM7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAg
IHJlc3VsdHMgPSBtX21vZGVsLT5leGVjdXRlUXVlcnkoIFFTdHJpbmc6OmZyb21MYXRpbjEoInNl
bGVjdCBkaXN0aW5jdCA/ciB3aGVyZSB7ID9yIGEgPGh0dHA6Ly93d3cuc2VtYW50aWNkZXNrdG9w
Lm9yZy9vbnRvbG9naWVzLzIwMDcvMDMvMjIvbmZvI0ZpbGVEYXRhT2JqZWN0PiAuICIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIkZJTFRFUighYmlmOmV4aXN0cygoc2VsZWN0ICgxKSB3aGVyZSB7ID9yICUxID92IC4gfSkp
KSAuIH0gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiTElNSVQgMTAwMCIgKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuYXJnKCBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIFNv
cHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSApICksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1
YWdlU3BhcnFsICkKKyAgICAgICAgICAgICAgICAgICAgLml0ZXJhdGVCaW5kaW5ncygwKS5hbGxF
bGVtZW50cygpOworICAgICAgICAgICAgUV9GT1JFQUNIKCBjb25zdCBTb3ByYW5vOjpOb2RlJiBu
LCByZXN1bHRzICkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICAgICArK2NudDsKKyNl
bmRpZgorICAgICAgICAgICAgICAgIGlmKCBtX2NhbmNlbGVkICkKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgbV9tb2RlbC0+c2V0VmlzaWJpbGl0eSggbi51cmko
KSwgVmlzaWJsZSApOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlKCAhbV9jYW5jZWxl
ZCAmJiAhcmVzdWx0cy5pc0VtcHR5KCkgKTsKKworCisgICAgICAgIC8vIG5vdyB1cGRhdGUgYWxs
IHRoZSByZXN0IG9mIHRoZSByZXNvdXJjZXMKKyAgICAgICAgZG8geworICAgICAgICAgICAgLy8g
Zm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IHdlIG9ubHkgaGFuZGxlIHJlc291cmNlcyBpbiBJ
bnN0YW5jZUJhc2VzLiBUaGUgcmVzdCB3ZSBhbG1vc3QgbmV2ZXIgcXVlcnkgYW55d2F5LgorICAg
ICAgICAgICAgcmVzdWx0cyA9IG1fbW9kZWwtPmV4ZWN1dGVRdWVyeSggUVN0cmluZzo6ZnJvbUxh
dGluMSgic2VsZWN0IGRpc3RpbmN0ID9yIHdoZXJlIHsgZ3JhcGggP2cgeyA/ciBhID90IC4gfSAu
ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIkZJTFRFUig/ZyAhPSAlMSkgLiAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7ID9nIGEgJTIgLiB9
IFVOSU9OIHsgP2cgYSAlMyAuIH0gLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGSUxURVIoIWJpZjpleGlzdHMoKHNl
bGVjdCAoMSkgd2hlcmUgeyA/ciAlNCA/diAuIH0pKSkgLiB9ICIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxJTUlUIDEw
MDAiICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZygg
U29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBtX21vZGVsLT5jcmFwcHlJbmZlcmVuY2VDb250
ZXh0KCkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOUkw6
OkRpc2NhcmRhYmxlSW5zdGFuY2VCYXNlKCkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3By
YW5vOjpWb2NhYnVsYXJ5OjpOUkw6Okluc3RhbmNlQmFzZSgpICksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291cmNl
VG9OMyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpICkgKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6UXVlcnk6OlF1
ZXJ5TGFuZ3VhZ2VTcGFycWwgKQorICAgICAgICAgICAgICAgICAgICAuaXRlcmF0ZUJpbmRpbmdz
KDApLmFsbEVsZW1lbnRzKCk7CisgICAgICAgICAgICBRX0ZPUkVBQ0goIGNvbnN0IFNvcHJhbm86
Ok5vZGUmIG4sIHJlc3VsdHMgKSB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgICAgICsr
Y250OworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYoIG1fY2FuY2VsZWQgKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGJvb2wgaGF2ZVZpc2libGVUeXBl
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgU29wcmFubzo6UXVlcnlSZXN1bHRJdGVyYXRvciBp
dAorICAgICAgICAgICAgICAgICAgICAgICAgPSBtX21vZGVsLT5leGVjdXRlUXVlcnkoIFFTdHJp
bmc6OmZyb21MYXRpbjEoInNlbGVjdCA/dCB3aGVyZSB7IGdyYXBoID9nIHsgJTEgYSA/dCAuIH0g
LiBGSUxURVIoP2chPSUyKSAuIH0iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLmFyZyhTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMobi51cmkoKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNv
cHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyhtX21vZGVsLT5jcmFwcHlJbmZlcmVuY2VDb250ZXh0
KCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNv
cHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsKTsKKyAgICAgICAgICAgICAgICB3aGls
ZSghaGF2ZVZpc2libGVUeXBlICYmICFtX2NhbmNlbGVkICYmIGl0Lm5leHQoKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiggbV9tb2RlbC0+aXNUeXBlVmlzaWJsZShpdFswXS51cmkoKSkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBoYXZlVmlzaWJsZVR5cGUgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fbW9k
ZWwtPnNldFZpc2liaWxpdHkoIG4udXJpKCksIGhhdmVWaXNpYmxlVHlwZSA/IENyYXBweUluZmVy
ZW5jZXIyOjpWaXNpYmxlIDogQ3JhcHB5SW5mZXJlbmNlcjI6Ok5vblZpc2libGUgKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSggIW1fY2FuY2VsZWQgJiYgIXJlc3VsdHMuaXNFbXB0
eSgpICk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGtEZWJ1ZygpIDw8IGNudCA8PCAicmVz
b3VyY2VzIHVwZGF0ZWQuIEVsYXBzZWQ6IiA8PCB0aW1lci5lbGFwc2VkKCkvMTAwMC4wIDw8ICJz
ZWMiOworI2VuZGlmCisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9jYW5jZWxlZDsKKyAg
ICBDcmFwcHlJbmZlcmVuY2VyMiogbV9tb2RlbDsKK307CisKKworY2xhc3MgQ3JhcHB5SW5mZXJl
bmNlcjI6OlByaXZhdGUKK3sKK3B1YmxpYzoKKyAgICBQcml2YXRlKCkKKyAgICAgICAgOiBtX3Vw
ZGF0ZUFsbFJlc291cmNlc1RocmVhZCgwKSB7CisgICAgfQorCisgICAgLy8vIGdldCB0aGUgbGlz
dCBvZiBzdXBlciB0eXBlcyBmb3IgXHAgdHlwZQorICAgIFFTZXQ8UVVybD4gc3VwZXJDbGFzc2Vz
KCBjb25zdCBRVXJsJiB0eXBlICkgY29uc3Q7CisKKyAgICAvLy8gQ2hlY2sgaWYgYSByZXNvdXJj
ZSB3aXRoIHRoZSBzcGVjaWZpZWQgdHlwZXMgaXMgdmlzaWJsZS4KKyAgICBib29sIGlzVmlzaWJs
ZUZyb21UeXBlcyggY29uc3QgUVNldDxRVXJsPiYgdHlwZXMgKSBjb25zdDsKKworICAgIC8vLyBQ
ZXJmb3JtcyBhIHF1ZXJ5IHRvIHJldHJpZXZlIGFsbCB0eXBlcyB0aGF0IHdlcmUgbm90IGFkZGVk
IGJ5IHVzCisgICAgUVNldDxRVXJsPiBxdWVyeVJlc291cmNlVHlwZXMoIGNvbnN0IFFVcmwmIHJl
c291cmNlICkgY29uc3Q7CisKKyAgICAvLy8gdXNlZCB0byBidWlsZCBtX3N1cGVyQ2xhc3NlcyAo
YW5kIG5vdGhpbmcgZWxzZSEpCisgICAgUVNldDxRVXJsPiBidWlsZFN1cGVyQ2xhc3Nlc0hhc2go
IGNvbnN0IFFVcmwmIHR5cGUsIFFTZXQ8UVVybD4mIHZpc2l0ZWRUeXBlcywgY29uc3QgUU11bHRp
SGFzaDxRVXJsLCBRVXJsPiYgcmRmc1N1YkNsYXNzUmVsYXRpb25zICk7CisKKyAgICBRSGFzaDxR
VXJsLCBRU2V0PFFVcmw+ID4gbV9zdXBlckNsYXNzZXM7CisgICAgVHlwZVZpc2liaWxpdHlUcmVl
KiBtX3R5cGVWaXNpYmlsaXR5VHJlZTsKKyAgICBRTXV0ZXggbV9tdXRleDsKKworICAgIFVwZGF0
ZUFsbFJlc291cmNlc1RocmVhZCogbV91cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQ7CisKKyAgICBR
VXJsIG1faW5mZXJlbmNlQ29udGV4dDsKKworICAgIENyYXBweUluZmVyZW5jZXIyKiBxOworfTsK
KworCisKK1FTZXQ8UVVybD4gQ3JhcHB5SW5mZXJlbmNlcjI6OlByaXZhdGU6OnN1cGVyQ2xhc3Nl
cyggY29uc3QgUVVybCYgdHlwZSApIGNvbnN0Cit7CisgICAgUUhhc2g8UVVybCwgUVNldDxRVXJs
PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3VwZXJDbGFzc2VzLmNvbnN0RmluZCh0eXBlKTsK
KyAgICBpZiggaXQgIT0gbV9zdXBlckNsYXNzZXMuY29uc3RFbmQoKSApIHsKKyAgICAgICAgcmV0
dXJuIGl0LnZhbHVlKCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gUVNldDxR
VXJsPigpIDw8IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCk7CisgICAgfQor
fQorCitib29sIENyYXBweUluZmVyZW5jZXIyOjpQcml2YXRlOjppc1Zpc2libGVGcm9tVHlwZXMo
Y29uc3QgUVNldDxRVXJsPiAmdHlwZXMpIGNvbnN0Cit7CisgICAgLy8gV2UgbmVlZCB0byBleHRy
YWN0IHRoZSBsZWFmIHR5cGVzIGluIHRoZSBzdWJncmFwaCB0aGF0IGlzIHR5cGVzCisgICAgLy8g
YXMgdGhvc2UgYXJlIHRoZSB0eXBlcyB0aGF0IGRlZmluZSBpZiB0aGUgcmVzb3VyY2Ugd2lsbCBi
ZSB2aXNpYmxlCisKKyAgICAvLyBUT0RPOiBkbyB0aGUgZm9sbG93aW5nIGluIGFuIGVmZmljaWVu
dCB3YXkKKyAgICAvLyB3ZSByZW1vdmUgYWxsIHN1cGVydHlwZXMgZnJvbSB0aGUgc2V0IG9mIHR5
cGVzIGFuZCBhcmUgbGVmdCB3aXRoIHRoZSBsZWFmIHR5cGVzCisgICAgUVNldDxRVXJsPiBsZWFm
VHlwZXModHlwZXMpOworICAgIFFfRk9SRUFDSChjb25zdCBRVXJsJiB0eXBlLCB0eXBlcykgewor
ICAgICAgICBsZWFmVHlwZXMgLT0gc3VwZXJDbGFzc2VzKHR5cGUpOworICAgICAgICBpZihsZWFm
VHlwZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gaWYg
dGhlcmUgaXMgb25lIGxlYWYgdHlwZSBsZWZ0IHRoYXQgaXMgdmlzaWJsZSB0aGUgcmVzb3VyY2Ug
aXMgdmlzaWJsZSwgdG9vCisgICAgUV9GT1JFQUNIKCBjb25zdCBRVXJsJiB0eXBlLCBsZWFmVHlw
ZXMgKSB7CisgICAgICAgIGlmKCBtX3R5cGVWaXNpYmlsaXR5VHJlZS0+aXNWaXNpYmxlKHR5cGUp
ICkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBubyB2aXNpYmxlIHR5cGUgZm91bmQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1FTZXQ8UVVy
bD4gQ3JhcHB5SW5mZXJlbmNlcjI6OlByaXZhdGU6OnF1ZXJ5UmVzb3VyY2VUeXBlcyhjb25zdCBR
VXJsICZyZXNvdXJjZSkgY29uc3QKK3sKKyAgICBRU2V0PFFVcmw+IHJlc291cmNlVHlwZXM7Cisg
ICAgU29wcmFubzo6UXVlcnlSZXN1bHRJdGVyYXRvciBpdAorICAgICAgICAgICAgPSBxLT5wYXJl
bnRNb2RlbCgpLT5leGVjdXRlUXVlcnkoIFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCA/dCB3
aGVyZSB7IGdyYXBoID9nIHsgJTEgYSA/dCAuIH0gLiBGSUxURVIoP2chPSUyKSAuIH0iKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhTb3ByYW5vOjpO
b2RlOjpyZXNvdXJjZVRvTjMocmVzb3VyY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMobV9pbmZl
cmVuY2VDb250ZXh0KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCk7CisgICAgd2hpbGUoaXQu
bmV4dCgpKSB7CisgICAgICAgIHJlc291cmNlVHlwZXMgPDwgaXRbMF0udXJpKCk7CisgICAgfQor
CisgICAgcmV0dXJuIHJlc291cmNlVHlwZXM7Cit9CisKK1FTZXQ8UVVybD4gQ3JhcHB5SW5mZXJl
bmNlcjI6OlByaXZhdGU6OmJ1aWxkU3VwZXJDbGFzc2VzSGFzaCggY29uc3QgUVVybCYgdHlwZSwg
UVNldDxRVXJsPiYgdmlzaXRlZFR5cGVzLCBjb25zdCBRTXVsdGlIYXNoPFFVcmwsIFFVcmw+JiBy
ZGZzU3ViQ2xhc3NSZWxhdGlvbnMgPSBRTXVsdGlIYXNoPFFVcmwsIFFVcmw+KCkgKQoreworICAg
IFFIYXNoPFFVcmwsIFFTZXQ8UVVybD4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N1cGVyQ2xh
c3Nlcy5jb25zdEZpbmQodHlwZSk7CisgICAgaWYoIGl0ID09IG1fc3VwZXJDbGFzc2VzLmNvbnN0
RW5kKCkgKSB7CisgICAgICAgIFFTZXQ8UVVybD4gc3VwZXJUeXBlczsKKyAgICAgICAgZm9yKFFN
dWx0aUhhc2g8UVVybCwgUVVybD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmRmc1N1YkNsYXNzUmVs
YXRpb25zLmNvbnN0RmluZCh0eXBlKTsKKyAgICAgICAgICAgIGl0ICE9IHJkZnNTdWJDbGFzc1Jl
bGF0aW9ucy5jb25zdEVuZCgpICYmIGl0LmtleSgpID09IHR5cGU7ICsraXQpIHsKKyAgICAgICAg
ICAgIC8vIGF2b2lkIGVuZGxlc3MgbG9vcHMgaW4gY2FzZSB3ZSBoYXZlIGNpcmN1bGFyIGhpZXJh
cmNoaWVzCisgICAgICAgICAgICBpZiggIXZpc2l0ZWRUeXBlcy5jb250YWlucyggaXQudmFsdWUo
KSApICkgeworICAgICAgICAgICAgICAgIHZpc2l0ZWRUeXBlcyA8PCBpdC52YWx1ZSgpOworICAg
ICAgICAgICAgICAgIHN1cGVyVHlwZXMgPDwgaXQudmFsdWUoKTsKKyAgICAgICAgICAgICAgICBz
dXBlclR5cGVzICs9IGJ1aWxkU3VwZXJDbGFzc2VzSGFzaCggaXQudmFsdWUoKSwgdmlzaXRlZFR5
cGVzLCByZGZzU3ViQ2xhc3NSZWxhdGlvbnMgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBtX3N1cGVyQ2xhc3Nlcy5pbnNlcnQoIHR5cGUsIHN1cGVyVHlwZXMgKTsKKyAgICAg
ICAgcmV0dXJuIHN1cGVyVHlwZXM7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4g
aXQudmFsdWUoKTsKKyAgICB9Cit9CisKK0NyYXBweUluZmVyZW5jZXIyOjpDcmFwcHlJbmZlcmVu
Y2VyMihTb3ByYW5vOjpNb2RlbCogcGFyZW50KQorICAgIDogU29wcmFubzo6RmlsdGVyTW9kZWwo
cGFyZW50KSwKKyAgICAgIGQobmV3IFByaXZhdGUoKSkKK3sKKyAgICBkLT5xID0gdGhpczsKKyAg
ICBkLT5tX2luZmVyZW5jZUNvbnRleHQgPSBRVXJsOjpmcm9tRW5jb2RlZCgidXJuOmNyYXBweWlu
ZmVyZW5jZTI6aW5mZXJyZWR0cmlwbGVzIik7CisgICAgZC0+bV90eXBlVmlzaWJpbGl0eVRyZWUg
PSBuZXcgVHlwZVZpc2liaWxpdHlUcmVlKHRoaXMpOworICAgIGlmICggcGFyZW50ICkKKyAgICAg
ICAgdXBkYXRlSW5mZXJlbmNlSW5kZXgoKTsKK30KKworQ3JhcHB5SW5mZXJlbmNlcjI6On5DcmFw
cHlJbmZlcmVuY2VyMigpCit7CisgICAgaWYoIGQtPm1fdXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFk
ICkgeworICAgICAgICBkLT5tX3VwZGF0ZUFsbFJlc291cmNlc1RocmVhZC0+Y2FuY2VsKCk7Cisg
ICAgICAgIGQtPm1fdXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkLT53YWl0KCk7CisgICAgfQorICAg
IGRlbGV0ZSBkOworfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyOjpzZXRQYXJlbnRNb2RlbChT
b3ByYW5vOjpNb2RlbCAqbW9kZWwpCit7CisgICAgRmlsdGVyTW9kZWw6OnNldFBhcmVudE1vZGVs
KCBtb2RlbCApOworICAgIHVwZGF0ZUluZmVyZW5jZUluZGV4KCk7Cit9CisKK1NvcHJhbm86OkVy
cm9yOjpFcnJvckNvZGUgQ3JhcHB5SW5mZXJlbmNlcjI6OmFkZFN0YXRlbWVudChjb25zdCBTb3By
YW5vOjpTdGF0ZW1lbnQgJnN0YXRlbWVudCkKK3sKKyAgICBpZiggc3RhdGVtZW50LmNvbnRleHQo
KSA9PSBkLT5tX2luZmVyZW5jZUNvbnRleHQgKSB7CisjaWZkZWYgTkRFQlVHCisgICAgICAgIGtE
ZWJ1ZygpIDw8ICJObyBhY3Rpb25zIGFyZSBhbGxvd2VkIG9uIHRoZSBjcmFwcHkgaW5mZXJlbmNl
ciBjb250ZXh0IGluIHJlbGVhc2UgbW9kZSEiIDw8IHN0YXRlbWVudDsKKyAgICAgICAgcmV0dXJu
IFNvcHJhbm86OkVycm9yOjpFcnJvckludmFsaWRBcmd1bWVudDsKKyNlbHNlCisgICAgICAgIGtX
YXJuaW5nKCkgPDwgIldBUk5JTkchISEhISEhISEhISBBZGRpbmcgc3RhdGVtZW50IGluIGNyYXBw
eSBpbmZlcmVuY2VyIGNvbnRleHQhISEhISEhISEhISEiIDw8IHN0YXRlbWVudDsKKyNlbmRpZgor
ICAgIH0KKworICAgIFFNdXRleExvY2tlciBsb2NrKCAmZC0+bV9tdXRleCApOworCisgICAgU29w
cmFubzo6RXJyb3I6OkVycm9yQ29kZSByID0gcGFyZW50TW9kZWwoKS0+YWRkU3RhdGVtZW50KCBz
dGF0ZW1lbnQgKTsKKyAgICBpZiggciA9PSBTb3ByYW5vOjpFcnJvcjo6RXJyb3JOb25lICkgewor
ICAgICAgICAvLworICAgICAgICAvLyBIYW5kbGUgdGhlIGluZmVyZW5jZQorICAgICAgICAvLwor
ICAgICAgICBpZiAoIHN0YXRlbWVudC5zdWJqZWN0KCkuaXNSZXNvdXJjZSgpICYmCisgICAgICAg
ICAgICAgICAgc3RhdGVtZW50Lm9iamVjdCgpLmlzUmVzb3VyY2UoKSAmJgorICAgICAgICAgICAg
ICAgIHN0YXRlbWVudC5wcmVkaWNhdGUoKSA9PSBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5
cGUoKSApIHsKKyAgICAgICAgICAgIGFkZEluZmVyZW5jZVN0YXRlbWVudHMoIHN0YXRlbWVudC5z
dWJqZWN0KCkudXJpKCksIHN0YXRlbWVudC5vYmplY3QoKS51cmkoKSApOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHI7Cit9CisKK1NvcHJhbm86OkVycm9yOjpFcnJvckNvZGUgQ3Jh
cHB5SW5mZXJlbmNlcjI6OnJlbW92ZVN0YXRlbWVudChjb25zdCBTb3ByYW5vOjpTdGF0ZW1lbnQg
JnN0YXRlbWVudCkKK3sKKyAgICBpZiggc3RhdGVtZW50LmNvbnRleHQoKSA9PSBkLT5tX2luZmVy
ZW5jZUNvbnRleHQgKSB7CisjaWZkZWYgTkRFQlVHCisgICAgICAgIGtEZWJ1ZygpIDw8ICJObyBh
Y3Rpb25zIGFyZSBhbGxvd2VkIG9uIHRoZSBjcmFwcHkgaW5mZXJlbmNlciBjb250ZXh0IGluIHJl
bGVhc2UgbW9kZSEiIDw8IHN0YXRlbWVudDsKKyAgICAgICAgcmV0dXJuIFNvcHJhbm86OkVycm9y
OjpFcnJvckludmFsaWRBcmd1bWVudDsKKyNlbHNlCisgICAgICAgIGtXYXJuaW5nKCkgPDwgIldB
Uk5JTkchISEhISEhISEhISBSZW1vdmluZyBzdGF0ZW1lbnQgZnJvbSBjcmFwcHkgaW5mZXJlbmNl
ciBjb250ZXh0ISEhISEhISEhISEhIiA8PCBzdGF0ZW1lbnQ7CisjZW5kaWYKKyAgICB9CisKKyAg
ICBRTXV0ZXhMb2NrZXIgbG9jayggJmQtPm1fbXV0ZXggKTsKKworICAgIFNvcHJhbm86OkVycm9y
OjpFcnJvckNvZGUgZXJyb3IgPSBwYXJlbnRNb2RlbCgpLT5yZW1vdmVTdGF0ZW1lbnQoc3RhdGVt
ZW50KTsKKyAgICBpZiggZXJyb3IgPT0gU29wcmFubzo6RXJyb3I6OkVycm9yTm9uZSApIHsKKyAg
ICAgICAgaWYgKCBzdGF0ZW1lbnQuaXNWYWxpZCgpICYmCisgICAgICAgICAgICAgICAgc3RhdGVt
ZW50LnN1YmplY3QoKS5pc1Jlc291cmNlKCkgJiYKKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQu
b2JqZWN0KCkuaXNSZXNvdXJjZSgpICYmCisgICAgICAgICAgICAgICAgc3RhdGVtZW50LnByZWRp
Y2F0ZSgpID09IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpICkgeworICAgICAgICAg
ICAgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggc3RhdGVtZW50LnN1YmplY3QoKS51cmkoKSwg
c3RhdGVtZW50Lm9iamVjdCgpLnVyaSgpICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFNv
cHJhbm86OkVycm9yOjpFcnJvck5vbmU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1
cm4gZXJyb3I7CisgICAgfQorfQorCitTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIENyYXBweUlu
ZmVyZW5jZXIyOjpyZW1vdmVBbGxTdGF0ZW1lbnRzKGNvbnN0IFNvcHJhbm86OlN0YXRlbWVudCAm
c3RhdGVtZW50KQoreworICAgIGlmKCBzdGF0ZW1lbnQuY29udGV4dCgpID09IGQtPm1faW5mZXJl
bmNlQ29udGV4dCApIHsKKyNpZmRlZiBOREVCVUcKKyAgICAgICAga0RlYnVnKCkgPDwgIk5vIGFj
dGlvbnMgYXJlIGFsbG93ZWQgb24gdGhlIGNyYXBweSBpbmZlcmVuY2VyIGNvbnRleHQgaW4gcmVs
ZWFzZSBtb2RlISIgPDwgc3RhdGVtZW50OworICAgICAgICByZXR1cm4gU29wcmFubzo6RXJyb3I6
OkVycm9ySW52YWxpZEFyZ3VtZW50OworI2Vsc2UKKyAgICAgICAga1dhcm5pbmcoKSA8PCAiV0FS
TklORyEhISEhISEhISEhIFJlbW92aW5nIHN0YXRlbWVudHMgZnJvbSBjcmFwcHkgaW5mZXJlbmNl
ciBjb250ZXh0ISEhISEhISEhISEhIiA8PCBzdGF0ZW1lbnQ7CisjZW5kaWYKKyAgICB9CisKKyAg
ICBRTXV0ZXhMb2NrZXIgbG9jayggJmQtPm1fbXV0ZXggKTsKKworICAgIC8vCisgICAgLy8gVGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIG5lZWQgdG8gYmUgbWV0IGluIG9yZGVyIGZvciB1cyB0byBu
ZWVkIHRvIGNoZWNrIGZvciB0eXBlcworICAgIC8vIDEuIE9iamVjdCBvciBjb250ZXh0IG5lZWQg
dG8gYmUgdmFsaWQuIE90aGVyd2lzZSBvdXIgdHlwZXMgYXJlIHJlbW92ZWQgYW55d2F5CisgICAg
Ly8gMi4gT2JqZWN0IG5lZWRzIHRvIGJlIGVtcHR5IG9yIGEgcmVzb3VyY2UuIExpdGVyYWxzIGFy
ZSBuZXZlciB0eXBlcworICAgIC8vIDMuIFByZWRpY2F0ZSBuZWVkcyB0byBiZSBlbXB0eSBvciBy
ZGY6dHlwZS4gT3RoZXJ3aXNlIHRoZSBjYWxsIGlzIG5vdCByZWxhdGVkIHRvIHR5cGVzLgorICAg
IC8vCisgICAgaWYgKCBzdGF0ZW1lbnQuY29udGV4dCgpICE9IGQtPm1faW5mZXJlbmNlQ29udGV4
dCAmJgorICAgICAgICAgICAgKCAoIHN0YXRlbWVudC5wcmVkaWNhdGUoKS5pc0VtcHR5KCkgfHwK
KyAgICAgICAgICAgICAgIHN0YXRlbWVudC5wcmVkaWNhdGUoKSA9PSBTb3ByYW5vOjpWb2NhYnVs
YXJ5OjpSREY6OnR5cGUoKSApICYmCisgICAgICAgICAgICAgKCBzdGF0ZW1lbnQub2JqZWN0KCku
aXNFbXB0eSgpIHx8CisgICAgICAgICAgICAgIHN0YXRlbWVudC5vYmplY3QoKS5pc1Jlc291cmNl
KCkgKSAmJgorICAgICAgICAgICAgICggc3RhdGVtZW50Lm9iamVjdCgpLmlzVmFsaWQoKSB8fAor
ICAgICAgICAgICAgICBzdGF0ZW1lbnQuY29udGV4dCgpLmlzVmFsaWQoKSApICkgKSB7CisgICAg
ICAgIC8vCisgICAgICAgIC8vIElmIGJvdGggcmVzb3VyY2UgYW5kIHR5cGUgYXJlIGRlZmluZWQg
d2UgY2FuIHNpbXBseSBjYWxsIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoKSBvbiB0aGVtCisg
ICAgICAgIC8vCisgICAgICAgIGlmKCBzdGF0ZW1lbnQuc3ViamVjdCgpLmlzUmVzb3VyY2UoKSAm
JgorICAgICAgICAgICAgICAgIHN0YXRlbWVudC5vYmplY3QoKS5pc1Jlc291cmNlKCkgKSB7Cisg
ICAgICAgICAgICBjb25zdCBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIGVycm9yID0gcGFyZW50
TW9kZWwoKS0+cmVtb3ZlQWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQpOworICAgICAgICAgICAgaWYo
IGVycm9yID09IFNvcHJhbm86OkVycm9yOjpFcnJvck5vbmUgKSB7CisgICAgICAgICAgICAgICAg
cmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggc3RhdGVtZW50LnN1YmplY3QoKS51cmkoKSwgc3Rh
dGVtZW50Lm9iamVjdCgpLnVyaSgpICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBpZiBvbmx5IHRo
ZSB0eXBlIGlzIHVuZGVmaW5lZCB3ZSBnZXQgdGhlIHR5cGVzIGFuZCB0aGVuIGNhbGwgcmVtb3Zl
SW5mZXJlbmNlU3RhdGVtZW50cygpLiBUaGlzIGF2b2lkcworICAgICAgICAvLyBwZXJmb3JtaW5n
IHRoZSBxdWVyeSBpbiB0aGUgbGF0dGVyIG1ldGhvZCBvdmVyIGFuZCBvdmVyIGZvciBlYWNoIHR5
cGUKKyAgICAgICAgLy8KKyAgICAgICAgZWxzZSBpZiggc3RhdGVtZW50LnN1YmplY3QoKS5pc1Zh
bGlkKCkgKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBmaXJz
dCBnZXQgdGhlIHR5cGVzIHRvIHJlbW92ZSwgdGhlbiByZW1vdmUgdGhlIHN0YXRlbWVudHMsIGFu
ZCBvbmx5IHRoZW4gY2FsbAorICAgICAgICAgICAgLy8gcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50
cygpLiBUaGlzIGlzIHNpbmNlIHRoZSBsYXR0ZXIgbWFrZXMgdXNlIG9mIHRoZSB0eXBlcyBpbiB0
aGUgbW9kZWwKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBRU3RyaW5nIHF1ZXJ5OworICAg
ICAgICAgICAgaWYoIHN0YXRlbWVudC5jb250ZXh0KCkuaXNWYWxpZCgpICkgeworICAgICAgICAg
ICAgICAgIHF1ZXJ5ID0gUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0ID90IHdoZXJlIHsgZ3Jh
cGggJTIgeyAlMSBhID90IC4gfSAuIH0iKQorICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhz
dGF0ZW1lbnQuc3ViamVjdCgpLnRvTjMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGVtZW50LmNvbnRleHQoKS50b04zKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgcXVlcnkgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxl
Y3QgP3Qgd2hlcmUgeyBncmFwaCA/ZyB7ICUxIGEgP3QgLiB9IC4gRklMVEVSKD9nIT0lMikgLiB9
IikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoc3RhdGVtZW50LnN1YmplY3QoKS50b04z
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291cmNl
VG9OMyhjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNvbnN0IFFMaXN0PFNvcHJhbm86Ok5vZGU+IHR5cGVzID0gZXhlY3V0ZVF1ZXJ5KCBxdWVy
eSwgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwgKS5pdGVyYXRlQmluZGluZ3Mo
MCkuYWxsTm9kZXMoKTsKKyAgICAgICAgICAgIGNvbnN0IFNvcHJhbm86OkVycm9yOjpFcnJvckNv
ZGUgZXJyb3IgPSBwYXJlbnRNb2RlbCgpLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHN0YXRlbWVudCk7
CisgICAgICAgICAgICBpZiggZXJyb3IgPT0gU29wcmFubzo6RXJyb3I6OkVycm9yTm9uZSApIHsK
KyAgICAgICAgICAgICAgICByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCBzdGF0ZW1lbnQuc3Vi
amVjdCgpLnVyaSgpLCB0eXBlcyApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IGVycm9yOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhlIHN1Ympl
Y3QgaXMgbm90IGRlZmluZWQgYnV0IHRoZSB0eXBlIGlzIHdlIG5lZWQgdG8gdXBkYXRlIHNldmVy
YWwgcmVzb3VyY2VzLiBUaGVyZSBpcyBubyB3YXkgYXJvdW5kCisgICAgICAgIC8vIGNhbGxpbmcg
cmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cygpIGZvciBlYWNoIHJlc291cmNlLgorICAgICAgICAv
LworICAgICAgICBlbHNlIGlmKCBzdGF0ZW1lbnQub2JqZWN0KCkuaXNWYWxpZCgpICkgeworICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZ2V0IHRoZSByZXNvdXJjZXMg
YmVmb3JlIGFjdHVhbGx5IHJlbW92aW5nIHRoZSBzdGF0ZW1lbnRzIHNpbmNlIG90aGVyd2lzZSB3
ZSBtaWdodCBtaXNzIHRoZW0KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBRU3RyaW5nIHF1
ZXJ5OworICAgICAgICAgICAgaWYoIHN0YXRlbWVudC5jb250ZXh0KCkuaXNWYWxpZCgpICkgewor
ICAgICAgICAgICAgICAgIHF1ZXJ5ID0gUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0ID9yIHdo
ZXJlIHsgZ3JhcGggJTIgeyA/ciBhICUxIC4gfSAuIH0iKQorICAgICAgICAgICAgICAgICAgICAg
ICAgLmFyZyhzdGF0ZW1lbnQub2JqZWN0KCkudG9OMygpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZW1lbnQuY29udGV4dCgpLnRvTjMoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBxdWVyeSA9IFFTdHJpbmc6OmZyb21MYXRp
bjEoInNlbGVjdCA/ciB3aGVyZSB7IGdyYXBoID9nIHsgP3IgYSAlMSAuIH0gLiBGSUxURVIoP2ch
PSUyKSAuIH0iKQorICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhzdGF0ZW1lbnQub2JqZWN0
KCkudG9OMygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpy
ZXNvdXJjZVRvTjMoY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjb25zdCBRTGlzdDxTb3ByYW5vOjpOb2RlPiByZXNvdXJjZXMgPSBleGVjdXRl
UXVlcnkoIHF1ZXJ5LCBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApLml0ZXJh
dGVCaW5kaW5ncygwKS5hbGxOb2RlcygpOworICAgICAgICAgICAgY29uc3QgU29wcmFubzo6RXJy
b3I6OkVycm9yQ29kZSBlcnJvciA9IHBhcmVudE1vZGVsKCktPnJlbW92ZUFsbFN0YXRlbWVudHMo
c3RhdGVtZW50KTsKKyAgICAgICAgICAgIGlmKCBlcnJvciA9PSBTb3ByYW5vOjpFcnJvcjo6RXJy
b3JOb25lICkgeworICAgICAgICAgICAgICAgIFFfRk9SRUFDSCggY29uc3QgU29wcmFubzo6Tm9k
ZSYgcmVzLCByZXNvdXJjZXMgKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUluZmVyZW5j
ZVN0YXRlbWVudHMoIHJlcy51cmkoKSwgc3RhdGVtZW50Lm9iamVjdCgpLnVyaSgpICk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGVycm9yOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTmVpdGhlciBzdWJqZWN0IG5vciBv
YmplY3QgYXJlIGRlZmluZWQKKyAgICAgICAgLy8KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBRSGFzaDxRVXJsLCBRTGlzdDxRVXJsPiA+IHJlc1R5cGVIYXNoOworICAgICAgICAgICAgUVN0
cmluZyBxdWVyeTsKKyAgICAgICAgICAgIGlmKCBzdGF0ZW1lbnQuY29udGV4dCgpLmlzVmFsaWQo
KSApIHsKKyAgICAgICAgICAgICAgICBxdWVyeSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVj
dCBkaXN0aW5jdCA/ciA/dCB3aGVyZSB7IGdyYXBoICUxIHsgP3IgYSA/dCAuIH0gLiB9IikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC5hcmcoc3RhdGVtZW50LmNvbnRleHQoKS50b04zKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcXVlcnkg
PSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgZGlzdGluY3QgP3IgP3Qgd2hlcmUgeyBncmFw
aCA/ZyB7ID9yIGEgP3QgLiB9IC4gRklMVEVSKD9nIT0lMSkgLiB9IikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC5hcmcoU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKGNyYXBweUluZmVyZW5j
ZUNvbnRleHQoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU29wcmFubzo6UXVlcnlS
ZXN1bHRJdGVyYXRvciBpdCA9IHBhcmVudE1vZGVsKCktPmV4ZWN1dGVRdWVyeSggcXVlcnksIFNv
cHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsICk7CisgICAgICAgICAgICB3aGlsZSgg
aXQubmV4dCgpICkgeworICAgICAgICAgICAgICAgIHJlc1R5cGVIYXNoW2l0WyJyIl0udXJpKCld
LmFwcGVuZCggaXRbInQiXS51cmkoKSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29u
c3QgU29wcmFubzo6RXJyb3I6OkVycm9yQ29kZSBlcnJvciA9IHBhcmVudE1vZGVsKCktPnJlbW92
ZUFsbFN0YXRlbWVudHMoc3RhdGVtZW50KTsKKyAgICAgICAgICAgIGlmKCBlcnJvciA9PSBTb3By
YW5vOjpFcnJvcjo6RXJyb3JOb25lICkgeworICAgICAgICAgICAgICAgIFFIYXNoPFFVcmwsIFFM
aXN0PFFVcmw+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHJlc1R5cGVIYXNoLmNvbnN0RW5kKCk7
CisgICAgICAgICAgICAgICAgZm9yKCBRSGFzaDxRVXJsLCBRTGlzdDxRVXJsPiA+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IHJlc1R5cGVIYXNoLmNvbnN0QmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0ICkg
eworICAgICAgICAgICAgICAgICAgICByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCBpdC5rZXko
KSwgaXQudmFsdWUoKSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAg
ICAgcmV0dXJuIHBhcmVudE1vZGVsKCktPnJlbW92ZUFsbFN0YXRlbWVudHMoc3RhdGVtZW50KTsK
KyAgICB9Cit9CisKK1FVcmwgQ3JhcHB5SW5mZXJlbmNlcjI6OmNyYXBweUluZmVyZW5jZUNvbnRl
eHQoKSBjb25zdAoreworICAgIHJldHVybiBkLT5tX2luZmVyZW5jZUNvbnRleHQ7Cit9CisKK3Zv
aWQgQ3JhcHB5SW5mZXJlbmNlcjI6OnVwZGF0ZUluZmVyZW5jZUluZGV4KCkKK3sKKyAgICBrRGVi
dWcoKTsKKworICAgIFFNdXRleExvY2tlciBsb2NrKCAmZC0+bV9tdXRleCApOworCisgICAgLy8g
QnVpbGQgc3VwZXJjbGFzc2VzIGhhc2gKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAvLyBjbGVhciBjYWNoZQorICAgIGQtPm1fc3Vw
ZXJDbGFzc2VzLmNsZWFyKCk7CisKKyAgICAvLyBjYWNoZSBzdWJDbGFzc09mIHJlbGF0aW9ucyAo
b25seSB0aGUgb3JpZ2luYWwgb25lcykKKyAgICBRTXVsdGlIYXNoPFFVcmwsIFFVcmw+IHJkZnNT
dWJDbGFzc1JlbGF0aW9uczsKKyAgICBTb3ByYW5vOjpRdWVyeVJlc3VsdEl0ZXJhdG9yIGl0ID0g
ZXhlY3V0ZVF1ZXJ5KCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgP3ggP3kgd2hlcmUgeyBn
cmFwaCA/ZyB7ID94ICUxID95IC4gfSAuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGSUxURVIoP2cgIT0g
PHVybjpjcmFwcHlpbmZlcmVuY2U6aW5mZXJyZWR0cmlwbGVzPikgLiAiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiRklMVEVSKD94IT0/eSkgLiB9IiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLmFyZyggU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCkgKSApLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlF1ZXJ5OjpR
dWVyeUxhbmd1YWdlU3BhcnFsICk7CisgICAgd2hpbGUgKCBpdC5uZXh0KCkgKSB7CisgICAgICAg
IHJkZnNTdWJDbGFzc1JlbGF0aW9ucy5pbnNlcnQoIGl0WyJ4Il0udXJpKCksIGl0WyJ5Il0udXJp
KCkgKTsKKyAgICB9CisKKyAgICAvLyBjb21wbGV0ZSB0aGUgbWFwIG9mIHN1cGVyIGNsYXNzZXMK
KyAgICBRX0ZPUkVBQ0goIGNvbnN0IFFVcmwmIHR5cGUsIHJkZnNTdWJDbGFzc1JlbGF0aW9ucy5r
ZXlzKCkgKSB7CisgICAgICAgIFFTZXQ8UVVybD4gdmlzaXRlZENsYXNzZXM7CisgICAgICAgIGQt
PmJ1aWxkU3VwZXJDbGFzc2VzSGFzaCggdHlwZSwgdmlzaXRlZENsYXNzZXMsIHJkZnNTdWJDbGFz
c1JlbGF0aW9ucyApOworICAgIH0KKworICAgIC8vIGdldCB0aGUgY2xhc3NlcyB0aGF0IGRvIG5v
dCBoYXZlIGFueSBwYXJlbnQgY2xhc3MKKyAgICBpdCA9IGV4ZWN1dGVRdWVyeSggUVN0cmluZzo6
ZnJvbUxhdGluMSgic2VsZWN0ID9jIHdoZXJlIHsgP2MgYSAlMSAuIE9QVElPTkFMIHsgP2MgJTIg
P3AgLiB9IC4gRklMVEVSKCFCT1VORCg/cCkpIC4gfSIgKQorICAgICAgICAgICAgICAgICAgICAg
IC5hcmcoIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGUzo6Q2xhc3MoKSApICkKKyAgICAgICAgICAgICAgICAgICAgICAuYXJnKCBTb3ByYW5vOjpO
b2RlOjpyZXNvdXJjZVRvTjMoIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2Yo
KSApICksCisgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3Vh
Z2VTcGFycWwgKTsKKyAgICB3aGlsZSAoIGl0Lm5leHQoKSApIHsKKyAgICAgICAgZC0+bV9zdXBl
ckNsYXNzZXMuaW5zZXJ0KCBpdFsiYyJdLnVyaSgpLCBRU2V0PFFVcmw+KCkgKTsKKyAgICB9CisK
KyAgICAvLyBhZGQgcmRmczpSZXNvdXJjZSBhcyBwYXJlbnQgZm9yIGFsbCBjbGFzc2VzCisgICAg
UU11dGFibGVIYXNoSXRlcmF0b3I8UVVybCwgUVNldDxRVXJsPiA+IHJkZnNSZXNJdCggZC0+bV9z
dXBlckNsYXNzZXMgKTsKKyAgICB3aGlsZSggcmRmc1Jlc0l0Lmhhc05leHQoKSApIHsKKyAgICAg
ICAgcmRmc1Jlc0l0Lm5leHQoKTsKKyAgICAgICAgcmRmc1Jlc0l0LnZhbHVlKCkuaW5zZXJ0KFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpOworICAgIH0KKworICAgIC8vIEJ1
aWxkIHZpc2liaWxpdHkgdHJlZQorICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KKyAgICBkLT5tX3R5cGVWaXNpYmlsaXR5VHJlZS0+cmVidWlsZFRy
ZWUoKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBjb3VudCBmb3IgZGVidWdnaW5nCisgICAg
aW50IGNudCA9IDA7CisgICAgZm9yKCBRSGFzaDxRVXJsLCBRU2V0PFFVcmw+ID46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gZC0+bV9zdXBlckNsYXNzZXMuY29uc3RCZWdpbigpOworICAgICAgICAgaXQg
IT0gZC0+bV9zdXBlckNsYXNzZXMuY29uc3RFbmQoKTsgKytpdCApIHsKKyAgICAgICAga0RlYnVn
KCkgPDwgaXQua2V5KCkgPDwgIi0+IiA8PCBpdC52YWx1ZSgpOworICAgICAgICBjbnQgKz0gaXQu
dmFsdWUoKS5jb3VudCgpOworICAgIH0KKyAgICBrRGVidWcoKSA8PCAiTnVtYmVyIG9mIGNsYXNz
ZXM6ICAgICAgICAgICAiIDw8IGQtPm1fc3VwZXJDbGFzc2VzLmNvdW50KCk7CisgICAga0RlYnVn
KCkgPDwgIk51bWJlciBvZiBzdWJjbGFzcyByZWxhdGlvbnM6IiA8PCBjbnQ7CisjZW5kaWYKK30K
Kwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMjo6dXBkYXRlQWxsUmVzb3VyY2VzKCkKK3sKKyAgICBr
RGVidWcoKTsKKyAgICBpZiggIWQtPm1fdXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkICkgeworICAg
ICAgICBkLT5tX3VwZGF0ZUFsbFJlc291cmNlc1RocmVhZCA9IG5ldyBVcGRhdGVBbGxSZXNvdXJj
ZXNUaHJlYWQodGhpcyk7CisgICAgICAgIGNvbm5lY3QoZC0+bV91cGRhdGVBbGxSZXNvdXJjZXNU
aHJlYWQsIFNJR05BTChmaW5pc2hlZCgpKSwgdGhpcywgU0lHTkFMKGFsbFJlc291cmNlc1VwZGF0
ZWQoKSkpOworICAgIH0KKyAgICBkLT5tX3VwZGF0ZUFsbFJlc291cmNlc1RocmVhZC0+c3RhcnQo
KTsKK30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMjo6YWRkSW5mZXJlbmNlU3RhdGVtZW50cygg
Y29uc3QgUVVybCYgcmVzb3VyY2UsIGNvbnN0IFFVcmwmIHR5cGUgKQoreworICAgIHJldHVybiBh
ZGRJbmZlcmVuY2VTdGF0ZW1lbnRzKCByZXNvdXJjZSwgUVNldDxRVXJsPigpIDw8IHR5cGUgKTsK
K30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMjo6YWRkSW5mZXJlbmNlU3RhdGVtZW50cyggY29u
c3QgUVVybCYgcmVzb3VyY2UsIGNvbnN0IFFTZXQ8UVVybD4mIHR5cGVzICkKK3sKKyAgICAvLyBh
ZGQgbWlzc2luZyB0eXBlcworICAgIGJvb2wgaGF2ZVZpc2libGVUeXBlID0gZmFsc2U7CisgICAg
UVNldDxRVXJsPiBzdXBlclR5cGVzOworICAgIFFfRk9SRUFDSCggY29uc3QgUVVybCYgdHlwZSwg
dHlwZXMgKSB7CisgICAgICAgIHN1cGVyVHlwZXMgKz0gZC0+c3VwZXJDbGFzc2VzKHR5cGUpOwor
ICAgICAgICBpZiggIWhhdmVWaXNpYmxlVHlwZSAmJiBkLT5tX3R5cGVWaXNpYmlsaXR5VHJlZS0+
aXNWaXNpYmxlKHR5cGUpICkKKyAgICAgICAgICAgIGhhdmVWaXNpYmxlVHlwZSA9IHRydWU7Cisg
ICAgfQorICAgIFFTZXQ8UVVybD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN1cGVyVHlwZXMuY29u
c3RFbmQoKTsKKyAgICBmb3IoIFFTZXQ8UVVybD46OmNvbnN0X2l0ZXJhdG9yIHR5cGVJdCA9IHN1
cGVyVHlwZXMuY29uc3RCZWdpbigpOyB0eXBlSXQgIT0gZW5kOyArK3R5cGVJdCApIHsKKyAgICAg
ICAgcGFyZW50TW9kZWwoKS0+YWRkU3RhdGVtZW50KHJlc291cmNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdHlwZUl0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpKTsKKyAgICB9
CisKKyAgICAvLyB0aGUgdmlzaWJpbGl0eSBjYW4gb25seSBjaGFuZ2UgaWYgd2UgYWRkIGEgdmlz
aWJsZSB0eXBlCisgICAgaWYoIGhhdmVWaXNpYmxlVHlwZSApIHsKKyAgICAgICAgc2V0VmlzaWJp
bGl0eSggcmVzb3VyY2UsIFZpc2libGUgKTsKKyAgICB9Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJl
bmNlcjI6OnJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoY29uc3QgUVVybCAmcmVzb3VyY2UsIGNv
bnN0IFFVcmwgJnR5cGUpCit7CisgICAgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggcmVzb3Vy
Y2UsIFFMaXN0PFFVcmw+KCkgPDwgdHlwZSApOworfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIy
OjpyZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3Qg
UUxpc3Q8U29wcmFubzo6Tm9kZT4mIHR5cGVzICkKK3sKKyAgICBRTGlzdDxRVXJsPiB1cmlzOwor
ICAgIFFfRk9SRUFDSCggY29uc3QgU29wcmFubzo6Tm9kZSYgbm9kZSwgdHlwZXMgKQorICAgICAg
ICB1cmlzIDw8IG5vZGUudXJpKCk7CisgICAgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggcmVz
b3VyY2UsIHVyaXMgKTsKK30KKworLy8gQWx3YXlzIGNhbGxlZCAqYWZ0ZXIqIHJlbW92aW5nIHRo
ZSBhY3R1YWwgc3RhdGVtZW50cwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMjo6cmVtb3ZlSW5mZXJl
bmNlU3RhdGVtZW50cyhjb25zdCBRVXJsICZyZXNvdXJjZSwgY29uc3QgUUxpc3Q8UVVybD4gJnR5
cGVzKQoreworICAgIC8vIHdlIGNhbm5vdCBzaW1wbHkgcmVtb3ZlIGFsbCBzdXBlciB0eXBlcyBz
aW5jZSB0aGUgcmVzb3VyY2UgbWlnaHQgc3RpbGwgaGF2ZSB0eXBlcyB0aGF0IGFyZSBzb21ld2hl
cmUgaW4gdGhhdCBoaWVyYXJjaHkKKworICAgIC8vIGRldGVybWluZSB0aGUgdHlwZXMgdGhhdCBz
aG91bGQgYmUgaW4gdGhlIGRhdGFiYXNlIG5vdworICAgIGNvbnN0IFFTZXQ8UVVybD4gY29ycmVj
dFR5cGVzID0gZC0+cXVlcnlSZXNvdXJjZVR5cGVzKHJlc291cmNlKTsKKyAgICBRU2V0PFFVcmw+
IGNvcnJlY3RTdXBlclR5cGVzOworICAgIFFfRk9SRUFDSCggY29uc3QgUVVybCYgdHlwZSwgY29y
cmVjdFR5cGVzICkgeworICAgICAgICBjb3JyZWN0U3VwZXJUeXBlcyArPSBkLT5zdXBlckNsYXNz
ZXModHlwZSk7CisgICAgfQorCisgICAgLy8gbm93IGNvbXBhcmUgdGhhdCBsaXN0IHdpdGggdGhl
IG9uZXMgdGhhdCB3ZSBjb3VsZCByZW1vdmUKKyAgICBRU2V0PFFVcmw+IHR5cGVzVG9SZW1vdmU7
CisgICAgUV9GT1JFQUNIKCBjb25zdCBRVXJsJiB0eXBlLCBRU2V0PFFVcmw+Ojpmcm9tTGlzdCh0
eXBlcykgKQorICAgICAgICB0eXBlc1RvUmVtb3ZlICs9IGQtPnN1cGVyQ2xhc3Nlcyh0eXBlKTsK
KyAgICB0eXBlc1RvUmVtb3ZlIC09IGNvcnJlY3RTdXBlclR5cGVzOworCisgICAgYm9vbCBoYXZl
VmlzaWJsZVR5cGUgPSBmYWxzZTsKKyAgICBRX0ZPUkVBQ0goIGNvbnN0IFFVcmwmIHR5cGVUb1Jl
bW92ZSwgdHlwZXNUb1JlbW92ZSApIHsKKyAgICAgICAgaWYoICFoYXZlVmlzaWJsZVR5cGUgJiYg
ZC0+bV90eXBlVmlzaWJpbGl0eVRyZWUtPmlzVmlzaWJsZSh0eXBlVG9SZW1vdmUpICkKKyAgICAg
ICAgICAgIGhhdmVWaXNpYmxlVHlwZSA9IHRydWU7CisgICAgICAgIHBhcmVudE1vZGVsKCktPnJl
bW92ZVN0YXRlbWVudChyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVRvUmVtb3ZlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpKTsKKyAgICB9CisK
KyAgICAvLyByZW1vdmUgdGhlIHZpc2liaWxpdHkgaWYgbmVjZXNzYXJ5CisgICAgLy8gb25seSBi
ZSByZW1vdmluZyB2aXNpYmxlIHR5cGVzIHdlIGNhbiBjaGFuZ2UgdGhlIGFjdHVhbCB2aXNpYmls
aXR5CisgICAgaWYoIGhhdmVWaXNpYmxlVHlwZSApIHsKKyAgICAgICAgc2V0VmlzaWJpbGl0eSgg
cmVzb3VyY2UsIGNvcnJlY3RUeXBlcy5pc0VtcHR5KCkgPyBVbmRlZmluZWRWaXNpYmlsaXR5IDog
KCBkLT5pc1Zpc2libGVGcm9tVHlwZXMoY29ycmVjdFR5cGVzKSA/IFZpc2libGUgOiBOb25WaXNp
YmxlICkgKTsKKyAgICB9Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6OnNldFZpc2liaWxp
dHkoY29uc3QgUVVybCAmcmVzb3VyY2UsIFZpc2liaWxpdHkgdmlzaWJpbGl0eSkKK3sKKyAgICAv
LyB3ZSB1c2UgYW4gaW50ZWdlciBpbnN0ZWFkIG9mIGEgYm9vbGVhbiBmb3IgcGVyZm9ybWFuY2Ug
cmVhc29uczogdmlydHVvc28gZG9lcyBub3Qgc3VwcG9ydCBib29sIGFuZCBTb3ByYW5vIGNvbnZl
cnRzIHRoZW0gdG8gc3RyaW5ncworICAgIGlmKCB2aXNpYmlsaXR5ID09IFZpc2libGUgKSB7Cisg
ICAgICAgIHBhcmVudE1vZGVsKCktPnJlbW92ZVN0YXRlbWVudChyZXNvdXJjZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6
dXNlclZpc2libGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNv
cHJhbm86OkxpdGVyYWxWYWx1ZSgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSk7CisgICAgICAgIHBhcmVudE1vZGVsKCkt
PmFkZFN0YXRlbWVudChyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OkxpdGVyYWxWYWx1ZSgxKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSk7
CisgICAgfQorICAgIGVsc2UgaWYoIHZpc2liaWxpdHkgPT0gTm9uVmlzaWJsZSApIHsKKyAgICAg
ICAgcGFyZW50TW9kZWwoKS0+cmVtb3ZlU3RhdGVtZW50KHJlc291cmNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2Vy
VmlzaWJsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFu
bzo6TGl0ZXJhbFZhbHVlKDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpKTsKKyAgICAgICAgcGFyZW50TW9kZWwoKS0+YWRk
U3RhdGVtZW50KHJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6TGl0ZXJhbFZhbHVlKDApLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpKTsKKyAg
ICB9CisgICAgZWxzZSB7CisgICAgICAgIHBhcmVudE1vZGVsKCktPnJlbW92ZUFsbFN0YXRlbWVu
dHMocmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkp
OworICAgIH0KK30KKworYm9vbCBDcmFwcHlJbmZlcmVuY2VyMjo6aXNUeXBlVmlzaWJsZShjb25z
dCBRVXJsICZ0eXBlVXJpKSBjb25zdAoreworICAgIHJldHVybiBkLT5tX3R5cGVWaXNpYmlsaXR5
VHJlZS0+aXNWaXNpYmxlKCB0eXBlVXJpICk7Cit9CisKKyNpbmNsdWRlICJjcmFwcHlpbmZlcmVu
Y2VyMi5tb2MiCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3JlcG9zaXRvcnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL3JlcG9zaXRvcnkuaAkocmV2aXNpb24gMTIxMzk0MCkKKysr
IHNlcnZpY2VzL3N0b3JhZ2UvcmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSAr
MjksMjcgQEAKIH0KIAogY2xhc3MgS0pvYjsKK2NsYXNzIENyYXBweUluZmVyZW5jZXIyOwogCiBu
YW1lc3BhY2UgTmVwb211ayB7CiAKICAgICBjbGFzcyBNb2RlbENvcHlKb2I7CiAKKyAgICAvKioK
KyAgICAgKiBSZXByZXNlbnRzIHRoZSBtYWluIE5lcG9tdWsgbW9kZWwuIFdoaWxlIGl0IGxvb2tz
IGFzIGlmIHRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhbgorICAgICAqIG9uZSBpbnN0YW5jZSBvZiBS
ZXBvc2l0b3J5IHRoZXJlIGlzIG9ubHkgdGhlIG9uZS4KKyAgICAgKgorICAgICAqIFJlcG9zaXRv
cnkgaXMgYmFzZWQgb24gTlJMTW9kZWwgb25seSBmb3IgdGhlIHF1ZXJ5IHByZWZpeCBleHBhbnNp
b24gZmVhdHVyZS4gSXQKKyAgICAgKiB1c2VzIGEgU29wcmFubzo6VXRpbHM6OlNpZ25hbENhY2hl
TW9kZWwgdG8gY29tcGFjdCB0aGUgc2V2ZXJhbCBzdGF0ZW1lbnRzQWRkZWQoKQorICAgICAqIGFu
ZCBzdGF0ZW1lbnRzUmVtb3ZlZCgpIHNpZ25hbHMsIGFuZCB1c2VzIENyYXBweUluZmVyZW5jZXIy
IHRvIGtlZXAgcmRmczpzdWJDbGFzc09mCisgICAgICogYW5kIG5hbzp1c2VyVmlzaWJsZSBpbmZl
cmVuY2UgdXAtdG8tZGF0ZS4KKyAgICAgKgorICAgICAqIE9uIGNvbnN0cnVjdGlvbiBpdCBjaGVj
a3MgZm9yIGFuZCBvcHRpb25hbGx5IHBlcmZvcm1zIGNvbnZlcnNpb24gZnJvbSBhbiBvbGQgcmVw
b3NpdG9yeQorICAgICAqIHR5cGUgKHByZS1WaXJ0dW9zbyB0aW1lcykgYW5kIHJ1bnMgQ3JhcHB5
SW5mZXJlbmNlcjI6OnVwZGF0ZUFsbFJlc291cmNlcygpIHdoaWNoIGlzCisgICAgICogcGVyZm9y
bWVkIGluIGEgc2VwYXJhdGUgdGhyZWFkLgorICAgICAqCisgICAgICogXGF1dGhvciBTZWJhc3Rp
YW4gVHJ1ZWcgPHRydWVnQGtkZS5vcmc+CisgICAgICovCiAgICAgY2xhc3MgUmVwb3NpdG9yeSA6
IHB1YmxpYyBTb3ByYW5vOjpOUkxNb2RlbAogICAgIHsKICAgICAgICAgUV9PQkpFQ1QKQEAgLTU5
LDkgKzc1LDEwIEBACiAgICAgICAgICAqIFdpbGwgZW1pdCB0aGUgb3BlbmVkIHNpZ25hbAogICAg
ICAgICAgKi8KICAgICAgICAgdm9pZCBvcGVuKCk7Ci0KICAgICAgICAgdm9pZCBjbG9zZSgpOwog
CisgICAgICAgIHZvaWQgdXBkYXRlSW5mZXJlbmNlKCk7CisKICAgICBRX1NJR05BTFM6CiAgICAg
ICAgIHZvaWQgb3BlbmVkKCBSZXBvc2l0b3J5KiwgYm9vbCBzdWNjZXNzICk7CiAKQEAgLTc1LDYg
KzkyLDcgQEAKICAgICAgICAgU3RhdGUgbV9zdGF0ZTsKIAogICAgICAgICBTb3ByYW5vOjpNb2Rl
bCogbV9tb2RlbDsKKyAgICAgICAgQ3JhcHB5SW5mZXJlbmNlcjIqIG1faW5mZXJlbmNlcjsKICAg
ICAgICAgY29uc3QgU29wcmFubzo6QmFja2VuZCogbV9iYWNrZW5kOwogCiAgICAgICAgIC8vIG9u
bHkgdXNlZCBkdXJpbmcgb3BlbmluZwpJbmRleDogc2VydmljZXMvc3RvcmFnZS9vbnRvbG9neW1h
bmFnZXJtb2RlbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS9vbnRvbG9neW1h
bmFnZXJtb2RlbC5jcHAJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL29u
dG9sb2d5bWFuYWdlcm1vZGVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAog
CiAjaW5jbHVkZSA8UXRDb3JlL1FVcmw+CiAjaW5jbHVkZSA8UXRDb3JlL1FEYXRlVGltZT4KKyNp
bmNsdWRlIDxRdENvcmUvUVNjb3BlZFBvaW50ZXI+CiAKICNpbmNsdWRlIDxTb3ByYW5vL0JhY2tl
bmQ+CiAjaW5jbHVkZSA8U29wcmFuby9WZXJzaW9uPgpAQCAtMjI1LDIzICsyMjYsNiBAQAogICAg
ICAgICB0bXBNb2RlbC0+YWRkU3RhdGVtZW50KCBTb3ByYW5vOjpTdGF0ZW1lbnQoIGRhdGFHcmFw
aFVyaSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjpoYXNEZWZhdWx0TmFtZXNwYWNlKCksIExp
dGVyYWxWYWx1ZSggbnMudG9TdHJpbmcoKSApLCBtZXRhRGF0YUdyYXBoVXJpICkgKTsKICNlbmRp
ZgogICAgIH0KLQotICAgIC8qKgotICAgICAqIFNpbXBsZSBnYXJiYWdlIGNvbGxlY3Rpb24gY2xh
c3MuCi0gICAgICovCi0gICAgY2xhc3MgT2JqZWN0R2FyYmFnZUNvbGxlY3RvcgotICAgIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIE9iamVjdEdhcmJhZ2VDb2xsZWN0b3IoIFFPYmplY3QqIG8gKQot
ICAgICAgICAgICAgOiBtX29iamVjdCggbyApIHsKLSAgICAgICAgfQotICAgICAgICB+T2JqZWN0
R2FyYmFnZUNvbGxlY3RvcigpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtX29iamVjdDsKLSAgICAg
ICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUU9iamVjdCogbV9vYmplY3Q7Ci0gICAgfTsK
IH0KIAogCkBAIC0zMDgsNyArMjkyLDcgQEAKICAgICB9CiAKICAgICAvLyBzbyB3ZSBkbyBub3Qg
aGF2ZSB0byBjYXJlIGFib3V0IGRlbGV0aW5nIG91dCB0bXBNb2RlbCBhbnltb3JlLgotICAgIE9i
amVjdEdhcmJhZ2VDb2xsZWN0b3IgbW9kZWxHYXJiYWdlQ29sbGVjdG9yKCB0bXBNb2RlbCApOwor
ICAgIFFTY29wZWRQb2ludGVyPFNvcHJhbm86Ok1vZGVsPiBtb2RlbEdhcmJhZ2VDb2xsZWN0b3Io
IHRtcE1vZGVsICk7CiAKICAgICAvLyBpbXBvcnQgdGhlIGRhdGEgaW50byBvdXIgdG1wIG1vZGVs
CiAgICAgd2hpbGUgKCBkYXRhLm5leHQoKSApIHsKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvY3Jh
cHB5aW5mZXJlbmNlcjIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL2NyYXBweWlu
ZmVyZW5jZXIyLmgJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL2NyYXBweWluZmVy
ZW5jZXIyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIE5lcG9tdWsgS0RFIHByb2plY3QuCisgICBDb3B5cmlnaHQgKEMpIDIw
MTAgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorCisgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIHZl
cnNpb24gMywgb3IgYW55CisgICBsYXRlciB2ZXJzaW9uIGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJz
aGlwIG9mIEtERSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nlc3NvciBhcHByb3ZlZCBieSB0aGUgbWVt
YmVyc2hpcCBvZiBLREUgZS5WLiksIHdoaWNoIHNoYWxsCisgICBhY3QgYXMgYSBwcm94eSBkZWZp
bmVkIGluIFNlY3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxpY2Vuc2UuCisKKyAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+
LgorKi8KKworI2lmbmRlZiBDUkFQUFlJTkZFUkVOQ0VSMl9ICisjZGVmaW5lIENSQVBQWUlORkVS
RU5DRVIyX0gKKworI2luY2x1ZGUgPFNvcHJhbm8vRmlsdGVyTW9kZWw+CisKKy8qKgorICogVGhl
IHNlY29uZCB2ZXJzaW9uIG9mIHRoZSBjcmFwcHkgaW5mZXJlbmNlciBpdCBldmVuIGNyYXBwaWVy
IHRoYW4gdGhlIGZpcnN0LgorICogSXQgb25seSBkb2VzIHJkZjp0eXBlIGluZmVyZW5jaW5nLCBu
b3RoaW5nIGVsc2UuIEluIHRoZSBsb25nIHJ1biB0aGlzIGlzIG5vdAorICogZW5vdWdoIGJ1dCBm
b3Igbm93IGl0IGlzIHRoZSBvbmx5IGtpbmQgb2YgaW5mZXJlbmNlIHdlIHVzZSBpbiBOZXBvbXVr
LgorICogVGh1cywgaXQgaXMgZW5vdWdoIGFuZCBtYWtlcyBmb3IgbXVjaCBmYXN0ZXIgcXVlcmll
cyB0aGFuIHRoZSBmaXJzdAorICogY3JhcHB5IGluZmVyZW5jZXIuCisgKgorICogXGF1dGhvciBT
ZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5vcmc+CisgKi8KK2NsYXNzIENyYXBweUluZmVyZW5j
ZXIyIDogcHVibGljIFNvcHJhbm86OkZpbHRlck1vZGVsCit7CisgICAgUV9PQkpFQ1QKKworcHVi
bGljOgorICAgIENyYXBweUluZmVyZW5jZXIyKFNvcHJhbm86Ok1vZGVsKiBwYXJlbnQgPSAwKTsK
KyAgICB+Q3JhcHB5SW5mZXJlbmNlcjIoKTsKKworICAgIC8qKgorICAgICAqIFxyZWltcGwgdG8g
dXBkYXRlIGludGVybmFsIHN0cnVjdHVyZXMKKyAgICAgKi8KKyAgICB2b2lkIHNldFBhcmVudE1v
ZGVsKCBTb3ByYW5vOjpNb2RlbCogbW9kZWwgKTsKKworICAgIFNvcHJhbm86OkVycm9yOjpFcnJv
ckNvZGUgYWRkU3RhdGVtZW50KCBjb25zdCBTb3ByYW5vOjpTdGF0ZW1lbnQmIHN0YXRlbWVudCAp
OworICAgIFNvcHJhbm86OkVycm9yOjpFcnJvckNvZGUgcmVtb3ZlU3RhdGVtZW50KCBjb25zdCBT
b3ByYW5vOjpTdGF0ZW1lbnQmIHN0YXRlbWVudCApOworICAgIFNvcHJhbm86OkVycm9yOjpFcnJv
ckNvZGUgcmVtb3ZlQWxsU3RhdGVtZW50cyggY29uc3QgU29wcmFubzo6U3RhdGVtZW50JiBzdGF0
ZW1lbnQgKTsKKworICAgIHVzaW5nIFNvcHJhbm86OkZpbHRlck1vZGVsOjphZGRTdGF0ZW1lbnQ7
CisgICAgdXNpbmcgU29wcmFubzo6RmlsdGVyTW9kZWw6OnJlbW92ZVN0YXRlbWVudDsKKyAgICB1
c2luZyBTb3ByYW5vOjpGaWx0ZXJNb2RlbDo6cmVtb3ZlQWxsU3RhdGVtZW50czsKKworICAgIC8q
KgorICAgICAqIEFsbCBpbmZlcnJlZCB0cmlwbGVzIGFyZSBzdG9yZWQgaW4gdGhlIG9uZSBjcmFw
cHkgaW5mZXJlbmNlIGdyYXBoLgorICAgICAqIFRodXMsIHJlbW92aW5nIGluZmVyZW5jZSBpcyBh
cyBzaW1wbGUgYXMgcmVtb3ZpbmcgdGhpcyBvbmUgZ3JhcGguCisgICAgICovCisgICAgUVVybCBj
cmFwcHlJbmZlcmVuY2VDb250ZXh0KCkgY29uc3Q7CisKKyAgICBib29sIGlzVHlwZVZpc2libGUo
IGNvbnN0IFFVcmwmIHR5cGVVcmkgKSBjb25zdDsKKworUV9TSUdOQUxTOgorICAgIC8qKgorICAg
ICAqIEVtaXR0ZWQgb25jZSBhIGNhbGwgdG8gdXBkYXRlQWxsUmVzb3VyY2VzKCkgaGFzIGZpbmlz
aGVkLgorICAgICAqLworICAgIHZvaWQgYWxsUmVzb3VyY2VzVXBkYXRlZCgpOworCitwdWJsaWMg
UV9TTE9UUzoKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIGludGVybmFsIG1hcCBvZiBzdXBl
ciB0eXBlcyB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoCisgICAgICogdHlwZSBzdGF0
ZW1lbnRzIG5lZWQgdG8gYmUgYWRkZWQgYW5kIHJlbW92ZWQuIEl0IG1ha2VzIHNlbnNlIHRvIGNh
bGwgdGhpcworICAgICAqIHdoZW4gdGhlIG9udG9sb2dpZXMgaW4gdGhlIG1vZGVsIGNoYW5nZS4K
KyAgICAgKi8KKyAgICB2b2lkIHVwZGF0ZUluZmVyZW5jZUluZGV4KCk7CisKKyAgICAvKioKKyAg
ICAgKiBVcGRhdGUgYWxsIHR5cGVzIG9mIGFsbCByZXNvdXJjZXMgaW4gdGhlIG1vZGVsLiBUaGlz
IG1ldGhvZCB3aWxsIGFkZCBzdXBlcnR5cGUKKyAgICAgKiBzdGF0ZW1lbnRzIGJ1dCBOT1QgcmVt
b3ZlIGFueSBzdXBlcmZsdW91cyBzdGF0ZW1lbnRzLiBUbyBhY2hpZXZlIHRoZSBsYXR0ZXIgY2Fs
bAorICAgICAqIHJlbW92ZUNvbnRleHQoY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpKSBiZWZvcmUg
Y2FsbGluZyB0aGlzIG1ldGhvZC4KKyAgICAgKi8KKyAgICB2b2lkIHVwZGF0ZUFsbFJlc291cmNl
cygpOworCitwcml2YXRlOgorICAgIHZvaWQgYWRkSW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3Qg
UVVybCYgcmVzb3VyY2UsIGNvbnN0IFFVcmwmIHR5cGUgKTsKKyAgICB2b2lkIGFkZEluZmVyZW5j
ZVN0YXRlbWVudHMoIGNvbnN0IFFVcmwmIHJlc291cmNlLCBjb25zdCBRU2V0PFFVcmw+JiB0eXBl
cyApOworICAgIHZvaWQgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3QgUVVybCYgcmVz
b3VyY2UsIGNvbnN0IFFVcmwmIHR5cGUgKTsKKyAgICB2b2lkIHJlbW92ZUluZmVyZW5jZVN0YXRl
bWVudHMoIGNvbnN0IFFVcmwmIHJlc291cmNlLCBjb25zdCBRTGlzdDxRVXJsPiYgdHlwZXMgKTsK
KyAgICB2b2lkIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIGNvbnN0IFFVcmwmIHJlc291cmNl
LCBjb25zdCBRTGlzdDxTb3ByYW5vOjpOb2RlPiYgdHlwZXMgKTsKKworICAgIGVudW0gVmlzaWJp
bGl0eSB7CisgICAgICAgIFZpc2libGUsCisgICAgICAgIE5vblZpc2libGUsCisgICAgICAgIFVu
ZGVmaW5lZFZpc2liaWxpdHkKKyAgICB9OworCisgICAgdm9pZCBzZXRWaXNpYmlsaXR5KGNvbnN0
IFFVcmwmIHJlc291cmNlLCBWaXNpYmlsaXR5IHZpc2liaWxpdHkpOworCisgICAgY2xhc3MgVXBk
YXRlQWxsUmVzb3VyY2VzVGhyZWFkOworICAgIGNsYXNzIFByaXZhdGU7CisgICAgUHJpdmF0ZSog
Y29uc3QgZDsKK307CisKKyNlbmRpZiAvLyBDUkFQUFlJTkZFUkVOQ0VSMl9ICkluZGV4OiBzZXJ2
aWNlcy9zdG9yYWdlL25lcG9tdWtjb3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9y
YWdlL25lcG9tdWtjb3JlLmNwcAkocmV2aXNpb24gMTIxMzk0MCkKKysrIHNlcnZpY2VzL3N0b3Jh
Z2UvbmVwb211a2NvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw5IEBACiAgICAg
bV9yZXBvc2l0b3J5LT5zZXRFbmFibGVRdWVyeVByZWZpeEV4cGFuc2lvbihmYWxzZSk7CiAgICAg
bV9yZXBvc2l0b3J5LT5zZXRFbmFibGVRdWVyeVByZWZpeEV4cGFuc2lvbih0cnVlKTsKIAorICAg
IC8vIHRoZSBmaXJzdCB0aW1lIHRoaXMgaXMgYSB2ZXJ5IGxvbmcgcHJvY2VkdXJlLiBUaHVzLCB3
ZSBkbyBpdCB3aGlsZSBOZXBvbXVrIGlzIGFjdGl2ZSBhbHRob3VnaCB0aGVuIHNvbWUgcXVlcmll
cyBtaWdodCByZXR1cm4gaW52YWxpZCByZXN1bHRzCisgICAgbV9yZXBvc2l0b3J5LT51cGRhdGVJ
bmZlcmVuY2UoKTsKKwogICAgIGlmICggIW1faW5pdGlhbGl6ZWQgKSB7CiAgICAgICAgIC8vIGFu
ZCBmaW5hbGx5IHdlIGFyZSBkb25lOiB0aGUgcmVwb3NpdG9yeSBpcyBvbmxpbmUgYW5kIHRoZSBv
bnRvbG9naWVzIGFyZSBsb2FkZWQuCiAgICAgICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOwpJbmRl
eDogc2VydmljZXMvc3RvcmFnZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNl
cy9zdG9yYWdlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMjEzOTQwKQorKysgc2VydmljZXMv
c3RvcmFnZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTcsNiArMTcsOCBAQAog
ICBvbnRvbG9neW1hbmFnZXJtb2RlbC5jcHAKICAgZ3JhcGhyZXRyaWV2ZXIuY3BwCiAgIGNyYXBw
eWluZmVyZW5jZXIuY3BwCisgIGNyYXBweWluZmVyZW5jZXIyLmNwcAorICB0eXBldmlzaWJpbGl0
eXRyZWUuY3BwCiAgICkKIAogc29wcmFub19hZGRfb250b2xvZ3koc3RvcmFnZV9TUkNTCkBAIC01
NCwzICs1Niw1IEBACiAgIFRBUkdFVFMgbmVwb211a3N0b3JhZ2UKICAgREVTVElOQVRJT04gJHtQ
TFVHSU5fSU5TVEFMTF9ESVJ9KQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCith
ZGRfc3ViZGlyZWN0b3J5KHRlc3QpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56258</attachid>
            <date>2011-01-20 22:44:36 +0000</date>
            <delta_ts>2011-01-20 22:54:10 +0000</delta_ts>
            <desc>Updated patch which adds faster pim data conversion (kdebase/runtime/nepomuk)</desc>
            <filename>kdebase-runtime-nepomuk-storage.diff</filename>
            <type>text/plain</type>
            <size>81660</size>
            <attacher name="Sebastian Trueg">trueg</attacher>
            
              <data encoding="base64">SW5kZXg6IG9udG9sb2dpZXMva3V2by50cmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG9udG9sb2dpZXMva3V2
by50cmlnCShyZXZpc2lvbiAxMjEzOTQwKQorKysgb250b2xvZ2llcy9rdXZvLnRyaWcJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDYgKzQ3LDkgQEAKICAgICByZGZzOlJlc291cmNlCiAgICAgICAgIG5h
bzp1c2VyVmlzaWJsZSB0cnVlIC4KIAorICAgIG5hbzp1c2VyVmlzaWJsZQorICAgICAgICBuYW86
dXNlclZpc2libGUgZmFsc2UgLgorCiAgICAgbnVhbzpFdmVudAogICAgICAgICBuYW86dXNlclZp
c2libGUgZmFsc2UgLgogCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvdHlwZXZpc2liaWxp
dHl0cmVldGVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvdGVzdC90eXBldmlz
aWJpbGl0eXRyZWV0ZXN0LmgJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3Qv
dHlwZXZpc2liaWxpdHl0cmVldGVzdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisv
KgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE5lcG9tdWsgS0RFIHByb2plY3QuCisgICBD
b3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorCisgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55CisgICBsYXRlciB2ZXJzaW9uIGFjY2VwdGVk
IGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nlc3NvciBhcHBy
b3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiksIHdoaWNoIHNoYWxsCisgICBhY3Qg
YXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxpY2Vu
c2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251
Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2lmbmRlZiBUWVBFVklTSUJJTElUWVRSRUVURVNUX0gK
KyNkZWZpbmUgVFlQRVZJU0lCSUxJVFlUUkVFVEVTVF9ICisKKyNpbmNsdWRlIDxRT2JqZWN0Pgor
CitjbGFzcyBLVGVtcERpcjsKK2NsYXNzIFR5cGVWaXNpYmlsaXR5VHJlZTsKK25hbWVzcGFjZSBT
b3ByYW5vIHsKK2NsYXNzIE1vZGVsOworfQorCitjbGFzcyBUeXBlVmlzaWJpbGl0eVRyZWVUZXN0
IDogcHVibGljIFFPYmplY3QKK3sKKyAgICBRX09CSkVDVAorCitwcml2YXRlIFFfU0xPVFM6Cisg
ICAgdm9pZCBpbml0VGVzdENhc2UoKTsKKyAgICB2b2lkIGNsZWFudXBUZXN0Q2FzZSgpOworICAg
IHZvaWQgaW5pdCgpOworICAgIHZvaWQgdGVzdFR5cGVWaXNpYmlsaXR5VHJlZSgpOworCitwcml2
YXRlOgorICAgIEtUZW1wRGlyKiBtX3N0b3JhZ2VEaXI7CisgICAgU29wcmFubzo6TW9kZWwqIG1f
bW9kZWw7CisgICAgVHlwZVZpc2liaWxpdHlUcmVlKiBtX3R5cGVUcmVlOworfTsKKworI2VuZGlm
IC8vIFRZUEVWSVNJQklMSVRZVFJFRVRFU1RfSApJbmRleDogc2VydmljZXMvc3RvcmFnZS90ZXN0
L2NyYXBweWluZmVyZW5jZXIydGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFn
ZS90ZXN0L2NyYXBweWluZmVyZW5jZXIydGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNl
cy9zdG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyOTkgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBL
REUgcHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVn
QGtkZS5vcmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVy
IHZlcnNpb24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cwor
ICAgc3VjY2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hp
Y2ggc2hhbGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNp
b24gMyBvZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNl
ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiY3JhcHB5
aW5mZXJlbmNlcjJ0ZXN0LmgiCisjaW5jbHVkZSAiLi4vY3JhcHB5aW5mZXJlbmNlcjIuaCIKKwor
I2luY2x1ZGUgPFF0VGVzdD4KKyNpbmNsdWRlICJxdGVzdF9rZGUuaCIKKworI2luY2x1ZGUgPFNv
cHJhbm8vU29wcmFubz4KKworI2luY2x1ZGUgPGt0ZW1wZGlyLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBTb3ByYW5vOworCitRX0RFQ0xBUkVfTUVUQVRZUEUoU29wcmFubzo6U3RhdGVtZW50KQorCit2
b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6aW5pdFRlc3RDYXNlKCkKK3sKKyAgICBxUmVnaXN0
ZXJNZXRhVHlwZTxTb3ByYW5vOjpTdGF0ZW1lbnQ+KCk7CisKKyAgICAvLyB3ZSBuZWVkIHRvIHVz
ZSBhIFZpcnR1b3NvIG1vZGVsIGFzIHRtcCBtb2RlbCBzaW5jZSByZWRsYW5kIG1pc3NlcyBpbXBv
cnRhbnQgU1BBUlFMIGZlYXR1cmVzCisgICAgLy8gdGhhdCBhcmUgdXNlZCBieSBsaWJuZXBvbXVr
IGJlbG93CisgICAgY29uc3QgU29wcmFubzo6QmFja2VuZCogYmFja2VuZCA9IFNvcHJhbm86OlBs
dWdpbk1hbmFnZXI6Omluc3RhbmNlKCktPmRpc2NvdmVyQmFja2VuZEJ5TmFtZSggInZpcnR1b3Nv
YmFja2VuZCIgKTsKKyAgICBRVkVSSUZZKCBiYWNrZW5kICk7CisgICAgbV9zdG9yYWdlRGlyID0g
bmV3IEtUZW1wRGlyKCk7CisgICAgbV9iYXNlTW9kZWwgPSBiYWNrZW5kLT5jcmVhdGVNb2RlbCgg
U29wcmFubzo6QmFja2VuZFNldHRpbmdzKCkgPDwgU29wcmFubzo6QmFja2VuZFNldHRpbmcoU29w
cmFubzo6QmFja2VuZE9wdGlvblN0b3JhZ2VEaXIsIG1fc3RvcmFnZURpci0+bmFtZSgpKSApOwor
ICAgIFFWRVJJRlkoIG1fYmFzZU1vZGVsICk7CisKKyAgICBtX21vZGVsID0gbmV3IENyYXBweUlu
ZmVyZW5jZXIyKCBtX2Jhc2VNb2RlbCApOworfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVz
dDo6Y2xlYW51cFRlc3RDYXNlKCkKK3sKKyAgICBkZWxldGUgbV9tb2RlbDsKKyAgICBkZWxldGUg
bV9iYXNlTW9kZWw7CisgICAgZGVsZXRlIG1fc3RvcmFnZURpcjsKK30KKworCit2b2lkIENyYXBw
eUluZmVyZW5jZXIyVGVzdDo6aW5pdCgpCit7CisgICAgbV9iYXNlTW9kZWwtPnJlbW92ZUFsbFN0
YXRlbWVudHMoKTsKKworICAgIC8vCisgICAgLy8gd2UgY3JlYXRlIG9uZSBmYWtlIG9udG9sb2d5
CisgICAgLy8KKyAgICAvLyBBCisgICAgLy8gfC0gQgorICAgIC8vICAgIHwtIEMgLSBpbnZpc2li
bGUKKyAgICAvLyAgICAgICB8LSBECisgICAgLy8gICAgICAgfC0gRQorICAgIC8vCisgICAgLy8g
RgorICAgIC8vIHwtIEUKKyAgICAvLworICAgIC8vIEwxCisgICAgLy8gfC0gTDIKKyAgICAvLyAg
ICB8LSBMMQorICAgIC8vCisgICAgUVVybCBncmFwaCgiZ3JhcGg6L29udG8iKTsKKyAgICBtX2Jh
c2VNb2RlbC0+YWRkU3RhdGVtZW50KCBncmFwaCwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0
eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5STDo6T250b2xvZ3koKSwgZ3JhcGggKTsKKyAg
ICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJuZXBvbXVrOi9HIiksIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOUkw6Okluc3Rh
bmNlQmFzZSgpLCBncmFwaCApOworCisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVy
bCgib250bzovQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9CIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1f
YmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0MiKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdy
YXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRCIpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Uzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJs
KCJvbnRvOi9FIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRT
dGF0ZW1lbnQoIFFVcmwoIm9udG86L0YiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBl
KCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisKKyAgICBt
X2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9FIiksIFNvcHJhbm86OlZvY2Fi
dWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQyIpLCBncmFwaCApOworICAg
IG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0IiKSwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9BIiksIGdyYXBoICk7Cisg
ICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovQyIpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0IiKSwgZ3JhcGggKTsK
KyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9EIiksIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQyIpLCBncmFwaCAp
OworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0UiKSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9GIiksIGdyYXBo
ICk7CisKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0MiKSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUoZmFsc2UpLCBn
cmFwaCApOworCisgICAgLy8gdGhlIGxvb3B5IGNsYXNzZXMKKyAgICBtX2Jhc2VNb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9MMSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5
cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBt
X2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9MMSIpLCBTb3ByYW5vOjpWb2Nh
YnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0wyIiksIGdyYXBoICk7Cisg
ICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovTDIiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNz
KCksIGdyYXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzov
TDIiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRv
Oi9MMSIpLCBncmFwaCApOworCisgICAgbV9tb2RlbC0+dXBkYXRlSW5mZXJlbmNlSW5kZXgoKTsK
K30KKworLy8gbWFrZSBzdXJlIG9ubHkgdGhlIG9uZSBzdGF0ZW1lbnQgaXMgYWRkZWQKK3ZvaWQg
Q3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0QWRkQW55U3RhdGVtZW50KCkKK3sKKyAgICBjb25z
dCBpbnQgY250ID0gbV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKTsKKyAgICBTdGF0ZW1lbnQgcygg
UVVybCgibmVwb211azovQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86Omhhc1RhZygpLCBR
VXJsKCJuZXBvbXVrOi9UIiksIFFVcmwoIm5lcG9tdWs6L0ciKSApOworICAgIFFWRVJJRlkoIW1f
bW9kZWwtPmFkZFN0YXRlbWVudChzKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50
Q291bnQoKSwgY250KzEpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNTdGF0ZW1lbnQo
cykpOworfQorCisvLyBtYWtlIHN1cmUgYWxsIHN1cGVyY2xhc3NlcyBhcmUgYWRkZWQgYXMgdHlw
ZSwgdG9vCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6dGVzdEFkZFR5cGVTdGF0ZW1lbnQo
KQoreworICAgIGludCBjbnQgPSBtX21vZGVsLT5zdGF0ZW1lbnRDb3VudCgpOworICAgIFFVcmwg
cmVzQSgibmVwb211azovQSIpOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3By
YW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpLCBRVXJsKCJuZXBv
bXVrOi9HIikpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCsz
KTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgp
KSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2Nh
YnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworCisgICAgY250
ID0gbV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKTsKKyAgICBRVXJsIHJlc0IoIm5lcG9tdWs6L0Ii
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQiwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSwgUVVybCgibmVwb211azovRyIpKTsKKyAgICBR
Q09NUEFSRShtX21vZGVsLT5zdGF0ZW1lbnRDb3VudCgpLCBjbnQrNCk7CisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgUVVybCgib250bzovQiIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0
YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpKSk7
CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVs
YXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkp
OworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgVm9jYWJ1
bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUoMSkpKTsKKworICAgIGNudCA9
IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNDKCJuZXBvbXVrOi9DIik7
CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0MsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
Rjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNP
TVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KzQpOworICAgIFFWRVJJRlkobV9t
b2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IFFVcmwoIm9udG86L0MiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0
ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSkpOwor
ICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFy
eTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+
Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKworICAgIGNudCA9IG1fbW9kZWwt
PnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNEKCJuZXBvbXVrOi9EIik7CisgICAgbV9t
b2RlbC0+YWRkU3RhdGVtZW50KHJlc0QsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgp
LCBRVXJsKCJvbnRvOi9FIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNPTVBBUkUobV9t
b2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KzcpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29u
dGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9u
dG86L0YiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVz
RCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0UiKSkpOworICAgIFFWRVJJ
RlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0
eXBlKCksIFFVcmwoIm9udG86L0MiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNB
bnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0Ii
KSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9j
YWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkpOworICAgIFFWRVJJRlkobV9t
b2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAgICBRVkVSSUZZKG1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0QsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZp
c2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7Cit9CisKKy8vIG1ha2Ugc3VyZSB0aGUgbmV3IHJl
bGF0aW9uIGlzIHRha2VuIGludG8gYWNjb3VudCB3aXRoIHRoZSBuZXh0IGFkZFN0YXRlbWVudAor
dm9pZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRlc3RBZGRTdWJDbGFzc09mU3RhdGVtZW50KCkK
K3sKKyAgICBRRVhQRUNUX0ZBSUwoIiIsICJOb3QgaW1wbGVtZW50ZWQgeWV0IiwgQWJvcnQpOwor
fQorCisvLyBtYWtlIHN1cmUgb25seSB0aGUgb25lIHN0YXRlbWVudCBpcyByZW1vdmVkCit2b2lk
IENyYXBweUluZmVyZW5jZXIyVGVzdDo6dGVzdFJlbW92ZUFueVN0YXRlbWVudCgpCit7Cit9CisK
Ky8vIG1ha2Ugc3VyZSB0aGUgYXBwcm9wcmlhdGUgdHlwZXMgYXJlIHJlbW92ZWQsIHRvbworLy8g
Y2hlY2sgMiBjYXNlczogMS4gb25seSB0aGUgb25lIHR5cGUsIDIuIHR3byB0eXBlcyB3aXRoIGlu
dGVyc2VjdGluZyBzdXBlcmNsYXNzZXMKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0
UmVtb3ZlVHlwZVN0YXRlbWVudCgpCit7CisgICAgaW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVu
dENvdW50KCk7CisgICAgUVVybCByZXNBKCJuZXBvbXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRk
U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJv
bnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+cmVtb3ZlU3RhdGVt
ZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9B
IiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50
Q291bnQoKSwgY250KTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpKSk7CisgICAg
UVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAg
ICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5
OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworCisgICAgLy8gYWRkIHR3
byB0eXBlcyB3aXRoIGludGVyc2VjdGluZyBzdXBlciB0eXBlcworICAgIG1fbW9kZWwtPmFkZFN0
YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250
bzovQiIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChy
ZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBR
VXJsKCJuZXBvbXVrOi9HIikpOworICAgIC8vIHJlbW92ZSBvbmUgb2YgdGhlbQorICAgIG1fbW9k
ZWwtPnJlbW92ZVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgUVVybCgib250bzovQiIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIC8vIG1ha2Ugc3Vy
ZSBhbGwgaXMgd2VsbAorICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNu
dCs3KTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZv
Y2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKG1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgp
LCBRVXJsKCJvbnRvOi9FIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3Rh
dGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIikpKTsK
KyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9CIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwt
PmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJs
KCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50
KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZT
OjpSZXNvdXJjZSgpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNBLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkp
OworfQorCisvLyBtYWtlIHN1cmUgdGhlIHJlbW92ZWQgc3ViY2xhc3MgcmVsYXRpb24gaXMgdGFr
ZW4gaW50byBhY2NvdW50IHdpdGggdGhlIG5leHQgYWRkU3RhdGVtZW50CisvLyBtYWtlIHN1cmUg
dHlwZSBzdGF0ZW1lbnRzIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZCBhcmUgcmVtb3ZlZAordm9p
ZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRlc3RSZW1vdmVTdWJDbGFzc09mU3RhdGVtZW50KCkK
K3sKKyAgICBRRVhQRUNUX0ZBSUwoIiIsICJOb3QgaW1wbGVtZW50ZWQgeWV0IiwgQWJvcnQpOwor
fQorCisvLyBtYWtlIHN1cmUgdGhlIGNvcnJlc3BvbmluZyBzdGF0ZW1lbnRzIGFyZSByZW1vdmVk
IGFuZCBub3RoaW5nIGVsc2UKKy8vIHRlc3QgYWxsIGNvbWJpbmF0aW9ucyBvZiBpbnZhbGlkIGFu
ZCB2YWxpZCBub2RlcyBpZiBwb3NzaWJsZQordm9pZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRl
c3RSZW1vdmVBbGxTdGF0ZW1lbnRzKCkKK3sKKyAgICAvLyAxLiByZW1vdmUgdGhlIHdob2xlIHJl
c291cmNlCisgICAgaW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVy
bCByZXNBKCJuZXBvbXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5l
cG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OmxhYmVsKCksIExpdGVyYWxWYWx1ZShRTGF0aW4xU3RyaW5nKCJBIikp
LCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9kZWwtPnJlbW92ZUFsbFN0YXRlbWVudHMo
cmVzQSwgTm9kZSgpLCBOb2RlKCkpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENv
dW50KCksIGNudCk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQo
cmVzQSwgTm9kZSgpLCBOb2RlKCksIE5vZGUoKSkpOworCisgICAgLy8gMi4gcmVtb3ZlIGEgdHlw
ZSBmcm9tIHNldmVyYWwgcmVzb3VyY2VzCisgICAgUVVybCByZXNCKCJuZXBvbXVrOi9CIik7Cisg
ICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6
dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2Rl
bC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBR
VXJsKCJvbnRvOi9GIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3Rh
dGVtZW50KHJlc0IsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRv
Oi9CIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJl
c0IsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIiksIFFV
cmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+cmVtb3ZlQWxsU3RhdGVtZW50cyhOb2Rl
KCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpOwor
ICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFy
eTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsK
KyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVs
LT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVy
bCgib250bzovRiIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Uzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1l
bnQocmVzQiwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkpOworICAg
IFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgVm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNv
bnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJv
bnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJl
c0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7Cisg
ICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5
OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworICAgIFFDT01QQVJFKG1f
bW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCs3KTsKKworICAgIC8vIDMuIHJlbW92ZSBhbGwg
dHlwZXMgZnJvbSBvbmUgcmVzb3VyY2UKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQSwg
U29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0UiKSwgUVVybCgi
bmVwb211azovRyIpKTsKKyAgICBtX21vZGVsLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHJlc0EsIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBOb2RlKCksIFFVcmwoIm5lcG9tdWs6L0ci
KSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIE5vZGUoKSkpOworICAgIFFWRVJJRlkoIW1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZp
c2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICAvLyA0LiByZW1vdmUgYSBncmFwaAor
ICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9k
ZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwg
UVVybCgib250bzovQSIpLCBRVXJsKCJuZXBvbXVrOi9HMiIpKTsKKyAgICBtX21vZGVsLT5yZW1v
dmVDb250ZXh0KFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29u
dGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgTm9kZSgpLCBOb2RlKCkpKTsKKyAgICBRVkVSSUZZKG1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
Rjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250
YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwg
UVVybCgib250bzovRSIpKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0
ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86
L0QiKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0Es
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIikpKTsKKyAg
ICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQiIpKSk7CisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkpOworICAg
IFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQ29udGV4dChRVXJsKCJuZXBvbXVrOi9HIikpKTsK
K30KKworLy8gbWFrZSBzdXJlIHdlIGRvIG5vdCBydW4gaW50byBhbiBlbmRsZXNzIGxvb3AKK3Zv
aWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0Q3ljbGljU3ViQ2xhc3NSZWxhdGlvbigpCit7
CisgICAgaW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNB
KCJuZXBvbXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9MMSIpLCBRVXJsKCJuZXBvbXVr
Oi9HIikpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCs0KTsg
Ly8gKzQgc2luY2UgTDEgaXMgdGhlcmUgdHdpY2U6IHRoZSBvbmUgd2UgYWRkZWQgYW5kIHRoZSBz
dXBlcmNsYXNzIG9mIEwyCisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovTDEiKSkpOworICAg
IFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0wyIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNv
bnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKSk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJl
bmNlcjJUZXN0Ojp0ZXN0VXBkYXRlQWxsUmVzb3VyY2VzKCkKK3sKKyAgICAvLyB3ZSBhZGQgYSBi
dW5jaCBvZiBzdGF0ZW1lbnRzIHRvIHRoZSBiYXNlIG1vZGVsIGluc3RlYWQgb2YgZ29pbmcgdGhy
b3VnaCB0aGUgY3JhcHB5IGluZmVyZW5jZSBtb2RlbAorICAgIFFVcmwgcmVzQSgibmVwb211azov
QSIpOworICAgIFFVcmwgcmVzQigibmVwb211azovQiIpOworICAgIFFVcmwgcmVzQygibmVwb211
azovQyIpOworICAgIFFVcmwgcmVzRCgibmVwb211azovRCIpOworCisgICAgbV9iYXNlTW9kZWwt
PmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVy
bCgib250bzovQSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fYmFzZU1vZGVsLT5hZGRT
dGF0ZW1lbnQocmVzQiwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9u
dG86L0IiKSwgUVVybCgibmVwb211azovRyIpKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVt
ZW50KHJlc0MsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9D
IiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudChy
ZXNELCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBR
VXJsKCJuZXBvbXVrOi9HIikpOworCisgICAgbV9tb2RlbC0+dXBkYXRlQWxsUmVzb3VyY2VzKCk7
CisKKyAgICAvLyB3YWl0IGZvciB0aGUgYWJvdmUgY2FsbCB0byBmaW5pc2gKKyAgICBRRXZlbnRM
b29wIGxvb3A7CisgICAgY29ubmVjdChtX21vZGVsLCBTSUdOQUwoYWxsUmVzb3VyY2VzVXBkYXRl
ZCgpKSwgJmxvb3AsIFNMT1QocXVpdCgpKSk7CisgICAgbG9vcC5leGVjKCk7CisKKyAgICBRVkVS
SUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6Ok5BTzo6
dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICBRVkVSSUZZKG1fbW9kZWwt
PmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUo
KSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0Fu
eVN0YXRlbWVudChyZXNDLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxW
YWx1ZSgxKSkpOworCisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChy
ZXNELCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOwor
fQorCitRVEVTVF9LREVNQUlOX0NPUkUoQ3JhcHB5SW5mZXJlbmNlcjJUZXN0KQorCisjaW5jbHVk
ZSAiY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0Lm1vYyIKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvdGVz
dC9jcmFwcHlpbmZlcmVuY2VyMnRlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdl
L3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmgJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9z
dG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTcgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUgcHJv
amVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5v
cmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZlcnNp
b24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAgc3Vj
Y2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2ggc2hh
bGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24gMyBv
ZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0
cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaWZuZGVmIENSQVBQWUlORkVSRU5D
RVIyVEVTVF9ICisjZGVmaW5lIENSQVBQWUlORkVSRU5DRVIyVEVTVF9ICisKKyNpbmNsdWRlIDxR
T2JqZWN0PgorCitjbGFzcyBLVGVtcERpcjsKK2NsYXNzIENyYXBweUluZmVyZW5jZXIyOworbmFt
ZXNwYWNlIFNvcHJhbm8geworY2xhc3MgTW9kZWw7Cit9CisKK2NsYXNzIENyYXBweUluZmVyZW5j
ZXIyVGVzdCA6IHB1YmxpYyBRT2JqZWN0Cit7CisgICAgUV9PQkpFQ1QKKworcHJpdmF0ZSBRX1NM
T1RTOgorICAgIHZvaWQgaW5pdFRlc3RDYXNlKCk7CisgICAgdm9pZCBjbGVhbnVwVGVzdENhc2Uo
KTsKKyAgICB2b2lkIGluaXQoKTsKKyAgICB2b2lkIHRlc3RBZGRBbnlTdGF0ZW1lbnQoKTsKKyAg
ICB2b2lkIHRlc3RBZGRUeXBlU3RhdGVtZW50KCk7CisgICAgdm9pZCB0ZXN0QWRkU3ViQ2xhc3NP
ZlN0YXRlbWVudCgpOworICAgIHZvaWQgdGVzdFJlbW92ZUFueVN0YXRlbWVudCgpOworICAgIHZv
aWQgdGVzdFJlbW92ZVR5cGVTdGF0ZW1lbnQoKTsKKyAgICB2b2lkIHRlc3RSZW1vdmVTdWJDbGFz
c09mU3RhdGVtZW50KCk7CisgICAgdm9pZCB0ZXN0UmVtb3ZlQWxsU3RhdGVtZW50cygpOworICAg
IHZvaWQgdGVzdEN5Y2xpY1N1YkNsYXNzUmVsYXRpb24oKTsKKyAgICB2b2lkIHRlc3RVcGRhdGVB
bGxSZXNvdXJjZXMoKTsKKworcHJpdmF0ZToKKyAgICBLVGVtcERpciogbV9zdG9yYWdlRGlyOwor
ICAgIFNvcHJhbm86Ok1vZGVsKiBtX2Jhc2VNb2RlbDsKKyAgICBDcmFwcHlJbmZlcmVuY2VyMiog
bV9tb2RlbDsKK307CisKKyNlbmRpZgpJbmRleDogc2VydmljZXMvc3RvcmFnZS90ZXN0L3R5cGV2
aXNpYmlsaXR5dHJlZXRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvdGVz
dC90eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmNwcAkocmV2aXNpb24gMCkKKysrIHNlcnZpY2VzL3N0
b3JhZ2UvdGVzdC90eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNDEgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUg
cHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtk
ZS5vcmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZl
cnNpb24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAg
c3VjY2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2gg
c2hhbGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24g
MyBvZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8
aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAidHlwZXZpc2li
aWxpdHl0cmVldGVzdC5oIgorI2luY2x1ZGUgIi4uL3R5cGV2aXNpYmlsaXR5dHJlZS5oIgorCisj
aW5jbHVkZSA8UXRUZXN0PgorI2luY2x1ZGUgInF0ZXN0X2tkZS5oIgorCisjaW5jbHVkZSA8U29w
cmFuby9Tb3ByYW5vPgorCisjaW5jbHVkZSA8a3RlbXBkaXIuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFNvcHJhbm87CisKK3ZvaWQgVHlwZVZpc2liaWxpdHlUcmVlVGVzdDo6aW5pdFRlc3RDYXNlKCkK
K3sKKyAgICAvLyB3ZSBuZWVkIHRvIHVzZSBhIFZpcnR1b3NvIG1vZGVsIGFzIHRtcCBtb2RlbCBz
aW5jZSByZWRsYW5kIG1pc3NlcyBpbXBvcnRhbnQgU1BBUlFMIGZlYXR1cmVzCisgICAgLy8gdGhh
dCBhcmUgdXNlZCBieSBsaWJuZXBvbXVrIGJlbG93CisgICAgY29uc3QgU29wcmFubzo6QmFja2Vu
ZCogYmFja2VuZCA9IFNvcHJhbm86OlBsdWdpbk1hbmFnZXI6Omluc3RhbmNlKCktPmRpc2NvdmVy
QmFja2VuZEJ5TmFtZSggInZpcnR1b3NvYmFja2VuZCIgKTsKKyAgICBRVkVSSUZZKCBiYWNrZW5k
ICk7CisgICAgbV9zdG9yYWdlRGlyID0gbmV3IEtUZW1wRGlyKCk7CisgICAgbV9tb2RlbCA9IGJh
Y2tlbmQtPmNyZWF0ZU1vZGVsKCBTb3ByYW5vOjpCYWNrZW5kU2V0dGluZ3MoKSA8PCBTb3ByYW5v
OjpCYWNrZW5kU2V0dGluZyhTb3ByYW5vOjpCYWNrZW5kT3B0aW9uU3RvcmFnZURpciwgbV9zdG9y
YWdlRGlyLT5uYW1lKCkpICk7CisgICAgUVZFUklGWSggbV9tb2RlbCApOworCisgICAgbV90eXBl
VHJlZSA9IG5ldyBUeXBlVmlzaWJpbGl0eVRyZWUoIG1fbW9kZWwgKTsKK30KKwordm9pZCBUeXBl
VmlzaWJpbGl0eVRyZWVUZXN0OjpjbGVhbnVwVGVzdENhc2UoKQoreworICAgIGRlbGV0ZSBtX21v
ZGVsOworICAgIGRlbGV0ZSBtX3R5cGVUcmVlOworICAgIGRlbGV0ZSBtX3N0b3JhZ2VEaXI7Cit9
CisKKwordm9pZCBUeXBlVmlzaWJpbGl0eVRyZWVUZXN0Ojppbml0KCkKK3sKKyAgICBtX21vZGVs
LT5yZW1vdmVBbGxTdGF0ZW1lbnRzKCk7CisKKyAgICAvLyB3ZSBjcmVhdGUgb25lIGZha2Ugb250
b2xvZ3kKKyAgICAvLworICAgIC8vIHNpdHVhdGlvbnMgd2UgbmVlZCB0byB0ZXN0OgorICAgIC8v
ICogY2xhc3MgdGhhdCBpcyBtYXJrZWQgdmlzaWJsZSBzaG91bGQgc3RheSB2aXNpYmxlCisgICAg
Ly8gKiBjbGFzcyB0aGF0IGlzIG1hcmtlZCBpbnZpc2libGUgc2hvdWxkIHN0YXkgaW52aXNpYmxl
CisgICAgLy8gKiBub24tbWFya2VkIHN1YmNsYXNzIG9mIHZpc2libGUgc2hvdWxkIGJlIHZpc2li
bGUsIHRvbworICAgIC8vICogbm9uLW1hcmtlZCBzdWJjbGFzcyBvZiBpbnZpc2libGUgc2hvdWxk
IGJlIGludmlzaWJsZSwgdG9vCisgICAgLy8gKiBtYXJrZWQgc3ViY2xhc3Mgc2hvdWxkIGtlZXAg
aXRzIG93biB2aXNpYmxpdHkgYW5kIG5vdCBpbmhlcml0IGZyb20gcGFyZW50CisgICAgLy8gKiB3
aG9sZSBicmFuY2ggc2hvdWxkIGluaGVyaXQgZnJvbSBwYXJlbnQKKyAgICAvLyAqIGlmIG9uZSBw
YXJlbnQgaXMgdmlzaWJsZSB0aGUgY2xhc3MgaXMgdmlzaWJsZSwgdG9vLCBldmVuIGlmIE4gb3Ro
ZXIgcGFyZW50cyBhcmUgbm90CisgICAgLy8gKiBpZiBhbGwgcGFyZW50cyBhcmUgaW52aXNpYmxl
LCB0aGUgY2xhc3MgaXMgaW52aXNpYmxlLCBldmVuIGlmIGhpZ2hlciB1cCBpbiB0aGUgYnJhbmNo
IGEgY2xhc3MgaXMgdmlzaWJsZQorICAgIC8vICogcHJvcGVybHkgaGFuZGxlIGxvb3BzIChhcyBp
bjogZG8gbm90IHJ1biBpbnRvIGFuIGVuZGxlc3MgbG9vcCkKKyAgICAvLworICAgIC8vIEEKKyAg
ICAvLyB8LSBCIC0gaW52aXNpYmxlCisgICAgLy8gICAgfC0gQworICAgIC8vICAgICAgIHwtIEQg
LSB2aXNpYmxlCisgICAgLy8gICAgICAgICAgfC0gRQorICAgIC8vICAgICAgICAgICAgIHwtIEYK
KyAgICAvLyAgICB8LSBHCisgICAgLy8KKyAgICAvLyBBQSAtIGludmlzaWJsZQorICAgIC8vIHwg
LSBGCisgICAgLy8gfCAtIEcKKyAgICAvLworICAgIC8vIFgKKyAgICAvLyB8LSBZIC0gaW52aXNp
YmxlCisgICAgLy8gICAgfC0gWgorICAgIC8vICAgICAgIHwtIFgKKworICAgIFFVcmwgZ3JhcGgo
ImdyYXBoOi9vbnRvIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBncmFwaCwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5STDo6T250
b2xvZ3koKSwgZ3JhcGggKTsKKworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250
bzovQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQo
IFFVcmwoIm9udG86L0IiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9DIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1f
bW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRCIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5
OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGgg
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0UiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNz
KCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9GIiks
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgi
b250bzovRyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1l
bnQoIFFVcmwoIm9udG86L0FBIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fbW9kZWwt
PmFkZFN0YXRlbWVudCggUVVybCgib250bzovWCIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAg
ICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L1kiKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdy
YXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9aIiksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpD
bGFzcygpLCBncmFwaCApOworCisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRv
Oi9CIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250
bzovQSIpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzov
QyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86
L0IiKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0Qi
KSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9D
IiksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9FIiks
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovRCIp
LCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRiIpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0UiKSwg
Z3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0ciKSwgU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9CIiksIGdy
YXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9GIiksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQUEiKSwgZ3Jh
cGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0ciKSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9BQSIpLCBncmFw
aCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovWSIpLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L1giKSwgZ3JhcGgg
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L1oiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9ZIiksIGdyYXBoICk7
CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9YIiksIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovWiIpLCBncmFwaCApOwor
CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9CIiksIFNvcHJhbm86OlZv
Y2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKGZhbHNlKSwgZ3JhcGgg
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0QiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUodHJ1ZSksIGdyYXBo
ICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9BQSIpLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZShmYWxzZSksIGdy
YXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9ZIiksIFNvcHJh
bm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKGZhbHNlKSwg
Z3JhcGggKTsKKworICAgIG1fdHlwZVRyZWUtPnJlYnVpbGRUcmVlKCk7Cit9CisKK3ZvaWQgVHlw
ZVZpc2liaWxpdHlUcmVlVGVzdDo6dGVzdFR5cGVWaXNpYmlsaXR5VHJlZSgpCit7CisgICAgUVZF
UklGWShtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgib250bzovQSIpKSk7CisgICAgUVZFUklG
WSghbV90eXBlVHJlZS0+aXNWaXNpYmxlKFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlko
IW1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9DIikpKTsKKyAgICBRVkVSSUZZKG1f
dHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9EIikpKTsKKyAgICBRVkVSSUZZKG1fdHlw
ZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9FIikpKTsKKyAgICBRVkVSSUZZKG1fdHlwZVRy
ZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVl
LT5pc1Zpc2libGUoUVVybCgib250bzovRyIpKSk7CisgICAgUVZFUklGWSghbV90eXBlVHJlZS0+
aXNWaXNpYmxlKFFVcmwoIm9udG86L0FBIikpKTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5p
c1Zpc2libGUoUVVybCgib250bzovWCIpKSk7IC8vIGJlY2F1c2Ugb25seSB0b3AtbGV2ZWwgY2xh
c3NlcyBpbmhlcml0IGZyb20gcmRmczpSZXNvdXJjZQorICAgIFFWRVJJRlkoIW1fdHlwZVRyZWUt
PmlzVmlzaWJsZShRVXJsKCJvbnRvOi9ZIikpKTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5p
c1Zpc2libGUoUVVybCgib250bzovWiIpKSk7Cit9CisKK1FURVNUX0tERU1BSU5fQ09SRShUeXBl
VmlzaWJpbGl0eVRyZWVUZXN0KQorCisjaW5jbHVkZSAidHlwZXZpc2liaWxpdHl0cmVldGVzdC5t
b2MiCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gc2VydmljZXMvc3RvcmFnZS90ZXN0L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAwKQor
Kysgc2VydmljZXMvc3RvcmFnZS90ZXN0L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE4IEBACitzZXQoIEVYRUNVVEFCTEVfT1VUUFVUX1BBVEggJHtDTUFLRV9DVVJSRU5U
X0JJTkFSWV9ESVJ9ICkKKwora2RlNF9hZGRfdW5pdF90ZXN0KGNyYXBweWluZmVyZW5jZXIydGVz
dAorICBjcmFwcHlpbmZlcmVuY2VyMnRlc3QuY3BwCisgIC4uL2NyYXBweWluZmVyZW5jZXIyLmNw
cAorICAuLi90eXBldmlzaWJpbGl0eXRyZWUuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNy
YXBweWluZmVyZW5jZXIydGVzdAorICAke1FUX1FUVEVTVF9MSUJSQVJZfQorICAke1NPUFJBTk9f
TElCUkFSSUVTfQorICAke0tERTRfS0RFQ09SRV9MSUJTfSkKKwora2RlNF9hZGRfdW5pdF90ZXN0
KHR5cGV2aXNpYmlsaXR5dHJlZXRlc3QKKyAgdHlwZXZpc2liaWxpdHl0cmVldGVzdC5jcHAKKyAg
Li4vdHlwZXZpc2liaWxpdHl0cmVlLmNwcCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0eXBldmlz
aWJpbGl0eXRyZWV0ZXN0CisgICR7UVRfUVRURVNUX0xJQlJBUll9CisgICR7U09QUkFOT19MSUJS
QVJJRVN9CisgICR7S0RFNF9LREVDT1JFX0xJQlN9KQpJbmRleDogc2VydmljZXMvc3RvcmFnZS9v
bnRvbG9neWxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS9vbnRvbG9n
eWxvYWRlci5jcHAJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL29udG9s
b2d5bG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTQgKzI0LDEwIEBACiAKICNpbmNs
dWRlIDxTb3ByYW5vL0dsb2JhbD4KICNpbmNsdWRlIDxTb3ByYW5vL05vZGU+Ci0jaW5jbHVkZSA8
U29wcmFuby9MaXRlcmFsVmFsdWU+CiAjaW5jbHVkZSA8U29wcmFuby9Nb2RlbD4KICNpbmNsdWRl
IDxTb3ByYW5vL1BsdWdpbk1hbmFnZXI+CiAjaW5jbHVkZSA8U29wcmFuby9TdGF0ZW1lbnRJdGVy
YXRvcj4KLSNpbmNsdWRlIDxTb3ByYW5vL1F1ZXJ5UmVzdWx0SXRlcmF0b3I+CiAjaW5jbHVkZSA8
U29wcmFuby9QYXJzZXI+Ci0jaW5jbHVkZSA8U29wcmFuby9Wb2NhYnVsYXJ5L05BTz4KLSNpbmNs
dWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvUkRGUz4KIAogI2luY2x1ZGUgPEtDb25maWc+CiAjaW5j
bHVkZSA8S0NvbmZpZ0dyb3VwPgpAQCAtMTg4LDcgKzE4NCw2IEBACiAgICAgZWxzZSB7CiAgICAg
ICAgIGQtPmZvcmNlT250b2xvZ3lVcGRhdGUgPSBmYWxzZTsKICAgICAgICAgZC0+dXBkYXRlVGlt
ZXIuc3RvcCgpOwotICAgICAgICB1cGRhdGVVc2VyVmlzaWJpbGl0eSgpOwogICAgICAgICBlbWl0
IG9udG9sb2d5TG9hZGluZ0ZpbmlzaGVkKHRoaXMpOwogICAgIH0KIH0KQEAgLTIyNSwxMTUgKzIy
MCw0IEBACiAgICAgfQogfQogCi0KLW5hbWVzcGFjZSB7Ci0gICAgc3RydWN0IFVzZXJWaXNpYmxl
Tm9kZSB7Ci0gICAgICAgIFVzZXJWaXNpYmxlTm9kZSggY29uc3QgUVVybCYgciApCi0gICAgICAg
ICAgICA6IHVyaSggciApLAotICAgICAgICAgICAgICB1c2VyVmlzaWJsZSggMCApIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIFFVcmwgdXJpOwotICAgICAgICBpbnQgdXNlclZpc2libGU7Ci0gICAg
ICAgIFFIYXNoPFFVcmwsIFVzZXJWaXNpYmxlTm9kZSo+IHBhcmVudHM7Ci0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAqIFNldCB0aGUgdmFsdWUgb2YgbmFvOnVzZXJWaXNpYmxlIGFuZCBhZGQgdGhl
IGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICogc3RhdGVtZW50IHRvIHRoZSBsaXN0IG9mIHN0YXRl
bWVudHMgaW4gY2FzZSB0aGUgdmFsdWUgd2FzCi0gICAgICAgICAqIG5vdCBkZWZpbmVkIHlldC4K
LSAgICAgICAgICovCi0gICAgICAgIGludCB1cGRhdGVVc2VyVmlzaWJpbGl0eSggUUxpc3Q8U29w
cmFubzo6U3RhdGVtZW50PiYgc3RhdGVtZW50cyApIHsKLSAgICAgICAgICAgIGlmICggdXNlclZp
c2libGUgIT0gMCApIHsKLSAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiVXNlciB2aXNpYmls
aXR5IGFscmVhZHkgc2V0IiA8PCB1cmkudG9TdHJpbmcoKSA8PCAoIHVzZXJWaXNpYmxlID09IDEg
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdXNlclZpc2libGU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoICFwYXJlbnRzLmlzRW1wdHko
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICggUUhhc2g8UVVybCwgVXNlclZpc2libGVO
b2RlKj46Oml0ZXJhdG9yIGl0ID0gcGFyZW50cy5iZWdpbigpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICBpdCAhPSBwYXJlbnRzLmVuZCgpOyArK2l0ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAga0RlYnVnKCkgPDwgdXJpLnRvU3RyaW5nKCkgPDwgIkNoZWNraW5nIHBhcmVudCBjbGFz
cyIgPDwgaXQudmFsdWUoKS0+dXJpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGl0LnZhbHVlKCktPnVwZGF0ZVVzZXJWaXNpYmlsaXR5KCBzdGF0ZW1lbnRzICkgPT0g
LTEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlclZpc2libGUgPSAtMTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoIHVzZXJWaXNpYmxlID09IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGRl
ZmF1bHQgdG8gdmlzaWJsZQotICAgICAgICAgICAgICAgICAgICB1c2VyVmlzaWJsZSA9IDE7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHN0YXRlbWVudHMgPDwgU29wcmFubzo6
U3RhdGVtZW50KCB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6TGl0
ZXJhbFZhbHVlKCB1c2VyVmlzaWJsZSA9PSAxICksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5lcG9tdWs6OlZvY2FidWxhcnk6OktVVk86Om5ybE9u
dG9sb2d5R3JhcGgoKSApOwotICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJTZXR0aW5nIG5h
bzp1c2VyVmlzaWJsZSBvZiIgPDwgdXJpLnRvU3RyaW5nKCkgPDwgKCB1c2VyVmlzaWJsZSA9PSAx
ICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJWaXNpYmxlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfTsKLX0KLQotdm9pZCBOZXBvbXVrOjpPbnRvbG9neUxvYWRlcjo6dXBk
YXRlVXNlclZpc2liaWxpdHkoKQotewotICAgIC8vCi0gICAgLy8gYnVpbGQgYSB0cmVlIG9mIGFs
bCBjbGFzc2VzIGFuZCBwcm9wZXJ0aWVzCi0gICAgLy8KLSAgICBRU3RyaW5nIHF1ZXJ5Ci0gICAg
ICAgID0gUVN0cmluZzo6ZnJvbUxhdGluMSggInNlbGVjdCBkaXN0aW5jdCA/ciA/cCA/diB3aGVy
ZSB7ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyA/ciBhIHJkZnM6Q2xhc3Mg
LiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpz
dWJDbGFzc09mID9wIC4gP3AgYSByZGZzOkNsYXNzIC4gfSAuIH0gIgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJVTklPTiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InsgP3IgYSByZGY6UHJvcGVydHkgLiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ik9QVElPTkFMIHsgP3IgcmRmczpzdWJQcm9wZXJ0eU9mID9wIC4gP3AgYSByZGY6UHJvcGVydHkg
LiB9IC4gfSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3Ig
JTEgP3YgLiB9IC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGSUxURVIoP3Ih
PXJkZnM6UmVzb3VyY2UpIC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9IiAp
Ci0gICAgICAgIC5hcmcoIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggU29wcmFubzo6Vm9j
YWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpICkgKTsKLSAgICBrRGVidWcoKSA8PCBxdWVyeTsK
LSAgICBRSGFzaDxRVXJsLCBVc2VyVmlzaWJsZU5vZGUqPiBhbGw7Ci0gICAgewotICAgICAgICBT
b3ByYW5vOjpRdWVyeVJlc3VsdEl0ZXJhdG9yIGl0Ci0gICAgICAgICAgICA9IGQtPm1vZGVsLT5l
eGVjdXRlUXVlcnkoIHF1ZXJ5LCBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCAp
OwotICAgICAgICB3aGlsZSggaXQubmV4dCgpICkgewotICAgICAgICAgICAgY29uc3QgUVVybCBy
ID0gaXRbInIiXS51cmkoKTsKLSAgICAgICAgICAgIGNvbnN0IFNvcHJhbm86Ok5vZGUgcCA9IGl0
WyJwIl07Ci0gICAgICAgICAgICBjb25zdCBTb3ByYW5vOjpOb2RlIHYgPSBpdFsidiJdOwotCi0g
ICAgICAgICAgICBpZiAoICFhbGwuY29udGFpbnMoIHIgKSApIHsKLSAgICAgICAgICAgICAgICBV
c2VyVmlzaWJsZU5vZGUqIHJfdXZuID0gbmV3IFVzZXJWaXNpYmxlTm9kZSggciApOwotICAgICAg
ICAgICAgICAgIGFsbC5pbnNlcnQoIHIsIHJfdXZuICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiggdi5pc0xpdGVyYWwoKSApCi0gICAgICAgICAgICAgICAgYWxsW3JdLT51c2VyVmlz
aWJsZSA9ICh2LmxpdGVyYWwoKS50b0Jvb2woKSA/IDEgOiAtMSk7Ci0gICAgICAgICAgICBpZiAo
IHAuaXNSZXNvdXJjZSgpICYmCi0gICAgICAgICAgICAgICAgIHAudXJpKCkgIT0gciAmJgotICAg
ICAgICAgICAgICAgICBwLnVyaSgpICE9IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291
cmNlKCkgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCAhYWxsLmNvbnRhaW5zKCBwLnVyaSgpICkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFVzZXJWaXNpYmxlTm9kZSogcF91dm4gPSBuZXcgVXNl
clZpc2libGVOb2RlKCBwLnVyaSgpICk7Ci0gICAgICAgICAgICAgICAgICAgIGFsbC5pbnNlcnQo
IHAudXJpKCksIHBfdXZuICk7Ci0gICAgICAgICAgICAgICAgICAgIGFsbFtyXS0+cGFyZW50cy5p
bnNlcnQoIHAudXJpKCksIHBfdXZuICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhbGxbcl0tPnBhcmVudHMuaW5zZXJ0KCBw
LnVyaSgpLCBhbGxbcC51cmkoKV0gKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIGNyZWF0ZSBhIGxpc3Qgb2YgYWxs
IHN0YXRlbWVudHMgd2UgbmVlZCB0byBhZGQKLSAgICAvLwotICAgIFFMaXN0PFNvcHJhbm86OlN0
YXRlbWVudD4gc3RhdGVtZW50czsKLSAgICBmb3IgKCBRSGFzaDxRVXJsLCBVc2VyVmlzaWJsZU5v
ZGUqPjo6aXRlcmF0b3IgaXQgPSBhbGwuYmVnaW4oKTsKLSAgICAgICAgICBpdCAhPSBhbGwuZW5k
KCk7ICsraXQgKSB7Ci0gICAgICAgIGl0LnZhbHVlKCktPnVwZGF0ZVVzZXJWaXNpYmlsaXR5KCBz
dGF0ZW1lbnRzICk7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBjbGVhbnVwIGFuZCBhZGQgYWxs
IHRoZSBuZWNlc3Nhcnkgc3RhdGVtZW50cyB0byB0aGUgbWFpbiBtb2RlbAotICAgIC8vCi0gICAg
cURlbGV0ZUFsbCggYWxsICk7Ci0gICAgZC0+bW9kZWwtPmFkZFN0YXRlbWVudHMoIHN0YXRlbWVu
dHMgKTsKLX0KLQogI2luY2x1ZGUgIm9udG9sb2d5bG9hZGVyLm1vYyIKSW5kZXg6IHNlcnZpY2Vz
L3N0b3JhZ2Uvb250b2xvZ3lsb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdl
L29udG9sb2d5bG9hZGVyLmgJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdl
L29udG9sb2d5bG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDEyICs2NSw2IEBACiAgICAg
ICAgICAqLwogICAgICAgICB2b2lkIGltcG9ydE9udG9sb2d5KCBjb25zdCBRU3RyaW5nJiB1cmwg
KTsKIAotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBuYW86dXNlclZpc2libGUgcHJv
cGVydGllcyBmb3IgYWxsIGNsYXNzZXMgYW5kIHByb3BlcnRpZXMKLSAgICAgICAgICogYW5kIHN0
b3JlcyB0aGVtIGluIHRoZSBrdXZvIG5hbWVzcGFjZS4KLSAgICAgICAgICovCi0gICAgICAgIHZv
aWQgdXBkYXRlVXNlclZpc2liaWxpdHkoKTsKLQogICAgIFFfU0lHTkFMUzoKICAgICAgICAgLyoq
CiAgICAgICAgICAqIEVtaXR0ZWQgb25jZSB0aGUgdXBkYXRlIG9mIHRoZSBvbnRvbG9naWVzIGlz
IGRvbmUuCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmlsaXR5dHJlZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS90eXBldmlzaWJpbGl0eXRyZWUuY3BwCShyZXZp
c2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFnZS90eXBldmlzaWJpbGl0eXRyZWUuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBOZXBvbXVrIEtERSBwcm9qZWN0LgorICAgQ29weXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBU
cnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9u
IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFu
eQorICAgbGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5W
LiAob3IgaXRzCisgICBzdWNjZXNzb3IgYXBwcm92ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RF
IGUuVi4pLCB3aGljaCBzaGFsbAorICAgYWN0IGFzIGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9u
IDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNlLgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4g
IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNs
dWRlICJ0eXBldmlzaWJpbGl0eXRyZWUuaCIKKworI2luY2x1ZGUgPFNvcHJhbm8vTW9kZWw+Cisj
aW5jbHVkZSA8U29wcmFuby9RdWVyeVJlc3VsdEl0ZXJhdG9yPgorI2luY2x1ZGUgPFNvcHJhbm8v
Tm9kZT4KKyNpbmNsdWRlIDxTb3ByYW5vL0xpdGVyYWxWYWx1ZT4KKyNpbmNsdWRlIDxTb3ByYW5v
L1ZvY2FidWxhcnkvTkFPPgorI2luY2x1ZGUgPFNvcHJhbm8vVm9jYWJ1bGFyeS9SREZTPgorCisj
aW5jbHVkZSA8UXRDb3JlL1FNdXRleExvY2tlcj4KKworI2luY2x1ZGUgPEtEZWJ1Zz4KKworCitj
bGFzcyBUeXBlVmlzaWJpbGl0eVRyZWU6OlR5cGVWaXNpYmlsaXR5Tm9kZQoreworcHVibGljOgor
ICAgIFR5cGVWaXNpYmlsaXR5Tm9kZSggY29uc3QgUVVybCYgciApCisgICAgICAgIDogdXJpKCBy
ICksCisgICAgICAgICAgdXNlclZpc2libGUoIDAgKSB7CisgICAgfQorCisgICAgUVVybCB1cmk7
CisgICAgaW50IHVzZXJWaXNpYmxlOworICAgIFFTZXQ8VHlwZVZpc2liaWxpdHlOb2RlKj4gcGFy
ZW50czsKKworICAgIC8qKgorICAgICAqIFNldCB0aGUgdmFsdWUgb2YgbmFvOnVzZXJWaXNpYmxl
LgorICAgICAqIEEgY2xhc3MgaXMgdmlzaWJsZSBpZiBpdCBoYXMgYXQgbGVhc3Qgb25lIHZpc2li
bGUgZGlyZWN0IHBhcmVudCBjbGFzcy4KKyAgICAgKi8KKyAgICBpbnQgdXBkYXRlVXNlclZpc2li
aWxpdHkoIFFTZXQ8VHlwZVZpc2liaWxpdHlOb2RlKj4mIHZpc2l0ZWROb2RlcyApIHsKKyAgICAg
ICAgaWYgKCB1c2VyVmlzaWJsZSAhPSAwICkgeworICAgICAgICAgICAgcmV0dXJuIHVzZXJWaXNp
YmxlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKCAhcGFyZW50
cy5pc0VtcHR5KCkgKSB7CisgICAgICAgICAgICAgICAgZm9yICggUVNldDxUeXBlVmlzaWJpbGl0
eU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBwYXJlbnRzLmJlZ2luKCk7CisgICAgICAgICAgICAgICAg
ICAgICBpdCAhPSBwYXJlbnRzLmVuZCgpOyArK2l0ICkgeworICAgICAgICAgICAgICAgICAgICAv
LyBhdm9pZCBlbmRsZXNzIGxvb3BzCisgICAgICAgICAgICAgICAgICAgIGlmKCB2aXNpdGVkTm9k
ZXMuY29udGFpbnMoKml0KSApCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgdmlzaXRlZE5vZGVzLmluc2VydCggKml0ICk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICggKCppdCktPnVwZGF0ZVVzZXJWaXNpYmlsaXR5KCB2aXNpdGVkTm9kZXMg
KSA9PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdXNlclZpc2libGUgPSAxOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIHVzZXJWaXNpYmxl
ID09IDAgKSB7CisgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBpbnZpc2libGUKKyAgICAg
ICAgICAgICAgICB1c2VyVmlzaWJsZSA9IC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
a0RlYnVnKCkgPDwgIlNldHRpbmcgbmFvOnVzZXJWaXNpYmxlIG9mIiA8PCB1cmkudG9TdHJpbmco
KSA8PCAoIHVzZXJWaXNpYmxlID09IDEgKTsKKyAgICAgICAgICAgIHJldHVybiB1c2VyVmlzaWJs
ZTsKKyAgICAgICAgfQorICAgIH0KK307CisKK1R5cGVWaXNpYmlsaXR5VHJlZTo6VHlwZVZpc2li
aWxpdHlUcmVlKCBTb3ByYW5vOjpNb2RlbCogbW9kZWwgKQorICAgIDogbV9tb2RlbChtb2RlbCkK
K3sKK30KKworVHlwZVZpc2liaWxpdHlUcmVlOjp+VHlwZVZpc2liaWxpdHlUcmVlKCkKK3sKKyAg
ICBRTXV0ZXhMb2NrZXIgbG9jayggJm1fbXV0ZXggKTsKK30KKwordm9pZCBUeXBlVmlzaWJpbGl0
eVRyZWU6OnJlYnVpbGRUcmVlKCkKK3sKKyAgICBRTXV0ZXhMb2NrZXIgbG9jayggJm1fbXV0ZXgg
KTsKKworICAgIC8vIGNsZWFudXAKKyAgICBtX3Zpc2liaWxpdHlIYXNoLmNsZWFyKCk7CisKKyAg
ICAvLyB3ZSBidWlsZCBhIHRlbXBvcmFyeSBoZWxwZXIgdHJlZQorICAgIFFIYXNoPFFVcmwsIFR5
cGVWaXNpYmlsaXR5Tm9kZSo+IHRyZWU7CisKKyAgICBjb25zdCBRU3RyaW5nIHF1ZXJ5CisgICAg
ICAgID0gUVN0cmluZzo6ZnJvbUxhdGluMSggInNlbGVjdCBkaXN0aW5jdCA/ciA/cCA/diB3aGVy
ZSB7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyA/ciBhIHJkZnM6Q2xhc3Mg
LiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpz
dWJDbGFzc09mID9wIC4gP3AgYSByZGZzOkNsYXNzIC4gfSAuIH0gIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJVTklPTiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InsgP3IgYSByZGY6UHJvcGVydHkgLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ik9QVElPTkFMIHsgP3IgcmRmczpzdWJQcm9wZXJ0eU9mID9wIC4gP3AgYSByZGY6UHJvcGVydHkg
LiB9IC4gfSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3Ig
JTEgP3YgLiB9IC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGSUxURVIoP3Ih
PXJkZnM6UmVzb3VyY2UpIC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9IiAp
CisgICAgICAgICAgICAuYXJnKCBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIFNvcHJhbm86
OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSApICk7CisgICAga0RlYnVnKCkgPDwgcXVl
cnk7CisgICAgU29wcmFubzo6UXVlcnlSZXN1bHRJdGVyYXRvciBpdAorICAgICAgICAgICAgPSBt
X21vZGVsLT5leGVjdXRlUXVlcnkoIHF1ZXJ5LCBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFn
ZVNwYXJxbCApOworICAgIHdoaWxlKCBpdC5uZXh0KCkgKSB7CisgICAgICAgIGNvbnN0IFFVcmwg
ciA9IGl0WyJyIl0udXJpKCk7CisgICAgICAgIGNvbnN0IFNvcHJhbm86Ok5vZGUgcCA9IGl0WyJw
Il07CisgICAgICAgIGNvbnN0IFNvcHJhbm86Ok5vZGUgdiA9IGl0WyJ2Il07CisKKyAgICAgICAg
aWYgKCAhdHJlZS5jb250YWlucyggciApICkgeworICAgICAgICAgICAgVHlwZVZpc2liaWxpdHlO
b2RlKiByX3V2biA9IG5ldyBUeXBlVmlzaWJpbGl0eU5vZGUoIHIgKTsKKyAgICAgICAgICAgIHRy
ZWUuaW5zZXJ0KCByLCByX3V2biApOworICAgICAgICB9CisgICAgICAgIGlmKCB2LmlzTGl0ZXJh
bCgpICkKKyAgICAgICAgICAgIHRyZWVbcl0tPnVzZXJWaXNpYmxlID0gKHYubGl0ZXJhbCgpLnRv
Qm9vbCgpID8gMSA6IC0xKTsKKyAgICAgICAgaWYgKCBwLmlzUmVzb3VyY2UoKSAmJgorICAgICAg
ICAgICAgICAgIHAudXJpKCkgIT0gciAmJgorICAgICAgICAgICAgICAgIHAudXJpKCkgIT0gU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSApIHsKKyAgICAgICAgICAgIGlmICgg
IXRyZWUuY29udGFpbnMoIHAudXJpKCkgKSApIHsKKyAgICAgICAgICAgICAgICBUeXBlVmlzaWJp
bGl0eU5vZGUqIHBfdXZuID0gbmV3IFR5cGVWaXNpYmlsaXR5Tm9kZSggcC51cmkoKSApOworICAg
ICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KCBwLnVyaSgpLCBwX3V2biApOworICAgICAgICAgICAg
ICAgIHRyZWVbcl0tPnBhcmVudHMuaW5zZXJ0KCBwX3V2biApOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdHJlZVtyXS0+cGFyZW50cy5pbnNlcnQo
IHRyZWVbcC51cmkoKV0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIG1ha2Ugc3VyZSByZGZzOlJlc291cmNlIGlzIHZpc2libGUgYnkgZGVmYXVsdAorICAgIFR5
cGVWaXNpYmlsaXR5Tm9kZSogcmRmc1Jlc291cmNlTm9kZSA9IDA7CisgICAgUUhhc2g8UVVybCwg
VHlwZVZpc2liaWxpdHlOb2RlKj46Oml0ZXJhdG9yIHJkZnNSZXNvdXJjZUl0ID0gdHJlZS5maW5k
KFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpOworICAgIGlmKCByZGZzUmVz
b3VyY2VJdCA9PSB0cmVlLmVuZCgpICkgeworICAgICAgICByZGZzUmVzb3VyY2VOb2RlID0gbmV3
IFR5cGVWaXNpYmlsaXR5Tm9kZShTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgp
KTsKKyAgICAgICAgdHJlZS5pbnNlcnQoIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291
cmNlKCksIHJkZnNSZXNvdXJjZU5vZGUgKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJk
ZnNSZXNvdXJjZU5vZGUgPSByZGZzUmVzb3VyY2VJdC52YWx1ZSgpOworICAgIH0KKyAgICBpZigg
cmRmc1Jlc291cmNlTm9kZS0+dXNlclZpc2libGUgPT0gMCApIHsKKyAgICAgICAgcmRmc1Jlc291
cmNlTm9kZS0+dXNlclZpc2libGUgPSAxOworICAgIH0KKyAgICAvLyBhZGQgcmRmczpSZXNvdXJj
ZSBhcyBwYXJlbnQgZm9yIGFsbCB0b3AtbGV2ZWwgY2xhc3NlcworICAgIGZvciAoIFFIYXNoPFFV
cmwsIFR5cGVWaXNpYmlsaXR5Tm9kZSo+OjppdGVyYXRvciBpdCA9IHRyZWUuYmVnaW4oKTsKKyAg
ICAgICAgICBpdCAhPSB0cmVlLmVuZCgpOyArK2l0ICkgeworICAgICAgICBpZiggaXQudmFsdWUo
KSAhPSByZGZzUmVzb3VyY2VOb2RlICYmIGl0LnZhbHVlKCktPnBhcmVudHMuaXNFbXB0eSgpICkg
eworICAgICAgICAgICAgaXQudmFsdWUoKS0+cGFyZW50cy5pbnNlcnQoIHJkZnNSZXNvdXJjZU5v
ZGUgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGZpbmFsbHkgZGV0ZXJtaW5lIHZpc2li
aWxpdHkgb2YgYWxsIG5vZGVzCisgICAgZm9yICggUUhhc2g8UVVybCwgVHlwZVZpc2liaWxpdHlO
b2RlKj46Oml0ZXJhdG9yIGl0ID0gdHJlZS5iZWdpbigpOworICAgICAgICAgIGl0ICE9IHRyZWUu
ZW5kKCk7ICsraXQgKSB7CisgICAgICAgIFFTZXQ8VHlwZVZpc2liaWxpdHlOb2RlKj4gdmlzaXRl
ZE5vZGVzOworICAgICAgICBtX3Zpc2liaWxpdHlIYXNoLmluc2VydChpdC5rZXkoKSwgaXQudmFs
dWUoKS0+dXBkYXRlVXNlclZpc2liaWxpdHkoIHZpc2l0ZWROb2RlcyApID09IDEgKTsKKyAgICB9
CisKKyAgICAvLyBnZXQgcmlkIG9mIHRoZSB0ZW1wIHRyZWUKKyAgICBxRGVsZXRlQWxsKHRyZWUp
OworfQorCitib29sIFR5cGVWaXNpYmlsaXR5VHJlZTo6aXNWaXNpYmxlKGNvbnN0IFFVcmwgJnR5
cGUpIGNvbnN0Cit7CisgICAgUU11dGV4TG9ja2VyIGxvY2soICZtX211dGV4ICk7CisKKyAgICBR
SGFzaDxRVXJsLCBib29sPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Zpc2liaWxpdHlIYXNoLmNv
bnN0RmluZCh0eXBlKTsKKyAgICBpZiggaXQgIT0gbV92aXNpYmlsaXR5SGFzaC5jb25zdEVuZCgp
ICkgeworICAgICAgICByZXR1cm4gKml0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAga0Rl
YnVnKCkgPDwgIkNvdWxkIG5vdCBmaW5kIHR5cGUiIDw8IHR5cGUgPDwgImluIHRyZWUuIERlZmF1
bHRpbmcgdG8gdmlzaWJsZS4iOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CkluZGV4
OiBzZXJ2aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmlsaXR5dHJlZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNl
cnZpY2VzL3N0b3JhZ2UvdHlwZXZpc2liaWxpdHl0cmVlLmgJKHJldmlzaW9uIDApCisrKyBzZXJ2
aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmlsaXR5dHJlZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU3IEBACisvKgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE5lcG9tdWsgS0RFIHByb2pl
Y3QuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3Jn
PgorCisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55CisgICBsYXRlciB2ZXJzaW9u
IGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nl
c3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiksIHdoaWNoIHNoYWxs
CisgICBhY3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2Yg
dGhlIGxpY2Vuc2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6
Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2lmbmRlZiBUWVBFVklTSUJJTElUWVRS
RUVfSAorI2RlZmluZSBUWVBFVklTSUJJTElUWVRSRUVfSAorCisjaW5jbHVkZSA8UXRDb3JlL1FV
cmw+CisjaW5jbHVkZSA8UXRDb3JlL1FIYXNoPgorI2luY2x1ZGUgPFF0Q29yZS9RTXV0ZXg+CisK
K25hbWVzcGFjZSBTb3ByYW5vIHsKK2NsYXNzIE1vZGVsOworfQorCisvKioKKyAqIEJ1aWxkcyBh
IHR5cGUgdHJlZSB0aGF0IGFsbG93cyB0byBjaGVjayB0aGUgbmFvOnVzZXJWaXNpYmxlCisgKiB2
YWx1ZSBmb3IgZWFjaCBleGlzdGluZyB0eXBlLgorICovCitjbGFzcyBUeXBlVmlzaWJpbGl0eVRy
ZWUKK3sKK3B1YmxpYzoKKyAgICBUeXBlVmlzaWJpbGl0eVRyZWUoIFNvcHJhbm86Ok1vZGVsKiBt
b2RlbCApOworICAgIH5UeXBlVmlzaWJpbGl0eVRyZWUoKTsKKworICAgIHZvaWQgcmVidWlsZFRy
ZWUoKTsKKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBzcGVjaWZpZWQgdHlwZSBpcyB2
aXNpYmxlLgorICAgICAqLworICAgIGJvb2wgaXNWaXNpYmxlKCBjb25zdCBRVXJsJiB0eXBlICkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgU29wcmFubzo6TW9kZWwqIG1fbW9kZWw7CisgICAgY2xh
c3MgVHlwZVZpc2liaWxpdHlOb2RlOworICAgIFFIYXNoPFFVcmwsIGJvb2w+IG1fdmlzaWJpbGl0
eUhhc2g7CisgICAgbXV0YWJsZSBRTXV0ZXggbV9tdXRleDsKK307CisKKyNlbmRpZiAvLyBUWVBF
VklTSUJJTElUWVRSRUVfSApJbmRleDogc2VydmljZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL3JlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAx
MjEzOTQwKQorKysgc2VydmljZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgogI2luY2x1ZGUg
Im1vZGVsY29weWpvYi5oIgorI2luY2x1ZGUgImNyYXBweWluZmVyZW5jZXIyLmgiCiAKICNpbmNs
dWRlIDxTb3ByYW5vL0JhY2tlbmQ+CiAjaW5jbHVkZSA8U29wcmFuby9QbHVnaW5NYW5hZ2VyPgpA
QCAtNjksNiArNzAsOSBAQAogewogICAgIGtEZWJ1ZygpIDw8IG1fbmFtZTsKIAorICAgIGRlbGV0
ZSBtX2luZmVyZW5jZXI7CisgICAgbV9pbmZlcmVuY2VyID0gMDsKKwogICAgIGRlbGV0ZSBtX21v
ZGVsQ29weUpvYjsKICAgICBtX21vZGVsQ29weUpvYiA9IDA7CiAKQEAgLTE2NSw5ICsxNjksMTMg
QEAKICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBTb3ByYW5v
OjpVdGlsOjpTaWduYWxDYWNoZU1vZGVsKiBzY20gPSBuZXcgU29wcmFubzo6VXRpbDo6U2lnbmFs
Q2FjaGVNb2RlbCggbV9tb2RlbCApOwogICAgIHNjbS0+c2V0UGFyZW50KHRoaXMpOyAvLyBtZW1v
cnkgbWFuYWdlbWVudAotCiAgICAgc2V0UGFyZW50TW9kZWwoIHNjbSApOwogCisgICAgLy8gY3Jl
YXRlIHRoZSBjcmFwcHkgaW5mZXJlbmNlIG1vZGVsIHdoaWNoIGhhbmRsZXMgcmRmczpzdWJDbGFz
c09mIG9ubHkgLT4gd2Ugb25seSB1c2UgdGhpcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIFJl
c291cmNlVHlwZVRlcm1zCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisgICAgbV9pbmZlcmVuY2VyID0gbmV3IENyYXBweUluZmVyZW5jZXIyKCBzY20gKTsKKyAgICBz
ZXRQYXJlbnRNb2RlbChtX2luZmVyZW5jZXIpOworCiAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0
byBjb252ZXJ0CiAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAg
Ym9vbCBjb252ZXJ0aW5nRGF0YSA9IGZhbHNlOwpAQCAtMzM3LDcgKzM0NSwxOCBAQAogICAgIC8v
IG5lZWRzIHRvIGJlIGFkZHJlc3NlZCBhcyB3ZWxsCiAgICAgc2V0dGluZ3MgPDwgU29wcmFubzo6
QmFja2VuZFNldHRpbmcoICJTZXJ2ZXJUaHJlYWRzIiwgMTAwICk7CiAKKyAgICAvLyBOZXZlciB0
YWtlIG1vcmUgdGhhbiA1IG1pbnV0ZXMgdG8gYW5zd2VyIGEgcXVlcnkgKHRoaXMgaXMgdG8gZmls
dGVyIG91dCBicm9rZW4gcXVlcmllcyBhbmQgYnVncyBpbiBWaXJ0dW9zbydzIHF1ZXJ5IG9wdGlt
aXplcikKKyAgICAvLyB0cnVlZzogV2UgY2Fubm90IGFjdGl2YXRlIHRoaXMgeWV0LiAxLiBWaXJ0
dW9zbyA8IDYuMyBjcmFzaGVzIGFuZCAyLiBldmVuIG9wZW4gY3Vyc29ycyBhcmUgc3ViamVjdCB0
byB0aGUgdGltZW91dCB3aGljaCBpcyByZWFsbHkKKyAgICAvLyAgICAgICAgbm90IHdoYXQgd2Ug
d2FudCEKKy8vICAgIHNldHRpbmdzIDw8IFNvcHJhbm86OkJhY2tlbmRTZXR0aW5nKCAiUXVlcnlU
aW1lb3V0IiwgNSo2MDAwMCApOworCiAgICAgcmV0dXJuIHNldHRpbmdzOwogfQogCit2b2lkIE5l
cG9tdWs6OlJlcG9zaXRvcnk6OnVwZGF0ZUluZmVyZW5jZSgpCit7CisgICAgbV9pbmZlcmVuY2Vy
LT51cGRhdGVJbmZlcmVuY2VJbmRleCgpOworICAgIG1faW5mZXJlbmNlci0+dXBkYXRlQWxsUmVz
b3VyY2VzKCk7Cit9CisKICNpbmNsdWRlICJyZXBvc2l0b3J5Lm1vYyIKSW5kZXg6IHNlcnZpY2Vz
L3N0b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0
b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIuY3BwCShyZXZpc2lvbiAwKQorKysgc2VydmljZXMvc3Rv
cmFnZS9jcmFwcHlpbmZlcmVuY2VyMi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUwIEBA
CisvKgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE5lcG9tdWsgS0RFIHByb2plY3QuCisg
ICBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorCisg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55CisgICBsYXRlciB2ZXJzaW9uIGFjY2Vw
dGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nlc3NvciBh
cHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiksIHdoaWNoIHNoYWxsCisgICBh
Y3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxp
Y2Vuc2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu
Z251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImNyYXBweWluZmVyZW5jZXIyLmgi
CisjaW5jbHVkZSAidHlwZXZpc2liaWxpdHl0cmVlLmgiCisKKyNpbmNsdWRlIDxTb3ByYW5vL1Zv
Y2FidWxhcnkvTlJMPgorI2luY2x1ZGUgPFNvcHJhbm8vVm9jYWJ1bGFyeS9OQU8+CisjaW5jbHVk
ZSA8U29wcmFuby9Wb2NhYnVsYXJ5L1JERj4KKyNpbmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkv
UkRGUz4KKyNpbmNsdWRlIDxTb3ByYW5vL1N0YXRlbWVudD4KKyNpbmNsdWRlIDxTb3ByYW5vL1N0
YXRlbWVudEl0ZXJhdG9yPgorI2luY2x1ZGUgPFNvcHJhbm8vTm9kZT4KKyNpbmNsdWRlIDxTb3By
YW5vL05vZGVJdGVyYXRvcj4KKyNpbmNsdWRlIDxTb3ByYW5vL0dyYXBoPgorI2luY2x1ZGUgPFNv
cHJhbm8vUXVlcnlSZXN1bHRJdGVyYXRvcj4KKworI2luY2x1ZGUgPFF0Q29yZS9RVGltZT4KKyNp
bmNsdWRlIDxRdENvcmUvUU11dGV4PgorI2luY2x1ZGUgPFF0Q29yZS9RTXV0ZXhMb2NrZXI+Cisj
aW5jbHVkZSA8UXRDb3JlL1FUaHJlYWQ+CisKKyNpbmNsdWRlIDxrZGVidWcuaD4KKworCisvKioK
KyAqIFNpbXBsZSBoZWxwZXIgdGhyZWFkIHdoaWNoIHVwZGF0ZXMgdGhlIHN1YmNsYXNzIGFuZCB2
aXNpYmlsaXR5IGluZmVyZW5jZSBvbiBhbGwgcmVzb3VyY2VzCisgKiBpbiB0aGUgZGF0YWJhc2Uu
IFRoaXMgaXMgZG9uZSBpbiBhIHNlcGFyYXRlIHRocmVhZCBzaW5jZSBpdCB0YWtlcyB1cCB0byBo
YWxmIGFuIGhvdXIgdGhlIGZpcnN0IHRpbWUuCisgKi8KK2NsYXNzIENyYXBweUluZmVyZW5jZXIy
OjpVcGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQgOiBwdWJsaWMgUVRocmVhZAoreworcHVibGljOgor
ICAgIFVwZGF0ZUFsbFJlc291cmNlc1RocmVhZCggQ3JhcHB5SW5mZXJlbmNlcjIqIHBhcmVudCAp
CisgICAgICAgIDogUVRocmVhZChwYXJlbnQpLAorICAgICAgICAgIG1fY2FuY2VsZWQoZmFsc2Up
LAorICAgICAgICAgIG1fbW9kZWwocGFyZW50KSB7CisgICAgfQorCisgICAgdm9pZCBjYW5jZWwo
KSB7CisgICAgICAgIGtEZWJ1ZygpOworICAgICAgICBtX2NhbmNlbGVkID0gdHJ1ZTsKKyAgICB9
CisKKyAgICB2b2lkIHJ1bigpIHsKKyAgICAgICAga0RlYnVnKCk7CisgICAgICAgIG1fY2FuY2Vs
ZWQgPSBmYWxzZTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIFFUaW1lIHRpbWVyOworICAgICAg
ICB0aW1lci5zdGFydCgpOworICAgICAgICBpbnQgY250ID0gMDsKKyNlbmRpZgorICAgICAgICAv
LyB1cGRhdGluZyBhbGwgcmVzb3VyY2VzIHRha2VzIGEgbG90IG9mIHRpbWUuIFRodXMsIHdlIHVz
ZSBhbiBvcHRpbWl6YXRpb246IHNpbXBseSBtYWtlIGFsbCBmaWxlcyB2aXNpYmxlCisgICAgICAg
IFFMaXN0PFNvcHJhbm86Ok5vZGU+IHJlc3VsdHM7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAg
IHJlc3VsdHMgPSBtX21vZGVsLT5leGVjdXRlUXVlcnkoIFFTdHJpbmc6OmZyb21MYXRpbjEoInNl
bGVjdCBkaXN0aW5jdCA/ciB3aGVyZSB7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj9yIGEgP3QgLiAiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ7ID9yIGEgPGh0dHA6Ly93d3cuc2VtYW50aWNkZXNrdG9wLm9yZy9vbnRvbG9naWVzLzIwMDcv
MDMvMjIvbmZvI0ZpbGVEYXRhT2JqZWN0PiAuIH0gVU5JT04gIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyA/ciBhIDxo
dHRwOi8vd3d3LnNlbWFudGljZGVza3RvcC5vcmcvb250b2xvZ2llcy8yMDA3LzAzLzIyL25tbyNF
bWFpbD4gLiB9IFVOSU9OICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInsgP3IgYSA8aHR0cDovL3d3dy5zZW1hbnRpY2Rl
c2t0b3Aub3JnL29udG9sb2dpZXMvMjAwNy8wMy8yMi9uY28jUGVyc29uQ29udGFjdD4gLiB9IFVO
SU9OICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInsgP3IgYSA8aHR0cDovL3d3dy5zZW1hbnRpY2Rlc2t0b3Aub3JnL29u
dG9sb2dpZXMvMjAwNy8wMy8yMi9uY28jQ29udGFjdD4gLiB9IFVOSU9OICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInsg
P3IgYSA8aHR0cDovL3d3dy5zZW1hbnRpY2Rlc2t0b3Aub3JnL29udG9sb2dpZXMvMjAwNy8wMy8y
Mi9uY28jRW1haWxBZGRyZXNzPiAuIH0gVU5JT04gIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRklMVEVSKCFiaWY6ZXhp
c3RzKChzZWxlY3QgKDEpIHdoZXJlIHsgP3IgJTEgP3YgLiB9KSkpIC4gfSAiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJM
SU1JVCAxMDAwIiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC5hcmcoIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6
TkFPOjp1c2VyVmlzaWJsZSgpICkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwgKQorICAgICAg
ICAgICAgICAgICAgICAuaXRlcmF0ZUJpbmRpbmdzKDApLmFsbEVsZW1lbnRzKCk7CisgICAgICAg
ICAgICBRX0ZPUkVBQ0goIGNvbnN0IFNvcHJhbm86Ok5vZGUmIG4sIHJlc3VsdHMgKSB7CisjaWZu
ZGVmIE5ERUJVRworICAgICAgICAgICAgICAgICsrY250OworI2VuZGlmCisgICAgICAgICAgICAg
ICAgaWYoIG1fY2FuY2VsZWQgKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBtX21vZGVsLT5zZXRWaXNpYmlsaXR5KCBuLnVyaSgpLCBDcmFwcHlJbmZlcmVuY2Vy
Mjo6VmlzaWJsZSApOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlKCAhbV9jYW5jZWxl
ZCAmJiAhcmVzdWx0cy5pc0VtcHR5KCkgKTsKKworCisgICAgICAgIC8vIG5vdyB1cGRhdGUgYWxs
IHRoZSByZXN0IG9mIHRoZSByZXNvdXJjZXMKKyAgICAgICAgZG8geworICAgICAgICAgICAgLy8g
Zm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IHdlIG9ubHkgaGFuZGxlIHJlc291cmNlcyBpbiBJ
bnN0YW5jZUJhc2VzLiBUaGUgcmVzdCB3ZSBhbG1vc3QgbmV2ZXIgcXVlcnkgYW55d2F5LgorICAg
ICAgICAgICAgcmVzdWx0cyA9IG1fbW9kZWwtPmV4ZWN1dGVRdWVyeSggUVN0cmluZzo6ZnJvbUxh
dGluMSgic2VsZWN0IGRpc3RpbmN0ID9yIHdoZXJlIHsgZ3JhcGggP2cgeyA/ciBhID90IC4gfSAu
ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIkZJTFRFUig/ZyAhPSAlMSkgLiAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7ID9nIGEgJTIgLiB9
IFVOSU9OIHsgP2cgYSAlMyAuIH0gLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGSUxURVIoIWJpZjpleGlzdHMoKHNl
bGVjdCAoMSkgd2hlcmUgeyA/ciAlNCA/diAuIH0pKSkgLiB9ICIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxJTUlUIDEw
MDAiICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZygg
U29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBtX21vZGVsLT5jcmFwcHlJbmZlcmVuY2VDb250
ZXh0KCkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOUkw6
OkRpc2NhcmRhYmxlSW5zdGFuY2VCYXNlKCkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3By
YW5vOjpWb2NhYnVsYXJ5OjpOUkw6Okluc3RhbmNlQmFzZSgpICksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291cmNl
VG9OMyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpICkgKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6UXVlcnk6OlF1
ZXJ5TGFuZ3VhZ2VTcGFycWwgKQorICAgICAgICAgICAgICAgICAgICAuaXRlcmF0ZUJpbmRpbmdz
KDApLmFsbEVsZW1lbnRzKCk7CisgICAgICAgICAgICBRX0ZPUkVBQ0goIGNvbnN0IFNvcHJhbm86
Ok5vZGUmIG4sIHJlc3VsdHMgKSB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgICAgICsr
Y250OworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYoIG1fY2FuY2VsZWQgKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGJvb2wgaGF2ZVZpc2libGVUeXBl
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgU29wcmFubzo6UXVlcnlSZXN1bHRJdGVyYXRvciBp
dAorICAgICAgICAgICAgICAgICAgICAgICAgPSBtX21vZGVsLT5leGVjdXRlUXVlcnkoIFFTdHJp
bmc6OmZyb21MYXRpbjEoInNlbGVjdCA/dCB3aGVyZSB7IGdyYXBoID9nIHsgJTEgYSA/dCAuIH0g
LiBGSUxURVIoP2chPSUyKSAuIH0iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLmFyZyhTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMobi51cmkoKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNv
cHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyhtX21vZGVsLT5jcmFwcHlJbmZlcmVuY2VDb250ZXh0
KCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNv
cHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsKTsKKyAgICAgICAgICAgICAgICB3aGls
ZSghbV9jYW5jZWxlZCAmJiBpdC5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIG1f
bW9kZWwtPmlzVHlwZVZpc2libGUoaXRbMF0udXJpKCkpICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaGF2ZVZpc2libGVUeXBlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIG1fbW9kZWwtPnNldFZpc2liaWxpdHkoIG4udXJpKCksIGhhdmVWaXNpYmxlVHlwZSA/
IENyYXBweUluZmVyZW5jZXIyOjpWaXNpYmxlIDogQ3JhcHB5SW5mZXJlbmNlcjI6Ok5vblZpc2li
bGUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSggIW1fY2FuY2VsZWQgJiYgIXJl
c3VsdHMuaXNFbXB0eSgpICk7CisKKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAga0RlYnVnKCkg
PDwgY250IDw8ICJyZXNvdXJjZXMgdXBkYXRlZC4gRWxhcHNlZDoiIDw8IHRpbWVyLmVsYXBzZWQo
KS8xMDAwLjAgPDwgInNlYyI7CisjZW5kaWYKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBt
X2NhbmNlbGVkOworICAgIENyYXBweUluZmVyZW5jZXIyKiBtX21vZGVsOworfTsKKworCitjbGFz
cyBDcmFwcHlJbmZlcmVuY2VyMjo6UHJpdmF0ZQoreworcHVibGljOgorICAgIFByaXZhdGUoKQor
ICAgICAgICA6IG1fdXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkKDApIHsKKyAgICB9CisKKyAgICAv
Ly8gZ2V0IHRoZSBsaXN0IG9mIHN1cGVyIHR5cGVzIGZvciBccCB0eXBlCisgICAgUVNldDxRVXJs
PiBzdXBlckNsYXNzZXMoIGNvbnN0IFFVcmwmIHR5cGUgKSBjb25zdDsKKworICAgIC8vLyBDaGVj
ayBpZiBhIHJlc291cmNlIHdpdGggdGhlIHNwZWNpZmllZCB0eXBlcyBpcyB2aXNpYmxlLgorICAg
IGJvb2wgaXNWaXNpYmxlRnJvbVR5cGVzKCBjb25zdCBRU2V0PFFVcmw+JiB0eXBlcyApIGNvbnN0
OworCisgICAgLy8vIFBlcmZvcm1zIGEgcXVlcnkgdG8gcmV0cmlldmUgYWxsIHR5cGVzIHRoYXQg
d2VyZSBub3QgYWRkZWQgYnkgdXMKKyAgICBRU2V0PFFVcmw+IHF1ZXJ5UmVzb3VyY2VUeXBlcygg
Y29uc3QgUVVybCYgcmVzb3VyY2UgKSBjb25zdDsKKworICAgIC8vLyB1c2VkIHRvIGJ1aWxkIG1f
c3VwZXJDbGFzc2VzIChhbmQgbm90aGluZyBlbHNlISkKKyAgICBRU2V0PFFVcmw+IGJ1aWxkU3Vw
ZXJDbGFzc2VzSGFzaCggY29uc3QgUVVybCYgdHlwZSwgUVNldDxRVXJsPiYgdmlzaXRlZFR5cGVz
LCBjb25zdCBRTXVsdGlIYXNoPFFVcmwsIFFVcmw+JiByZGZzU3ViQ2xhc3NSZWxhdGlvbnMgKTsK
KworICAgIFFIYXNoPFFVcmwsIFFTZXQ8UVVybD4gPiBtX3N1cGVyQ2xhc3NlczsKKyAgICBUeXBl
VmlzaWJpbGl0eVRyZWUqIG1fdHlwZVZpc2liaWxpdHlUcmVlOworICAgIFFNdXRleCBtX211dGV4
OworCisgICAgVXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkKiBtX3VwZGF0ZUFsbFJlc291cmNlc1Ro
cmVhZDsKKworICAgIFFVcmwgbV9pbmZlcmVuY2VDb250ZXh0OworCisgICAgQ3JhcHB5SW5mZXJl
bmNlcjIqIHE7Cit9OworCisKKworUVNldDxRVXJsPiBDcmFwcHlJbmZlcmVuY2VyMjo6UHJpdmF0
ZTo6c3VwZXJDbGFzc2VzKCBjb25zdCBRVXJsJiB0eXBlICkgY29uc3QKK3sKKyAgICBRSGFzaDxR
VXJsLCBRU2V0PFFVcmw+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdXBlckNsYXNzZXMuY29u
c3RGaW5kKHR5cGUpOworICAgIGlmKCBpdCAhPSBtX3N1cGVyQ2xhc3Nlcy5jb25zdEVuZCgpICkg
eworICAgICAgICByZXR1cm4gaXQudmFsdWUoKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAg
IHJldHVybiBRU2V0PFFVcmw+KCkgPDwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3Vy
Y2UoKTsKKyAgICB9Cit9CisKK2Jvb2wgQ3JhcHB5SW5mZXJlbmNlcjI6OlByaXZhdGU6OmlzVmlz
aWJsZUZyb21UeXBlcyhjb25zdCBRU2V0PFFVcmw+ICZ0eXBlcykgY29uc3QKK3sKKyAgICAvLyBX
ZSBuZWVkIHRvIGV4dHJhY3QgdGhlIGxlYWYgdHlwZXMgaW4gdGhlIHN1YmdyYXBoIHRoYXQgaXMg
dHlwZXMKKyAgICAvLyBhcyB0aG9zZSBhcmUgdGhlIHR5cGVzIHRoYXQgZGVmaW5lIGlmIHRoZSBy
ZXNvdXJjZSB3aWxsIGJlIHZpc2libGUKKworICAgIC8vIFRPRE86IGRvIHRoZSBmb2xsb3dpbmcg
aW4gYW4gZWZmaWNpZW50IHdheQorICAgIC8vIHdlIHJlbW92ZSBhbGwgc3VwZXJ0eXBlcyBmcm9t
IHRoZSBzZXQgb2YgdHlwZXMgYW5kIGFyZSBsZWZ0IHdpdGggdGhlIGxlYWYgdHlwZXMKKyAgICBR
U2V0PFFVcmw+IGxlYWZUeXBlcyh0eXBlcyk7CisgICAgUV9GT1JFQUNIKGNvbnN0IFFVcmwmIHR5
cGUsIHR5cGVzKSB7CisgICAgICAgIGxlYWZUeXBlcyAtPSBzdXBlckNsYXNzZXModHlwZSk7Cisg
ICAgICAgIGlmKGxlYWZUeXBlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICAvLyBpZiB0aGVyZSBpcyBvbmUgbGVhZiB0eXBlIGxlZnQgdGhhdCBpcyB2aXNpYmxl
IHRoZSByZXNvdXJjZSBpcyB2aXNpYmxlLCB0b28KKyAgICBRX0ZPUkVBQ0goIGNvbnN0IFFVcmwm
IHR5cGUsIGxlYWZUeXBlcyApIHsKKyAgICAgICAgaWYoIG1fdHlwZVZpc2liaWxpdHlUcmVlLT5p
c1Zpc2libGUodHlwZSkgKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIG5vIHZpc2libGUgdHlwZSBmb3VuZAorICAgIHJldHVybiBmYWxzZTsK
K30KKworUVNldDxRVXJsPiBDcmFwcHlJbmZlcmVuY2VyMjo6UHJpdmF0ZTo6cXVlcnlSZXNvdXJj
ZVR5cGVzKGNvbnN0IFFVcmwgJnJlc291cmNlKSBjb25zdAoreworICAgIFFTZXQ8UVVybD4gcmVz
b3VyY2VUeXBlczsKKyAgICBTb3ByYW5vOjpRdWVyeVJlc3VsdEl0ZXJhdG9yIGl0CisgICAgICAg
ICAgICA9IHEtPnBhcmVudE1vZGVsKCktPmV4ZWN1dGVRdWVyeSggUVN0cmluZzo6ZnJvbUxhdGlu
MSgic2VsZWN0ID90IHdoZXJlIHsgZ3JhcGggP2cgeyAlMSBhID90IC4gfSAuIEZJTFRFUig/ZyE9
JTIpIC4gfSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
YXJnKFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyhyZXNvdXJjZSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291
cmNlVG9OMyhtX2luZmVyZW5jZUNvbnRleHQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsKTsK
KyAgICB3aGlsZShpdC5uZXh0KCkpIHsKKyAgICAgICAgcmVzb3VyY2VUeXBlcyA8PCBpdFswXS51
cmkoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzb3VyY2VUeXBlczsKK30KKworUVNldDxRVXJs
PiBDcmFwcHlJbmZlcmVuY2VyMjo6UHJpdmF0ZTo6YnVpbGRTdXBlckNsYXNzZXNIYXNoKCBjb25z
dCBRVXJsJiB0eXBlLCBRU2V0PFFVcmw+JiB2aXNpdGVkVHlwZXMsIGNvbnN0IFFNdWx0aUhhc2g8
UVVybCwgUVVybD4mIHJkZnNTdWJDbGFzc1JlbGF0aW9ucyA9IFFNdWx0aUhhc2g8UVVybCwgUVVy
bD4oKSApCit7CisgICAgUUhhc2g8UVVybCwgUVNldDxRVXJsPiA+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fc3VwZXJDbGFzc2VzLmNvbnN0RmluZCh0eXBlKTsKKyAgICBpZiggaXQgPT0gbV9zdXBl
ckNsYXNzZXMuY29uc3RFbmQoKSApIHsKKyAgICAgICAgUVNldDxRVXJsPiBzdXBlclR5cGVzOwor
ICAgICAgICBmb3IoUU11bHRpSGFzaDxRVXJsLCBRVXJsPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBy
ZGZzU3ViQ2xhc3NSZWxhdGlvbnMuY29uc3RGaW5kKHR5cGUpOworICAgICAgICAgICAgaXQgIT0g
cmRmc1N1YkNsYXNzUmVsYXRpb25zLmNvbnN0RW5kKCkgJiYgaXQua2V5KCkgPT0gdHlwZTsgKytp
dCkgeworICAgICAgICAgICAgLy8gYXZvaWQgZW5kbGVzcyBsb29wcyBpbiBjYXNlIHdlIGhhdmUg
Y2lyY3VsYXIgaGllcmFyY2hpZXMKKyAgICAgICAgICAgIGlmKCAhdmlzaXRlZFR5cGVzLmNvbnRh
aW5zKCBpdC52YWx1ZSgpICkgKSB7CisgICAgICAgICAgICAgICAgdmlzaXRlZFR5cGVzIDw8IGl0
LnZhbHVlKCk7CisgICAgICAgICAgICAgICAgc3VwZXJUeXBlcyA8PCBpdC52YWx1ZSgpOworICAg
ICAgICAgICAgICAgIHN1cGVyVHlwZXMgKz0gYnVpbGRTdXBlckNsYXNzZXNIYXNoKCBpdC52YWx1
ZSgpLCB2aXNpdGVkVHlwZXMsIHJkZnNTdWJDbGFzc1JlbGF0aW9ucyApOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIG1fc3VwZXJDbGFzc2VzLmluc2VydCggdHlwZSwgc3VwZXJU
eXBlcyApOworICAgICAgICByZXR1cm4gc3VwZXJUeXBlczsKKyAgICB9CisgICAgZWxzZSB7Cisg
ICAgICAgIHJldHVybiBpdC52YWx1ZSgpOworICAgIH0KK30KKworQ3JhcHB5SW5mZXJlbmNlcjI6
OkNyYXBweUluZmVyZW5jZXIyKFNvcHJhbm86Ok1vZGVsKiBwYXJlbnQpCisgICAgOiBTb3ByYW5v
OjpGaWx0ZXJNb2RlbChwYXJlbnQpLAorICAgICAgZChuZXcgUHJpdmF0ZSgpKQoreworICAgIGQt
PnEgPSB0aGlzOworICAgIGQtPm1faW5mZXJlbmNlQ29udGV4dCA9IFFVcmw6OmZyb21FbmNvZGVk
KCJ1cm46Y3JhcHB5aW5mZXJlbmNlMjppbmZlcnJlZHRyaXBsZXMiKTsKKyAgICBkLT5tX3R5cGVW
aXNpYmlsaXR5VHJlZSA9IG5ldyBUeXBlVmlzaWJpbGl0eVRyZWUodGhpcyk7CisgICAgaWYgKCBw
YXJlbnQgKQorICAgICAgICB1cGRhdGVJbmZlcmVuY2VJbmRleCgpOworfQorCitDcmFwcHlJbmZl
cmVuY2VyMjo6fkNyYXBweUluZmVyZW5jZXIyKCkKK3sKKyAgICBpZiggZC0+bV91cGRhdGVBbGxS
ZXNvdXJjZXNUaHJlYWQgKSB7CisgICAgICAgIGQtPm1fdXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFk
LT5jYW5jZWwoKTsKKyAgICAgICAgZC0+bV91cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQtPndhaXQo
KTsKKyAgICB9CisgICAgZGVsZXRlIGQ7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6OnNl
dFBhcmVudE1vZGVsKFNvcHJhbm86Ok1vZGVsICptb2RlbCkKK3sKKyAgICBGaWx0ZXJNb2RlbDo6
c2V0UGFyZW50TW9kZWwoIG1vZGVsICk7CisgICAgdXBkYXRlSW5mZXJlbmNlSW5kZXgoKTsKK30K
KworU29wcmFubzo6RXJyb3I6OkVycm9yQ29kZSBDcmFwcHlJbmZlcmVuY2VyMjo6YWRkU3RhdGVt
ZW50KGNvbnN0IFNvcHJhbm86OlN0YXRlbWVudCAmc3RhdGVtZW50KQoreworICAgIGlmKCBzdGF0
ZW1lbnQuY29udGV4dCgpID09IGQtPm1faW5mZXJlbmNlQ29udGV4dCApIHsKKyNpZmRlZiBOREVC
VUcKKyAgICAgICAga0RlYnVnKCkgPDwgIk5vIGFjdGlvbnMgYXJlIGFsbG93ZWQgb24gdGhlIGNy
YXBweSBpbmZlcmVuY2VyIGNvbnRleHQgaW4gcmVsZWFzZSBtb2RlISIgPDwgc3RhdGVtZW50Owor
ICAgICAgICByZXR1cm4gU29wcmFubzo6RXJyb3I6OkVycm9ySW52YWxpZEFyZ3VtZW50OworI2Vs
c2UKKyAgICAgICAga1dhcm5pbmcoKSA8PCAiV0FSTklORyEhISEhISEhISEhIEFkZGluZyBzdGF0
ZW1lbnQgaW4gY3JhcHB5IGluZmVyZW5jZXIgY29udGV4dCEhISEhISEhISEhISIgPDwgc3RhdGVt
ZW50OworI2VuZGlmCisgICAgfQorCisgICAgUU11dGV4TG9ja2VyIGxvY2soICZkLT5tX211dGV4
ICk7CisKKyAgICBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIHIgPSBwYXJlbnRNb2RlbCgpLT5h
ZGRTdGF0ZW1lbnQoIHN0YXRlbWVudCApOworICAgIGlmKCByID09IFNvcHJhbm86OkVycm9yOjpF
cnJvck5vbmUgKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEhhbmRsZSB0aGUgaW5mZXJlbmNl
CisgICAgICAgIC8vCisgICAgICAgIGlmICggc3RhdGVtZW50LnN1YmplY3QoKS5pc1Jlc291cmNl
KCkgJiYKKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQub2JqZWN0KCkuaXNSZXNvdXJjZSgpICYm
CisgICAgICAgICAgICAgICAgc3RhdGVtZW50LnByZWRpY2F0ZSgpID09IFNvcHJhbm86OlZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpICkgeworICAgICAgICAgICAgYWRkSW5mZXJlbmNlU3RhdGVtZW50
cyggc3RhdGVtZW50LnN1YmplY3QoKS51cmkoKSwgc3RhdGVtZW50Lm9iamVjdCgpLnVyaSgpICk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcjsKK30KKworU29wcmFubzo6RXJyb3I6
OkVycm9yQ29kZSBDcmFwcHlJbmZlcmVuY2VyMjo6cmVtb3ZlU3RhdGVtZW50KGNvbnN0IFNvcHJh
bm86OlN0YXRlbWVudCAmc3RhdGVtZW50KQoreworICAgIGlmKCBzdGF0ZW1lbnQuY29udGV4dCgp
ID09IGQtPm1faW5mZXJlbmNlQ29udGV4dCApIHsKKyNpZmRlZiBOREVCVUcKKyAgICAgICAga0Rl
YnVnKCkgPDwgIk5vIGFjdGlvbnMgYXJlIGFsbG93ZWQgb24gdGhlIGNyYXBweSBpbmZlcmVuY2Vy
IGNvbnRleHQgaW4gcmVsZWFzZSBtb2RlISIgPDwgc3RhdGVtZW50OworICAgICAgICByZXR1cm4g
U29wcmFubzo6RXJyb3I6OkVycm9ySW52YWxpZEFyZ3VtZW50OworI2Vsc2UKKyAgICAgICAga1dh
cm5pbmcoKSA8PCAiV0FSTklORyEhISEhISEhISEhIFJlbW92aW5nIHN0YXRlbWVudCBmcm9tIGNy
YXBweSBpbmZlcmVuY2VyIGNvbnRleHQhISEhISEhISEhISEiIDw8IHN0YXRlbWVudDsKKyNlbmRp
ZgorICAgIH0KKworICAgIFFNdXRleExvY2tlciBsb2NrKCAmZC0+bV9tdXRleCApOworCisgICAg
U29wcmFubzo6RXJyb3I6OkVycm9yQ29kZSBlcnJvciA9IHBhcmVudE1vZGVsKCktPnJlbW92ZVN0
YXRlbWVudChzdGF0ZW1lbnQpOworICAgIGlmKCBlcnJvciA9PSBTb3ByYW5vOjpFcnJvcjo6RXJy
b3JOb25lICkgeworICAgICAgICBpZiAoIHN0YXRlbWVudC5pc1ZhbGlkKCkgJiYKKyAgICAgICAg
ICAgICAgICBzdGF0ZW1lbnQuc3ViamVjdCgpLmlzUmVzb3VyY2UoKSAmJgorICAgICAgICAgICAg
ICAgIHN0YXRlbWVudC5vYmplY3QoKS5pc1Jlc291cmNlKCkgJiYKKyAgICAgICAgICAgICAgICBz
dGF0ZW1lbnQucHJlZGljYXRlKCkgPT0gU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCkg
KSB7CisgICAgICAgICAgICByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCBzdGF0ZW1lbnQuc3Vi
amVjdCgpLnVyaSgpLCBzdGF0ZW1lbnQub2JqZWN0KCkudXJpKCkgKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gU29wcmFubzo6RXJyb3I6OkVycm9yTm9uZTsKKyAgICB9CisgICAgZWxzZSB7
CisgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9Cit9CisKK1NvcHJhbm86OkVycm9yOjpFcnJv
ckNvZGUgQ3JhcHB5SW5mZXJlbmNlcjI6OnJlbW92ZUFsbFN0YXRlbWVudHMoY29uc3QgU29wcmFu
bzo6U3RhdGVtZW50ICZzdGF0ZW1lbnQpCit7CisgICAgaWYoIHN0YXRlbWVudC5jb250ZXh0KCkg
PT0gZC0+bV9pbmZlcmVuY2VDb250ZXh0ICkgeworI2lmZGVmIE5ERUJVRworICAgICAgICBrRGVi
dWcoKSA8PCAiTm8gYWN0aW9ucyBhcmUgYWxsb3dlZCBvbiB0aGUgY3JhcHB5IGluZmVyZW5jZXIg
Y29udGV4dCBpbiByZWxlYXNlIG1vZGUhIiA8PCBzdGF0ZW1lbnQ7CisgICAgICAgIHJldHVybiBT
b3ByYW5vOjpFcnJvcjo6RXJyb3JJbnZhbGlkQXJndW1lbnQ7CisjZWxzZQorICAgICAgICBrV2Fy
bmluZygpIDw8ICJXQVJOSU5HISEhISEhISEhISEgUmVtb3Zpbmcgc3RhdGVtZW50cyBmcm9tIGNy
YXBweSBpbmZlcmVuY2VyIGNvbnRleHQhISEhISEhISEhISEiIDw8IHN0YXRlbWVudDsKKyNlbmRp
ZgorICAgIH0KKworICAgIFFNdXRleExvY2tlciBsb2NrKCAmZC0+bV9tdXRleCApOworCisgICAg
Ly8KKyAgICAvLyBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbmVlZCB0byBiZSBtZXQgaW4gb3Jk
ZXIgZm9yIHVzIHRvIG5lZWQgdG8gY2hlY2sgZm9yIHR5cGVzCisgICAgLy8gMS4gT2JqZWN0IG9y
IGNvbnRleHQgbmVlZCB0byBiZSB2YWxpZC4gT3RoZXJ3aXNlIG91ciB0eXBlcyBhcmUgcmVtb3Zl
ZCBhbnl3YXkKKyAgICAvLyAyLiBPYmplY3QgbmVlZHMgdG8gYmUgZW1wdHkgb3IgYSByZXNvdXJj
ZS4gTGl0ZXJhbHMgYXJlIG5ldmVyIHR5cGVzCisgICAgLy8gMy4gUHJlZGljYXRlIG5lZWRzIHRv
IGJlIGVtcHR5IG9yIHJkZjp0eXBlLiBPdGhlcndpc2UgdGhlIGNhbGwgaXMgbm90IHJlbGF0ZWQg
dG8gdHlwZXMuCisgICAgLy8KKyAgICBpZiAoIHN0YXRlbWVudC5jb250ZXh0KCkgIT0gZC0+bV9p
bmZlcmVuY2VDb250ZXh0ICYmCisgICAgICAgICAgICAoICggc3RhdGVtZW50LnByZWRpY2F0ZSgp
LmlzRW1wdHkoKSB8fAorICAgICAgICAgICAgICAgc3RhdGVtZW50LnByZWRpY2F0ZSgpID09IFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpICkgJiYKKyAgICAgICAgICAgICAoIHN0YXRl
bWVudC5vYmplY3QoKS5pc0VtcHR5KCkgfHwKKyAgICAgICAgICAgICAgc3RhdGVtZW50Lm9iamVj
dCgpLmlzUmVzb3VyY2UoKSApICYmCisgICAgICAgICAgICAgKCBzdGF0ZW1lbnQub2JqZWN0KCku
aXNWYWxpZCgpIHx8CisgICAgICAgICAgICAgIHN0YXRlbWVudC5jb250ZXh0KCkuaXNWYWxpZCgp
ICkgKSApIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgYm90aCByZXNvdXJjZSBhbmQgdHlw
ZSBhcmUgZGVmaW5lZCB3ZSBjYW4gc2ltcGx5IGNhbGwgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50
cygpIG9uIHRoZW0KKyAgICAgICAgLy8KKyAgICAgICAgaWYoIHN0YXRlbWVudC5zdWJqZWN0KCku
aXNSZXNvdXJjZSgpICYmCisgICAgICAgICAgICAgICAgc3RhdGVtZW50Lm9iamVjdCgpLmlzUmVz
b3VyY2UoKSApIHsKKyAgICAgICAgICAgIGNvbnN0IFNvcHJhbm86OkVycm9yOjpFcnJvckNvZGUg
ZXJyb3IgPSBwYXJlbnRNb2RlbCgpLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHN0YXRlbWVudCk7Cisg
ICAgICAgICAgICBpZiggZXJyb3IgPT0gU29wcmFubzo6RXJyb3I6OkVycm9yTm9uZSApIHsKKyAg
ICAgICAgICAgICAgICByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCBzdGF0ZW1lbnQuc3ViamVj
dCgpLnVyaSgpLCBzdGF0ZW1lbnQub2JqZWN0KCkudXJpKCkgKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAg
IC8vIGlmIG9ubHkgdGhlIHR5cGUgaXMgdW5kZWZpbmVkIHdlIGdldCB0aGUgdHlwZXMgYW5kIHRo
ZW4gY2FsbCByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCkuIFRoaXMgYXZvaWRzCisgICAgICAg
IC8vIHBlcmZvcm1pbmcgdGhlIHF1ZXJ5IGluIHRoZSBsYXR0ZXIgbWV0aG9kIG92ZXIgYW5kIG92
ZXIgZm9yIGVhY2ggdHlwZQorICAgICAgICAvLworICAgICAgICBlbHNlIGlmKCBzdGF0ZW1lbnQu
c3ViamVjdCgpLmlzVmFsaWQoKSApIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyB3
ZSBuZWVkIHRvIGZpcnN0IGdldCB0aGUgdHlwZXMgdG8gcmVtb3ZlLCB0aGVuIHJlbW92ZSB0aGUg
c3RhdGVtZW50cywgYW5kIG9ubHkgdGhlbiBjYWxsCisgICAgICAgICAgICAvLyByZW1vdmVJbmZl
cmVuY2VTdGF0ZW1lbnRzKCkuIFRoaXMgaXMgc2luY2UgdGhlIGxhdHRlciBtYWtlcyB1c2Ugb2Yg
dGhlIHR5cGVzIGluIHRoZSBtb2RlbAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIFFTdHJp
bmcgcXVlcnk7CisgICAgICAgICAgICBpZiggc3RhdGVtZW50LmNvbnRleHQoKS5pc1ZhbGlkKCkg
KSB7CisgICAgICAgICAgICAgICAgcXVlcnkgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3Qg
P3Qgd2hlcmUgeyBncmFwaCAlMiB7ICUxIGEgP3QgLiB9IC4gfSIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAuYXJnKHN0YXRlbWVudC5zdWJqZWN0KCkudG9OMygpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZW1lbnQuY29udGV4dCgpLnRvTjMoKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBxdWVyeSA9IFFTdHJpbmc6OmZy
b21MYXRpbjEoInNlbGVjdCA/dCB3aGVyZSB7IGdyYXBoID9nIHsgJTEgYSA/dCAuIH0gLiBGSUxU
RVIoP2chPSUyKSAuIH0iKQorICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhzdGF0ZW1lbnQu
c3ViamVjdCgpLnRvTjMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6
Tm9kZTo6cmVzb3VyY2VUb04zKGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY29uc3QgUUxpc3Q8U29wcmFubzo6Tm9kZT4gdHlwZXMgPSBleGVj
dXRlUXVlcnkoIHF1ZXJ5LCBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApLml0
ZXJhdGVCaW5kaW5ncygwKS5hbGxOb2RlcygpOworICAgICAgICAgICAgY29uc3QgU29wcmFubzo6
RXJyb3I6OkVycm9yQ29kZSBlcnJvciA9IHBhcmVudE1vZGVsKCktPnJlbW92ZUFsbFN0YXRlbWVu
dHMoc3RhdGVtZW50KTsKKyAgICAgICAgICAgIGlmKCBlcnJvciA9PSBTb3ByYW5vOjpFcnJvcjo6
RXJyb3JOb25lICkgeworICAgICAgICAgICAgICAgIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMo
IHN0YXRlbWVudC5zdWJqZWN0KCkudXJpKCksIHR5cGVzICk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAv
LyBJZiB0aGUgc3ViamVjdCBpcyBub3QgZGVmaW5lZCBidXQgdGhlIHR5cGUgaXMgd2UgbmVlZCB0
byB1cGRhdGUgc2V2ZXJhbCByZXNvdXJjZXMuIFRoZXJlIGlzIG5vIHdheSBhcm91bmQKKyAgICAg
ICAgLy8gY2FsbGluZyByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCkgZm9yIGVhY2ggcmVzb3Vy
Y2UuCisgICAgICAgIC8vCisgICAgICAgIGVsc2UgaWYoIHN0YXRlbWVudC5vYmplY3QoKS5pc1Zh
bGlkKCkgKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnZXQg
dGhlIHJlc291cmNlcyBiZWZvcmUgYWN0dWFsbHkgcmVtb3ZpbmcgdGhlIHN0YXRlbWVudHMgc2lu
Y2Ugb3RoZXJ3aXNlIHdlIG1pZ2h0IG1pc3MgdGhlbQorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIFFTdHJpbmcgcXVlcnk7CisgICAgICAgICAgICBpZiggc3RhdGVtZW50LmNvbnRleHQoKS5p
c1ZhbGlkKCkgKSB7CisgICAgICAgICAgICAgICAgcXVlcnkgPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCJzZWxlY3QgP3Igd2hlcmUgeyBncmFwaCAlMiB7ID9yIGEgJTEgLiB9IC4gfSIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAuYXJnKHN0YXRlbWVudC5vYmplY3QoKS50b04zKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC5jb250ZXh0KCkudG9OMygpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHF1ZXJ5ID0gUVN0
cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0ID9yIHdoZXJlIHsgZ3JhcGggP2cgeyA/ciBhICUxIC4g
fSAuIEZJTFRFUig/ZyE9JTIpIC4gfSIpCisgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKHN0
YXRlbWVudC5vYmplY3QoKS50b04zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNv
cHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyhjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IFFMaXN0PFNvcHJhbm86Ok5vZGU+IHJlc291
cmNlcyA9IGV4ZWN1dGVRdWVyeSggcXVlcnksIFNvcHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdl
U3BhcnFsICkuaXRlcmF0ZUJpbmRpbmdzKDApLmFsbE5vZGVzKCk7CisgICAgICAgICAgICBjb25z
dCBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIGVycm9yID0gcGFyZW50TW9kZWwoKS0+cmVtb3Zl
QWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQpOworICAgICAgICAgICAgaWYoIGVycm9yID09IFNvcHJh
bm86OkVycm9yOjpFcnJvck5vbmUgKSB7CisgICAgICAgICAgICAgICAgUV9GT1JFQUNIKCBjb25z
dCBTb3ByYW5vOjpOb2RlJiByZXMsIHJlc291cmNlcyApIHsKKyAgICAgICAgICAgICAgICAgICAg
cmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggcmVzLnVyaSgpLCBzdGF0ZW1lbnQub2JqZWN0KCku
dXJpKCkgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBOZWl0aGVy
IHN1YmplY3Qgbm9yIG9iamVjdCBhcmUgZGVmaW5lZAorICAgICAgICAvLworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIFFIYXNoPFFVcmwsIFFMaXN0PFFVcmw+ID4gcmVzVHlwZUhhc2g7Cisg
ICAgICAgICAgICBRU3RyaW5nIHF1ZXJ5OworICAgICAgICAgICAgaWYoIHN0YXRlbWVudC5jb250
ZXh0KCkuaXNWYWxpZCgpICkgeworICAgICAgICAgICAgICAgIHF1ZXJ5ID0gUVN0cmluZzo6ZnJv
bUxhdGluMSgic2VsZWN0IGRpc3RpbmN0ID9yID90IHdoZXJlIHsgZ3JhcGggJTEgeyA/ciBhID90
IC4gfSAuIH0iKQorICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhzdGF0ZW1lbnQuY29udGV4
dCgpLnRvTjMoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBxdWVyeSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCBkaXN0aW5jdCA/ciA/
dCB3aGVyZSB7IGdyYXBoID9nIHsgP3IgYSA/dCAuIH0gLiBGSUxURVIoP2chPSUxKSAuIH0iKQor
ICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMo
Y3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBT
b3ByYW5vOjpRdWVyeVJlc3VsdEl0ZXJhdG9yIGl0ID0gcGFyZW50TW9kZWwoKS0+ZXhlY3V0ZVF1
ZXJ5KCBxdWVyeSwgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwgKTsKKyAgICAg
ICAgICAgIHdoaWxlKCBpdC5uZXh0KCkgKSB7CisgICAgICAgICAgICAgICAgcmVzVHlwZUhhc2hb
aXRbInIiXS51cmkoKV0uYXBwZW5kKCBpdFsidCJdLnVyaSgpICk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjb25zdCBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIGVycm9yID0gcGFyZW50
TW9kZWwoKS0+cmVtb3ZlQWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQpOworICAgICAgICAgICAgaWYo
IGVycm9yID09IFNvcHJhbm86OkVycm9yOjpFcnJvck5vbmUgKSB7CisgICAgICAgICAgICAgICAg
UUhhc2g8UVVybCwgUUxpc3Q8UVVybD4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVzVHlwZUhh
c2guY29uc3RFbmQoKTsKKyAgICAgICAgICAgICAgICBmb3IoIFFIYXNoPFFVcmwsIFFMaXN0PFFV
cmw+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzVHlwZUhhc2guY29uc3RCZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQgKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUluZmVyZW5jZVN0YXRl
bWVudHMoIGl0LmtleSgpLCBpdC52YWx1ZSgpICk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICB9CisgICAgfQorICAg
IGVsc2UgeworICAgICAgICByZXR1cm4gcGFyZW50TW9kZWwoKS0+cmVtb3ZlQWxsU3RhdGVtZW50
cyhzdGF0ZW1lbnQpOworICAgIH0KK30KKworUVVybCBDcmFwcHlJbmZlcmVuY2VyMjo6Y3JhcHB5
SW5mZXJlbmNlQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPm1faW5mZXJlbmNlQ29u
dGV4dDsKK30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMjo6dXBkYXRlSW5mZXJlbmNlSW5kZXgo
KQoreworICAgIGtEZWJ1ZygpOworCisgICAgUU11dGV4TG9ja2VyIGxvY2soICZkLT5tX211dGV4
ICk7CisKKyAgICAvLyBCdWlsZCBzdXBlcmNsYXNzZXMgaGFzaAorICAgIC8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIC8vIGNsZWFyIGNhY2hl
CisgICAgZC0+bV9zdXBlckNsYXNzZXMuY2xlYXIoKTsKKworICAgIC8vIGNhY2hlIHN1YkNsYXNz
T2YgcmVsYXRpb25zIChvbmx5IHRoZSBvcmlnaW5hbCBvbmVzKQorICAgIFFNdWx0aUhhc2g8UVVy
bCwgUVVybD4gcmRmc1N1YkNsYXNzUmVsYXRpb25zOworICAgIFNvcHJhbm86OlF1ZXJ5UmVzdWx0
SXRlcmF0b3IgaXQgPSBleGVjdXRlUXVlcnkoIFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCA/
eCA/eSB3aGVyZSB7IGdyYXBoID9nIHsgP3ggJTEgP3kgLiB9IC4gIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IkZJTFRFUig/ZyAhPSA8dXJuOmNyYXBweWluZmVyZW5jZTppbmZlcnJlZHRyaXBsZXM+KSAuICIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJGSUxURVIoP3ghPT95KSAuIH0iICkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKCBTb3ByYW5vOjpOb2RlOjpy
ZXNvdXJjZVRvTjMoIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSApICks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29w
cmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwgKTsKKyAgICB3aGlsZSAoIGl0Lm5leHQo
KSApIHsKKyAgICAgICAgcmRmc1N1YkNsYXNzUmVsYXRpb25zLmluc2VydCggaXRbIngiXS51cmko
KSwgaXRbInkiXS51cmkoKSApOworICAgIH0KKworICAgIC8vIGNvbXBsZXRlIHRoZSBtYXAgb2Yg
c3VwZXIgY2xhc3NlcworICAgIFFfRk9SRUFDSCggY29uc3QgUVVybCYgdHlwZSwgcmRmc1N1YkNs
YXNzUmVsYXRpb25zLmtleXMoKSApIHsKKyAgICAgICAgUVNldDxRVXJsPiB2aXNpdGVkQ2xhc3Nl
czsKKyAgICAgICAgZC0+YnVpbGRTdXBlckNsYXNzZXNIYXNoKCB0eXBlLCB2aXNpdGVkQ2xhc3Nl
cywgcmRmc1N1YkNsYXNzUmVsYXRpb25zICk7CisgICAgfQorCisgICAgLy8gZ2V0IHRoZSBjbGFz
c2VzIHRoYXQgZG8gbm90IGhhdmUgYW55IHBhcmVudCBjbGFzcworICAgIGl0ID0gZXhlY3V0ZVF1
ZXJ5KCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgP2Mgd2hlcmUgeyA/YyBhICUxIC4gT1BU
SU9OQUwgeyA/YyAlMiA/cCAuIH0gLiBGSUxURVIoIUJPVU5EKD9wKSkgLiB9IiApCisgICAgICAg
ICAgICAgICAgICAgICAgLmFyZyggU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpICkgKQorICAgICAgICAgICAgICAgICAgICAgIC5h
cmcoIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Uzo6c3ViQ2xhc3NPZigpICkgKSwKKyAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpRdWVy
eTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApOworICAgIHdoaWxlICggaXQubmV4dCgpICkgeworICAg
ICAgICBkLT5tX3N1cGVyQ2xhc3Nlcy5pbnNlcnQoIGl0WyJjIl0udXJpKCksIFFTZXQ8UVVybD4o
KSApOworICAgIH0KKworICAgIC8vIGFkZCByZGZzOlJlc291cmNlIGFzIHBhcmVudCBmb3IgYWxs
IGNsYXNzZXMKKyAgICBRTXV0YWJsZUhhc2hJdGVyYXRvcjxRVXJsLCBRU2V0PFFVcmw+ID4gcmRm
c1Jlc0l0KCBkLT5tX3N1cGVyQ2xhc3NlcyApOworICAgIHdoaWxlKCByZGZzUmVzSXQuaGFzTmV4
dCgpICkgeworICAgICAgICByZGZzUmVzSXQubmV4dCgpOworICAgICAgICByZGZzUmVzSXQudmFs
dWUoKS5pbnNlcnQoU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSk7CisgICAg
fQorCisgICAgLy8gQnVpbGQgdmlzaWJpbGl0eSB0cmVlCisgICAgLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIGQtPm1fdHlwZVZpc2liaWxpdHlU
cmVlLT5yZWJ1aWxkVHJlZSgpOworCisjaWZuZGVmIE5ERUJVRworICAgIC8vIGNvdW50IGZvciBk
ZWJ1Z2dpbmcKKyAgICBpbnQgY250ID0gMDsKKyAgICBmb3IoIFFIYXNoPFFVcmwsIFFTZXQ8UVVy
bD4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkLT5tX3N1cGVyQ2xhc3Nlcy5jb25zdEJlZ2luKCk7
CisgICAgICAgICBpdCAhPSBkLT5tX3N1cGVyQ2xhc3Nlcy5jb25zdEVuZCgpOyArK2l0ICkgewor
ICAgICAgICBrRGVidWcoKSA8PCBpdC5rZXkoKSA8PCAiLT4iIDw8IGl0LnZhbHVlKCk7CisgICAg
ICAgIGNudCArPSBpdC52YWx1ZSgpLmNvdW50KCk7CisgICAgfQorICAgIGtEZWJ1ZygpIDw8ICJO
dW1iZXIgb2YgY2xhc3NlczogICAgICAgICAgICIgPDwgZC0+bV9zdXBlckNsYXNzZXMuY291bnQo
KTsKKyAgICBrRGVidWcoKSA8PCAiTnVtYmVyIG9mIHN1YmNsYXNzIHJlbGF0aW9uczoiIDw8IGNu
dDsKKyNlbmRpZgorfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyOjp1cGRhdGVBbGxSZXNvdXJj
ZXMoKQoreworICAgIGtEZWJ1ZygpOworICAgIGlmKCAhZC0+bV91cGRhdGVBbGxSZXNvdXJjZXNU
aHJlYWQgKSB7CisgICAgICAgIGQtPm1fdXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkID0gbmV3IFVw
ZGF0ZUFsbFJlc291cmNlc1RocmVhZCh0aGlzKTsKKyAgICAgICAgY29ubmVjdChkLT5tX3VwZGF0
ZUFsbFJlc291cmNlc1RocmVhZCwgU0lHTkFMKGZpbmlzaGVkKCkpLCB0aGlzLCBTSUdOQUwoYWxs
UmVzb3VyY2VzVXBkYXRlZCgpKSk7CisgICAgfQorICAgIGQtPm1fdXBkYXRlQWxsUmVzb3VyY2Vz
VGhyZWFkLT5zdGFydCgpOworfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyOjphZGRJbmZlcmVu
Y2VTdGF0ZW1lbnRzKCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUVVybCYgdHlwZSApCit7
CisgICAgcmV0dXJuIGFkZEluZmVyZW5jZVN0YXRlbWVudHMoIHJlc291cmNlLCBRU2V0PFFVcmw+
KCkgPDwgdHlwZSApOworfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyOjphZGRJbmZlcmVuY2VT
dGF0ZW1lbnRzKCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUVNldDxRVXJsPiYgdHlwZXMg
KQoreworICAgIC8vIGFkZCBtaXNzaW5nIHR5cGVzCisgICAgYm9vbCBoYXZlVmlzaWJsZVR5cGUg
PSBmYWxzZTsKKyAgICBRU2V0PFFVcmw+IHN1cGVyVHlwZXM7CisgICAgUV9GT1JFQUNIKCBjb25z
dCBRVXJsJiB0eXBlLCB0eXBlcyApIHsKKyAgICAgICAgc3VwZXJUeXBlcyArPSBkLT5zdXBlckNs
YXNzZXModHlwZSk7CisgICAgICAgIGlmKCAhaGF2ZVZpc2libGVUeXBlICYmIGQtPm1fdHlwZVZp
c2liaWxpdHlUcmVlLT5pc1Zpc2libGUodHlwZSkgKQorICAgICAgICAgICAgaGF2ZVZpc2libGVU
eXBlID0gdHJ1ZTsKKyAgICB9CisgICAgUVNldDxRVXJsPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
c3VwZXJUeXBlcy5jb25zdEVuZCgpOworICAgIGZvciggUVNldDxRVXJsPjo6Y29uc3RfaXRlcmF0
b3IgdHlwZUl0ID0gc3VwZXJUeXBlcy5jb25zdEJlZ2luKCk7IHR5cGVJdCAhPSBlbmQ7ICsrdHlw
ZUl0ICkgeworICAgICAgICBwYXJlbnRNb2RlbCgpLT5hZGRTdGF0ZW1lbnQocmVzb3VyY2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REY6OnR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0eXBlSXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmFwcHlJbmZlcmVuY2VDb250
ZXh0KCkpOworICAgIH0KKworICAgIC8vIHRoZSB2aXNpYmlsaXR5IGNhbiBvbmx5IGNoYW5nZSBp
ZiB3ZSBhZGQgYSB2aXNpYmxlIHR5cGUKKyAgICBpZiggaGF2ZVZpc2libGVUeXBlICkgeworICAg
ICAgICBzZXRWaXNpYmlsaXR5KCByZXNvdXJjZSwgVmlzaWJsZSApOworICAgIH0KK30KKwordm9p
ZCBDcmFwcHlJbmZlcmVuY2VyMjo6cmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyhjb25zdCBRVXJs
ICZyZXNvdXJjZSwgY29uc3QgUVVybCAmdHlwZSkKK3sKKyAgICByZW1vdmVJbmZlcmVuY2VTdGF0
ZW1lbnRzKCByZXNvdXJjZSwgUUxpc3Q8UVVybD4oKSA8PCB0eXBlICk7Cit9CisKK3ZvaWQgQ3Jh
cHB5SW5mZXJlbmNlcjI6OnJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIGNvbnN0IFFVcmwmIHJl
c291cmNlLCBjb25zdCBRTGlzdDxTb3ByYW5vOjpOb2RlPiYgdHlwZXMgKQoreworICAgIFFMaXN0
PFFVcmw+IHVyaXM7CisgICAgUV9GT1JFQUNIKCBjb25zdCBTb3ByYW5vOjpOb2RlJiBub2RlLCB0
eXBlcyApCisgICAgICAgIHVyaXMgPDwgbm9kZS51cmkoKTsKKyAgICByZW1vdmVJbmZlcmVuY2VT
dGF0ZW1lbnRzKCByZXNvdXJjZSwgdXJpcyApOworfQorCisvLyBBbHdheXMgY2FsbGVkICphZnRl
ciogcmVtb3ZpbmcgdGhlIGFjdHVhbCBzdGF0ZW1lbnRzCit2b2lkIENyYXBweUluZmVyZW5jZXIy
OjpyZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKGNvbnN0IFFVcmwgJnJlc291cmNlLCBjb25zdCBR
TGlzdDxRVXJsPiAmdHlwZXMpCit7CisgICAgLy8gd2UgY2Fubm90IHNpbXBseSByZW1vdmUgYWxs
IHN1cGVyIHR5cGVzIHNpbmNlIHRoZSByZXNvdXJjZSBtaWdodCBzdGlsbCBoYXZlIHR5cGVzIHRo
YXQgYXJlIHNvbWV3aGVyZSBpbiB0aGF0IGhpZXJhcmNoeQorCisgICAgLy8gZGV0ZXJtaW5lIHRo
ZSB0eXBlcyB0aGF0IHNob3VsZCBiZSBpbiB0aGUgZGF0YWJhc2Ugbm93CisgICAgY29uc3QgUVNl
dDxRVXJsPiBjb3JyZWN0VHlwZXMgPSBkLT5xdWVyeVJlc291cmNlVHlwZXMocmVzb3VyY2UpOwor
ICAgIFFTZXQ8UVVybD4gY29ycmVjdFN1cGVyVHlwZXM7CisgICAgUV9GT1JFQUNIKCBjb25zdCBR
VXJsJiB0eXBlLCBjb3JyZWN0VHlwZXMgKSB7CisgICAgICAgIGNvcnJlY3RTdXBlclR5cGVzICs9
IGQtPnN1cGVyQ2xhc3Nlcyh0eXBlKTsKKyAgICB9CisKKyAgICAvLyBub3cgY29tcGFyZSB0aGF0
IGxpc3Qgd2l0aCB0aGUgb25lcyB0aGF0IHdlIGNvdWxkIHJlbW92ZQorICAgIFFTZXQ8UVVybD4g
dHlwZXNUb1JlbW92ZTsKKyAgICBRX0ZPUkVBQ0goIGNvbnN0IFFVcmwmIHR5cGUsIFFTZXQ8UVVy
bD46OmZyb21MaXN0KHR5cGVzKSApCisgICAgICAgIHR5cGVzVG9SZW1vdmUgKz0gZC0+c3VwZXJD
bGFzc2VzKHR5cGUpOworICAgIHR5cGVzVG9SZW1vdmUgLT0gY29ycmVjdFN1cGVyVHlwZXM7CisK
KyAgICBib29sIGhhdmVWaXNpYmxlVHlwZSA9IGZhbHNlOworICAgIFFfRk9SRUFDSCggY29uc3Qg
UVVybCYgdHlwZVRvUmVtb3ZlLCB0eXBlc1RvUmVtb3ZlICkgeworICAgICAgICBpZiggIWhhdmVW
aXNpYmxlVHlwZSAmJiBkLT5tX3R5cGVWaXNpYmlsaXR5VHJlZS0+aXNWaXNpYmxlKHR5cGVUb1Jl
bW92ZSkgKQorICAgICAgICAgICAgaGF2ZVZpc2libGVUeXBlID0gdHJ1ZTsKKyAgICAgICAgcGFy
ZW50TW9kZWwoKS0+cmVtb3ZlU3RhdGVtZW50KHJlc291cmNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVG9SZW1vdmUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmFwcHlJbmZlcmVuY2VDb250ZXh0
KCkpOworICAgIH0KKworICAgIC8vIHJlbW92ZSB0aGUgdmlzaWJpbGl0eSBpZiBuZWNlc3NhcnkK
KyAgICAvLyBvbmx5IGJlIHJlbW92aW5nIHZpc2libGUgdHlwZXMgd2UgY2FuIGNoYW5nZSB0aGUg
YWN0dWFsIHZpc2liaWxpdHkKKyAgICBpZiggaGF2ZVZpc2libGVUeXBlICkgeworICAgICAgICBz
ZXRWaXNpYmlsaXR5KCByZXNvdXJjZSwgY29ycmVjdFR5cGVzLmlzRW1wdHkoKSA/IFVuZGVmaW5l
ZFZpc2liaWxpdHkgOiAoIGQtPmlzVmlzaWJsZUZyb21UeXBlcyhjb3JyZWN0VHlwZXMpID8gVmlz
aWJsZSA6IE5vblZpc2libGUgKSApOworICAgIH0KK30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2Vy
Mjo6c2V0VmlzaWJpbGl0eShjb25zdCBRVXJsICZyZXNvdXJjZSwgVmlzaWJpbGl0eSB2aXNpYmls
aXR5KQoreworICAgIC8vIHdlIHVzZSBhbiBpbnRlZ2VyIGluc3RlYWQgb2YgYSBib29sZWFuIGZv
ciBwZXJmb3JtYW5jZSByZWFzb25zOiB2aXJ0dW9zbyBkb2VzIG5vdCBzdXBwb3J0IGJvb2wgYW5k
IFNvcHJhbm8gY29udmVydHMgdGhlbSB0byBzdHJpbmdzCisgICAgaWYoIHZpc2liaWxpdHkgPT0g
VmlzaWJsZSApIHsKKyAgICAgICAgcGFyZW50TW9kZWwoKS0+cmVtb3ZlU3RhdGVtZW50KHJlc291
cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU29wcmFubzo6TGl0ZXJhbFZhbHVlKDApLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpKTsKKyAgICAgICAg
cGFyZW50TW9kZWwoKS0+YWRkU3RhdGVtZW50KHJlc291cmNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6TGl0ZXJhbFZh
bHVlKDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JhcHB5SW5mZXJl
bmNlQ29udGV4dCgpKTsKKyAgICB9CisgICAgZWxzZSBpZiggdmlzaWJpbGl0eSA9PSBOb25WaXNp
YmxlICkgeworICAgICAgICBwYXJlbnRNb2RlbCgpLT5yZW1vdmVTdGF0ZW1lbnQocmVzb3VyY2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpWb2NhYnVs
YXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTb3ByYW5vOjpMaXRlcmFsVmFsdWUoMSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpOworICAgICAgICBwYXJl
bnRNb2RlbCgpLT5hZGRTdGF0ZW1lbnQocmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpMaXRlcmFsVmFsdWUo
MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmFwcHlJbmZlcmVuY2VD
b250ZXh0KCkpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcGFyZW50TW9kZWwoKS0+cmVt
b3ZlQWxsU3RhdGVtZW50cyhyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyYXBweUluZmVy
ZW5jZUNvbnRleHQoKSk7CisgICAgfQorfQorCitib29sIENyYXBweUluZmVyZW5jZXIyOjppc1R5
cGVWaXNpYmxlKGNvbnN0IFFVcmwgJnR5cGVVcmkpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPm1f
dHlwZVZpc2liaWxpdHlUcmVlLT5pc1Zpc2libGUoIHR5cGVVcmkgKTsKK30KKworI2luY2x1ZGUg
ImNyYXBweWluZmVyZW5jZXIyLm1vYyIKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvcmVwb3NpdG9y
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvcmVwb3NpdG9yeS5oCShyZXZpc2lv
biAxMjEzOTQwKQorKysgc2VydmljZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDExICsyOSwyNyBAQAogfQogCiBjbGFzcyBLSm9iOworY2xhc3MgQ3JhcHB5SW5m
ZXJlbmNlcjI7CiAKIG5hbWVzcGFjZSBOZXBvbXVrIHsKIAogICAgIGNsYXNzIE1vZGVsQ29weUpv
YjsKIAorICAgIC8qKgorICAgICAqIFJlcHJlc2VudHMgdGhlIG1haW4gTmVwb211ayBtb2RlbC4g
V2hpbGUgaXQgbG9va3MgYXMgaWYgdGhlcmUgY291bGQgYmUgbW9yZSB0aGFuCisgICAgICogb25l
IGluc3RhbmNlIG9mIFJlcG9zaXRvcnkgdGhlcmUgaXMgb25seSB0aGUgb25lLgorICAgICAqCisg
ICAgICogUmVwb3NpdG9yeSBpcyBiYXNlZCBvbiBOUkxNb2RlbCBvbmx5IGZvciB0aGUgcXVlcnkg
cHJlZml4IGV4cGFuc2lvbiBmZWF0dXJlLiBJdAorICAgICAqIHVzZXMgYSBTb3ByYW5vOjpVdGls
czo6U2lnbmFsQ2FjaGVNb2RlbCB0byBjb21wYWN0IHRoZSBzZXZlcmFsIHN0YXRlbWVudHNBZGRl
ZCgpCisgICAgICogYW5kIHN0YXRlbWVudHNSZW1vdmVkKCkgc2lnbmFscywgYW5kIHVzZXMgQ3Jh
cHB5SW5mZXJlbmNlcjIgdG8ga2VlcCByZGZzOnN1YkNsYXNzT2YKKyAgICAgKiBhbmQgbmFvOnVz
ZXJWaXNpYmxlIGluZmVyZW5jZSB1cC10by1kYXRlLgorICAgICAqCisgICAgICogT24gY29uc3Ry
dWN0aW9uIGl0IGNoZWNrcyBmb3IgYW5kIG9wdGlvbmFsbHkgcGVyZm9ybXMgY29udmVyc2lvbiBm
cm9tIGFuIG9sZCByZXBvc2l0b3J5CisgICAgICogdHlwZSAocHJlLVZpcnR1b3NvIHRpbWVzKSBh
bmQgcnVucyBDcmFwcHlJbmZlcmVuY2VyMjo6dXBkYXRlQWxsUmVzb3VyY2VzKCkgd2hpY2ggaXMK
KyAgICAgKiBwZXJmb3JtZWQgaW4gYSBzZXBhcmF0ZSB0aHJlYWQuCisgICAgICoKKyAgICAgKiBc
YXV0aG9yIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKyAgICAgKi8KICAgICBjbGFz
cyBSZXBvc2l0b3J5IDogcHVibGljIFNvcHJhbm86Ok5STE1vZGVsCiAgICAgewogICAgICAgICBR
X09CSkVDVApAQCAtNTksOSArNzUsMTAgQEAKICAgICAgICAgICogV2lsbCBlbWl0IHRoZSBvcGVu
ZWQgc2lnbmFsCiAgICAgICAgICAqLwogICAgICAgICB2b2lkIG9wZW4oKTsKLQogICAgICAgICB2
b2lkIGNsb3NlKCk7CiAKKyAgICAgICAgdm9pZCB1cGRhdGVJbmZlcmVuY2UoKTsKKwogICAgIFFf
U0lHTkFMUzoKICAgICAgICAgdm9pZCBvcGVuZWQoIFJlcG9zaXRvcnkqLCBib29sIHN1Y2Nlc3Mg
KTsKIApAQCAtNzUsNiArOTIsNyBAQAogICAgICAgICBTdGF0ZSBtX3N0YXRlOwogCiAgICAgICAg
IFNvcHJhbm86Ok1vZGVsKiBtX21vZGVsOworICAgICAgICBDcmFwcHlJbmZlcmVuY2VyMiogbV9p
bmZlcmVuY2VyOwogICAgICAgICBjb25zdCBTb3ByYW5vOjpCYWNrZW5kKiBtX2JhY2tlbmQ7CiAK
ICAgICAgICAgLy8gb25seSB1c2VkIGR1cmluZyBvcGVuaW5nCkluZGV4OiBzZXJ2aWNlcy9zdG9y
YWdlL29udG9sb2d5bWFuYWdlcm1vZGVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9y
YWdlL29udG9sb2d5bWFuYWdlcm1vZGVsLmNwcAkocmV2aXNpb24gMTIxMzk0MCkKKysrIHNlcnZp
Y2VzL3N0b3JhZ2Uvb250b2xvZ3ltYW5hZ2VybW9kZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw2ICsyMSw3IEBACiAKICNpbmNsdWRlIDxRdENvcmUvUVVybD4KICNpbmNsdWRlIDxRdENvcmUv
UURhdGVUaW1lPgorI2luY2x1ZGUgPFF0Q29yZS9RU2NvcGVkUG9pbnRlcj4KIAogI2luY2x1ZGUg
PFNvcHJhbm8vQmFja2VuZD4KICNpbmNsdWRlIDxTb3ByYW5vL1ZlcnNpb24+CkBAIC0yMjUsMjMg
KzIyNiw2IEBACiAgICAgICAgIHRtcE1vZGVsLT5hZGRTdGF0ZW1lbnQoIFNvcHJhbm86OlN0YXRl
bWVudCggZGF0YUdyYXBoVXJpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86Omhhc0RlZmF1bHRO
YW1lc3BhY2UoKSwgTGl0ZXJhbFZhbHVlKCBucy50b1N0cmluZygpICksIG1ldGFEYXRhR3JhcGhV
cmkgKSApOwogI2VuZGlmCiAgICAgfQotCi0gICAgLyoqCi0gICAgICogU2ltcGxlIGdhcmJhZ2Ug
Y29sbGVjdGlvbiBjbGFzcy4KLSAgICAgKi8KLSAgICBjbGFzcyBPYmplY3RHYXJiYWdlQ29sbGVj
dG9yCi0gICAgewotICAgIHB1YmxpYzoKLSAgICAgICAgT2JqZWN0R2FyYmFnZUNvbGxlY3Rvcigg
UU9iamVjdCogbyApCi0gICAgICAgICAgICA6IG1fb2JqZWN0KCBvICkgewotICAgICAgICB9Ci0g
ICAgICAgIH5PYmplY3RHYXJiYWdlQ29sbGVjdG9yKCkgewotICAgICAgICAgICAgZGVsZXRlIG1f
b2JqZWN0OwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBRT2JqZWN0KiBtX29i
amVjdDsKLSAgICB9OwogfQogCiAKQEAgLTMwOCw3ICsyOTIsNyBAQAogICAgIH0KIAogICAgIC8v
IHNvIHdlIGRvIG5vdCBoYXZlIHRvIGNhcmUgYWJvdXQgZGVsZXRpbmcgb3V0IHRtcE1vZGVsIGFu
eW1vcmUuCi0gICAgT2JqZWN0R2FyYmFnZUNvbGxlY3RvciBtb2RlbEdhcmJhZ2VDb2xsZWN0b3Io
IHRtcE1vZGVsICk7CisgICAgUVNjb3BlZFBvaW50ZXI8U29wcmFubzo6TW9kZWw+IG1vZGVsR2Fy
YmFnZUNvbGxlY3RvciggdG1wTW9kZWwgKTsKIAogICAgIC8vIGltcG9ydCB0aGUgZGF0YSBpbnRv
IG91ciB0bXAgbW9kZWwKICAgICB3aGlsZSAoIGRhdGEubmV4dCgpICkgewpJbmRleDogc2Vydmlj
ZXMvc3RvcmFnZS9jcmFwcHlpbmZlcmVuY2VyMi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0
b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIuaAkocmV2aXNpb24gMCkKKysrIHNlcnZpY2VzL3N0b3Jh
Z2UvY3JhcHB5aW5mZXJlbmNlcjIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYgQEAKKy8q
CisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUgcHJvamVjdC4KKyAgIENv
cHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5vcmc+CisKKyAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZlcnNpb24gYWNjZXB0ZWQg
YnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAgc3VjY2Vzc29yIGFwcHJv
dmVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2ggc2hhbGwKKyAgIGFjdCBh
cyBhIHByb3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24gMyBvZiB0aGUgbGljZW5z
ZS4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu
b3JnL2xpY2Vuc2VzLz4uCisqLworCisjaWZuZGVmIENSQVBQWUlORkVSRU5DRVIyX0gKKyNkZWZp
bmUgQ1JBUFBZSU5GRVJFTkNFUjJfSAorCisjaW5jbHVkZSA8U29wcmFuby9GaWx0ZXJNb2RlbD4K
KworLyoqCisgKiBUaGUgc2Vjb25kIHZlcnNpb24gb2YgdGhlIGNyYXBweSBpbmZlcmVuY2VyIGl0
IGV2ZW4gY3JhcHBpZXIgdGhhbiB0aGUgZmlyc3QuCisgKiBJdCBvbmx5IGRvZXMgcmRmOnR5cGUg
aW5mZXJlbmNpbmcsIG5vdGhpbmcgZWxzZS4gSW4gdGhlIGxvbmcgcnVuIHRoaXMgaXMgbm90Cisg
KiBlbm91Z2ggYnV0IGZvciBub3cgaXQgaXMgdGhlIG9ubHkga2luZCBvZiBpbmZlcmVuY2Ugd2Ug
dXNlIGluIE5lcG9tdWsuCisgKiBUaHVzLCBpdCBpcyBlbm91Z2ggYW5kIG1ha2VzIGZvciBtdWNo
IGZhc3RlciBxdWVyaWVzIHRoYW4gdGhlIGZpcnN0CisgKiBjcmFwcHkgaW5mZXJlbmNlci4KKyAq
CisgKiBcYXV0aG9yIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKyAqLworY2xhc3Mg
Q3JhcHB5SW5mZXJlbmNlcjIgOiBwdWJsaWMgU29wcmFubzo6RmlsdGVyTW9kZWwKK3sKKyAgICBR
X09CSkVDVAorCitwdWJsaWM6CisgICAgQ3JhcHB5SW5mZXJlbmNlcjIoU29wcmFubzo6TW9kZWwq
IHBhcmVudCA9IDApOworICAgIH5DcmFwcHlJbmZlcmVuY2VyMigpOworCisgICAgLyoqCisgICAg
ICogXHJlaW1wbCB0byB1cGRhdGUgaW50ZXJuYWwgc3RydWN0dXJlcworICAgICAqLworICAgIHZv
aWQgc2V0UGFyZW50TW9kZWwoIFNvcHJhbm86Ok1vZGVsKiBtb2RlbCApOworCisgICAgU29wcmFu
bzo6RXJyb3I6OkVycm9yQ29kZSBhZGRTdGF0ZW1lbnQoIGNvbnN0IFNvcHJhbm86OlN0YXRlbWVu
dCYgc3RhdGVtZW50ICk7CisgICAgU29wcmFubzo6RXJyb3I6OkVycm9yQ29kZSByZW1vdmVTdGF0
ZW1lbnQoIGNvbnN0IFNvcHJhbm86OlN0YXRlbWVudCYgc3RhdGVtZW50ICk7CisgICAgU29wcmFu
bzo6RXJyb3I6OkVycm9yQ29kZSByZW1vdmVBbGxTdGF0ZW1lbnRzKCBjb25zdCBTb3ByYW5vOjpT
dGF0ZW1lbnQmIHN0YXRlbWVudCApOworCisgICAgdXNpbmcgU29wcmFubzo6RmlsdGVyTW9kZWw6
OmFkZFN0YXRlbWVudDsKKyAgICB1c2luZyBTb3ByYW5vOjpGaWx0ZXJNb2RlbDo6cmVtb3ZlU3Rh
dGVtZW50OworICAgIHVzaW5nIFNvcHJhbm86OkZpbHRlck1vZGVsOjpyZW1vdmVBbGxTdGF0ZW1l
bnRzOworCisgICAgLyoqCisgICAgICogQWxsIGluZmVycmVkIHRyaXBsZXMgYXJlIHN0b3JlZCBp
biB0aGUgb25lIGNyYXBweSBpbmZlcmVuY2UgZ3JhcGguCisgICAgICogVGh1cywgcmVtb3Zpbmcg
aW5mZXJlbmNlIGlzIGFzIHNpbXBsZSBhcyByZW1vdmluZyB0aGlzIG9uZSBncmFwaC4KKyAgICAg
Ki8KKyAgICBRVXJsIGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSBjb25zdDsKKworICAgIGJvb2wg
aXNUeXBlVmlzaWJsZSggY29uc3QgUVVybCYgdHlwZVVyaSApIGNvbnN0OworCitRX1NJR05BTFM6
CisgICAgLyoqCisgICAgICogRW1pdHRlZCBvbmNlIGEgY2FsbCB0byB1cGRhdGVBbGxSZXNvdXJj
ZXMoKSBoYXMgZmluaXNoZWQuCisgICAgICovCisgICAgdm9pZCBhbGxSZXNvdXJjZXNVcGRhdGVk
KCk7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgaW50ZXJu
YWwgbWFwIG9mIHN1cGVyIHR5cGVzIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2gKKyAg
ICAgKiB0eXBlIHN0YXRlbWVudHMgbmVlZCB0byBiZSBhZGRlZCBhbmQgcmVtb3ZlZC4gSXQgbWFr
ZXMgc2Vuc2UgdG8gY2FsbCB0aGlzCisgICAgICogd2hlbiB0aGUgb250b2xvZ2llcyBpbiB0aGUg
bW9kZWwgY2hhbmdlLgorICAgICAqLworICAgIHZvaWQgdXBkYXRlSW5mZXJlbmNlSW5kZXgoKTsK
KworICAgIC8qKgorICAgICAqIFVwZGF0ZSBhbGwgdHlwZXMgb2YgYWxsIHJlc291cmNlcyBpbiB0
aGUgbW9kZWwuIFRoaXMgbWV0aG9kIHdpbGwgYWRkIHN1cGVydHlwZQorICAgICAqIHN0YXRlbWVu
dHMgYnV0IE5PVCByZW1vdmUgYW55IHN1cGVyZmx1b3VzIHN0YXRlbWVudHMuIFRvIGFjaGlldmUg
dGhlIGxhdHRlciBjYWxsCisgICAgICogcmVtb3ZlQ29udGV4dChjcmFwcHlJbmZlcmVuY2VDb250
ZXh0KCkpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLgorICAgICAqLworICAgIHZvaWQgdXBk
YXRlQWxsUmVzb3VyY2VzKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRJbmZlcmVuY2VTdGF0
ZW1lbnRzKCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUVVybCYgdHlwZSApOworICAgIHZv
aWQgYWRkSW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3QgUVVybCYgcmVzb3VyY2UsIGNvbnN0IFFT
ZXQ8UVVybD4mIHR5cGVzICk7CisgICAgdm9pZCByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCBj
b25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUVVybCYgdHlwZSApOworICAgIHZvaWQgcmVtb3Zl
SW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3QgUVVybCYgcmVzb3VyY2UsIGNvbnN0IFFMaXN0PFFV
cmw+JiB0eXBlcyApOworICAgIHZvaWQgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3Qg
UVVybCYgcmVzb3VyY2UsIGNvbnN0IFFMaXN0PFNvcHJhbm86Ok5vZGU+JiB0eXBlcyApOworCisg
ICAgZW51bSBWaXNpYmlsaXR5IHsKKyAgICAgICAgVmlzaWJsZSwKKyAgICAgICAgTm9uVmlzaWJs
ZSwKKyAgICAgICAgVW5kZWZpbmVkVmlzaWJpbGl0eQorICAgIH07CisKKyAgICB2b2lkIHNldFZp
c2liaWxpdHkoY29uc3QgUVVybCYgcmVzb3VyY2UsIFZpc2liaWxpdHkgdmlzaWJpbGl0eSk7CisK
KyAgICBjbGFzcyBVcGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQ7CisgICAgY2xhc3MgUHJpdmF0ZTsK
KyAgICBQcml2YXRlKiBjb25zdCBkOworfTsKKworI2VuZGlmIC8vIENSQVBQWUlORkVSRU5DRVIy
X0gKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvbmVwb211a2NvcmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHNlcnZpY2VzL3N0b3JhZ2UvbmVwb211a2NvcmUuY3BwCShyZXZpc2lvbiAxMjEzOTQwKQorKysg
c2VydmljZXMvc3RvcmFnZS9uZXBvbXVrY29yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYg
Kzg3LDkgQEAKICAgICBtX3JlcG9zaXRvcnktPnNldEVuYWJsZVF1ZXJ5UHJlZml4RXhwYW5zaW9u
KGZhbHNlKTsKICAgICBtX3JlcG9zaXRvcnktPnNldEVuYWJsZVF1ZXJ5UHJlZml4RXhwYW5zaW9u
KHRydWUpOwogCisgICAgLy8gdGhlIGZpcnN0IHRpbWUgdGhpcyBpcyBhIHZlcnkgbG9uZyBwcm9j
ZWR1cmUuIFRodXMsIHdlIGRvIGl0IHdoaWxlIE5lcG9tdWsgaXMgYWN0aXZlIGFsdGhvdWdoIHRo
ZW4gc29tZSBxdWVyaWVzIG1pZ2h0IHJldHVybiBpbnZhbGlkIHJlc3VsdHMKKyAgICBtX3JlcG9z
aXRvcnktPnVwZGF0ZUluZmVyZW5jZSgpOworCiAgICAgaWYgKCAhbV9pbml0aWFsaXplZCApIHsK
ICAgICAgICAgLy8gYW5kIGZpbmFsbHkgd2UgYXJlIGRvbmU6IHRoZSByZXBvc2l0b3J5IGlzIG9u
bGluZSBhbmQgdGhlIG9udG9sb2dpZXMgYXJlIGxvYWRlZC4KICAgICAgICAgbV9pbml0aWFsaXpl
ZCA9IHRydWU7CkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEyMTM5NDAp
CisrKyBzZXJ2aWNlcy9zdG9yYWdlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
Nyw2ICsxNyw4IEBACiAgIG9udG9sb2d5bWFuYWdlcm1vZGVsLmNwcAogICBncmFwaHJldHJpZXZl
ci5jcHAKICAgY3JhcHB5aW5mZXJlbmNlci5jcHAKKyAgY3JhcHB5aW5mZXJlbmNlcjIuY3BwCisg
IHR5cGV2aXNpYmlsaXR5dHJlZS5jcHAKICAgKQogCiBzb3ByYW5vX2FkZF9vbnRvbG9neShzdG9y
YWdlX1NSQ1MKQEAgLTU0LDMgKzU2LDUgQEAKICAgVEFSR0VUUyBuZXBvbXVrc3RvcmFnZQogICBE
RVNUSU5BVElPTiAke1BMVUdJTl9JTlNUQUxMX0RJUn0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK2FkZF9zdWJkaXJlY3RvcnkodGVzdCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>56259</attachid>
            <date>2011-01-20 22:54:10 +0000</date>
            <delta_ts>2011-01-21 10:46:02 +0000</delta_ts>
            <desc>yet another update for kdebase/runtime/nepomuk</desc>
            <filename>kdebase-runtime-nepomuk-storage.diff</filename>
            <type>application/octet-stream</type>
            <size>81654</size>
            <attacher name="Sebastian Trueg">trueg</attacher>
            
              <data encoding="base64">SW5kZXg6IG9udG9sb2dpZXMva3V2by50cmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG9udG9sb2dpZXMva3V2
by50cmlnCShyZXZpc2lvbiAxMjEzOTQwKQorKysgb250b2xvZ2llcy9rdXZvLnRyaWcJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDYgKzQ3LDkgQEAKICAgICByZGZzOlJlc291cmNlCiAgICAgICAgIG5h
bzp1c2VyVmlzaWJsZSB0cnVlIC4KIAorICAgIG5hbzp1c2VyVmlzaWJsZQorICAgICAgICBuYW86
dXNlclZpc2libGUgZmFsc2UgLgorCiAgICAgbnVhbzpFdmVudAogICAgICAgICBuYW86dXNlclZp
c2libGUgZmFsc2UgLgogCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvdHlwZXZpc2liaWxp
dHl0cmVldGVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvdGVzdC90eXBldmlz
aWJpbGl0eXRyZWV0ZXN0LmgJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3Qv
dHlwZXZpc2liaWxpdHl0cmVldGVzdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisv
KgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE5lcG9tdWsgS0RFIHByb2plY3QuCisgICBD
b3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorCisgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55CisgICBsYXRlciB2ZXJzaW9uIGFjY2VwdGVk
IGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nlc3NvciBhcHBy
b3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiksIHdoaWNoIHNoYWxsCisgICBhY3Qg
YXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxpY2Vu
c2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251
Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2lmbmRlZiBUWVBFVklTSUJJTElUWVRSRUVURVNUX0gK
KyNkZWZpbmUgVFlQRVZJU0lCSUxJVFlUUkVFVEVTVF9ICisKKyNpbmNsdWRlIDxRT2JqZWN0Pgor
CitjbGFzcyBLVGVtcERpcjsKK2NsYXNzIFR5cGVWaXNpYmlsaXR5VHJlZTsKK25hbWVzcGFjZSBT
b3ByYW5vIHsKK2NsYXNzIE1vZGVsOworfQorCitjbGFzcyBUeXBlVmlzaWJpbGl0eVRyZWVUZXN0
IDogcHVibGljIFFPYmplY3QKK3sKKyAgICBRX09CSkVDVAorCitwcml2YXRlIFFfU0xPVFM6Cisg
ICAgdm9pZCBpbml0VGVzdENhc2UoKTsKKyAgICB2b2lkIGNsZWFudXBUZXN0Q2FzZSgpOworICAg
IHZvaWQgaW5pdCgpOworICAgIHZvaWQgdGVzdFR5cGVWaXNpYmlsaXR5VHJlZSgpOworCitwcml2
YXRlOgorICAgIEtUZW1wRGlyKiBtX3N0b3JhZ2VEaXI7CisgICAgU29wcmFubzo6TW9kZWwqIG1f
bW9kZWw7CisgICAgVHlwZVZpc2liaWxpdHlUcmVlKiBtX3R5cGVUcmVlOworfTsKKworI2VuZGlm
IC8vIFRZUEVWSVNJQklMSVRZVFJFRVRFU1RfSApJbmRleDogc2VydmljZXMvc3RvcmFnZS90ZXN0
L2NyYXBweWluZmVyZW5jZXIydGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFn
ZS90ZXN0L2NyYXBweWluZmVyZW5jZXIydGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNl
cy9zdG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyOTkgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBL
REUgcHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVn
QGtkZS5vcmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVy
IHZlcnNpb24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cwor
ICAgc3VjY2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hp
Y2ggc2hhbGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNp
b24gMyBvZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNl
ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiY3JhcHB5
aW5mZXJlbmNlcjJ0ZXN0LmgiCisjaW5jbHVkZSAiLi4vY3JhcHB5aW5mZXJlbmNlcjIuaCIKKwor
I2luY2x1ZGUgPFF0VGVzdD4KKyNpbmNsdWRlICJxdGVzdF9rZGUuaCIKKworI2luY2x1ZGUgPFNv
cHJhbm8vU29wcmFubz4KKworI2luY2x1ZGUgPGt0ZW1wZGlyLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBTb3ByYW5vOworCitRX0RFQ0xBUkVfTUVUQVRZUEUoU29wcmFubzo6U3RhdGVtZW50KQorCit2
b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6aW5pdFRlc3RDYXNlKCkKK3sKKyAgICBxUmVnaXN0
ZXJNZXRhVHlwZTxTb3ByYW5vOjpTdGF0ZW1lbnQ+KCk7CisKKyAgICAvLyB3ZSBuZWVkIHRvIHVz
ZSBhIFZpcnR1b3NvIG1vZGVsIGFzIHRtcCBtb2RlbCBzaW5jZSByZWRsYW5kIG1pc3NlcyBpbXBv
cnRhbnQgU1BBUlFMIGZlYXR1cmVzCisgICAgLy8gdGhhdCBhcmUgdXNlZCBieSBsaWJuZXBvbXVr
IGJlbG93CisgICAgY29uc3QgU29wcmFubzo6QmFja2VuZCogYmFja2VuZCA9IFNvcHJhbm86OlBs
dWdpbk1hbmFnZXI6Omluc3RhbmNlKCktPmRpc2NvdmVyQmFja2VuZEJ5TmFtZSggInZpcnR1b3Nv
YmFja2VuZCIgKTsKKyAgICBRVkVSSUZZKCBiYWNrZW5kICk7CisgICAgbV9zdG9yYWdlRGlyID0g
bmV3IEtUZW1wRGlyKCk7CisgICAgbV9iYXNlTW9kZWwgPSBiYWNrZW5kLT5jcmVhdGVNb2RlbCgg
U29wcmFubzo6QmFja2VuZFNldHRpbmdzKCkgPDwgU29wcmFubzo6QmFja2VuZFNldHRpbmcoU29w
cmFubzo6QmFja2VuZE9wdGlvblN0b3JhZ2VEaXIsIG1fc3RvcmFnZURpci0+bmFtZSgpKSApOwor
ICAgIFFWRVJJRlkoIG1fYmFzZU1vZGVsICk7CisKKyAgICBtX21vZGVsID0gbmV3IENyYXBweUlu
ZmVyZW5jZXIyKCBtX2Jhc2VNb2RlbCApOworfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVz
dDo6Y2xlYW51cFRlc3RDYXNlKCkKK3sKKyAgICBkZWxldGUgbV9tb2RlbDsKKyAgICBkZWxldGUg
bV9iYXNlTW9kZWw7CisgICAgZGVsZXRlIG1fc3RvcmFnZURpcjsKK30KKworCit2b2lkIENyYXBw
eUluZmVyZW5jZXIyVGVzdDo6aW5pdCgpCit7CisgICAgbV9iYXNlTW9kZWwtPnJlbW92ZUFsbFN0
YXRlbWVudHMoKTsKKworICAgIC8vCisgICAgLy8gd2UgY3JlYXRlIG9uZSBmYWtlIG9udG9sb2d5
CisgICAgLy8KKyAgICAvLyBBCisgICAgLy8gfC0gQgorICAgIC8vICAgIHwtIEMgLSBpbnZpc2li
bGUKKyAgICAvLyAgICAgICB8LSBECisgICAgLy8gICAgICAgfC0gRQorICAgIC8vCisgICAgLy8g
RgorICAgIC8vIHwtIEUKKyAgICAvLworICAgIC8vIEwxCisgICAgLy8gfC0gTDIKKyAgICAvLyAg
ICB8LSBMMQorICAgIC8vCisgICAgUVVybCBncmFwaCgiZ3JhcGg6L29udG8iKTsKKyAgICBtX2Jh
c2VNb2RlbC0+YWRkU3RhdGVtZW50KCBncmFwaCwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0
eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5STDo6T250b2xvZ3koKSwgZ3JhcGggKTsKKyAg
ICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJuZXBvbXVrOi9HIiksIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOUkw6Okluc3Rh
bmNlQmFzZSgpLCBncmFwaCApOworCisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVy
bCgib250bzovQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9CIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1f
YmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0MiKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdy
YXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRCIpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Uzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJs
KCJvbnRvOi9FIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRT
dGF0ZW1lbnQoIFFVcmwoIm9udG86L0YiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBl
KCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisKKyAgICBt
X2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9FIiksIFNvcHJhbm86OlZvY2Fi
dWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQyIpLCBncmFwaCApOworICAg
IG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0IiKSwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9BIiksIGdyYXBoICk7Cisg
ICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovQyIpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0IiKSwgZ3JhcGggKTsK
KyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9EIiksIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQyIpLCBncmFwaCAp
OworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0UiKSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9GIiksIGdyYXBo
ICk7CisKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0MiKSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUoZmFsc2UpLCBn
cmFwaCApOworCisgICAgLy8gdGhlIGxvb3B5IGNsYXNzZXMKKyAgICBtX2Jhc2VNb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9MMSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5
cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBt
X2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9MMSIpLCBTb3ByYW5vOjpWb2Nh
YnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0wyIiksIGdyYXBoICk7Cisg
ICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovTDIiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNz
KCksIGdyYXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzov
TDIiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRv
Oi9MMSIpLCBncmFwaCApOworCisgICAgbV9tb2RlbC0+dXBkYXRlSW5mZXJlbmNlSW5kZXgoKTsK
K30KKworLy8gbWFrZSBzdXJlIG9ubHkgdGhlIG9uZSBzdGF0ZW1lbnQgaXMgYWRkZWQKK3ZvaWQg
Q3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0QWRkQW55U3RhdGVtZW50KCkKK3sKKyAgICBjb25z
dCBpbnQgY250ID0gbV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKTsKKyAgICBTdGF0ZW1lbnQgcygg
UVVybCgibmVwb211azovQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86Omhhc1RhZygpLCBR
VXJsKCJuZXBvbXVrOi9UIiksIFFVcmwoIm5lcG9tdWs6L0ciKSApOworICAgIFFWRVJJRlkoIW1f
bW9kZWwtPmFkZFN0YXRlbWVudChzKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50
Q291bnQoKSwgY250KzEpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNTdGF0ZW1lbnQo
cykpOworfQorCisvLyBtYWtlIHN1cmUgYWxsIHN1cGVyY2xhc3NlcyBhcmUgYWRkZWQgYXMgdHlw
ZSwgdG9vCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6dGVzdEFkZFR5cGVTdGF0ZW1lbnQo
KQoreworICAgIGludCBjbnQgPSBtX21vZGVsLT5zdGF0ZW1lbnRDb3VudCgpOworICAgIFFVcmwg
cmVzQSgibmVwb211azovQSIpOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3By
YW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpLCBRVXJsKCJuZXBv
bXVrOi9HIikpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCsz
KTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgp
KSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2Nh
YnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworCisgICAgY250
ID0gbV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKTsKKyAgICBRVXJsIHJlc0IoIm5lcG9tdWs6L0Ii
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQiwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSwgUVVybCgibmVwb211azovRyIpKTsKKyAgICBR
Q09NUEFSRShtX21vZGVsLT5zdGF0ZW1lbnRDb3VudCgpLCBjbnQrNCk7CisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgUVVybCgib250bzovQiIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0
YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpKSk7
CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVs
YXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkp
OworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgVm9jYWJ1
bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUoMSkpKTsKKworICAgIGNudCA9
IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNDKCJuZXBvbXVrOi9DIik7
CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0MsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
Rjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNP
TVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KzQpOworICAgIFFWRVJJRlkobV9t
b2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IFFVcmwoIm9udG86L0MiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0
ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSkpOwor
ICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFy
eTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+
Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKworICAgIGNudCA9IG1fbW9kZWwt
PnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNEKCJuZXBvbXVrOi9EIik7CisgICAgbV9t
b2RlbC0+YWRkU3RhdGVtZW50KHJlc0QsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgp
LCBRVXJsKCJvbnRvOi9FIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNPTVBBUkUobV9t
b2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KzcpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29u
dGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9u
dG86L0YiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVz
RCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0UiKSkpOworICAgIFFWRVJJ
RlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0
eXBlKCksIFFVcmwoIm9udG86L0MiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNB
bnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0Ii
KSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9j
YWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkpOworICAgIFFWRVJJRlkobV9t
b2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAgICBRVkVSSUZZKG1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0QsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZp
c2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7Cit9CisKKy8vIG1ha2Ugc3VyZSB0aGUgbmV3IHJl
bGF0aW9uIGlzIHRha2VuIGludG8gYWNjb3VudCB3aXRoIHRoZSBuZXh0IGFkZFN0YXRlbWVudAor
dm9pZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRlc3RBZGRTdWJDbGFzc09mU3RhdGVtZW50KCkK
K3sKKyAgICBRRVhQRUNUX0ZBSUwoIiIsICJOb3QgaW1wbGVtZW50ZWQgeWV0IiwgQWJvcnQpOwor
fQorCisvLyBtYWtlIHN1cmUgb25seSB0aGUgb25lIHN0YXRlbWVudCBpcyByZW1vdmVkCit2b2lk
IENyYXBweUluZmVyZW5jZXIyVGVzdDo6dGVzdFJlbW92ZUFueVN0YXRlbWVudCgpCit7Cit9CisK
Ky8vIG1ha2Ugc3VyZSB0aGUgYXBwcm9wcmlhdGUgdHlwZXMgYXJlIHJlbW92ZWQsIHRvbworLy8g
Y2hlY2sgMiBjYXNlczogMS4gb25seSB0aGUgb25lIHR5cGUsIDIuIHR3byB0eXBlcyB3aXRoIGlu
dGVyc2VjdGluZyBzdXBlcmNsYXNzZXMKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0
UmVtb3ZlVHlwZVN0YXRlbWVudCgpCit7CisgICAgaW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVu
dENvdW50KCk7CisgICAgUVVybCByZXNBKCJuZXBvbXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRk
U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJv
bnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+cmVtb3ZlU3RhdGVt
ZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9B
IiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50
Q291bnQoKSwgY250KTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpKSk7CisgICAg
UVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAg
ICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5
OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworCisgICAgLy8gYWRkIHR3
byB0eXBlcyB3aXRoIGludGVyc2VjdGluZyBzdXBlciB0eXBlcworICAgIG1fbW9kZWwtPmFkZFN0
YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250
bzovQiIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChy
ZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBR
VXJsKCJuZXBvbXVrOi9HIikpOworICAgIC8vIHJlbW92ZSBvbmUgb2YgdGhlbQorICAgIG1fbW9k
ZWwtPnJlbW92ZVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgUVVybCgib250bzovQiIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIC8vIG1ha2Ugc3Vy
ZSBhbGwgaXMgd2VsbAorICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNu
dCs3KTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZv
Y2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKG1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgp
LCBRVXJsKCJvbnRvOi9FIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3Rh
dGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIikpKTsK
KyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9CIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwt
PmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJs
KCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50
KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZT
OjpSZXNvdXJjZSgpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNBLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkp
OworfQorCisvLyBtYWtlIHN1cmUgdGhlIHJlbW92ZWQgc3ViY2xhc3MgcmVsYXRpb24gaXMgdGFr
ZW4gaW50byBhY2NvdW50IHdpdGggdGhlIG5leHQgYWRkU3RhdGVtZW50CisvLyBtYWtlIHN1cmUg
dHlwZSBzdGF0ZW1lbnRzIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZCBhcmUgcmVtb3ZlZAordm9p
ZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRlc3RSZW1vdmVTdWJDbGFzc09mU3RhdGVtZW50KCkK
K3sKKyAgICBRRVhQRUNUX0ZBSUwoIiIsICJOb3QgaW1wbGVtZW50ZWQgeWV0IiwgQWJvcnQpOwor
fQorCisvLyBtYWtlIHN1cmUgdGhlIGNvcnJlc3BvbmluZyBzdGF0ZW1lbnRzIGFyZSByZW1vdmVk
IGFuZCBub3RoaW5nIGVsc2UKKy8vIHRlc3QgYWxsIGNvbWJpbmF0aW9ucyBvZiBpbnZhbGlkIGFu
ZCB2YWxpZCBub2RlcyBpZiBwb3NzaWJsZQordm9pZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRl
c3RSZW1vdmVBbGxTdGF0ZW1lbnRzKCkKK3sKKyAgICAvLyAxLiByZW1vdmUgdGhlIHdob2xlIHJl
c291cmNlCisgICAgaW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVy
bCByZXNBKCJuZXBvbXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5l
cG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OmxhYmVsKCksIExpdGVyYWxWYWx1ZShRTGF0aW4xU3RyaW5nKCJBIikp
LCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9kZWwtPnJlbW92ZUFsbFN0YXRlbWVudHMo
cmVzQSwgTm9kZSgpLCBOb2RlKCkpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENv
dW50KCksIGNudCk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQo
cmVzQSwgTm9kZSgpLCBOb2RlKCksIE5vZGUoKSkpOworCisgICAgLy8gMi4gcmVtb3ZlIGEgdHlw
ZSBmcm9tIHNldmVyYWwgcmVzb3VyY2VzCisgICAgUVVybCByZXNCKCJuZXBvbXVrOi9CIik7Cisg
ICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6
dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2Rl
bC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBR
VXJsKCJvbnRvOi9GIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3Rh
dGVtZW50KHJlc0IsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRv
Oi9CIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJl
c0IsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIiksIFFV
cmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+cmVtb3ZlQWxsU3RhdGVtZW50cyhOb2Rl
KCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpOwor
ICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFy
eTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsK
KyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVs
LT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVy
bCgib250bzovRiIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Uzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1l
bnQocmVzQiwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkpOworICAg
IFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgVm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNv
bnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJv
bnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJl
c0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7Cisg
ICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5
OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworICAgIFFDT01QQVJFKG1f
bW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCs3KTsKKworICAgIC8vIDMuIHJlbW92ZSBhbGwg
dHlwZXMgZnJvbSBvbmUgcmVzb3VyY2UKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQSwg
U29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0UiKSwgUVVybCgi
bmVwb211azovRyIpKTsKKyAgICBtX21vZGVsLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHJlc0EsIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBOb2RlKCksIFFVcmwoIm5lcG9tdWs6L0ci
KSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIE5vZGUoKSkpOworICAgIFFWRVJJRlkoIW1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZp
c2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICAvLyA0LiByZW1vdmUgYSBncmFwaAor
ICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9k
ZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwg
UVVybCgib250bzovQSIpLCBRVXJsKCJuZXBvbXVrOi9HMiIpKTsKKyAgICBtX21vZGVsLT5yZW1v
dmVDb250ZXh0KFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29u
dGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgTm9kZSgpLCBOb2RlKCkpKTsKKyAgICBRVkVSSUZZKG1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
Rjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250
YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwg
UVVybCgib250bzovRSIpKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0
ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86
L0QiKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0Es
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIikpKTsKKyAg
ICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQiIpKSk7CisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkpOworICAg
IFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQ29udGV4dChRVXJsKCJuZXBvbXVrOi9HIikpKTsK
K30KKworLy8gbWFrZSBzdXJlIHdlIGRvIG5vdCBydW4gaW50byBhbiBlbmRsZXNzIGxvb3AKK3Zv
aWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0Q3ljbGljU3ViQ2xhc3NSZWxhdGlvbigpCit7
CisgICAgaW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNB
KCJuZXBvbXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9MMSIpLCBRVXJsKCJuZXBvbXVr
Oi9HIikpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCs0KTsg
Ly8gKzQgc2luY2UgTDEgaXMgdGhlcmUgdHdpY2U6IHRoZSBvbmUgd2UgYWRkZWQgYW5kIHRoZSBz
dXBlcmNsYXNzIG9mIEwyCisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovTDEiKSkpOworICAg
IFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0wyIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNv
bnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKSk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJl
bmNlcjJUZXN0Ojp0ZXN0VXBkYXRlQWxsUmVzb3VyY2VzKCkKK3sKKyAgICAvLyB3ZSBhZGQgYSBi
dW5jaCBvZiBzdGF0ZW1lbnRzIHRvIHRoZSBiYXNlIG1vZGVsIGluc3RlYWQgb2YgZ29pbmcgdGhy
b3VnaCB0aGUgY3JhcHB5IGluZmVyZW5jZSBtb2RlbAorICAgIFFVcmwgcmVzQSgibmVwb211azov
QSIpOworICAgIFFVcmwgcmVzQigibmVwb211azovQiIpOworICAgIFFVcmwgcmVzQygibmVwb211
azovQyIpOworICAgIFFVcmwgcmVzRCgibmVwb211azovRCIpOworCisgICAgbV9iYXNlTW9kZWwt
PmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVy
bCgib250bzovQSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fYmFzZU1vZGVsLT5hZGRT
dGF0ZW1lbnQocmVzQiwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9u
dG86L0IiKSwgUVVybCgibmVwb211azovRyIpKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVt
ZW50KHJlc0MsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9D
IiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudChy
ZXNELCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBR
VXJsKCJuZXBvbXVrOi9HIikpOworCisgICAgbV9tb2RlbC0+dXBkYXRlQWxsUmVzb3VyY2VzKCk7
CisKKyAgICAvLyB3YWl0IGZvciB0aGUgYWJvdmUgY2FsbCB0byBmaW5pc2gKKyAgICBRRXZlbnRM
b29wIGxvb3A7CisgICAgY29ubmVjdChtX21vZGVsLCBTSUdOQUwoYWxsUmVzb3VyY2VzVXBkYXRl
ZCgpKSwgJmxvb3AsIFNMT1QocXVpdCgpKSk7CisgICAgbG9vcC5leGVjKCk7CisKKyAgICBRVkVS
SUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6Ok5BTzo6
dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICBRVkVSSUZZKG1fbW9kZWwt
PmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUo
KSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0Fu
eVN0YXRlbWVudChyZXNDLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxW
YWx1ZSgxKSkpOworCisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChy
ZXNELCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOwor
fQorCitRVEVTVF9LREVNQUlOX0NPUkUoQ3JhcHB5SW5mZXJlbmNlcjJUZXN0KQorCisjaW5jbHVk
ZSAiY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0Lm1vYyIKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvdGVz
dC9jcmFwcHlpbmZlcmVuY2VyMnRlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdl
L3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmgJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9z
dG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTcgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUgcHJv
amVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5v
cmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZlcnNp
b24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAgc3Vj
Y2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2ggc2hh
bGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24gMyBv
ZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0
cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaWZuZGVmIENSQVBQWUlORkVSRU5D
RVIyVEVTVF9ICisjZGVmaW5lIENSQVBQWUlORkVSRU5DRVIyVEVTVF9ICisKKyNpbmNsdWRlIDxR
T2JqZWN0PgorCitjbGFzcyBLVGVtcERpcjsKK2NsYXNzIENyYXBweUluZmVyZW5jZXIyOworbmFt
ZXNwYWNlIFNvcHJhbm8geworY2xhc3MgTW9kZWw7Cit9CisKK2NsYXNzIENyYXBweUluZmVyZW5j
ZXIyVGVzdCA6IHB1YmxpYyBRT2JqZWN0Cit7CisgICAgUV9PQkpFQ1QKKworcHJpdmF0ZSBRX1NM
T1RTOgorICAgIHZvaWQgaW5pdFRlc3RDYXNlKCk7CisgICAgdm9pZCBjbGVhbnVwVGVzdENhc2Uo
KTsKKyAgICB2b2lkIGluaXQoKTsKKyAgICB2b2lkIHRlc3RBZGRBbnlTdGF0ZW1lbnQoKTsKKyAg
ICB2b2lkIHRlc3RBZGRUeXBlU3RhdGVtZW50KCk7CisgICAgdm9pZCB0ZXN0QWRkU3ViQ2xhc3NP
ZlN0YXRlbWVudCgpOworICAgIHZvaWQgdGVzdFJlbW92ZUFueVN0YXRlbWVudCgpOworICAgIHZv
aWQgdGVzdFJlbW92ZVR5cGVTdGF0ZW1lbnQoKTsKKyAgICB2b2lkIHRlc3RSZW1vdmVTdWJDbGFz
c09mU3RhdGVtZW50KCk7CisgICAgdm9pZCB0ZXN0UmVtb3ZlQWxsU3RhdGVtZW50cygpOworICAg
IHZvaWQgdGVzdEN5Y2xpY1N1YkNsYXNzUmVsYXRpb24oKTsKKyAgICB2b2lkIHRlc3RVcGRhdGVB
bGxSZXNvdXJjZXMoKTsKKworcHJpdmF0ZToKKyAgICBLVGVtcERpciogbV9zdG9yYWdlRGlyOwor
ICAgIFNvcHJhbm86Ok1vZGVsKiBtX2Jhc2VNb2RlbDsKKyAgICBDcmFwcHlJbmZlcmVuY2VyMiog
bV9tb2RlbDsKK307CisKKyNlbmRpZgpJbmRleDogc2VydmljZXMvc3RvcmFnZS90ZXN0L3R5cGV2
aXNpYmlsaXR5dHJlZXRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvdGVz
dC90eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmNwcAkocmV2aXNpb24gMCkKKysrIHNlcnZpY2VzL3N0
b3JhZ2UvdGVzdC90eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNDEgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUg
cHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtk
ZS5vcmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZl
cnNpb24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAg
c3VjY2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2gg
c2hhbGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24g
MyBvZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8
aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAidHlwZXZpc2li
aWxpdHl0cmVldGVzdC5oIgorI2luY2x1ZGUgIi4uL3R5cGV2aXNpYmlsaXR5dHJlZS5oIgorCisj
aW5jbHVkZSA8UXRUZXN0PgorI2luY2x1ZGUgInF0ZXN0X2tkZS5oIgorCisjaW5jbHVkZSA8U29w
cmFuby9Tb3ByYW5vPgorCisjaW5jbHVkZSA8a3RlbXBkaXIuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFNvcHJhbm87CisKK3ZvaWQgVHlwZVZpc2liaWxpdHlUcmVlVGVzdDo6aW5pdFRlc3RDYXNlKCkK
K3sKKyAgICAvLyB3ZSBuZWVkIHRvIHVzZSBhIFZpcnR1b3NvIG1vZGVsIGFzIHRtcCBtb2RlbCBz
aW5jZSByZWRsYW5kIG1pc3NlcyBpbXBvcnRhbnQgU1BBUlFMIGZlYXR1cmVzCisgICAgLy8gdGhh
dCBhcmUgdXNlZCBieSBsaWJuZXBvbXVrIGJlbG93CisgICAgY29uc3QgU29wcmFubzo6QmFja2Vu
ZCogYmFja2VuZCA9IFNvcHJhbm86OlBsdWdpbk1hbmFnZXI6Omluc3RhbmNlKCktPmRpc2NvdmVy
QmFja2VuZEJ5TmFtZSggInZpcnR1b3NvYmFja2VuZCIgKTsKKyAgICBRVkVSSUZZKCBiYWNrZW5k
ICk7CisgICAgbV9zdG9yYWdlRGlyID0gbmV3IEtUZW1wRGlyKCk7CisgICAgbV9tb2RlbCA9IGJh
Y2tlbmQtPmNyZWF0ZU1vZGVsKCBTb3ByYW5vOjpCYWNrZW5kU2V0dGluZ3MoKSA8PCBTb3ByYW5v
OjpCYWNrZW5kU2V0dGluZyhTb3ByYW5vOjpCYWNrZW5kT3B0aW9uU3RvcmFnZURpciwgbV9zdG9y
YWdlRGlyLT5uYW1lKCkpICk7CisgICAgUVZFUklGWSggbV9tb2RlbCApOworCisgICAgbV90eXBl
VHJlZSA9IG5ldyBUeXBlVmlzaWJpbGl0eVRyZWUoIG1fbW9kZWwgKTsKK30KKwordm9pZCBUeXBl
VmlzaWJpbGl0eVRyZWVUZXN0OjpjbGVhbnVwVGVzdENhc2UoKQoreworICAgIGRlbGV0ZSBtX21v
ZGVsOworICAgIGRlbGV0ZSBtX3R5cGVUcmVlOworICAgIGRlbGV0ZSBtX3N0b3JhZ2VEaXI7Cit9
CisKKwordm9pZCBUeXBlVmlzaWJpbGl0eVRyZWVUZXN0Ojppbml0KCkKK3sKKyAgICBtX21vZGVs
LT5yZW1vdmVBbGxTdGF0ZW1lbnRzKCk7CisKKyAgICAvLyB3ZSBjcmVhdGUgb25lIGZha2Ugb250
b2xvZ3kKKyAgICAvLworICAgIC8vIHNpdHVhdGlvbnMgd2UgbmVlZCB0byB0ZXN0OgorICAgIC8v
ICogY2xhc3MgdGhhdCBpcyBtYXJrZWQgdmlzaWJsZSBzaG91bGQgc3RheSB2aXNpYmxlCisgICAg
Ly8gKiBjbGFzcyB0aGF0IGlzIG1hcmtlZCBpbnZpc2libGUgc2hvdWxkIHN0YXkgaW52aXNpYmxl
CisgICAgLy8gKiBub24tbWFya2VkIHN1YmNsYXNzIG9mIHZpc2libGUgc2hvdWxkIGJlIHZpc2li
bGUsIHRvbworICAgIC8vICogbm9uLW1hcmtlZCBzdWJjbGFzcyBvZiBpbnZpc2libGUgc2hvdWxk
IGJlIGludmlzaWJsZSwgdG9vCisgICAgLy8gKiBtYXJrZWQgc3ViY2xhc3Mgc2hvdWxkIGtlZXAg
aXRzIG93biB2aXNpYmxpdHkgYW5kIG5vdCBpbmhlcml0IGZyb20gcGFyZW50CisgICAgLy8gKiB3
aG9sZSBicmFuY2ggc2hvdWxkIGluaGVyaXQgZnJvbSBwYXJlbnQKKyAgICAvLyAqIGlmIG9uZSBw
YXJlbnQgaXMgdmlzaWJsZSB0aGUgY2xhc3MgaXMgdmlzaWJsZSwgdG9vLCBldmVuIGlmIE4gb3Ro
ZXIgcGFyZW50cyBhcmUgbm90CisgICAgLy8gKiBpZiBhbGwgcGFyZW50cyBhcmUgaW52aXNpYmxl
LCB0aGUgY2xhc3MgaXMgaW52aXNpYmxlLCBldmVuIGlmIGhpZ2hlciB1cCBpbiB0aGUgYnJhbmNo
IGEgY2xhc3MgaXMgdmlzaWJsZQorICAgIC8vICogcHJvcGVybHkgaGFuZGxlIGxvb3BzIChhcyBp
bjogZG8gbm90IHJ1biBpbnRvIGFuIGVuZGxlc3MgbG9vcCkKKyAgICAvLworICAgIC8vIEEKKyAg
ICAvLyB8LSBCIC0gaW52aXNpYmxlCisgICAgLy8gICAgfC0gQworICAgIC8vICAgICAgIHwtIEQg
LSB2aXNpYmxlCisgICAgLy8gICAgICAgICAgfC0gRQorICAgIC8vICAgICAgICAgICAgIHwtIEYK
KyAgICAvLyAgICB8LSBHCisgICAgLy8KKyAgICAvLyBBQSAtIGludmlzaWJsZQorICAgIC8vIHwg
LSBGCisgICAgLy8gfCAtIEcKKyAgICAvLworICAgIC8vIFgKKyAgICAvLyB8LSBZIC0gaW52aXNp
YmxlCisgICAgLy8gICAgfC0gWgorICAgIC8vICAgICAgIHwtIFgKKworICAgIFFVcmwgZ3JhcGgo
ImdyYXBoOi9vbnRvIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBncmFwaCwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5STDo6T250
b2xvZ3koKSwgZ3JhcGggKTsKKworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250
bzovQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQo
IFFVcmwoIm9udG86L0IiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9DIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1f
bW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRCIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5
OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGgg
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0UiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNz
KCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9GIiks
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgi
b250bzovRyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1l
bnQoIFFVcmwoIm9udG86L0FBIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fbW9kZWwt
PmFkZFN0YXRlbWVudCggUVVybCgib250bzovWCIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAg
ICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L1kiKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdy
YXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9aIiksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpD
bGFzcygpLCBncmFwaCApOworCisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRv
Oi9CIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250
bzovQSIpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzov
QyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86
L0IiKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0Qi
KSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9D
IiksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9FIiks
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovRCIp
LCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRiIpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0UiKSwg
Z3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0ciKSwgU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9CIiksIGdy
YXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9GIiksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQUEiKSwgZ3Jh
cGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0ciKSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9BQSIpLCBncmFw
aCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovWSIpLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L1giKSwgZ3JhcGgg
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L1oiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9ZIiksIGdyYXBoICk7
CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9YIiksIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovWiIpLCBncmFwaCApOwor
CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9CIiksIFNvcHJhbm86OlZv
Y2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKGZhbHNlKSwgZ3JhcGgg
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0QiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUodHJ1ZSksIGdyYXBo
ICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9BQSIpLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZShmYWxzZSksIGdy
YXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9ZIiksIFNvcHJh
bm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKGZhbHNlKSwg
Z3JhcGggKTsKKworICAgIG1fdHlwZVRyZWUtPnJlYnVpbGRUcmVlKCk7Cit9CisKK3ZvaWQgVHlw
ZVZpc2liaWxpdHlUcmVlVGVzdDo6dGVzdFR5cGVWaXNpYmlsaXR5VHJlZSgpCit7CisgICAgUVZF
UklGWShtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgib250bzovQSIpKSk7CisgICAgUVZFUklG
WSghbV90eXBlVHJlZS0+aXNWaXNpYmxlKFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlko
IW1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9DIikpKTsKKyAgICBRVkVSSUZZKG1f
dHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9EIikpKTsKKyAgICBRVkVSSUZZKG1fdHlw
ZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9FIikpKTsKKyAgICBRVkVSSUZZKG1fdHlwZVRy
ZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVl
LT5pc1Zpc2libGUoUVVybCgib250bzovRyIpKSk7CisgICAgUVZFUklGWSghbV90eXBlVHJlZS0+
aXNWaXNpYmxlKFFVcmwoIm9udG86L0FBIikpKTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5p
c1Zpc2libGUoUVVybCgib250bzovWCIpKSk7IC8vIGJlY2F1c2Ugb25seSB0b3AtbGV2ZWwgY2xh
c3NlcyBpbmhlcml0IGZyb20gcmRmczpSZXNvdXJjZQorICAgIFFWRVJJRlkoIW1fdHlwZVRyZWUt
PmlzVmlzaWJsZShRVXJsKCJvbnRvOi9ZIikpKTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5p
c1Zpc2libGUoUVVybCgib250bzovWiIpKSk7Cit9CisKK1FURVNUX0tERU1BSU5fQ09SRShUeXBl
VmlzaWJpbGl0eVRyZWVUZXN0KQorCisjaW5jbHVkZSAidHlwZXZpc2liaWxpdHl0cmVldGVzdC5t
b2MiCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gc2VydmljZXMvc3RvcmFnZS90ZXN0L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAwKQor
Kysgc2VydmljZXMvc3RvcmFnZS90ZXN0L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE4IEBACitzZXQoIEVYRUNVVEFCTEVfT1VUUFVUX1BBVEggJHtDTUFLRV9DVVJSRU5U
X0JJTkFSWV9ESVJ9ICkKKwora2RlNF9hZGRfdW5pdF90ZXN0KGNyYXBweWluZmVyZW5jZXIydGVz
dAorICBjcmFwcHlpbmZlcmVuY2VyMnRlc3QuY3BwCisgIC4uL2NyYXBweWluZmVyZW5jZXIyLmNw
cAorICAuLi90eXBldmlzaWJpbGl0eXRyZWUuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNy
YXBweWluZmVyZW5jZXIydGVzdAorICAke1FUX1FUVEVTVF9MSUJSQVJZfQorICAke1NPUFJBTk9f
TElCUkFSSUVTfQorICAke0tERTRfS0RFQ09SRV9MSUJTfSkKKwora2RlNF9hZGRfdW5pdF90ZXN0
KHR5cGV2aXNpYmlsaXR5dHJlZXRlc3QKKyAgdHlwZXZpc2liaWxpdHl0cmVldGVzdC5jcHAKKyAg
Li4vdHlwZXZpc2liaWxpdHl0cmVlLmNwcCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0eXBldmlz
aWJpbGl0eXRyZWV0ZXN0CisgICR7UVRfUVRURVNUX0xJQlJBUll9CisgICR7U09QUkFOT19MSUJS
QVJJRVN9CisgICR7S0RFNF9LREVDT1JFX0xJQlN9KQpJbmRleDogc2VydmljZXMvc3RvcmFnZS9v
bnRvbG9neWxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS9vbnRvbG9n
eWxvYWRlci5jcHAJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL29udG9s
b2d5bG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTQgKzI0LDEwIEBACiAKICNpbmNs
dWRlIDxTb3ByYW5vL0dsb2JhbD4KICNpbmNsdWRlIDxTb3ByYW5vL05vZGU+Ci0jaW5jbHVkZSA8
U29wcmFuby9MaXRlcmFsVmFsdWU+CiAjaW5jbHVkZSA8U29wcmFuby9Nb2RlbD4KICNpbmNsdWRl
IDxTb3ByYW5vL1BsdWdpbk1hbmFnZXI+CiAjaW5jbHVkZSA8U29wcmFuby9TdGF0ZW1lbnRJdGVy
YXRvcj4KLSNpbmNsdWRlIDxTb3ByYW5vL1F1ZXJ5UmVzdWx0SXRlcmF0b3I+CiAjaW5jbHVkZSA8
U29wcmFuby9QYXJzZXI+Ci0jaW5jbHVkZSA8U29wcmFuby9Wb2NhYnVsYXJ5L05BTz4KLSNpbmNs
dWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvUkRGUz4KIAogI2luY2x1ZGUgPEtDb25maWc+CiAjaW5j
bHVkZSA8S0NvbmZpZ0dyb3VwPgpAQCAtMTg4LDcgKzE4NCw2IEBACiAgICAgZWxzZSB7CiAgICAg
ICAgIGQtPmZvcmNlT250b2xvZ3lVcGRhdGUgPSBmYWxzZTsKICAgICAgICAgZC0+dXBkYXRlVGlt
ZXIuc3RvcCgpOwotICAgICAgICB1cGRhdGVVc2VyVmlzaWJpbGl0eSgpOwogICAgICAgICBlbWl0
IG9udG9sb2d5TG9hZGluZ0ZpbmlzaGVkKHRoaXMpOwogICAgIH0KIH0KQEAgLTIyNSwxMTUgKzIy
MCw0IEBACiAgICAgfQogfQogCi0KLW5hbWVzcGFjZSB7Ci0gICAgc3RydWN0IFVzZXJWaXNpYmxl
Tm9kZSB7Ci0gICAgICAgIFVzZXJWaXNpYmxlTm9kZSggY29uc3QgUVVybCYgciApCi0gICAgICAg
ICAgICA6IHVyaSggciApLAotICAgICAgICAgICAgICB1c2VyVmlzaWJsZSggMCApIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIFFVcmwgdXJpOwotICAgICAgICBpbnQgdXNlclZpc2libGU7Ci0gICAg
ICAgIFFIYXNoPFFVcmwsIFVzZXJWaXNpYmxlTm9kZSo+IHBhcmVudHM7Ci0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAqIFNldCB0aGUgdmFsdWUgb2YgbmFvOnVzZXJWaXNpYmxlIGFuZCBhZGQgdGhl
IGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICogc3RhdGVtZW50IHRvIHRoZSBsaXN0IG9mIHN0YXRl
bWVudHMgaW4gY2FzZSB0aGUgdmFsdWUgd2FzCi0gICAgICAgICAqIG5vdCBkZWZpbmVkIHlldC4K
LSAgICAgICAgICovCi0gICAgICAgIGludCB1cGRhdGVVc2VyVmlzaWJpbGl0eSggUUxpc3Q8U29w
cmFubzo6U3RhdGVtZW50PiYgc3RhdGVtZW50cyApIHsKLSAgICAgICAgICAgIGlmICggdXNlclZp
c2libGUgIT0gMCApIHsKLSAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiVXNlciB2aXNpYmls
aXR5IGFscmVhZHkgc2V0IiA8PCB1cmkudG9TdHJpbmcoKSA8PCAoIHVzZXJWaXNpYmxlID09IDEg
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdXNlclZpc2libGU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoICFwYXJlbnRzLmlzRW1wdHko
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICggUUhhc2g8UVVybCwgVXNlclZpc2libGVO
b2RlKj46Oml0ZXJhdG9yIGl0ID0gcGFyZW50cy5iZWdpbigpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICBpdCAhPSBwYXJlbnRzLmVuZCgpOyArK2l0ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAga0RlYnVnKCkgPDwgdXJpLnRvU3RyaW5nKCkgPDwgIkNoZWNraW5nIHBhcmVudCBjbGFz
cyIgPDwgaXQudmFsdWUoKS0+dXJpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGl0LnZhbHVlKCktPnVwZGF0ZVVzZXJWaXNpYmlsaXR5KCBzdGF0ZW1lbnRzICkgPT0g
LTEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlclZpc2libGUgPSAtMTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoIHVzZXJWaXNpYmxlID09IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGRl
ZmF1bHQgdG8gdmlzaWJsZQotICAgICAgICAgICAgICAgICAgICB1c2VyVmlzaWJsZSA9IDE7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHN0YXRlbWVudHMgPDwgU29wcmFubzo6
U3RhdGVtZW50KCB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6TGl0
ZXJhbFZhbHVlKCB1c2VyVmlzaWJsZSA9PSAxICksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5lcG9tdWs6OlZvY2FidWxhcnk6OktVVk86Om5ybE9u
dG9sb2d5R3JhcGgoKSApOwotICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJTZXR0aW5nIG5h
bzp1c2VyVmlzaWJsZSBvZiIgPDwgdXJpLnRvU3RyaW5nKCkgPDwgKCB1c2VyVmlzaWJsZSA9PSAx
ICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJWaXNpYmxlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfTsKLX0KLQotdm9pZCBOZXBvbXVrOjpPbnRvbG9neUxvYWRlcjo6dXBk
YXRlVXNlclZpc2liaWxpdHkoKQotewotICAgIC8vCi0gICAgLy8gYnVpbGQgYSB0cmVlIG9mIGFs
bCBjbGFzc2VzIGFuZCBwcm9wZXJ0aWVzCi0gICAgLy8KLSAgICBRU3RyaW5nIHF1ZXJ5Ci0gICAg
ICAgID0gUVN0cmluZzo6ZnJvbUxhdGluMSggInNlbGVjdCBkaXN0aW5jdCA/ciA/cCA/diB3aGVy
ZSB7ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyA/ciBhIHJkZnM6Q2xhc3Mg
LiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpz
dWJDbGFzc09mID9wIC4gP3AgYSByZGZzOkNsYXNzIC4gfSAuIH0gIgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJVTklPTiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InsgP3IgYSByZGY6UHJvcGVydHkgLiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ik9QVElPTkFMIHsgP3IgcmRmczpzdWJQcm9wZXJ0eU9mID9wIC4gP3AgYSByZGY6UHJvcGVydHkg
LiB9IC4gfSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3Ig
JTEgP3YgLiB9IC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGSUxURVIoP3Ih
PXJkZnM6UmVzb3VyY2UpIC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9IiAp
Ci0gICAgICAgIC5hcmcoIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggU29wcmFubzo6Vm9j
YWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpICkgKTsKLSAgICBrRGVidWcoKSA8PCBxdWVyeTsK
LSAgICBRSGFzaDxRVXJsLCBVc2VyVmlzaWJsZU5vZGUqPiBhbGw7Ci0gICAgewotICAgICAgICBT
b3ByYW5vOjpRdWVyeVJlc3VsdEl0ZXJhdG9yIGl0Ci0gICAgICAgICAgICA9IGQtPm1vZGVsLT5l
eGVjdXRlUXVlcnkoIHF1ZXJ5LCBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCAp
OwotICAgICAgICB3aGlsZSggaXQubmV4dCgpICkgewotICAgICAgICAgICAgY29uc3QgUVVybCBy
ID0gaXRbInIiXS51cmkoKTsKLSAgICAgICAgICAgIGNvbnN0IFNvcHJhbm86Ok5vZGUgcCA9IGl0
WyJwIl07Ci0gICAgICAgICAgICBjb25zdCBTb3ByYW5vOjpOb2RlIHYgPSBpdFsidiJdOwotCi0g
ICAgICAgICAgICBpZiAoICFhbGwuY29udGFpbnMoIHIgKSApIHsKLSAgICAgICAgICAgICAgICBV
c2VyVmlzaWJsZU5vZGUqIHJfdXZuID0gbmV3IFVzZXJWaXNpYmxlTm9kZSggciApOwotICAgICAg
ICAgICAgICAgIGFsbC5pbnNlcnQoIHIsIHJfdXZuICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiggdi5pc0xpdGVyYWwoKSApCi0gICAgICAgICAgICAgICAgYWxsW3JdLT51c2VyVmlz
aWJsZSA9ICh2LmxpdGVyYWwoKS50b0Jvb2woKSA/IDEgOiAtMSk7Ci0gICAgICAgICAgICBpZiAo
IHAuaXNSZXNvdXJjZSgpICYmCi0gICAgICAgICAgICAgICAgIHAudXJpKCkgIT0gciAmJgotICAg
ICAgICAgICAgICAgICBwLnVyaSgpICE9IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291
cmNlKCkgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCAhYWxsLmNvbnRhaW5zKCBwLnVyaSgpICkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFVzZXJWaXNpYmxlTm9kZSogcF91dm4gPSBuZXcgVXNl
clZpc2libGVOb2RlKCBwLnVyaSgpICk7Ci0gICAgICAgICAgICAgICAgICAgIGFsbC5pbnNlcnQo
IHAudXJpKCksIHBfdXZuICk7Ci0gICAgICAgICAgICAgICAgICAgIGFsbFtyXS0+cGFyZW50cy5p
bnNlcnQoIHAudXJpKCksIHBfdXZuICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhbGxbcl0tPnBhcmVudHMuaW5zZXJ0KCBw
LnVyaSgpLCBhbGxbcC51cmkoKV0gKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIGNyZWF0ZSBhIGxpc3Qgb2YgYWxs
IHN0YXRlbWVudHMgd2UgbmVlZCB0byBhZGQKLSAgICAvLwotICAgIFFMaXN0PFNvcHJhbm86OlN0
YXRlbWVudD4gc3RhdGVtZW50czsKLSAgICBmb3IgKCBRSGFzaDxRVXJsLCBVc2VyVmlzaWJsZU5v
ZGUqPjo6aXRlcmF0b3IgaXQgPSBhbGwuYmVnaW4oKTsKLSAgICAgICAgICBpdCAhPSBhbGwuZW5k
KCk7ICsraXQgKSB7Ci0gICAgICAgIGl0LnZhbHVlKCktPnVwZGF0ZVVzZXJWaXNpYmlsaXR5KCBz
dGF0ZW1lbnRzICk7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBjbGVhbnVwIGFuZCBhZGQgYWxs
IHRoZSBuZWNlc3Nhcnkgc3RhdGVtZW50cyB0byB0aGUgbWFpbiBtb2RlbAotICAgIC8vCi0gICAg
cURlbGV0ZUFsbCggYWxsICk7Ci0gICAgZC0+bW9kZWwtPmFkZFN0YXRlbWVudHMoIHN0YXRlbWVu
dHMgKTsKLX0KLQogI2luY2x1ZGUgIm9udG9sb2d5bG9hZGVyLm1vYyIKSW5kZXg6IHNlcnZpY2Vz
L3N0b3JhZ2Uvb250b2xvZ3lsb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdl
L29udG9sb2d5bG9hZGVyLmgJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdl
L29udG9sb2d5bG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDEyICs2NSw2IEBACiAgICAg
ICAgICAqLwogICAgICAgICB2b2lkIGltcG9ydE9udG9sb2d5KCBjb25zdCBRU3RyaW5nJiB1cmwg
KTsKIAotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBuYW86dXNlclZpc2libGUgcHJv
cGVydGllcyBmb3IgYWxsIGNsYXNzZXMgYW5kIHByb3BlcnRpZXMKLSAgICAgICAgICogYW5kIHN0
b3JlcyB0aGVtIGluIHRoZSBrdXZvIG5hbWVzcGFjZS4KLSAgICAgICAgICovCi0gICAgICAgIHZv
aWQgdXBkYXRlVXNlclZpc2liaWxpdHkoKTsKLQogICAgIFFfU0lHTkFMUzoKICAgICAgICAgLyoq
CiAgICAgICAgICAqIEVtaXR0ZWQgb25jZSB0aGUgdXBkYXRlIG9mIHRoZSBvbnRvbG9naWVzIGlz
IGRvbmUuCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmlsaXR5dHJlZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS90eXBldmlzaWJpbGl0eXRyZWUuY3BwCShyZXZp
c2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFnZS90eXBldmlzaWJpbGl0eXRyZWUuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBOZXBvbXVrIEtERSBwcm9qZWN0LgorICAgQ29weXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBU
cnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9u
IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFu
eQorICAgbGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5W
LiAob3IgaXRzCisgICBzdWNjZXNzb3IgYXBwcm92ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RF
IGUuVi4pLCB3aGljaCBzaGFsbAorICAgYWN0IGFzIGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9u
IDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNlLgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4g
IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNs
dWRlICJ0eXBldmlzaWJpbGl0eXRyZWUuaCIKKworI2luY2x1ZGUgPFNvcHJhbm8vTW9kZWw+Cisj
aW5jbHVkZSA8U29wcmFuby9RdWVyeVJlc3VsdEl0ZXJhdG9yPgorI2luY2x1ZGUgPFNvcHJhbm8v
Tm9kZT4KKyNpbmNsdWRlIDxTb3ByYW5vL0xpdGVyYWxWYWx1ZT4KKyNpbmNsdWRlIDxTb3ByYW5v
L1ZvY2FidWxhcnkvTkFPPgorI2luY2x1ZGUgPFNvcHJhbm8vVm9jYWJ1bGFyeS9SREZTPgorCisj
aW5jbHVkZSA8UXRDb3JlL1FNdXRleExvY2tlcj4KKworI2luY2x1ZGUgPEtEZWJ1Zz4KKworCitj
bGFzcyBUeXBlVmlzaWJpbGl0eVRyZWU6OlR5cGVWaXNpYmlsaXR5Tm9kZQoreworcHVibGljOgor
ICAgIFR5cGVWaXNpYmlsaXR5Tm9kZSggY29uc3QgUVVybCYgciApCisgICAgICAgIDogdXJpKCBy
ICksCisgICAgICAgICAgdXNlclZpc2libGUoIDAgKSB7CisgICAgfQorCisgICAgUVVybCB1cmk7
CisgICAgaW50IHVzZXJWaXNpYmxlOworICAgIFFTZXQ8VHlwZVZpc2liaWxpdHlOb2RlKj4gcGFy
ZW50czsKKworICAgIC8qKgorICAgICAqIFNldCB0aGUgdmFsdWUgb2YgbmFvOnVzZXJWaXNpYmxl
LgorICAgICAqIEEgY2xhc3MgaXMgdmlzaWJsZSBpZiBpdCBoYXMgYXQgbGVhc3Qgb25lIHZpc2li
bGUgZGlyZWN0IHBhcmVudCBjbGFzcy4KKyAgICAgKi8KKyAgICBpbnQgdXBkYXRlVXNlclZpc2li
aWxpdHkoIFFTZXQ8VHlwZVZpc2liaWxpdHlOb2RlKj4mIHZpc2l0ZWROb2RlcyApIHsKKyAgICAg
ICAgaWYgKCB1c2VyVmlzaWJsZSAhPSAwICkgeworICAgICAgICAgICAgcmV0dXJuIHVzZXJWaXNp
YmxlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKCAhcGFyZW50
cy5pc0VtcHR5KCkgKSB7CisgICAgICAgICAgICAgICAgZm9yICggUVNldDxUeXBlVmlzaWJpbGl0
eU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBwYXJlbnRzLmJlZ2luKCk7CisgICAgICAgICAgICAgICAg
ICAgICBpdCAhPSBwYXJlbnRzLmVuZCgpOyArK2l0ICkgeworICAgICAgICAgICAgICAgICAgICAv
LyBhdm9pZCBlbmRsZXNzIGxvb3BzCisgICAgICAgICAgICAgICAgICAgIGlmKCB2aXNpdGVkTm9k
ZXMuY29udGFpbnMoKml0KSApCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgdmlzaXRlZE5vZGVzLmluc2VydCggKml0ICk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICggKCppdCktPnVwZGF0ZVVzZXJWaXNpYmlsaXR5KCB2aXNpdGVkTm9kZXMg
KSA9PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdXNlclZpc2libGUgPSAxOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIHVzZXJWaXNpYmxl
ID09IDAgKSB7CisgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBpbnZpc2libGUKKyAgICAg
ICAgICAgICAgICB1c2VyVmlzaWJsZSA9IC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
a0RlYnVnKCkgPDwgIlNldHRpbmcgbmFvOnVzZXJWaXNpYmxlIG9mIiA8PCB1cmkudG9TdHJpbmco
KSA8PCAoIHVzZXJWaXNpYmxlID09IDEgKTsKKyAgICAgICAgICAgIHJldHVybiB1c2VyVmlzaWJs
ZTsKKyAgICAgICAgfQorICAgIH0KK307CisKK1R5cGVWaXNpYmlsaXR5VHJlZTo6VHlwZVZpc2li
aWxpdHlUcmVlKCBTb3ByYW5vOjpNb2RlbCogbW9kZWwgKQorICAgIDogbV9tb2RlbChtb2RlbCkK
K3sKK30KKworVHlwZVZpc2liaWxpdHlUcmVlOjp+VHlwZVZpc2liaWxpdHlUcmVlKCkKK3sKKyAg
ICBRTXV0ZXhMb2NrZXIgbG9jayggJm1fbXV0ZXggKTsKK30KKwordm9pZCBUeXBlVmlzaWJpbGl0
eVRyZWU6OnJlYnVpbGRUcmVlKCkKK3sKKyAgICBRTXV0ZXhMb2NrZXIgbG9jayggJm1fbXV0ZXgg
KTsKKworICAgIC8vIGNsZWFudXAKKyAgICBtX3Zpc2liaWxpdHlIYXNoLmNsZWFyKCk7CisKKyAg
ICAvLyB3ZSBidWlsZCBhIHRlbXBvcmFyeSBoZWxwZXIgdHJlZQorICAgIFFIYXNoPFFVcmwsIFR5
cGVWaXNpYmlsaXR5Tm9kZSo+IHRyZWU7CisKKyAgICBjb25zdCBRU3RyaW5nIHF1ZXJ5CisgICAg
ICAgID0gUVN0cmluZzo6ZnJvbUxhdGluMSggInNlbGVjdCBkaXN0aW5jdCA/ciA/cCA/diB3aGVy
ZSB7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyA/ciBhIHJkZnM6Q2xhc3Mg
LiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpz
dWJDbGFzc09mID9wIC4gP3AgYSByZGZzOkNsYXNzIC4gfSAuIH0gIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJVTklPTiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InsgP3IgYSByZGY6UHJvcGVydHkgLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ik9QVElPTkFMIHsgP3IgcmRmczpzdWJQcm9wZXJ0eU9mID9wIC4gP3AgYSByZGY6UHJvcGVydHkg
LiB9IC4gfSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3Ig
JTEgP3YgLiB9IC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGSUxURVIoP3Ih
PXJkZnM6UmVzb3VyY2UpIC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9IiAp
CisgICAgICAgICAgICAuYXJnKCBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIFNvcHJhbm86
OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSApICk7CisgICAga0RlYnVnKCkgPDwgcXVl
cnk7CisgICAgU29wcmFubzo6UXVlcnlSZXN1bHRJdGVyYXRvciBpdAorICAgICAgICAgICAgPSBt
X21vZGVsLT5leGVjdXRlUXVlcnkoIHF1ZXJ5LCBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFn
ZVNwYXJxbCApOworICAgIHdoaWxlKCBpdC5uZXh0KCkgKSB7CisgICAgICAgIGNvbnN0IFFVcmwg
ciA9IGl0WyJyIl0udXJpKCk7CisgICAgICAgIGNvbnN0IFNvcHJhbm86Ok5vZGUgcCA9IGl0WyJw
Il07CisgICAgICAgIGNvbnN0IFNvcHJhbm86Ok5vZGUgdiA9IGl0WyJ2Il07CisKKyAgICAgICAg
aWYgKCAhdHJlZS5jb250YWlucyggciApICkgeworICAgICAgICAgICAgVHlwZVZpc2liaWxpdHlO
b2RlKiByX3V2biA9IG5ldyBUeXBlVmlzaWJpbGl0eU5vZGUoIHIgKTsKKyAgICAgICAgICAgIHRy
ZWUuaW5zZXJ0KCByLCByX3V2biApOworICAgICAgICB9CisgICAgICAgIGlmKCB2LmlzTGl0ZXJh
bCgpICkKKyAgICAgICAgICAgIHRyZWVbcl0tPnVzZXJWaXNpYmxlID0gKHYubGl0ZXJhbCgpLnRv
Qm9vbCgpID8gMSA6IC0xKTsKKyAgICAgICAgaWYgKCBwLmlzUmVzb3VyY2UoKSAmJgorICAgICAg
ICAgICAgICAgIHAudXJpKCkgIT0gciAmJgorICAgICAgICAgICAgICAgIHAudXJpKCkgIT0gU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSApIHsKKyAgICAgICAgICAgIGlmICgg
IXRyZWUuY29udGFpbnMoIHAudXJpKCkgKSApIHsKKyAgICAgICAgICAgICAgICBUeXBlVmlzaWJp
bGl0eU5vZGUqIHBfdXZuID0gbmV3IFR5cGVWaXNpYmlsaXR5Tm9kZSggcC51cmkoKSApOworICAg
ICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KCBwLnVyaSgpLCBwX3V2biApOworICAgICAgICAgICAg
ICAgIHRyZWVbcl0tPnBhcmVudHMuaW5zZXJ0KCBwX3V2biApOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdHJlZVtyXS0+cGFyZW50cy5pbnNlcnQo
IHRyZWVbcC51cmkoKV0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIG1ha2Ugc3VyZSByZGZzOlJlc291cmNlIGlzIHZpc2libGUgYnkgZGVmYXVsdAorICAgIFR5
cGVWaXNpYmlsaXR5Tm9kZSogcmRmc1Jlc291cmNlTm9kZSA9IDA7CisgICAgUUhhc2g8UVVybCwg
VHlwZVZpc2liaWxpdHlOb2RlKj46Oml0ZXJhdG9yIHJkZnNSZXNvdXJjZUl0ID0gdHJlZS5maW5k
KFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpOworICAgIGlmKCByZGZzUmVz
b3VyY2VJdCA9PSB0cmVlLmVuZCgpICkgeworICAgICAgICByZGZzUmVzb3VyY2VOb2RlID0gbmV3
IFR5cGVWaXNpYmlsaXR5Tm9kZShTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgp
KTsKKyAgICAgICAgdHJlZS5pbnNlcnQoIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291
cmNlKCksIHJkZnNSZXNvdXJjZU5vZGUgKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJk
ZnNSZXNvdXJjZU5vZGUgPSByZGZzUmVzb3VyY2VJdC52YWx1ZSgpOworICAgIH0KKyAgICBpZigg
cmRmc1Jlc291cmNlTm9kZS0+dXNlclZpc2libGUgPT0gMCApIHsKKyAgICAgICAgcmRmc1Jlc291
cmNlTm9kZS0+dXNlclZpc2libGUgPSAxOworICAgIH0KKyAgICAvLyBhZGQgcmRmczpSZXNvdXJj
ZSBhcyBwYXJlbnQgZm9yIGFsbCB0b3AtbGV2ZWwgY2xhc3NlcworICAgIGZvciAoIFFIYXNoPFFV
cmwsIFR5cGVWaXNpYmlsaXR5Tm9kZSo+OjppdGVyYXRvciBpdCA9IHRyZWUuYmVnaW4oKTsKKyAg
ICAgICAgICBpdCAhPSB0cmVlLmVuZCgpOyArK2l0ICkgeworICAgICAgICBpZiggaXQudmFsdWUo
KSAhPSByZGZzUmVzb3VyY2VOb2RlICYmIGl0LnZhbHVlKCktPnBhcmVudHMuaXNFbXB0eSgpICkg
eworICAgICAgICAgICAgaXQudmFsdWUoKS0+cGFyZW50cy5pbnNlcnQoIHJkZnNSZXNvdXJjZU5v
ZGUgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGZpbmFsbHkgZGV0ZXJtaW5lIHZpc2li
aWxpdHkgb2YgYWxsIG5vZGVzCisgICAgZm9yICggUUhhc2g8UVVybCwgVHlwZVZpc2liaWxpdHlO
b2RlKj46Oml0ZXJhdG9yIGl0ID0gdHJlZS5iZWdpbigpOworICAgICAgICAgIGl0ICE9IHRyZWUu
ZW5kKCk7ICsraXQgKSB7CisgICAgICAgIFFTZXQ8VHlwZVZpc2liaWxpdHlOb2RlKj4gdmlzaXRl
ZE5vZGVzOworICAgICAgICBtX3Zpc2liaWxpdHlIYXNoLmluc2VydChpdC5rZXkoKSwgaXQudmFs
dWUoKS0+dXBkYXRlVXNlclZpc2liaWxpdHkoIHZpc2l0ZWROb2RlcyApID09IDEgKTsKKyAgICB9
CisKKyAgICAvLyBnZXQgcmlkIG9mIHRoZSB0ZW1wIHRyZWUKKyAgICBxRGVsZXRlQWxsKHRyZWUp
OworfQorCitib29sIFR5cGVWaXNpYmlsaXR5VHJlZTo6aXNWaXNpYmxlKGNvbnN0IFFVcmwgJnR5
cGUpIGNvbnN0Cit7CisgICAgUU11dGV4TG9ja2VyIGxvY2soICZtX211dGV4ICk7CisKKyAgICBR
SGFzaDxRVXJsLCBib29sPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Zpc2liaWxpdHlIYXNoLmNv
bnN0RmluZCh0eXBlKTsKKyAgICBpZiggaXQgIT0gbV92aXNpYmlsaXR5SGFzaC5jb25zdEVuZCgp
ICkgeworICAgICAgICByZXR1cm4gKml0OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAga0Rl
YnVnKCkgPDwgIkNvdWxkIG5vdCBmaW5kIHR5cGUiIDw8IHR5cGUgPDwgImluIHRyZWUuIERlZmF1
bHRpbmcgdG8gdmlzaWJsZS4iOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CkluZGV4
OiBzZXJ2aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmlsaXR5dHJlZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNl
cnZpY2VzL3N0b3JhZ2UvdHlwZXZpc2liaWxpdHl0cmVlLmgJKHJldmlzaW9uIDApCisrKyBzZXJ2
aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmlsaXR5dHJlZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU3IEBACisvKgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE5lcG9tdWsgS0RFIHByb2pl
Y3QuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3Jn
PgorCisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55CisgICBsYXRlciB2ZXJzaW9u
IGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nl
c3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiksIHdoaWNoIHNoYWxs
CisgICBhY3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2Yg
dGhlIGxpY2Vuc2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6
Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2lmbmRlZiBUWVBFVklTSUJJTElUWVRS
RUVfSAorI2RlZmluZSBUWVBFVklTSUJJTElUWVRSRUVfSAorCisjaW5jbHVkZSA8UXRDb3JlL1FV
cmw+CisjaW5jbHVkZSA8UXRDb3JlL1FIYXNoPgorI2luY2x1ZGUgPFF0Q29yZS9RTXV0ZXg+CisK
K25hbWVzcGFjZSBTb3ByYW5vIHsKK2NsYXNzIE1vZGVsOworfQorCisvKioKKyAqIEJ1aWxkcyBh
IHR5cGUgdHJlZSB0aGF0IGFsbG93cyB0byBjaGVjayB0aGUgbmFvOnVzZXJWaXNpYmxlCisgKiB2
YWx1ZSBmb3IgZWFjaCBleGlzdGluZyB0eXBlLgorICovCitjbGFzcyBUeXBlVmlzaWJpbGl0eVRy
ZWUKK3sKK3B1YmxpYzoKKyAgICBUeXBlVmlzaWJpbGl0eVRyZWUoIFNvcHJhbm86Ok1vZGVsKiBt
b2RlbCApOworICAgIH5UeXBlVmlzaWJpbGl0eVRyZWUoKTsKKworICAgIHZvaWQgcmVidWlsZFRy
ZWUoKTsKKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBzcGVjaWZpZWQgdHlwZSBpcyB2
aXNpYmxlLgorICAgICAqLworICAgIGJvb2wgaXNWaXNpYmxlKCBjb25zdCBRVXJsJiB0eXBlICkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgU29wcmFubzo6TW9kZWwqIG1fbW9kZWw7CisgICAgY2xh
c3MgVHlwZVZpc2liaWxpdHlOb2RlOworICAgIFFIYXNoPFFVcmwsIGJvb2w+IG1fdmlzaWJpbGl0
eUhhc2g7CisgICAgbXV0YWJsZSBRTXV0ZXggbV9tdXRleDsKK307CisKKyNlbmRpZiAvLyBUWVBF
VklTSUJJTElUWVRSRUVfSApJbmRleDogc2VydmljZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL3JlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAx
MjEzOTQwKQorKysgc2VydmljZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5jbHVkZSAicmVwb3NpdG9yeS5oIgogI2luY2x1ZGUg
Im1vZGVsY29weWpvYi5oIgorI2luY2x1ZGUgImNyYXBweWluZmVyZW5jZXIyLmgiCiAKICNpbmNs
dWRlIDxTb3ByYW5vL0JhY2tlbmQ+CiAjaW5jbHVkZSA8U29wcmFuby9QbHVnaW5NYW5hZ2VyPgpA
QCAtNjksNiArNzAsOSBAQAogewogICAgIGtEZWJ1ZygpIDw8IG1fbmFtZTsKIAorICAgIGRlbGV0
ZSBtX2luZmVyZW5jZXI7CisgICAgbV9pbmZlcmVuY2VyID0gMDsKKwogICAgIGRlbGV0ZSBtX21v
ZGVsQ29weUpvYjsKICAgICBtX21vZGVsQ29weUpvYiA9IDA7CiAKQEAgLTE2NSw5ICsxNjksMTMg
QEAKICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBTb3ByYW5v
OjpVdGlsOjpTaWduYWxDYWNoZU1vZGVsKiBzY20gPSBuZXcgU29wcmFubzo6VXRpbDo6U2lnbmFs
Q2FjaGVNb2RlbCggbV9tb2RlbCApOwogICAgIHNjbS0+c2V0UGFyZW50KHRoaXMpOyAvLyBtZW1v
cnkgbWFuYWdlbWVudAotCiAgICAgc2V0UGFyZW50TW9kZWwoIHNjbSApOwogCisgICAgLy8gY3Jl
YXRlIHRoZSBjcmFwcHkgaW5mZXJlbmNlIG1vZGVsIHdoaWNoIGhhbmRsZXMgcmRmczpzdWJDbGFz
c09mIG9ubHkgLT4gd2Ugb25seSB1c2UgdGhpcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIFJl
c291cmNlVHlwZVRlcm1zCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisgICAgbV9pbmZlcmVuY2VyID0gbmV3IENyYXBweUluZmVyZW5jZXIyKCBzY20gKTsKKyAgICBz
ZXRQYXJlbnRNb2RlbChtX2luZmVyZW5jZXIpOworCiAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0
byBjb252ZXJ0CiAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAg
Ym9vbCBjb252ZXJ0aW5nRGF0YSA9IGZhbHNlOwpAQCAtMzM3LDcgKzM0NSwxOCBAQAogICAgIC8v
IG5lZWRzIHRvIGJlIGFkZHJlc3NlZCBhcyB3ZWxsCiAgICAgc2V0dGluZ3MgPDwgU29wcmFubzo6
QmFja2VuZFNldHRpbmcoICJTZXJ2ZXJUaHJlYWRzIiwgMTAwICk7CiAKKyAgICAvLyBOZXZlciB0
YWtlIG1vcmUgdGhhbiA1IG1pbnV0ZXMgdG8gYW5zd2VyIGEgcXVlcnkgKHRoaXMgaXMgdG8gZmls
dGVyIG91dCBicm9rZW4gcXVlcmllcyBhbmQgYnVncyBpbiBWaXJ0dW9zbydzIHF1ZXJ5IG9wdGlt
aXplcikKKyAgICAvLyB0cnVlZzogV2UgY2Fubm90IGFjdGl2YXRlIHRoaXMgeWV0LiAxLiBWaXJ0
dW9zbyA8IDYuMyBjcmFzaGVzIGFuZCAyLiBldmVuIG9wZW4gY3Vyc29ycyBhcmUgc3ViamVjdCB0
byB0aGUgdGltZW91dCB3aGljaCBpcyByZWFsbHkKKyAgICAvLyAgICAgICAgbm90IHdoYXQgd2Ug
d2FudCEKKy8vICAgIHNldHRpbmdzIDw8IFNvcHJhbm86OkJhY2tlbmRTZXR0aW5nKCAiUXVlcnlU
aW1lb3V0IiwgNSo2MDAwMCApOworCiAgICAgcmV0dXJuIHNldHRpbmdzOwogfQogCit2b2lkIE5l
cG9tdWs6OlJlcG9zaXRvcnk6OnVwZGF0ZUluZmVyZW5jZSgpCit7CisgICAgbV9pbmZlcmVuY2Vy
LT51cGRhdGVJbmZlcmVuY2VJbmRleCgpOworICAgIG1faW5mZXJlbmNlci0+dXBkYXRlQWxsUmVz
b3VyY2VzKCk7Cit9CisKICNpbmNsdWRlICJyZXBvc2l0b3J5Lm1vYyIKSW5kZXg6IHNlcnZpY2Vz
L3N0b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0
b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIuY3BwCShyZXZpc2lvbiAwKQorKysgc2VydmljZXMvc3Rv
cmFnZS9jcmFwcHlpbmZlcmVuY2VyMi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUwIEBA
CisvKgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE5lcG9tdWsgS0RFIHByb2plY3QuCisg
ICBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorCisg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55CisgICBsYXRlciB2ZXJzaW9uIGFjY2Vw
dGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nlc3NvciBh
cHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiksIHdoaWNoIHNoYWxsCisgICBh
Y3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxp
Y2Vuc2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu
Z251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgImNyYXBweWluZmVyZW5jZXIyLmgi
CisjaW5jbHVkZSAidHlwZXZpc2liaWxpdHl0cmVlLmgiCisKKyNpbmNsdWRlIDxTb3ByYW5vL1Zv
Y2FidWxhcnkvTlJMPgorI2luY2x1ZGUgPFNvcHJhbm8vVm9jYWJ1bGFyeS9OQU8+CisjaW5jbHVk
ZSA8U29wcmFuby9Wb2NhYnVsYXJ5L1JERj4KKyNpbmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkv
UkRGUz4KKyNpbmNsdWRlIDxTb3ByYW5vL1N0YXRlbWVudD4KKyNpbmNsdWRlIDxTb3ByYW5vL1N0
YXRlbWVudEl0ZXJhdG9yPgorI2luY2x1ZGUgPFNvcHJhbm8vTm9kZT4KKyNpbmNsdWRlIDxTb3By
YW5vL05vZGVJdGVyYXRvcj4KKyNpbmNsdWRlIDxTb3ByYW5vL0dyYXBoPgorI2luY2x1ZGUgPFNv
cHJhbm8vUXVlcnlSZXN1bHRJdGVyYXRvcj4KKworI2luY2x1ZGUgPFF0Q29yZS9RVGltZT4KKyNp
bmNsdWRlIDxRdENvcmUvUU11dGV4PgorI2luY2x1ZGUgPFF0Q29yZS9RTXV0ZXhMb2NrZXI+Cisj
aW5jbHVkZSA8UXRDb3JlL1FUaHJlYWQ+CisKKyNpbmNsdWRlIDxrZGVidWcuaD4KKworCisvKioK
KyAqIFNpbXBsZSBoZWxwZXIgdGhyZWFkIHdoaWNoIHVwZGF0ZXMgdGhlIHN1YmNsYXNzIGFuZCB2
aXNpYmlsaXR5IGluZmVyZW5jZSBvbiBhbGwgcmVzb3VyY2VzCisgKiBpbiB0aGUgZGF0YWJhc2Uu
IFRoaXMgaXMgZG9uZSBpbiBhIHNlcGFyYXRlIHRocmVhZCBzaW5jZSBpdCB0YWtlcyB1cCB0byBo
YWxmIGFuIGhvdXIgdGhlIGZpcnN0IHRpbWUuCisgKi8KK2NsYXNzIENyYXBweUluZmVyZW5jZXIy
OjpVcGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQgOiBwdWJsaWMgUVRocmVhZAoreworcHVibGljOgor
ICAgIFVwZGF0ZUFsbFJlc291cmNlc1RocmVhZCggQ3JhcHB5SW5mZXJlbmNlcjIqIHBhcmVudCAp
CisgICAgICAgIDogUVRocmVhZChwYXJlbnQpLAorICAgICAgICAgIG1fY2FuY2VsZWQoZmFsc2Up
LAorICAgICAgICAgIG1fbW9kZWwocGFyZW50KSB7CisgICAgfQorCisgICAgdm9pZCBjYW5jZWwo
KSB7CisgICAgICAgIGtEZWJ1ZygpOworICAgICAgICBtX2NhbmNlbGVkID0gdHJ1ZTsKKyAgICB9
CisKKyAgICB2b2lkIHJ1bigpIHsKKyAgICAgICAga0RlYnVnKCk7CisgICAgICAgIG1fY2FuY2Vs
ZWQgPSBmYWxzZTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIFFUaW1lIHRpbWVyOworICAgICAg
ICB0aW1lci5zdGFydCgpOworICAgICAgICBpbnQgY250ID0gMDsKKyNlbmRpZgorICAgICAgICAv
LyB1cGRhdGluZyBhbGwgcmVzb3VyY2VzIHRha2VzIGEgbG90IG9mIHRpbWUuIFRodXMsIHdlIHVz
ZSBhbiBvcHRpbWl6YXRpb246IHNpbXBseSBtYWtlIGFsbCBmaWxlcyB2aXNpYmxlCisgICAgICAg
IFFMaXN0PFNvcHJhbm86Ok5vZGU+IHJlc3VsdHM7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAg
IHJlc3VsdHMgPSBtX21vZGVsLT5leGVjdXRlUXVlcnkoIFFTdHJpbmc6OmZyb21MYXRpbjEoInNl
bGVjdCBkaXN0aW5jdCA/ciB3aGVyZSB7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj9yIGEgP3QgLiAiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ7ID9yIGEgPGh0dHA6Ly93d3cuc2VtYW50aWNkZXNrdG9wLm9yZy9vbnRvbG9naWVzLzIwMDcv
MDMvMjIvbmZvI0ZpbGVEYXRhT2JqZWN0PiAuIH0gVU5JT04gIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyA/ciBhIDxo
dHRwOi8vd3d3LnNlbWFudGljZGVza3RvcC5vcmcvb250b2xvZ2llcy8yMDA3LzAzLzIyL25tbyNF
bWFpbD4gLiB9IFVOSU9OICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInsgP3IgYSA8aHR0cDovL3d3dy5zZW1hbnRpY2Rl
c2t0b3Aub3JnL29udG9sb2dpZXMvMjAwNy8wMy8yMi9uY28jUGVyc29uQ29udGFjdD4gLiB9IFVO
SU9OICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInsgP3IgYSA8aHR0cDovL3d3dy5zZW1hbnRpY2Rlc2t0b3Aub3JnL29u
dG9sb2dpZXMvMjAwNy8wMy8yMi9uY28jQ29udGFjdD4gLiB9IFVOSU9OICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInsg
P3IgYSA8aHR0cDovL3d3dy5zZW1hbnRpY2Rlc2t0b3Aub3JnL29udG9sb2dpZXMvMjAwNy8wMy8y
Mi9uY28jRW1haWxBZGRyZXNzPiAuIH0gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRklMVEVSKCFiaWY6ZXhpc3RzKChz
ZWxlY3QgKDEpIHdoZXJlIHsgP3IgJTEgP3YgLiB9KSkpIC4gfSAiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMSU1JVCAx
MDAwIiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmco
IFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1
c2VyVmlzaWJsZSgpICkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwgKQorICAgICAgICAgICAg
ICAgICAgICAuaXRlcmF0ZUJpbmRpbmdzKDApLmFsbEVsZW1lbnRzKCk7CisgICAgICAgICAgICBR
X0ZPUkVBQ0goIGNvbnN0IFNvcHJhbm86Ok5vZGUmIG4sIHJlc3VsdHMgKSB7CisjaWZuZGVmIE5E
RUJVRworICAgICAgICAgICAgICAgICsrY250OworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYo
IG1fY2FuY2VsZWQgKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBtX21vZGVsLT5zZXRWaXNpYmlsaXR5KCBuLnVyaSgpLCBDcmFwcHlJbmZlcmVuY2VyMjo6Vmlz
aWJsZSApOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlKCAhbV9jYW5jZWxlZCAmJiAh
cmVzdWx0cy5pc0VtcHR5KCkgKTsKKworCisgICAgICAgIC8vIG5vdyB1cGRhdGUgYWxsIHRoZSBy
ZXN0IG9mIHRoZSByZXNvdXJjZXMKKyAgICAgICAgZG8geworICAgICAgICAgICAgLy8gZm9yIHBl
cmZvcm1hbmNlIGltcHJvdmVtZW50IHdlIG9ubHkgaGFuZGxlIHJlc291cmNlcyBpbiBJbnN0YW5j
ZUJhc2VzLiBUaGUgcmVzdCB3ZSBhbG1vc3QgbmV2ZXIgcXVlcnkgYW55d2F5LgorICAgICAgICAg
ICAgcmVzdWx0cyA9IG1fbW9kZWwtPmV4ZWN1dGVRdWVyeSggUVN0cmluZzo6ZnJvbUxhdGluMSgi
c2VsZWN0IGRpc3RpbmN0ID9yIHdoZXJlIHsgZ3JhcGggP2cgeyA/ciBhID90IC4gfSAuICIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIkZJTFRFUig/ZyAhPSAlMSkgLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7ID9nIGEgJTIgLiB9IFVOSU9O
IHsgP2cgYSAlMyAuIH0gLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGSUxURVIoIWJpZjpleGlzdHMoKHNlbGVjdCAo
MSkgd2hlcmUgeyA/ciAlNCA/diAuIH0pKSkgLiB9ICIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxJTUlUIDEwMDAiICkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyggU29wcmFu
bzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBtX21vZGVsLT5jcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkg
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29w
cmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOUkw6OkRpc2Nh
cmRhYmxlSW5zdGFuY2VCYXNlKCkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpOUkw6Okluc3RhbmNlQmFzZSgpICksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMygg
U29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpICkgKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFu
Z3VhZ2VTcGFycWwgKQorICAgICAgICAgICAgICAgICAgICAuaXRlcmF0ZUJpbmRpbmdzKDApLmFs
bEVsZW1lbnRzKCk7CisgICAgICAgICAgICBRX0ZPUkVBQ0goIGNvbnN0IFNvcHJhbm86Ok5vZGUm
IG4sIHJlc3VsdHMgKSB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgICAgICsrY250Owor
I2VuZGlmCisgICAgICAgICAgICAgICAgaWYoIG1fY2FuY2VsZWQgKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGJvb2wgaGF2ZVZpc2libGVUeXBlID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgU29wcmFubzo6UXVlcnlSZXN1bHRJdGVyYXRvciBpdAorICAg
ICAgICAgICAgICAgICAgICAgICAgPSBtX21vZGVsLT5leGVjdXRlUXVlcnkoIFFTdHJpbmc6OmZy
b21MYXRpbjEoInNlbGVjdCA/dCB3aGVyZSB7IGdyYXBoID9nIHsgJTEgYSA/dCAuIH0gLiBGSUxU
RVIoP2chPSUyKSAuIH0iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLmFyZyhTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMobi51cmkoKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86
Ok5vZGU6OnJlc291cmNlVG9OMyhtX21vZGVsLT5jcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86
OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsKTsKKyAgICAgICAgICAgICAgICB3aGlsZSghbV9j
YW5jZWxlZCAmJiBpdC5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIG1fbW9kZWwt
PmlzVHlwZVZpc2libGUoaXRbMF0udXJpKCkpICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aGF2ZVZpc2libGVUeXBlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IG1fbW9kZWwtPnNldFZpc2liaWxpdHkoIG4udXJpKCksIGhhdmVWaXNpYmxlVHlwZSA/IENyYXBw
eUluZmVyZW5jZXIyOjpWaXNpYmxlIDogQ3JhcHB5SW5mZXJlbmNlcjI6Ok5vblZpc2libGUgKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSggIW1fY2FuY2VsZWQgJiYgIXJlc3VsdHMu
aXNFbXB0eSgpICk7CisKKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAga0RlYnVnKCkgPDwgY250
IDw8ICJyZXNvdXJjZXMgdXBkYXRlZC4gRWxhcHNlZDoiIDw8IHRpbWVyLmVsYXBzZWQoKS8xMDAw
LjAgPDwgInNlYyI7CisjZW5kaWYKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2NhbmNl
bGVkOworICAgIENyYXBweUluZmVyZW5jZXIyKiBtX21vZGVsOworfTsKKworCitjbGFzcyBDcmFw
cHlJbmZlcmVuY2VyMjo6UHJpdmF0ZQoreworcHVibGljOgorICAgIFByaXZhdGUoKQorICAgICAg
ICA6IG1fdXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkKDApIHsKKyAgICB9CisKKyAgICAvLy8gZ2V0
IHRoZSBsaXN0IG9mIHN1cGVyIHR5cGVzIGZvciBccCB0eXBlCisgICAgUVNldDxRVXJsPiBzdXBl
ckNsYXNzZXMoIGNvbnN0IFFVcmwmIHR5cGUgKSBjb25zdDsKKworICAgIC8vLyBDaGVjayBpZiBh
IHJlc291cmNlIHdpdGggdGhlIHNwZWNpZmllZCB0eXBlcyBpcyB2aXNpYmxlLgorICAgIGJvb2wg
aXNWaXNpYmxlRnJvbVR5cGVzKCBjb25zdCBRU2V0PFFVcmw+JiB0eXBlcyApIGNvbnN0OworCisg
ICAgLy8vIFBlcmZvcm1zIGEgcXVlcnkgdG8gcmV0cmlldmUgYWxsIHR5cGVzIHRoYXQgd2VyZSBu
b3QgYWRkZWQgYnkgdXMKKyAgICBRU2V0PFFVcmw+IHF1ZXJ5UmVzb3VyY2VUeXBlcyggY29uc3Qg
UVVybCYgcmVzb3VyY2UgKSBjb25zdDsKKworICAgIC8vLyB1c2VkIHRvIGJ1aWxkIG1fc3VwZXJD
bGFzc2VzIChhbmQgbm90aGluZyBlbHNlISkKKyAgICBRU2V0PFFVcmw+IGJ1aWxkU3VwZXJDbGFz
c2VzSGFzaCggY29uc3QgUVVybCYgdHlwZSwgUVNldDxRVXJsPiYgdmlzaXRlZFR5cGVzLCBjb25z
dCBRTXVsdGlIYXNoPFFVcmwsIFFVcmw+JiByZGZzU3ViQ2xhc3NSZWxhdGlvbnMgKTsKKworICAg
IFFIYXNoPFFVcmwsIFFTZXQ8UVVybD4gPiBtX3N1cGVyQ2xhc3NlczsKKyAgICBUeXBlVmlzaWJp
bGl0eVRyZWUqIG1fdHlwZVZpc2liaWxpdHlUcmVlOworICAgIFFNdXRleCBtX211dGV4OworCisg
ICAgVXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkKiBtX3VwZGF0ZUFsbFJlc291cmNlc1RocmVhZDsK
KworICAgIFFVcmwgbV9pbmZlcmVuY2VDb250ZXh0OworCisgICAgQ3JhcHB5SW5mZXJlbmNlcjIq
IHE7Cit9OworCisKKworUVNldDxRVXJsPiBDcmFwcHlJbmZlcmVuY2VyMjo6UHJpdmF0ZTo6c3Vw
ZXJDbGFzc2VzKCBjb25zdCBRVXJsJiB0eXBlICkgY29uc3QKK3sKKyAgICBRSGFzaDxRVXJsLCBR
U2V0PFFVcmw+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdXBlckNsYXNzZXMuY29uc3RGaW5k
KHR5cGUpOworICAgIGlmKCBpdCAhPSBtX3N1cGVyQ2xhc3Nlcy5jb25zdEVuZCgpICkgeworICAg
ICAgICByZXR1cm4gaXQudmFsdWUoKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVy
biBRU2V0PFFVcmw+KCkgPDwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKTsK
KyAgICB9Cit9CisKK2Jvb2wgQ3JhcHB5SW5mZXJlbmNlcjI6OlByaXZhdGU6OmlzVmlzaWJsZUZy
b21UeXBlcyhjb25zdCBRU2V0PFFVcmw+ICZ0eXBlcykgY29uc3QKK3sKKyAgICAvLyBXZSBuZWVk
IHRvIGV4dHJhY3QgdGhlIGxlYWYgdHlwZXMgaW4gdGhlIHN1YmdyYXBoIHRoYXQgaXMgdHlwZXMK
KyAgICAvLyBhcyB0aG9zZSBhcmUgdGhlIHR5cGVzIHRoYXQgZGVmaW5lIGlmIHRoZSByZXNvdXJj
ZSB3aWxsIGJlIHZpc2libGUKKworICAgIC8vIFRPRE86IGRvIHRoZSBmb2xsb3dpbmcgaW4gYW4g
ZWZmaWNpZW50IHdheQorICAgIC8vIHdlIHJlbW92ZSBhbGwgc3VwZXJ0eXBlcyBmcm9tIHRoZSBz
ZXQgb2YgdHlwZXMgYW5kIGFyZSBsZWZ0IHdpdGggdGhlIGxlYWYgdHlwZXMKKyAgICBRU2V0PFFV
cmw+IGxlYWZUeXBlcyh0eXBlcyk7CisgICAgUV9GT1JFQUNIKGNvbnN0IFFVcmwmIHR5cGUsIHR5
cGVzKSB7CisgICAgICAgIGxlYWZUeXBlcyAtPSBzdXBlckNsYXNzZXModHlwZSk7CisgICAgICAg
IGlmKGxlYWZUeXBlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICAvLyBpZiB0aGVyZSBpcyBvbmUgbGVhZiB0eXBlIGxlZnQgdGhhdCBpcyB2aXNpYmxlIHRoZSBy
ZXNvdXJjZSBpcyB2aXNpYmxlLCB0b28KKyAgICBRX0ZPUkVBQ0goIGNvbnN0IFFVcmwmIHR5cGUs
IGxlYWZUeXBlcyApIHsKKyAgICAgICAgaWYoIG1fdHlwZVZpc2liaWxpdHlUcmVlLT5pc1Zpc2li
bGUodHlwZSkgKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIG5vIHZpc2libGUgdHlwZSBmb3VuZAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
UVNldDxRVXJsPiBDcmFwcHlJbmZlcmVuY2VyMjo6UHJpdmF0ZTo6cXVlcnlSZXNvdXJjZVR5cGVz
KGNvbnN0IFFVcmwgJnJlc291cmNlKSBjb25zdAoreworICAgIFFTZXQ8UVVybD4gcmVzb3VyY2VU
eXBlczsKKyAgICBTb3ByYW5vOjpRdWVyeVJlc3VsdEl0ZXJhdG9yIGl0CisgICAgICAgICAgICA9
IHEtPnBhcmVudE1vZGVsKCktPmV4ZWN1dGVRdWVyeSggUVN0cmluZzo6ZnJvbUxhdGluMSgic2Vs
ZWN0ID90IHdoZXJlIHsgZ3JhcGggP2cgeyAlMSBhID90IC4gfSAuIEZJTFRFUig/ZyE9JTIpIC4g
fSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKFNv
cHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyhyZXNvdXJjZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9O
MyhtX2luZmVyZW5jZUNvbnRleHQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNvcHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsKTsKKyAgICB3
aGlsZShpdC5uZXh0KCkpIHsKKyAgICAgICAgcmVzb3VyY2VUeXBlcyA8PCBpdFswXS51cmkoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gcmVzb3VyY2VUeXBlczsKK30KKworUVNldDxRVXJsPiBDcmFw
cHlJbmZlcmVuY2VyMjo6UHJpdmF0ZTo6YnVpbGRTdXBlckNsYXNzZXNIYXNoKCBjb25zdCBRVXJs
JiB0eXBlLCBRU2V0PFFVcmw+JiB2aXNpdGVkVHlwZXMsIGNvbnN0IFFNdWx0aUhhc2g8UVVybCwg
UVVybD4mIHJkZnNTdWJDbGFzc1JlbGF0aW9ucyA9IFFNdWx0aUhhc2g8UVVybCwgUVVybD4oKSAp
Cit7CisgICAgUUhhc2g8UVVybCwgUVNldDxRVXJsPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
c3VwZXJDbGFzc2VzLmNvbnN0RmluZCh0eXBlKTsKKyAgICBpZiggaXQgPT0gbV9zdXBlckNsYXNz
ZXMuY29uc3RFbmQoKSApIHsKKyAgICAgICAgUVNldDxRVXJsPiBzdXBlclR5cGVzOworICAgICAg
ICBmb3IoUU11bHRpSGFzaDxRVXJsLCBRVXJsPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZGZzU3Vi
Q2xhc3NSZWxhdGlvbnMuY29uc3RGaW5kKHR5cGUpOworICAgICAgICAgICAgaXQgIT0gcmRmc1N1
YkNsYXNzUmVsYXRpb25zLmNvbnN0RW5kKCkgJiYgaXQua2V5KCkgPT0gdHlwZTsgKytpdCkgewor
ICAgICAgICAgICAgLy8gYXZvaWQgZW5kbGVzcyBsb29wcyBpbiBjYXNlIHdlIGhhdmUgY2lyY3Vs
YXIgaGllcmFyY2hpZXMKKyAgICAgICAgICAgIGlmKCAhdmlzaXRlZFR5cGVzLmNvbnRhaW5zKCBp
dC52YWx1ZSgpICkgKSB7CisgICAgICAgICAgICAgICAgdmlzaXRlZFR5cGVzIDw8IGl0LnZhbHVl
KCk7CisgICAgICAgICAgICAgICAgc3VwZXJUeXBlcyA8PCBpdC52YWx1ZSgpOworICAgICAgICAg
ICAgICAgIHN1cGVyVHlwZXMgKz0gYnVpbGRTdXBlckNsYXNzZXNIYXNoKCBpdC52YWx1ZSgpLCB2
aXNpdGVkVHlwZXMsIHJkZnNTdWJDbGFzc1JlbGF0aW9ucyApOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIG1fc3VwZXJDbGFzc2VzLmluc2VydCggdHlwZSwgc3VwZXJUeXBlcyAp
OworICAgICAgICByZXR1cm4gc3VwZXJUeXBlczsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAg
IHJldHVybiBpdC52YWx1ZSgpOworICAgIH0KK30KKworQ3JhcHB5SW5mZXJlbmNlcjI6OkNyYXBw
eUluZmVyZW5jZXIyKFNvcHJhbm86Ok1vZGVsKiBwYXJlbnQpCisgICAgOiBTb3ByYW5vOjpGaWx0
ZXJNb2RlbChwYXJlbnQpLAorICAgICAgZChuZXcgUHJpdmF0ZSgpKQoreworICAgIGQtPnEgPSB0
aGlzOworICAgIGQtPm1faW5mZXJlbmNlQ29udGV4dCA9IFFVcmw6OmZyb21FbmNvZGVkKCJ1cm46
Y3JhcHB5aW5mZXJlbmNlMjppbmZlcnJlZHRyaXBsZXMiKTsKKyAgICBkLT5tX3R5cGVWaXNpYmls
aXR5VHJlZSA9IG5ldyBUeXBlVmlzaWJpbGl0eVRyZWUodGhpcyk7CisgICAgaWYgKCBwYXJlbnQg
KQorICAgICAgICB1cGRhdGVJbmZlcmVuY2VJbmRleCgpOworfQorCitDcmFwcHlJbmZlcmVuY2Vy
Mjo6fkNyYXBweUluZmVyZW5jZXIyKCkKK3sKKyAgICBpZiggZC0+bV91cGRhdGVBbGxSZXNvdXJj
ZXNUaHJlYWQgKSB7CisgICAgICAgIGQtPm1fdXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkLT5jYW5j
ZWwoKTsKKyAgICAgICAgZC0+bV91cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQtPndhaXQoKTsKKyAg
ICB9CisgICAgZGVsZXRlIGQ7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6OnNldFBhcmVu
dE1vZGVsKFNvcHJhbm86Ok1vZGVsICptb2RlbCkKK3sKKyAgICBGaWx0ZXJNb2RlbDo6c2V0UGFy
ZW50TW9kZWwoIG1vZGVsICk7CisgICAgdXBkYXRlSW5mZXJlbmNlSW5kZXgoKTsKK30KKworU29w
cmFubzo6RXJyb3I6OkVycm9yQ29kZSBDcmFwcHlJbmZlcmVuY2VyMjo6YWRkU3RhdGVtZW50KGNv
bnN0IFNvcHJhbm86OlN0YXRlbWVudCAmc3RhdGVtZW50KQoreworICAgIGlmKCBzdGF0ZW1lbnQu
Y29udGV4dCgpID09IGQtPm1faW5mZXJlbmNlQ29udGV4dCApIHsKKyNpZmRlZiBOREVCVUcKKyAg
ICAgICAga0RlYnVnKCkgPDwgIk5vIGFjdGlvbnMgYXJlIGFsbG93ZWQgb24gdGhlIGNyYXBweSBp
bmZlcmVuY2VyIGNvbnRleHQgaW4gcmVsZWFzZSBtb2RlISIgPDwgc3RhdGVtZW50OworICAgICAg
ICByZXR1cm4gU29wcmFubzo6RXJyb3I6OkVycm9ySW52YWxpZEFyZ3VtZW50OworI2Vsc2UKKyAg
ICAgICAga1dhcm5pbmcoKSA8PCAiV0FSTklORyEhISEhISEhISEhIEFkZGluZyBzdGF0ZW1lbnQg
aW4gY3JhcHB5IGluZmVyZW5jZXIgY29udGV4dCEhISEhISEhISEhISIgPDwgc3RhdGVtZW50Owor
I2VuZGlmCisgICAgfQorCisgICAgUU11dGV4TG9ja2VyIGxvY2soICZkLT5tX211dGV4ICk7CisK
KyAgICBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIHIgPSBwYXJlbnRNb2RlbCgpLT5hZGRTdGF0
ZW1lbnQoIHN0YXRlbWVudCApOworICAgIGlmKCByID09IFNvcHJhbm86OkVycm9yOjpFcnJvck5v
bmUgKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEhhbmRsZSB0aGUgaW5mZXJlbmNlCisgICAg
ICAgIC8vCisgICAgICAgIGlmICggc3RhdGVtZW50LnN1YmplY3QoKS5pc1Jlc291cmNlKCkgJiYK
KyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQub2JqZWN0KCkuaXNSZXNvdXJjZSgpICYmCisgICAg
ICAgICAgICAgICAgc3RhdGVtZW50LnByZWRpY2F0ZSgpID09IFNvcHJhbm86OlZvY2FidWxhcnk6
OlJERjo6dHlwZSgpICkgeworICAgICAgICAgICAgYWRkSW5mZXJlbmNlU3RhdGVtZW50cyggc3Rh
dGVtZW50LnN1YmplY3QoKS51cmkoKSwgc3RhdGVtZW50Lm9iamVjdCgpLnVyaSgpICk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcjsKK30KKworU29wcmFubzo6RXJyb3I6OkVycm9y
Q29kZSBDcmFwcHlJbmZlcmVuY2VyMjo6cmVtb3ZlU3RhdGVtZW50KGNvbnN0IFNvcHJhbm86OlN0
YXRlbWVudCAmc3RhdGVtZW50KQoreworICAgIGlmKCBzdGF0ZW1lbnQuY29udGV4dCgpID09IGQt
Pm1faW5mZXJlbmNlQ29udGV4dCApIHsKKyNpZmRlZiBOREVCVUcKKyAgICAgICAga0RlYnVnKCkg
PDwgIk5vIGFjdGlvbnMgYXJlIGFsbG93ZWQgb24gdGhlIGNyYXBweSBpbmZlcmVuY2VyIGNvbnRl
eHQgaW4gcmVsZWFzZSBtb2RlISIgPDwgc3RhdGVtZW50OworICAgICAgICByZXR1cm4gU29wcmFu
bzo6RXJyb3I6OkVycm9ySW52YWxpZEFyZ3VtZW50OworI2Vsc2UKKyAgICAgICAga1dhcm5pbmco
KSA8PCAiV0FSTklORyEhISEhISEhISEhIFJlbW92aW5nIHN0YXRlbWVudCBmcm9tIGNyYXBweSBp
bmZlcmVuY2VyIGNvbnRleHQhISEhISEhISEhISEiIDw8IHN0YXRlbWVudDsKKyNlbmRpZgorICAg
IH0KKworICAgIFFNdXRleExvY2tlciBsb2NrKCAmZC0+bV9tdXRleCApOworCisgICAgU29wcmFu
bzo6RXJyb3I6OkVycm9yQ29kZSBlcnJvciA9IHBhcmVudE1vZGVsKCktPnJlbW92ZVN0YXRlbWVu
dChzdGF0ZW1lbnQpOworICAgIGlmKCBlcnJvciA9PSBTb3ByYW5vOjpFcnJvcjo6RXJyb3JOb25l
ICkgeworICAgICAgICBpZiAoIHN0YXRlbWVudC5pc1ZhbGlkKCkgJiYKKyAgICAgICAgICAgICAg
ICBzdGF0ZW1lbnQuc3ViamVjdCgpLmlzUmVzb3VyY2UoKSAmJgorICAgICAgICAgICAgICAgIHN0
YXRlbWVudC5vYmplY3QoKS5pc1Jlc291cmNlKCkgJiYKKyAgICAgICAgICAgICAgICBzdGF0ZW1l
bnQucHJlZGljYXRlKCkgPT0gU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCkgKSB7Cisg
ICAgICAgICAgICByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCBzdGF0ZW1lbnQuc3ViamVjdCgp
LnVyaSgpLCBzdGF0ZW1lbnQub2JqZWN0KCkudXJpKCkgKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gU29wcmFubzo6RXJyb3I6OkVycm9yTm9uZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAg
ICAgIHJldHVybiBlcnJvcjsKKyAgICB9Cit9CisKK1NvcHJhbm86OkVycm9yOjpFcnJvckNvZGUg
Q3JhcHB5SW5mZXJlbmNlcjI6OnJlbW92ZUFsbFN0YXRlbWVudHMoY29uc3QgU29wcmFubzo6U3Rh
dGVtZW50ICZzdGF0ZW1lbnQpCit7CisgICAgaWYoIHN0YXRlbWVudC5jb250ZXh0KCkgPT0gZC0+
bV9pbmZlcmVuY2VDb250ZXh0ICkgeworI2lmZGVmIE5ERUJVRworICAgICAgICBrRGVidWcoKSA8
PCAiTm8gYWN0aW9ucyBhcmUgYWxsb3dlZCBvbiB0aGUgY3JhcHB5IGluZmVyZW5jZXIgY29udGV4
dCBpbiByZWxlYXNlIG1vZGUhIiA8PCBzdGF0ZW1lbnQ7CisgICAgICAgIHJldHVybiBTb3ByYW5v
OjpFcnJvcjo6RXJyb3JJbnZhbGlkQXJndW1lbnQ7CisjZWxzZQorICAgICAgICBrV2FybmluZygp
IDw8ICJXQVJOSU5HISEhISEhISEhISEgUmVtb3Zpbmcgc3RhdGVtZW50cyBmcm9tIGNyYXBweSBp
bmZlcmVuY2VyIGNvbnRleHQhISEhISEhISEhISEiIDw8IHN0YXRlbWVudDsKKyNlbmRpZgorICAg
IH0KKworICAgIFFNdXRleExvY2tlciBsb2NrKCAmZC0+bV9tdXRleCApOworCisgICAgLy8KKyAg
ICAvLyBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbmVlZCB0byBiZSBtZXQgaW4gb3JkZXIgZm9y
IHVzIHRvIG5lZWQgdG8gY2hlY2sgZm9yIHR5cGVzCisgICAgLy8gMS4gT2JqZWN0IG9yIGNvbnRl
eHQgbmVlZCB0byBiZSB2YWxpZC4gT3RoZXJ3aXNlIG91ciB0eXBlcyBhcmUgcmVtb3ZlZCBhbnl3
YXkKKyAgICAvLyAyLiBPYmplY3QgbmVlZHMgdG8gYmUgZW1wdHkgb3IgYSByZXNvdXJjZS4gTGl0
ZXJhbHMgYXJlIG5ldmVyIHR5cGVzCisgICAgLy8gMy4gUHJlZGljYXRlIG5lZWRzIHRvIGJlIGVt
cHR5IG9yIHJkZjp0eXBlLiBPdGhlcndpc2UgdGhlIGNhbGwgaXMgbm90IHJlbGF0ZWQgdG8gdHlw
ZXMuCisgICAgLy8KKyAgICBpZiAoIHN0YXRlbWVudC5jb250ZXh0KCkgIT0gZC0+bV9pbmZlcmVu
Y2VDb250ZXh0ICYmCisgICAgICAgICAgICAoICggc3RhdGVtZW50LnByZWRpY2F0ZSgpLmlzRW1w
dHkoKSB8fAorICAgICAgICAgICAgICAgc3RhdGVtZW50LnByZWRpY2F0ZSgpID09IFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpICkgJiYKKyAgICAgICAgICAgICAoIHN0YXRlbWVudC5v
YmplY3QoKS5pc0VtcHR5KCkgfHwKKyAgICAgICAgICAgICAgc3RhdGVtZW50Lm9iamVjdCgpLmlz
UmVzb3VyY2UoKSApICYmCisgICAgICAgICAgICAgKCBzdGF0ZW1lbnQub2JqZWN0KCkuaXNWYWxp
ZCgpIHx8CisgICAgICAgICAgICAgIHN0YXRlbWVudC5jb250ZXh0KCkuaXNWYWxpZCgpICkgKSAp
IHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgYm90aCByZXNvdXJjZSBhbmQgdHlwZSBhcmUg
ZGVmaW5lZCB3ZSBjYW4gc2ltcGx5IGNhbGwgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cygpIG9u
IHRoZW0KKyAgICAgICAgLy8KKyAgICAgICAgaWYoIHN0YXRlbWVudC5zdWJqZWN0KCkuaXNSZXNv
dXJjZSgpICYmCisgICAgICAgICAgICAgICAgc3RhdGVtZW50Lm9iamVjdCgpLmlzUmVzb3VyY2Uo
KSApIHsKKyAgICAgICAgICAgIGNvbnN0IFNvcHJhbm86OkVycm9yOjpFcnJvckNvZGUgZXJyb3Ig
PSBwYXJlbnRNb2RlbCgpLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHN0YXRlbWVudCk7CisgICAgICAg
ICAgICBpZiggZXJyb3IgPT0gU29wcmFubzo6RXJyb3I6OkVycm9yTm9uZSApIHsKKyAgICAgICAg
ICAgICAgICByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCBzdGF0ZW1lbnQuc3ViamVjdCgpLnVy
aSgpLCBzdGF0ZW1lbnQub2JqZWN0KCkudXJpKCkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIGlm
IG9ubHkgdGhlIHR5cGUgaXMgdW5kZWZpbmVkIHdlIGdldCB0aGUgdHlwZXMgYW5kIHRoZW4gY2Fs
bCByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCkuIFRoaXMgYXZvaWRzCisgICAgICAgIC8vIHBl
cmZvcm1pbmcgdGhlIHF1ZXJ5IGluIHRoZSBsYXR0ZXIgbWV0aG9kIG92ZXIgYW5kIG92ZXIgZm9y
IGVhY2ggdHlwZQorICAgICAgICAvLworICAgICAgICBlbHNlIGlmKCBzdGF0ZW1lbnQuc3ViamVj
dCgpLmlzVmFsaWQoKSApIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyB3ZSBuZWVk
IHRvIGZpcnN0IGdldCB0aGUgdHlwZXMgdG8gcmVtb3ZlLCB0aGVuIHJlbW92ZSB0aGUgc3RhdGVt
ZW50cywgYW5kIG9ubHkgdGhlbiBjYWxsCisgICAgICAgICAgICAvLyByZW1vdmVJbmZlcmVuY2VT
dGF0ZW1lbnRzKCkuIFRoaXMgaXMgc2luY2UgdGhlIGxhdHRlciBtYWtlcyB1c2Ugb2YgdGhlIHR5
cGVzIGluIHRoZSBtb2RlbAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIFFTdHJpbmcgcXVl
cnk7CisgICAgICAgICAgICBpZiggc3RhdGVtZW50LmNvbnRleHQoKS5pc1ZhbGlkKCkgKSB7Cisg
ICAgICAgICAgICAgICAgcXVlcnkgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgP3Qgd2hl
cmUgeyBncmFwaCAlMiB7ICUxIGEgP3QgLiB9IC4gfSIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAuYXJnKHN0YXRlbWVudC5zdWJqZWN0KCkudG9OMygpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZW1lbnQuY29udGV4dCgpLnRvTjMoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBxdWVyeSA9IFFTdHJpbmc6OmZyb21MYXRp
bjEoInNlbGVjdCA/dCB3aGVyZSB7IGdyYXBoID9nIHsgJTEgYSA/dCAuIH0gLiBGSUxURVIoP2ch
PSUyKSAuIH0iKQorICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhzdGF0ZW1lbnQuc3ViamVj
dCgpLnRvTjMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZTo6
cmVzb3VyY2VUb04zKGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY29uc3QgUUxpc3Q8U29wcmFubzo6Tm9kZT4gdHlwZXMgPSBleGVjdXRlUXVl
cnkoIHF1ZXJ5LCBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApLml0ZXJhdGVC
aW5kaW5ncygwKS5hbGxOb2RlcygpOworICAgICAgICAgICAgY29uc3QgU29wcmFubzo6RXJyb3I6
OkVycm9yQ29kZSBlcnJvciA9IHBhcmVudE1vZGVsKCktPnJlbW92ZUFsbFN0YXRlbWVudHMoc3Rh
dGVtZW50KTsKKyAgICAgICAgICAgIGlmKCBlcnJvciA9PSBTb3ByYW5vOjpFcnJvcjo6RXJyb3JO
b25lICkgeworICAgICAgICAgICAgICAgIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIHN0YXRl
bWVudC5zdWJqZWN0KCkudXJpKCksIHR5cGVzICk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBJZiB0
aGUgc3ViamVjdCBpcyBub3QgZGVmaW5lZCBidXQgdGhlIHR5cGUgaXMgd2UgbmVlZCB0byB1cGRh
dGUgc2V2ZXJhbCByZXNvdXJjZXMuIFRoZXJlIGlzIG5vIHdheSBhcm91bmQKKyAgICAgICAgLy8g
Y2FsbGluZyByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCkgZm9yIGVhY2ggcmVzb3VyY2UuCisg
ICAgICAgIC8vCisgICAgICAgIGVsc2UgaWYoIHN0YXRlbWVudC5vYmplY3QoKS5pc1ZhbGlkKCkg
KSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBnZXQgdGhlIHJl
c291cmNlcyBiZWZvcmUgYWN0dWFsbHkgcmVtb3ZpbmcgdGhlIHN0YXRlbWVudHMgc2luY2Ugb3Ro
ZXJ3aXNlIHdlIG1pZ2h0IG1pc3MgdGhlbQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIFFT
dHJpbmcgcXVlcnk7CisgICAgICAgICAgICBpZiggc3RhdGVtZW50LmNvbnRleHQoKS5pc1ZhbGlk
KCkgKSB7CisgICAgICAgICAgICAgICAgcXVlcnkgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxl
Y3QgP3Igd2hlcmUgeyBncmFwaCAlMiB7ID9yIGEgJTEgLiB9IC4gfSIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAuYXJnKHN0YXRlbWVudC5vYmplY3QoKS50b04zKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlbWVudC5jb250ZXh0KCkudG9OMygpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHF1ZXJ5ID0gUVN0cmluZzo6
ZnJvbUxhdGluMSgic2VsZWN0ID9yIHdoZXJlIHsgZ3JhcGggP2cgeyA/ciBhICUxIC4gfSAuIEZJ
TFRFUig/ZyE9JTIpIC4gfSIpCisgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKHN0YXRlbWVu
dC5vYmplY3QoKS50b04zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86
Ok5vZGU6OnJlc291cmNlVG9OMyhjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNvbnN0IFFMaXN0PFNvcHJhbm86Ok5vZGU+IHJlc291cmNlcyA9
IGV4ZWN1dGVRdWVyeSggcXVlcnksIFNvcHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFs
ICkuaXRlcmF0ZUJpbmRpbmdzKDApLmFsbE5vZGVzKCk7CisgICAgICAgICAgICBjb25zdCBTb3By
YW5vOjpFcnJvcjo6RXJyb3JDb2RlIGVycm9yID0gcGFyZW50TW9kZWwoKS0+cmVtb3ZlQWxsU3Rh
dGVtZW50cyhzdGF0ZW1lbnQpOworICAgICAgICAgICAgaWYoIGVycm9yID09IFNvcHJhbm86OkVy
cm9yOjpFcnJvck5vbmUgKSB7CisgICAgICAgICAgICAgICAgUV9GT1JFQUNIKCBjb25zdCBTb3By
YW5vOjpOb2RlJiByZXMsIHJlc291cmNlcyApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVtb3Zl
SW5mZXJlbmNlU3RhdGVtZW50cyggcmVzLnVyaSgpLCBzdGF0ZW1lbnQub2JqZWN0KCkudXJpKCkg
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
ZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBOZWl0aGVyIHN1Ympl
Y3Qgbm9yIG9iamVjdCBhcmUgZGVmaW5lZAorICAgICAgICAvLworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIFFIYXNoPFFVcmwsIFFMaXN0PFFVcmw+ID4gcmVzVHlwZUhhc2g7CisgICAgICAg
ICAgICBRU3RyaW5nIHF1ZXJ5OworICAgICAgICAgICAgaWYoIHN0YXRlbWVudC5jb250ZXh0KCku
aXNWYWxpZCgpICkgeworICAgICAgICAgICAgICAgIHF1ZXJ5ID0gUVN0cmluZzo6ZnJvbUxhdGlu
MSgic2VsZWN0IGRpc3RpbmN0ID9yID90IHdoZXJlIHsgZ3JhcGggJTEgeyA/ciBhID90IC4gfSAu
IH0iKQorICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhzdGF0ZW1lbnQuY29udGV4dCgpLnRv
TjMoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBxdWVyeSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCBkaXN0aW5jdCA/ciA/dCB3aGVy
ZSB7IGdyYXBoID9nIHsgP3IgYSA/dCAuIH0gLiBGSUxURVIoP2chPSUxKSAuIH0iKQorICAgICAg
ICAgICAgICAgICAgICAgICAgLmFyZyhTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoY3JhcHB5
SW5mZXJlbmNlQ29udGV4dCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTb3ByYW5v
OjpRdWVyeVJlc3VsdEl0ZXJhdG9yIGl0ID0gcGFyZW50TW9kZWwoKS0+ZXhlY3V0ZVF1ZXJ5KCBx
dWVyeSwgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwgKTsKKyAgICAgICAgICAg
IHdoaWxlKCBpdC5uZXh0KCkgKSB7CisgICAgICAgICAgICAgICAgcmVzVHlwZUhhc2hbaXRbInIi
XS51cmkoKV0uYXBwZW5kKCBpdFsidCJdLnVyaSgpICk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjb25zdCBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIGVycm9yID0gcGFyZW50TW9kZWwo
KS0+cmVtb3ZlQWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQpOworICAgICAgICAgICAgaWYoIGVycm9y
ID09IFNvcHJhbm86OkVycm9yOjpFcnJvck5vbmUgKSB7CisgICAgICAgICAgICAgICAgUUhhc2g8
UVVybCwgUUxpc3Q8UVVybD4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVzVHlwZUhhc2guY29u
c3RFbmQoKTsKKyAgICAgICAgICAgICAgICBmb3IoIFFIYXNoPFFVcmwsIFFMaXN0PFFVcmw+ID46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzVHlwZUhhc2guY29uc3RCZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQgKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMo
IGl0LmtleSgpLCBpdC52YWx1ZSgpICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICB9CisgICAgfQorICAgIGVsc2Ug
eworICAgICAgICByZXR1cm4gcGFyZW50TW9kZWwoKS0+cmVtb3ZlQWxsU3RhdGVtZW50cyhzdGF0
ZW1lbnQpOworICAgIH0KK30KKworUVVybCBDcmFwcHlJbmZlcmVuY2VyMjo6Y3JhcHB5SW5mZXJl
bmNlQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPm1faW5mZXJlbmNlQ29udGV4dDsK
K30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMjo6dXBkYXRlSW5mZXJlbmNlSW5kZXgoKQorewor
ICAgIGtEZWJ1ZygpOworCisgICAgUU11dGV4TG9ja2VyIGxvY2soICZkLT5tX211dGV4ICk7CisK
KyAgICAvLyBCdWlsZCBzdXBlcmNsYXNzZXMgaGFzaAorICAgIC8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIC8vIGNsZWFyIGNhY2hlCisgICAg
ZC0+bV9zdXBlckNsYXNzZXMuY2xlYXIoKTsKKworICAgIC8vIGNhY2hlIHN1YkNsYXNzT2YgcmVs
YXRpb25zIChvbmx5IHRoZSBvcmlnaW5hbCBvbmVzKQorICAgIFFNdWx0aUhhc2g8UVVybCwgUVVy
bD4gcmRmc1N1YkNsYXNzUmVsYXRpb25zOworICAgIFNvcHJhbm86OlF1ZXJ5UmVzdWx0SXRlcmF0
b3IgaXQgPSBleGVjdXRlUXVlcnkoIFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCA/eCA/eSB3
aGVyZSB7IGdyYXBoID9nIHsgP3ggJTEgP3kgLiB9IC4gIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZJTFRF
Uig/ZyAhPSA8dXJuOmNyYXBweWluZmVyZW5jZTppbmZlcnJlZHRyaXBsZXM+KSAuICIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJGSUxURVIoP3ghPT95KSAuIH0iICkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKCBTb3ByYW5vOjpOb2RlOjpyZXNvdXJj
ZVRvTjMoIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSApICksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6
UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwgKTsKKyAgICB3aGlsZSAoIGl0Lm5leHQoKSApIHsK
KyAgICAgICAgcmRmc1N1YkNsYXNzUmVsYXRpb25zLmluc2VydCggaXRbIngiXS51cmkoKSwgaXRb
InkiXS51cmkoKSApOworICAgIH0KKworICAgIC8vIGNvbXBsZXRlIHRoZSBtYXAgb2Ygc3VwZXIg
Y2xhc3NlcworICAgIFFfRk9SRUFDSCggY29uc3QgUVVybCYgdHlwZSwgcmRmc1N1YkNsYXNzUmVs
YXRpb25zLmtleXMoKSApIHsKKyAgICAgICAgUVNldDxRVXJsPiB2aXNpdGVkQ2xhc3NlczsKKyAg
ICAgICAgZC0+YnVpbGRTdXBlckNsYXNzZXNIYXNoKCB0eXBlLCB2aXNpdGVkQ2xhc3NlcywgcmRm
c1N1YkNsYXNzUmVsYXRpb25zICk7CisgICAgfQorCisgICAgLy8gZ2V0IHRoZSBjbGFzc2VzIHRo
YXQgZG8gbm90IGhhdmUgYW55IHBhcmVudCBjbGFzcworICAgIGl0ID0gZXhlY3V0ZVF1ZXJ5KCBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgP2Mgd2hlcmUgeyA/YyBhICUxIC4gT1BUSU9OQUwg
eyA/YyAlMiA/cCAuIH0gLiBGSUxURVIoIUJPVU5EKD9wKSkgLiB9IiApCisgICAgICAgICAgICAg
ICAgICAgICAgLmFyZyggU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3ByYW5vOjpWb2Nh
YnVsYXJ5OjpSREZTOjpDbGFzcygpICkgKQorICAgICAgICAgICAgICAgICAgICAgIC5hcmcoIFNv
cHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3Vi
Q2xhc3NPZigpICkgKSwKKyAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpRdWVyeTo6UXVl
cnlMYW5ndWFnZVNwYXJxbCApOworICAgIHdoaWxlICggaXQubmV4dCgpICkgeworICAgICAgICBk
LT5tX3N1cGVyQ2xhc3Nlcy5pbnNlcnQoIGl0WyJjIl0udXJpKCksIFFTZXQ8UVVybD4oKSApOwor
ICAgIH0KKworICAgIC8vIGFkZCByZGZzOlJlc291cmNlIGFzIHBhcmVudCBmb3IgYWxsIGNsYXNz
ZXMKKyAgICBRTXV0YWJsZUhhc2hJdGVyYXRvcjxRVXJsLCBRU2V0PFFVcmw+ID4gcmRmc1Jlc0l0
KCBkLT5tX3N1cGVyQ2xhc3NlcyApOworICAgIHdoaWxlKCByZGZzUmVzSXQuaGFzTmV4dCgpICkg
eworICAgICAgICByZGZzUmVzSXQubmV4dCgpOworICAgICAgICByZGZzUmVzSXQudmFsdWUoKS5p
bnNlcnQoU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSk7CisgICAgfQorCisg
ICAgLy8gQnVpbGQgdmlzaWJpbGl0eSB0cmVlCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIGQtPm1fdHlwZVZpc2liaWxpdHlUcmVlLT5y
ZWJ1aWxkVHJlZSgpOworCisjaWZuZGVmIE5ERUJVRworICAgIC8vIGNvdW50IGZvciBkZWJ1Z2dp
bmcKKyAgICBpbnQgY250ID0gMDsKKyAgICBmb3IoIFFIYXNoPFFVcmwsIFFTZXQ8UVVybD4gPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBkLT5tX3N1cGVyQ2xhc3Nlcy5jb25zdEJlZ2luKCk7CisgICAg
ICAgICBpdCAhPSBkLT5tX3N1cGVyQ2xhc3Nlcy5jb25zdEVuZCgpOyArK2l0ICkgeworICAgICAg
ICBrRGVidWcoKSA8PCBpdC5rZXkoKSA8PCAiLT4iIDw8IGl0LnZhbHVlKCk7CisgICAgICAgIGNu
dCArPSBpdC52YWx1ZSgpLmNvdW50KCk7CisgICAgfQorICAgIGtEZWJ1ZygpIDw8ICJOdW1iZXIg
b2YgY2xhc3NlczogICAgICAgICAgICIgPDwgZC0+bV9zdXBlckNsYXNzZXMuY291bnQoKTsKKyAg
ICBrRGVidWcoKSA8PCAiTnVtYmVyIG9mIHN1YmNsYXNzIHJlbGF0aW9uczoiIDw8IGNudDsKKyNl
bmRpZgorfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyOjp1cGRhdGVBbGxSZXNvdXJjZXMoKQor
eworICAgIGtEZWJ1ZygpOworICAgIGlmKCAhZC0+bV91cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQg
KSB7CisgICAgICAgIGQtPm1fdXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkID0gbmV3IFVwZGF0ZUFs
bFJlc291cmNlc1RocmVhZCh0aGlzKTsKKyAgICAgICAgY29ubmVjdChkLT5tX3VwZGF0ZUFsbFJl
c291cmNlc1RocmVhZCwgU0lHTkFMKGZpbmlzaGVkKCkpLCB0aGlzLCBTSUdOQUwoYWxsUmVzb3Vy
Y2VzVXBkYXRlZCgpKSk7CisgICAgfQorICAgIGQtPm1fdXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFk
LT5zdGFydCgpOworfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyOjphZGRJbmZlcmVuY2VTdGF0
ZW1lbnRzKCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUVVybCYgdHlwZSApCit7CisgICAg
cmV0dXJuIGFkZEluZmVyZW5jZVN0YXRlbWVudHMoIHJlc291cmNlLCBRU2V0PFFVcmw+KCkgPDwg
dHlwZSApOworfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyOjphZGRJbmZlcmVuY2VTdGF0ZW1l
bnRzKCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUVNldDxRVXJsPiYgdHlwZXMgKQorewor
ICAgIC8vIGFkZCBtaXNzaW5nIHR5cGVzCisgICAgYm9vbCBoYXZlVmlzaWJsZVR5cGUgPSBmYWxz
ZTsKKyAgICBRU2V0PFFVcmw+IHN1cGVyVHlwZXM7CisgICAgUV9GT1JFQUNIKCBjb25zdCBRVXJs
JiB0eXBlLCB0eXBlcyApIHsKKyAgICAgICAgc3VwZXJUeXBlcyArPSBkLT5zdXBlckNsYXNzZXMo
dHlwZSk7CisgICAgICAgIGlmKCAhaGF2ZVZpc2libGVUeXBlICYmIGQtPm1fdHlwZVZpc2liaWxp
dHlUcmVlLT5pc1Zpc2libGUodHlwZSkgKQorICAgICAgICAgICAgaGF2ZVZpc2libGVUeXBlID0g
dHJ1ZTsKKyAgICB9CisgICAgUVNldDxRVXJsPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3VwZXJU
eXBlcy5jb25zdEVuZCgpOworICAgIGZvciggUVNldDxRVXJsPjo6Y29uc3RfaXRlcmF0b3IgdHlw
ZUl0ID0gc3VwZXJUeXBlcy5jb25zdEJlZ2luKCk7IHR5cGVJdCAhPSBlbmQ7ICsrdHlwZUl0ICkg
eworICAgICAgICBwYXJlbnRNb2RlbCgpLT5hZGRTdGF0ZW1lbnQocmVzb3VyY2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5
cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0eXBlSXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkp
OworICAgIH0KKworICAgIC8vIHRoZSB2aXNpYmlsaXR5IGNhbiBvbmx5IGNoYW5nZSBpZiB3ZSBh
ZGQgYSB2aXNpYmxlIHR5cGUKKyAgICBpZiggaGF2ZVZpc2libGVUeXBlICkgeworICAgICAgICBz
ZXRWaXNpYmlsaXR5KCByZXNvdXJjZSwgVmlzaWJsZSApOworICAgIH0KK30KKwordm9pZCBDcmFw
cHlJbmZlcmVuY2VyMjo6cmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyhjb25zdCBRVXJsICZyZXNv
dXJjZSwgY29uc3QgUVVybCAmdHlwZSkKK3sKKyAgICByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRz
KCByZXNvdXJjZSwgUUxpc3Q8UVVybD4oKSA8PCB0eXBlICk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5m
ZXJlbmNlcjI6OnJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIGNvbnN0IFFVcmwmIHJlc291cmNl
LCBjb25zdCBRTGlzdDxTb3ByYW5vOjpOb2RlPiYgdHlwZXMgKQoreworICAgIFFMaXN0PFFVcmw+
IHVyaXM7CisgICAgUV9GT1JFQUNIKCBjb25zdCBTb3ByYW5vOjpOb2RlJiBub2RlLCB0eXBlcyAp
CisgICAgICAgIHVyaXMgPDwgbm9kZS51cmkoKTsKKyAgICByZW1vdmVJbmZlcmVuY2VTdGF0ZW1l
bnRzKCByZXNvdXJjZSwgdXJpcyApOworfQorCisvLyBBbHdheXMgY2FsbGVkICphZnRlciogcmVt
b3ZpbmcgdGhlIGFjdHVhbCBzdGF0ZW1lbnRzCit2b2lkIENyYXBweUluZmVyZW5jZXIyOjpyZW1v
dmVJbmZlcmVuY2VTdGF0ZW1lbnRzKGNvbnN0IFFVcmwgJnJlc291cmNlLCBjb25zdCBRTGlzdDxR
VXJsPiAmdHlwZXMpCit7CisgICAgLy8gd2UgY2Fubm90IHNpbXBseSByZW1vdmUgYWxsIHN1cGVy
IHR5cGVzIHNpbmNlIHRoZSByZXNvdXJjZSBtaWdodCBzdGlsbCBoYXZlIHR5cGVzIHRoYXQgYXJl
IHNvbWV3aGVyZSBpbiB0aGF0IGhpZXJhcmNoeQorCisgICAgLy8gZGV0ZXJtaW5lIHRoZSB0eXBl
cyB0aGF0IHNob3VsZCBiZSBpbiB0aGUgZGF0YWJhc2Ugbm93CisgICAgY29uc3QgUVNldDxRVXJs
PiBjb3JyZWN0VHlwZXMgPSBkLT5xdWVyeVJlc291cmNlVHlwZXMocmVzb3VyY2UpOworICAgIFFT
ZXQ8UVVybD4gY29ycmVjdFN1cGVyVHlwZXM7CisgICAgUV9GT1JFQUNIKCBjb25zdCBRVXJsJiB0
eXBlLCBjb3JyZWN0VHlwZXMgKSB7CisgICAgICAgIGNvcnJlY3RTdXBlclR5cGVzICs9IGQtPnN1
cGVyQ2xhc3Nlcyh0eXBlKTsKKyAgICB9CisKKyAgICAvLyBub3cgY29tcGFyZSB0aGF0IGxpc3Qg
d2l0aCB0aGUgb25lcyB0aGF0IHdlIGNvdWxkIHJlbW92ZQorICAgIFFTZXQ8UVVybD4gdHlwZXNU
b1JlbW92ZTsKKyAgICBRX0ZPUkVBQ0goIGNvbnN0IFFVcmwmIHR5cGUsIFFTZXQ8UVVybD46OmZy
b21MaXN0KHR5cGVzKSApCisgICAgICAgIHR5cGVzVG9SZW1vdmUgKz0gZC0+c3VwZXJDbGFzc2Vz
KHR5cGUpOworICAgIHR5cGVzVG9SZW1vdmUgLT0gY29ycmVjdFN1cGVyVHlwZXM7CisKKyAgICBi
b29sIGhhdmVWaXNpYmxlVHlwZSA9IGZhbHNlOworICAgIFFfRk9SRUFDSCggY29uc3QgUVVybCYg
dHlwZVRvUmVtb3ZlLCB0eXBlc1RvUmVtb3ZlICkgeworICAgICAgICBpZiggIWhhdmVWaXNpYmxl
VHlwZSAmJiBkLT5tX3R5cGVWaXNpYmlsaXR5VHJlZS0+aXNWaXNpYmxlKHR5cGVUb1JlbW92ZSkg
KQorICAgICAgICAgICAgaGF2ZVZpc2libGVUeXBlID0gdHJ1ZTsKKyAgICAgICAgcGFyZW50TW9k
ZWwoKS0+cmVtb3ZlU3RhdGVtZW50KHJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVG9SZW1vdmUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpOwor
ICAgIH0KKworICAgIC8vIHJlbW92ZSB0aGUgdmlzaWJpbGl0eSBpZiBuZWNlc3NhcnkKKyAgICAv
LyBvbmx5IGJlIHJlbW92aW5nIHZpc2libGUgdHlwZXMgd2UgY2FuIGNoYW5nZSB0aGUgYWN0dWFs
IHZpc2liaWxpdHkKKyAgICBpZiggaGF2ZVZpc2libGVUeXBlICkgeworICAgICAgICBzZXRWaXNp
YmlsaXR5KCByZXNvdXJjZSwgY29ycmVjdFR5cGVzLmlzRW1wdHkoKSA/IFVuZGVmaW5lZFZpc2li
aWxpdHkgOiAoIGQtPmlzVmlzaWJsZUZyb21UeXBlcyhjb3JyZWN0VHlwZXMpID8gVmlzaWJsZSA6
IE5vblZpc2libGUgKSApOworICAgIH0KK30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMjo6c2V0
VmlzaWJpbGl0eShjb25zdCBRVXJsICZyZXNvdXJjZSwgVmlzaWJpbGl0eSB2aXNpYmlsaXR5KQor
eworICAgIC8vIHdlIHVzZSBhbiBpbnRlZ2VyIGluc3RlYWQgb2YgYSBib29sZWFuIGZvciBwZXJm
b3JtYW5jZSByZWFzb25zOiB2aXJ0dW9zbyBkb2VzIG5vdCBzdXBwb3J0IGJvb2wgYW5kIFNvcHJh
bm8gY29udmVydHMgdGhlbSB0byBzdHJpbmdzCisgICAgaWYoIHZpc2liaWxpdHkgPT0gVmlzaWJs
ZSApIHsKKyAgICAgICAgcGFyZW50TW9kZWwoKS0+cmVtb3ZlU3RhdGVtZW50KHJlc291cmNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Vm9jYWJ1bGFy
eTo6TkFPOjp1c2VyVmlzaWJsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU29wcmFubzo6TGl0ZXJhbFZhbHVlKDApLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpKTsKKyAgICAgICAgcGFyZW50
TW9kZWwoKS0+YWRkU3RhdGVtZW50KHJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6TGl0ZXJhbFZhbHVlKDEp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JhcHB5SW5mZXJlbmNlQ29u
dGV4dCgpKTsKKyAgICB9CisgICAgZWxzZSBpZiggdmlzaWJpbGl0eSA9PSBOb25WaXNpYmxlICkg
eworICAgICAgICBwYXJlbnRNb2RlbCgpLT5yZW1vdmVTdGF0ZW1lbnQocmVzb3VyY2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpO
QU86OnVzZXJWaXNpYmxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTb3ByYW5vOjpMaXRlcmFsVmFsdWUoMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpOworICAgICAgICBwYXJlbnRNb2Rl
bCgpLT5hZGRTdGF0ZW1lbnQocmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpMaXRlcmFsVmFsdWUoMCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmFwcHlJbmZlcmVuY2VDb250ZXh0
KCkpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcGFyZW50TW9kZWwoKS0+cmVtb3ZlQWxs
U3RhdGVtZW50cyhyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyYXBweUluZmVyZW5jZUNv
bnRleHQoKSk7CisgICAgfQorfQorCitib29sIENyYXBweUluZmVyZW5jZXIyOjppc1R5cGVWaXNp
YmxlKGNvbnN0IFFVcmwgJnR5cGVVcmkpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPm1fdHlwZVZp
c2liaWxpdHlUcmVlLT5pc1Zpc2libGUoIHR5cGVVcmkgKTsKK30KKworI2luY2x1ZGUgImNyYXBw
eWluZmVyZW5jZXIyLm1vYyIKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvcmVwb3NpdG9yeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvcmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxMjEz
OTQwKQorKysgc2VydmljZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDExICsyOSwyNyBAQAogfQogCiBjbGFzcyBLSm9iOworY2xhc3MgQ3JhcHB5SW5mZXJlbmNl
cjI7CiAKIG5hbWVzcGFjZSBOZXBvbXVrIHsKIAogICAgIGNsYXNzIE1vZGVsQ29weUpvYjsKIAor
ICAgIC8qKgorICAgICAqIFJlcHJlc2VudHMgdGhlIG1haW4gTmVwb211ayBtb2RlbC4gV2hpbGUg
aXQgbG9va3MgYXMgaWYgdGhlcmUgY291bGQgYmUgbW9yZSB0aGFuCisgICAgICogb25lIGluc3Rh
bmNlIG9mIFJlcG9zaXRvcnkgdGhlcmUgaXMgb25seSB0aGUgb25lLgorICAgICAqCisgICAgICog
UmVwb3NpdG9yeSBpcyBiYXNlZCBvbiBOUkxNb2RlbCBvbmx5IGZvciB0aGUgcXVlcnkgcHJlZml4
IGV4cGFuc2lvbiBmZWF0dXJlLiBJdAorICAgICAqIHVzZXMgYSBTb3ByYW5vOjpVdGlsczo6U2ln
bmFsQ2FjaGVNb2RlbCB0byBjb21wYWN0IHRoZSBzZXZlcmFsIHN0YXRlbWVudHNBZGRlZCgpCisg
ICAgICogYW5kIHN0YXRlbWVudHNSZW1vdmVkKCkgc2lnbmFscywgYW5kIHVzZXMgQ3JhcHB5SW5m
ZXJlbmNlcjIgdG8ga2VlcCByZGZzOnN1YkNsYXNzT2YKKyAgICAgKiBhbmQgbmFvOnVzZXJWaXNp
YmxlIGluZmVyZW5jZSB1cC10by1kYXRlLgorICAgICAqCisgICAgICogT24gY29uc3RydWN0aW9u
IGl0IGNoZWNrcyBmb3IgYW5kIG9wdGlvbmFsbHkgcGVyZm9ybXMgY29udmVyc2lvbiBmcm9tIGFu
IG9sZCByZXBvc2l0b3J5CisgICAgICogdHlwZSAocHJlLVZpcnR1b3NvIHRpbWVzKSBhbmQgcnVu
cyBDcmFwcHlJbmZlcmVuY2VyMjo6dXBkYXRlQWxsUmVzb3VyY2VzKCkgd2hpY2ggaXMKKyAgICAg
KiBwZXJmb3JtZWQgaW4gYSBzZXBhcmF0ZSB0aHJlYWQuCisgICAgICoKKyAgICAgKiBcYXV0aG9y
IFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKyAgICAgKi8KICAgICBjbGFzcyBSZXBv
c2l0b3J5IDogcHVibGljIFNvcHJhbm86Ok5STE1vZGVsCiAgICAgewogICAgICAgICBRX09CSkVD
VApAQCAtNTksOSArNzUsMTAgQEAKICAgICAgICAgICogV2lsbCBlbWl0IHRoZSBvcGVuZWQgc2ln
bmFsCiAgICAgICAgICAqLwogICAgICAgICB2b2lkIG9wZW4oKTsKLQogICAgICAgICB2b2lkIGNs
b3NlKCk7CiAKKyAgICAgICAgdm9pZCB1cGRhdGVJbmZlcmVuY2UoKTsKKwogICAgIFFfU0lHTkFM
UzoKICAgICAgICAgdm9pZCBvcGVuZWQoIFJlcG9zaXRvcnkqLCBib29sIHN1Y2Nlc3MgKTsKIApA
QCAtNzUsNiArOTIsNyBAQAogICAgICAgICBTdGF0ZSBtX3N0YXRlOwogCiAgICAgICAgIFNvcHJh
bm86Ok1vZGVsKiBtX21vZGVsOworICAgICAgICBDcmFwcHlJbmZlcmVuY2VyMiogbV9pbmZlcmVu
Y2VyOwogICAgICAgICBjb25zdCBTb3ByYW5vOjpCYWNrZW5kKiBtX2JhY2tlbmQ7CiAKICAgICAg
ICAgLy8gb25seSB1c2VkIGR1cmluZyBvcGVuaW5nCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL29u
dG9sb2d5bWFuYWdlcm1vZGVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL29u
dG9sb2d5bWFuYWdlcm1vZGVsLmNwcAkocmV2aXNpb24gMTIxMzk0MCkKKysrIHNlcnZpY2VzL3N0
b3JhZ2Uvb250b2xvZ3ltYW5hZ2VybW9kZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsy
MSw3IEBACiAKICNpbmNsdWRlIDxRdENvcmUvUVVybD4KICNpbmNsdWRlIDxRdENvcmUvUURhdGVU
aW1lPgorI2luY2x1ZGUgPFF0Q29yZS9RU2NvcGVkUG9pbnRlcj4KIAogI2luY2x1ZGUgPFNvcHJh
bm8vQmFja2VuZD4KICNpbmNsdWRlIDxTb3ByYW5vL1ZlcnNpb24+CkBAIC0yMjUsMjMgKzIyNiw2
IEBACiAgICAgICAgIHRtcE1vZGVsLT5hZGRTdGF0ZW1lbnQoIFNvcHJhbm86OlN0YXRlbWVudCgg
ZGF0YUdyYXBoVXJpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86Omhhc0RlZmF1bHROYW1lc3Bh
Y2UoKSwgTGl0ZXJhbFZhbHVlKCBucy50b1N0cmluZygpICksIG1ldGFEYXRhR3JhcGhVcmkgKSAp
OwogI2VuZGlmCiAgICAgfQotCi0gICAgLyoqCi0gICAgICogU2ltcGxlIGdhcmJhZ2UgY29sbGVj
dGlvbiBjbGFzcy4KLSAgICAgKi8KLSAgICBjbGFzcyBPYmplY3RHYXJiYWdlQ29sbGVjdG9yCi0g
ICAgewotICAgIHB1YmxpYzoKLSAgICAgICAgT2JqZWN0R2FyYmFnZUNvbGxlY3RvciggUU9iamVj
dCogbyApCi0gICAgICAgICAgICA6IG1fb2JqZWN0KCBvICkgewotICAgICAgICB9Ci0gICAgICAg
IH5PYmplY3RHYXJiYWdlQ29sbGVjdG9yKCkgewotICAgICAgICAgICAgZGVsZXRlIG1fb2JqZWN0
OwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBRT2JqZWN0KiBtX29iamVjdDsK
LSAgICB9OwogfQogCiAKQEAgLTMwOCw3ICsyOTIsNyBAQAogICAgIH0KIAogICAgIC8vIHNvIHdl
IGRvIG5vdCBoYXZlIHRvIGNhcmUgYWJvdXQgZGVsZXRpbmcgb3V0IHRtcE1vZGVsIGFueW1vcmUu
Ci0gICAgT2JqZWN0R2FyYmFnZUNvbGxlY3RvciBtb2RlbEdhcmJhZ2VDb2xsZWN0b3IoIHRtcE1v
ZGVsICk7CisgICAgUVNjb3BlZFBvaW50ZXI8U29wcmFubzo6TW9kZWw+IG1vZGVsR2FyYmFnZUNv
bGxlY3RvciggdG1wTW9kZWwgKTsKIAogICAgIC8vIGltcG9ydCB0aGUgZGF0YSBpbnRvIG91ciB0
bXAgbW9kZWwKICAgICB3aGlsZSAoIGRhdGEubmV4dCgpICkgewpJbmRleDogc2VydmljZXMvc3Rv
cmFnZS9jcmFwcHlpbmZlcmVuY2VyMi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2Uv
Y3JhcHB5aW5mZXJlbmNlcjIuaAkocmV2aXNpb24gMCkKKysrIHNlcnZpY2VzL3N0b3JhZ2UvY3Jh
cHB5aW5mZXJlbmNlcjIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUgcHJvamVjdC4KKyAgIENvcHlyaWdo
dCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5vcmc+CisKKyAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZlcnNpb24gYWNjZXB0ZWQgYnkgdGhl
IG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAgc3VjY2Vzc29yIGFwcHJvdmVkIGJ5
IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2ggc2hhbGwKKyAgIGFjdCBhcyBhIHBy
b3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24gMyBvZiB0aGUgbGljZW5zZS4KKwor
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp
Y2Vuc2VzLz4uCisqLworCisjaWZuZGVmIENSQVBQWUlORkVSRU5DRVIyX0gKKyNkZWZpbmUgQ1JB
UFBZSU5GRVJFTkNFUjJfSAorCisjaW5jbHVkZSA8U29wcmFuby9GaWx0ZXJNb2RlbD4KKworLyoq
CisgKiBUaGUgc2Vjb25kIHZlcnNpb24gb2YgdGhlIGNyYXBweSBpbmZlcmVuY2VyIGl0IGV2ZW4g
Y3JhcHBpZXIgdGhhbiB0aGUgZmlyc3QuCisgKiBJdCBvbmx5IGRvZXMgcmRmOnR5cGUgaW5mZXJl
bmNpbmcsIG5vdGhpbmcgZWxzZS4gSW4gdGhlIGxvbmcgcnVuIHRoaXMgaXMgbm90CisgKiBlbm91
Z2ggYnV0IGZvciBub3cgaXQgaXMgdGhlIG9ubHkga2luZCBvZiBpbmZlcmVuY2Ugd2UgdXNlIGlu
IE5lcG9tdWsuCisgKiBUaHVzLCBpdCBpcyBlbm91Z2ggYW5kIG1ha2VzIGZvciBtdWNoIGZhc3Rl
ciBxdWVyaWVzIHRoYW4gdGhlIGZpcnN0CisgKiBjcmFwcHkgaW5mZXJlbmNlci4KKyAqCisgKiBc
YXV0aG9yIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKyAqLworY2xhc3MgQ3JhcHB5
SW5mZXJlbmNlcjIgOiBwdWJsaWMgU29wcmFubzo6RmlsdGVyTW9kZWwKK3sKKyAgICBRX09CSkVD
VAorCitwdWJsaWM6CisgICAgQ3JhcHB5SW5mZXJlbmNlcjIoU29wcmFubzo6TW9kZWwqIHBhcmVu
dCA9IDApOworICAgIH5DcmFwcHlJbmZlcmVuY2VyMigpOworCisgICAgLyoqCisgICAgICogXHJl
aW1wbCB0byB1cGRhdGUgaW50ZXJuYWwgc3RydWN0dXJlcworICAgICAqLworICAgIHZvaWQgc2V0
UGFyZW50TW9kZWwoIFNvcHJhbm86Ok1vZGVsKiBtb2RlbCApOworCisgICAgU29wcmFubzo6RXJy
b3I6OkVycm9yQ29kZSBhZGRTdGF0ZW1lbnQoIGNvbnN0IFNvcHJhbm86OlN0YXRlbWVudCYgc3Rh
dGVtZW50ICk7CisgICAgU29wcmFubzo6RXJyb3I6OkVycm9yQ29kZSByZW1vdmVTdGF0ZW1lbnQo
IGNvbnN0IFNvcHJhbm86OlN0YXRlbWVudCYgc3RhdGVtZW50ICk7CisgICAgU29wcmFubzo6RXJy
b3I6OkVycm9yQ29kZSByZW1vdmVBbGxTdGF0ZW1lbnRzKCBjb25zdCBTb3ByYW5vOjpTdGF0ZW1l
bnQmIHN0YXRlbWVudCApOworCisgICAgdXNpbmcgU29wcmFubzo6RmlsdGVyTW9kZWw6OmFkZFN0
YXRlbWVudDsKKyAgICB1c2luZyBTb3ByYW5vOjpGaWx0ZXJNb2RlbDo6cmVtb3ZlU3RhdGVtZW50
OworICAgIHVzaW5nIFNvcHJhbm86OkZpbHRlck1vZGVsOjpyZW1vdmVBbGxTdGF0ZW1lbnRzOwor
CisgICAgLyoqCisgICAgICogQWxsIGluZmVycmVkIHRyaXBsZXMgYXJlIHN0b3JlZCBpbiB0aGUg
b25lIGNyYXBweSBpbmZlcmVuY2UgZ3JhcGguCisgICAgICogVGh1cywgcmVtb3ZpbmcgaW5mZXJl
bmNlIGlzIGFzIHNpbXBsZSBhcyByZW1vdmluZyB0aGlzIG9uZSBncmFwaC4KKyAgICAgKi8KKyAg
ICBRVXJsIGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSBjb25zdDsKKworICAgIGJvb2wgaXNUeXBl
VmlzaWJsZSggY29uc3QgUVVybCYgdHlwZVVyaSApIGNvbnN0OworCitRX1NJR05BTFM6CisgICAg
LyoqCisgICAgICogRW1pdHRlZCBvbmNlIGEgY2FsbCB0byB1cGRhdGVBbGxSZXNvdXJjZXMoKSBo
YXMgZmluaXNoZWQuCisgICAgICovCisgICAgdm9pZCBhbGxSZXNvdXJjZXNVcGRhdGVkKCk7CisK
K3B1YmxpYyBRX1NMT1RTOgorICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgaW50ZXJuYWwgbWFw
IG9mIHN1cGVyIHR5cGVzIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2gKKyAgICAgKiB0
eXBlIHN0YXRlbWVudHMgbmVlZCB0byBiZSBhZGRlZCBhbmQgcmVtb3ZlZC4gSXQgbWFrZXMgc2Vu
c2UgdG8gY2FsbCB0aGlzCisgICAgICogd2hlbiB0aGUgb250b2xvZ2llcyBpbiB0aGUgbW9kZWwg
Y2hhbmdlLgorICAgICAqLworICAgIHZvaWQgdXBkYXRlSW5mZXJlbmNlSW5kZXgoKTsKKworICAg
IC8qKgorICAgICAqIFVwZGF0ZSBhbGwgdHlwZXMgb2YgYWxsIHJlc291cmNlcyBpbiB0aGUgbW9k
ZWwuIFRoaXMgbWV0aG9kIHdpbGwgYWRkIHN1cGVydHlwZQorICAgICAqIHN0YXRlbWVudHMgYnV0
IE5PVCByZW1vdmUgYW55IHN1cGVyZmx1b3VzIHN0YXRlbWVudHMuIFRvIGFjaGlldmUgdGhlIGxh
dHRlciBjYWxsCisgICAgICogcmVtb3ZlQ29udGV4dChjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkp
IGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLgorICAgICAqLworICAgIHZvaWQgdXBkYXRlQWxs
UmVzb3VyY2VzKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRJbmZlcmVuY2VTdGF0ZW1lbnRz
KCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUVVybCYgdHlwZSApOworICAgIHZvaWQgYWRk
SW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3QgUVVybCYgcmVzb3VyY2UsIGNvbnN0IFFTZXQ8UVVy
bD4mIHR5cGVzICk7CisgICAgdm9pZCByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCBjb25zdCBR
VXJsJiByZXNvdXJjZSwgY29uc3QgUVVybCYgdHlwZSApOworICAgIHZvaWQgcmVtb3ZlSW5mZXJl
bmNlU3RhdGVtZW50cyggY29uc3QgUVVybCYgcmVzb3VyY2UsIGNvbnN0IFFMaXN0PFFVcmw+JiB0
eXBlcyApOworICAgIHZvaWQgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3QgUVVybCYg
cmVzb3VyY2UsIGNvbnN0IFFMaXN0PFNvcHJhbm86Ok5vZGU+JiB0eXBlcyApOworCisgICAgZW51
bSBWaXNpYmlsaXR5IHsKKyAgICAgICAgVmlzaWJsZSwKKyAgICAgICAgTm9uVmlzaWJsZSwKKyAg
ICAgICAgVW5kZWZpbmVkVmlzaWJpbGl0eQorICAgIH07CisKKyAgICB2b2lkIHNldFZpc2liaWxp
dHkoY29uc3QgUVVybCYgcmVzb3VyY2UsIFZpc2liaWxpdHkgdmlzaWJpbGl0eSk7CisKKyAgICBj
bGFzcyBVcGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQ7CisgICAgY2xhc3MgUHJpdmF0ZTsKKyAgICBQ
cml2YXRlKiBjb25zdCBkOworfTsKKworI2VuZGlmIC8vIENSQVBQWUlORkVSRU5DRVIyX0gKSW5k
ZXg6IHNlcnZpY2VzL3N0b3JhZ2UvbmVwb211a2NvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZp
Y2VzL3N0b3JhZ2UvbmVwb211a2NvcmUuY3BwCShyZXZpc2lvbiAxMjEzOTQwKQorKysgc2Vydmlj
ZXMvc3RvcmFnZS9uZXBvbXVrY29yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDkg
QEAKICAgICBtX3JlcG9zaXRvcnktPnNldEVuYWJsZVF1ZXJ5UHJlZml4RXhwYW5zaW9uKGZhbHNl
KTsKICAgICBtX3JlcG9zaXRvcnktPnNldEVuYWJsZVF1ZXJ5UHJlZml4RXhwYW5zaW9uKHRydWUp
OwogCisgICAgLy8gdGhlIGZpcnN0IHRpbWUgdGhpcyBpcyBhIHZlcnkgbG9uZyBwcm9jZWR1cmUu
IFRodXMsIHdlIGRvIGl0IHdoaWxlIE5lcG9tdWsgaXMgYWN0aXZlIGFsdGhvdWdoIHRoZW4gc29t
ZSBxdWVyaWVzIG1pZ2h0IHJldHVybiBpbnZhbGlkIHJlc3VsdHMKKyAgICBtX3JlcG9zaXRvcnkt
PnVwZGF0ZUluZmVyZW5jZSgpOworCiAgICAgaWYgKCAhbV9pbml0aWFsaXplZCApIHsKICAgICAg
ICAgLy8gYW5kIGZpbmFsbHkgd2UgYXJlIGRvbmU6IHRoZSByZXBvc2l0b3J5IGlzIG9ubGluZSBh
bmQgdGhlIG9udG9sb2dpZXMgYXJlIGxvYWRlZC4KICAgICAgICAgbV9pbml0aWFsaXplZCA9IHRy
dWU7CkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHNlcnZpY2VzL3N0b3JhZ2UvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEyMTM5NDApCisrKyBz
ZXJ2aWNlcy9zdG9yYWdlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNyw2ICsx
Nyw4IEBACiAgIG9udG9sb2d5bWFuYWdlcm1vZGVsLmNwcAogICBncmFwaHJldHJpZXZlci5jcHAK
ICAgY3JhcHB5aW5mZXJlbmNlci5jcHAKKyAgY3JhcHB5aW5mZXJlbmNlcjIuY3BwCisgIHR5cGV2
aXNpYmlsaXR5dHJlZS5jcHAKICAgKQogCiBzb3ByYW5vX2FkZF9vbnRvbG9neShzdG9yYWdlX1NS
Q1MKQEAgLTU0LDMgKzU2LDUgQEAKICAgVEFSR0VUUyBuZXBvbXVrc3RvcmFnZQogICBERVNUSU5B
VElPTiAke1BMVUdJTl9JTlNUQUxMX0RJUn0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK2FkZF9zdWJkaXJlY3RvcnkodGVzdCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56273</attachid>
            <date>2011-01-21 10:46:02 +0000</date>
            <delta_ts>2011-01-21 10:53:44 +0000</delta_ts>
            <desc>Another update for Will S. - cutting down initial update time again (kdebase/runtime/nepomuk)</desc>
            <filename>kdebase-runtime-nepomuk-storage.diff</filename>
            <type>text/plain</type>
            <size>83387</size>
            <attacher name="Sebastian Trueg">trueg</attacher>
            
              <data encoding="base64">SW5kZXg6IG9udG9sb2dpZXMva3V2by50cmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG9udG9sb2dpZXMva3V2
by50cmlnCShyZXZpc2lvbiAxMjEzOTQwKQorKysgb250b2xvZ2llcy9rdXZvLnRyaWcJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDYgKzQ3LDkgQEAKICAgICByZGZzOlJlc291cmNlCiAgICAgICAgIG5h
bzp1c2VyVmlzaWJsZSB0cnVlIC4KIAorICAgIG5hbzp1c2VyVmlzaWJsZQorICAgICAgICBuYW86
dXNlclZpc2libGUgZmFsc2UgLgorCiAgICAgbnVhbzpFdmVudAogICAgICAgICBuYW86dXNlclZp
c2libGUgZmFsc2UgLgogCkluZGV4OiBzZXJ2aWNlcy9zdHJpZ2kvaW5kZXhzY2hlZHVsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0cmlnaS9pbmRleHNjaGVkdWxlci5jcHAJKHJldmlz
aW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdHJpZ2kvaW5kZXhzY2hlZHVsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNzYsNiArMzc2LDEyIEBACiAgICAgICAgIG1faW5kZXhlci0+aW5kZXhG
aWxlKCBkaXJJbmZvICk7CiAgICAgfQogCisgICAgLy8gaWdub3JlIGZvbGRlcnMgdGhhdCBhcmUg
c2ltcGx5IHN5bWxpbmtzIGFzIHRoYXQgd291bGQgZ2V0IHVzIGludG8gdG9ucyBvZiB0cm91Ymxl
CisgICAgLy8gaW5jbHVkaW5nIHN0YWxlIGRhdGEgb25jZSB0aGUgbGluayBpcyByZW1vdmVkIG9y
IGR1cGxpY2F0aW9uIG9mIGRhdGEKKyAgICBpZiggZGlySW5mby5pc1N5bUxpbmsoKSApIHsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgLy8gZ2V0IGEgbWFwIG9mIGFsbCBpbmRl
eGVkIGZpbGVzIGZyb20gdGhlIGRpciBpbmNsdWRpbmcgdGhlaXIgc3RvcmVkIG10aW1lCiAgICAg
UUhhc2g8UVN0cmluZywgUURhdGVUaW1lPiBmaWxlc0luU3RvcmUgPSBnZXRDaGlsZHJlbiggZGly
ICk7CiAgICAgUUhhc2g8UVN0cmluZywgUURhdGVUaW1lPjo6aXRlcmF0b3IgZmlsZXNJblN0b3Jl
RW5kID0gZmlsZXNJblN0b3JlLmVuZCgpOwpJbmRleDogc2VydmljZXMvc3RyaWdpL3N0cmlnaXNl
cnZpY2Vjb25maWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0cmlnaS9zdHJpZ2lzZXJ2
aWNlY29uZmlnLmNwcAkocmV2aXNpb24gMTIxMzk0MCkKKysrIHNlcnZpY2VzL3N0cmlnaS9zdHJp
Z2lzZXJ2aWNlY29uZmlnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDcgKzIwMCw3IEBACiBu
YW1lc3BhY2UgewogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVk
IGZvbGRlciBmIHdvdWxkIGFscmVhZHkgYmUgaW5jbHVkZWQgb3IgZXhjbHVkZWQgdXNpbmcgdGhl
IGxpc3QKLSAgICAgKiBmb2xkZXJzCisgICAgICogZm9sZGVycy4KICAgICAgKi8KICAgICBib29s
IGFscmVhZHlJbkxpc3QoIGNvbnN0IFFMaXN0PFFQYWlyPFFTdHJpbmcsIGJvb2w+ID4mIGZvbGRl
cnMsIGNvbnN0IFFTdHJpbmcmIGYsIGJvb2wgaW5jbHVkZSApCiAgICAgewpAQCAtMjM3LDggKzIz
NywxNCBAQAogICAgIHsKICAgICAgICAgaW50IGkgPSAwOwogICAgICAgICB3aGlsZSAoIGkgPCBy
ZXN1bHQuY291bnQoKSApIHsKLSAgICAgICAgICAgIGlmICggcmVzdWx0W2ldLmZpcnN0LmlzRW1w
dHkoKSB8fAotICAgICAgICAgICAgICAgICBhbHJlYWR5SW5MaXN0KCByZXN1bHQsIHJlc3VsdFtp
XS5maXJzdCwgcmVzdWx0W2ldLnNlY29uZCApICkKKyAgICAgICAgICAgIC8vIFRoZSBJbmRleFNj
aGVkdWxlciBkb2VzIG5ldmVyIGxpc3QvaW5kZXggaGlkZGVuIGZpbGVzLiBUaHVzLCBpZiB3ZSBy
ZW1vdmUgaGlkZGVuIGZvbGRlcnMgZnJvbQorICAgICAgICAgICAgLy8gdGhlIGNhY2hlIGhlcmUg
KEV4YW1wbGU6IC9mb28gYW5kIC9mb28vLmJhciBhcmUgaW5kZXhlZCkgdGhleSB3aWxsIG5ldmVy
IGdldCBpbmRleGVkLgorICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgcGF0aCA9IHJlc3VsdFtp
XS5maXJzdDsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wmIGV4Y2x1ZGUgPSByZXN1bHRbaV0uc2Vj
b25kOworICAgICAgICAgICAgaWYgKCAoIHBhdGguaXNFbXB0eSgpIHx8CisgICAgICAgICAgICAg
ICAgICAgYWxyZWFkeUluTGlzdCggcmVzdWx0LCBwYXRoLCBleGNsdWRlICkgKSAmJgorICAgICAg
ICAgICAgICAgICAoIGV4Y2x1ZGUgfHwKKyAgICAgICAgICAgICAgICAgICAhUUZpbGVJbmZvKCBw
YXRoICkuaXNIaWRkZW4oKSApICkKICAgICAgICAgICAgICAgICByZXN1bHQucmVtb3ZlQXQoIGkg
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICArK2k7CkluZGV4OiBzZXJ2aWNl
cy9zdG9yYWdlL3Rlc3QvdHlwZXZpc2liaWxpdHl0cmVldGVzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNl
cnZpY2VzL3N0b3JhZ2UvdGVzdC90eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmgJKHJldmlzaW9uIDAp
CisrKyBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvdHlwZXZpc2liaWxpdHl0cmVldGVzdC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IE5lcG9tdWsgS0RFIHByb2plY3QuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIFRy
dWVnIDx0cnVlZ0BrZGUub3JnPgorCisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24g
Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55
CisgICBsYXRlciB2ZXJzaW9uIGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYu
IChvciBpdHMKKyAgIHN1Y2Nlc3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUg
ZS5WLiksIHdoaWNoIHNoYWxsCisgICBhY3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24g
NiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxpY2Vuc2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiAg
SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2lmbmRl
ZiBUWVBFVklTSUJJTElUWVRSRUVURVNUX0gKKyNkZWZpbmUgVFlQRVZJU0lCSUxJVFlUUkVFVEVT
VF9ICisKKyNpbmNsdWRlIDxRT2JqZWN0PgorCitjbGFzcyBLVGVtcERpcjsKK2NsYXNzIFR5cGVW
aXNpYmlsaXR5VHJlZTsKK25hbWVzcGFjZSBTb3ByYW5vIHsKK2NsYXNzIE1vZGVsOworfQorCitj
bGFzcyBUeXBlVmlzaWJpbGl0eVRyZWVUZXN0IDogcHVibGljIFFPYmplY3QKK3sKKyAgICBRX09C
SkVDVAorCitwcml2YXRlIFFfU0xPVFM6CisgICAgdm9pZCBpbml0VGVzdENhc2UoKTsKKyAgICB2
b2lkIGNsZWFudXBUZXN0Q2FzZSgpOworICAgIHZvaWQgaW5pdCgpOworICAgIHZvaWQgdGVzdFR5
cGVWaXNpYmlsaXR5VHJlZSgpOworCitwcml2YXRlOgorICAgIEtUZW1wRGlyKiBtX3N0b3JhZ2VE
aXI7CisgICAgU29wcmFubzo6TW9kZWwqIG1fbW9kZWw7CisgICAgVHlwZVZpc2liaWxpdHlUcmVl
KiBtX3R5cGVUcmVlOworfTsKKworI2VuZGlmIC8vIFRZUEVWSVNJQklMSVRZVFJFRVRFU1RfSApJ
bmRleDogc2VydmljZXMvc3RvcmFnZS90ZXN0L2NyYXBweWluZmVyZW5jZXIydGVzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS90ZXN0L2NyYXBweWluZmVyZW5jZXIydGVzdC5j
cHAJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNl
cjJ0ZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOTkgQEAKKy8qCisgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUgcHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykg
MjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5vcmc+CisKKyAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
dmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZlcnNpb24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJl
cnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAgc3VjY2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBt
ZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2ggc2hhbGwKKyAgIGFjdCBhcyBhIHByb3h5IGRl
ZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24gMyBvZiB0aGUgbGljZW5zZS4KKworICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz
Lz4uCisqLworCisjaW5jbHVkZSAiY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmgiCisjaW5jbHVkZSAi
Li4vY3JhcHB5aW5mZXJlbmNlcjIuaCIKKworI2luY2x1ZGUgPFF0VGVzdD4KKyNpbmNsdWRlICJx
dGVzdF9rZGUuaCIKKworI2luY2x1ZGUgPFNvcHJhbm8vU29wcmFubz4KKworI2luY2x1ZGUgPGt0
ZW1wZGlyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBTb3ByYW5vOworCitRX0RFQ0xBUkVfTUVUQVRZ
UEUoU29wcmFubzo6U3RhdGVtZW50KQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6aW5p
dFRlc3RDYXNlKCkKK3sKKyAgICBxUmVnaXN0ZXJNZXRhVHlwZTxTb3ByYW5vOjpTdGF0ZW1lbnQ+
KCk7CisKKyAgICAvLyB3ZSBuZWVkIHRvIHVzZSBhIFZpcnR1b3NvIG1vZGVsIGFzIHRtcCBtb2Rl
bCBzaW5jZSByZWRsYW5kIG1pc3NlcyBpbXBvcnRhbnQgU1BBUlFMIGZlYXR1cmVzCisgICAgLy8g
dGhhdCBhcmUgdXNlZCBieSBsaWJuZXBvbXVrIGJlbG93CisgICAgY29uc3QgU29wcmFubzo6QmFj
a2VuZCogYmFja2VuZCA9IFNvcHJhbm86OlBsdWdpbk1hbmFnZXI6Omluc3RhbmNlKCktPmRpc2Nv
dmVyQmFja2VuZEJ5TmFtZSggInZpcnR1b3NvYmFja2VuZCIgKTsKKyAgICBRVkVSSUZZKCBiYWNr
ZW5kICk7CisgICAgbV9zdG9yYWdlRGlyID0gbmV3IEtUZW1wRGlyKCk7CisgICAgbV9iYXNlTW9k
ZWwgPSBiYWNrZW5kLT5jcmVhdGVNb2RlbCggU29wcmFubzo6QmFja2VuZFNldHRpbmdzKCkgPDwg
U29wcmFubzo6QmFja2VuZFNldHRpbmcoU29wcmFubzo6QmFja2VuZE9wdGlvblN0b3JhZ2VEaXIs
IG1fc3RvcmFnZURpci0+bmFtZSgpKSApOworICAgIFFWRVJJRlkoIG1fYmFzZU1vZGVsICk7CisK
KyAgICBtX21vZGVsID0gbmV3IENyYXBweUluZmVyZW5jZXIyKCBtX2Jhc2VNb2RlbCApOworfQor
Cit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6Y2xlYW51cFRlc3RDYXNlKCkKK3sKKyAgICBk
ZWxldGUgbV9tb2RlbDsKKyAgICBkZWxldGUgbV9iYXNlTW9kZWw7CisgICAgZGVsZXRlIG1fc3Rv
cmFnZURpcjsKK30KKworCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6aW5pdCgpCit7Cisg
ICAgbV9iYXNlTW9kZWwtPnJlbW92ZUFsbFN0YXRlbWVudHMoKTsKKworICAgIC8vCisgICAgLy8g
d2UgY3JlYXRlIG9uZSBmYWtlIG9udG9sb2d5CisgICAgLy8KKyAgICAvLyBBCisgICAgLy8gfC0g
QgorICAgIC8vICAgIHwtIEMgLSBpbnZpc2libGUKKyAgICAvLyAgICAgICB8LSBECisgICAgLy8g
ICAgICAgfC0gRQorICAgIC8vCisgICAgLy8gRgorICAgIC8vIHwtIEUKKyAgICAvLworICAgIC8v
IEwxCisgICAgLy8gfC0gTDIKKyAgICAvLyAgICB8LSBMMQorICAgIC8vCisgICAgUVVybCBncmFw
aCgiZ3JhcGg6L29udG8iKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBncmFwaCwg
U29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5S
TDo6T250b2xvZ3koKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBR
VXJsKCJuZXBvbXVrOi9HIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3By
YW5vOjpWb2NhYnVsYXJ5OjpOUkw6Okluc3RhbmNlQmFzZSgpLCBncmFwaCApOworCisgICAgbV9i
YXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovQSIpLCBTb3ByYW5vOjpWb2NhYnVs
YXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3Jh
cGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9CIiksIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZT
OjpDbGFzcygpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwo
Im9udG86L0MiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0
YXRlbWVudCggUVVybCgib250bzovRCIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX2Jh
c2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9FIiksIFNvcHJhbm86OlZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFw
aCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0YiKSwgU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6
OkNsYXNzKCksIGdyYXBoICk7CisKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJs
KCJvbnRvOi9FIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVy
bCgib250bzovQyIpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFV
cmwoIm9udG86L0IiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBR
VXJsKCJvbnRvOi9BIiksIGdyYXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCgg
UVVybCgib250bzovQyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCks
IFFVcmwoIm9udG86L0IiKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50
KCBRVXJsKCJvbnRvOi9EIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2Yo
KSwgUVVybCgib250bzovQyIpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1l
bnQoIFFVcmwoIm9udG86L0UiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NP
ZigpLCBRVXJsKCJvbnRvOi9GIiksIGdyYXBoICk7CisKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1l
bnQoIFFVcmwoIm9udG86L0MiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJs
ZSgpLCBMaXRlcmFsVmFsdWUoZmFsc2UpLCBncmFwaCApOworCisgICAgLy8gdGhlIGxvb3B5IGNs
YXNzZXMKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9MMSIpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Uzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJs
KCJvbnRvOi9MMSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFV
cmwoIm9udG86L0wyIiksIGdyYXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCgg
UVVybCgib250bzovTDIiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9iYXNlTW9kZWwt
PmFkZFN0YXRlbWVudCggUVVybCgib250bzovTDIiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Uzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9MMSIpLCBncmFwaCApOworCisgICAgbV9tb2Rl
bC0+dXBkYXRlSW5mZXJlbmNlSW5kZXgoKTsKK30KKworLy8gbWFrZSBzdXJlIG9ubHkgdGhlIG9u
ZSBzdGF0ZW1lbnQgaXMgYWRkZWQKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0QWRk
QW55U3RhdGVtZW50KCkKK3sKKyAgICBjb25zdCBpbnQgY250ID0gbV9tb2RlbC0+c3RhdGVtZW50
Q291bnQoKTsKKyAgICBTdGF0ZW1lbnQgcyggUVVybCgibmVwb211azovQSIpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpOQU86Omhhc1RhZygpLCBRVXJsKCJuZXBvbXVrOi9UIiksIFFVcmwoIm5lcG9t
dWs6L0ciKSApOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmFkZFN0YXRlbWVudChzKSk7CisgICAg
UUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KzEpOworICAgIFFWRVJJRlko
bV9tb2RlbC0+Y29udGFpbnNTdGF0ZW1lbnQocykpOworfQorCisvLyBtYWtlIHN1cmUgYWxsIHN1
cGVyY2xhc3NlcyBhcmUgYWRkZWQgYXMgdHlwZSwgdG9vCit2b2lkIENyYXBweUluZmVyZW5jZXIy
VGVzdDo6dGVzdEFkZFR5cGVTdGF0ZW1lbnQoKQoreworICAgIGludCBjbnQgPSBtX21vZGVsLT5z
dGF0ZW1lbnRDb3VudCgpOworICAgIFFVcmwgcmVzQSgibmVwb211azovQSIpOworICAgIG1fbW9k
ZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwg
UVVybCgib250bzovQSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIFFDT01QQVJFKG1fbW9k
ZWwtPnN0YXRlbWVudENvdW50KCksIGNudCszKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRh
aW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250
YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExp
dGVyYWxWYWx1ZSgxKSkpOworCisgICAgY250ID0gbV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKTsK
KyAgICBRVXJsIHJlc0IoIm5lcG9tdWs6L0IiKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQo
cmVzQiwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSwg
UVVybCgibmVwb211azovRyIpKTsKKyAgICBRQ09NUEFSRShtX21vZGVsLT5zdGF0ZW1lbnRDb3Vu
dCgpLCBjbnQrNCk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChy
ZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQiIpKSk7CisgICAgUVZF
UklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgUVVybCgib250bzovQSIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWlu
c0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFp
bnNBbnlTdGF0ZW1lbnQocmVzQiwgVm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRl
cmFsVmFsdWUoMSkpKTsKKworICAgIGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7Cisg
ICAgUVVybCByZXNDKCJuZXBvbXVrOi9DIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJl
c0MsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIiksIFFV
cmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQo
KSwgY250KzQpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVz
QywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0MiKSkpOworICAgIFFWRVJJ
RlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0
eXBlKCksIFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNB
bnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0Ei
KSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9j
YWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNl
KCkpKTsKKworICAgIGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCBy
ZXNEKCJuZXBvbXVrOi9EIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0QsIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9FIiksIFFVcmwoIm5lcG9t
dWs6L0ciKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250Kzcp
OworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0YiKSkpOworICAgIFFWRVJJRlkobV9tb2Rl
bC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFV
cmwoIm9udG86L0UiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1l
bnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0MiKSkpOworICAg
IFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29u
dGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9u
dG86L0EiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVz
RCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJl
c291cmNlKCkpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJl
c0QsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7Cit9
CisKKy8vIG1ha2Ugc3VyZSB0aGUgbmV3IHJlbGF0aW9uIGlzIHRha2VuIGludG8gYWNjb3VudCB3
aXRoIHRoZSBuZXh0IGFkZFN0YXRlbWVudAordm9pZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRl
c3RBZGRTdWJDbGFzc09mU3RhdGVtZW50KCkKK3sKKyAgICBRRVhQRUNUX0ZBSUwoIiIsICJOb3Qg
aW1wbGVtZW50ZWQgeWV0IiwgQWJvcnQpOworfQorCisvLyBtYWtlIHN1cmUgb25seSB0aGUgb25l
IHN0YXRlbWVudCBpcyByZW1vdmVkCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6dGVzdFJl
bW92ZUFueVN0YXRlbWVudCgpCit7Cit9CisKKy8vIG1ha2Ugc3VyZSB0aGUgYXBwcm9wcmlhdGUg
dHlwZXMgYXJlIHJlbW92ZWQsIHRvbworLy8gY2hlY2sgMiBjYXNlczogMS4gb25seSB0aGUgb25l
IHR5cGUsIDIuIHR3byB0eXBlcyB3aXRoIGludGVyc2VjdGluZyBzdXBlcmNsYXNzZXMKK3ZvaWQg
Q3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0UmVtb3ZlVHlwZVN0YXRlbWVudCgpCit7CisgICAg
aW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNBKCJuZXBv
bXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7
CisgICAgbV9tb2RlbC0+cmVtb3ZlU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6
OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAg
UUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KTsKKyAgICBRVkVSSUZZKCFt
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgUVVybCgib250bzovQSIpKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlT
dGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxh
cnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0Fu
eVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxW
YWx1ZSgxKSkpOworCisgICAgLy8gYWRkIHR3byB0eXBlcyB3aXRoIGludGVyc2VjdGluZyBzdXBl
ciB0eXBlcworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVs
YXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQiIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOwor
ICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIC8vIHJl
bW92ZSBvbmUgb2YgdGhlbQorICAgIG1fbW9kZWwtPnJlbW92ZVN0YXRlbWVudChyZXNBLCBTb3By
YW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQiIpLCBRVXJsKCJuZXBv
bXVrOi9HIikpOworICAgIC8vIG1ha2Ugc3VyZSBhbGwgaXMgd2VsbAorICAgIFFDT01QQVJFKG1f
bW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCs3KTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNv
bnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJv
bnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJl
c0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9FIikpKTsKKyAgICBRVkVS
SUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6
dHlwZSgpLCBRVXJsKCJvbnRvOi9DIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5z
QW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9C
IikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZv
Y2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKG1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgp
LCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKSk7CisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJW
aXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworfQorCisvLyBtYWtlIHN1cmUgdGhlIHJlbW92
ZWQgc3ViY2xhc3MgcmVsYXRpb24gaXMgdGFrZW4gaW50byBhY2NvdW50IHdpdGggdGhlIG5leHQg
YWRkU3RhdGVtZW50CisvLyBtYWtlIHN1cmUgdHlwZSBzdGF0ZW1lbnRzIHRoYXQgYXJlIG5vIGxv
bmdlciB2YWxpZCBhcmUgcmVtb3ZlZAordm9pZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRlc3RS
ZW1vdmVTdWJDbGFzc09mU3RhdGVtZW50KCkKK3sKKyAgICBRRVhQRUNUX0ZBSUwoIiIsICJOb3Qg
aW1wbGVtZW50ZWQgeWV0IiwgQWJvcnQpOworfQorCisvLyBtYWtlIHN1cmUgdGhlIGNvcnJlc3Bv
bmluZyBzdGF0ZW1lbnRzIGFyZSByZW1vdmVkIGFuZCBub3RoaW5nIGVsc2UKKy8vIHRlc3QgYWxs
IGNvbWJpbmF0aW9ucyBvZiBpbnZhbGlkIGFuZCB2YWxpZCBub2RlcyBpZiBwb3NzaWJsZQordm9p
ZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRlc3RSZW1vdmVBbGxTdGF0ZW1lbnRzKCkKK3sKKyAg
ICAvLyAxLiByZW1vdmUgdGhlIHdob2xlIHJlc291cmNlCisgICAgaW50IGNudCA9IG1fbW9kZWwt
PnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNBKCJuZXBvbXVrOi9BIik7CisgICAgbV9t
b2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgp
LCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRk
U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OmxhYmVsKCksIExpdGVy
YWxWYWx1ZShRTGF0aW4xU3RyaW5nKCJBIikpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1f
bW9kZWwtPnJlbW92ZUFsbFN0YXRlbWVudHMocmVzQSwgTm9kZSgpLCBOb2RlKCkpOworICAgIFFD
T01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCk7CisgICAgUVZFUklGWSghbV9t
b2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgTm9kZSgpLCBOb2RlKCksIE5vZGUoKSkp
OworCisgICAgLy8gMi4gcmVtb3ZlIGEgdHlwZSBmcm9tIHNldmVyYWwgcmVzb3VyY2VzCisgICAg
UVVybCByZXNCKCJuZXBvbXVrOi9CIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0Es
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwo
Im5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIiksIFFVcmwoIm5lcG9tdWs6
L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0IsIFNvcHJhbm86OlZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9CIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7Cisg
ICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0IsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6
dHlwZSgpLCBRVXJsKCJvbnRvOi9GIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2Rl
bC0+cmVtb3ZlQWxsU3RhdGVtZW50cyhOb2RlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6
dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNB
bnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2Fi
dWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5z
QW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9B
IikpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBW
b2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRiIpKSk7CisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJRlko
bV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBl
KCksIFFVcmwoIm9udG86L0EiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlT
dGF0ZW1lbnQocmVzQiwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSkp
OworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKG1fbW9k
ZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2li
bGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0Fu
eVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxW
YWx1ZSgxKSkpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCs3
KTsKKworICAgIC8vIDMuIHJlbW92ZSBhbGwgdHlwZXMgZnJvbSBvbmUgcmVzb3VyY2UKKyAgICBt
X21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBl
KCksIFFVcmwoIm9udG86L0UiKSwgUVVybCgibmVwb211azovRyIpKTsKKyAgICBtX21vZGVsLT5y
ZW1vdmVBbGxTdGF0ZW1lbnRzKHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgp
LCBOb2RlKCksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29u
dGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IE5vZGUoKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJl
c0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisK
KyAgICAvLyA0LiByZW1vdmUgYSBncmFwaAorICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNB
LCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBRVXJs
KCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpLCBRVXJsKCJuZXBvbXVr
Oi9HMiIpKTsKKyAgICBtX21vZGVsLT5yZW1vdmVDb250ZXh0KFFVcmwoIm5lcG9tdWs6L0ciKSk7
CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgTm9kZSgp
LCBOb2RlKCkpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJl
c0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIikpKTsK
KyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRSIpKSk7CisgICAgUVZFUklG
WSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFy
eTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0QiKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwt
PmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLCBRVXJsKCJvbnRvOi9DIikpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0Fu
eVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgi
b250bzovQiIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChy
ZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFy
eTo6UkRGUzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQ29u
dGV4dChRVXJsKCJuZXBvbXVrOi9HIikpKTsKK30KKworLy8gbWFrZSBzdXJlIHdlIGRvIG5vdCBy
dW4gaW50byBhbiBlbmRsZXNzIGxvb3AKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0
Q3ljbGljU3ViQ2xhc3NSZWxhdGlvbigpCit7CisgICAgaW50IGNudCA9IG1fbW9kZWwtPnN0YXRl
bWVudENvdW50KCk7CisgICAgUVVybCByZXNBKCJuZXBvbXVrOi9BIik7CisgICAgbV9tb2RlbC0+
YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJs
KCJvbnRvOi9MMSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIFFDT01QQVJFKG1fbW9kZWwt
PnN0YXRlbWVudENvdW50KCksIGNudCs0KTsgLy8gKzQgc2luY2UgTDEgaXMgdGhlcmUgdHdpY2U6
IHRoZSBvbmUgd2UgYWRkZWQgYW5kIHRoZSBzdXBlcmNsYXNzIG9mIEwyCisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgUVVybCgib250bzovTDEiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlT
dGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0wyIikp
KTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgp
KSk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0VXBkYXRlQWxsUmVzb3Vy
Y2VzKCkKK3sKKyAgICAvLyB3ZSBhZGQgYSBidW5jaCBvZiBzdGF0ZW1lbnRzIHRvIHRoZSBiYXNl
IG1vZGVsIGluc3RlYWQgb2YgZ29pbmcgdGhyb3VnaCB0aGUgY3JhcHB5IGluZmVyZW5jZSBtb2Rl
bAorICAgIFFVcmwgcmVzQSgibmVwb211azovQSIpOworICAgIFFVcmwgcmVzQigibmVwb211azov
QiIpOworICAgIFFVcmwgcmVzQygibmVwb211azovQyIpOworICAgIFFVcmwgcmVzRCgibmVwb211
azovRCIpOworCisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpLCBRVXJsKCJuZXBvbXVrOi9H
IikpOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQiwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSwgUVVybCgibmVwb211azovRyIpKTsK
KyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KHJlc0MsIFNvcHJhbm86OlZvY2FidWxhcnk6
OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAg
bV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudChyZXNELCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworCisgICAgbV9t
b2RlbC0+dXBkYXRlQWxsUmVzb3VyY2VzKCk7CisKKyAgICAvLyB3YWl0IGZvciB0aGUgYWJvdmUg
Y2FsbCB0byBmaW5pc2gKKyAgICBRRXZlbnRMb29wIGxvb3A7CisgICAgY29ubmVjdChtX21vZGVs
LCBTSUdOQUwoYWxsUmVzb3VyY2VzVXBkYXRlZCgpKSwgJmxvb3AsIFNMT1QocXVpdCgpKSk7Cisg
ICAgbG9vcC5leGVjKCk7CisKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVt
ZW50KHJlc0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEp
KSk7CisKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZv
Y2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICBR
VkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNDLCBWb2NhYnVsYXJ5OjpO
QU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworCisgICAgUVZFUklGWShtX21v
ZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNELCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNp
YmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworfQorCitRVEVTVF9LREVNQUlOX0NPUkUoQ3JhcHB5
SW5mZXJlbmNlcjJUZXN0KQorCisjaW5jbHVkZSAiY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0Lm1vYyIK
SW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvdGVzdC9jcmFwcHlpbmZlcmVuY2VyMnRlc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmgJ
KHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0
ZXN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgTmVwb211ayBLREUgcHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAxMCBT
ZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5vcmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVyc2lv
biAzLCBvciBhbnkKKyAgIGxhdGVyIHZlcnNpb24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNoaXAg
b2YgS0RFIGUuVi4gKG9yIGl0cworICAgc3VjY2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1iZXJz
aGlwIG9mIEtERSBlLlYuKSwgd2hpY2ggc2hhbGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmluZWQg
aW4gU2VjdGlvbiA2IG9mIHZlcnNpb24gMyBvZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisq
LworCisjaWZuZGVmIENSQVBQWUlORkVSRU5DRVIyVEVTVF9ICisjZGVmaW5lIENSQVBQWUlORkVS
RU5DRVIyVEVTVF9ICisKKyNpbmNsdWRlIDxRT2JqZWN0PgorCitjbGFzcyBLVGVtcERpcjsKK2Ns
YXNzIENyYXBweUluZmVyZW5jZXIyOworbmFtZXNwYWNlIFNvcHJhbm8geworY2xhc3MgTW9kZWw7
Cit9CisKK2NsYXNzIENyYXBweUluZmVyZW5jZXIyVGVzdCA6IHB1YmxpYyBRT2JqZWN0Cit7Cisg
ICAgUV9PQkpFQ1QKKworcHJpdmF0ZSBRX1NMT1RTOgorICAgIHZvaWQgaW5pdFRlc3RDYXNlKCk7
CisgICAgdm9pZCBjbGVhbnVwVGVzdENhc2UoKTsKKyAgICB2b2lkIGluaXQoKTsKKyAgICB2b2lk
IHRlc3RBZGRBbnlTdGF0ZW1lbnQoKTsKKyAgICB2b2lkIHRlc3RBZGRUeXBlU3RhdGVtZW50KCk7
CisgICAgdm9pZCB0ZXN0QWRkU3ViQ2xhc3NPZlN0YXRlbWVudCgpOworICAgIHZvaWQgdGVzdFJl
bW92ZUFueVN0YXRlbWVudCgpOworICAgIHZvaWQgdGVzdFJlbW92ZVR5cGVTdGF0ZW1lbnQoKTsK
KyAgICB2b2lkIHRlc3RSZW1vdmVTdWJDbGFzc09mU3RhdGVtZW50KCk7CisgICAgdm9pZCB0ZXN0
UmVtb3ZlQWxsU3RhdGVtZW50cygpOworICAgIHZvaWQgdGVzdEN5Y2xpY1N1YkNsYXNzUmVsYXRp
b24oKTsKKyAgICB2b2lkIHRlc3RVcGRhdGVBbGxSZXNvdXJjZXMoKTsKKworcHJpdmF0ZToKKyAg
ICBLVGVtcERpciogbV9zdG9yYWdlRGlyOworICAgIFNvcHJhbm86Ok1vZGVsKiBtX2Jhc2VNb2Rl
bDsKKyAgICBDcmFwcHlJbmZlcmVuY2VyMiogbV9tb2RlbDsKK307CisKKyNlbmRpZgpJbmRleDog
c2VydmljZXMvc3RvcmFnZS90ZXN0L3R5cGV2aXNpYmlsaXR5dHJlZXRlc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvdGVzdC90eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmNwcAko
cmV2aXNpb24gMCkKKysrIHNlcnZpY2VzL3N0b3JhZ2UvdGVzdC90eXBldmlzaWJpbGl0eXRyZWV0
ZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUgcHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAx
MCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5vcmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVy
c2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZlcnNpb24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNo
aXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAgc3VjY2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1i
ZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2ggc2hhbGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmlu
ZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24gMyBvZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u
CisqLworCisjaW5jbHVkZSAidHlwZXZpc2liaWxpdHl0cmVldGVzdC5oIgorI2luY2x1ZGUgIi4u
L3R5cGV2aXNpYmlsaXR5dHJlZS5oIgorCisjaW5jbHVkZSA8UXRUZXN0PgorI2luY2x1ZGUgInF0
ZXN0X2tkZS5oIgorCisjaW5jbHVkZSA8U29wcmFuby9Tb3ByYW5vPgorCisjaW5jbHVkZSA8a3Rl
bXBkaXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFNvcHJhbm87CisKK3ZvaWQgVHlwZVZpc2liaWxp
dHlUcmVlVGVzdDo6aW5pdFRlc3RDYXNlKCkKK3sKKyAgICAvLyB3ZSBuZWVkIHRvIHVzZSBhIFZp
cnR1b3NvIG1vZGVsIGFzIHRtcCBtb2RlbCBzaW5jZSByZWRsYW5kIG1pc3NlcyBpbXBvcnRhbnQg
U1BBUlFMIGZlYXR1cmVzCisgICAgLy8gdGhhdCBhcmUgdXNlZCBieSBsaWJuZXBvbXVrIGJlbG93
CisgICAgY29uc3QgU29wcmFubzo6QmFja2VuZCogYmFja2VuZCA9IFNvcHJhbm86OlBsdWdpbk1h
bmFnZXI6Omluc3RhbmNlKCktPmRpc2NvdmVyQmFja2VuZEJ5TmFtZSggInZpcnR1b3NvYmFja2Vu
ZCIgKTsKKyAgICBRVkVSSUZZKCBiYWNrZW5kICk7CisgICAgbV9zdG9yYWdlRGlyID0gbmV3IEtU
ZW1wRGlyKCk7CisgICAgbV9tb2RlbCA9IGJhY2tlbmQtPmNyZWF0ZU1vZGVsKCBTb3ByYW5vOjpC
YWNrZW5kU2V0dGluZ3MoKSA8PCBTb3ByYW5vOjpCYWNrZW5kU2V0dGluZyhTb3ByYW5vOjpCYWNr
ZW5kT3B0aW9uU3RvcmFnZURpciwgbV9zdG9yYWdlRGlyLT5uYW1lKCkpICk7CisgICAgUVZFUklG
WSggbV9tb2RlbCApOworCisgICAgbV90eXBlVHJlZSA9IG5ldyBUeXBlVmlzaWJpbGl0eVRyZWUo
IG1fbW9kZWwgKTsKK30KKwordm9pZCBUeXBlVmlzaWJpbGl0eVRyZWVUZXN0OjpjbGVhbnVwVGVz
dENhc2UoKQoreworICAgIGRlbGV0ZSBtX21vZGVsOworICAgIGRlbGV0ZSBtX3R5cGVUcmVlOwor
ICAgIGRlbGV0ZSBtX3N0b3JhZ2VEaXI7Cit9CisKKwordm9pZCBUeXBlVmlzaWJpbGl0eVRyZWVU
ZXN0Ojppbml0KCkKK3sKKyAgICBtX21vZGVsLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKCk7CisKKyAg
ICAvLyB3ZSBjcmVhdGUgb25lIGZha2Ugb250b2xvZ3kKKyAgICAvLworICAgIC8vIHNpdHVhdGlv
bnMgd2UgbmVlZCB0byB0ZXN0OgorICAgIC8vICogY2xhc3MgdGhhdCBpcyBtYXJrZWQgdmlzaWJs
ZSBzaG91bGQgc3RheSB2aXNpYmxlCisgICAgLy8gKiBjbGFzcyB0aGF0IGlzIG1hcmtlZCBpbnZp
c2libGUgc2hvdWxkIHN0YXkgaW52aXNpYmxlCisgICAgLy8gKiBub24tbWFya2VkIHN1YmNsYXNz
IG9mIHZpc2libGUgc2hvdWxkIGJlIHZpc2libGUsIHRvbworICAgIC8vICogbm9uLW1hcmtlZCBz
dWJjbGFzcyBvZiBpbnZpc2libGUgc2hvdWxkIGJlIGludmlzaWJsZSwgdG9vCisgICAgLy8gKiBt
YXJrZWQgc3ViY2xhc3Mgc2hvdWxkIGtlZXAgaXRzIG93biB2aXNpYmxpdHkgYW5kIG5vdCBpbmhl
cml0IGZyb20gcGFyZW50CisgICAgLy8gKiB3aG9sZSBicmFuY2ggc2hvdWxkIGluaGVyaXQgZnJv
bSBwYXJlbnQKKyAgICAvLyAqIGlmIG9uZSBwYXJlbnQgaXMgdmlzaWJsZSB0aGUgY2xhc3MgaXMg
dmlzaWJsZSwgdG9vLCBldmVuIGlmIE4gb3RoZXIgcGFyZW50cyBhcmUgbm90CisgICAgLy8gKiBp
ZiBhbGwgcGFyZW50cyBhcmUgaW52aXNpYmxlLCB0aGUgY2xhc3MgaXMgaW52aXNpYmxlLCBldmVu
IGlmIGhpZ2hlciB1cCBpbiB0aGUgYnJhbmNoIGEgY2xhc3MgaXMgdmlzaWJsZQorICAgIC8vICog
cHJvcGVybHkgaGFuZGxlIGxvb3BzIChhcyBpbjogZG8gbm90IHJ1biBpbnRvIGFuIGVuZGxlc3Mg
bG9vcCkKKyAgICAvLworICAgIC8vIEEKKyAgICAvLyB8LSBCIC0gaW52aXNpYmxlCisgICAgLy8g
ICAgfC0gQworICAgIC8vICAgICAgIHwtIEQgLSB2aXNpYmxlCisgICAgLy8gICAgICAgICAgfC0g
RQorICAgIC8vICAgICAgICAgICAgIHwtIEYKKyAgICAvLyAgICB8LSBHCisgICAgLy8KKyAgICAv
LyBBQSAtIGludmlzaWJsZQorICAgIC8vIHwgLSBGCisgICAgLy8gfCAtIEcKKyAgICAvLworICAg
IC8vIFgKKyAgICAvLyB8LSBZIC0gaW52aXNpYmxlCisgICAgLy8gICAgfC0gWgorICAgIC8vICAg
ICAgIHwtIFgKKworICAgIFFVcmwgZ3JhcGgoImdyYXBoOi9vbnRvIik7CisgICAgbV9tb2RlbC0+
YWRkU3RhdGVtZW50KCBncmFwaCwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNv
cHJhbm86OlZvY2FidWxhcnk6Ok5STDo6T250b2xvZ3koKSwgZ3JhcGggKTsKKworICAgIG1fbW9k
ZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsK
KyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0IiKSwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCks
IGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9DIiksIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZT
OjpDbGFzcygpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250
bzovRCIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQo
IFFVcmwoIm9udG86L0UiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9GIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1f
bW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5
OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGgg
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0FBIiksIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFz
cygpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovWCIp
LCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwo
Im9udG86L1kiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVt
ZW50KCBRVXJsKCJvbnRvOi9aIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworCisgICAgbV9tb2Rl
bC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9CIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
RlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQSIpLCBncmFwaCApOworICAgIG1fbW9kZWwt
PmFkZFN0YXRlbWVudCggUVVybCgib250bzovQyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZT
OjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0IiKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5h
ZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0QiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6
c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9DIiksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9FIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1
YkNsYXNzT2YoKSwgUVVybCgib250bzovRCIpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0
YXRlbWVudCggUVVybCgib250bzovRiIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJD
bGFzc09mKCksIFFVcmwoIm9udG86L0UiKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0
ZW1lbnQoIFFVcmwoIm9udG86L0ciKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xh
c3NPZigpLCBRVXJsKCJvbnRvOi9CIiksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVt
ZW50KCBRVXJsKCJvbnRvOi9GIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNz
T2YoKSwgUVVybCgib250bzovQUEiKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1l
bnQoIFFVcmwoIm9udG86L0ciKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NP
ZigpLCBRVXJsKCJvbnRvOi9BQSIpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVu
dCggUVVybCgib250bzovWSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09m
KCksIFFVcmwoIm9udG86L1giKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQo
IFFVcmwoIm9udG86L1oiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigp
LCBRVXJsKCJvbnRvOi9ZIiksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBR
VXJsKCJvbnRvOi9YIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwg
UVVybCgib250bzovWiIpLCBncmFwaCApOworCisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBR
VXJsKCJvbnRvOi9CIiksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwg
TGl0ZXJhbFZhbHVlKGZhbHNlKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQo
IFFVcmwoIm9udG86L0QiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgp
LCBMaXRlcmFsVmFsdWUodHJ1ZSksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50
KCBRVXJsKCJvbnRvOi9BQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxl
KCksIExpdGVyYWxWYWx1ZShmYWxzZSksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVt
ZW50KCBRVXJsKCJvbnRvOi9ZIiksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2li
bGUoKSwgTGl0ZXJhbFZhbHVlKGZhbHNlKSwgZ3JhcGggKTsKKworICAgIG1fdHlwZVRyZWUtPnJl
YnVpbGRUcmVlKCk7Cit9CisKK3ZvaWQgVHlwZVZpc2liaWxpdHlUcmVlVGVzdDo6dGVzdFR5cGVW
aXNpYmlsaXR5VHJlZSgpCit7CisgICAgUVZFUklGWShtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVy
bCgib250bzovQSIpKSk7CisgICAgUVZFUklGWSghbV90eXBlVHJlZS0+aXNWaXNpYmxlKFFVcmwo
Im9udG86L0IiKSkpOworICAgIFFWRVJJRlkoIW1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJv
bnRvOi9DIikpKTsKKyAgICBRVkVSSUZZKG1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRv
Oi9EIikpKTsKKyAgICBRVkVSSUZZKG1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9F
IikpKTsKKyAgICBRVkVSSUZZKG1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9GIikp
KTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgib250bzovRyIpKSk7
CisgICAgUVZFUklGWSghbV90eXBlVHJlZS0+aXNWaXNpYmxlKFFVcmwoIm9udG86L0FBIikpKTsK
KyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgib250bzovWCIpKSk7IC8v
IGJlY2F1c2Ugb25seSB0b3AtbGV2ZWwgY2xhc3NlcyBpbmhlcml0IGZyb20gcmRmczpSZXNvdXJj
ZQorICAgIFFWRVJJRlkoIW1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9ZIikpKTsK
KyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgib250bzovWiIpKSk7Cit9
CisKK1FURVNUX0tERU1BSU5fQ09SRShUeXBlVmlzaWJpbGl0eVRyZWVUZXN0KQorCisjaW5jbHVk
ZSAidHlwZXZpc2liaWxpdHl0cmVldGVzdC5tb2MiCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3Rl
c3QvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS90ZXN0L0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFnZS90ZXN0L0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACitzZXQoIEVYRUNVVEFCTEVf
T1VUUFVUX1BBVEggJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9ICkKKwora2RlNF9hZGRfdW5p
dF90ZXN0KGNyYXBweWluZmVyZW5jZXIydGVzdAorICBjcmFwcHlpbmZlcmVuY2VyMnRlc3QuY3Bw
CisgIC4uL2NyYXBweWluZmVyZW5jZXIyLmNwcAorICAuLi90eXBldmlzaWJpbGl0eXRyZWUuY3Bw
KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNyYXBweWluZmVyZW5jZXIydGVzdAorICAke1FUX1FU
VEVTVF9MSUJSQVJZfQorICAke1NPUFJBTk9fTElCUkFSSUVTfQorICAke0tERTRfS0RFQ09SRV9M
SUJTfSkKKwora2RlNF9hZGRfdW5pdF90ZXN0KHR5cGV2aXNpYmlsaXR5dHJlZXRlc3QKKyAgdHlw
ZXZpc2liaWxpdHl0cmVldGVzdC5jcHAKKyAgLi4vdHlwZXZpc2liaWxpdHl0cmVlLmNwcCkKK3Rh
cmdldF9saW5rX2xpYnJhcmllcyh0eXBldmlzaWJpbGl0eXRyZWV0ZXN0CisgICR7UVRfUVRURVNU
X0xJQlJBUll9CisgICR7U09QUkFOT19MSUJSQVJJRVN9CisgICR7S0RFNF9LREVDT1JFX0xJQlN9
KQpJbmRleDogc2VydmljZXMvc3RvcmFnZS9vbnRvbG9neWxvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gc2VydmljZXMvc3RvcmFnZS9vbnRvbG9neWxvYWRlci5jcHAJKHJldmlzaW9uIDEyMTM5NDAp
CisrKyBzZXJ2aWNlcy9zdG9yYWdlL29udG9sb2d5bG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQsMTQgKzI0LDEwIEBACiAKICNpbmNsdWRlIDxTb3ByYW5vL0dsb2JhbD4KICNpbmNsdWRl
IDxTb3ByYW5vL05vZGU+Ci0jaW5jbHVkZSA8U29wcmFuby9MaXRlcmFsVmFsdWU+CiAjaW5jbHVk
ZSA8U29wcmFuby9Nb2RlbD4KICNpbmNsdWRlIDxTb3ByYW5vL1BsdWdpbk1hbmFnZXI+CiAjaW5j
bHVkZSA8U29wcmFuby9TdGF0ZW1lbnRJdGVyYXRvcj4KLSNpbmNsdWRlIDxTb3ByYW5vL1F1ZXJ5
UmVzdWx0SXRlcmF0b3I+CiAjaW5jbHVkZSA8U29wcmFuby9QYXJzZXI+Ci0jaW5jbHVkZSA8U29w
cmFuby9Wb2NhYnVsYXJ5L05BTz4KLSNpbmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvUkRGUz4K
IAogI2luY2x1ZGUgPEtDb25maWc+CiAjaW5jbHVkZSA8S0NvbmZpZ0dyb3VwPgpAQCAtMTg4LDcg
KzE4NCw2IEBACiAgICAgZWxzZSB7CiAgICAgICAgIGQtPmZvcmNlT250b2xvZ3lVcGRhdGUgPSBm
YWxzZTsKICAgICAgICAgZC0+dXBkYXRlVGltZXIuc3RvcCgpOwotICAgICAgICB1cGRhdGVVc2Vy
VmlzaWJpbGl0eSgpOwogICAgICAgICBlbWl0IG9udG9sb2d5TG9hZGluZ0ZpbmlzaGVkKHRoaXMp
OwogICAgIH0KIH0KQEAgLTIyNSwxMTUgKzIyMCw0IEBACiAgICAgfQogfQogCi0KLW5hbWVzcGFj
ZSB7Ci0gICAgc3RydWN0IFVzZXJWaXNpYmxlTm9kZSB7Ci0gICAgICAgIFVzZXJWaXNpYmxlTm9k
ZSggY29uc3QgUVVybCYgciApCi0gICAgICAgICAgICA6IHVyaSggciApLAotICAgICAgICAgICAg
ICB1c2VyVmlzaWJsZSggMCApIHsKLSAgICAgICAgfQotCi0gICAgICAgIFFVcmwgdXJpOwotICAg
ICAgICBpbnQgdXNlclZpc2libGU7Ci0gICAgICAgIFFIYXNoPFFVcmwsIFVzZXJWaXNpYmxlTm9k
ZSo+IHBhcmVudHM7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNldCB0aGUgdmFsdWUgb2Yg
bmFvOnVzZXJWaXNpYmxlIGFuZCBhZGQgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICogc3Rh
dGVtZW50IHRvIHRoZSBsaXN0IG9mIHN0YXRlbWVudHMgaW4gY2FzZSB0aGUgdmFsdWUgd2FzCi0g
ICAgICAgICAqIG5vdCBkZWZpbmVkIHlldC4KLSAgICAgICAgICovCi0gICAgICAgIGludCB1cGRh
dGVVc2VyVmlzaWJpbGl0eSggUUxpc3Q8U29wcmFubzo6U3RhdGVtZW50PiYgc3RhdGVtZW50cyAp
IHsKLSAgICAgICAgICAgIGlmICggdXNlclZpc2libGUgIT0gMCApIHsKLSAgICAgICAgICAgICAg
ICBrRGVidWcoKSA8PCAiVXNlciB2aXNpYmlsaXR5IGFscmVhZHkgc2V0IiA8PCB1cmkudG9TdHJp
bmcoKSA8PCAoIHVzZXJWaXNpYmxlID09IDEgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdXNl
clZpc2libGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBpZiAoICFwYXJlbnRzLmlzRW1wdHkoKSApIHsKLSAgICAgICAgICAgICAgICAgICAgZm9y
ICggUUhhc2g8UVVybCwgVXNlclZpc2libGVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gcGFyZW50cy5i
ZWdpbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBpdCAhPSBwYXJlbnRzLmVuZCgpOyAr
K2l0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgdXJpLnRvU3RyaW5n
KCkgPDwgIkNoZWNraW5nIHBhcmVudCBjbGFzcyIgPDwgaXQudmFsdWUoKS0+dXJpLnRvU3RyaW5n
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGl0LnZhbHVlKCktPnVwZGF0ZVVzZXJW
aXNpYmlsaXR5KCBzdGF0ZW1lbnRzICkgPT0gLTEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlclZpc2libGUgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIHVzZXJWaXNpYmxlID09IDAgKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gdmlzaWJsZQotICAgICAgICAgICAg
ICAgICAgICB1c2VyVmlzaWJsZSA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHN0YXRlbWVudHMgPDwgU29wcmFubzo6U3RhdGVtZW50KCB1cmksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6
Ok5BTzo6dXNlclZpc2libGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU29wcmFubzo6TGl0ZXJhbFZhbHVlKCB1c2VyVmlzaWJsZSA9PSAxICks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5lcG9t
dWs6OlZvY2FidWxhcnk6OktVVk86Om5ybE9udG9sb2d5R3JhcGgoKSApOwotICAgICAgICAgICAg
ICAgIGtEZWJ1ZygpIDw8ICJTZXR0aW5nIG5hbzp1c2VyVmlzaWJsZSBvZiIgPDwgdXJpLnRvU3Ry
aW5nKCkgPDwgKCB1c2VyVmlzaWJsZSA9PSAxICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHVz
ZXJWaXNpYmxlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdm9pZCBO
ZXBvbXVrOjpPbnRvbG9neUxvYWRlcjo6dXBkYXRlVXNlclZpc2liaWxpdHkoKQotewotICAgIC8v
Ci0gICAgLy8gYnVpbGQgYSB0cmVlIG9mIGFsbCBjbGFzc2VzIGFuZCBwcm9wZXJ0aWVzCi0gICAg
Ly8KLSAgICBRU3RyaW5nIHF1ZXJ5Ci0gICAgICAgID0gUVN0cmluZzo6ZnJvbUxhdGluMSggInNl
bGVjdCBkaXN0aW5jdCA/ciA/cCA/diB3aGVyZSB7ICIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAieyA/ciBhIHJkZnM6Q2xhc3MgLiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpzdWJDbGFzc09mID9wIC4gP3AgYSByZGZzOkNsYXNz
IC4gfSAuIH0gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVTklPTiAiCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInsgP3IgYSByZGY6UHJvcGVydHkgLiAiCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpzdWJQcm9wZXJ0
eU9mID9wIC4gP3AgYSByZGY6UHJvcGVydHkgLiB9IC4gfSAiCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgJTEgP3YgLiB9IC4gIgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJGSUxURVIoP3IhPXJkZnM6UmVzb3VyY2UpIC4gIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ9IiApCi0gICAgICAgIC5hcmcoIFNvcHJhbm86Ok5vZGU6
OnJlc291cmNlVG9OMyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpICkg
KTsKLSAgICBrRGVidWcoKSA8PCBxdWVyeTsKLSAgICBRSGFzaDxRVXJsLCBVc2VyVmlzaWJsZU5v
ZGUqPiBhbGw7Ci0gICAgewotICAgICAgICBTb3ByYW5vOjpRdWVyeVJlc3VsdEl0ZXJhdG9yIGl0
Ci0gICAgICAgICAgICA9IGQtPm1vZGVsLT5leGVjdXRlUXVlcnkoIHF1ZXJ5LCBTb3ByYW5vOjpR
dWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApOwotICAgICAgICB3aGlsZSggaXQubmV4dCgpICkg
ewotICAgICAgICAgICAgY29uc3QgUVVybCByID0gaXRbInIiXS51cmkoKTsKLSAgICAgICAgICAg
IGNvbnN0IFNvcHJhbm86Ok5vZGUgcCA9IGl0WyJwIl07Ci0gICAgICAgICAgICBjb25zdCBTb3By
YW5vOjpOb2RlIHYgPSBpdFsidiJdOwotCi0gICAgICAgICAgICBpZiAoICFhbGwuY29udGFpbnMo
IHIgKSApIHsKLSAgICAgICAgICAgICAgICBVc2VyVmlzaWJsZU5vZGUqIHJfdXZuID0gbmV3IFVz
ZXJWaXNpYmxlTm9kZSggciApOwotICAgICAgICAgICAgICAgIGFsbC5pbnNlcnQoIHIsIHJfdXZu
ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiggdi5pc0xpdGVyYWwoKSApCi0gICAg
ICAgICAgICAgICAgYWxsW3JdLT51c2VyVmlzaWJsZSA9ICh2LmxpdGVyYWwoKS50b0Jvb2woKSA/
IDEgOiAtMSk7Ci0gICAgICAgICAgICBpZiAoIHAuaXNSZXNvdXJjZSgpICYmCi0gICAgICAgICAg
ICAgICAgIHAudXJpKCkgIT0gciAmJgotICAgICAgICAgICAgICAgICBwLnVyaSgpICE9IFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkgKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCAhYWxsLmNvbnRhaW5zKCBwLnVyaSgpICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIFVzZXJW
aXNpYmxlTm9kZSogcF91dm4gPSBuZXcgVXNlclZpc2libGVOb2RlKCBwLnVyaSgpICk7Ci0gICAg
ICAgICAgICAgICAgICAgIGFsbC5pbnNlcnQoIHAudXJpKCksIHBfdXZuICk7Ci0gICAgICAgICAg
ICAgICAgICAgIGFsbFtyXS0+cGFyZW50cy5pbnNlcnQoIHAudXJpKCksIHBfdXZuICk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBhbGxbcl0tPnBhcmVudHMuaW5zZXJ0KCBwLnVyaSgpLCBhbGxbcC51cmkoKV0gKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLwot
ICAgIC8vIGNyZWF0ZSBhIGxpc3Qgb2YgYWxsIHN0YXRlbWVudHMgd2UgbmVlZCB0byBhZGQKLSAg
ICAvLwotICAgIFFMaXN0PFNvcHJhbm86OlN0YXRlbWVudD4gc3RhdGVtZW50czsKLSAgICBmb3Ig
KCBRSGFzaDxRVXJsLCBVc2VyVmlzaWJsZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBhbGwuYmVnaW4o
KTsKLSAgICAgICAgICBpdCAhPSBhbGwuZW5kKCk7ICsraXQgKSB7Ci0gICAgICAgIGl0LnZhbHVl
KCktPnVwZGF0ZVVzZXJWaXNpYmlsaXR5KCBzdGF0ZW1lbnRzICk7Ci0gICAgfQotCi0gICAgLy8K
LSAgICAvLyBjbGVhbnVwIGFuZCBhZGQgYWxsIHRoZSBuZWNlc3Nhcnkgc3RhdGVtZW50cyB0byB0
aGUgbWFpbiBtb2RlbAotICAgIC8vCi0gICAgcURlbGV0ZUFsbCggYWxsICk7Ci0gICAgZC0+bW9k
ZWwtPmFkZFN0YXRlbWVudHMoIHN0YXRlbWVudHMgKTsKLX0KLQogI2luY2x1ZGUgIm9udG9sb2d5
bG9hZGVyLm1vYyIKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2Uvb250b2xvZ3lsb2FkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL29udG9sb2d5bG9hZGVyLmgJKHJldmlzaW9uIDEy
MTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL29udG9sb2d5bG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY1LDEyICs2NSw2IEBACiAgICAgICAgICAqLwogICAgICAgICB2b2lkIGltcG9ydE9u
dG9sb2d5KCBjb25zdCBRU3RyaW5nJiB1cmwgKTsKIAotICAgICAgICAvKioKLSAgICAgICAgICog
Q3JlYXRlcyBuYW86dXNlclZpc2libGUgcHJvcGVydGllcyBmb3IgYWxsIGNsYXNzZXMgYW5kIHBy
b3BlcnRpZXMKLSAgICAgICAgICogYW5kIHN0b3JlcyB0aGVtIGluIHRoZSBrdXZvIG5hbWVzcGFj
ZS4KLSAgICAgICAgICovCi0gICAgICAgIHZvaWQgdXBkYXRlVXNlclZpc2liaWxpdHkoKTsKLQog
ICAgIFFfU0lHTkFMUzoKICAgICAgICAgLyoqCiAgICAgICAgICAqIEVtaXR0ZWQgb25jZSB0aGUg
dXBkYXRlIG9mIHRoZSBvbnRvbG9naWVzIGlzIGRvbmUuCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdl
L3R5cGV2aXNpYmlsaXR5dHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS90
eXBldmlzaWJpbGl0eXRyZWUuY3BwCShyZXZpc2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFnZS90
eXBldmlzaWJpbGl0eXRyZWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4MyBAQAorLyoK
KyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBOZXBvbXVrIEtERSBwcm9qZWN0LgorICAgQ29w
eXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKworICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFueQorICAgbGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBi
eSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiAob3IgaXRzCisgICBzdWNjZXNzb3IgYXBwcm92
ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4pLCB3aGljaCBzaGFsbAorICAgYWN0IGFz
IGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9uIDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNl
LgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v
cmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJ0eXBldmlzaWJpbGl0eXRyZWUuaCIKKwor
I2luY2x1ZGUgPFNvcHJhbm8vTW9kZWw+CisjaW5jbHVkZSA8U29wcmFuby9RdWVyeVJlc3VsdEl0
ZXJhdG9yPgorI2luY2x1ZGUgPFNvcHJhbm8vTm9kZT4KKyNpbmNsdWRlIDxTb3ByYW5vL0xpdGVy
YWxWYWx1ZT4KKyNpbmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvTkFPPgorI2luY2x1ZGUgPFNv
cHJhbm8vVm9jYWJ1bGFyeS9SREZTPgorCisjaW5jbHVkZSA8UXRDb3JlL1FNdXRleExvY2tlcj4K
KworI2luY2x1ZGUgPEtEZWJ1Zz4KKworCitjbGFzcyBUeXBlVmlzaWJpbGl0eVRyZWU6OlR5cGVW
aXNpYmlsaXR5Tm9kZQoreworcHVibGljOgorICAgIFR5cGVWaXNpYmlsaXR5Tm9kZSggY29uc3Qg
UVVybCYgciApCisgICAgICAgIDogdXJpKCByICksCisgICAgICAgICAgdXNlclZpc2libGUoIDAg
KSB7CisgICAgfQorCisgICAgUVVybCB1cmk7CisgICAgaW50IHVzZXJWaXNpYmxlOworICAgIFFT
ZXQ8VHlwZVZpc2liaWxpdHlOb2RlKj4gcGFyZW50czsKKworICAgIC8qKgorICAgICAqIFNldCB0
aGUgdmFsdWUgb2YgbmFvOnVzZXJWaXNpYmxlLgorICAgICAqIEEgY2xhc3MgaXMgdmlzaWJsZSBp
ZiBpdCBoYXMgYXQgbGVhc3Qgb25lIHZpc2libGUgZGlyZWN0IHBhcmVudCBjbGFzcy4KKyAgICAg
Ki8KKyAgICBpbnQgdXBkYXRlVXNlclZpc2liaWxpdHkoIFFTZXQ8VHlwZVZpc2liaWxpdHlOb2Rl
Kj4mIHZpc2l0ZWROb2RlcyApIHsKKyAgICAgICAgaWYgKCB1c2VyVmlzaWJsZSAhPSAwICkgewor
ICAgICAgICAgICAgcmV0dXJuIHVzZXJWaXNpYmxlOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgaWYgKCAhcGFyZW50cy5pc0VtcHR5KCkgKSB7CisgICAgICAgICAgICAg
ICAgZm9yICggUVNldDxUeXBlVmlzaWJpbGl0eU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBwYXJlbnRz
LmJlZ2luKCk7CisgICAgICAgICAgICAgICAgICAgICBpdCAhPSBwYXJlbnRzLmVuZCgpOyArK2l0
ICkgeworICAgICAgICAgICAgICAgICAgICAvLyBhdm9pZCBlbmRsZXNzIGxvb3BzCisgICAgICAg
ICAgICAgICAgICAgIGlmKCB2aXNpdGVkTm9kZXMuY29udGFpbnMoKml0KSApCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRlZE5vZGVz
Lmluc2VydCggKml0ICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggKCppdCktPnVwZGF0ZVVz
ZXJWaXNpYmlsaXR5KCB2aXNpdGVkTm9kZXMgKSA9PSAxICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlclZpc2libGUgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIHVzZXJWaXNpYmxlID09IDAgKSB7CisgICAgICAgICAgICAgICAgLy8g
ZGVmYXVsdCB0byBpbnZpc2libGUKKyAgICAgICAgICAgICAgICB1c2VyVmlzaWJsZSA9IC0xOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAga0RlYnVnKCkgPDwgIlNldHRpbmcgbmFvOnVzZXJW
aXNpYmxlIG9mIiA8PCB1cmkudG9TdHJpbmcoKSA8PCAoIHVzZXJWaXNpYmxlID09IDEgKTsKKyAg
ICAgICAgICAgIHJldHVybiB1c2VyVmlzaWJsZTsKKyAgICAgICAgfQorICAgIH0KK307CisKK1R5
cGVWaXNpYmlsaXR5VHJlZTo6VHlwZVZpc2liaWxpdHlUcmVlKCBTb3ByYW5vOjpNb2RlbCogbW9k
ZWwgKQorICAgIDogbV9tb2RlbChtb2RlbCkKK3sKK30KKworVHlwZVZpc2liaWxpdHlUcmVlOjp+
VHlwZVZpc2liaWxpdHlUcmVlKCkKK3sKKyAgICBRTXV0ZXhMb2NrZXIgbG9jayggJm1fbXV0ZXgg
KTsKK30KKwordm9pZCBUeXBlVmlzaWJpbGl0eVRyZWU6OnJlYnVpbGRUcmVlKCkKK3sKKyAgICBR
TXV0ZXhMb2NrZXIgbG9jayggJm1fbXV0ZXggKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBtX3Zp
c2liaWxpdHlIYXNoLmNsZWFyKCk7CisKKyAgICAvLyB3ZSBidWlsZCBhIHRlbXBvcmFyeSBoZWxw
ZXIgdHJlZQorICAgIFFIYXNoPFFVcmwsIFR5cGVWaXNpYmlsaXR5Tm9kZSo+IHRyZWU7CisKKyAg
ICBjb25zdCBRU3RyaW5nIHF1ZXJ5CisgICAgICAgID0gUVN0cmluZzo6ZnJvbUxhdGluMSggInNl
bGVjdCBkaXN0aW5jdCA/ciA/cCA/diB3aGVyZSB7ICIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAieyA/ciBhIHJkZnM6Q2xhc3MgLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpzdWJDbGFzc09mID9wIC4gP3AgYSByZGZzOkNsYXNz
IC4gfSAuIH0gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVTklPTiAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInsgP3IgYSByZGY6UHJvcGVydHkgLiAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpzdWJQcm9wZXJ0
eU9mID9wIC4gP3AgYSByZGY6UHJvcGVydHkgLiB9IC4gfSAiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgJTEgP3YgLiB9IC4gIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJGSUxURVIoP3IhPXJkZnM6UmVzb3VyY2UpIC4gIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ9IiApCisgICAgICAgICAgICAuYXJnKCBTb3ByYW5vOjpO
b2RlOjpyZXNvdXJjZVRvTjMoIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUo
KSApICk7CisgICAga0RlYnVnKCkgPDwgcXVlcnk7CisgICAgU29wcmFubzo6UXVlcnlSZXN1bHRJ
dGVyYXRvciBpdAorICAgICAgICAgICAgPSBtX21vZGVsLT5leGVjdXRlUXVlcnkoIHF1ZXJ5LCBT
b3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApOworICAgIHdoaWxlKCBpdC5uZXh0
KCkgKSB7CisgICAgICAgIGNvbnN0IFFVcmwgciA9IGl0WyJyIl0udXJpKCk7CisgICAgICAgIGNv
bnN0IFNvcHJhbm86Ok5vZGUgcCA9IGl0WyJwIl07CisgICAgICAgIGNvbnN0IFNvcHJhbm86Ok5v
ZGUgdiA9IGl0WyJ2Il07CisKKyAgICAgICAgaWYgKCAhdHJlZS5jb250YWlucyggciApICkgewor
ICAgICAgICAgICAgVHlwZVZpc2liaWxpdHlOb2RlKiByX3V2biA9IG5ldyBUeXBlVmlzaWJpbGl0
eU5vZGUoIHIgKTsKKyAgICAgICAgICAgIHRyZWUuaW5zZXJ0KCByLCByX3V2biApOworICAgICAg
ICB9CisgICAgICAgIGlmKCB2LmlzTGl0ZXJhbCgpICkKKyAgICAgICAgICAgIHRyZWVbcl0tPnVz
ZXJWaXNpYmxlID0gKHYubGl0ZXJhbCgpLnRvQm9vbCgpID8gMSA6IC0xKTsKKyAgICAgICAgaWYg
KCBwLmlzUmVzb3VyY2UoKSAmJgorICAgICAgICAgICAgICAgIHAudXJpKCkgIT0gciAmJgorICAg
ICAgICAgICAgICAgIHAudXJpKCkgIT0gU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3Vy
Y2UoKSApIHsKKyAgICAgICAgICAgIGlmICggIXRyZWUuY29udGFpbnMoIHAudXJpKCkgKSApIHsK
KyAgICAgICAgICAgICAgICBUeXBlVmlzaWJpbGl0eU5vZGUqIHBfdXZuID0gbmV3IFR5cGVWaXNp
YmlsaXR5Tm9kZSggcC51cmkoKSApOworICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KCBwLnVy
aSgpLCBwX3V2biApOworICAgICAgICAgICAgICAgIHRyZWVbcl0tPnBhcmVudHMuaW5zZXJ0KCBw
X3V2biApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgdHJlZVtyXS0+cGFyZW50cy5pbnNlcnQoIHRyZWVbcC51cmkoKV0gKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIG1ha2Ugc3VyZSByZGZzOlJlc291cmNlIGlz
IHZpc2libGUgYnkgZGVmYXVsdAorICAgIFR5cGVWaXNpYmlsaXR5Tm9kZSogcmRmc1Jlc291cmNl
Tm9kZSA9IDA7CisgICAgUUhhc2g8UVVybCwgVHlwZVZpc2liaWxpdHlOb2RlKj46Oml0ZXJhdG9y
IHJkZnNSZXNvdXJjZUl0ID0gdHJlZS5maW5kKFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJl
c291cmNlKCkpOworICAgIGlmKCByZGZzUmVzb3VyY2VJdCA9PSB0cmVlLmVuZCgpICkgeworICAg
ICAgICByZGZzUmVzb3VyY2VOb2RlID0gbmV3IFR5cGVWaXNpYmlsaXR5Tm9kZShTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKTsKKyAgICAgICAgdHJlZS5pbnNlcnQoIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCksIHJkZnNSZXNvdXJjZU5vZGUgKTsKKyAg
ICB9CisgICAgZWxzZSB7CisgICAgICAgIHJkZnNSZXNvdXJjZU5vZGUgPSByZGZzUmVzb3VyY2VJ
dC52YWx1ZSgpOworICAgIH0KKyAgICBpZiggcmRmc1Jlc291cmNlTm9kZS0+dXNlclZpc2libGUg
PT0gMCApIHsKKyAgICAgICAgcmRmc1Jlc291cmNlTm9kZS0+dXNlclZpc2libGUgPSAxOworICAg
IH0KKyAgICAvLyBhZGQgcmRmczpSZXNvdXJjZSBhcyBwYXJlbnQgZm9yIGFsbCB0b3AtbGV2ZWwg
Y2xhc3NlcworICAgIGZvciAoIFFIYXNoPFFVcmwsIFR5cGVWaXNpYmlsaXR5Tm9kZSo+OjppdGVy
YXRvciBpdCA9IHRyZWUuYmVnaW4oKTsKKyAgICAgICAgICBpdCAhPSB0cmVlLmVuZCgpOyArK2l0
ICkgeworICAgICAgICBpZiggaXQudmFsdWUoKSAhPSByZGZzUmVzb3VyY2VOb2RlICYmIGl0LnZh
bHVlKCktPnBhcmVudHMuaXNFbXB0eSgpICkgeworICAgICAgICAgICAgaXQudmFsdWUoKS0+cGFy
ZW50cy5pbnNlcnQoIHJkZnNSZXNvdXJjZU5vZGUgKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIGZpbmFsbHkgZGV0ZXJtaW5lIHZpc2liaWxpdHkgb2YgYWxsIG5vZGVzCisgICAgZm9yICgg
UUhhc2g8UVVybCwgVHlwZVZpc2liaWxpdHlOb2RlKj46Oml0ZXJhdG9yIGl0ID0gdHJlZS5iZWdp
bigpOworICAgICAgICAgIGl0ICE9IHRyZWUuZW5kKCk7ICsraXQgKSB7CisgICAgICAgIFFTZXQ8
VHlwZVZpc2liaWxpdHlOb2RlKj4gdmlzaXRlZE5vZGVzOworICAgICAgICBtX3Zpc2liaWxpdHlI
YXNoLmluc2VydChpdC5rZXkoKSwgaXQudmFsdWUoKS0+dXBkYXRlVXNlclZpc2liaWxpdHkoIHZp
c2l0ZWROb2RlcyApID09IDEgKTsKKyAgICB9CisKKyAgICAvLyBnZXQgcmlkIG9mIHRoZSB0ZW1w
IHRyZWUKKyAgICBxRGVsZXRlQWxsKHRyZWUpOworfQorCitib29sIFR5cGVWaXNpYmlsaXR5VHJl
ZTo6aXNWaXNpYmxlKGNvbnN0IFFVcmwgJnR5cGUpIGNvbnN0Cit7CisgICAgUU11dGV4TG9ja2Vy
IGxvY2soICZtX211dGV4ICk7CisKKyAgICBRSGFzaDxRVXJsLCBib29sPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3Zpc2liaWxpdHlIYXNoLmNvbnN0RmluZCh0eXBlKTsKKyAgICBpZiggaXQgIT0g
bV92aXNpYmlsaXR5SGFzaC5jb25zdEVuZCgpICkgeworICAgICAgICByZXR1cm4gKml0OworICAg
IH0KKyAgICBlbHNlIHsKKyAgICAgICAga0RlYnVnKCkgPDwgIkNvdWxkIG5vdCBmaW5kIHR5cGUi
IDw8IHR5cGUgPDwgImluIHRyZWUuIERlZmF1bHRpbmcgdG8gdmlzaWJsZS4iOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmls
aXR5dHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvdHlwZXZpc2liaWxpdHl0
cmVlLmgJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmlsaXR5dHJl
ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisvKgorICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIE5lcG9tdWsgS0RFIHByb2plY3QuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgU2Vi
YXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorCisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24g
Mywgb3IgYW55CisgICBsYXRlciB2ZXJzaW9uIGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9m
IEtERSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nlc3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVyc2hp
cCBvZiBLREUgZS5WLiksIHdoaWNoIHNoYWxsCisgICBhY3QgYXMgYSBwcm94eSBkZWZpbmVkIGlu
IFNlY3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxpY2Vuc2UuCisKKyAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8K
KworI2lmbmRlZiBUWVBFVklTSUJJTElUWVRSRUVfSAorI2RlZmluZSBUWVBFVklTSUJJTElUWVRS
RUVfSAorCisjaW5jbHVkZSA8UXRDb3JlL1FVcmw+CisjaW5jbHVkZSA8UXRDb3JlL1FIYXNoPgor
I2luY2x1ZGUgPFF0Q29yZS9RTXV0ZXg+CisKK25hbWVzcGFjZSBTb3ByYW5vIHsKK2NsYXNzIE1v
ZGVsOworfQorCisvKioKKyAqIEJ1aWxkcyBhIHR5cGUgdHJlZSB0aGF0IGFsbG93cyB0byBjaGVj
ayB0aGUgbmFvOnVzZXJWaXNpYmxlCisgKiB2YWx1ZSBmb3IgZWFjaCBleGlzdGluZyB0eXBlLgor
ICovCitjbGFzcyBUeXBlVmlzaWJpbGl0eVRyZWUKK3sKK3B1YmxpYzoKKyAgICBUeXBlVmlzaWJp
bGl0eVRyZWUoIFNvcHJhbm86Ok1vZGVsKiBtb2RlbCApOworICAgIH5UeXBlVmlzaWJpbGl0eVRy
ZWUoKTsKKworICAgIHZvaWQgcmVidWlsZFRyZWUoKTsKKworICAgIC8qKgorICAgICAqIENoZWNr
IGlmIHRoZSBzcGVjaWZpZWQgdHlwZSBpcyB2aXNpYmxlLgorICAgICAqLworICAgIGJvb2wgaXNW
aXNpYmxlKCBjb25zdCBRVXJsJiB0eXBlICkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU29wcmFu
bzo6TW9kZWwqIG1fbW9kZWw7CisgICAgY2xhc3MgVHlwZVZpc2liaWxpdHlOb2RlOworICAgIFFI
YXNoPFFVcmwsIGJvb2w+IG1fdmlzaWJpbGl0eUhhc2g7CisgICAgbXV0YWJsZSBRTXV0ZXggbV9t
dXRleDsKK307CisKKyNlbmRpZiAvLyBUWVBFVklTSUJJTElUWVRSRUVfSApJbmRleDogc2Vydmlj
ZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdl
L3JlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAxMjEzOTQwKQorKysgc2VydmljZXMvc3RvcmFnZS9y
ZXBvc2l0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5jbHVk
ZSAicmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgIm1vZGVsY29weWpvYi5oIgorI2luY2x1ZGUgImNy
YXBweWluZmVyZW5jZXIyLmgiCiAKICNpbmNsdWRlIDxTb3ByYW5vL0JhY2tlbmQ+CiAjaW5jbHVk
ZSA8U29wcmFuby9QbHVnaW5NYW5hZ2VyPgpAQCAtNjksNiArNzAsOSBAQAogewogICAgIGtEZWJ1
ZygpIDw8IG1fbmFtZTsKIAorICAgIGRlbGV0ZSBtX2luZmVyZW5jZXI7CisgICAgbV9pbmZlcmVu
Y2VyID0gMDsKKwogICAgIGRlbGV0ZSBtX21vZGVsQ29weUpvYjsKICAgICBtX21vZGVsQ29weUpv
YiA9IDA7CiAKQEAgLTE2NSw5ICsxNjksMTMgQEAKICAgICAvLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KICAgICBTb3ByYW5vOjpVdGlsOjpTaWduYWxDYWNoZU1vZGVsKiBzY20g
PSBuZXcgU29wcmFubzo6VXRpbDo6U2lnbmFsQ2FjaGVNb2RlbCggbV9tb2RlbCApOwogICAgIHNj
bS0+c2V0UGFyZW50KHRoaXMpOyAvLyBtZW1vcnkgbWFuYWdlbWVudAotCiAgICAgc2V0UGFyZW50
TW9kZWwoIHNjbSApOwogCisgICAgLy8gY3JlYXRlIHRoZSBjcmFwcHkgaW5mZXJlbmNlIG1vZGVs
IHdoaWNoIGhhbmRsZXMgcmRmczpzdWJDbGFzc09mIG9ubHkgLT4gd2Ugb25seSB1c2UgdGhpcyB0
byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIFJlc291cmNlVHlwZVRlcm1zCisgICAgLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgbV9pbmZlcmVuY2VyID0gbmV3IENyYXBw
eUluZmVyZW5jZXIyKCBzY20gKTsKKyAgICBzZXRQYXJlbnRNb2RlbChtX2luZmVyZW5jZXIpOwor
CiAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byBjb252ZXJ0CiAgICAgLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CiAgICAgYm9vbCBjb252ZXJ0aW5nRGF0YSA9IGZhbHNlOwpA
QCAtMzM3LDcgKzM0NSwxOCBAQAogICAgIC8vIG5lZWRzIHRvIGJlIGFkZHJlc3NlZCBhcyB3ZWxs
CiAgICAgc2V0dGluZ3MgPDwgU29wcmFubzo6QmFja2VuZFNldHRpbmcoICJTZXJ2ZXJUaHJlYWRz
IiwgMTAwICk7CiAKKyAgICAvLyBOZXZlciB0YWtlIG1vcmUgdGhhbiA1IG1pbnV0ZXMgdG8gYW5z
d2VyIGEgcXVlcnkgKHRoaXMgaXMgdG8gZmlsdGVyIG91dCBicm9rZW4gcXVlcmllcyBhbmQgYnVn
cyBpbiBWaXJ0dW9zbydzIHF1ZXJ5IG9wdGltaXplcikKKyAgICAvLyB0cnVlZzogV2UgY2Fubm90
IGFjdGl2YXRlIHRoaXMgeWV0LiAxLiBWaXJ0dW9zbyA8IDYuMyBjcmFzaGVzIGFuZCAyLiBldmVu
IG9wZW4gY3Vyc29ycyBhcmUgc3ViamVjdCB0byB0aGUgdGltZW91dCB3aGljaCBpcyByZWFsbHkK
KyAgICAvLyAgICAgICAgbm90IHdoYXQgd2Ugd2FudCEKKy8vICAgIHNldHRpbmdzIDw8IFNvcHJh
bm86OkJhY2tlbmRTZXR0aW5nKCAiUXVlcnlUaW1lb3V0IiwgNSo2MDAwMCApOworCiAgICAgcmV0
dXJuIHNldHRpbmdzOwogfQogCit2b2lkIE5lcG9tdWs6OlJlcG9zaXRvcnk6OnVwZGF0ZUluZmVy
ZW5jZSgpCit7CisgICAgbV9pbmZlcmVuY2VyLT51cGRhdGVJbmZlcmVuY2VJbmRleCgpOworICAg
IG1faW5mZXJlbmNlci0+dXBkYXRlQWxsUmVzb3VyY2VzKCk7Cit9CisKICNpbmNsdWRlICJyZXBv
c2l0b3J5Lm1vYyIKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIuY3BwCShy
ZXZpc2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFnZS9jcmFwcHlpbmZlcmVuY2VyMi5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjQyIEBACisvKgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIE5lcG9tdWsgS0RFIHByb2plY3QuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFu
IFRydWVnIDx0cnVlZ0BrZGUub3JnPgorCisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNp
b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywgb3Ig
YW55CisgICBsYXRlciB2ZXJzaW9uIGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBl
LlYuIChvciBpdHMKKyAgIHN1Y2Nlc3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBL
REUgZS5WLiksIHdoaWNoIHNoYWxsCisgICBhY3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rp
b24gNiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxpY2Vuc2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2lu
Y2x1ZGUgImNyYXBweWluZmVyZW5jZXIyLmgiCisjaW5jbHVkZSAidHlwZXZpc2liaWxpdHl0cmVl
LmgiCisKKyNpbmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvTlJMPgorI2luY2x1ZGUgPFNvcHJh
bm8vVm9jYWJ1bGFyeS9OQU8+CisjaW5jbHVkZSA8U29wcmFuby9Wb2NhYnVsYXJ5L1JERj4KKyNp
bmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvUkRGUz4KKyNpbmNsdWRlIDxTb3ByYW5vL1N0YXRl
bWVudD4KKyNpbmNsdWRlIDxTb3ByYW5vL1N0YXRlbWVudEl0ZXJhdG9yPgorI2luY2x1ZGUgPFNv
cHJhbm8vTm9kZT4KKyNpbmNsdWRlIDxTb3ByYW5vL05vZGVJdGVyYXRvcj4KKyNpbmNsdWRlIDxT
b3ByYW5vL0dyYXBoPgorI2luY2x1ZGUgPFNvcHJhbm8vUXVlcnlSZXN1bHRJdGVyYXRvcj4KKwor
I2luY2x1ZGUgPFF0Q29yZS9RVGltZT4KKyNpbmNsdWRlIDxRdENvcmUvUU11dGV4PgorI2luY2x1
ZGUgPFF0Q29yZS9RTXV0ZXhMb2NrZXI+CisjaW5jbHVkZSA8UXRDb3JlL1FUaHJlYWQ+CisKKyNp
bmNsdWRlIDxrZGVidWcuaD4KKworCisvKioKKyAqIFNpbXBsZSBoZWxwZXIgdGhyZWFkIHdoaWNo
IHVwZGF0ZXMgdGhlIHN1YmNsYXNzIGFuZCB2aXNpYmlsaXR5IGluZmVyZW5jZSBvbiBhbGwgcmVz
b3VyY2VzCisgKiBpbiB0aGUgZGF0YWJhc2UuIFRoaXMgaXMgZG9uZSBpbiBhIHNlcGFyYXRlIHRo
cmVhZCBzaW5jZSBpdCB0YWtlcyB1cCB0byBoYWxmIGFuIGhvdXIgdGhlIGZpcnN0IHRpbWUuCisg
Ki8KK2NsYXNzIENyYXBweUluZmVyZW5jZXIyOjpVcGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQgOiBw
dWJsaWMgUVRocmVhZAoreworcHVibGljOgorICAgIFVwZGF0ZUFsbFJlc291cmNlc1RocmVhZCgg
Q3JhcHB5SW5mZXJlbmNlcjIqIHBhcmVudCApCisgICAgICAgIDogUVRocmVhZChwYXJlbnQpLAor
ICAgICAgICAgIG1fY2FuY2VsZWQoZmFsc2UpLAorICAgICAgICAgIG1fbW9kZWwocGFyZW50KSB7
CisgICAgfQorCisgICAgdm9pZCBjYW5jZWwoKSB7CisgICAgICAgIGtEZWJ1ZygpOworICAgICAg
ICBtX2NhbmNlbGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHJ1bigpIHsKKyAgICAgICAg
a0RlYnVnKCk7CisgICAgICAgIG1fY2FuY2VsZWQgPSBmYWxzZTsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgIFFUaW1lIHRpbWVyOworICAgICAgICB0aW1lci5zdGFydCgpOworICAgICAgICBpbnQg
Y250ID0gMDsKKyNlbmRpZgorICAgICAgICAvLyB1cGRhdGluZyBhbGwgcmVzb3VyY2VzIHRha2Vz
IGEgbG90IG9mIHRpbWUuIFRodXMsIHdlIHVzZSBhbiBvcHRpbWl6YXRpb246IHNpbXBseSBtYWtl
IGFsbCBmaWxlcyBhbmQgcGltIHJlc291cmNlcyB2aXNpYmxlCisgICAgICAgIG1fbW9kZWwtPmV4
ZWN1dGVRdWVyeSggUVN0cmluZzo6ZnJvbUxhdGluMSgiaW5zZXJ0IGludG8gZ3JhcGggJTEgeyA/
ciAlMiAxIC4gfSB3aGVyZSB7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICI/ciBhID90IC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInsgP3IgYSA8aHR0cDovL3d3dy5zZW1hbnRpY2Rlc2t0
b3Aub3JnL29udG9sb2dpZXMvMjAwNy8wMy8yMi9uZm8jRmlsZURhdGFPYmplY3Q+IC4gfSBVTklP
TiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
eyA/ciBhIDxodHRwOi8vd3d3LnNlbWFudGljZGVza3RvcC5vcmcvb250b2xvZ2llcy8yMDA3LzAz
LzIyL25tbyNFbWFpbD4gLiB9IFVOSU9OICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ7ID9yIGEgPGh0dHA6Ly93d3cuc2VtYW50aWNkZXNrdG9w
Lm9yZy9vbnRvbG9naWVzLzIwMDcvMDMvMjIvbmNvI1BlcnNvbkNvbnRhY3Q+IC4gfSBVTklPTiAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyA/
ciBhIDxodHRwOi8vd3d3LnNlbWFudGljZGVza3RvcC5vcmcvb250b2xvZ2llcy8yMDA3LzAzLzIy
L25jbyNDb250YWN0PiAuIH0gVU5JT04gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInsgP3IgYSA8aHR0cDovL3d3dy5zZW1hbnRpY2Rlc2t0b3Au
b3JnL29udG9sb2dpZXMvMjAwNy8wMy8yMi9uY28jRW1haWxBZGRyZXNzPiAuIH0gIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZJTFRFUighYmlm
OmV4aXN0cygoc2VsZWN0ICgxKSB3aGVyZSB7ID9yICUyID92IC4gfSkpKSAuIH0gIiApCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKCBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRv
TjMoIG1fbW9kZWwtPmNyYXBweUluZmVyZW5jZUNvbnRleHQoKSApLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCkgKSApLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwgKTsKKworI2lm
bmRlZiBOREVCVUcKKyAgICAgICAga0RlYnVnKCkgPDwgImZpbGVzIGFuZCBwaW0gcmVzb3VyY2Vz
IHVwZGF0ZWQuIEVsYXBzZWQ6IiA8PCB0aW1lci5lbGFwc2VkKCkvMTAwMC4wIDw8ICJzZWMiOwor
I2VuZGlmCisKKyAgICAgICAgLy8gbm93IHVwZGF0ZSBhbGwgdGhlIHJlc3Qgb2YgdGhlIHJlc291
cmNlcworICAgICAgICBRTGlzdDxTb3ByYW5vOjpOb2RlPiByZXN1bHRzOworICAgICAgICBkbyB7
CisgICAgICAgICAgICAvLyBmb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgd2Ugb25seSBoYW5k
bGUgcmVzb3VyY2VzIGluIEluc3RhbmNlQmFzZXMuIFRoZSByZXN0IHdlIGFsbW9zdCBuZXZlciBx
dWVyeSBhbnl3YXkuCisgICAgICAgICAgICByZXN1bHRzID0gbV9tb2RlbC0+ZXhlY3V0ZVF1ZXJ5
KCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgZGlzdGluY3QgP3Igd2hlcmUgeyBncmFwaCA/
ZyB7ID9yIGEgP3QgLiB9IC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRklMVEVSKD9nICE9ICUxKSAuICIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInsgP2cgYSAlMiAuIH0gVU5JT04geyA/ZyBhICUzIC4gfSAuICIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZJTFRF
UighYmlmOmV4aXN0cygoc2VsZWN0ICgxKSB3aGVyZSB7ID9yICU0ID92IC4gfSkpKSAuIH0gIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiTElNSVQgMTAwMCIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAuYXJnKCBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIG1fbW9kZWwtPmNy
YXBweUluZmVyZW5jZUNvbnRleHQoKSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIFNvcHJhbm86
OlZvY2FidWxhcnk6Ok5STDo6RGlzY2FyZGFibGVJbnN0YW5jZUJhc2UoKSApLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpy
ZXNvdXJjZVRvTjMoIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5STDo6SW5zdGFuY2VCYXNlKCkgKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFu
bzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNp
YmxlKCkgKSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
b3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApCisgICAgICAgICAgICAgICAgICAg
IC5pdGVyYXRlQmluZGluZ3MoMCkuYWxsRWxlbWVudHMoKTsKKyAgICAgICAgICAgIFFfRk9SRUFD
SCggY29uc3QgU29wcmFubzo6Tm9kZSYgbiwgcmVzdWx0cyApIHsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgICAgICAgICAgKytjbnQ7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiggbV9jYW5j
ZWxlZCApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgYm9v
bCBoYXZlVmlzaWJsZVR5cGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBTb3ByYW5vOjpRdWVy
eVJlc3VsdEl0ZXJhdG9yIGl0CisgICAgICAgICAgICAgICAgICAgICAgICA9IG1fbW9kZWwtPmV4
ZWN1dGVRdWVyeSggUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0ID90IHdoZXJlIHsgZ3JhcGgg
P2cgeyAlMSBhID90IC4gfSAuIEZJTFRFUig/ZyE9JTIpIC4gfSIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKFNvcHJhbm86Ok5vZGU6OnJlc291
cmNlVG9OMyhuLnVyaSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKG1fbW9kZWwtPmNyYXBw
eUluZmVyZW5jZUNvbnRleHQoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwpOworICAg
ICAgICAgICAgICAgIHdoaWxlKCFtX2NhbmNlbGVkICYmIGl0Lm5leHQoKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiggbV9tb2RlbC0+aXNUeXBlVmlzaWJsZShpdFswXS51cmkoKSkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBoYXZlVmlzaWJsZVR5cGUgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgbV9tb2RlbC0+c2V0VmlzaWJpbGl0eSggbi51cmkoKSwg
aGF2ZVZpc2libGVUeXBlID8gQ3JhcHB5SW5mZXJlbmNlcjI6OlZpc2libGUgOiBDcmFwcHlJbmZl
cmVuY2VyMjo6Tm9uVmlzaWJsZSApOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlKCAh
bV9jYW5jZWxlZCAmJiAhcmVzdWx0cy5pc0VtcHR5KCkgKTsKKworCisjaWZuZGVmIE5ERUJVRwor
ICAgICAgICBrRGVidWcoKSA8PCBjbnQgPDwgInJlc291cmNlcyB1cGRhdGVkLiBFbGFwc2VkOiIg
PDwgdGltZXIuZWxhcHNlZCgpLzEwMDAuMCA8PCAic2VjIjsKKyNlbmRpZgorICAgIH0KKworcHJp
dmF0ZToKKyAgICBib29sIG1fY2FuY2VsZWQ7CisgICAgQ3JhcHB5SW5mZXJlbmNlcjIqIG1fbW9k
ZWw7Cit9OworCisKK2NsYXNzIENyYXBweUluZmVyZW5jZXIyOjpQcml2YXRlCit7CitwdWJsaWM6
CisgICAgUHJpdmF0ZSgpCisgICAgICAgIDogbV91cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQoMCkg
eworICAgIH0KKworICAgIC8vLyBnZXQgdGhlIGxpc3Qgb2Ygc3VwZXIgdHlwZXMgZm9yIFxwIHR5
cGUKKyAgICBRU2V0PFFVcmw+IHN1cGVyQ2xhc3NlcyggY29uc3QgUVVybCYgdHlwZSApIGNvbnN0
OworCisgICAgLy8vIENoZWNrIGlmIGEgcmVzb3VyY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHR5cGVz
IGlzIHZpc2libGUuCisgICAgYm9vbCBpc1Zpc2libGVGcm9tVHlwZXMoIGNvbnN0IFFTZXQ8UVVy
bD4mIHR5cGVzICkgY29uc3Q7CisKKyAgICAvLy8gUGVyZm9ybXMgYSBxdWVyeSB0byByZXRyaWV2
ZSBhbGwgdHlwZXMgdGhhdCB3ZXJlIG5vdCBhZGRlZCBieSB1cworICAgIFFTZXQ8UVVybD4gcXVl
cnlSZXNvdXJjZVR5cGVzKCBjb25zdCBRVXJsJiByZXNvdXJjZSApIGNvbnN0OworCisgICAgLy8v
IHVzZWQgdG8gYnVpbGQgbV9zdXBlckNsYXNzZXMgKGFuZCBub3RoaW5nIGVsc2UhKQorICAgIFFT
ZXQ8UVVybD4gYnVpbGRTdXBlckNsYXNzZXNIYXNoKCBjb25zdCBRVXJsJiB0eXBlLCBRU2V0PFFV
cmw+JiB2aXNpdGVkVHlwZXMsIGNvbnN0IFFNdWx0aUhhc2g8UVVybCwgUVVybD4mIHJkZnNTdWJD
bGFzc1JlbGF0aW9ucyApOworCisgICAgUUhhc2g8UVVybCwgUVNldDxRVXJsPiA+IG1fc3VwZXJD
bGFzc2VzOworICAgIFR5cGVWaXNpYmlsaXR5VHJlZSogbV90eXBlVmlzaWJpbGl0eVRyZWU7Cisg
ICAgUU11dGV4IG1fbXV0ZXg7CisKKyAgICBVcGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQqIG1fdXBk
YXRlQWxsUmVzb3VyY2VzVGhyZWFkOworCisgICAgUVVybCBtX2luZmVyZW5jZUNvbnRleHQ7CisK
KyAgICBDcmFwcHlJbmZlcmVuY2VyMiogcTsKK307CisKKworCitRU2V0PFFVcmw+IENyYXBweUlu
ZmVyZW5jZXIyOjpQcml2YXRlOjpzdXBlckNsYXNzZXMoIGNvbnN0IFFVcmwmIHR5cGUgKSBjb25z
dAoreworICAgIFFIYXNoPFFVcmwsIFFTZXQ8UVVybD4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3N1cGVyQ2xhc3Nlcy5jb25zdEZpbmQodHlwZSk7CisgICAgaWYoIGl0ICE9IG1fc3VwZXJDbGFz
c2VzLmNvbnN0RW5kKCkgKSB7CisgICAgICAgIHJldHVybiBpdC52YWx1ZSgpOworICAgIH0KKyAg
ICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFFTZXQ8UVVybD4oKSA8PCBTb3ByYW5vOjpWb2NhYnVs
YXJ5OjpSREZTOjpSZXNvdXJjZSgpOworICAgIH0KK30KKworYm9vbCBDcmFwcHlJbmZlcmVuY2Vy
Mjo6UHJpdmF0ZTo6aXNWaXNpYmxlRnJvbVR5cGVzKGNvbnN0IFFTZXQ8UVVybD4gJnR5cGVzKSBj
b25zdAoreworICAgIC8vIFdlIG5lZWQgdG8gZXh0cmFjdCB0aGUgbGVhZiB0eXBlcyBpbiB0aGUg
c3ViZ3JhcGggdGhhdCBpcyB0eXBlcworICAgIC8vIGFzIHRob3NlIGFyZSB0aGUgdHlwZXMgdGhh
dCBkZWZpbmUgaWYgdGhlIHJlc291cmNlIHdpbGwgYmUgdmlzaWJsZQorCisgICAgLy8gVE9ETzog
ZG8gdGhlIGZvbGxvd2luZyBpbiBhbiBlZmZpY2llbnQgd2F5CisgICAgLy8gd2UgcmVtb3ZlIGFs
bCBzdXBlcnR5cGVzIGZyb20gdGhlIHNldCBvZiB0eXBlcyBhbmQgYXJlIGxlZnQgd2l0aCB0aGUg
bGVhZiB0eXBlcworICAgIFFTZXQ8UVVybD4gbGVhZlR5cGVzKHR5cGVzKTsKKyAgICBRX0ZPUkVB
Q0goY29uc3QgUVVybCYgdHlwZSwgdHlwZXMpIHsKKyAgICAgICAgbGVhZlR5cGVzIC09IHN1cGVy
Q2xhc3Nlcyh0eXBlKTsKKyAgICAgICAgaWYobGVhZlR5cGVzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIGlmIHRoZXJlIGlzIG9uZSBsZWFmIHR5cGUgbGVm
dCB0aGF0IGlzIHZpc2libGUgdGhlIHJlc291cmNlIGlzIHZpc2libGUsIHRvbworICAgIFFfRk9S
RUFDSCggY29uc3QgUVVybCYgdHlwZSwgbGVhZlR5cGVzICkgeworICAgICAgICBpZiggbV90eXBl
VmlzaWJpbGl0eVRyZWUtPmlzVmlzaWJsZSh0eXBlKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gbm8gdmlzaWJsZSB0eXBlIGZvdW5kCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitRU2V0PFFVcmw+IENyYXBweUluZmVyZW5jZXIyOjpQcml2
YXRlOjpxdWVyeVJlc291cmNlVHlwZXMoY29uc3QgUVVybCAmcmVzb3VyY2UpIGNvbnN0Cit7Cisg
ICAgUVNldDxRVXJsPiByZXNvdXJjZVR5cGVzOworICAgIFNvcHJhbm86OlF1ZXJ5UmVzdWx0SXRl
cmF0b3IgaXQKKyAgICAgICAgICAgID0gcS0+cGFyZW50TW9kZWwoKS0+ZXhlY3V0ZVF1ZXJ5KCBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgP3Qgd2hlcmUgeyBncmFwaCA/ZyB7ICUxIGEgP3Qg
LiB9IC4gRklMVEVSKD9nIT0lMikgLiB9IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC5hcmcoU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKHJlc291cmNl
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29w
cmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKG1faW5mZXJlbmNlQ29udGV4dCkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6UXVlcnk6OlF1ZXJ5
TGFuZ3VhZ2VTcGFycWwpOworICAgIHdoaWxlKGl0Lm5leHQoKSkgeworICAgICAgICByZXNvdXJj
ZVR5cGVzIDw8IGl0WzBdLnVyaSgpOworICAgIH0KKworICAgIHJldHVybiByZXNvdXJjZVR5cGVz
OworfQorCitRU2V0PFFVcmw+IENyYXBweUluZmVyZW5jZXIyOjpQcml2YXRlOjpidWlsZFN1cGVy
Q2xhc3Nlc0hhc2goIGNvbnN0IFFVcmwmIHR5cGUsIFFTZXQ8UVVybD4mIHZpc2l0ZWRUeXBlcywg
Y29uc3QgUU11bHRpSGFzaDxRVXJsLCBRVXJsPiYgcmRmc1N1YkNsYXNzUmVsYXRpb25zID0gUU11
bHRpSGFzaDxRVXJsLCBRVXJsPigpICkKK3sKKyAgICBRSGFzaDxRVXJsLCBRU2V0PFFVcmw+ID46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdXBlckNsYXNzZXMuY29uc3RGaW5kKHR5cGUpOworICAg
IGlmKCBpdCA9PSBtX3N1cGVyQ2xhc3Nlcy5jb25zdEVuZCgpICkgeworICAgICAgICBRU2V0PFFV
cmw+IHN1cGVyVHlwZXM7CisgICAgICAgIGZvcihRTXVsdGlIYXNoPFFVcmwsIFFVcmw+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IHJkZnNTdWJDbGFzc1JlbGF0aW9ucy5jb25zdEZpbmQodHlwZSk7Cisg
ICAgICAgICAgICBpdCAhPSByZGZzU3ViQ2xhc3NSZWxhdGlvbnMuY29uc3RFbmQoKSAmJiBpdC5r
ZXkoKSA9PSB0eXBlOyArK2l0KSB7CisgICAgICAgICAgICAvLyBhdm9pZCBlbmRsZXNzIGxvb3Bz
IGluIGNhc2Ugd2UgaGF2ZSBjaXJjdWxhciBoaWVyYXJjaGllcworICAgICAgICAgICAgaWYoICF2
aXNpdGVkVHlwZXMuY29udGFpbnMoIGl0LnZhbHVlKCkgKSApIHsKKyAgICAgICAgICAgICAgICB2
aXNpdGVkVHlwZXMgPDwgaXQudmFsdWUoKTsKKyAgICAgICAgICAgICAgICBzdXBlclR5cGVzIDw8
IGl0LnZhbHVlKCk7CisgICAgICAgICAgICAgICAgc3VwZXJUeXBlcyArPSBidWlsZFN1cGVyQ2xh
c3Nlc0hhc2goIGl0LnZhbHVlKCksIHZpc2l0ZWRUeXBlcywgcmRmc1N1YkNsYXNzUmVsYXRpb25z
ICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9zdXBlckNsYXNzZXMuaW5z
ZXJ0KCB0eXBlLCBzdXBlclR5cGVzICk7CisgICAgICAgIHJldHVybiBzdXBlclR5cGVzOworICAg
IH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGl0LnZhbHVlKCk7CisgICAgfQorfQorCitD
cmFwcHlJbmZlcmVuY2VyMjo6Q3JhcHB5SW5mZXJlbmNlcjIoU29wcmFubzo6TW9kZWwqIHBhcmVu
dCkKKyAgICA6IFNvcHJhbm86OkZpbHRlck1vZGVsKHBhcmVudCksCisgICAgICBkKG5ldyBQcml2
YXRlKCkpCit7CisgICAgZC0+cSA9IHRoaXM7CisgICAgZC0+bV9pbmZlcmVuY2VDb250ZXh0ID0g
UVVybDo6ZnJvbUVuY29kZWQoInVybjpjcmFwcHlpbmZlcmVuY2UyOmluZmVycmVkdHJpcGxlcyIp
OworICAgIGQtPm1fdHlwZVZpc2liaWxpdHlUcmVlID0gbmV3IFR5cGVWaXNpYmlsaXR5VHJlZSh0
aGlzKTsKKyAgICBpZiAoIHBhcmVudCApCisgICAgICAgIHVwZGF0ZUluZmVyZW5jZUluZGV4KCk7
Cit9CisKK0NyYXBweUluZmVyZW5jZXIyOjp+Q3JhcHB5SW5mZXJlbmNlcjIoKQoreworICAgIGlm
KCBkLT5tX3VwZGF0ZUFsbFJlc291cmNlc1RocmVhZCApIHsKKyAgICAgICAgZC0+bV91cGRhdGVB
bGxSZXNvdXJjZXNUaHJlYWQtPmNhbmNlbCgpOworICAgICAgICBkLT5tX3VwZGF0ZUFsbFJlc291
cmNlc1RocmVhZC0+d2FpdCgpOworICAgIH0KKyAgICBkZWxldGUgZDsKK30KKwordm9pZCBDcmFw
cHlJbmZlcmVuY2VyMjo6c2V0UGFyZW50TW9kZWwoU29wcmFubzo6TW9kZWwgKm1vZGVsKQorewor
ICAgIEZpbHRlck1vZGVsOjpzZXRQYXJlbnRNb2RlbCggbW9kZWwgKTsKKyAgICB1cGRhdGVJbmZl
cmVuY2VJbmRleCgpOworfQorCitTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIENyYXBweUluZmVy
ZW5jZXIyOjphZGRTdGF0ZW1lbnQoY29uc3QgU29wcmFubzo6U3RhdGVtZW50ICZzdGF0ZW1lbnQp
Cit7CisgICAgaWYoIHN0YXRlbWVudC5jb250ZXh0KCkgPT0gZC0+bV9pbmZlcmVuY2VDb250ZXh0
ICkgeworI2lmZGVmIE5ERUJVRworICAgICAgICBrRGVidWcoKSA8PCAiTm8gYWN0aW9ucyBhcmUg
YWxsb3dlZCBvbiB0aGUgY3JhcHB5IGluZmVyZW5jZXIgY29udGV4dCBpbiByZWxlYXNlIG1vZGUh
IiA8PCBzdGF0ZW1lbnQ7CisgICAgICAgIHJldHVybiBTb3ByYW5vOjpFcnJvcjo6RXJyb3JJbnZh
bGlkQXJndW1lbnQ7CisjZWxzZQorICAgICAgICBrV2FybmluZygpIDw8ICJXQVJOSU5HISEhISEh
ISEhISEgQWRkaW5nIHN0YXRlbWVudCBpbiBjcmFwcHkgaW5mZXJlbmNlciBjb250ZXh0ISEhISEh
ISEhISEhIiA8PCBzdGF0ZW1lbnQ7CisjZW5kaWYKKyAgICB9CisKKyAgICBRTXV0ZXhMb2NrZXIg
bG9jayggJmQtPm1fbXV0ZXggKTsKKworICAgIFNvcHJhbm86OkVycm9yOjpFcnJvckNvZGUgciA9
IHBhcmVudE1vZGVsKCktPmFkZFN0YXRlbWVudCggc3RhdGVtZW50ICk7CisgICAgaWYoIHIgPT0g
U29wcmFubzo6RXJyb3I6OkVycm9yTm9uZSApIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSGFu
ZGxlIHRoZSBpbmZlcmVuY2UKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKCBzdGF0ZW1lbnQuc3Vi
amVjdCgpLmlzUmVzb3VyY2UoKSAmJgorICAgICAgICAgICAgICAgIHN0YXRlbWVudC5vYmplY3Qo
KS5pc1Jlc291cmNlKCkgJiYKKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQucHJlZGljYXRlKCkg
PT0gU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCkgKSB7CisgICAgICAgICAgICBhZGRJ
bmZlcmVuY2VTdGF0ZW1lbnRzKCBzdGF0ZW1lbnQuc3ViamVjdCgpLnVyaSgpLCBzdGF0ZW1lbnQu
b2JqZWN0KCkudXJpKCkgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByOworfQor
CitTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIENyYXBweUluZmVyZW5jZXIyOjpyZW1vdmVTdGF0
ZW1lbnQoY29uc3QgU29wcmFubzo6U3RhdGVtZW50ICZzdGF0ZW1lbnQpCit7CisgICAgaWYoIHN0
YXRlbWVudC5jb250ZXh0KCkgPT0gZC0+bV9pbmZlcmVuY2VDb250ZXh0ICkgeworI2lmZGVmIE5E
RUJVRworICAgICAgICBrRGVidWcoKSA8PCAiTm8gYWN0aW9ucyBhcmUgYWxsb3dlZCBvbiB0aGUg
Y3JhcHB5IGluZmVyZW5jZXIgY29udGV4dCBpbiByZWxlYXNlIG1vZGUhIiA8PCBzdGF0ZW1lbnQ7
CisgICAgICAgIHJldHVybiBTb3ByYW5vOjpFcnJvcjo6RXJyb3JJbnZhbGlkQXJndW1lbnQ7Cisj
ZWxzZQorICAgICAgICBrV2FybmluZygpIDw8ICJXQVJOSU5HISEhISEhISEhISEgUmVtb3Zpbmcg
c3RhdGVtZW50IGZyb20gY3JhcHB5IGluZmVyZW5jZXIgY29udGV4dCEhISEhISEhISEhISIgPDwg
c3RhdGVtZW50OworI2VuZGlmCisgICAgfQorCisgICAgUU11dGV4TG9ja2VyIGxvY2soICZkLT5t
X211dGV4ICk7CisKKyAgICBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIGVycm9yID0gcGFyZW50
TW9kZWwoKS0+cmVtb3ZlU3RhdGVtZW50KHN0YXRlbWVudCk7CisgICAgaWYoIGVycm9yID09IFNv
cHJhbm86OkVycm9yOjpFcnJvck5vbmUgKSB7CisgICAgICAgIGlmICggc3RhdGVtZW50LmlzVmFs
aWQoKSAmJgorICAgICAgICAgICAgICAgIHN0YXRlbWVudC5zdWJqZWN0KCkuaXNSZXNvdXJjZSgp
ICYmCisgICAgICAgICAgICAgICAgc3RhdGVtZW50Lm9iamVjdCgpLmlzUmVzb3VyY2UoKSAmJgor
ICAgICAgICAgICAgICAgIHN0YXRlbWVudC5wcmVkaWNhdGUoKSA9PSBTb3ByYW5vOjpWb2NhYnVs
YXJ5OjpSREY6OnR5cGUoKSApIHsKKyAgICAgICAgICAgIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVu
dHMoIHN0YXRlbWVudC5zdWJqZWN0KCkudXJpKCksIHN0YXRlbWVudC5vYmplY3QoKS51cmkoKSAp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBTb3ByYW5vOjpFcnJvcjo6RXJyb3JOb25lOwor
ICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KK30KKworU29w
cmFubzo6RXJyb3I6OkVycm9yQ29kZSBDcmFwcHlJbmZlcmVuY2VyMjo6cmVtb3ZlQWxsU3RhdGVt
ZW50cyhjb25zdCBTb3ByYW5vOjpTdGF0ZW1lbnQgJnN0YXRlbWVudCkKK3sKKyAgICBpZiggc3Rh
dGVtZW50LmNvbnRleHQoKSA9PSBkLT5tX2luZmVyZW5jZUNvbnRleHQgKSB7CisjaWZkZWYgTkRF
QlVHCisgICAgICAgIGtEZWJ1ZygpIDw8ICJObyBhY3Rpb25zIGFyZSBhbGxvd2VkIG9uIHRoZSBj
cmFwcHkgaW5mZXJlbmNlciBjb250ZXh0IGluIHJlbGVhc2UgbW9kZSEiIDw8IHN0YXRlbWVudDsK
KyAgICAgICAgcmV0dXJuIFNvcHJhbm86OkVycm9yOjpFcnJvckludmFsaWRBcmd1bWVudDsKKyNl
bHNlCisgICAgICAgIGtXYXJuaW5nKCkgPDwgIldBUk5JTkchISEhISEhISEhISBSZW1vdmluZyBz
dGF0ZW1lbnRzIGZyb20gY3JhcHB5IGluZmVyZW5jZXIgY29udGV4dCEhISEhISEhISEhISIgPDwg
c3RhdGVtZW50OworI2VuZGlmCisgICAgfQorCisgICAgUU11dGV4TG9ja2VyIGxvY2soICZkLT5t
X211dGV4ICk7CisKKyAgICAvLworICAgIC8vIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBuZWVk
IHRvIGJlIG1ldCBpbiBvcmRlciBmb3IgdXMgdG8gbmVlZCB0byBjaGVjayBmb3IgdHlwZXMKKyAg
ICAvLyAxLiBPYmplY3Qgb3IgY29udGV4dCBuZWVkIHRvIGJlIHZhbGlkLiBPdGhlcndpc2Ugb3Vy
IHR5cGVzIGFyZSByZW1vdmVkIGFueXdheQorICAgIC8vIDIuIE9iamVjdCBuZWVkcyB0byBiZSBl
bXB0eSBvciBhIHJlc291cmNlLiBMaXRlcmFscyBhcmUgbmV2ZXIgdHlwZXMKKyAgICAvLyAzLiBQ
cmVkaWNhdGUgbmVlZHMgdG8gYmUgZW1wdHkgb3IgcmRmOnR5cGUuIE90aGVyd2lzZSB0aGUgY2Fs
bCBpcyBub3QgcmVsYXRlZCB0byB0eXBlcy4KKyAgICAvLworICAgIGlmICggc3RhdGVtZW50LmNv
bnRleHQoKSAhPSBkLT5tX2luZmVyZW5jZUNvbnRleHQgJiYKKyAgICAgICAgICAgICggKCBzdGF0
ZW1lbnQucHJlZGljYXRlKCkuaXNFbXB0eSgpIHx8CisgICAgICAgICAgICAgICBzdGF0ZW1lbnQu
cHJlZGljYXRlKCkgPT0gU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCkgKSAmJgorICAg
ICAgICAgICAgICggc3RhdGVtZW50Lm9iamVjdCgpLmlzRW1wdHkoKSB8fAorICAgICAgICAgICAg
ICBzdGF0ZW1lbnQub2JqZWN0KCkuaXNSZXNvdXJjZSgpICkgJiYKKyAgICAgICAgICAgICAoIHN0
YXRlbWVudC5vYmplY3QoKS5pc1ZhbGlkKCkgfHwKKyAgICAgICAgICAgICAgc3RhdGVtZW50LmNv
bnRleHQoKS5pc1ZhbGlkKCkgKSApICkgeworICAgICAgICAvLworICAgICAgICAvLyBJZiBib3Ro
IHJlc291cmNlIGFuZCB0eXBlIGFyZSBkZWZpbmVkIHdlIGNhbiBzaW1wbHkgY2FsbCByZW1vdmVJ
bmZlcmVuY2VTdGF0ZW1lbnRzKCkgb24gdGhlbQorICAgICAgICAvLworICAgICAgICBpZiggc3Rh
dGVtZW50LnN1YmplY3QoKS5pc1Jlc291cmNlKCkgJiYKKyAgICAgICAgICAgICAgICBzdGF0ZW1l
bnQub2JqZWN0KCkuaXNSZXNvdXJjZSgpICkgeworICAgICAgICAgICAgY29uc3QgU29wcmFubzo6
RXJyb3I6OkVycm9yQ29kZSBlcnJvciA9IHBhcmVudE1vZGVsKCktPnJlbW92ZUFsbFN0YXRlbWVu
dHMoc3RhdGVtZW50KTsKKyAgICAgICAgICAgIGlmKCBlcnJvciA9PSBTb3ByYW5vOjpFcnJvcjo6
RXJyb3JOb25lICkgeworICAgICAgICAgICAgICAgIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMo
IHN0YXRlbWVudC5zdWJqZWN0KCkudXJpKCksIHN0YXRlbWVudC5vYmplY3QoKS51cmkoKSApOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICB9CisKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gaWYgb25seSB0aGUgdHlwZSBpcyB1bmRlZmluZWQgd2UgZ2V0
IHRoZSB0eXBlcyBhbmQgdGhlbiBjYWxsIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoKS4gVGhp
cyBhdm9pZHMKKyAgICAgICAgLy8gcGVyZm9ybWluZyB0aGUgcXVlcnkgaW4gdGhlIGxhdHRlciBt
ZXRob2Qgb3ZlciBhbmQgb3ZlciBmb3IgZWFjaCB0eXBlCisgICAgICAgIC8vCisgICAgICAgIGVs
c2UgaWYoIHN0YXRlbWVudC5zdWJqZWN0KCkuaXNWYWxpZCgpICkgeworICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gZmlyc3QgZ2V0IHRoZSB0eXBlcyB0byByZW1vdmUs
IHRoZW4gcmVtb3ZlIHRoZSBzdGF0ZW1lbnRzLCBhbmQgb25seSB0aGVuIGNhbGwKKyAgICAgICAg
ICAgIC8vIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoKS4gVGhpcyBpcyBzaW5jZSB0aGUgbGF0
dGVyIG1ha2VzIHVzZSBvZiB0aGUgdHlwZXMgaW4gdGhlIG1vZGVsCisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgUVN0cmluZyBxdWVyeTsKKyAgICAgICAgICAgIGlmKCBzdGF0ZW1lbnQuY29u
dGV4dCgpLmlzVmFsaWQoKSApIHsKKyAgICAgICAgICAgICAgICBxdWVyeSA9IFFTdHJpbmc6OmZy
b21MYXRpbjEoInNlbGVjdCA/dCB3aGVyZSB7IGdyYXBoICUyIHsgJTEgYSA/dCAuIH0gLiB9IikK
KyAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoc3RhdGVtZW50LnN1YmplY3QoKS50b04zKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC5jb250ZXh0KCkudG9OMygp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHF1
ZXJ5ID0gUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0ID90IHdoZXJlIHsgZ3JhcGggP2cgeyAl
MSBhID90IC4gfSAuIEZJTFRFUig/ZyE9JTIpIC4gfSIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAuYXJnKHN0YXRlbWVudC5zdWJqZWN0KCkudG9OMygpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoY3JhcHB5SW5mZXJlbmNlQ29udGV4
dCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb25zdCBRTGlzdDxTb3ByYW5vOjpO
b2RlPiB0eXBlcyA9IGV4ZWN1dGVRdWVyeSggcXVlcnksIFNvcHJhbm86OlF1ZXJ5OjpRdWVyeUxh
bmd1YWdlU3BhcnFsICkuaXRlcmF0ZUJpbmRpbmdzKDApLmFsbE5vZGVzKCk7CisgICAgICAgICAg
ICBjb25zdCBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIGVycm9yID0gcGFyZW50TW9kZWwoKS0+
cmVtb3ZlQWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQpOworICAgICAgICAgICAgaWYoIGVycm9yID09
IFNvcHJhbm86OkVycm9yOjpFcnJvck5vbmUgKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlSW5m
ZXJlbmNlU3RhdGVtZW50cyggc3RhdGVtZW50LnN1YmplY3QoKS51cmkoKSwgdHlwZXMgKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vCisgICAgICAgIC8vIElmIHRoZSBzdWJqZWN0IGlzIG5vdCBkZWZpbmVkIGJ1dCB0aGUg
dHlwZSBpcyB3ZSBuZWVkIHRvIHVwZGF0ZSBzZXZlcmFsIHJlc291cmNlcy4gVGhlcmUgaXMgbm8g
d2F5IGFyb3VuZAorICAgICAgICAvLyBjYWxsaW5nIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMo
KSBmb3IgZWFjaCByZXNvdXJjZS4KKyAgICAgICAgLy8KKyAgICAgICAgZWxzZSBpZiggc3RhdGVt
ZW50Lm9iamVjdCgpLmlzVmFsaWQoKSApIHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAv
LyBXZSBuZWVkIHRvIGdldCB0aGUgcmVzb3VyY2VzIGJlZm9yZSBhY3R1YWxseSByZW1vdmluZyB0
aGUgc3RhdGVtZW50cyBzaW5jZSBvdGhlcndpc2Ugd2UgbWlnaHQgbWlzcyB0aGVtCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgUVN0cmluZyBxdWVyeTsKKyAgICAgICAgICAgIGlmKCBzdGF0
ZW1lbnQuY29udGV4dCgpLmlzVmFsaWQoKSApIHsKKyAgICAgICAgICAgICAgICBxdWVyeSA9IFFT
dHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCA/ciB3aGVyZSB7IGdyYXBoICUyIHsgP3IgYSAlMSAu
IH0gLiB9IikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoc3RhdGVtZW50Lm9iamVjdCgp
LnRvTjMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmNvbnRleHQo
KS50b04zKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgcXVlcnkgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgP3Igd2hlcmUgeyBncmFw
aCA/ZyB7ID9yIGEgJTEgLiB9IC4gRklMVEVSKD9nIT0lMikgLiB9IikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC5hcmcoc3RhdGVtZW50Lm9iamVjdCgpLnRvTjMoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKGNyYXBweUluZmVyZW5j
ZUNvbnRleHQoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc3QgUUxpc3Q8U29w
cmFubzo6Tm9kZT4gcmVzb3VyY2VzID0gZXhlY3V0ZVF1ZXJ5KCBxdWVyeSwgU29wcmFubzo6UXVl
cnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwgKS5pdGVyYXRlQmluZGluZ3MoMCkuYWxsTm9kZXMoKTsK
KyAgICAgICAgICAgIGNvbnN0IFNvcHJhbm86OkVycm9yOjpFcnJvckNvZGUgZXJyb3IgPSBwYXJl
bnRNb2RlbCgpLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHN0YXRlbWVudCk7CisgICAgICAgICAgICBp
ZiggZXJyb3IgPT0gU29wcmFubzo6RXJyb3I6OkVycm9yTm9uZSApIHsKKyAgICAgICAgICAgICAg
ICBRX0ZPUkVBQ0goIGNvbnN0IFNvcHJhbm86Ok5vZGUmIHJlcywgcmVzb3VyY2VzICkgeworICAg
ICAgICAgICAgICAgICAgICByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCByZXMudXJpKCksIHN0
YXRlbWVudC5vYmplY3QoKS51cmkoKSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIC8vCisg
ICAgICAgIC8vIE5laXRoZXIgc3ViamVjdCBub3Igb2JqZWN0IGFyZSBkZWZpbmVkCisgICAgICAg
IC8vCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUUhhc2g8UVVybCwgUUxpc3Q8UVVybD4g
PiByZXNUeXBlSGFzaDsKKyAgICAgICAgICAgIFFTdHJpbmcgcXVlcnk7CisgICAgICAgICAgICBp
Ziggc3RhdGVtZW50LmNvbnRleHQoKS5pc1ZhbGlkKCkgKSB7CisgICAgICAgICAgICAgICAgcXVl
cnkgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgZGlzdGluY3QgP3IgP3Qgd2hlcmUgeyBn
cmFwaCAlMSB7ID9yIGEgP3QgLiB9IC4gfSIpCisgICAgICAgICAgICAgICAgICAgICAgICAuYXJn
KHN0YXRlbWVudC5jb250ZXh0KCkudG9OMygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIHF1ZXJ5ID0gUVN0cmluZzo6ZnJvbUxhdGluMSgic2Vs
ZWN0IGRpc3RpbmN0ID9yID90IHdoZXJlIHsgZ3JhcGggP2cgeyA/ciBhID90IC4gfSAuIEZJTFRF
Uig/ZyE9JTEpIC4gfSIpCisgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKFNvcHJhbm86Ok5v
ZGU6OnJlc291cmNlVG9OMyhjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFNvcHJhbm86OlF1ZXJ5UmVzdWx0SXRlcmF0b3IgaXQgPSBwYXJlbnRN
b2RlbCgpLT5leGVjdXRlUXVlcnkoIHF1ZXJ5LCBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFn
ZVNwYXJxbCApOworICAgICAgICAgICAgd2hpbGUoIGl0Lm5leHQoKSApIHsKKyAgICAgICAgICAg
ICAgICByZXNUeXBlSGFzaFtpdFsiciJdLnVyaSgpXS5hcHBlbmQoIGl0WyJ0Il0udXJpKCkgKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IFNvcHJhbm86OkVycm9yOjpFcnJvckNv
ZGUgZXJyb3IgPSBwYXJlbnRNb2RlbCgpLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHN0YXRlbWVudCk7
CisgICAgICAgICAgICBpZiggZXJyb3IgPT0gU29wcmFubzo6RXJyb3I6OkVycm9yTm9uZSApIHsK
KyAgICAgICAgICAgICAgICBRSGFzaDxRVXJsLCBRTGlzdDxRVXJsPiA+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSByZXNUeXBlSGFzaC5jb25zdEVuZCgpOworICAgICAgICAgICAgICAgIGZvciggUUhh
c2g8UVVybCwgUUxpc3Q8UVVybD4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNUeXBlSGFzaC5j
b25zdEJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVt
b3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggaXQua2V5KCksIGl0LnZhbHVlKCkgKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZXJyb3I7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybiBwYXJlbnRNb2RlbCgpLT5y
ZW1vdmVBbGxTdGF0ZW1lbnRzKHN0YXRlbWVudCk7CisgICAgfQorfQorCitRVXJsIENyYXBweUlu
ZmVyZW5jZXIyOjpjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZC0+bV9pbmZlcmVuY2VDb250ZXh0OworfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyOjp1cGRh
dGVJbmZlcmVuY2VJbmRleCgpCit7CisgICAga0RlYnVnKCk7CisKKyAgICBRTXV0ZXhMb2NrZXIg
bG9jayggJmQtPm1fbXV0ZXggKTsKKworICAgIC8vIEJ1aWxkIHN1cGVyY2xhc3NlcyBoYXNoCisg
ICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisg
ICAgLy8gY2xlYXIgY2FjaGUKKyAgICBkLT5tX3N1cGVyQ2xhc3Nlcy5jbGVhcigpOworCisgICAg
Ly8gY2FjaGUgc3ViQ2xhc3NPZiByZWxhdGlvbnMgKG9ubHkgdGhlIG9yaWdpbmFsIG9uZXMpCisg
ICAgUU11bHRpSGFzaDxRVXJsLCBRVXJsPiByZGZzU3ViQ2xhc3NSZWxhdGlvbnM7CisgICAgU29w
cmFubzo6UXVlcnlSZXN1bHRJdGVyYXRvciBpdCA9IGV4ZWN1dGVRdWVyeSggUVN0cmluZzo6ZnJv
bUxhdGluMSgic2VsZWN0ID94ID95IHdoZXJlIHsgZ3JhcGggP2cgeyA/eCAlMSA/eSAuIH0gLiAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiRklMVEVSKD9nICE9IDx1cm46Y3JhcHB5aW5mZXJlbmNlOmluZmVy
cmVkdHJpcGxlcz4pIC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZJTFRFUig/eCE9P3kpIC4gfSIgKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmco
IFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6
c3ViQ2xhc3NPZigpICkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApOworICAg
IHdoaWxlICggaXQubmV4dCgpICkgeworICAgICAgICByZGZzU3ViQ2xhc3NSZWxhdGlvbnMuaW5z
ZXJ0KCBpdFsieCJdLnVyaSgpLCBpdFsieSJdLnVyaSgpICk7CisgICAgfQorCisgICAgLy8gY29t
cGxldGUgdGhlIG1hcCBvZiBzdXBlciBjbGFzc2VzCisgICAgUV9GT1JFQUNIKCBjb25zdCBRVXJs
JiB0eXBlLCByZGZzU3ViQ2xhc3NSZWxhdGlvbnMua2V5cygpICkgeworICAgICAgICBRU2V0PFFV
cmw+IHZpc2l0ZWRDbGFzc2VzOworICAgICAgICBkLT5idWlsZFN1cGVyQ2xhc3Nlc0hhc2goIHR5
cGUsIHZpc2l0ZWRDbGFzc2VzLCByZGZzU3ViQ2xhc3NSZWxhdGlvbnMgKTsKKyAgICB9CisKKyAg
ICAvLyBnZXQgdGhlIGNsYXNzZXMgdGhhdCBkbyBub3QgaGF2ZSBhbnkgcGFyZW50IGNsYXNzCisg
ICAgaXQgPSBleGVjdXRlUXVlcnkoIFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCA/YyB3aGVy
ZSB7ID9jIGEgJTEgLiBPUFRJT05BTCB7ID9jICUyID9wIC4gfSAuIEZJTFRFUighQk9VTkQoP3Ap
KSAuIH0iICkKKyAgICAgICAgICAgICAgICAgICAgICAuYXJnKCBTb3ByYW5vOjpOb2RlOjpyZXNv
dXJjZVRvTjMoIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCkgKSApCisgICAgICAg
ICAgICAgICAgICAgICAgLmFyZyggU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCkgKSApLAorICAgICAgICAgICAgICAgICAg
ICAgIFNvcHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsICk7CisgICAgd2hpbGUgKCBp
dC5uZXh0KCkgKSB7CisgICAgICAgIGQtPm1fc3VwZXJDbGFzc2VzLmluc2VydCggaXRbImMiXS51
cmkoKSwgUVNldDxRVXJsPigpICk7CisgICAgfQorCisgICAgLy8gYWRkIHJkZnM6UmVzb3VyY2Ug
YXMgcGFyZW50IGZvciBhbGwgY2xhc3NlcworICAgIFFNdXRhYmxlSGFzaEl0ZXJhdG9yPFFVcmws
IFFTZXQ8UVVybD4gPiByZGZzUmVzSXQoIGQtPm1fc3VwZXJDbGFzc2VzICk7CisgICAgd2hpbGUo
IHJkZnNSZXNJdC5oYXNOZXh0KCkgKSB7CisgICAgICAgIHJkZnNSZXNJdC5uZXh0KCk7CisgICAg
ICAgIHJkZnNSZXNJdC52YWx1ZSgpLmluc2VydChTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpS
ZXNvdXJjZSgpKTsKKyAgICB9CisKKyAgICAvLyBCdWlsZCB2aXNpYmlsaXR5IHRyZWUKKyAgICAv
LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgZC0+
bV90eXBlVmlzaWJpbGl0eVRyZWUtPnJlYnVpbGRUcmVlKCk7CisKKyNpZm5kZWYgTkRFQlVHCisg
ICAgLy8gY291bnQgZm9yIGRlYnVnZ2luZworICAgIGludCBjbnQgPSAwOworICAgIGZvciggUUhh
c2g8UVVybCwgUVNldDxRVXJsPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGQtPm1fc3VwZXJDbGFz
c2VzLmNvbnN0QmVnaW4oKTsKKyAgICAgICAgIGl0ICE9IGQtPm1fc3VwZXJDbGFzc2VzLmNvbnN0
RW5kKCk7ICsraXQgKSB7CisgICAgICAgIGtEZWJ1ZygpIDw8IGl0LmtleSgpIDw8ICItPiIgPDwg
aXQudmFsdWUoKTsKKyAgICAgICAgY250ICs9IGl0LnZhbHVlKCkuY291bnQoKTsKKyAgICB9Cisg
ICAga0RlYnVnKCkgPDwgIk51bWJlciBvZiBjbGFzc2VzOiAgICAgICAgICAgIiA8PCBkLT5tX3N1
cGVyQ2xhc3Nlcy5jb3VudCgpOworICAgIGtEZWJ1ZygpIDw8ICJOdW1iZXIgb2Ygc3ViY2xhc3Mg
cmVsYXRpb25zOiIgPDwgY250OworI2VuZGlmCit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6
OnVwZGF0ZUFsbFJlc291cmNlcygpCit7CisgICAga0RlYnVnKCk7CisgICAgaWYoICFkLT5tX3Vw
ZGF0ZUFsbFJlc291cmNlc1RocmVhZCApIHsKKyAgICAgICAgZC0+bV91cGRhdGVBbGxSZXNvdXJj
ZXNUaHJlYWQgPSBuZXcgVXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkKHRoaXMpOworICAgICAgICBj
b25uZWN0KGQtPm1fdXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkLCBTSUdOQUwoZmluaXNoZWQoKSks
IHRoaXMsIFNJR05BTChhbGxSZXNvdXJjZXNVcGRhdGVkKCkpKTsKKyAgICB9CisgICAgZC0+bV91
cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQtPnN0YXJ0KCk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJl
bmNlcjI6OmFkZEluZmVyZW5jZVN0YXRlbWVudHMoIGNvbnN0IFFVcmwmIHJlc291cmNlLCBjb25z
dCBRVXJsJiB0eXBlICkKK3sKKyAgICByZXR1cm4gYWRkSW5mZXJlbmNlU3RhdGVtZW50cyggcmVz
b3VyY2UsIFFTZXQ8UVVybD4oKSA8PCB0eXBlICk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNl
cjI6OmFkZEluZmVyZW5jZVN0YXRlbWVudHMoIGNvbnN0IFFVcmwmIHJlc291cmNlLCBjb25zdCBR
U2V0PFFVcmw+JiB0eXBlcyApCit7CisgICAgLy8gYWRkIG1pc3NpbmcgdHlwZXMKKyAgICBib29s
IGhhdmVWaXNpYmxlVHlwZSA9IGZhbHNlOworICAgIFFTZXQ8UVVybD4gc3VwZXJUeXBlczsKKyAg
ICBRX0ZPUkVBQ0goIGNvbnN0IFFVcmwmIHR5cGUsIHR5cGVzICkgeworICAgICAgICBzdXBlclR5
cGVzICs9IGQtPnN1cGVyQ2xhc3Nlcyh0eXBlKTsKKyAgICAgICAgaWYoICFoYXZlVmlzaWJsZVR5
cGUgJiYgZC0+bV90eXBlVmlzaWJpbGl0eVRyZWUtPmlzVmlzaWJsZSh0eXBlKSApCisgICAgICAg
ICAgICBoYXZlVmlzaWJsZVR5cGUgPSB0cnVlOworICAgIH0KKyAgICBRU2V0PFFVcmw+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBzdXBlclR5cGVzLmNvbnN0RW5kKCk7CisgICAgZm9yKCBRU2V0PFFV
cmw+Ojpjb25zdF9pdGVyYXRvciB0eXBlSXQgPSBzdXBlclR5cGVzLmNvbnN0QmVnaW4oKTsgdHlw
ZUl0ICE9IGVuZDsgKyt0eXBlSXQgKSB7CisgICAgICAgIHBhcmVudE1vZGVsKCktPmFkZFN0YXRl
bWVudChyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKnR5cGVJdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy
YXBweUluZmVyZW5jZUNvbnRleHQoKSk7CisgICAgfQorCisgICAgLy8gdGhlIHZpc2liaWxpdHkg
Y2FuIG9ubHkgY2hhbmdlIGlmIHdlIGFkZCBhIHZpc2libGUgdHlwZQorICAgIGlmKCBoYXZlVmlz
aWJsZVR5cGUgKSB7CisgICAgICAgIHNldFZpc2liaWxpdHkoIHJlc291cmNlLCBWaXNpYmxlICk7
CisgICAgfQorfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyOjpyZW1vdmVJbmZlcmVuY2VTdGF0
ZW1lbnRzKGNvbnN0IFFVcmwgJnJlc291cmNlLCBjb25zdCBRVXJsICZ0eXBlKQoreworICAgIHJl
bW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIHJlc291cmNlLCBRTGlzdDxRVXJsPigpIDw8IHR5cGUg
KTsKK30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMjo6cmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50
cyggY29uc3QgUVVybCYgcmVzb3VyY2UsIGNvbnN0IFFMaXN0PFNvcHJhbm86Ok5vZGU+JiB0eXBl
cyApCit7CisgICAgUUxpc3Q8UVVybD4gdXJpczsKKyAgICBRX0ZPUkVBQ0goIGNvbnN0IFNvcHJh
bm86Ok5vZGUmIG5vZGUsIHR5cGVzICkKKyAgICAgICAgdXJpcyA8PCBub2RlLnVyaSgpOworICAg
IHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIHJlc291cmNlLCB1cmlzICk7Cit9CisKKy8vIEFs
d2F5cyBjYWxsZWQgKmFmdGVyKiByZW1vdmluZyB0aGUgYWN0dWFsIHN0YXRlbWVudHMKK3ZvaWQg
Q3JhcHB5SW5mZXJlbmNlcjI6OnJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoY29uc3QgUVVybCAm
cmVzb3VyY2UsIGNvbnN0IFFMaXN0PFFVcmw+ICZ0eXBlcykKK3sKKyAgICAvLyB3ZSBjYW5ub3Qg
c2ltcGx5IHJlbW92ZSBhbGwgc3VwZXIgdHlwZXMgc2luY2UgdGhlIHJlc291cmNlIG1pZ2h0IHN0
aWxsIGhhdmUgdHlwZXMgdGhhdCBhcmUgc29tZXdoZXJlIGluIHRoYXQgaGllcmFyY2h5CisKKyAg
ICAvLyBkZXRlcm1pbmUgdGhlIHR5cGVzIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBkYXRhYmFzZSBu
b3cKKyAgICBjb25zdCBRU2V0PFFVcmw+IGNvcnJlY3RUeXBlcyA9IGQtPnF1ZXJ5UmVzb3VyY2VU
eXBlcyhyZXNvdXJjZSk7CisgICAgUVNldDxRVXJsPiBjb3JyZWN0U3VwZXJUeXBlczsKKyAgICBR
X0ZPUkVBQ0goIGNvbnN0IFFVcmwmIHR5cGUsIGNvcnJlY3RUeXBlcyApIHsKKyAgICAgICAgY29y
cmVjdFN1cGVyVHlwZXMgKz0gZC0+c3VwZXJDbGFzc2VzKHR5cGUpOworICAgIH0KKworICAgIC8v
IG5vdyBjb21wYXJlIHRoYXQgbGlzdCB3aXRoIHRoZSBvbmVzIHRoYXQgd2UgY291bGQgcmVtb3Zl
CisgICAgUVNldDxRVXJsPiB0eXBlc1RvUmVtb3ZlOworICAgIFFfRk9SRUFDSCggY29uc3QgUVVy
bCYgdHlwZSwgUVNldDxRVXJsPjo6ZnJvbUxpc3QodHlwZXMpICkKKyAgICAgICAgdHlwZXNUb1Jl
bW92ZSArPSBkLT5zdXBlckNsYXNzZXModHlwZSk7CisgICAgdHlwZXNUb1JlbW92ZSAtPSBjb3Jy
ZWN0U3VwZXJUeXBlczsKKworICAgIGJvb2wgaGF2ZVZpc2libGVUeXBlID0gZmFsc2U7CisgICAg
UV9GT1JFQUNIKCBjb25zdCBRVXJsJiB0eXBlVG9SZW1vdmUsIHR5cGVzVG9SZW1vdmUgKSB7Cisg
ICAgICAgIGlmKCAhaGF2ZVZpc2libGVUeXBlICYmIGQtPm1fdHlwZVZpc2liaWxpdHlUcmVlLT5p
c1Zpc2libGUodHlwZVRvUmVtb3ZlKSApCisgICAgICAgICAgICBoYXZlVmlzaWJsZVR5cGUgPSB0
cnVlOworICAgICAgICBwYXJlbnRNb2RlbCgpLT5yZW1vdmVTdGF0ZW1lbnQocmVzb3VyY2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpWb2NhYnVsYXJ5
OjpSREY6OnR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGVUb1JlbW92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyYXBw
eUluZmVyZW5jZUNvbnRleHQoKSk7CisgICAgfQorCisgICAgLy8gcmVtb3ZlIHRoZSB2aXNpYmls
aXR5IGlmIG5lY2Vzc2FyeQorICAgIC8vIG9ubHkgYmUgcmVtb3ZpbmcgdmlzaWJsZSB0eXBlcyB3
ZSBjYW4gY2hhbmdlIHRoZSBhY3R1YWwgdmlzaWJpbGl0eQorICAgIGlmKCBoYXZlVmlzaWJsZVR5
cGUgKSB7CisgICAgICAgIHNldFZpc2liaWxpdHkoIHJlc291cmNlLCBjb3JyZWN0VHlwZXMuaXNF
bXB0eSgpID8gVW5kZWZpbmVkVmlzaWJpbGl0eSA6ICggZC0+aXNWaXNpYmxlRnJvbVR5cGVzKGNv
cnJlY3RUeXBlcykgPyBWaXNpYmxlIDogTm9uVmlzaWJsZSApICk7CisgICAgfQorfQorCit2b2lk
IENyYXBweUluZmVyZW5jZXIyOjpzZXRWaXNpYmlsaXR5KGNvbnN0IFFVcmwgJnJlc291cmNlLCBW
aXNpYmlsaXR5IHZpc2liaWxpdHkpCit7CisgICAgLy8gd2UgdXNlIGFuIGludGVnZXIgaW5zdGVh
ZCBvZiBhIGJvb2xlYW4gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IHZpcnR1b3NvIGRvZXMgbm90
IHN1cHBvcnQgYm9vbCBhbmQgU29wcmFubyBjb252ZXJ0cyB0aGVtIHRvIHN0cmluZ3MKKyAgICBp
ZiggdmlzaWJpbGl0eSA9PSBWaXNpYmxlICkgeworICAgICAgICBwYXJlbnRNb2RlbCgpLT5yZW1v
dmVTdGF0ZW1lbnQocmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpMaXRlcmFsVmFsdWUoMCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmFwcHlJbmZlcmVuY2VDb250
ZXh0KCkpOworICAgICAgICBwYXJlbnRNb2RlbCgpLT5hZGRTdGF0ZW1lbnQocmVzb3VyY2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpO
QU86OnVzZXJWaXNpYmxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
b3ByYW5vOjpMaXRlcmFsVmFsdWUoMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpOworICAgIH0KKyAgICBlbHNlIGlmKCB2aXNp
YmlsaXR5ID09IE5vblZpc2libGUgKSB7CisgICAgICAgIHBhcmVudE1vZGVsKCktPnJlbW92ZVN0
YXRlbWVudChyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OkxpdGVyYWxWYWx1ZSgxKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyYXBweUluZmVyZW5jZUNvbnRleHQo
KSk7CisgICAgICAgIHBhcmVudE1vZGVsKCktPmFkZFN0YXRlbWVudChyZXNvdXJjZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6
dXNlclZpc2libGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJh
bm86OkxpdGVyYWxWYWx1ZSgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBw
YXJlbnRNb2RlbCgpLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHJlc291cmNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6
dXNlclZpc2libGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTb3ByYW5vOjpOb2RlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpKTsKKyAgICB9Cit9CisKK2Jvb2wgQ3JhcHB5
SW5mZXJlbmNlcjI6OmlzVHlwZVZpc2libGUoY29uc3QgUVVybCAmdHlwZVVyaSkgY29uc3QKK3sK
KyAgICByZXR1cm4gZC0+bV90eXBlVmlzaWJpbGl0eVRyZWUtPmlzVmlzaWJsZSggdHlwZVVyaSAp
OworfQorCisjaW5jbHVkZSAiY3JhcHB5aW5mZXJlbmNlcjIubW9jIgpJbmRleDogc2VydmljZXMv
c3RvcmFnZS9yZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS9yZXBv
c2l0b3J5LmgJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL3JlcG9zaXRv
cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDI3IEBACiB9CiAKIGNsYXNzIEtKb2I7
CitjbGFzcyBDcmFwcHlJbmZlcmVuY2VyMjsKIAogbmFtZXNwYWNlIE5lcG9tdWsgewogCiAgICAg
Y2xhc3MgTW9kZWxDb3B5Sm9iOwogCisgICAgLyoqCisgICAgICogUmVwcmVzZW50cyB0aGUgbWFp
biBOZXBvbXVrIG1vZGVsLiBXaGlsZSBpdCBsb29rcyBhcyBpZiB0aGVyZSBjb3VsZCBiZSBtb3Jl
IHRoYW4KKyAgICAgKiBvbmUgaW5zdGFuY2Ugb2YgUmVwb3NpdG9yeSB0aGVyZSBpcyBvbmx5IHRo
ZSBvbmUuCisgICAgICoKKyAgICAgKiBSZXBvc2l0b3J5IGlzIGJhc2VkIG9uIE5STE1vZGVsIG9u
bHkgZm9yIHRoZSBxdWVyeSBwcmVmaXggZXhwYW5zaW9uIGZlYXR1cmUuIEl0CisgICAgICogdXNl
cyBhIFNvcHJhbm86OlV0aWxzOjpTaWduYWxDYWNoZU1vZGVsIHRvIGNvbXBhY3QgdGhlIHNldmVy
YWwgc3RhdGVtZW50c0FkZGVkKCkKKyAgICAgKiBhbmQgc3RhdGVtZW50c1JlbW92ZWQoKSBzaWdu
YWxzLCBhbmQgdXNlcyBDcmFwcHlJbmZlcmVuY2VyMiB0byBrZWVwIHJkZnM6c3ViQ2xhc3NPZgor
ICAgICAqIGFuZCBuYW86dXNlclZpc2libGUgaW5mZXJlbmNlIHVwLXRvLWRhdGUuCisgICAgICoK
KyAgICAgKiBPbiBjb25zdHJ1Y3Rpb24gaXQgY2hlY2tzIGZvciBhbmQgb3B0aW9uYWxseSBwZXJm
b3JtcyBjb252ZXJzaW9uIGZyb20gYW4gb2xkIHJlcG9zaXRvcnkKKyAgICAgKiB0eXBlIChwcmUt
VmlydHVvc28gdGltZXMpIGFuZCBydW5zIENyYXBweUluZmVyZW5jZXIyOjp1cGRhdGVBbGxSZXNv
dXJjZXMoKSB3aGljaCBpcworICAgICAqIHBlcmZvcm1lZCBpbiBhIHNlcGFyYXRlIHRocmVhZC4K
KyAgICAgKgorICAgICAqIFxhdXRob3IgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgor
ICAgICAqLwogICAgIGNsYXNzIFJlcG9zaXRvcnkgOiBwdWJsaWMgU29wcmFubzo6TlJMTW9kZWwK
ICAgICB7CiAgICAgICAgIFFfT0JKRUNUCkBAIC01OSw5ICs3NSwxMCBAQAogICAgICAgICAgKiBX
aWxsIGVtaXQgdGhlIG9wZW5lZCBzaWduYWwKICAgICAgICAgICovCiAgICAgICAgIHZvaWQgb3Bl
bigpOwotCiAgICAgICAgIHZvaWQgY2xvc2UoKTsKIAorICAgICAgICB2b2lkIHVwZGF0ZUluZmVy
ZW5jZSgpOworCiAgICAgUV9TSUdOQUxTOgogICAgICAgICB2b2lkIG9wZW5lZCggUmVwb3NpdG9y
eSosIGJvb2wgc3VjY2VzcyApOwogCkBAIC03NSw2ICs5Miw3IEBACiAgICAgICAgIFN0YXRlIG1f
c3RhdGU7CiAKICAgICAgICAgU29wcmFubzo6TW9kZWwqIG1fbW9kZWw7CisgICAgICAgIENyYXBw
eUluZmVyZW5jZXIyKiBtX2luZmVyZW5jZXI7CiAgICAgICAgIGNvbnN0IFNvcHJhbm86OkJhY2tl
bmQqIG1fYmFja2VuZDsKIAogICAgICAgICAvLyBvbmx5IHVzZWQgZHVyaW5nIG9wZW5pbmcKSW5k
ZXg6IHNlcnZpY2VzL3N0b3JhZ2Uvb250b2xvZ3ltYW5hZ2VybW9kZWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHNlcnZpY2VzL3N0b3JhZ2Uvb250b2xvZ3ltYW5hZ2VybW9kZWwuY3BwCShyZXZpc2lvbiAx
MjEzOTQwKQorKysgc2VydmljZXMvc3RvcmFnZS9vbnRvbG9neW1hbmFnZXJtb2RlbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgPFF0Q29yZS9RVXJsPgog
I2luY2x1ZGUgPFF0Q29yZS9RRGF0ZVRpbWU+CisjaW5jbHVkZSA8UXRDb3JlL1FTY29wZWRQb2lu
dGVyPgogCiAjaW5jbHVkZSA8U29wcmFuby9CYWNrZW5kPgogI2luY2x1ZGUgPFNvcHJhbm8vVmVy
c2lvbj4KQEAgLTIyNSwyMyArMjI2LDYgQEAKICAgICAgICAgdG1wTW9kZWwtPmFkZFN0YXRlbWVu
dCggU29wcmFubzo6U3RhdGVtZW50KCBkYXRhR3JhcGhVcmksIFNvcHJhbm86OlZvY2FidWxhcnk6
Ok5BTzo6aGFzRGVmYXVsdE5hbWVzcGFjZSgpLCBMaXRlcmFsVmFsdWUoIG5zLnRvU3RyaW5nKCkg
KSwgbWV0YURhdGFHcmFwaFVyaSApICk7CiAjZW5kaWYKICAgICB9Ci0KLSAgICAvKioKLSAgICAg
KiBTaW1wbGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGNsYXNzLgotICAgICAqLwotICAgIGNsYXNzIE9i
amVjdEdhcmJhZ2VDb2xsZWN0b3IKLSAgICB7Ci0gICAgcHVibGljOgotICAgICAgICBPYmplY3RH
YXJiYWdlQ29sbGVjdG9yKCBRT2JqZWN0KiBvICkKLSAgICAgICAgICAgIDogbV9vYmplY3QoIG8g
KSB7Ci0gICAgICAgIH0KLSAgICAgICAgfk9iamVjdEdhcmJhZ2VDb2xsZWN0b3IoKSB7Ci0gICAg
ICAgICAgICBkZWxldGUgbV9vYmplY3Q7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIFFPYmplY3QqIG1fb2JqZWN0OwotICAgIH07CiB9CiAKIApAQCAtMzA4LDcgKzI5Miw3IEBA
CiAgICAgfQogCiAgICAgLy8gc28gd2UgZG8gbm90IGhhdmUgdG8gY2FyZSBhYm91dCBkZWxldGlu
ZyBvdXQgdG1wTW9kZWwgYW55bW9yZS4KLSAgICBPYmplY3RHYXJiYWdlQ29sbGVjdG9yIG1vZGVs
R2FyYmFnZUNvbGxlY3RvciggdG1wTW9kZWwgKTsKKyAgICBRU2NvcGVkUG9pbnRlcjxTb3ByYW5v
OjpNb2RlbD4gbW9kZWxHYXJiYWdlQ29sbGVjdG9yKCB0bXBNb2RlbCApOwogCiAgICAgLy8gaW1w
b3J0IHRoZSBkYXRhIGludG8gb3VyIHRtcCBtb2RlbAogICAgIHdoaWxlICggZGF0YS5uZXh0KCkg
KSB7CkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL2NyYXBweWluZmVyZW5jZXIyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gc2VydmljZXMvc3RvcmFnZS9jcmFwcHlpbmZlcmVuY2VyMi5oCShyZXZpc2lvbiAwKQor
Kysgc2VydmljZXMvc3RvcmFnZS9jcmFwcHlpbmZlcmVuY2VyMi5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEwNiBAQAorLyoKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBOZXBvbXVrIEtE
RSBwcm9qZWN0LgorICAgQ29weXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdA
a2RlLm9yZz4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFueQorICAgbGF0ZXIg
dmVyc2lvbiBhY2NlcHRlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiAob3IgaXRzCisg
ICBzdWNjZXNzb3IgYXBwcm92ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4pLCB3aGlj
aCBzaGFsbAorICAgYWN0IGFzIGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9uIDYgb2YgdmVyc2lv
biAzIG9mIHRoZSBsaWNlbnNlLgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4gIElmIG5vdCwgc2Vl
IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpZm5kZWYgQ1JBUFBZSU5G
RVJFTkNFUjJfSAorI2RlZmluZSBDUkFQUFlJTkZFUkVOQ0VSMl9ICisKKyNpbmNsdWRlIDxTb3By
YW5vL0ZpbHRlck1vZGVsPgorCisvKioKKyAqIFRoZSBzZWNvbmQgdmVyc2lvbiBvZiB0aGUgY3Jh
cHB5IGluZmVyZW5jZXIgaXQgZXZlbiBjcmFwcGllciB0aGFuIHRoZSBmaXJzdC4KKyAqIEl0IG9u
bHkgZG9lcyByZGY6dHlwZSBpbmZlcmVuY2luZywgbm90aGluZyBlbHNlLiBJbiB0aGUgbG9uZyBy
dW4gdGhpcyBpcyBub3QKKyAqIGVub3VnaCBidXQgZm9yIG5vdyBpdCBpcyB0aGUgb25seSBraW5k
IG9mIGluZmVyZW5jZSB3ZSB1c2UgaW4gTmVwb211ay4KKyAqIFRodXMsIGl0IGlzIGVub3VnaCBh
bmQgbWFrZXMgZm9yIG11Y2ggZmFzdGVyIHF1ZXJpZXMgdGhhbiB0aGUgZmlyc3QKKyAqIGNyYXBw
eSBpbmZlcmVuY2VyLgorICoKKyAqIFxhdXRob3IgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUu
b3JnPgorICovCitjbGFzcyBDcmFwcHlJbmZlcmVuY2VyMiA6IHB1YmxpYyBTb3ByYW5vOjpGaWx0
ZXJNb2RlbAoreworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgICBDcmFwcHlJbmZlcmVuY2Vy
MihTb3ByYW5vOjpNb2RlbCogcGFyZW50ID0gMCk7CisgICAgfkNyYXBweUluZmVyZW5jZXIyKCk7
CisKKyAgICAvKioKKyAgICAgKiBccmVpbXBsIHRvIHVwZGF0ZSBpbnRlcm5hbCBzdHJ1Y3R1cmVz
CisgICAgICovCisgICAgdm9pZCBzZXRQYXJlbnRNb2RlbCggU29wcmFubzo6TW9kZWwqIG1vZGVs
ICk7CisKKyAgICBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIGFkZFN0YXRlbWVudCggY29uc3Qg
U29wcmFubzo6U3RhdGVtZW50JiBzdGF0ZW1lbnQgKTsKKyAgICBTb3ByYW5vOjpFcnJvcjo6RXJy
b3JDb2RlIHJlbW92ZVN0YXRlbWVudCggY29uc3QgU29wcmFubzo6U3RhdGVtZW50JiBzdGF0ZW1l
bnQgKTsKKyAgICBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIHJlbW92ZUFsbFN0YXRlbWVudHMo
IGNvbnN0IFNvcHJhbm86OlN0YXRlbWVudCYgc3RhdGVtZW50ICk7CisKKyAgICB1c2luZyBTb3By
YW5vOjpGaWx0ZXJNb2RlbDo6YWRkU3RhdGVtZW50OworICAgIHVzaW5nIFNvcHJhbm86OkZpbHRl
ck1vZGVsOjpyZW1vdmVTdGF0ZW1lbnQ7CisgICAgdXNpbmcgU29wcmFubzo6RmlsdGVyTW9kZWw6
OnJlbW92ZUFsbFN0YXRlbWVudHM7CisKKyAgICAvKioKKyAgICAgKiBBbGwgaW5mZXJyZWQgdHJp
cGxlcyBhcmUgc3RvcmVkIGluIHRoZSBvbmUgY3JhcHB5IGluZmVyZW5jZSBncmFwaC4KKyAgICAg
KiBUaHVzLCByZW1vdmluZyBpbmZlcmVuY2UgaXMgYXMgc2ltcGxlIGFzIHJlbW92aW5nIHRoaXMg
b25lIGdyYXBoLgorICAgICAqLworICAgIFFVcmwgY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpIGNv
bnN0OworCisgICAgYm9vbCBpc1R5cGVWaXNpYmxlKCBjb25zdCBRVXJsJiB0eXBlVXJpICkgY29u
c3Q7CisKK1FfU0lHTkFMUzoKKyAgICAvKioKKyAgICAgKiBFbWl0dGVkIG9uY2UgYSBjYWxsIHRv
IHVwZGF0ZUFsbFJlc291cmNlcygpIGhhcyBmaW5pc2hlZC4KKyAgICAgKi8KKyAgICB2b2lkIGFs
bFJlc291cmNlc1VwZGF0ZWQoKTsKKworcHVibGljIFFfU0xPVFM6CisgICAgLyoqCisgICAgICog
VXBkYXRlIHRoZSBpbnRlcm5hbCBtYXAgb2Ygc3VwZXIgdHlwZXMgdGhhdCBpcyB1c2VkIHRvIGRl
dGVybWluZSB3aGljaAorICAgICAqIHR5cGUgc3RhdGVtZW50cyBuZWVkIHRvIGJlIGFkZGVkIGFu
ZCByZW1vdmVkLiBJdCBtYWtlcyBzZW5zZSB0byBjYWxsIHRoaXMKKyAgICAgKiB3aGVuIHRoZSBv
bnRvbG9naWVzIGluIHRoZSBtb2RlbCBjaGFuZ2UuCisgICAgICovCisgICAgdm9pZCB1cGRhdGVJ
bmZlcmVuY2VJbmRleCgpOworCisgICAgLyoqCisgICAgICogVXBkYXRlIGFsbCB0eXBlcyBvZiBh
bGwgcmVzb3VyY2VzIGluIHRoZSBtb2RlbC4gVGhpcyBtZXRob2Qgd2lsbCBhZGQgc3VwZXJ0eXBl
CisgICAgICogc3RhdGVtZW50cyBidXQgTk9UIHJlbW92ZSBhbnkgc3VwZXJmbHVvdXMgc3RhdGVt
ZW50cy4gVG8gYWNoaWV2ZSB0aGUgbGF0dGVyIGNhbGwKKyAgICAgKiByZW1vdmVDb250ZXh0KGNy
YXBweUluZmVyZW5jZUNvbnRleHQoKSkgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QuCisgICAg
ICovCisgICAgdm9pZCB1cGRhdGVBbGxSZXNvdXJjZXMoKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGFkZEluZmVyZW5jZVN0YXRlbWVudHMoIGNvbnN0IFFVcmwmIHJlc291cmNlLCBjb25zdCBRVXJs
JiB0eXBlICk7CisgICAgdm9pZCBhZGRJbmZlcmVuY2VTdGF0ZW1lbnRzKCBjb25zdCBRVXJsJiBy
ZXNvdXJjZSwgY29uc3QgUVNldDxRVXJsPiYgdHlwZXMgKTsKKyAgICB2b2lkIHJlbW92ZUluZmVy
ZW5jZVN0YXRlbWVudHMoIGNvbnN0IFFVcmwmIHJlc291cmNlLCBjb25zdCBRVXJsJiB0eXBlICk7
CisgICAgdm9pZCByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCBjb25zdCBRVXJsJiByZXNvdXJj
ZSwgY29uc3QgUUxpc3Q8UVVybD4mIHR5cGVzICk7CisgICAgdm9pZCByZW1vdmVJbmZlcmVuY2VT
dGF0ZW1lbnRzKCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUUxpc3Q8U29wcmFubzo6Tm9k
ZT4mIHR5cGVzICk7CisKKyAgICBlbnVtIFZpc2liaWxpdHkgeworICAgICAgICBWaXNpYmxlLAor
ICAgICAgICBOb25WaXNpYmxlLAorICAgICAgICBVbmRlZmluZWRWaXNpYmlsaXR5CisgICAgfTsK
KworICAgIHZvaWQgc2V0VmlzaWJpbGl0eShjb25zdCBRVXJsJiByZXNvdXJjZSwgVmlzaWJpbGl0
eSB2aXNpYmlsaXR5KTsKKworICAgIGNsYXNzIFVwZGF0ZUFsbFJlc291cmNlc1RocmVhZDsKKyAg
ICBjbGFzcyBQcml2YXRlOworICAgIFByaXZhdGUqIGNvbnN0IGQ7Cit9OworCisjZW5kaWYgLy8g
Q1JBUFBZSU5GRVJFTkNFUjJfSApJbmRleDogc2VydmljZXMvc3RvcmFnZS9uZXBvbXVrY29yZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS9uZXBvbXVrY29yZS5jcHAJKHJldmlz
aW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL25lcG9tdWtjb3JlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODcsNiArODcsOSBAQAogICAgIG1fcmVwb3NpdG9yeS0+c2V0RW5hYmxlUXVl
cnlQcmVmaXhFeHBhbnNpb24oZmFsc2UpOwogICAgIG1fcmVwb3NpdG9yeS0+c2V0RW5hYmxlUXVl
cnlQcmVmaXhFeHBhbnNpb24odHJ1ZSk7CiAKKyAgICAvLyB0aGUgZmlyc3QgdGltZSB0aGlzIGlz
IGEgdmVyeSBsb25nIHByb2NlZHVyZS4gVGh1cywgd2UgZG8gaXQgd2hpbGUgTmVwb211ayBpcyBh
Y3RpdmUgYWx0aG91Z2ggdGhlbiBzb21lIHF1ZXJpZXMgbWlnaHQgcmV0dXJuIGludmFsaWQgcmVz
dWx0cworICAgIG1fcmVwb3NpdG9yeS0+dXBkYXRlSW5mZXJlbmNlKCk7CisKICAgICBpZiAoICFt
X2luaXRpYWxpemVkICkgewogICAgICAgICAvLyBhbmQgZmluYWxseSB3ZSBhcmUgZG9uZTogdGhl
IHJlcG9zaXRvcnkgaXMgb25saW5lIGFuZCB0aGUgb250b2xvZ2llcyBhcmUgbG9hZGVkLgogICAg
ICAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMTIxMzk0MCkKKysrIHNlcnZpY2VzL3N0b3JhZ2UvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTE3LDYgKzE3LDggQEAKICAgb250b2xvZ3ltYW5hZ2VybW9kZWwuY3Bw
CiAgIGdyYXBocmV0cmlldmVyLmNwcAogICBjcmFwcHlpbmZlcmVuY2VyLmNwcAorICBjcmFwcHlp
bmZlcmVuY2VyMi5jcHAKKyAgdHlwZXZpc2liaWxpdHl0cmVlLmNwcAogICApCiAKIHNvcHJhbm9f
YWRkX29udG9sb2d5KHN0b3JhZ2VfU1JDUwpAQCAtNTQsMyArNTYsNSBAQAogICBUQVJHRVRTIG5l
cG9tdWtzdG9yYWdlCiAgIERFU1RJTkFUSU9OICR7UExVR0lOX0lOU1RBTExfRElSfSkKICMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWRkX3N1YmRpcmVjdG9yeSh0ZXN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>56274</attachid>
            <date>2011-01-21 10:53:44 +0000</date>
            <delta_ts>2011-01-26 09:05:30 +0000</delta_ts>
            <desc>Updating patches like crazy: this is probably the best I can do for the initial update. (kdebase/runtime/nepomuk)</desc>
            <filename>kdebase-runtime-nepomuk-storage.diff</filename>
            <type>application/octet-stream</type>
            <size>83876</size>
            <attacher name="Sebastian Trueg">trueg</attacher>
            
              <data encoding="base64">SW5kZXg6IG9udG9sb2dpZXMva3V2by50cmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG9udG9sb2dpZXMva3V2
by50cmlnCShyZXZpc2lvbiAxMjEzOTQwKQorKysgb250b2xvZ2llcy9rdXZvLnRyaWcJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDYgKzQ3LDkgQEAKICAgICByZGZzOlJlc291cmNlCiAgICAgICAgIG5h
bzp1c2VyVmlzaWJsZSB0cnVlIC4KIAorICAgIG5hbzp1c2VyVmlzaWJsZQorICAgICAgICBuYW86
dXNlclZpc2libGUgZmFsc2UgLgorCiAgICAgbnVhbzpFdmVudAogICAgICAgICBuYW86dXNlclZp
c2libGUgZmFsc2UgLgogCkluZGV4OiBzZXJ2aWNlcy9zdHJpZ2kvaW5kZXhzY2hlZHVsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0cmlnaS9pbmRleHNjaGVkdWxlci5jcHAJKHJldmlz
aW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdHJpZ2kvaW5kZXhzY2hlZHVsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNzYsNiArMzc2LDEyIEBACiAgICAgICAgIG1faW5kZXhlci0+aW5kZXhG
aWxlKCBkaXJJbmZvICk7CiAgICAgfQogCisgICAgLy8gaWdub3JlIGZvbGRlcnMgdGhhdCBhcmUg
c2ltcGx5IHN5bWxpbmtzIGFzIHRoYXQgd291bGQgZ2V0IHVzIGludG8gdG9ucyBvZiB0cm91Ymxl
CisgICAgLy8gaW5jbHVkaW5nIHN0YWxlIGRhdGEgb25jZSB0aGUgbGluayBpcyByZW1vdmVkIG9y
IGR1cGxpY2F0aW9uIG9mIGRhdGEKKyAgICBpZiggZGlySW5mby5pc1N5bUxpbmsoKSApIHsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgLy8gZ2V0IGEgbWFwIG9mIGFsbCBpbmRl
eGVkIGZpbGVzIGZyb20gdGhlIGRpciBpbmNsdWRpbmcgdGhlaXIgc3RvcmVkIG10aW1lCiAgICAg
UUhhc2g8UVN0cmluZywgUURhdGVUaW1lPiBmaWxlc0luU3RvcmUgPSBnZXRDaGlsZHJlbiggZGly
ICk7CiAgICAgUUhhc2g8UVN0cmluZywgUURhdGVUaW1lPjo6aXRlcmF0b3IgZmlsZXNJblN0b3Jl
RW5kID0gZmlsZXNJblN0b3JlLmVuZCgpOwpJbmRleDogc2VydmljZXMvc3RyaWdpL3N0cmlnaXNl
cnZpY2Vjb25maWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0cmlnaS9zdHJpZ2lzZXJ2
aWNlY29uZmlnLmNwcAkocmV2aXNpb24gMTIxMzk0MCkKKysrIHNlcnZpY2VzL3N0cmlnaS9zdHJp
Z2lzZXJ2aWNlY29uZmlnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDcgKzIwMCw3IEBACiBu
YW1lc3BhY2UgewogICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVk
IGZvbGRlciBmIHdvdWxkIGFscmVhZHkgYmUgaW5jbHVkZWQgb3IgZXhjbHVkZWQgdXNpbmcgdGhl
IGxpc3QKLSAgICAgKiBmb2xkZXJzCisgICAgICogZm9sZGVycy4KICAgICAgKi8KICAgICBib29s
IGFscmVhZHlJbkxpc3QoIGNvbnN0IFFMaXN0PFFQYWlyPFFTdHJpbmcsIGJvb2w+ID4mIGZvbGRl
cnMsIGNvbnN0IFFTdHJpbmcmIGYsIGJvb2wgaW5jbHVkZSApCiAgICAgewpAQCAtMjM3LDggKzIz
NywxNCBAQAogICAgIHsKICAgICAgICAgaW50IGkgPSAwOwogICAgICAgICB3aGlsZSAoIGkgPCBy
ZXN1bHQuY291bnQoKSApIHsKLSAgICAgICAgICAgIGlmICggcmVzdWx0W2ldLmZpcnN0LmlzRW1w
dHkoKSB8fAotICAgICAgICAgICAgICAgICBhbHJlYWR5SW5MaXN0KCByZXN1bHQsIHJlc3VsdFtp
XS5maXJzdCwgcmVzdWx0W2ldLnNlY29uZCApICkKKyAgICAgICAgICAgIC8vIFRoZSBJbmRleFNj
aGVkdWxlciBkb2VzIG5ldmVyIGxpc3QvaW5kZXggaGlkZGVuIGZpbGVzLiBUaHVzLCBpZiB3ZSBy
ZW1vdmUgaGlkZGVuIGZvbGRlcnMgZnJvbQorICAgICAgICAgICAgLy8gdGhlIGNhY2hlIGhlcmUg
KEV4YW1wbGU6IC9mb28gYW5kIC9mb28vLmJhciBhcmUgaW5kZXhlZCkgdGhleSB3aWxsIG5ldmVy
IGdldCBpbmRleGVkLgorICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgcGF0aCA9IHJlc3VsdFtp
XS5maXJzdDsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wmIGV4Y2x1ZGUgPSByZXN1bHRbaV0uc2Vj
b25kOworICAgICAgICAgICAgaWYgKCAoIHBhdGguaXNFbXB0eSgpIHx8CisgICAgICAgICAgICAg
ICAgICAgYWxyZWFkeUluTGlzdCggcmVzdWx0LCBwYXRoLCBleGNsdWRlICkgKSAmJgorICAgICAg
ICAgICAgICAgICAoIGV4Y2x1ZGUgfHwKKyAgICAgICAgICAgICAgICAgICAhUUZpbGVJbmZvKCBw
YXRoICkuaXNIaWRkZW4oKSApICkKICAgICAgICAgICAgICAgICByZXN1bHQucmVtb3ZlQXQoIGkg
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICArK2k7CkluZGV4OiBzZXJ2aWNl
cy9zdG9yYWdlL3Rlc3QvdHlwZXZpc2liaWxpdHl0cmVldGVzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNl
cnZpY2VzL3N0b3JhZ2UvdGVzdC90eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmgJKHJldmlzaW9uIDAp
CisrKyBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvdHlwZXZpc2liaWxpdHl0cmVldGVzdC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IE5lcG9tdWsgS0RFIHByb2plY3QuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIFRy
dWVnIDx0cnVlZ0BrZGUub3JnPgorCisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24g
Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55
CisgICBsYXRlciB2ZXJzaW9uIGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYu
IChvciBpdHMKKyAgIHN1Y2Nlc3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUg
ZS5WLiksIHdoaWNoIHNoYWxsCisgICBhY3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24g
NiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxpY2Vuc2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiAg
SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2lmbmRl
ZiBUWVBFVklTSUJJTElUWVRSRUVURVNUX0gKKyNkZWZpbmUgVFlQRVZJU0lCSUxJVFlUUkVFVEVT
VF9ICisKKyNpbmNsdWRlIDxRT2JqZWN0PgorCitjbGFzcyBLVGVtcERpcjsKK2NsYXNzIFR5cGVW
aXNpYmlsaXR5VHJlZTsKK25hbWVzcGFjZSBTb3ByYW5vIHsKK2NsYXNzIE1vZGVsOworfQorCitj
bGFzcyBUeXBlVmlzaWJpbGl0eVRyZWVUZXN0IDogcHVibGljIFFPYmplY3QKK3sKKyAgICBRX09C
SkVDVAorCitwcml2YXRlIFFfU0xPVFM6CisgICAgdm9pZCBpbml0VGVzdENhc2UoKTsKKyAgICB2
b2lkIGNsZWFudXBUZXN0Q2FzZSgpOworICAgIHZvaWQgaW5pdCgpOworICAgIHZvaWQgdGVzdFR5
cGVWaXNpYmlsaXR5VHJlZSgpOworCitwcml2YXRlOgorICAgIEtUZW1wRGlyKiBtX3N0b3JhZ2VE
aXI7CisgICAgU29wcmFubzo6TW9kZWwqIG1fbW9kZWw7CisgICAgVHlwZVZpc2liaWxpdHlUcmVl
KiBtX3R5cGVUcmVlOworfTsKKworI2VuZGlmIC8vIFRZUEVWSVNJQklMSVRZVFJFRVRFU1RfSApJ
bmRleDogc2VydmljZXMvc3RvcmFnZS90ZXN0L2NyYXBweWluZmVyZW5jZXIydGVzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS90ZXN0L2NyYXBweWluZmVyZW5jZXIydGVzdC5j
cHAJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNl
cjJ0ZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOTkgQEAKKy8qCisgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUgcHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykg
MjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5vcmc+CisKKyAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
dmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZlcnNpb24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJl
cnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAgc3VjY2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBt
ZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2ggc2hhbGwKKyAgIGFjdCBhcyBhIHByb3h5IGRl
ZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24gMyBvZiB0aGUgbGljZW5zZS4KKworICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz
Lz4uCisqLworCisjaW5jbHVkZSAiY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmgiCisjaW5jbHVkZSAi
Li4vY3JhcHB5aW5mZXJlbmNlcjIuaCIKKworI2luY2x1ZGUgPFF0VGVzdD4KKyNpbmNsdWRlICJx
dGVzdF9rZGUuaCIKKworI2luY2x1ZGUgPFNvcHJhbm8vU29wcmFubz4KKworI2luY2x1ZGUgPGt0
ZW1wZGlyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBTb3ByYW5vOworCitRX0RFQ0xBUkVfTUVUQVRZ
UEUoU29wcmFubzo6U3RhdGVtZW50KQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6aW5p
dFRlc3RDYXNlKCkKK3sKKyAgICBxUmVnaXN0ZXJNZXRhVHlwZTxTb3ByYW5vOjpTdGF0ZW1lbnQ+
KCk7CisKKyAgICAvLyB3ZSBuZWVkIHRvIHVzZSBhIFZpcnR1b3NvIG1vZGVsIGFzIHRtcCBtb2Rl
bCBzaW5jZSByZWRsYW5kIG1pc3NlcyBpbXBvcnRhbnQgU1BBUlFMIGZlYXR1cmVzCisgICAgLy8g
dGhhdCBhcmUgdXNlZCBieSBsaWJuZXBvbXVrIGJlbG93CisgICAgY29uc3QgU29wcmFubzo6QmFj
a2VuZCogYmFja2VuZCA9IFNvcHJhbm86OlBsdWdpbk1hbmFnZXI6Omluc3RhbmNlKCktPmRpc2Nv
dmVyQmFja2VuZEJ5TmFtZSggInZpcnR1b3NvYmFja2VuZCIgKTsKKyAgICBRVkVSSUZZKCBiYWNr
ZW5kICk7CisgICAgbV9zdG9yYWdlRGlyID0gbmV3IEtUZW1wRGlyKCk7CisgICAgbV9iYXNlTW9k
ZWwgPSBiYWNrZW5kLT5jcmVhdGVNb2RlbCggU29wcmFubzo6QmFja2VuZFNldHRpbmdzKCkgPDwg
U29wcmFubzo6QmFja2VuZFNldHRpbmcoU29wcmFubzo6QmFja2VuZE9wdGlvblN0b3JhZ2VEaXIs
IG1fc3RvcmFnZURpci0+bmFtZSgpKSApOworICAgIFFWRVJJRlkoIG1fYmFzZU1vZGVsICk7CisK
KyAgICBtX21vZGVsID0gbmV3IENyYXBweUluZmVyZW5jZXIyKCBtX2Jhc2VNb2RlbCApOworfQor
Cit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6Y2xlYW51cFRlc3RDYXNlKCkKK3sKKyAgICBk
ZWxldGUgbV9tb2RlbDsKKyAgICBkZWxldGUgbV9iYXNlTW9kZWw7CisgICAgZGVsZXRlIG1fc3Rv
cmFnZURpcjsKK30KKworCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6aW5pdCgpCit7Cisg
ICAgbV9iYXNlTW9kZWwtPnJlbW92ZUFsbFN0YXRlbWVudHMoKTsKKworICAgIC8vCisgICAgLy8g
d2UgY3JlYXRlIG9uZSBmYWtlIG9udG9sb2d5CisgICAgLy8KKyAgICAvLyBBCisgICAgLy8gfC0g
QgorICAgIC8vICAgIHwtIEMgLSBpbnZpc2libGUKKyAgICAvLyAgICAgICB8LSBECisgICAgLy8g
ICAgICAgfC0gRQorICAgIC8vCisgICAgLy8gRgorICAgIC8vIHwtIEUKKyAgICAvLworICAgIC8v
IEwxCisgICAgLy8gfC0gTDIKKyAgICAvLyAgICB8LSBMMQorICAgIC8vCisgICAgUVVybCBncmFw
aCgiZ3JhcGg6L29udG8iKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBncmFwaCwg
U29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5S
TDo6T250b2xvZ3koKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBR
VXJsKCJuZXBvbXVrOi9HIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3By
YW5vOjpWb2NhYnVsYXJ5OjpOUkw6Okluc3RhbmNlQmFzZSgpLCBncmFwaCApOworCisgICAgbV9i
YXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovQSIpLCBTb3ByYW5vOjpWb2NhYnVs
YXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3Jh
cGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9CIiksIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZT
OjpDbGFzcygpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwo
Im9udG86L0MiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0
YXRlbWVudCggUVVybCgib250bzovRCIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX2Jh
c2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9FIiksIFNvcHJhbm86OlZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFw
aCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0YiKSwgU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6
OkNsYXNzKCksIGdyYXBoICk7CisKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJs
KCJvbnRvOi9FIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVy
bCgib250bzovQyIpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFV
cmwoIm9udG86L0IiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBR
VXJsKCJvbnRvOi9BIiksIGdyYXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCgg
UVVybCgib250bzovQyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCks
IFFVcmwoIm9udG86L0IiKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50
KCBRVXJsKCJvbnRvOi9EIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2Yo
KSwgUVVybCgib250bzovQyIpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1l
bnQoIFFVcmwoIm9udG86L0UiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NP
ZigpLCBRVXJsKCJvbnRvOi9GIiksIGdyYXBoICk7CisKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1l
bnQoIFFVcmwoIm9udG86L0MiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJs
ZSgpLCBMaXRlcmFsVmFsdWUoZmFsc2UpLCBncmFwaCApOworCisgICAgLy8gdGhlIGxvb3B5IGNs
YXNzZXMKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9MMSIpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Uzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJs
KCJvbnRvOi9MMSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFV
cmwoIm9udG86L0wyIiksIGdyYXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCgg
UVVybCgib250bzovTDIiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9iYXNlTW9kZWwt
PmFkZFN0YXRlbWVudCggUVVybCgib250bzovTDIiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Uzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9MMSIpLCBncmFwaCApOworCisgICAgbV9tb2Rl
bC0+dXBkYXRlSW5mZXJlbmNlSW5kZXgoKTsKK30KKworLy8gbWFrZSBzdXJlIG9ubHkgdGhlIG9u
ZSBzdGF0ZW1lbnQgaXMgYWRkZWQKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0QWRk
QW55U3RhdGVtZW50KCkKK3sKKyAgICBjb25zdCBpbnQgY250ID0gbV9tb2RlbC0+c3RhdGVtZW50
Q291bnQoKTsKKyAgICBTdGF0ZW1lbnQgcyggUVVybCgibmVwb211azovQSIpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpOQU86Omhhc1RhZygpLCBRVXJsKCJuZXBvbXVrOi9UIiksIFFVcmwoIm5lcG9t
dWs6L0ciKSApOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmFkZFN0YXRlbWVudChzKSk7CisgICAg
UUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KzEpOworICAgIFFWRVJJRlko
bV9tb2RlbC0+Y29udGFpbnNTdGF0ZW1lbnQocykpOworfQorCisvLyBtYWtlIHN1cmUgYWxsIHN1
cGVyY2xhc3NlcyBhcmUgYWRkZWQgYXMgdHlwZSwgdG9vCit2b2lkIENyYXBweUluZmVyZW5jZXIy
VGVzdDo6dGVzdEFkZFR5cGVTdGF0ZW1lbnQoKQoreworICAgIGludCBjbnQgPSBtX21vZGVsLT5z
dGF0ZW1lbnRDb3VudCgpOworICAgIFFVcmwgcmVzQSgibmVwb211azovQSIpOworICAgIG1fbW9k
ZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwg
UVVybCgib250bzovQSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIFFDT01QQVJFKG1fbW9k
ZWwtPnN0YXRlbWVudENvdW50KCksIGNudCszKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRh
aW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250
YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExp
dGVyYWxWYWx1ZSgxKSkpOworCisgICAgY250ID0gbV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKTsK
KyAgICBRVXJsIHJlc0IoIm5lcG9tdWs6L0IiKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQo
cmVzQiwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSwg
UVVybCgibmVwb211azovRyIpKTsKKyAgICBRQ09NUEFSRShtX21vZGVsLT5zdGF0ZW1lbnRDb3Vu
dCgpLCBjbnQrNCk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChy
ZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQiIpKSk7CisgICAgUVZF
UklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgUVVybCgib250bzovQSIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWlu
c0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFp
bnNBbnlTdGF0ZW1lbnQocmVzQiwgVm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRl
cmFsVmFsdWUoMSkpKTsKKworICAgIGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7Cisg
ICAgUVVybCByZXNDKCJuZXBvbXVrOi9DIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJl
c0MsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIiksIFFV
cmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQo
KSwgY250KzQpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVz
QywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0MiKSkpOworICAgIFFWRVJJ
RlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0
eXBlKCksIFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNB
bnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0Ei
KSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9j
YWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNl
KCkpKTsKKworICAgIGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCBy
ZXNEKCJuZXBvbXVrOi9EIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0QsIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9FIiksIFFVcmwoIm5lcG9t
dWs6L0ciKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250Kzcp
OworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0YiKSkpOworICAgIFFWRVJJRlkobV9tb2Rl
bC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFV
cmwoIm9udG86L0UiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1l
bnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0MiKSkpOworICAg
IFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29u
dGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9u
dG86L0EiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVz
RCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJl
c291cmNlKCkpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJl
c0QsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7Cit9
CisKKy8vIG1ha2Ugc3VyZSB0aGUgbmV3IHJlbGF0aW9uIGlzIHRha2VuIGludG8gYWNjb3VudCB3
aXRoIHRoZSBuZXh0IGFkZFN0YXRlbWVudAordm9pZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRl
c3RBZGRTdWJDbGFzc09mU3RhdGVtZW50KCkKK3sKKyAgICBRRVhQRUNUX0ZBSUwoIiIsICJOb3Qg
aW1wbGVtZW50ZWQgeWV0IiwgQWJvcnQpOworfQorCisvLyBtYWtlIHN1cmUgb25seSB0aGUgb25l
IHN0YXRlbWVudCBpcyByZW1vdmVkCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6dGVzdFJl
bW92ZUFueVN0YXRlbWVudCgpCit7Cit9CisKKy8vIG1ha2Ugc3VyZSB0aGUgYXBwcm9wcmlhdGUg
dHlwZXMgYXJlIHJlbW92ZWQsIHRvbworLy8gY2hlY2sgMiBjYXNlczogMS4gb25seSB0aGUgb25l
IHR5cGUsIDIuIHR3byB0eXBlcyB3aXRoIGludGVyc2VjdGluZyBzdXBlcmNsYXNzZXMKK3ZvaWQg
Q3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0UmVtb3ZlVHlwZVN0YXRlbWVudCgpCit7CisgICAg
aW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNBKCJuZXBv
bXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7
CisgICAgbV9tb2RlbC0+cmVtb3ZlU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6
OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAg
UUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KTsKKyAgICBRVkVSSUZZKCFt
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgUVVybCgib250bzovQSIpKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlT
dGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxh
cnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0Fu
eVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxW
YWx1ZSgxKSkpOworCisgICAgLy8gYWRkIHR3byB0eXBlcyB3aXRoIGludGVyc2VjdGluZyBzdXBl
ciB0eXBlcworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVs
YXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQiIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOwor
ICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIC8vIHJl
bW92ZSBvbmUgb2YgdGhlbQorICAgIG1fbW9kZWwtPnJlbW92ZVN0YXRlbWVudChyZXNBLCBTb3By
YW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQiIpLCBRVXJsKCJuZXBv
bXVrOi9HIikpOworICAgIC8vIG1ha2Ugc3VyZSBhbGwgaXMgd2VsbAorICAgIFFDT01QQVJFKG1f
bW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCs3KTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNv
bnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJv
bnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJl
c0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9FIikpKTsKKyAgICBRVkVS
SUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6
dHlwZSgpLCBRVXJsKCJvbnRvOi9DIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5z
QW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9C
IikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZv
Y2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKG1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgp
LCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKSk7CisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJW
aXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworfQorCisvLyBtYWtlIHN1cmUgdGhlIHJlbW92
ZWQgc3ViY2xhc3MgcmVsYXRpb24gaXMgdGFrZW4gaW50byBhY2NvdW50IHdpdGggdGhlIG5leHQg
YWRkU3RhdGVtZW50CisvLyBtYWtlIHN1cmUgdHlwZSBzdGF0ZW1lbnRzIHRoYXQgYXJlIG5vIGxv
bmdlciB2YWxpZCBhcmUgcmVtb3ZlZAordm9pZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRlc3RS
ZW1vdmVTdWJDbGFzc09mU3RhdGVtZW50KCkKK3sKKyAgICBRRVhQRUNUX0ZBSUwoIiIsICJOb3Qg
aW1wbGVtZW50ZWQgeWV0IiwgQWJvcnQpOworfQorCisvLyBtYWtlIHN1cmUgdGhlIGNvcnJlc3Bv
bmluZyBzdGF0ZW1lbnRzIGFyZSByZW1vdmVkIGFuZCBub3RoaW5nIGVsc2UKKy8vIHRlc3QgYWxs
IGNvbWJpbmF0aW9ucyBvZiBpbnZhbGlkIGFuZCB2YWxpZCBub2RlcyBpZiBwb3NzaWJsZQordm9p
ZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRlc3RSZW1vdmVBbGxTdGF0ZW1lbnRzKCkKK3sKKyAg
ICAvLyAxLiByZW1vdmUgdGhlIHdob2xlIHJlc291cmNlCisgICAgaW50IGNudCA9IG1fbW9kZWwt
PnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNBKCJuZXBvbXVrOi9BIik7CisgICAgbV9t
b2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgp
LCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRk
U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OmxhYmVsKCksIExpdGVy
YWxWYWx1ZShRTGF0aW4xU3RyaW5nKCJBIikpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1f
bW9kZWwtPnJlbW92ZUFsbFN0YXRlbWVudHMocmVzQSwgTm9kZSgpLCBOb2RlKCkpOworICAgIFFD
T01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCk7CisgICAgUVZFUklGWSghbV9t
b2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgTm9kZSgpLCBOb2RlKCksIE5vZGUoKSkp
OworCisgICAgLy8gMi4gcmVtb3ZlIGEgdHlwZSBmcm9tIHNldmVyYWwgcmVzb3VyY2VzCisgICAg
UVVybCByZXNCKCJuZXBvbXVrOi9CIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0Es
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwo
Im5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIiksIFFVcmwoIm5lcG9tdWs6
L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0IsIFNvcHJhbm86OlZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9CIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7Cisg
ICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0IsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6
dHlwZSgpLCBRVXJsKCJvbnRvOi9GIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2Rl
bC0+cmVtb3ZlQWxsU3RhdGVtZW50cyhOb2RlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6
dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNB
bnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2Fi
dWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5z
QW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9B
IikpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBW
b2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRiIpKSk7CisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJRlko
bV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBl
KCksIFFVcmwoIm9udG86L0EiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlT
dGF0ZW1lbnQocmVzQiwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSkp
OworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKG1fbW9k
ZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2li
bGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0Fu
eVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxW
YWx1ZSgxKSkpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCs3
KTsKKworICAgIC8vIDMuIHJlbW92ZSBhbGwgdHlwZXMgZnJvbSBvbmUgcmVzb3VyY2UKKyAgICBt
X21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBl
KCksIFFVcmwoIm9udG86L0UiKSwgUVVybCgibmVwb211azovRyIpKTsKKyAgICBtX21vZGVsLT5y
ZW1vdmVBbGxTdGF0ZW1lbnRzKHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgp
LCBOb2RlKCksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29u
dGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IE5vZGUoKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJl
c0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisK
KyAgICAvLyA0LiByZW1vdmUgYSBncmFwaAorICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNB
LCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBRVXJs
KCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpLCBRVXJsKCJuZXBvbXVr
Oi9HMiIpKTsKKyAgICBtX21vZGVsLT5yZW1vdmVDb250ZXh0KFFVcmwoIm5lcG9tdWs6L0ciKSk7
CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgTm9kZSgp
LCBOb2RlKCkpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJl
c0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIikpKTsK
KyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRSIpKSk7CisgICAgUVZFUklG
WSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFy
eTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0QiKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwt
PmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLCBRVXJsKCJvbnRvOi9DIikpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0Fu
eVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgi
b250bzovQiIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChy
ZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFy
eTo6UkRGUzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQ29u
dGV4dChRVXJsKCJuZXBvbXVrOi9HIikpKTsKK30KKworLy8gbWFrZSBzdXJlIHdlIGRvIG5vdCBy
dW4gaW50byBhbiBlbmRsZXNzIGxvb3AKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0
Q3ljbGljU3ViQ2xhc3NSZWxhdGlvbigpCit7CisgICAgaW50IGNudCA9IG1fbW9kZWwtPnN0YXRl
bWVudENvdW50KCk7CisgICAgUVVybCByZXNBKCJuZXBvbXVrOi9BIik7CisgICAgbV9tb2RlbC0+
YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJs
KCJvbnRvOi9MMSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIFFDT01QQVJFKG1fbW9kZWwt
PnN0YXRlbWVudENvdW50KCksIGNudCs0KTsgLy8gKzQgc2luY2UgTDEgaXMgdGhlcmUgdHdpY2U6
IHRoZSBvbmUgd2UgYWRkZWQgYW5kIHRoZSBzdXBlcmNsYXNzIG9mIEwyCisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgUVVybCgib250bzovTDEiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlT
dGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0wyIikp
KTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgp
KSk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0VXBkYXRlQWxsUmVzb3Vy
Y2VzKCkKK3sKKyAgICAvLyB3ZSBhZGQgYSBidW5jaCBvZiBzdGF0ZW1lbnRzIHRvIHRoZSBiYXNl
IG1vZGVsIGluc3RlYWQgb2YgZ29pbmcgdGhyb3VnaCB0aGUgY3JhcHB5IGluZmVyZW5jZSBtb2Rl
bAorICAgIFFVcmwgcmVzQSgibmVwb211azovQSIpOworICAgIFFVcmwgcmVzQigibmVwb211azov
QiIpOworICAgIFFVcmwgcmVzQygibmVwb211azovQyIpOworICAgIFFVcmwgcmVzRCgibmVwb211
azovRCIpOworCisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpLCBRVXJsKCJuZXBvbXVrOi9H
IikpOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQiwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSwgUVVybCgibmVwb211azovRyIpKTsK
KyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KHJlc0MsIFNvcHJhbm86OlZvY2FidWxhcnk6
OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAg
bV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudChyZXNELCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworCisgICAgbV9t
b2RlbC0+dXBkYXRlQWxsUmVzb3VyY2VzKCk7CisKKyAgICAvLyB3YWl0IGZvciB0aGUgYWJvdmUg
Y2FsbCB0byBmaW5pc2gKKyAgICBRRXZlbnRMb29wIGxvb3A7CisgICAgY29ubmVjdChtX21vZGVs
LCBTSUdOQUwoYWxsUmVzb3VyY2VzVXBkYXRlZCgpKSwgJmxvb3AsIFNMT1QocXVpdCgpKSk7Cisg
ICAgbG9vcC5leGVjKCk7CisKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVt
ZW50KHJlc0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEp
KSk7CisKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZv
Y2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICBR
VkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNDLCBWb2NhYnVsYXJ5OjpO
QU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworCisgICAgUVZFUklGWShtX21v
ZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNELCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNp
YmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworfQorCitRVEVTVF9LREVNQUlOX0NPUkUoQ3JhcHB5
SW5mZXJlbmNlcjJUZXN0KQorCisjaW5jbHVkZSAiY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0Lm1vYyIK
SW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvdGVzdC9jcmFwcHlpbmZlcmVuY2VyMnRlc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmgJ
KHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0
ZXN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgTmVwb211ayBLREUgcHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAxMCBT
ZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5vcmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVyc2lv
biAzLCBvciBhbnkKKyAgIGxhdGVyIHZlcnNpb24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNoaXAg
b2YgS0RFIGUuVi4gKG9yIGl0cworICAgc3VjY2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1iZXJz
aGlwIG9mIEtERSBlLlYuKSwgd2hpY2ggc2hhbGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmluZWQg
aW4gU2VjdGlvbiA2IG9mIHZlcnNpb24gMyBvZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisq
LworCisjaWZuZGVmIENSQVBQWUlORkVSRU5DRVIyVEVTVF9ICisjZGVmaW5lIENSQVBQWUlORkVS
RU5DRVIyVEVTVF9ICisKKyNpbmNsdWRlIDxRT2JqZWN0PgorCitjbGFzcyBLVGVtcERpcjsKK2Ns
YXNzIENyYXBweUluZmVyZW5jZXIyOworbmFtZXNwYWNlIFNvcHJhbm8geworY2xhc3MgTW9kZWw7
Cit9CisKK2NsYXNzIENyYXBweUluZmVyZW5jZXIyVGVzdCA6IHB1YmxpYyBRT2JqZWN0Cit7Cisg
ICAgUV9PQkpFQ1QKKworcHJpdmF0ZSBRX1NMT1RTOgorICAgIHZvaWQgaW5pdFRlc3RDYXNlKCk7
CisgICAgdm9pZCBjbGVhbnVwVGVzdENhc2UoKTsKKyAgICB2b2lkIGluaXQoKTsKKyAgICB2b2lk
IHRlc3RBZGRBbnlTdGF0ZW1lbnQoKTsKKyAgICB2b2lkIHRlc3RBZGRUeXBlU3RhdGVtZW50KCk7
CisgICAgdm9pZCB0ZXN0QWRkU3ViQ2xhc3NPZlN0YXRlbWVudCgpOworICAgIHZvaWQgdGVzdFJl
bW92ZUFueVN0YXRlbWVudCgpOworICAgIHZvaWQgdGVzdFJlbW92ZVR5cGVTdGF0ZW1lbnQoKTsK
KyAgICB2b2lkIHRlc3RSZW1vdmVTdWJDbGFzc09mU3RhdGVtZW50KCk7CisgICAgdm9pZCB0ZXN0
UmVtb3ZlQWxsU3RhdGVtZW50cygpOworICAgIHZvaWQgdGVzdEN5Y2xpY1N1YkNsYXNzUmVsYXRp
b24oKTsKKyAgICB2b2lkIHRlc3RVcGRhdGVBbGxSZXNvdXJjZXMoKTsKKworcHJpdmF0ZToKKyAg
ICBLVGVtcERpciogbV9zdG9yYWdlRGlyOworICAgIFNvcHJhbm86Ok1vZGVsKiBtX2Jhc2VNb2Rl
bDsKKyAgICBDcmFwcHlJbmZlcmVuY2VyMiogbV9tb2RlbDsKK307CisKKyNlbmRpZgpJbmRleDog
c2VydmljZXMvc3RvcmFnZS90ZXN0L3R5cGV2aXNpYmlsaXR5dHJlZXRlc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvdGVzdC90eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmNwcAko
cmV2aXNpb24gMCkKKysrIHNlcnZpY2VzL3N0b3JhZ2UvdGVzdC90eXBldmlzaWJpbGl0eXRyZWV0
ZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUgcHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAx
MCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5vcmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVy
c2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZlcnNpb24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNo
aXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAgc3VjY2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1i
ZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2ggc2hhbGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmlu
ZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24gMyBvZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u
CisqLworCisjaW5jbHVkZSAidHlwZXZpc2liaWxpdHl0cmVldGVzdC5oIgorI2luY2x1ZGUgIi4u
L3R5cGV2aXNpYmlsaXR5dHJlZS5oIgorCisjaW5jbHVkZSA8UXRUZXN0PgorI2luY2x1ZGUgInF0
ZXN0X2tkZS5oIgorCisjaW5jbHVkZSA8U29wcmFuby9Tb3ByYW5vPgorCisjaW5jbHVkZSA8a3Rl
bXBkaXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFNvcHJhbm87CisKK3ZvaWQgVHlwZVZpc2liaWxp
dHlUcmVlVGVzdDo6aW5pdFRlc3RDYXNlKCkKK3sKKyAgICAvLyB3ZSBuZWVkIHRvIHVzZSBhIFZp
cnR1b3NvIG1vZGVsIGFzIHRtcCBtb2RlbCBzaW5jZSByZWRsYW5kIG1pc3NlcyBpbXBvcnRhbnQg
U1BBUlFMIGZlYXR1cmVzCisgICAgLy8gdGhhdCBhcmUgdXNlZCBieSBsaWJuZXBvbXVrIGJlbG93
CisgICAgY29uc3QgU29wcmFubzo6QmFja2VuZCogYmFja2VuZCA9IFNvcHJhbm86OlBsdWdpbk1h
bmFnZXI6Omluc3RhbmNlKCktPmRpc2NvdmVyQmFja2VuZEJ5TmFtZSggInZpcnR1b3NvYmFja2Vu
ZCIgKTsKKyAgICBRVkVSSUZZKCBiYWNrZW5kICk7CisgICAgbV9zdG9yYWdlRGlyID0gbmV3IEtU
ZW1wRGlyKCk7CisgICAgbV9tb2RlbCA9IGJhY2tlbmQtPmNyZWF0ZU1vZGVsKCBTb3ByYW5vOjpC
YWNrZW5kU2V0dGluZ3MoKSA8PCBTb3ByYW5vOjpCYWNrZW5kU2V0dGluZyhTb3ByYW5vOjpCYWNr
ZW5kT3B0aW9uU3RvcmFnZURpciwgbV9zdG9yYWdlRGlyLT5uYW1lKCkpICk7CisgICAgUVZFUklG
WSggbV9tb2RlbCApOworCisgICAgbV90eXBlVHJlZSA9IG5ldyBUeXBlVmlzaWJpbGl0eVRyZWUo
IG1fbW9kZWwgKTsKK30KKwordm9pZCBUeXBlVmlzaWJpbGl0eVRyZWVUZXN0OjpjbGVhbnVwVGVz
dENhc2UoKQoreworICAgIGRlbGV0ZSBtX21vZGVsOworICAgIGRlbGV0ZSBtX3R5cGVUcmVlOwor
ICAgIGRlbGV0ZSBtX3N0b3JhZ2VEaXI7Cit9CisKKwordm9pZCBUeXBlVmlzaWJpbGl0eVRyZWVU
ZXN0Ojppbml0KCkKK3sKKyAgICBtX21vZGVsLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKCk7CisKKyAg
ICAvLyB3ZSBjcmVhdGUgb25lIGZha2Ugb250b2xvZ3kKKyAgICAvLworICAgIC8vIHNpdHVhdGlv
bnMgd2UgbmVlZCB0byB0ZXN0OgorICAgIC8vICogY2xhc3MgdGhhdCBpcyBtYXJrZWQgdmlzaWJs
ZSBzaG91bGQgc3RheSB2aXNpYmxlCisgICAgLy8gKiBjbGFzcyB0aGF0IGlzIG1hcmtlZCBpbnZp
c2libGUgc2hvdWxkIHN0YXkgaW52aXNpYmxlCisgICAgLy8gKiBub24tbWFya2VkIHN1YmNsYXNz
IG9mIHZpc2libGUgc2hvdWxkIGJlIHZpc2libGUsIHRvbworICAgIC8vICogbm9uLW1hcmtlZCBz
dWJjbGFzcyBvZiBpbnZpc2libGUgc2hvdWxkIGJlIGludmlzaWJsZSwgdG9vCisgICAgLy8gKiBt
YXJrZWQgc3ViY2xhc3Mgc2hvdWxkIGtlZXAgaXRzIG93biB2aXNpYmxpdHkgYW5kIG5vdCBpbmhl
cml0IGZyb20gcGFyZW50CisgICAgLy8gKiB3aG9sZSBicmFuY2ggc2hvdWxkIGluaGVyaXQgZnJv
bSBwYXJlbnQKKyAgICAvLyAqIGlmIG9uZSBwYXJlbnQgaXMgdmlzaWJsZSB0aGUgY2xhc3MgaXMg
dmlzaWJsZSwgdG9vLCBldmVuIGlmIE4gb3RoZXIgcGFyZW50cyBhcmUgbm90CisgICAgLy8gKiBp
ZiBhbGwgcGFyZW50cyBhcmUgaW52aXNpYmxlLCB0aGUgY2xhc3MgaXMgaW52aXNpYmxlLCBldmVu
IGlmIGhpZ2hlciB1cCBpbiB0aGUgYnJhbmNoIGEgY2xhc3MgaXMgdmlzaWJsZQorICAgIC8vICog
cHJvcGVybHkgaGFuZGxlIGxvb3BzIChhcyBpbjogZG8gbm90IHJ1biBpbnRvIGFuIGVuZGxlc3Mg
bG9vcCkKKyAgICAvLworICAgIC8vIEEKKyAgICAvLyB8LSBCIC0gaW52aXNpYmxlCisgICAgLy8g
ICAgfC0gQworICAgIC8vICAgICAgIHwtIEQgLSB2aXNpYmxlCisgICAgLy8gICAgICAgICAgfC0g
RQorICAgIC8vICAgICAgICAgICAgIHwtIEYKKyAgICAvLyAgICB8LSBHCisgICAgLy8KKyAgICAv
LyBBQSAtIGludmlzaWJsZQorICAgIC8vIHwgLSBGCisgICAgLy8gfCAtIEcKKyAgICAvLworICAg
IC8vIFgKKyAgICAvLyB8LSBZIC0gaW52aXNpYmxlCisgICAgLy8gICAgfC0gWgorICAgIC8vICAg
ICAgIHwtIFgKKworICAgIFFVcmwgZ3JhcGgoImdyYXBoOi9vbnRvIik7CisgICAgbV9tb2RlbC0+
YWRkU3RhdGVtZW50KCBncmFwaCwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNv
cHJhbm86OlZvY2FidWxhcnk6Ok5STDo6T250b2xvZ3koKSwgZ3JhcGggKTsKKworICAgIG1fbW9k
ZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsK
KyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0IiKSwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCks
IGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9DIiksIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZT
OjpDbGFzcygpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250
bzovRCIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQo
IFFVcmwoIm9udG86L0UiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9GIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1f
bW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5
OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGgg
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0FBIiksIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFz
cygpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovWCIp
LCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwo
Im9udG86L1kiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVt
ZW50KCBRVXJsKCJvbnRvOi9aIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworCisgICAgbV9tb2Rl
bC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9CIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
RlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQSIpLCBncmFwaCApOworICAgIG1fbW9kZWwt
PmFkZFN0YXRlbWVudCggUVVybCgib250bzovQyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZT
OjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0IiKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5h
ZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0QiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6
c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9DIiksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9FIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1
YkNsYXNzT2YoKSwgUVVybCgib250bzovRCIpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0
YXRlbWVudCggUVVybCgib250bzovRiIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJD
bGFzc09mKCksIFFVcmwoIm9udG86L0UiKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0
ZW1lbnQoIFFVcmwoIm9udG86L0ciKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xh
c3NPZigpLCBRVXJsKCJvbnRvOi9CIiksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVt
ZW50KCBRVXJsKCJvbnRvOi9GIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNz
T2YoKSwgUVVybCgib250bzovQUEiKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1l
bnQoIFFVcmwoIm9udG86L0ciKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NP
ZigpLCBRVXJsKCJvbnRvOi9BQSIpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVu
dCggUVVybCgib250bzovWSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09m
KCksIFFVcmwoIm9udG86L1giKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQo
IFFVcmwoIm9udG86L1oiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigp
LCBRVXJsKCJvbnRvOi9ZIiksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBR
VXJsKCJvbnRvOi9YIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwg
UVVybCgib250bzovWiIpLCBncmFwaCApOworCisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBR
VXJsKCJvbnRvOi9CIiksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwg
TGl0ZXJhbFZhbHVlKGZhbHNlKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQo
IFFVcmwoIm9udG86L0QiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgp
LCBMaXRlcmFsVmFsdWUodHJ1ZSksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50
KCBRVXJsKCJvbnRvOi9BQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxl
KCksIExpdGVyYWxWYWx1ZShmYWxzZSksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVt
ZW50KCBRVXJsKCJvbnRvOi9ZIiksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2li
bGUoKSwgTGl0ZXJhbFZhbHVlKGZhbHNlKSwgZ3JhcGggKTsKKworICAgIG1fdHlwZVRyZWUtPnJl
YnVpbGRUcmVlKCk7Cit9CisKK3ZvaWQgVHlwZVZpc2liaWxpdHlUcmVlVGVzdDo6dGVzdFR5cGVW
aXNpYmlsaXR5VHJlZSgpCit7CisgICAgUVZFUklGWShtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVy
bCgib250bzovQSIpKSk7CisgICAgUVZFUklGWSghbV90eXBlVHJlZS0+aXNWaXNpYmxlKFFVcmwo
Im9udG86L0IiKSkpOworICAgIFFWRVJJRlkoIW1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJv
bnRvOi9DIikpKTsKKyAgICBRVkVSSUZZKG1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRv
Oi9EIikpKTsKKyAgICBRVkVSSUZZKG1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9F
IikpKTsKKyAgICBRVkVSSUZZKG1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9GIikp
KTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgib250bzovRyIpKSk7
CisgICAgUVZFUklGWSghbV90eXBlVHJlZS0+aXNWaXNpYmxlKFFVcmwoIm9udG86L0FBIikpKTsK
KyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgib250bzovWCIpKSk7IC8v
IGJlY2F1c2Ugb25seSB0b3AtbGV2ZWwgY2xhc3NlcyBpbmhlcml0IGZyb20gcmRmczpSZXNvdXJj
ZQorICAgIFFWRVJJRlkoIW1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9ZIikpKTsK
KyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgib250bzovWiIpKSk7Cit9
CisKK1FURVNUX0tERU1BSU5fQ09SRShUeXBlVmlzaWJpbGl0eVRyZWVUZXN0KQorCisjaW5jbHVk
ZSAidHlwZXZpc2liaWxpdHl0cmVldGVzdC5tb2MiCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3Rl
c3QvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS90ZXN0L0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFnZS90ZXN0L0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACitzZXQoIEVYRUNVVEFCTEVf
T1VUUFVUX1BBVEggJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9ICkKKwora2RlNF9hZGRfdW5p
dF90ZXN0KGNyYXBweWluZmVyZW5jZXIydGVzdAorICBjcmFwcHlpbmZlcmVuY2VyMnRlc3QuY3Bw
CisgIC4uL2NyYXBweWluZmVyZW5jZXIyLmNwcAorICAuLi90eXBldmlzaWJpbGl0eXRyZWUuY3Bw
KQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNyYXBweWluZmVyZW5jZXIydGVzdAorICAke1FUX1FU
VEVTVF9MSUJSQVJZfQorICAke1NPUFJBTk9fTElCUkFSSUVTfQorICAke0tERTRfS0RFQ09SRV9M
SUJTfSkKKwora2RlNF9hZGRfdW5pdF90ZXN0KHR5cGV2aXNpYmlsaXR5dHJlZXRlc3QKKyAgdHlw
ZXZpc2liaWxpdHl0cmVldGVzdC5jcHAKKyAgLi4vdHlwZXZpc2liaWxpdHl0cmVlLmNwcCkKK3Rh
cmdldF9saW5rX2xpYnJhcmllcyh0eXBldmlzaWJpbGl0eXRyZWV0ZXN0CisgICR7UVRfUVRURVNU
X0xJQlJBUll9CisgICR7U09QUkFOT19MSUJSQVJJRVN9CisgICR7S0RFNF9LREVDT1JFX0xJQlN9
KQpJbmRleDogc2VydmljZXMvc3RvcmFnZS9vbnRvbG9neWxvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gc2VydmljZXMvc3RvcmFnZS9vbnRvbG9neWxvYWRlci5jcHAJKHJldmlzaW9uIDEyMTM5NDAp
CisrKyBzZXJ2aWNlcy9zdG9yYWdlL29udG9sb2d5bG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQsMTQgKzI0LDEwIEBACiAKICNpbmNsdWRlIDxTb3ByYW5vL0dsb2JhbD4KICNpbmNsdWRl
IDxTb3ByYW5vL05vZGU+Ci0jaW5jbHVkZSA8U29wcmFuby9MaXRlcmFsVmFsdWU+CiAjaW5jbHVk
ZSA8U29wcmFuby9Nb2RlbD4KICNpbmNsdWRlIDxTb3ByYW5vL1BsdWdpbk1hbmFnZXI+CiAjaW5j
bHVkZSA8U29wcmFuby9TdGF0ZW1lbnRJdGVyYXRvcj4KLSNpbmNsdWRlIDxTb3ByYW5vL1F1ZXJ5
UmVzdWx0SXRlcmF0b3I+CiAjaW5jbHVkZSA8U29wcmFuby9QYXJzZXI+Ci0jaW5jbHVkZSA8U29w
cmFuby9Wb2NhYnVsYXJ5L05BTz4KLSNpbmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvUkRGUz4K
IAogI2luY2x1ZGUgPEtDb25maWc+CiAjaW5jbHVkZSA8S0NvbmZpZ0dyb3VwPgpAQCAtMTg4LDcg
KzE4NCw2IEBACiAgICAgZWxzZSB7CiAgICAgICAgIGQtPmZvcmNlT250b2xvZ3lVcGRhdGUgPSBm
YWxzZTsKICAgICAgICAgZC0+dXBkYXRlVGltZXIuc3RvcCgpOwotICAgICAgICB1cGRhdGVVc2Vy
VmlzaWJpbGl0eSgpOwogICAgICAgICBlbWl0IG9udG9sb2d5TG9hZGluZ0ZpbmlzaGVkKHRoaXMp
OwogICAgIH0KIH0KQEAgLTIyNSwxMTUgKzIyMCw0IEBACiAgICAgfQogfQogCi0KLW5hbWVzcGFj
ZSB7Ci0gICAgc3RydWN0IFVzZXJWaXNpYmxlTm9kZSB7Ci0gICAgICAgIFVzZXJWaXNpYmxlTm9k
ZSggY29uc3QgUVVybCYgciApCi0gICAgICAgICAgICA6IHVyaSggciApLAotICAgICAgICAgICAg
ICB1c2VyVmlzaWJsZSggMCApIHsKLSAgICAgICAgfQotCi0gICAgICAgIFFVcmwgdXJpOwotICAg
ICAgICBpbnQgdXNlclZpc2libGU7Ci0gICAgICAgIFFIYXNoPFFVcmwsIFVzZXJWaXNpYmxlTm9k
ZSo+IHBhcmVudHM7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNldCB0aGUgdmFsdWUgb2Yg
bmFvOnVzZXJWaXNpYmxlIGFuZCBhZGQgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICogc3Rh
dGVtZW50IHRvIHRoZSBsaXN0IG9mIHN0YXRlbWVudHMgaW4gY2FzZSB0aGUgdmFsdWUgd2FzCi0g
ICAgICAgICAqIG5vdCBkZWZpbmVkIHlldC4KLSAgICAgICAgICovCi0gICAgICAgIGludCB1cGRh
dGVVc2VyVmlzaWJpbGl0eSggUUxpc3Q8U29wcmFubzo6U3RhdGVtZW50PiYgc3RhdGVtZW50cyAp
IHsKLSAgICAgICAgICAgIGlmICggdXNlclZpc2libGUgIT0gMCApIHsKLSAgICAgICAgICAgICAg
ICBrRGVidWcoKSA8PCAiVXNlciB2aXNpYmlsaXR5IGFscmVhZHkgc2V0IiA8PCB1cmkudG9TdHJp
bmcoKSA8PCAoIHVzZXJWaXNpYmxlID09IDEgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdXNl
clZpc2libGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBpZiAoICFwYXJlbnRzLmlzRW1wdHkoKSApIHsKLSAgICAgICAgICAgICAgICAgICAgZm9y
ICggUUhhc2g8UVVybCwgVXNlclZpc2libGVOb2RlKj46Oml0ZXJhdG9yIGl0ID0gcGFyZW50cy5i
ZWdpbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICBpdCAhPSBwYXJlbnRzLmVuZCgpOyAr
K2l0ICkgewotICAgICAgICAgICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgdXJpLnRvU3RyaW5n
KCkgPDwgIkNoZWNraW5nIHBhcmVudCBjbGFzcyIgPDwgaXQudmFsdWUoKS0+dXJpLnRvU3RyaW5n
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGl0LnZhbHVlKCktPnVwZGF0ZVVzZXJW
aXNpYmlsaXR5KCBzdGF0ZW1lbnRzICkgPT0gLTEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlclZpc2libGUgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIHVzZXJWaXNpYmxlID09IDAgKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gdmlzaWJsZQotICAgICAgICAgICAg
ICAgICAgICB1c2VyVmlzaWJsZSA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHN0YXRlbWVudHMgPDwgU29wcmFubzo6U3RhdGVtZW50KCB1cmksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6
Ok5BTzo6dXNlclZpc2libGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU29wcmFubzo6TGl0ZXJhbFZhbHVlKCB1c2VyVmlzaWJsZSA9PSAxICks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5lcG9t
dWs6OlZvY2FidWxhcnk6OktVVk86Om5ybE9udG9sb2d5R3JhcGgoKSApOwotICAgICAgICAgICAg
ICAgIGtEZWJ1ZygpIDw8ICJTZXR0aW5nIG5hbzp1c2VyVmlzaWJsZSBvZiIgPDwgdXJpLnRvU3Ry
aW5nKCkgPDwgKCB1c2VyVmlzaWJsZSA9PSAxICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHVz
ZXJWaXNpYmxlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdm9pZCBO
ZXBvbXVrOjpPbnRvbG9neUxvYWRlcjo6dXBkYXRlVXNlclZpc2liaWxpdHkoKQotewotICAgIC8v
Ci0gICAgLy8gYnVpbGQgYSB0cmVlIG9mIGFsbCBjbGFzc2VzIGFuZCBwcm9wZXJ0aWVzCi0gICAg
Ly8KLSAgICBRU3RyaW5nIHF1ZXJ5Ci0gICAgICAgID0gUVN0cmluZzo6ZnJvbUxhdGluMSggInNl
bGVjdCBkaXN0aW5jdCA/ciA/cCA/diB3aGVyZSB7ICIKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAieyA/ciBhIHJkZnM6Q2xhc3MgLiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpzdWJDbGFzc09mID9wIC4gP3AgYSByZGZzOkNsYXNz
IC4gfSAuIH0gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVTklPTiAiCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInsgP3IgYSByZGY6UHJvcGVydHkgLiAiCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpzdWJQcm9wZXJ0
eU9mID9wIC4gP3AgYSByZGY6UHJvcGVydHkgLiB9IC4gfSAiCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgJTEgP3YgLiB9IC4gIgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJGSUxURVIoP3IhPXJkZnM6UmVzb3VyY2UpIC4gIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ9IiApCi0gICAgICAgIC5hcmcoIFNvcHJhbm86Ok5vZGU6
OnJlc291cmNlVG9OMyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpICkg
KTsKLSAgICBrRGVidWcoKSA8PCBxdWVyeTsKLSAgICBRSGFzaDxRVXJsLCBVc2VyVmlzaWJsZU5v
ZGUqPiBhbGw7Ci0gICAgewotICAgICAgICBTb3ByYW5vOjpRdWVyeVJlc3VsdEl0ZXJhdG9yIGl0
Ci0gICAgICAgICAgICA9IGQtPm1vZGVsLT5leGVjdXRlUXVlcnkoIHF1ZXJ5LCBTb3ByYW5vOjpR
dWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApOwotICAgICAgICB3aGlsZSggaXQubmV4dCgpICkg
ewotICAgICAgICAgICAgY29uc3QgUVVybCByID0gaXRbInIiXS51cmkoKTsKLSAgICAgICAgICAg
IGNvbnN0IFNvcHJhbm86Ok5vZGUgcCA9IGl0WyJwIl07Ci0gICAgICAgICAgICBjb25zdCBTb3By
YW5vOjpOb2RlIHYgPSBpdFsidiJdOwotCi0gICAgICAgICAgICBpZiAoICFhbGwuY29udGFpbnMo
IHIgKSApIHsKLSAgICAgICAgICAgICAgICBVc2VyVmlzaWJsZU5vZGUqIHJfdXZuID0gbmV3IFVz
ZXJWaXNpYmxlTm9kZSggciApOwotICAgICAgICAgICAgICAgIGFsbC5pbnNlcnQoIHIsIHJfdXZu
ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiggdi5pc0xpdGVyYWwoKSApCi0gICAg
ICAgICAgICAgICAgYWxsW3JdLT51c2VyVmlzaWJsZSA9ICh2LmxpdGVyYWwoKS50b0Jvb2woKSA/
IDEgOiAtMSk7Ci0gICAgICAgICAgICBpZiAoIHAuaXNSZXNvdXJjZSgpICYmCi0gICAgICAgICAg
ICAgICAgIHAudXJpKCkgIT0gciAmJgotICAgICAgICAgICAgICAgICBwLnVyaSgpICE9IFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkgKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCAhYWxsLmNvbnRhaW5zKCBwLnVyaSgpICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIFVzZXJW
aXNpYmxlTm9kZSogcF91dm4gPSBuZXcgVXNlclZpc2libGVOb2RlKCBwLnVyaSgpICk7Ci0gICAg
ICAgICAgICAgICAgICAgIGFsbC5pbnNlcnQoIHAudXJpKCksIHBfdXZuICk7Ci0gICAgICAgICAg
ICAgICAgICAgIGFsbFtyXS0+cGFyZW50cy5pbnNlcnQoIHAudXJpKCksIHBfdXZuICk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBhbGxbcl0tPnBhcmVudHMuaW5zZXJ0KCBwLnVyaSgpLCBhbGxbcC51cmkoKV0gKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLwot
ICAgIC8vIGNyZWF0ZSBhIGxpc3Qgb2YgYWxsIHN0YXRlbWVudHMgd2UgbmVlZCB0byBhZGQKLSAg
ICAvLwotICAgIFFMaXN0PFNvcHJhbm86OlN0YXRlbWVudD4gc3RhdGVtZW50czsKLSAgICBmb3Ig
KCBRSGFzaDxRVXJsLCBVc2VyVmlzaWJsZU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBhbGwuYmVnaW4o
KTsKLSAgICAgICAgICBpdCAhPSBhbGwuZW5kKCk7ICsraXQgKSB7Ci0gICAgICAgIGl0LnZhbHVl
KCktPnVwZGF0ZVVzZXJWaXNpYmlsaXR5KCBzdGF0ZW1lbnRzICk7Ci0gICAgfQotCi0gICAgLy8K
LSAgICAvLyBjbGVhbnVwIGFuZCBhZGQgYWxsIHRoZSBuZWNlc3Nhcnkgc3RhdGVtZW50cyB0byB0
aGUgbWFpbiBtb2RlbAotICAgIC8vCi0gICAgcURlbGV0ZUFsbCggYWxsICk7Ci0gICAgZC0+bW9k
ZWwtPmFkZFN0YXRlbWVudHMoIHN0YXRlbWVudHMgKTsKLX0KLQogI2luY2x1ZGUgIm9udG9sb2d5
bG9hZGVyLm1vYyIKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2Uvb250b2xvZ3lsb2FkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL29udG9sb2d5bG9hZGVyLmgJKHJldmlzaW9uIDEy
MTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL29udG9sb2d5bG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY1LDEyICs2NSw2IEBACiAgICAgICAgICAqLwogICAgICAgICB2b2lkIGltcG9ydE9u
dG9sb2d5KCBjb25zdCBRU3RyaW5nJiB1cmwgKTsKIAotICAgICAgICAvKioKLSAgICAgICAgICog
Q3JlYXRlcyBuYW86dXNlclZpc2libGUgcHJvcGVydGllcyBmb3IgYWxsIGNsYXNzZXMgYW5kIHBy
b3BlcnRpZXMKLSAgICAgICAgICogYW5kIHN0b3JlcyB0aGVtIGluIHRoZSBrdXZvIG5hbWVzcGFj
ZS4KLSAgICAgICAgICovCi0gICAgICAgIHZvaWQgdXBkYXRlVXNlclZpc2liaWxpdHkoKTsKLQog
ICAgIFFfU0lHTkFMUzoKICAgICAgICAgLyoqCiAgICAgICAgICAqIEVtaXR0ZWQgb25jZSB0aGUg
dXBkYXRlIG9mIHRoZSBvbnRvbG9naWVzIGlzIGRvbmUuCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdl
L3R5cGV2aXNpYmlsaXR5dHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS90
eXBldmlzaWJpbGl0eXRyZWUuY3BwCShyZXZpc2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFnZS90
eXBldmlzaWJpbGl0eXRyZWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NCBAQAorLyoK
KyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBOZXBvbXVrIEtERSBwcm9qZWN0LgorICAgQ29w
eXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKworICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFueQorICAgbGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBi
eSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiAob3IgaXRzCisgICBzdWNjZXNzb3IgYXBwcm92
ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4pLCB3aGljaCBzaGFsbAorICAgYWN0IGFz
IGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9uIDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNl
LgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v
cmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJ0eXBldmlzaWJpbGl0eXRyZWUuaCIKKwor
I2luY2x1ZGUgPFNvcHJhbm8vTW9kZWw+CisjaW5jbHVkZSA8U29wcmFuby9RdWVyeVJlc3VsdEl0
ZXJhdG9yPgorI2luY2x1ZGUgPFNvcHJhbm8vTm9kZT4KKyNpbmNsdWRlIDxTb3ByYW5vL0xpdGVy
YWxWYWx1ZT4KKyNpbmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvTkFPPgorI2luY2x1ZGUgPFNv
cHJhbm8vVm9jYWJ1bGFyeS9SREZTPgorCisjaW5jbHVkZSA8UXRDb3JlL1FNdXRleExvY2tlcj4K
KworI2luY2x1ZGUgPEtEZWJ1Zz4KKworCitjbGFzcyBUeXBlVmlzaWJpbGl0eVRyZWU6OlR5cGVW
aXNpYmlsaXR5Tm9kZQoreworcHVibGljOgorICAgIFR5cGVWaXNpYmlsaXR5Tm9kZSggY29uc3Qg
UVVybCYgciApCisgICAgICAgIDogdXJpKCByICksCisgICAgICAgICAgdXNlclZpc2libGUoIDAg
KSB7CisgICAgfQorCisgICAgUVVybCB1cmk7CisgICAgaW50IHVzZXJWaXNpYmxlOworICAgIFFT
ZXQ8VHlwZVZpc2liaWxpdHlOb2RlKj4gcGFyZW50czsKKworICAgIC8qKgorICAgICAqIFNldCB0
aGUgdmFsdWUgb2YgbmFvOnVzZXJWaXNpYmxlLgorICAgICAqIEEgY2xhc3MgaXMgdmlzaWJsZSBp
ZiBpdCBoYXMgYXQgbGVhc3Qgb25lIHZpc2libGUgZGlyZWN0IHBhcmVudCBjbGFzcy4KKyAgICAg
Ki8KKyAgICBpbnQgdXBkYXRlVXNlclZpc2liaWxpdHkoIFFTZXQ8VHlwZVZpc2liaWxpdHlOb2Rl
Kj4mIHZpc2l0ZWROb2RlcyApIHsKKyAgICAgICAgaWYgKCB1c2VyVmlzaWJsZSAhPSAwICkgewor
ICAgICAgICAgICAgcmV0dXJuIHVzZXJWaXNpYmxlOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgaWYgKCAhcGFyZW50cy5pc0VtcHR5KCkgKSB7CisgICAgICAgICAgICAg
ICAgZm9yICggUVNldDxUeXBlVmlzaWJpbGl0eU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBwYXJlbnRz
LmJlZ2luKCk7CisgICAgICAgICAgICAgICAgICAgICBpdCAhPSBwYXJlbnRzLmVuZCgpOyArK2l0
ICkgeworICAgICAgICAgICAgICAgICAgICAvLyBhdm9pZCBlbmRsZXNzIGxvb3BzCisgICAgICAg
ICAgICAgICAgICAgIGlmKCB2aXNpdGVkTm9kZXMuY29udGFpbnMoKml0KSApCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRlZE5vZGVz
Lmluc2VydCggKml0ICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggKCppdCktPnVwZGF0ZVVz
ZXJWaXNpYmlsaXR5KCB2aXNpdGVkTm9kZXMgKSA9PSAxICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlclZpc2libGUgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIHVzZXJWaXNpYmxlID09IDAgKSB7CisgICAgICAgICAgICAgICAgLy8g
ZGVmYXVsdCB0byBpbnZpc2libGUKKyAgICAgICAgICAgICAgICB1c2VyVmlzaWJsZSA9IC0xOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAga0RlYnVnKCkgPDwgIlNldHRpbmcgbmFvOnVzZXJW
aXNpYmxlIG9mIiA8PCB1cmkudG9TdHJpbmcoKSA8PCAoIHVzZXJWaXNpYmxlID09IDEgKTsKKyAg
ICAgICAgICAgIHJldHVybiB1c2VyVmlzaWJsZTsKKyAgICAgICAgfQorICAgIH0KK307CisKK1R5
cGVWaXNpYmlsaXR5VHJlZTo6VHlwZVZpc2liaWxpdHlUcmVlKCBTb3ByYW5vOjpNb2RlbCogbW9k
ZWwgKQorICAgIDogbV9tb2RlbChtb2RlbCkKK3sKK30KKworVHlwZVZpc2liaWxpdHlUcmVlOjp+
VHlwZVZpc2liaWxpdHlUcmVlKCkKK3sKKyAgICBRTXV0ZXhMb2NrZXIgbG9jayggJm1fbXV0ZXgg
KTsKK30KKwordm9pZCBUeXBlVmlzaWJpbGl0eVRyZWU6OnJlYnVpbGRUcmVlKCkKK3sKKyAgICBR
TXV0ZXhMb2NrZXIgbG9jayggJm1fbXV0ZXggKTsKKworICAgIC8vIGNsZWFudXAKKyAgICBtX3Zp
c2liaWxpdHlIYXNoLmNsZWFyKCk7CisKKyAgICAvLyB3ZSBidWlsZCBhIHRlbXBvcmFyeSBoZWxw
ZXIgdHJlZQorICAgIFFIYXNoPFFVcmwsIFR5cGVWaXNpYmlsaXR5Tm9kZSo+IHRyZWU7CisKKyAg
ICBjb25zdCBRU3RyaW5nIHF1ZXJ5CisgICAgICAgID0gUVN0cmluZzo6ZnJvbUxhdGluMSggInNl
bGVjdCBkaXN0aW5jdCA/ciA/cCA/diB3aGVyZSB7ICIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAieyA/ciBhIHJkZnM6Q2xhc3MgLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpzdWJDbGFzc09mID9wIC4gP3AgYSByZGZzOkNsYXNz
IC4gfSAuIH0gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVTklPTiAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInsgP3IgYSByZGY6UHJvcGVydHkgLiAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpzdWJQcm9wZXJ0
eU9mID9wIC4gP3AgYSByZGY6UHJvcGVydHkgLiB9IC4gfSAiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgJTEgP3YgLiB9IC4gIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJGSUxURVIoP3IhPXJkZnM6UmVzb3VyY2UpIC4gIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ9IiApCisgICAgICAgICAgICAuYXJnKCBTb3ByYW5vOjpO
b2RlOjpyZXNvdXJjZVRvTjMoIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUo
KSApICk7CisgICAga0RlYnVnKCkgPDwgcXVlcnk7CisgICAgU29wcmFubzo6UXVlcnlSZXN1bHRJ
dGVyYXRvciBpdAorICAgICAgICAgICAgPSBtX21vZGVsLT5leGVjdXRlUXVlcnkoIHF1ZXJ5LCBT
b3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApOworICAgIHdoaWxlKCBpdC5uZXh0
KCkgKSB7CisgICAgICAgIGNvbnN0IFFVcmwgciA9IGl0WyJyIl0udXJpKCk7CisgICAgICAgIGNv
bnN0IFNvcHJhbm86Ok5vZGUgcCA9IGl0WyJwIl07CisgICAgICAgIGNvbnN0IFNvcHJhbm86Ok5v
ZGUgdiA9IGl0WyJ2Il07CisKKyAgICAgICAgaWYgKCAhdHJlZS5jb250YWlucyggciApICkgewor
ICAgICAgICAgICAgVHlwZVZpc2liaWxpdHlOb2RlKiByX3V2biA9IG5ldyBUeXBlVmlzaWJpbGl0
eU5vZGUoIHIgKTsKKyAgICAgICAgICAgIHRyZWUuaW5zZXJ0KCByLCByX3V2biApOworICAgICAg
ICB9CisgICAgICAgIGlmKCB2LmlzTGl0ZXJhbCgpICkKKyAgICAgICAgICAgIHRyZWVbcl0tPnVz
ZXJWaXNpYmxlID0gKHYubGl0ZXJhbCgpLnRvQm9vbCgpID8gMSA6IC0xKTsKKyAgICAgICAgaWYg
KCBwLmlzUmVzb3VyY2UoKSAmJgorICAgICAgICAgICAgICAgIHAudXJpKCkgIT0gciAmJgorICAg
ICAgICAgICAgICAgIHAudXJpKCkgIT0gU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3Vy
Y2UoKSApIHsKKyAgICAgICAgICAgIGlmICggIXRyZWUuY29udGFpbnMoIHAudXJpKCkgKSApIHsK
KyAgICAgICAgICAgICAgICBUeXBlVmlzaWJpbGl0eU5vZGUqIHBfdXZuID0gbmV3IFR5cGVWaXNp
YmlsaXR5Tm9kZSggcC51cmkoKSApOworICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KCBwLnVy
aSgpLCBwX3V2biApOworICAgICAgICAgICAgICAgIHRyZWVbcl0tPnBhcmVudHMuaW5zZXJ0KCBw
X3V2biApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgdHJlZVtyXS0+cGFyZW50cy5pbnNlcnQoIHRyZWVbcC51cmkoKV0gKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIG1ha2Ugc3VyZSByZGZzOlJlc291cmNlIGlz
IHZpc2libGUgYnkgZGVmYXVsdAorICAgIFR5cGVWaXNpYmlsaXR5Tm9kZSogcmRmc1Jlc291cmNl
Tm9kZSA9IDA7CisgICAgUUhhc2g8UVVybCwgVHlwZVZpc2liaWxpdHlOb2RlKj46Oml0ZXJhdG9y
IHJkZnNSZXNvdXJjZUl0ID0gdHJlZS5maW5kKFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJl
c291cmNlKCkpOworICAgIGlmKCByZGZzUmVzb3VyY2VJdCA9PSB0cmVlLmVuZCgpICkgeworICAg
ICAgICByZGZzUmVzb3VyY2VOb2RlID0gbmV3IFR5cGVWaXNpYmlsaXR5Tm9kZShTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKTsKKyAgICAgICAgdHJlZS5pbnNlcnQoIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCksIHJkZnNSZXNvdXJjZU5vZGUgKTsKKyAg
ICB9CisgICAgZWxzZSB7CisgICAgICAgIHJkZnNSZXNvdXJjZU5vZGUgPSByZGZzUmVzb3VyY2VJ
dC52YWx1ZSgpOworICAgIH0KKyAgICBpZiggcmRmc1Jlc291cmNlTm9kZS0+dXNlclZpc2libGUg
PT0gMCApIHsKKyAgICAgICAgcmRmc1Jlc291cmNlTm9kZS0+dXNlclZpc2libGUgPSAxOworICAg
IH0KKyAgICAvLyBhZGQgcmRmczpSZXNvdXJjZSBhcyBwYXJlbnQgZm9yIGFsbCB0b3AtbGV2ZWwg
Y2xhc3NlcworICAgIGZvciAoIFFIYXNoPFFVcmwsIFR5cGVWaXNpYmlsaXR5Tm9kZSo+OjppdGVy
YXRvciBpdCA9IHRyZWUuYmVnaW4oKTsKKyAgICAgICAgICBpdCAhPSB0cmVlLmVuZCgpOyArK2l0
ICkgeworICAgICAgICBpZiggaXQudmFsdWUoKSAhPSByZGZzUmVzb3VyY2VOb2RlICYmIGl0LnZh
bHVlKCktPnBhcmVudHMuaXNFbXB0eSgpICkgeworICAgICAgICAgICAgaXQudmFsdWUoKS0+cGFy
ZW50cy5pbnNlcnQoIHJkZnNSZXNvdXJjZU5vZGUgKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIGZpbmFsbHkgZGV0ZXJtaW5lIHZpc2liaWxpdHkgb2YgYWxsIG5vZGVzCisgICAgZm9yICgg
UUhhc2g8UVVybCwgVHlwZVZpc2liaWxpdHlOb2RlKj46Oml0ZXJhdG9yIGl0ID0gdHJlZS5iZWdp
bigpOworICAgICAgICAgIGl0ICE9IHRyZWUuZW5kKCk7ICsraXQgKSB7CisgICAgICAgIFFTZXQ8
VHlwZVZpc2liaWxpdHlOb2RlKj4gdmlzaXRlZE5vZGVzOworICAgICAgICBtX3Zpc2liaWxpdHlI
YXNoLmluc2VydChpdC5rZXkoKSwgaXQudmFsdWUoKS0+dXBkYXRlVXNlclZpc2liaWxpdHkoIHZp
c2l0ZWROb2RlcyApID09IDEgKTsKKyAgICB9CisKKyAgICAvLyBnZXQgcmlkIG9mIHRoZSB0ZW1w
IHRyZWUKKyAgICBxRGVsZXRlQWxsKHRyZWUpOworfQorCitib29sIFR5cGVWaXNpYmlsaXR5VHJl
ZTo6aXNWaXNpYmxlKGNvbnN0IFFVcmwgJnR5cGUpIGNvbnN0Cit7CisgICAgUU11dGV4TG9ja2Vy
IGxvY2soICZtX211dGV4ICk7CisKKyAgICBRSGFzaDxRVXJsLCBib29sPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3Zpc2liaWxpdHlIYXNoLmNvbnN0RmluZCh0eXBlKTsKKyAgICBpZiggaXQgIT0g
bV92aXNpYmlsaXR5SGFzaC5jb25zdEVuZCgpICkgeworICAgICAgICByZXR1cm4gKml0OworICAg
IH0KKyAgICBlbHNlIHsKKyAgICAgICAga0RlYnVnKCkgPDwgIkNvdWxkIG5vdCBmaW5kIHR5cGUi
IDw8IHR5cGUgPDwgImluIHRyZWUuIERlZmF1bHRpbmcgdG8gdmlzaWJsZS4iOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK1FMaXN0PFFVcmw+IFR5cGVWaXNpYmlsaXR5VHJlZTo6
dmlzaWJsZVR5cGVzKCkgY29uc3QKK3sKKyAgICBRTGlzdDxRVXJsPiB0eXBlczsKKyAgICBmb3Io
IFFIYXNoPFFVcmwsIGJvb2w+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdmlzaWJpbGl0eUhhc2gu
Y29uc3RCZWdpbigpOworICAgICAgICAgaXQgIT0gbV92aXNpYmlsaXR5SGFzaC5jb25zdEVuZCgp
OyArK2l0ICkgeworICAgICAgICBpZiggaXQudmFsdWUoKSApCisgICAgICAgICAgICB0eXBlcyA8
PCBpdC5rZXkoKTsKKyAgICB9CisgICAgcmV0dXJuIHR5cGVzOworfQpJbmRleDogc2VydmljZXMv
c3RvcmFnZS90eXBldmlzaWJpbGl0eXRyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9y
YWdlL3R5cGV2aXNpYmlsaXR5dHJlZS5oCShyZXZpc2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFn
ZS90eXBldmlzaWJpbGl0eXRyZWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLyoK
KyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBOZXBvbXVrIEtERSBwcm9qZWN0LgorICAgQ29w
eXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKworICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFueQorICAgbGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBi
eSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiAob3IgaXRzCisgICBzdWNjZXNzb3IgYXBwcm92
ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4pLCB3aGljaCBzaGFsbAorICAgYWN0IGFz
IGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9uIDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNl
LgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v
cmcvbGljZW5zZXMvPi4KKyovCisKKyNpZm5kZWYgVFlQRVZJU0lCSUxJVFlUUkVFX0gKKyNkZWZp
bmUgVFlQRVZJU0lCSUxJVFlUUkVFX0gKKworI2luY2x1ZGUgPFF0Q29yZS9RVXJsPgorI2luY2x1
ZGUgPFF0Q29yZS9RSGFzaD4KKyNpbmNsdWRlIDxRdENvcmUvUU11dGV4PgorCituYW1lc3BhY2Ug
U29wcmFubyB7CitjbGFzcyBNb2RlbDsKK30KKworLyoqCisgKiBCdWlsZHMgYSB0eXBlIHRyZWUg
dGhhdCBhbGxvd3MgdG8gY2hlY2sgdGhlIG5hbzp1c2VyVmlzaWJsZQorICogdmFsdWUgZm9yIGVh
Y2ggZXhpc3RpbmcgdHlwZS4KKyAqLworY2xhc3MgVHlwZVZpc2liaWxpdHlUcmVlCit7CitwdWJs
aWM6CisgICAgVHlwZVZpc2liaWxpdHlUcmVlKCBTb3ByYW5vOjpNb2RlbCogbW9kZWwgKTsKKyAg
ICB+VHlwZVZpc2liaWxpdHlUcmVlKCk7CisKKyAgICB2b2lkIHJlYnVpbGRUcmVlKCk7CisKKyAg
ICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIHR5cGUgaXMgdmlzaWJsZS4KKyAg
ICAgKi8KKyAgICBib29sIGlzVmlzaWJsZSggY29uc3QgUVVybCYgdHlwZSApIGNvbnN0OworCisg
ICAgUUxpc3Q8UVVybD4gdmlzaWJsZVR5cGVzKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU29w
cmFubzo6TW9kZWwqIG1fbW9kZWw7CisgICAgY2xhc3MgVHlwZVZpc2liaWxpdHlOb2RlOworICAg
IFFIYXNoPFFVcmwsIGJvb2w+IG1fdmlzaWJpbGl0eUhhc2g7CisgICAgbXV0YWJsZSBRTXV0ZXgg
bV9tdXRleDsKK307CisKKyNlbmRpZiAvLyBUWVBFVklTSUJJTElUWVRSRUVfSApJbmRleDogc2Vy
dmljZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9y
YWdlL3JlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAxMjEzOTQwKQorKysgc2VydmljZXMvc3RvcmFn
ZS9yZXBvc2l0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5j
bHVkZSAicmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgIm1vZGVsY29weWpvYi5oIgorI2luY2x1ZGUg
ImNyYXBweWluZmVyZW5jZXIyLmgiCiAKICNpbmNsdWRlIDxTb3ByYW5vL0JhY2tlbmQ+CiAjaW5j
bHVkZSA8U29wcmFuby9QbHVnaW5NYW5hZ2VyPgpAQCAtNjksNiArNzAsOSBAQAogewogICAgIGtE
ZWJ1ZygpIDw8IG1fbmFtZTsKIAorICAgIGRlbGV0ZSBtX2luZmVyZW5jZXI7CisgICAgbV9pbmZl
cmVuY2VyID0gMDsKKwogICAgIGRlbGV0ZSBtX21vZGVsQ29weUpvYjsKICAgICBtX21vZGVsQ29w
eUpvYiA9IDA7CiAKQEAgLTE2NSw5ICsxNjksMTMgQEAKICAgICAvLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KICAgICBTb3ByYW5vOjpVdGlsOjpTaWduYWxDYWNoZU1vZGVsKiBz
Y20gPSBuZXcgU29wcmFubzo6VXRpbDo6U2lnbmFsQ2FjaGVNb2RlbCggbV9tb2RlbCApOwogICAg
IHNjbS0+c2V0UGFyZW50KHRoaXMpOyAvLyBtZW1vcnkgbWFuYWdlbWVudAotCiAgICAgc2V0UGFy
ZW50TW9kZWwoIHNjbSApOwogCisgICAgLy8gY3JlYXRlIHRoZSBjcmFwcHkgaW5mZXJlbmNlIG1v
ZGVsIHdoaWNoIGhhbmRsZXMgcmRmczpzdWJDbGFzc09mIG9ubHkgLT4gd2Ugb25seSB1c2UgdGhp
cyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIFJlc291cmNlVHlwZVRlcm1zCisgICAgLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgbV9pbmZlcmVuY2VyID0gbmV3IENy
YXBweUluZmVyZW5jZXIyKCBzY20gKTsKKyAgICBzZXRQYXJlbnRNb2RlbChtX2luZmVyZW5jZXIp
OworCiAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byBjb252ZXJ0CiAgICAgLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgYm9vbCBjb252ZXJ0aW5nRGF0YSA9IGZhbHNl
OwpAQCAtMzM3LDcgKzM0NSwxOCBAQAogICAgIC8vIG5lZWRzIHRvIGJlIGFkZHJlc3NlZCBhcyB3
ZWxsCiAgICAgc2V0dGluZ3MgPDwgU29wcmFubzo6QmFja2VuZFNldHRpbmcoICJTZXJ2ZXJUaHJl
YWRzIiwgMTAwICk7CiAKKyAgICAvLyBOZXZlciB0YWtlIG1vcmUgdGhhbiA1IG1pbnV0ZXMgdG8g
YW5zd2VyIGEgcXVlcnkgKHRoaXMgaXMgdG8gZmlsdGVyIG91dCBicm9rZW4gcXVlcmllcyBhbmQg
YnVncyBpbiBWaXJ0dW9zbydzIHF1ZXJ5IG9wdGltaXplcikKKyAgICAvLyB0cnVlZzogV2UgY2Fu
bm90IGFjdGl2YXRlIHRoaXMgeWV0LiAxLiBWaXJ0dW9zbyA8IDYuMyBjcmFzaGVzIGFuZCAyLiBl
dmVuIG9wZW4gY3Vyc29ycyBhcmUgc3ViamVjdCB0byB0aGUgdGltZW91dCB3aGljaCBpcyByZWFs
bHkKKyAgICAvLyAgICAgICAgbm90IHdoYXQgd2Ugd2FudCEKKy8vICAgIHNldHRpbmdzIDw8IFNv
cHJhbm86OkJhY2tlbmRTZXR0aW5nKCAiUXVlcnlUaW1lb3V0IiwgNSo2MDAwMCApOworCiAgICAg
cmV0dXJuIHNldHRpbmdzOwogfQogCit2b2lkIE5lcG9tdWs6OlJlcG9zaXRvcnk6OnVwZGF0ZUlu
ZmVyZW5jZSgpCit7CisgICAgbV9pbmZlcmVuY2VyLT51cGRhdGVJbmZlcmVuY2VJbmRleCgpOwor
ICAgIG1faW5mZXJlbmNlci0+dXBkYXRlQWxsUmVzb3VyY2VzKCk7Cit9CisKICNpbmNsdWRlICJy
ZXBvc2l0b3J5Lm1vYyIKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIuY3Bw
CShyZXZpc2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFnZS9jcmFwcHlpbmZlcmVuY2VyMi5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjU2IEBACisvKgorICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIE5lcG9tdWsgS0RFIHByb2plY3QuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0
aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorCisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZl
cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywg
b3IgYW55CisgICBsYXRlciB2ZXJzaW9uIGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtE
RSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nlc3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBv
ZiBLREUgZS5WLiksIHdoaWNoIHNoYWxsCisgICBhY3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNl
Y3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxpY2Vuc2UuCisKKyAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKwor
I2luY2x1ZGUgImNyYXBweWluZmVyZW5jZXIyLmgiCisjaW5jbHVkZSAidHlwZXZpc2liaWxpdHl0
cmVlLmgiCisKKyNpbmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvTlJMPgorI2luY2x1ZGUgPFNv
cHJhbm8vVm9jYWJ1bGFyeS9OQU8+CisjaW5jbHVkZSA8U29wcmFuby9Wb2NhYnVsYXJ5L1JERj4K
KyNpbmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvUkRGUz4KKyNpbmNsdWRlIDxTb3ByYW5vL1N0
YXRlbWVudD4KKyNpbmNsdWRlIDxTb3ByYW5vL1N0YXRlbWVudEl0ZXJhdG9yPgorI2luY2x1ZGUg
PFNvcHJhbm8vTm9kZT4KKyNpbmNsdWRlIDxTb3ByYW5vL05vZGVJdGVyYXRvcj4KKyNpbmNsdWRl
IDxTb3ByYW5vL0dyYXBoPgorI2luY2x1ZGUgPFNvcHJhbm8vUXVlcnlSZXN1bHRJdGVyYXRvcj4K
KworI2luY2x1ZGUgPFF0Q29yZS9RVGltZT4KKyNpbmNsdWRlIDxRdENvcmUvUU11dGV4PgorI2lu
Y2x1ZGUgPFF0Q29yZS9RTXV0ZXhMb2NrZXI+CisjaW5jbHVkZSA8UXRDb3JlL1FUaHJlYWQ+CisK
KyNpbmNsdWRlIDxrZGVidWcuaD4KKworCitjbGFzcyBDcmFwcHlJbmZlcmVuY2VyMjo6UHJpdmF0
ZQoreworcHVibGljOgorICAgIFByaXZhdGUoKQorICAgICAgICA6IG1fdXBkYXRlQWxsUmVzb3Vy
Y2VzVGhyZWFkKDApIHsKKyAgICB9CisKKyAgICAvLy8gZ2V0IHRoZSBsaXN0IG9mIHN1cGVyIHR5
cGVzIGZvciBccCB0eXBlCisgICAgUVNldDxRVXJsPiBzdXBlckNsYXNzZXMoIGNvbnN0IFFVcmwm
IHR5cGUgKSBjb25zdDsKKworICAgIC8vLyBDaGVjayBpZiBhIHJlc291cmNlIHdpdGggdGhlIHNw
ZWNpZmllZCB0eXBlcyBpcyB2aXNpYmxlLgorICAgIGJvb2wgaXNWaXNpYmxlRnJvbVR5cGVzKCBj
b25zdCBRU2V0PFFVcmw+JiB0eXBlcyApIGNvbnN0OworCisgICAgLy8vIFBlcmZvcm1zIGEgcXVl
cnkgdG8gcmV0cmlldmUgYWxsIHR5cGVzIHRoYXQgd2VyZSBub3QgYWRkZWQgYnkgdXMKKyAgICBR
U2V0PFFVcmw+IHF1ZXJ5UmVzb3VyY2VUeXBlcyggY29uc3QgUVVybCYgcmVzb3VyY2UgKSBjb25z
dDsKKworICAgIC8vLyB1c2VkIHRvIGJ1aWxkIG1fc3VwZXJDbGFzc2VzIChhbmQgbm90aGluZyBl
bHNlISkKKyAgICBRU2V0PFFVcmw+IGJ1aWxkU3VwZXJDbGFzc2VzSGFzaCggY29uc3QgUVVybCYg
dHlwZSwgUVNldDxRVXJsPiYgdmlzaXRlZFR5cGVzLCBjb25zdCBRTXVsdGlIYXNoPFFVcmwsIFFV
cmw+JiByZGZzU3ViQ2xhc3NSZWxhdGlvbnMgKTsKKworICAgIFFIYXNoPFFVcmwsIFFTZXQ8UVVy
bD4gPiBtX3N1cGVyQ2xhc3NlczsKKyAgICBUeXBlVmlzaWJpbGl0eVRyZWUqIG1fdHlwZVZpc2li
aWxpdHlUcmVlOworICAgIFFNdXRleCBtX211dGV4OworCisgICAgVXBkYXRlQWxsUmVzb3VyY2Vz
VGhyZWFkKiBtX3VwZGF0ZUFsbFJlc291cmNlc1RocmVhZDsKKworICAgIFFVcmwgbV9pbmZlcmVu
Y2VDb250ZXh0OworCisgICAgQ3JhcHB5SW5mZXJlbmNlcjIqIHE7Cit9OworCisKKy8qKgorICog
U2ltcGxlIGhlbHBlciB0aHJlYWQgd2hpY2ggdXBkYXRlcyB0aGUgc3ViY2xhc3MgYW5kIHZpc2li
aWxpdHkgaW5mZXJlbmNlIG9uIGFsbCByZXNvdXJjZXMKKyAqIGluIHRoZSBkYXRhYmFzZS4gVGhp
cyBpcyBkb25lIGluIGEgc2VwYXJhdGUgdGhyZWFkIHNpbmNlIGl0IHRha2VzIHVwIHRvIGhhbGYg
YW4gaG91ciB0aGUgZmlyc3QgdGltZS4KKyAqLworY2xhc3MgQ3JhcHB5SW5mZXJlbmNlcjI6OlVw
ZGF0ZUFsbFJlc291cmNlc1RocmVhZCA6IHB1YmxpYyBRVGhyZWFkCit7CitwdWJsaWM6CisgICAg
VXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkKCBDcmFwcHlJbmZlcmVuY2VyMiogcGFyZW50ICkKKyAg
ICAgICAgOiBRVGhyZWFkKHBhcmVudCksCisgICAgICAgICAgbV9jYW5jZWxlZChmYWxzZSksCisg
ICAgICAgICAgbV9tb2RlbChwYXJlbnQpIHsKKyAgICB9CisKKyAgICB2b2lkIGNhbmNlbCgpIHsK
KyAgICAgICAga0RlYnVnKCk7CisgICAgICAgIG1fY2FuY2VsZWQgPSB0cnVlOworICAgIH0KKwor
ICAgIHZvaWQgcnVuKCkgeworICAgICAgICBrRGVidWcoKTsKKyAgICAgICAgbV9jYW5jZWxlZCA9
IGZhbHNlOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgUVRpbWUgdGltZXI7CisgICAgICAgIHRp
bWVyLnN0YXJ0KCk7CisgICAgICAgIGludCBjbnQgPSAwOworI2VuZGlmCisKKyAgICAgICAgLy8g
d2UgdXBkYXRlIHRoZSByZXN0IGluIGFzIGxpdHRsZSBxdWVyaWVzIGFzIHBvc3NpYmxlLiBUaHVz
LCB3ZSBnZXQgdGhlIGxpc3Qgb2YgYWxsIHZpc2libGUgdHlwZXMKKyAgICAgICAgLy8gYW5kIG1h
cmsgZWFjaCByZXNvdXJjZSBvZiB0aGF0IHR5cGUgYXMgdmlzaWJsZS4gSW52aXNpYmxlIHJlc291
cmNlcyB3aWxsIHRoZW4gYmUgaGFuZGxlZCBpbiB0aGUgbG9vcCBiZWxvdworICAgICAgICAvLyB0
byBub3QgY3JlYXRlIHF1ZXJpZXMgdGhhdCBhcmUgd2F5IHRvIGJpZyAobW9yZSB0aGFuIDMwMCB0
eXBlcyBpbiBOZXBvbXVrKSB3ZSBzcGxpdCB0aGVtIHVwIGluIGdyb3VwcyBvZiAzMAorICAgICAg
ICBjb25zdCBRTGlzdDxRVXJsPiB2aXNpYmxlVHlwZXMgPSBtX21vZGVsLT5kLT5tX3R5cGVWaXNp
YmlsaXR5VHJlZS0+dmlzaWJsZVR5cGVzKCk7CisgICAgICAgIGludCBzdGFydCA9IDA7CisgICAg
ICAgIHdoaWxlKCBzdGFydCA8IHZpc2libGVUeXBlcy5jb3VudCgpICkgeworICAgICAgICAgICAg
aW50IGVuZCA9IHFNaW4oc3RhcnQgKyAzMCwgdmlzaWJsZVR5cGVzLmNvdW50KCkgKTsKKworICAg
ICAgICAgICAgUVN0cmluZ0xpc3QgdHlwZVRlcm1zOworICAgICAgICAgICAgZm9yKCBpbnQgaSA9
IHN0YXJ0OyBpIDwgZW5kOyArK2kgKSB7CisgICAgICAgICAgICAgICAgdHlwZVRlcm1zIDw8IFFT
dHJpbmc6OmZyb21MYXRpbjEoInsgP3IgYSAlMSAuIH0iKS5hcmcoIFNvcHJhbm86Ok5vZGU6OnJl
c291cmNlVG9OMyh2aXNpYmxlVHlwZXNbaV0pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29uc3QgUVN0cmluZyBxdWVyeSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoImluc2VydCBpbnRv
IGdyYXBoICUxIHsgP3IgJTIgMSAuIH0gd2hlcmUgeyAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiP3IgYSA/dCAuICIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMyAiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRklMVEVSKCFi
aWY6ZXhpc3RzKChzZWxlY3QgKDEpIHdoZXJlIHsgP3IgJTIgP3YgLiB9KSkpIC4gfSAiKQorICAg
ICAgICAgICAgICAgICAgICAuYXJnKCBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIG1fbW9k
ZWwtPmNyYXBweUluZmVyZW5jZUNvbnRleHQoKSApLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6
dXNlclZpc2libGUoKSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlVGVybXMuam9p
biggUUxhdGluMVN0cmluZygiIFVOSU9OICIpICkgKTsKKyAgICAgICAgICAgIG1fbW9kZWwtPmV4
ZWN1dGVRdWVyeSggcXVlcnksIFNvcHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsICk7
CisKKyAgICAgICAgICAgIHN0YXJ0ID0gZW5kOworICAgICAgICB9CisKKyNpZm5kZWYgTkRFQlVH
CisgICAgICAgIGtEZWJ1ZygpIDw8ICJBbGwgcmVzb3VyY2VzIHdpdGggdmlzaWJsZSB0eXBlIHVw
ZGF0ZWQuIEVsYXBzZWQ6IiA8PCB0aW1lci5lbGFwc2VkKCkvMTAwMC4wIDw8ICJzZWMiOworI2Vu
ZGlmCisKKworICAgICAgICAvLyBub3cgdXBkYXRlIGFsbCB0aGUgcmVzdCBvZiB0aGUgcmVzb3Vy
Y2VzCisgICAgICAgIFFMaXN0PFNvcHJhbm86Ok5vZGU+IHJlc3VsdHM7CisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIC8vIGZvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB3ZSBvbmx5IGhhbmRs
ZSByZXNvdXJjZXMgaW4gSW5zdGFuY2VCYXNlcy4gVGhlIHJlc3Qgd2UgYWxtb3N0IG5ldmVyIHF1
ZXJ5IGFueXdheS4KKyAgICAgICAgICAgIHJlc3VsdHMgPSBtX21vZGVsLT5leGVjdXRlUXVlcnko
IFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCBkaXN0aW5jdCA/ciB3aGVyZSB7IGdyYXBoID9n
IHsgP3IgYSA/dCAuIH0gLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGSUxURVIoP2cgIT0gJTEpIC4gIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAieyA/ZyBhICUyIC4gfSBVTklPTiB7ID9nIGEgJTMgLiB9IC4gIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRklMVEVS
KCFiaWY6ZXhpc3RzKChzZWxlY3QgKDEpIHdoZXJlIHsgP3IgJTQgP3YgLiB9KSkpIC4gfSAiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJMSU1JVCAxMDAwIiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC5hcmcoIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggbV9tb2RlbC0+Y3Jh
cHB5SW5mZXJlbmNlQ29udGV4dCgpICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggU29wcmFubzo6
Vm9jYWJ1bGFyeTo6TlJMOjpEaXNjYXJkYWJsZUluc3RhbmNlQmFzZSgpICksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OnJl
c291cmNlVG9OMyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6TlJMOjpJbnN0YW5jZUJhc2UoKSApLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5v
OjpOb2RlOjpyZXNvdXJjZVRvTjMoIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2li
bGUoKSApICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNv
cHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsICkKKyAgICAgICAgICAgICAgICAgICAg
Lml0ZXJhdGVCaW5kaW5ncygwKS5hbGxFbGVtZW50cygpOworICAgICAgICAgICAgUV9GT1JFQUNI
KCBjb25zdCBTb3ByYW5vOjpOb2RlJiBuLCByZXN1bHRzICkgeworI2lmbmRlZiBOREVCVUcKKyAg
ICAgICAgICAgICAgICArK2NudDsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmKCBtX2NhbmNl
bGVkICkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBib29s
IGhhdmVWaXNpYmxlVHlwZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIFNvcHJhbm86OlF1ZXJ5
UmVzdWx0SXRlcmF0b3IgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgID0gbV9tb2RlbC0+ZXhl
Y3V0ZVF1ZXJ5KCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgP3Qgd2hlcmUgeyBncmFwaCA/
ZyB7ICUxIGEgP3QgLiB9IC4gRklMVEVSKD9nIT0lMikgLiB9IikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoU29wcmFubzo6Tm9kZTo6cmVzb3Vy
Y2VUb04zKG4udXJpKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMobV9tb2RlbC0+Y3JhcHB5
SW5mZXJlbmNlQ29udGV4dCgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCk7CisgICAg
ICAgICAgICAgICAgd2hpbGUoIW1fY2FuY2VsZWQgJiYgaXQubmV4dCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmKCBtX21vZGVsLT5pc1R5cGVWaXNpYmxlKGl0WzBdLnVyaSgpKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhhdmVWaXNpYmxlVHlwZSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBtX21vZGVsLT5zZXRWaXNpYmlsaXR5KCBuLnVyaSgpLCBo
YXZlVmlzaWJsZVR5cGUgPyBDcmFwcHlJbmZlcmVuY2VyMjo6VmlzaWJsZSA6IENyYXBweUluZmVy
ZW5jZXIyOjpOb25WaXNpYmxlICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUoICFt
X2NhbmNlbGVkICYmICFyZXN1bHRzLmlzRW1wdHkoKSApOworCisKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgIGtEZWJ1ZygpIDw8IGNudCA8PCAicmVzb3VyY2VzIHVwZGF0ZWQuIEVsYXBzZWQ6IiA8
PCB0aW1lci5lbGFwc2VkKCkvMTAwMC4wIDw8ICJzZWMiOworI2VuZGlmCisgICAgfQorCitwcml2
YXRlOgorICAgIGJvb2wgbV9jYW5jZWxlZDsKKyAgICBDcmFwcHlJbmZlcmVuY2VyMiogbV9tb2Rl
bDsKK307CisKKworCitRU2V0PFFVcmw+IENyYXBweUluZmVyZW5jZXIyOjpQcml2YXRlOjpzdXBl
ckNsYXNzZXMoIGNvbnN0IFFVcmwmIHR5cGUgKSBjb25zdAoreworICAgIFFIYXNoPFFVcmwsIFFT
ZXQ8UVVybD4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N1cGVyQ2xhc3Nlcy5jb25zdEZpbmQo
dHlwZSk7CisgICAgaWYoIGl0ICE9IG1fc3VwZXJDbGFzc2VzLmNvbnN0RW5kKCkgKSB7CisgICAg
ICAgIHJldHVybiBpdC52YWx1ZSgpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJu
IFFTZXQ8UVVybD4oKSA8PCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpOwor
ICAgIH0KK30KKworYm9vbCBDcmFwcHlJbmZlcmVuY2VyMjo6UHJpdmF0ZTo6aXNWaXNpYmxlRnJv
bVR5cGVzKGNvbnN0IFFTZXQ8UVVybD4gJnR5cGVzKSBjb25zdAoreworICAgIC8vIFdlIG5lZWQg
dG8gZXh0cmFjdCB0aGUgbGVhZiB0eXBlcyBpbiB0aGUgc3ViZ3JhcGggdGhhdCBpcyB0eXBlcwor
ICAgIC8vIGFzIHRob3NlIGFyZSB0aGUgdHlwZXMgdGhhdCBkZWZpbmUgaWYgdGhlIHJlc291cmNl
IHdpbGwgYmUgdmlzaWJsZQorCisgICAgLy8gVE9ETzogZG8gdGhlIGZvbGxvd2luZyBpbiBhbiBl
ZmZpY2llbnQgd2F5CisgICAgLy8gd2UgcmVtb3ZlIGFsbCBzdXBlcnR5cGVzIGZyb20gdGhlIHNl
dCBvZiB0eXBlcyBhbmQgYXJlIGxlZnQgd2l0aCB0aGUgbGVhZiB0eXBlcworICAgIFFTZXQ8UVVy
bD4gbGVhZlR5cGVzKHR5cGVzKTsKKyAgICBRX0ZPUkVBQ0goY29uc3QgUVVybCYgdHlwZSwgdHlw
ZXMpIHsKKyAgICAgICAgbGVhZlR5cGVzIC09IHN1cGVyQ2xhc3Nlcyh0eXBlKTsKKyAgICAgICAg
aWYobGVhZlR5cGVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IC8vIGlmIHRoZXJlIGlzIG9uZSBsZWFmIHR5cGUgbGVmdCB0aGF0IGlzIHZpc2libGUgdGhlIHJl
c291cmNlIGlzIHZpc2libGUsIHRvbworICAgIFFfRk9SRUFDSCggY29uc3QgUVVybCYgdHlwZSwg
bGVhZlR5cGVzICkgeworICAgICAgICBpZiggbV90eXBlVmlzaWJpbGl0eVRyZWUtPmlzVmlzaWJs
ZSh0eXBlKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gbm8gdmlzaWJsZSB0eXBlIGZvdW5kCisgICAgcmV0dXJuIGZhbHNlOworfQorCitR
U2V0PFFVcmw+IENyYXBweUluZmVyZW5jZXIyOjpQcml2YXRlOjpxdWVyeVJlc291cmNlVHlwZXMo
Y29uc3QgUVVybCAmcmVzb3VyY2UpIGNvbnN0Cit7CisgICAgUVNldDxRVXJsPiByZXNvdXJjZVR5
cGVzOworICAgIFNvcHJhbm86OlF1ZXJ5UmVzdWx0SXRlcmF0b3IgaXQKKyAgICAgICAgICAgID0g
cS0+cGFyZW50TW9kZWwoKS0+ZXhlY3V0ZVF1ZXJ5KCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxl
Y3QgP3Qgd2hlcmUgeyBncmFwaCA/ZyB7ICUxIGEgP3QgLiB9IC4gRklMVEVSKD9nIT0lMikgLiB9
IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoU29w
cmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKHJlc291cmNlKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04z
KG1faW5mZXJlbmNlQ29udGV4dCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwpOworICAgIHdo
aWxlKGl0Lm5leHQoKSkgeworICAgICAgICByZXNvdXJjZVR5cGVzIDw8IGl0WzBdLnVyaSgpOwor
ICAgIH0KKworICAgIHJldHVybiByZXNvdXJjZVR5cGVzOworfQorCitRU2V0PFFVcmw+IENyYXBw
eUluZmVyZW5jZXIyOjpQcml2YXRlOjpidWlsZFN1cGVyQ2xhc3Nlc0hhc2goIGNvbnN0IFFVcmwm
IHR5cGUsIFFTZXQ8UVVybD4mIHZpc2l0ZWRUeXBlcywgY29uc3QgUU11bHRpSGFzaDxRVXJsLCBR
VXJsPiYgcmRmc1N1YkNsYXNzUmVsYXRpb25zID0gUU11bHRpSGFzaDxRVXJsLCBRVXJsPigpICkK
K3sKKyAgICBRSGFzaDxRVXJsLCBRU2V0PFFVcmw+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9z
dXBlckNsYXNzZXMuY29uc3RGaW5kKHR5cGUpOworICAgIGlmKCBpdCA9PSBtX3N1cGVyQ2xhc3Nl
cy5jb25zdEVuZCgpICkgeworICAgICAgICBRU2V0PFFVcmw+IHN1cGVyVHlwZXM7CisgICAgICAg
IGZvcihRTXVsdGlIYXNoPFFVcmwsIFFVcmw+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJkZnNTdWJD
bGFzc1JlbGF0aW9ucy5jb25zdEZpbmQodHlwZSk7CisgICAgICAgICAgICBpdCAhPSByZGZzU3Vi
Q2xhc3NSZWxhdGlvbnMuY29uc3RFbmQoKSAmJiBpdC5rZXkoKSA9PSB0eXBlOyArK2l0KSB7Cisg
ICAgICAgICAgICAvLyBhdm9pZCBlbmRsZXNzIGxvb3BzIGluIGNhc2Ugd2UgaGF2ZSBjaXJjdWxh
ciBoaWVyYXJjaGllcworICAgICAgICAgICAgaWYoICF2aXNpdGVkVHlwZXMuY29udGFpbnMoIGl0
LnZhbHVlKCkgKSApIHsKKyAgICAgICAgICAgICAgICB2aXNpdGVkVHlwZXMgPDwgaXQudmFsdWUo
KTsKKyAgICAgICAgICAgICAgICBzdXBlclR5cGVzIDw8IGl0LnZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgc3VwZXJUeXBlcyArPSBidWlsZFN1cGVyQ2xhc3Nlc0hhc2goIGl0LnZhbHVlKCksIHZp
c2l0ZWRUeXBlcywgcmRmc1N1YkNsYXNzUmVsYXRpb25zICk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgbV9zdXBlckNsYXNzZXMuaW5zZXJ0KCB0eXBlLCBzdXBlclR5cGVzICk7
CisgICAgICAgIHJldHVybiBzdXBlclR5cGVzOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAg
cmV0dXJuIGl0LnZhbHVlKCk7CisgICAgfQorfQorCitDcmFwcHlJbmZlcmVuY2VyMjo6Q3JhcHB5
SW5mZXJlbmNlcjIoU29wcmFubzo6TW9kZWwqIHBhcmVudCkKKyAgICA6IFNvcHJhbm86OkZpbHRl
ck1vZGVsKHBhcmVudCksCisgICAgICBkKG5ldyBQcml2YXRlKCkpCit7CisgICAgZC0+cSA9IHRo
aXM7CisgICAgZC0+bV9pbmZlcmVuY2VDb250ZXh0ID0gUVVybDo6ZnJvbUVuY29kZWQoInVybjpj
cmFwcHlpbmZlcmVuY2UyOmluZmVycmVkdHJpcGxlcyIpOworICAgIGQtPm1fdHlwZVZpc2liaWxp
dHlUcmVlID0gbmV3IFR5cGVWaXNpYmlsaXR5VHJlZSh0aGlzKTsKKyAgICBpZiAoIHBhcmVudCAp
CisgICAgICAgIHVwZGF0ZUluZmVyZW5jZUluZGV4KCk7Cit9CisKK0NyYXBweUluZmVyZW5jZXIy
Ojp+Q3JhcHB5SW5mZXJlbmNlcjIoKQoreworICAgIGlmKCBkLT5tX3VwZGF0ZUFsbFJlc291cmNl
c1RocmVhZCApIHsKKyAgICAgICAgZC0+bV91cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQtPmNhbmNl
bCgpOworICAgICAgICBkLT5tX3VwZGF0ZUFsbFJlc291cmNlc1RocmVhZC0+d2FpdCgpOworICAg
IH0KKyAgICBkZWxldGUgZDsKK30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMjo6c2V0UGFyZW50
TW9kZWwoU29wcmFubzo6TW9kZWwgKm1vZGVsKQoreworICAgIEZpbHRlck1vZGVsOjpzZXRQYXJl
bnRNb2RlbCggbW9kZWwgKTsKKyAgICB1cGRhdGVJbmZlcmVuY2VJbmRleCgpOworfQorCitTb3By
YW5vOjpFcnJvcjo6RXJyb3JDb2RlIENyYXBweUluZmVyZW5jZXIyOjphZGRTdGF0ZW1lbnQoY29u
c3QgU29wcmFubzo6U3RhdGVtZW50ICZzdGF0ZW1lbnQpCit7CisgICAgaWYoIHN0YXRlbWVudC5j
b250ZXh0KCkgPT0gZC0+bV9pbmZlcmVuY2VDb250ZXh0ICkgeworI2lmZGVmIE5ERUJVRworICAg
ICAgICBrRGVidWcoKSA8PCAiTm8gYWN0aW9ucyBhcmUgYWxsb3dlZCBvbiB0aGUgY3JhcHB5IGlu
ZmVyZW5jZXIgY29udGV4dCBpbiByZWxlYXNlIG1vZGUhIiA8PCBzdGF0ZW1lbnQ7CisgICAgICAg
IHJldHVybiBTb3ByYW5vOjpFcnJvcjo6RXJyb3JJbnZhbGlkQXJndW1lbnQ7CisjZWxzZQorICAg
ICAgICBrV2FybmluZygpIDw8ICJXQVJOSU5HISEhISEhISEhISEgQWRkaW5nIHN0YXRlbWVudCBp
biBjcmFwcHkgaW5mZXJlbmNlciBjb250ZXh0ISEhISEhISEhISEhIiA8PCBzdGF0ZW1lbnQ7Cisj
ZW5kaWYKKyAgICB9CisKKyAgICBRTXV0ZXhMb2NrZXIgbG9jayggJmQtPm1fbXV0ZXggKTsKKwor
ICAgIFNvcHJhbm86OkVycm9yOjpFcnJvckNvZGUgciA9IHBhcmVudE1vZGVsKCktPmFkZFN0YXRl
bWVudCggc3RhdGVtZW50ICk7CisgICAgaWYoIHIgPT0gU29wcmFubzo6RXJyb3I6OkVycm9yTm9u
ZSApIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSGFuZGxlIHRoZSBpbmZlcmVuY2UKKyAgICAg
ICAgLy8KKyAgICAgICAgaWYgKCBzdGF0ZW1lbnQuc3ViamVjdCgpLmlzUmVzb3VyY2UoKSAmJgor
ICAgICAgICAgICAgICAgIHN0YXRlbWVudC5vYmplY3QoKS5pc1Jlc291cmNlKCkgJiYKKyAgICAg
ICAgICAgICAgICBzdGF0ZW1lbnQucHJlZGljYXRlKCkgPT0gU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCkgKSB7CisgICAgICAgICAgICBhZGRJbmZlcmVuY2VTdGF0ZW1lbnRzKCBzdGF0
ZW1lbnQuc3ViamVjdCgpLnVyaSgpLCBzdGF0ZW1lbnQub2JqZWN0KCkudXJpKCkgKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiByOworfQorCitTb3ByYW5vOjpFcnJvcjo6RXJyb3JD
b2RlIENyYXBweUluZmVyZW5jZXIyOjpyZW1vdmVTdGF0ZW1lbnQoY29uc3QgU29wcmFubzo6U3Rh
dGVtZW50ICZzdGF0ZW1lbnQpCit7CisgICAgaWYoIHN0YXRlbWVudC5jb250ZXh0KCkgPT0gZC0+
bV9pbmZlcmVuY2VDb250ZXh0ICkgeworI2lmZGVmIE5ERUJVRworICAgICAgICBrRGVidWcoKSA8
PCAiTm8gYWN0aW9ucyBhcmUgYWxsb3dlZCBvbiB0aGUgY3JhcHB5IGluZmVyZW5jZXIgY29udGV4
dCBpbiByZWxlYXNlIG1vZGUhIiA8PCBzdGF0ZW1lbnQ7CisgICAgICAgIHJldHVybiBTb3ByYW5v
OjpFcnJvcjo6RXJyb3JJbnZhbGlkQXJndW1lbnQ7CisjZWxzZQorICAgICAgICBrV2FybmluZygp
IDw8ICJXQVJOSU5HISEhISEhISEhISEgUmVtb3Zpbmcgc3RhdGVtZW50IGZyb20gY3JhcHB5IGlu
ZmVyZW5jZXIgY29udGV4dCEhISEhISEhISEhISIgPDwgc3RhdGVtZW50OworI2VuZGlmCisgICAg
fQorCisgICAgUU11dGV4TG9ja2VyIGxvY2soICZkLT5tX211dGV4ICk7CisKKyAgICBTb3ByYW5v
OjpFcnJvcjo6RXJyb3JDb2RlIGVycm9yID0gcGFyZW50TW9kZWwoKS0+cmVtb3ZlU3RhdGVtZW50
KHN0YXRlbWVudCk7CisgICAgaWYoIGVycm9yID09IFNvcHJhbm86OkVycm9yOjpFcnJvck5vbmUg
KSB7CisgICAgICAgIGlmICggc3RhdGVtZW50LmlzVmFsaWQoKSAmJgorICAgICAgICAgICAgICAg
IHN0YXRlbWVudC5zdWJqZWN0KCkuaXNSZXNvdXJjZSgpICYmCisgICAgICAgICAgICAgICAgc3Rh
dGVtZW50Lm9iamVjdCgpLmlzUmVzb3VyY2UoKSAmJgorICAgICAgICAgICAgICAgIHN0YXRlbWVu
dC5wcmVkaWNhdGUoKSA9PSBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSApIHsKKyAg
ICAgICAgICAgIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIHN0YXRlbWVudC5zdWJqZWN0KCku
dXJpKCksIHN0YXRlbWVudC5vYmplY3QoKS51cmkoKSApOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBTb3ByYW5vOjpFcnJvcjo6RXJyb3JOb25lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yOworICAgIH0KK30KKworU29wcmFubzo6RXJyb3I6OkVycm9yQ29kZSBD
cmFwcHlJbmZlcmVuY2VyMjo6cmVtb3ZlQWxsU3RhdGVtZW50cyhjb25zdCBTb3ByYW5vOjpTdGF0
ZW1lbnQgJnN0YXRlbWVudCkKK3sKKyAgICBpZiggc3RhdGVtZW50LmNvbnRleHQoKSA9PSBkLT5t
X2luZmVyZW5jZUNvbnRleHQgKSB7CisjaWZkZWYgTkRFQlVHCisgICAgICAgIGtEZWJ1ZygpIDw8
ICJObyBhY3Rpb25zIGFyZSBhbGxvd2VkIG9uIHRoZSBjcmFwcHkgaW5mZXJlbmNlciBjb250ZXh0
IGluIHJlbGVhc2UgbW9kZSEiIDw8IHN0YXRlbWVudDsKKyAgICAgICAgcmV0dXJuIFNvcHJhbm86
OkVycm9yOjpFcnJvckludmFsaWRBcmd1bWVudDsKKyNlbHNlCisgICAgICAgIGtXYXJuaW5nKCkg
PDwgIldBUk5JTkchISEhISEhISEhISBSZW1vdmluZyBzdGF0ZW1lbnRzIGZyb20gY3JhcHB5IGlu
ZmVyZW5jZXIgY29udGV4dCEhISEhISEhISEhISIgPDwgc3RhdGVtZW50OworI2VuZGlmCisgICAg
fQorCisgICAgUU11dGV4TG9ja2VyIGxvY2soICZkLT5tX211dGV4ICk7CisKKyAgICAvLworICAg
IC8vIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBuZWVkIHRvIGJlIG1ldCBpbiBvcmRlciBmb3Ig
dXMgdG8gbmVlZCB0byBjaGVjayBmb3IgdHlwZXMKKyAgICAvLyAxLiBPYmplY3Qgb3IgY29udGV4
dCBuZWVkIHRvIGJlIHZhbGlkLiBPdGhlcndpc2Ugb3VyIHR5cGVzIGFyZSByZW1vdmVkIGFueXdh
eQorICAgIC8vIDIuIE9iamVjdCBuZWVkcyB0byBiZSBlbXB0eSBvciBhIHJlc291cmNlLiBMaXRl
cmFscyBhcmUgbmV2ZXIgdHlwZXMKKyAgICAvLyAzLiBQcmVkaWNhdGUgbmVlZHMgdG8gYmUgZW1w
dHkgb3IgcmRmOnR5cGUuIE90aGVyd2lzZSB0aGUgY2FsbCBpcyBub3QgcmVsYXRlZCB0byB0eXBl
cy4KKyAgICAvLworICAgIGlmICggc3RhdGVtZW50LmNvbnRleHQoKSAhPSBkLT5tX2luZmVyZW5j
ZUNvbnRleHQgJiYKKyAgICAgICAgICAgICggKCBzdGF0ZW1lbnQucHJlZGljYXRlKCkuaXNFbXB0
eSgpIHx8CisgICAgICAgICAgICAgICBzdGF0ZW1lbnQucHJlZGljYXRlKCkgPT0gU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCkgKSAmJgorICAgICAgICAgICAgICggc3RhdGVtZW50Lm9i
amVjdCgpLmlzRW1wdHkoKSB8fAorICAgICAgICAgICAgICBzdGF0ZW1lbnQub2JqZWN0KCkuaXNS
ZXNvdXJjZSgpICkgJiYKKyAgICAgICAgICAgICAoIHN0YXRlbWVudC5vYmplY3QoKS5pc1ZhbGlk
KCkgfHwKKyAgICAgICAgICAgICAgc3RhdGVtZW50LmNvbnRleHQoKS5pc1ZhbGlkKCkgKSApICkg
eworICAgICAgICAvLworICAgICAgICAvLyBJZiBib3RoIHJlc291cmNlIGFuZCB0eXBlIGFyZSBk
ZWZpbmVkIHdlIGNhbiBzaW1wbHkgY2FsbCByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCkgb24g
dGhlbQorICAgICAgICAvLworICAgICAgICBpZiggc3RhdGVtZW50LnN1YmplY3QoKS5pc1Jlc291
cmNlKCkgJiYKKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQub2JqZWN0KCkuaXNSZXNvdXJjZSgp
ICkgeworICAgICAgICAgICAgY29uc3QgU29wcmFubzo6RXJyb3I6OkVycm9yQ29kZSBlcnJvciA9
IHBhcmVudE1vZGVsKCktPnJlbW92ZUFsbFN0YXRlbWVudHMoc3RhdGVtZW50KTsKKyAgICAgICAg
ICAgIGlmKCBlcnJvciA9PSBTb3ByYW5vOjpFcnJvcjo6RXJyb3JOb25lICkgeworICAgICAgICAg
ICAgICAgIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIHN0YXRlbWVudC5zdWJqZWN0KCkudXJp
KCksIHN0YXRlbWVudC5vYmplY3QoKS51cmkoKSApOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIGVycm9yOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gaWYg
b25seSB0aGUgdHlwZSBpcyB1bmRlZmluZWQgd2UgZ2V0IHRoZSB0eXBlcyBhbmQgdGhlbiBjYWxs
IHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoKS4gVGhpcyBhdm9pZHMKKyAgICAgICAgLy8gcGVy
Zm9ybWluZyB0aGUgcXVlcnkgaW4gdGhlIGxhdHRlciBtZXRob2Qgb3ZlciBhbmQgb3ZlciBmb3Ig
ZWFjaCB0eXBlCisgICAgICAgIC8vCisgICAgICAgIGVsc2UgaWYoIHN0YXRlbWVudC5zdWJqZWN0
KCkuaXNWYWxpZCgpICkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIHdlIG5lZWQg
dG8gZmlyc3QgZ2V0IHRoZSB0eXBlcyB0byByZW1vdmUsIHRoZW4gcmVtb3ZlIHRoZSBzdGF0ZW1l
bnRzLCBhbmQgb25seSB0aGVuIGNhbGwKKyAgICAgICAgICAgIC8vIHJlbW92ZUluZmVyZW5jZVN0
YXRlbWVudHMoKS4gVGhpcyBpcyBzaW5jZSB0aGUgbGF0dGVyIG1ha2VzIHVzZSBvZiB0aGUgdHlw
ZXMgaW4gdGhlIG1vZGVsCisgICAgICAgICAgICAvLworICAgICAgICAgICAgUVN0cmluZyBxdWVy
eTsKKyAgICAgICAgICAgIGlmKCBzdGF0ZW1lbnQuY29udGV4dCgpLmlzVmFsaWQoKSApIHsKKyAg
ICAgICAgICAgICAgICBxdWVyeSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCA/dCB3aGVy
ZSB7IGdyYXBoICUyIHsgJTEgYSA/dCAuIH0gLiB9IikKKyAgICAgICAgICAgICAgICAgICAgICAg
IC5hcmcoc3RhdGVtZW50LnN1YmplY3QoKS50b04zKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlbWVudC5jb250ZXh0KCkudG9OMygpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHF1ZXJ5ID0gUVN0cmluZzo6ZnJvbUxhdGlu
MSgic2VsZWN0ID90IHdoZXJlIHsgZ3JhcGggP2cgeyAlMSBhID90IC4gfSAuIEZJTFRFUig/ZyE9
JTIpIC4gfSIpCisgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKHN0YXRlbWVudC5zdWJqZWN0
KCkudG9OMygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpy
ZXNvdXJjZVRvTjMoY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjb25zdCBRTGlzdDxTb3ByYW5vOjpOb2RlPiB0eXBlcyA9IGV4ZWN1dGVRdWVy
eSggcXVlcnksIFNvcHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsICkuaXRlcmF0ZUJp
bmRpbmdzKDApLmFsbE5vZGVzKCk7CisgICAgICAgICAgICBjb25zdCBTb3ByYW5vOjpFcnJvcjo6
RXJyb3JDb2RlIGVycm9yID0gcGFyZW50TW9kZWwoKS0+cmVtb3ZlQWxsU3RhdGVtZW50cyhzdGF0
ZW1lbnQpOworICAgICAgICAgICAgaWYoIGVycm9yID09IFNvcHJhbm86OkVycm9yOjpFcnJvck5v
bmUgKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggc3RhdGVt
ZW50LnN1YmplY3QoKS51cmkoKSwgdHlwZXMgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBlcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHRo
ZSBzdWJqZWN0IGlzIG5vdCBkZWZpbmVkIGJ1dCB0aGUgdHlwZSBpcyB3ZSBuZWVkIHRvIHVwZGF0
ZSBzZXZlcmFsIHJlc291cmNlcy4gVGhlcmUgaXMgbm8gd2F5IGFyb3VuZAorICAgICAgICAvLyBj
YWxsaW5nIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoKSBmb3IgZWFjaCByZXNvdXJjZS4KKyAg
ICAgICAgLy8KKyAgICAgICAgZWxzZSBpZiggc3RhdGVtZW50Lm9iamVjdCgpLmlzVmFsaWQoKSAp
IHsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGdldCB0aGUgcmVz
b3VyY2VzIGJlZm9yZSBhY3R1YWxseSByZW1vdmluZyB0aGUgc3RhdGVtZW50cyBzaW5jZSBvdGhl
cndpc2Ugd2UgbWlnaHQgbWlzcyB0aGVtCisgICAgICAgICAgICAvLworICAgICAgICAgICAgUVN0
cmluZyBxdWVyeTsKKyAgICAgICAgICAgIGlmKCBzdGF0ZW1lbnQuY29udGV4dCgpLmlzVmFsaWQo
KSApIHsKKyAgICAgICAgICAgICAgICBxdWVyeSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVj
dCA/ciB3aGVyZSB7IGdyYXBoICUyIHsgP3IgYSAlMSAuIH0gLiB9IikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC5hcmcoc3RhdGVtZW50Lm9iamVjdCgpLnRvTjMoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGVtZW50LmNvbnRleHQoKS50b04zKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcXVlcnkgPSBRU3RyaW5nOjpm
cm9tTGF0aW4xKCJzZWxlY3QgP3Igd2hlcmUgeyBncmFwaCA/ZyB7ID9yIGEgJTEgLiB9IC4gRklM
VEVSKD9nIT0lMikgLiB9IikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoc3RhdGVtZW50
Lm9iamVjdCgpLnRvTjMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6
Tm9kZTo6cmVzb3VyY2VUb04zKGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY29uc3QgUUxpc3Q8U29wcmFubzo6Tm9kZT4gcmVzb3VyY2VzID0g
ZXhlY3V0ZVF1ZXJ5KCBxdWVyeSwgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwg
KS5pdGVyYXRlQmluZGluZ3MoMCkuYWxsTm9kZXMoKTsKKyAgICAgICAgICAgIGNvbnN0IFNvcHJh
bm86OkVycm9yOjpFcnJvckNvZGUgZXJyb3IgPSBwYXJlbnRNb2RlbCgpLT5yZW1vdmVBbGxTdGF0
ZW1lbnRzKHN0YXRlbWVudCk7CisgICAgICAgICAgICBpZiggZXJyb3IgPT0gU29wcmFubzo6RXJy
b3I6OkVycm9yTm9uZSApIHsKKyAgICAgICAgICAgICAgICBRX0ZPUkVBQ0goIGNvbnN0IFNvcHJh
bm86Ok5vZGUmIHJlcywgcmVzb3VyY2VzICkgeworICAgICAgICAgICAgICAgICAgICByZW1vdmVJ
bmZlcmVuY2VTdGF0ZW1lbnRzKCByZXMudXJpKCksIHN0YXRlbWVudC5vYmplY3QoKS51cmkoKSAp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBl
cnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIE5laXRoZXIgc3ViamVj
dCBub3Igb2JqZWN0IGFyZSBkZWZpbmVkCisgICAgICAgIC8vCisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgUUhhc2g8UVVybCwgUUxpc3Q8UVVybD4gPiByZXNUeXBlSGFzaDsKKyAgICAgICAg
ICAgIFFTdHJpbmcgcXVlcnk7CisgICAgICAgICAgICBpZiggc3RhdGVtZW50LmNvbnRleHQoKS5p
c1ZhbGlkKCkgKSB7CisgICAgICAgICAgICAgICAgcXVlcnkgPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCJzZWxlY3QgZGlzdGluY3QgP3IgP3Qgd2hlcmUgeyBncmFwaCAlMSB7ID9yIGEgP3QgLiB9IC4g
fSIpCisgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKHN0YXRlbWVudC5jb250ZXh0KCkudG9O
MygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHF1ZXJ5ID0gUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0IGRpc3RpbmN0ID9yID90IHdoZXJl
IHsgZ3JhcGggP2cgeyA/ciBhID90IC4gfSAuIEZJTFRFUig/ZyE9JTEpIC4gfSIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAuYXJnKFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyhjcmFwcHlJ
bmZlcmVuY2VDb250ZXh0KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFNvcHJhbm86
OlF1ZXJ5UmVzdWx0SXRlcmF0b3IgaXQgPSBwYXJlbnRNb2RlbCgpLT5leGVjdXRlUXVlcnkoIHF1
ZXJ5LCBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApOworICAgICAgICAgICAg
d2hpbGUoIGl0Lm5leHQoKSApIHsKKyAgICAgICAgICAgICAgICByZXNUeXBlSGFzaFtpdFsiciJd
LnVyaSgpXS5hcHBlbmQoIGl0WyJ0Il0udXJpKCkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNvbnN0IFNvcHJhbm86OkVycm9yOjpFcnJvckNvZGUgZXJyb3IgPSBwYXJlbnRNb2RlbCgp
LT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHN0YXRlbWVudCk7CisgICAgICAgICAgICBpZiggZXJyb3Ig
PT0gU29wcmFubzo6RXJyb3I6OkVycm9yTm9uZSApIHsKKyAgICAgICAgICAgICAgICBRSGFzaDxR
VXJsLCBRTGlzdDxRVXJsPiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNUeXBlSGFzaC5jb25z
dEVuZCgpOworICAgICAgICAgICAgICAgIGZvciggUUhhc2g8UVVybCwgUUxpc3Q8UVVybD4gPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNUeXBlSGFzaC5jb25zdEJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cygg
aXQua2V5KCksIGl0LnZhbHVlKCkgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7
CisgICAgICAgIHJldHVybiBwYXJlbnRNb2RlbCgpLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHN0YXRl
bWVudCk7CisgICAgfQorfQorCitRVXJsIENyYXBweUluZmVyZW5jZXIyOjpjcmFwcHlJbmZlcmVu
Y2VDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+bV9pbmZlcmVuY2VDb250ZXh0Owor
fQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyOjp1cGRhdGVJbmZlcmVuY2VJbmRleCgpCit7Cisg
ICAga0RlYnVnKCk7CisKKyAgICBRTXV0ZXhMb2NrZXIgbG9jayggJmQtPm1fbXV0ZXggKTsKKwor
ICAgIC8vIEJ1aWxkIHN1cGVyY2xhc3NlcyBoYXNoCisgICAgLy8gPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgLy8gY2xlYXIgY2FjaGUKKyAgICBk
LT5tX3N1cGVyQ2xhc3Nlcy5jbGVhcigpOworCisgICAgLy8gY2FjaGUgc3ViQ2xhc3NPZiByZWxh
dGlvbnMgKG9ubHkgdGhlIG9yaWdpbmFsIG9uZXMpCisgICAgUU11bHRpSGFzaDxRVXJsLCBRVXJs
PiByZGZzU3ViQ2xhc3NSZWxhdGlvbnM7CisgICAgU29wcmFubzo6UXVlcnlSZXN1bHRJdGVyYXRv
ciBpdCA9IGV4ZWN1dGVRdWVyeSggUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0ID94ID95IHdo
ZXJlIHsgZ3JhcGggP2cgeyA/eCAlMSA/eSAuIH0gLiAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRklMVEVS
KD9nICE9IDx1cm46Y3JhcHB5aW5mZXJlbmNlOmluZmVycmVkdHJpcGxlcz4pIC4gIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIkZJTFRFUig/eCE9P3kpIC4gfSIgKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoIFNvcHJhbm86Ok5vZGU6OnJlc291cmNl
VG9OMyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpICkgKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpR
dWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApOworICAgIHdoaWxlICggaXQubmV4dCgpICkgewor
ICAgICAgICByZGZzU3ViQ2xhc3NSZWxhdGlvbnMuaW5zZXJ0KCBpdFsieCJdLnVyaSgpLCBpdFsi
eSJdLnVyaSgpICk7CisgICAgfQorCisgICAgLy8gY29tcGxldGUgdGhlIG1hcCBvZiBzdXBlciBj
bGFzc2VzCisgICAgUV9GT1JFQUNIKCBjb25zdCBRVXJsJiB0eXBlLCByZGZzU3ViQ2xhc3NSZWxh
dGlvbnMua2V5cygpICkgeworICAgICAgICBRU2V0PFFVcmw+IHZpc2l0ZWRDbGFzc2VzOworICAg
ICAgICBkLT5idWlsZFN1cGVyQ2xhc3Nlc0hhc2goIHR5cGUsIHZpc2l0ZWRDbGFzc2VzLCByZGZz
U3ViQ2xhc3NSZWxhdGlvbnMgKTsKKyAgICB9CisKKyAgICAvLyBnZXQgdGhlIGNsYXNzZXMgdGhh
dCBkbyBub3QgaGF2ZSBhbnkgcGFyZW50IGNsYXNzCisgICAgaXQgPSBleGVjdXRlUXVlcnkoIFFT
dHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCA/YyB3aGVyZSB7ID9jIGEgJTEgLiBPUFRJT05BTCB7
ID9jICUyID9wIC4gfSAuIEZJTFRFUighQk9VTkQoP3ApKSAuIH0iICkKKyAgICAgICAgICAgICAg
ICAgICAgICAuYXJnKCBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIFNvcHJhbm86OlZvY2Fi
dWxhcnk6OlJERlM6OkNsYXNzKCkgKSApCisgICAgICAgICAgICAgICAgICAgICAgLmFyZyggU29w
cmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJD
bGFzc09mKCkgKSApLAorICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlF1ZXJ5OjpRdWVy
eUxhbmd1YWdlU3BhcnFsICk7CisgICAgd2hpbGUgKCBpdC5uZXh0KCkgKSB7CisgICAgICAgIGQt
Pm1fc3VwZXJDbGFzc2VzLmluc2VydCggaXRbImMiXS51cmkoKSwgUVNldDxRVXJsPigpICk7Cisg
ICAgfQorCisgICAgLy8gYWRkIHJkZnM6UmVzb3VyY2UgYXMgcGFyZW50IGZvciBhbGwgY2xhc3Nl
cworICAgIFFNdXRhYmxlSGFzaEl0ZXJhdG9yPFFVcmwsIFFTZXQ8UVVybD4gPiByZGZzUmVzSXQo
IGQtPm1fc3VwZXJDbGFzc2VzICk7CisgICAgd2hpbGUoIHJkZnNSZXNJdC5oYXNOZXh0KCkgKSB7
CisgICAgICAgIHJkZnNSZXNJdC5uZXh0KCk7CisgICAgICAgIHJkZnNSZXNJdC52YWx1ZSgpLmlu
c2VydChTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKTsKKyAgICB9CisKKyAg
ICAvLyBCdWlsZCB2aXNpYmlsaXR5IHRyZWUKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgZC0+bV90eXBlVmlzaWJpbGl0eVRyZWUtPnJl
YnVpbGRUcmVlKCk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gY291bnQgZm9yIGRlYnVnZ2lu
ZworICAgIGludCBjbnQgPSAwOworICAgIGZvciggUUhhc2g8UVVybCwgUVNldDxRVXJsPiA+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IGQtPm1fc3VwZXJDbGFzc2VzLmNvbnN0QmVnaW4oKTsKKyAgICAg
ICAgIGl0ICE9IGQtPm1fc3VwZXJDbGFzc2VzLmNvbnN0RW5kKCk7ICsraXQgKSB7CisgICAgICAg
IGtEZWJ1ZygpIDw8IGl0LmtleSgpIDw8ICItPiIgPDwgaXQudmFsdWUoKTsKKyAgICAgICAgY250
ICs9IGl0LnZhbHVlKCkuY291bnQoKTsKKyAgICB9CisgICAga0RlYnVnKCkgPDwgIk51bWJlciBv
ZiBjbGFzc2VzOiAgICAgICAgICAgIiA8PCBkLT5tX3N1cGVyQ2xhc3Nlcy5jb3VudCgpOworICAg
IGtEZWJ1ZygpIDw8ICJOdW1iZXIgb2Ygc3ViY2xhc3MgcmVsYXRpb25zOiIgPDwgY250OworI2Vu
ZGlmCit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6OnVwZGF0ZUFsbFJlc291cmNlcygpCit7
CisgICAga0RlYnVnKCk7CisgICAgaWYoICFkLT5tX3VwZGF0ZUFsbFJlc291cmNlc1RocmVhZCAp
IHsKKyAgICAgICAgZC0+bV91cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQgPSBuZXcgVXBkYXRlQWxs
UmVzb3VyY2VzVGhyZWFkKHRoaXMpOworICAgICAgICBjb25uZWN0KGQtPm1fdXBkYXRlQWxsUmVz
b3VyY2VzVGhyZWFkLCBTSUdOQUwoZmluaXNoZWQoKSksIHRoaXMsIFNJR05BTChhbGxSZXNvdXJj
ZXNVcGRhdGVkKCkpKTsKKyAgICB9CisgICAgZC0+bV91cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQt
PnN0YXJ0KCk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6OmFkZEluZmVyZW5jZVN0YXRl
bWVudHMoIGNvbnN0IFFVcmwmIHJlc291cmNlLCBjb25zdCBRVXJsJiB0eXBlICkKK3sKKyAgICBy
ZXR1cm4gYWRkSW5mZXJlbmNlU3RhdGVtZW50cyggcmVzb3VyY2UsIFFTZXQ8UVVybD4oKSA8PCB0
eXBlICk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6OmFkZEluZmVyZW5jZVN0YXRlbWVu
dHMoIGNvbnN0IFFVcmwmIHJlc291cmNlLCBjb25zdCBRU2V0PFFVcmw+JiB0eXBlcyApCit7Cisg
ICAgLy8gYWRkIG1pc3NpbmcgdHlwZXMKKyAgICBib29sIGhhdmVWaXNpYmxlVHlwZSA9IGZhbHNl
OworICAgIFFTZXQ8UVVybD4gc3VwZXJUeXBlczsKKyAgICBRX0ZPUkVBQ0goIGNvbnN0IFFVcmwm
IHR5cGUsIHR5cGVzICkgeworICAgICAgICBzdXBlclR5cGVzICs9IGQtPnN1cGVyQ2xhc3Nlcyh0
eXBlKTsKKyAgICAgICAgaWYoICFoYXZlVmlzaWJsZVR5cGUgJiYgZC0+bV90eXBlVmlzaWJpbGl0
eVRyZWUtPmlzVmlzaWJsZSh0eXBlKSApCisgICAgICAgICAgICBoYXZlVmlzaWJsZVR5cGUgPSB0
cnVlOworICAgIH0KKyAgICBRU2V0PFFVcmw+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzdXBlclR5
cGVzLmNvbnN0RW5kKCk7CisgICAgZm9yKCBRU2V0PFFVcmw+Ojpjb25zdF9pdGVyYXRvciB0eXBl
SXQgPSBzdXBlclR5cGVzLmNvbnN0QmVnaW4oKTsgdHlwZUl0ICE9IGVuZDsgKyt0eXBlSXQgKSB7
CisgICAgICAgIHBhcmVudE1vZGVsKCktPmFkZFN0YXRlbWVudChyZXNvdXJjZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnR5cGVJdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSk7
CisgICAgfQorCisgICAgLy8gdGhlIHZpc2liaWxpdHkgY2FuIG9ubHkgY2hhbmdlIGlmIHdlIGFk
ZCBhIHZpc2libGUgdHlwZQorICAgIGlmKCBoYXZlVmlzaWJsZVR5cGUgKSB7CisgICAgICAgIHNl
dFZpc2liaWxpdHkoIHJlc291cmNlLCBWaXNpYmxlICk7CisgICAgfQorfQorCit2b2lkIENyYXBw
eUluZmVyZW5jZXIyOjpyZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKGNvbnN0IFFVcmwgJnJlc291
cmNlLCBjb25zdCBRVXJsICZ0eXBlKQoreworICAgIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMo
IHJlc291cmNlLCBRTGlzdDxRVXJsPigpIDw8IHR5cGUgKTsKK30KKwordm9pZCBDcmFwcHlJbmZl
cmVuY2VyMjo6cmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3QgUVVybCYgcmVzb3VyY2Us
IGNvbnN0IFFMaXN0PFNvcHJhbm86Ok5vZGU+JiB0eXBlcyApCit7CisgICAgUUxpc3Q8UVVybD4g
dXJpczsKKyAgICBRX0ZPUkVBQ0goIGNvbnN0IFNvcHJhbm86Ok5vZGUmIG5vZGUsIHR5cGVzICkK
KyAgICAgICAgdXJpcyA8PCBub2RlLnVyaSgpOworICAgIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVu
dHMoIHJlc291cmNlLCB1cmlzICk7Cit9CisKKy8vIEFsd2F5cyBjYWxsZWQgKmFmdGVyKiByZW1v
dmluZyB0aGUgYWN0dWFsIHN0YXRlbWVudHMKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6OnJlbW92
ZUluZmVyZW5jZVN0YXRlbWVudHMoY29uc3QgUVVybCAmcmVzb3VyY2UsIGNvbnN0IFFMaXN0PFFV
cmw+ICZ0eXBlcykKK3sKKyAgICAvLyB3ZSBjYW5ub3Qgc2ltcGx5IHJlbW92ZSBhbGwgc3VwZXIg
dHlwZXMgc2luY2UgdGhlIHJlc291cmNlIG1pZ2h0IHN0aWxsIGhhdmUgdHlwZXMgdGhhdCBhcmUg
c29tZXdoZXJlIGluIHRoYXQgaGllcmFyY2h5CisKKyAgICAvLyBkZXRlcm1pbmUgdGhlIHR5cGVz
IHRoYXQgc2hvdWxkIGJlIGluIHRoZSBkYXRhYmFzZSBub3cKKyAgICBjb25zdCBRU2V0PFFVcmw+
IGNvcnJlY3RUeXBlcyA9IGQtPnF1ZXJ5UmVzb3VyY2VUeXBlcyhyZXNvdXJjZSk7CisgICAgUVNl
dDxRVXJsPiBjb3JyZWN0U3VwZXJUeXBlczsKKyAgICBRX0ZPUkVBQ0goIGNvbnN0IFFVcmwmIHR5
cGUsIGNvcnJlY3RUeXBlcyApIHsKKyAgICAgICAgY29ycmVjdFN1cGVyVHlwZXMgKz0gZC0+c3Vw
ZXJDbGFzc2VzKHR5cGUpOworICAgIH0KKworICAgIC8vIG5vdyBjb21wYXJlIHRoYXQgbGlzdCB3
aXRoIHRoZSBvbmVzIHRoYXQgd2UgY291bGQgcmVtb3ZlCisgICAgUVNldDxRVXJsPiB0eXBlc1Rv
UmVtb3ZlOworICAgIFFfRk9SRUFDSCggY29uc3QgUVVybCYgdHlwZSwgUVNldDxRVXJsPjo6ZnJv
bUxpc3QodHlwZXMpICkKKyAgICAgICAgdHlwZXNUb1JlbW92ZSArPSBkLT5zdXBlckNsYXNzZXMo
dHlwZSk7CisgICAgdHlwZXNUb1JlbW92ZSAtPSBjb3JyZWN0U3VwZXJUeXBlczsKKworICAgIGJv
b2wgaGF2ZVZpc2libGVUeXBlID0gZmFsc2U7CisgICAgUV9GT1JFQUNIKCBjb25zdCBRVXJsJiB0
eXBlVG9SZW1vdmUsIHR5cGVzVG9SZW1vdmUgKSB7CisgICAgICAgIGlmKCAhaGF2ZVZpc2libGVU
eXBlICYmIGQtPm1fdHlwZVZpc2liaWxpdHlUcmVlLT5pc1Zpc2libGUodHlwZVRvUmVtb3ZlKSAp
CisgICAgICAgICAgICBoYXZlVmlzaWJsZVR5cGUgPSB0cnVlOworICAgICAgICBwYXJlbnRNb2Rl
bCgpLT5yZW1vdmVTdGF0ZW1lbnQocmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVUb1JlbW92ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSk7Cisg
ICAgfQorCisgICAgLy8gcmVtb3ZlIHRoZSB2aXNpYmlsaXR5IGlmIG5lY2Vzc2FyeQorICAgIC8v
IG9ubHkgYmUgcmVtb3ZpbmcgdmlzaWJsZSB0eXBlcyB3ZSBjYW4gY2hhbmdlIHRoZSBhY3R1YWwg
dmlzaWJpbGl0eQorICAgIGlmKCBoYXZlVmlzaWJsZVR5cGUgKSB7CisgICAgICAgIHNldFZpc2li
aWxpdHkoIHJlc291cmNlLCBjb3JyZWN0VHlwZXMuaXNFbXB0eSgpID8gVW5kZWZpbmVkVmlzaWJp
bGl0eSA6ICggZC0+aXNWaXNpYmxlRnJvbVR5cGVzKGNvcnJlY3RUeXBlcykgPyBWaXNpYmxlIDog
Tm9uVmlzaWJsZSApICk7CisgICAgfQorfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyOjpzZXRW
aXNpYmlsaXR5KGNvbnN0IFFVcmwgJnJlc291cmNlLCBWaXNpYmlsaXR5IHZpc2liaWxpdHkpCit7
CisgICAgLy8gd2UgdXNlIGFuIGludGVnZXIgaW5zdGVhZCBvZiBhIGJvb2xlYW4gZm9yIHBlcmZv
cm1hbmNlIHJlYXNvbnM6IHZpcnR1b3NvIGRvZXMgbm90IHN1cHBvcnQgYm9vbCBhbmQgU29wcmFu
byBjb252ZXJ0cyB0aGVtIHRvIHN0cmluZ3MKKyAgICBpZiggdmlzaWJpbGl0eSA9PSBWaXNpYmxl
ICkgeworICAgICAgICBwYXJlbnRNb2RlbCgpLT5yZW1vdmVTdGF0ZW1lbnQocmVzb3VyY2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpWb2NhYnVsYXJ5
OjpOQU86OnVzZXJWaXNpYmxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTb3ByYW5vOjpMaXRlcmFsVmFsdWUoMCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpOworICAgICAgICBwYXJlbnRN
b2RlbCgpLT5hZGRTdGF0ZW1lbnQocmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpMaXRlcmFsVmFsdWUoMSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmFwcHlJbmZlcmVuY2VDb250
ZXh0KCkpOworICAgIH0KKyAgICBlbHNlIGlmKCB2aXNpYmlsaXR5ID09IE5vblZpc2libGUgKSB7
CisgICAgICAgIHBhcmVudE1vZGVsKCktPnJlbW92ZVN0YXRlbWVudChyZXNvdXJjZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5B
Tzo6dXNlclZpc2libGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNvcHJhbm86OkxpdGVyYWxWYWx1ZSgxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSk7CisgICAgICAgIHBhcmVudE1vZGVs
KCktPmFkZFN0YXRlbWVudChyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OkxpdGVyYWxWYWx1ZSgwKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyYXBweUluZmVyZW5jZUNvbnRleHQo
KSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBwYXJlbnRNb2RlbCgpLT5yZW1vdmVBbGxT
dGF0ZW1lbnRzKHJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JhcHB5SW5mZXJlbmNlQ29u
dGV4dCgpKTsKKyAgICB9Cit9CisKK2Jvb2wgQ3JhcHB5SW5mZXJlbmNlcjI6OmlzVHlwZVZpc2li
bGUoY29uc3QgUVVybCAmdHlwZVVyaSkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+bV90eXBlVmlz
aWJpbGl0eVRyZWUtPmlzVmlzaWJsZSggdHlwZVVyaSApOworfQorCisjaW5jbHVkZSAiY3JhcHB5
aW5mZXJlbmNlcjIubW9jIgpJbmRleDogc2VydmljZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmgJKHJldmlzaW9uIDEyMTM5
NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL3JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksMTEgKzI5LDI3IEBACiB9CiAKIGNsYXNzIEtKb2I7CitjbGFzcyBDcmFwcHlJbmZlcmVuY2Vy
MjsKIAogbmFtZXNwYWNlIE5lcG9tdWsgewogCiAgICAgY2xhc3MgTW9kZWxDb3B5Sm9iOwogCisg
ICAgLyoqCisgICAgICogUmVwcmVzZW50cyB0aGUgbWFpbiBOZXBvbXVrIG1vZGVsLiBXaGlsZSBp
dCBsb29rcyBhcyBpZiB0aGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4KKyAgICAgKiBvbmUgaW5zdGFu
Y2Ugb2YgUmVwb3NpdG9yeSB0aGVyZSBpcyBvbmx5IHRoZSBvbmUuCisgICAgICoKKyAgICAgKiBS
ZXBvc2l0b3J5IGlzIGJhc2VkIG9uIE5STE1vZGVsIG9ubHkgZm9yIHRoZSBxdWVyeSBwcmVmaXgg
ZXhwYW5zaW9uIGZlYXR1cmUuIEl0CisgICAgICogdXNlcyBhIFNvcHJhbm86OlV0aWxzOjpTaWdu
YWxDYWNoZU1vZGVsIHRvIGNvbXBhY3QgdGhlIHNldmVyYWwgc3RhdGVtZW50c0FkZGVkKCkKKyAg
ICAgKiBhbmQgc3RhdGVtZW50c1JlbW92ZWQoKSBzaWduYWxzLCBhbmQgdXNlcyBDcmFwcHlJbmZl
cmVuY2VyMiB0byBrZWVwIHJkZnM6c3ViQ2xhc3NPZgorICAgICAqIGFuZCBuYW86dXNlclZpc2li
bGUgaW5mZXJlbmNlIHVwLXRvLWRhdGUuCisgICAgICoKKyAgICAgKiBPbiBjb25zdHJ1Y3Rpb24g
aXQgY2hlY2tzIGZvciBhbmQgb3B0aW9uYWxseSBwZXJmb3JtcyBjb252ZXJzaW9uIGZyb20gYW4g
b2xkIHJlcG9zaXRvcnkKKyAgICAgKiB0eXBlIChwcmUtVmlydHVvc28gdGltZXMpIGFuZCBydW5z
IENyYXBweUluZmVyZW5jZXIyOjp1cGRhdGVBbGxSZXNvdXJjZXMoKSB3aGljaCBpcworICAgICAq
IHBlcmZvcm1lZCBpbiBhIHNlcGFyYXRlIHRocmVhZC4KKyAgICAgKgorICAgICAqIFxhdXRob3Ig
U2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorICAgICAqLwogICAgIGNsYXNzIFJlcG9z
aXRvcnkgOiBwdWJsaWMgU29wcmFubzo6TlJMTW9kZWwKICAgICB7CiAgICAgICAgIFFfT0JKRUNU
CkBAIC01OSw5ICs3NSwxMCBAQAogICAgICAgICAgKiBXaWxsIGVtaXQgdGhlIG9wZW5lZCBzaWdu
YWwKICAgICAgICAgICovCiAgICAgICAgIHZvaWQgb3BlbigpOwotCiAgICAgICAgIHZvaWQgY2xv
c2UoKTsKIAorICAgICAgICB2b2lkIHVwZGF0ZUluZmVyZW5jZSgpOworCiAgICAgUV9TSUdOQUxT
OgogICAgICAgICB2b2lkIG9wZW5lZCggUmVwb3NpdG9yeSosIGJvb2wgc3VjY2VzcyApOwogCkBA
IC03NSw2ICs5Miw3IEBACiAgICAgICAgIFN0YXRlIG1fc3RhdGU7CiAKICAgICAgICAgU29wcmFu
bzo6TW9kZWwqIG1fbW9kZWw7CisgICAgICAgIENyYXBweUluZmVyZW5jZXIyKiBtX2luZmVyZW5j
ZXI7CiAgICAgICAgIGNvbnN0IFNvcHJhbm86OkJhY2tlbmQqIG1fYmFja2VuZDsKIAogICAgICAg
ICAvLyBvbmx5IHVzZWQgZHVyaW5nIG9wZW5pbmcKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2Uvb250
b2xvZ3ltYW5hZ2VybW9kZWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2Uvb250
b2xvZ3ltYW5hZ2VybW9kZWwuY3BwCShyZXZpc2lvbiAxMjEzOTQwKQorKysgc2VydmljZXMvc3Rv
cmFnZS9vbnRvbG9neW1hbmFnZXJtb2RlbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIx
LDcgQEAKIAogI2luY2x1ZGUgPFF0Q29yZS9RVXJsPgogI2luY2x1ZGUgPFF0Q29yZS9RRGF0ZVRp
bWU+CisjaW5jbHVkZSA8UXRDb3JlL1FTY29wZWRQb2ludGVyPgogCiAjaW5jbHVkZSA8U29wcmFu
by9CYWNrZW5kPgogI2luY2x1ZGUgPFNvcHJhbm8vVmVyc2lvbj4KQEAgLTIyNSwyMyArMjI2LDYg
QEAKICAgICAgICAgdG1wTW9kZWwtPmFkZFN0YXRlbWVudCggU29wcmFubzo6U3RhdGVtZW50KCBk
YXRhR3JhcGhVcmksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6aGFzRGVmYXVsdE5hbWVzcGFj
ZSgpLCBMaXRlcmFsVmFsdWUoIG5zLnRvU3RyaW5nKCkgKSwgbWV0YURhdGFHcmFwaFVyaSApICk7
CiAjZW5kaWYKICAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTaW1wbGUgZ2FyYmFnZSBjb2xsZWN0
aW9uIGNsYXNzLgotICAgICAqLwotICAgIGNsYXNzIE9iamVjdEdhcmJhZ2VDb2xsZWN0b3IKLSAg
ICB7Ci0gICAgcHVibGljOgotICAgICAgICBPYmplY3RHYXJiYWdlQ29sbGVjdG9yKCBRT2JqZWN0
KiBvICkKLSAgICAgICAgICAgIDogbV9vYmplY3QoIG8gKSB7Ci0gICAgICAgIH0KLSAgICAgICAg
fk9iamVjdEdhcmJhZ2VDb2xsZWN0b3IoKSB7Ci0gICAgICAgICAgICBkZWxldGUgbV9vYmplY3Q7
Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFFPYmplY3QqIG1fb2JqZWN0Owot
ICAgIH07CiB9CiAKIApAQCAtMzA4LDcgKzI5Miw3IEBACiAgICAgfQogCiAgICAgLy8gc28gd2Ug
ZG8gbm90IGhhdmUgdG8gY2FyZSBhYm91dCBkZWxldGluZyBvdXQgdG1wTW9kZWwgYW55bW9yZS4K
LSAgICBPYmplY3RHYXJiYWdlQ29sbGVjdG9yIG1vZGVsR2FyYmFnZUNvbGxlY3RvciggdG1wTW9k
ZWwgKTsKKyAgICBRU2NvcGVkUG9pbnRlcjxTb3ByYW5vOjpNb2RlbD4gbW9kZWxHYXJiYWdlQ29s
bGVjdG9yKCB0bXBNb2RlbCApOwogCiAgICAgLy8gaW1wb3J0IHRoZSBkYXRhIGludG8gb3VyIHRt
cCBtb2RlbAogICAgIHdoaWxlICggZGF0YS5uZXh0KCkgKSB7CkluZGV4OiBzZXJ2aWNlcy9zdG9y
YWdlL2NyYXBweWluZmVyZW5jZXIyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS9j
cmFwcHlpbmZlcmVuY2VyMi5oCShyZXZpc2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFnZS9jcmFw
cHlpbmZlcmVuY2VyMi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAgIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBOZXBvbXVrIEtERSBwcm9qZWN0LgorICAgQ29weXJpZ2h0
IChDKSAyMDEwIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKworICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSB2ZXJzaW9uIDMsIG9yIGFueQorICAgbGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBieSB0aGUg
bWVtYmVyc2hpcCBvZiBLREUgZS5WLiAob3IgaXRzCisgICBzdWNjZXNzb3IgYXBwcm92ZWQgYnkg
dGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4pLCB3aGljaCBzaGFsbAorICAgYWN0IGFzIGEgcHJv
eHkgZGVmaW5lZCBpbiBTZWN0aW9uIDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNlLgorCisg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj
ZW5zZXMvPi4KKyovCisKKyNpZm5kZWYgQ1JBUFBZSU5GRVJFTkNFUjJfSAorI2RlZmluZSBDUkFQ
UFlJTkZFUkVOQ0VSMl9ICisKKyNpbmNsdWRlIDxTb3ByYW5vL0ZpbHRlck1vZGVsPgorCisvKioK
KyAqIFRoZSBzZWNvbmQgdmVyc2lvbiBvZiB0aGUgY3JhcHB5IGluZmVyZW5jZXIgaXQgZXZlbiBj
cmFwcGllciB0aGFuIHRoZSBmaXJzdC4KKyAqIEl0IG9ubHkgZG9lcyByZGY6dHlwZSBpbmZlcmVu
Y2luZywgbm90aGluZyBlbHNlLiBJbiB0aGUgbG9uZyBydW4gdGhpcyBpcyBub3QKKyAqIGVub3Vn
aCBidXQgZm9yIG5vdyBpdCBpcyB0aGUgb25seSBraW5kIG9mIGluZmVyZW5jZSB3ZSB1c2UgaW4g
TmVwb211ay4KKyAqIFRodXMsIGl0IGlzIGVub3VnaCBhbmQgbWFrZXMgZm9yIG11Y2ggZmFzdGVy
IHF1ZXJpZXMgdGhhbiB0aGUgZmlyc3QKKyAqIGNyYXBweSBpbmZlcmVuY2VyLgorICoKKyAqIFxh
dXRob3IgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorICovCitjbGFzcyBDcmFwcHlJ
bmZlcmVuY2VyMiA6IHB1YmxpYyBTb3ByYW5vOjpGaWx0ZXJNb2RlbAoreworICAgIFFfT0JKRUNU
CisKK3B1YmxpYzoKKyAgICBDcmFwcHlJbmZlcmVuY2VyMihTb3ByYW5vOjpNb2RlbCogcGFyZW50
ID0gMCk7CisgICAgfkNyYXBweUluZmVyZW5jZXIyKCk7CisKKyAgICAvKioKKyAgICAgKiBccmVp
bXBsIHRvIHVwZGF0ZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzCisgICAgICovCisgICAgdm9pZCBzZXRQ
YXJlbnRNb2RlbCggU29wcmFubzo6TW9kZWwqIG1vZGVsICk7CisKKyAgICBTb3ByYW5vOjpFcnJv
cjo6RXJyb3JDb2RlIGFkZFN0YXRlbWVudCggY29uc3QgU29wcmFubzo6U3RhdGVtZW50JiBzdGF0
ZW1lbnQgKTsKKyAgICBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIHJlbW92ZVN0YXRlbWVudCgg
Y29uc3QgU29wcmFubzo6U3RhdGVtZW50JiBzdGF0ZW1lbnQgKTsKKyAgICBTb3ByYW5vOjpFcnJv
cjo6RXJyb3JDb2RlIHJlbW92ZUFsbFN0YXRlbWVudHMoIGNvbnN0IFNvcHJhbm86OlN0YXRlbWVu
dCYgc3RhdGVtZW50ICk7CisKKyAgICB1c2luZyBTb3ByYW5vOjpGaWx0ZXJNb2RlbDo6YWRkU3Rh
dGVtZW50OworICAgIHVzaW5nIFNvcHJhbm86OkZpbHRlck1vZGVsOjpyZW1vdmVTdGF0ZW1lbnQ7
CisgICAgdXNpbmcgU29wcmFubzo6RmlsdGVyTW9kZWw6OnJlbW92ZUFsbFN0YXRlbWVudHM7CisK
KyAgICAvKioKKyAgICAgKiBBbGwgaW5mZXJyZWQgdHJpcGxlcyBhcmUgc3RvcmVkIGluIHRoZSBv
bmUgY3JhcHB5IGluZmVyZW5jZSBncmFwaC4KKyAgICAgKiBUaHVzLCByZW1vdmluZyBpbmZlcmVu
Y2UgaXMgYXMgc2ltcGxlIGFzIHJlbW92aW5nIHRoaXMgb25lIGdyYXBoLgorICAgICAqLworICAg
IFFVcmwgY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpIGNvbnN0OworCisgICAgYm9vbCBpc1R5cGVW
aXNpYmxlKCBjb25zdCBRVXJsJiB0eXBlVXJpICkgY29uc3Q7CisKK1FfU0lHTkFMUzoKKyAgICAv
KioKKyAgICAgKiBFbWl0dGVkIG9uY2UgYSBjYWxsIHRvIHVwZGF0ZUFsbFJlc291cmNlcygpIGhh
cyBmaW5pc2hlZC4KKyAgICAgKi8KKyAgICB2b2lkIGFsbFJlc291cmNlc1VwZGF0ZWQoKTsKKwor
cHVibGljIFFfU0xPVFM6CisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBpbnRlcm5hbCBtYXAg
b2Ygc3VwZXIgdHlwZXMgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaAorICAgICAqIHR5
cGUgc3RhdGVtZW50cyBuZWVkIHRvIGJlIGFkZGVkIGFuZCByZW1vdmVkLiBJdCBtYWtlcyBzZW5z
ZSB0byBjYWxsIHRoaXMKKyAgICAgKiB3aGVuIHRoZSBvbnRvbG9naWVzIGluIHRoZSBtb2RlbCBj
aGFuZ2UuCisgICAgICovCisgICAgdm9pZCB1cGRhdGVJbmZlcmVuY2VJbmRleCgpOworCisgICAg
LyoqCisgICAgICogVXBkYXRlIGFsbCB0eXBlcyBvZiBhbGwgcmVzb3VyY2VzIGluIHRoZSBtb2Rl
bC4gVGhpcyBtZXRob2Qgd2lsbCBhZGQgc3VwZXJ0eXBlCisgICAgICogc3RhdGVtZW50cyBidXQg
Tk9UIHJlbW92ZSBhbnkgc3VwZXJmbHVvdXMgc3RhdGVtZW50cy4gVG8gYWNoaWV2ZSB0aGUgbGF0
dGVyIGNhbGwKKyAgICAgKiByZW1vdmVDb250ZXh0KGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSkg
YmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QuCisgICAgICovCisgICAgdm9pZCB1cGRhdGVBbGxS
ZXNvdXJjZXMoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGFkZEluZmVyZW5jZVN0YXRlbWVudHMo
IGNvbnN0IFFVcmwmIHJlc291cmNlLCBjb25zdCBRVXJsJiB0eXBlICk7CisgICAgdm9pZCBhZGRJ
bmZlcmVuY2VTdGF0ZW1lbnRzKCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUVNldDxRVXJs
PiYgdHlwZXMgKTsKKyAgICB2b2lkIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIGNvbnN0IFFV
cmwmIHJlc291cmNlLCBjb25zdCBRVXJsJiB0eXBlICk7CisgICAgdm9pZCByZW1vdmVJbmZlcmVu
Y2VTdGF0ZW1lbnRzKCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUUxpc3Q8UVVybD4mIHR5
cGVzICk7CisgICAgdm9pZCByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCBjb25zdCBRVXJsJiBy
ZXNvdXJjZSwgY29uc3QgUUxpc3Q8U29wcmFubzo6Tm9kZT4mIHR5cGVzICk7CisKKyAgICBlbnVt
IFZpc2liaWxpdHkgeworICAgICAgICBWaXNpYmxlLAorICAgICAgICBOb25WaXNpYmxlLAorICAg
ICAgICBVbmRlZmluZWRWaXNpYmlsaXR5CisgICAgfTsKKworICAgIHZvaWQgc2V0VmlzaWJpbGl0
eShjb25zdCBRVXJsJiByZXNvdXJjZSwgVmlzaWJpbGl0eSB2aXNpYmlsaXR5KTsKKworICAgIGNs
YXNzIFVwZGF0ZUFsbFJlc291cmNlc1RocmVhZDsKKyAgICBjbGFzcyBQcml2YXRlOworICAgIFBy
aXZhdGUqIGNvbnN0IGQ7Cit9OworCisjZW5kaWYgLy8gQ1JBUFBZSU5GRVJFTkNFUjJfSApJbmRl
eDogc2VydmljZXMvc3RvcmFnZS9uZXBvbXVrY29yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Vydmlj
ZXMvc3RvcmFnZS9uZXBvbXVrY29yZS5jcHAJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2aWNl
cy9zdG9yYWdlL25lcG9tdWtjb3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsOSBA
QAogICAgIG1fcmVwb3NpdG9yeS0+c2V0RW5hYmxlUXVlcnlQcmVmaXhFeHBhbnNpb24oZmFsc2Up
OwogICAgIG1fcmVwb3NpdG9yeS0+c2V0RW5hYmxlUXVlcnlQcmVmaXhFeHBhbnNpb24odHJ1ZSk7
CiAKKyAgICAvLyB0aGUgZmlyc3QgdGltZSB0aGlzIGlzIGEgdmVyeSBsb25nIHByb2NlZHVyZS4g
VGh1cywgd2UgZG8gaXQgd2hpbGUgTmVwb211ayBpcyBhY3RpdmUgYWx0aG91Z2ggdGhlbiBzb21l
IHF1ZXJpZXMgbWlnaHQgcmV0dXJuIGludmFsaWQgcmVzdWx0cworICAgIG1fcmVwb3NpdG9yeS0+
dXBkYXRlSW5mZXJlbmNlKCk7CisKICAgICBpZiAoICFtX2luaXRpYWxpemVkICkgewogICAgICAg
ICAvLyBhbmQgZmluYWxseSB3ZSBhcmUgZG9uZTogdGhlIHJlcG9zaXRvcnkgaXMgb25saW5lIGFu
ZCB0aGUgb250b2xvZ2llcyBhcmUgbG9hZGVkLgogICAgICAgICBtX2luaXRpYWxpemVkID0gdHJ1
ZTsKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
c2VydmljZXMvc3RvcmFnZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTIxMzk0MCkKKysrIHNl
cnZpY2VzL3N0b3JhZ2UvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE3LDYgKzE3
LDggQEAKICAgb250b2xvZ3ltYW5hZ2VybW9kZWwuY3BwCiAgIGdyYXBocmV0cmlldmVyLmNwcAog
ICBjcmFwcHlpbmZlcmVuY2VyLmNwcAorICBjcmFwcHlpbmZlcmVuY2VyMi5jcHAKKyAgdHlwZXZp
c2liaWxpdHl0cmVlLmNwcAogICApCiAKIHNvcHJhbm9fYWRkX29udG9sb2d5KHN0b3JhZ2VfU1JD
UwpAQCAtNTQsMyArNTYsNSBAQAogICBUQVJHRVRTIG5lcG9tdWtzdG9yYWdlCiAgIERFU1RJTkFU
SU9OICR7UExVR0lOX0lOU1RBTExfRElSfSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworYWRkX3N1YmRpcmVjdG9yeSh0ZXN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56434</attachid>
            <date>2011-01-26 09:05:30 +0000</date>
            <delta_ts>2011-01-27 17:41:32 +0000</delta_ts>
            <desc>Updated patch: yet another improvement.</desc>
            <filename>kdebase-runtime-nepomuk-storage.diff</filename>
            <type>text/plain</type>
            <size>81014</size>
            <attacher name="Sebastian Trueg">trueg</attacher>
            
              <data encoding="base64">SW5kZXg6IG9udG9sb2dpZXMva3V2by50cmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG9udG9sb2dpZXMva3V2
by50cmlnCShyZXZpc2lvbiAxMjEzOTQwKQorKysgb250b2xvZ2llcy9rdXZvLnRyaWcJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDYgKzQ3LDkgQEAKICAgICByZGZzOlJlc291cmNlCiAgICAgICAgIG5h
bzp1c2VyVmlzaWJsZSB0cnVlIC4KIAorICAgIG5hbzp1c2VyVmlzaWJsZQorICAgICAgICBuYW86
dXNlclZpc2libGUgZmFsc2UgLgorCiAgICAgbnVhbzpFdmVudAogICAgICAgICBuYW86dXNlclZp
c2libGUgZmFsc2UgLgogCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvdHlwZXZpc2liaWxp
dHl0cmVldGVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvdGVzdC90eXBldmlz
aWJpbGl0eXRyZWV0ZXN0LmgJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3Qv
dHlwZXZpc2liaWxpdHl0cmVldGVzdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisv
KgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE5lcG9tdWsgS0RFIHByb2plY3QuCisgICBD
b3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorCisgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55CisgICBsYXRlciB2ZXJzaW9uIGFjY2VwdGVk
IGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nlc3NvciBhcHBy
b3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiksIHdoaWNoIHNoYWxsCisgICBhY3Qg
YXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxpY2Vu
c2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251
Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2lmbmRlZiBUWVBFVklTSUJJTElUWVRSRUVURVNUX0gK
KyNkZWZpbmUgVFlQRVZJU0lCSUxJVFlUUkVFVEVTVF9ICisKKyNpbmNsdWRlIDxRT2JqZWN0Pgor
CitjbGFzcyBLVGVtcERpcjsKK2NsYXNzIFR5cGVWaXNpYmlsaXR5VHJlZTsKK25hbWVzcGFjZSBT
b3ByYW5vIHsKK2NsYXNzIE1vZGVsOworfQorCitjbGFzcyBUeXBlVmlzaWJpbGl0eVRyZWVUZXN0
IDogcHVibGljIFFPYmplY3QKK3sKKyAgICBRX09CSkVDVAorCitwcml2YXRlIFFfU0xPVFM6Cisg
ICAgdm9pZCBpbml0VGVzdENhc2UoKTsKKyAgICB2b2lkIGNsZWFudXBUZXN0Q2FzZSgpOworICAg
IHZvaWQgaW5pdCgpOworICAgIHZvaWQgdGVzdFR5cGVWaXNpYmlsaXR5VHJlZSgpOworCitwcml2
YXRlOgorICAgIEtUZW1wRGlyKiBtX3N0b3JhZ2VEaXI7CisgICAgU29wcmFubzo6TW9kZWwqIG1f
bW9kZWw7CisgICAgVHlwZVZpc2liaWxpdHlUcmVlKiBtX3R5cGVUcmVlOworfTsKKworI2VuZGlm
IC8vIFRZUEVWSVNJQklMSVRZVFJFRVRFU1RfSApJbmRleDogc2VydmljZXMvc3RvcmFnZS90ZXN0
L2NyYXBweWluZmVyZW5jZXIydGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFn
ZS90ZXN0L2NyYXBweWluZmVyZW5jZXIydGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNl
cy9zdG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyOTkgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBL
REUgcHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVn
QGtkZS5vcmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVy
IHZlcnNpb24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cwor
ICAgc3VjY2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hp
Y2ggc2hhbGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNp
b24gMyBvZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNl
ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAiY3JhcHB5
aW5mZXJlbmNlcjJ0ZXN0LmgiCisjaW5jbHVkZSAiLi4vY3JhcHB5aW5mZXJlbmNlcjIuaCIKKwor
I2luY2x1ZGUgPFF0VGVzdD4KKyNpbmNsdWRlICJxdGVzdF9rZGUuaCIKKworI2luY2x1ZGUgPFNv
cHJhbm8vU29wcmFubz4KKworI2luY2x1ZGUgPGt0ZW1wZGlyLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBTb3ByYW5vOworCitRX0RFQ0xBUkVfTUVUQVRZUEUoU29wcmFubzo6U3RhdGVtZW50KQorCit2
b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6aW5pdFRlc3RDYXNlKCkKK3sKKyAgICBxUmVnaXN0
ZXJNZXRhVHlwZTxTb3ByYW5vOjpTdGF0ZW1lbnQ+KCk7CisKKyAgICAvLyB3ZSBuZWVkIHRvIHVz
ZSBhIFZpcnR1b3NvIG1vZGVsIGFzIHRtcCBtb2RlbCBzaW5jZSByZWRsYW5kIG1pc3NlcyBpbXBv
cnRhbnQgU1BBUlFMIGZlYXR1cmVzCisgICAgLy8gdGhhdCBhcmUgdXNlZCBieSBsaWJuZXBvbXVr
IGJlbG93CisgICAgY29uc3QgU29wcmFubzo6QmFja2VuZCogYmFja2VuZCA9IFNvcHJhbm86OlBs
dWdpbk1hbmFnZXI6Omluc3RhbmNlKCktPmRpc2NvdmVyQmFja2VuZEJ5TmFtZSggInZpcnR1b3Nv
YmFja2VuZCIgKTsKKyAgICBRVkVSSUZZKCBiYWNrZW5kICk7CisgICAgbV9zdG9yYWdlRGlyID0g
bmV3IEtUZW1wRGlyKCk7CisgICAgbV9iYXNlTW9kZWwgPSBiYWNrZW5kLT5jcmVhdGVNb2RlbCgg
U29wcmFubzo6QmFja2VuZFNldHRpbmdzKCkgPDwgU29wcmFubzo6QmFja2VuZFNldHRpbmcoU29w
cmFubzo6QmFja2VuZE9wdGlvblN0b3JhZ2VEaXIsIG1fc3RvcmFnZURpci0+bmFtZSgpKSApOwor
ICAgIFFWRVJJRlkoIG1fYmFzZU1vZGVsICk7CisKKyAgICBtX21vZGVsID0gbmV3IENyYXBweUlu
ZmVyZW5jZXIyKCBtX2Jhc2VNb2RlbCApOworfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVz
dDo6Y2xlYW51cFRlc3RDYXNlKCkKK3sKKyAgICBkZWxldGUgbV9tb2RlbDsKKyAgICBkZWxldGUg
bV9iYXNlTW9kZWw7CisgICAgZGVsZXRlIG1fc3RvcmFnZURpcjsKK30KKworCit2b2lkIENyYXBw
eUluZmVyZW5jZXIyVGVzdDo6aW5pdCgpCit7CisgICAgbV9iYXNlTW9kZWwtPnJlbW92ZUFsbFN0
YXRlbWVudHMoKTsKKworICAgIC8vCisgICAgLy8gd2UgY3JlYXRlIG9uZSBmYWtlIG9udG9sb2d5
CisgICAgLy8KKyAgICAvLyBBCisgICAgLy8gfC0gQgorICAgIC8vICAgIHwtIEMgLSBpbnZpc2li
bGUKKyAgICAvLyAgICAgICB8LSBECisgICAgLy8gICAgICAgfC0gRQorICAgIC8vCisgICAgLy8g
RgorICAgIC8vIHwtIEUKKyAgICAvLworICAgIC8vIEwxCisgICAgLy8gfC0gTDIKKyAgICAvLyAg
ICB8LSBMMQorICAgIC8vCisgICAgUVVybCBncmFwaCgiZ3JhcGg6L29udG8iKTsKKyAgICBtX2Jh
c2VNb2RlbC0+YWRkU3RhdGVtZW50KCBncmFwaCwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0
eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5STDo6T250b2xvZ3koKSwgZ3JhcGggKTsKKyAg
ICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJuZXBvbXVrOi9HIiksIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOUkw6Okluc3Rh
bmNlQmFzZSgpLCBncmFwaCApOworCisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVy
bCgib250bzovQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9CIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1f
YmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0MiKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdy
YXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRCIpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Uzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJs
KCJvbnRvOi9FIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRT
dGF0ZW1lbnQoIFFVcmwoIm9udG86L0YiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBl
KCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisKKyAgICBt
X2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9FIiksIFNvcHJhbm86OlZvY2Fi
dWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQyIpLCBncmFwaCApOworICAg
IG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0IiKSwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9BIiksIGdyYXBoICk7Cisg
ICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovQyIpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0IiKSwgZ3JhcGggKTsK
KyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9EIiksIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQyIpLCBncmFwaCAp
OworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0UiKSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9GIiksIGdyYXBo
ICk7CisKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0MiKSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUoZmFsc2UpLCBn
cmFwaCApOworCisgICAgLy8gdGhlIGxvb3B5IGNsYXNzZXMKKyAgICBtX2Jhc2VNb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9MMSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5
cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBt
X2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9MMSIpLCBTb3ByYW5vOjpWb2Nh
YnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0wyIiksIGdyYXBoICk7Cisg
ICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovTDIiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNz
KCksIGdyYXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzov
TDIiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRv
Oi9MMSIpLCBncmFwaCApOworCisgICAgbV9tb2RlbC0+dXBkYXRlSW5mZXJlbmNlSW5kZXgoKTsK
K30KKworLy8gbWFrZSBzdXJlIG9ubHkgdGhlIG9uZSBzdGF0ZW1lbnQgaXMgYWRkZWQKK3ZvaWQg
Q3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0QWRkQW55U3RhdGVtZW50KCkKK3sKKyAgICBjb25z
dCBpbnQgY250ID0gbV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKTsKKyAgICBTdGF0ZW1lbnQgcygg
UVVybCgibmVwb211azovQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86Omhhc1RhZygpLCBR
VXJsKCJuZXBvbXVrOi9UIiksIFFVcmwoIm5lcG9tdWs6L0ciKSApOworICAgIFFWRVJJRlkoIW1f
bW9kZWwtPmFkZFN0YXRlbWVudChzKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50
Q291bnQoKSwgY250KzEpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNTdGF0ZW1lbnQo
cykpOworfQorCisvLyBtYWtlIHN1cmUgYWxsIHN1cGVyY2xhc3NlcyBhcmUgYWRkZWQgYXMgdHlw
ZSwgdG9vCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6dGVzdEFkZFR5cGVTdGF0ZW1lbnQo
KQoreworICAgIGludCBjbnQgPSBtX21vZGVsLT5zdGF0ZW1lbnRDb3VudCgpOworICAgIFFVcmwg
cmVzQSgibmVwb211azovQSIpOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3By
YW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpLCBRVXJsKCJuZXBv
bXVrOi9HIikpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCsz
KTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2Fi
dWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgp
KSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2Nh
YnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworCisgICAgY250
ID0gbV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKTsKKyAgICBRVXJsIHJlc0IoIm5lcG9tdWs6L0Ii
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQiwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSwgUVVybCgibmVwb211azovRyIpKTsKKyAgICBR
Q09NUEFSRShtX21vZGVsLT5zdGF0ZW1lbnRDb3VudCgpLCBjbnQrNCk7CisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgUVVybCgib250bzovQiIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0
YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpKSk7
CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVs
YXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkp
OworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgVm9jYWJ1
bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUoMSkpKTsKKworICAgIGNudCA9
IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNDKCJuZXBvbXVrOi9DIik7
CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0MsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
Rjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNP
TVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KzQpOworICAgIFFWRVJJRlkobV9t
b2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IFFVcmwoIm9udG86L0MiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0
ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSkpOwor
ICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFy
eTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+
Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQywgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKworICAgIGNudCA9IG1fbW9kZWwt
PnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNEKCJuZXBvbXVrOi9EIik7CisgICAgbV9t
b2RlbC0+YWRkU3RhdGVtZW50KHJlc0QsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgp
LCBRVXJsKCJvbnRvOi9FIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNPTVBBUkUobV9t
b2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KzcpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29u
dGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9u
dG86L0YiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVz
RCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0UiKSkpOworICAgIFFWRVJJ
RlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0
eXBlKCksIFFVcmwoIm9udG86L0MiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNB
bnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0Ii
KSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9j
YWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkpOworICAgIFFWRVJJRlkobV9t
b2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAgICBRVkVSSUZZKG1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0QsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZp
c2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7Cit9CisKKy8vIG1ha2Ugc3VyZSB0aGUgbmV3IHJl
bGF0aW9uIGlzIHRha2VuIGludG8gYWNjb3VudCB3aXRoIHRoZSBuZXh0IGFkZFN0YXRlbWVudAor
dm9pZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRlc3RBZGRTdWJDbGFzc09mU3RhdGVtZW50KCkK
K3sKKyAgICBRRVhQRUNUX0ZBSUwoIiIsICJOb3QgaW1wbGVtZW50ZWQgeWV0IiwgQWJvcnQpOwor
fQorCisvLyBtYWtlIHN1cmUgb25seSB0aGUgb25lIHN0YXRlbWVudCBpcyByZW1vdmVkCit2b2lk
IENyYXBweUluZmVyZW5jZXIyVGVzdDo6dGVzdFJlbW92ZUFueVN0YXRlbWVudCgpCit7Cit9CisK
Ky8vIG1ha2Ugc3VyZSB0aGUgYXBwcm9wcmlhdGUgdHlwZXMgYXJlIHJlbW92ZWQsIHRvbworLy8g
Y2hlY2sgMiBjYXNlczogMS4gb25seSB0aGUgb25lIHR5cGUsIDIuIHR3byB0eXBlcyB3aXRoIGlu
dGVyc2VjdGluZyBzdXBlcmNsYXNzZXMKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0
UmVtb3ZlVHlwZVN0YXRlbWVudCgpCit7CisgICAgaW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVu
dENvdW50KCk7CisgICAgUVVybCByZXNBKCJuZXBvbXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRk
U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJv
bnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+cmVtb3ZlU3RhdGVt
ZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9B
IiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50
Q291bnQoKSwgY250KTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpKSk7CisgICAg
UVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAg
ICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5
OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworCisgICAgLy8gYWRkIHR3
byB0eXBlcyB3aXRoIGludGVyc2VjdGluZyBzdXBlciB0eXBlcworICAgIG1fbW9kZWwtPmFkZFN0
YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250
bzovQiIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChy
ZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBR
VXJsKCJuZXBvbXVrOi9HIikpOworICAgIC8vIHJlbW92ZSBvbmUgb2YgdGhlbQorICAgIG1fbW9k
ZWwtPnJlbW92ZVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgUVVybCgib250bzovQiIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIC8vIG1ha2Ugc3Vy
ZSBhbGwgaXMgd2VsbAorICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNu
dCs3KTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZv
Y2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKG1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgp
LCBRVXJsKCJvbnRvOi9FIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3Rh
dGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIikpKTsK
KyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9CIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwt
PmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJs
KCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50
KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZT
OjpSZXNvdXJjZSgpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNBLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkp
OworfQorCisvLyBtYWtlIHN1cmUgdGhlIHJlbW92ZWQgc3ViY2xhc3MgcmVsYXRpb24gaXMgdGFr
ZW4gaW50byBhY2NvdW50IHdpdGggdGhlIG5leHQgYWRkU3RhdGVtZW50CisvLyBtYWtlIHN1cmUg
dHlwZSBzdGF0ZW1lbnRzIHRoYXQgYXJlIG5vIGxvbmdlciB2YWxpZCBhcmUgcmVtb3ZlZAordm9p
ZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRlc3RSZW1vdmVTdWJDbGFzc09mU3RhdGVtZW50KCkK
K3sKKyAgICBRRVhQRUNUX0ZBSUwoIiIsICJOb3QgaW1wbGVtZW50ZWQgeWV0IiwgQWJvcnQpOwor
fQorCisvLyBtYWtlIHN1cmUgdGhlIGNvcnJlc3BvbmluZyBzdGF0ZW1lbnRzIGFyZSByZW1vdmVk
IGFuZCBub3RoaW5nIGVsc2UKKy8vIHRlc3QgYWxsIGNvbWJpbmF0aW9ucyBvZiBpbnZhbGlkIGFu
ZCB2YWxpZCBub2RlcyBpZiBwb3NzaWJsZQordm9pZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRl
c3RSZW1vdmVBbGxTdGF0ZW1lbnRzKCkKK3sKKyAgICAvLyAxLiByZW1vdmUgdGhlIHdob2xlIHJl
c291cmNlCisgICAgaW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVy
bCByZXNBKCJuZXBvbXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5l
cG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OmxhYmVsKCksIExpdGVyYWxWYWx1ZShRTGF0aW4xU3RyaW5nKCJBIikp
LCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9kZWwtPnJlbW92ZUFsbFN0YXRlbWVudHMo
cmVzQSwgTm9kZSgpLCBOb2RlKCkpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENv
dW50KCksIGNudCk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQo
cmVzQSwgTm9kZSgpLCBOb2RlKCksIE5vZGUoKSkpOworCisgICAgLy8gMi4gcmVtb3ZlIGEgdHlw
ZSBmcm9tIHNldmVyYWwgcmVzb3VyY2VzCisgICAgUVVybCByZXNCKCJuZXBvbXVrOi9CIik7Cisg
ICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6
dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2Rl
bC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBR
VXJsKCJvbnRvOi9GIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3Rh
dGVtZW50KHJlc0IsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRv
Oi9CIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJl
c0IsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIiksIFFV
cmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+cmVtb3ZlQWxsU3RhdGVtZW50cyhOb2Rl
KCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpOwor
ICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFy
eTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsK
KyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVs
LT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVy
bCgib250bzovRiIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Uzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1l
bnQocmVzQiwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkpOworICAg
IFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgVm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNv
bnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJv
bnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJl
c0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7Cisg
ICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5
OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworICAgIFFDT01QQVJFKG1f
bW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCs3KTsKKworICAgIC8vIDMuIHJlbW92ZSBhbGwg
dHlwZXMgZnJvbSBvbmUgcmVzb3VyY2UKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQSwg
U29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0UiKSwgUVVybCgi
bmVwb211azovRyIpKTsKKyAgICBtX21vZGVsLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHJlc0EsIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBOb2RlKCksIFFVcmwoIm5lcG9tdWs6L0ci
KSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIE5vZGUoKSkpOworICAgIFFWRVJJRlkoIW1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZp
c2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICAvLyA0LiByZW1vdmUgYSBncmFwaAor
ICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fbW9k
ZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwg
UVVybCgib250bzovQSIpLCBRVXJsKCJuZXBvbXVrOi9HMiIpKTsKKyAgICBtX21vZGVsLT5yZW1v
dmVDb250ZXh0KFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29u
dGFpbnNBbnlTdGF0ZW1lbnQocmVzQiwgTm9kZSgpLCBOb2RlKCkpKTsKKyAgICBRVkVSSUZZKG1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
Rjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250
YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwg
UVVybCgib250bzovRSIpKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0
ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86
L0QiKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0Es
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9DIikpKTsKKyAg
ICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQiIpKSk7CisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkpOworICAg
IFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQ29udGV4dChRVXJsKCJuZXBvbXVrOi9HIikpKTsK
K30KKworLy8gbWFrZSBzdXJlIHdlIGRvIG5vdCBydW4gaW50byBhbiBlbmRsZXNzIGxvb3AKK3Zv
aWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0Q3ljbGljU3ViQ2xhc3NSZWxhdGlvbigpCit7
CisgICAgaW50IGNudCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNB
KCJuZXBvbXVrOi9BIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9MMSIpLCBRVXJsKCJuZXBvbXVr
Oi9HIikpOworICAgIFFDT01QQVJFKG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCksIGNudCs0KTsg
Ly8gKzQgc2luY2UgTDEgaXMgdGhlcmUgdHdpY2U6IHRoZSBvbmUgd2UgYWRkZWQgYW5kIHRoZSBz
dXBlcmNsYXNzIG9mIEwyCisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovTDEiKSkpOworICAg
IFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0wyIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNv
bnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKSk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJl
bmNlcjJUZXN0Ojp0ZXN0VXBkYXRlQWxsUmVzb3VyY2VzKCkKK3sKKyAgICAvLyB3ZSBhZGQgYSBi
dW5jaCBvZiBzdGF0ZW1lbnRzIHRvIHRoZSBiYXNlIG1vZGVsIGluc3RlYWQgb2YgZ29pbmcgdGhy
b3VnaCB0aGUgY3JhcHB5IGluZmVyZW5jZSBtb2RlbAorICAgIFFVcmwgcmVzQSgibmVwb211azov
QSIpOworICAgIFFVcmwgcmVzQigibmVwb211azovQiIpOworICAgIFFVcmwgcmVzQygibmVwb211
azovQyIpOworICAgIFFVcmwgcmVzRCgibmVwb211azovRCIpOworCisgICAgbV9iYXNlTW9kZWwt
PmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVy
bCgib250bzovQSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIG1fYmFzZU1vZGVsLT5hZGRT
dGF0ZW1lbnQocmVzQiwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9u
dG86L0IiKSwgUVVybCgibmVwb211azovRyIpKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVt
ZW50KHJlc0MsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9D
IiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudChy
ZXNELCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBR
VXJsKCJuZXBvbXVrOi9HIikpOworCisgICAgbV9tb2RlbC0+dXBkYXRlQWxsUmVzb3VyY2VzKCk7
CisKKyAgICAvLyB3YWl0IGZvciB0aGUgYWJvdmUgY2FsbCB0byBmaW5pc2gKKyAgICBRRXZlbnRM
b29wIGxvb3A7CisgICAgY29ubmVjdChtX21vZGVsLCBTSUdOQUwoYWxsUmVzb3VyY2VzVXBkYXRl
ZCgpKSwgJmxvb3AsIFNMT1QocXVpdCgpKSk7CisgICAgbG9vcC5leGVjKCk7CisKKyAgICBRVkVS
SUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6Ok5BTzo6
dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICBRVkVSSUZZKG1fbW9kZWwt
PmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUo
KSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0Fu
eVN0YXRlbWVudChyZXNDLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxW
YWx1ZSgxKSkpOworCisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChy
ZXNELCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOwor
fQorCitRVEVTVF9LREVNQUlOX0NPUkUoQ3JhcHB5SW5mZXJlbmNlcjJUZXN0KQorCisjaW5jbHVk
ZSAiY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0Lm1vYyIKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvdGVz
dC9jcmFwcHlpbmZlcmVuY2VyMnRlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdl
L3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmgJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9z
dG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTcgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUgcHJv
amVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5v
cmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZlcnNp
b24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAgc3Vj
Y2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2ggc2hh
bGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24gMyBv
ZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0
cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaWZuZGVmIENSQVBQWUlORkVSRU5D
RVIyVEVTVF9ICisjZGVmaW5lIENSQVBQWUlORkVSRU5DRVIyVEVTVF9ICisKKyNpbmNsdWRlIDxR
T2JqZWN0PgorCitjbGFzcyBLVGVtcERpcjsKK2NsYXNzIENyYXBweUluZmVyZW5jZXIyOworbmFt
ZXNwYWNlIFNvcHJhbm8geworY2xhc3MgTW9kZWw7Cit9CisKK2NsYXNzIENyYXBweUluZmVyZW5j
ZXIyVGVzdCA6IHB1YmxpYyBRT2JqZWN0Cit7CisgICAgUV9PQkpFQ1QKKworcHJpdmF0ZSBRX1NM
T1RTOgorICAgIHZvaWQgaW5pdFRlc3RDYXNlKCk7CisgICAgdm9pZCBjbGVhbnVwVGVzdENhc2Uo
KTsKKyAgICB2b2lkIGluaXQoKTsKKyAgICB2b2lkIHRlc3RBZGRBbnlTdGF0ZW1lbnQoKTsKKyAg
ICB2b2lkIHRlc3RBZGRUeXBlU3RhdGVtZW50KCk7CisgICAgdm9pZCB0ZXN0QWRkU3ViQ2xhc3NP
ZlN0YXRlbWVudCgpOworICAgIHZvaWQgdGVzdFJlbW92ZUFueVN0YXRlbWVudCgpOworICAgIHZv
aWQgdGVzdFJlbW92ZVR5cGVTdGF0ZW1lbnQoKTsKKyAgICB2b2lkIHRlc3RSZW1vdmVTdWJDbGFz
c09mU3RhdGVtZW50KCk7CisgICAgdm9pZCB0ZXN0UmVtb3ZlQWxsU3RhdGVtZW50cygpOworICAg
IHZvaWQgdGVzdEN5Y2xpY1N1YkNsYXNzUmVsYXRpb24oKTsKKyAgICB2b2lkIHRlc3RVcGRhdGVB
bGxSZXNvdXJjZXMoKTsKKworcHJpdmF0ZToKKyAgICBLVGVtcERpciogbV9zdG9yYWdlRGlyOwor
ICAgIFNvcHJhbm86Ok1vZGVsKiBtX2Jhc2VNb2RlbDsKKyAgICBDcmFwcHlJbmZlcmVuY2VyMiog
bV9tb2RlbDsKK307CisKKyNlbmRpZgpJbmRleDogc2VydmljZXMvc3RvcmFnZS90ZXN0L3R5cGV2
aXNpYmlsaXR5dHJlZXRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvdGVz
dC90eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmNwcAkocmV2aXNpb24gMCkKKysrIHNlcnZpY2VzL3N0
b3JhZ2UvdGVzdC90eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNDEgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUg
cHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAxMCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtk
ZS5vcmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVyc2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZl
cnNpb24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAg
c3VjY2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2gg
c2hhbGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmluZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24g
MyBvZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8
aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqLworCisjaW5jbHVkZSAidHlwZXZpc2li
aWxpdHl0cmVldGVzdC5oIgorI2luY2x1ZGUgIi4uL3R5cGV2aXNpYmlsaXR5dHJlZS5oIgorCisj
aW5jbHVkZSA8UXRUZXN0PgorI2luY2x1ZGUgInF0ZXN0X2tkZS5oIgorCisjaW5jbHVkZSA8U29w
cmFuby9Tb3ByYW5vPgorCisjaW5jbHVkZSA8a3RlbXBkaXIuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFNvcHJhbm87CisKK3ZvaWQgVHlwZVZpc2liaWxpdHlUcmVlVGVzdDo6aW5pdFRlc3RDYXNlKCkK
K3sKKyAgICAvLyB3ZSBuZWVkIHRvIHVzZSBhIFZpcnR1b3NvIG1vZGVsIGFzIHRtcCBtb2RlbCBz
aW5jZSByZWRsYW5kIG1pc3NlcyBpbXBvcnRhbnQgU1BBUlFMIGZlYXR1cmVzCisgICAgLy8gdGhh
dCBhcmUgdXNlZCBieSBsaWJuZXBvbXVrIGJlbG93CisgICAgY29uc3QgU29wcmFubzo6QmFja2Vu
ZCogYmFja2VuZCA9IFNvcHJhbm86OlBsdWdpbk1hbmFnZXI6Omluc3RhbmNlKCktPmRpc2NvdmVy
QmFja2VuZEJ5TmFtZSggInZpcnR1b3NvYmFja2VuZCIgKTsKKyAgICBRVkVSSUZZKCBiYWNrZW5k
ICk7CisgICAgbV9zdG9yYWdlRGlyID0gbmV3IEtUZW1wRGlyKCk7CisgICAgbV9tb2RlbCA9IGJh
Y2tlbmQtPmNyZWF0ZU1vZGVsKCBTb3ByYW5vOjpCYWNrZW5kU2V0dGluZ3MoKSA8PCBTb3ByYW5v
OjpCYWNrZW5kU2V0dGluZyhTb3ByYW5vOjpCYWNrZW5kT3B0aW9uU3RvcmFnZURpciwgbV9zdG9y
YWdlRGlyLT5uYW1lKCkpICk7CisgICAgUVZFUklGWSggbV9tb2RlbCApOworCisgICAgbV90eXBl
VHJlZSA9IG5ldyBUeXBlVmlzaWJpbGl0eVRyZWUoIG1fbW9kZWwgKTsKK30KKwordm9pZCBUeXBl
VmlzaWJpbGl0eVRyZWVUZXN0OjpjbGVhbnVwVGVzdENhc2UoKQoreworICAgIGRlbGV0ZSBtX21v
ZGVsOworICAgIGRlbGV0ZSBtX3R5cGVUcmVlOworICAgIGRlbGV0ZSBtX3N0b3JhZ2VEaXI7Cit9
CisKKwordm9pZCBUeXBlVmlzaWJpbGl0eVRyZWVUZXN0Ojppbml0KCkKK3sKKyAgICBtX21vZGVs
LT5yZW1vdmVBbGxTdGF0ZW1lbnRzKCk7CisKKyAgICAvLyB3ZSBjcmVhdGUgb25lIGZha2Ugb250
b2xvZ3kKKyAgICAvLworICAgIC8vIHNpdHVhdGlvbnMgd2UgbmVlZCB0byB0ZXN0OgorICAgIC8v
ICogY2xhc3MgdGhhdCBpcyBtYXJrZWQgdmlzaWJsZSBzaG91bGQgc3RheSB2aXNpYmxlCisgICAg
Ly8gKiBjbGFzcyB0aGF0IGlzIG1hcmtlZCBpbnZpc2libGUgc2hvdWxkIHN0YXkgaW52aXNpYmxl
CisgICAgLy8gKiBub24tbWFya2VkIHN1YmNsYXNzIG9mIHZpc2libGUgc2hvdWxkIGJlIHZpc2li
bGUsIHRvbworICAgIC8vICogbm9uLW1hcmtlZCBzdWJjbGFzcyBvZiBpbnZpc2libGUgc2hvdWxk
IGJlIGludmlzaWJsZSwgdG9vCisgICAgLy8gKiBtYXJrZWQgc3ViY2xhc3Mgc2hvdWxkIGtlZXAg
aXRzIG93biB2aXNpYmxpdHkgYW5kIG5vdCBpbmhlcml0IGZyb20gcGFyZW50CisgICAgLy8gKiB3
aG9sZSBicmFuY2ggc2hvdWxkIGluaGVyaXQgZnJvbSBwYXJlbnQKKyAgICAvLyAqIGlmIG9uZSBw
YXJlbnQgaXMgdmlzaWJsZSB0aGUgY2xhc3MgaXMgdmlzaWJsZSwgdG9vLCBldmVuIGlmIE4gb3Ro
ZXIgcGFyZW50cyBhcmUgbm90CisgICAgLy8gKiBpZiBhbGwgcGFyZW50cyBhcmUgaW52aXNpYmxl
LCB0aGUgY2xhc3MgaXMgaW52aXNpYmxlLCBldmVuIGlmIGhpZ2hlciB1cCBpbiB0aGUgYnJhbmNo
IGEgY2xhc3MgaXMgdmlzaWJsZQorICAgIC8vICogcHJvcGVybHkgaGFuZGxlIGxvb3BzIChhcyBp
bjogZG8gbm90IHJ1biBpbnRvIGFuIGVuZGxlc3MgbG9vcCkKKyAgICAvLworICAgIC8vIEEKKyAg
ICAvLyB8LSBCIC0gaW52aXNpYmxlCisgICAgLy8gICAgfC0gQworICAgIC8vICAgICAgIHwtIEQg
LSB2aXNpYmxlCisgICAgLy8gICAgICAgICAgfC0gRQorICAgIC8vICAgICAgICAgICAgIHwtIEYK
KyAgICAvLyAgICB8LSBHCisgICAgLy8KKyAgICAvLyBBQSAtIGludmlzaWJsZQorICAgIC8vIHwg
LSBGCisgICAgLy8gfCAtIEcKKyAgICAvLworICAgIC8vIFgKKyAgICAvLyB8LSBZIC0gaW52aXNp
YmxlCisgICAgLy8gICAgfC0gWgorICAgIC8vICAgICAgIHwtIFgKKworICAgIFFVcmwgZ3JhcGgo
ImdyYXBoOi9vbnRvIik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBncmFwaCwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5STDo6T250
b2xvZ3koKSwgZ3JhcGggKTsKKworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250
bzovQSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQo
IFFVcmwoIm9udG86L0IiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRk
U3RhdGVtZW50KCBRVXJsKCJvbnRvOi9DIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1f
bW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRCIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5
OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGgg
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0UiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNz
KCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9GIiks
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgi
b250bzovRyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1l
bnQoIFFVcmwoIm9udG86L0FBIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fbW9kZWwt
PmFkZFN0YXRlbWVudCggUVVybCgib250bzovWCIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAg
ICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L1kiKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdy
YXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9aIiksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpD
bGFzcygpLCBncmFwaCApOworCisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRv
Oi9CIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250
bzovQSIpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzov
QyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86
L0IiKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0Qi
KSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9D
IiksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9FIiks
IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovRCIp
LCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRiIpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0UiKSwg
Z3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0ciKSwgU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9CIiksIGdy
YXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9GIiksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQUEiKSwgZ3Jh
cGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0ciKSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9BQSIpLCBncmFw
aCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovWSIpLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L1giKSwgZ3JhcGgg
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L1oiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9ZIiksIGdyYXBoICk7
CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9YIiksIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovWiIpLCBncmFwaCApOwor
CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9CIiksIFNvcHJhbm86OlZv
Y2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKGZhbHNlKSwgZ3JhcGgg
KTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0QiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUodHJ1ZSksIGdyYXBo
ICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9BQSIpLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZShmYWxzZSksIGdy
YXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9ZIiksIFNvcHJh
bm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKGZhbHNlKSwg
Z3JhcGggKTsKKworICAgIG1fdHlwZVRyZWUtPnJlYnVpbGRUcmVlKCk7Cit9CisKK3ZvaWQgVHlw
ZVZpc2liaWxpdHlUcmVlVGVzdDo6dGVzdFR5cGVWaXNpYmlsaXR5VHJlZSgpCit7CisgICAgUVZF
UklGWShtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgib250bzovQSIpKSk7CisgICAgUVZFUklG
WSghbV90eXBlVHJlZS0+aXNWaXNpYmxlKFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlko
IW1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9DIikpKTsKKyAgICBRVkVSSUZZKG1f
dHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9EIikpKTsKKyAgICBRVkVSSUZZKG1fdHlw
ZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9FIikpKTsKKyAgICBRVkVSSUZZKG1fdHlwZVRy
ZWUtPmlzVmlzaWJsZShRVXJsKCJvbnRvOi9GIikpKTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVl
LT5pc1Zpc2libGUoUVVybCgib250bzovRyIpKSk7CisgICAgUVZFUklGWSghbV90eXBlVHJlZS0+
aXNWaXNpYmxlKFFVcmwoIm9udG86L0FBIikpKTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5p
c1Zpc2libGUoUVVybCgib250bzovWCIpKSk7IC8vIGJlY2F1c2Ugb25seSB0b3AtbGV2ZWwgY2xh
c3NlcyBpbmhlcml0IGZyb20gcmRmczpSZXNvdXJjZQorICAgIFFWRVJJRlkoIW1fdHlwZVRyZWUt
PmlzVmlzaWJsZShRVXJsKCJvbnRvOi9ZIikpKTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5p
c1Zpc2libGUoUVVybCgib250bzovWiIpKSk7Cit9CisKK1FURVNUX0tERU1BSU5fQ09SRShUeXBl
VmlzaWJpbGl0eVRyZWVUZXN0KQorCisjaW5jbHVkZSAidHlwZXZpc2liaWxpdHl0cmVldGVzdC5t
b2MiCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gc2VydmljZXMvc3RvcmFnZS90ZXN0L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAwKQor
Kysgc2VydmljZXMvc3RvcmFnZS90ZXN0L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE4IEBACitzZXQoIEVYRUNVVEFCTEVfT1VUUFVUX1BBVEggJHtDTUFLRV9DVVJSRU5U
X0JJTkFSWV9ESVJ9ICkKKwora2RlNF9hZGRfdW5pdF90ZXN0KGNyYXBweWluZmVyZW5jZXIydGVz
dAorICBjcmFwcHlpbmZlcmVuY2VyMnRlc3QuY3BwCisgIC4uL2NyYXBweWluZmVyZW5jZXIyLmNw
cAorICAuLi90eXBldmlzaWJpbGl0eXRyZWUuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGNy
YXBweWluZmVyZW5jZXIydGVzdAorICAke1FUX1FUVEVTVF9MSUJSQVJZfQorICAke1NPUFJBTk9f
TElCUkFSSUVTfQorICAke0tERTRfS0RFQ09SRV9MSUJTfSkKKwora2RlNF9hZGRfdW5pdF90ZXN0
KHR5cGV2aXNpYmlsaXR5dHJlZXRlc3QKKyAgdHlwZXZpc2liaWxpdHl0cmVldGVzdC5jcHAKKyAg
Li4vdHlwZXZpc2liaWxpdHl0cmVlLmNwcCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0eXBldmlz
aWJpbGl0eXRyZWV0ZXN0CisgICR7UVRfUVRURVNUX0xJQlJBUll9CisgICR7U09QUkFOT19MSUJS
QVJJRVN9CisgICR7S0RFNF9LREVDT1JFX0xJQlN9KQpJbmRleDogc2VydmljZXMvc3RvcmFnZS9v
bnRvbG9neWxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS9vbnRvbG9n
eWxvYWRlci5jcHAJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL29udG9s
b2d5bG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTQgKzI0LDEwIEBACiAKICNpbmNs
dWRlIDxTb3ByYW5vL0dsb2JhbD4KICNpbmNsdWRlIDxTb3ByYW5vL05vZGU+Ci0jaW5jbHVkZSA8
U29wcmFuby9MaXRlcmFsVmFsdWU+CiAjaW5jbHVkZSA8U29wcmFuby9Nb2RlbD4KICNpbmNsdWRl
IDxTb3ByYW5vL1BsdWdpbk1hbmFnZXI+CiAjaW5jbHVkZSA8U29wcmFuby9TdGF0ZW1lbnRJdGVy
YXRvcj4KLSNpbmNsdWRlIDxTb3ByYW5vL1F1ZXJ5UmVzdWx0SXRlcmF0b3I+CiAjaW5jbHVkZSA8
U29wcmFuby9QYXJzZXI+Ci0jaW5jbHVkZSA8U29wcmFuby9Wb2NhYnVsYXJ5L05BTz4KLSNpbmNs
dWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvUkRGUz4KIAogI2luY2x1ZGUgPEtDb25maWc+CiAjaW5j
bHVkZSA8S0NvbmZpZ0dyb3VwPgpAQCAtMTg4LDcgKzE4NCw2IEBACiAgICAgZWxzZSB7CiAgICAg
ICAgIGQtPmZvcmNlT250b2xvZ3lVcGRhdGUgPSBmYWxzZTsKICAgICAgICAgZC0+dXBkYXRlVGlt
ZXIuc3RvcCgpOwotICAgICAgICB1cGRhdGVVc2VyVmlzaWJpbGl0eSgpOwogICAgICAgICBlbWl0
IG9udG9sb2d5TG9hZGluZ0ZpbmlzaGVkKHRoaXMpOwogICAgIH0KIH0KQEAgLTIyNSwxMTUgKzIy
MCw0IEBACiAgICAgfQogfQogCi0KLW5hbWVzcGFjZSB7Ci0gICAgc3RydWN0IFVzZXJWaXNpYmxl
Tm9kZSB7Ci0gICAgICAgIFVzZXJWaXNpYmxlTm9kZSggY29uc3QgUVVybCYgciApCi0gICAgICAg
ICAgICA6IHVyaSggciApLAotICAgICAgICAgICAgICB1c2VyVmlzaWJsZSggMCApIHsKLSAgICAg
ICAgfQotCi0gICAgICAgIFFVcmwgdXJpOwotICAgICAgICBpbnQgdXNlclZpc2libGU7Ci0gICAg
ICAgIFFIYXNoPFFVcmwsIFVzZXJWaXNpYmxlTm9kZSo+IHBhcmVudHM7Ci0KLSAgICAgICAgLyoq
Ci0gICAgICAgICAqIFNldCB0aGUgdmFsdWUgb2YgbmFvOnVzZXJWaXNpYmxlIGFuZCBhZGQgdGhl
IGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICogc3RhdGVtZW50IHRvIHRoZSBsaXN0IG9mIHN0YXRl
bWVudHMgaW4gY2FzZSB0aGUgdmFsdWUgd2FzCi0gICAgICAgICAqIG5vdCBkZWZpbmVkIHlldC4K
LSAgICAgICAgICovCi0gICAgICAgIGludCB1cGRhdGVVc2VyVmlzaWJpbGl0eSggUUxpc3Q8U29w
cmFubzo6U3RhdGVtZW50PiYgc3RhdGVtZW50cyApIHsKLSAgICAgICAgICAgIGlmICggdXNlclZp
c2libGUgIT0gMCApIHsKLSAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiVXNlciB2aXNpYmls
aXR5IGFscmVhZHkgc2V0IiA8PCB1cmkudG9TdHJpbmcoKSA8PCAoIHVzZXJWaXNpYmxlID09IDEg
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdXNlclZpc2libGU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoICFwYXJlbnRzLmlzRW1wdHko
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yICggUUhhc2g8UVVybCwgVXNlclZpc2libGVO
b2RlKj46Oml0ZXJhdG9yIGl0ID0gcGFyZW50cy5iZWdpbigpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICBpdCAhPSBwYXJlbnRzLmVuZCgpOyArK2l0ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAga0RlYnVnKCkgPDwgdXJpLnRvU3RyaW5nKCkgPDwgIkNoZWNraW5nIHBhcmVudCBjbGFz
cyIgPDwgaXQudmFsdWUoKS0+dXJpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIGl0LnZhbHVlKCktPnVwZGF0ZVVzZXJWaXNpYmlsaXR5KCBzdGF0ZW1lbnRzICkgPT0g
LTEgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlclZpc2libGUgPSAtMTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoIHVzZXJWaXNpYmxlID09IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGRl
ZmF1bHQgdG8gdmlzaWJsZQotICAgICAgICAgICAgICAgICAgICB1c2VyVmlzaWJsZSA9IDE7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHN0YXRlbWVudHMgPDwgU29wcmFubzo6
U3RhdGVtZW50KCB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6TGl0
ZXJhbFZhbHVlKCB1c2VyVmlzaWJsZSA9PSAxICksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5lcG9tdWs6OlZvY2FidWxhcnk6OktVVk86Om5ybE9u
dG9sb2d5R3JhcGgoKSApOwotICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJTZXR0aW5nIG5h
bzp1c2VyVmlzaWJsZSBvZiIgPDwgdXJpLnRvU3RyaW5nKCkgPDwgKCB1c2VyVmlzaWJsZSA9PSAx
ICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJWaXNpYmxlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfTsKLX0KLQotdm9pZCBOZXBvbXVrOjpPbnRvbG9neUxvYWRlcjo6dXBk
YXRlVXNlclZpc2liaWxpdHkoKQotewotICAgIC8vCi0gICAgLy8gYnVpbGQgYSB0cmVlIG9mIGFs
bCBjbGFzc2VzIGFuZCBwcm9wZXJ0aWVzCi0gICAgLy8KLSAgICBRU3RyaW5nIHF1ZXJ5Ci0gICAg
ICAgID0gUVN0cmluZzo6ZnJvbUxhdGluMSggInNlbGVjdCBkaXN0aW5jdCA/ciA/cCA/diB3aGVy
ZSB7ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyA/ciBhIHJkZnM6Q2xhc3Mg
LiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpz
dWJDbGFzc09mID9wIC4gP3AgYSByZGZzOkNsYXNzIC4gfSAuIH0gIgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJVTklPTiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InsgP3IgYSByZGY6UHJvcGVydHkgLiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ik9QVElPTkFMIHsgP3IgcmRmczpzdWJQcm9wZXJ0eU9mID9wIC4gP3AgYSByZGY6UHJvcGVydHkg
LiB9IC4gfSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3Ig
JTEgP3YgLiB9IC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGSUxURVIoP3Ih
PXJkZnM6UmVzb3VyY2UpIC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9IiAp
Ci0gICAgICAgIC5hcmcoIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggU29wcmFubzo6Vm9j
YWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpICkgKTsKLSAgICBrRGVidWcoKSA8PCBxdWVyeTsK
LSAgICBRSGFzaDxRVXJsLCBVc2VyVmlzaWJsZU5vZGUqPiBhbGw7Ci0gICAgewotICAgICAgICBT
b3ByYW5vOjpRdWVyeVJlc3VsdEl0ZXJhdG9yIGl0Ci0gICAgICAgICAgICA9IGQtPm1vZGVsLT5l
eGVjdXRlUXVlcnkoIHF1ZXJ5LCBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCAp
OwotICAgICAgICB3aGlsZSggaXQubmV4dCgpICkgewotICAgICAgICAgICAgY29uc3QgUVVybCBy
ID0gaXRbInIiXS51cmkoKTsKLSAgICAgICAgICAgIGNvbnN0IFNvcHJhbm86Ok5vZGUgcCA9IGl0
WyJwIl07Ci0gICAgICAgICAgICBjb25zdCBTb3ByYW5vOjpOb2RlIHYgPSBpdFsidiJdOwotCi0g
ICAgICAgICAgICBpZiAoICFhbGwuY29udGFpbnMoIHIgKSApIHsKLSAgICAgICAgICAgICAgICBV
c2VyVmlzaWJsZU5vZGUqIHJfdXZuID0gbmV3IFVzZXJWaXNpYmxlTm9kZSggciApOwotICAgICAg
ICAgICAgICAgIGFsbC5pbnNlcnQoIHIsIHJfdXZuICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiggdi5pc0xpdGVyYWwoKSApCi0gICAgICAgICAgICAgICAgYWxsW3JdLT51c2VyVmlz
aWJsZSA9ICh2LmxpdGVyYWwoKS50b0Jvb2woKSA/IDEgOiAtMSk7Ci0gICAgICAgICAgICBpZiAo
IHAuaXNSZXNvdXJjZSgpICYmCi0gICAgICAgICAgICAgICAgIHAudXJpKCkgIT0gciAmJgotICAg
ICAgICAgICAgICAgICBwLnVyaSgpICE9IFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291
cmNlKCkgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCAhYWxsLmNvbnRhaW5zKCBwLnVyaSgpICkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFVzZXJWaXNpYmxlTm9kZSogcF91dm4gPSBuZXcgVXNl
clZpc2libGVOb2RlKCBwLnVyaSgpICk7Ci0gICAgICAgICAgICAgICAgICAgIGFsbC5pbnNlcnQo
IHAudXJpKCksIHBfdXZuICk7Ci0gICAgICAgICAgICAgICAgICAgIGFsbFtyXS0+cGFyZW50cy5p
bnNlcnQoIHAudXJpKCksIHBfdXZuICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhbGxbcl0tPnBhcmVudHMuaW5zZXJ0KCBw
LnVyaSgpLCBhbGxbcC51cmkoKV0gKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIGNyZWF0ZSBhIGxpc3Qgb2YgYWxs
IHN0YXRlbWVudHMgd2UgbmVlZCB0byBhZGQKLSAgICAvLwotICAgIFFMaXN0PFNvcHJhbm86OlN0
YXRlbWVudD4gc3RhdGVtZW50czsKLSAgICBmb3IgKCBRSGFzaDxRVXJsLCBVc2VyVmlzaWJsZU5v
ZGUqPjo6aXRlcmF0b3IgaXQgPSBhbGwuYmVnaW4oKTsKLSAgICAgICAgICBpdCAhPSBhbGwuZW5k
KCk7ICsraXQgKSB7Ci0gICAgICAgIGl0LnZhbHVlKCktPnVwZGF0ZVVzZXJWaXNpYmlsaXR5KCBz
dGF0ZW1lbnRzICk7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBjbGVhbnVwIGFuZCBhZGQgYWxs
IHRoZSBuZWNlc3Nhcnkgc3RhdGVtZW50cyB0byB0aGUgbWFpbiBtb2RlbAotICAgIC8vCi0gICAg
cURlbGV0ZUFsbCggYWxsICk7Ci0gICAgZC0+bW9kZWwtPmFkZFN0YXRlbWVudHMoIHN0YXRlbWVu
dHMgKTsKLX0KLQogI2luY2x1ZGUgIm9udG9sb2d5bG9hZGVyLm1vYyIKSW5kZXg6IHNlcnZpY2Vz
L3N0b3JhZ2Uvb250b2xvZ3lsb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdl
L29udG9sb2d5bG9hZGVyLmgJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdl
L29udG9sb2d5bG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDEyICs2NSw2IEBACiAgICAg
ICAgICAqLwogICAgICAgICB2b2lkIGltcG9ydE9udG9sb2d5KCBjb25zdCBRU3RyaW5nJiB1cmwg
KTsKIAotICAgICAgICAvKioKLSAgICAgICAgICogQ3JlYXRlcyBuYW86dXNlclZpc2libGUgcHJv
cGVydGllcyBmb3IgYWxsIGNsYXNzZXMgYW5kIHByb3BlcnRpZXMKLSAgICAgICAgICogYW5kIHN0
b3JlcyB0aGVtIGluIHRoZSBrdXZvIG5hbWVzcGFjZS4KLSAgICAgICAgICovCi0gICAgICAgIHZv
aWQgdXBkYXRlVXNlclZpc2liaWxpdHkoKTsKLQogICAgIFFfU0lHTkFMUzoKICAgICAgICAgLyoq
CiAgICAgICAgICAqIEVtaXR0ZWQgb25jZSB0aGUgdXBkYXRlIG9mIHRoZSBvbnRvbG9naWVzIGlz
IGRvbmUuCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmlsaXR5dHJlZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS90eXBldmlzaWJpbGl0eXRyZWUuY3BwCShyZXZp
c2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFnZS90eXBldmlzaWJpbGl0eXRyZWUuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBOZXBvbXVrIEtERSBwcm9qZWN0LgorICAgQ29weXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBU
cnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9u
IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFu
eQorICAgbGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5W
LiAob3IgaXRzCisgICBzdWNjZXNzb3IgYXBwcm92ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RF
IGUuVi4pLCB3aGljaCBzaGFsbAorICAgYWN0IGFzIGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9u
IDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNlLgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4g
IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNs
dWRlICJ0eXBldmlzaWJpbGl0eXRyZWUuaCIKKworI2luY2x1ZGUgPFNvcHJhbm8vTW9kZWw+Cisj
aW5jbHVkZSA8U29wcmFuby9RdWVyeVJlc3VsdEl0ZXJhdG9yPgorI2luY2x1ZGUgPFNvcHJhbm8v
Tm9kZT4KKyNpbmNsdWRlIDxTb3ByYW5vL0xpdGVyYWxWYWx1ZT4KKyNpbmNsdWRlIDxTb3ByYW5v
L1ZvY2FidWxhcnkvTkFPPgorI2luY2x1ZGUgPFNvcHJhbm8vVm9jYWJ1bGFyeS9SREZTPgorCisj
aW5jbHVkZSA8UXRDb3JlL1FNdXRleExvY2tlcj4KKworI2luY2x1ZGUgPEtEZWJ1Zz4KKworCitj
bGFzcyBUeXBlVmlzaWJpbGl0eVRyZWU6OlR5cGVWaXNpYmlsaXR5Tm9kZQoreworcHVibGljOgor
ICAgIFR5cGVWaXNpYmlsaXR5Tm9kZSggY29uc3QgUVVybCYgciApCisgICAgICAgIDogdXJpKCBy
ICksCisgICAgICAgICAgdXNlclZpc2libGUoIDAgKSB7CisgICAgfQorCisgICAgUVVybCB1cmk7
CisgICAgaW50IHVzZXJWaXNpYmxlOworICAgIFFTZXQ8VHlwZVZpc2liaWxpdHlOb2RlKj4gcGFy
ZW50czsKKworICAgIC8qKgorICAgICAqIFNldCB0aGUgdmFsdWUgb2YgbmFvOnVzZXJWaXNpYmxl
LgorICAgICAqIEEgY2xhc3MgaXMgdmlzaWJsZSBpZiBpdCBoYXMgYXQgbGVhc3Qgb25lIHZpc2li
bGUgZGlyZWN0IHBhcmVudCBjbGFzcy4KKyAgICAgKi8KKyAgICBpbnQgdXBkYXRlVXNlclZpc2li
aWxpdHkoIFFTZXQ8VHlwZVZpc2liaWxpdHlOb2RlKj4mIHZpc2l0ZWROb2RlcyApIHsKKyAgICAg
ICAgaWYgKCB1c2VyVmlzaWJsZSAhPSAwICkgeworICAgICAgICAgICAgcmV0dXJuIHVzZXJWaXNp
YmxlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKCAhcGFyZW50
cy5pc0VtcHR5KCkgKSB7CisgICAgICAgICAgICAgICAgZm9yICggUVNldDxUeXBlVmlzaWJpbGl0
eU5vZGUqPjo6aXRlcmF0b3IgaXQgPSBwYXJlbnRzLmJlZ2luKCk7CisgICAgICAgICAgICAgICAg
ICAgICBpdCAhPSBwYXJlbnRzLmVuZCgpOyArK2l0ICkgeworICAgICAgICAgICAgICAgICAgICAv
LyBhdm9pZCBlbmRsZXNzIGxvb3BzCisgICAgICAgICAgICAgICAgICAgIGlmKCB2aXNpdGVkTm9k
ZXMuY29udGFpbnMoKml0KSApCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgdmlzaXRlZE5vZGVzLmluc2VydCggKml0ICk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICggKCppdCktPnVwZGF0ZVVzZXJWaXNpYmlsaXR5KCB2aXNpdGVkTm9kZXMg
KSA9PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdXNlclZpc2libGUgPSAxOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIHVzZXJWaXNpYmxl
ID09IDAgKSB7CisgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBpbnZpc2libGUKKyAgICAg
ICAgICAgICAgICB1c2VyVmlzaWJsZSA9IC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
a0RlYnVnKCkgPDwgIlNldHRpbmcgbmFvOnVzZXJWaXNpYmxlIG9mIiA8PCB1cmkudG9TdHJpbmco
KSA8PCAoIHVzZXJWaXNpYmxlID09IDEgKTsKKyAgICAgICAgICAgIHJldHVybiB1c2VyVmlzaWJs
ZTsKKyAgICAgICAgfQorICAgIH0KK307CisKK1R5cGVWaXNpYmlsaXR5VHJlZTo6VHlwZVZpc2li
aWxpdHlUcmVlKCBTb3ByYW5vOjpNb2RlbCogbW9kZWwgKQorICAgIDogbV9tb2RlbChtb2RlbCkK
K3sKK30KKworVHlwZVZpc2liaWxpdHlUcmVlOjp+VHlwZVZpc2liaWxpdHlUcmVlKCkKK3sKKyAg
ICBRTXV0ZXhMb2NrZXIgbG9jayggJm1fbXV0ZXggKTsKK30KKwordm9pZCBUeXBlVmlzaWJpbGl0
eVRyZWU6OnJlYnVpbGRUcmVlKCkKK3sKKyAgICBRTXV0ZXhMb2NrZXIgbG9jayggJm1fbXV0ZXgg
KTsKKworICAgIC8vIGNsZWFudXAKKyAgICBtX3Zpc2liaWxpdHlIYXNoLmNsZWFyKCk7CisKKyAg
ICAvLyB3ZSBidWlsZCBhIHRlbXBvcmFyeSBoZWxwZXIgdHJlZQorICAgIFFIYXNoPFFVcmwsIFR5
cGVWaXNpYmlsaXR5Tm9kZSo+IHRyZWU7CisKKyAgICBjb25zdCBRU3RyaW5nIHF1ZXJ5CisgICAg
ICAgID0gUVN0cmluZzo6ZnJvbUxhdGluMSggInNlbGVjdCBkaXN0aW5jdCA/ciA/cCA/diB3aGVy
ZSB7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiP3IgYSByZGZzOkNsYXNzIC4g
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPUFRJT05BTCB7ID9yIHJkZnM6c3Vi
Q2xhc3NPZiA/cCAuID9wIGEgcmRmczpDbGFzcyAuIH0gLiAiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgJTEgP3YgLiB9IC4gIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJGSUxURVIoP3IhPXJkZnM6UmVzb3VyY2UpIC4gIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ9IiApCisgICAgICAgICAgICAuYXJnKCBTb3ByYW5vOjpO
b2RlOjpyZXNvdXJjZVRvTjMoIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUo
KSApICk7CisgICAga0RlYnVnKCkgPDwgcXVlcnk7CisgICAgU29wcmFubzo6UXVlcnlSZXN1bHRJ
dGVyYXRvciBpdAorICAgICAgICAgICAgPSBtX21vZGVsLT5leGVjdXRlUXVlcnkoIHF1ZXJ5LCBT
b3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApOworICAgIHdoaWxlKCBpdC5uZXh0
KCkgKSB7CisgICAgICAgIGNvbnN0IFFVcmwgciA9IGl0WyJyIl0udXJpKCk7CisgICAgICAgIGNv
bnN0IFNvcHJhbm86Ok5vZGUgcCA9IGl0WyJwIl07CisgICAgICAgIGNvbnN0IFNvcHJhbm86Ok5v
ZGUgdiA9IGl0WyJ2Il07CisKKyAgICAgICAgaWYgKCAhdHJlZS5jb250YWlucyggciApICkgewor
ICAgICAgICAgICAgVHlwZVZpc2liaWxpdHlOb2RlKiByX3V2biA9IG5ldyBUeXBlVmlzaWJpbGl0
eU5vZGUoIHIgKTsKKyAgICAgICAgICAgIHRyZWUuaW5zZXJ0KCByLCByX3V2biApOworICAgICAg
ICB9CisgICAgICAgIGlmKCB2LmlzTGl0ZXJhbCgpICkKKyAgICAgICAgICAgIHRyZWVbcl0tPnVz
ZXJWaXNpYmxlID0gKHYubGl0ZXJhbCgpLnRvQm9vbCgpID8gMSA6IC0xKTsKKyAgICAgICAgaWYg
KCBwLmlzUmVzb3VyY2UoKSAmJgorICAgICAgICAgICAgICAgIHAudXJpKCkgIT0gciAmJgorICAg
ICAgICAgICAgICAgIHAudXJpKCkgIT0gU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3Vy
Y2UoKSApIHsKKyAgICAgICAgICAgIGlmICggIXRyZWUuY29udGFpbnMoIHAudXJpKCkgKSApIHsK
KyAgICAgICAgICAgICAgICBUeXBlVmlzaWJpbGl0eU5vZGUqIHBfdXZuID0gbmV3IFR5cGVWaXNp
YmlsaXR5Tm9kZSggcC51cmkoKSApOworICAgICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KCBwLnVy
aSgpLCBwX3V2biApOworICAgICAgICAgICAgICAgIHRyZWVbcl0tPnBhcmVudHMuaW5zZXJ0KCBw
X3V2biApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgdHJlZVtyXS0+cGFyZW50cy5pbnNlcnQoIHRyZWVbcC51cmkoKV0gKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIG1ha2Ugc3VyZSByZGZzOlJlc291cmNlIGlz
IHZpc2libGUgYnkgZGVmYXVsdAorICAgIFR5cGVWaXNpYmlsaXR5Tm9kZSogcmRmc1Jlc291cmNl
Tm9kZSA9IDA7CisgICAgUUhhc2g8UVVybCwgVHlwZVZpc2liaWxpdHlOb2RlKj46Oml0ZXJhdG9y
IHJkZnNSZXNvdXJjZUl0ID0gdHJlZS5maW5kKFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJl
c291cmNlKCkpOworICAgIGlmKCByZGZzUmVzb3VyY2VJdCA9PSB0cmVlLmVuZCgpICkgeworICAg
ICAgICByZGZzUmVzb3VyY2VOb2RlID0gbmV3IFR5cGVWaXNpYmlsaXR5Tm9kZShTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKTsKKyAgICAgICAgdHJlZS5pbnNlcnQoIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCksIHJkZnNSZXNvdXJjZU5vZGUgKTsKKyAg
ICB9CisgICAgZWxzZSB7CisgICAgICAgIHJkZnNSZXNvdXJjZU5vZGUgPSByZGZzUmVzb3VyY2VJ
dC52YWx1ZSgpOworICAgIH0KKyAgICBpZiggcmRmc1Jlc291cmNlTm9kZS0+dXNlclZpc2libGUg
PT0gMCApIHsKKyAgICAgICAgcmRmc1Jlc291cmNlTm9kZS0+dXNlclZpc2libGUgPSAxOworICAg
IH0KKyAgICAvLyBhZGQgcmRmczpSZXNvdXJjZSBhcyBwYXJlbnQgZm9yIGFsbCB0b3AtbGV2ZWwg
Y2xhc3NlcworICAgIGZvciAoIFFIYXNoPFFVcmwsIFR5cGVWaXNpYmlsaXR5Tm9kZSo+OjppdGVy
YXRvciBpdCA9IHRyZWUuYmVnaW4oKTsKKyAgICAgICAgICBpdCAhPSB0cmVlLmVuZCgpOyArK2l0
ICkgeworICAgICAgICBpZiggaXQudmFsdWUoKSAhPSByZGZzUmVzb3VyY2VOb2RlICYmIGl0LnZh
bHVlKCktPnBhcmVudHMuaXNFbXB0eSgpICkgeworICAgICAgICAgICAgaXQudmFsdWUoKS0+cGFy
ZW50cy5pbnNlcnQoIHJkZnNSZXNvdXJjZU5vZGUgKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIGZpbmFsbHkgZGV0ZXJtaW5lIHZpc2liaWxpdHkgb2YgYWxsIG5vZGVzCisgICAgZm9yICgg
UUhhc2g8UVVybCwgVHlwZVZpc2liaWxpdHlOb2RlKj46Oml0ZXJhdG9yIGl0ID0gdHJlZS5iZWdp
bigpOworICAgICAgICAgIGl0ICE9IHRyZWUuZW5kKCk7ICsraXQgKSB7CisgICAgICAgIFFTZXQ8
VHlwZVZpc2liaWxpdHlOb2RlKj4gdmlzaXRlZE5vZGVzOworICAgICAgICBtX3Zpc2liaWxpdHlI
YXNoLmluc2VydChpdC5rZXkoKSwgaXQudmFsdWUoKS0+dXBkYXRlVXNlclZpc2liaWxpdHkoIHZp
c2l0ZWROb2RlcyApID09IDEgKTsKKyAgICB9CisKKyAgICAvLyBnZXQgcmlkIG9mIHRoZSB0ZW1w
IHRyZWUKKyAgICBxRGVsZXRlQWxsKHRyZWUpOworfQorCitib29sIFR5cGVWaXNpYmlsaXR5VHJl
ZTo6aXNWaXNpYmxlKGNvbnN0IFFVcmwgJnR5cGUpIGNvbnN0Cit7CisgICAgUU11dGV4TG9ja2Vy
IGxvY2soICZtX211dGV4ICk7CisKKyAgICBRSGFzaDxRVXJsLCBib29sPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3Zpc2liaWxpdHlIYXNoLmNvbnN0RmluZCh0eXBlKTsKKyAgICBpZiggaXQgIT0g
bV92aXNpYmlsaXR5SGFzaC5jb25zdEVuZCgpICkgeworICAgICAgICByZXR1cm4gKml0OworICAg
IH0KKyAgICBlbHNlIHsKKyAgICAgICAga0RlYnVnKCkgPDwgIkNvdWxkIG5vdCBmaW5kIHR5cGUi
IDw8IHR5cGUgPDwgImluIHRyZWUuIERlZmF1bHRpbmcgdG8gdmlzaWJsZS4iOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK1FMaXN0PFFVcmw+IFR5cGVWaXNpYmlsaXR5VHJlZTo6
dmlzaWJsZVR5cGVzKCkgY29uc3QKK3sKKyAgICBRTGlzdDxRVXJsPiB0eXBlczsKKyAgICBmb3Io
IFFIYXNoPFFVcmwsIGJvb2w+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdmlzaWJpbGl0eUhhc2gu
Y29uc3RCZWdpbigpOworICAgICAgICAgaXQgIT0gbV92aXNpYmlsaXR5SGFzaC5jb25zdEVuZCgp
OyArK2l0ICkgeworICAgICAgICBpZiggaXQudmFsdWUoKSApCisgICAgICAgICAgICB0eXBlcyA8
PCBpdC5rZXkoKTsKKyAgICB9CisgICAgcmV0dXJuIHR5cGVzOworfQpJbmRleDogc2VydmljZXMv
c3RvcmFnZS90eXBldmlzaWJpbGl0eXRyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9y
YWdlL3R5cGV2aXNpYmlsaXR5dHJlZS5oCShyZXZpc2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFn
ZS90eXBldmlzaWJpbGl0eXRyZWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLyoK
KyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBOZXBvbXVrIEtERSBwcm9qZWN0LgorICAgQ29w
eXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKworICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFueQorICAgbGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBi
eSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiAob3IgaXRzCisgICBzdWNjZXNzb3IgYXBwcm92
ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4pLCB3aGljaCBzaGFsbAorICAgYWN0IGFz
IGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9uIDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNl
LgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v
cmcvbGljZW5zZXMvPi4KKyovCisKKyNpZm5kZWYgVFlQRVZJU0lCSUxJVFlUUkVFX0gKKyNkZWZp
bmUgVFlQRVZJU0lCSUxJVFlUUkVFX0gKKworI2luY2x1ZGUgPFF0Q29yZS9RVXJsPgorI2luY2x1
ZGUgPFF0Q29yZS9RSGFzaD4KKyNpbmNsdWRlIDxRdENvcmUvUU11dGV4PgorCituYW1lc3BhY2Ug
U29wcmFubyB7CitjbGFzcyBNb2RlbDsKK30KKworLyoqCisgKiBCdWlsZHMgYSB0eXBlIHRyZWUg
dGhhdCBhbGxvd3MgdG8gY2hlY2sgdGhlIG5hbzp1c2VyVmlzaWJsZQorICogdmFsdWUgZm9yIGVh
Y2ggZXhpc3RpbmcgdHlwZS4KKyAqLworY2xhc3MgVHlwZVZpc2liaWxpdHlUcmVlCit7CitwdWJs
aWM6CisgICAgVHlwZVZpc2liaWxpdHlUcmVlKCBTb3ByYW5vOjpNb2RlbCogbW9kZWwgKTsKKyAg
ICB+VHlwZVZpc2liaWxpdHlUcmVlKCk7CisKKyAgICB2b2lkIHJlYnVpbGRUcmVlKCk7CisKKyAg
ICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIHR5cGUgaXMgdmlzaWJsZS4KKyAg
ICAgKi8KKyAgICBib29sIGlzVmlzaWJsZSggY29uc3QgUVVybCYgdHlwZSApIGNvbnN0OworCisg
ICAgUUxpc3Q8UVVybD4gdmlzaWJsZVR5cGVzKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU29w
cmFubzo6TW9kZWwqIG1fbW9kZWw7CisgICAgY2xhc3MgVHlwZVZpc2liaWxpdHlOb2RlOworICAg
IFFIYXNoPFFVcmwsIGJvb2w+IG1fdmlzaWJpbGl0eUhhc2g7CisgICAgbXV0YWJsZSBRTXV0ZXgg
bV9tdXRleDsKK307CisKKyNlbmRpZiAvLyBUWVBFVklTSUJJTElUWVRSRUVfSApJbmRleDogc2Vy
dmljZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9y
YWdlL3JlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAxMjEzOTQwKQorKysgc2VydmljZXMvc3RvcmFn
ZS9yZXBvc2l0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5j
bHVkZSAicmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgIm1vZGVsY29weWpvYi5oIgorI2luY2x1ZGUg
ImNyYXBweWluZmVyZW5jZXIyLmgiCiAKICNpbmNsdWRlIDxTb3ByYW5vL0JhY2tlbmQ+CiAjaW5j
bHVkZSA8U29wcmFuby9QbHVnaW5NYW5hZ2VyPgpAQCAtNjksNiArNzAsOSBAQAogewogICAgIGtE
ZWJ1ZygpIDw8IG1fbmFtZTsKIAorICAgIGRlbGV0ZSBtX2luZmVyZW5jZXI7CisgICAgbV9pbmZl
cmVuY2VyID0gMDsKKwogICAgIGRlbGV0ZSBtX21vZGVsQ29weUpvYjsKICAgICBtX21vZGVsQ29w
eUpvYiA9IDA7CiAKQEAgLTE2NSw5ICsxNjksMTMgQEAKICAgICAvLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KICAgICBTb3ByYW5vOjpVdGlsOjpTaWduYWxDYWNoZU1vZGVsKiBz
Y20gPSBuZXcgU29wcmFubzo6VXRpbDo6U2lnbmFsQ2FjaGVNb2RlbCggbV9tb2RlbCApOwogICAg
IHNjbS0+c2V0UGFyZW50KHRoaXMpOyAvLyBtZW1vcnkgbWFuYWdlbWVudAotCiAgICAgc2V0UGFy
ZW50TW9kZWwoIHNjbSApOwogCisgICAgLy8gY3JlYXRlIHRoZSBjcmFwcHkgaW5mZXJlbmNlIG1v
ZGVsIHdoaWNoIGhhbmRsZXMgcmRmczpzdWJDbGFzc09mIG9ubHkgLT4gd2Ugb25seSB1c2UgdGhp
cyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIFJlc291cmNlVHlwZVRlcm1zCisgICAgLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgbV9pbmZlcmVuY2VyID0gbmV3IENy
YXBweUluZmVyZW5jZXIyKCBzY20gKTsKKyAgICBzZXRQYXJlbnRNb2RlbChtX2luZmVyZW5jZXIp
OworCiAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSB0byBjb252ZXJ0CiAgICAgLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgYm9vbCBjb252ZXJ0aW5nRGF0YSA9IGZhbHNl
OwpAQCAtMzM3LDcgKzM0NSwxOCBAQAogICAgIC8vIG5lZWRzIHRvIGJlIGFkZHJlc3NlZCBhcyB3
ZWxsCiAgICAgc2V0dGluZ3MgPDwgU29wcmFubzo6QmFja2VuZFNldHRpbmcoICJTZXJ2ZXJUaHJl
YWRzIiwgMTAwICk7CiAKKyAgICAvLyBOZXZlciB0YWtlIG1vcmUgdGhhbiA1IG1pbnV0ZXMgdG8g
YW5zd2VyIGEgcXVlcnkgKHRoaXMgaXMgdG8gZmlsdGVyIG91dCBicm9rZW4gcXVlcmllcyBhbmQg
YnVncyBpbiBWaXJ0dW9zbydzIHF1ZXJ5IG9wdGltaXplcikKKyAgICAvLyB0cnVlZzogV2UgY2Fu
bm90IGFjdGl2YXRlIHRoaXMgeWV0LiAxLiBWaXJ0dW9zbyA8IDYuMyBjcmFzaGVzIGFuZCAyLiBl
dmVuIG9wZW4gY3Vyc29ycyBhcmUgc3ViamVjdCB0byB0aGUgdGltZW91dCB3aGljaCBpcyByZWFs
bHkKKyAgICAvLyAgICAgICAgbm90IHdoYXQgd2Ugd2FudCEKKy8vICAgIHNldHRpbmdzIDw8IFNv
cHJhbm86OkJhY2tlbmRTZXR0aW5nKCAiUXVlcnlUaW1lb3V0IiwgNSo2MDAwMCApOworCiAgICAg
cmV0dXJuIHNldHRpbmdzOwogfQogCit2b2lkIE5lcG9tdWs6OlJlcG9zaXRvcnk6OnVwZGF0ZUlu
ZmVyZW5jZSgpCit7CisgICAgbV9pbmZlcmVuY2VyLT51cGRhdGVJbmZlcmVuY2VJbmRleCgpOwor
ICAgIG1faW5mZXJlbmNlci0+dXBkYXRlQWxsUmVzb3VyY2VzKCk7Cit9CisKICNpbmNsdWRlICJy
ZXBvc2l0b3J5Lm1vYyIKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIuY3Bw
CShyZXZpc2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFnZS9jcmFwcHlpbmZlcmVuY2VyMi5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQyIEBACisvKgorICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIE5lcG9tdWsgS0RFIHByb2plY3QuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0
aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorCisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZl
cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywg
b3IgYW55CisgICBsYXRlciB2ZXJzaW9uIGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtE
RSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nlc3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBv
ZiBLREUgZS5WLiksIHdoaWNoIHNoYWxsCisgICBhY3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNl
Y3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxpY2Vuc2UuCisKKyAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKwor
I2luY2x1ZGUgImNyYXBweWluZmVyZW5jZXIyLmgiCisjaW5jbHVkZSAidHlwZXZpc2liaWxpdHl0
cmVlLmgiCisKKyNpbmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvTlJMPgorI2luY2x1ZGUgPFNv
cHJhbm8vVm9jYWJ1bGFyeS9OQU8+CisjaW5jbHVkZSA8U29wcmFuby9Wb2NhYnVsYXJ5L1JERj4K
KyNpbmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvUkRGUz4KKyNpbmNsdWRlIDxTb3ByYW5vL1N0
YXRlbWVudD4KKyNpbmNsdWRlIDxTb3ByYW5vL1N0YXRlbWVudEl0ZXJhdG9yPgorI2luY2x1ZGUg
PFNvcHJhbm8vTm9kZT4KKyNpbmNsdWRlIDxTb3ByYW5vL05vZGVJdGVyYXRvcj4KKyNpbmNsdWRl
IDxTb3ByYW5vL0dyYXBoPgorI2luY2x1ZGUgPFNvcHJhbm8vUXVlcnlSZXN1bHRJdGVyYXRvcj4K
KworI2luY2x1ZGUgPFF0Q29yZS9RVGltZT4KKyNpbmNsdWRlIDxRdENvcmUvUU11dGV4PgorI2lu
Y2x1ZGUgPFF0Q29yZS9RTXV0ZXhMb2NrZXI+CisjaW5jbHVkZSA8UXRDb3JlL1FUaHJlYWQ+CisK
KyNpbmNsdWRlIDxrZGVidWcuaD4KKworCitjbGFzcyBDcmFwcHlJbmZlcmVuY2VyMjo6UHJpdmF0
ZQoreworcHVibGljOgorICAgIFByaXZhdGUoKQorICAgICAgICA6IG1fdXBkYXRlQWxsUmVzb3Vy
Y2VzVGhyZWFkKDApIHsKKyAgICB9CisKKyAgICAvLy8gZ2V0IHRoZSBsaXN0IG9mIHN1cGVyIHR5
cGVzIGZvciBccCB0eXBlCisgICAgUVNldDxRVXJsPiBzdXBlckNsYXNzZXMoIGNvbnN0IFFVcmwm
IHR5cGUgKSBjb25zdDsKKworICAgIC8vLyBDaGVjayBpZiBhIHJlc291cmNlIHdpdGggdGhlIHNw
ZWNpZmllZCB0eXBlcyBpcyB2aXNpYmxlLgorICAgIGJvb2wgaXNWaXNpYmxlRnJvbVR5cGVzKCBj
b25zdCBRU2V0PFFVcmw+JiB0eXBlcyApIGNvbnN0OworCisgICAgLy8vIFBlcmZvcm1zIGEgcXVl
cnkgdG8gcmV0cmlldmUgYWxsIHR5cGVzIHRoYXQgd2VyZSBub3QgYWRkZWQgYnkgdXMKKyAgICBR
U2V0PFFVcmw+IHF1ZXJ5UmVzb3VyY2VUeXBlcyggY29uc3QgUVVybCYgcmVzb3VyY2UgKSBjb25z
dDsKKworICAgIC8vLyB1c2VkIHRvIGJ1aWxkIG1fc3VwZXJDbGFzc2VzIChhbmQgbm90aGluZyBl
bHNlISkKKyAgICBRU2V0PFFVcmw+IGJ1aWxkU3VwZXJDbGFzc2VzSGFzaCggY29uc3QgUVVybCYg
dHlwZSwgUVNldDxRVXJsPiYgdmlzaXRlZFR5cGVzLCBjb25zdCBRTXVsdGlIYXNoPFFVcmwsIFFV
cmw+JiByZGZzU3ViQ2xhc3NSZWxhdGlvbnMgKTsKKworICAgIFFIYXNoPFFVcmwsIFFTZXQ8UVVy
bD4gPiBtX3N1cGVyQ2xhc3NlczsKKyAgICBUeXBlVmlzaWJpbGl0eVRyZWUqIG1fdHlwZVZpc2li
aWxpdHlUcmVlOworICAgIFFNdXRleCBtX211dGV4OworCisgICAgVXBkYXRlQWxsUmVzb3VyY2Vz
VGhyZWFkKiBtX3VwZGF0ZUFsbFJlc291cmNlc1RocmVhZDsKKworICAgIFFVcmwgbV9pbmZlcmVu
Y2VDb250ZXh0OworCisgICAgQ3JhcHB5SW5mZXJlbmNlcjIqIHE7Cit9OworCisKKy8qKgorICog
U2ltcGxlIGhlbHBlciB0aHJlYWQgd2hpY2ggdXBkYXRlcyB0aGUgc3ViY2xhc3MgYW5kIHZpc2li
aWxpdHkgaW5mZXJlbmNlIG9uIGFsbCByZXNvdXJjZXMKKyAqIGluIHRoZSBkYXRhYmFzZS4gVGhp
cyBpcyBkb25lIGluIGEgc2VwYXJhdGUgdGhyZWFkIHNpbmNlIGl0IHRha2VzIHVwIHRvIGhhbGYg
YW4gaG91ciB0aGUgZmlyc3QgdGltZS4KKyAqLworY2xhc3MgQ3JhcHB5SW5mZXJlbmNlcjI6OlVw
ZGF0ZUFsbFJlc291cmNlc1RocmVhZCA6IHB1YmxpYyBRVGhyZWFkCit7CitwdWJsaWM6CisgICAg
VXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkKCBDcmFwcHlJbmZlcmVuY2VyMiogcGFyZW50ICkKKyAg
ICAgICAgOiBRVGhyZWFkKHBhcmVudCksCisgICAgICAgICAgbV9jYW5jZWxlZChmYWxzZSksCisg
ICAgICAgICAgbV9tb2RlbChwYXJlbnQpIHsKKyAgICB9CisKKyAgICB2b2lkIGNhbmNlbCgpIHsK
KyAgICAgICAga0RlYnVnKCk7CisgICAgICAgIG1fY2FuY2VsZWQgPSB0cnVlOworICAgIH0KKwor
ICAgIHZvaWQgcnVuKCkgeworICAgICAgICBrRGVidWcoKTsKKyAgICAgICAgbV9jYW5jZWxlZCA9
IGZhbHNlOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgUVRpbWUgdGltZXI7CisgICAgICAgIHRp
bWVyLnN0YXJ0KCk7CisgICAgICAgIGludCBjbnQgPSAwOworI2VuZGlmCisKKyAgICAgICAgLy8g
d2UgdXBkYXRlIHRoZSByZXN0IGluIGFzIGxpdHRsZSBxdWVyaWVzIGFzIHBvc3NpYmxlLiBUaHVz
LCB3ZSBnZXQgdGhlIGxpc3Qgb2YgYWxsIHZpc2libGUgdHlwZXMKKyAgICAgICAgLy8gYW5kIG1h
cmsgZWFjaCByZXNvdXJjZSBvZiB0aGF0IHR5cGUgYXMgdmlzaWJsZS4gSW52aXNpYmxlIHJlc291
cmNlcyB3aWxsIHRoZW4gYmUgaGFuZGxlZCBpbiB0aGUgbG9vcCBiZWxvdworICAgICAgICBRX0ZP
UkVBQ0goY29uc3QgUVVybCYgdHlwZSwgbV9tb2RlbC0+ZC0+bV90eXBlVmlzaWJpbGl0eVRyZWUt
PnZpc2libGVUeXBlcygpKSB7CisgICAgICAgICAgICBjb25zdCBRU3RyaW5nIHF1ZXJ5ID0gUVN0
cmluZzo6ZnJvbUxhdGluMSgiaW5zZXJ0IGludG8gZ3JhcGggJTEgeyA/ciAlMiAxIC4gfSB3aGVy
ZSB7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICI/ciBhICUzIC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIkZJTFRFUighYmlmOmV4aXN0cygoc2VsZWN0ICgxKSB3aGVyZSB7ID9y
ICUyID92IC4gfSkpKSAuIH0gIikKKyAgICAgICAgICAgICAgICAgICAgLmFyZyggU29wcmFubzo6
Tm9kZTo6cmVzb3VyY2VUb04zKCBtX21vZGVsLT5jcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkgKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCkgKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCB0eXBlICkgKTsKKyAgICAg
ICAgICAgIG1fbW9kZWwtPmV4ZWN1dGVRdWVyeSggcXVlcnksIFNvcHJhbm86OlF1ZXJ5OjpRdWVy
eUxhbmd1YWdlU3BhcnFsICk7CisgICAgICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAg
a0RlYnVnKCkgPDwgIkFsbCByZXNvdXJjZXMgd2l0aCB2aXNpYmxlIHR5cGUgdXBkYXRlZC4gRWxh
cHNlZDoiIDw8IHRpbWVyLmVsYXBzZWQoKS8xMDAwLjAgPDwgInNlYyI7CisjZW5kaWYKKworICAg
ICAgICAvLyBub3cgdXBkYXRlIGFsbCB0aGUgcmVzdCBvZiB0aGUgcmVzb3VyY2VzCisgICAgICAg
IFFMaXN0PFNvcHJhbm86Ok5vZGU+IHJlc3VsdHM7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAg
IC8vIGZvciBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCB3ZSBvbmx5IGhhbmRsZSByZXNvdXJjZXMg
aW4gSW5zdGFuY2VCYXNlcy4gVGhlIHJlc3Qgd2UgYWxtb3N0IG5ldmVyIHF1ZXJ5IGFueXdheS4K
KyAgICAgICAgICAgIHJlc3VsdHMgPSBtX21vZGVsLT5leGVjdXRlUXVlcnkoIFFTdHJpbmc6OmZy
b21MYXRpbjEoInNlbGVjdCBkaXN0aW5jdCA/ciB3aGVyZSB7IGdyYXBoID9nIHsgP3IgYSA/dCAu
IH0gLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJGSUxURVIoP2cgIT0gJTEpIC4gIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyA/ZyBhICUy
IC4gfSBVTklPTiB7ID9nIGEgJTMgLiB9IC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRklMVEVSKCFiaWY6ZXhpc3Rz
KChzZWxlY3QgKDEpIHdoZXJlIHsgP3IgJTQgP3YgLiB9KSkpIC4gfSAiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMSU1J
VCAxMDAwIiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5h
cmcoIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggbV9tb2RlbC0+Y3JhcHB5SW5mZXJlbmNl
Q29udGV4dCgpICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6
TlJMOjpEaXNjYXJkYWJsZUluc3RhbmNlQmFzZSgpICksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMygg
U29wcmFubzo6Vm9jYWJ1bGFyeTo6TlJMOjpJbnN0YW5jZUJhc2UoKSApLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNv
dXJjZVRvTjMoIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSApICksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlF1ZXJ5
OjpRdWVyeUxhbmd1YWdlU3BhcnFsICkKKyAgICAgICAgICAgICAgICAgICAgLml0ZXJhdGVCaW5k
aW5ncygwKS5hbGxFbGVtZW50cygpOworICAgICAgICAgICAgUV9GT1JFQUNIKCBjb25zdCBTb3By
YW5vOjpOb2RlJiBuLCByZXN1bHRzICkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICAg
ICArK2NudDsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmKCBtX2NhbmNlbGVkICkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBib29sIGhhdmVWaXNpYmxl
VHlwZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIFNvcHJhbm86OlF1ZXJ5UmVzdWx0SXRlcmF0
b3IgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgID0gbV9tb2RlbC0+ZXhlY3V0ZVF1ZXJ5KCBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgP3Qgd2hlcmUgeyBncmFwaCA/ZyB7ICUxIGEgP3Qg
LiB9IC4gRklMVEVSKD9nIT0lMikgLiB9IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5hcmcoU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKG4udXJp
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMobV9tb2RlbC0+Y3JhcHB5SW5mZXJlbmNlQ29u
dGV4dCgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCk7CisgICAgICAgICAgICAgICAg
d2hpbGUoIW1fY2FuY2VsZWQgJiYgaXQubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
KCBtX21vZGVsLT5pc1R5cGVWaXNpYmxlKGl0WzBdLnVyaSgpKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGhhdmVWaXNpYmxlVHlwZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBtX21vZGVsLT5zZXRWaXNpYmlsaXR5KCBuLnVyaSgpLCBoYXZlVmlzaWJsZVR5
cGUgPyBDcmFwcHlJbmZlcmVuY2VyMjo6VmlzaWJsZSA6IENyYXBweUluZmVyZW5jZXIyOjpOb25W
aXNpYmxlICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUoICFtX2NhbmNlbGVkICYm
ICFyZXN1bHRzLmlzRW1wdHkoKSApOworCisKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGtEZWJ1
ZygpIDw8IGNudCA8PCAicmVzb3VyY2VzIHVwZGF0ZWQuIEVsYXBzZWQ6IiA8PCB0aW1lci5lbGFw
c2VkKCkvMTAwMC4wIDw8ICJzZWMiOworI2VuZGlmCisgICAgfQorCitwcml2YXRlOgorICAgIGJv
b2wgbV9jYW5jZWxlZDsKKyAgICBDcmFwcHlJbmZlcmVuY2VyMiogbV9tb2RlbDsKK307CisKKwor
CitRU2V0PFFVcmw+IENyYXBweUluZmVyZW5jZXIyOjpQcml2YXRlOjpzdXBlckNsYXNzZXMoIGNv
bnN0IFFVcmwmIHR5cGUgKSBjb25zdAoreworICAgIFFIYXNoPFFVcmwsIFFTZXQ8UVVybD4gPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N1cGVyQ2xhc3Nlcy5jb25zdEZpbmQodHlwZSk7CisgICAg
aWYoIGl0ICE9IG1fc3VwZXJDbGFzc2VzLmNvbnN0RW5kKCkgKSB7CisgICAgICAgIHJldHVybiBp
dC52YWx1ZSgpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFFTZXQ8UVVybD4o
KSA8PCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpOworICAgIH0KK30KKwor
Ym9vbCBDcmFwcHlJbmZlcmVuY2VyMjo6UHJpdmF0ZTo6aXNWaXNpYmxlRnJvbVR5cGVzKGNvbnN0
IFFTZXQ8UVVybD4gJnR5cGVzKSBjb25zdAoreworICAgIC8vIFdlIG5lZWQgdG8gZXh0cmFjdCB0
aGUgbGVhZiB0eXBlcyBpbiB0aGUgc3ViZ3JhcGggdGhhdCBpcyB0eXBlcworICAgIC8vIGFzIHRo
b3NlIGFyZSB0aGUgdHlwZXMgdGhhdCBkZWZpbmUgaWYgdGhlIHJlc291cmNlIHdpbGwgYmUgdmlz
aWJsZQorCisgICAgLy8gVE9ETzogZG8gdGhlIGZvbGxvd2luZyBpbiBhbiBlZmZpY2llbnQgd2F5
CisgICAgLy8gd2UgcmVtb3ZlIGFsbCBzdXBlcnR5cGVzIGZyb20gdGhlIHNldCBvZiB0eXBlcyBh
bmQgYXJlIGxlZnQgd2l0aCB0aGUgbGVhZiB0eXBlcworICAgIFFTZXQ8UVVybD4gbGVhZlR5cGVz
KHR5cGVzKTsKKyAgICBRX0ZPUkVBQ0goY29uc3QgUVVybCYgdHlwZSwgdHlwZXMpIHsKKyAgICAg
ICAgbGVhZlR5cGVzIC09IHN1cGVyQ2xhc3Nlcyh0eXBlKTsKKyAgICAgICAgaWYobGVhZlR5cGVz
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIGlmIHRoZXJl
IGlzIG9uZSBsZWFmIHR5cGUgbGVmdCB0aGF0IGlzIHZpc2libGUgdGhlIHJlc291cmNlIGlzIHZp
c2libGUsIHRvbworICAgIFFfRk9SRUFDSCggY29uc3QgUVVybCYgdHlwZSwgbGVhZlR5cGVzICkg
eworICAgICAgICBpZiggbV90eXBlVmlzaWJpbGl0eVRyZWUtPmlzVmlzaWJsZSh0eXBlKSApIHsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gbm8g
dmlzaWJsZSB0eXBlIGZvdW5kCisgICAgcmV0dXJuIGZhbHNlOworfQorCitRU2V0PFFVcmw+IENy
YXBweUluZmVyZW5jZXIyOjpQcml2YXRlOjpxdWVyeVJlc291cmNlVHlwZXMoY29uc3QgUVVybCAm
cmVzb3VyY2UpIGNvbnN0Cit7CisgICAgUVNldDxRVXJsPiByZXNvdXJjZVR5cGVzOworICAgIFNv
cHJhbm86OlF1ZXJ5UmVzdWx0SXRlcmF0b3IgaXQKKyAgICAgICAgICAgID0gcS0+cGFyZW50TW9k
ZWwoKS0+ZXhlY3V0ZVF1ZXJ5KCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgP3Qgd2hlcmUg
eyBncmFwaCA/ZyB7ICUxIGEgP3QgLiB9IC4gRklMVEVSKD9nIT0lMikgLiB9IikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoU29wcmFubzo6Tm9kZTo6
cmVzb3VyY2VUb04zKHJlc291cmNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKG1faW5mZXJlbmNl
Q29udGV4dCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwpOworICAgIHdoaWxlKGl0Lm5leHQo
KSkgeworICAgICAgICByZXNvdXJjZVR5cGVzIDw8IGl0WzBdLnVyaSgpOworICAgIH0KKworICAg
IHJldHVybiByZXNvdXJjZVR5cGVzOworfQorCitRU2V0PFFVcmw+IENyYXBweUluZmVyZW5jZXIy
OjpQcml2YXRlOjpidWlsZFN1cGVyQ2xhc3Nlc0hhc2goIGNvbnN0IFFVcmwmIHR5cGUsIFFTZXQ8
UVVybD4mIHZpc2l0ZWRUeXBlcywgY29uc3QgUU11bHRpSGFzaDxRVXJsLCBRVXJsPiYgcmRmc1N1
YkNsYXNzUmVsYXRpb25zID0gUU11bHRpSGFzaDxRVXJsLCBRVXJsPigpICkKK3sKKyAgICBRSGFz
aDxRVXJsLCBRU2V0PFFVcmw+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdXBlckNsYXNzZXMu
Y29uc3RGaW5kKHR5cGUpOworICAgIGlmKCBpdCA9PSBtX3N1cGVyQ2xhc3Nlcy5jb25zdEVuZCgp
ICkgeworICAgICAgICBRU2V0PFFVcmw+IHN1cGVyVHlwZXM7CisgICAgICAgIGZvcihRTXVsdGlI
YXNoPFFVcmwsIFFVcmw+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJkZnNTdWJDbGFzc1JlbGF0aW9u
cy5jb25zdEZpbmQodHlwZSk7CisgICAgICAgICAgICBpdCAhPSByZGZzU3ViQ2xhc3NSZWxhdGlv
bnMuY29uc3RFbmQoKSAmJiBpdC5rZXkoKSA9PSB0eXBlOyArK2l0KSB7CisgICAgICAgICAgICAv
LyBhdm9pZCBlbmRsZXNzIGxvb3BzIGluIGNhc2Ugd2UgaGF2ZSBjaXJjdWxhciBoaWVyYXJjaGll
cworICAgICAgICAgICAgaWYoICF2aXNpdGVkVHlwZXMuY29udGFpbnMoIGl0LnZhbHVlKCkgKSAp
IHsKKyAgICAgICAgICAgICAgICB2aXNpdGVkVHlwZXMgPDwgaXQudmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICBzdXBlclR5cGVzIDw8IGl0LnZhbHVlKCk7CisgICAgICAgICAgICAgICAgc3VwZXJU
eXBlcyArPSBidWlsZFN1cGVyQ2xhc3Nlc0hhc2goIGl0LnZhbHVlKCksIHZpc2l0ZWRUeXBlcywg
cmRmc1N1YkNsYXNzUmVsYXRpb25zICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgbV9zdXBlckNsYXNzZXMuaW5zZXJ0KCB0eXBlLCBzdXBlclR5cGVzICk7CisgICAgICAgIHJl
dHVybiBzdXBlclR5cGVzOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGl0LnZh
bHVlKCk7CisgICAgfQorfQorCitDcmFwcHlJbmZlcmVuY2VyMjo6Q3JhcHB5SW5mZXJlbmNlcjIo
U29wcmFubzo6TW9kZWwqIHBhcmVudCkKKyAgICA6IFNvcHJhbm86OkZpbHRlck1vZGVsKHBhcmVu
dCksCisgICAgICBkKG5ldyBQcml2YXRlKCkpCit7CisgICAgZC0+cSA9IHRoaXM7CisgICAgZC0+
bV9pbmZlcmVuY2VDb250ZXh0ID0gUVVybDo6ZnJvbUVuY29kZWQoInVybjpjcmFwcHlpbmZlcmVu
Y2UyOmluZmVycmVkdHJpcGxlcyIpOworICAgIGQtPm1fdHlwZVZpc2liaWxpdHlUcmVlID0gbmV3
IFR5cGVWaXNpYmlsaXR5VHJlZSh0aGlzKTsKKyAgICBpZiAoIHBhcmVudCApCisgICAgICAgIHVw
ZGF0ZUluZmVyZW5jZUluZGV4KCk7Cit9CisKK0NyYXBweUluZmVyZW5jZXIyOjp+Q3JhcHB5SW5m
ZXJlbmNlcjIoKQoreworICAgIGlmKCBkLT5tX3VwZGF0ZUFsbFJlc291cmNlc1RocmVhZCApIHsK
KyAgICAgICAgZC0+bV91cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQtPmNhbmNlbCgpOworICAgICAg
ICBkLT5tX3VwZGF0ZUFsbFJlc291cmNlc1RocmVhZC0+d2FpdCgpOworICAgIH0KKyAgICBkZWxl
dGUgZDsKK30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMjo6c2V0UGFyZW50TW9kZWwoU29wcmFu
bzo6TW9kZWwgKm1vZGVsKQoreworICAgIEZpbHRlck1vZGVsOjpzZXRQYXJlbnRNb2RlbCggbW9k
ZWwgKTsKKyAgICB1cGRhdGVJbmZlcmVuY2VJbmRleCgpOworfQorCitTb3ByYW5vOjpFcnJvcjo6
RXJyb3JDb2RlIENyYXBweUluZmVyZW5jZXIyOjphZGRTdGF0ZW1lbnQoY29uc3QgU29wcmFubzo6
U3RhdGVtZW50ICZzdGF0ZW1lbnQpCit7CisgICAgaWYoIHN0YXRlbWVudC5jb250ZXh0KCkgPT0g
ZC0+bV9pbmZlcmVuY2VDb250ZXh0ICkgeworI2lmZGVmIE5ERUJVRworICAgICAgICBrRGVidWco
KSA8PCAiTm8gYWN0aW9ucyBhcmUgYWxsb3dlZCBvbiB0aGUgY3JhcHB5IGluZmVyZW5jZXIgY29u
dGV4dCBpbiByZWxlYXNlIG1vZGUhIiA8PCBzdGF0ZW1lbnQ7CisgICAgICAgIHJldHVybiBTb3By
YW5vOjpFcnJvcjo6RXJyb3JJbnZhbGlkQXJndW1lbnQ7CisjZWxzZQorICAgICAgICBrV2Fybmlu
ZygpIDw8ICJXQVJOSU5HISEhISEhISEhISEgQWRkaW5nIHN0YXRlbWVudCBpbiBjcmFwcHkgaW5m
ZXJlbmNlciBjb250ZXh0ISEhISEhISEhISEhIiA8PCBzdGF0ZW1lbnQ7CisjZW5kaWYKKyAgICB9
CisKKyAgICBRTXV0ZXhMb2NrZXIgbG9jayggJmQtPm1fbXV0ZXggKTsKKworICAgIFNvcHJhbm86
OkVycm9yOjpFcnJvckNvZGUgciA9IHBhcmVudE1vZGVsKCktPmFkZFN0YXRlbWVudCggc3RhdGVt
ZW50ICk7CisgICAgaWYoIHIgPT0gU29wcmFubzo6RXJyb3I6OkVycm9yTm9uZSApIHsKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gSGFuZGxlIHRoZSBpbmZlcmVuY2UKKyAgICAgICAgLy8KKyAgICAg
ICAgaWYgKCBzdGF0ZW1lbnQuc3ViamVjdCgpLmlzUmVzb3VyY2UoKSAmJgorICAgICAgICAgICAg
ICAgIHN0YXRlbWVudC5vYmplY3QoKS5pc1Jlc291cmNlKCkgJiYKKyAgICAgICAgICAgICAgICBz
dGF0ZW1lbnQucHJlZGljYXRlKCkgPT0gU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCkg
KSB7CisgICAgICAgICAgICBhZGRJbmZlcmVuY2VTdGF0ZW1lbnRzKCBzdGF0ZW1lbnQuc3ViamVj
dCgpLnVyaSgpLCBzdGF0ZW1lbnQub2JqZWN0KCkudXJpKCkgKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiByOworfQorCitTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIENyYXBweUlu
ZmVyZW5jZXIyOjpyZW1vdmVTdGF0ZW1lbnQoY29uc3QgU29wcmFubzo6U3RhdGVtZW50ICZzdGF0
ZW1lbnQpCit7CisgICAgaWYoIHN0YXRlbWVudC5jb250ZXh0KCkgPT0gZC0+bV9pbmZlcmVuY2VD
b250ZXh0ICkgeworI2lmZGVmIE5ERUJVRworICAgICAgICBrRGVidWcoKSA8PCAiTm8gYWN0aW9u
cyBhcmUgYWxsb3dlZCBvbiB0aGUgY3JhcHB5IGluZmVyZW5jZXIgY29udGV4dCBpbiByZWxlYXNl
IG1vZGUhIiA8PCBzdGF0ZW1lbnQ7CisgICAgICAgIHJldHVybiBTb3ByYW5vOjpFcnJvcjo6RXJy
b3JJbnZhbGlkQXJndW1lbnQ7CisjZWxzZQorICAgICAgICBrV2FybmluZygpIDw8ICJXQVJOSU5H
ISEhISEhISEhISEgUmVtb3Zpbmcgc3RhdGVtZW50IGZyb20gY3JhcHB5IGluZmVyZW5jZXIgY29u
dGV4dCEhISEhISEhISEhISIgPDwgc3RhdGVtZW50OworI2VuZGlmCisgICAgfQorCisgICAgUU11
dGV4TG9ja2VyIGxvY2soICZkLT5tX211dGV4ICk7CisKKyAgICBTb3ByYW5vOjpFcnJvcjo6RXJy
b3JDb2RlIGVycm9yID0gcGFyZW50TW9kZWwoKS0+cmVtb3ZlU3RhdGVtZW50KHN0YXRlbWVudCk7
CisgICAgaWYoIGVycm9yID09IFNvcHJhbm86OkVycm9yOjpFcnJvck5vbmUgKSB7CisgICAgICAg
IGlmICggc3RhdGVtZW50LmlzVmFsaWQoKSAmJgorICAgICAgICAgICAgICAgIHN0YXRlbWVudC5z
dWJqZWN0KCkuaXNSZXNvdXJjZSgpICYmCisgICAgICAgICAgICAgICAgc3RhdGVtZW50Lm9iamVj
dCgpLmlzUmVzb3VyY2UoKSAmJgorICAgICAgICAgICAgICAgIHN0YXRlbWVudC5wcmVkaWNhdGUo
KSA9PSBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSApIHsKKyAgICAgICAgICAgIHJl
bW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIHN0YXRlbWVudC5zdWJqZWN0KCkudXJpKCksIHN0YXRl
bWVudC5vYmplY3QoKS51cmkoKSApOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTb3ByYW5v
OjpFcnJvcjo6RXJyb3JOb25lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGVy
cm9yOworICAgIH0KK30KKworU29wcmFubzo6RXJyb3I6OkVycm9yQ29kZSBDcmFwcHlJbmZlcmVu
Y2VyMjo6cmVtb3ZlQWxsU3RhdGVtZW50cyhjb25zdCBTb3ByYW5vOjpTdGF0ZW1lbnQgJnN0YXRl
bWVudCkKK3sKKyAgICBpZiggc3RhdGVtZW50LmNvbnRleHQoKSA9PSBkLT5tX2luZmVyZW5jZUNv
bnRleHQgKSB7CisjaWZkZWYgTkRFQlVHCisgICAgICAgIGtEZWJ1ZygpIDw8ICJObyBhY3Rpb25z
IGFyZSBhbGxvd2VkIG9uIHRoZSBjcmFwcHkgaW5mZXJlbmNlciBjb250ZXh0IGluIHJlbGVhc2Ug
bW9kZSEiIDw8IHN0YXRlbWVudDsKKyAgICAgICAgcmV0dXJuIFNvcHJhbm86OkVycm9yOjpFcnJv
ckludmFsaWRBcmd1bWVudDsKKyNlbHNlCisgICAgICAgIGtXYXJuaW5nKCkgPDwgIldBUk5JTkch
ISEhISEhISEhISBSZW1vdmluZyBzdGF0ZW1lbnRzIGZyb20gY3JhcHB5IGluZmVyZW5jZXIgY29u
dGV4dCEhISEhISEhISEhISIgPDwgc3RhdGVtZW50OworI2VuZGlmCisgICAgfQorCisgICAgUU11
dGV4TG9ja2VyIGxvY2soICZkLT5tX211dGV4ICk7CisKKyAgICAvLworICAgIC8vIFRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBuZWVkIHRvIGJlIG1ldCBpbiBvcmRlciBmb3IgdXMgdG8gbmVlZCB0
byBjaGVjayBmb3IgdHlwZXMKKyAgICAvLyAxLiBPYmplY3Qgb3IgY29udGV4dCBuZWVkIHRvIGJl
IHZhbGlkLiBPdGhlcndpc2Ugb3VyIHR5cGVzIGFyZSByZW1vdmVkIGFueXdheQorICAgIC8vIDIu
IE9iamVjdCBuZWVkcyB0byBiZSBlbXB0eSBvciBhIHJlc291cmNlLiBMaXRlcmFscyBhcmUgbmV2
ZXIgdHlwZXMKKyAgICAvLyAzLiBQcmVkaWNhdGUgbmVlZHMgdG8gYmUgZW1wdHkgb3IgcmRmOnR5
cGUuIE90aGVyd2lzZSB0aGUgY2FsbCBpcyBub3QgcmVsYXRlZCB0byB0eXBlcy4KKyAgICAvLwor
ICAgIGlmICggc3RhdGVtZW50LmNvbnRleHQoKSAhPSBkLT5tX2luZmVyZW5jZUNvbnRleHQgJiYK
KyAgICAgICAgICAgICggKCBzdGF0ZW1lbnQucHJlZGljYXRlKCkuaXNFbXB0eSgpIHx8CisgICAg
ICAgICAgICAgICBzdGF0ZW1lbnQucHJlZGljYXRlKCkgPT0gU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCkgKSAmJgorICAgICAgICAgICAgICggc3RhdGVtZW50Lm9iamVjdCgpLmlzRW1w
dHkoKSB8fAorICAgICAgICAgICAgICBzdGF0ZW1lbnQub2JqZWN0KCkuaXNSZXNvdXJjZSgpICkg
JiYKKyAgICAgICAgICAgICAoIHN0YXRlbWVudC5vYmplY3QoKS5pc1ZhbGlkKCkgfHwKKyAgICAg
ICAgICAgICAgc3RhdGVtZW50LmNvbnRleHQoKS5pc1ZhbGlkKCkgKSApICkgeworICAgICAgICAv
LworICAgICAgICAvLyBJZiBib3RoIHJlc291cmNlIGFuZCB0eXBlIGFyZSBkZWZpbmVkIHdlIGNh
biBzaW1wbHkgY2FsbCByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCkgb24gdGhlbQorICAgICAg
ICAvLworICAgICAgICBpZiggc3RhdGVtZW50LnN1YmplY3QoKS5pc1Jlc291cmNlKCkgJiYKKyAg
ICAgICAgICAgICAgICBzdGF0ZW1lbnQub2JqZWN0KCkuaXNSZXNvdXJjZSgpICkgeworICAgICAg
ICAgICAgY29uc3QgU29wcmFubzo6RXJyb3I6OkVycm9yQ29kZSBlcnJvciA9IHBhcmVudE1vZGVs
KCktPnJlbW92ZUFsbFN0YXRlbWVudHMoc3RhdGVtZW50KTsKKyAgICAgICAgICAgIGlmKCBlcnJv
ciA9PSBTb3ByYW5vOjpFcnJvcjo6RXJyb3JOb25lICkgeworICAgICAgICAgICAgICAgIHJlbW92
ZUluZmVyZW5jZVN0YXRlbWVudHMoIHN0YXRlbWVudC5zdWJqZWN0KCkudXJpKCksIHN0YXRlbWVu
dC5vYmplY3QoKS51cmkoKSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGVy
cm9yOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gaWYgb25seSB0aGUgdHlw
ZSBpcyB1bmRlZmluZWQgd2UgZ2V0IHRoZSB0eXBlcyBhbmQgdGhlbiBjYWxsIHJlbW92ZUluZmVy
ZW5jZVN0YXRlbWVudHMoKS4gVGhpcyBhdm9pZHMKKyAgICAgICAgLy8gcGVyZm9ybWluZyB0aGUg
cXVlcnkgaW4gdGhlIGxhdHRlciBtZXRob2Qgb3ZlciBhbmQgb3ZlciBmb3IgZWFjaCB0eXBlCisg
ICAgICAgIC8vCisgICAgICAgIGVsc2UgaWYoIHN0YXRlbWVudC5zdWJqZWN0KCkuaXNWYWxpZCgp
ICkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gZmlyc3QgZ2V0
IHRoZSB0eXBlcyB0byByZW1vdmUsIHRoZW4gcmVtb3ZlIHRoZSBzdGF0ZW1lbnRzLCBhbmQgb25s
eSB0aGVuIGNhbGwKKyAgICAgICAgICAgIC8vIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoKS4g
VGhpcyBpcyBzaW5jZSB0aGUgbGF0dGVyIG1ha2VzIHVzZSBvZiB0aGUgdHlwZXMgaW4gdGhlIG1v
ZGVsCisgICAgICAgICAgICAvLworICAgICAgICAgICAgUVN0cmluZyBxdWVyeTsKKyAgICAgICAg
ICAgIGlmKCBzdGF0ZW1lbnQuY29udGV4dCgpLmlzVmFsaWQoKSApIHsKKyAgICAgICAgICAgICAg
ICBxdWVyeSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCA/dCB3aGVyZSB7IGdyYXBoICUy
IHsgJTEgYSA/dCAuIH0gLiB9IikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoc3RhdGVt
ZW50LnN1YmplY3QoKS50b04zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
bWVudC5jb250ZXh0KCkudG9OMygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIHF1ZXJ5ID0gUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0ID90
IHdoZXJlIHsgZ3JhcGggP2cgeyAlMSBhID90IC4gfSAuIEZJTFRFUig/ZyE9JTIpIC4gfSIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAuYXJnKHN0YXRlbWVudC5zdWJqZWN0KCkudG9OMygpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMo
Y3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
b25zdCBRTGlzdDxTb3ByYW5vOjpOb2RlPiB0eXBlcyA9IGV4ZWN1dGVRdWVyeSggcXVlcnksIFNv
cHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsICkuaXRlcmF0ZUJpbmRpbmdzKDApLmFs
bE5vZGVzKCk7CisgICAgICAgICAgICBjb25zdCBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIGVy
cm9yID0gcGFyZW50TW9kZWwoKS0+cmVtb3ZlQWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQpOworICAg
ICAgICAgICAgaWYoIGVycm9yID09IFNvcHJhbm86OkVycm9yOjpFcnJvck5vbmUgKSB7CisgICAg
ICAgICAgICAgICAgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggc3RhdGVtZW50LnN1YmplY3Qo
KS51cmkoKSwgdHlwZXMgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBlcnJv
cjsKKyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHRoZSBzdWJqZWN0IGlz
IG5vdCBkZWZpbmVkIGJ1dCB0aGUgdHlwZSBpcyB3ZSBuZWVkIHRvIHVwZGF0ZSBzZXZlcmFsIHJl
c291cmNlcy4gVGhlcmUgaXMgbm8gd2F5IGFyb3VuZAorICAgICAgICAvLyBjYWxsaW5nIHJlbW92
ZUluZmVyZW5jZVN0YXRlbWVudHMoKSBmb3IgZWFjaCByZXNvdXJjZS4KKyAgICAgICAgLy8KKyAg
ICAgICAgZWxzZSBpZiggc3RhdGVtZW50Lm9iamVjdCgpLmlzVmFsaWQoKSApIHsKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGdldCB0aGUgcmVzb3VyY2VzIGJlZm9y
ZSBhY3R1YWxseSByZW1vdmluZyB0aGUgc3RhdGVtZW50cyBzaW5jZSBvdGhlcndpc2Ugd2UgbWln
aHQgbWlzcyB0aGVtCisgICAgICAgICAgICAvLworICAgICAgICAgICAgUVN0cmluZyBxdWVyeTsK
KyAgICAgICAgICAgIGlmKCBzdGF0ZW1lbnQuY29udGV4dCgpLmlzVmFsaWQoKSApIHsKKyAgICAg
ICAgICAgICAgICBxdWVyeSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCA/ciB3aGVyZSB7
IGdyYXBoICUyIHsgP3IgYSAlMSAuIH0gLiB9IikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5h
cmcoc3RhdGVtZW50Lm9iamVjdCgpLnRvTjMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGVtZW50LmNvbnRleHQoKS50b04zKCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcXVlcnkgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJz
ZWxlY3QgP3Igd2hlcmUgeyBncmFwaCA/ZyB7ID9yIGEgJTEgLiB9IC4gRklMVEVSKD9nIT0lMikg
LiB9IikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoc3RhdGVtZW50Lm9iamVjdCgpLnRv
TjMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZTo6cmVzb3Vy
Y2VUb04zKGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY29uc3QgUUxpc3Q8U29wcmFubzo6Tm9kZT4gcmVzb3VyY2VzID0gZXhlY3V0ZVF1ZXJ5
KCBxdWVyeSwgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwgKS5pdGVyYXRlQmlu
ZGluZ3MoMCkuYWxsTm9kZXMoKTsKKyAgICAgICAgICAgIGNvbnN0IFNvcHJhbm86OkVycm9yOjpF
cnJvckNvZGUgZXJyb3IgPSBwYXJlbnRNb2RlbCgpLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHN0YXRl
bWVudCk7CisgICAgICAgICAgICBpZiggZXJyb3IgPT0gU29wcmFubzo6RXJyb3I6OkVycm9yTm9u
ZSApIHsKKyAgICAgICAgICAgICAgICBRX0ZPUkVBQ0goIGNvbnN0IFNvcHJhbm86Ok5vZGUmIHJl
cywgcmVzb3VyY2VzICkgeworICAgICAgICAgICAgICAgICAgICByZW1vdmVJbmZlcmVuY2VTdGF0
ZW1lbnRzKCByZXMudXJpKCksIHN0YXRlbWVudC5vYmplY3QoKS51cmkoKSApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIE5laXRoZXIgc3ViamVjdCBub3Igb2JqZWN0
IGFyZSBkZWZpbmVkCisgICAgICAgIC8vCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUUhh
c2g8UVVybCwgUUxpc3Q8UVVybD4gPiByZXNUeXBlSGFzaDsKKyAgICAgICAgICAgIFFTdHJpbmcg
cXVlcnk7CisgICAgICAgICAgICBpZiggc3RhdGVtZW50LmNvbnRleHQoKS5pc1ZhbGlkKCkgKSB7
CisgICAgICAgICAgICAgICAgcXVlcnkgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgZGlz
dGluY3QgP3IgP3Qgd2hlcmUgeyBncmFwaCAlMSB7ID9yIGEgP3QgLiB9IC4gfSIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAuYXJnKHN0YXRlbWVudC5jb250ZXh0KCkudG9OMygpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHF1ZXJ5ID0gUVN0
cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0IGRpc3RpbmN0ID9yID90IHdoZXJlIHsgZ3JhcGggP2cg
eyA/ciBhID90IC4gfSAuIEZJTFRFUig/ZyE9JTEpIC4gfSIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAuYXJnKFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyhjcmFwcHlJbmZlcmVuY2VDb250
ZXh0KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFNvcHJhbm86OlF1ZXJ5UmVzdWx0
SXRlcmF0b3IgaXQgPSBwYXJlbnRNb2RlbCgpLT5leGVjdXRlUXVlcnkoIHF1ZXJ5LCBTb3ByYW5v
OjpRdWVyeTo6UXVlcnlMYW5ndWFnZVNwYXJxbCApOworICAgICAgICAgICAgd2hpbGUoIGl0Lm5l
eHQoKSApIHsKKyAgICAgICAgICAgICAgICByZXNUeXBlSGFzaFtpdFsiciJdLnVyaSgpXS5hcHBl
bmQoIGl0WyJ0Il0udXJpKCkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IFNv
cHJhbm86OkVycm9yOjpFcnJvckNvZGUgZXJyb3IgPSBwYXJlbnRNb2RlbCgpLT5yZW1vdmVBbGxT
dGF0ZW1lbnRzKHN0YXRlbWVudCk7CisgICAgICAgICAgICBpZiggZXJyb3IgPT0gU29wcmFubzo6
RXJyb3I6OkVycm9yTm9uZSApIHsKKyAgICAgICAgICAgICAgICBRSGFzaDxRVXJsLCBRTGlzdDxR
VXJsPiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSByZXNUeXBlSGFzaC5jb25zdEVuZCgpOworICAg
ICAgICAgICAgICAgIGZvciggUUhhc2g8UVVybCwgUUxpc3Q8UVVybD4gPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSByZXNUeXBlSGFzaC5jb25zdEJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggaXQua2V5KCksIGl0
LnZhbHVlKCkgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gZXJyb3I7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJl
dHVybiBwYXJlbnRNb2RlbCgpLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHN0YXRlbWVudCk7CisgICAg
fQorfQorCitRVXJsIENyYXBweUluZmVyZW5jZXIyOjpjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZC0+bV9pbmZlcmVuY2VDb250ZXh0OworfQorCit2b2lkIENy
YXBweUluZmVyZW5jZXIyOjp1cGRhdGVJbmZlcmVuY2VJbmRleCgpCit7CisgICAga0RlYnVnKCk7
CisKKyAgICBRTXV0ZXhMb2NrZXIgbG9jayggJmQtPm1fbXV0ZXggKTsKKworICAgIC8vIEJ1aWxk
IHN1cGVyY2xhc3NlcyBoYXNoCisgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorCisgICAgLy8gY2xlYXIgY2FjaGUKKyAgICBkLT5tX3N1cGVyQ2xh
c3Nlcy5jbGVhcigpOworCisgICAgLy8gY2FjaGUgc3ViQ2xhc3NPZiByZWxhdGlvbnMgKG9ubHkg
dGhlIG9yaWdpbmFsIG9uZXMpCisgICAgUU11bHRpSGFzaDxRVXJsLCBRVXJsPiByZGZzU3ViQ2xh
c3NSZWxhdGlvbnM7CisgICAgU29wcmFubzo6UXVlcnlSZXN1bHRJdGVyYXRvciBpdCA9IGV4ZWN1
dGVRdWVyeSggUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0ID94ID95IHdoZXJlIHsgZ3JhcGgg
P2cgeyA/eCAlMSA/eSAuIH0gLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRklMVEVSKD9nICE9IDx1cm46
Y3JhcHB5aW5mZXJlbmNlOmluZmVycmVkdHJpcGxlcz4pIC4gIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZJ
TFRFUig/eCE9P3kpIC4gfSIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC5hcmcoIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpICkgKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpRdWVyeTo6UXVlcnlM
YW5ndWFnZVNwYXJxbCApOworICAgIHdoaWxlICggaXQubmV4dCgpICkgeworICAgICAgICByZGZz
U3ViQ2xhc3NSZWxhdGlvbnMuaW5zZXJ0KCBpdFsieCJdLnVyaSgpLCBpdFsieSJdLnVyaSgpICk7
CisgICAgfQorCisgICAgLy8gY29tcGxldGUgdGhlIG1hcCBvZiBzdXBlciBjbGFzc2VzCisgICAg
UV9GT1JFQUNIKCBjb25zdCBRVXJsJiB0eXBlLCByZGZzU3ViQ2xhc3NSZWxhdGlvbnMua2V5cygp
ICkgeworICAgICAgICBRU2V0PFFVcmw+IHZpc2l0ZWRDbGFzc2VzOworICAgICAgICBkLT5idWls
ZFN1cGVyQ2xhc3Nlc0hhc2goIHR5cGUsIHZpc2l0ZWRDbGFzc2VzLCByZGZzU3ViQ2xhc3NSZWxh
dGlvbnMgKTsKKyAgICB9CisKKyAgICAvLyBnZXQgdGhlIGNsYXNzZXMgdGhhdCBkbyBub3QgaGF2
ZSBhbnkgcGFyZW50IGNsYXNzCisgICAgaXQgPSBleGVjdXRlUXVlcnkoIFFTdHJpbmc6OmZyb21M
YXRpbjEoInNlbGVjdCA/YyB3aGVyZSB7ID9jIGEgJTEgLiBPUFRJT05BTCB7ID9jICUyID9wIC4g
fSAuIEZJTFRFUighQk9VTkQoP3ApKSAuIH0iICkKKyAgICAgICAgICAgICAgICAgICAgICAuYXJn
KCBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6
OkNsYXNzKCkgKSApCisgICAgICAgICAgICAgICAgICAgICAgLmFyZyggU29wcmFubzo6Tm9kZTo6
cmVzb3VyY2VUb04zKCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCkgKSAp
LAorICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3Bh
cnFsICk7CisgICAgd2hpbGUgKCBpdC5uZXh0KCkgKSB7CisgICAgICAgIGQtPm1fc3VwZXJDbGFz
c2VzLmluc2VydCggaXRbImMiXS51cmkoKSwgUVNldDxRVXJsPigpICk7CisgICAgfQorCisgICAg
Ly8gYWRkIHJkZnM6UmVzb3VyY2UgYXMgcGFyZW50IGZvciBhbGwgY2xhc3NlcworICAgIFFNdXRh
YmxlSGFzaEl0ZXJhdG9yPFFVcmwsIFFTZXQ8UVVybD4gPiByZGZzUmVzSXQoIGQtPm1fc3VwZXJD
bGFzc2VzICk7CisgICAgd2hpbGUoIHJkZnNSZXNJdC5oYXNOZXh0KCkgKSB7CisgICAgICAgIHJk
ZnNSZXNJdC5uZXh0KCk7CisgICAgICAgIHJkZnNSZXNJdC52YWx1ZSgpLmluc2VydChTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKTsKKyAgICB9CisKKyAgICAvLyBCdWlsZCB2
aXNpYmlsaXR5IHRyZWUKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CisgICAgZC0+bV90eXBlVmlzaWJpbGl0eVRyZWUtPnJlYnVpbGRUcmVlKCk7
CisKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gY291bnQgZm9yIGRlYnVnZ2luZworICAgIGludCBj
bnQgPSAwOworICAgIGZvciggUUhhc2g8UVVybCwgUVNldDxRVXJsPiA+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGQtPm1fc3VwZXJDbGFzc2VzLmNvbnN0QmVnaW4oKTsKKyAgICAgICAgIGl0ICE9IGQt
Pm1fc3VwZXJDbGFzc2VzLmNvbnN0RW5kKCk7ICsraXQgKSB7CisgICAgICAgIGtEZWJ1ZygpIDw8
IGl0LmtleSgpIDw8ICItPiIgPDwgaXQudmFsdWUoKTsKKyAgICAgICAgY250ICs9IGl0LnZhbHVl
KCkuY291bnQoKTsKKyAgICB9CisgICAga0RlYnVnKCkgPDwgIk51bWJlciBvZiBjbGFzc2VzOiAg
ICAgICAgICAgIiA8PCBkLT5tX3N1cGVyQ2xhc3Nlcy5jb3VudCgpOworICAgIGtEZWJ1ZygpIDw8
ICJOdW1iZXIgb2Ygc3ViY2xhc3MgcmVsYXRpb25zOiIgPDwgY250OworI2VuZGlmCit9CisKK3Zv
aWQgQ3JhcHB5SW5mZXJlbmNlcjI6OnVwZGF0ZUFsbFJlc291cmNlcygpCit7CisgICAga0RlYnVn
KCk7CisgICAgaWYoICFkLT5tX3VwZGF0ZUFsbFJlc291cmNlc1RocmVhZCApIHsKKyAgICAgICAg
ZC0+bV91cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQgPSBuZXcgVXBkYXRlQWxsUmVzb3VyY2VzVGhy
ZWFkKHRoaXMpOworICAgICAgICBjb25uZWN0KGQtPm1fdXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFk
LCBTSUdOQUwoZmluaXNoZWQoKSksIHRoaXMsIFNJR05BTChhbGxSZXNvdXJjZXNVcGRhdGVkKCkp
KTsKKyAgICB9CisgICAgZC0+bV91cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQtPnN0YXJ0KCk7Cit9
CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6OmFkZEluZmVyZW5jZVN0YXRlbWVudHMoIGNvbnN0
IFFVcmwmIHJlc291cmNlLCBjb25zdCBRVXJsJiB0eXBlICkKK3sKKyAgICByZXR1cm4gYWRkSW5m
ZXJlbmNlU3RhdGVtZW50cyggcmVzb3VyY2UsIFFTZXQ8UVVybD4oKSA8PCB0eXBlICk7Cit9CisK
K3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6OmFkZEluZmVyZW5jZVN0YXRlbWVudHMoIGNvbnN0IFFV
cmwmIHJlc291cmNlLCBjb25zdCBRU2V0PFFVcmw+JiB0eXBlcyApCit7CisgICAgLy8gYWRkIG1p
c3NpbmcgdHlwZXMKKyAgICBib29sIGhhdmVWaXNpYmxlVHlwZSA9IGZhbHNlOworICAgIFFTZXQ8
UVVybD4gc3VwZXJUeXBlczsKKyAgICBRX0ZPUkVBQ0goIGNvbnN0IFFVcmwmIHR5cGUsIHR5cGVz
ICkgeworICAgICAgICBzdXBlclR5cGVzICs9IGQtPnN1cGVyQ2xhc3Nlcyh0eXBlKTsKKyAgICAg
ICAgaWYoICFoYXZlVmlzaWJsZVR5cGUgJiYgZC0+bV90eXBlVmlzaWJpbGl0eVRyZWUtPmlzVmlz
aWJsZSh0eXBlKSApCisgICAgICAgICAgICBoYXZlVmlzaWJsZVR5cGUgPSB0cnVlOworICAgIH0K
KyAgICBRU2V0PFFVcmw+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzdXBlclR5cGVzLmNvbnN0RW5k
KCk7CisgICAgZm9yKCBRU2V0PFFVcmw+Ojpjb25zdF9pdGVyYXRvciB0eXBlSXQgPSBzdXBlclR5
cGVzLmNvbnN0QmVnaW4oKTsgdHlwZUl0ICE9IGVuZDsgKyt0eXBlSXQgKSB7CisgICAgICAgIHBh
cmVudE1vZGVsKCktPmFkZFN0YXRlbWVudChyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnR5cGVJdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSk7CisgICAgfQorCisg
ICAgLy8gdGhlIHZpc2liaWxpdHkgY2FuIG9ubHkgY2hhbmdlIGlmIHdlIGFkZCBhIHZpc2libGUg
dHlwZQorICAgIGlmKCBoYXZlVmlzaWJsZVR5cGUgKSB7CisgICAgICAgIHNldFZpc2liaWxpdHko
IHJlc291cmNlLCBWaXNpYmxlICk7CisgICAgfQorfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIy
OjpyZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKGNvbnN0IFFVcmwgJnJlc291cmNlLCBjb25zdCBR
VXJsICZ0eXBlKQoreworICAgIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIHJlc291cmNlLCBR
TGlzdDxRVXJsPigpIDw8IHR5cGUgKTsKK30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMjo6cmVt
b3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3QgUVVybCYgcmVzb3VyY2UsIGNvbnN0IFFMaXN0
PFNvcHJhbm86Ok5vZGU+JiB0eXBlcyApCit7CisgICAgUUxpc3Q8UVVybD4gdXJpczsKKyAgICBR
X0ZPUkVBQ0goIGNvbnN0IFNvcHJhbm86Ok5vZGUmIG5vZGUsIHR5cGVzICkKKyAgICAgICAgdXJp
cyA8PCBub2RlLnVyaSgpOworICAgIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIHJlc291cmNl
LCB1cmlzICk7Cit9CisKKy8vIEFsd2F5cyBjYWxsZWQgKmFmdGVyKiByZW1vdmluZyB0aGUgYWN0
dWFsIHN0YXRlbWVudHMKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6OnJlbW92ZUluZmVyZW5jZVN0
YXRlbWVudHMoY29uc3QgUVVybCAmcmVzb3VyY2UsIGNvbnN0IFFMaXN0PFFVcmw+ICZ0eXBlcykK
K3sKKyAgICAvLyB3ZSBjYW5ub3Qgc2ltcGx5IHJlbW92ZSBhbGwgc3VwZXIgdHlwZXMgc2luY2Ug
dGhlIHJlc291cmNlIG1pZ2h0IHN0aWxsIGhhdmUgdHlwZXMgdGhhdCBhcmUgc29tZXdoZXJlIGlu
IHRoYXQgaGllcmFyY2h5CisKKyAgICAvLyBkZXRlcm1pbmUgdGhlIHR5cGVzIHRoYXQgc2hvdWxk
IGJlIGluIHRoZSBkYXRhYmFzZSBub3cKKyAgICBjb25zdCBRU2V0PFFVcmw+IGNvcnJlY3RUeXBl
cyA9IGQtPnF1ZXJ5UmVzb3VyY2VUeXBlcyhyZXNvdXJjZSk7CisgICAgUVNldDxRVXJsPiBjb3Jy
ZWN0U3VwZXJUeXBlczsKKyAgICBRX0ZPUkVBQ0goIGNvbnN0IFFVcmwmIHR5cGUsIGNvcnJlY3RU
eXBlcyApIHsKKyAgICAgICAgY29ycmVjdFN1cGVyVHlwZXMgKz0gZC0+c3VwZXJDbGFzc2VzKHR5
cGUpOworICAgIH0KKworICAgIC8vIG5vdyBjb21wYXJlIHRoYXQgbGlzdCB3aXRoIHRoZSBvbmVz
IHRoYXQgd2UgY291bGQgcmVtb3ZlCisgICAgUVNldDxRVXJsPiB0eXBlc1RvUmVtb3ZlOworICAg
IFFfRk9SRUFDSCggY29uc3QgUVVybCYgdHlwZSwgUVNldDxRVXJsPjo6ZnJvbUxpc3QodHlwZXMp
ICkKKyAgICAgICAgdHlwZXNUb1JlbW92ZSArPSBkLT5zdXBlckNsYXNzZXModHlwZSk7CisgICAg
dHlwZXNUb1JlbW92ZSAtPSBjb3JyZWN0U3VwZXJUeXBlczsKKworICAgIGJvb2wgaGF2ZVZpc2li
bGVUeXBlID0gZmFsc2U7CisgICAgUV9GT1JFQUNIKCBjb25zdCBRVXJsJiB0eXBlVG9SZW1vdmUs
IHR5cGVzVG9SZW1vdmUgKSB7CisgICAgICAgIGlmKCAhaGF2ZVZpc2libGVUeXBlICYmIGQtPm1f
dHlwZVZpc2liaWxpdHlUcmVlLT5pc1Zpc2libGUodHlwZVRvUmVtb3ZlKSApCisgICAgICAgICAg
ICBoYXZlVmlzaWJsZVR5cGUgPSB0cnVlOworICAgICAgICBwYXJlbnRNb2RlbCgpLT5yZW1vdmVT
dGF0ZW1lbnQocmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGVUb1JlbW92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSk7CisgICAgfQorCisgICAg
Ly8gcmVtb3ZlIHRoZSB2aXNpYmlsaXR5IGlmIG5lY2Vzc2FyeQorICAgIC8vIG9ubHkgYmUgcmVt
b3ZpbmcgdmlzaWJsZSB0eXBlcyB3ZSBjYW4gY2hhbmdlIHRoZSBhY3R1YWwgdmlzaWJpbGl0eQor
ICAgIGlmKCBoYXZlVmlzaWJsZVR5cGUgKSB7CisgICAgICAgIHNldFZpc2liaWxpdHkoIHJlc291
cmNlLCBjb3JyZWN0VHlwZXMuaXNFbXB0eSgpID8gVW5kZWZpbmVkVmlzaWJpbGl0eSA6ICggZC0+
aXNWaXNpYmxlRnJvbVR5cGVzKGNvcnJlY3RUeXBlcykgPyBWaXNpYmxlIDogTm9uVmlzaWJsZSAp
ICk7CisgICAgfQorfQorCit2b2lkIENyYXBweUluZmVyZW5jZXIyOjpzZXRWaXNpYmlsaXR5KGNv
bnN0IFFVcmwgJnJlc291cmNlLCBWaXNpYmlsaXR5IHZpc2liaWxpdHkpCit7CisgICAgLy8gd2Ug
dXNlIGFuIGludGVnZXIgaW5zdGVhZCBvZiBhIGJvb2xlYW4gZm9yIHBlcmZvcm1hbmNlIHJlYXNv
bnM6IHZpcnR1b3NvIGRvZXMgbm90IHN1cHBvcnQgYm9vbCBhbmQgU29wcmFubyBjb252ZXJ0cyB0
aGVtIHRvIHN0cmluZ3MKKyAgICBpZiggdmlzaWJpbGl0eSA9PSBWaXNpYmxlICkgeworICAgICAg
ICBwYXJlbnRNb2RlbCgpLT5yZW1vdmVTdGF0ZW1lbnQocmVzb3VyY2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJW
aXNpYmxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5v
OjpMaXRlcmFsVmFsdWUoMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpOworICAgICAgICBwYXJlbnRNb2RlbCgpLT5hZGRT
dGF0ZW1lbnQocmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpMaXRlcmFsVmFsdWUoMSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpOworICAg
IH0KKyAgICBlbHNlIGlmKCB2aXNpYmlsaXR5ID09IE5vblZpc2libGUgKSB7CisgICAgICAgIHBh
cmVudE1vZGVsKCktPnJlbW92ZVN0YXRlbWVudChyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2li
bGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86Okxp
dGVyYWxWYWx1ZSgxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy
YXBweUluZmVyZW5jZUNvbnRleHQoKSk7CisgICAgICAgIHBhcmVudE1vZGVsKCktPmFkZFN0YXRl
bWVudChyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJh
bm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNvcHJhbm86OkxpdGVyYWxWYWx1ZSgwKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSk7CisgICAgfQor
ICAgIGVsc2UgeworICAgICAgICBwYXJlbnRNb2RlbCgpLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKHJl
c291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJh
bm86OlZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpKTsKKyAg
ICB9Cit9CisKK2Jvb2wgQ3JhcHB5SW5mZXJlbmNlcjI6OmlzVHlwZVZpc2libGUoY29uc3QgUVVy
bCAmdHlwZVVyaSkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+bV90eXBlVmlzaWJpbGl0eVRyZWUt
PmlzVmlzaWJsZSggdHlwZVVyaSApOworfQorCisjaW5jbHVkZSAiY3JhcHB5aW5mZXJlbmNlcjIu
bW9jIgpJbmRleDogc2VydmljZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
c2VydmljZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmgJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2
aWNlcy9zdG9yYWdlL3JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDI3
IEBACiB9CiAKIGNsYXNzIEtKb2I7CitjbGFzcyBDcmFwcHlJbmZlcmVuY2VyMjsKIAogbmFtZXNw
YWNlIE5lcG9tdWsgewogCiAgICAgY2xhc3MgTW9kZWxDb3B5Sm9iOwogCisgICAgLyoqCisgICAg
ICogUmVwcmVzZW50cyB0aGUgbWFpbiBOZXBvbXVrIG1vZGVsLiBXaGlsZSBpdCBsb29rcyBhcyBp
ZiB0aGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4KKyAgICAgKiBvbmUgaW5zdGFuY2Ugb2YgUmVwb3Np
dG9yeSB0aGVyZSBpcyBvbmx5IHRoZSBvbmUuCisgICAgICoKKyAgICAgKiBSZXBvc2l0b3J5IGlz
IGJhc2VkIG9uIE5STE1vZGVsIG9ubHkgZm9yIHRoZSBxdWVyeSBwcmVmaXggZXhwYW5zaW9uIGZl
YXR1cmUuIEl0CisgICAgICogdXNlcyBhIFNvcHJhbm86OlV0aWxzOjpTaWduYWxDYWNoZU1vZGVs
IHRvIGNvbXBhY3QgdGhlIHNldmVyYWwgc3RhdGVtZW50c0FkZGVkKCkKKyAgICAgKiBhbmQgc3Rh
dGVtZW50c1JlbW92ZWQoKSBzaWduYWxzLCBhbmQgdXNlcyBDcmFwcHlJbmZlcmVuY2VyMiB0byBr
ZWVwIHJkZnM6c3ViQ2xhc3NPZgorICAgICAqIGFuZCBuYW86dXNlclZpc2libGUgaW5mZXJlbmNl
IHVwLXRvLWRhdGUuCisgICAgICoKKyAgICAgKiBPbiBjb25zdHJ1Y3Rpb24gaXQgY2hlY2tzIGZv
ciBhbmQgb3B0aW9uYWxseSBwZXJmb3JtcyBjb252ZXJzaW9uIGZyb20gYW4gb2xkIHJlcG9zaXRv
cnkKKyAgICAgKiB0eXBlIChwcmUtVmlydHVvc28gdGltZXMpIGFuZCBydW5zIENyYXBweUluZmVy
ZW5jZXIyOjp1cGRhdGVBbGxSZXNvdXJjZXMoKSB3aGljaCBpcworICAgICAqIHBlcmZvcm1lZCBp
biBhIHNlcGFyYXRlIHRocmVhZC4KKyAgICAgKgorICAgICAqIFxhdXRob3IgU2ViYXN0aWFuIFRy
dWVnIDx0cnVlZ0BrZGUub3JnPgorICAgICAqLwogICAgIGNsYXNzIFJlcG9zaXRvcnkgOiBwdWJs
aWMgU29wcmFubzo6TlJMTW9kZWwKICAgICB7CiAgICAgICAgIFFfT0JKRUNUCkBAIC01OSw5ICs3
NSwxMCBAQAogICAgICAgICAgKiBXaWxsIGVtaXQgdGhlIG9wZW5lZCBzaWduYWwKICAgICAgICAg
ICovCiAgICAgICAgIHZvaWQgb3BlbigpOwotCiAgICAgICAgIHZvaWQgY2xvc2UoKTsKIAorICAg
ICAgICB2b2lkIHVwZGF0ZUluZmVyZW5jZSgpOworCiAgICAgUV9TSUdOQUxTOgogICAgICAgICB2
b2lkIG9wZW5lZCggUmVwb3NpdG9yeSosIGJvb2wgc3VjY2VzcyApOwogCkBAIC03NSw2ICs5Miw3
IEBACiAgICAgICAgIFN0YXRlIG1fc3RhdGU7CiAKICAgICAgICAgU29wcmFubzo6TW9kZWwqIG1f
bW9kZWw7CisgICAgICAgIENyYXBweUluZmVyZW5jZXIyKiBtX2luZmVyZW5jZXI7CiAgICAgICAg
IGNvbnN0IFNvcHJhbm86OkJhY2tlbmQqIG1fYmFja2VuZDsKIAogICAgICAgICAvLyBvbmx5IHVz
ZWQgZHVyaW5nIG9wZW5pbmcKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2Uvb250b2xvZ3ltYW5hZ2Vy
bW9kZWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2Uvb250b2xvZ3ltYW5hZ2Vy
bW9kZWwuY3BwCShyZXZpc2lvbiAxMjEzOTQwKQorKysgc2VydmljZXMvc3RvcmFnZS9vbnRvbG9n
eW1hbmFnZXJtb2RlbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2lu
Y2x1ZGUgPFF0Q29yZS9RVXJsPgogI2luY2x1ZGUgPFF0Q29yZS9RRGF0ZVRpbWU+CisjaW5jbHVk
ZSA8UXRDb3JlL1FTY29wZWRQb2ludGVyPgogCiAjaW5jbHVkZSA8U29wcmFuby9CYWNrZW5kPgog
I2luY2x1ZGUgPFNvcHJhbm8vVmVyc2lvbj4KQEAgLTIyNSwyMyArMjI2LDYgQEAKICAgICAgICAg
dG1wTW9kZWwtPmFkZFN0YXRlbWVudCggU29wcmFubzo6U3RhdGVtZW50KCBkYXRhR3JhcGhVcmks
IFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6aGFzRGVmYXVsdE5hbWVzcGFjZSgpLCBMaXRlcmFs
VmFsdWUoIG5zLnRvU3RyaW5nKCkgKSwgbWV0YURhdGFHcmFwaFVyaSApICk7CiAjZW5kaWYKICAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBTaW1wbGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGNsYXNzLgot
ICAgICAqLwotICAgIGNsYXNzIE9iamVjdEdhcmJhZ2VDb2xsZWN0b3IKLSAgICB7Ci0gICAgcHVi
bGljOgotICAgICAgICBPYmplY3RHYXJiYWdlQ29sbGVjdG9yKCBRT2JqZWN0KiBvICkKLSAgICAg
ICAgICAgIDogbV9vYmplY3QoIG8gKSB7Ci0gICAgICAgIH0KLSAgICAgICAgfk9iamVjdEdhcmJh
Z2VDb2xsZWN0b3IoKSB7Ci0gICAgICAgICAgICBkZWxldGUgbV9vYmplY3Q7Ci0gICAgICAgIH0K
LQotICAgIHByaXZhdGU6Ci0gICAgICAgIFFPYmplY3QqIG1fb2JqZWN0OwotICAgIH07CiB9CiAK
IApAQCAtMzA4LDcgKzI5Miw3IEBACiAgICAgfQogCiAgICAgLy8gc28gd2UgZG8gbm90IGhhdmUg
dG8gY2FyZSBhYm91dCBkZWxldGluZyBvdXQgdG1wTW9kZWwgYW55bW9yZS4KLSAgICBPYmplY3RH
YXJiYWdlQ29sbGVjdG9yIG1vZGVsR2FyYmFnZUNvbGxlY3RvciggdG1wTW9kZWwgKTsKKyAgICBR
U2NvcGVkUG9pbnRlcjxTb3ByYW5vOjpNb2RlbD4gbW9kZWxHYXJiYWdlQ29sbGVjdG9yKCB0bXBN
b2RlbCApOwogCiAgICAgLy8gaW1wb3J0IHRoZSBkYXRhIGludG8gb3VyIHRtcCBtb2RlbAogICAg
IHdoaWxlICggZGF0YS5uZXh0KCkgKSB7CkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL2NyYXBweWlu
ZmVyZW5jZXIyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS9jcmFwcHlpbmZlcmVu
Y2VyMi5oCShyZXZpc2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFnZS9jcmFwcHlpbmZlcmVuY2Vy
Mi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBOZXBvbXVrIEtERSBwcm9qZWN0LgorICAgQ29weXJpZ2h0IChDKSAyMDEwIFNl
YmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9u
IDMsIG9yIGFueQorICAgbGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBieSB0aGUgbWVtYmVyc2hpcCBv
ZiBLREUgZS5WLiAob3IgaXRzCisgICBzdWNjZXNzb3IgYXBwcm92ZWQgYnkgdGhlIG1lbWJlcnNo
aXAgb2YgS0RFIGUuVi4pLCB3aGljaCBzaGFsbAorICAgYWN0IGFzIGEgcHJveHkgZGVmaW5lZCBp
biBTZWN0aW9uIDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNlLgorCisgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyov
CisKKyNpZm5kZWYgQ1JBUFBZSU5GRVJFTkNFUjJfSAorI2RlZmluZSBDUkFQUFlJTkZFUkVOQ0VS
Ml9ICisKKyNpbmNsdWRlIDxTb3ByYW5vL0ZpbHRlck1vZGVsPgorCisvKioKKyAqIFRoZSBzZWNv
bmQgdmVyc2lvbiBvZiB0aGUgY3JhcHB5IGluZmVyZW5jZXIgaXQgZXZlbiBjcmFwcGllciB0aGFu
IHRoZSBmaXJzdC4KKyAqIEl0IG9ubHkgZG9lcyByZGY6dHlwZSBpbmZlcmVuY2luZywgbm90aGlu
ZyBlbHNlLiBJbiB0aGUgbG9uZyBydW4gdGhpcyBpcyBub3QKKyAqIGVub3VnaCBidXQgZm9yIG5v
dyBpdCBpcyB0aGUgb25seSBraW5kIG9mIGluZmVyZW5jZSB3ZSB1c2UgaW4gTmVwb211ay4KKyAq
IFRodXMsIGl0IGlzIGVub3VnaCBhbmQgbWFrZXMgZm9yIG11Y2ggZmFzdGVyIHF1ZXJpZXMgdGhh
biB0aGUgZmlyc3QKKyAqIGNyYXBweSBpbmZlcmVuY2VyLgorICoKKyAqIFxhdXRob3IgU2ViYXN0
aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorICovCitjbGFzcyBDcmFwcHlJbmZlcmVuY2VyMiA6
IHB1YmxpYyBTb3ByYW5vOjpGaWx0ZXJNb2RlbAoreworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoK
KyAgICBDcmFwcHlJbmZlcmVuY2VyMihTb3ByYW5vOjpNb2RlbCogcGFyZW50ID0gMCk7CisgICAg
fkNyYXBweUluZmVyZW5jZXIyKCk7CisKKyAgICAvKioKKyAgICAgKiBccmVpbXBsIHRvIHVwZGF0
ZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzCisgICAgICovCisgICAgdm9pZCBzZXRQYXJlbnRNb2RlbCgg
U29wcmFubzo6TW9kZWwqIG1vZGVsICk7CisKKyAgICBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2Rl
IGFkZFN0YXRlbWVudCggY29uc3QgU29wcmFubzo6U3RhdGVtZW50JiBzdGF0ZW1lbnQgKTsKKyAg
ICBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIHJlbW92ZVN0YXRlbWVudCggY29uc3QgU29wcmFu
bzo6U3RhdGVtZW50JiBzdGF0ZW1lbnQgKTsKKyAgICBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2Rl
IHJlbW92ZUFsbFN0YXRlbWVudHMoIGNvbnN0IFNvcHJhbm86OlN0YXRlbWVudCYgc3RhdGVtZW50
ICk7CisKKyAgICB1c2luZyBTb3ByYW5vOjpGaWx0ZXJNb2RlbDo6YWRkU3RhdGVtZW50OworICAg
IHVzaW5nIFNvcHJhbm86OkZpbHRlck1vZGVsOjpyZW1vdmVTdGF0ZW1lbnQ7CisgICAgdXNpbmcg
U29wcmFubzo6RmlsdGVyTW9kZWw6OnJlbW92ZUFsbFN0YXRlbWVudHM7CisKKyAgICAvKioKKyAg
ICAgKiBBbGwgaW5mZXJyZWQgdHJpcGxlcyBhcmUgc3RvcmVkIGluIHRoZSBvbmUgY3JhcHB5IGlu
ZmVyZW5jZSBncmFwaC4KKyAgICAgKiBUaHVzLCByZW1vdmluZyBpbmZlcmVuY2UgaXMgYXMgc2lt
cGxlIGFzIHJlbW92aW5nIHRoaXMgb25lIGdyYXBoLgorICAgICAqLworICAgIFFVcmwgY3JhcHB5
SW5mZXJlbmNlQ29udGV4dCgpIGNvbnN0OworCisgICAgYm9vbCBpc1R5cGVWaXNpYmxlKCBjb25z
dCBRVXJsJiB0eXBlVXJpICkgY29uc3Q7CisKK1FfU0lHTkFMUzoKKyAgICAvKioKKyAgICAgKiBF
bWl0dGVkIG9uY2UgYSBjYWxsIHRvIHVwZGF0ZUFsbFJlc291cmNlcygpIGhhcyBmaW5pc2hlZC4K
KyAgICAgKi8KKyAgICB2b2lkIGFsbFJlc291cmNlc1VwZGF0ZWQoKTsKKworcHVibGljIFFfU0xP
VFM6CisgICAgLyoqCisgICAgICogVXBkYXRlIHRoZSBpbnRlcm5hbCBtYXAgb2Ygc3VwZXIgdHlw
ZXMgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaAorICAgICAqIHR5cGUgc3RhdGVtZW50
cyBuZWVkIHRvIGJlIGFkZGVkIGFuZCByZW1vdmVkLiBJdCBtYWtlcyBzZW5zZSB0byBjYWxsIHRo
aXMKKyAgICAgKiB3aGVuIHRoZSBvbnRvbG9naWVzIGluIHRoZSBtb2RlbCBjaGFuZ2UuCisgICAg
ICovCisgICAgdm9pZCB1cGRhdGVJbmZlcmVuY2VJbmRleCgpOworCisgICAgLyoqCisgICAgICog
VXBkYXRlIGFsbCB0eXBlcyBvZiBhbGwgcmVzb3VyY2VzIGluIHRoZSBtb2RlbC4gVGhpcyBtZXRo
b2Qgd2lsbCBhZGQgc3VwZXJ0eXBlCisgICAgICogc3RhdGVtZW50cyBidXQgTk9UIHJlbW92ZSBh
bnkgc3VwZXJmbHVvdXMgc3RhdGVtZW50cy4gVG8gYWNoaWV2ZSB0aGUgbGF0dGVyIGNhbGwKKyAg
ICAgKiByZW1vdmVDb250ZXh0KGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSkgYmVmb3JlIGNhbGxp
bmcgdGhpcyBtZXRob2QuCisgICAgICovCisgICAgdm9pZCB1cGRhdGVBbGxSZXNvdXJjZXMoKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIGFkZEluZmVyZW5jZVN0YXRlbWVudHMoIGNvbnN0IFFVcmwm
IHJlc291cmNlLCBjb25zdCBRVXJsJiB0eXBlICk7CisgICAgdm9pZCBhZGRJbmZlcmVuY2VTdGF0
ZW1lbnRzKCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUVNldDxRVXJsPiYgdHlwZXMgKTsK
KyAgICB2b2lkIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIGNvbnN0IFFVcmwmIHJlc291cmNl
LCBjb25zdCBRVXJsJiB0eXBlICk7CisgICAgdm9pZCByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRz
KCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUUxpc3Q8UVVybD4mIHR5cGVzICk7CisgICAg
dm9pZCByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29u
c3QgUUxpc3Q8U29wcmFubzo6Tm9kZT4mIHR5cGVzICk7CisKKyAgICBlbnVtIFZpc2liaWxpdHkg
eworICAgICAgICBWaXNpYmxlLAorICAgICAgICBOb25WaXNpYmxlLAorICAgICAgICBVbmRlZmlu
ZWRWaXNpYmlsaXR5CisgICAgfTsKKworICAgIHZvaWQgc2V0VmlzaWJpbGl0eShjb25zdCBRVXJs
JiByZXNvdXJjZSwgVmlzaWJpbGl0eSB2aXNpYmlsaXR5KTsKKworICAgIGNsYXNzIFVwZGF0ZUFs
bFJlc291cmNlc1RocmVhZDsKKyAgICBjbGFzcyBQcml2YXRlOworICAgIFByaXZhdGUqIGNvbnN0
IGQ7Cit9OworCisjZW5kaWYgLy8gQ1JBUFBZSU5GRVJFTkNFUjJfSApJbmRleDogc2VydmljZXMv
c3RvcmFnZS9uZXBvbXVrY29yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS9u
ZXBvbXVrY29yZS5jcHAJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL25l
cG9tdWtjb3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsOSBAQAogICAgIG1fcmVw
b3NpdG9yeS0+c2V0RW5hYmxlUXVlcnlQcmVmaXhFeHBhbnNpb24oZmFsc2UpOwogICAgIG1fcmVw
b3NpdG9yeS0+c2V0RW5hYmxlUXVlcnlQcmVmaXhFeHBhbnNpb24odHJ1ZSk7CiAKKyAgICAvLyB0
aGUgZmlyc3QgdGltZSB0aGlzIGlzIGEgdmVyeSBsb25nIHByb2NlZHVyZS4gVGh1cywgd2UgZG8g
aXQgd2hpbGUgTmVwb211ayBpcyBhY3RpdmUgYWx0aG91Z2ggdGhlbiBzb21lIHF1ZXJpZXMgbWln
aHQgcmV0dXJuIGludmFsaWQgcmVzdWx0cworICAgIG1fcmVwb3NpdG9yeS0+dXBkYXRlSW5mZXJl
bmNlKCk7CisKICAgICBpZiAoICFtX2luaXRpYWxpemVkICkgewogICAgICAgICAvLyBhbmQgZmlu
YWxseSB3ZSBhcmUgZG9uZTogdGhlIHJlcG9zaXRvcnkgaXMgb25saW5lIGFuZCB0aGUgb250b2xv
Z2llcyBhcmUgbG9hZGVkLgogICAgICAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKSW5kZXg6IHNl
cnZpY2VzL3N0b3JhZ2UvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3Rv
cmFnZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTIxMzk0MCkKKysrIHNlcnZpY2VzL3N0b3Jh
Z2UvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE3LDYgKzE3LDggQEAKICAgb250
b2xvZ3ltYW5hZ2VybW9kZWwuY3BwCiAgIGdyYXBocmV0cmlldmVyLmNwcAogICBjcmFwcHlpbmZl
cmVuY2VyLmNwcAorICBjcmFwcHlpbmZlcmVuY2VyMi5jcHAKKyAgdHlwZXZpc2liaWxpdHl0cmVl
LmNwcAogICApCiAKIHNvcHJhbm9fYWRkX29udG9sb2d5KHN0b3JhZ2VfU1JDUwpAQCAtNTQsMyAr
NTYsNSBAQAogICBUQVJHRVRTIG5lcG9tdWtzdG9yYWdlCiAgIERFU1RJTkFUSU9OICR7UExVR0lO
X0lOU1RBTExfRElSfSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWRkX3N1
YmRpcmVjdG9yeSh0ZXN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56522</attachid>
            <date>2011-01-27 17:41:32 +0000</date>
            <delta_ts>2011-01-27 17:41:32 +0000</delta_ts>
            <desc>Updated patch which adds subtype inference (kdebase/runtime/nepomuk)</desc>
            <filename>kdebase-runtime-nepomuk-storage.diff</filename>
            <type>text/plain</type>
            <size>78545</size>
            <attacher name="Sebastian Trueg">trueg</attacher>
            
              <data encoding="base64">SW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvdGVzdC90eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS90ZXN0L3R5cGV2aXNpYmlsaXR5dHJlZXRlc3Qu
aAkocmV2aXNpb24gMCkKKysrIHNlcnZpY2VzL3N0b3JhZ2UvdGVzdC90eXBldmlzaWJpbGl0eXRy
ZWV0ZXN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgTmVwb211ayBLREUgcHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAx
MCBTZWJhc3RpYW4gVHJ1ZWcgPHRydWVnQGtkZS5vcmc+CisKKyAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgdmVy
c2lvbiAzLCBvciBhbnkKKyAgIGxhdGVyIHZlcnNpb24gYWNjZXB0ZWQgYnkgdGhlIG1lbWJlcnNo
aXAgb2YgS0RFIGUuVi4gKG9yIGl0cworICAgc3VjY2Vzc29yIGFwcHJvdmVkIGJ5IHRoZSBtZW1i
ZXJzaGlwIG9mIEtERSBlLlYuKSwgd2hpY2ggc2hhbGwKKyAgIGFjdCBhcyBhIHByb3h5IGRlZmlu
ZWQgaW4gU2VjdGlvbiA2IG9mIHZlcnNpb24gMyBvZiB0aGUgbGljZW5zZS4KKworICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnkuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u
CisqLworCisjaWZuZGVmIFRZUEVWSVNJQklMSVRZVFJFRVRFU1RfSAorI2RlZmluZSBUWVBFVklT
SUJJTElUWVRSRUVURVNUX0gKKworI2luY2x1ZGUgPFFPYmplY3Q+CisKK2NsYXNzIEtUZW1wRGly
OworY2xhc3MgVHlwZVZpc2liaWxpdHlUcmVlOworbmFtZXNwYWNlIFNvcHJhbm8geworY2xhc3Mg
TW9kZWw7Cit9CisKK2NsYXNzIFR5cGVWaXNpYmlsaXR5VHJlZVRlc3QgOiBwdWJsaWMgUU9iamVj
dAoreworICAgIFFfT0JKRUNUCisKK3ByaXZhdGUgUV9TTE9UUzoKKyAgICB2b2lkIGluaXRUZXN0
Q2FzZSgpOworICAgIHZvaWQgY2xlYW51cFRlc3RDYXNlKCk7CisgICAgdm9pZCBpbml0KCk7Cisg
ICAgdm9pZCB0ZXN0VHlwZVZpc2liaWxpdHlUcmVlKCk7CisKK3ByaXZhdGU6CisgICAgS1RlbXBE
aXIqIG1fc3RvcmFnZURpcjsKKyAgICBTb3ByYW5vOjpNb2RlbCogbV9tb2RlbDsKKyAgICBUeXBl
VmlzaWJpbGl0eVRyZWUqIG1fdHlwZVRyZWU7Cit9OworCisjZW5kaWYgLy8gVFlQRVZJU0lCSUxJ
VFlUUkVFVEVTVF9ICkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvY3JhcHB5aW5mZXJlbmNl
cjJ0ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvY3JhcHB5aW5m
ZXJlbmNlcjJ0ZXN0LmNwcAkocmV2aXNpb24gMCkKKysrIHNlcnZpY2VzL3N0b3JhZ2UvdGVzdC9j
cmFwcHlpbmZlcmVuY2VyMnRlc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5OSBAQAor
LyoKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBOZXBvbXVrIEtERSBwcm9qZWN0LgorICAg
Q29weXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKworICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFueQorICAgbGF0ZXIgdmVyc2lvbiBhY2NlcHRl
ZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiAob3IgaXRzCisgICBzdWNjZXNzb3IgYXBw
cm92ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4pLCB3aGljaCBzaGFsbAorICAgYWN0
IGFzIGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9uIDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNl
bnNlLgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu
dS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJjcmFwcHlpbmZlcmVuY2VyMnRlc3Qu
aCIKKyNpbmNsdWRlICIuLi9jcmFwcHlpbmZlcmVuY2VyMi5oIgorCisjaW5jbHVkZSA8UXRUZXN0
PgorI2luY2x1ZGUgInF0ZXN0X2tkZS5oIgorCisjaW5jbHVkZSA8U29wcmFuby9Tb3ByYW5vPgor
CisjaW5jbHVkZSA8a3RlbXBkaXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFNvcHJhbm87CisKK1Ff
REVDTEFSRV9NRVRBVFlQRShTb3ByYW5vOjpTdGF0ZW1lbnQpCisKK3ZvaWQgQ3JhcHB5SW5mZXJl
bmNlcjJUZXN0Ojppbml0VGVzdENhc2UoKQoreworICAgIHFSZWdpc3Rlck1ldGFUeXBlPFNvcHJh
bm86OlN0YXRlbWVudD4oKTsKKworICAgIC8vIHdlIG5lZWQgdG8gdXNlIGEgVmlydHVvc28gbW9k
ZWwgYXMgdG1wIG1vZGVsIHNpbmNlIHJlZGxhbmQgbWlzc2VzIGltcG9ydGFudCBTUEFSUUwgZmVh
dHVyZXMKKyAgICAvLyB0aGF0IGFyZSB1c2VkIGJ5IGxpYm5lcG9tdWsgYmVsb3cKKyAgICBjb25z
dCBTb3ByYW5vOjpCYWNrZW5kKiBiYWNrZW5kID0gU29wcmFubzo6UGx1Z2luTWFuYWdlcjo6aW5z
dGFuY2UoKS0+ZGlzY292ZXJCYWNrZW5kQnlOYW1lKCAidmlydHVvc29iYWNrZW5kIiApOworICAg
IFFWRVJJRlkoIGJhY2tlbmQgKTsKKyAgICBtX3N0b3JhZ2VEaXIgPSBuZXcgS1RlbXBEaXIoKTsK
KyAgICBtX2Jhc2VNb2RlbCA9IGJhY2tlbmQtPmNyZWF0ZU1vZGVsKCBTb3ByYW5vOjpCYWNrZW5k
U2V0dGluZ3MoKSA8PCBTb3ByYW5vOjpCYWNrZW5kU2V0dGluZyhTb3ByYW5vOjpCYWNrZW5kT3B0
aW9uU3RvcmFnZURpciwgbV9zdG9yYWdlRGlyLT5uYW1lKCkpICk7CisgICAgUVZFUklGWSggbV9i
YXNlTW9kZWwgKTsKKworICAgIG1fbW9kZWwgPSBuZXcgQ3JhcHB5SW5mZXJlbmNlcjIoIG1fYmFz
ZU1vZGVsICk7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0OjpjbGVhbnVwVGVzdENh
c2UoKQoreworICAgIGRlbGV0ZSBtX21vZGVsOworICAgIGRlbGV0ZSBtX2Jhc2VNb2RlbDsKKyAg
ICBkZWxldGUgbV9zdG9yYWdlRGlyOworfQorCisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0
Ojppbml0KCkKK3sKKyAgICBtX2Jhc2VNb2RlbC0+cmVtb3ZlQWxsU3RhdGVtZW50cygpOworCisg
ICAgLy8KKyAgICAvLyB3ZSBjcmVhdGUgb25lIGZha2Ugb250b2xvZ3kKKyAgICAvLworICAgIC8v
IEEKKyAgICAvLyB8LSBCCisgICAgLy8gICAgfC0gQyAtIGludmlzaWJsZQorICAgIC8vICAgICAg
IHwtIEQKKyAgICAvLyAgICAgICB8LSBFCisgICAgLy8KKyAgICAvLyBGCisgICAgLy8gfC0gRQor
ICAgIC8vCisgICAgLy8gTDEKKyAgICAvLyB8LSBMMgorICAgIC8vICAgIHwtIEwxCisgICAgLy8K
KyAgICBRVXJsIGdyYXBoKCJncmFwaDovb250byIpOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0
ZW1lbnQoIGdyYXBoLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6TlJMOjpPbnRvbG9neSgpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVsLT5h
ZGRTdGF0ZW1lbnQoIFFVcmwoIm5lcG9tdWs6L0ciKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Ojp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5STDo6SW5zdGFuY2VCYXNlKCksIGdyYXBo
ICk7CisKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9BIiksIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZT
OjpDbGFzcygpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwo
Im9udG86L0IiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0
YXRlbWVudCggUVVybCgib250bzovQyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX2Jh
c2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9EIiksIFNvcHJhbm86OlZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFw
aCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0UiKSwgU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6
OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgi
b250bzovRiIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKworICAgIG1fYmFzZU1vZGVsLT5hZGRT
dGF0ZW1lbnQoIFFVcmwoIm9udG86L0UiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6c3Vi
Q2xhc3NPZigpLCBRVXJsKCJvbnRvOi9DIiksIGdyYXBoICk7CisgICAgbV9iYXNlTW9kZWwtPmFk
ZFN0YXRlbWVudCggUVVybCgib250bzovQiIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpz
dWJDbGFzc09mKCksIFFVcmwoIm9udG86L0EiKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+
YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9DIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6
OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQiIpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVs
LT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0QiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Uzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9DIiksIGdyYXBoICk7CisgICAgbV9iYXNlTW9k
ZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0YiKSwgZ3JhcGggKTsKKworICAgIG1fbW9k
ZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovQyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpO
QU86OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZShmYWxzZSksIGdyYXBoICk7CisKKyAgICAv
LyB0aGUgbG9vcHkgY2xhc3NlcworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwo
Im9udG86L0wxIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fYmFzZU1vZGVsLT5hZGRT
dGF0ZW1lbnQoIFFVcmwoIm9udG86L0wxIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OnN1
YkNsYXNzT2YoKSwgUVVybCgib250bzovTDIiKSwgZ3JhcGggKTsKKyAgICBtX2Jhc2VNb2RlbC0+
YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9MMiIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAg
ICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9MMiIpLCBTb3ByYW5vOjpW
b2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0wxIiksIGdyYXBoICk7
CisKKyAgICBtX21vZGVsLT51cGRhdGVJbmZlcmVuY2VJbmRleCgpOworfQorCisvLyBtYWtlIHN1
cmUgb25seSB0aGUgb25lIHN0YXRlbWVudCBpcyBhZGRlZAordm9pZCBDcmFwcHlJbmZlcmVuY2Vy
MlRlc3Q6OnRlc3RBZGRBbnlTdGF0ZW1lbnQoKQoreworICAgIGNvbnN0IGludCBjbnQgPSBtX21v
ZGVsLT5zdGF0ZW1lbnRDb3VudCgpOworICAgIFN0YXRlbWVudCBzKCBRVXJsKCJuZXBvbXVrOi9B
IiksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5BTzo6aGFzVGFnKCksIFFVcmwoIm5lcG9tdWs6L1Qi
KSwgUVVybCgibmVwb211azovRyIpICk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+YWRkU3RhdGVt
ZW50KHMpKTsKKyAgICBRQ09NUEFSRShtX21vZGVsLT5zdGF0ZW1lbnRDb3VudCgpLCBjbnQrMSk7
CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc1N0YXRlbWVudChzKSk7Cit9CisKKy8vIG1h
a2Ugc3VyZSBhbGwgc3VwZXJjbGFzc2VzIGFyZSBhZGRlZCBhcyB0eXBlLCB0b28KK3ZvaWQgQ3Jh
cHB5SW5mZXJlbmNlcjJUZXN0Ojp0ZXN0QWRkVHlwZVN0YXRlbWVudCgpCit7CisgICAgaW50IGNu
dCA9IG1fbW9kZWwtPnN0YXRlbWVudENvdW50KCk7CisgICAgUVVybCByZXNBKCJuZXBvbXVrOi9B
Iik7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6
OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAg
UUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KzMpOworICAgIFFWRVJJRlko
bV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBl
KCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsKKyAgICBRVkVSSUZZ
KG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNl
clZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICBjbnQgPSBtX21vZGVsLT5zdGF0
ZW1lbnRDb3VudCgpOworICAgIFFVcmwgcmVzQigibmVwb211azovQiIpOworICAgIG1fbW9kZWwt
PmFkZFN0YXRlbWVudChyZXNCLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVy
bCgib250bzovQiIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOworICAgIFFDT01QQVJFKG1fbW9kZWwt
PnN0YXRlbWVudENvdW50KCksIGNudCs0KTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5z
QW55U3RhdGVtZW50KHJlc0IsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9C
IikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZv
Y2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKG1f
bW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgp
LCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKSk7CisgICAgUVZFUklGWSht
X21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpOQU86OnVzZXJW
aXNpYmxlKCksIExpdGVyYWxWYWx1ZSgxKSkpOworCisgICAgY250ID0gbV9tb2RlbC0+c3RhdGVt
ZW50Q291bnQoKTsKKyAgICBRVXJsIHJlc0MoIm5lcG9tdWs6L0MiKTsKKyAgICBtX21vZGVsLT5h
ZGRTdGF0ZW1lbnQocmVzQywgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwo
Im9udG86L0MiKSwgUVVybCgibmVwb211azovRyIpKTsKKyAgICBRQ09NUEFSRShtX21vZGVsLT5z
dGF0ZW1lbnRDb3VudCgpLCBjbnQrNCk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0Fu
eVN0YXRlbWVudChyZXNDLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQyIp
KSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNDLCBWb2Nh
YnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQiIpKSk7CisgICAgUVZFUklGWShtX21v
ZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNDLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwg
UVVybCgib250bzovQSIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRl
bWVudChyZXNDLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGUzo6UmVzb3VyY2UoKSkpOworCisgICAgY250ID0gbV9tb2RlbC0+c3RhdGVtZW50Q291bnQo
KTsKKyAgICBRVXJsIHJlc0QoIm5lcG9tdWs6L0QiKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1l
bnQocmVzRCwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0Ui
KSwgUVVybCgibmVwb211azovRyIpKTsKKyAgICBRQ09NUEFSRShtX21vZGVsLT5zdGF0ZW1lbnRD
b3VudCgpLCBjbnQrNyk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNELCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRiIpKSk7CisgICAg
UVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNELCBWb2NhYnVsYXJ5OjpS
REY6OnR5cGUoKSwgUVVybCgib250bzovRSIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250
YWluc0FueVN0YXRlbWVudChyZXNELCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250
bzovQyIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNE
LCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQiIpKSk7CisgICAgUVZFUklG
WShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNELCBWb2NhYnVsYXJ5OjpSREY6OnR5
cGUoKSwgUVVybCgib250bzovQSIpKSk7CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0Fu
eVN0YXRlbWVudChyZXNELCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNB
bnlTdGF0ZW1lbnQocmVzRCwgVm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFs
VmFsdWUoMSkpKTsKK30KKworLy8gbWFrZSBzdXJlIHRoZSBuZXcgcmVsYXRpb24gaXMgdGFrZW4g
aW50byBhY2NvdW50IHdpdGggdGhlIG5leHQgYWRkU3RhdGVtZW50Cit2b2lkIENyYXBweUluZmVy
ZW5jZXIyVGVzdDo6dGVzdEFkZFN1YkNsYXNzT2ZTdGF0ZW1lbnQoKQoreworICAgIFFFWFBFQ1Rf
RkFJTCgiIiwgIk5vdCBpbXBsZW1lbnRlZCB5ZXQiLCBBYm9ydCk7Cit9CisKKy8vIG1ha2Ugc3Vy
ZSBvbmx5IHRoZSBvbmUgc3RhdGVtZW50IGlzIHJlbW92ZWQKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNl
cjJUZXN0Ojp0ZXN0UmVtb3ZlQW55U3RhdGVtZW50KCkKK3sKK30KKworLy8gbWFrZSBzdXJlIHRo
ZSBhcHByb3ByaWF0ZSB0eXBlcyBhcmUgcmVtb3ZlZCwgdG9vCisvLyBjaGVjayAyIGNhc2VzOiAx
LiBvbmx5IHRoZSBvbmUgdHlwZSwgMi4gdHdvIHR5cGVzIHdpdGggaW50ZXJzZWN0aW5nIHN1cGVy
Y2xhc3Nlcwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRlc3RSZW1vdmVUeXBlU3RhdGVt
ZW50KCkKK3sKKyAgICBpbnQgY250ID0gbV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKTsKKyAgICBR
VXJsIHJlc0EoIm5lcG9tdWs6L0EiKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQSwg
U29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSwgUVVybCgi
bmVwb211azovRyIpKTsKKyAgICBtX21vZGVsLT5yZW1vdmVTdGF0ZW1lbnQocmVzQSwgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSwgUVVybCgibmVwb211
azovRyIpKTsKKyAgICBRQ09NUEFSRShtX21vZGVsLT5zdGF0ZW1lbnRDb3VudCgpLCBjbnQpOwor
ICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVs
LT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJRlkoIW1fbW9k
ZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2li
bGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAgICAvLyBhZGQgdHdvIHR5cGVzIHdpdGggaW50
ZXJzZWN0aW5nIHN1cGVyIHR5cGVzCisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNv
cHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9CIiksIFFVcmwoIm5l
cG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9FIiksIFFVcmwoIm5lcG9tdWs6L0ci
KSk7CisgICAgLy8gcmVtb3ZlIG9uZSBvZiB0aGVtCisgICAgbV9tb2RlbC0+cmVtb3ZlU3RhdGVt
ZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9C
IiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgLy8gbWFrZSBzdXJlIGFsbCBpcyB3ZWxsCisg
ICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KzcpOworICAgIFFWRVJJ
RlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0
eXBlKCksIFFVcmwoIm9udG86L0YiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNB
bnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0Ui
KSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9j
YWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0MiKSkpOworICAgIFFWRVJJRlkobV9t
b2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IFFVcmwoIm9udG86L0IiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0
ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSkpOwor
ICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFy
eTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNlKCkpKTsK
KyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxh
cnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7Cit9CisKKy8vIG1ha2Ug
c3VyZSB0aGUgcmVtb3ZlZCBzdWJjbGFzcyByZWxhdGlvbiBpcyB0YWtlbiBpbnRvIGFjY291bnQg
d2l0aCB0aGUgbmV4dCBhZGRTdGF0ZW1lbnQKKy8vIG1ha2Ugc3VyZSB0eXBlIHN0YXRlbWVudHMg
dGhhdCBhcmUgbm8gbG9uZ2VyIHZhbGlkIGFyZSByZW1vdmVkCit2b2lkIENyYXBweUluZmVyZW5j
ZXIyVGVzdDo6dGVzdFJlbW92ZVN1YkNsYXNzT2ZTdGF0ZW1lbnQoKQoreworICAgIFFFWFBFQ1Rf
RkFJTCgiIiwgIk5vdCBpbXBsZW1lbnRlZCB5ZXQiLCBBYm9ydCk7Cit9CisKKy8vIG1ha2Ugc3Vy
ZSB0aGUgY29ycmVzcG9uaW5nIHN0YXRlbWVudHMgYXJlIHJlbW92ZWQgYW5kIG5vdGhpbmcgZWxz
ZQorLy8gdGVzdCBhbGwgY29tYmluYXRpb25zIG9mIGludmFsaWQgYW5kIHZhbGlkIG5vZGVzIGlm
IHBvc3NpYmxlCit2b2lkIENyYXBweUluZmVyZW5jZXIyVGVzdDo6dGVzdFJlbW92ZUFsbFN0YXRl
bWVudHMoKQoreworICAgIC8vIDEuIHJlbW92ZSB0aGUgd2hvbGUgcmVzb3VyY2UKKyAgICBpbnQg
Y250ID0gbV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKTsKKyAgICBRVXJsIHJlc0EoIm5lcG9tdWs6
L0EiKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFy
eTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0EiKSwgUVVybCgibmVwb211azovRyIpKTsKKyAg
ICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6
bGFiZWwoKSwgTGl0ZXJhbFZhbHVlKFFMYXRpbjFTdHJpbmcoIkEiKSksIFFVcmwoIm5lcG9tdWs6
L0ciKSk7CisgICAgbV9tb2RlbC0+cmVtb3ZlQWxsU3RhdGVtZW50cyhyZXNBLCBOb2RlKCksIE5v
ZGUoKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KTsKKyAg
ICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBOb2RlKCksIE5v
ZGUoKSwgTm9kZSgpKSk7CisKKyAgICAvLyAyLiByZW1vdmUgYSB0eXBlIGZyb20gc2V2ZXJhbCBy
ZXNvdXJjZXMKKyAgICBRVXJsIHJlc0IoIm5lcG9tdWs6L0IiKTsKKyAgICBtX21vZGVsLT5hZGRT
dGF0ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9u
dG86L0EiKSwgUVVybCgibmVwb211azovRyIpKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQo
cmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0YiKSwg
UVVybCgibmVwb211azovRyIpKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQiwgU29w
cmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0IiKSwgUVVybCgibmVw
b211azovRyIpKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQiwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0YiKSwgUVVybCgibmVwb211azovRyIp
KTsKKyAgICBtX21vZGVsLT5yZW1vdmVBbGxTdGF0ZW1lbnRzKE5vZGUoKSwgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0YiKSk7CisgICAgUVZFUklGWShtX21v
ZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwg
U29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSkpOworICAgIFFWRVJJRlkobV9t
b2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCks
IFFVcmwoIm9udG86L0EiKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQW55U3Rh
dGVtZW50KHJlc0EsIFZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9GIikpKTsK
KyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKSk7
CisgICAgUVZFUklGWShtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVs
YXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQSIpKSk7CisgICAgUVZFUklGWShtX21vZGVs
LT5jb250YWluc0FueVN0YXRlbWVudChyZXNCLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVy
bCgib250bzovQiIpKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1l
bnQocmVzQiwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0YiKSkpOworICAg
IFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6
TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUoMSkpKTsKKyAgICBRVkVSSUZZKG1fbW9k
ZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0IsIFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2li
bGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisgICAgUUNPTVBBUkUobV9tb2RlbC0+c3RhdGVtZW50
Q291bnQoKSwgY250KzcpOworCisgICAgLy8gMy4gcmVtb3ZlIGFsbCB0eXBlcyBmcm9tIG9uZSBy
ZXNvdXJjZQorICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVs
YXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRSIpLCBRVXJsKCJuZXBvbXVrOi9HIikpOwor
ICAgIG1fbW9kZWwtPnJlbW92ZUFsbFN0YXRlbWVudHMocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFy
eTo6UkRGOjp0eXBlKCksIE5vZGUoKSwgUVVybCgibmVwb211azovRyIpKTsKKyAgICBRVkVSSUZZ
KCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3ByYW5vOjpWb2NhYnVsYXJ5
OjpSREY6OnR5cGUoKSwgTm9kZSgpKSk7CisgICAgUVZFUklGWSghbV9tb2RlbC0+Y29udGFpbnNB
bnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFs
VmFsdWUoMSkpKTsKKworICAgIC8vIDQuIHJlbW92ZSBhIGdyYXBoCisgICAgbV9tb2RlbC0+YWRk
U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJv
bnRvOi9FIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50
KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiks
IFFVcmwoIm5lcG9tdWs6L0cyIikpOworICAgIG1fbW9kZWwtPnJlbW92ZUNvbnRleHQoUVVybCgi
bmVwb211azovRyIpKTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVu
dChyZXNCLCBOb2RlKCksIE5vZGUoKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNB
bnlTdGF0ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwo
Im9udG86L0EiKSkpOworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50
KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9FIikp
KTsKKyAgICBRVkVSSUZZKCFtX21vZGVsLT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBTb3By
YW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovRCIpKSk7CisgICAgUVZF
UklGWSghbV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0MiKSkpOworICAgIFFWRVJJRlkoIW1fbW9k
ZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6
dHlwZSgpLCBRVXJsKCJvbnRvOi9CIikpKTsKKyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5z
QW55U3RhdGVtZW50KHJlc0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3By
YW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpKSk7CisgICAgUVZFUklGWSghbV9tb2Rl
bC0+Y29udGFpbnNDb250ZXh0KFFVcmwoIm5lcG9tdWs6L0ciKSkpOworfQorCisvLyBtYWtlIHN1
cmUgd2UgZG8gbm90IHJ1biBpbnRvIGFuIGVuZGxlc3MgbG9vcAordm9pZCBDcmFwcHlJbmZlcmVu
Y2VyMlRlc3Q6OnRlc3RDeWNsaWNTdWJDbGFzc1JlbGF0aW9uKCkKK3sKKyAgICBpbnQgY250ID0g
bV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKTsKKyAgICBRVXJsIHJlc0EoIm5lcG9tdWs6L0EiKTsK
KyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRG
Ojp0eXBlKCksIFFVcmwoIm9udG86L0wxIiksIFFVcmwoIm5lcG9tdWs6L0ciKSk7CisgICAgUUNP
TVBBUkUobV9tb2RlbC0+c3RhdGVtZW50Q291bnQoKSwgY250KzQpOyAvLyArNCBzaW5jZSBMMSBp
cyB0aGVyZSB0d2ljZTogdGhlIG9uZSB3ZSBhZGRlZCBhbmQgdGhlIHN1cGVyY2xhc3Mgb2YgTDIK
KyAgICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0EsIFZvY2FidWxh
cnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9MMSIpKSk7CisgICAgUVZFUklGWShtX21vZGVs
LT5jb250YWluc0FueVN0YXRlbWVudChyZXNBLCBWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVy
bCgib250bzovTDIiKSkpOworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0ZW1l
bnQocmVzQSwgVm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
RlM6OlJlc291cmNlKCkpKTsKK30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMlRlc3Q6OnRlc3RV
cGRhdGVBbGxSZXNvdXJjZXMoKQoreworICAgIC8vIHdlIGFkZCBhIGJ1bmNoIG9mIHN0YXRlbWVu
dHMgdG8gdGhlIGJhc2UgbW9kZWwgaW5zdGVhZCBvZiBnb2luZyB0aHJvdWdoIHRoZSBjcmFwcHkg
aW5mZXJlbmNlIG1vZGVsCisgICAgUVVybCByZXNBKCJuZXBvbXVrOi9BIik7CisgICAgUVVybCBy
ZXNCKCJuZXBvbXVrOi9CIik7CisgICAgUVVybCByZXNDKCJuZXBvbXVrOi9DIik7CisgICAgUVVy
bCByZXNEKCJuZXBvbXVrOi9EIik7CisKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KHJl
c0EsIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9BIiksIFFV
cmwoIm5lcG9tdWs6L0ciKSk7CisgICAgbV9iYXNlTW9kZWwtPmFkZFN0YXRlbWVudChyZXNCLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgUVVybCgib250bzovQiIpLCBRVXJsKCJu
ZXBvbXVrOi9HIikpOworICAgIG1fYmFzZU1vZGVsLT5hZGRTdGF0ZW1lbnQocmVzQywgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFFVcmwoIm9udG86L0MiKSwgUVVybCgibmVwb211
azovRyIpKTsKKyAgICBtX2Jhc2VNb2RlbC0+YWRkU3RhdGVtZW50KHJlc0QsIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERjo6dHlwZSgpLCBRVXJsKCJvbnRvOi9FIiksIFFVcmwoIm5lcG9tdWs6L0ci
KSk7CisKKyAgICBtX21vZGVsLT51cGRhdGVBbGxSZXNvdXJjZXMoKTsKKworICAgIC8vIHdhaXQg
Zm9yIHRoZSBhYm92ZSBjYWxsIHRvIGZpbmlzaAorICAgIFFFdmVudExvb3AgbG9vcDsKKyAgICBj
b25uZWN0KG1fbW9kZWwsIFNJR05BTChhbGxSZXNvdXJjZXNVcGRhdGVkKCkpLCAmbG9vcCwgU0xP
VChxdWl0KCkpKTsKKyAgICBsb29wLmV4ZWMoKTsKKworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29u
dGFpbnNBbnlTdGF0ZW1lbnQocmVzQSwgVm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBM
aXRlcmFsVmFsdWUoMSkpKTsKKworICAgIFFWRVJJRlkobV9tb2RlbC0+Y29udGFpbnNBbnlTdGF0
ZW1lbnQocmVzQiwgVm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUo
MSkpKTsKKworICAgIFFWRVJJRlkoIW1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0Ms
IFZvY2FidWxhcnk6Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7CisKKyAg
ICBRVkVSSUZZKG1fbW9kZWwtPmNvbnRhaW5zQW55U3RhdGVtZW50KHJlc0QsIFZvY2FidWxhcnk6
Ok5BTzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKDEpKSk7Cit9CisKK1FURVNUX0tERU1B
SU5fQ09SRShDcmFwcHlJbmZlcmVuY2VyMlRlc3QpCisKKyNpbmNsdWRlICJjcmFwcHlpbmZlcmVu
Y2VyMnRlc3QubW9jIgpJbmRleDogc2VydmljZXMvc3RvcmFnZS90ZXN0L2NyYXBweWluZmVyZW5j
ZXIydGVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvdGVzdC9jcmFwcHlpbmZl
cmVuY2VyMnRlc3QuaAkocmV2aXNpb24gMCkKKysrIHNlcnZpY2VzL3N0b3JhZ2UvdGVzdC9jcmFw
cHlpbmZlcmVuY2VyMnRlc3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBOZXBvbXVrIEtERSBwcm9qZWN0LgorICAgQ29weXJp
Z2h0IChDKSAyMDEwIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKworICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFueQorICAgbGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBieSB0
aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiAob3IgaXRzCisgICBzdWNjZXNzb3IgYXBwcm92ZWQg
YnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4pLCB3aGljaCBzaGFsbAorICAgYWN0IGFzIGEg
cHJveHkgZGVmaW5lZCBpbiBTZWN0aW9uIDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNlLgor
CisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv
bGljZW5zZXMvPi4KKyovCisKKyNpZm5kZWYgQ1JBUFBZSU5GRVJFTkNFUjJURVNUX0gKKyNkZWZp
bmUgQ1JBUFBZSU5GRVJFTkNFUjJURVNUX0gKKworI2luY2x1ZGUgPFFPYmplY3Q+CisKK2NsYXNz
IEtUZW1wRGlyOworY2xhc3MgQ3JhcHB5SW5mZXJlbmNlcjI7CituYW1lc3BhY2UgU29wcmFubyB7
CitjbGFzcyBNb2RlbDsKK30KKworY2xhc3MgQ3JhcHB5SW5mZXJlbmNlcjJUZXN0IDogcHVibGlj
IFFPYmplY3QKK3sKKyAgICBRX09CSkVDVAorCitwcml2YXRlIFFfU0xPVFM6CisgICAgdm9pZCBp
bml0VGVzdENhc2UoKTsKKyAgICB2b2lkIGNsZWFudXBUZXN0Q2FzZSgpOworICAgIHZvaWQgaW5p
dCgpOworICAgIHZvaWQgdGVzdEFkZEFueVN0YXRlbWVudCgpOworICAgIHZvaWQgdGVzdEFkZFR5
cGVTdGF0ZW1lbnQoKTsKKyAgICB2b2lkIHRlc3RBZGRTdWJDbGFzc09mU3RhdGVtZW50KCk7Cisg
ICAgdm9pZCB0ZXN0UmVtb3ZlQW55U3RhdGVtZW50KCk7CisgICAgdm9pZCB0ZXN0UmVtb3ZlVHlw
ZVN0YXRlbWVudCgpOworICAgIHZvaWQgdGVzdFJlbW92ZVN1YkNsYXNzT2ZTdGF0ZW1lbnQoKTsK
KyAgICB2b2lkIHRlc3RSZW1vdmVBbGxTdGF0ZW1lbnRzKCk7CisgICAgdm9pZCB0ZXN0Q3ljbGlj
U3ViQ2xhc3NSZWxhdGlvbigpOworICAgIHZvaWQgdGVzdFVwZGF0ZUFsbFJlc291cmNlcygpOwor
Citwcml2YXRlOgorICAgIEtUZW1wRGlyKiBtX3N0b3JhZ2VEaXI7CisgICAgU29wcmFubzo6TW9k
ZWwqIG1fYmFzZU1vZGVsOworICAgIENyYXBweUluZmVyZW5jZXIyKiBtX21vZGVsOworfTsKKwor
I2VuZGlmCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3Rlc3QvdHlwZXZpc2liaWxpdHl0cmVldGVz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gc2VydmljZXMvc3RvcmFnZS90ZXN0L3R5cGV2aXNpYmlsaXR5
dHJlZXRlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgc2VydmljZXMvc3RvcmFnZS90ZXN0L3R5cGV2
aXNpYmlsaXR5dHJlZXRlc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0MSBAQAorLyoK
KyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBOZXBvbXVrIEtERSBwcm9qZWN0LgorICAgQ29w
eXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKworICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFueQorICAgbGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBi
eSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiAob3IgaXRzCisgICBzdWNjZXNzb3IgYXBwcm92
ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4pLCB3aGljaCBzaGFsbAorICAgYWN0IGFz
IGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9uIDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNl
LgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v
cmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJ0eXBldmlzaWJpbGl0eXRyZWV0ZXN0Lmgi
CisjaW5jbHVkZSAiLi4vdHlwZXZpc2liaWxpdHl0cmVlLmgiCisKKyNpbmNsdWRlIDxRdFRlc3Q+
CisjaW5jbHVkZSAicXRlc3Rfa2RlLmgiCisKKyNpbmNsdWRlIDxTb3ByYW5vL1NvcHJhbm8+CisK
KyNpbmNsdWRlIDxrdGVtcGRpci5oPgorCit1c2luZyBuYW1lc3BhY2UgU29wcmFubzsKKwordm9p
ZCBUeXBlVmlzaWJpbGl0eVRyZWVUZXN0Ojppbml0VGVzdENhc2UoKQoreworICAgIC8vIHdlIG5l
ZWQgdG8gdXNlIGEgVmlydHVvc28gbW9kZWwgYXMgdG1wIG1vZGVsIHNpbmNlIHJlZGxhbmQgbWlz
c2VzIGltcG9ydGFudCBTUEFSUUwgZmVhdHVyZXMKKyAgICAvLyB0aGF0IGFyZSB1c2VkIGJ5IGxp
Ym5lcG9tdWsgYmVsb3cKKyAgICBjb25zdCBTb3ByYW5vOjpCYWNrZW5kKiBiYWNrZW5kID0gU29w
cmFubzo6UGx1Z2luTWFuYWdlcjo6aW5zdGFuY2UoKS0+ZGlzY292ZXJCYWNrZW5kQnlOYW1lKCAi
dmlydHVvc29iYWNrZW5kIiApOworICAgIFFWRVJJRlkoIGJhY2tlbmQgKTsKKyAgICBtX3N0b3Jh
Z2VEaXIgPSBuZXcgS1RlbXBEaXIoKTsKKyAgICBtX21vZGVsID0gYmFja2VuZC0+Y3JlYXRlTW9k
ZWwoIFNvcHJhbm86OkJhY2tlbmRTZXR0aW5ncygpIDw8IFNvcHJhbm86OkJhY2tlbmRTZXR0aW5n
KFNvcHJhbm86OkJhY2tlbmRPcHRpb25TdG9yYWdlRGlyLCBtX3N0b3JhZ2VEaXItPm5hbWUoKSkg
KTsKKyAgICBRVkVSSUZZKCBtX21vZGVsICk7CisKKyAgICBtX3R5cGVUcmVlID0gbmV3IFR5cGVW
aXNpYmlsaXR5VHJlZSggbV9tb2RlbCApOworfQorCit2b2lkIFR5cGVWaXNpYmlsaXR5VHJlZVRl
c3Q6OmNsZWFudXBUZXN0Q2FzZSgpCit7CisgICAgZGVsZXRlIG1fbW9kZWw7CisgICAgZGVsZXRl
IG1fdHlwZVRyZWU7CisgICAgZGVsZXRlIG1fc3RvcmFnZURpcjsKK30KKworCit2b2lkIFR5cGVW
aXNpYmlsaXR5VHJlZVRlc3Q6OmluaXQoKQoreworICAgIG1fbW9kZWwtPnJlbW92ZUFsbFN0YXRl
bWVudHMoKTsKKworICAgIC8vIHdlIGNyZWF0ZSBvbmUgZmFrZSBvbnRvbG9neQorICAgIC8vCisg
ICAgLy8gc2l0dWF0aW9ucyB3ZSBuZWVkIHRvIHRlc3Q6CisgICAgLy8gKiBjbGFzcyB0aGF0IGlz
IG1hcmtlZCB2aXNpYmxlIHNob3VsZCBzdGF5IHZpc2libGUKKyAgICAvLyAqIGNsYXNzIHRoYXQg
aXMgbWFya2VkIGludmlzaWJsZSBzaG91bGQgc3RheSBpbnZpc2libGUKKyAgICAvLyAqIG5vbi1t
YXJrZWQgc3ViY2xhc3Mgb2YgdmlzaWJsZSBzaG91bGQgYmUgdmlzaWJsZSwgdG9vCisgICAgLy8g
KiBub24tbWFya2VkIHN1YmNsYXNzIG9mIGludmlzaWJsZSBzaG91bGQgYmUgaW52aXNpYmxlLCB0
b28KKyAgICAvLyAqIG1hcmtlZCBzdWJjbGFzcyBzaG91bGQga2VlcCBpdHMgb3duIHZpc2libGl0
eSBhbmQgbm90IGluaGVyaXQgZnJvbSBwYXJlbnQKKyAgICAvLyAqIHdob2xlIGJyYW5jaCBzaG91
bGQgaW5oZXJpdCBmcm9tIHBhcmVudAorICAgIC8vICogaWYgb25lIHBhcmVudCBpcyB2aXNpYmxl
IHRoZSBjbGFzcyBpcyB2aXNpYmxlLCB0b28sIGV2ZW4gaWYgTiBvdGhlciBwYXJlbnRzIGFyZSBu
b3QKKyAgICAvLyAqIGlmIGFsbCBwYXJlbnRzIGFyZSBpbnZpc2libGUsIHRoZSBjbGFzcyBpcyBp
bnZpc2libGUsIGV2ZW4gaWYgaGlnaGVyIHVwIGluIHRoZSBicmFuY2ggYSBjbGFzcyBpcyB2aXNp
YmxlCisgICAgLy8gKiBwcm9wZXJseSBoYW5kbGUgbG9vcHMgKGFzIGluOiBkbyBub3QgcnVuIGlu
dG8gYW4gZW5kbGVzcyBsb29wKQorICAgIC8vCisgICAgLy8gQQorICAgIC8vIHwtIEIgLSBpbnZp
c2libGUKKyAgICAvLyAgICB8LSBDCisgICAgLy8gICAgICAgfC0gRCAtIHZpc2libGUKKyAgICAv
LyAgICAgICAgICB8LSBFCisgICAgLy8gICAgICAgICAgICAgfC0gRgorICAgIC8vICAgIHwtIEcK
KyAgICAvLworICAgIC8vIEFBIC0gaW52aXNpYmxlCisgICAgLy8gfCAtIEYKKyAgICAvLyB8IC0g
RworICAgIC8vCisgICAgLy8gWAorICAgIC8vIHwtIFkgLSBpbnZpc2libGUKKyAgICAvLyAgICB8
LSBaCisgICAgLy8gICAgICAgfC0gWAorCisgICAgUVVybCBncmFwaCgiZ3JhcGg6L29udG8iKTsK
KyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIGdyYXBoLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6TlJMOjpPbnRvbG9neSgpLCBncmFwaCAp
OworCisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9BIiksIFNvcHJhbm86
OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFz
cygpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovQiIp
LCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwo
Im9udG86L0MiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVt
ZW50KCBRVXJsKCJvbnRvOi9EIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBT
b3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fbW9kZWwt
PmFkZFN0YXRlbWVudCggUVVybCgib250bzovRSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6
OnR5cGUoKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAg
ICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0YiKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdy
YXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9HIiksIFNvcHJh
bm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpD
bGFzcygpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzov
QUEiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxh
cnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBR
VXJsKCJvbnRvOi9YIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlwZSgpLCBTb3ByYW5v
OjpWb2NhYnVsYXJ5OjpSREZTOjpDbGFzcygpLCBncmFwaCApOworICAgIG1fbW9kZWwtPmFkZFN0
YXRlbWVudCggUVVybCgib250bzovWSIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUo
KSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSwgZ3JhcGggKTsKKyAgICBtX21v
ZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L1oiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGOjp0eXBlKCksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OkNsYXNzKCksIGdyYXBoICk7
CisKKyAgICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0IiKSwgU29wcmFubzo6
Vm9jYWJ1bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9BIiksIGdyYXBoICk7
CisgICAgbV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9DIiksIFNvcHJhbm86OlZv
Y2FidWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovQiIpLCBncmFwaCApOwor
ICAgIG1fbW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRCIpLCBTb3ByYW5vOjpWb2Nh
YnVsYXJ5OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0MiKSwgZ3JhcGggKTsKKyAg
ICBtX21vZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0UiKSwgU29wcmFubzo6Vm9jYWJ1
bGFyeTo6UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9EIiksIGdyYXBoICk7CisgICAg
bV9tb2RlbC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9GIiksIFNvcHJhbm86OlZvY2FidWxh
cnk6OlJERlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovRSIpLCBncmFwaCApOworICAgIG1f
bW9kZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5
OjpSREZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0IiKSwgZ3JhcGggKTsKKyAgICBtX21v
ZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0YiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGUzo6c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9BQSIpLCBncmFwaCApOworICAgIG1fbW9k
ZWwtPmFkZFN0YXRlbWVudCggUVVybCgib250bzovRyIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpS
REZTOjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L0FBIiksIGdyYXBoICk7CisgICAgbV9tb2Rl
bC0+YWRkU3RhdGVtZW50KCBRVXJsKCJvbnRvOi9ZIiksIFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
RlM6OnN1YkNsYXNzT2YoKSwgUVVybCgib250bzovWCIpLCBncmFwaCApOworICAgIG1fbW9kZWwt
PmFkZFN0YXRlbWVudCggUVVybCgib250bzovWiIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZT
OjpzdWJDbGFzc09mKCksIFFVcmwoIm9udG86L1kiKSwgZ3JhcGggKTsKKyAgICBtX21vZGVsLT5h
ZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L1giKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6
c3ViQ2xhc3NPZigpLCBRVXJsKCJvbnRvOi9aIiksIGdyYXBoICk7CisKKyAgICBtX21vZGVsLT5h
ZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0IiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1
c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUoZmFsc2UpLCBncmFwaCApOworICAgIG1fbW9kZWwt
PmFkZFN0YXRlbWVudCggUVVybCgib250bzovRCIpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86
OnVzZXJWaXNpYmxlKCksIExpdGVyYWxWYWx1ZSh0cnVlKSwgZ3JhcGggKTsKKyAgICBtX21vZGVs
LT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L0FBIiksIFNvcHJhbm86OlZvY2FidWxhcnk6Ok5B
Tzo6dXNlclZpc2libGUoKSwgTGl0ZXJhbFZhbHVlKGZhbHNlKSwgZ3JhcGggKTsKKyAgICBtX21v
ZGVsLT5hZGRTdGF0ZW1lbnQoIFFVcmwoIm9udG86L1kiKSwgU29wcmFubzo6Vm9jYWJ1bGFyeTo6
TkFPOjp1c2VyVmlzaWJsZSgpLCBMaXRlcmFsVmFsdWUoZmFsc2UpLCBncmFwaCApOworCisgICAg
bV90eXBlVHJlZS0+cmVidWlsZFRyZWUoKTsKK30KKwordm9pZCBUeXBlVmlzaWJpbGl0eVRyZWVU
ZXN0Ojp0ZXN0VHlwZVZpc2liaWxpdHlUcmVlKCkKK3sKKyAgICBRVkVSSUZZKG1fdHlwZVRyZWUt
PmlzVmlzaWJsZShRVXJsKCJvbnRvOi9BIikpKTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5p
c1Zpc2libGUoUVVybCgib250bzovQiIpKSk7CisgICAgUVZFUklGWSghbV90eXBlVHJlZS0+aXNW
aXNpYmxlKFFVcmwoIm9udG86L0MiKSkpOworICAgIFFWRVJJRlkobV90eXBlVHJlZS0+aXNWaXNp
YmxlKFFVcmwoIm9udG86L0QiKSkpOworICAgIFFWRVJJRlkobV90eXBlVHJlZS0+aXNWaXNpYmxl
KFFVcmwoIm9udG86L0UiKSkpOworICAgIFFWRVJJRlkobV90eXBlVHJlZS0+aXNWaXNpYmxlKFFV
cmwoIm9udG86L0YiKSkpOworICAgIFFWRVJJRlkoIW1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJs
KCJvbnRvOi9HIikpKTsKKyAgICBRVkVSSUZZKCFtX3R5cGVUcmVlLT5pc1Zpc2libGUoUVVybCgi
b250bzovQUEiKSkpOworICAgIFFWRVJJRlkoIW1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJv
bnRvOi9YIikpKTsgLy8gYmVjYXVzZSBvbmx5IHRvcC1sZXZlbCBjbGFzc2VzIGluaGVyaXQgZnJv
bSByZGZzOlJlc291cmNlCisgICAgUVZFUklGWSghbV90eXBlVHJlZS0+aXNWaXNpYmxlKFFVcmwo
Im9udG86L1kiKSkpOworICAgIFFWRVJJRlkoIW1fdHlwZVRyZWUtPmlzVmlzaWJsZShRVXJsKCJv
bnRvOi9aIikpKTsKK30KKworUVRFU1RfS0RFTUFJTl9DT1JFKFR5cGVWaXNpYmlsaXR5VHJlZVRl
c3QpCisKKyNpbmNsdWRlICJ0eXBldmlzaWJpbGl0eXRyZWV0ZXN0Lm1vYyIKSW5kZXg6IHNlcnZp
Y2VzL3N0b3JhZ2UvdGVzdC9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9z
dG9yYWdlL3Rlc3QvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9zdG9y
YWdlL3Rlc3QvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKK3Nl
dCggRVhFQ1VUQUJMRV9PVVRQVVRfUEFUSCAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0gKQor
CitrZGU0X2FkZF91bml0X3Rlc3QoY3JhcHB5aW5mZXJlbmNlcjJ0ZXN0CisgIGNyYXBweWluZmVy
ZW5jZXIydGVzdC5jcHAKKyAgLi4vY3JhcHB5aW5mZXJlbmNlcjIuY3BwCisgIC4uL3R5cGV2aXNp
YmlsaXR5dHJlZS5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoY3JhcHB5aW5mZXJlbmNlcjJ0
ZXN0CisgICR7UVRfUVRURVNUX0xJQlJBUll9CisgICR7U09QUkFOT19MSUJSQVJJRVN9CisgICR7
S0RFNF9LREVDT1JFX0xJQlN9KQorCitrZGU0X2FkZF91bml0X3Rlc3QodHlwZXZpc2liaWxpdHl0
cmVldGVzdAorICB0eXBldmlzaWJpbGl0eXRyZWV0ZXN0LmNwcAorICAuLi90eXBldmlzaWJpbGl0
eXRyZWUuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHR5cGV2aXNpYmlsaXR5dHJlZXRlc3QK
KyAgJHtRVF9RVFRFU1RfTElCUkFSWX0KKyAgJHtTT1BSQU5PX0xJQlJBUklFU30KKyAgJHtLREU0
X0tERUNPUkVfTElCU30pCkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL29udG9sb2d5bG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL29udG9sb2d5bG9hZGVyLmNwcAkocmV2
aXNpb24gMTIxMzk0MCkKKysrIHNlcnZpY2VzL3N0b3JhZ2Uvb250b2xvZ3lsb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCwxNCArMjQsMTAgQEAKIAogI2luY2x1ZGUgPFNvcHJhbm8vR2xv
YmFsPgogI2luY2x1ZGUgPFNvcHJhbm8vTm9kZT4KLSNpbmNsdWRlIDxTb3ByYW5vL0xpdGVyYWxW
YWx1ZT4KICNpbmNsdWRlIDxTb3ByYW5vL01vZGVsPgogI2luY2x1ZGUgPFNvcHJhbm8vUGx1Z2lu
TWFuYWdlcj4KICNpbmNsdWRlIDxTb3ByYW5vL1N0YXRlbWVudEl0ZXJhdG9yPgotI2luY2x1ZGUg
PFNvcHJhbm8vUXVlcnlSZXN1bHRJdGVyYXRvcj4KICNpbmNsdWRlIDxTb3ByYW5vL1BhcnNlcj4K
LSNpbmNsdWRlIDxTb3ByYW5vL1ZvY2FidWxhcnkvTkFPPgotI2luY2x1ZGUgPFNvcHJhbm8vVm9j
YWJ1bGFyeS9SREZTPgogCiAjaW5jbHVkZSA8S0NvbmZpZz4KICNpbmNsdWRlIDxLQ29uZmlnR3Jv
dXA+CkBAIC0xODgsNyArMTg0LDYgQEAKICAgICBlbHNlIHsKICAgICAgICAgZC0+Zm9yY2VPbnRv
bG9neVVwZGF0ZSA9IGZhbHNlOwogICAgICAgICBkLT51cGRhdGVUaW1lci5zdG9wKCk7Ci0gICAg
ICAgIHVwZGF0ZVVzZXJWaXNpYmlsaXR5KCk7CiAgICAgICAgIGVtaXQgb250b2xvZ3lMb2FkaW5n
RmluaXNoZWQodGhpcyk7CiAgICAgfQogfQpAQCAtMjI1LDExNSArMjIwLDQgQEAKICAgICB9CiB9
CiAKLQotbmFtZXNwYWNlIHsKLSAgICBzdHJ1Y3QgVXNlclZpc2libGVOb2RlIHsKLSAgICAgICAg
VXNlclZpc2libGVOb2RlKCBjb25zdCBRVXJsJiByICkKLSAgICAgICAgICAgIDogdXJpKCByICks
Ci0gICAgICAgICAgICAgIHVzZXJWaXNpYmxlKCAwICkgewotICAgICAgICB9Ci0KLSAgICAgICAg
UVVybCB1cmk7Ci0gICAgICAgIGludCB1c2VyVmlzaWJsZTsKLSAgICAgICAgUUhhc2g8UVVybCwg
VXNlclZpc2libGVOb2RlKj4gcGFyZW50czsKLQotICAgICAgICAvKioKLSAgICAgICAgICogU2V0
IHRoZSB2YWx1ZSBvZiBuYW86dXNlclZpc2libGUgYW5kIGFkZCB0aGUgY29ycmVzcG9uZGluZwot
ICAgICAgICAgKiBzdGF0ZW1lbnQgdG8gdGhlIGxpc3Qgb2Ygc3RhdGVtZW50cyBpbiBjYXNlIHRo
ZSB2YWx1ZSB3YXMKLSAgICAgICAgICogbm90IGRlZmluZWQgeWV0LgotICAgICAgICAgKi8KLSAg
ICAgICAgaW50IHVwZGF0ZVVzZXJWaXNpYmlsaXR5KCBRTGlzdDxTb3ByYW5vOjpTdGF0ZW1lbnQ+
JiBzdGF0ZW1lbnRzICkgewotICAgICAgICAgICAgaWYgKCB1c2VyVmlzaWJsZSAhPSAwICkgewot
ICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJVc2VyIHZpc2liaWxpdHkgYWxyZWFkeSBzZXQi
IDw8IHVyaS50b1N0cmluZygpIDw8ICggdXNlclZpc2libGUgPT0gMSApOwotICAgICAgICAgICAg
ICAgIHJldHVybiB1c2VyVmlzaWJsZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIGlmICggIXBhcmVudHMuaXNFbXB0eSgpICkgewotICAgICAgICAg
ICAgICAgICAgICBmb3IgKCBRSGFzaDxRVXJsLCBVc2VyVmlzaWJsZU5vZGUqPjo6aXRlcmF0b3Ig
aXQgPSBwYXJlbnRzLmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ICE9IHBh
cmVudHMuZW5kKCk7ICsraXQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrRGVidWcoKSA8
PCB1cmkudG9TdHJpbmcoKSA8PCAiQ2hlY2tpbmcgcGFyZW50IGNsYXNzIiA8PCBpdC52YWx1ZSgp
LT51cmkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXQudmFsdWUo
KS0+dXBkYXRlVXNlclZpc2liaWxpdHkoIHN0YXRlbWVudHMgKSA9PSAtMSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1c2VyVmlzaWJsZSA9IC0xOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggdXNlclZp
c2libGUgPT0gMCApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byB2aXNpYmxl
Ci0gICAgICAgICAgICAgICAgICAgIHVzZXJWaXNpYmxlID0gMTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgc3RhdGVtZW50cyA8PCBTb3ByYW5vOjpTdGF0ZW1lbnQoIHVyaSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFu
bzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpMaXRlcmFsVmFsdWUoIHVzZXJW
aXNpYmxlID09IDEgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTmVwb211azo6Vm9jYWJ1bGFyeTo6S1VWTzo6bnJsT250b2xvZ3lHcmFwaCgpICk7
Ci0gICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgIlNldHRpbmcgbmFvOnVzZXJWaXNpYmxlIG9m
IiA8PCB1cmkudG9TdHJpbmcoKSA8PCAoIHVzZXJWaXNpYmxlID09IDEgKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdXNlclZpc2libGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
OwotfQotCi12b2lkIE5lcG9tdWs6Ok9udG9sb2d5TG9hZGVyOjp1cGRhdGVVc2VyVmlzaWJpbGl0
eSgpCi17Ci0gICAgLy8KLSAgICAvLyBidWlsZCBhIHRyZWUgb2YgYWxsIGNsYXNzZXMgYW5kIHBy
b3BlcnRpZXMKLSAgICAvLwotICAgIFFTdHJpbmcgcXVlcnkKLSAgICAgICAgPSBRU3RyaW5nOjpm
cm9tTGF0aW4xKCAic2VsZWN0IGRpc3RpbmN0ID9yID9wID92IHdoZXJlIHsgIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ7ID9yIGEgcmRmczpDbGFzcyAuICIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiT1BUSU9OQUwgeyA/ciByZGZzOnN1YkNsYXNzT2YgP3AgLiA/
cCBhIHJkZnM6Q2xhc3MgLiB9IC4gfSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IlVOSU9OICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyA/ciBhIHJkZjpQcm9w
ZXJ0eSAuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT1BUSU9OQUwgeyA/ciBy
ZGZzOnN1YlByb3BlcnR5T2YgP3AgLiA/cCBhIHJkZjpQcm9wZXJ0eSAuIH0gLiB9ICIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiT1BUSU9OQUwgeyA/ciAlMSA/diAuIH0gLiAiCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZJTFRFUig/ciE9cmRmczpSZXNvdXJjZSkg
LiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn0iICkKLSAgICAgICAgLmFyZygg
U29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVz
ZXJWaXNpYmxlKCkgKSApOwotICAgIGtEZWJ1ZygpIDw8IHF1ZXJ5OwotICAgIFFIYXNoPFFVcmws
IFVzZXJWaXNpYmxlTm9kZSo+IGFsbDsKLSAgICB7Ci0gICAgICAgIFNvcHJhbm86OlF1ZXJ5UmVz
dWx0SXRlcmF0b3IgaXQKLSAgICAgICAgICAgID0gZC0+bW9kZWwtPmV4ZWN1dGVRdWVyeSggcXVl
cnksIFNvcHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsICk7Ci0gICAgICAgIHdoaWxl
KCBpdC5uZXh0KCkgKSB7Ci0gICAgICAgICAgICBjb25zdCBRVXJsIHIgPSBpdFsiciJdLnVyaSgp
OwotICAgICAgICAgICAgY29uc3QgU29wcmFubzo6Tm9kZSBwID0gaXRbInAiXTsKLSAgICAgICAg
ICAgIGNvbnN0IFNvcHJhbm86Ok5vZGUgdiA9IGl0WyJ2Il07Ci0KLSAgICAgICAgICAgIGlmICgg
IWFsbC5jb250YWlucyggciApICkgewotICAgICAgICAgICAgICAgIFVzZXJWaXNpYmxlTm9kZSog
cl91dm4gPSBuZXcgVXNlclZpc2libGVOb2RlKCByICk7Ci0gICAgICAgICAgICAgICAgYWxsLmlu
c2VydCggciwgcl91dm4gKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKCB2LmlzTGl0
ZXJhbCgpICkKLSAgICAgICAgICAgICAgICBhbGxbcl0tPnVzZXJWaXNpYmxlID0gKHYubGl0ZXJh
bCgpLnRvQm9vbCgpID8gMSA6IC0xKTsKLSAgICAgICAgICAgIGlmICggcC5pc1Jlc291cmNlKCkg
JiYKLSAgICAgICAgICAgICAgICAgcC51cmkoKSAhPSByICYmCi0gICAgICAgICAgICAgICAgIHAu
dXJpKCkgIT0gU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSApIHsKLSAgICAg
ICAgICAgICAgICBpZiAoICFhbGwuY29udGFpbnMoIHAudXJpKCkgKSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgVXNlclZpc2libGVOb2RlKiBwX3V2biA9IG5ldyBVc2VyVmlzaWJsZU5vZGUoIHAu
dXJpKCkgKTsKLSAgICAgICAgICAgICAgICAgICAgYWxsLmluc2VydCggcC51cmkoKSwgcF91dm4g
KTsKLSAgICAgICAgICAgICAgICAgICAgYWxsW3JdLT5wYXJlbnRzLmluc2VydCggcC51cmkoKSwg
cF91dm4gKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGFsbFtyXS0+cGFyZW50cy5pbnNlcnQoIHAudXJpKCksIGFsbFtwLnVy
aSgpXSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vCi0gICAgLy8gY3JlYXRlIGEgbGlzdCBvZiBhbGwgc3RhdGVtZW50cyB3ZSBu
ZWVkIHRvIGFkZAotICAgIC8vCi0gICAgUUxpc3Q8U29wcmFubzo6U3RhdGVtZW50PiBzdGF0ZW1l
bnRzOwotICAgIGZvciAoIFFIYXNoPFFVcmwsIFVzZXJWaXNpYmxlTm9kZSo+OjppdGVyYXRvciBp
dCA9IGFsbC5iZWdpbigpOwotICAgICAgICAgIGl0ICE9IGFsbC5lbmQoKTsgKytpdCApIHsKLSAg
ICAgICAgaXQudmFsdWUoKS0+dXBkYXRlVXNlclZpc2liaWxpdHkoIHN0YXRlbWVudHMgKTsKLSAg
ICB9Ci0KLSAgICAvLwotICAgIC8vIGNsZWFudXAgYW5kIGFkZCBhbGwgdGhlIG5lY2Vzc2FyeSBz
dGF0ZW1lbnRzIHRvIHRoZSBtYWluIG1vZGVsCi0gICAgLy8KLSAgICBxRGVsZXRlQWxsKCBhbGwg
KTsKLSAgICBkLT5tb2RlbC0+YWRkU3RhdGVtZW50cyggc3RhdGVtZW50cyApOwotfQotCiAjaW5j
bHVkZSAib250b2xvZ3lsb2FkZXIubW9jIgpJbmRleDogc2VydmljZXMvc3RvcmFnZS9vbnRvbG9n
eWxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2Uvb250b2xvZ3lsb2FkZXIu
aAkocmV2aXNpb24gMTIxMzk0MCkKKysrIHNlcnZpY2VzL3N0b3JhZ2Uvb250b2xvZ3lsb2FkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTIgKzY1LDYgQEAKICAgICAgICAgICovCiAgICAgICAg
IHZvaWQgaW1wb3J0T250b2xvZ3koIGNvbnN0IFFTdHJpbmcmIHVybCApOwogCi0gICAgICAgIC8q
KgotICAgICAgICAgKiBDcmVhdGVzIG5hbzp1c2VyVmlzaWJsZSBwcm9wZXJ0aWVzIGZvciBhbGwg
Y2xhc3NlcyBhbmQgcHJvcGVydGllcwotICAgICAgICAgKiBhbmQgc3RvcmVzIHRoZW0gaW4gdGhl
IGt1dm8gbmFtZXNwYWNlLgotICAgICAgICAgKi8KLSAgICAgICAgdm9pZCB1cGRhdGVVc2VyVmlz
aWJpbGl0eSgpOwotCiAgICAgUV9TSUdOQUxTOgogICAgICAgICAvKioKICAgICAgICAgICogRW1p
dHRlZCBvbmNlIHRoZSB1cGRhdGUgb2YgdGhlIG9udG9sb2dpZXMgaXMgZG9uZS4KSW5kZXg6IHNl
cnZpY2VzL3N0b3JhZ2UvdHlwZXZpc2liaWxpdHl0cmVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2
aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmlsaXR5dHJlZS5jcHAJKHJldmlzaW9uIDApCisrKyBzZXJ2
aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmlsaXR5dHJlZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTkxIEBACisvKgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE5lcG9tdWsgS0RFIHBy
b2plY3QuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUu
b3JnPgorCisgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNpb24gMywgb3IgYW55CisgICBsYXRlciB2ZXJz
aW9uIGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlwIG9mIEtERSBlLlYuIChvciBpdHMKKyAgIHN1
Y2Nlc3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiksIHdoaWNoIHNo
YWxsCisgICBhY3QgYXMgYSBwcm94eSBkZWZpbmVkIGluIFNlY3Rpb24gNiBvZiB2ZXJzaW9uIDMg
b2YgdGhlIGxpY2Vuc2UuCisKKyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5LiAgSWYgbm90LCBzZWUgPGh0
dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKi8KKworI2luY2x1ZGUgInR5cGV2aXNpYmls
aXR5dHJlZS5oIgorCisjaW5jbHVkZSA8U29wcmFuby9Nb2RlbD4KKyNpbmNsdWRlIDxTb3ByYW5v
L1F1ZXJ5UmVzdWx0SXRlcmF0b3I+CisjaW5jbHVkZSA8U29wcmFuby9Ob2RlPgorI2luY2x1ZGUg
PFNvcHJhbm8vTGl0ZXJhbFZhbHVlPgorI2luY2x1ZGUgPFNvcHJhbm8vVm9jYWJ1bGFyeS9OQU8+
CisjaW5jbHVkZSA8U29wcmFuby9Wb2NhYnVsYXJ5L1JERlM+CisKKyNpbmNsdWRlIDxRdENvcmUv
UU11dGV4TG9ja2VyPgorCisjaW5jbHVkZSA8S0RlYnVnPgorCisKK2NsYXNzIFR5cGVWaXNpYmls
aXR5VHJlZTo6VHlwZVZpc2liaWxpdHlOb2RlCit7CitwdWJsaWM6CisgICAgVHlwZVZpc2liaWxp
dHlOb2RlKCBjb25zdCBRVXJsJiByICkKKyAgICAgICAgOiB1cmkoIHIgKSwKKyAgICAgICAgICB1
c2VyVmlzaWJsZSggMCApIHsKKyAgICB9CisKKyAgICBRVXJsIHVyaTsKKyAgICBpbnQgdXNlclZp
c2libGU7CisgICAgUVNldDxUeXBlVmlzaWJpbGl0eU5vZGUqPiBwYXJlbnRzOworCisgICAgLyoq
CisgICAgICogU2V0IHRoZSB2YWx1ZSBvZiBuYW86dXNlclZpc2libGUuCisgICAgICogQSBjbGFz
cyBpcyB2aXNpYmxlIGlmIGl0IGhhcyBhdCBsZWFzdCBvbmUgdmlzaWJsZSBkaXJlY3QgcGFyZW50
IGNsYXNzLgorICAgICAqLworICAgIGludCB1cGRhdGVVc2VyVmlzaWJpbGl0eSggUVNldDxUeXBl
VmlzaWJpbGl0eU5vZGUqPiYgdmlzaXRlZE5vZGVzICkgeworICAgICAgICBpZiAoIHVzZXJWaXNp
YmxlICE9IDAgKSB7CisgICAgICAgICAgICByZXR1cm4gdXNlclZpc2libGU7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoICFwYXJlbnRzLmlzRW1wdHkoKSApIHsK
KyAgICAgICAgICAgICAgICBmb3IgKCBRU2V0PFR5cGVWaXNpYmlsaXR5Tm9kZSo+OjppdGVyYXRv
ciBpdCA9IHBhcmVudHMuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgICAgIGl0ICE9IHBhcmVu
dHMuZW5kKCk7ICsraXQgKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGF2b2lkIGVuZGxlc3Mg
bG9vcHMKKyAgICAgICAgICAgICAgICAgICAgaWYoIHZpc2l0ZWROb2Rlcy5jb250YWlucygqaXQp
ICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICB2aXNpdGVkTm9kZXMuaW5zZXJ0KCAqaXQgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAo
Kml0KS0+dXBkYXRlVXNlclZpc2liaWxpdHkoIHZpc2l0ZWROb2RlcyApID09IDEgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB1c2VyVmlzaWJsZSA9IDE7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggdXNlclZpc2libGUgPT0gMCApIHsKKyAgICAg
ICAgICAgICAgICAvLyBkZWZhdWx0IHRvIGludmlzaWJsZQorICAgICAgICAgICAgICAgIHVzZXJW
aXNpYmxlID0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrRGVidWcoKSA8PCAiU2V0
dGluZyBuYW86dXNlclZpc2libGUgb2YiIDw8IHVyaS50b1N0cmluZygpIDw8ICggdXNlclZpc2li
bGUgPT0gMSApOworICAgICAgICAgICAgcmV0dXJuIHVzZXJWaXNpYmxlOworICAgICAgICB9Cisg
ICAgfQorfTsKKworVHlwZVZpc2liaWxpdHlUcmVlOjpUeXBlVmlzaWJpbGl0eVRyZWUoIFNvcHJh
bm86Ok1vZGVsKiBtb2RlbCApCisgICAgOiBtX21vZGVsKG1vZGVsKQoreworfQorCitUeXBlVmlz
aWJpbGl0eVRyZWU6On5UeXBlVmlzaWJpbGl0eVRyZWUoKQoreworICAgIFFNdXRleExvY2tlciBs
b2NrKCAmbV9tdXRleCApOworfQorCit2b2lkIFR5cGVWaXNpYmlsaXR5VHJlZTo6cmVidWlsZFRy
ZWUoKQoreworICAgIFFNdXRleExvY2tlciBsb2NrKCAmbV9tdXRleCApOworCisgICAgLy8gY2xl
YW51cAorICAgIG1fdmlzaWJpbGl0eUhhc2guY2xlYXIoKTsKKworICAgIC8vIHdlIGJ1aWxkIGEg
dGVtcG9yYXJ5IGhlbHBlciB0cmVlCisgICAgUUhhc2g8UVVybCwgVHlwZVZpc2liaWxpdHlOb2Rl
Kj4gdHJlZTsKKworICAgIGNvbnN0IFFTdHJpbmcgcXVlcnkKKyAgICAgICAgPSBRU3RyaW5nOjpm
cm9tTGF0aW4xKCAic2VsZWN0IGRpc3RpbmN0ID9yID9wID92IHdoZXJlIHsgIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICI/ciBhIHJkZnM6Q2xhc3MgLiAiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIk9QVElPTkFMIHsgP3IgcmRmczpzdWJDbGFzc09mID9wIC4gP3Ag
YSByZGZzOkNsYXNzIC4gfSAuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT1BU
SU9OQUwgeyA/ciAlMSA/diAuIH0gLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IkZJTFRFUig/ciE9cmRmczpSZXNvdXJjZSkgLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIn0iICkKKyAgICAgICAgICAgIC5hcmcoIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9O
MyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFPOjp1c2VyVmlzaWJsZSgpICkgKTsKKyAgICBrRGVi
dWcoKSA8PCBxdWVyeTsKKyAgICBTb3ByYW5vOjpRdWVyeVJlc3VsdEl0ZXJhdG9yIGl0CisgICAg
ICAgICAgICA9IG1fbW9kZWwtPmV4ZWN1dGVRdWVyeSggcXVlcnksIFNvcHJhbm86OlF1ZXJ5OjpR
dWVyeUxhbmd1YWdlU3BhcnFsICk7CisgICAgd2hpbGUoIGl0Lm5leHQoKSApIHsKKyAgICAgICAg
Y29uc3QgUVVybCByID0gaXRbInIiXS51cmkoKTsKKyAgICAgICAgY29uc3QgU29wcmFubzo6Tm9k
ZSBwID0gaXRbInAiXTsKKyAgICAgICAgY29uc3QgU29wcmFubzo6Tm9kZSB2ID0gaXRbInYiXTsK
KworICAgICAgICBpZiAoICF0cmVlLmNvbnRhaW5zKCByICkgKSB7CisgICAgICAgICAgICBUeXBl
VmlzaWJpbGl0eU5vZGUqIHJfdXZuID0gbmV3IFR5cGVWaXNpYmlsaXR5Tm9kZSggciApOworICAg
ICAgICAgICAgdHJlZS5pbnNlcnQoIHIsIHJfdXZuICk7CisgICAgICAgIH0KKyAgICAgICAgaWYo
IHYuaXNMaXRlcmFsKCkgKQorICAgICAgICAgICAgdHJlZVtyXS0+dXNlclZpc2libGUgPSAodi5s
aXRlcmFsKCkudG9Cb29sKCkgPyAxIDogLTEpOworICAgICAgICBpZiAoIHAuaXNSZXNvdXJjZSgp
ICYmCisgICAgICAgICAgICAgICAgcC51cmkoKSAhPSByICYmCisgICAgICAgICAgICAgICAgcC51
cmkoKSAhPSBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpSZXNvdXJjZSgpICkgeworICAgICAg
ICAgICAgaWYgKCAhdHJlZS5jb250YWlucyggcC51cmkoKSApICkgeworICAgICAgICAgICAgICAg
IFR5cGVWaXNpYmlsaXR5Tm9kZSogcF91dm4gPSBuZXcgVHlwZVZpc2liaWxpdHlOb2RlKCBwLnVy
aSgpICk7CisgICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQoIHAudXJpKCksIHBfdXZuICk7Cisg
ICAgICAgICAgICAgICAgdHJlZVtyXS0+cGFyZW50cy5pbnNlcnQoIHBfdXZuICk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0cmVlW3JdLT5wYXJl
bnRzLmluc2VydCggdHJlZVtwLnVyaSgpXSApOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gbWFrZSBzdXJlIHJkZnM6UmVzb3VyY2UgaXMgdmlzaWJsZSBieSBkZWZh
dWx0CisgICAgVHlwZVZpc2liaWxpdHlOb2RlKiByZGZzUmVzb3VyY2VOb2RlID0gMDsKKyAgICBR
SGFzaDxRVXJsLCBUeXBlVmlzaWJpbGl0eU5vZGUqPjo6aXRlcmF0b3IgcmRmc1Jlc291cmNlSXQg
PSB0cmVlLmZpbmQoU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6UmVzb3VyY2UoKSk7CisgICAg
aWYoIHJkZnNSZXNvdXJjZUl0ID09IHRyZWUuZW5kKCkgKSB7CisgICAgICAgIHJkZnNSZXNvdXJj
ZU5vZGUgPSBuZXcgVHlwZVZpc2liaWxpdHlOb2RlKFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6
OlJlc291cmNlKCkpOworICAgICAgICB0cmVlLmluc2VydCggU29wcmFubzo6Vm9jYWJ1bGFyeTo6
UkRGUzo6UmVzb3VyY2UoKSwgcmRmc1Jlc291cmNlTm9kZSApOworICAgIH0KKyAgICBlbHNlIHsK
KyAgICAgICAgcmRmc1Jlc291cmNlTm9kZSA9IHJkZnNSZXNvdXJjZUl0LnZhbHVlKCk7CisgICAg
fQorICAgIGlmKCByZGZzUmVzb3VyY2VOb2RlLT51c2VyVmlzaWJsZSA9PSAwICkgeworICAgICAg
ICByZGZzUmVzb3VyY2VOb2RlLT51c2VyVmlzaWJsZSA9IDE7CisgICAgfQorICAgIC8vIGFkZCBy
ZGZzOlJlc291cmNlIGFzIHBhcmVudCBmb3IgYWxsIHRvcC1sZXZlbCBjbGFzc2VzCisgICAgZm9y
ICggUUhhc2g8UVVybCwgVHlwZVZpc2liaWxpdHlOb2RlKj46Oml0ZXJhdG9yIGl0ID0gdHJlZS5i
ZWdpbigpOworICAgICAgICAgIGl0ICE9IHRyZWUuZW5kKCk7ICsraXQgKSB7CisgICAgICAgIGlm
KCBpdC52YWx1ZSgpICE9IHJkZnNSZXNvdXJjZU5vZGUgJiYgaXQudmFsdWUoKS0+cGFyZW50cy5p
c0VtcHR5KCkgKSB7CisgICAgICAgICAgICBpdC52YWx1ZSgpLT5wYXJlbnRzLmluc2VydCggcmRm
c1Jlc291cmNlTm9kZSApOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gZmluYWxseSBkZXRl
cm1pbmUgdmlzaWJpbGl0eSBvZiBhbGwgbm9kZXMKKyAgICBmb3IgKCBRSGFzaDxRVXJsLCBUeXBl
VmlzaWJpbGl0eU5vZGUqPjo6aXRlcmF0b3IgaXQgPSB0cmVlLmJlZ2luKCk7CisgICAgICAgICAg
aXQgIT0gdHJlZS5lbmQoKTsgKytpdCApIHsKKyAgICAgICAgUVNldDxUeXBlVmlzaWJpbGl0eU5v
ZGUqPiB2aXNpdGVkTm9kZXM7CisgICAgICAgIG1fdmlzaWJpbGl0eUhhc2guaW5zZXJ0KGl0Lmtl
eSgpLCBpdC52YWx1ZSgpLT51cGRhdGVVc2VyVmlzaWJpbGl0eSggdmlzaXRlZE5vZGVzICkgPT0g
MSApOworICAgIH0KKworICAgIC8vIGdldCByaWQgb2YgdGhlIHRlbXAgdHJlZQorICAgIHFEZWxl
dGVBbGwodHJlZSk7Cit9CisKK2Jvb2wgVHlwZVZpc2liaWxpdHlUcmVlOjppc1Zpc2libGUoY29u
c3QgUVVybCAmdHlwZSkgY29uc3QKK3sKKyAgICBRTXV0ZXhMb2NrZXIgbG9jayggJm1fbXV0ZXgg
KTsKKworICAgIFFIYXNoPFFVcmwsIGJvb2w+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdmlzaWJp
bGl0eUhhc2guY29uc3RGaW5kKHR5cGUpOworICAgIGlmKCBpdCAhPSBtX3Zpc2liaWxpdHlIYXNo
LmNvbnN0RW5kKCkgKSB7CisgICAgICAgIHJldHVybiAqaXQ7CisgICAgfQorICAgIGVsc2Ugewor
ICAgICAgICBrRGVidWcoKSA8PCAiQ291bGQgbm90IGZpbmQgdHlwZSIgPDwgdHlwZSA8PCAiaW4g
dHJlZS4gRGVmYXVsdGluZyB0byB2aXNpYmxlLiI7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KK30KKworUUxpc3Q8UVVybD4gVHlwZVZpc2liaWxpdHlUcmVlOjp2aXNpYmxlVHlwZXMoKSBj
b25zdAoreworICAgIFFMaXN0PFFVcmw+IHR5cGVzOworICAgIGZvciggUUhhc2g8UVVybCwgYm9v
bD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV92aXNpYmlsaXR5SGFzaC5jb25zdEJlZ2luKCk7Cisg
ICAgICAgICBpdCAhPSBtX3Zpc2liaWxpdHlIYXNoLmNvbnN0RW5kKCk7ICsraXQgKSB7CisgICAg
ICAgIGlmKCBpdC52YWx1ZSgpICkKKyAgICAgICAgICAgIHR5cGVzIDw8IGl0LmtleSgpOworICAg
IH0KKyAgICByZXR1cm4gdHlwZXM7Cit9CkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3R5cGV2aXNp
YmlsaXR5dHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvdHlwZXZpc2liaWxp
dHl0cmVlLmgJKHJldmlzaW9uIDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL3R5cGV2aXNpYmlsaXR5
dHJlZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBACisvKgorICAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIE5lcG9tdWsgS0RFIHByb2plY3QuCisgICBDb3B5cmlnaHQgKEMpIDIwMTAg
U2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorCisgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIHZlcnNp
b24gMywgb3IgYW55CisgICBsYXRlciB2ZXJzaW9uIGFjY2VwdGVkIGJ5IHRoZSBtZW1iZXJzaGlw
IG9mIEtERSBlLlYuIChvciBpdHMKKyAgIHN1Y2Nlc3NvciBhcHByb3ZlZCBieSB0aGUgbWVtYmVy
c2hpcCBvZiBLREUgZS5WLiksIHdoaWNoIHNoYWxsCisgICBhY3QgYXMgYSBwcm94eSBkZWZpbmVk
IGluIFNlY3Rpb24gNiBvZiB2ZXJzaW9uIDMgb2YgdGhlIGxpY2Vuc2UuCisKKyAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgor
Ki8KKworI2lmbmRlZiBUWVBFVklTSUJJTElUWVRSRUVfSAorI2RlZmluZSBUWVBFVklTSUJJTElU
WVRSRUVfSAorCisjaW5jbHVkZSA8UXRDb3JlL1FVcmw+CisjaW5jbHVkZSA8UXRDb3JlL1FIYXNo
PgorI2luY2x1ZGUgPFF0Q29yZS9RTXV0ZXg+CisKK25hbWVzcGFjZSBTb3ByYW5vIHsKK2NsYXNz
IE1vZGVsOworfQorCisvKioKKyAqIEJ1aWxkcyBhIHR5cGUgdHJlZSB0aGF0IGFsbG93cyB0byBj
aGVjayB0aGUgbmFvOnVzZXJWaXNpYmxlCisgKiB2YWx1ZSBmb3IgZWFjaCBleGlzdGluZyB0eXBl
LgorICovCitjbGFzcyBUeXBlVmlzaWJpbGl0eVRyZWUKK3sKK3B1YmxpYzoKKyAgICBUeXBlVmlz
aWJpbGl0eVRyZWUoIFNvcHJhbm86Ok1vZGVsKiBtb2RlbCApOworICAgIH5UeXBlVmlzaWJpbGl0
eVRyZWUoKTsKKworICAgIHZvaWQgcmVidWlsZFRyZWUoKTsKKworICAgIC8qKgorICAgICAqIENo
ZWNrIGlmIHRoZSBzcGVjaWZpZWQgdHlwZSBpcyB2aXNpYmxlLgorICAgICAqLworICAgIGJvb2wg
aXNWaXNpYmxlKCBjb25zdCBRVXJsJiB0eXBlICkgY29uc3Q7CisKKyAgICBRTGlzdDxRVXJsPiB2
aXNpYmxlVHlwZXMoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTb3ByYW5vOjpNb2RlbCogbV9t
b2RlbDsKKyAgICBjbGFzcyBUeXBlVmlzaWJpbGl0eU5vZGU7CisgICAgUUhhc2g8UVVybCwgYm9v
bD4gbV92aXNpYmlsaXR5SGFzaDsKKyAgICBtdXRhYmxlIFFNdXRleCBtX211dGV4OworfTsKKwor
I2VuZGlmIC8vIFRZUEVWSVNJQklMSVRZVFJFRV9ICkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL3Jl
cG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvcmVwb3NpdG9yeS5j
cHAJKHJldmlzaW9uIDEyMTM5NDApCisrKyBzZXJ2aWNlcy9zdG9yYWdlL3JlcG9zaXRvcnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNCw2ICsxNCw3IEBACiAKICNpbmNsdWRlICJyZXBvc2l0b3J5
LmgiCiAjaW5jbHVkZSAibW9kZWxjb3B5am9iLmgiCisjaW5jbHVkZSAiY3JhcHB5aW5mZXJlbmNl
cjIuaCIKIAogI2luY2x1ZGUgPFNvcHJhbm8vQmFja2VuZD4KICNpbmNsdWRlIDxTb3ByYW5vL1Bs
dWdpbk1hbmFnZXI+CkBAIC02OSw2ICs3MCw5IEBACiB7CiAgICAga0RlYnVnKCkgPDwgbV9uYW1l
OwogCisgICAgZGVsZXRlIG1faW5mZXJlbmNlcjsKKyAgICBtX2luZmVyZW5jZXIgPSAwOworCiAg
ICAgZGVsZXRlIG1fbW9kZWxDb3B5Sm9iOwogICAgIG1fbW9kZWxDb3B5Sm9iID0gMDsKIApAQCAt
MTY1LDkgKzE2OSwxMyBAQAogICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQogICAgIFNvcHJhbm86OlV0aWw6OlNpZ25hbENhY2hlTW9kZWwqIHNjbSA9IG5ldyBTb3ByYW5v
OjpVdGlsOjpTaWduYWxDYWNoZU1vZGVsKCBtX21vZGVsICk7CiAgICAgc2NtLT5zZXRQYXJlbnQo
dGhpcyk7IC8vIG1lbW9yeSBtYW5hZ2VtZW50Ci0KICAgICBzZXRQYXJlbnRNb2RlbCggc2NtICk7
CiAKKyAgICAvLyBjcmVhdGUgdGhlIGNyYXBweSBpbmZlcmVuY2UgbW9kZWwgd2hpY2ggaGFuZGxl
cyByZGZzOnN1YkNsYXNzT2Ygb25seSAtPiB3ZSBvbmx5IHVzZSB0aGlzIHRvIGltcHJvdmUgcGVy
Zm9ybWFuY2Ugb2YgUmVzb3VyY2VUeXBlVGVybXMKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KKyAgICBtX2luZmVyZW5jZXIgPSBuZXcgQ3JhcHB5SW5mZXJlbmNlcjIo
IHNjbSApOworICAgIHNldFBhcmVudE1vZGVsKG1faW5mZXJlbmNlcik7CisKICAgICAvLyBjaGVj
ayBpZiB3ZSBoYXZlIHRvIGNvbnZlcnQKICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KICAgICBib29sIGNvbnZlcnRpbmdEYXRhID0gZmFsc2U7CkBAIC0zMzcsNyArMzQ1
LDE4IEBACiAgICAgLy8gbmVlZHMgdG8gYmUgYWRkcmVzc2VkIGFzIHdlbGwKICAgICBzZXR0aW5n
cyA8PCBTb3ByYW5vOjpCYWNrZW5kU2V0dGluZyggIlNlcnZlclRocmVhZHMiLCAxMDAgKTsKIAor
ICAgIC8vIE5ldmVyIHRha2UgbW9yZSB0aGFuIDUgbWludXRlcyB0byBhbnN3ZXIgYSBxdWVyeSAo
dGhpcyBpcyB0byBmaWx0ZXIgb3V0IGJyb2tlbiBxdWVyaWVzIGFuZCBidWdzIGluIFZpcnR1b3Nv
J3MgcXVlcnkgb3B0aW1pemVyKQorICAgIC8vIHRydWVnOiBXZSBjYW5ub3QgYWN0aXZhdGUgdGhp
cyB5ZXQuIDEuIFZpcnR1b3NvIDwgNi4zIGNyYXNoZXMgYW5kIDIuIGV2ZW4gb3BlbiBjdXJzb3Jz
IGFyZSBzdWJqZWN0IHRvIHRoZSB0aW1lb3V0IHdoaWNoIGlzIHJlYWxseQorICAgIC8vICAgICAg
ICBub3Qgd2hhdCB3ZSB3YW50IQorLy8gICAgc2V0dGluZ3MgPDwgU29wcmFubzo6QmFja2VuZFNl
dHRpbmcoICJRdWVyeVRpbWVvdXQiLCA1KjYwMDAwICk7CisKICAgICByZXR1cm4gc2V0dGluZ3M7
CiB9CiAKK3ZvaWQgTmVwb211azo6UmVwb3NpdG9yeTo6dXBkYXRlSW5mZXJlbmNlKCkKK3sKKyAg
ICBtX2luZmVyZW5jZXItPnVwZGF0ZUluZmVyZW5jZUluZGV4KCk7CisgICAgbV9pbmZlcmVuY2Vy
LT51cGRhdGVBbGxSZXNvdXJjZXMoKTsKK30KKwogI2luY2x1ZGUgInJlcG9zaXRvcnkubW9jIgpJ
bmRleDogc2VydmljZXMvc3RvcmFnZS9jcmFwcHlpbmZlcmVuY2VyMi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gc2VydmljZXMvc3RvcmFnZS9jcmFwcHlpbmZlcmVuY2VyMi5jcHAJKHJldmlzaW9uIDApCisr
KyBzZXJ2aWNlcy9zdG9yYWdlL2NyYXBweWluZmVyZW5jZXIyLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw2MDQgQEAKKy8qCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTmVwb211ayBL
REUgcHJvamVjdC4KKyAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIFNlYmFzdGlhbiBUcnVlZyA8
dHJ1ZWdAa2RlLm9yZz4KKworICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFueQorICAg
bGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBieSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiAob3Ig
aXRzCisgICBzdWNjZXNzb3IgYXBwcm92ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4p
LCB3aGljaCBzaGFsbAorICAgYWN0IGFzIGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9uIDYgb2Yg
dmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNlLgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4gIElmIG5v
dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlICJj
cmFwcHlpbmZlcmVuY2VyMi5oIgorI2luY2x1ZGUgInR5cGV2aXNpYmlsaXR5dHJlZS5oIgorCisj
aW5jbHVkZSA8U29wcmFuby9Wb2NhYnVsYXJ5L05STD4KKyNpbmNsdWRlIDxTb3ByYW5vL1ZvY2Fi
dWxhcnkvTkFPPgorI2luY2x1ZGUgPFNvcHJhbm8vVm9jYWJ1bGFyeS9SREY+CisjaW5jbHVkZSA8
U29wcmFuby9Wb2NhYnVsYXJ5L1JERlM+CisjaW5jbHVkZSA8U29wcmFuby9TdGF0ZW1lbnQ+Cisj
aW5jbHVkZSA8U29wcmFuby9TdGF0ZW1lbnRJdGVyYXRvcj4KKyNpbmNsdWRlIDxTb3ByYW5vL05v
ZGU+CisjaW5jbHVkZSA8U29wcmFuby9Ob2RlSXRlcmF0b3I+CisjaW5jbHVkZSA8U29wcmFuby9H
cmFwaD4KKyNpbmNsdWRlIDxTb3ByYW5vL1F1ZXJ5UmVzdWx0SXRlcmF0b3I+CisKKyNpbmNsdWRl
IDxRdENvcmUvUVRpbWU+CisjaW5jbHVkZSA8UXRDb3JlL1FNdXRleD4KKyNpbmNsdWRlIDxRdENv
cmUvUU11dGV4TG9ja2VyPgorI2luY2x1ZGUgPFF0Q29yZS9RVGhyZWFkPgorCisjaW5jbHVkZSA8
a2RlYnVnLmg+CisKKworY2xhc3MgQ3JhcHB5SW5mZXJlbmNlcjI6OlByaXZhdGUKK3sKK3B1Ymxp
YzoKKyAgICBQcml2YXRlKCkKKyAgICAgICAgOiBtX3VwZGF0ZUFsbFJlc291cmNlc1RocmVhZCgw
KSB7CisgICAgfQorCisgICAgLy8vIGdldCB0aGUgbGlzdCBvZiBzdXBlciB0eXBlcyBmb3IgXHAg
dHlwZQorICAgIFFTZXQ8UVVybD4gc3VwZXJDbGFzc2VzKCBjb25zdCBRVXJsJiB0eXBlICkgY29u
c3Q7CisKKyAgICAvLy8gQ2hlY2sgaWYgYSByZXNvdXJjZSB3aXRoIHRoZSBzcGVjaWZpZWQgdHlw
ZXMgaXMgdmlzaWJsZS4KKyAgICBib29sIGlzVmlzaWJsZUZyb21UeXBlcyggY29uc3QgUVNldDxR
VXJsPiYgdHlwZXMgKSBjb25zdDsKKworICAgIC8vLyBQZXJmb3JtcyBhIHF1ZXJ5IHRvIHJldHJp
ZXZlIGFsbCB0eXBlcyB0aGF0IHdlcmUgbm90IGFkZGVkIGJ5IHVzCisgICAgUVNldDxRVXJsPiBx
dWVyeVJlc291cmNlVHlwZXMoIGNvbnN0IFFVcmwmIHJlc291cmNlICkgY29uc3Q7CisKKyAgICAv
Ly8gdXNlZCB0byBidWlsZCBtX3N1cGVyQ2xhc3NlcyAoYW5kIG5vdGhpbmcgZWxzZSEpCisgICAg
UVNldDxRVXJsPiBidWlsZFN1cGVyQ2xhc3Nlc0hhc2goIGNvbnN0IFFVcmwmIHR5cGUsIFFTZXQ8
UVVybD4mIHZpc2l0ZWRUeXBlcywgY29uc3QgUU11bHRpSGFzaDxRVXJsLCBRVXJsPiYgcmRmc1N1
YkNsYXNzUmVsYXRpb25zICk7CisKKyAgICBRSGFzaDxRVXJsLCBRU2V0PFFVcmw+ID4gbV9zdXBl
ckNsYXNzZXM7CisgICAgVHlwZVZpc2liaWxpdHlUcmVlKiBtX3R5cGVWaXNpYmlsaXR5VHJlZTsK
KyAgICBRTXV0ZXggbV9tdXRleDsKKworICAgIFVwZGF0ZUFsbFJlc291cmNlc1RocmVhZCogbV91
cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQ7CisKKyAgICBRVXJsIG1faW5mZXJlbmNlQ29udGV4dDsK
KworICAgIENyYXBweUluZmVyZW5jZXIyKiBxOworfTsKKworCisvKioKKyAqIFNpbXBsZSBoZWxw
ZXIgdGhyZWFkIHdoaWNoIHVwZGF0ZXMgdGhlIHN1YmNsYXNzIGFuZCB2aXNpYmlsaXR5IGluZmVy
ZW5jZSBvbiBhbGwgcmVzb3VyY2VzCisgKiBpbiB0aGUgZGF0YWJhc2UuIFRoaXMgaXMgZG9uZSBp
biBhIHNlcGFyYXRlIHRocmVhZCBzaW5jZSBpdCB0YWtlcyB1cCB0byBoYWxmIGFuIGhvdXIgdGhl
IGZpcnN0IHRpbWUuCisgKi8KK2NsYXNzIENyYXBweUluZmVyZW5jZXIyOjpVcGRhdGVBbGxSZXNv
dXJjZXNUaHJlYWQgOiBwdWJsaWMgUVRocmVhZAoreworcHVibGljOgorICAgIFVwZGF0ZUFsbFJl
c291cmNlc1RocmVhZCggQ3JhcHB5SW5mZXJlbmNlcjIqIHBhcmVudCApCisgICAgICAgIDogUVRo
cmVhZChwYXJlbnQpLAorICAgICAgICAgIG1fY2FuY2VsZWQoZmFsc2UpLAorICAgICAgICAgIG1f
bW9kZWwocGFyZW50KSB7CisgICAgfQorCisgICAgdm9pZCBjYW5jZWwoKSB7CisgICAgICAgIGtE
ZWJ1ZygpOworICAgICAgICBtX2NhbmNlbGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHJ1
bigpIHsKKyAgICAgICAga0RlYnVnKCk7CisgICAgICAgIG1fY2FuY2VsZWQgPSBmYWxzZTsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgICAgIFFUaW1lIHRpbWVyOworICAgICAgICB0aW1lci5zdGFydCgp
OworI2VuZGlmCisKKyAgICAgICAgLy8gVXBkYXRlIHZpc2liaWxpdHkgZm9yIGFsbCB2aXNpYmxl
IHJlc291cmNlcyB0aGUgZmFzdCB3YXkKKyAgICAgICAgLy8gcmVzb3VyY2VzIHRoYXQgZG8gbm90
IGhhdmUgdmlzaWJpbGl0eSBzZXQgYXJlIHRyZWF0ZWQgYXMgaW52aXNpYmxlLCB0aHVzIHRoZXJl
IGlzIG5vIG5lZWQKKyAgICAgICAgLy8gdG8gd3JpdGUgdGhlaXIgdmlzaWJpbGl0eSB2YWx1ZQor
ICAgICAgICBRX0ZPUkVBQ0goY29uc3QgUVVybCYgdHlwZSwgbV9tb2RlbC0+ZC0+bV90eXBlVmlz
aWJpbGl0eVRyZWUtPnZpc2libGVUeXBlcygpKSB7CisgICAgICAgICAgICBjb25zdCBRU3RyaW5n
IHF1ZXJ5ID0gUVN0cmluZzo6ZnJvbUxhdGluMSgiaW5zZXJ0IGludG8gZ3JhcGggJTEgeyA/ciAl
MiAxIC4gfSB3aGVyZSB7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICI/ciBhICUzIC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZJTFRFUighYmlmOmV4aXN0cygoc2VsZWN0ICgx
KSB3aGVyZSB7ID9yICUyID92IC4gfSkpKSAuIH0gIikKKyAgICAgICAgICAgICAgICAgICAgLmFy
ZyggU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBtX21vZGVsLT5jcmFwcHlJbmZlcmVuY2VD
b250ZXh0KCkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZTo6cmVz
b3VyY2VUb04zKCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86OnVzZXJWaXNpYmxlKCkgKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Tm9kZTo6cmVzb3VyY2VUb04zKCB0eXBl
ICkgKTsKKyAgICAgICAgICAgIG1fbW9kZWwtPmV4ZWN1dGVRdWVyeSggcXVlcnksIFNvcHJhbm86
OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsICk7CisgICAgICAgIH0KKworI2lmbmRlZiBOREVC
VUcKKyAgICAgICAga0RlYnVnKCkgPDwgIkFsbCByZXNvdXJjZXMgd2l0aCB2aXNpYmxlIHR5cGUg
dXBkYXRlZC4gRWxhcHNlZDoiIDw8IHRpbWVyLmVsYXBzZWQoKS8xMDAwLjAgPDwgInNlYyI7Cisj
ZW5kaWYKKworICAgICAgICAvLyB1cGRhdGUgdGhlIHJlc291cmNlIHR5cGUgaW5mZXJlbmNlIG9u
IGFsbCByZXNvdXJjZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgYmVmb3JlIEtERSA0LjYuMQorICAgICAg
ICBmb3IoUUhhc2g8UVVybCwgUVNldDxRVXJsPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fbW9k
ZWwtPmQtPm1fc3VwZXJDbGFzc2VzLmNvbnN0QmVnaW4oKTsgaXQgIT0gbV9tb2RlbC0+ZC0+bV9z
dXBlckNsYXNzZXMuY29uc3RFbmQoKTsgKytpdCkgeworICAgICAgICAgICAgY29uc3QgUVVybCYg
dHlwZSA9IGl0LmtleSgpOworICAgICAgICAgICAgY29uc3QgUVNldDxRVXJsPiYgc3VwZXJDbGFz
c2VzID0gaXQudmFsdWUoKTsKKyAgICAgICAgICAgIFFTdHJpbmcgc3VwZXJUeXBlVGVybXM7Cisg
ICAgICAgICAgICBRX0ZPUkVBQ0goY29uc3QgUVVybCYgc3VwZXJUeXBlLCBzdXBlckNsYXNzZXMp
IHsKKyAgICAgICAgICAgICAgICBzdXBlclR5cGVUZXJtcyArPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCI/ciBhICUxIC4gIikuYXJnKFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyhzdXBlclR5cGUp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gd2UgY2Fubm90IHJlc3RyaWN0IHRv
IHJlc291cmNlcyB0aGF0IGFscmVhZHkgaGF2ZSB0eXBlcyBpbiB0aGUgY3JhcHB5IGluZmVyZW5j
ZXIgMiBncmFwaAorICAgICAgICAgICAgLy8gc2luY2Ugb25lIHJlc291cmNlIGNvdWxkIGhhdmUg
bW9yZSB0aGFuIG9uZSB0eXBlIGFuZCB0aHVzLCBuZWVkcyB0byBiZSB1cGRhdGVkIHdpdGggbW9y
ZQorICAgICAgICAgICAgLy8gdGhhbiBvbmUgcXVlcnkgaGVyZS4KKyAgICAgICAgICAgIGNvbnN0
IFFTdHJpbmcgcXVlcnkgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJpbnNlcnQgaW50byBncmFwaCAl
MSB7ICUyIH0gd2hlcmUgeyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiP3IgYSAlMyAuIH0iKQorICAgICAgICAgICAgICAgICAgICAuYXJn
KFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyggbV9tb2RlbC0+Y3JhcHB5SW5mZXJlbmNlQ29u
dGV4dCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlclR5cGVUZXJtcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjModHlwZSkpOwor
ICAgICAgICAgICAgbV9tb2RlbC0+ZXhlY3V0ZVF1ZXJ5KCBxdWVyeSwgU29wcmFubzo6UXVlcnk6
OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwgKTsKKyAgICAgICAgfQorCisjaWZuZGVmIE5ERUJVRworICAg
ICAgICBrRGVidWcoKSA8PCAiQWxsIHJlc291cmNlcycgc3ViQ2xhc3NPZiBpbmZlcmVuY2UgdXBk
YXRlZC4gRWxhcHNlZDoiIDw8IHRpbWVyLmVsYXBzZWQoKS8xMDAwLjAgPDwgInNlYyI7CisjZW5k
aWYKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2NhbmNlbGVkOworICAgIENyYXBweUlu
ZmVyZW5jZXIyKiBtX21vZGVsOworfTsKKworCisKK1FTZXQ8UVVybD4gQ3JhcHB5SW5mZXJlbmNl
cjI6OlByaXZhdGU6OnN1cGVyQ2xhc3NlcyggY29uc3QgUVVybCYgdHlwZSApIGNvbnN0Cit7Cisg
ICAgUUhhc2g8UVVybCwgUVNldDxRVXJsPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3VwZXJD
bGFzc2VzLmNvbnN0RmluZCh0eXBlKTsKKyAgICBpZiggaXQgIT0gbV9zdXBlckNsYXNzZXMuY29u
c3RFbmQoKSApIHsKKyAgICAgICAgcmV0dXJuIGl0LnZhbHVlKCk7CisgICAgfQorICAgIGVsc2Ug
eworICAgICAgICByZXR1cm4gUVNldDxRVXJsPigpIDw8IFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
RlM6OlJlc291cmNlKCk7CisgICAgfQorfQorCitib29sIENyYXBweUluZmVyZW5jZXIyOjpQcml2
YXRlOjppc1Zpc2libGVGcm9tVHlwZXMoY29uc3QgUVNldDxRVXJsPiAmdHlwZXMpIGNvbnN0Cit7
CisgICAgLy8gV2UgbmVlZCB0byBleHRyYWN0IHRoZSBsZWFmIHR5cGVzIGluIHRoZSBzdWJncmFw
aCB0aGF0IGlzIHR5cGVzCisgICAgLy8gYXMgdGhvc2UgYXJlIHRoZSB0eXBlcyB0aGF0IGRlZmlu
ZSBpZiB0aGUgcmVzb3VyY2Ugd2lsbCBiZSB2aXNpYmxlCisKKyAgICAvLyBUT0RPOiBkbyB0aGUg
Zm9sbG93aW5nIGluIGFuIGVmZmljaWVudCB3YXkKKyAgICAvLyB3ZSByZW1vdmUgYWxsIHN1cGVy
dHlwZXMgZnJvbSB0aGUgc2V0IG9mIHR5cGVzIGFuZCBhcmUgbGVmdCB3aXRoIHRoZSBsZWFmIHR5
cGVzCisgICAgUVNldDxRVXJsPiBsZWFmVHlwZXModHlwZXMpOworICAgIFFfRk9SRUFDSChjb25z
dCBRVXJsJiB0eXBlLCB0eXBlcykgeworICAgICAgICBsZWFmVHlwZXMgLT0gc3VwZXJDbGFzc2Vz
KHR5cGUpOworICAgICAgICBpZihsZWFmVHlwZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgLy8gaWYgdGhlcmUgaXMgb25lIGxlYWYgdHlwZSBsZWZ0IHRoYXQg
aXMgdmlzaWJsZSB0aGUgcmVzb3VyY2UgaXMgdmlzaWJsZSwgdG9vCisgICAgUV9GT1JFQUNIKCBj
b25zdCBRVXJsJiB0eXBlLCBsZWFmVHlwZXMgKSB7CisgICAgICAgIGlmKCBtX3R5cGVWaXNpYmls
aXR5VHJlZS0+aXNWaXNpYmxlKHR5cGUpICkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBubyB2aXNpYmxlIHR5cGUgZm91bmQKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK1FTZXQ8UVVybD4gQ3JhcHB5SW5mZXJlbmNlcjI6OlByaXZhdGU6OnF1
ZXJ5UmVzb3VyY2VUeXBlcyhjb25zdCBRVXJsICZyZXNvdXJjZSkgY29uc3QKK3sKKyAgICBRU2V0
PFFVcmw+IHJlc291cmNlVHlwZXM7CisgICAgU29wcmFubzo6UXVlcnlSZXN1bHRJdGVyYXRvciBp
dAorICAgICAgICAgICAgPSBxLT5wYXJlbnRNb2RlbCgpLT5leGVjdXRlUXVlcnkoIFFTdHJpbmc6
OmZyb21MYXRpbjEoInNlbGVjdCA/dCB3aGVyZSB7IGdyYXBoID9nIHsgJTEgYSA/dCAuIH0gLiBG
SUxURVIoP2chPSUyKSAuIH0iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLmFyZyhTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMocmVzb3VyY2UpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpO
b2RlOjpyZXNvdXJjZVRvTjMobV9pbmZlcmVuY2VDb250ZXh0KSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3ByYW5vOjpRdWVyeTo6UXVlcnlMYW5ndWFn
ZVNwYXJxbCk7CisgICAgd2hpbGUoaXQubmV4dCgpKSB7CisgICAgICAgIHJlc291cmNlVHlwZXMg
PDwgaXRbMF0udXJpKCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc291cmNlVHlwZXM7Cit9CisK
K1FTZXQ8UVVybD4gQ3JhcHB5SW5mZXJlbmNlcjI6OlByaXZhdGU6OmJ1aWxkU3VwZXJDbGFzc2Vz
SGFzaCggY29uc3QgUVVybCYgdHlwZSwgUVNldDxRVXJsPiYgdmlzaXRlZFR5cGVzLCBjb25zdCBR
TXVsdGlIYXNoPFFVcmwsIFFVcmw+JiByZGZzU3ViQ2xhc3NSZWxhdGlvbnMgPSBRTXVsdGlIYXNo
PFFVcmwsIFFVcmw+KCkgKQoreworICAgIFFIYXNoPFFVcmwsIFFTZXQ8UVVybD4gPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3N1cGVyQ2xhc3Nlcy5jb25zdEZpbmQodHlwZSk7CisgICAgaWYoIGl0
ID09IG1fc3VwZXJDbGFzc2VzLmNvbnN0RW5kKCkgKSB7CisgICAgICAgIFFTZXQ8UVVybD4gc3Vw
ZXJUeXBlczsKKyAgICAgICAgZm9yKFFNdWx0aUhhc2g8UVVybCwgUVVybD46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gcmRmc1N1YkNsYXNzUmVsYXRpb25zLmNvbnN0RmluZCh0eXBlKTsKKyAgICAgICAg
ICAgIGl0ICE9IHJkZnNTdWJDbGFzc1JlbGF0aW9ucy5jb25zdEVuZCgpICYmIGl0LmtleSgpID09
IHR5cGU7ICsraXQpIHsKKyAgICAgICAgICAgIC8vIGF2b2lkIGVuZGxlc3MgbG9vcHMgaW4gY2Fz
ZSB3ZSBoYXZlIGNpcmN1bGFyIGhpZXJhcmNoaWVzCisgICAgICAgICAgICBpZiggIXZpc2l0ZWRU
eXBlcy5jb250YWlucyggaXQudmFsdWUoKSApICkgeworICAgICAgICAgICAgICAgIHZpc2l0ZWRU
eXBlcyA8PCBpdC52YWx1ZSgpOworICAgICAgICAgICAgICAgIHN1cGVyVHlwZXMgPDwgaXQudmFs
dWUoKTsKKyAgICAgICAgICAgICAgICBzdXBlclR5cGVzICs9IGJ1aWxkU3VwZXJDbGFzc2VzSGFz
aCggaXQudmFsdWUoKSwgdmlzaXRlZFR5cGVzLCByZGZzU3ViQ2xhc3NSZWxhdGlvbnMgKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX3N1cGVyQ2xhc3Nlcy5pbnNlcnQoIHR5
cGUsIHN1cGVyVHlwZXMgKTsKKyAgICAgICAgcmV0dXJuIHN1cGVyVHlwZXM7CisgICAgfQorICAg
IGVsc2UgeworICAgICAgICByZXR1cm4gaXQudmFsdWUoKTsKKyAgICB9Cit9CisKK0NyYXBweUlu
ZmVyZW5jZXIyOjpDcmFwcHlJbmZlcmVuY2VyMihTb3ByYW5vOjpNb2RlbCogcGFyZW50KQorICAg
IDogU29wcmFubzo6RmlsdGVyTW9kZWwocGFyZW50KSwKKyAgICAgIGQobmV3IFByaXZhdGUoKSkK
K3sKKyAgICBkLT5xID0gdGhpczsKKyAgICBkLT5tX2luZmVyZW5jZUNvbnRleHQgPSBRVXJsOjpm
cm9tRW5jb2RlZCgidXJuOmNyYXBweWluZmVyZW5jZTI6aW5mZXJyZWR0cmlwbGVzIik7CisgICAg
ZC0+bV90eXBlVmlzaWJpbGl0eVRyZWUgPSBuZXcgVHlwZVZpc2liaWxpdHlUcmVlKHRoaXMpOwor
ICAgIGlmICggcGFyZW50ICkKKyAgICAgICAgdXBkYXRlSW5mZXJlbmNlSW5kZXgoKTsKK30KKwor
Q3JhcHB5SW5mZXJlbmNlcjI6On5DcmFwcHlJbmZlcmVuY2VyMigpCit7CisgICAgaWYoIGQtPm1f
dXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkICkgeworICAgICAgICBkLT5tX3VwZGF0ZUFsbFJlc291
cmNlc1RocmVhZC0+Y2FuY2VsKCk7CisgICAgICAgIGQtPm1fdXBkYXRlQWxsUmVzb3VyY2VzVGhy
ZWFkLT53YWl0KCk7CisgICAgfQorICAgIGRlbGV0ZSBkOworfQorCit2b2lkIENyYXBweUluZmVy
ZW5jZXIyOjpzZXRQYXJlbnRNb2RlbChTb3ByYW5vOjpNb2RlbCAqbW9kZWwpCit7CisgICAgRmls
dGVyTW9kZWw6OnNldFBhcmVudE1vZGVsKCBtb2RlbCApOworICAgIHVwZGF0ZUluZmVyZW5jZUlu
ZGV4KCk7Cit9CisKK1NvcHJhbm86OkVycm9yOjpFcnJvckNvZGUgQ3JhcHB5SW5mZXJlbmNlcjI6
OmFkZFN0YXRlbWVudChjb25zdCBTb3ByYW5vOjpTdGF0ZW1lbnQgJnN0YXRlbWVudCkKK3sKKyAg
ICBpZiggc3RhdGVtZW50LmNvbnRleHQoKSA9PSBkLT5tX2luZmVyZW5jZUNvbnRleHQgKSB7Cisj
aWZkZWYgTkRFQlVHCisgICAgICAgIGtEZWJ1ZygpIDw8ICJObyBhY3Rpb25zIGFyZSBhbGxvd2Vk
IG9uIHRoZSBjcmFwcHkgaW5mZXJlbmNlciBjb250ZXh0IGluIHJlbGVhc2UgbW9kZSEiIDw8IHN0
YXRlbWVudDsKKyAgICAgICAgcmV0dXJuIFNvcHJhbm86OkVycm9yOjpFcnJvckludmFsaWRBcmd1
bWVudDsKKyNlbHNlCisgICAgICAgIGtXYXJuaW5nKCkgPDwgIldBUk5JTkchISEhISEhISEhISBB
ZGRpbmcgc3RhdGVtZW50IGluIGNyYXBweSBpbmZlcmVuY2VyIGNvbnRleHQhISEhISEhISEhISEi
IDw8IHN0YXRlbWVudDsKKyNlbmRpZgorICAgIH0KKworICAgIFFNdXRleExvY2tlciBsb2NrKCAm
ZC0+bV9tdXRleCApOworCisgICAgU29wcmFubzo6RXJyb3I6OkVycm9yQ29kZSByID0gcGFyZW50
TW9kZWwoKS0+YWRkU3RhdGVtZW50KCBzdGF0ZW1lbnQgKTsKKyAgICBpZiggciA9PSBTb3ByYW5v
OjpFcnJvcjo6RXJyb3JOb25lICkgeworICAgICAgICAvLworICAgICAgICAvLyBIYW5kbGUgdGhl
IGluZmVyZW5jZQorICAgICAgICAvLworICAgICAgICBpZiAoIHN0YXRlbWVudC5zdWJqZWN0KCku
aXNSZXNvdXJjZSgpICYmCisgICAgICAgICAgICAgICAgc3RhdGVtZW50Lm9iamVjdCgpLmlzUmVz
b3VyY2UoKSAmJgorICAgICAgICAgICAgICAgIHN0YXRlbWVudC5wcmVkaWNhdGUoKSA9PSBTb3By
YW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSApIHsKKyAgICAgICAgICAgIGFkZEluZmVyZW5j
ZVN0YXRlbWVudHMoIHN0YXRlbWVudC5zdWJqZWN0KCkudXJpKCksIHN0YXRlbWVudC5vYmplY3Qo
KS51cmkoKSApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHI7Cit9CisKK1NvcHJh
bm86OkVycm9yOjpFcnJvckNvZGUgQ3JhcHB5SW5mZXJlbmNlcjI6OnJlbW92ZVN0YXRlbWVudChj
b25zdCBTb3ByYW5vOjpTdGF0ZW1lbnQgJnN0YXRlbWVudCkKK3sKKyAgICBpZiggc3RhdGVtZW50
LmNvbnRleHQoKSA9PSBkLT5tX2luZmVyZW5jZUNvbnRleHQgKSB7CisjaWZkZWYgTkRFQlVHCisg
ICAgICAgIGtEZWJ1ZygpIDw8ICJObyBhY3Rpb25zIGFyZSBhbGxvd2VkIG9uIHRoZSBjcmFwcHkg
aW5mZXJlbmNlciBjb250ZXh0IGluIHJlbGVhc2UgbW9kZSEiIDw8IHN0YXRlbWVudDsKKyAgICAg
ICAgcmV0dXJuIFNvcHJhbm86OkVycm9yOjpFcnJvckludmFsaWRBcmd1bWVudDsKKyNlbHNlCisg
ICAgICAgIGtXYXJuaW5nKCkgPDwgIldBUk5JTkchISEhISEhISEhISBSZW1vdmluZyBzdGF0ZW1l
bnQgZnJvbSBjcmFwcHkgaW5mZXJlbmNlciBjb250ZXh0ISEhISEhISEhISEhIiA8PCBzdGF0ZW1l
bnQ7CisjZW5kaWYKKyAgICB9CisKKyAgICBRTXV0ZXhMb2NrZXIgbG9jayggJmQtPm1fbXV0ZXgg
KTsKKworICAgIFNvcHJhbm86OkVycm9yOjpFcnJvckNvZGUgZXJyb3IgPSBwYXJlbnRNb2RlbCgp
LT5yZW1vdmVTdGF0ZW1lbnQoc3RhdGVtZW50KTsKKyAgICBpZiggZXJyb3IgPT0gU29wcmFubzo6
RXJyb3I6OkVycm9yTm9uZSApIHsKKyAgICAgICAgaWYgKCBzdGF0ZW1lbnQuaXNWYWxpZCgpICYm
CisgICAgICAgICAgICAgICAgc3RhdGVtZW50LnN1YmplY3QoKS5pc1Jlc291cmNlKCkgJiYKKyAg
ICAgICAgICAgICAgICBzdGF0ZW1lbnQub2JqZWN0KCkuaXNSZXNvdXJjZSgpICYmCisgICAgICAg
ICAgICAgICAgc3RhdGVtZW50LnByZWRpY2F0ZSgpID09IFNvcHJhbm86OlZvY2FidWxhcnk6OlJE
Rjo6dHlwZSgpICkgeworICAgICAgICAgICAgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggc3Rh
dGVtZW50LnN1YmplY3QoKS51cmkoKSwgc3RhdGVtZW50Lm9iamVjdCgpLnVyaSgpICk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIFNvcHJhbm86OkVycm9yOjpFcnJvck5vbmU7CisgICAgfQor
ICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorfQorCitTb3ByYW5vOjpF
cnJvcjo6RXJyb3JDb2RlIENyYXBweUluZmVyZW5jZXIyOjpyZW1vdmVBbGxTdGF0ZW1lbnRzKGNv
bnN0IFNvcHJhbm86OlN0YXRlbWVudCAmc3RhdGVtZW50KQoreworICAgIGlmKCBzdGF0ZW1lbnQu
Y29udGV4dCgpID09IGQtPm1faW5mZXJlbmNlQ29udGV4dCApIHsKKyNpZmRlZiBOREVCVUcKKyAg
ICAgICAga0RlYnVnKCkgPDwgIk5vIGFjdGlvbnMgYXJlIGFsbG93ZWQgb24gdGhlIGNyYXBweSBp
bmZlcmVuY2VyIGNvbnRleHQgaW4gcmVsZWFzZSBtb2RlISIgPDwgc3RhdGVtZW50OworICAgICAg
ICByZXR1cm4gU29wcmFubzo6RXJyb3I6OkVycm9ySW52YWxpZEFyZ3VtZW50OworI2Vsc2UKKyAg
ICAgICAga1dhcm5pbmcoKSA8PCAiV0FSTklORyEhISEhISEhISEhIFJlbW92aW5nIHN0YXRlbWVu
dHMgZnJvbSBjcmFwcHkgaW5mZXJlbmNlciBjb250ZXh0ISEhISEhISEhISEhIiA8PCBzdGF0ZW1l
bnQ7CisjZW5kaWYKKyAgICB9CisKKyAgICBRTXV0ZXhMb2NrZXIgbG9jayggJmQtPm1fbXV0ZXgg
KTsKKworICAgIC8vCisgICAgLy8gVGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG5lZWQgdG8gYmUg
bWV0IGluIG9yZGVyIGZvciB1cyB0byBuZWVkIHRvIGNoZWNrIGZvciB0eXBlcworICAgIC8vIDEu
IE9iamVjdCBvciBjb250ZXh0IG5lZWQgdG8gYmUgdmFsaWQuIE90aGVyd2lzZSBvdXIgdHlwZXMg
YXJlIHJlbW92ZWQgYW55d2F5CisgICAgLy8gMi4gT2JqZWN0IG5lZWRzIHRvIGJlIGVtcHR5IG9y
IGEgcmVzb3VyY2UuIExpdGVyYWxzIGFyZSBuZXZlciB0eXBlcworICAgIC8vIDMuIFByZWRpY2F0
ZSBuZWVkcyB0byBiZSBlbXB0eSBvciByZGY6dHlwZS4gT3RoZXJ3aXNlIHRoZSBjYWxsIGlzIG5v
dCByZWxhdGVkIHRvIHR5cGVzLgorICAgIC8vCisgICAgaWYgKCBzdGF0ZW1lbnQuY29udGV4dCgp
ICE9IGQtPm1faW5mZXJlbmNlQ29udGV4dCAmJgorICAgICAgICAgICAgKCAoIHN0YXRlbWVudC5w
cmVkaWNhdGUoKS5pc0VtcHR5KCkgfHwKKyAgICAgICAgICAgICAgIHN0YXRlbWVudC5wcmVkaWNh
dGUoKSA9PSBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREY6OnR5cGUoKSApICYmCisgICAgICAgICAg
ICAgKCBzdGF0ZW1lbnQub2JqZWN0KCkuaXNFbXB0eSgpIHx8CisgICAgICAgICAgICAgIHN0YXRl
bWVudC5vYmplY3QoKS5pc1Jlc291cmNlKCkgKSAmJgorICAgICAgICAgICAgICggc3RhdGVtZW50
Lm9iamVjdCgpLmlzVmFsaWQoKSB8fAorICAgICAgICAgICAgICBzdGF0ZW1lbnQuY29udGV4dCgp
LmlzVmFsaWQoKSApICkgKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIElmIGJvdGggcmVzb3Vy
Y2UgYW5kIHR5cGUgYXJlIGRlZmluZWQgd2UgY2FuIHNpbXBseSBjYWxsIHJlbW92ZUluZmVyZW5j
ZVN0YXRlbWVudHMoKSBvbiB0aGVtCisgICAgICAgIC8vCisgICAgICAgIGlmKCBzdGF0ZW1lbnQu
c3ViamVjdCgpLmlzUmVzb3VyY2UoKSAmJgorICAgICAgICAgICAgICAgIHN0YXRlbWVudC5vYmpl
Y3QoKS5pc1Jlc291cmNlKCkgKSB7CisgICAgICAgICAgICBjb25zdCBTb3ByYW5vOjpFcnJvcjo6
RXJyb3JDb2RlIGVycm9yID0gcGFyZW50TW9kZWwoKS0+cmVtb3ZlQWxsU3RhdGVtZW50cyhzdGF0
ZW1lbnQpOworICAgICAgICAgICAgaWYoIGVycm9yID09IFNvcHJhbm86OkVycm9yOjpFcnJvck5v
bmUgKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggc3RhdGVt
ZW50LnN1YmplY3QoKS51cmkoKSwgc3RhdGVtZW50Lm9iamVjdCgpLnVyaSgpICk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICAv
LworICAgICAgICAvLyBpZiBvbmx5IHRoZSB0eXBlIGlzIHVuZGVmaW5lZCB3ZSBnZXQgdGhlIHR5
cGVzIGFuZCB0aGVuIGNhbGwgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cygpLiBUaGlzIGF2b2lk
cworICAgICAgICAvLyBwZXJmb3JtaW5nIHRoZSBxdWVyeSBpbiB0aGUgbGF0dGVyIG1ldGhvZCBv
dmVyIGFuZCBvdmVyIGZvciBlYWNoIHR5cGUKKyAgICAgICAgLy8KKyAgICAgICAgZWxzZSBpZigg
c3RhdGVtZW50LnN1YmplY3QoKS5pc1ZhbGlkKCkgKSB7CisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gd2UgbmVlZCB0byBmaXJzdCBnZXQgdGhlIHR5cGVzIHRvIHJlbW92ZSwgdGhlbiBy
ZW1vdmUgdGhlIHN0YXRlbWVudHMsIGFuZCBvbmx5IHRoZW4gY2FsbAorICAgICAgICAgICAgLy8g
cmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cygpLiBUaGlzIGlzIHNpbmNlIHRoZSBsYXR0ZXIgbWFr
ZXMgdXNlIG9mIHRoZSB0eXBlcyBpbiB0aGUgbW9kZWwKKyAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICBRU3RyaW5nIHF1ZXJ5OworICAgICAgICAgICAgaWYoIHN0YXRlbWVudC5jb250ZXh0KCku
aXNWYWxpZCgpICkgeworICAgICAgICAgICAgICAgIHF1ZXJ5ID0gUVN0cmluZzo6ZnJvbUxhdGlu
MSgic2VsZWN0ID90IHdoZXJlIHsgZ3JhcGggJTIgeyAlMSBhID90IC4gfSAuIH0iKQorICAgICAg
ICAgICAgICAgICAgICAgICAgLmFyZyhzdGF0ZW1lbnQuc3ViamVjdCgpLnRvTjMoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmNvbnRleHQoKS50b04zKCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcXVlcnkgPSBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgP3Qgd2hlcmUgeyBncmFwaCA/ZyB7ICUxIGEgP3Qg
LiB9IC4gRklMVEVSKD9nIT0lMikgLiB9IikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hcmco
c3RhdGVtZW50LnN1YmplY3QoKS50b04zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9OMyhjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IFFMaXN0PFNvcHJhbm86Ok5vZGU+IHR5
cGVzID0gZXhlY3V0ZVF1ZXJ5KCBxdWVyeSwgU29wcmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VT
cGFycWwgKS5pdGVyYXRlQmluZGluZ3MoMCkuYWxsTm9kZXMoKTsKKyAgICAgICAgICAgIGNvbnN0
IFNvcHJhbm86OkVycm9yOjpFcnJvckNvZGUgZXJyb3IgPSBwYXJlbnRNb2RlbCgpLT5yZW1vdmVB
bGxTdGF0ZW1lbnRzKHN0YXRlbWVudCk7CisgICAgICAgICAgICBpZiggZXJyb3IgPT0gU29wcmFu
bzo6RXJyb3I6OkVycm9yTm9uZSApIHsKKyAgICAgICAgICAgICAgICByZW1vdmVJbmZlcmVuY2VT
dGF0ZW1lbnRzKCBzdGF0ZW1lbnQuc3ViamVjdCgpLnVyaSgpLCB0eXBlcyApOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICB9CisKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gSWYgdGhlIHN1YmplY3QgaXMgbm90IGRlZmluZWQgYnV0IHRoZSB0eXBlIGlz
IHdlIG5lZWQgdG8gdXBkYXRlIHNldmVyYWwgcmVzb3VyY2VzLiBUaGVyZSBpcyBubyB3YXkgYXJv
dW5kCisgICAgICAgIC8vIGNhbGxpbmcgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cygpIGZvciBl
YWNoIHJlc291cmNlLgorICAgICAgICAvLworICAgICAgICBlbHNlIGlmKCBzdGF0ZW1lbnQub2Jq
ZWN0KCkuaXNWYWxpZCgpICkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gZ2V0IHRoZSByZXNvdXJjZXMgYmVmb3JlIGFjdHVhbGx5IHJlbW92aW5nIHRoZSBzdGF0
ZW1lbnRzIHNpbmNlIG90aGVyd2lzZSB3ZSBtaWdodCBtaXNzIHRoZW0KKyAgICAgICAgICAgIC8v
CisgICAgICAgICAgICBRU3RyaW5nIHF1ZXJ5OworICAgICAgICAgICAgaWYoIHN0YXRlbWVudC5j
b250ZXh0KCkuaXNWYWxpZCgpICkgeworICAgICAgICAgICAgICAgIHF1ZXJ5ID0gUVN0cmluZzo6
ZnJvbUxhdGluMSgic2VsZWN0ID9yIHdoZXJlIHsgZ3JhcGggJTIgeyA/ciBhICUxIC4gfSAuIH0i
KQorICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhzdGF0ZW1lbnQub2JqZWN0KCkudG9OMygp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuY29udGV4dCgpLnRvTjMo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBx
dWVyeSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCA/ciB3aGVyZSB7IGdyYXBoID9nIHsg
P3IgYSAlMSAuIH0gLiBGSUxURVIoP2chPSUyKSAuIH0iKQorICAgICAgICAgICAgICAgICAgICAg
ICAgLmFyZyhzdGF0ZW1lbnQub2JqZWN0KCkudG9OMygpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoY3JhcHB5SW5mZXJlbmNlQ29udGV4
dCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb25zdCBRTGlzdDxTb3ByYW5vOjpO
b2RlPiByZXNvdXJjZXMgPSBleGVjdXRlUXVlcnkoIHF1ZXJ5LCBTb3ByYW5vOjpRdWVyeTo6UXVl
cnlMYW5ndWFnZVNwYXJxbCApLml0ZXJhdGVCaW5kaW5ncygwKS5hbGxOb2RlcygpOworICAgICAg
ICAgICAgY29uc3QgU29wcmFubzo6RXJyb3I6OkVycm9yQ29kZSBlcnJvciA9IHBhcmVudE1vZGVs
KCktPnJlbW92ZUFsbFN0YXRlbWVudHMoc3RhdGVtZW50KTsKKyAgICAgICAgICAgIGlmKCBlcnJv
ciA9PSBTb3ByYW5vOjpFcnJvcjo6RXJyb3JOb25lICkgeworICAgICAgICAgICAgICAgIFFfRk9S
RUFDSCggY29uc3QgU29wcmFubzo6Tm9kZSYgcmVzLCByZXNvdXJjZXMgKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoIHJlcy51cmkoKSwgc3RhdGVtZW50
Lm9iamVjdCgpLnVyaSgpICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gTmVpdGhlciBzdWJqZWN0IG5vciBvYmplY3QgYXJlIGRlZmluZWQKKyAgICAgICAgLy8KKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBRSGFzaDxRVXJsLCBRTGlzdDxRVXJsPiA+IHJlc1R5
cGVIYXNoOworICAgICAgICAgICAgUVN0cmluZyBxdWVyeTsKKyAgICAgICAgICAgIGlmKCBzdGF0
ZW1lbnQuY29udGV4dCgpLmlzVmFsaWQoKSApIHsKKyAgICAgICAgICAgICAgICBxdWVyeSA9IFFT
dHJpbmc6OmZyb21MYXRpbjEoInNlbGVjdCBkaXN0aW5jdCA/ciA/dCB3aGVyZSB7IGdyYXBoICUx
IHsgP3IgYSA/dCAuIH0gLiB9IikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoc3RhdGVt
ZW50LmNvbnRleHQoKS50b04zKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgcXVlcnkgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJzZWxlY3QgZGlz
dGluY3QgP3IgP3Qgd2hlcmUgeyBncmFwaCA/ZyB7ID9yIGEgP3QgLiB9IC4gRklMVEVSKD9nIT0l
MSkgLiB9IikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoU29wcmFubzo6Tm9kZTo6cmVz
b3VyY2VUb04zKGNyYXBweUluZmVyZW5jZUNvbnRleHQoKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgU29wcmFubzo6UXVlcnlSZXN1bHRJdGVyYXRvciBpdCA9IHBhcmVudE1vZGVsKCkt
PmV4ZWN1dGVRdWVyeSggcXVlcnksIFNvcHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFs
ICk7CisgICAgICAgICAgICB3aGlsZSggaXQubmV4dCgpICkgeworICAgICAgICAgICAgICAgIHJl
c1R5cGVIYXNoW2l0WyJyIl0udXJpKCldLmFwcGVuZCggaXRbInQiXS51cmkoKSApOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY29uc3QgU29wcmFubzo6RXJyb3I6OkVycm9yQ29kZSBlcnJv
ciA9IHBhcmVudE1vZGVsKCktPnJlbW92ZUFsbFN0YXRlbWVudHMoc3RhdGVtZW50KTsKKyAgICAg
ICAgICAgIGlmKCBlcnJvciA9PSBTb3ByYW5vOjpFcnJvcjo6RXJyb3JOb25lICkgeworICAgICAg
ICAgICAgICAgIFFIYXNoPFFVcmwsIFFMaXN0PFFVcmw+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHJlc1R5cGVIYXNoLmNvbnN0RW5kKCk7CisgICAgICAgICAgICAgICAgZm9yKCBRSGFzaDxRVXJs
LCBRTGlzdDxRVXJsPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlc1R5cGVIYXNoLmNvbnN0QmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0ICkgeworICAgICAgICAgICAgICAgICAgICByZW1vdmVJbmZl
cmVuY2VTdGF0ZW1lbnRzKCBpdC5rZXkoKSwgaXQudmFsdWUoKSApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHBhcmVudE1vZGVsKCktPnJlbW92ZUFs
bFN0YXRlbWVudHMoc3RhdGVtZW50KTsKKyAgICB9Cit9CisKK1FVcmwgQ3JhcHB5SW5mZXJlbmNl
cjI6OmNyYXBweUluZmVyZW5jZUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBkLT5tX2lu
ZmVyZW5jZUNvbnRleHQ7Cit9CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6OnVwZGF0ZUluZmVy
ZW5jZUluZGV4KCkKK3sKKyAgICBrRGVidWcoKTsKKworICAgIFFNdXRleExvY2tlciBsb2NrKCAm
ZC0+bV9tdXRleCApOworCisgICAgLy8gQnVpbGQgc3VwZXJjbGFzc2VzIGhhc2gKKyAgICAvLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAvLyBj
bGVhciBjYWNoZQorICAgIGQtPm1fc3VwZXJDbGFzc2VzLmNsZWFyKCk7CisKKyAgICAvLyBjYWNo
ZSBzdWJDbGFzc09mIHJlbGF0aW9ucyAob25seSB0aGUgb3JpZ2luYWwgb25lcykKKyAgICBRTXVs
dGlIYXNoPFFVcmwsIFFVcmw+IHJkZnNTdWJDbGFzc1JlbGF0aW9uczsKKyAgICBTb3ByYW5vOjpR
dWVyeVJlc3VsdEl0ZXJhdG9yIGl0ID0gZXhlY3V0ZVF1ZXJ5KCBRU3RyaW5nOjpmcm9tTGF0aW4x
KCJzZWxlY3QgP3ggP3kgd2hlcmUgeyBncmFwaCA/ZyB7ID94ICUxID95IC4gfSAuICIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJGSUxURVIoP2cgIT0gPHVybjpjcmFwcHlpbmZlcmVuY2U6aW5mZXJyZWR0cmlw
bGVzPikgLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiRklMVEVSKD94IT0/eSkgLiB9IiApCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyggU29wcmFu
bzo6Tm9kZTo6cmVzb3VyY2VUb04zKCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpSREZTOjpzdWJDbGFz
c09mKCkgKSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNvcHJhbm86OlF1ZXJ5OjpRdWVyeUxhbmd1YWdlU3BhcnFsICk7CisgICAgd2hpbGUg
KCBpdC5uZXh0KCkgKSB7CisgICAgICAgIHJkZnNTdWJDbGFzc1JlbGF0aW9ucy5pbnNlcnQoIGl0
WyJ4Il0udXJpKCksIGl0WyJ5Il0udXJpKCkgKTsKKyAgICB9CisKKyAgICAvLyBjb21wbGV0ZSB0
aGUgbWFwIG9mIHN1cGVyIGNsYXNzZXMKKyAgICBRX0ZPUkVBQ0goIGNvbnN0IFFVcmwmIHR5cGUs
IHJkZnNTdWJDbGFzc1JlbGF0aW9ucy5rZXlzKCkgKSB7CisgICAgICAgIFFTZXQ8UVVybD4gdmlz
aXRlZENsYXNzZXM7CisgICAgICAgIGQtPmJ1aWxkU3VwZXJDbGFzc2VzSGFzaCggdHlwZSwgdmlz
aXRlZENsYXNzZXMsIHJkZnNTdWJDbGFzc1JlbGF0aW9ucyApOworICAgIH0KKworICAgIC8vIGdl
dCB0aGUgY2xhc3NlcyB0aGF0IGRvIG5vdCBoYXZlIGFueSBwYXJlbnQgY2xhc3MKKyAgICBpdCA9
IGV4ZWN1dGVRdWVyeSggUVN0cmluZzo6ZnJvbUxhdGluMSgic2VsZWN0ID9jIHdoZXJlIHsgP2Mg
YSAlMSAuIE9QVElPTkFMIHsgP2MgJTIgP3AgLiB9IC4gRklMVEVSKCFCT1VORCg/cCkpIC4gfSIg
KQorICAgICAgICAgICAgICAgICAgICAgIC5hcmcoIFNvcHJhbm86Ok5vZGU6OnJlc291cmNlVG9O
MyggU29wcmFubzo6Vm9jYWJ1bGFyeTo6UkRGUzo6Q2xhc3MoKSApICkKKyAgICAgICAgICAgICAg
ICAgICAgICAuYXJnKCBTb3ByYW5vOjpOb2RlOjpyZXNvdXJjZVRvTjMoIFNvcHJhbm86OlZvY2Fi
dWxhcnk6OlJERlM6OnN1YkNsYXNzT2YoKSApICksCisgICAgICAgICAgICAgICAgICAgICAgU29w
cmFubzo6UXVlcnk6OlF1ZXJ5TGFuZ3VhZ2VTcGFycWwgKTsKKyAgICB3aGlsZSAoIGl0Lm5leHQo
KSApIHsKKyAgICAgICAgZC0+bV9zdXBlckNsYXNzZXMuaW5zZXJ0KCBpdFsiYyJdLnVyaSgpLCBR
U2V0PFFVcmw+KCkgKTsKKyAgICB9CisKKyAgICAvLyBhZGQgcmRmczpSZXNvdXJjZSBhcyBwYXJl
bnQgZm9yIGFsbCBjbGFzc2VzCisgICAgUU11dGFibGVIYXNoSXRlcmF0b3I8UVVybCwgUVNldDxR
VXJsPiA+IHJkZnNSZXNJdCggZC0+bV9zdXBlckNsYXNzZXMgKTsKKyAgICB3aGlsZSggcmRmc1Jl
c0l0Lmhhc05leHQoKSApIHsKKyAgICAgICAgcmRmc1Jlc0l0Lm5leHQoKTsKKyAgICAgICAgcmRm
c1Jlc0l0LnZhbHVlKCkuaW5zZXJ0KFNvcHJhbm86OlZvY2FidWxhcnk6OlJERlM6OlJlc291cmNl
KCkpOworICAgIH0KKworICAgIC8vIEJ1aWxkIHZpc2liaWxpdHkgdHJlZQorICAgIC8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBkLT5tX3R5cGVW
aXNpYmlsaXR5VHJlZS0+cmVidWlsZFRyZWUoKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBj
b3VudCBmb3IgZGVidWdnaW5nCisgICAgaW50IGNudCA9IDA7CisgICAgZm9yKCBRSGFzaDxRVXJs
LCBRU2V0PFFVcmw+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZC0+bV9zdXBlckNsYXNzZXMuY29u
c3RCZWdpbigpOworICAgICAgICAgaXQgIT0gZC0+bV9zdXBlckNsYXNzZXMuY29uc3RFbmQoKTsg
KytpdCApIHsKKyAgICAgICAga0RlYnVnKCkgPDwgaXQua2V5KCkgPDwgIi0+IiA8PCBpdC52YWx1
ZSgpOworICAgICAgICBjbnQgKz0gaXQudmFsdWUoKS5jb3VudCgpOworICAgIH0KKyAgICBrRGVi
dWcoKSA8PCAiTnVtYmVyIG9mIGNsYXNzZXM6ICAgICAgICAgICAiIDw8IGQtPm1fc3VwZXJDbGFz
c2VzLmNvdW50KCk7CisgICAga0RlYnVnKCkgPDwgIk51bWJlciBvZiBzdWJjbGFzcyByZWxhdGlv
bnM6IiA8PCBjbnQ7CisjZW5kaWYKK30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMjo6dXBkYXRl
QWxsUmVzb3VyY2VzKCkKK3sKKyAgICBrRGVidWcoKTsKKyAgICBpZiggIWQtPm1fdXBkYXRlQWxs
UmVzb3VyY2VzVGhyZWFkICkgeworICAgICAgICBkLT5tX3VwZGF0ZUFsbFJlc291cmNlc1RocmVh
ZCA9IG5ldyBVcGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQodGhpcyk7CisgICAgICAgIGNvbm5lY3Qo
ZC0+bV91cGRhdGVBbGxSZXNvdXJjZXNUaHJlYWQsIFNJR05BTChmaW5pc2hlZCgpKSwgdGhpcywg
U0lHTkFMKGFsbFJlc291cmNlc1VwZGF0ZWQoKSkpOworICAgIH0KKyAgICBkLT5tX3VwZGF0ZUFs
bFJlc291cmNlc1RocmVhZC0+c3RhcnQoKTsKK30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMjo6
YWRkSW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3QgUVVybCYgcmVzb3VyY2UsIGNvbnN0IFFVcmwm
IHR5cGUgKQoreworICAgIHJldHVybiBhZGRJbmZlcmVuY2VTdGF0ZW1lbnRzKCByZXNvdXJjZSwg
UVNldDxRVXJsPigpIDw8IHR5cGUgKTsKK30KKwordm9pZCBDcmFwcHlJbmZlcmVuY2VyMjo6YWRk
SW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3QgUVVybCYgcmVzb3VyY2UsIGNvbnN0IFFTZXQ8UVVy
bD4mIHR5cGVzICkKK3sKKyAgICAvLyBhZGQgbWlzc2luZyB0eXBlcworICAgIGJvb2wgaGF2ZVZp
c2libGVUeXBlID0gZmFsc2U7CisgICAgUVNldDxRVXJsPiBzdXBlclR5cGVzOworICAgIFFfRk9S
RUFDSCggY29uc3QgUVVybCYgdHlwZSwgdHlwZXMgKSB7CisgICAgICAgIHN1cGVyVHlwZXMgKz0g
ZC0+c3VwZXJDbGFzc2VzKHR5cGUpOworICAgICAgICBpZiggIWhhdmVWaXNpYmxlVHlwZSAmJiBk
LT5tX3R5cGVWaXNpYmlsaXR5VHJlZS0+aXNWaXNpYmxlKHR5cGUpICkKKyAgICAgICAgICAgIGhh
dmVWaXNpYmxlVHlwZSA9IHRydWU7CisgICAgfQorICAgIFFTZXQ8UVVybD46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHN1cGVyVHlwZXMuY29uc3RFbmQoKTsKKyAgICBmb3IoIFFTZXQ8UVVybD46OmNv
bnN0X2l0ZXJhdG9yIHR5cGVJdCA9IHN1cGVyVHlwZXMuY29uc3RCZWdpbigpOyB0eXBlSXQgIT0g
ZW5kOyArK3R5cGVJdCApIHsKKyAgICAgICAgcGFyZW50TW9kZWwoKS0+YWRkU3RhdGVtZW50KHJl
c291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Vm9j
YWJ1bGFyeTo6UkRGOjp0eXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqdHlwZUl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JhcHB5SW5m
ZXJlbmNlQ29udGV4dCgpKTsKKyAgICB9CisKKyAgICAvLyB0aGUgdmlzaWJpbGl0eSBjYW4gb25s
eSBjaGFuZ2UgaWYgd2UgYWRkIGEgdmlzaWJsZSB0eXBlCisgICAgaWYoIGhhdmVWaXNpYmxlVHlw
ZSApIHsKKyAgICAgICAgc2V0VmlzaWJpbGl0eSggcmVzb3VyY2UsIHRydWUgKTsKKyAgICB9Cit9
CisKK3ZvaWQgQ3JhcHB5SW5mZXJlbmNlcjI6OnJlbW92ZUluZmVyZW5jZVN0YXRlbWVudHMoY29u
c3QgUVVybCAmcmVzb3VyY2UsIGNvbnN0IFFVcmwgJnR5cGUpCit7CisgICAgcmVtb3ZlSW5mZXJl
bmNlU3RhdGVtZW50cyggcmVzb3VyY2UsIFFMaXN0PFFVcmw+KCkgPDwgdHlwZSApOworfQorCit2
b2lkIENyYXBweUluZmVyZW5jZXIyOjpyZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCBjb25zdCBR
VXJsJiByZXNvdXJjZSwgY29uc3QgUUxpc3Q8U29wcmFubzo6Tm9kZT4mIHR5cGVzICkKK3sKKyAg
ICBRTGlzdDxRVXJsPiB1cmlzOworICAgIFFfRk9SRUFDSCggY29uc3QgU29wcmFubzo6Tm9kZSYg
bm9kZSwgdHlwZXMgKQorICAgICAgICB1cmlzIDw8IG5vZGUudXJpKCk7CisgICAgcmVtb3ZlSW5m
ZXJlbmNlU3RhdGVtZW50cyggcmVzb3VyY2UsIHVyaXMgKTsKK30KKworLy8gQWx3YXlzIGNhbGxl
ZCAqYWZ0ZXIqIHJlbW92aW5nIHRoZSBhY3R1YWwgc3RhdGVtZW50cwordm9pZCBDcmFwcHlJbmZl
cmVuY2VyMjo6cmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyhjb25zdCBRVXJsICZyZXNvdXJjZSwg
Y29uc3QgUUxpc3Q8UVVybD4gJnR5cGVzKQoreworICAgIC8vIHdlIGNhbm5vdCBzaW1wbHkgcmVt
b3ZlIGFsbCBzdXBlciB0eXBlcyBzaW5jZSB0aGUgcmVzb3VyY2UgbWlnaHQgc3RpbGwgaGF2ZSB0
eXBlcyB0aGF0IGFyZSBzb21ld2hlcmUgaW4gdGhhdCBoaWVyYXJjaHkKKworICAgIC8vIGRldGVy
bWluZSB0aGUgdHlwZXMgdGhhdCBzaG91bGQgYmUgaW4gdGhlIGRhdGFiYXNlIG5vdworICAgIGNv
bnN0IFFTZXQ8UVVybD4gY29ycmVjdFR5cGVzID0gZC0+cXVlcnlSZXNvdXJjZVR5cGVzKHJlc291
cmNlKTsKKyAgICBRU2V0PFFVcmw+IGNvcnJlY3RTdXBlclR5cGVzOworICAgIFFfRk9SRUFDSCgg
Y29uc3QgUVVybCYgdHlwZSwgY29ycmVjdFR5cGVzICkgeworICAgICAgICBjb3JyZWN0U3VwZXJU
eXBlcyArPSBkLT5zdXBlckNsYXNzZXModHlwZSk7CisgICAgfQorCisgICAgLy8gbm93IGNvbXBh
cmUgdGhhdCBsaXN0IHdpdGggdGhlIG9uZXMgdGhhdCB3ZSBjb3VsZCByZW1vdmUKKyAgICBRU2V0
PFFVcmw+IHR5cGVzVG9SZW1vdmU7CisgICAgUV9GT1JFQUNIKCBjb25zdCBRVXJsJiB0eXBlLCBR
U2V0PFFVcmw+Ojpmcm9tTGlzdCh0eXBlcykgKQorICAgICAgICB0eXBlc1RvUmVtb3ZlICs9IGQt
PnN1cGVyQ2xhc3Nlcyh0eXBlKTsKKyAgICB0eXBlc1RvUmVtb3ZlIC09IGNvcnJlY3RTdXBlclR5
cGVzOworCisgICAgYm9vbCBoYXZlVmlzaWJsZVR5cGUgPSBmYWxzZTsKKyAgICBRX0ZPUkVBQ0go
IGNvbnN0IFFVcmwmIHR5cGVUb1JlbW92ZSwgdHlwZXNUb1JlbW92ZSApIHsKKyAgICAgICAgaWYo
ICFoYXZlVmlzaWJsZVR5cGUgJiYgZC0+bV90eXBlVmlzaWJpbGl0eVRyZWUtPmlzVmlzaWJsZSh0
eXBlVG9SZW1vdmUpICkKKyAgICAgICAgICAgIGhhdmVWaXNpYmxlVHlwZSA9IHRydWU7CisgICAg
ICAgIHBhcmVudE1vZGVsKCktPnJlbW92ZVN0YXRlbWVudChyZXNvdXJjZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcHJhbm86OlZvY2FidWxhcnk6OlJERjo6dHlw
ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVRvUmVtb3Zl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JhcHB5SW5mZXJlbmNl
Q29udGV4dCgpKTsKKyAgICB9CisKKyAgICAvLyByZW1vdmUgdGhlIHZpc2liaWxpdHkgaWYgbmVj
ZXNzYXJ5CisgICAgLy8gb25seSBiZSByZW1vdmluZyB2aXNpYmxlIHR5cGVzIHdlIGNhbiBjaGFu
Z2UgdGhlIGFjdHVhbCB2aXNpYmlsaXR5CisgICAgaWYoIGhhdmVWaXNpYmxlVHlwZSApIHsKKyAg
ICAgICAgc2V0VmlzaWJpbGl0eSggcmVzb3VyY2UsICFjb3JyZWN0VHlwZXMuaXNFbXB0eSgpICYm
IGQtPmlzVmlzaWJsZUZyb21UeXBlcyhjb3JyZWN0VHlwZXMpICk7CisgICAgfQorfQorCit2b2lk
IENyYXBweUluZmVyZW5jZXIyOjpzZXRWaXNpYmlsaXR5KGNvbnN0IFFVcmwgJnJlc291cmNlLCBi
b29sIHZpc2libGUpCit7CisgICAgLy8gd2UgdXNlIGFuIGludGVnZXIgaW5zdGVhZCBvZiBhIGJv
b2xlYW4gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IHZpcnR1b3NvIGRvZXMgbm90IHN1cHBvcnQg
Ym9vbCBhbmQgU29wcmFubyBjb252ZXJ0cyB0aGVtIHRvIHN0cmluZ3MKKyAgICBpZiggdmlzaWJs
ZSApIHsKKyAgICAgICAgcGFyZW50TW9kZWwoKS0+YWRkU3RhdGVtZW50KHJlc291cmNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFP
Ojp1c2VyVmlzaWJsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29w
cmFubzo6TGl0ZXJhbFZhbHVlKDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAg
IHBhcmVudE1vZGVsKCktPnJlbW92ZUFsbFN0YXRlbWVudHMocmVzb3VyY2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29wcmFubzo6Vm9jYWJ1bGFyeTo6TkFP
Ojp1c2VyVmlzaWJsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNvcHJhbm86Ok5vZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjcmFwcHlJbmZlcmVuY2VDb250ZXh0KCkpOworICAgIH0KK30KKworI2luY2x1ZGUg
ImNyYXBweWluZmVyZW5jZXIyLm1vYyIKSW5kZXg6IHNlcnZpY2VzL3N0b3JhZ2UvcmVwb3NpdG9y
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0b3JhZ2UvcmVwb3NpdG9yeS5oCShyZXZpc2lv
biAxMjEzOTQwKQorKysgc2VydmljZXMvc3RvcmFnZS9yZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDExICsyOSwyNyBAQAogfQogCiBjbGFzcyBLSm9iOworY2xhc3MgQ3JhcHB5SW5m
ZXJlbmNlcjI7CiAKIG5hbWVzcGFjZSBOZXBvbXVrIHsKIAogICAgIGNsYXNzIE1vZGVsQ29weUpv
YjsKIAorICAgIC8qKgorICAgICAqIFJlcHJlc2VudHMgdGhlIG1haW4gTmVwb211ayBtb2RlbC4g
V2hpbGUgaXQgbG9va3MgYXMgaWYgdGhlcmUgY291bGQgYmUgbW9yZSB0aGFuCisgICAgICogb25l
IGluc3RhbmNlIG9mIFJlcG9zaXRvcnkgdGhlcmUgaXMgb25seSB0aGUgb25lLgorICAgICAqCisg
ICAgICogUmVwb3NpdG9yeSBpcyBiYXNlZCBvbiBOUkxNb2RlbCBvbmx5IGZvciB0aGUgcXVlcnkg
cHJlZml4IGV4cGFuc2lvbiBmZWF0dXJlLiBJdAorICAgICAqIHVzZXMgYSBTb3ByYW5vOjpVdGls
czo6U2lnbmFsQ2FjaGVNb2RlbCB0byBjb21wYWN0IHRoZSBzZXZlcmFsIHN0YXRlbWVudHNBZGRl
ZCgpCisgICAgICogYW5kIHN0YXRlbWVudHNSZW1vdmVkKCkgc2lnbmFscywgYW5kIHVzZXMgQ3Jh
cHB5SW5mZXJlbmNlcjIgdG8ga2VlcCByZGZzOnN1YkNsYXNzT2YKKyAgICAgKiBhbmQgbmFvOnVz
ZXJWaXNpYmxlIGluZmVyZW5jZSB1cC10by1kYXRlLgorICAgICAqCisgICAgICogT24gY29uc3Ry
dWN0aW9uIGl0IGNoZWNrcyBmb3IgYW5kIG9wdGlvbmFsbHkgcGVyZm9ybXMgY29udmVyc2lvbiBm
cm9tIGFuIG9sZCByZXBvc2l0b3J5CisgICAgICogdHlwZSAocHJlLVZpcnR1b3NvIHRpbWVzKSBh
bmQgcnVucyBDcmFwcHlJbmZlcmVuY2VyMjo6dXBkYXRlQWxsUmVzb3VyY2VzKCkgd2hpY2ggaXMK
KyAgICAgKiBwZXJmb3JtZWQgaW4gYSBzZXBhcmF0ZSB0aHJlYWQuCisgICAgICoKKyAgICAgKiBc
YXV0aG9yIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKyAgICAgKi8KICAgICBjbGFz
cyBSZXBvc2l0b3J5IDogcHVibGljIFNvcHJhbm86Ok5STE1vZGVsCiAgICAgewogICAgICAgICBR
X09CSkVDVApAQCAtNTksOSArNzUsMTAgQEAKICAgICAgICAgICogV2lsbCBlbWl0IHRoZSBvcGVu
ZWQgc2lnbmFsCiAgICAgICAgICAqLwogICAgICAgICB2b2lkIG9wZW4oKTsKLQogICAgICAgICB2
b2lkIGNsb3NlKCk7CiAKKyAgICAgICAgdm9pZCB1cGRhdGVJbmZlcmVuY2UoKTsKKwogICAgIFFf
U0lHTkFMUzoKICAgICAgICAgdm9pZCBvcGVuZWQoIFJlcG9zaXRvcnkqLCBib29sIHN1Y2Nlc3Mg
KTsKIApAQCAtNzUsNiArOTIsNyBAQAogICAgICAgICBTdGF0ZSBtX3N0YXRlOwogCiAgICAgICAg
IFNvcHJhbm86Ok1vZGVsKiBtX21vZGVsOworICAgICAgICBDcmFwcHlJbmZlcmVuY2VyMiogbV9p
bmZlcmVuY2VyOwogICAgICAgICBjb25zdCBTb3ByYW5vOjpCYWNrZW5kKiBtX2JhY2tlbmQ7CiAK
ICAgICAgICAgLy8gb25seSB1c2VkIGR1cmluZyBvcGVuaW5nCkluZGV4OiBzZXJ2aWNlcy9zdG9y
YWdlL29udG9sb2d5bWFuYWdlcm1vZGVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9y
YWdlL29udG9sb2d5bWFuYWdlcm1vZGVsLmNwcAkocmV2aXNpb24gMTIxMzk0MCkKKysrIHNlcnZp
Y2VzL3N0b3JhZ2Uvb250b2xvZ3ltYW5hZ2VybW9kZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw2ICsyMSw3IEBACiAKICNpbmNsdWRlIDxRdENvcmUvUVVybD4KICNpbmNsdWRlIDxRdENvcmUv
UURhdGVUaW1lPgorI2luY2x1ZGUgPFF0Q29yZS9RU2NvcGVkUG9pbnRlcj4KIAogI2luY2x1ZGUg
PFNvcHJhbm8vQmFja2VuZD4KICNpbmNsdWRlIDxTb3ByYW5vL1ZlcnNpb24+CkBAIC0yMjUsMjMg
KzIyNiw2IEBACiAgICAgICAgIHRtcE1vZGVsLT5hZGRTdGF0ZW1lbnQoIFNvcHJhbm86OlN0YXRl
bWVudCggZGF0YUdyYXBoVXJpLCBTb3ByYW5vOjpWb2NhYnVsYXJ5OjpOQU86Omhhc0RlZmF1bHRO
YW1lc3BhY2UoKSwgTGl0ZXJhbFZhbHVlKCBucy50b1N0cmluZygpICksIG1ldGFEYXRhR3JhcGhV
cmkgKSApOwogI2VuZGlmCiAgICAgfQotCi0gICAgLyoqCi0gICAgICogU2ltcGxlIGdhcmJhZ2Ug
Y29sbGVjdGlvbiBjbGFzcy4KLSAgICAgKi8KLSAgICBjbGFzcyBPYmplY3RHYXJiYWdlQ29sbGVj
dG9yCi0gICAgewotICAgIHB1YmxpYzoKLSAgICAgICAgT2JqZWN0R2FyYmFnZUNvbGxlY3Rvcigg
UU9iamVjdCogbyApCi0gICAgICAgICAgICA6IG1fb2JqZWN0KCBvICkgewotICAgICAgICB9Ci0g
ICAgICAgIH5PYmplY3RHYXJiYWdlQ29sbGVjdG9yKCkgewotICAgICAgICAgICAgZGVsZXRlIG1f
b2JqZWN0OwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBRT2JqZWN0KiBtX29i
amVjdDsKLSAgICB9OwogfQogCiAKQEAgLTMwOCw3ICsyOTIsNyBAQAogICAgIH0KIAogICAgIC8v
IHNvIHdlIGRvIG5vdCBoYXZlIHRvIGNhcmUgYWJvdXQgZGVsZXRpbmcgb3V0IHRtcE1vZGVsIGFu
eW1vcmUuCi0gICAgT2JqZWN0R2FyYmFnZUNvbGxlY3RvciBtb2RlbEdhcmJhZ2VDb2xsZWN0b3Io
IHRtcE1vZGVsICk7CisgICAgUVNjb3BlZFBvaW50ZXI8U29wcmFubzo6TW9kZWw+IG1vZGVsR2Fy
YmFnZUNvbGxlY3RvciggdG1wTW9kZWwgKTsKIAogICAgIC8vIGltcG9ydCB0aGUgZGF0YSBpbnRv
IG91ciB0bXAgbW9kZWwKICAgICB3aGlsZSAoIGRhdGEubmV4dCgpICkgewpJbmRleDogc2Vydmlj
ZXMvc3RvcmFnZS9jcmFwcHlpbmZlcmVuY2VyMi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlcnZpY2VzL3N0
b3JhZ2UvY3JhcHB5aW5mZXJlbmNlcjIuaAkocmV2aXNpb24gMCkKKysrIHNlcnZpY2VzL3N0b3Jh
Z2UvY3JhcHB5aW5mZXJlbmNlcjIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OCBAQAorLyoK
KyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBOZXBvbXVrIEtERSBwcm9qZWN0LgorICAgQ29w
eXJpZ2h0IChDKSAyMDEwIFNlYmFzdGlhbiBUcnVlZyA8dHJ1ZWdAa2RlLm9yZz4KKworICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSB2ZXJzaW9uIDMsIG9yIGFueQorICAgbGF0ZXIgdmVyc2lvbiBhY2NlcHRlZCBi
eSB0aGUgbWVtYmVyc2hpcCBvZiBLREUgZS5WLiAob3IgaXRzCisgICBzdWNjZXNzb3IgYXBwcm92
ZWQgYnkgdGhlIG1lbWJlcnNoaXAgb2YgS0RFIGUuVi4pLCB3aGljaCBzaGFsbAorICAgYWN0IGFz
IGEgcHJveHkgZGVmaW5lZCBpbiBTZWN0aW9uIDYgb2YgdmVyc2lvbiAzIG9mIHRoZSBsaWNlbnNl
LgorCisgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v
cmcvbGljZW5zZXMvPi4KKyovCisKKyNpZm5kZWYgQ1JBUFBZSU5GRVJFTkNFUjJfSAorI2RlZmlu
ZSBDUkFQUFlJTkZFUkVOQ0VSMl9ICisKKyNpbmNsdWRlIDxTb3ByYW5vL0ZpbHRlck1vZGVsPgor
CisvKioKKyAqIFRoZSBzZWNvbmQgdmVyc2lvbiBvZiB0aGUgY3JhcHB5IGluZmVyZW5jZXIgaXQg
ZXZlbiBjcmFwcGllciB0aGFuIHRoZSBmaXJzdC4KKyAqIEl0IG9ubHkgZG9lcyByZGY6dHlwZSBp
bmZlcmVuY2luZywgbm90aGluZyBlbHNlLiBJbiB0aGUgbG9uZyBydW4gdGhpcyBpcyBub3QKKyAq
IGVub3VnaCBidXQgZm9yIG5vdyBpdCBpcyB0aGUgb25seSBraW5kIG9mIGluZmVyZW5jZSB3ZSB1
c2UgaW4gTmVwb211ay4KKyAqIFRodXMsIGl0IGlzIGVub3VnaCBhbmQgbWFrZXMgZm9yIG11Y2gg
ZmFzdGVyIHF1ZXJpZXMgdGhhbiB0aGUgZmlyc3QKKyAqIGNyYXBweSBpbmZlcmVuY2VyLgorICoK
KyAqIFxhdXRob3IgU2ViYXN0aWFuIFRydWVnIDx0cnVlZ0BrZGUub3JnPgorICovCitjbGFzcyBD
cmFwcHlJbmZlcmVuY2VyMiA6IHB1YmxpYyBTb3ByYW5vOjpGaWx0ZXJNb2RlbAoreworICAgIFFf
T0JKRUNUCisKK3B1YmxpYzoKKyAgICBDcmFwcHlJbmZlcmVuY2VyMihTb3ByYW5vOjpNb2RlbCog
cGFyZW50ID0gMCk7CisgICAgfkNyYXBweUluZmVyZW5jZXIyKCk7CisKKyAgICAvKioKKyAgICAg
KiBccmVpbXBsIHRvIHVwZGF0ZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzCisgICAgICovCisgICAgdm9p
ZCBzZXRQYXJlbnRNb2RlbCggU29wcmFubzo6TW9kZWwqIG1vZGVsICk7CisKKyAgICBTb3ByYW5v
OjpFcnJvcjo6RXJyb3JDb2RlIGFkZFN0YXRlbWVudCggY29uc3QgU29wcmFubzo6U3RhdGVtZW50
JiBzdGF0ZW1lbnQgKTsKKyAgICBTb3ByYW5vOjpFcnJvcjo6RXJyb3JDb2RlIHJlbW92ZVN0YXRl
bWVudCggY29uc3QgU29wcmFubzo6U3RhdGVtZW50JiBzdGF0ZW1lbnQgKTsKKyAgICBTb3ByYW5v
OjpFcnJvcjo6RXJyb3JDb2RlIHJlbW92ZUFsbFN0YXRlbWVudHMoIGNvbnN0IFNvcHJhbm86OlN0
YXRlbWVudCYgc3RhdGVtZW50ICk7CisKKyAgICB1c2luZyBTb3ByYW5vOjpGaWx0ZXJNb2RlbDo6
YWRkU3RhdGVtZW50OworICAgIHVzaW5nIFNvcHJhbm86OkZpbHRlck1vZGVsOjpyZW1vdmVTdGF0
ZW1lbnQ7CisgICAgdXNpbmcgU29wcmFubzo6RmlsdGVyTW9kZWw6OnJlbW92ZUFsbFN0YXRlbWVu
dHM7CisKKyAgICAvKioKKyAgICAgKiBBbGwgaW5mZXJyZWQgdHJpcGxlcyBhcmUgc3RvcmVkIGlu
IHRoZSBvbmUgY3JhcHB5IGluZmVyZW5jZSBncmFwaC4KKyAgICAgKiBUaHVzLCByZW1vdmluZyBp
bmZlcmVuY2UgaXMgYXMgc2ltcGxlIGFzIHJlbW92aW5nIHRoaXMgb25lIGdyYXBoLgorICAgICAq
LworICAgIFFVcmwgY3JhcHB5SW5mZXJlbmNlQ29udGV4dCgpIGNvbnN0OworCitRX1NJR05BTFM6
CisgICAgLyoqCisgICAgICogRW1pdHRlZCBvbmNlIGEgY2FsbCB0byB1cGRhdGVBbGxSZXNvdXJj
ZXMoKSBoYXMgZmluaXNoZWQuCisgICAgICovCisgICAgdm9pZCBhbGxSZXNvdXJjZXNVcGRhdGVk
KCk7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgaW50ZXJu
YWwgbWFwIG9mIHN1cGVyIHR5cGVzIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2gKKyAg
ICAgKiB0eXBlIHN0YXRlbWVudHMgbmVlZCB0byBiZSBhZGRlZCBhbmQgcmVtb3ZlZC4gSXQgbWFr
ZXMgc2Vuc2UgdG8gY2FsbCB0aGlzCisgICAgICogd2hlbiB0aGUgb250b2xvZ2llcyBpbiB0aGUg
bW9kZWwgY2hhbmdlLgorICAgICAqLworICAgIHZvaWQgdXBkYXRlSW5mZXJlbmNlSW5kZXgoKTsK
KworICAgIC8qKgorICAgICAqIFVwZGF0ZSBhbGwgdHlwZXMgb2YgYWxsIHJlc291cmNlcyBpbiB0
aGUgbW9kZWwuIFRoaXMgbWV0aG9kIHdpbGwgYWRkIHN1cGVydHlwZQorICAgICAqIHN0YXRlbWVu
dHMgYnV0IE5PVCByZW1vdmUgYW55IHN1cGVyZmx1b3VzIHN0YXRlbWVudHMuIFRvIGFjaGlldmUg
dGhlIGxhdHRlciBjYWxsCisgICAgICogcmVtb3ZlQ29udGV4dChjcmFwcHlJbmZlcmVuY2VDb250
ZXh0KCkpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLgorICAgICAqLworICAgIHZvaWQgdXBk
YXRlQWxsUmVzb3VyY2VzKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhZGRJbmZlcmVuY2VTdGF0
ZW1lbnRzKCBjb25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUVVybCYgdHlwZSApOworICAgIHZv
aWQgYWRkSW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3QgUVVybCYgcmVzb3VyY2UsIGNvbnN0IFFT
ZXQ8UVVybD4mIHR5cGVzICk7CisgICAgdm9pZCByZW1vdmVJbmZlcmVuY2VTdGF0ZW1lbnRzKCBj
b25zdCBRVXJsJiByZXNvdXJjZSwgY29uc3QgUVVybCYgdHlwZSApOworICAgIHZvaWQgcmVtb3Zl
SW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3QgUVVybCYgcmVzb3VyY2UsIGNvbnN0IFFMaXN0PFFV
cmw+JiB0eXBlcyApOworICAgIHZvaWQgcmVtb3ZlSW5mZXJlbmNlU3RhdGVtZW50cyggY29uc3Qg
UVVybCYgcmVzb3VyY2UsIGNvbnN0IFFMaXN0PFNvcHJhbm86Ok5vZGU+JiB0eXBlcyApOworCisg
ICAgdm9pZCBzZXRWaXNpYmlsaXR5KGNvbnN0IFFVcmwmIHJlc291cmNlLCBib29sIHZpc2libGUp
OworCisgICAgY2xhc3MgVXBkYXRlQWxsUmVzb3VyY2VzVGhyZWFkOworICAgIGNsYXNzIFByaXZh
dGU7CisgICAgUHJpdmF0ZSogY29uc3QgZDsKK307CisKKyNlbmRpZiAvLyBDUkFQUFlJTkZFUkVO
Q0VSMl9ICkluZGV4OiBzZXJ2aWNlcy9zdG9yYWdlL25lcG9tdWtjb3JlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL25lcG9tdWtjb3JlLmNwcAkocmV2aXNpb24gMTIxMzk0MCkK
KysrIHNlcnZpY2VzL3N0b3JhZ2UvbmVwb211a2NvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Nyw2ICs4Nyw5IEBACiAgICAgbV9yZXBvc2l0b3J5LT5zZXRFbmFibGVRdWVyeVByZWZpeEV4cGFu
c2lvbihmYWxzZSk7CiAgICAgbV9yZXBvc2l0b3J5LT5zZXRFbmFibGVRdWVyeVByZWZpeEV4cGFu
c2lvbih0cnVlKTsKIAorICAgIC8vIHRoZSBmaXJzdCB0aW1lIHRoaXMgaXMgYSB2ZXJ5IGxvbmcg
cHJvY2VkdXJlLiBUaHVzLCB3ZSBkbyBpdCB3aGlsZSBOZXBvbXVrIGlzIGFjdGl2ZSBhbHRob3Vn
aCB0aGVuIHNvbWUgcXVlcmllcyBtaWdodCByZXR1cm4gaW52YWxpZCByZXN1bHRzCisgICAgbV9y
ZXBvc2l0b3J5LT51cGRhdGVJbmZlcmVuY2UoKTsKKwogICAgIGlmICggIW1faW5pdGlhbGl6ZWQg
KSB7CiAgICAgICAgIC8vIGFuZCBmaW5hbGx5IHdlIGFyZSBkb25lOiB0aGUgcmVwb3NpdG9yeSBp
cyBvbmxpbmUgYW5kIHRoZSBvbnRvbG9naWVzIGFyZSBsb2FkZWQuCiAgICAgICAgIG1faW5pdGlh
bGl6ZWQgPSB0cnVlOwpJbmRleDogc2VydmljZXMvc3RvcmFnZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBzZXJ2aWNlcy9zdG9yYWdlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMjEz
OTQwKQorKysgc2VydmljZXMvc3RvcmFnZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTcsNiArMTcsOCBAQAogICBvbnRvbG9neW1hbmFnZXJtb2RlbC5jcHAKICAgZ3JhcGhyZXRy
aWV2ZXIuY3BwCiAgIGNyYXBweWluZmVyZW5jZXIuY3BwCisgIGNyYXBweWluZmVyZW5jZXIyLmNw
cAorICB0eXBldmlzaWJpbGl0eXRyZWUuY3BwCiAgICkKIAogc29wcmFub19hZGRfb250b2xvZ3ko
c3RvcmFnZV9TUkNTCkBAIC01NCwzICs1Niw1IEBACiAgIFRBUkdFVFMgbmVwb211a3N0b3JhZ2UK
ICAgREVTVElOQVRJT04gJHtQTFVHSU5fSU5TVEFMTF9ESVJ9KQogIyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCithZGRfc3ViZGlyZWN0b3J5KHRlc3QpCkluZGV4OiBvbnRvbG9naWVz
L2t1dm8udHJpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBvbnRvbG9naWVzL2t1dm8udHJpZwkocmV2aXNpb24g
MTIxMzk0MCkKKysrIG9udG9sb2dpZXMva3V2by50cmlnCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2
ICs0Nyw5IEBACiAgICAgcmRmczpSZXNvdXJjZQogICAgICAgICBuYW86dXNlclZpc2libGUgdHJ1
ZSAuCiAKKyAgICBuYW86dXNlclZpc2libGUKKyAgICAgICAgbmFvOnVzZXJWaXNpYmxlIGZhbHNl
IC4KKwogICAgIG51YW86RXZlbnQKICAgICAgICAgbmFvOnVzZXJWaXNpYmxlIGZhbHNlIC4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>60798</attachid>
            <date>2011-06-08 23:08:02 +0000</date>
            <delta_ts>2011-06-08 23:08:02 +0000</delta_ts>
            <desc>syslog</desc>
            <filename>syslog</filename>
            <type>text/plain</type>
            <size>20428</size>
            <attacher name="Ettore Atalan">atalanttore</attacher>
            
              <data encoding="base64">SnVuICA4IDE5OjE3OjAxIFJlY2hlbmtuZWNodCBDUk9OWzI1NDVdOiAocm9vdCkgQ01EICggICBj
ZCAvICYmIHJ1bi1wYXJ0cyAtLXJlcG9ydCAvZXRjL2Nyb24uaG91cmx5KQpKdW4gIDggMjA6MDQ6
MzkgUmVjaGVua25lY2h0IGtlcm5lbDogWyA2Mzc0LjIzOTkxMl0gW0Zpcm13YXJlIEJ1Z106IEFD
UEk6IEJJT1MgX09TSShMaW51eCkgcXVlcnkgaWdub3JlZApKdW4gIDggMjA6MDQ6MzkgUmVjaGVu
a25lY2h0IGtlcm5lbDogWyA2Mzc0LjIzOTk3MV0gW0Zpcm13YXJlIEJ1Z106IEFDUEk6IEJJT1Mg
X09TSShMaW51eCkgcXVlcnkgaWdub3JlZApKdW4gIDggMjA6MDU6NDAgUmVjaGVua25lY2h0IGtl
cm5lbDogWyA2NDM1LjUyMjU4Ml0gW0Zpcm13YXJlIEJ1Z106IEFDUEk6IEJJT1MgX09TSShMaW51
eCkgcXVlcnkgaWdub3JlZApKdW4gIDggMjA6MDU6NDAgUmVjaGVua25lY2h0IGtlcm5lbDogWyA2
NDM1LjUyMjcyN10gW0Zpcm13YXJlIEJ1Z106IEFDUEk6IEJJT1MgX09TSShMaW51eCkgcXVlcnkg
aWdub3JlZApKdW4gIDggMjA6MTc6MDEgUmVjaGVua25lY2h0IENST05bMzIxNF06IChyb290KSBD
TUQgKCAgIGNkIC8gJiYgcnVuLXBhcnRzIC0tcmVwb3J0IC9ldGMvY3Jvbi5ob3VybHkpCkp1biAg
OCAyMDo0NjoxMyBSZWNoZW5rbmVjaHQga2VybmVsOiBbIDg4NjguNTQ3NDQxXSBbRmlybXdhcmUg
QnVnXTogQUNQSTogQklPUyBfT1NJKExpbnV4KSBxdWVyeSBpZ25vcmVkCkp1biAgOCAyMDo0Njox
MyBSZWNoZW5rbmVjaHQga2VybmVsOiBbIDg4NjguNTQ3NTkxXSBbRmlybXdhcmUgQnVnXTogQUNQ
STogQklPUyBfT1NJKExpbnV4KSBxdWVyeSBpZ25vcmVkCkp1biAgOCAyMDo0Njo0MyBSZWNoZW5r
bmVjaHQga2VybmVsOiBbIDg4OTguMzAxNTQ4XSBbRmlybXdhcmUgQnVnXTogQUNQSTogQklPUyBf
T1NJKExpbnV4KSBxdWVyeSBpZ25vcmVkCkp1biAgOCAyMDo0Njo0MyBSZWNoZW5rbmVjaHQga2Vy
bmVsOiBbIDg4OTguMzAxNjkxXSBbRmlybXdhcmUgQnVnXTogQUNQSTogQklPUyBfT1NJKExpbnV4
KSBxdWVyeSBpZ25vcmVkCkp1biAgOCAyMDo0Njo0OCBSZWNoZW5rbmVjaHQga2VybmVsOiBbIDg5
MDMuODAzNTAxXSBbRmlybXdhcmUgQnVnXTogQUNQSTogQklPUyBfT1NJKExpbnV4KSBxdWVyeSBp
Z25vcmVkCkp1biAgOCAyMDo0Njo0OCBSZWNoZW5rbmVjaHQga2VybmVsOiBbIDg5MDMuODAzNjQ0
XSBbRmlybXdhcmUgQnVnXTogQUNQSTogQklPUyBfT1NJKExpbnV4KSBxdWVyeSBpZ25vcmVkCkp1
biAgOCAyMToxNDozNyBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTA1NzEuOTYwOTI0XSBbRmlybXdh
cmUgQnVnXTogQUNQSTogQklPUyBfT1NJKExpbnV4KSBxdWVyeSBpZ25vcmVkCkp1biAgOCAyMTox
NDozNyBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTA1NzEuOTYxMDY2XSBbRmlybXdhcmUgQnVnXTog
QUNQSTogQklPUyBfT1NJKExpbnV4KSBxdWVyeSBpZ25vcmVkCkp1biAgOCAyMToxNDozOSBSZWNo
ZW5rbmVjaHQga2VybmVsOiBbMTA1NzQuOTM2MjAwXSBbRmlybXdhcmUgQnVnXTogQUNQSTogQklP
UyBfT1NJKExpbnV4KSBxdWVyeSBpZ25vcmVkCkp1biAgOCAyMToxNDozOSBSZWNoZW5rbmVjaHQg
a2VybmVsOiBbMTA1NzQuOTM2MjU4XSBbRmlybXdhcmUgQnVnXTogQUNQSTogQklPUyBfT1NJKExp
bnV4KSBxdWVyeSBpZ25vcmVkCkp1biAgOCAyMToxNDo1NiBSZWNoZW5rbmVjaHQga2VybmVsOiBb
MTA1OTEuODQ2NjAxXSBbRmlybXdhcmUgQnVnXTogQUNQSTogQklPUyBfT1NJKExpbnV4KSBxdWVy
eSBpZ25vcmVkCkp1biAgOCAyMToxNDo1NiBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTA1OTEuODQ2
NzQ0XSBbRmlybXdhcmUgQnVnXTogQUNQSTogQklPUyBfT1NJKExpbnV4KSBxdWVyeSBpZ25vcmVk
Ckp1biAgOCAyMToxNDo1OSBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTA1OTQuMDIzMzc5XSBbRmly
bXdhcmUgQnVnXTogQUNQSTogQklPUyBfT1NJKExpbnV4KSBxdWVyeSBpZ25vcmVkCkp1biAgOCAy
MToxNDo1OSBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTA1OTQuMDIzNTIxXSBbRmlybXdhcmUgQnVn
XTogQUNQSTogQklPUyBfT1NJKExpbnV4KSBxdWVyeSBpZ25vcmVkCkp1biAgOCAyMToxNTowOSBS
ZWNoZW5rbmVjaHQga2VybmVsOiBbMTA2MDQuOTMzNjkwXSBbRmlybXdhcmUgQnVnXTogQUNQSTog
QklPUyBfT1NJKExpbnV4KSBxdWVyeSBpZ25vcmVkCkp1biAgOCAyMToxNTowOSBSZWNoZW5rbmVj
aHQga2VybmVsOiBbMTA2MDQuOTMzODM1XSBbRmlybXdhcmUgQnVnXTogQUNQSTogQklPUyBfT1NJ
KExpbnV4KSBxdWVyeSBpZ25vcmVkCkp1biAgOCAyMToxNToxNiBSZWNoZW5rbmVjaHQga2VybmVs
OiBbMTA2MTEuNjIxNzY4XSBbRmlybXdhcmUgQnVnXTogQUNQSTogQklPUyBfT1NJKExpbnV4KSBx
dWVyeSBpZ25vcmVkCkp1biAgOCAyMToxNToxNiBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTA2MTEu
NjIxOTExXSBbRmlybXdhcmUgQnVnXTogQUNQSTogQklPUyBfT1NJKExpbnV4KSBxdWVyeSBpZ25v
cmVkCkp1biAgOCAyMToxNzowMSBSZWNoZW5rbmVjaHQgQ1JPTlszODUwXTogKHJvb3QpIENNRCAo
ICAgY2QgLyAmJiBydW4tcGFydHMgLS1yZXBvcnQgL2V0Yy9jcm9uLmhvdXJseSkKSnVuICA4IDIy
OjE3OjAxIFJlY2hlbmtuZWNodCBDUk9OWzM5MzldOiAocm9vdCkgQ01EICggICBjZCAvICYmIHJ1
bi1wYXJ0cyAtLXJlcG9ydCAvZXRjL2Nyb24uaG91cmx5KQpKdW4gIDggMjI6NDM6NTEgUmVjaGVu
a25lY2h0IGtlcm5lbDogWzE1OTI2LjY1MzQ3MF0gW0Zpcm13YXJlIEJ1Z106IEFDUEk6IEJJT1Mg
X09TSShMaW51eCkgcXVlcnkgaWdub3JlZApKdW4gIDggMjI6NDM6NTEgUmVjaGVua25lY2h0IGtl
cm5lbDogWzE1OTI2LjY1MzYxNV0gW0Zpcm13YXJlIEJ1Z106IEFDUEk6IEJJT1MgX09TSShMaW51
eCkgcXVlcnkgaWdub3JlZApKdW4gIDggMjI6NDY6MjkgUmVjaGVua25lY2h0IGtlcm5lbDogWzE2
MDgwLjc2MDExMl0gSU5GTzogdGFzayB2aXJ0dW9zby10OjE4MDUgYmxvY2tlZCBmb3IgbW9yZSB0
aGFuIDEyMCBzZWNvbmRzLgpKdW4gIDggMjI6NDY6MjkgUmVjaGVua25lY2h0IGtlcm5lbDogWzE2
MDgwLjc2MDExNl0gImVjaG8gMCA+IC9wcm9jL3N5cy9rZXJuZWwvaHVuZ190YXNrX3RpbWVvdXRf
c2VjcyIgbGF1bmNocGFkZGlzYWJsZXMgdGhpcyBtZXNzYWdlLgpKdW4gIDggMjI6NDY6MjkgUmVj
aGVua25lY2h0IGtlcm5lbDogWzE2MDgwLjc2MDEyMF0gdmlydHVvc28tdCAgICAgIEQgMDAwMDAw
MDAwMDAwMDAwMCAgICAgMCAgMTgwNSAgIDE2OTkgMHgwMDAwMDAwMApKdW4gIDggMjI6NDY6Mjkg
UmVjaGVua25lY2h0IGtlcm5lbDogWzE2MDgwLjc2MDEyNV0gIGZmZmY4ODAwNTgxZjdiNjggMDAw
MDAwMDAwMDAwMDA4MiBmZmZmODgwMDU4MWY3ZmQ4IGZmZmY4ODAwNTgxZjYwMDAKSnVuICA4IDIy
OjQ2OjI5IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjA4MC43NjAxMzBdICAwMDAwMDAwMDAwMDEz
ZDAwIGZmZmY4ODAwNTgyNTMxNzggZmZmZjg4MDA1ODFmN2ZkOCAwMDAwMDAwMDAwMDEzZDAwCkp1
biAgOCAyMjo0NjoyOSBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYwODAuNzYwMTM1XSAgZmZmZmZm
ZmY4MWEwYjAyMCBmZmZmODgwMDU4MjUyZGMwIGZmZmY4ODAwN2RkOWU1YjggZmZmZjg4MDA3ZGEx
M2QwMApKdW4gIDggMjI6NDY6MjkgUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MDgwLjc2MDE0MV0g
Q2FsbCBUcmFjZToKSnVuICA4IDIyOjQ2OjI5IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjA4MC43
NjAxNTBdICBbPGZmZmZmZmZmODExMGMwNzA+XSA/IHN5bmNfcGFnZSsweDAvMHg1MApKdW4gIDgg
MjI6NDY6MjkgUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MDgwLjc2MDE1Nl0gIFs8ZmZmZmZmZmY4
MTVjMDk4MD5dIGlvX3NjaGVkdWxlKzB4NzAvMHhjMApKdW4gIDggMjI6NDY6MjkgUmVjaGVua25l
Y2h0IGtlcm5lbDogWzE2MDgwLjc2MDE2MF0gIFs8ZmZmZmZmZmY4MTEwYzBiMD5dIHN5bmNfcGFn
ZSsweDQwLzB4NTAKSnVuICA4IDIyOjQ2OjI5IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjA4MC43
NjAxNjRdICBbPGZmZmZmZmZmODE1YzEyZmY+XSBfX3dhaXRfb25fYml0KzB4NWYvMHg5MApKdW4g
IDggMjI6NDY6MjkgUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MDgwLjc2MDE2OF0gIFs8ZmZmZmZm
ZmY4MTEwYzI3OD5dIHdhaXRfb25fcGFnZV9iaXQrMHg3OC8weDgwCkp1biAgOCAyMjo0NjoyOSBS
ZWNoZW5rbmVjaHQga2VybmVsOiBbMTYwODAuNzYwMTcyXSAgWzxmZmZmZmZmZjgxMDg3ZjcwPl0g
PyB3YWtlX2JpdF9mdW5jdGlvbisweDAvMHg1MApKdW4gIDggMjI6NDY6MjkgUmVjaGVua25lY2h0
IGtlcm5lbDogWzE2MDgwLjc2MDE3Nl0gIFs8ZmZmZmZmZmY4MTEwZGZmZD5dIF9fbG9ja19wYWdl
X29yX3JldHJ5KzB4M2QvMHg3MApKdW4gIDggMjI6NDY6MjkgUmVjaGVua25lY2h0IGtlcm5lbDog
WzE2MDgwLjc2MDE4MF0gIFs8ZmZmZmZmZmY4MTEwZTNjNz5dIGZpbGVtYXBfZmF1bHQrMHgzOTcv
MHg0YTAKSnVuICA4IDIyOjQ2OjI5IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjA4MC43NjAxODRd
ICBbPGZmZmZmZmZmODExMmQxMzQ+XSBfX2RvX2ZhdWx0KzB4NTQvMHg1MjAKSnVuICA4IDIyOjQ2
OjI5IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjA4MC43NjAxODhdICBbPGZmZmZmZmZmODExMzA5
Y2E+XSBoYW5kbGVfcHRlX2ZhdWx0KzB4ZmEvMHgyMTAKSnVuICA4IDIyOjQ2OjI5IFJlY2hlbmtu
ZWNodCBrZXJuZWw6IFsxNjA4MC43NjAxOTJdICBbPGZmZmZmZmZmODExMTU2MWQ+XSA/IF9fZnJl
ZV9wYWdlcysweDJkLzB4NDAKSnVuICA4IDIyOjQ2OjI5IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsx
NjA4MC43NjAxOTVdICBbPGZmZmZmZmZmODExMmRlM2Y+XSA/IF9fcHRlX2FsbG9jKzB4ZGYvMHgx
MDAKSnVuICA4IDIyOjQ2OjI5IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjA4MC43NjAxOTldICBb
PGZmZmZmZmZmODExMzFkNGQ+XSBoYW5kbGVfbW1fZmF1bHQrMHgxNmQvMHgyNTAKSnVuICA4IDIy
OjQ2OjI5IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjA4MC43NjAyMDNdICBbPGZmZmZmZmZmODE1
YzZhNDc+XSBkb19wYWdlX2ZhdWx0KzB4MWE3LzB4NTQwCkp1biAgOCAyMjo0NjoyOSBSZWNoZW5r
bmVjaHQga2VybmVsOiBbMTYwODAuNzYwMjA5XSAgWzxmZmZmZmZmZjgxMDkyZWIxPl0gPyBrdGlt
ZV9nZXRfdHMrMHhiMS8weGYwCkp1biAgOCAyMjo0NjoyOSBSZWNoZW5rbmVjaHQga2VybmVsOiBb
MTYwODAuNzYwMjE0XSAgWzxmZmZmZmZmZjgxMTc3MjUyPl0gPyBwb2xsX3NlbGVjdF9jb3B5X3Jl
bWFpbmluZysweGYyLzB4MTQwCkp1biAgOCAyMjo0NjoyOSBSZWNoZW5rbmVjaHQga2VybmVsOiBb
MTYwODAuNzYwMjI0XSAgWzxmZmZmZmZmZjgxNWMzNGQ1Pl0gcGFnZV9mYXVsdCsweDI1LzB4MzAK
SnVuICA4IDIyOjQ4OjI2IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAwNjldIElORk86
IHRhc2sgbmVwb211a3NlcnZpY2VzOjE2OTkgYmxvY2tlZCBmb3IgbW9yZSB0aGFuIDEyMCBzZWNv
bmRzLgpKdW4gIDggMjI6NDg6MjcgUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDA3NF0g
ImVjaG8gMCA+IC9wcm9jL3N5cy9rZXJuZWwvaHVuZ190YXNrX3RpbWVvdXRfc2VjcyIgZGlzYWJs
ZXMgdGhpcyBtZXNzYWdlLgpKdW4gIDggMjI6NDg6MjcgUmVjaGVua25lY2h0IGtlcm5lbDogWzE2
MjAwLjc2MDA3N10gbmVwb211a3NlcnZpY2VzIEQgMDAwMDAwMDAwMDAwMDAwMCAgICAgMCAgMTY5
OSAgIDE2ODYgMHgwMDAwMDAwMApKdW4gIDggMjI6NDg6MjcgUmVjaGVua25lY2h0IGtlcm5lbDog
WzE2MjAwLjc2MDA4Ml0gIGZmZmY4ODAwNTk5OTViOTggMDAwMDAwMDAwMDAwMDA4NiBmZmZmODgw
MDU5OTk1ZmQ4IGZmZmY4ODAwNTk5OTQwMDAKSnVuICA4IDIyOjQ4OjI3IFJlY2hlbmtuZWNodCBr
ZXJuZWw6IFsxNjIwMC43NjAwODhdICAwMDAwMDAwMDAwMDEzZDAwIGZmZmY4ODAwNzUyNTQ4NTgg
ZmZmZjg4MDA1OTk5NWZkOCAwMDAwMDAwMDAwMDEzZDAwCkp1biAgOCAyMjo0ODoyNyBSZWNoZW5r
bmVjaHQga2VybmVsOiBbMTYyMDAuNzYwMDkzXSAgZmZmZjg4MDA1ODI1NDRhMCBmZmZmODgwMDc1
MjU0NGEwIGZmZmY4ODAwN2RkOWZjYzggZmZmZjg4MDA3ZGExM2QwMApKdW4gIDggMjI6NDg6Mjcg
UmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDA5OF0gQ2FsbCBUcmFjZToKSnVuICA4IDIy
OjQ4OjI3IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAxMDddICBbPGZmZmZmZmZmODEx
MGMwNzA+XSA/IHN5bmNfcGFnZSsweDAvMHg1MApKdW4gIDggMjI6NDg6MjcgUmVjaGVua25lY2h0
IGtlcm5lbDogWzE2MjAwLjc2MDExMl0gIFs8ZmZmZmZmZmY4MTVjMDk4MD5dIGlvX3NjaGVkdWxl
KzB4NzAvMHhjMApKdW4gIDggMjI6NDg6MjcgUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2
MDExNl0gIFs8ZmZmZmZmZmY4MTEwYzBiMD5dIHN5bmNfcGFnZSsweDQwLzB4NTAKSnVuICA4IDIy
OjQ4OjI3IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAxMjBdICBbPGZmZmZmZmZmODE1
YzEyZmY+XSBfX3dhaXRfb25fYml0KzB4NWYvMHg5MApKdW4gIDggMjI6NDg6MjcgUmVjaGVua25l
Y2h0IGtlcm5lbDogWzE2MjAwLjc2MDEyNF0gIFs8ZmZmZmZmZmY4MTE0MDc3Zj5dID8gcmVhZF9z
d2FwX2NhY2hlX2FzeW5jKzB4NGYvMHgxNjAKSnVuICA4IDIyOjQ4OjI3IFJlY2hlbmtuZWNodCBr
ZXJuZWw6IFsxNjIwMC43NjAxMjhdICBbPGZmZmZmZmZmODExMGMyNzg+XSB3YWl0X29uX3BhZ2Vf
Yml0KzB4NzgvMHg4MApKdW4gIDggMjI6NDg6MjcgUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAw
Ljc2MDEzM10gIFs8ZmZmZmZmZmY4MTA4N2Y3MD5dID8gd2FrZV9iaXRfZnVuY3Rpb24rMHgwLzB4
NTAKSnVuICA4IDIyOjQ4OjI3IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAxMzddICBb
PGZmZmZmZmZmODExMGRmZmQ+XSBfX2xvY2tfcGFnZV9vcl9yZXRyeSsweDNkLzB4NzAKSnVuICA4
IDIyOjQ4OjI3IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAxNDFdICBbPGZmZmZmZmZm
ODExMmYwOTA+XSBkb19zd2FwX3BhZ2UuY2xvbmUuNTArMHg1ZTAvMHg2NDAKSnVuICA4IDIyOjQ4
OjI3IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAxNDZdICBbPGZmZmZmZmZmODExNzcx
MDA+XSA/IHBvbGx3YWtlKzB4MC8weDYwCkp1biAgOCAyMjo0ODoyNyBSZWNoZW5rbmVjaHQga2Vy
bmVsOiBbMTYyMDAuNzYwMTUwXSAgWzxmZmZmZmZmZjgxMTMwYTg5Pl0gaGFuZGxlX3B0ZV9mYXVs
dCsweDFiOS8weDIxMApKdW4gIDggMjI6NDg6MjcgUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAw
Ljc2MDE1NF0gIFs8ZmZmZmZmZmY4MTExNTYxZD5dID8gX19mcmVlX3BhZ2VzKzB4MmQvMHg0MApK
dW4gIDggMjI6NDg6MjcgUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDE1N10gIFs8ZmZm
ZmZmZmY4MTEyZGUzZj5dID8gX19wdGVfYWxsb2MrMHhkZi8weDEwMApKdW4gIDggMjI6NDg6Mjcg
UmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDE2MV0gIFs8ZmZmZmZmZmY4MTEzMWQ0ZD5d
IGhhbmRsZV9tbV9mYXVsdCsweDE2ZC8weDI1MApKdW4gIDggMjI6NDg6MjcgUmVjaGVua25lY2h0
IGtlcm5lbDogWzE2MjAwLjc2MDE2NV0gIFs8ZmZmZmZmZmY4MTVjNmE0Nz5dIGRvX3BhZ2VfZmF1
bHQrMHgxYTcvMHg1NDAKSnVuICA4IDIyOjQ4OjI3IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIw
MC43NjAxNzBdICBbPGZmZmZmZmZmODExNjRmZDA+XSA/IHZmc19yZWFkKzB4MTIwLzB4MTgwCkp1
biAgOCAyMjo0ODoyNyBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwMTczXSAgWzxmZmZm
ZmZmZjgxNWMzNGQ1Pl0gcGFnZV9mYXVsdCsweDI1LzB4MzAKSnVuICA4IDIyOjQ4OjI3IFJlY2hl
bmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAxODBdIElORk86IHRhc2sgdmlydHVvc28tdDoxODA1
IGJsb2NrZWQgZm9yIG1vcmUgdGhhbiAxMjAgc2Vjb25kcy4KSnVuICA4IDIyOjQ4OjI3IFJlY2hl
bmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAxODJdICJlY2hvIDAgPiAvcHJvYy9zeXMva2VybmVs
L2h1bmdfdGFza190aW1lb3V0X3NlY3MiIGRpc2FibGVzIHRoaXMgbWVzc2FnZS4KSnVuICA4IDIy
OjQ4OjI3IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAxODRdIHZpcnR1b3NvLXQgICAg
ICBEIDAwMDAwMDAwMDAwMDAwMDAgICAgIDAgIDE4MDUgICAxNjk5IDB4MDAwMDAwMDAKSnVuICA4
IDIyOjQ4OjI3IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAxODldICBmZmZmODgwMDU4
MWY3YjY4IDAwMDAwMDAwMDAwMDAwODIgZmZmZjg4MDA1ODFmN2ZkOCBmZmZmODgwMDU4MWY2MDAw
Ckp1biAgOCAyMjo0ODoyNyBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwMTk0XSAgMDAw
MDAwMDAwMDAxM2QwMCBmZmZmODgwMDU4MjUzMTc4IGZmZmY4ODAwNTgxZjdmZDggMDAwMDAwMDAw
MDAxM2QwMApKdW4gIDggMjI6NDg6MjcgUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDE5
OV0gIGZmZmZmZmZmODFhMGIwMjAgZmZmZjg4MDA1ODI1MmRjMCBmZmZmODgwMDdkZDllNWI4IGZm
ZmY4ODAwN2RhMTNkMDAKSnVuICA4IDIyOjQ4OjI3IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIw
MC43NjAyMDRdIENhbGwgVHJhY2U6Ckp1biAgOCAyMjo0ODoyNyBSZWNoZW5rbmVjaHQga2VybmVs
OiBbMTYyMDAuNzYwMjA4XSAgWzxmZmZmZmZmZjgxMTBjMDcwPl0gPyBzeW5jX3BhZ2UrMHgwLzB4
NTAKSnVuICA4IDIyOjQ4OjI3IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAyMTddICBb
PGZmZmZmZmZmODE1YzA5ODA+XSBpb19zY2hlZHVsZSsweDcwLzB4YzAKSnVuICA4IDIyOjQ4OjI3
IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAyMjBdICBbPGZmZmZmZmZmODExMGMwYjA+
XSBzeW5jX3BhZ2UrMHg0MC8weDUwCkp1biAgOCAyMjo0ODoyNyBSZWNoZW5rbmVjaHQga2VybmVs
OiBbMTYyMDAuNzYwMjIzXSAgWzxmZmZmZmZmZjgxNWMxMmZmPl0gX193YWl0X29uX2JpdCsweDVm
LzB4OTAKSnVuICA4IDIyOjQ4OjI3IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAyMjdd
ICBbPGZmZmZmZmZmODExMGMyNzg+XSB3YWl0X29uX3BhZ2VfYml0KzB4NzgvMHg4MApKdW4gIDgg
MjI6NDg6MjcgUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDIzMF0gIFs8ZmZmZmZmZmY4
MTA4N2Y3MD5dID8gd2FrZV9iaXRfZnVuY3Rpb24rMHgwLzB4NTAKSnVuICA4IDIyOjQ4OjI3IFJl
Y2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAyMzRdICBbPGZmZmZmZmZmODExMGRmZmQ+XSBf
X2xvY2tfcGFnZV9vcl9yZXRyeSsweDNkLzB4NzAKSnVuICA4IDIyOjQ4OjI3IFJlY2hlbmtuZWNo
dCBrZXJuZWw6IFsxNjIwMC43NjAyMzddICBbPGZmZmZmZmZmODExMGUzYzc+XSBmaWxlbWFwX2Zh
dWx0KzB4Mzk3LzB4NGEwCkp1biAgOCAyMjo0ODoyNyBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYy
MDAuNzYwMjQxXSAgWzxmZmZmZmZmZjgxMTJkMTM0Pl0gX19kb19mYXVsdCsweDU0LzB4NTIwCkp1
biAgOCAyMjo0ODoyNyBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwMjQ0XSAgWzxmZmZm
ZmZmZjgxMTMwOWNhPl0gaGFuZGxlX3B0ZV9mYXVsdCsweGZhLzB4MjEwCkp1biAgOCAyMjo0ODoy
NyBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwMjQ3XSAgWzxmZmZmZmZmZjgxMTE1NjFk
Pl0gPyBfX2ZyZWVfcGFnZXMrMHgyZC8weDQwCkp1biAgOCAyMjo0ODoyNyBSZWNoZW5rbmVjaHQg
a2VybmVsOiBbMTYyMDAuNzYwMjUwXSAgWzxmZmZmZmZmZjgxMTJkZTNmPl0gPyBfX3B0ZV9hbGxv
YysweGRmLzB4MTAwCkp1biAgOCAyMjo0ODoyNyBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAu
NzYwMjUzXSAgWzxmZmZmZmZmZjgxMTMxZDRkPl0gaGFuZGxlX21tX2ZhdWx0KzB4MTZkLzB4MjUw
Ckp1biAgOCAyMjo0ODoyNyBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwMjU2XSAgWzxm
ZmZmZmZmZjgxNWM2YTQ3Pl0gZG9fcGFnZV9mYXVsdCsweDFhNy8weDU0MApKdW4gIDggMjI6NDg6
MjcgUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDI2MF0gIFs8ZmZmZmZmZmY4MTA5MmVi
MT5dID8ga3RpbWVfZ2V0X3RzKzB4YjEvMHhmMApKdW4gIDggMjI6NDg6MjcgUmVjaGVua25lY2h0
IGtlcm5lbDogWzE2MjAwLjc2MDI3MF0gIFs8ZmZmZmZmZmY4MTE3NzI1Mj5dID8gcG9sbF9zZWxl
Y3RfY29weV9yZW1haW5pbmcrMHhmMi8weDE0MApKdW4gIDggMjI6NDg6MjcgUmVjaGVua25lY2h0
IGtlcm5lbDogWzE2MjAwLjc2MDI3NF0gIFs8ZmZmZmZmZmY4MTVjMzRkNT5dIHBhZ2VfZmF1bHQr
MHgyNS8weDMwCkp1biAgOCAyMjo0ODoyNyBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYw
Mjc5XSBJTkZPOiB0YXNrIG5lcG9tdWtzZXJ2aWNlczoxODIwIGJsb2NrZWQgZm9yIG1vcmUgdGhh
biAxMjAgc2Vjb25kcy4KSnVuICA4IDIyOjQ4OjI3IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIw
MC43NjAyODFdICJlY2hvIDAgPiAvcHJvYy9zeXMva2VybmVsL2h1bmdfdGFza190aW1lb3V0X3Nl
Y3MiIGRpc2FibGVzIHRoaXMgbWVzc2FnZS4KSnVuICA4IDIyOjQ4OjI3IFJlY2hlbmtuZWNodCBr
ZXJuZWw6IFsxNjIwMC43NjAyODNdIG5lcG9tdWtzZXJ2aWNlcyBEIDAwMDAwMDAwMDAwMDAwMDAg
ICAgIDAgIDE4MjAgICAxNjg2IDB4MDAwMDAwMDAKSnVuICA4IDIyOjQ4OjI3IFJlY2hlbmtuZWNo
dCBrZXJuZWw6IFsxNjIwMC43NjAyODddICBmZmZmODgwMDU3OGNkYjk4IDAwMDAwMDAwMDAwMDAw
ODYgZmZmZjg4MDA1NzhjZGZkOCBmZmZmODgwMDU3OGNjMDAwCkp1biAgOCAyMjo0ODoyNyBSZWNo
ZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwMjkyXSAgMDAwMDAwMDAwMDAxM2QwMCBmZmZmODgw
MDU4MjI5YTk4IGZmZmY4ODAwNTc4Y2RmZDggMDAwMDAwMDAwMDAxM2QwMApKdW4gIDggMjI6NDg6
MjcgUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDI5Nl0gIGZmZmY4ODAwNzUyNTQ0YTAg
ZmZmZjg4MDA1ODIyOTZlMCBmZmZmODgwMDdkZGE4ZWE4IGZmZmY4ODAwN2RhMTNkMDAKSnVuICA4
IDIyOjQ4OjI3IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAzMDBdIENhbGwgVHJhY2U6
Ckp1biAgOCAyMjo0ODoyNyBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwMzA0XSAgWzxm
ZmZmZmZmZjgxMTBjMDcwPl0gPyBzeW5jX3BhZ2UrMHgwLzB4NTAKSnVuICA4IDIyOjQ4OjI3IFJl
Y2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAzMDddICBbPGZmZmZmZmZmODE1YzA5ODA+XSBp
b19zY2hlZHVsZSsweDcwLzB4YzAKSnVuICA4IDIyOjQ4OjI3IFJlY2hlbmtuZWNodCBrZXJuZWw6
IFsxNjIwMC43NjAzMTFdICBbPGZmZmZmZmZmODExMGMwYjA+XSBzeW5jX3BhZ2UrMHg0MC8weDUw
Ckp1biAgOCAyMjo0ODoyNyBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwMzE0XSAgWzxm
ZmZmZmZmZjgxNWMxMmZmPl0gX193YWl0X29uX2JpdCsweDVmLzB4OTAKSnVuICA4IDIyOjQ4OjI4
IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAzMTddICBbPGZmZmZmZmZmODExNDA3N2Y+
XSA/IHJlYWRfc3dhcF9jYWNoZV9hc3luYysweDRmLzB4MTYwCkp1biAgOCAyMjo0ODoyOCBSZWNo
ZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwMzIwXSAgWzxmZmZmZmZmZjgxMTBjMjc4Pl0gd2Fp
dF9vbl9wYWdlX2JpdCsweDc4LzB4ODAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJu
ZWw6IFsxNjIwMC43NjAzMjRdICBbPGZmZmZmZmZmODEwODdmNzA+XSA/IHdha2VfYml0X2Z1bmN0
aW9uKzB4MC8weDUwCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAu
NzYwMzI3XSAgWzxmZmZmZmZmZjgxMTBkZmZkPl0gX19sb2NrX3BhZ2Vfb3JfcmV0cnkrMHgzZC8w
eDcwCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwMzMwXSAg
WzxmZmZmZmZmZjgxMTJmMDkwPl0gZG9fc3dhcF9wYWdlLmNsb25lLjUwKzB4NWUwLzB4NjQwCkp1
biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwMzM0XSAgWzxmZmZm
ZmZmZjgxMTc3MTAwPl0gPyBwb2xsd2FrZSsweDAvMHg2MApKdW4gIDggMjI6NDg6MjggUmVjaGVu
a25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDMzN10gIFs8ZmZmZmZmZmY4MTEzMGE4OT5dIGhhbmRs
ZV9wdGVfZmF1bHQrMHgxYjkvMHgyMTAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJu
ZWw6IFsxNjIwMC43NjAzNDBdICBbPGZmZmZmZmZmODExMTU2MWQ+XSA/IF9fZnJlZV9wYWdlcysw
eDJkLzB4NDAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAz
NDNdICBbPGZmZmZmZmZmODExMmRlM2Y+XSA/IF9fcHRlX2FsbG9jKzB4ZGYvMHgxMDAKSnVuICA4
IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAzNDZdICBbPGZmZmZmZmZm
ODExMzFkNGQ+XSBoYW5kbGVfbW1fZmF1bHQrMHgxNmQvMHgyNTAKSnVuICA4IDIyOjQ4OjI4IFJl
Y2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAzNTBdICBbPGZmZmZmZmZmODE1YzZhNDc+XSBk
b19wYWdlX2ZhdWx0KzB4MWE3LzB4NTQwCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2Vy
bmVsOiBbMTYyMDAuNzYwMzUzXSAgWzxmZmZmZmZmZjgxMTY0ZmQwPl0gPyB2ZnNfcmVhZCsweDEy
MC8weDE4MApKdW4gIDggMjI6NDg6MjggUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDM1
N10gIFs8ZmZmZmZmZmY4MTVjMzRkNT5dIHBhZ2VfZmF1bHQrMHgyNS8weDMwCkp1biAgOCAyMjo0
ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwMzYwXSBJTkZPOiB0YXNrIG5lcG9t
dWtzZXJ2aWNlczoxODIyIGJsb2NrZWQgZm9yIG1vcmUgdGhhbiAxMjAgc2Vjb25kcy4KSnVuICA4
IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAzNjJdICJlY2hvIDAgPiAv
cHJvYy9zeXMva2VybmVsL2h1bmdfdGFza190aW1lb3V0X3NlY3MiIGRpc2FibGVzIHRoaXMgbWVz
c2FnZS4KSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAzNjRd
IG5lcG9tdWtzZXJ2aWNlcyBEIDAwMDAwMDAwMDAwMDAwMDAgICAgIDAgIDE4MjIgICAxNjg2IDB4
MDAwMDAwMDAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAz
NjhdICBmZmZmODgwMDM1ZjgzYjY4IDAwMDAwMDAwMDAwMDAwODIgZmZmZjg4MDAzNWY4M2ZkOCBm
ZmZmODgwMDM1ZjgyMDAwCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYy
MDAuNzYwMzczXSAgMDAwMDAwMDAwMDAxM2QwMCBmZmZmODgwMDU4MjJiMTc4IGZmZmY4ODAwMzVm
ODNmZDggMDAwMDAwMDAwMDAxM2QwMApKdW4gIDggMjI6NDg6MjggUmVjaGVua25lY2h0IGtlcm5l
bDogWzE2MjAwLjc2MDM3OF0gIGZmZmZmZmZmODFhMGIwMjAgZmZmZjg4MDA1ODIyYWRjMCBmZmZm
ODgwMDdkZGEwZmU4IGZmZmY4ODAwN2RhMTNkMDAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNo
dCBrZXJuZWw6IFsxNjIwMC43NjAzODJdIENhbGwgVHJhY2U6Ckp1biAgOCAyMjo0ODoyOCBSZWNo
ZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwMzg1XSAgWzxmZmZmZmZmZjgxMTBjMDcwPl0gPyBz
eW5jX3BhZ2UrMHgwLzB4NTAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsx
NjIwMC43NjAzODldICBbPGZmZmZmZmZmODE1YzA5ODA+XSBpb19zY2hlZHVsZSsweDcwLzB4YzAK
SnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjAzOTJdICBbPGZm
ZmZmZmZmODExMGMwYjA+XSBzeW5jX3BhZ2UrMHg0MC8weDUwCkp1biAgOCAyMjo0ODoyOCBSZWNo
ZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwMzk1XSAgWzxmZmZmZmZmZjgxNWMxMmZmPl0gX193
YWl0X29uX2JpdCsweDVmLzB4OTAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6
IFsxNjIwMC43NjAzOTldICBbPGZmZmZmZmZmODExMGMyNzg+XSB3YWl0X29uX3BhZ2VfYml0KzB4
NzgvMHg4MApKdW4gIDggMjI6NDg6MjggUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDQw
Ml0gIFs8ZmZmZmZmZmY4MTA4N2Y3MD5dID8gd2FrZV9iaXRfZnVuY3Rpb24rMHgwLzB4NTAKSnVu
ICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjA0MDZdICBbPGZmZmZm
ZmZmODExMGRmZmQ+XSBfX2xvY2tfcGFnZV9vcl9yZXRyeSsweDNkLzB4NzAKSnVuICA4IDIyOjQ4
OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjA0MDldICBbPGZmZmZmZmZmODExMGUz
Yzc+XSBmaWxlbWFwX2ZhdWx0KzB4Mzk3LzB4NGEwCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVj
aHQga2VybmVsOiBbMTYyMDAuNzYwNDEyXSAgWzxmZmZmZmZmZjgxMTJkMTM0Pl0gX19kb19mYXVs
dCsweDU0LzB4NTIwCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAu
NzYwNDE2XSAgWzxmZmZmZmZmZjgxMTc3MTAwPl0gPyBwb2xsd2FrZSsweDAvMHg2MApKdW4gIDgg
MjI6NDg6MjggUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDQxOV0gIFs8ZmZmZmZmZmY4
MTEzMDljYT5dIGhhbmRsZV9wdGVfZmF1bHQrMHhmYS8weDIxMApKdW4gIDggMjI6NDg6MjggUmVj
aGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDQyMl0gIFs8ZmZmZmZmZmY4MTExNTYxZD5dID8g
X19mcmVlX3BhZ2VzKzB4MmQvMHg0MApKdW4gIDggMjI6NDg6MjggUmVjaGVua25lY2h0IGtlcm5l
bDogWzE2MjAwLjc2MDQyNV0gIFs8ZmZmZmZmZmY4MTEyZGUzZj5dID8gX19wdGVfYWxsb2MrMHhk
Zi8weDEwMApKdW4gIDggMjI6NDg6MjggUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDQy
OF0gIFs8ZmZmZmZmZmY4MTEzMWQ0ZD5dIGhhbmRsZV9tbV9mYXVsdCsweDE2ZC8weDI1MApKdW4g
IDggMjI6NDg6MjggUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDQzMV0gIFs8ZmZmZmZm
ZmY4MTVjNmE0Nz5dIGRvX3BhZ2VfZmF1bHQrMHgxYTcvMHg1NDAKSnVuICA4IDIyOjQ4OjI4IFJl
Y2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjA0MzZdICBbPGZmZmZmZmZmODEyNzljMTM+XSA/
IHNlY3VyaXR5X2ZpbGVfcGVybWlzc2lvbisweDkzLzB4YjAKSnVuICA4IDIyOjQ4OjI4IFJlY2hl
bmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjA0NDBdICBbPGZmZmZmZmZmODExNjRhYjE+XSA/IHJ3
X3ZlcmlmeV9hcmVhKzB4NjEvMHhmMApKdW4gIDggMjI6NDg6MjggUmVjaGVua25lY2h0IGtlcm5l
bDogWzE2MjAwLjc2MDQ0M10gIFs8ZmZmZmZmZmY4MTE2NTAxNz5dID8gdmZzX3JlYWQrMHgxNjcv
MHgxODAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjA0NDZd
ICBbPGZmZmZmZmZmODE1YzM0ZDU+XSBwYWdlX2ZhdWx0KzB4MjUvMHgzMApKdW4gIDggMjI6NDg6
MjggUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDQ0OV0gSU5GTzogdGFzayBuZXBvbXVr
c2VydmljZXM6MTgyNSBibG9ja2VkIGZvciBtb3JlIHRoYW4gMTIwIHNlY29uZHMuCkp1biAgOCAy
Mjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwNDUxXSAiZWNobyAwID4gL3By
b2Mvc3lzL2tlcm5lbC9odW5nX3Rhc2tfdGltZW91dF9zZWNzIiBkaXNhYmxlcyB0aGlzIG1lc3Nh
Z2UuCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwNDUzXSBu
ZXBvbXVrc2VydmljZXMgRCAwMDAwMDAwMDAwMDAwMDAwICAgICAwICAxODI1ICAgMTY4NiAweDAw
MDAwMDAwCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwNDU3
XSAgZmZmZjg4MDA1YzljOWI5OCAwMDAwMDAwMDAwMDAwMDgyIGZmZmY4ODAwNWM5YzlmZDggZmZm
Zjg4MDA1YzljODAwMApKdW4gIDggMjI6NDg6MjggUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAw
Ljc2MDQ2MV0gIDAwMDAwMDAwMDAwMTNkMDAgZmZmZjg4MDA1OWQyNDg1OCBmZmZmODgwMDVjOWM5
ZmQ4IDAwMDAwMDAwMDAwMTNkMDAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6
IFsxNjIwMC43NjA0NjZdICBmZmZmODgwMDU4MjI5NmUwIGZmZmY4ODAwNTlkMjQ0YTAgZmZmZjg4
MDA3ZGRhMmY5OCBmZmZmODgwMDdkYTEzZDAwCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQg
a2VybmVsOiBbMTYyMDAuNzYwNDcwXSBDYWxsIFRyYWNlOgpKdW4gIDggMjI6NDg6MjggUmVjaGVu
a25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDQ3M10gIFs8ZmZmZmZmZmY4MTEwYzA3MD5dID8gc3lu
Y19wYWdlKzB4MC8weDUwCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYy
MDAuNzYwNDc3XSAgWzxmZmZmZmZmZjgxNWMwOTgwPl0gaW9fc2NoZWR1bGUrMHg3MC8weGMwCkp1
biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwNDgwXSAgWzxmZmZm
ZmZmZjgxMTBjMGIwPl0gc3luY19wYWdlKzB4NDAvMHg1MApKdW4gIDggMjI6NDg6MjggUmVjaGVu
a25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDQ4M10gIFs8ZmZmZmZmZmY4MTVjMTJmZj5dIF9fd2Fp
dF9vbl9iaXQrMHg1Zi8weDkwCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBb
MTYyMDAuNzYwNDg2XSAgWzxmZmZmZmZmZjgxMTQwNzdmPl0gPyByZWFkX3N3YXBfY2FjaGVfYXN5
bmMrMHg0Zi8weDE2MApKdW4gIDggMjI6NDg6MjggUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAw
Ljc2MDQ5MF0gIFs8ZmZmZmZmZmY4MTEwYzI3OD5dIHdhaXRfb25fcGFnZV9iaXQrMHg3OC8weDgw
Ckp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwNDkzXSAgWzxm
ZmZmZmZmZjgxMDg3ZjcwPl0gPyB3YWtlX2JpdF9mdW5jdGlvbisweDAvMHg1MApKdW4gIDggMjI6
NDg6MjggUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDQ5N10gIFs8ZmZmZmZmZmY4MTEw
ZGZmZD5dIF9fbG9ja19wYWdlX29yX3JldHJ5KzB4M2QvMHg3MApKdW4gIDggMjI6NDg6MjggUmVj
aGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDUwMF0gIFs8ZmZmZmZmZmY4MTEyZjA5MD5dIGRv
X3N3YXBfcGFnZS5jbG9uZS41MCsweDVlMC8weDY0MApKdW4gIDggMjI6NDg6MjggUmVjaGVua25l
Y2h0IGtlcm5lbDogWzE2MjAwLjc2MDUwM10gIFs8ZmZmZmZmZmY4MTEzMGE4OT5dIGhhbmRsZV9w
dGVfZmF1bHQrMHgxYjkvMHgyMTAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6
IFsxNjIwMC43NjA1MDddICBbPGZmZmZmZmZmODExMTU2MWQ+XSA/IF9fZnJlZV9wYWdlcysweDJk
LzB4NDAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjA1MDld
ICBbPGZmZmZmZmZmODExMmRlM2Y+XSA/IF9fcHRlX2FsbG9jKzB4ZGYvMHgxMDAKSnVuICA4IDIy
OjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjA1MTNdICBbPGZmZmZmZmZmODEx
MzFkNGQ+XSBoYW5kbGVfbW1fZmF1bHQrMHgxNmQvMHgyNTAKSnVuICA4IDIyOjQ4OjI4IFJlY2hl
bmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjA1MTZdICBbPGZmZmZmZmZmODE1YzZhNDc+XSBkb19w
YWdlX2ZhdWx0KzB4MWE3LzB4NTQwCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVs
OiBbMTYyMDAuNzYwNTIwXSAgWzxmZmZmZmZmZjgxMTY0ZmQwPl0gPyB2ZnNfcmVhZCsweDEyMC8w
eDE4MApKdW4gIDggMjI6NDg6MjggUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDUyM10g
IFs8ZmZmZmZmZmY4MTVjMzRkNT5dIHBhZ2VfZmF1bHQrMHgyNS8weDMwCkp1biAgOCAyMjo0ODoy
OCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwNTI2XSBJTkZPOiB0YXNrIG5lcG9tdWtz
ZXJ2aWNlczoxODI2IGJsb2NrZWQgZm9yIG1vcmUgdGhhbiAxMjAgc2Vjb25kcy4KSnVuICA4IDIy
OjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjA1MjhdICJlY2hvIDAgPiAvcHJv
Yy9zeXMva2VybmVsL2h1bmdfdGFza190aW1lb3V0X3NlY3MiIGRpc2FibGVzIHRoaXMgbWVzc2Fn
ZS4KSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjA1MzBdIG5l
cG9tdWtzZXJ2aWNlcyBEIDAwMDAwMDAwMDAwMDAwMDAgICAgIDAgIDE4MjYgICAxNjg2IDB4MDAw
MDAwMDAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjA1MzRd
ICBmZmZmODgwMDU5MDBkYjk4IDAwMDAwMDAwMDAwMDAwODYgZmZmZjg4MDA1OTAwZGZkOCBmZmZm
ODgwMDU5MDBjMDAwCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAu
NzYwNTM4XSAgMDAwMDAwMDAwMDAxM2QwMCBmZmZmODgwMDVhN2RjODU4IGZmZmY4ODAwNTkwMGRm
ZDggMDAwMDAwMDAwMDAxM2QwMApKdW4gIDggMjI6NDg6MjggUmVjaGVua25lY2h0IGtlcm5lbDog
WzE2MjAwLjc2MDU0M10gIGZmZmY4ODAwNTlkMjQ0YTAgZmZmZjg4MDA1YTdkYzRhMCBmZmZmODgw
MDdkZDlmZmY4IGZmZmY4ODAwN2RhMTNkMDAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBr
ZXJuZWw6IFsxNjIwMC43NjA1NDddIENhbGwgVHJhY2U6Ckp1biAgOCAyMjo0ODoyOCBSZWNoZW5r
bmVjaHQga2VybmVsOiBbMTYyMDAuNzYwNTUwXSAgWzxmZmZmZmZmZjgxMTBjMDcwPl0gPyBzeW5j
X3BhZ2UrMHgwLzB4NTAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIw
MC43NjA1NTNdICBbPGZmZmZmZmZmODE1YzA5ODA+XSBpb19zY2hlZHVsZSsweDcwLzB4YzAKSnVu
ICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjA1NTddICBbPGZmZmZm
ZmZmODExMGMwYjA+XSBzeW5jX3BhZ2UrMHg0MC8weDUwCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5r
bmVjaHQga2VybmVsOiBbMTYyMDAuNzYwNTYwXSAgWzxmZmZmZmZmZjgxNWMxMmZmPl0gX193YWl0
X29uX2JpdCsweDVmLzB4OTAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsx
NjIwMC43NjA1NjNdICBbPGZmZmZmZmZmODExNDA3N2Y+XSA/IHJlYWRfc3dhcF9jYWNoZV9hc3lu
YysweDRmLzB4MTYwCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAu
NzYwNTY3XSAgWzxmZmZmZmZmZjgxMTBjMjc4Pl0gd2FpdF9vbl9wYWdlX2JpdCsweDc4LzB4ODAK
SnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjA1NzBdICBbPGZm
ZmZmZmZmODEwODdmNzA+XSA/IHdha2VfYml0X2Z1bmN0aW9uKzB4MC8weDUwCkp1biAgOCAyMjo0
ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwNTczXSAgWzxmZmZmZmZmZjgxMTBk
ZmZkPl0gX19sb2NrX3BhZ2Vfb3JfcmV0cnkrMHgzZC8weDcwCkp1biAgOCAyMjo0ODoyOCBSZWNo
ZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwNTc3XSAgWzxmZmZmZmZmZjgxMTJmMDkwPl0gZG9f
c3dhcF9wYWdlLmNsb25lLjUwKzB4NWUwLzB4NjQwCkp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVj
aHQga2VybmVsOiBbMTYyMDAuNzYwNTgwXSAgWzxmZmZmZmZmZjgxMTc3MTAwPl0gPyBwb2xsd2Fr
ZSsweDAvMHg2MApKdW4gIDggMjI6NDg6MjggUmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2
MDU4M10gIFs8ZmZmZmZmZmY4MTEzMGE4OT5dIGhhbmRsZV9wdGVfZmF1bHQrMHgxYjkvMHgyMTAK
SnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjA1ODddICBbPGZm
ZmZmZmZmODExMTU2MWQ+XSA/IF9fZnJlZV9wYWdlcysweDJkLzB4NDAKSnVuICA4IDIyOjQ4OjI4
IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIwMC43NjA1OTBdICBbPGZmZmZmZmZmODExMmRlM2Y+
XSA/IF9fcHRlX2FsbG9jKzB4ZGYvMHgxMDAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBr
ZXJuZWw6IFsxNjIwMC43NjA1OTNdICBbPGZmZmZmZmZmODExMzFkNGQ+XSBoYW5kbGVfbW1fZmF1
bHQrMHgxNmQvMHgyNTAKSnVuICA4IDIyOjQ4OjI4IFJlY2hlbmtuZWNodCBrZXJuZWw6IFsxNjIw
MC43NjA1OTZdICBbPGZmZmZmZmZmODE1YzZhNDc+XSBkb19wYWdlX2ZhdWx0KzB4MWE3LzB4NTQw
Ckp1biAgOCAyMjo0ODoyOCBSZWNoZW5rbmVjaHQga2VybmVsOiBbMTYyMDAuNzYwNjAwXSAgWzxm
ZmZmZmZmZjgxMTY0ZmQwPl0gPyB2ZnNfcmVhZCsweDEyMC8weDE4MApKdW4gIDggMjI6NDg6Mjgg
UmVjaGVua25lY2h0IGtlcm5lbDogWzE2MjAwLjc2MDYwM10gIFs8ZmZmZmZmZmY4MTVjMzRkNT5d
IHBhZ2VfZmF1bHQrMHgyNS8weDMwCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>