<?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>1015</bug_id>
          
          <creation_ts>1999-03-20 02:33:00 +0000</creation_ts>
          <short_desc>kmail should have templates</short_desc>
          <delta_ts>2007-09-14 12:17:01 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>10</classification_id>
          <classification>Unmaintained</classification>
          <product>kmail</product>
          <component>composer</component>
          <version>unspecified</version>
          <rep_platform>unspecified</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>NOR</priority>
          <bug_severity>wishlist</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Unknown">null</reporter>
          <assigned_to name="kdepim bugs">pim-bugs-null</assigned_to>
          <cc>arutha</cc>
    
    <cc>berkessels</cc>
    
    <cc>bigbug21-bugtrack</cc>
    
    <cc>davidpjames</cc>
    
    <cc>gerard.seibert</cc>
    
    <cc>j.fuerst</cc>
    
    <cc>jg</cc>
    
    <cc>jjm</cc>
    
    <cc>j_albers</cc>
    
    <cc>kde-bugzilla</cc>
    
    <cc>lefty</cc>
    
    <cc>m.wege</cc>
    
    <cc>martin.hohenberg</cc>
    
    <cc>msantos</cc>
    
    <cc>shelton</cc>
    
    <cc>skipper</cc>
          
          <cf_commitlink></cf_commitlink>
          <cf_versionfixedin></cf_versionfixedin>
          <cf_sentryurl></cf_sentryurl>
          <votes>617</votes>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>484</commentid>
    <comment_count>0</comment_count>
    <who name="">trebor</who>
    <bug_when>1999-03-20 02:23:01 +0000</bug_when>
    <thetext>Package: kmail
Version: 1.1-2rh5x
Severity: wishlist

It would be nice if kmail had the abilty to create mail templates for
example for submitting KDE bug reports.  That way we wouldn&apos;t have to
keep re-typing the Package: and Version: lines.  Granted the &quot;Insert
File&quot; function gives you the same functionality but I&apos;m lazy and don&apos;t
want to push all those buttons.

Basically what I&apos;d like to see is a special folder called &quot;Templates&quot;
that allows you to save partially-created mail messages in it.  Then when
you double click (or something) the message the mail composer pops up
with a copy of the template in it so you can finish filling it out.

--
Trebor A. Rude
trebor@bwn.net
Registered Linux User #89308
http://counter.li.org/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88045</commentid>
    <comment_count>1</comment_count>
    <who name="">trebor</who>
    <bug_when>1999-03-20 02:23:01 +0000</bug_when>
    <thetext>(*** This bug was imported into bugs.kde.org ***)

Package: kmail
Version: 1.1-2rh5x
Severity: wishlist

It would be nice if kmail had the abilty to create mail templates for
example for submitting KDE bug reports.  That way we wouldn&apos;t have to
keep re-typing the Package: and Version: lines.  Granted the &quot;Insert
File&quot; function gives you the same functionality but I&apos;m lazy and don&apos;t
want to push all those buttons.

Basically what I&apos;d like to see is a special folder called &quot;Templates&quot;
that allows you to save partially-created mail messages in it.  Then when
you double click (or something) the message the mail composer pops up
with a copy of the template in it so you can finish filling it out.

--
Trebor A. Rude
trebor@bwn.net
Registered Linux User #89308
http://counter.li.org/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482</commentid>
    <comment_count>2</comment_count>
    <who name="Rob Kaper">kaper</who>
    <bug_when>2001-08-09 19:14:32 +0000</bug_when>
    <thetext>KMail has a Drafts folder for this purpose.

Regards

Rob &lt;kaper@kde.org&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483</commentid>
    <comment_count>3</comment_count>
    <who name="Ingo Kl">ingo.kloecker</who>
    <bug_when>2001-08-09 20:23:46 +0000</bug_when>
    <thetext>-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Thursday 9. August 2001 21:18 Stephan Kulow wrote:
&gt; Your message with subj: Drafts folder
&gt;
&gt; KMail has a Drafts folder for this purpose.

The Drafts folder isn&apos;t very usable for this because edited messages 
disappear from the drafts folder after you send them.

We should add a separate Templates folder from which messages which you 
edit aren&apos;t removed after sending them so that you can use those 
templates more than one time.

Therefore I reopen this wish.

As a workaround one can of course create a folder Templates to store 
the templates. And then each time one want&apos;s to use such a template 
one could simply copy the template to the Drafts folder edit it and 
send it away.
But a separate Templates folder would still be nice. And it shouldn&apos;t 
be really hard to implement. We would simply have to copy the Drafts 
folder related stuff and make the Templates folder not remove messages 
which are edited. Maybe Florian (Hi Florian!) wants to do it as I&apos;m 
currently busy with the PGP/GnuPG stuff.

Regards
Ingo
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE7cvFSGnR+RTDgudgRAt7FAJ93GnPwJA8w7bLe0HI1l3UrsiwwMACfUB37
WXJAX0svmG10SBnkDfrr2bc=
=dsN0
-----END PGP SIGNATURE-----</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126648</commentid>
    <comment_count>4</comment_count>
    <who name="OlliK">olli</who>
    <bug_when>2003-04-03 17:31:52 +0000</bug_when>
    <thetext>Hi there! 
 
I also just wanted to put a similar wish to the wishlist. Such a feature is included in an 
eMail-Client called &quot;The Bat!&quot;. If you press on the &quot;new message&quot;-button, your new eMail 
allready contains: 
Dear Mr.  (or Hello, or ... what erver you want) 
... 
and  just before the signature: 
Best regards, 
 
Name 
 
It is a very good feature and I&apos;d like to see it in my prefered Client kmail aswell. 
 
Happy developing and hava a nice day! 
Oliver Kasch 
 </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126661</commentid>
    <comment_count>5</comment_count>
    <who name="Tom Emerson">osnut</who>
    <bug_when>2003-04-03 18:53:19 +0000</bug_when>
    <thetext>Oliver: if all you want is a prefix at the start and a prettier signature, Kmail does this already 
 
  1) select settings/configure kmail/composer/phrases -- there you can specify the initial text  
      (of course, kmail can&apos;t read your mind on a NEW message...) 
 
   2) for signatures, you specify &quot;per identity&quot; what signature should be created, which can 
       include specific text (the &quot;sincerely,...&quot; line would go AFTER the &quot;-- &quot; indicator) </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126896</commentid>
    <comment_count>6</comment_count>
    <who name="Ingo Klöcker">kloecker</who>
    <bug_when>2003-04-04 23:25:47 +0000</bug_when>
    <thetext>Subject: Re:  kmail should have templates

What Oliver wants is already possible. Simply enter the following in the 
signature input field:
=====
Dear Mr.

blabla

Best regards,

Name

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131940</commentid>
    <comment_count>7</comment_count>
    <who name="Chs">chs</who>
    <bug_when>2003-05-03 18:44:33 +0000</bug_when>
    <thetext>I wish &quot;The Bat!&quot; templates in KMail too.


&quot;The Bat!&quot; have templates for &quot;new&quot;, &quot;forward&quot;, &quot;reply&quot; messages.


I need a specific thing for example: hiding e-mail address in forwarded message 
(now I do it manually).


&quot;The Bat!&quot; have a rich templates engine and if simular template engine will be 
in KMail it will be very nice.




(To previous comment&apos;s author):


&quot;The Bat!&quot; allow to insert in temlapes sender name, address and so on, not 
simple inserting &quot;Dear Mr.&quot;. Message text, various sender and recipient 
information allowed - that may be important to somebody.


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152990</commentid>
    <comment_count>8</comment_count>
    <who name="Dmitry Golubev">dmitry</who>
    <bug_when>2003-08-18 22:11:58 +0000</bug_when>
    <thetext>I have been using FoxMail before switched to Linux. Foxmail also have powerful 
template engine to create new messages, replies and forwards, specifying the 
particular place to place all needed information (called macros there: 
subject, data, time, sender, recepient, etc.) and even where the cursor should 
be. 
 
Now I have to use Phrases, but they can be used only for replies (yes, by the 
way, could you allow to customize Forwarding phrase somehow in order to allow 
to get rid of these minuses!), and do not provide many things I want 
 
Thanks for the great product, 
Dmitry Golubev </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163208</commentid>
    <comment_count>9</comment_count>
    <who name="Ulrich Moser">ulrich.moser</who>
    <bug_when>2003-10-01 07:49:50 +0000</bug_when>
    <thetext>I just wanted to add the same wish. As far as I understand the previous 
comments there are two things that people want from KMail. First thing is a 
simple template function that allows to send prepared messages and just add 
some individual details. In some MUAs this is called create message from 
stationery. You could for instance prepare a message that you want to send to 
all your contacts you had on a fair. 
 
The other thing is more elaborated and allows insertion of text elements into 
the message like with bulk mail you generate in a text processor. This 
includes that you are able to a list of input data to the message and maybe 
also other text elements. But to be honest this can be reduced to the 
insertion of the salutation and the name from KAddressbook. Enabling KMail for 
bulk mail IMHO an overkill. First of all there are enough bulk mailers around 
and second before sending bulk mail people should sit back for a minute and 
remember what they do about bulk mail, they delete it.  
 
The conclusion is that a templates folder with the stationery function is very 
helpful. Insertion of addressbook fields would be a nice to have but leave the 
bulk mail functions to the bulk mailers. No one really wants bulk mail in his 
mailbox so why should you support others to send such crap. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196543</commentid>
    <comment_count>10</comment_count>
    <who name="David P James">davidpjames</who>
    <bug_when>2004-01-19 21:58:11 +0000</bug_when>
    <thetext>I think this could be implemented without adding another default folder. In the Settings dialog, Composer pane there would be a tab for &apos;Templates&apos;. The Templates themselves would be text files created by the user place anywhere the user pleases. The Templates tab would roughly resemble the Headers tab with a Name for each template and a second column specifying the file itself.

To create a message from a template would be fairly straightforward and would use the &apos;Insert file&apos; code (at least I assume it would). The New Message button would have a dropdown with the list of templates. Alternatively, one could have a new button &apos;Create Message from Template&apos; or something with the same thing, plus a menu item under Message of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250845</commentid>
    <comment_count>11</comment_count>
    <who name="Ismail Donmez">ismail</who>
    <bug_when>2004-07-20 21:02:08 +0000</bug_when>
    <thetext>*** Bug 82399 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251003</commentid>
    <comment_count>12</comment_count>
    <who name="Juergen Gerner">jg</who>
    <bug_when>2004-07-21 10:37:33 +0000</bug_when>
    <thetext>I&apos;m not sure if the template system I described (Bug #82399) is the same as this thread means. My idea was a template mainly for companies&apos; needs, with some extra features:
- Based on HTML to create a real design (with graphics/logo, like a stationary)
- Input widgets included (=LineEdits or TextEdits, but more like on a web form, not one big TextEdit)
- Pre-defined values (=ComboBoxes)
- Auto-filling values (e.g. for current date, no input widget)

I would prefer to set those templates in the normal config dialog, and select one in the composer window (like I can do with identities).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273051</commentid>
    <comment_count>13</comment_count>
    <who name="Jeroen Baten">jbaten</who>
    <bug_when>2004-09-30 19:58:02 +0000</bug_when>
    <thetext>I think the following is in line and solves a lot of first wishes:
-kmail would support a templates dir with er templates
-a template is an xml file with things like:
&lt;template&gt;
  &lt;name&gt;
    &lt;description&gt;Omschrijving&lt;/description&gt;
  &lt;/name&gt;
  &lt;header&gt;
    Text to set at top of message
  &lt;/header&gt;
  &lt;selectionlist&gt;
    &lt;selection
      &lt;description&gt;Std reply to rtfm mail&lt;/description&gt;
      &lt;text&gt;RTFM!&lt;/text&gt;
    &lt;/selection&gt;
    etcetera

  &lt;paragraph&gt;
    &lt;text&gt;
     Text in between results from selectionlists
    &lt;/text&gt;
  &lt;/paragraph&gt;
  &lt;footer&gt;&lt;/footer&gt;
&lt;/template&gt;

-Upon clicking on the button &apos;template&apos; a window pops up with the headers text, some selectionlist for prefap paragraphs and a footer.
-After selecting the right selectionlist items the user clicks on &apos;merge&apos; or something
-Now he gets his usual builtin editor for the finishing touch.

hope this helps. Sorry I can&apos;t program this myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273312</commentid>
    <comment_count>14</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2004-10-01 17:41:23 +0000</bug_when>
    <thetext>I think, what two actions would can be added also: &quot;Forward with template&quot; and &quot;Reply with temlate&quot;. Possible with templates list.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273337</commentid>
    <comment_count>15</comment_count>
    <who name="Dmitry Golubev">dmitry</who>
    <bug_when>2004-10-01 19:05:30 +0000</bug_when>
    <thetext>See how (freeware) FoxMail (pages are in chinese, but there will be an &quot;English&quot; button) does this for a working example...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279138</commentid>
    <comment_count>16</comment_count>
    <who name="Till Adam">adam</who>
    <bug_when>2004-10-23 10:36:46 +0000</bug_when>
    <thetext>*** Bug 91882 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298265</commentid>
    <comment_count>17</comment_count>
    <who name="Don Sanders">don</who>
    <bug_when>2004-12-31 07:12:02 +0000</bug_when>
    <thetext>CVS commit by sanders: 

Add an Insert Recent File action to the composer Message menu, as discussed with Ingo.

This can act as a thrifty man&apos;s template system; put your often used phrases in descriptively named files and then quic
kly insert them again using the Insert Recent File popup menu.

Later on files with a specific suffix, say, .template could be passed for, say, &apos;%&apos; quoted commands like %DATE etc.

Hopefully the implementation is ok. There&apos;s a bit of code to make sure the encoding used when inserting a recent file i
s the same as when the file was inserted using the modified file dialog that includes an encoding combobox. Also some l
ogic is required to stop the config file from growing without bound.

CCMAIL:1015@bugs.kde.org


  M +2 -1      kmcomposerui.rc   1.37
  M +52 -2     kmcomposewin.cpp   1.901
  M +3 -0      kmcomposewin.h   1.268


--- kdepim/kmail/kmcomposerui.rc  #1.36:1.37
@@ -1,3 +1,3 @@
-&lt;!DOCTYPE kpartgui &gt;&lt;kpartgui version=&quot;23&quot; name=&quot;kmcomposer&quot; &gt;
+&lt;!DOCTYPE kpartgui &gt;&lt;kpartgui version=&quot;24&quot; name=&quot;kmcomposer&quot; &gt;
  &lt;MenuBar&gt;
   &lt;Menu noMerge=&quot;1&quot; name=&quot;file&quot; &gt;
@@ -11,4 +11,5 @@
    &lt;Separator/&gt;
    &lt;Action name=&quot;insert_file&quot; /&gt;
+   &lt;Action name=&quot;insert_file_recent&quot; /&gt;
    &lt;Action name=&quot;file_print&quot; /&gt;
    &lt;Separator/&gt;

--- kdepim/kmail/kmcomposewin.h  #1.267:1.268
@@ -65,4 +65,5 @@ class KToggleAction;
 class KSelectColorAction;
 class KURL;
+class KRecentFilesAction;
 class SpellingFilter;
 class MessageComposer;
@@ -406,4 +407,5 @@ public slots:
   void slotPrint();
   void slotAttachFile();
+  void slotInsertRecentFile(const KURL&amp;);
   void slotSendNow();
   void slotSendLater();
@@ -824,4 +826,5 @@ protected:
   KAction *mAttachPK, *mAttachMPK,
           *mAttachRemoveAction, *mAttachSaveAction, *mAttachPropertiesAction;
+  KRecentFilesAction *mRecentAction;
 
   KToggleAction *mSignAction, *mEncryptAction, *mRequestMDNAction;

--- kdepim/kmail/kmcomposewin.cpp  #1.900:1.901
@@ -91,4 +91,5 @@ using KRecentAddress::RecentAddresses;
 #include &lt;kstatusbar.h&gt;
 #include &lt;kaction.h&gt;
+#include &lt;kstdaction.h&gt;
 #include &lt;kdirwatch.h&gt;
 #include &lt;kstdguiitem.h&gt;
@@ -934,4 +935,11 @@ void KMComposeWin::setupActions(void)
                       this,  SLOT(slotInsertFile()),
                       actionCollection(), &quot;insert_file&quot;);
+  mRecentAction = new KRecentFilesAction (i18n(&quot;&amp;Insert File Recent&quot;),
+                      &quot;fileopen&quot;, 0,
+                      this,  SLOT(slotInsertRecentFile(const KURL&amp;)),
+                      actionCollection(), &quot;insert_file_recent&quot;);
+                                        
+  mRecentAction-&gt;loadEntries( KMKernel::config() );
+
   (void) new KAction (i18n(&quot;&amp;Address Book&quot;), &quot;contents&quot;,0,
                       this, SLOT(slotAddrBook()),
@@ -2366,5 +2374,37 @@ void KMComposeWin::slotInsertFile()
 
   KURL u = fdlg.selectedURL();
+  mRecentAction-&gt;addURL(u);
+  // Prevent race condition updating list when multiple composers are open
+  {
+    KConfig *config = KMKernel::config();
+    KConfigGroupSaver saver( config, &quot;Composer&quot; );
+    QString encoding = KGlobal::charsets()-&gt;encodingForName(combo-&gt;currentText()).latin1();
+    QStringList urls = config-&gt;readListEntry( &quot;recent-urls&quot; );
+    QStringList encodings = config-&gt;readListEntry( &quot;recent-encodings&quot; );
+    // Prevent config file from growing without bound
+    // Would be nicer to get this constant from KRecentFilesAction
+    uint mMaxRecentFiles = 30;
+    while (urls.count() &gt; mMaxRecentFiles)
+      urls.erase( urls.fromLast() );
+    while (encodings.count() &gt; mMaxRecentFiles)
+      urls.erase( encodings.fromLast() );
+    // sanity check
+    if (urls.count() != encodings.count()) {
+      urls.clear();
+      encodings.clear();
+    }
+    urls.prepend( u.prettyURL() );
+    encodings.prepend( encoding );
+    config-&gt;writeEntry( &quot;recent-urls&quot;, urls );
+    config-&gt;writeEntry( &quot;recent-encodings&quot;, encodings );
+    mRecentAction-&gt;saveEntries( config );
+  }
+  slotInsertRecentFile(u);
+}
 
+
+//-----------------------------------------------------------------------------
+void KMComposeWin::slotInsertRecentFile(const KURL&amp; u)
+{
   if (u.fileName().isEmpty()) return;
 
@@ -2374,6 +2414,16 @@ void KMComposeWin::slotInsertFile()
   ld.data = QByteArray();
   ld.insert = true;
-  ld.encoding = KGlobal::charsets()-&gt;encodingForName(
-    combo-&gt;currentText()).latin1();
+  // Get the encoding previously used when inserting this file
+  {
+    KConfig *config = KMKernel::config();
+    KConfigGroupSaver saver( config, &quot;Composer&quot; );
+    QStringList urls = config-&gt;readListEntry( &quot;recent-urls&quot; );
+    QStringList encodings = config-&gt;readListEntry( &quot;recent-encodings&quot; );
+    int index = urls.findIndex( u.prettyURL() );
+    if (index != -1) {
+      QString encoding = encodings[ index ];
+      ld.encoding = encoding.latin1();
+    }
+  }
   mMapAtmLoadData.insert(job, ld);
   connect(job, SIGNAL(result(KIO::Job *)),


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315965</commentid>
    <comment_count>18</comment_count>
    <who name="Stephan Binner">binner</who>
    <bug_when>2005-02-19 19:51:18 +0000</bug_when>
    <thetext>*** Bug 99804 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339917</commentid>
    <comment_count>19</comment_count>
    <who name="Sebastian Damm">kde-bugzilla</who>
    <bug_when>2005-05-06 11:46:35 +0000</bug_when>
    <thetext>I&apos;d like to see templates similar to &quot;The Bat!&quot; in KMail, too. You can set Preferences for every folder already, so if you could please add templates to it. The normal behavior for every folder should be to use the global templates for the account or identity. But you should be able to override these settings. 

Also templates on a per-user basis would be nice. Macros for filling in the texts would make sense in this context. So you could check a special field in the kaddressbook entry and dependent on what is in there you fill in the template. For example you can examine the nickname field of a contact, and if there is something filled in, then use it in the salutation, otherwise use the first name. Or you could have a special field where you place whether you name him by first name or by last name and check for this field, then create the greeting &quot;Dear $firstname&quot; oder &quot;Dear Mr. $lastname&quot; - of course you have to check for the gender, too.

There are many customizations, which can make using emails easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342155</commentid>
    <comment_count>20</comment_count>
    <who name="Carsten Burghardt">burghardt</who>
    <bug_when>2005-05-15 12:24:33 +0000</bug_when>
    <thetext>*** Bug 104314 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342157</commentid>
    <comment_count>21</comment_count>
    <who name="Carsten Burghardt">burghardt</who>
    <bug_when>2005-05-15 12:25:13 +0000</bug_when>
    <thetext>*** Bug 105571 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354291</commentid>
    <comment_count>22</comment_count>
    <who name="J. Albers">j_albers</who>
    <bug_when>2005-06-29 09:49:31 +0000</bug_when>
    <thetext>Hi,

many people are waiting for this feature but it seems that the kmail developers don&apos;t like it. I&apos;m using kmail in my daily work and I miss this feature very much. A simple (text) template file like the signature (Configuration-&gt;Identity-Signature / but above the &quot;-- &quot; line) would be nice! To write these things into the signature file isn&apos;t a good solution! 

TIA
 Jens</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354295</commentid>
    <comment_count>23</comment_count>
    <who name="Carsten Burghardt">burghardt</who>
    <bug_when>2005-06-29 10:26:21 +0000</bug_when>
    <thetext>&gt; many people are waiting for this feature but it seems that the kmail
&gt; developers don&apos;t like it. I&apos;m using kmail in my daily work and I miss this
&gt; feature very much.


Jens, kmail is opensource so feel free to implement this.
And it&apos;s simply not true that we &quot;don&apos;t like this feature&quot; but as our time
is limited each developer has to decide what has a higher priority.


Carsten
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355805</commentid>
    <comment_count>24</comment_count>
    <who name="Tim">tim</who>
    <bug_when>2005-07-06 10:11:17 +0000</bug_when>
    <thetext>Templates are really important in a business environment. This is because people are either lazy (me) or incompetent. 

Currently I have +100 Users all using kmail. Many requests can be answered with our templates, but we needed to invest hell of a lot time (month!) to teach them how to copy and paste. 

It would be great if we would have under &quot;answer&quot; a choose &quot;choose template&quot; field. 
The template should be placeable on the server. So we need configuration item for &quot;group templates&quot; and &quot;privat templates&quot; 

thanks for your ear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357528</commentid>
    <comment_count>25</comment_count>
    <who name="Don Sanders">sanders</who>
    <bug_when>2005-07-13 10:28:03 +0000</bug_when>
    <thetext>In KDE 3.4+ please consider using the Insert File and Insert File 
Recent menu items in the composer to insert template text from 
predefined files.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357539</commentid>
    <comment_count>26</comment_count>
    <who name="J. Albers">j_albers</who>
    <bug_when>2005-07-13 11:18:48 +0000</bug_when>
    <thetext>Hi!

&gt;In KDE 3.4+ please consider using the Insert File and Insert File 
&gt;Recent menu items in the composer to insert template text from 
&gt;predefined files.

That&apos;s ok if you write only one email a day, but I&apos;m using kmail at work and I have to write more than a dozen emails a day. All email must have a special form because of legal causes. Templates are an enterprise feature and I think kmail want to be an enterprise email client. The solution is very easy to implement (I think): It&apos;s basically a copy of the signature tab/functionality.

TIA
 Jens</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357996</commentid>
    <comment_count>27</comment_count>
    <who name="Don Sanders">sanders</who>
    <bug_when>2005-07-15 04:33:53 +0000</bug_when>
    <thetext>&gt;The solution is very easy to implement (I think): It&apos;s
&gt; basically a copy of the signature tab/functionality.


Ok, it would be great if you could send a patch then.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367170</commentid>
    <comment_count>28</comment_count>
    <who name="Jonathan Marten">jjm</who>
    <bug_when>2005-08-20 15:03:23 +0000</bug_when>
    <thetext>Patch posted to list
http://lists.kde.org/?l=kmail-devel&amp;m=112454256600012&amp;w=2
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367377</commentid>
    <comment_count>29</comment_count>
      <attachid>12299</attachid>
    <who name="Jonathan Marten">jjm</who>
    <bug_when>2005-08-21 13:47:31 +0000</bug_when>
    <thetext>Created attachment 12299
Template patch for KDE 3.4.2

Attached here, as suggested by Ingo Klöcker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374145</commentid>
    <comment_count>30</comment_count>
    <who name="Martin Fabian Hohenberg">martin.hohenberg</who>
    <bug_when>2005-09-19 16:21:01 +0000</bug_when>
    <thetext>Will this patch be included in KDE 3.5? Just curious and not really keen of ruining my package configuration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384912</commentid>
    <comment_count>31</comment_count>
    <who name="Rashid N. Achilov">shelton</who>
    <bug_when>2005-10-27 07:33:35 +0000</bug_when>
    <thetext>This is a very userful wish! I&apos;d like to create similar wish, but won&apos;t do it, but vote for this wish. &apos;Drafts&apos; is not similar - after succesful mailing, letter will deleted, but in &quot;Templates&quot; letter keep. Netscape has similar folder ant is was very comfortable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385382</commentid>
    <comment_count>32</comment_count>
    <who name="Martin Fabian Hohenberg">martin.hohenberg</who>
    <bug_when>2005-10-28 20:15:23 +0000</bug_when>
    <thetext>How about going the money lane? I have just pledged 120 € for the working implementation of this stuff at http://kontact.org/shopping ... If this is important to you, I recommend you follow this path...

... No, I do not like this way, also. It feels somehow like some kind of &quot;Nötigung&quot; (don&apos;t know the correct english word for that, maybe &quot;constraint&quot;). I am willing to contribute (but can&apos;t do any C++ unfortunately), I am willing to spend for the E.V., but this good-faith should not be dependant on withholding cruicial functionality. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413204</commentid>
    <comment_count>33</comment_count>
    <who name="Ashar Iqbal">ashar</who>
    <bug_when>2006-02-11 08:26:51 +0000</bug_when>
    <thetext>There are a few posts referring to The Bat. Just wanted to add some details to help in why this is so.

The Bat! has excellent template support. This is really useful where you need to send very similar replies to many emails - for example technical support, sales...
I get an enquiry that asks where to buy our product in a certain city. Using The Bat I can just press the REPLY button to generate the correct and full response.
This involves setting up a filter to move the email to a specific folder. The folder has an Identity and Reply template associated with it.
The reply I generate uses the these two properties to produce the resultant email. I just have to click on the Send button.

http://www.silverstones.com/thebat/templates.html  (this is also the page referred to by the Rit Labs documentation.)
http://www.pcwize.com/thebat/tbudp/tiki-index.php?page=Templates

The Bat! is produced by http://www.ritlabs.com

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447164</commentid>
    <comment_count>34</comment_count>
    <who name="Bartosz Malinowski">olorin5</who>
    <bug_when>2006-06-16 19:29:18 +0000</bug_when>
    <thetext>Hello,

yes, I&apos;d like Kmail to have this feature. Writting 10.000 times a day the horrible &quot;Dear Sir,&quot;   &quot;Kind Regards, X.Y, Z Inc.&quot; formulas, whereas you have quite a lot of other things to do precludes me from ever thinking of using Kmail in my company office. So I am forced to use Thunderbird, which is all too simplified in many respects. 

Standard signatures are only a partial solution, especially whereas my Kmail version (1.9.1) does not accept html signture files - plain text only!

I&apos;ve seen a patch sent by Jonathan Marten on 2005-08-21 13:47. What&apos;s happening with it?

BTW, I strongly invite everybody to vote for this wishlist item:
Bug 128986: Can&apos;t Paste HTML-formatted text into Kmail mail editor window

Kind Regards,
Bartosz Malinowski</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451726</commentid>
    <comment_count>35</comment_count>
      <attachid>16894</attachid>
    <who name="Jonathan Marten">jjm</who>
    <bug_when>2006-07-05 16:07:55 +0000</bug_when>
    <thetext>Created attachment 16894
Updated patch for KDE 3.5.3, part 1

Patch updated for current KDE, and incorporating review comments and
suggestions from Ingo Klöcker on kmail-devel mailing list.  This means that
the facility to insert template text into the composer is no longer present; 
I&apos;m currently thinking about an alternative way of doing this.

It would be nice if this facility could be considered for inclusion in the next
release in the KDE 3.5.x series, if the release criteria allows it; this is a
major new functionality and ought to be user tested before KDE 4.

The next patch (update of kmail libraries for template support, some of which
is already present) is also required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451727</commentid>
    <comment_count>36</comment_count>
      <attachid>16895</attachid>
    <who name="Jonathan Marten">jjm</who>
    <bug_when>2006-07-05 16:11:18 +0000</bug_when>
    <thetext>Created attachment 16895
Updated patch for KDE 3.5.3, part 2

This patch can be incorporated into the libraries before the corresponding
changes to the application; they are source compatible (but BIC).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451896</commentid>
    <comment_count>37</comment_count>
    <who name="Martin Fabian Hohenberg">martin.hohenberg</who>
    <bug_when>2006-07-06 10:41:20 +0000</bug_when>
    <thetext>I don&apos;t get the &quot;obsolete&quot; stuff ... does this mean templates are really comming to town?

Can anyone give a newbie adwive how to apply patches?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466299</commentid>
    <comment_count>38</comment_count>
    <who name="Jan de Visser">jdevisser</who>
    <bug_when>2006-09-03 17:26:09 +0000</bug_when>
    <thetext>*** Bug 133508 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466888</commentid>
    <comment_count>39</comment_count>
    <who name="BJ Blanchard">blabj</who>
    <bug_when>2006-09-05 18:13:20 +0000</bug_when>
    <thetext>Wouldn&apos;t the simplist solution for the whole template debate be to just modify the Draft send logic to not delete the message from the Drafts folder??

It then acts as a template folder.. simple.

You could create a config option &quot;DeleteDraftonSend=false&quot; so that its configurable by user.

BJ.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466896</commentid>
    <comment_count>40</comment_count>
    <who name="Dmitry Golubev">dmitry</who>
    <bug_when>2006-09-05 18:27:22 +0000</bug_when>
    <thetext>heh, well, drafts do NOT fill up some fields by themselves and neither they position a cursor where it is supposed to be. note that variables (aka macros) are the most important feature here... the ability to customize message fully, and to position the cursor...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466959</commentid>
    <comment_count>41</comment_count>
    <who name="Bernd Wurst">bugzilla-kde</who>
    <bug_when>2006-09-05 20:58:48 +0000</bug_when>
    <thetext>The most simple but sufficient solution to this would be to implement a function that passes the *complete* message to an external program and gets a *complete* message back from the external app which gets loaded into the compose window.
So the user or administrator can freely decide what should happen. An external app would then be able to look at headers, subject an so on and could compose a custom reply message.

This would move the main work (message parsing, template management, ...) to the users, administrators or third party goodie-writers. The functionality could be extended later, but that would be the most important step.
Sylpheed-claws is a very good example for a mail app that can launch external shell-scripts or programs for lots of things. Fully customizable and fits all needs (though it&apos;s little more work for the end user).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477242</commentid>
    <comment_count>42</comment_count>
      <attachid>18135</attachid>
    <who name="Dmitry Morozhnikov">dmiceman</who>
    <bug_when>2006-10-16 11:26:39 +0000</bug_when>
    <thetext>Created attachment 18135
Thebat-like template engine for kmail

Thebat-like template engine for kmail. In sync with svn revision 595956 (kde3.5
branch). Replacement for &apos;Phrases&apos; functionality.

Introduces separate configuration for new message/reply/reply all/forward
templates for each folder with simple macro language.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477245</commentid>
    <comment_count>43</comment_count>
    <who name="Dmitry Morozhnikov">dmiceman</who>
    <bug_when>2006-10-16 11:32:57 +0000</bug_when>
    <thetext>Glad to introduce one another patch to kmail which provide thebat-like template functionality :-)

No, it is not a complete thebat templates language emulation (yet), only a very small subset, but it can serve most of everyday needs, especially because of per-folder configuration. It intended to be current &apos;Phrases&apos; configuration replacement. 

Motivation is simple. I`m also think what thebat have superior template language and kmail need to have something like this. Personally i`m just tired to type &quot;Hello, &lt;friend name&gt;&quot; ten times a day in the beginning of each message. At least, with this patch it is possible now avoid this with per-folder reply template.

Peoples used thebat will found what language is well known. I was tried to reproduce it as much as possible.

Also there is some additions to thebat template language related to external programs processing. Commands added:

%SYSTEM=&quot;&lt;command&gt;&quot; -- insert result of external command
%QUOTEPIPE=&quot;&lt;command&gt;&quot; -- insert original message body processed with external command and quoted
%TEXTPIPE=&quot;&lt;command&gt;&quot; -- the same, but not quoted
%MSGPIPE=&quot;&lt;command&gt;&quot; -- the same, but whole message, including headers processed
%BODYPIPE=&quot;&lt;command&gt;&quot; -- current message body processed
%CLEARPIPE=&quot;&lt;command&gt;&quot; -- the same, but replace whole body with result

Also new:

%DEBUG -- turn on debug on pipe commands
%DEBUGOFF -- turn it off
%NOP -- synonym for %BLANK

Supported thebat commands:

%-, %REM=&quot;&lt;comment&gt;&quot;, %INSERT=&quot;&lt;file&gt;&quot;, %QUOTE, %QHEADERS, %HEADERS,             %TEXT, %TOADDR, %TONAME, %FROMADDR, %FROMNAME, %FULLSUBJECT, %MSGID, %OHEADER=&quot;&lt;header&gt;&quot;, %HEADER=&quot;&lt;header&gt;&quot;, %OTOADDR, %OTONAME, %OFROMADDR, %OFROMNAME, %OFULLSUBJECT, %OMSGID, %DATEEN, %DATESHORT, %DATE, %DOW, %TIMELONGEN, %TIMELONG, %TIME,  %ODATEEN, %ODATESHORT, %ODATE, %ODOW, %OTIMELONGEN, %OTIMELONG, %OTIME, %BLANK, %CLEAR

Sorry, much appreciated %CURSOR command not supported yet :-(

This patch are in synk with today KDE3.5 branch: http://websvn.kde.org/branches/KDE/3.5/kdepim

And i have a little hope what it will be added to KDE 3.5.6 :-) Because KDE 4 seems to be too far away yet.. 
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477262</commentid>
    <comment_count>44</comment_count>
      <attachid>18137</attachid>
    <who name="Dmitry Morozhnikov">dmiceman</who>
    <bug_when>2006-10-16 12:32:03 +0000</bug_when>
    <thetext>Created attachment 18137
Thebat-like template engine for kmail

oops fix..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477809</commentid>
    <comment_count>45</comment_count>
      <attachid>18158</attachid>
    <who name="Dmitry Morozhnikov">dmiceman</who>
    <bug_when>2006-10-18 09:07:31 +0000</bug_when>
    <thetext>Created attachment 18158
Thebat-like template engine for kmail

Sync with revision 596679.

Now with %CURSOR!

Also added: %TOFNAME, %TOLNAME, %FROMFNAME, %FROMLNAME, %OTOFNAME, %OTOLNAME,
%OFROMFNAME, %OFROMLNAME -- because it is difficult to live without them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477816</commentid>
    <comment_count>46</comment_count>
      <attachid>18160</attachid>
    <who name="Dmitry Morozhnikov">dmiceman</who>
    <bug_when>2006-10-18 10:12:02 +0000</bug_when>
    <thetext>Created attachment 18160
Thebat-like template engine for kmail

Oops.. Yesterday changes to kmail/kmcomposewin.cpp was reverted back with
previous patch. This is a correct one. Sorry :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477879</commentid>
    <comment_count>47</comment_count>
      <attachid>18171</attachid>
    <who name="Dmitry Morozhnikov">dmiceman</who>
    <bug_when>2006-10-18 13:01:26 +0000</bug_when>
    <thetext>Created attachment 18171
templates for kmail -- patch for KDE4 trunk

Synk with revision 596725.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478062</commentid>
    <comment_count>48</comment_count>
    <who name="BJ Blanchard">blabj</who>
    <bug_when>2006-10-18 22:20:11 +0000</bug_when>
    <thetext>Thanks dmiceman - excellent patch.. works against 3.5.5.

Unfortunately the &quot;template folder&quot; patch by Jonathan Marten causes Compose window to crash everytime when applied against 3.5.5.  (with or without dmiceman&apos;s patch applied)

NOTE: There was small change to patch of kmmainwin.rc (version mismatch) required for patch to apply successfully against 3.5.5.

-&lt;kpartgui version=&quot;89&quot; name=&quot;kmmainwin&quot; &gt;
+&lt;kpartgui version=&quot;90&quot; name=&quot;kmmainwin&quot; &gt;

instead of 

-&lt;kpartgui version=&quot;88&quot; name=&quot;kmmainwin&quot; &gt;
+&lt;kpartgui version=&quot;89&quot; name=&quot;kmmainwin&quot; &gt;

I was unable to determine what changes are required to bring this patch under 3.5.5 successfully.

Below is my backtrace.

BJ.

Program terminated with signal 11, Segmentation fault.
#0  0x4a7797b1 in QString::QString () from /usr/qt/3/lib/libqt-mt.so.3


Thread 1 (process 19947):
#0  0x4a7797b1 in QString::QString () from /usr/qt/3/lib/libqt-mt.so.3
No symbol table info available.
#1  0xb6481d46 in KMComposeWin::setMsg (this=0x86693e8, newMsg=0x868bc88,
    mayAutoSign=true, allowDecryption=false, isModified=false)
    at identity.h:282
        n = (partNode *) 0x8404c04
        root = (partNode *) 0x0
        otp = {_vptr.ObjectTreeParser = 0x8bc0cb0, mReader = 0xea60,
  mRawReplyString = &lt;incomplete type&gt;,
  mTextualContentCharset = &lt;incomplete type&gt;, mTextualContent = {
    static null = {
      static null = &lt;same as static member of an already seen type&gt;,
      d = 0x806d070, static shared_null = 0x806d070}, d = 0x834ace8,
    static shared_null = 0x806d070}, mCryptPlugWrapper = 0xb62e03a7,
  mShowOnlyOneMimePart = 176, mKeepEncryptions = 12, mIncludeSignatures = 188,
  mAttachmentStrategy = 0xea60, mHtmlWriter = 0x0, mCSSHelper = 0xb67147f7,
  mCollapseIcon = {static null = {
      static null = &lt;same as static member of an already seen type&gt;,
      d = 0x806d070, static shared_null = 0x806d070}, d = 0xb6293988,
    static shared_null = 0x806d070}, mExpandIcon = {static null = {
      static null = &lt;same as static member of an already seen type&gt;,
      d = 0x806d070, static shared_null = 0x806d070}, d = 0x834ace8,
    static shared_null = 0x806d070}}
        ac = {
  mAttachments = {&lt;std::_Vector_base&lt;partNode*,std::allocator&lt;partNode*&gt; &gt;&gt; = {
      _M_impl = {&lt;std::allocator&lt;partNode*&gt;&gt; = {&lt;__gnu_cxx::new_allocator&lt;partNode*&gt;&gt; = {&lt;No data fields&gt;}, &lt;No data fields&gt;}, _M_start = 0xbf998c80,
        _M_finish = 0x4a8ebe80, _M_end_of_storage = 0x0}}, &lt;No data fields&gt;},
  mDiveIntoEncryptions = false, mDiveIntoSignatures = false,
  mDiveIntoMessages = false}
#2  0xb6486301 in KMComposeWin (this=0x86693e8, aMsg=0x868bc88, id=0)
    at kmcomposewin.cpp:401
        tip = {static null = {
    static null = &lt;same as static member of an already seen type&gt;,
    d = 0x806d070, static shared_null = 0x806d070}, d = 0x8b4a278,
  static shared_null = 0x806d070}
        sticky = {static null = {
    static null = &lt;same as static member of an already seen type&gt;,
    d = 0x806d070, static shared_null = 0x806d070}, d = 0x8b4a278,
  static shared_null = 0x806d070}
        atmColType = -1234107154
#3  0xb64864e7 in KMComposeWin::create (msg=0x0, identitiy=0)
    at kmcomposewin.cpp:149
No locals.
#4  0xb6486518 in KMail::makeComposer (msg=0x0, identitiy=0)
    at kmcomposewin.cpp:145
No locals.
#5  0xb65f96b1 in KMMainWidget::slotCompose (this=0x846ad08)
    at kmmainwidget.cpp:891
        win = (class KMail::Composer *) 0xbf998cc0
#6  0xb660f27a in KMMainWidget::qt_invoke (this=0x846ad08, _id=80,
    _o=0xbf998ee0) at kmmainwidget.moc:516
No locals.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478152</commentid>
    <comment_count>49</comment_count>
    <who name="Jonathan Marten">jjm</who>
    <bug_when>2006-10-19 10:01:05 +0000</bug_when>
    <thetext>I&apos;ll investigate the crash (reported in comment #48).  At the moment I&apos;m also updating my patch to apply against trunk (since it has to go there before being accepted for a 3.5.? release).

dmiceman, I assume that your &quot;Thebat-like&quot; templates with phrase insertion are completely separate to my template folder facility?  If not, then we will need to somehow combine our patches before commit...
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478223</commentid>
    <comment_count>50</comment_count>
    <who name="Dmitry Morozhnikov">dmiceman</who>
    <bug_when>2006-10-19 15:56:00 +0000</bug_when>
    <thetext>Jonathan, yes, they are very different beasts :-) 
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484698</commentid>
    <comment_count>51</comment_count>
    <who name="Jonathan Marten">jjm</who>
    <bug_when>2006-11-06 18:46:25 +0000</bug_when>
    <thetext>SVN commit 602738 by marten:

GUI for an identity-specific templates folder

CCBUG:1015
CCMAIL:kmail-devel@kde.org
GUI:


 M  +24 -2     branches/work/kdepim-3.5.5+/kmail/identitydialog.cpp  
 M  +1 -0      branches/work/kdepim-3.5.5+/kmail/identitydialog.h  


--- branches/work/kdepim-3.5.5+/kmail/identitydialog.cpp #602737:602738
@@ -288,9 +288,9 @@
     row = -1;
     tab = new QWidget( tabWidget );
     tabWidget-&gt;addTab( tab, i18n(&quot;&amp;Advanced&quot;) );
-    glay = new QGridLayout( tab, 7, 2, marginHint(), spacingHint() );
+    glay = new QGridLayout( tab, 8, 2, marginHint(), spacingHint() );
     // the last (empty) row takes all the remaining space
-    glay-&gt;setRowStretch( 7-1, 1 );
+    glay-&gt;setRowStretch( 8-1, 1 );
     glay-&gt;setColStretch( 1, 1 );
 
     // &quot;Reply-To Address&quot; line edit and label:
@@ -355,6 +355,15 @@
     glay-&gt;addWidget( new QLabel( mDraftsCombo, i18n(&quot;&amp;Drafts folder:&quot;), tab ),
                      row, 0 );
 
+    // &quot;Templates Folder&quot; combo box and label:
+    ++row;
+    mTemplatesCombo = new FolderRequester( tab,
+        kmkernel-&gt;getKMMainWidget()-&gt;folderTree() );
+    mTemplatesCombo-&gt;setShowOutbox( false );
+    glay-&gt;addWidget( mTemplatesCombo, row, 1 );
+    glay-&gt;addWidget( new QLabel( mTemplatesCombo, i18n(&quot;&amp;Templates folder:&quot;), tab ),
+                     row, 0 );
+
     // &quot;Special transport&quot; combobox and label:
     ++row;
     mTransportCheck = new QCheckBox( i18n(&quot;Special &amp;transport:&quot;), tab );
@@ -614,6 +623,17 @@
     else
       mDraftsCombo-&gt;setFolder( ident.drafts() );
     
+    if ( ident.templates().isEmpty() ||
+         !checkFolderExists( ident.templates(),
+                             i18n(&quot;The custom templates folder for identity &quot;
+                                  &quot;\&quot;%1\&quot; does not exist (anymore); &quot;
+                                  &quot;therefore, the default templates folder &quot;
+                                  &quot;will be used.&quot;)
+                             .arg( ident.identityName() ) ) )
+      mTemplatesCombo-&gt;setFolder( kmkernel-&gt;templatesFolder() );
+    else
+      mTemplatesCombo-&gt;setFolder( ident.templates() );
+    
     // &quot;Templates&quot; tab:
     uint identity = ident.uoid();
 		QString iid = QString(&quot;IDENTITY_%1&quot;).arg( identity );
@@ -649,6 +669,8 @@
                   mFccCombo-&gt;folder()-&gt;idString() : QString::null );
     ident.setDrafts( mDraftsCombo-&gt;folder() ?
                      mDraftsCombo-&gt;folder()-&gt;idString() : QString::null );
+    ident.setTemplates( mTemplatesCombo-&gt;folder() ?
+                     mTemplatesCombo-&gt;folder()-&gt;idString() : QString::null );
     // &quot;Templates&quot; tab:
     uint identity = ident.uoid();
     QString iid = QString(&quot;IDENTITY_%1&quot;).arg( identity );
--- branches/work/kdepim-3.5.5+/kmail/identitydialog.h #602737:602738
@@ -100,6 +100,7 @@
     KMail::DictionaryComboBox    *mDictionaryCombo;
     FolderRequester              *mFccCombo;
     FolderRequester              *mDraftsCombo;
+    FolderRequester              *mTemplatesCombo;
     QCheckBox                    *mTransportCheck;
     QComboBox                    *mTransportCombo; // should be a KMTransportCombo...
     // &quot;templates&quot; tab:
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484816</commentid>
    <comment_count>52</comment_count>
    <who name="Dmitry Morozhnikov">dmiceman</who>
    <bug_when>2006-11-07 02:34:09 +0000</bug_when>
    <thetext>SVN commit 602871 by dmiceman:

Keyboard shortcuts for custom templates with corresponding gui. 
Some refactoring of kmmailwidget related to custom templates handling 
(proper KAction`s).
Very little beautification of custom templates interface.

CCBUG:1015
GUI


 M  +140 -12   branches/work/kdepim-3.5.5+/kmail/customtemplates.cpp  
 M  +9 -1      branches/work/kdepim-3.5.5+/kmail/customtemplates.h  
 M  +32 -22    branches/work/kdepim-3.5.5+/kmail/customtemplates_base.ui  
 M  +5 -0      branches/work/kdepim-3.5.5+/kmail/customtemplates_kfg.kcfg  
 M  +157 -110  branches/work/kdepim-3.5.5+/kmail/kmmainwidget.cpp  
 M  +7 -4      branches/work/kdepim-3.5.5+/kmail/kmmainwidget.h  
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489243</commentid>
    <comment_count>53</comment_count>
    <who name="Jonathan Marten">jjm</who>
    <bug_when>2006-11-23 21:56:21 +0000</bug_when>
    <thetext>*** Bug 137002 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494746</commentid>
    <comment_count>54</comment_count>
    <who name="Allen Winter">winter</who>
    <bug_when>2006-12-18 21:27:19 +0000</bug_when>
    <thetext>The KMail to be released as part of KDE 3.5.6 will have template capabilities.

You will be able to build templates for new messages, replies, or forwards. The templates can be universal or identity-specific or folder-specific. The template language is very customizable (similar to The Bat! mailer).

There will also be a templates folder from which you can store whatever emplates you like and new messages can be created from these.

So, we probably went overboard with the templates.  I&apos;d like to thank Dmitry nd Jonathan for all their hard work doing the code to make this happen.
Future releases will fine-tune how templates work, but please open new bug reports for usability and other issues with templates.


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537432</commentid>
    <comment_count>55</comment_count>
    <who name="Tristan Miller">psychonaut</who>
    <bug_when>2007-07-22 12:56:45 +0000</bug_when>
    <thetext>This feature has been implemented but the most intuitive way to access it (i.e., via the Message pull-down menu) is missing.  See Bug 148102.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12299</attachid>
            <date>2005-08-21 13:47:31 +0000</date>
            <delta_ts>2006-07-05 16:07:56 +0000</delta_ts>
            <desc>Template patch for KDE 3.4.2</desc>
            <filename>mailtemplates.patch</filename>
            <type>text/plain</type>
            <size>32074</size>
            <attacher name="Jonathan Marten">jjm</attacher>
            
              <data encoding="base64">LS0tIGtkZXBpbS9rbWFpbC9NYWtlZmlsZS5hbS50ZW0JMjAwNS0wOC0xNyAxNzo1MToyNy4wMDAw
MDAwMDAgKzAxMDAKKysrIGtkZXBpbS9rbWFpbC9NYWtlZmlsZS5hbQkyMDA1LTA4LTE4IDE2OjM3
OjE4LjAwMDAwMDAwMCArMDEwMApAQCAtMTE2LDYgKzExNiw3IEBACiAgICAgICAgICAgICAgICAg
cmVjaXBpZW50c2VkaXRvci5jcHAgXAogICAgICAgICAgICAgICAgIHJlY2lwaWVudHNwaWNrZXIu
Y3BwIGt3aW5kb3dwb3NpdGlvbmVyLmNwcCBcCiAgICAgICAgICAgICAgICAgZGlzdHJpYnV0aW9u
bGlzdGRpYWxvZy5jcHAgZXhwaXJ5cHJvcGVydGllc2RpYWxvZy5jcHAgXAorICAgICAgICAgICAg
ICAgIHNlbGVjdHRlbXBsYXRlZGlhbG9nLmNwcCBcCiAgICAgICAgICAgICAgICAgbWFpbGluZ2xp
c3Rwcm9wZXJ0aWVzZGlhbG9nLmNwcCBuZXdmb2xkZXJkaWFsb2cuY3BwCiAKIGttYWlsX1NPVVJD
RVMgPSBtYWluLmNwcAotLS0ga2RlcGltL2ttYWlsL2ttY29tbWFuZHMuY3BwLnRlbQkyMDA1LTA1
LTIzIDEzOjExOjU0LjAwMDAwMDAwMCArMDEwMAorKysga2RlcGltL2ttYWlsL2ttY29tbWFuZHMu
Y3BwCTIwMDUtMDgtMjAgMTI6MjA6MTUuMDAwMDAwMDAwICswMTAwCkBAIC02MjksNiArNjI5LDM1
IEBACiB9CiAKIAorS01Vc2VUZW1wbGF0ZUNvbW1hbmQ6OktNVXNlVGVtcGxhdGVDb21tYW5kKCBR
V2lkZ2V0ICpwYXJlbnQsIEtNTWVzc2FnZSAqbXNnICkKKyAgOktNQ29tbWFuZCggcGFyZW50LCBt
c2cgKQoreworfQorCitLTUNvbW1hbmQ6OlJlc3VsdCBLTVVzZVRlbXBsYXRlQ29tbWFuZDo6ZXhl
Y3V0ZSgpCit7CisgIGtkRGVidWcoMCkgPDwga19mdW5jaW5mbyA8PCBlbmRsOworICBLTU1lc3Nh
Z2UgKm1zZyA9IHJldHJpZXZlZE1lc3NhZ2UoKTsKKyAgaWYgKCFtc2cgfHwgIW1zZy0+cGFyZW50
KCkgfHwKKyAgICAgICFrbWtlcm5lbC0+Zm9sZGVySXNUZW1wbGF0ZXMoIG1zZy0+cGFyZW50KCkg
KSkKKyAgICByZXR1cm4gRmFpbGVkOworCisgIC8vIFRha2UgYSBjb3B5IG9mIHRoZSBvcmlnaW5h
bCBtZXNzYWdlLCB3aGljaCByZW1haW5zIHVuY2hhbmdlZC4KKyAgS01NZXNzYWdlICpuZXdNc2cg
PSBuZXcgS01NZXNzYWdlOworICBuZXdNc2ctPnNldENvbXBsZXRlKG1zZy0+aXNDb21wbGV0ZSgp
KTsKKyAgbmV3TXNnLT5mcm9tU3RyaW5nKG1zZy0+YXNTdHJpbmcoKSk7CisgIG5ld01zZy0+c2V0
U3RhdHVzKG1zZy0+c3RhdHVzKCkpOworCisgIEtNQ29tcG9zZVdpbiAqd2luID0gbmV3IEtNQ29t
cG9zZVdpbigpOworICBtc2ctPnNldFRyYW5zZmVySW5Qcm9ncmVzcyhmYWxzZSk7IC8vIEZyb20g
aGVyZSBvbiBvbiwgdGhlIGNvbXBvc2VyIG93bnMgdGhlIG1lc3NhZ2UuCisgIG5ld01zZy0+c2V0
VHJhbnNmZXJJblByb2dyZXNzKGZhbHNlKTsKKyAgd2luLT5zZXRNc2cobmV3TXNnLCBGQUxTRSwg
VFJVRSk7CisgIHdpbi0+c2hvdygpOworCisgIHJldHVybiBPSzsKK30KKworCiBLTVNob3dNc2dT
cmNDb21tYW5kOjpLTVNob3dNc2dTcmNDb21tYW5kKCBRV2lkZ2V0ICpwYXJlbnQsCiAgIEtNTWVz
c2FnZSAqbXNnLCBib29sIGZpeGVkRm9udCApCiAgIDpLTUNvbW1hbmQoIHBhcmVudCwgbXNnICks
IG1GaXhlZEZvbnQoIGZpeGVkRm9udCApCi0tLSBrZGVwaW0va21haWwva21jb21tYW5kcy5oLnRl
bQkyMDA1LTA1LTIzIDEzOjExOjU0LjAwMDAwMDAwMCArMDEwMAorKysga2RlcGltL2ttYWlsL2tt
Y29tbWFuZHMuaAkyMDA1LTA4LTIwIDEyOjIwOjA4LjAwMDAwMDAwMCArMDEwMApAQCAtMjgyLDYg
KzI4MiwxNyBAQAogICB2aXJ0dWFsIFJlc3VsdCBleGVjdXRlKCk7CiB9OwogCitjbGFzcyBLREVf
RVhQT1JUIEtNVXNlVGVtcGxhdGVDb21tYW5kIDogcHVibGljIEtNQ29tbWFuZAoreworICBRX09C
SkVDVAorCitwdWJsaWM6CisgIEtNVXNlVGVtcGxhdGVDb21tYW5kKCBRV2lkZ2V0ICpwYXJlbnQs
IEtNTWVzc2FnZSAqbXNnICk7CisKK3ByaXZhdGU6CisgIHZpcnR1YWwgUmVzdWx0IGV4ZWN1dGUo
KTsKK307CisKIGNsYXNzIEtERV9FWFBPUlQgS01TaG93TXNnU3JjQ29tbWFuZCA6IHB1YmxpYyBL
TUNvbW1hbmQKIHsKICAgUV9PQkpFQ1QKLS0tIGtkZXBpbS9rbWFpbC9rbWNvbXBvc2VydWkucmMu
dGVtCTIwMDUtMDUtMjMgMTM6MTE6NTQuMDAwMDAwMDAwICswMTAwCisrKyBrZGVwaW0va21haWwv
a21jb21wb3NlcnVpLnJjCTIwMDUtMDgtMTcgMTc6MTI6MTkuMDAwMDAwMDAwICswMTAwCkBAIC0x
LDQgKzEsNCBAQAotPCFET0NUWVBFIGtwYXJ0Z3VpID48a3BhcnRndWkgdmVyc2lvbj0iMjUiIG5h
bWU9ImttY29tcG9zZXIiID4KKzwhRE9DVFlQRSBrcGFydGd1aSA+PGtwYXJ0Z3VpIHZlcnNpb249
IjI3IiBuYW1lPSJrbWNvbXBvc2VyIiA+CiAgPE1lbnVCYXI+CiAgIDxNZW51IG5vTWVyZ2U9IjEi
IG5hbWU9ImZpbGUiID4KICAgIDx0ZXh0PiZhbXA7TWVzc2FnZTwvdGV4dD4KQEAgLTgsOSArOCwx
MSBAQAogICAgPEFjdGlvbiBuYW1lPSJzZW5kX2RlZmF1bHQiIC8+CiAgICA8QWN0aW9uIG5hbWU9
InNlbmRfYWx0ZXJuYXRpdmUiIC8+CiAgICA8QWN0aW9uIG5hbWU9InNhdmVfaW5fZHJhZnRzIiAv
PgorICAgPEFjdGlvbiBuYW1lPSJzYXZlX2luX3RlbXBsYXRlcyIgLz4KICAgIDxTZXBhcmF0b3Iv
PgogICAgPEFjdGlvbiBuYW1lPSJpbnNlcnRfZmlsZSIgLz4KICAgIDxBY3Rpb24gbmFtZT0iaW5z
ZXJ0X2ZpbGVfcmVjZW50IiAvPgorICAgPEFjdGlvbiBuYW1lPSJpbnNlcnRfdGVtcGxhdGUiIC8+
CiAgICA8QWN0aW9uIG5hbWU9ImZpbGVfcHJpbnQiIC8+CiAgICA8U2VwYXJhdG9yLz4KICAgIDxB
Y3Rpb24gbmFtZT0iZmlsZV9jbG9zZSIgLz4KLS0tIGtkZXBpbS9rbWFpbC9rbWNvbXBvc2V3aW4u
Y3BwLnRlbQkyMDA1LTA1LTIzIDEzOjExOjU0LjAwMDAwMDAwMCArMDEwMAorKysga2RlcGltL2tt
YWlsL2ttY29tcG9zZXdpbi5jcHAJMjAwNS0wOC0xOCAxNjo0NDowMy4wMDAwMDAwMDAgKzAxMDAK
QEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJrbGVvX3V0aWwuaCIKICNpbmNsdWRlICJzdGxf
dXRpbC5oIgogI2luY2x1ZGUgInJlY2lwaWVudHNlZGl0b3IuaCIKKyNpbmNsdWRlICJzZWxlY3R0
ZW1wbGF0ZWRpYWxvZy5oIgogCiAjaW5jbHVkZSAiYXR0YWNobWVudGNvbGxlY3Rvci5oIgogI2lu
Y2x1ZGUgIm9iamVjdHRyZWVwYXJzZXIuaCIKQEAgLTEwNTUsOSArMTA1NiwxMiBAQAogICAgICAg
ICAgICAgICAgICAgICAgICAgYWN0aW9uQ29sbGVjdGlvbigpLCAic2VuZF9hbHRlcm5hdGl2ZSIp
OwogICB9CiAKLSAgKHZvaWQpIG5ldyBLQWN0aW9uIChpMThuKCJTYXZlIGluICZEcmFmdHMgRm9s
ZGVyIiksICJmaWxlc2F2ZSIsIDAsCisgICh2b2lkKSBuZXcgS0FjdGlvbiAoaTE4bigiU2F2ZSBh
cyAmRHJhZnQiKSwgImZpbGVzYXZlIiwgMCwKICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCBT
TE9UKHNsb3RTYXZlRHJhZnQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uQ29sbGVj
dGlvbigpLCAic2F2ZV9pbl9kcmFmdHMiKTsKKyAgKHZvaWQpIG5ldyBLQWN0aW9uIChpMThuKCJT
YXZlIGFzICZUZW1wbGF0ZSIpLCAiZmlsZXNhdmUiLCAwLAorICAgICAgICAgICAgICAgICAgICAg
IHRoaXMsIFNMT1Qoc2xvdFNhdmVUZW1wbGF0ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICBh
Y3Rpb25Db2xsZWN0aW9uKCksICJzYXZlX2luX3RlbXBsYXRlcyIpOwogICAodm9pZCkgbmV3IEtB
Y3Rpb24gKGkxOG4oIiZJbnNlcnQgRmlsZS4uLiIpLCAiZmlsZW9wZW4iLCAwLAogICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMsICBTTE9UKHNsb3RJbnNlcnRGaWxlKCkpLAogICAgICAgICAgICAg
ICAgICAgICAgIGFjdGlvbkNvbGxlY3Rpb24oKSwgImluc2VydF9maWxlIik7CkBAIC0xMDY4LDYg
KzEwNzIsMTAgQEAKIAogICBtUmVjZW50QWN0aW9uLT5sb2FkRW50cmllcyggS01LZXJuZWw6OmNv
bmZpZygpICk7CiAKKyAgKHZvaWQpIG5ldyBLQWN0aW9uIChpMThuKCJJbnNlcnQgVGVtcGxhdGUg
VGUmeHQuLi4iKSwgImZpbGVuZXciLCAwLAorICAgICAgICAgICAgICAgICAgICAgIHRoaXMsICBT
TE9UKHNsb3RJbnNlcnRUZW1wbGF0ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25D
b2xsZWN0aW9uKCksICJpbnNlcnRfdGVtcGxhdGUiKTsKKwogICAodm9pZCkgbmV3IEtBY3Rpb24g
KGkxOG4oIiZBZGRyZXNzIEJvb2siKSwgImNvbnRlbnRzIiwwLAogICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMsIFNMT1Qoc2xvdEFkZHJCb29rKCkpLAogICAgICAgICAgICAgICAgICAgICAgIGFj
dGlvbkNvbGxlY3Rpb24oKSwgImFkZHJlc3Nib29rIik7CkBAIC0zNTMxLDEyICszNTM5LDEzIEBA
CiAKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12b2lkIEtNQ29tcG9zZVdpbjo6ZG9TZW5kKGlu
dCBhU2VuZE5vdywgYm9vbCBzYXZlSW5EcmFmdHMpCit2b2lkIEtNQ29tcG9zZVdpbjo6ZG9TZW5k
KGludCBhU2VuZE5vdywgYm9vbCBzYXZlSW5EcmFmdHMsIGJvb2wgc2F2ZUluVGVtcGxhdGVzKQog
ewogICBtU2VuZE5vdyA9IGFTZW5kTm93OwogICBtU2F2ZUluRHJhZnRzID0gc2F2ZUluRHJhZnRz
OworICBtU2F2ZUluVGVtcGxhdGVzID0gc2F2ZUluVGVtcGxhdGVzOwogCi0gIGlmICghc2F2ZUlu
RHJhZnRzKQorICBpZiAoIXNhdmVJbkRyYWZ0cyAmJiAhc2F2ZUluVGVtcGxhdGVzKQogICB7CiAg
ICAgaWYgKCBLUElNOjpnZXRGaXJzdEVtYWlsQWRkcmVzcyggZnJvbSgpICkuaXNFbXB0eSgpICkg
ewogICAgICAgaWYgKCAhKCBtU2hvd0hlYWRlcnMgJiBIRFJfRlJPTSApICkgewpAQCAtMzYzMSw5
ICszNjQwLDkgQEAKICAgICAgICghaGYuaXNFbXB0eSgpICYmIChoZiAhPSBtVHJhbnNwb3J0LT50
ZXh0KDApKSkpCiAgICAgbU1zZy0+c2V0SGVhZGVyRmllbGQoIlgtS01haWwtVHJhbnNwb3J0Iiwg
bVRyYW5zcG9ydC0+Y3VycmVudFRleHQoKSk7CiAKLSAgbURpc2FibGVCcmVha2luZyA9IHNhdmVJ
bkRyYWZ0czsKKyAgbURpc2FibGVCcmVha2luZyA9IChzYXZlSW5EcmFmdHMgfHwgc2F2ZUluVGVt
cGxhdGVzKTsKIAotICBjb25zdCBib29sIG5ldmVyRW5jcnlwdCA9ICggc2F2ZUluRHJhZnRzICYm
IEdsb2JhbFNldHRpbmdzOjpuZXZlckVuY3J5cHREcmFmdHMoKSApCisgIGNvbnN0IGJvb2wgbmV2
ZXJFbmNyeXB0ID0gKCAoc2F2ZUluRHJhZnRzIHx8IHNhdmVJblRlbXBsYXRlcykgJiYgR2xvYmFs
U2V0dGluZ3M6Om5ldmVyRW5jcnlwdERyYWZ0cygpICkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG1TaWduaW5nQW5kRW5jcnlwdGlvbkV4cGxpY2l0bHlEaXNhYmxlZDsKICAgY29ubmVj
dCggdGhpcywgU0lHTkFMKCBhcHBseUNoYW5nZXNEb25lKCBib29sICkgKSwKICAgICAgICAgICAg
U0xPVCggc2xvdENvbnRpbnVlRG9TZW5kKCBib29sICkgKSApOwpAQCAtMzczOSw2ICszNzQ4LDUy
IEBACiAJKHN0YXRpY19jYXN0PEtNRm9sZGVySW1hcCo+KGltYXBEcmFmdHNGb2xkZXItPnN0b3Jh
Z2UoKSkpLT5nZXRGb2xkZXIoKTsKICAgICAgIH0KIAorICAgIH0gZWxzZSBpZiAobVNhdmVJblRl
bXBsYXRlcykgeworICAgICAgS01Gb2xkZXIqIHRlbXBsYXRlc0ZvbGRlciA9IDAsICppbWFwVGVt
cGxhdGVzRm9sZGVyID0gMDsKKyAgICAgIC8vIGdldCB0aGUgdGVtcGxhdGVzRm9sZGVyCisgICAg
ICBpZiAoICEoKml0KS0+dGVtcGxhdGVzKCkuaXNFbXB0eSgpICkgeworICAgICAgICB0ZW1wbGF0
ZXNGb2xkZXIgPSBrbWtlcm5lbC0+Zm9sZGVyTWdyKCktPmZpbmRJZFN0cmluZyggKCppdCktPnRl
bXBsYXRlcygpICk7CisgICAgICAgIGlmICggdGVtcGxhdGVzRm9sZGVyID09IDAgKQorICAgICAg
ICAgIC8vIFRoaXMgaXMgKk5PVCogc3VwcG9zZWQgdG8gYmUgImltYXBUZW1wbGF0ZXNGb2xkZXIi
LCBiZWNhdXNlIGEKKyAgICAgICAgICAvLyBkSU1BUCBmb2xkZXIgd29ya3MgbGlrZSBhIG5vcm1h
bCBmb2xkZXIKKyAgICAgICAgICB0ZW1wbGF0ZXNGb2xkZXIgPSBrbWtlcm5lbC0+ZGltYXBGb2xk
ZXJNZ3IoKS0+ZmluZElkU3RyaW5nKCAoKml0KS0+dGVtcGxhdGVzKCkgKTsKKyAgICAgICAgaWYg
KCB0ZW1wbGF0ZXNGb2xkZXIgPT0gMCApCisgICAgICAgICAgaW1hcFRlbXBsYXRlc0ZvbGRlciA9
IGtta2VybmVsLT5pbWFwRm9sZGVyTWdyKCktPmZpbmRJZFN0cmluZyggKCppdCktPnRlbXBsYXRl
cygpICk7CisgICAgICAgIGlmICggIXRlbXBsYXRlc0ZvbGRlciAmJiAhaW1hcFRlbXBsYXRlc0Zv
bGRlciApIHsKKyAgICAgICAgICBjb25zdCBLUElNOjpJZGVudGl0eSAmIGlkID0ga21rZXJuZWwt
PmlkZW50aXR5TWFuYWdlcigpCisgICAgICAgICAgICAtPmlkZW50aXR5Rm9yVW9pZE9yRGVmYXVs
dCggKCppdCktPmhlYWRlckZpZWxkKCAiWC1LTWFpbC1JZGVudGl0eSIgKS5zdHJpcFdoaXRlU3Bh
Y2UoKS50b1VJbnQoKSApOworICAgICAgICAgIEtNZXNzYWdlQm94OjppbmZvcm1hdGlvbigwLCBp
MThuKCJUaGUgY3VzdG9tIHRlbXBsYXRlcyBmb2xkZXIgZm9yIGlkZW50aXR5ICIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIlMVwiIGRvZXMgbm90IGV4aXN0
IChhbnltb3JlKTsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ0aGVyZWZvcmUsIHRoZSBkZWZhdWx0IHRlbXBsYXRlcyBmb2xkZXIgIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWxsIGJlIHVzZWQuIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyggaWQuaWRlbnRpdHlOYW1lKCkgKSApOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoaW1hcFRlbXBsYXRlc0ZvbGRlciAmJiBpbWFw
VGVtcGxhdGVzRm9sZGVyLT5ub0NvbnRlbnQoKSkKKwlpbWFwVGVtcGxhdGVzRm9sZGVyID0gMDsK
KworICAgICAgaWYgKCB0ZW1wbGF0ZXNGb2xkZXIgPT0gMCApIHsKKwl0ZW1wbGF0ZXNGb2xkZXIg
PSBrbWtlcm5lbC0+dGVtcGxhdGVzRm9sZGVyKCk7CisgICAgICB9IGVsc2UgeworCXRlbXBsYXRl
c0ZvbGRlci0+b3BlbigpOworICAgICAgfQorICAgICAga2REZWJ1Zyg1MDA2KSA8PCAic2F2ZWlu
dGVtcGxhdGVzOiB0ZW1wbGF0ZXM9IiA8PCB0ZW1wbGF0ZXNGb2xkZXItPm5hbWUoKSA8PCBlbmRs
OworICAgICAgaWYgKGltYXBUZW1wbGF0ZXNGb2xkZXIpCisJa2REZWJ1Zyg1MDA2KSA8PCAic2F2
ZWludGVtcGxhdGVzOiBpbWFwdGVtcGxhdGVzPSIKKwkJICAgICAgPDwgaW1hcFRlbXBsYXRlc0Zv
bGRlci0+bmFtZSgpIDw8IGVuZGw7CisKKyAgICAgIHNlbnRPayA9ICEodGVtcGxhdGVzRm9sZGVy
LT5hZGRNc2coKCppdCkpKTsKKworICAgICAgLy9FbnN1cmUgdGhlIHRlbXBsYXRlcyBtZXNzYWdl
IGlzIGNvcnJlY3RseSBhbmQgZnVsbHkgcGFyc2VkCisgICAgICB0ZW1wbGF0ZXNGb2xkZXItPnVu
R2V0TXNnKHRlbXBsYXRlc0ZvbGRlci0+Y291bnQoKSAtIDEpOworICAgICAgKCppdCkgPSB0ZW1w
bGF0ZXNGb2xkZXItPmdldE1zZyh0ZW1wbGF0ZXNGb2xkZXItPmNvdW50KCkgLSAxKTsKKworICAg
ICAgaWYgKGltYXBUZW1wbGF0ZXNGb2xkZXIpIHsKKwkvLyBtb3ZlIHRoZSBtZXNzYWdlIHRvIHRo
ZSBpbWFwLWZvbGRlciBhbmQgaGlnaGxpZ2h0IGl0CisJaW1hcFRlbXBsYXRlc0ZvbGRlci0+bW92
ZU1zZygoKml0KSk7CisJKHN0YXRpY19jYXN0PEtNRm9sZGVySW1hcCo+KGltYXBUZW1wbGF0ZXNG
b2xkZXItPnN0b3JhZ2UoKSkpLT5nZXRGb2xkZXIoKTsKKyAgICAgIH0KKwogICAgIH0gZWxzZSB7
CiAgICAgICAoKml0KS0+c2V0VG8oIEtNTWVzc2FnZTo6ZXhwYW5kQWxpYXNlcyggdG8oKSApKTsK
ICAgICAgICgqaXQpLT5zZXRDYyggS01NZXNzYWdlOjpleHBhbmRBbGlhc2VzKCBjYygpICkpOwpA
QCAtMzc4OCw2ICszODQzLDE0IEBACiAKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIEtN
Q29tcG9zZVdpbjo6c2xvdFNhdmVUZW1wbGF0ZSgpIHsKKyAga2REZWJ1ZygwKSA8PCBrX2Z1bmNp
bmZvIDw8IGVuZGw7CisgIGlmICggbUVkaXRvci0+Y2hlY2tFeHRlcm5hbEVkaXRvckZpbmlzaGVk
KCkgKQorICAgIGRvU2VuZCggZmFsc2UsIGZhbHNlLCB0cnVlICk7Cit9CisKKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiB2b2lkIEtNQ29tcG9zZVdpbjo6c2xvdFNlbmROb3coKSB7CiAgIGlmICgg
IW1FZGl0b3ItPmNoZWNrRXh0ZXJuYWxFZGl0b3JGaW5pc2hlZCgpICkKICAgICByZXR1cm47CkBA
IC00Mjg0LDYgKzQzNDcsNyBAQAogKi8KIHZvaWQgS01Db21wb3NlV2luOjpzbG90Rm9sZGVyUmVt
b3ZlZChLTUZvbGRlciogZm9sZGVyKQogeworICAvLyBUT0RPOiBuZWVkIHRvIGhhbmRsZSB0ZW1w
bGF0ZXMgaGVyZT8KICAgaWYgKCAobUZvbGRlcikgJiYgKGZvbGRlci0+aWRTdHJpbmcoKSA9PSBt
Rm9sZGVyLT5pZFN0cmluZygpKSApCiAgIHsKICAgICBtRm9sZGVyID0ga21rZXJuZWwtPmRyYWZ0
c0ZvbGRlcigpOwpAQCAtNDQxNyw2ICs0NDgxLDM1IEBACiAgICAgYWxpZ25SaWdodEFjdGlvbi0+
c2V0Q2hlY2tlZCggKCBhICYgQWxpZ25SaWdodCApICk7CiB9CiAKK3ZvaWQgS01Db21wb3NlV2lu
OjpzbG90SW5zZXJ0VGVtcGxhdGUoKQoreworICBrZERlYnVnKDApIDw8IGtfZnVuY2luZm8gPDwg
ZW5kbDsKKworICBLTUZvbGRlciAqdGVtRm9sZGVyID0ga21rZXJuZWwtPnRlbXBsYXRlc0ZvbGRl
cigpOworICBpZiAoIXRlbUZvbGRlcikgcmV0dXJuOworCisgIGlmICh0ZW1Gb2xkZXItPmNvdW50
KCk9PTApCisgIHsKKyAgICBLTWVzc2FnZUJveDo6c29ycnkodGhpcyxpMThuKCJUaGVyZSBhcmUg
bm8gdGVtcGxhdGVzIGF2YWlsYWJsZS5cbkNvcHkgb3Igc2F2ZSBtZXNzYWdlcyBpbnRvIHRoZSAn
dGVtcGxhdGVzJyBmb2xkZXIgaW4gb3JkZXIgdG8gdXNlIHRoZW0uIikpOworICAgIHJldHVybjsK
KyAgfQorCisgIFNlbGVjdFRlbXBsYXRlRGlhbG9nIGQodGVtRm9sZGVyLHRoaXMpOworCisgIGQu
c2hvdygpOworICBpZiAoZC5leGVjKCkpCisgIHsKKyAgICBRU3RyaW5nIHMgPSBkLnNlbGVjdGVk
VGVtcGxhdGVUZXh0KCk7CisgICAgaWYgKCFzLmlzRW1wdHkoKSkgbUVkaXRvci0+aW5zZXJ0KHMp
OworICB9Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyAgIENsYXNzICBLTUVk
aXQKKy8vCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKIHZvaWQgS01FZGl0Ojpjb250ZW50c0Ry
YWdFbnRlckV2ZW50KFFEcmFnRW50ZXJFdmVudCAqZSkKIHsKICAgICBpZiAoZS0+cHJvdmlkZXMo
TWFpbExpc3REcmFnOjpmb3JtYXQoKSkpCi0tLSBrZGVwaW0va21haWwva21jb21wb3Nld2luLmgu
dGVtCTIwMDUtMDUtMjMgMTM6MTE6NTQuMDAwMDAwMDAwICswMTAwCisrKyBrZGVwaW0va21haWwv
a21jb21wb3Nld2luLmgJMjAwNS0wOC0xNyAxNzoxOToxMS4wMDAwMDAwMDAgKzAxMDAKQEAgLTQy
NCw2ICs0MjQsNyBAQAogICAgKiBSZXR1cm5zIHRydWUgd2hlbiBzYXZpbmcgd2FzIHN1Y2Nlc3Nm
dWwuCiAgICAqLwogICB2b2lkIHNsb3RTYXZlRHJhZnQoKTsKKyAgdm9pZCBzbG90U2F2ZVRlbXBs
YXRlKCk7CiAgIHZvaWQgc2xvdE5ld0NvbXBvc2VyKCk7CiAgIHZvaWQgc2xvdE5ld01haWxSZWFk
ZXIoKTsKICAgdm9pZCBzbG90Q2xvc2UoKTsKQEAgLTQ2OCw2ICs0NjksMTEgQEAKICAgICovCiAg
IHZvaWQgc2xvdEluc2VydEZpbGUoKTsKIAorICAvKioKKyAgICogSW5zZXJ0IHRoZSB0ZXh0IG9m
IGEgdGVtcGxhdGUgYXQgdGhlIGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgZWRpdG9yLgorICAgKi8K
KyAgdm9pZCBzbG90SW5zZXJ0VGVtcGxhdGUoKTsKKwogICB2b2lkIHNsb3RTZXRDaGFyc2V0KCk7
CiAgIC8qKgogICAgKiBDaGVjayBzcGVsbGluZyBvZiB0ZXh0LgpAQCAtNzczLDcgKzc3OSw3IEBA
CiAgIC8qKgogICAgKiBTZW5kIHRoZSBtZXNzYWdlLiBSZXR1cm5zIHRydWUgaWYgdGhlIG1lc3Nh
Z2Ugd2FzIHNlbnQgc3VjY2Vzc2Z1bGx5LgogICAgKi8KLSAgdm9pZCBkb1NlbmQoaW50IHNlbmRO
b3c9LTEsIGJvb2wgc2F2ZUluRHJhZnRzID0gZmFsc2UpOworICB2b2lkIGRvU2VuZChpbnQgc2Vu
ZE5vdz0tMSwgYm9vbCBzYXZlSW5EcmFmdHMgPSBmYWxzZSwgYm9vbCBzYXZlSW5UZW1wbGF0ZXMg
PSBmYWxzZSk7CiAKICAgLyoqCiAgICAqIFJldHVybnMgdGhlIGF1dG9zYXZlIGludGVydmFsIGlu
IG1pbGxpc2Vjb25kcyAoYXMgbmVlZGVkIGZvciBRVGltZXIpLgpAQCAtOTMyLDYgKzkzOCw3IEBA
CiAgIC8vIFRoZXNlIGFyZSBmb3IgcGFzc2luZyBvbiBtZXRob2RzIG92ZXIgdGhlIGFwcGx5Q2hh
bmdlcyBjYWxscwogICBpbnQgbVNlbmROb3c7CiAgIGJvb2wgbVNhdmVJbkRyYWZ0czsKKyAgYm9v
bCBtU2F2ZUluVGVtcGxhdGVzOwogCiAgIC8vIFRoaXMgaXMgdGhlIHRlbXBvcmFyeSBvYmplY3Qg
dGhhdCBjb25zdHJ1Y3RzIHRoZSBtZXNzYWdlIG91dCBvZiB0aGUKICAgLy8gd2luZG93Ci0tLSBr
ZGVwaW0va21haWwva21mb2xkZXJ0cmVlLmNwcC50ZW0JMjAwNS0wNy0yMCAxMTowMzowMi4wMDAw
MDAwMDAgKzAxMDAKKysrIGtkZXBpbS9rbWFpbC9rbWZvbGRlcnRyZWUuY3BwCTIwMDUtMDgtMTYg
MTQ6MzU6NDAuMDAwMDAwMDAwICswMTAwCkBAIC0xMTcsNiArMTE3LDcgQEAKICAgICAgIGNhc2Ug
U2VudE1haWw6IGljb24gPSAiZm9sZGVyX3NlbnRfbWFpbCI7IGJyZWFrOwogICAgICAgY2FzZSBU
cmFzaDogaWNvbiA9ICJ0cmFzaGNhbl9lbXB0eSI7IGJyZWFrOwogICAgICAgY2FzZSBEcmFmdHM6
IGljb24gPSAiZWRpdCI7YnJlYWs7CisgICAgICBjYXNlIFRlbXBsYXRlczogaWNvbiA9ICJmaWxl
bmV3IjticmVhazsKICAgICAgIGRlZmF1bHQ6IGljb24gPSBrbWtlcm5lbC0+aUNhbElmYWNlKCku
Zm9sZGVyUGl4bWFwKCB0eXBlKCkgKTsgYnJlYWs7CiAgICAgfQogICAgIC8vIG5vbi1yb290IHNl
YXJjaCBmb2xkZXJzCkBAIC0xNDgsNiArMTQ5LDcgQEAKIAogICBpZiAoICFtRm9sZGVyIHx8IGRl
cHRoKCkgPT0gMCB8fCBtRm9sZGVyLT5pc1N5c3RlbUZvbGRlcigpCiAgICAgfHwga21rZXJuZWwt
PmZvbGRlcklzVHJhc2goIG1Gb2xkZXIgKQorICAgIHx8IGtta2VybmVsLT5mb2xkZXJJc1RlbXBs
YXRlcyggbUZvbGRlciApCiAgICAgfHwga21rZXJuZWwtPmZvbGRlcklzRHJhZnRPck91dGJveCgg
bUZvbGRlciApICkKICAgICBwbSA9IG5vcm1hbEljb24oIHNpemUgKTsKIApAQCAtMTkwLDYgKzE5
Miw4IEBACiAgICAgICBzZXRUeXBlKCBTZW50TWFpbCApOwogICAgIGVsc2UgaWYgKCBrbWtlcm5l
bC0+Zm9sZGVySXNUcmFzaCggbUZvbGRlciApICkKICAgICAgIHNldFR5cGUoIFRyYXNoICk7Cisg
ICAgZWxzZSBpZiAoIGtta2VybmVsLT5mb2xkZXJJc1RlbXBsYXRlcyggbUZvbGRlciApICkKKyAg
ICAgIHNldFR5cGUoIFRlbXBsYXRlcyApOwogICAgIGVsc2UgaWYoIGtta2VybmVsLT5pQ2FsSWZh
Y2UoKS5pc1Jlc291cmNlRm9sZGVyKG1Gb2xkZXIpICkKICAgICAgIHNldFR5cGUoIGtta2VybmVs
LT5pQ2FsSWZhY2UoKS5mb2xkZXJUeXBlKG1Gb2xkZXIpICk7CiAgICAgLy8gU3lzdGVtIGZvbGRl
cnMgb24gZGltYXAgb3IgaW1hcCB3aGljaCBhcmUgbm90IHJlc291cmNlIGZvbGRlcnMgYXJlCkBA
IC03ODQsNiArNzg4LDcgQEAKICAgICAgIC8vIGN0cmwtIHNvIHdlIGRvIHRoaXMgb25seSBpZiAo
Y29uZmlybSA9PSB0cnVlKSwgd2hpY2ggbWVhbnMgd2UgYXJlIGRvaW5nCiAgICAgICAvLyByZWFk
T24uCiAgICAgICBpZiAoIGZ0aS0+dHlwZSgpID09IEtGb2xkZXJUcmVlSXRlbTo6RHJhZnRzIHx8
CisgICAgICAgICAgIGZ0aS0+dHlwZSgpID09IEtGb2xkZXJUcmVlSXRlbTo6VGVtcGxhdGVzIHx8
CiAgICAgICAgICAgIGZ0aS0+dHlwZSgpID09IEtGb2xkZXJUcmVlSXRlbTo6U2VudE1haWwgKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLS0tIGtkZXBpbS9rbWFpbC9rbWhlYWRlcnMuY3BwLnRl
bQkyMDA1LTA4LTA5IDE4OjAxOjEyLjAwMDAwMDAwMCArMDEwMAorKysga2RlcGltL2ttYWlsL2tt
aGVhZGVycy5jcHAJMjAwNS0wOC0xNiAxNjoyNjo1MC4wMDAwMDAwMDAgKzAxMDAKQEAgLTY1MSw2
ICs2NTEsOCBAQAogICAgIG1Tb3J0SW5mby5kaXJ0eSA9IHRydWU7CiAgICAgbU93bmVyLT5lZGl0
QWN0aW9uKCktPnNldEVuYWJsZWQobUZvbGRlciA/CiAgICAgICAgIChrbWtlcm5lbC0+Zm9sZGVy
SXNEcmFmdE9yT3V0Ym94KG1Gb2xkZXIpKTogZmFsc2UgKTsKKyAgICBtT3duZXItPnVzZUFjdGlv
bigpLT5zZXRFbmFibGVkKG1Gb2xkZXIgPworICAgICAgICAoa21rZXJuZWwtPmZvbGRlcklzVGVt
cGxhdGVzKG1Gb2xkZXIpKTogZmFsc2UgKTsKICAgICBtT3duZXItPnJlcGx5TGlzdEFjdGlvbigp
LT5zZXRFbmFibGVkKG1Gb2xkZXIgPwogICAgICAgICBtRm9sZGVyLT5pc01haWxpbmdMaXN0RW5h
YmxlZCgpIDogZmFsc2UpOwogICAgIGlmIChtRm9sZGVyKQpAQCAtMjIwOSw4ICsyMjExLDEyIEBA
CiAgIG1Pd25lci0+dXBkYXRlTWVzc2FnZU1lbnUoKTsKIAogICBib29sIG91dF9mb2xkZXIgPSBr
bWtlcm5lbC0+Zm9sZGVySXNEcmFmdE9yT3V0Ym94KG1Gb2xkZXIpOworICBib29sIHRlbV9mb2xk
ZXIgPSBrbWtlcm5lbC0+Zm9sZGVySXNUZW1wbGF0ZXMobUZvbGRlcik7CiAgIGlmICggb3V0X2Zv
bGRlciApCiAgICAgIG1Pd25lci0+ZWRpdEFjdGlvbigpLT5wbHVnKG1lbnUpOworICBlbHNlIGlm
ICggdGVtX2ZvbGRlciApIHsKKyAgICAgbU93bmVyLT51c2VBY3Rpb24oKS0+cGx1ZyhtZW51KTsK
KyAgfQogICBlbHNlIHsKICAgICAgLy8gc2hvdyBtb3N0IHVzZWQgYWN0aW9ucwogICAgICBtT3du
ZXItPnJlcGx5TWVudSgpLT5wbHVnKG1lbnUpOwpAQCAtMjI0MSwxMiArMjI0NywxMiBAQAogICAg
IG1Pd25lci0+dGhyZWFkU3RhdHVzTWVudSgpLT5wbHVnKCBtZW51ICk7IC8vIE1hcmsgVGhyZWFk
IG1lbnUKICAgfQogCi0gIGlmICghb3V0X2ZvbGRlciAmJiBtT3duZXItPndhdGNoVGhyZWFkQWN0
aW9uKCktPmlzRW5hYmxlZCgpICkgeworICBpZiAoIW91dF9mb2xkZXIgJiYgIXRlbV9mb2xkZXIg
JiYgbU93bmVyLT53YXRjaFRocmVhZEFjdGlvbigpLT5pc0VuYWJsZWQoKSApIHsKICAgICBtT3du
ZXItPndhdGNoVGhyZWFkQWN0aW9uKCktPnBsdWcobWVudSk7CiAgICAgbU93bmVyLT5pZ25vcmVU
aHJlYWRBY3Rpb24oKS0+cGx1ZyhtZW51KTsKICAgfQogCi0gIGlmICggIW91dF9mb2xkZXIgKSB7
CisgIGlmICggIW91dF9mb2xkZXIgJiYgIXRlbV9mb2xkZXIgKSB7CiAgICAgbWVudS0+aW5zZXJ0
U2VwYXJhdG9yKCk7CiAgICAgbU93bmVyLT5maWx0ZXJNZW51KCktPnBsdWcoIG1lbnUgKTsgLy8g
Q3JlYXRlIEZpbHRlciBtZW51CiAgICAgbU93bmVyLT5hY3Rpb24oImFwcGx5X2ZpbHRlcl9hY3Rp
b25zIiktPnBsdWcobWVudSk7Ci0tLSBrZGVwaW0va21haWwva21rZXJuZWwuY3BwLnRlbQkyMDA1
LTA1LTIzIDEzOjExOjU0LjAwMDAwMDAwMCArMDEwMAorKysga2RlcGltL2ttYWlsL2tta2VybmVs
LmNwcAkyMDA1LTA4LTE4IDE3OjIwOjExLjAwMDAwMDAwMCArMDEwMApAQCAtMTAzLDYgKzEwMyw3
IEBACiAgIHRoZV9zZW50Rm9sZGVyID0gMDsKICAgdGhlX3RyYXNoRm9sZGVyID0gMDsKICAgdGhl
X2RyYWZ0c0ZvbGRlciA9IDA7CisgIHRoZV90ZW1wbGF0ZXNGb2xkZXIgPSAwOwogCiAgIHRoZV9m
b2xkZXJNZ3IgPSAwOwogICB0aGVfaW1hcEZvbGRlck1nciA9IDA7CkBAIC0xMDU4LDYgKzEwNTks
MTYgQEAKICAgaWYgKCB0aGVfZHJhZnRzRm9sZGVyLT51c2VyV2hvRmllbGQoKS5pc0VtcHR5KCkg
KQogICAgIHRoZV9kcmFmdHNGb2xkZXItPnNldFVzZXJXaG9GaWVsZCggUVN0cmluZzo6bnVsbCAp
OwogICB0aGVfZHJhZnRzRm9sZGVyLT5vcGVuKCk7CisKKyAgdGhlX3RlbXBsYXRlc0ZvbGRlciA9
IHRoZV9mb2xkZXJNZ3ItPmZpbmRPckNyZWF0ZShjZmctPnJlYWRFbnRyeSgidGVtcGxhdGVzRm9s
ZGVyIiwgSTE4Tl9OT09QKCJ0ZW1wbGF0ZXMiKSkpOworICBpZiAodGhlX3RlbXBsYXRlc0ZvbGRl
ci0+Y2FuQWNjZXNzKCkgIT0gMCkgeworICAgIGVtZXJnZW5jeUV4aXQoIGkxOG4oIllvdSBkbyBu
b3QgaGF2ZSByZWFkL3dyaXRlIHBlcm1pc3Npb24gdG8geW91ciB0ZW1wbGF0ZXMgZm9sZGVyLiIp
ICk7CisgIH0KKyAgdGhlX3RlbXBsYXRlc0ZvbGRlci0+c2V0VHlwZSgiVGYiKTsKKyAgdGhlX3Rl
bXBsYXRlc0ZvbGRlci0+c2V0U3lzdGVtRm9sZGVyKFRSVUUpOworICBpZiAoIHRoZV90ZW1wbGF0
ZXNGb2xkZXItPnVzZXJXaG9GaWVsZCgpLmlzRW1wdHkoKSApCisgICAgdGhlX3RlbXBsYXRlc0Zv
bGRlci0+c2V0VXNlcldob0ZpZWxkKCBRU3RyaW5nOjpudWxsICk7CisgIHRoZV90ZW1wbGF0ZXNG
b2xkZXItPm9wZW4oKTsKIH0KIAogCkBAIC0xNjU5LDcgKzE2NzAsMjIgQEAKICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIEtNS2VybmVsOjpmb2xkZXJJc1RyYXNoKEtNRm9sZGVyICogZm9sZGVy
KQorYm9vbCBLTUtlcm5lbDo6Zm9sZGVySXNUZW1wbGF0ZXMoY29uc3QgS01Gb2xkZXIgKiBmb2xk
ZXIpCit7CisgIGFzc2VydChmb2xkZXIpOworICBpZiAoZm9sZGVyID09IHRoZV90ZW1wbGF0ZXNG
b2xkZXIpIHJldHVybiB0cnVlOworCisgIFFTdHJpbmcgaWRTdHJpbmcgPSBmb2xkZXItPmlkU3Ry
aW5nKCk7CisgIGlmICggaWRTdHJpbmcuaXNFbXB0eSgpICkgcmV0dXJuIGZhbHNlOworCisgIC8v
IHNlYXJjaCB0aGUgaWRlbnRpdGllcyBpZiB0aGUgZm9sZGVyIG1hdGNoZXMgdGhlIHRlbXBsYXRl
cy1mb2xkZXIKKyAgY29uc3QgS1BJTTo6SWRlbnRpdHlNYW5hZ2VyICogaW0gPSBpZGVudGl0eU1h
bmFnZXIoKTsKKyAgZm9yKCBLUElNOjpJZGVudGl0eU1hbmFnZXI6OkNvbnN0SXRlcmF0b3IgaXQg
PSBpbS0+YmVnaW4oKTsgaXQgIT0gaW0tPmVuZCgpOyArK2l0ICkKKyAgICBpZiAoICgqaXQpLnRl
bXBsYXRlcygpID09IGlkU3RyaW5nICkgcmV0dXJuIHRydWU7CisgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBLTUtlcm5lbDo6Zm9sZGVySXNUcmFzaChjb25zdCBLTUZvbGRlciAqIGZvbGRlcikK
IHsKICAgYXNzZXJ0KGZvbGRlcik7CiAgIGlmIChmb2xkZXIgPT0gdGhlX3RyYXNoRm9sZGVyKSBy
ZXR1cm4gdHJ1ZTsKLS0tIGtkZXBpbS9rbWFpbC9rbWtlcm5lbC5oLnRlbQkyMDA1LTA1LTIzIDEz
OjExOjU0LjAwMDAwMDAwMCArMDEwMAorKysga2RlcGltL2ttYWlsL2tta2VybmVsLmgJMjAwNS0w
OC0xNiAxNDozNToxMi4wMDAwMDAwMDAgKzAxMDAKQEAgLTE3Nyw3ICsxNzcsOCBAQAogICB2b2lk
IGJ5dGVBcnJheVRvUmVtb3RlRmlsZShjb25zdCBRQnl0ZUFycmF5JiwgY29uc3QgS1VSTCYsCiAJ
CQkgICAgIGJvb2wgb3ZlcndyaXRlID0gRkFMU0UpOwogICBib29sIGZvbGRlcklzRHJhZnRPck91
dGJveChjb25zdCBLTUZvbGRlciAqKTsKLSAgYm9vbCBmb2xkZXJJc1RyYXNoKEtNRm9sZGVyICop
OworICBib29sIGZvbGRlcklzVHJhc2goY29uc3QgS01Gb2xkZXIgKik7CisgIGJvb2wgZm9sZGVy
SXNUZW1wbGF0ZXMoY29uc3QgS01Gb2xkZXIgKik7CiAgIC8qKgogICAgKiBSZXR1cm5zIHRydWUg
aWYgdGhlIGZvbGRlciBpcyBvbmUgb2YgdGhlIHNlbnQtbWFpbCBmb2xkZXJzLgogICAgKi8KQEAg
LTE5NSw2ICsxOTYsNyBAQAogICBLTUZvbGRlciAqc2VudEZvbGRlcigpIHsgcmV0dXJuIHRoZV9z
ZW50Rm9sZGVyOyB9CiAgIEtNRm9sZGVyICp0cmFzaEZvbGRlcigpIHsgcmV0dXJuIHRoZV90cmFz
aEZvbGRlcjsgfQogICBLTUZvbGRlciAqZHJhZnRzRm9sZGVyKCkgeyByZXR1cm4gdGhlX2RyYWZ0
c0ZvbGRlcjsgfQorICBLTUZvbGRlciAqdGVtcGxhdGVzRm9sZGVyKCkgeyByZXR1cm4gdGhlX3Rl
bXBsYXRlc0ZvbGRlcjsgfQogCiAgIEtNRm9sZGVyTWdyICpmb2xkZXJNZ3IoKSB7IHJldHVybiB0
aGVfZm9sZGVyTWdyOyB9CiAgIEtNRm9sZGVyTWdyICppbWFwRm9sZGVyTWdyKCkgeyByZXR1cm4g
dGhlX2ltYXBGb2xkZXJNZ3I7IH0KQEAgLTMzNyw2ICszMzksNyBAQAogICBLTUZvbGRlciAqdGhl
X3NlbnRGb2xkZXI7CiAgIEtNRm9sZGVyICp0aGVfdHJhc2hGb2xkZXI7CiAgIEtNRm9sZGVyICp0
aGVfZHJhZnRzRm9sZGVyOworICBLTUZvbGRlciAqdGhlX3RlbXBsYXRlc0ZvbGRlcjsKIAogICBL
TUZvbGRlck1nciAqdGhlX2ZvbGRlck1ncjsKICAgS01Gb2xkZXJNZ3IgKnRoZV9pbWFwRm9sZGVy
TWdyOwotLS0ga2RlcGltL2ttYWlsL2ttbWFpbndpZGdldC5jcHAudGVtCTIwMDUtMDgtMDkgMTg6
MDQ6MzkuMDAwMDAwMDAwICswMTAwCisrKyBrZGVwaW0va21haWwva21tYWlud2lkZ2V0LmNwcAky
MDA1LTA4LTIwIDEyOjIwOjQ0LjAwMDAwMDAwMCArMDEwMApAQCAtMTI4Nyw2ICsxMjg3LDE0IEBA
CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgS01NYWluV2lkZ2V0OjpzbG90VXNl
VGVtcGxhdGUoKQoreworICBrZERlYnVnKDApIDw8IGtfZnVuY2luZm8gPDwgZW5kbDsKKyAgS01D
b21tYW5kICpjb21tYW5kID0gbmV3IEtNVXNlVGVtcGxhdGVDb21tYW5kKCB0aGlzLCBtSGVhZGVy
cy0+Y3VycmVudE1zZygpICk7CisgIGNvbW1hbmQtPnN0YXJ0KCk7Cit9CisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIHZvaWQgS01NYWluV2lkZ2V0OjpzbG90UmVzZW5kTXNnKCkKIHsKICAgS01D
b21tYW5kICpjb21tYW5kID0gbmV3IEtNUmVzZW5kTWVzc2FnZUNvbW1hbmQoIHRoaXMsIG1IZWFk
ZXJzLT5jdXJyZW50TXNnKCkgKTsKQEAgLTIwNDEsNiArMjA0OSwxMSBAQAogICAgIHNsb3RFZGl0
TXNnKCk7CiAgICAgcmV0dXJuOwogICB9CisgIGlmIChrbWtlcm5lbC0+Zm9sZGVySXNUZW1wbGF0
ZXMobUZvbGRlcikpCisgIHsKKyAgICBzbG90VXNlVGVtcGxhdGUoKTsKKyAgICByZXR1cm47Cisg
IH0KIAogICBhc3NlcnQoIG1zZyAhPSAwICk7CiAgIEtNUmVhZGVyTWFpbldpbiAqd2luID0gbmV3
IEtNUmVhZGVyTWFpbldpbiggbUZvbGRlckh0bWxQcmVmLCBtRm9sZGVySHRtbExvYWRFeHRQcmVm
ICk7CkBAIC0yMTIyLDEwICsyMTM1LDEyIEBACiAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Ym9vbCBvdXRfZm9sZGVyID0ga21rZXJuZWwtPmZvbGRlcklzRHJhZnRPck91dGJveChtRm9sZGVy
KTsKLSAgICBpZiAoIG91dF9mb2xkZXIgKSB7CisgICAgaWYgKGtta2VybmVsLT5mb2xkZXJJc0Ry
YWZ0T3JPdXRib3gobUZvbGRlcikpIHsKICAgICAgIG1FZGl0QWN0aW9uLT5wbHVnKG1lbnUpOwog
ICAgIH0KKyAgICBlbHNlIGlmIChrbWtlcm5lbC0+Zm9sZGVySXNUZW1wbGF0ZXMobUZvbGRlcikp
IHsKKyAgICAgIG1Vc2VBY3Rpb24tPnBsdWcobWVudSk7CisgICAgfQogICAgIGVsc2UgewogICAg
ICAgbVJlcGx5QWN0aW9uTWVudS0+cGx1ZyhtZW51KTsKICAgICAgIG1Gb3J3YXJkQWN0aW9uTWVu
dS0+cGx1ZyhtZW51KTsKQEAgLTI0MzAsNiArMjQ0NSw5IEBACiAgIG1FZGl0QWN0aW9uID0gbmV3
IEtBY3Rpb24oIGkxOG4oIiZFZGl0IE1lc3NhZ2UiKSwgImVkaXQiLCBLZXlfVCwgdGhpcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTTE9UKHNsb3RFZGl0TXNnKCkpLCBhY3Rpb25Db2xs
ZWN0aW9uKCksICJlZGl0IiApOwogCisgIG1Vc2VBY3Rpb24gPSBuZXcgS0FjdGlvbiggaTE4bigi
JlVzZSBUZW1wbGF0ZSIpLCAiZWRpdCIsIEtleV9VLCB0aGlzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNMT1Qoc2xvdFVzZVRlbXBsYXRlKCkpLCBhY3Rpb25Db2xsZWN0aW9uKCksICJ1
c2UiICk7CisKICAgLy8tLS0tLSAiTWFyayBNZXNzYWdlIiBzdWJtZW51CiAgIG1TdGF0dXNNZW51
ID0gbmV3IEtBY3Rpb25NZW51ICggaTE4biggIk1hciZrIE1lc3NhZ2UiICksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25Db2xsZWN0aW9uKCksICJzZXRfc3RhdHVzIiAp
OwpAQCAtMjk3Nyw4ICsyOTk1LDggQEAKICAgICBmb3J3YXJkTWVudSgpLT5zZXRFbmFibGVkKCBt
YXNzX2FjdGlvbnMgKTsKIAogICAgIGJvb2wgc2luZ2xlX2FjdGlvbnMgPSBjb3VudCA9PSAxOwot
ICAgIG1FZGl0QWN0aW9uLT5zZXRFbmFibGVkKCBzaW5nbGVfYWN0aW9ucyAmJgotICAgIGtta2Vy
bmVsLT5mb2xkZXJJc0RyYWZ0T3JPdXRib3gobUZvbGRlcikpOworICAgIG1FZGl0QWN0aW9uLT5z
ZXRFbmFibGVkKCBzaW5nbGVfYWN0aW9ucyAmJiBrbWtlcm5lbC0+Zm9sZGVySXNEcmFmdE9yT3V0
Ym94KG1Gb2xkZXIpKTsKKyAgICBtVXNlQWN0aW9uLT5zZXRFbmFibGVkKCBzaW5nbGVfYWN0aW9u
cyAmJiBrbWtlcm5lbC0+Zm9sZGVySXNUZW1wbGF0ZXMobUZvbGRlcikpOwogICAgIHJlcGx5TWVu
dSgpLT5zZXRFbmFibGVkKCBzaW5nbGVfYWN0aW9ucyApOwogICAgIGZpbHRlck1lbnUoKS0+c2V0
RW5hYmxlZCggc2luZ2xlX2FjdGlvbnMgKTsKICAgICByZXBseUFjdGlvbigpLT5zZXRFbmFibGVk
KCBzaW5nbGVfYWN0aW9ucyApOwotLS0ga2RlcGltL2ttYWlsL2ttbWFpbndpZGdldC5oLnRlbQky
MDA1LTA1LTIzIDEzOjExOjU0LjAwMDAwMDAwMCArMDEwMAorKysga2RlcGltL2ttYWlsL2ttbWFp
bndpZGdldC5oCTIwMDUtMDgtMjAgMTI6MjA6NTMuMDAwMDAwMDAwICswMTAwCkBAIC0xMTMsNiAr
MTEzLDcgQEAKICAgS0FjdGlvbiAqZGVsZXRlVGhyZWFkQWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bURlbGV0ZVRocmVhZEFjdGlvbjsgfQogICBLQWN0aW9uICpzYXZlQXNBY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtU2F2ZUFzQWN0aW9uOyB9CiAgIEtBY3Rpb24gKmVkaXRBY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtRWRpdEFjdGlvbjsgfQorICBLQWN0aW9uICp1c2VBY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtVXNlQWN0aW9uOyB9CiAgIEtBY3Rpb24gKnNlbmRBZ2FpbkFjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1TZW5kQWdhaW5BY3Rpb247IH0KICAgS0FjdGlvbiAqYXBwbHlBbGxGaWx0ZXJzQWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbUFwcGx5QWxsRmlsdGVyc0FjdGlvbjsgfQogICBLQWN0aW9u
ICpmaW5kSW5NZXNzYWdlQWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbUZpbmRJbk1lc3NhZ2VBY3Rp
b247IH0KQEAgLTI1Nyw2ICsyNTgsNyBAQAogICB2b2lkIHNsb3RUb2dnbGVTdWJqZWN0VGhyZWFk
aW5nKCk7CiAgIHZvaWQgc2xvdE1lc3NhZ2VRdWV1ZWRPckRyYWZ0ZWQoKTsKICAgdm9pZCBzbG90
RWRpdE1zZygpOworICB2b2lkIHNsb3RVc2VUZW1wbGF0ZSgpOwogICAvL3ZvaWQgc2xvdFRyYXNo
TXNnKCk7ICAgLy8gbW92ZSB0byB0cmFzaAogICB2b2lkIHNsb3REZWxldGVNc2coIGJvb2wgY29u
ZmlybURlbGV0ZSA9IHRydWUgKTsgIC8vIGNvbXBsZXRlbHkgZGVsZXRlIG1lc3NhZ2UKICAgdm9p
ZCBzbG90VHJhc2hUaHJlYWQoKTsKQEAgLTM4Miw3ICszODQsNyBAQAogcHJpdmF0ZToKICAgLy8g
TWVzc2FnZSBhY3Rpb25zCiAgIEtBY3Rpb24gKm1UcmFzaEFjdGlvbiwgKm1EZWxldGVBY3Rpb24s
ICptVHJhc2hUaHJlYWRBY3Rpb24sIAotICAgICptRGVsZXRlVGhyZWFkQWN0aW9uLCAqbVNhdmVB
c0FjdGlvbiwgKm1FZGl0QWN0aW9uLAorICAgICptRGVsZXRlVGhyZWFkQWN0aW9uLCAqbVNhdmVB
c0FjdGlvbiwgKm1FZGl0QWN0aW9uLCAqbVVzZUFjdGlvbiwKICAgICAqbVNlbmRBZ2FpbkFjdGlv
biwgKm1BcHBseUFsbEZpbHRlcnNBY3Rpb24sICptRmluZEluTWVzc2FnZUFjdGlvbiwKICAgICAq
bVNhdmVBdHRhY2htZW50c0FjdGlvbiwgKm1PcGVuQWN0aW9uLCAqbVZpZXdTb3VyY2VBY3Rpb247
CiAgIC8vIENvbXBvc2l0aW9uIGFjdGlvbnMKLS0tIGtkZXBpbS9rbWFpbC9rbW1lc3NhZ2UuY3Bw
LnRlbQkyMDA1LTA3LTIwIDExOjAzOjAyLjAwMDAwMDAwMCArMDEwMAorKysga2RlcGltL2ttYWls
L2ttbWVzc2FnZS5jcHAJMjAwNS0wOC0xOCAxNjo0Nzo0Ny4wMDAwMDAwMDAgKzAxMDAKQEAgLTE3
OSw2ICsxNzksNyBAQAogICBlbHNlCiAgICAgbVVuZW5jcnlwdGVkTXNnID0gMDsKICAgc2V0RHJh
ZnRzKCBvdGhlci5kcmFmdHMoKSApOworICBzZXRUZW1wbGF0ZXMoIG90aGVyLnRlbXBsYXRlcygp
ICk7CiAgIC8vbUZpbGVOYW1lID0gIiI7IC8vIHdlIG1pZ2h0IG5vdCB3YW50IHRvIGNvcHkgdGhl
IG90aGVyIG1lc3NhZ2VzIGZpbGVuYW1lICg/KQogICAvL0tNTXNnQmFzZTo6YXNzaWduKCAmb3Ro
ZXIgKTsKIH0KQEAgLTE1NTMsNiArMTU1NCwxMSBAQAogICAgIHNldERyYWZ0cyggUVN0cmluZzo6
bnVsbCApOwogICBlbHNlCiAgICAgc2V0RHJhZnRzKCBpZGVudC5kcmFmdHMoKSApOworCisgIGlm
IChpZGVudC50ZW1wbGF0ZXMoKS5pc0VtcHR5KCkpCisgICAgc2V0VGVtcGxhdGVzKCBRU3RyaW5n
OjpudWxsICk7CisgIGVsc2UKKyAgICBzZXRUZW1wbGF0ZXMoIGlkZW50LnRlbXBsYXRlcygpICk7
CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE4MzEsNiArMTgzNywxMyBAQAogfQog
CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIEtNTWVzc2FnZTo6c2V0VGVtcGxhdGVzKGNv
bnN0IFFTdHJpbmcmIGFTdHIpCit7CisgIG1UZW1wbGF0ZXMgPSBhU3RyOworICBrZERlYnVnKDUw
MDYpIDw8ICJLTU1lc3NhZ2U6OnNldFRlbXBsYXRlcyAiIDw8IGFTdHIgPDwgZW5kbDsKK30KKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogUVN0cmluZyBLTU1lc3NhZ2U6OndobygpIGNvbnN0CiB7
CiAgIGlmIChtUGFyZW50KQotLS0ga2RlcGltL2ttYWlsL2ttbWVzc2FnZS5oLnRlbQkyMDA1LTA1
LTIzIDEzOjExOjU0LjAwMDAwMDAwMCArMDEwMAorKysga2RlcGltL2ttYWlsL2ttbWVzc2FnZS5o
CTIwMDUtMDgtMTYgMTc6MjA6MzQuMDAwMDAwMDAwICswMTAwCkBAIC0zMjYsNiArMzI2LDEwIEBA
CiAgIFFTdHJpbmcgZHJhZnRzKCkgY29uc3QgeyByZXR1cm4gbURyYWZ0czsgfQogICB2b2lkIHNl
dERyYWZ0cyhjb25zdCBRU3RyaW5nJiBhU3RyKTsKIAorICAvKiogR2V0IG9yIHNldCB0aGUgJ1Rl
bXBsYXRlcycgZm9sZGVyICovCisgIFFTdHJpbmcgdGVtcGxhdGVzKCkgY29uc3QgeyByZXR1cm4g
bVRlbXBsYXRlczsgfQorICB2b2lkIHNldFRlbXBsYXRlcyhjb25zdCBRU3RyaW5nJiBhU3RyKTsK
KwogICAvKiogR2V0IG9yIHNldCB0aGUgJ0Zyb20nIGhlYWRlciBmaWVsZCAqLwogICBRU3RyaW5n
IGZyb20oKSBjb25zdDsKICAgdm9pZCBzZXRGcm9tKGNvbnN0IFFTdHJpbmcmIGFTdHIpOwpAQCAt
ODI3LDYgKzgzMSw3IEBACiAgIHZvaWQgYXNzaWduKCBjb25zdCBLTU1lc3NhZ2UmIG90aGVyICk7
CiAKICAgUVN0cmluZyBtRHJhZnRzOworICBRU3RyaW5nIG1UZW1wbGF0ZXM7CiAgIG11dGFibGUg
RHdNZXNzYWdlKiBtTXNnOwogICBtdXRhYmxlIGJvb2wgICAgICAgbU5lZWRzQXNzZW1ibHk7CiAg
IGJvb2wgbURlY29kZUhUTUw7Ci0tLSBrZGVwaW0va21haWwvc2VsZWN0dGVtcGxhdGVkaWFsb2cu
Y3BwLnRlbQkyMDA1LTA4LTE5IDEwOjA1OjIxLjAwMDAwMDAwMCArMDEwMAorKysga2RlcGltL2tt
YWlsL3NlbGVjdHRlbXBsYXRlZGlhbG9nLmNwcAkyMDA1LTA4LTIwIDEzOjA3OjM4LjAwMDAwMDAw
MCArMDEwMApAQCAtMCwwICsxLDEzMyBAQAorLy8gLSotIG1vZGU6IEMrKzsgYy1maWxlLXN0eWxl
OiAiZ251IiAtKi0KKy8vIHNlbGVjdHRlbXBsYXRlZGlhbG9nLmNwcAorLy8gQXV0aG9yOiBKb25h
dGhhbiBNYXJ0ZW4gPGpqbUBrZWVsaGF1bC5kZW1vbi5jby51az4KKy8vIFRoaXMgY29kZSBpcyBw
dWJsaXNoZWQgdW5kZXIgdGhlIEdQTC4KKworCisjaW5jbHVkZSA8a2xvY2FsZS5oPgorI2luY2x1
ZGUgPGtkZWJ1Zy5oPgorI2luY2x1ZGUgPGtsaXN0dmlldy5oPgorCisjaW5jbHVkZSAia21mb2xk
ZXIuaCIKKyNpbmNsdWRlICJrbW1zZ2Jhc2UuaCIKKworI2luY2x1ZGUgInNlbGVjdHRlbXBsYXRl
ZGlhbG9nLmgiCisKKworc3RhdGljIGNvbnN0IFFTdHJpbmcgbm9uZSA9IGkxOG4oIihub25lKSIp
OworCisKK2NsYXNzIFNlbGVjdFRlbXBsYXRlTGlzdEl0ZW0gOiBwdWJsaWMgUUxpc3RWaWV3SXRl
bQoreworcHVibGljOgorICBTZWxlY3RUZW1wbGF0ZUxpc3RJdGVtKFFMaXN0VmlldyAqcGFyZW50
LGNvbnN0IFFTdHJpbmcgc3MsY29uc3QgUVN0cmluZyB0cyA9IFFTdHJpbmc6Om51bGwpOworICB+
U2VsZWN0VGVtcGxhdGVMaXN0SXRlbSgpOworICBRU3RyaW5nIGdldFRleHQoKSBjb25zdCB7IHJl
dHVybiAodGV4dCk7IH0KKworcHJpdmF0ZToKKyAgUVN0cmluZyB0ZXh0OworfTsKKworCitTZWxl
Y3RUZW1wbGF0ZUxpc3RJdGVtOjpTZWxlY3RUZW1wbGF0ZUxpc3RJdGVtKFFMaXN0VmlldyAqcGFy
ZW50LGNvbnN0IFFTdHJpbmcgc3MsY29uc3QgUVN0cmluZyB0cykKKyAgOiBRTGlzdFZpZXdJdGVt
KHBhcmVudCxzcyxRU3RyaW5nOjpudWxsKQoreworICB0ZXh0ID0gdHM7CisgIGlmICghdGV4dC5p
c051bGwoKSkKKyAgeworICAgIFFTdHJpbmcgZGlzcFRleHQgPSB0czsKKyAgICBkaXNwVGV4dC50
cnVuY2F0ZSg4MCk7CisgICAgZGlzcFRleHQgPSBkaXNwVGV4dC5zaW1wbGlmeVdoaXRlU3BhY2Uo
KTsKKworICAgIGludCBzaWduUG9zID0gZGlzcFRleHQuZmluZCgiLS0gIik7CisgICAgaWYgKHNp
Z25Qb3M+MSkgZGlzcFRleHQudHJ1bmNhdGUoc2lnblBvcyk7CisKKyAgICBkaXNwVGV4dCA9IGRp
c3BUZXh0LnN0cmlwV2hpdGVTcGFjZSgpOworICAgIGlmIChkaXNwVGV4dC5pc0VtcHR5KCkpIGRp
c3BUZXh0ID0gbm9uZTsKKworICAgIHNldFRleHQoMSxkaXNwVGV4dCk7CisgIH0KK30KKworCitT
ZWxlY3RUZW1wbGF0ZUxpc3RJdGVtOjp+U2VsZWN0VGVtcGxhdGVMaXN0SXRlbSgpCit7Cit9CisK
Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworU2VsZWN0VGVtcGxhdGVEaWFsb2c6OlNlbGVjdFRlbXBsYXRlRGlhbG9nKEtN
Rm9sZGVyICpmb2xkZXIsUVdpZGdldCAqcGFyZW50LGNvbnN0IGNoYXIgKm5hbWUpCisgIDogS0Rp
YWxvZ0Jhc2UocGFyZW50LG5hbWUsdHJ1ZSxpMThuKCJTZWxlY3QgVGVtcGxhdGUiKSxLRGlhbG9n
QmFzZTo6T2t8S0RpYWxvZ0Jhc2U6OkNhbmNlbCkKK3sKKyAga2REZWJ1ZygwKSA8PCBrX2Z1bmNp
bmZvIDw8ICJmb2xkZXI9IiA8PCAoKHZvaWQqKWZvbGRlcikgPDwgZW5kbDsKKworICBjb25zdCBi
b29sIGlzSW1hcCA9IChmb2xkZXItPmZvbGRlclR5cGUoKT09S01Gb2xkZXJUeXBlSW1hcCk7CisK
KyAgbGlzdCA9IG5ldyBLTGlzdFZpZXcodGhpcyk7CisgIGxpc3QtPnNldFNlbGVjdGlvbk1vZGUo
UUxpc3RWaWV3OjpTaW5nbGUpOworICBsaXN0LT5zZXRTaG93U29ydEluZGljYXRvcih0cnVlKTsK
KyAgbGlzdC0+c2V0Um9vdElzRGVjb3JhdGVkKGZhbHNlKTsKKworICBsaXN0LT5hZGRDb2x1bW4o
aTE4bigiU3ViamVjdCIpLChpc0ltYXAgPyAzMDAgOiAxNTApKTsKKyAgaWYgKCFpc0ltYXApIGxp
c3QtPmFkZENvbHVtbihpMThuKCJUZXh0IiksMjAwKTsKKworICBzZXRNYWluV2lkZ2V0KGxpc3Qp
OworICBhZGp1c3RTaXplKCk7CisgIGxpc3QtPnNldENvbHVtbldpZHRoKDEsbGlzdC0+Y29sdW1u
V2lkdGgoMSktMSk7CisKKyAgY29ubmVjdChsaXN0LFNJR05BTChzZWxlY3Rpb25DaGFuZ2VkKCkp
LHRoaXMsU0xPVChzbG90TGlzdFNlbGVjdGlvbkNoYW5nZWQoKSkpOworICBjb25uZWN0KGxpc3Qs
U0lHTkFMKGRvdWJsZUNsaWNrZWQoUUxpc3RWaWV3SXRlbSAqLGNvbnN0IFFQb2ludCAmLGludCkp
LAorCSAgdGhpcyxTTE9UKHNsb3RMaXN0RG91YmxlQ2xpY2tlZChRTGlzdFZpZXdJdGVtICopKSk7
CisKKyAgZm9yIChpbnQgaWR4ID0gMDsgaWR4PGZvbGRlci0+Y291bnQoKTsgKytpZHgpCisgIHsK
KyAgICBLTU1zZ0Jhc2UgKm1iID0gZm9sZGVyLT5nZXRNc2dCYXNlKGlkeCk7CisKKyAgICBRU3Ry
aW5nIHN1YmogPSBtYi0+c3ViamVjdCgpOworICAgIGlmIChzdWJqLmlzRW1wdHkoKSkgc3ViaiA9
IG5vbmU7CisKKyAgICBRU3RyaW5nIHRleHQgPSBRU3RyaW5nOjpudWxsOworICAgIGlmICghaXNJ
bWFwKQorICAgIHsKKyAgICAgIGJvb2wgd2FzbXNnID0gbWItPmlzTWVzc2FnZSgpOworICAgICAg
S01NZXNzYWdlICptc2cgPSAoIXdhc21zZyA/IGZvbGRlci0+Z2V0TXNnKGlkeCkgOiBzdGF0aWNf
Y2FzdDxLTU1lc3NhZ2UgKj4obWIpKTsKKyAgICAgIHRleHQgPSBtc2ctPmJvZHlUb1VuaWNvZGUo
KTsKKyAgICAgIGlmICghd2FzbXNnKSBmb2xkZXItPnVuR2V0TXNnKGlkeCk7CisgICAgfQorICAg
ICh2b2lkKSBuZXcgU2VsZWN0VGVtcGxhdGVMaXN0SXRlbShsaXN0LHN1YmosdGV4dCk7CisgIH0K
KworICBzbG90TGlzdFNlbGVjdGlvbkNoYW5nZWQoKTsKKyAga2REZWJ1ZygwKSA8PCBrX2Z1bmNp
bmZvIDw8ICJkb25lIiA8PCBlbmRsOworfQorCisKK1NlbGVjdFRlbXBsYXRlRGlhbG9nOjp+U2Vs
ZWN0VGVtcGxhdGVEaWFsb2coKQoreworfQorCisKK3ZvaWQgU2VsZWN0VGVtcGxhdGVEaWFsb2c6
OnNsb3RMaXN0RG91YmxlQ2xpY2tlZChRTGlzdFZpZXdJdGVtICppdGVtKQoreworICBpZiAoaXRl
bT09TlVMTCkgcmV0dXJuOworICBsaXN0LT5zZXRTZWxlY3RlZChpdGVtLHRydWUpOworICBzbG90
T2soKTsKK30KKworCit2b2lkIFNlbGVjdFRlbXBsYXRlRGlhbG9nOjpzbG90TGlzdFNlbGVjdGlv
bkNoYW5nZWQoKQoreworICBlbmFibGVCdXR0b25PSyhsaXN0LT5zZWxlY3RlZEl0ZW0oKSE9TlVM
TCk7Cit9CisKKworUVN0cmluZyBTZWxlY3RUZW1wbGF0ZURpYWxvZzo6c2VsZWN0ZWRUZW1wbGF0
ZVRleHQoKQoreworICAvLyBUT0RPOiBpZiBhbiBJTUFQIGZvbGRlciwgbmVlZCB0byByZXRyaWV2
ZSB0aGUgbWVzc2FnZSBhdCB0aGlzIHN0YWdlCisgIC8vIHRoZW4gZ2V0IHRoZSB0ZXh0IGZyb20g
aXQKKyAgU2VsZWN0VGVtcGxhdGVMaXN0SXRlbSAqaXRlbSA9IHN0YXRpY19jYXN0PFNlbGVjdFRl
bXBsYXRlTGlzdEl0ZW0gKj4obGlzdC0+c2VsZWN0ZWRJdGVtKCkpOworICByZXR1cm4gKGl0ZW0h
PU5VTEwgPyBpdGVtLT5nZXRUZXh0KCkgOiBRU3RyaW5nOjpudWxsKTsKK30KKworCisjaW5jbHVk
ZSAic2VsZWN0dGVtcGxhdGVkaWFsb2cubW9jIgotLS0ga2RlcGltL2ttYWlsL3NlbGVjdHRlbXBs
YXRlZGlhbG9nLmgudGVtCTIwMDUtMDgtMTkgMTA6MDU6MjMuMDAwMDAwMDAwICswMTAwCisrKyBr
ZGVwaW0va21haWwvc2VsZWN0dGVtcGxhdGVkaWFsb2cuaAkyMDA1LTA4LTIwIDEzOjAyOjI1LjAw
MDAwMDAwMCArMDEwMApAQCAtMCwwICsxLDQwIEBACisvKiAtKi0gbW9kZTogQysrIC0qLQorICoK
KyAqIERpYWxvZ3VlIGJveCB0byBsaXN0IGFuZCBzZWxlY3QgYSB0ZW1wbGF0ZS4KKyAqCisgKiBB
dXRob3I6IEpvbmF0aGFuIE1hcnRlbiA8amptQGtlZWxoYXVsLmRlbW9uLmNvLnVrPgorICogVGhp
cyBjb2RlIGlzIHVuZGVyIEdQTAorICoKKyAqLworCisjaWZuZGVmIHNlbGVjdHRlbXBsYXRlZGlh
bG9nX2gKKyNkZWZpbmUgc2VsZWN0dGVtcGxhdGVkaWFsb2dfaAorCisjaW5jbHVkZSA8cXN0cmlu
Zy5oPgorCisjaW5jbHVkZSA8a2RpYWxvZ2Jhc2UuaD4KKworY2xhc3MgUVdpZGdldDsKK2NsYXNz
IEtNRm9sZGVyOworY2xhc3MgS0xpc3RWaWV3OworCitjbGFzcyBTZWxlY3RUZW1wbGF0ZURpYWxv
ZyA6IHB1YmxpYyBLRGlhbG9nQmFzZQoreworCVFfT0JKRUNUCisKK3B1YmxpYzoKKwlTZWxlY3RU
ZW1wbGF0ZURpYWxvZyhLTUZvbGRlciAqZm9sZGVyLCBRV2lkZ2V0ICpwYXJlbnQgPSBOVUxMLCBj
b25zdCBjaGFyICpuYW1lID0gTlVMTCk7CisJflNlbGVjdFRlbXBsYXRlRGlhbG9nKCk7CisKKwkv
KiogR2V0IHRoZSB0ZXh0IHRvIGJlIGluc2VydGVkIGZyb20gdGhlIHNlbGVjdGVkIHRlbXBsYXRl
ICovCisJUVN0cmluZyBzZWxlY3RlZFRlbXBsYXRlVGV4dCgpOworCitwcm90ZWN0ZWQgc2xvdHM6
CisJdm9pZCBzbG90TGlzdFNlbGVjdGlvbkNoYW5nZWQoKTsKKwl2b2lkIHNsb3RMaXN0RG91Ymxl
Q2xpY2tlZChRTGlzdFZpZXdJdGVtICppdGVtKTsKKworcHJpdmF0ZToKKwlLTGlzdFZpZXcgKmxp
c3Q7Cit9OworCisjZW5kaWYgLyogc2VsZWN0dGVtcGxhdGVkaWFsb2dfaCAqLwotLS0ga2RlcGlt
L2xpYmtkZXBpbS9rZm9sZGVydHJlZS5jcHAudGVtCTIwMDUtMDUtMjMgMTM6MTI6MjkuMDAwMDAw
MDAwICswMTAwCisrKyBrZGVwaW0vbGlia2RlcGltL2tmb2xkZXJ0cmVlLmNwcAkyMDA1LTA4LTE2
IDE1OjA1OjM2LjAwMDAwMDAwMCArMDEwMApAQCAtNjUsMTQgKzY1LDE2IEBACiAgICAgcmV0dXJu
IDQ7CiAgIGNhc2UgRHJhZnRzOgogICAgIHJldHVybiA1OwotICBjYXNlIENhbGVuZGFyOgorICBj
YXNlIFRlbXBsYXRlczoKICAgICByZXR1cm4gNjsKLSAgY2FzZSBDb250YWN0czoKKyAgY2FzZSBD
YWxlbmRhcjoKICAgICByZXR1cm4gNzsKLSAgY2FzZSBOb3RlczoKKyAgY2FzZSBDb250YWN0czoK
ICAgICByZXR1cm4gODsKLSAgY2FzZSBUYXNrczoKKyAgY2FzZSBOb3RlczoKICAgICByZXR1cm4g
OTsKKyAgY2FzZSBUYXNrczoKKyAgICByZXR1cm4gMTA7CiAgIGRlZmF1bHQ6CiAgICAgcmV0dXJu
IDQyOwogICB9Ci0tLSBrZGVwaW0vbGlia3BpbWlkZW50aXRpZXMvaWRlbnRpdHkuY3BwLnRlbQky
MDA1LTA1LTIzIDEzOjEyOjE1LjAwMDAwMDAwMCArMDEwMAorKysga2RlcGltL2xpYmtwaW1pZGVu
dGl0aWVzL2lkZW50aXR5LmNwcAkyMDA1LTA4LTE4IDE2OjU1OjQ5LjAwMDAwMDAwMCArMDEwMApA
QCAtMjMyLDcgKzIzMiw3IEBACiAgIHJldHVybiBtSWRlbnRpdHkuaXNFbXB0eSgpICYmIG1GdWxs
TmFtZS5pc0VtcHR5KCkgJiYgbUVtYWlsQWRkci5pc0VtcHR5KCkgJiYKICAgICBtT3JnYW5pemF0
aW9uLmlzRW1wdHkoKSAmJiBtUmVwbHlUb0FkZHIuaXNFbXB0eSgpICYmIG1CY2MuaXNFbXB0eSgp
ICYmCiAgICAgbVZDYXJkRmlsZS5pc0VtcHR5KCkgJiYKLSAgICBtRmNjLmlzRW1wdHkoKSAmJiBt
RHJhZnRzLmlzRW1wdHkoKSAmJgorICAgIG1GY2MuaXNFbXB0eSgpICYmIG1EcmFmdHMuaXNFbXB0
eSgpICYmIG1UZW1wbGF0ZXMuaXNFbXB0eSgpICYmCiAgICAgbVBHUEVuY3J5cHRpb25LZXkuaXNF
bXB0eSgpICYmIG1QR1BTaWduaW5nS2V5LmlzRW1wdHkoKSAmJgogICAgIG1TTUlNRUVuY3J5cHRp
b25LZXkuaXNFbXB0eSgpICYmIG1TTUlNRVNpZ25pbmdLZXkuaXNFbXB0eSgpICYmCiAgICAgbVRy
YW5zcG9ydC5pc0VtcHR5KCkgJiYgbURpY3Rpb25hcnkuaXNFbXB0eSgpICYmCkBAIC0yNTMsNyAr
MjUzLDcgQEAKICAgICAgIG1TTUlNRUVuY3J5cHRpb25LZXkgPT0gb3RoZXIubVNNSU1FRW5jcnlw
dGlvbktleSAmJgogICAgICAgbVNNSU1FU2lnbmluZ0tleSA9PSBvdGhlci5tU01JTUVTaWduaW5n
S2V5ICYmCiAgICAgICBtUHJlZmVycmVkQ3J5cHRvTWVzc2FnZUZvcm1hdCA9PSBvdGhlci5tUHJl
ZmVycmVkQ3J5cHRvTWVzc2FnZUZvcm1hdCAmJgotICAgICAgbURyYWZ0cyA9PSBvdGhlci5tRHJh
ZnRzICYmIG1UcmFuc3BvcnQgPT0gb3RoZXIubVRyYW5zcG9ydCAmJgorICAgICAgbURyYWZ0cyA9
PSBvdGhlci5tRHJhZnRzICYmIG1UZW1wbGF0ZXMgPT0gb3RoZXIubVRlbXBsYXRlcyAmJiBtVHJh
bnNwb3J0ID09IG90aGVyLm1UcmFuc3BvcnQgJiYKICAgICAgIG1EaWN0aW9uYXJ5ID09IG90aGVy
Lm1EaWN0aW9uYXJ5ICYmIG1TaWduYXR1cmUgPT0gb3RoZXIubVNpZ25hdHVyZSAmJgogICAgICAg
bVhGYWNlID09IG90aGVyLm1YRmFjZSAmJiBtWEZhY2VFbmFibGVkID09IG90aGVyLm1YRmFjZUVu
YWJsZWQ7CiAKQEAgLTI3NSw2ICsyNzUsNyBAQAogICBpZiAoIG1TTUlNRVNpZ25pbmdLZXkgIT0g
b3RoZXIubVNNSU1FU2lnbmluZ0tleSApIGtkRGVidWcoKSA8PCAibVNNSU1FU2lnbmluZ0tleSBk
aWZmZXJzIDogIiA8PCBtU01JTUVTaWduaW5nS2V5IDw8ICIgIT0gIiA8PCBvdGhlci5tU01JTUVT
aWduaW5nS2V5IDw8IGVuZGw7CiAgIGlmICggbVByZWZlcnJlZENyeXB0b01lc3NhZ2VGb3JtYXQg
IT0gb3RoZXIubVByZWZlcnJlZENyeXB0b01lc3NhZ2VGb3JtYXQgKSBrZERlYnVnKCkgPDwgIm1Q
cmVmZXJyZWRDcnlwdG9NZXNzYWdlRm9ybWF0IGRpZmZlcnMgOiAiIDw8IG1QcmVmZXJyZWRDcnlw
dG9NZXNzYWdlRm9ybWF0IDw8ICIgIT0gIiA8PCBvdGhlci5tUHJlZmVycmVkQ3J5cHRvTWVzc2Fn
ZUZvcm1hdCA8PCBlbmRsOwogICBpZiAoIG1EcmFmdHMgIT0gb3RoZXIubURyYWZ0cyApIGtkRGVi
dWcoKSA8PCAibURyYWZ0cyBkaWZmZXJzIDogIiA8PCBtRHJhZnRzIDw8ICIgIT0gIiA8PCBvdGhl
ci5tRHJhZnRzIDw8IGVuZGw7CisgIGlmICggbVRlbXBsYXRlcyAhPSBvdGhlci5tVGVtcGxhdGVz
cyApIGtkRGVidWcoKSA8PCAibVRlbXBsYXRlcyBkaWZmZXJzIDogIiA8PCBtVGVtcGxhdGVzIDw8
ICIgIT0gIiA8PCBvdGhlci5tVGVtcGxhdGVzIDw8IGVuZGw7CiAgIGlmICggbVRyYW5zcG9ydCAh
PSBvdGhlci5tVHJhbnNwb3J0ICkga2REZWJ1ZygpIDw8ICJtVHJhbnNwb3J0IGRpZmZlcnMgOiAi
IDw8IG1UcmFuc3BvcnQgPDwgIiAhPSAiIDw8IG90aGVyLm1UcmFuc3BvcnQgPDwgZW5kbDsKICAg
aWYgKCBtRGljdGlvbmFyeSAhPSBvdGhlci5tRGljdGlvbmFyeSApIGtkRGVidWcoKSA8PCAibURp
Y3Rpb25hcnkgZGlmZmVycyA6ICIgPDwgbURpY3Rpb25hcnkgPDwgIiAhPSAiIDw8IG90aGVyLm1E
aWN0aW9uYXJ5IDw8IGVuZGw7CiAgIGlmICggISAoIG1TaWduYXR1cmUgPT0gb3RoZXIubVNpZ25h
dHVyZSApICkga2REZWJ1ZygpIDw8ICJtU2lnbmF0dXJlIGRpZmZlcnMiIDw8IGVuZGw7CkBAIC0y
OTEsNyArMjkyLDggQEAKICAgICAvLyBVc2luZyAiIiBpbnN0ZWFkIG9mIG51bGwgdG8gbWFrZSBv
cGVyYXRvcj09KCkgbm90IGZhaWwKICAgICAvLyAocmVhZENvbmZpZyByZXR1cm5zICIiKQogICAg
IG1CY2MoICIiICksIG1WQ2FyZEZpbGUoICIiICksIG1QR1BFbmNyeXB0aW9uS2V5KCAiIiApLCBt
UEdQU2lnbmluZ0tleSggIiIgKSwKLSAgICBtU01JTUVFbmNyeXB0aW9uS2V5KCAiIiApLCBtU01J
TUVTaWduaW5nS2V5KCAiIiApLCBtRmNjKCAiIiApLCBtRHJhZnRzKCAiIiApLCBtVHJhbnNwb3J0
KCAiIiApLAorICAgIG1TTUlNRUVuY3J5cHRpb25LZXkoICIiICksIG1TTUlNRVNpZ25pbmdLZXko
ICIiICksIG1GY2MoICIiICksCisgICAgbURyYWZ0cyggIiIgKSwgbVRlbXBsYXRlcyggIiIgKSwg
bVRyYW5zcG9ydCggIiIgKSwKICAgICBtRGljdGlvbmFyeSggIiIgKSwKICAgICBtWEZhY2UoICIi
ICksIG1YRmFjZUVuYWJsZWQoIGZhbHNlICksCiAgICAgbUlzRGVmYXVsdCggZmFsc2UgKSwKQEAg
LTMyNiw2ICszMjgsOSBAQAogICBtRHJhZnRzID0gY29uZmlnLT5yZWFkRW50cnkoIkRyYWZ0cyIs
ICJkcmFmdHMiKTsKICAgaWYoIG1EcmFmdHMuaXNFbXB0eSgpICkKICAgICBtRHJhZnRzID0gImRy
YWZ0cyI7CisgIG1UZW1wbGF0ZXMgPSBjb25maWctPnJlYWRFbnRyeSgiVGVtcGxhdGVzIiwgInRl
bXBsYXRlcyIpOworICBpZiggbVRlbXBsYXRlcy5pc0VtcHR5KCkgKQorICAgIG1UZW1wbGF0ZXMg
PSAidGVtcGxhdGVzIjsKICAgbVRyYW5zcG9ydCA9IGNvbmZpZy0+cmVhZEVudHJ5KCJUcmFuc3Bv
cnQiKTsKICAgbURpY3Rpb25hcnkgPSBjb25maWctPnJlYWRFbnRyeSggIkRpY3Rpb25hcnkiICk7
CiAgIG1YRmFjZSA9IGNvbmZpZy0+cmVhZEVudHJ5KCAiWC1GYWNlIiApOwpAQCAtMzU2LDYgKzM2
MSw3IEBACiAgIGNvbmZpZy0+d3JpdGVFbnRyeSgiVHJhbnNwb3J0IiwgbVRyYW5zcG9ydCk7CiAg
IGNvbmZpZy0+d3JpdGVFbnRyeSgiRmNjIiwgbUZjYyk7CiAgIGNvbmZpZy0+d3JpdGVFbnRyeSgi
RHJhZnRzIiwgbURyYWZ0cyk7CisgIGNvbmZpZy0+d3JpdGVFbnRyeSgiVGVtcGxhdGVzIiwgbVRl
bXBsYXRlcyk7CiAgIGNvbmZpZy0+d3JpdGVFbnRyeSggIkRpY3Rpb25hcnkiLCBtRGljdGlvbmFy
eSApOwogICBjb25maWctPndyaXRlRW50cnkoICJYLUZhY2UiLCBtWEZhY2UgKTsKICAgY29uZmln
LT53cml0ZUVudHJ5KCAiWC1GYWNlRW5hYmxlZCIsIG1YRmFjZUVuYWJsZWQgKTsKQEAgLTM3OSw2
ICszODUsNyBAQAogCQk8PCBpLnRyYW5zcG9ydCgpCiAJCTw8IGkuZmNjKCkKIAkJPDwgaS5kcmFm
dHMoKQorCQk8PCBpLnRlbXBsYXRlcygpCiAJCTw8IGkubVNpZ25hdHVyZQogICAgICAgICAgICAg
ICAgIDw8IGkuZGljdGlvbmFyeSgpCiAgICAgICAgICAgICAgICAgPDwgaS54ZmFjZSgpCkBAIC00
MDMsNiArNDEwLDcgQEAKIAkJPj4gaS5tVHJhbnNwb3J0CiAJCT4+IGkubUZjYwogCQk+PiBpLm1E
cmFmdHMKKwkJPj4gaS5tVGVtcGxhdGVzCiAJCT4+IGkubVNpZ25hdHVyZQogICAgICAgICAgICAg
ICAgID4+IGkubURpY3Rpb25hcnkKICAgICAgICAgICAgICAgICA+PiBpLm1YRmFjZQpAQCAtNTYw
LDYgKzU2OCwxNSBAQAogCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgSWRlbnRpdHk6
OnNldFRlbXBsYXRlcyhjb25zdCBRU3RyaW5nICZzdHIpCit7CisgIG1UZW1wbGF0ZXMgPSBzdHI7
CisgIGlmICggbVRlbXBsYXRlcy5pc051bGwoKSApCisgICAgbVRlbXBsYXRlcyA9ICIiOworfQor
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHZvaWQgSWRlbnRpdHk6OnNldERpY3Rpb25hcnko
IGNvbnN0IFFTdHJpbmcgJnN0ciApCiB7CiAgIG1EaWN0aW9uYXJ5ID0gc3RyOwotLS0ga2RlcGlt
L2xpYmtwaW1pZGVudGl0aWVzL2lkZW50aXR5LmgudGVtCTIwMDUtMDUtMjMgMTM6MTI6MTUuMDAw
MDAwMDAwICswMTAwCisrKyBrZGVwaW0vbGlia3BpbWlkZW50aXRpZXMvaWRlbnRpdHkuaAkyMDA1
LTA4LTE4IDE2OjU2OjI3LjAwMDAwMDAwMCArMDEwMApAQCAtMjY5LDYgKzI2OSwxMSBAQAogICBR
U3RyaW5nIGRyYWZ0cygpIGNvbnN0IHsgcmV0dXJuIG1EcmFmdHM7IH0KICAgdm9pZCBzZXREcmFm
dHMoY29uc3QgUVN0cmluZyYpOwogCisgIC8qKiBUaGUgZm9sZGVyIHdoZXJlIHRlbXBsYXRlIG1l
c3NhZ2VzIGZvciB0aGlzIGlkZW50aXR5IHdpbGwgYmUKKyAgICAgIHN0b3JlZCBieSBkZWZhdWx0
LiAqLworICBRU3RyaW5nIHRlbXBsYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1UZW1wbGF0ZXM7IH0K
KyAgdm9pZCBzZXRUZW1wbGF0ZXMoY29uc3QgUVN0cmluZyYpOworCiAgIC8qKiBkaWN0aW9uYXJ5
IHdoaWNoIHNob3VsZCBiZSB1c2VkIGZvciBzcGVsbCBjaGVja2luZyAqLwogICBRU3RyaW5nIGRp
Y3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBtRGljdGlvbmFyeTsgfQogICB2b2lkIHNldERpY3Rp
b25hcnkoIGNvbnN0IFFTdHJpbmcmICk7CkBAIC0yOTIsNyArMjk3LDcgQEAKICAgUVN0cmluZyBt
QmNjOwogICBRU3RyaW5nIG1WQ2FyZEZpbGU7CiAgIFFDU3RyaW5nIG1QR1BFbmNyeXB0aW9uS2V5
LCBtUEdQU2lnbmluZ0tleSwgbVNNSU1FRW5jcnlwdGlvbktleSwgbVNNSU1FU2lnbmluZ0tleTsK
LSAgUVN0cmluZyBtRmNjLCBtRHJhZnRzLCBtVHJhbnNwb3J0OworICBRU3RyaW5nIG1GY2MsIG1E
cmFmdHMsIG1UZW1wbGF0ZXMsIG1UcmFuc3BvcnQ7CiAgIFFTdHJpbmcgbURpY3Rpb25hcnk7CiAg
IFFTdHJpbmcgbVhGYWNlOwogICBib29sIG1YRmFjZUVuYWJsZWQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16894</attachid>
            <date>2006-07-05 16:07:55 +0000</date>
            <delta_ts>2006-07-05 16:07:55 +0000</delta_ts>
            <desc>Updated patch for KDE 3.5.3, part 1</desc>
            <filename>mailtemplates.patch</filename>
            <type>text/plain</type>
            <size>32250</size>
            <attacher name="Jonathan Marten">jjm</attacher>
            
              <data encoding="base64">LS0tIGtkZXBpbS9rbWFpbC9rbWNvbW1hbmRzLmNwcC5vcmlnCTIwMDYtMDUtMjIgMTk6MTA6NTMu
MDAwMDAwMDAwICswMTAwCisrKyBrZGVwaW0va21haWwva21jb21tYW5kcy5jcHAJMjAwNi0wNy0w
NSAxMjo1Mjo1NS4wMDAwMDAwMDAgKzAxMDAKQEAgLTY1NiwxMSArNjU2LDEyIEBACiB7CiAgIEtN
TWVzc2FnZSAqbXNnID0gcmV0cmlldmVkTWVzc2FnZSgpOwogICBpZiAoIW1zZyB8fCAhbXNnLT5w
YXJlbnQoKSB8fAotICAgICAgIWtta2VybmVsLT5mb2xkZXJJc0RyYWZ0T3JPdXRib3goIG1zZy0+
cGFyZW50KCkgKSkKKyAgICAgICggIWtta2VybmVsLT5mb2xkZXJJc0RyYWZ0T3JPdXRib3goIG1z
Zy0+cGFyZW50KCkpICYmCisgICAgICAgICFrbWtlcm5lbC0+Zm9sZGVySXNUZW1wbGF0ZXMoIG1z
Zy0+cGFyZW50KCkpICkpCiAgICAgcmV0dXJuIEZhaWxlZDsKIAogICAvLyBSZW1lbWJlciB0aGUg
b2xkIHBhcmVudCwgd2UgbmVlZCBpdCBhIGJpdCBmdXJ0aGVyIGRvd24gdG8gYmUgYWJsZQotICAv
LyB0byBwdXQgdGhlIHVuY2hhbmdlZCBtZXNzc2FnZSBiYWNrIGluIHRoZSBkcmFmdHMgZm9sZGVy
IGlmIHRoZSBudGgKKyAgLy8gdG8gcHV0IHRoZSB1bmNoYW5nZWQgbWVzc3NhZ2UgYmFjayBpbiB0
aGUgb3JpZ2luYWwgZm9sZGVyIGlmIHRoZSBudGgKICAgLy8gZWRpdCBpcyBkaXNjYXJkZWQsIGZv
ciBuID4gMS4KICAgS01Gb2xkZXIgKnBhcmVudCA9IG1zZy0+cGFyZW50KCk7CiAgIGlmICggcGFy
ZW50ICkKQEAgLTY3NSw2ICs2NzYsMzAgQEAKICAgcmV0dXJuIE9LOwogfQogCitLTVVzZVRlbXBs
YXRlQ29tbWFuZDo6S01Vc2VUZW1wbGF0ZUNvbW1hbmQoIFFXaWRnZXQgKnBhcmVudCwgS01NZXNz
YWdlICptc2cgKQorICA6S01Db21tYW5kKCBwYXJlbnQsIG1zZyApCit7Cit9CisKK0tNQ29tbWFu
ZDo6UmVzdWx0IEtNVXNlVGVtcGxhdGVDb21tYW5kOjpleGVjdXRlKCkKK3sKKyAgS01NZXNzYWdl
ICptc2cgPSByZXRyaWV2ZWRNZXNzYWdlKCk7CisgIGlmICghbXNnIHx8ICFtc2ctPnBhcmVudCgp
IHx8CisgICAgICAha21rZXJuZWwtPmZvbGRlcklzVGVtcGxhdGVzKCBtc2ctPnBhcmVudCgpICkp
CisgICAgcmV0dXJuIEZhaWxlZDsKKworICAvLyBUYWtlIGEgY29weSBvZiB0aGUgb3JpZ2luYWwg
bWVzc2FnZSwgd2hpY2ggcmVtYWlucyB1bmNoYW5nZWQuCisgIEtNTWVzc2FnZSAqbmV3TXNnID0g
bmV3IEtNTWVzc2FnZTsKKyAgbmV3TXNnLT5zZXRDb21wbGV0ZShtc2ctPmlzQ29tcGxldGUoKSk7
CisgIG5ld01zZy0+ZnJvbVN0cmluZyhtc2ctPmFzU3RyaW5nKCkpOworCisgIEtNYWlsOjpDb21w
b3NlciAqIHdpbiA9IEtNYWlsOjptYWtlQ29tcG9zZXIoKTsKKyAgbmV3TXNnLT5zZXRUcmFuc2Zl
ckluUHJvZ3Jlc3MoZmFsc2UpOyAvLyBGcm9tIGhlcmUgb24gb24sIHRoZSBjb21wb3NlciBvd25z
IHRoZSBtZXNzYWdlLgorICB3aW4tPnNldE1zZyhuZXdNc2csIEZBTFNFLCBUUlVFKTsKKyAgd2lu
LT5zaG93KCk7CisKKyAgcmV0dXJuIE9LOworfQogCiBLTVNob3dNc2dTcmNDb21tYW5kOjpLTVNo
b3dNc2dTcmNDb21tYW5kKCBRV2lkZ2V0ICpwYXJlbnQsCiAgIEtNTWVzc2FnZSAqbXNnLCBib29s
IGZpeGVkRm9udCApCi0tLSBrZGVwaW0va21haWwva21jb21tYW5kcy5oLm9yaWcJMjAwNS0wOS0x
MCAwOToyNDowMi4wMDAwMDAwMDAgKzAxMDAKKysrIGtkZXBpbS9rbWFpbC9rbWNvbW1hbmRzLmgJ
MjAwNi0wNi0yOSAxMjozMTo0My4wMDAwMDAwMDAgKzAxMDAKQEAgLTI4NCw2ICsyODQsMTcgQEAK
ICAgdmlydHVhbCBSZXN1bHQgZXhlY3V0ZSgpOwogfTsKIAorY2xhc3MgS0RFX0VYUE9SVCBLTVVz
ZVRlbXBsYXRlQ29tbWFuZCA6IHB1YmxpYyBLTUNvbW1hbmQKK3sKKyAgUV9PQkpFQ1QKKworcHVi
bGljOgorICBLTVVzZVRlbXBsYXRlQ29tbWFuZCggUVdpZGdldCAqcGFyZW50LCBLTU1lc3NhZ2Ug
Km1zZyApOworCitwcml2YXRlOgorICB2aXJ0dWFsIFJlc3VsdCBleGVjdXRlKCk7Cit9OworCiBj
bGFzcyBLREVfRVhQT1JUIEtNU2hvd01zZ1NyY0NvbW1hbmQgOiBwdWJsaWMgS01Db21tYW5kCiB7
CiAgIFFfT0JKRUNUCi0tLSBrZGVwaW0va21haWwva21jb21wb3NlcnVpLnJjLm9yaWcJMjAwNS0w
OS0xMCAwOToyNDowMS4wMDAwMDAwMDAgKzAxMDAKKysrIGtkZXBpbS9rbWFpbC9rbWNvbXBvc2Vy
dWkucmMJMjAwNi0wNi0yOSAxMzoxODowMC4wMDAwMDAwMDAgKzAxMDAKQEAgLTEsNCArMSw0IEBA
Ci08IURPQ1RZUEUga3BhcnRndWkgPjxrcGFydGd1aSB2ZXJzaW9uPSIyOCIgbmFtZT0ia21jb21w
b3NlciIgPgorPCFET0NUWVBFIGtwYXJ0Z3VpID48a3BhcnRndWkgdmVyc2lvbj0iMjkiIG5hbWU9
ImttY29tcG9zZXIiID4KICA8TWVudUJhcj4KICAgPE1lbnUgbm9NZXJnZT0iMSIgbmFtZT0iZmls
ZSIgPgogICAgPHRleHQ+JmFtcDtNZXNzYWdlPC90ZXh0PgpAQCAtMTAsNiArMTAsNyBAQAogICAg
PEFjdGlvbiBuYW1lPSJzZW5kX2FsdGVybmF0aXZlIiAvPgogICAgPEFjdGlvbiBuYW1lPSJzZW5k
X2FsdGVybmF0aXZlX3ZpYSIgLz4KICAgIDxBY3Rpb24gbmFtZT0ic2F2ZV9pbl9kcmFmdHMiIC8+
CisgICA8QWN0aW9uIG5hbWU9InNhdmVfaW5fdGVtcGxhdGVzIiAvPgogICAgPFNlcGFyYXRvci8+
CiAgICA8QWN0aW9uIG5hbWU9Imluc2VydF9maWxlIiAvPgogICAgPEFjdGlvbiBuYW1lPSJpbnNl
cnRfZmlsZV9yZWNlbnQiIC8+Ci0tLSBrZGVwaW0va21haWwva21jb21wb3Nld2luLmNwcC5vcmln
CTIwMDYtMDUtMjIgMTk6MTA6NTMuMDAwMDAwMDAwICswMTAwCisrKyBrZGVwaW0va21haWwva21j
b21wb3Nld2luLmNwcAkyMDA2LTA3LTA1IDEzOjA5OjA2LjAwMDAwMDAwMCArMDEwMApAQCAtMTE1
Myw5ICsxMTUzLDEyIEBACiAKIAogCi0gICh2b2lkKSBuZXcgS0FjdGlvbiAoaTE4bigiU2F2ZSBp
biAmRHJhZnRzIEZvbGRlciIpLCAiZmlsZXNhdmUiLCAwLAorICAodm9pZCkgbmV3IEtBY3Rpb24g
KGkxOG4oIlNhdmUgYXMgJkRyYWZ0IiksICJmaWxlc2F2ZSIsIDAsCiAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcywgU0xPVChzbG90U2F2ZURyYWZ0KCkpLAogICAgICAgICAgICAgICAgICAgICAg
IGFjdGlvbkNvbGxlY3Rpb24oKSwgInNhdmVfaW5fZHJhZnRzIik7CisgICh2b2lkKSBuZXcgS0Fj
dGlvbiAoaTE4bigiU2F2ZSBhcyAmVGVtcGxhdGUiKSwgImZpbGVzYXZlIiwgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLCBTTE9UKHNsb3RTYXZlVGVtcGxhdGUoKSksCisgICAgICAgICAg
ICAgICAgICAgICAgYWN0aW9uQ29sbGVjdGlvbigpLCAic2F2ZV9pbl90ZW1wbGF0ZXMiKTsKICAg
KHZvaWQpIG5ldyBLQWN0aW9uIChpMThuKCImSW5zZXJ0IEZpbGUuLi4iKSwgImZpbGVvcGVuIiwg
MCwKICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCAgU0xPVChzbG90SW5zZXJ0RmlsZSgpKSwK
ICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25Db2xsZWN0aW9uKCksICJpbnNlcnRfZmlsZSIp
OwpAQCAtMTg0NCw5ICsxODQ3LDYgQEAKIAogI2lmZGVmIEJST0tFTl9GT1JfT1BBUVVFX1NJR05F
RF9PUl9FTkNSWVBURURfTUFJTFMKICAgY29uc3QgaW50IG51bSA9IG1Nc2ctPm51bUJvZHlQYXJ0
cygpOwotICBrZERlYnVnKDUwMDYpIDw8ICJLTUNvbXBvc2VXaW46OnNldE1zZygpIG1Nc2ctPm51
bUJvZHlQYXJ0cz0iCi0gICAgICAgICAgICAgICAgPDwgbU1zZy0+bnVtQm9keVBhcnRzKCkgPDwg
ZW5kbDsKLQogICBpZiAoIG51bSA+IDAgKSB7CiAgICAgS01NZXNzYWdlUGFydCBib2R5UGFydDsK
ICAgICBpbnQgZmlyc3RBdHRhY2htZW50ID0gMDsKQEAgLTIwMDMsMTggKzIwMDMsMjUgQEAKICAg
ICByZXR1cm4gdHJ1ZTsKIAogICBpZiAoIGlzTW9kaWZpZWQoKSApIHsKKyAgICBib29sIGlzdGVt
cGxhdGUgPSAobUZvbGRlciE9MCAmJiBtRm9sZGVyLT5pc1RlbXBsYXRlcygpKTsKKyAgICBjb25z
dCBRU3RyaW5nIHNhdmVidXQgPSAoaXN0ZW1wbGF0ZSA/IGkxOG4oIlJlJnNhdmUgYXMgVGVtcGxh
dGUiKSA6IGkxOG4oIiZTYXZlIGFzIERyYWZ0IikpOworICAgIGNvbnN0IFFTdHJpbmcgc2F2ZXRl
eHQgPSAoaXN0ZW1wbGF0ZSA/CisJCQkgICAgICBpMThuKCJSZXNhdmUgdGhpcyBtZXNzYWdlIGlu
IHRoZSBUZW1wbGF0ZXMgZm9sZGVyLiBJdCBjYW4gIgorCQkJCSAgICJ0aGVuIGJlIHVzZWQgYXQg
YSBsYXRlciB0aW1lLiIpIDoKKwkJCSAgICAgIGkxOG4oIlNhdmUgdGhpcyBtZXNzYWdlIGluIHRo
ZSBEcmFmdHMgZm9sZGVyLiBJdCBjYW4gIgorCQkJCSAgICJ0aGVuIGJlIGVkaXRlZCBhbmQgc2Vu
dCBhdCBhIGxhdGVyIHRpbWUuIikpOworCiAgICAgY29uc3QgaW50IHJjID0gS01lc3NhZ2VCb3g6
Ondhcm5pbmdZZXNOb0NhbmNlbCh0aGlzLAogICAgICAgICAgICBpMThuKCJEbyB5b3Ugd2FudCB0
byBzYXZlIHRoZSBtZXNzYWdlIGZvciBsYXRlciBvciBkaXNjYXJkIGl0PyIpLAogICAgICAgICAg
ICBpMThuKCJDbG9zZSBDb21wb3NlciIpLAotICAgICAgICAgICBLR3VpSXRlbShpMThuKCImU2F2
ZSBhcyBEcmFmdCIpLCAiZmlsZXNhdmUiLCBRU3RyaW5nOjpudWxsLAotICAgICAgICAgICAgICAg
ICAgaTE4bigiU2F2ZSB0aGlzIG1lc3NhZ2UgaW4gdGhlIERyYWZ0cyBmb2xkZXIuIEl0IGNhbiAi
Ci0gICAgICAgICAgICAgICAgICAidGhlbiBiZSBlZGl0ZWQgYW5kIHNlbnQgYXQgYSBsYXRlciB0
aW1lLiIpKSwKKyAgICAgICAgICAgS0d1aUl0ZW0oc2F2ZWJ1dCwgImZpbGVzYXZlIiwgUVN0cmlu
Zzo6bnVsbCwgc2F2ZXRleHQpLAogICAgICAgICAgICBLU3RkR3VpSXRlbTo6ZGlzY2FyZCgpICk7
CiAgICAgaWYgKHJjID09IEtNZXNzYWdlQm94OjpDYW5jZWwpCiAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgZWxzZSBpZiAocmMgPT0gS01lc3NhZ2VCb3g6OlllcykgewogICAgICAgLy8gZG9TZW5k
IHdpbGwgY2xvc2UgdGhlIHdpbmRvdy4gSnVzdCByZXR1cm4gZmFsc2UgZnJvbSB0aGlzIG1ldGhv
ZAotICAgICAgc2xvdFNhdmVEcmFmdCgpOworICAgICAgaWYgKGlzdGVtcGxhdGUpIHNsb3RTYXZl
VGVtcGxhdGUoKTsKKyAgICAgIGVsc2Ugc2xvdFNhdmVEcmFmdCgpOwogICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgfQpAQCAtMzY3OCw3ICszNjg1LDcgQEAKIH0KIAogLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi12b2lkIEtNQ29tcG9zZVdpbjo6ZG9TZW5kKCBLTWFpbDo6TWVzc2FnZVNlbmRl
cjo6U2VuZE1ldGhvZCBtZXRob2QsIGJvb2wgc2F2ZUluRHJhZnRzKQordm9pZCBLTUNvbXBvc2VX
aW46OmRvU2VuZCggS01haWw6Ok1lc3NhZ2VTZW5kZXI6OlNlbmRNZXRob2QgbWV0aG9kLCBLTUNv
bXBvc2VXaW46OlNhdmVJbiBzYXZlSW4gKQogewogICBpZiAoIG1ldGhvZCAhPSBLTWFpbDo6TWVz
c2FnZVNlbmRlcjo6U2VuZExhdGVyICYmIGtta2VybmVsLT5pc09mZmxpbmUoKSApIHsKICAgICBL
TWVzc2FnZUJveDo6aW5mb3JtYXRpb24oIHRoaXMsCkBAIC0zNjg5LDkgKzM2OTYsOSBAQAogICB9
IGVsc2UgewogICAgIG1TZW5kTWV0aG9kID0gbWV0aG9kOwogICB9Ci0gIG1TYXZlSW5EcmFmdHMg
PSBzYXZlSW5EcmFmdHM7CisgIG1TYXZlSW4gPSBzYXZlSW47CiAKLSAgaWYgKCFzYXZlSW5EcmFm
dHMpCisgIGlmIChzYXZlSW49PUtNQ29tcG9zZVdpbjo6Tm9uZSkKICAgewogICAgIGlmICggS1BJ
TTo6Z2V0Rmlyc3RFbWFpbEFkZHJlc3MoIGZyb20oKSApLmlzRW1wdHkoKSApIHsKICAgICAgIGlm
ICggISggbVNob3dIZWFkZXJzICYgSERSX0ZST00gKSApIHsKQEAgLTM3NjIsOSArMzc2OSw5IEBA
CiAgICAgICAoIWhmLmlzRW1wdHkoKSAmJiAoaGYgIT0gbVRyYW5zcG9ydC0+dGV4dCgwKSkpKQog
ICAgIG1Nc2ctPnNldEhlYWRlckZpZWxkKCJYLUtNYWlsLVRyYW5zcG9ydCIsIG1UcmFuc3BvcnQt
PmN1cnJlbnRUZXh0KCkpOwogCi0gIG1EaXNhYmxlQnJlYWtpbmcgPSBzYXZlSW5EcmFmdHM7Cisg
IG1EaXNhYmxlQnJlYWtpbmcgPSAoc2F2ZUluIT1LTUNvbXBvc2VXaW46Ok5vbmUpOwogCi0gIGNv
bnN0IGJvb2wgbmV2ZXJFbmNyeXB0ID0gKCBzYXZlSW5EcmFmdHMgJiYgR2xvYmFsU2V0dGluZ3M6
OnNlbGYoKS0+bmV2ZXJFbmNyeXB0RHJhZnRzKCkgKQorICBjb25zdCBib29sIG5ldmVyRW5jcnlw
dCA9ICggbURpc2FibGVCcmVha2luZyAmJiBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT5uZXZlckVu
Y3J5cHREcmFmdHMoKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtU2lnbmluZ0Fu
ZEVuY3J5cHRpb25FeHBsaWNpdGx5RGlzYWJsZWQ7CiAgIGNvbm5lY3QoIHRoaXMsIFNJR05BTCgg
YXBwbHlDaGFuZ2VzRG9uZSggYm9vbCApICksCiAgICAgICAgICAgIFNMT1QoIHNsb3RDb250aW51
ZURvU2VuZCggYm9vbCApICkgKTsKQEAgLTM4MDQsNiArMzgxMSw1NiBAQAogICBhcHBseUNoYW5n
ZXMoIG5ldmVyRW5jcnlwdCApOwogfQogCitib29sIEtNQ29tcG9zZVdpbjo6c2F2ZURyYWZ0T3JU
ZW1wbGF0ZShjb25zdCBRU3RyaW5nICZmb2xkZXJOYW1lLEtNTWVzc2FnZSAqbXNnKQoreworICBL
TUZvbGRlciogdGhlRm9sZGVyID0gMCwgKmltYXBUaGVGb2xkZXIgPSAwOworICAvLyBnZXQgdGhl
IGRyYWZ0c0ZvbGRlcgorICBpZiAoICFmb2xkZXJOYW1lLmlzRW1wdHkoKSApIHsKKyAgICB0aGVG
b2xkZXIgPSBrbWtlcm5lbC0+Zm9sZGVyTWdyKCktPmZpbmRJZFN0cmluZyggZm9sZGVyTmFtZSAp
OworICAgIGlmICggdGhlRm9sZGVyID09IDAgKQorICAgICAgLy8gVGhpcyBpcyAqTk9UKiBzdXBw
b3NlZCB0byBiZSAiaW1hcERyYWZ0c0ZvbGRlciIsIGJlY2F1c2UgYQorICAgICAgLy8gZElNQVAg
Zm9sZGVyIHdvcmtzIGxpa2UgYSBub3JtYWwgZm9sZGVyCisgICAgICB0aGVGb2xkZXIgPSBrbWtl
cm5lbC0+ZGltYXBGb2xkZXJNZ3IoKS0+ZmluZElkU3RyaW5nKCBmb2xkZXJOYW1lICk7CisgICAg
aWYgKCB0aGVGb2xkZXIgPT0gMCApCisgICAgICBpbWFwVGhlRm9sZGVyID0ga21rZXJuZWwtPmlt
YXBGb2xkZXJNZ3IoKS0+ZmluZElkU3RyaW5nKCBmb2xkZXJOYW1lICk7CisgICAgaWYgKCAhdGhl
Rm9sZGVyICYmICFpbWFwVGhlRm9sZGVyICkgeworICAgICAgY29uc3QgS1BJTTo6SWRlbnRpdHkg
JiBpZCA9IGtta2VybmVsLT5pZGVudGl0eU1hbmFnZXIoKQorCS0+aWRlbnRpdHlGb3JVb2lkT3JE
ZWZhdWx0KCBtc2ctPmhlYWRlckZpZWxkKCAiWC1LTWFpbC1JZGVudGl0eSIgKS5zdHJpcFdoaXRl
U3BhY2UoKS50b1VJbnQoKSApOworICAgICAgS01lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKDAsIGkx
OG4oIlRoZSBjdXN0b20gZHJhZnRzIG9yIHRlbXBsYXRlcyBmb2xkZXIgZm9yIGlkZW50aXR5ICIK
KwkJCQkgICAgICAgIlwiJTFcIiBkb2VzIG5vdCBleGlzdCAoYW55bW9yZSk7ICIKKwkJCQkgICAg
ICAgInRoZXJlZm9yZSwgdGhlIGRlZmF1bHQgZHJhZnRzIG9yIHRlbXBsYXRlcyBmb2xkZXIgIgor
CQkJCSAgICAgICAid2lsbCBiZSB1c2VkLiIpCisJCQkgICAgICAgLmFyZyggaWQuaWRlbnRpdHlO
YW1lKCkgKSApOworICAgIH0KKyAgfQorICBpZiAoaW1hcFRoZUZvbGRlciAmJiBpbWFwVGhlRm9s
ZGVyLT5ub0NvbnRlbnQoKSkKKyAgICBpbWFwVGhlRm9sZGVyID0gMDsKKworICBpZiAoIHRoZUZv
bGRlciA9PSAwICkgeworICAgIHRoZUZvbGRlciA9ICggbVNhdmVJbj09S01Db21wb3NlV2luOjpE
cmFmdHMgPyBrbWtlcm5lbC0+ZHJhZnRzRm9sZGVyKCkgOiBrbWtlcm5lbC0+dGVtcGxhdGVzRm9s
ZGVyKCkgKTsKKyAgfSBlbHNlIHsKKyAgICB0aGVGb2xkZXItPm9wZW4oKTsKKyAgfQorICBrZERl
YnVnKDUwMDYpIDw8IGtfZnVuY2luZm8gPDwgInRoZUZvbGRlcj0iIDw8IHRoZUZvbGRlci0+bmFt
ZSgpIDw8IGVuZGw7CisgIGlmIChpbWFwVGhlRm9sZGVyKQorICAgIGtkRGVidWcoNTAwNikgPDwg
a19mdW5jaW5mbyA8PCAiaW1hcFRoZUZvbGRlcj0iIDw8IGltYXBUaGVGb2xkZXItPm5hbWUoKSA8
PCBlbmRsOworCisgIGJvb2wgc2VudE9rID0gISh0aGVGb2xkZXItPmFkZE1zZyhtc2cpKTsKKwor
ICAvL0Vuc3VyZSB0aGUgbWVzc2FnZSBpcyBjb3JyZWN0bHkgYW5kIGZ1bGx5IHBhcnNlZAorICB0
aGVGb2xkZXItPnVuR2V0TXNnKHRoZUZvbGRlci0+Y291bnQoKSAtIDEpOworICBtc2cgPSB0aGVG
b2xkZXItPmdldE1zZyh0aGVGb2xkZXItPmNvdW50KCkgLSAxKTsKKyAgLy8gRG9lcyB0aGF0IGFz
c2lnbm1lbnQgbmVlZHMgdG8gYmUgcHJvcGFnYXRlZCBvdXQgdG8gdGhlIGNhbGxlcj8gIEFzc3Vt
aW5nIHRoZQorICAvLyBzZW5kIGlzIE9LLCB0aGUgaXRlcmF0b3IgaXMgc2V0IHRvIDAgaW1tZWRp
YXRlbHkgYWZ0ZXJ3YXJkcy4KKyAgaWYgKGltYXBUaGVGb2xkZXIpIHsKKyAgICAvLyBtb3ZlIHRo
ZSBtZXNzYWdlIHRvIHRoZSBpbWFwLWZvbGRlciBhbmQgaGlnaGxpZ2h0IGl0CisgICAgaW1hcFRo
ZUZvbGRlci0+bW92ZU1zZyhtc2cpOworICAgIChzdGF0aWNfY2FzdDxLTUZvbGRlckltYXAqPihp
bWFwVGhlRm9sZGVyLT5zdG9yYWdlKCkpKS0+Z2V0Rm9sZGVyKCk7CisgIH0KKworICByZXR1cm4g
KHNlbnRPayk7Cit9CisKIHZvaWQgS01Db21wb3NlV2luOjpzbG90Q29udGludWVEb1NlbmQoIGJv
b2wgc2VudE9rICkKIHsKICAga2REZWJ1Zyg1MDA2KSA8PCAiS01Db21wb3NlV2luOjpzbG90Q29u
dGludWVEb1NlbmQoICIgPDwgc2VudE9rIDw8ICIgKSIKQEAgLTM4MjQsNTMgKzM4ODEsMTMgQEAK
ICAgICAvLyBuZWVkZWQgZm9yIGltYXAKICAgICAoKml0KS0+c2V0Q29tcGxldGUoIHRydWUgKTsK
IAotICAgIGlmIChtU2F2ZUluRHJhZnRzKSB7Ci0gICAgICBLTUZvbGRlciogZHJhZnRzRm9sZGVy
ID0gMCwgKmltYXBEcmFmdHNGb2xkZXIgPSAwOwotICAgICAgLy8gZ2V0IHRoZSBkcmFmdHNGb2xk
ZXIKLSAgICAgIGlmICggISgqaXQpLT5kcmFmdHMoKS5pc0VtcHR5KCkgKSB7Ci0gICAgICAgIGRy
YWZ0c0ZvbGRlciA9IGtta2VybmVsLT5mb2xkZXJNZ3IoKS0+ZmluZElkU3RyaW5nKCAoKml0KS0+
ZHJhZnRzKCkgKTsKLSAgICAgICAgaWYgKCBkcmFmdHNGb2xkZXIgPT0gMCApCi0gICAgICAgICAg
Ly8gVGhpcyBpcyAqTk9UKiBzdXBwb3NlZCB0byBiZSAiaW1hcERyYWZ0c0ZvbGRlciIsIGJlY2F1
c2UgYQotICAgICAgICAgIC8vIGRJTUFQIGZvbGRlciB3b3JrcyBsaWtlIGEgbm9ybWFsIGZvbGRl
cgotICAgICAgICAgIGRyYWZ0c0ZvbGRlciA9IGtta2VybmVsLT5kaW1hcEZvbGRlck1ncigpLT5m
aW5kSWRTdHJpbmcoICgqaXQpLT5kcmFmdHMoKSApOwotICAgICAgICBpZiAoIGRyYWZ0c0ZvbGRl
ciA9PSAwICkKLSAgICAgICAgICBpbWFwRHJhZnRzRm9sZGVyID0ga21rZXJuZWwtPmltYXBGb2xk
ZXJNZ3IoKS0+ZmluZElkU3RyaW5nKCAoKml0KS0+ZHJhZnRzKCkgKTsKLSAgICAgICAgaWYgKCAh
ZHJhZnRzRm9sZGVyICYmICFpbWFwRHJhZnRzRm9sZGVyICkgewotICAgICAgICAgIGNvbnN0IEtQ
SU06OklkZW50aXR5ICYgaWQgPSBrbWtlcm5lbC0+aWRlbnRpdHlNYW5hZ2VyKCkKLSAgICAgICAg
ICAgIC0+aWRlbnRpdHlGb3JVb2lkT3JEZWZhdWx0KCAoKml0KS0+aGVhZGVyRmllbGQoICJYLUtN
YWlsLUlkZW50aXR5IiApLnN0cmlwV2hpdGVTcGFjZSgpLnRvVUludCgpICk7Ci0gICAgICAgICAg
S01lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKDAsIGkxOG4oIlRoZSBjdXN0b20gZHJhZnRzIGZvbGRl
ciBmb3IgaWRlbnRpdHkgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJcIiUxXCIgZG9lcyBub3QgZXhpc3QgKGFueW1vcmUpOyAiCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZXJlZm9yZSwgdGhlIGRlZmF1bHQgZHJhZnRz
IGZvbGRlciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndp
bGwgYmUgdXNlZC4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKCBp
ZC5pZGVudGl0eU5hbWUoKSApICk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChpbWFw
RHJhZnRzRm9sZGVyICYmIGltYXBEcmFmdHNGb2xkZXItPm5vQ29udGVudCgpKQotCWltYXBEcmFm
dHNGb2xkZXIgPSAwOwotCi0gICAgICBpZiAoIGRyYWZ0c0ZvbGRlciA9PSAwICkgewotCWRyYWZ0
c0ZvbGRlciA9IGtta2VybmVsLT5kcmFmdHNGb2xkZXIoKTsKLSAgICAgIH0gZWxzZSB7Ci0JZHJh
ZnRzRm9sZGVyLT5vcGVuKCk7Ci0gICAgICB9Ci0gICAgICBrZERlYnVnKDUwMDYpIDw8ICJzYXZl
aW5kcmFmdHM6IGRyYWZ0cz0iIDw8IGRyYWZ0c0ZvbGRlci0+bmFtZSgpIDw8IGVuZGw7Ci0gICAg
ICBpZiAoaW1hcERyYWZ0c0ZvbGRlcikKLQlrZERlYnVnKDUwMDYpIDw8ICJzYXZlaW5kcmFmdHM6
IGltYXBkcmFmdHM9IgotCQkgICAgICA8PCBpbWFwRHJhZnRzRm9sZGVyLT5uYW1lKCkgPDwgZW5k
bDsKLQotICAgICAgc2VudE9rID0gIShkcmFmdHNGb2xkZXItPmFkZE1zZygoKml0KSkpOwotCi0g
ICAgICAvL0Vuc3VyZSB0aGUgZHJhZnRzIG1lc3NhZ2UgaXMgY29ycmVjdGx5IGFuZCBmdWxseSBw
YXJzZWQKLSAgICAgIGRyYWZ0c0ZvbGRlci0+dW5HZXRNc2coZHJhZnRzRm9sZGVyLT5jb3VudCgp
IC0gMSk7Ci0gICAgICAoKml0KSA9IGRyYWZ0c0ZvbGRlci0+Z2V0TXNnKGRyYWZ0c0ZvbGRlci0+
Y291bnQoKSAtIDEpOwotCi0gICAgICBpZiAoaW1hcERyYWZ0c0ZvbGRlcikgewotCS8vIG1vdmUg
dGhlIG1lc3NhZ2UgdG8gdGhlIGltYXAtZm9sZGVyIGFuZCBoaWdobGlnaHQgaXQKLQlpbWFwRHJh
ZnRzRm9sZGVyLT5tb3ZlTXNnKCgqaXQpKTsKLQkoc3RhdGljX2Nhc3Q8S01Gb2xkZXJJbWFwKj4o
aW1hcERyYWZ0c0ZvbGRlci0+c3RvcmFnZSgpKSktPmdldEZvbGRlcigpOwotICAgICAgfQotCi0g
ICAgfSBlbHNlIHsKKyAgICBpZiAobVNhdmVJbj09S01Db21wb3NlV2luOjpEcmFmdHMpIHsKKyAg
ICAgIHNlbnRPayA9IHNhdmVEcmFmdE9yVGVtcGxhdGUoKCppdCktPmRyYWZ0cygpLCgqaXQpKTsK
KyAgICB9CisgICAgZWxzZSBpZiAobVNhdmVJbj09S01Db21wb3NlV2luOjpUZW1wbGF0ZXMpIHsK
KyAgICAgIHNlbnRPayA9IHNhdmVEcmFmdE9yVGVtcGxhdGUoKCppdCktPnRlbXBsYXRlcygpLCgq
aXQpKTsKKyAgICB9CisgICAgZWxzZSB7CiAgICAgICAoKml0KS0+c2V0VG8oIEtNTWVzc2FnZTo6
ZXhwYW5kQWxpYXNlcyggdG8oKSApKTsKICAgICAgICgqaXQpLT5zZXRDYyggS01NZXNzYWdlOjpl
eHBhbmRBbGlhc2VzKCBjYygpICkpOwogICAgICAgaWYoICFtQ29tcG9zZXItPm9yaWdpbmFsQkND
KCkuaXNFbXB0eSgpICkKQEAgLTM5MTQsNyArMzkzMSwxNCBAQAogLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiB2b2lkIEtNQ29tcG9zZVdpbjo6c2xvdFNhdmVEcmFmdCgpIHsKICAgaWYgKCBtRWRpdG9y
LT5jaGVja0V4dGVybmFsRWRpdG9yRmluaXNoZWQoKSApCi0gICAgZG9TZW5kKCBLTWFpbDo6TWVz
c2FnZVNlbmRlcjo6U2VuZExhdGVyLCB0cnVlICk7CisgICAgZG9TZW5kKCBLTWFpbDo6TWVzc2Fn
ZVNlbmRlcjo6U2VuZExhdGVyLCBLTUNvbXBvc2VXaW46OkRyYWZ0cyApOworfQorCisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQordm9pZCBLTUNvbXBvc2VXaW46OnNsb3RTYXZlVGVtcGxhdGUoKSB7
CisgIGlmICggbUVkaXRvci0+Y2hlY2tFeHRlcm5hbEVkaXRvckZpbmlzaGVkKCkgKQorICAgIGRv
U2VuZCggS01haWw6Ok1lc3NhZ2VTZW5kZXI6OlNlbmRMYXRlciwgS01Db21wb3NlV2luOjpUZW1w
bGF0ZXMgKTsKIH0KIAogCkBAIC00NDg5LDYgKzQ1MTMsNyBAQAogKi8KIHZvaWQgS01Db21wb3Nl
V2luOjpzbG90Rm9sZGVyUmVtb3ZlZChLTUZvbGRlciogZm9sZGVyKQogeworICAvLyBUT0RPOiBu
ZWVkIHRvIGhhbmRsZSB0ZW1wbGF0ZXMgaGVyZT8KICAgaWYgKCAobUZvbGRlcikgJiYgKGZvbGRl
ci0+aWRTdHJpbmcoKSA9PSBtRm9sZGVyLT5pZFN0cmluZygpKSApCiAgIHsKICAgICBtRm9sZGVy
ID0ga21rZXJuZWwtPmRyYWZ0c0ZvbGRlcigpOwotLS0ga2RlcGltL2ttYWlsL2ttY29tcG9zZXdp
bi5oLm9yaWcJMjAwNi0wNS0yMiAxOToxMDo1My4wMDAwMDAwMDAgKzAxMDAKKysrIGtkZXBpbS9r
bWFpbC9rbWNvbXBvc2V3aW4uaAkyMDA2LTA3LTAyIDE4OjExOjE2LjAwMDAwMDAwMCArMDEwMApA
QCAtMjY2LDYgKzI2Niw3IEBACiAgICAqIFJldHVybnMgdHJ1ZSB3aGVuIHNhdmluZyB3YXMgc3Vj
Y2Vzc2Z1bC4KICAgICovCiAgIHZvaWQgc2xvdFNhdmVEcmFmdCgpOworICB2b2lkIHNsb3RTYXZl
VGVtcGxhdGUoKTsKICAgdm9pZCBzbG90TmV3Q29tcG9zZXIoKTsKICAgdm9pZCBzbG90TmV3TWFp
bFJlYWRlcigpOwogICB2b2lkIHNsb3RDbG9zZSgpOwpAQCAtNjE3LDkgKzYxOCwxNiBAQAogICAg
c3RhdGljIHZvaWQgZGVjcnlwdE9yU3RyaXBPZmZDbGVhcnRleHRTaWduYXR1cmUoIFFDU3RyaW5n
JiApOwogCiAgIC8qKgorICAgKiBTYXZlIHRoZSBtZXNzYWdlIGludG8gdGhlIERyYWZ0cyBvciBU
ZW1wbGF0ZXMgZm9sZGVyLgorICAgKi8KKyAgYm9vbCBLTUNvbXBvc2VXaW46OnNhdmVEcmFmdE9y
VGVtcGxhdGUoY29uc3QgUVN0cmluZyAmZm9sZGVyTmFtZSxLTU1lc3NhZ2UgKm1zZyk7CisKKyAg
LyoqCiAgICAqIFNlbmQgdGhlIG1lc3NhZ2UuIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWVzc2FnZSB3
YXMgc2VudCBzdWNjZXNzZnVsbHkuCiAgICAqLwotICB2b2lkIGRvU2VuZCggS01haWw6Ok1lc3Nh
Z2VTZW5kZXI6OlNlbmRNZXRob2QgbWV0aG9kPUtNYWlsOjpNZXNzYWdlU2VuZGVyOjpTZW5kRGVm
YXVsdCwgYm9vbCBzYXZlSW5EcmFmdHMgPSBmYWxzZSk7CisgIGVudW0gU2F2ZUluIHsgTm9uZSwg
RHJhZnRzLCBUZW1wbGF0ZXMgfTsKKyAgdm9pZCBkb1NlbmQoIEtNYWlsOjpNZXNzYWdlU2VuZGVy
OjpTZW5kTWV0aG9kIG1ldGhvZD1LTWFpbDo6TWVzc2FnZVNlbmRlcjo6U2VuZERlZmF1bHQsCisJ
ICAgICAgIEtNQ29tcG9zZVdpbjo6U2F2ZUluIHNhdmVJbiA9IEtNQ29tcG9zZVdpbjo6Tm9uZSAp
OwogCiAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBhdXRvc2F2ZSBpbnRlcnZhbCBpbiBtaWxsaXNl
Y29uZHMgKGFzIG5lZWRlZCBmb3IgUVRpbWVyKS4KQEAgLTc5Myw3ICs4MDEsNyBAQAogCiAgIC8v
IFRoZXNlIGFyZSBmb3IgcGFzc2luZyBvbiBtZXRob2RzIG92ZXIgdGhlIGFwcGx5Q2hhbmdlcyBj
YWxscwogICBLTWFpbDo6TWVzc2FnZVNlbmRlcjo6U2VuZE1ldGhvZCBtU2VuZE1ldGhvZDsKLSAg
Ym9vbCBtU2F2ZUluRHJhZnRzOworICBLTUNvbXBvc2VXaW46OlNhdmVJbiBtU2F2ZUluOwogCiAg
IEtUb2dnbGVBY3Rpb24gKm1FbmNyeXB0Q2hpYXNtdXNBY3Rpb247CiAgIGJvb2wgbUVuY3J5cHRX
aXRoQ2hpYXNtdXM7Ci0tLSBrZGVwaW0va21haWwva21mb2xkZXIuY3BwLm9yaWcJMjAwNi0wNS0y
MiAxOToxMDo1My4wMDAwMDAwMDAgKzAxMDAKKysrIGtkZXBpbS9rbWFpbC9rbWZvbGRlci5jcHAJ
MjAwNi0wNi0yOSAxMjowMjo1Ni4wMDAwMDAwMDAgKzAxMDAKQEAgLTYzMSwxMSArNjMxLDEyIEBA
CiAgICAgICAgIG1XaG9GaWVsZCA9ICJGcm9tIjsKICAgICAgIGlmICggdGhpcyA9PSBrbWtlcm5l
bC0+b3V0Ym94Rm9sZGVyKCkgfHwKICAgICAgICAgICAgdGhpcyA9PSBrbWtlcm5lbC0+c2VudEZv
bGRlcigpIHx8Ci0gICAgICAgICAgIHRoaXMgPT0ga21rZXJuZWwtPmRyYWZ0c0ZvbGRlcigpICkK
KyAgICAgICAgICAgdGhpcyA9PSBrbWtlcm5lbC0+ZHJhZnRzRm9sZGVyKCkgfHwKKyAgICAgICAg
ICAgdGhpcyA9PSBrbWtlcm5lbC0+dGVtcGxhdGVzRm9sZGVyKCkgKQogICAgICAgICBtV2hvRmll
bGQgPSAiVG8iOwotICAgIH0gZWxzZSBpZiAoIGlkZW50aXR5LmRyYWZ0cygpID09IGlkU3RyaW5n
KCkKKyAgICB9IGVsc2UgaWYgKCBpZGVudGl0eS5kcmFmdHMoKSA9PSBpZFN0cmluZygpIHx8IGlk
ZW50aXR5LnRlbXBsYXRlcygpID09IGlkU3RyaW5nKCkKICAgICAgICAgICAgICAgICB8fCBpZGVu
dGl0eS5mY2MoKSA9PSBpZFN0cmluZygpICkKLSAgICAgIC8vIGRyYWZ0cyBvciBzZW50IG9mIHRo
ZSBpZGVudGl0eQorICAgICAgLy8gZHJhZnRzLCB0ZW1wbGF0ZXMgb3Igc2VudCBvZiB0aGUgaWRl
bnRpdHkKICAgICAgIG1XaG9GaWVsZCA9ICJUbyI7CiAgICAgZWxzZQogICAgICAgbVdob0ZpZWxk
ID0gIkZyb20iOwotLS0ga2RlcGltL2ttYWlsL2ttZm9sZGVyLmgub3JpZwkyMDA1LTA5LTEwIDA5
OjI0OjAyLjAwMDAwMDAwMCArMDEwMAorKysga2RlcGltL2ttYWlsL2ttZm9sZGVyLmgJMjAwNi0w
Ny0wNSAxMjo1NjoyOS4wMDAwMDAwMDAgKzAxMDAKQEAgLTk5LDIxICs5OSwyNiBAQAogICBib29s
IGlzT3V0Ym94KCkgewogICAgIHJldHVybiB0aGlzID09IEtNS2VybmVsOjpzZWxmKCktPm91dGJv
eEZvbGRlcigpOwogICB9Ci0gIC8qKiBSZXR1bnMgdHJ1ZSBpZiB0aGlzIGZvbGRlciBpcyB0aGUg
c2VudC1tYWlsIGJveCBvZiB0aGUgbG9jYWwgYWNjb3VudCwKKyAgLyoqIFJldHVybnMgdHJ1ZSBp
ZiB0aGlzIGZvbGRlciBpcyB0aGUgc2VudC1tYWlsIGJveCBvZiB0aGUgbG9jYWwgYWNjb3VudCwK
ICAgICBvciBpcyBjb25maWd1cmVkIHRvIGJlIHRoZSBzZW50IG1haWwgYm94IG9mIGFueSBvZiB0
aGUgdXNlcnMgaWRlbnRpdGllcyAqLwogICBib29sIGlzU2VudCgpIHsKICAgICByZXR1cm4gS01L
ZXJuZWw6OnNlbGYoKS0+Zm9sZGVySXNTZW50TWFpbEZvbGRlciggdGhpcyApOwogICB9Ci0gIC8q
KiBSZXR1bnMgdHJ1ZSBpZiB0aGlzIGZvbGRlciBpcyBjb25maWd1cmVkIGFzIGEgdHJhc2ggZm9s
ZGVyLCBsb2NhbHkgb3IKKyAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGZvbGRlciBpcyBjb25m
aWd1cmVkIGFzIGEgdHJhc2ggZm9sZGVyLCBsb2NhbGx5IG9yCiAgICAgZm9yIG9uZSBvZiB0aGUg
YWNjb3VudHMuICovCiAgIGJvb2wgaXNUcmFzaCgpIHsKICAgICByZXR1cm4gS01LZXJuZWw6OnNl
bGYoKS0+Zm9sZGVySXNUcmFzaCggdGhpcyApOwogICB9Ci0gIC8qKiBSZXR1bnMgdHJ1ZSBpZiB0
aGlzIGZvbGRlciBpcyB0aGUgZHJhZnRzIGJveCBvZiB0aGUgbG9jYWwgYWNjb3VudCwKKyAgLyoq
IFJldHVybnMgdHJ1ZSBpZiB0aGlzIGZvbGRlciBpcyB0aGUgZHJhZnRzIGJveCBvZiB0aGUgbG9j
YWwgYWNjb3VudCwKICAgICBvciBpcyBjb25maWd1cmVkIHRvIGJlIHRoZSBkcmFmdHMgYm94IG9m
IGFueSBvZiB0aGUgdXNlcnMgaWRlbnRpdGllcyAqLwogICBib29sIGlzRHJhZnRzKCkgewogICAg
IHJldHVybiBLTUtlcm5lbDo6c2VsZigpLT5mb2xkZXJJc0RyYWZ0cyggdGhpcyApOwogICB9Cisg
IC8qKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBmb2xkZXIgaXMgdGhlIHRlbXBsYXRlcyBmb2xkZXIg
b2YgdGhlIGxvY2FsIGFjY291bnQsCisgICAgb3IgaXMgY29uZmlndXJlZCB0byBiZSB0aGUgdGVt
cGxhdGVzIGZvbGRlciBvZiBhbnkgb2YgdGhlIHVzZXJzIGlkZW50aXRpZXMgKi8KKyAgYm9vbCBp
c1RlbXBsYXRlcygpIHsKKyAgICByZXR1cm4gS01LZXJuZWw6OnNlbGYoKS0+Zm9sZGVySXNUZW1w
bGF0ZXMoIHRoaXMgKTsKKyAgfQogCiAgIHZvaWQgc2V0QWNjdExpc3QoIEFjY291bnRMaXN0KiBs
aXN0ICkgeyBtQWNjdExpc3QgPSBsaXN0OyB9CiAgIEFjY291bnRMaXN0KiBhY2N0TGlzdCgpIHsg
cmV0dXJuIG1BY2N0TGlzdDsgfQpAQCAtMzUzLDkgKzM1OCw5IEBACiAgIGJvb2wgaXNSZWFkT25s
eSgpIGNvbnN0OwogCiAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbGRlciBpcyBhIGttYWls
IHN5c3RlbSBmb2xkZXIuIFRoZXNlIGFyZQotICAgIHRoZSBmb2xkZXJzICdpbmJveCcsICdvdXRi
b3gnLCAnc2VudCcsICd0cmFzaCcuIFRoZSBuYW1lIG9mIHRoZXNlCi0gICAgZm9sZGVycyBpcyBu
YXRpb25hbGl6ZWQgaW4gdGhlIGZvbGRlciBkaXNwbGF5IGFuZCB0aGV5IGNhbm5vdCBoYXZlCi0g
ICAgYWNjb3VudHMgYXNzb2NpYXRlZC4gRGVsZXRpb24gaXMgYWxzbyBmb3JiaWRkZW4uIEV0Yy4g
Ki8KKyAgICB0aGUgZm9sZGVycyAnaW5ib3gnLCAnb3V0Ym94JywgJ3NlbnQnLCAndHJhc2gnLCAn
ZHJhZnRzJywgJ3RlbXBsYXRlcycuCisgICAgVGhlIG5hbWUgb2YgdGhlc2UgZm9sZGVycyBpcyBu
YXRpb25hbGl6ZWQgaW4gdGhlIGZvbGRlciBkaXNwbGF5IGFuZAorICAgIHRoZXkgY2Fubm90IGhh
dmUgYWNjb3VudHMgYXNzb2NpYXRlZC4gRGVsZXRpb24gaXMgYWxzbyBmb3JiaWRkZW4uIEV0Yy4g
Ki8KICAgYm9vbCBpc1N5c3RlbUZvbGRlcigpIGNvbnN0IHsgcmV0dXJuIG1Jc1N5c3RlbUZvbGRl
cjsgfQogICB2b2lkIHNldFN5c3RlbUZvbGRlcihib29sIGl0SXMpIHsgbUlzU3lzdGVtRm9sZGVy
PWl0SXM7IH0KIAotLS0ga2RlcGltL2ttYWlsL2ttZm9sZGVydHJlZS5jcHAub3JpZwkyMDA2LTA1
LTIyIDE5OjEwOjUzLjAwMDAwMDAwMCArMDEwMAorKysga2RlcGltL2ttYWlsL2ttZm9sZGVydHJl
ZS5jcHAJMjAwNi0wNy0wNSAxMjo1Nzo1MC4wMDAwMDAwMDAgKzAxMDAKQEAgLTExOSw2ICsxMTks
NyBAQAogICAgICAgY2FzZSBTZW50TWFpbDogaWNvbiA9ICJmb2xkZXJfc2VudF9tYWlsIjsgYnJl
YWs7CiAgICAgICBjYXNlIFRyYXNoOiBpY29uID0gInRyYXNoY2FuX2VtcHR5IjsgYnJlYWs7CiAg
ICAgICBjYXNlIERyYWZ0czogaWNvbiA9ICJlZGl0IjsgYnJlYWs7CisgICAgICBjYXNlIFRlbXBs
YXRlczogaWNvbiA9ICJmaWxlbmV3IjsgYnJlYWs7CiAgICAgICBkZWZhdWx0OiBpY29uID0ga21r
ZXJuZWwtPmlDYWxJZmFjZSgpLmZvbGRlclBpeG1hcCggdHlwZSgpICk7IGJyZWFrOwogICAgIH0K
ICAgICAvLyBub24tcm9vdCBzZWFyY2ggZm9sZGVycwpAQCAtMTUzLDYgKzE1NCw3IEBACiAKICAg
aWYgKCAhbUZvbGRlciB8fCBkZXB0aCgpID09IDAgfHwgbUZvbGRlci0+aXNTeXN0ZW1Gb2xkZXIo
KQogICAgIHx8IGtta2VybmVsLT5mb2xkZXJJc1RyYXNoKCBtRm9sZGVyICkKKyAgICB8fCBrbWtl
cm5lbC0+Zm9sZGVySXNUZW1wbGF0ZXMoIG1Gb2xkZXIgKQogICAgIHx8IGtta2VybmVsLT5mb2xk
ZXJJc0RyYWZ0T3JPdXRib3goIG1Gb2xkZXIgKSApCiAgICAgcG0gPSBub3JtYWxJY29uKCBzaXpl
ICk7CiAKQEAgLTIwMiw2ICsyMDQsOCBAQAogICAgICAgc2V0VHlwZSggU2VudE1haWwgKTsKICAg
ICBlbHNlIGlmICgga21rZXJuZWwtPmZvbGRlcklzVHJhc2goIG1Gb2xkZXIgKSApCiAgICAgICBz
ZXRUeXBlKCBUcmFzaCApOworICAgIGVsc2UgaWYgKCBrbWtlcm5lbC0+Zm9sZGVySXNUZW1wbGF0
ZXMoIG1Gb2xkZXIgKSApCisgICAgICBzZXRUeXBlKCBUZW1wbGF0ZXMgKTsKICAgICBlbHNlIGlm
KCBrbWtlcm5lbC0+aUNhbElmYWNlKCkuaXNSZXNvdXJjZUZvbGRlcihtRm9sZGVyKSApCiAgICAg
ICBzZXRUeXBlKCBrbWtlcm5lbC0+aUNhbElmYWNlKCkuZm9sZGVyVHlwZShtRm9sZGVyKSApOwog
ICAgIC8vIFN5c3RlbSBmb2xkZXJzIG9uIGRpbWFwIG9yIGltYXAgd2hpY2ggYXJlIG5vdCByZXNv
dXJjZSBmb2xkZXJzIGFyZQpAQCAtODEwLDExICs4MTQsMTIgQEAKICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmIChjb25maXJtKSB7Ci0gICAgICAvLyBTa2lwIGRyYWZ0cyBhbmQgc2VudCBt
YWlsIGFzIHdlbGwsIHdoZW4gcmVhZGluZyBtYWlsIHdpdGggdGhlIHNwYWNlIGJhcgorICAgICAg
Ly8gU2tpcCBkcmFmdHMsIHNlbnQgbWFpbCBhbmQgdGVtcGxhdGVzIGFzIHdlbGwsIHdoZW4gcmVh
ZGluZyBtYWlsIHdpdGggdGhlIHNwYWNlIGJhcgogICAgICAgLy8gYnV0IG5vdCB3aGVuIGNoYW5n
aW5nIGludG8gdGhlIG5leHQgZm9sZGVyIHdpdGggdW5yZWFkIG1haWwgdmlhIGN0cmwrIG9yCiAg
ICAgICAvLyBjdHJsLSBzbyB3ZSBkbyB0aGlzIG9ubHkgaWYgKGNvbmZpcm0gPT0gdHJ1ZSksIHdo
aWNoIG1lYW5zIHdlIGFyZSBkb2luZwogICAgICAgLy8gcmVhZE9uLgogICAgICAgaWYgKCBmdGkt
PnR5cGUoKSA9PSBLRm9sZGVyVHJlZUl0ZW06OkRyYWZ0cyB8fAorICAgICAgICAgICBmdGktPnR5
cGUoKSA9PSBLRm9sZGVyVHJlZUl0ZW06OlRlbXBsYXRlcyB8fAogICAgICAgICAgICBmdGktPnR5
cGUoKSA9PSBLRm9sZGVyVHJlZUl0ZW06OlNlbnRNYWlsICkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0tLSBrZGVwaW0va21haWwva21oZWFkZXJzLmNwcC5vcmlnCTIwMDYtMDUtMjIgMTk6MTA6
NTMuMDAwMDAwMDAwICswMTAwCisrKyBrZGVwaW0va21haWwva21oZWFkZXJzLmNwcAkyMDA2LTA2
LTI5IDE5OjU1OjIxLjAwMDAwMDAwMCArMDEwMApAQCAtNjcyLDcgKzY3Miw5IEBACiAgICAgbUZv
bGRlciA9IGFGb2xkZXI7CiAgICAgbVNvcnRJbmZvLmRpcnR5ID0gdHJ1ZTsKICAgICBtT3duZXIt
PmVkaXRBY3Rpb24oKS0+c2V0RW5hYmxlZChtRm9sZGVyID8KLSAgICAgICAgKGtta2VybmVsLT5m
b2xkZXJJc0RyYWZ0T3JPdXRib3gobUZvbGRlcikpOiBmYWxzZSApOworICAgICAgICAoa21rZXJu
ZWwtPmZvbGRlcklzRHJhZnRPck91dGJveChtRm9sZGVyKSB8fCBrbWtlcm5lbC0+Zm9sZGVySXNU
ZW1wbGF0ZXMobUZvbGRlcikpIDogZmFsc2UgKTsKKyAgICBtT3duZXItPnVzZUFjdGlvbigpLT5z
ZXRFbmFibGVkKG1Gb2xkZXIgPworICAgICAgICAoa21rZXJuZWwtPmZvbGRlcklzVGVtcGxhdGVz
KG1Gb2xkZXIpKSA6IGZhbHNlICk7CiAgICAgbU93bmVyLT5yZXBseUxpc3RBY3Rpb24oKS0+c2V0
RW5hYmxlZChtRm9sZGVyID8KICAgICAgICAgbUZvbGRlci0+aXNNYWlsaW5nTGlzdEVuYWJsZWQo
KSA6IGZhbHNlKTsKICAgICBpZiAobUZvbGRlcikKQEAgLTIyNzQsOSArMjI3NiwxMyBAQAogICBt
T3duZXItPnVwZGF0ZU1lc3NhZ2VNZW51KCk7CiAKICAgYm9vbCBvdXRfZm9sZGVyID0ga21rZXJu
ZWwtPmZvbGRlcklzRHJhZnRPck91dGJveChtRm9sZGVyKTsKKyAgYm9vbCB0ZW1fZm9sZGVyID0g
a21rZXJuZWwtPmZvbGRlcklzVGVtcGxhdGVzKG1Gb2xkZXIpOwogICBpZiAoIG91dF9mb2xkZXIg
KQogICAgICBtT3duZXItPmVkaXRBY3Rpb24oKS0+cGx1ZyhtZW51KTsKLSAgZWxzZSB7CisgIGVs
c2UgaWYgKCB0ZW1fZm9sZGVyICkgeworICAgICBtT3duZXItPnVzZUFjdGlvbigpLT5wbHVnKG1l
bnUpOworICAgICBtT3duZXItPmVkaXRBY3Rpb24oKS0+cGx1ZyhtZW51KTsKKyAgfSBlbHNlIHsK
ICAgICAgLy8gc2hvdyBtb3N0IHVzZWQgYWN0aW9ucwogICAgICBpZiggIW1Gb2xkZXItPmlzU2Vu
dCgpICkKICAgICAgICBtT3duZXItPnJlcGx5TWVudSgpLT5wbHVnKG1lbnUpOwpAQCAtMjMwNywx
MiArMjMxMywxMiBAQAogICAgIG1Pd25lci0+dGhyZWFkU3RhdHVzTWVudSgpLT5wbHVnKCBtZW51
ICk7IC8vIE1hcmsgVGhyZWFkIG1lbnUKICAgfQogCi0gIGlmICghb3V0X2ZvbGRlciAmJiAhbUZv
bGRlci0+aXNTZW50KCkgJiYgbU93bmVyLT53YXRjaFRocmVhZEFjdGlvbigpLT5pc0VuYWJsZWQo
KSApIHsKKyAgaWYgKCFvdXRfZm9sZGVyICYmICF0ZW1fZm9sZGVyICYmICFtRm9sZGVyLT5pc1Nl
bnQoKSAmJiBtT3duZXItPndhdGNoVGhyZWFkQWN0aW9uKCktPmlzRW5hYmxlZCgpICkgewogICAg
IG1Pd25lci0+d2F0Y2hUaHJlYWRBY3Rpb24oKS0+cGx1ZyhtZW51KTsKICAgICBtT3duZXItPmln
bm9yZVRocmVhZEFjdGlvbigpLT5wbHVnKG1lbnUpOwogICB9CiAKLSAgaWYgKCAhb3V0X2ZvbGRl
ciApIHsKKyAgaWYgKCAhb3V0X2ZvbGRlciAmJiAhdGVtX2ZvbGRlciApIHsKICAgICBtZW51LT5p
bnNlcnRTZXBhcmF0b3IoKTsKICAgICBtT3duZXItPmZpbHRlck1lbnUoKS0+cGx1ZyggbWVudSAp
OyAvLyBDcmVhdGUgRmlsdGVyIG1lbnUKICAgICBtT3duZXItPmFjdGlvbigiYXBwbHlfZmlsdGVy
X2FjdGlvbnMiKS0+cGx1ZyhtZW51KTsKLS0tIGtkZXBpbS9rbWFpbC9rbWtlcm5lbC5jcHAub3Jp
ZwkyMDA2LTA1LTIyIDE5OjEwOjUzLjAwMDAwMDAwMCArMDEwMAorKysga2RlcGltL2ttYWlsL2tt
a2VybmVsLmNwcAkyMDA2LTA2LTI5IDEzOjE1OjIzLjAwMDAwMDAwMCArMDEwMApAQCAtMTExLDYg
KzExMSw3IEBACiAgIHRoZV9zZW50Rm9sZGVyID0gMDsKICAgdGhlX3RyYXNoRm9sZGVyID0gMDsK
ICAgdGhlX2RyYWZ0c0ZvbGRlciA9IDA7CisgIHRoZV90ZW1wbGF0ZXNGb2xkZXIgPSAwOwogCiAg
IHRoZV9mb2xkZXJNZ3IgPSAwOwogICB0aGVfaW1hcEZvbGRlck1nciA9IDA7CkBAIC0xMzY3LDYg
KzEzNjgsMTUgQEAKICAgaWYgKCB0aGVfZHJhZnRzRm9sZGVyLT51c2VyV2hvRmllbGQoKS5pc0Vt
cHR5KCkgKQogICAgIHRoZV9kcmFmdHNGb2xkZXItPnNldFVzZXJXaG9GaWVsZCggUVN0cmluZzo6
bnVsbCApOwogICB0aGVfZHJhZnRzRm9sZGVyLT5vcGVuKCk7CisKKyAgdGhlX3RlbXBsYXRlc0Zv
bGRlciA9IHRoZV9mb2xkZXJNZ3ItPmZpbmRPckNyZWF0ZShjZmctPnJlYWRFbnRyeSgidGVtcGxh
dGVzRm9sZGVyIiwgSTE4Tl9OT09QKCJ0ZW1wbGF0ZXMiKSkpOworICBpZiAodGhlX3RlbXBsYXRl
c0ZvbGRlci0+Y2FuQWNjZXNzKCkgIT0gMCkgeworICAgIGVtZXJnZW5jeUV4aXQoIGkxOG4oIllv
dSBkbyBub3QgaGF2ZSByZWFkL3dyaXRlIHBlcm1pc3Npb24gdG8geW91ciB0ZW1wbGF0ZXMgZm9s
ZGVyLiIpICk7CisgIH0KKyAgdGhlX3RlbXBsYXRlc0ZvbGRlci0+c2V0U3lzdGVtRm9sZGVyKFRS
VUUpOworICBpZiAoIHRoZV90ZW1wbGF0ZXNGb2xkZXItPnVzZXJXaG9GaWVsZCgpLmlzRW1wdHko
KSApCisgICAgdGhlX3RlbXBsYXRlc0ZvbGRlci0+c2V0VXNlcldob0ZpZWxkKCBRU3RyaW5nOjpu
dWxsICk7CisgIHRoZV90ZW1wbGF0ZXNGb2xkZXItPm9wZW4oKTsKIH0KIAogCkBAIC0xOTc1LDYg
KzE5ODUsMjIgQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIEtNS2VybmVsOjpmb2xkZXJJ
c1RlbXBsYXRlcyhjb25zdCBLTUZvbGRlciAqIGZvbGRlcikKK3sKKyAgYXNzZXJ0KCBmb2xkZXIg
KTsKKyAgaWYgKCBmb2xkZXIgPT0gdGhlX3RlbXBsYXRlc0ZvbGRlciApCisgICAgcmV0dXJuIHRy
dWU7CisKKyAgUVN0cmluZyBpZFN0cmluZyA9IGZvbGRlci0+aWRTdHJpbmcoKTsKKyAgaWYgKCBp
ZFN0cmluZy5pc0VtcHR5KCkgKSByZXR1cm4gZmFsc2U7CisKKyAgLy8gc2VhcmNoIHRoZSBpZGVu
dGl0aWVzIGlmIHRoZSBmb2xkZXIgbWF0Y2hlcyB0aGUgdGVtcGxhdGVzLWZvbGRlcgorICBjb25z
dCBLUElNOjpJZGVudGl0eU1hbmFnZXIgKiBpbSA9IGlkZW50aXR5TWFuYWdlcigpOworICBmb3Io
IEtQSU06OklkZW50aXR5TWFuYWdlcjo6Q29uc3RJdGVyYXRvciBpdCA9IGltLT5iZWdpbigpOyBp
dCAhPSBpbS0+ZW5kKCk7ICsraXQgKQorICAgIGlmICggKCppdCkudGVtcGxhdGVzKCkgPT0gaWRT
dHJpbmcgKSByZXR1cm4gdHJ1ZTsKKyAgcmV0dXJuIGZhbHNlOworfQorCiBib29sIEtNS2VybmVs
Ojpmb2xkZXJJc1RyYXNoKEtNRm9sZGVyICogZm9sZGVyKQogewogICBhc3NlcnQoZm9sZGVyKTsK
LS0tIGtkZXBpbS9rbWFpbC9rbWtlcm5lbC5oLm9yaWcJMjAwNi0wMy0xNyAxMDoxNTo1NC4wMDAw
MDAwMDAgKzAwMDAKKysrIGtkZXBpbS9rbWFpbC9rbWtlcm5lbC5oCTIwMDYtMDYtMjkgMTE6MDI6
MDcuMDAwMDAwMDAwICswMTAwCkBAIC0yNTAsNiArMjUwLDcgQEAKIAkJCSAgICAgYm9vbCBvdmVy
d3JpdGUgPSBGQUxTRSk7CiAgIGJvb2wgZm9sZGVySXNEcmFmdE9yT3V0Ym94KGNvbnN0IEtNRm9s
ZGVyICopOwogICBib29sIGZvbGRlcklzRHJhZnRzKGNvbnN0IEtNRm9sZGVyICopOworICBib29s
IGZvbGRlcklzVGVtcGxhdGVzKGNvbnN0IEtNRm9sZGVyICopOwogICBib29sIGZvbGRlcklzVHJh
c2goS01Gb2xkZXIgKik7CiAgIC8qKgogICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZvbGRlciBp
cyBvbmUgb2YgdGhlIHNlbnQtbWFpbCBmb2xkZXJzLgpAQCAtMjY4LDYgKzI2OSw3IEBACiAgIEtN
Rm9sZGVyICpzZW50Rm9sZGVyKCkgeyByZXR1cm4gdGhlX3NlbnRGb2xkZXI7IH0KICAgS01Gb2xk
ZXIgKnRyYXNoRm9sZGVyKCkgeyByZXR1cm4gdGhlX3RyYXNoRm9sZGVyOyB9CiAgIEtNRm9sZGVy
ICpkcmFmdHNGb2xkZXIoKSB7IHJldHVybiB0aGVfZHJhZnRzRm9sZGVyOyB9CisgIEtNRm9sZGVy
ICp0ZW1wbGF0ZXNGb2xkZXIoKSB7IHJldHVybiB0aGVfdGVtcGxhdGVzRm9sZGVyOyB9CiAKICAg
S01Gb2xkZXJNZ3IgKmZvbGRlck1ncigpIHsgcmV0dXJuIHRoZV9mb2xkZXJNZ3I7IH0KICAgS01G
b2xkZXJNZ3IgKmltYXBGb2xkZXJNZ3IoKSB7IHJldHVybiB0aGVfaW1hcEZvbGRlck1ncjsgfQpA
QCAtNDEzLDYgKzQxNSw3IEBACiAgIEtNRm9sZGVyICp0aGVfc2VudEZvbGRlcjsKICAgS01Gb2xk
ZXIgKnRoZV90cmFzaEZvbGRlcjsKICAgS01Gb2xkZXIgKnRoZV9kcmFmdHNGb2xkZXI7CisgIEtN
Rm9sZGVyICp0aGVfdGVtcGxhdGVzRm9sZGVyOwogCiAgIEtNRm9sZGVyTWdyICp0aGVfZm9sZGVy
TWdyOwogICBLTUZvbGRlck1nciAqdGhlX2ltYXBGb2xkZXJNZ3I7Ci0tLSBrZGVwaW0va21haWwv
a21tYWlud2lkZ2V0LmNwcC5vcmlnCTIwMDYtMDUtMjIgMTk6MTA6NTMuMDAwMDAwMDAwICswMTAw
CisrKyBrZGVwaW0va21haWwva21tYWlud2lkZ2V0LmNwcAkyMDA2LTA3LTA1IDEzOjA4OjMzLjAw
MDAwMDAwMCArMDEwMApAQCAtOTgsNiArOTgsOSBAQAogICAgIHVzaW5nIEtNYWlsOjpTaWV2ZURl
YnVnRGlhbG9nOwogI2VuZGlmCiAKKyNpbmNsdWRlIDxsaWJrcGltaWRlbnRpdGllcy9pZGVudGl0
eS5oPgorI2luY2x1ZGUgPGxpYmtwaW1pZGVudGl0aWVzL2lkZW50aXR5bWFuYWdlci5oPgorCiAj
aW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8a3N0YXR1c2Jhci5oPgogI2luY2x1ZGUgPGtz
dGF0aWNkZWxldGVyLmg+CkBAIC0xMzQsNiArMTM3LDcgQEAKICAgbVNlYXJjaFdpbiA9IDA7CiAg
IG1JbnRlZ3JhdGVkICA9IFRSVUU7CiAgIG1Gb2xkZXIgPSAwOworICBtVGVtcGxhdGVGb2xkZXIg
PSAwOwogICBtRm9sZGVyVGhyZWFkUHJlZiA9IGZhbHNlOwogICBtRm9sZGVyVGhyZWFkU3VialBy
ZWYgPSB0cnVlOwogICBtUmVhZGVyV2luZG93QWN0aXZlID0gdHJ1ZTsKQEAgLTg5Nyw2ICs5MDEs
NDggQEAKIAogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUT0RPOiBkbyB3ZSB3YW50IHRo
ZSBsaXN0IHNvcnRlZCBhbHBoYWJldGljYWxseT8KK3ZvaWQgS01NYWluV2lkZ2V0OjpzbG90U2hv
d05ld0Zyb21UZW1wbGF0ZSgpCit7CisgIGlmIChtRm9sZGVyKSB7CisgICAgY29uc3QgS1BJTTo6
SWRlbnRpdHkgJiBpZGVudCA9CisgICAgICBrbWtlcm5lbC0+aWRlbnRpdHlNYW5hZ2VyKCktPmlk
ZW50aXR5Rm9yVW9pZE9yRGVmYXVsdCggbUZvbGRlci0+aWRlbnRpdHkoKSApOworICAgIG1UZW1w
bGF0ZUZvbGRlciA9IGtta2VybmVsLT5mb2xkZXJNZ3IoKS0+ZmluZElkU3RyaW5nKGlkZW50LnRl
bXBsYXRlcygpKTsKKyAgfQorICBlbHNlIG1UZW1wbGF0ZUZvbGRlciA9IGtta2VybmVsLT50ZW1w
bGF0ZXNGb2xkZXIoKTsKKyAgaWYgKCFtVGVtcGxhdGVGb2xkZXIpIHJldHVybjsKKworICBtVGVt
cGxhdGVNZW51LT5wb3B1cE1lbnUoKS0+Y2xlYXIoKTsKKyAgZm9yIChpbnQgaWR4ID0gMDsgaWR4
PG1UZW1wbGF0ZUZvbGRlci0+Y291bnQoKTsgKytpZHgpIHsKKyAgICBLTU1zZ0Jhc2UgKm1iID0g
bVRlbXBsYXRlRm9sZGVyLT5nZXRNc2dCYXNlKGlkeCk7CisKKyAgICBRU3RyaW5nIHN1YmogPSBt
Yi0+c3ViamVjdCgpOworICAgIGlmIChzdWJqLmlzRW1wdHkoKSkgc3ViaiA9IGkxOG4oIk5vIFN1
YmplY3QiKTsKKyAgICBpZiAoc3Viai5sZW5ndGgoKT40MCkgeworICAgICAgc3Viai50cnVuY2F0
ZSg0MCk7CisgICAgICBzdWJqICs9ICIuLi4iOworICAgIH0KKworICAgIG1UZW1wbGF0ZU1lbnUt
PnBvcHVwTWVudSgpLT5pbnNlcnRJdGVtKHN1YmoucmVwbGFjZSgiJiIsICImJiIpLGlkeCk7Cisg
IH0KK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9pZCBLTU1haW5XaWRnZXQ6OnNsb3RO
ZXdGcm9tVGVtcGxhdGUoaW50IGlkKQoreworICBpZiAoIW1UZW1wbGF0ZUZvbGRlcikgcmV0dXJu
OworICBuZXdGcm9tVGVtcGxhdGUobVRlbXBsYXRlRm9sZGVyLT5nZXRNc2coaWQpKTsKK30KKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordm9pZCBLTU1haW5XaWRnZXQ6Om5ld0Zyb21UZW1wbGF0
ZShLTU1lc3NhZ2UgKm1zZykKK3sKKyAgaWYgKCFtc2cpIHJldHVybjsKKyAgS01Db21tYW5kICpj
b21tYW5kID0gbmV3IEtNVXNlVGVtcGxhdGVDb21tYW5kKHRoaXMsbXNnKTsKKyAgY29tbWFuZC0+
c3RhcnQoKTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdm9pZCBLTU1haW5XaWRnZXQ6
OnNsb3RQb3N0VG9NTCgpCiB7CiAgIGlmICggbUZvbGRlciAmJiBtRm9sZGVyLT5pc01haWxpbmdM
aXN0RW5hYmxlZCgpICkgewpAQCAtMTMxOCw2ICsxMzY0LDEyIEBACiB9CiAKIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KK3ZvaWQgS01NYWluV2lkZ2V0OjpzbG90VXNlVGVtcGxhdGUoKQoreworICBu
ZXdGcm9tVGVtcGxhdGUobUhlYWRlcnMtPmN1cnJlbnRNc2coKSk7Cit9CisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIHZvaWQgS01NYWluV2lkZ2V0OjpzbG90UmVzZW5kTXNnKCkKIHsKICAgS01D
b21tYW5kICpjb21tYW5kID0gbmV3IEtNUmVzZW5kTWVzc2FnZUNvbW1hbmQoIHRoaXMsIG1IZWFk
ZXJzLT5jdXJyZW50TXNnKCkgKTsKQEAgLTIxMjMsNiArMjE3NSwxMSBAQAogICAgIHNsb3RFZGl0
TXNnKCk7CiAgICAgcmV0dXJuOwogICB9CisgIGlmIChrbWtlcm5lbC0+Zm9sZGVySXNUZW1wbGF0
ZXMobUZvbGRlcikpCisgIHsKKyAgICBzbG90VXNlVGVtcGxhdGUoKTsKKyAgICByZXR1cm47Cisg
IH0KIAogICBhc3NlcnQoIG1zZyAhPSAwICk7CiAgIEtNUmVhZGVyTWFpbldpbiAqd2luID0gbmV3
IEtNUmVhZGVyTWFpbldpbiggbUZvbGRlckh0bWxQcmVmLCBtRm9sZGVySHRtbExvYWRFeHRQcmVm
ICk7CkBAIC0yMjExLDYgKzIyNjgsMTAgQEAKICAgICBpZiAoIG1Gb2xkZXItPmlzRHJhZnRzKCkg
fHwgbUZvbGRlci0+aXNPdXRib3goKSApIHsKICAgICAgIG1FZGl0QWN0aW9uLT5wbHVnKG1lbnUp
OwogICAgIH0KKyAgICBlbHNlIGlmICggbUZvbGRlci0+aXNUZW1wbGF0ZXMoKSApIHsKKyAgICAg
IG1Vc2VBY3Rpb24tPnBsdWcobWVudSk7CisgICAgICBtRWRpdEFjdGlvbi0+cGx1ZyhtZW51KTsK
KyAgICB9CiAgICAgZWxzZSB7CiAgICAgICBpZiggIW1Gb2xkZXItPmlzU2VudCgpICkKICAgICAg
ICAgbVJlcGx5QWN0aW9uTWVudS0+cGx1ZyhtZW51KTsKQEAgLTI0NTYsNiArMjUxNywxMiBAQAog
ICAodm9pZCkgbmV3IEtBY3Rpb24oIGkxOG4oIiZOZXcgTWVzc2FnZS4uLiIpLCAibWFpbF9uZXci
LCBLU3RkQWNjZWw6OnNob3J0Y3V0KEtTdGRBY2NlbDo6TmV3KSwgdGhpcywKIAkJICAgICAgU0xP
VChzbG90Q29tcG9zZSgpKSwgYWN0aW9uQ29sbGVjdGlvbigpLCAibmV3X21lc3NhZ2UiICk7CiAK
KyAgbVRlbXBsYXRlTWVudSA9IG5ldyBLQWN0aW9uTWVudShpMThuKCJOZXcgTWVzc2FnZSBGcm9t
ICZUZW1wbGF0ZSIpLCJmaWxlbmV3IiwKKwkJCQkgIGFjdGlvbkNvbGxlY3Rpb24oKSwibmV3X2Zy
b21fdGVtcGxhdGUiKTsKKyAgbVRlbXBsYXRlTWVudS0+c2V0RGVsYXllZCh0cnVlKTsKKyAgY29u
bmVjdChtVGVtcGxhdGVNZW51LT5wb3B1cE1lbnUoKSxTSUdOQUwoYWJvdXRUb1Nob3coKSksdGhp
cyxTTE9UKHNsb3RTaG93TmV3RnJvbVRlbXBsYXRlKCkpKTsKKyAgY29ubmVjdChtVGVtcGxhdGVN
ZW51LT5wb3B1cE1lbnUoKSxTSUdOQUwoYWN0aXZhdGVkKGludCkpLHRoaXMsU0xPVChzbG90TmV3
RnJvbVRlbXBsYXRlKGludCkpKTsKKwogICAodm9pZCkgbmV3IEtBY3Rpb24oIGkxOG4oIk5ldyBN
ZXNzYWdlIHQmbyBNYWlsaW5nLUxpc3QuLi4iKSwgIm1haWxfcG9zdF90byIsCiAgICAgICAgICAg
ICAgICAgICAgICAgQ1RSTCtTSElGVCtLZXlfTiwgdGhpcywKIAkJICAgICAgU0xPVChzbG90UG9z
dFRvTUwoKSksIGFjdGlvbkNvbGxlY3Rpb24oKSwgInBvc3RfbWVzc2FnZSIgKTsKQEAgLTI1NDUs
NiArMjYxMiw5IEBACiAgIG1FZGl0QWN0aW9uID0gbmV3IEtBY3Rpb24oIGkxOG4oIiZFZGl0IE1l
c3NhZ2UiKSwgImVkaXQiLCBLZXlfVCwgdGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTTE9UKHNsb3RFZGl0TXNnKCkpLCBhY3Rpb25Db2xsZWN0aW9uKCksICJlZGl0IiApOwogICBt
RWRpdEFjdGlvbi0+cGx1Z0FjY2VsKCBhY3Rpb25Db2xsZWN0aW9uKCktPmthY2NlbCgpICk7Cisg
IG1Vc2VBY3Rpb24gPSBuZXcgS0FjdGlvbiggaTE4bigiTmV3IE1lc3NhZ2UgRnJvbSAmVGVtcGxh
dGUiKSwgImZpbGVuZXciLCBLZXlfTiwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTTE9UKHNsb3RVc2VUZW1wbGF0ZSgpKSwgYWN0aW9uQ29sbGVjdGlvbigpLCAidXNlX3RlbXBs
YXRlIiApOworICBtVXNlQWN0aW9uLT5wbHVnQWNjZWwoIGFjdGlvbkNvbGxlY3Rpb24oKS0+a2Fj
Y2VsKCkgKTsKIAogICAvLy0tLS0tICJNYXJrIE1lc3NhZ2UiIHN1Ym1lbnUKICAgbVN0YXR1c01l
bnUgPSBuZXcgS0FjdGlvbk1lbnUgKCBpMThuKCAiTWFyJmsgTWVzc2FnZSIgKSwKQEAgLTMwMDQs
OCArMzA3NCw5IEBACiAgICAgZm9yd2FyZE1lbnUoKS0+c2V0RW5hYmxlZCggbWFzc19hY3Rpb25z
ICk7CiAKICAgICBib29sIHNpbmdsZV9hY3Rpb25zID0gY291bnQgPT0gMTsKLSAgICBtRWRpdEFj
dGlvbi0+c2V0RW5hYmxlZCggc2luZ2xlX2FjdGlvbnMgJiYKLSAgICBrbWtlcm5lbC0+Zm9sZGVy
SXNEcmFmdE9yT3V0Ym94KG1Gb2xkZXIpKTsKKyAgICBtRWRpdEFjdGlvbi0+c2V0RW5hYmxlZCgg
c2luZ2xlX2FjdGlvbnMgJiYgKCBrbWtlcm5lbC0+Zm9sZGVySXNEcmFmdE9yT3V0Ym94KG1Gb2xk
ZXIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a21rZXJuZWwtPmZvbGRlcklzVGVtcGxhdGVzKG1Gb2xkZXIpKSk7CisgICAgbVVzZUFjdGlvbi0+
c2V0RW5hYmxlZCggc2luZ2xlX2FjdGlvbnMgJiYga21rZXJuZWwtPmZvbGRlcklzVGVtcGxhdGVz
KG1Gb2xkZXIpKTsKICAgICByZXBseU1lbnUoKS0+c2V0RW5hYmxlZCggc2luZ2xlX2FjdGlvbnMg
KTsKICAgICBmaWx0ZXJNZW51KCktPnNldEVuYWJsZWQoIHNpbmdsZV9hY3Rpb25zICk7CiAgICAg
cmVwbHlBY3Rpb24oKS0+c2V0RW5hYmxlZCggc2luZ2xlX2FjdGlvbnMgKTsKLS0tIGtkZXBpbS9r
bWFpbC9rbW1haW53aWRnZXQuaC5vcmlnCTIwMDYtMDUtMjIgMTk6MTA6NTMuMDAwMDAwMDAwICsw
MTAwCisrKyBrZGVwaW0va21haWwva21tYWlud2lkZ2V0LmgJMjAwNi0wNy0wMSAxNzoxNjoxMi4w
MDAwMDAwMDAgKzAxMDAKQEAgLTEyNSw2ICsxMjUsNyBAQAogICBLQWN0aW9uICpkZWxldGVUaHJl
YWRBY3Rpb24oKSBjb25zdCB7IHJldHVybiBtRGVsZXRlVGhyZWFkQWN0aW9uOyB9CiAgIEtBY3Rp
b24gKnNhdmVBc0FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1TYXZlQXNBY3Rpb247IH0KICAgS0Fj
dGlvbiAqZWRpdEFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1FZGl0QWN0aW9uOyB9CisgIEtBY3Rp
b24gKnVzZUFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1Vc2VBY3Rpb247IH0KICAgS0FjdGlvbiAq
c2VuZEFnYWluQWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbVNlbmRBZ2FpbkFjdGlvbjsgfQogICBL
QWN0aW9uICphcHBseUFsbEZpbHRlcnNBY3Rpb24oKSBjb25zdCB7IHJldHVybiBtQXBwbHlBbGxG
aWx0ZXJzQWN0aW9uOyB9CiAgIEtBY3Rpb24gKmZpbmRJbk1lc3NhZ2VBY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtRmluZEluTWVzc2FnZUFjdGlvbjsgfQpAQCAtMjMxLDYgKzIzMiw3IEBACiAgIHZv
aWQgYWN0aXZhdGVQYW5uZXJzKCk7CiAgIHZvaWQgc2hvd01zZyhLTVJlYWRlcldpbiAqd2luLCBL
TU1lc3NhZ2UgKm1zZyk7CiAgIHZvaWQgdXBkYXRlRmlsZU1lbnUoKTsKKyAgdm9pZCBuZXdGcm9t
VGVtcGxhdGUoS01NZXNzYWdlICptc2cpOwogCiAgIEtBY3Rpb25Db2xsZWN0aW9uICogYWN0aW9u
Q29sbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1BY3Rpb25Db2xsZWN0aW9uOyB9CiAKQEAgLTI3
Myw2ICsyNzUsNyBAQAogICB2b2lkIHNsb3RUb2dnbGVTdWJqZWN0VGhyZWFkaW5nKCk7CiAgIHZv
aWQgc2xvdE1lc3NhZ2VRdWV1ZWRPckRyYWZ0ZWQoKTsKICAgdm9pZCBzbG90RWRpdE1zZygpOwor
ICB2b2lkIHNsb3RVc2VUZW1wbGF0ZSgpOwogICAvL3ZvaWQgc2xvdFRyYXNoTXNnKCk7ICAgLy8g
bW92ZSB0byB0cmFzaAogICB2b2lkIHNsb3REZWxldGVNc2coIGJvb2wgY29uZmlybURlbGV0ZSA9
IHRydWUgKTsgIC8vIGNvbXBsZXRlbHkgZGVsZXRlIG1lc3NhZ2UKICAgdm9pZCBzbG90VHJhc2hU
aHJlYWQoKTsKQEAgLTM0NSw2ICszNDgsOSBAQAogICB2b2lkIHNsb3REaXNwbGF5Q3VycmVudE1l
c3NhZ2UoKTsKICAgdm9pZCBzbG90TXNnQWN0aXZhdGVkKEtNTWVzc2FnZSopOwogCisgIHZvaWQg
c2xvdFNob3dOZXdGcm9tVGVtcGxhdGUoKTsKKyAgdm9pZCBzbG90TmV3RnJvbVRlbXBsYXRlKGlu
dCk7CisKICAgLyoqIFVwZGF0ZSB0aGUgdW5kbyBhY3Rpb24gKi8KICAgdm9pZCBzbG90VXBkYXRl
VW5kbygpOwogCkBAIC00MDMsNyArNDA5LDcgQEAKIHByaXZhdGU6CiAgIC8vIE1lc3NhZ2UgYWN0
aW9ucwogICBLQWN0aW9uICptVHJhc2hBY3Rpb24sICptRGVsZXRlQWN0aW9uLCAqbVRyYXNoVGhy
ZWFkQWN0aW9uLAotICAgICptRGVsZXRlVGhyZWFkQWN0aW9uLCAqbVNhdmVBc0FjdGlvbiwgKm1F
ZGl0QWN0aW9uLAorICAgICptRGVsZXRlVGhyZWFkQWN0aW9uLCAqbVNhdmVBc0FjdGlvbiwgKm1F
ZGl0QWN0aW9uLCAqbVVzZUFjdGlvbiwKICAgICAqbVNlbmRBZ2FpbkFjdGlvbiwgKm1BcHBseUFs
bEZpbHRlcnNBY3Rpb24sICptRmluZEluTWVzc2FnZUFjdGlvbiwKICAgICAqbVNhdmVBdHRhY2ht
ZW50c0FjdGlvbiwgKm1PcGVuQWN0aW9uLCAqbVZpZXdTb3VyY2VBY3Rpb247CiAgIC8vIENvbXBv
c2l0aW9uIGFjdGlvbnMKQEAgLTQxNyw2ICs0MjMsNyBAQAogICBLQWN0aW9uTWVudSAqbUZpbHRl
ck1lbnU7CiAgIEtBY3Rpb24gKm1TdWJqZWN0RmlsdGVyQWN0aW9uLCAqbUZyb21GaWx0ZXJBY3Rp
b24sICptVG9GaWx0ZXJBY3Rpb24sCiAgICAgICAqbUxpc3RGaWx0ZXJBY3Rpb247CisgIEtBY3Rp
b25NZW51ICptVGVtcGxhdGVNZW51OwogCiAgIEtBY3Rpb25NZW51ICptU3RhdHVzTWVudSwgKm1U
aHJlYWRTdGF0dXNNZW51LAogICAgICptTW92ZUFjdGlvbk1lbnUsICptQ29weUFjdGlvbk1lbnUs
ICptQXBwbHlGaWx0ZXJBY3Rpb25zTWVudTsKQEAgLTQ0Niw2ICs0NTMsNyBAQAogICBLVG9vbEJh
ciAgICAgKm1TZWFyY2hUb29sQmFyOwogICBLTWFpbDo6SGVhZGVyTGlzdFF1aWNrU2VhcmNoICpt
UXVpY2tTZWFyY2hMaW5lOwogICBLTUZvbGRlciAgICAgKm1Gb2xkZXI7CisgIEtNRm9sZGVyICAg
ICAqbVRlbXBsYXRlRm9sZGVyOwogICBRUG9wdXBNZW51ICAgKm1WaWV3TWVudSwgKm1Cb2R5UGFy
dHNNZW51OwogICBLQWN0aW9uICAgICAgICptbGlzdEZpbHRlckFjdGlvbjsKICAgYm9vbAkJbUlu
dGVncmF0ZWQ7Ci0tLSBrZGVwaW0va21haWwva21tYWlud2luLnJjLm9yaWcJMjAwNi0wMy0xNyAx
MDoxNTo1NC4wMDAwMDAwMDAgKzAwMDAKKysrIGtkZXBpbS9rbWFpbC9rbW1haW53aW4ucmMJMjAw
Ni0wNy0wMSAxNTozNjozMy4wMDAwMDAwMDAgKzAxMDAKQEAgLTIsMTMgKzIsMTQgQEAKICAgICAg
dGhlIHNhbWUgbWVudSBlbnRyaWVzIGF0IHRoZSBzYW1lIHBsYWNlIGluIEtNYWlsIGFuZCBLb250
YWN0ICAtLT4KIAogPCFET0NUWVBFIGtwYXJ0Z3VpPgotPGtwYXJ0Z3VpIHZlcnNpb249Ijg4IiBu
YW1lPSJrbW1haW53aW4iID4KKzxrcGFydGd1aSB2ZXJzaW9uPSI4OSIgbmFtZT0ia21tYWlud2lu
IiA+CiAgPE1lbnVCYXI+CiAgIDxNZW51IG5vTWVyZ2U9IjEiIG5hbWU9ImZpbGUiID4KICAgIDx0
ZXh0PiZhbXA7RmlsZTwvdGV4dD4KICAgIDxNZW51IG5hbWU9ImZpbGVfbmV3IiA+CiAgICAgIDx0
ZXh0Pk5ldzwvdGV4dD4KICAgICAgPEFjdGlvbiBuYW1lPSJuZXdfbWVzc2FnZSIgLz4KKyAgICAg
PEFjdGlvbiBuYW1lPSJuZXdfZnJvbV90ZW1wbGF0ZSIgLz4KICAgICAgPFNlcGFyYXRvci8+CiAg
ICAgIDwhLS0gQWN0aW9uIG5hbWU9Im5ld190b2RvIiAvPgogICAgICAgICBldGMgLS0+Ci0tLSBr
ZGVwaW0va21haWwva21tZXNzYWdlLmNwcC5vcmlnCTIwMDYtMDUtMjIgMTk6MTA6NTMuMDAwMDAw
MDAwICswMTAwCisrKyBrZGVwaW0va21haWwva21tZXNzYWdlLmNwcAkyMDA2LTA2LTI5IDE4OjAw
OjI3LjAwMDAwMDAwMCArMDEwMApAQCAtMTgyLDYgKzE4Miw3IEBACiAgIGVsc2UKICAgICBtVW5l
bmNyeXB0ZWRNc2cgPSAwOwogICBzZXREcmFmdHMoIG90aGVyLmRyYWZ0cygpICk7CisgIHNldFRl
bXBsYXRlcyggb3RoZXIudGVtcGxhdGVzKCkgKTsKICAgLy9tRmlsZU5hbWUgPSAiIjsgLy8gd2Ug
bWlnaHQgbm90IHdhbnQgdG8gY29weSB0aGUgb3RoZXIgbWVzc2FnZXMgZmlsZW5hbWUgKD8pCiAg
IC8vS01Nc2dCYXNlOjphc3NpZ24oICZvdGhlciApOwogfQpAQCAtMTYwMiw2ICsxNjAzLDExIEBA
CiAgICAgc2V0RHJhZnRzKCBRU3RyaW5nOjpudWxsICk7CiAgIGVsc2UKICAgICBzZXREcmFmdHMo
IGlkZW50LmRyYWZ0cygpICk7CisKKyAgaWYgKGlkZW50LnRlbXBsYXRlcygpLmlzRW1wdHkoKSkK
KyAgICBzZXRUZW1wbGF0ZXMoIFFTdHJpbmc6Om51bGwgKTsKKyAgZWxzZQorICAgIHNldFRlbXBs
YXRlcyggaWRlbnQudGVtcGxhdGVzKCkgKTsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA
QCAtMTg3OSw2ICsxODg1LDEyIEBACiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQg
S01NZXNzYWdlOjpzZXRUZW1wbGF0ZXMoY29uc3QgUVN0cmluZyYgYVN0cikKK3sKKyAgbVRlbXBs
YXRlcyA9IGFTdHI7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFFTdHJpbmcgS01NZXNz
YWdlOjp3aG8oKSBjb25zdAogewogICBpZiAobVBhcmVudCkKLS0tIGtkZXBpbS9rbWFpbC9rbW1l
c3NhZ2UuaC5vcmlnCTIwMDUtMDktMTAgMDk6MjQ6MDEuMDAwMDAwMDAwICswMTAwCisrKyBrZGVw
aW0va21haWwva21tZXNzYWdlLmgJMjAwNi0wNi0yOSAxODowMTowNy4wMDAwMDAwMDAgKzAxMDAK
QEAgLTMyOCw2ICszMjgsMTAgQEAKICAgUVN0cmluZyBkcmFmdHMoKSBjb25zdCB7IHJldHVybiBt
RHJhZnRzOyB9CiAgIHZvaWQgc2V0RHJhZnRzKGNvbnN0IFFTdHJpbmcmIGFTdHIpOwogCisgIC8q
KiBHZXQgb3Igc2V0IHRoZSAnVGVtcGxhdGVzJyBmb2xkZXIgKi8KKyAgUVN0cmluZyB0ZW1wbGF0
ZXMoKSBjb25zdCB7IHJldHVybiBtVGVtcGxhdGVzOyB9CisgIHZvaWQgc2V0VGVtcGxhdGVzKGNv
bnN0IFFTdHJpbmcmIGFTdHIpOworCiAgIC8qKiBHZXQgb3Igc2V0IHRoZSAnRnJvbScgaGVhZGVy
IGZpZWxkICovCiAgIFFTdHJpbmcgZnJvbSgpIGNvbnN0OwogICB2b2lkIHNldEZyb20oY29uc3Qg
UVN0cmluZyYgYVN0cik7CkBAIC04NTAsNiArODU0LDcgQEAKICAgdm9pZCBhc3NpZ24oIGNvbnN0
IEtNTWVzc2FnZSYgb3RoZXIgKTsKIAogICBRU3RyaW5nIG1EcmFmdHM7CisgIFFTdHJpbmcgbVRl
bXBsYXRlczsKICAgbXV0YWJsZSBEd01lc3NhZ2UqIG1Nc2c7CiAgIG11dGFibGUgYm9vbCAgICAg
ICBtTmVlZHNBc3NlbWJseSA6MTsKICAgYm9vbCBtRGVjb2RlSFRNTCA6MTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16895</attachid>
            <date>2006-07-05 16:11:18 +0000</date>
            <delta_ts>2006-07-05 16:11:18 +0000</delta_ts>
            <desc>Updated patch for KDE 3.5.3, part 2</desc>
            <filename>maillibtemplates.patch</filename>
            <type>text/plain</type>
            <size>5587</size>
            <attacher name="Jonathan Marten">jjm</attacher>
            
              <data encoding="base64">LS0tIGtkZXBpbS9saWJrZGVwaW0va2ZvbGRlcnRyZWUuY3BwLm9yaWcJMjAwNi0wNS0yMiAxOTox
MTowMC4wMDAwMDAwMDAgKzAxMDAKKysrIGtkZXBpbS9saWJrZGVwaW0va2ZvbGRlcnRyZWUuY3Bw
CTIwMDYtMDYtMjkgMDk6NDc6MjQuMDAwMDAwMDAwICswMTAwCkBAIC02NSwxNCArNjUsMTYgQEAK
ICAgICByZXR1cm4gNDsKICAgY2FzZSBEcmFmdHM6CiAgICAgcmV0dXJuIDU7Ci0gIGNhc2UgQ2Fs
ZW5kYXI6CisgIGNhc2UgVGVtcGxhdGVzOgogICAgIHJldHVybiA2OwotICBjYXNlIENvbnRhY3Rz
OgorICBjYXNlIENhbGVuZGFyOgogICAgIHJldHVybiA3OwotICBjYXNlIE5vdGVzOgorICBjYXNl
IENvbnRhY3RzOgogICAgIHJldHVybiA4OwotICBjYXNlIFRhc2tzOgorICBjYXNlIE5vdGVzOgog
ICAgIHJldHVybiA5OworICBjYXNlIFRhc2tzOgorICAgIHJldHVybiAxMDsKICAgZGVmYXVsdDoK
ICAgICByZXR1cm4gNDI7CiAgIH0KLS0tIGtkZXBpbS9saWJrcGltaWRlbnRpdGllcy9pZGVudGl0
eS5jcHAub3JpZwkyMDA2LTAxLTE5IDE2OjU1OjUzLjAwMDAwMDAwMCArMDAwMAorKysga2RlcGlt
L2xpYmtwaW1pZGVudGl0aWVzL2lkZW50aXR5LmNwcAkyMDA2LTA2LTI5IDA5OjU0OjIzLjAwMDAw
MDAwMCArMDEwMApAQCAtMjM4LDcgKzIzOCw3IEBACiAgIHJldHVybiBtSWRlbnRpdHkuaXNFbXB0
eSgpICYmIG1GdWxsTmFtZS5pc0VtcHR5KCkgJiYgbUVtYWlsQWRkci5pc0VtcHR5KCkgJiYKICAg
ICBtT3JnYW5pemF0aW9uLmlzRW1wdHkoKSAmJiBtUmVwbHlUb0FkZHIuaXNFbXB0eSgpICYmIG1C
Y2MuaXNFbXB0eSgpICYmCiAgICAgbVZDYXJkRmlsZS5pc0VtcHR5KCkgJiYKLSAgICBtRmNjLmlz
RW1wdHkoKSAmJiBtRHJhZnRzLmlzRW1wdHkoKSAmJgorICAgIG1GY2MuaXNFbXB0eSgpICYmIG1E
cmFmdHMuaXNFbXB0eSgpICYmIG1UZW1wbGF0ZXMuaXNFbXB0eSgpICYmCiAgICAgbVBHUEVuY3J5
cHRpb25LZXkuaXNFbXB0eSgpICYmIG1QR1BTaWduaW5nS2V5LmlzRW1wdHkoKSAmJgogICAgIG1T
TUlNRUVuY3J5cHRpb25LZXkuaXNFbXB0eSgpICYmIG1TTUlNRVNpZ25pbmdLZXkuaXNFbXB0eSgp
ICYmCiAgICAgbVRyYW5zcG9ydC5pc0VtcHR5KCkgJiYgbURpY3Rpb25hcnkuaXNFbXB0eSgpICYm
CkBAIC0yNTksNyArMjU5LDggQEAKICAgICAgIG1TTUlNRUVuY3J5cHRpb25LZXkgPT0gb3RoZXIu
bVNNSU1FRW5jcnlwdGlvbktleSAmJgogICAgICAgbVNNSU1FU2lnbmluZ0tleSA9PSBvdGhlci5t
U01JTUVTaWduaW5nS2V5ICYmCiAgICAgICBtUHJlZmVycmVkQ3J5cHRvTWVzc2FnZUZvcm1hdCA9
PSBvdGhlci5tUHJlZmVycmVkQ3J5cHRvTWVzc2FnZUZvcm1hdCAmJgotICAgICAgbURyYWZ0cyA9
PSBvdGhlci5tRHJhZnRzICYmIG1UcmFuc3BvcnQgPT0gb3RoZXIubVRyYW5zcG9ydCAmJgorICAg
ICAgbURyYWZ0cyA9PSBvdGhlci5tRHJhZnRzICYmIG1UZW1wbGF0ZXM9PW90aGVyLm1UZW1wbGF0
ZXMgJiYKKyAgICAgIG1UcmFuc3BvcnQgPT0gb3RoZXIubVRyYW5zcG9ydCAmJgogICAgICAgbURp
Y3Rpb25hcnkgPT0gb3RoZXIubURpY3Rpb25hcnkgJiYgbVNpZ25hdHVyZSA9PSBvdGhlci5tU2ln
bmF0dXJlICYmCiAgICAgICBtWEZhY2UgPT0gb3RoZXIubVhGYWNlICYmIG1YRmFjZUVuYWJsZWQg
PT0gb3RoZXIubVhGYWNlRW5hYmxlZDsKIApAQCAtMjgxLDYgKzI4Miw3IEBACiAgIGlmICggbVNN
SU1FU2lnbmluZ0tleSAhPSBvdGhlci5tU01JTUVTaWduaW5nS2V5ICkga2REZWJ1ZygpIDw8ICJt
U01JTUVTaWduaW5nS2V5IGRpZmZlcnMgOiAiIDw8IG1TTUlNRVNpZ25pbmdLZXkgPDwgIiAhPSAi
IDw8IG90aGVyLm1TTUlNRVNpZ25pbmdLZXkgPDwgZW5kbDsKICAgaWYgKCBtUHJlZmVycmVkQ3J5
cHRvTWVzc2FnZUZvcm1hdCAhPSBvdGhlci5tUHJlZmVycmVkQ3J5cHRvTWVzc2FnZUZvcm1hdCAp
IGtkRGVidWcoKSA8PCAibVByZWZlcnJlZENyeXB0b01lc3NhZ2VGb3JtYXQgZGlmZmVycyA6ICIg
PDwgbVByZWZlcnJlZENyeXB0b01lc3NhZ2VGb3JtYXQgPDwgIiAhPSAiIDw8IG90aGVyLm1QcmVm
ZXJyZWRDcnlwdG9NZXNzYWdlRm9ybWF0IDw8IGVuZGw7CiAgIGlmICggbURyYWZ0cyAhPSBvdGhl
ci5tRHJhZnRzICkga2REZWJ1ZygpIDw8ICJtRHJhZnRzIGRpZmZlcnMgOiAiIDw8IG1EcmFmdHMg
PDwgIiAhPSAiIDw8IG90aGVyLm1EcmFmdHMgPDwgZW5kbDsKKyAgaWYgKCBtVGVtcGxhdGVzICE9
IG90aGVyLm1UZW1wbGF0ZXMgKSBrZERlYnVnKCkgPDwgIm1UZW1wbGF0ZXMgZGlmZmVycyA6ICIg
PDwgbVRlbXBsYXRlcyA8PCAiICE9ICIgPDwgb3RoZXIubVRlbXBsYXRlcyA8PCBlbmRsOwogICBp
ZiAoIG1UcmFuc3BvcnQgIT0gb3RoZXIubVRyYW5zcG9ydCApIGtkRGVidWcoKSA8PCAibVRyYW5z
cG9ydCBkaWZmZXJzIDogIiA8PCBtVHJhbnNwb3J0IDw8ICIgIT0gIiA8PCBvdGhlci5tVHJhbnNw
b3J0IDw8IGVuZGw7CiAgIGlmICggbURpY3Rpb25hcnkgIT0gb3RoZXIubURpY3Rpb25hcnkgKSBr
ZERlYnVnKCkgPDwgIm1EaWN0aW9uYXJ5IGRpZmZlcnMgOiAiIDw8IG1EaWN0aW9uYXJ5IDw8ICIg
IT0gIiA8PCBvdGhlci5tRGljdGlvbmFyeSA8PCBlbmRsOwogICBpZiAoICEgKCBtU2lnbmF0dXJl
ID09IG90aGVyLm1TaWduYXR1cmUgKSApIGtkRGVidWcoKSA8PCAibVNpZ25hdHVyZSBkaWZmZXJz
IiA8PCBlbmRsOwpAQCAtMjk3LDcgKzI5OSw4IEBACiAgICAgLy8gVXNpbmcgIiIgaW5zdGVhZCBv
ZiBudWxsIHRvIG1ha2Ugb3BlcmF0b3I9PSgpIG5vdCBmYWlsCiAgICAgLy8gKHJlYWRDb25maWcg
cmV0dXJucyAiIikKICAgICBtQmNjKCAiIiApLCBtVkNhcmRGaWxlKCAiIiApLCBtUEdQRW5jcnlw
dGlvbktleSggIiIgKSwgbVBHUFNpZ25pbmdLZXkoICIiICksCi0gICAgbVNNSU1FRW5jcnlwdGlv
bktleSggIiIgKSwgbVNNSU1FU2lnbmluZ0tleSggIiIgKSwgbUZjYyggIiIgKSwgbURyYWZ0cygg
IiIgKSwgbVRyYW5zcG9ydCggIiIgKSwKKyAgICBtU01JTUVFbmNyeXB0aW9uS2V5KCAiIiApLCBt
U01JTUVTaWduaW5nS2V5KCAiIiApLCBtRmNjKCAiIiApLAorICAgIG1EcmFmdHMoICIiICksIG1U
ZW1wbGF0ZXMoICIiICksIG1UcmFuc3BvcnQoICIiICksCiAgICAgbURpY3Rpb25hcnkoICIiICks
CiAgICAgbVhGYWNlKCAiIiApLCBtWEZhY2VFbmFibGVkKCBmYWxzZSApLAogICAgIG1Jc0RlZmF1
bHQoIGZhbHNlICksCkBAIC0zMzIsNiArMzM1LDkgQEAKICAgbURyYWZ0cyA9IGNvbmZpZy0+cmVh
ZEVudHJ5KCJEcmFmdHMiLCAiZHJhZnRzIik7CiAgIGlmKCBtRHJhZnRzLmlzRW1wdHkoKSApCiAg
ICAgbURyYWZ0cyA9ICJkcmFmdHMiOworICBtVGVtcGxhdGVzID0gY29uZmlnLT5yZWFkRW50cnko
IlRlbXBsYXRlcyIsICJ0ZW1wbGF0ZXMiKTsKKyAgaWYoIG1UZW1wbGF0ZXMuaXNFbXB0eSgpICkK
KyAgICBtVGVtcGxhdGVzID0gInRlbXBsYXRlcyI7CiAgIG1UcmFuc3BvcnQgPSBjb25maWctPnJl
YWRFbnRyeSgiVHJhbnNwb3J0Iik7CiAgIG1EaWN0aW9uYXJ5ID0gY29uZmlnLT5yZWFkRW50cnko
ICJEaWN0aW9uYXJ5IiApOwogICBtWEZhY2UgPSBjb25maWctPnJlYWRFbnRyeSggIlgtRmFjZSIg
KTsKQEAgLTM2Miw2ICszNjgsNyBAQAogICBjb25maWctPndyaXRlRW50cnkoIlRyYW5zcG9ydCIs
IG1UcmFuc3BvcnQpOwogICBjb25maWctPndyaXRlRW50cnkoIkZjYyIsIG1GY2MpOwogICBjb25m
aWctPndyaXRlRW50cnkoIkRyYWZ0cyIsIG1EcmFmdHMpOworICBjb25maWctPndyaXRlRW50cnko
IlRlbXBsYXRlcyIsIG1UZW1wbGF0ZXMpOwogICBjb25maWctPndyaXRlRW50cnkoICJEaWN0aW9u
YXJ5IiwgbURpY3Rpb25hcnkgKTsKICAgY29uZmlnLT53cml0ZUVudHJ5KCAiWC1GYWNlIiwgbVhG
YWNlICk7CiAgIGNvbmZpZy0+d3JpdGVFbnRyeSggIlgtRmFjZUVuYWJsZWQiLCBtWEZhY2VFbmFi
bGVkICk7CkBAIC0zODUsNiArMzkyLDcgQEAKIAkJPDwgaS50cmFuc3BvcnQoKQogCQk8PCBpLmZj
YygpCiAJCTw8IGkuZHJhZnRzKCkKKwkJPDwgaS50ZW1wbGF0ZXMoKQogCQk8PCBpLm1TaWduYXR1
cmUKICAgICAgICAgICAgICAgICA8PCBpLmRpY3Rpb25hcnkoKQogICAgICAgICAgICAgICAgIDw8
IGkueGZhY2UoKQpAQCAtNDA5LDYgKzQxNyw3IEBACiAJCT4+IGkubVRyYW5zcG9ydAogCQk+PiBp
Lm1GY2MKIAkJPj4gaS5tRHJhZnRzCisJCT4+IGkubVRlbXBsYXRlcwogCQk+PiBpLm1TaWduYXR1
cmUKICAgICAgICAgICAgICAgICA+PiBpLm1EaWN0aW9uYXJ5CiAgICAgICAgICAgICAgICAgPj4g
aS5tWEZhY2UKQEAgLTU2Niw2ICs1NzUsMTUgQEAKIAogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Cit2b2lkIElkZW50aXR5OjpzZXRUZW1wbGF0ZXMoY29uc3QgUVN0cmluZyAmc3RyKQoreworICBt
VGVtcGxhdGVzID0gc3RyOworICBpZiAoIG1UZW1wbGF0ZXMuaXNOdWxsKCkgKQorICAgIG1UZW1w
bGF0ZXMgPSAiIjsKK30KKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB2b2lkIElkZW50aXR5
OjpzZXREaWN0aW9uYXJ5KCBjb25zdCBRU3RyaW5nICZzdHIgKQogewogICBtRGljdGlvbmFyeSA9
IHN0cjsKLS0tIGtkZXBpbS9saWJrcGltaWRlbnRpdGllcy9pZGVudGl0eS5oLm9yaWcJMjAwNi0w
MS0xOSAxNjo1NTo1My4wMDAwMDAwMDAgKzAwMDAKKysrIGtkZXBpbS9saWJrcGltaWRlbnRpdGll
cy9pZGVudGl0eS5oCTIwMDYtMDYtMjkgMDk6NTU6MjguMDAwMDAwMDAwICswMTAwCkBAIC0yNjks
NiArMjY5LDExIEBACiAgIFFTdHJpbmcgZHJhZnRzKCkgY29uc3QgeyByZXR1cm4gbURyYWZ0czsg
fQogICB2b2lkIHNldERyYWZ0cyhjb25zdCBRU3RyaW5nJik7CiAKKyAgLyoqIFRoZSBmb2xkZXIg
d2hlcmUgdGVtcGxhdGUgbWVzc2FnZXMgZnJvbSB0aGlzIGlkZW50aXR5IHdpbGwgYmUKKyAgICAg
IHN0b3JlZCBieSBkZWZhdWx0LiAqLworICBRU3RyaW5nIHRlbXBsYXRlcygpIGNvbnN0IHsgcmV0
dXJuIG1UZW1wbGF0ZXM7IH0KKyAgdm9pZCBzZXRUZW1wbGF0ZXMoY29uc3QgUVN0cmluZyYpOwor
CiAgIC8qKiBkaWN0aW9uYXJ5IHdoaWNoIHNob3VsZCBiZSB1c2VkIGZvciBzcGVsbCBjaGVja2lu
ZyAqLwogICBRU3RyaW5nIGRpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBtRGljdGlvbmFyeTsg
fQogICB2b2lkIHNldERpY3Rpb25hcnkoIGNvbnN0IFFTdHJpbmcmICk7CkBAIC0yOTIsNyArMjk3
LDcgQEAKICAgUVN0cmluZyBtQmNjOwogICBRU3RyaW5nIG1WQ2FyZEZpbGU7CiAgIFFDU3RyaW5n
IG1QR1BFbmNyeXB0aW9uS2V5LCBtUEdQU2lnbmluZ0tleSwgbVNNSU1FRW5jcnlwdGlvbktleSwg
bVNNSU1FU2lnbmluZ0tleTsKLSAgUVN0cmluZyBtRmNjLCBtRHJhZnRzLCBtVHJhbnNwb3J0Owor
ICBRU3RyaW5nIG1GY2MsIG1EcmFmdHMsIG1UZW1wbGF0ZXMsIG1UcmFuc3BvcnQ7CiAgIFFTdHJp
bmcgbURpY3Rpb25hcnk7CiAgIFFTdHJpbmcgbVhGYWNlOwogICBib29sIG1YRmFjZUVuYWJsZWQ7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18135</attachid>
            <date>2006-10-16 11:26:39 +0000</date>
            <delta_ts>2006-10-16 12:32:03 +0000</delta_ts>
            <desc>Thebat-like template engine for kmail</desc>
            <filename>kmail-templates-20061016.diff</filename>
            <type>text/plain</type>
            <size>16584</size>
            <attacher name="Dmitry Morozhnikov">dmiceman</attacher>
            
              <data encoding="base64">SW5kZXg6IGttYWlsL01ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGttYWlsL01ha2VmaWxlLmFt
CShyZXZpc2lvbiA1OTU5NDkpCisrKyBrbWFpbC9NYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpA
QCAtMTI0LDcgKzEyNCw4IEBACiAgICAgICAgICAgICAgICAgbWFpbGluZ2xpc3Rwcm9wZXJ0aWVz
ZGlhbG9nLmNwcCBuZXdmb2xkZXJkaWFsb2cuY3BwIFwKICAgICAgICAgICAgICAgICBhY2NvdW50
d2l6YXJkLmNwcCB0ZXh0c291cmNlLmNwcCBcCiAgICAgICAgICAgICAgICAgbWFuYWdlc2lldmVz
Y3JpcHRzZGlhbG9nLmNwcCBjaGlhc211c2tleXNlbGVjdG9yLmNwcCBcCi0gICAgICAgICAgICAg
ICAgdXRpbC5jcHAKKyAgICAgICAgICAgICAgICB1dGlsLmNwcCB0ZW1wbGF0ZXNjb25maWd1cmF0
aW9uX2tmZy5rY2ZnYyB0ZW1wbGF0ZXNjb25maWd1cmF0aW9uLnVpIFwKKyAgICAgICAgICAgICAg
ICB0ZW1wbGF0ZXBhcnNlci5jcHAgdGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwuY3BwCiAKIGtt
YWlsX1NPVVJDRVMgPSBtYWluLmNwcAogCkBAIC0xOTYsNyArMTk3LDcgQEAKIAkkKFhHRVRURVhU
KSAta3RyYW5zbGF0ZSAqLmNwcCAqLmggLW8gJChwb2Rpcikva21haWwucG90CiAJcm0gLWYgdGlw
cy5jcHAKIAota2RlX2tjZmdfREFUQSA9IGttYWlsLmtjZmcgcmVwbHlwaHJhc2VzLmtjZmcgY3Vz
dG9tbWltZWhlYWRlci5rY2ZnCitrZGVfa2NmZ19EQVRBID0ga21haWwua2NmZyByZXBseXBocmFz
ZXMua2NmZyBjdXN0b21taW1laGVhZGVyLmtjZmcgdGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcu
a2NmZwogCiBET1hZR0VOX1JFRkVSRU5DRVMgPSBrZGV1aQogaW5jbHVkZSAkKHRvcF9zcmNkaXIp
L2FkbWluL0RveHlmaWxlLmFtCkluZGV4OiBrbWFpbC9rbW1lc3NhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGttYWlsL2ttbWVzc2FnZS5jcHAJKHJldmlzaW9uIDU5NTk0OSkKKysrIGttYWlsL2ttbWVz
c2FnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKIHVzaW5nIEtNYWlsOjpI
ZWFkZXJTdHJhdGVneTsKICNpbmNsdWRlICJrbWFkZHJib29rLmgiCiAjaW5jbHVkZSAia2N1cnNv
cnNhdmVyLmgiCisjaW5jbHVkZSAidGVtcGxhdGVwYXJzZXIuaCIKIAogI2luY2x1ZGUgPGxpYmtw
aW1pZGVudGl0aWVzL2lkZW50aXR5Lmg+CiAjaW5jbHVkZSA8bGlia3BpbWlkZW50aXRpZXMvaWRl
bnRpdHltYW5hZ2VyLmg+CkBAIC04NDgsNiArODQ5LDcgQEAKICAgUVN0cmluZyBzdHIsIHJlcGx5
U3RyLCBtYWlsaW5nTGlzdFN0ciwgcmVwbHlUb1N0ciwgdG9TdHI7CiAgIFFTdHJpbmdMaXN0IG1h
aWxpbmdMaXN0QWRkcmVzc2VzOwogICBRQ1N0cmluZyByZWZTdHIsIGhlYWRlck5hbWU7CisgIGJv
b2wgcmVwbHlBbGwgPSB0cnVlOwogCiAgIG1zZy0+aW5pdEZyb21NZXNzYWdlKHRoaXMpOwogCkBA
IC04ODcsNiArODg5LDcgQEAKICAgICAgIC8vIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIG1haWxpbmcg
bGlzdCwgcmVwbHkgdG8gRnJvbTogYWRkcmVzcwogICAgICAgdG9TdHIgPSBmcm9tKCk7CiAgICAg
ICByZXBseVN0ciA9IHNSZXBseVN0cjsgLy8gcmVwbHkgdG8gYXV0aG9yLCBzbyB1c2UgIk9uIC4u
LiB5b3Ugd3JvdGU6IgorICAgICAgcmVwbHlBbGwgPSBmYWxzZTsKICAgICB9CiAgICAgLy8gc3Ry
aXAgYWxsIG15IGFkZHJlc3NlcyBmcm9tIHRoZSBsaXN0IG9mIHJlY2lwaWVudHMKICAgICBRU3Ry
aW5nTGlzdCByZWNpcGllbnRzID0gS1BJTTo6c3BsaXRFbWFpbEFkZHJMaXN0KCB0b1N0ciApOwpA
QCAtMTAxNiw2ICsxMDE5LDcgQEAKICAgICAgIHRvU3RyID0gZnJvbSgpOwogICAgIH0KICAgICBy
ZXBseVN0ciA9IHNSZXBseVN0cjsgLy8gcmVwbHkgdG8gYXV0aG9yLCBzbyB1c2UgIk9uIC4uLiB5
b3Ugd3JvdGU6IgorICAgIHJlcGx5QWxsID0gZmFsc2U7CiAgICAgYnJlYWs7CiAgIH0KICAgY2Fz
ZSBLTWFpbDo6UmVwbHlOb25lIDogewpAQCAtMTAzMSwxOCArMTAzNSwyMiBAQAogICAvL0luLVJl
cGx5LVRvID0gb3JpZ2luYWwgbXNnLWlkCiAgIG1zZy0+c2V0UmVwbHlUb0lkKG1zZ0lkKCkpOwog
Ci0gIGlmICghbm9RdW90ZSkgewotICAgIGlmKCBzZWxlY3Rpb25Jc0JvZHkgKXsKLSAgICAgIFFD
U3RyaW5nIGNTdHIgPSBzZWxlY3Rpb24ubGF0aW4xKCk7Ci0gICAgICBtc2ctPnNldEJvZHkoIGNT
dHIgKTsKLSAgICB9ZWxzZXsKLSAgICAgIG1zZy0+c2V0Qm9keShhc1F1b3RlZFN0cmluZyhyZXBs
eVN0ciArICJcbiIsIHNJbmRlbnRQcmVmaXhTdHIsIHNlbGVjdGlvbiwKLQkJCQkgIHNTbWFydFF1
b3RlLCBhbGxvd0RlY3J5cHRpb24pLnV0ZjgoKSk7Ci0gICAgfQotICB9CisvLyAgIGlmICghbm9R
dW90ZSkgeworLy8gICAgIGlmKCBzZWxlY3Rpb25Jc0JvZHkgKXsKKy8vICAgICAgIFFDU3RyaW5n
IGNTdHIgPSBzZWxlY3Rpb24ubGF0aW4xKCk7CisvLyAgICAgICBtc2ctPnNldEJvZHkoIGNTdHIg
KTsKKy8vICAgICB9ZWxzZXsKKy8vICAgICAgIG1zZy0+c2V0Qm9keShhc1F1b3RlZFN0cmluZyhy
ZXBseVN0ciArICJcbiIsIHNJbmRlbnRQcmVmaXhTdHIsIHNlbGVjdGlvbiwKKy8vIAkJCQkgIHNT
bWFydFF1b3RlLCBhbGxvd0RlY3J5cHRpb24pLnV0ZjgoKSk7CisvLyAgICAgfQorLy8gICB9CiAK
ICAgbXNnLT5zZXRTdWJqZWN0KCByZXBseVN1YmplY3QoKSApOwogCisgIFRlbXBsYXRlUGFyc2Vy
IHBhcnNlciggbXNnLCAocmVwbHlBbGwgPyBUZW1wbGF0ZVBhcnNlcjo6UmVwbHlBbGwgOiBUZW1w
bGF0ZVBhcnNlcjo6UmVwbHkpLCAKKyAgICBzZWxlY3Rpb24sIHNTbWFydFF1b3RlLCBub1F1b3Rl
LCBhbGxvd0RlY3J5cHRpb24sIHNlbGVjdGlvbklzQm9keSApOworICBwYXJzZXIucHJvY2Vzcygg
dGhpcyApOworCiAgIC8vIHNldFN0YXR1cyhLTU1zZ1N0YXR1c1JlcGxpZWQpOwogICBtc2ctPmxp
bmsodGhpcywgS01Nc2dTdGF0dXNSZXBsaWVkKTsKIApAQCAtMTIzNCwxMiArMTI0MiwxOCBAQAog
ICAgIG1zZy0+bU5lZWRzQXNzZW1ibHkgPSB0cnVlOwogICAgIG1zZy0+Y2xlYW51cEhlYWRlcigp
OwogICB9Ci0gIFFTdHJpbmcgc3QgPSBRU3RyaW5nOjpmcm9tVXRmOChjcmVhdGVGb3J3YXJkQm9k
eSgpKTsKLSAgUUNTdHJpbmcgZW5jb2RpbmcgPSBhdXRvRGV0ZWN0Q2hhcnNldChjaGFyc2V0KCks
IHNQcmVmQ2hhcnNldHMsIHN0KTsKKyAgLy8gUVN0cmluZyBzdCA9IFFTdHJpbmc6OmZyb21VdGY4
KGNyZWF0ZUZvcndhcmRCb2R5KCkpOworCisgIG1zZy0+c2V0U3ViamVjdCggZm9yd2FyZFN1Ympl
Y3QoKSApOworICAKKyAgVGVtcGxhdGVQYXJzZXIgcGFyc2VyKCBtc2csIFRlbXBsYXRlUGFyc2Vy
OjpGb3J3YXJkLCAKKyAgICB0aGlzLT5ib2R5KCksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl
KTsKKyAgcGFyc2VyLnByb2Nlc3MoIHRoaXMgKTsKKyAgCisgIFFDU3RyaW5nIGVuY29kaW5nID0g
YXV0b0RldGVjdENoYXJzZXQoY2hhcnNldCgpLCBzUHJlZkNoYXJzZXRzLCBtc2ctPmJvZHkoKSk7
CiAgIGlmIChlbmNvZGluZy5pc0VtcHR5KCkpIGVuY29kaW5nID0gInV0Zi04IjsKICAgbXNnLT5z
ZXRDaGFyc2V0KGVuY29kaW5nKTsKLQotICBtc2ctPnNldFN1YmplY3QoIGZvcndhcmRTdWJqZWN0
KCkgKTsKKyAgCiAgIG1zZy0+bGluayh0aGlzLCBLTU1zZ1N0YXR1c0ZvcndhcmRlZCk7CiAgIHJl
dHVybiBtc2c7CiB9CkluZGV4OiBrbWFpbC9jb25maWd1cmVkaWFsb2dfcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGttYWlsL2NvbmZpZ3VyZWRpYWxvZ19wLmgJKHJldmlzaW9uIDU5NTk0OSkKKysrIGttYWls
L2NvbmZpZ3VyZWRpYWxvZ19wLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKIGNs
YXNzIENvbXBvc2VyQ3J5cHRvQ29uZmlndXJhdGlvbjsKIGNsYXNzIFdhcm5pbmdDb25maWd1cmF0
aW9uOwogY2xhc3MgU01pbWVDb25maWd1cmF0aW9uOworY2xhc3MgVGVtcGxhdGVzQ29uZmlndXJh
dGlvbjsKIAogbmFtZXNwYWNlIEtwZ3AgewogICBjbGFzcyBDb25maWc7CkBAIC02MzIsNiArNjMz
LDIzIEBACiAgIExhbmd1YWdlSXRlbUxpc3QgbUxhbmd1YWdlTGlzdDsKIH07CiAKK2NsYXNzIENv
bXBvc2VyUGFnZVRlbXBsYXRlc1RhYiA6IHB1YmxpYyBDb25maWdNb2R1bGVUYWIgeworICBRX09C
SkVDVAorcHVibGljOgorICBDb21wb3NlclBhZ2VUZW1wbGF0ZXNUYWIoIFFXaWRnZXQgKiBwYXJl
bnQ9MCwgY29uc3QgY2hhciAqIG5hbWU9MCApOworICBRU3RyaW5nIGhlbHBBbmNob3IoKSBjb25z
dDsKKworICB2b2lkIHNhdmUoKTsKKworcHJpdmF0ZSBzbG90czoKKworcHJpdmF0ZToKKyAgdmly
dHVhbCB2b2lkIGRvTG9hZEZyb21HbG9iYWxTZXR0aW5ncygpOworCitwcml2YXRlOgorICAgIFRl
bXBsYXRlc0NvbmZpZ3VyYXRpb24qIG1XaWRnZXQ7Cit9OworCiBjbGFzcyBDb21wb3NlclBhZ2VT
dWJqZWN0VGFiIDogcHVibGljIENvbmZpZ01vZHVsZVRhYiB7CiAgIFFfT0JKRUNUCiBwdWJsaWM6
CkBAIC03MzQsNiArNzUyLDcgQEAKICAgLy8gaHJtcGYuIG1vYyBkb2Vzbid0IGxpa2UgbmVzdGVk
IGNsYXNzZXMgd2l0aCBzbG90cy9zaWduYWxzLi4uOgogICB0eXBlZGVmIENvbXBvc2VyUGFnZUdl
bmVyYWxUYWIgR2VuZXJhbFRhYjsKICAgdHlwZWRlZiBDb21wb3NlclBhZ2VQaHJhc2VzVGFiIFBo
cmFzZXNUYWI7CisgIHR5cGVkZWYgQ29tcG9zZXJQYWdlVGVtcGxhdGVzVGFiIFRlbXBsYXRlc1Rh
YjsKICAgdHlwZWRlZiBDb21wb3NlclBhZ2VTdWJqZWN0VGFiIFN1YmplY3RUYWI7CiAgIHR5cGVk
ZWYgQ29tcG9zZXJQYWdlQ2hhcnNldFRhYiBDaGFyc2V0VGFiOwogICB0eXBlZGVmIENvbXBvc2Vy
UGFnZUhlYWRlcnNUYWIgSGVhZGVyc1RhYjsKQEAgLTc0Miw2ICs3NjEsNyBAQAogcHJpdmF0ZToK
ICAgR2VuZXJhbFRhYiAgKm1HZW5lcmFsVGFiOwogICBQaHJhc2VzVGFiICAqbVBocmFzZXNUYWI7
CisgIFRlbXBsYXRlc1RhYiAgKm1UZW1wbGF0ZXNUYWI7CiAgIFN1YmplY3RUYWIgICptU3ViamVj
dFRhYjsKICAgQ2hhcnNldFRhYiAgKm1DaGFyc2V0VGFiOwogICBIZWFkZXJzVGFiICAqbUhlYWRl
cnNUYWI7CkluZGV4OiBrbWFpbC9rbWNvbW1hbmRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC9r
bWNvbW1hbmRzLmNwcAkocmV2aXNpb24gNTk1OTQ5KQorKysga21haWwva21jb21tYW5kcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksNyBAQAogI2luY2x1ZGUgInJlZGlyZWN0ZGlh
bG9nLmgiCiB1c2luZyBLTWFpbDo6UmVkaXJlY3REaWFsb2c7CiAjaW5jbHVkZSAidXRpbC5oIgor
I2luY2x1ZGUgInRlbXBsYXRlcGFyc2VyLmgiCiAKICNpbmNsdWRlICJicm9hZGNhc3RzdGF0dXMu
aCIKICNpbmNsdWRlICJnbG9iYWxzZXR0aW5ncy5oIgpAQCAtMTE4NSw3ICsxMTg2LDcgQEAKICAg
ICB7CiAgICAgICBLTWFpbDo6Q29tcG9zZXIgKiB3aW4gPSBLTWFpbDo6bWFrZUNvbXBvc2VyKCBm
d2RNc2csIGlkICk7CiAgICAgICB3aW4tPnNldENoYXJzZXQoIGZ3ZE1zZy0+Y29kZWMoKS0+bWlt
ZU5hbWUoKSwgdHJ1ZSApOwotICAgICAgd2luLT5zZXRCb2R5KCBRU3RyaW5nOjpmcm9tVXRmOCgg
bXNnLT5jcmVhdGVGb3J3YXJkQm9keSgpICkgKTsKKyAgICAgIC8vIHdpbi0+c2V0Qm9keSggUVN0
cmluZzo6ZnJvbVV0ZjgoIG1zZy0+Y3JlYXRlRm9yd2FyZEJvZHkoKSApICk7CiAgICAgICB3aW4t
PnNob3coKTsKICAgICB9CiAgIH0KSW5kZXg6IGttYWlsL2ttYWlsLmtjZmcKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga21haWwva21haWwua2NmZwkocmV2aXNpb24gNTk1OTQ5KQorKysga21haWwva21haWwua2Nm
Zwkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDggQEAKICAgICAgIGh0dHA6Ly93d3cua2RlLm9y
Zy9zdGFuZGFyZHMva2NmZy8xLjAva2NmZy54c2QiID4KICAgPGluY2x1ZGU+a21nbG9iYWwuaDwv
aW5jbHVkZT4KICAgPGluY2x1ZGU+cXRleHRjb2RlYy5oPC9pbmNsdWRlPgorICA8aW5jbHVkZT50
ZW1wbGF0ZXNjb25maWd1cmF0aW9uLmg8L2luY2x1ZGU+CisgIDxpbmNsdWRlPnRlbXBsYXRlc2Nv
bmZpZ3VyYXRpb25pbXBsLmg8L2luY2x1ZGU+CiAgIDxrY2ZnZmlsZSBuYW1lPSJrbWFpbHJjIi8+
CiAgICAgPGdyb3VwIG5hbWU9IkJlaGF2aW91ciI+CiAgICAgICA8ZW50cnkgbmFtZT0iRGVsYXll
ZE1hcmtBc1JlYWQiICB0eXBlPSJCb29sIj4KQEAgLTQ1MSw0ICs0NTMsMzIgQEAKICAgICAgIDwv
ZW50cnk+CiAgICAgPC9ncm91cD4KIAorICA8Z3JvdXAgbmFtZT0iR2xvYmFsVGVtcGxhdGVzIj4K
KyAgICA8ZW50cnkgbmFtZT0iVGVtcGxhdGVOZXdNZXNzYWdlIiB0eXBlPSJTdHJpbmciIGtleT0i
VGVtcGxhdGVOZXdNZXNzYWdlIj4KKyAgICAgIDxsYWJlbD5NZXNzYWdlIHRlbXBsYXRlIGZvciBu
ZXcgbWVzc2FnZTwvbGFiZWw+CisgICAgICA8d2hhdHN0aGlzPjwvd2hhdHN0aGlzPgorICAgICAg
PGRlZmF1bHQgY29kZT0idHJ1ZSI+VGVtcGxhdGVzQ29uZmlndXJhdGlvbjo6ZGVmYXVsdE5ld01l
c3NhZ2UoKTwvZGVmYXVsdD4KKyAgICA8L2VudHJ5PgorICAgIDxlbnRyeSBuYW1lPSJUZW1wbGF0
ZVJlcGx5IiB0eXBlPSJTdHJpbmciIGtleT0iVGVtcGxhdGVSZXBseSI+CisgICAgICA8bGFiZWw+
TWVzc2FnZSB0ZW1wbGF0ZSBmb3IgcmVwbHk8L2xhYmVsPgorICAgICAgPHdoYXRzdGhpcz48L3do
YXRzdGhpcz4KKyAgICAgIDxkZWZhdWx0IGNvZGU9InRydWUiPlRlbXBsYXRlc0NvbmZpZ3VyYXRp
b246OmRlZmF1bHRSZXBseSgpPC9kZWZhdWx0PgorICAgIDwvZW50cnk+CisgICAgPGVudHJ5IG5h
bWU9IlRlbXBsYXRlUmVwbHlBbGwiIHR5cGU9IlN0cmluZyIga2V5PSJUZW1wbGF0ZVJlcGx5QWxs
Ij4KKyAgICAgIDxsYWJlbD5NZXNzYWdlIHRlbXBsYXRlIGZvciByZXBseSB0byBhbGw8L2xhYmVs
PgorICAgICAgPHdoYXRzdGhpcz48L3doYXRzdGhpcz4KKyAgICAgIDxkZWZhdWx0IGNvZGU9InRy
dWUiPlRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OmRlZmF1bHRSZXBseUFsbCgpPC9kZWZhdWx0Pgor
ICAgIDwvZW50cnk+CisgICAgPGVudHJ5IG5hbWU9IlRlbXBsYXRlRm9yd2FyZCIgdHlwZT0iU3Ry
aW5nIiBrZXk9IlRlbXBsYXRlRm9yd2FyZCI+CisgICAgICA8bGFiZWw+TWVzc2FnZSB0ZW1wbGF0
ZSBmb3IgZm9yd2FyZDwvbGFiZWw+CisgICAgICA8d2hhdHN0aGlzPjwvd2hhdHN0aGlzPgorICAg
ICAgPGRlZmF1bHQgY29kZT0idHJ1ZSI+VGVtcGxhdGVzQ29uZmlndXJhdGlvbjo6ZGVmYXVsdEZv
cndhcmQoKTwvZGVmYXVsdD4KKyAgICA8L2VudHJ5PgorICAgIDxlbnRyeSBuYW1lPSJRdW90ZVN0
cmluZyIgdHlwZT0iU3RyaW5nIiBrZXk9IlF1b3RlU3RyaW5nIj4KKyAgICAgIDxsYWJlbD5RdW90
ZSBjaGFyYWN0ZXJzPC9sYWJlbD4KKyAgICAgIDx3aGF0c3RoaXM+PC93aGF0c3RoaXM+CisgICAg
ICA8ZGVmYXVsdCBjb2RlPSJ0cnVlIj5UZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpkZWZhdWx0UXVv
dGVTdHJpbmcoKTwvZGVmYXVsdD4KKyAgICA8L2VudHJ5PgorICA8L2dyb3VwPgorCiA8L2tjZmc+
CkluZGV4OiBrbWFpbC9rbW1haW53aWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGttYWlsL2ttbWFp
bndpZGdldC5jcHAJKHJldmlzaW9uIDU5NTk0OSkKKysrIGttYWlsL2ttbWFpbndpZGdldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAKIHVzaW5nIEtNYWlsOjpIZWFkZXJMaXN0
UXVpY2tTZWFyY2g7CiAjaW5jbHVkZSAia21oZWFkZXJzLmgiCiAjaW5jbHVkZSAibWFpbGluZ2xp
c3Rwcm9wZXJ0aWVzZGlhbG9nLmgiCisjaW5jbHVkZSAidGVtcGxhdGVwYXJzZXIuaCIKIAogI2lm
ICFkZWZpbmVkKE5ERUJVRykKICAgICAjaW5jbHVkZSAic2lldmVkZWJ1Z2RpYWxvZy5oIgpAQCAt
ODgxLDkgKzg4MiwxNSBAQAogCiAgIGlmICggbUZvbGRlciApIHsKICAgICAgIG1zZy0+aW5pdEhl
YWRlciggbUZvbGRlci0+aWRlbnRpdHkoKSApOworICAgICAgVGVtcGxhdGVQYXJzZXIgcGFyc2Vy
KCBtc2csIFRlbXBsYXRlUGFyc2VyOjpOZXdNZXNzYWdlLCAKKwkiIiwgZmFsc2UsIGZhbHNlLCBm
YWxzZSwgZmFsc2UgKTsKKyAgICAgIHBhcnNlci5wcm9jZXNzKCBOVUxMLCBtRm9sZGVyICk7CiAg
ICAgICB3aW4gPSBLTWFpbDo6bWFrZUNvbXBvc2VyKCBtc2csIG1Gb2xkZXItPmlkZW50aXR5KCkg
KTsKICAgfSBlbHNlIHsKICAgICAgIG1zZy0+aW5pdEhlYWRlcigpOworICAgICAgVGVtcGxhdGVQ
YXJzZXIgcGFyc2VyKCBtc2csIFRlbXBsYXRlUGFyc2VyOjpOZXdNZXNzYWdlLCAKKwkiIiwgZmFs
c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UgKTsKKyAgICAgIHBhcnNlci5wcm9jZXNzKCBOVUxMLCBO
VUxMICk7CiAgICAgICB3aW4gPSBLTWFpbDo6bWFrZUNvbXBvc2VyKCBtc2cgKTsKICAgfQogCklu
ZGV4OiBrbWFpbC9rbWZpbHRlcmFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwva21maWx0
ZXJhY3Rpb24uY3BwCShyZXZpc2lvbiA1OTU5NDkpCisrKyBrbWFpbC9rbWZpbHRlcmFjdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJmb2xkZXJyZXF1
ZXN0ZXIuaCIKIHVzaW5nIEtNYWlsOjpGb2xkZXJSZXF1ZXN0ZXI7CiAjaW5jbHVkZSAia21tc2di
YXNlLmgiCisjaW5jbHVkZSAidGVtcGxhdGVwYXJzZXIuaCIKICNpbmNsdWRlICJtZXNzYWdlcHJv
cGVydHkuaCIKICNpbmNsdWRlICJhY3Rpb25zY2hlZHVsZXIuaCIKIHVzaW5nIEtNYWlsOjpNZXNz
YWdlUHJvcGVydHk7CkBAIC0xNDUyLDE0ICsxNDUzLDE5IEBACiAKICAgbXNnLT5pbml0RnJvbU1l
c3NhZ2UoIGFNc2cgKTsKIAotICBRU3RyaW5nIHN0ID0gUVN0cmluZzo6ZnJvbVV0ZjgoIGFNc2ct
PmNyZWF0ZUZvcndhcmRCb2R5KCkgKTsKKyAgLy8gUVN0cmluZyBzdCA9IFFTdHJpbmc6OmZyb21V
dGY4KCBhTXNnLT5jcmVhdGVGb3J3YXJkQm9keSgpICk7CisgIAorICBUZW1wbGF0ZVBhcnNlciBw
YXJzZXIoIG1zZywgVGVtcGxhdGVQYXJzZXI6OkZvcndhcmQsIAorICAgIGFNc2ctPmJvZHkoKSwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICBwYXJzZXIucHJvY2VzcyggYU1zZyApOwor
ICAKICAgUUNTdHJpbmcKICAgICBlbmNvZGluZyA9IEtNTXNnQmFzZTo6YXV0b0RldGVjdENoYXJz
ZXQoIGFNc2ctPmNoYXJzZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEtNTWVzc2FnZTo6cHJlZmVycmVkQ2hhcnNldHMoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ctPmJvZHkoKSApOwogICBpZiggZW5jb2Rpbmcu
aXNFbXB0eSgpICkKICAgICBlbmNvZGluZyA9ICJ1dGYtOCI7Ci0gIFFDU3RyaW5nIHN0ciA9IEtN
TXNnQmFzZTo6Y29kZWNGb3JOYW1lKCBlbmNvZGluZyApLT5mcm9tVW5pY29kZSggc3QgKTsKKyAg
UUNTdHJpbmcgc3RyID0gS01Nc2dCYXNlOjpjb2RlY0Zvck5hbWUoIGVuY29kaW5nICktPmZyb21V
bmljb2RlKCBtc2ctPmJvZHkoKSApOwogCiAgIG1zZy0+c2V0Q2hhcnNldCggZW5jb2RpbmcgKTsK
ICAgbXNnLT5zZXRUbyggbVBhcmFtZXRlciApOwpJbmRleDoga21haWwva21mb2xkZXJkaWEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGttYWlsL2ttZm9sZGVyZGlhLmNwcAkocmV2aXNpb24gNTk1OTQ5KQor
Kysga21haWwva21mb2xkZXJkaWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBA
CiAjaW5jbHVkZSA8a2NvbmZpZy5oPgogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGts
aXN0dmlldy5oPgorI2luY2x1ZGUgPGtwdXNoYnV0dG9uLmg+CiAKICNpbmNsdWRlIDxxY2hlY2ti
b3guaD4KICNpbmNsdWRlIDxxbGF5b3V0Lmg+CkBAIC02OSw3ICs3MCwxMSBAQAogI2luY2x1ZGUg
PGFzc2VydC5oPgogI2luY2x1ZGUgPHFoYnV0dG9uZ3JvdXAuaD4KICNpbmNsdWRlIDxxcmFkaW9i
dXR0b24uaD4KKyNpbmNsdWRlIDxxdGV4dGVkaXQuaD4KIAorI2luY2x1ZGUgInRlbXBsYXRlc2Nv
bmZpZ3VyYXRpb25pbXBsLmgiCisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcu
aCIKKwogI2luY2x1ZGUgImttZm9sZGVyZGlhLm1vYyIKIAogdXNpbmcgbmFtZXNwYWNlIEtNYWls
OwpAQCAtMTE1LDYgKzEyMCw5IEBACiAgIGJveCA9IGFkZFZCb3hQYWdlKCBpMThuKCJHZW5lcmFs
IikgKTsKICAgdGFiID0gbmV3IEZvbGRlckRpYUdlbmVyYWxUYWIoIHRoaXMsIGFOYW1lLCBib3gg
KTsKICAgYWRkVGFiKCB0YWIgKTsKKyAgYm94ID0gYWRkVkJveFBhZ2UoIGkxOG4oIlRlbXBsYXRl
cyIpICk7CisgIHRhYiA9IG5ldyBGb2xkZXJEaWFUZW1wbGF0ZXNUYWIoIHRoaXMsIGFOYW1lLCBi
b3ggKTsKKyAgYWRkVGFiKCB0YWIgKTsKIAogICBLTUZvbGRlciogcmVmRm9sZGVyID0gbUZvbGRl
ciA/IG1Gb2xkZXIgOiBtUGFyZW50Rm9sZGVyOwogICBLTUZvbGRlclR5cGUgZm9sZGVyVHlwZSA9
IHJlZkZvbGRlciA/IHJlZkZvbGRlci0+Zm9sZGVyVHlwZSgpIDogS01Gb2xkZXJUeXBlVW5rbm93
bjsKQEAgLTY0NywzICs2NTUsODUgQEAKIHsKICAgICBtVW5yZWFkSWNvbkJ1dHRvbi0+c2V0SWNv
biggaWNvbiApOwogfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0tNYWlsOjpGb2xkZXJEaWFU
ZW1wbGF0ZXNUYWI6OkZvbGRlckRpYVRlbXBsYXRlc1RhYiggS01Gb2xkZXJEaWFsb2cqIGRsZywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBR
U3RyaW5nJiBhTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0IGNoYXIqIG5hbWUgKQorICA6IEZvbGRlckRp
YVRhYiggcGFyZW50LCBuYW1lICksIG1EbGcoIGRsZyApCit7CisKKyAgbUlzTG9jYWxTeXN0ZW1G
b2xkZXIgPSBtRGxnLT5mb2xkZXIoKS0+aXNTeXN0ZW1Gb2xkZXIoKSAmJgorICAgICAgIG1EbGct
PmZvbGRlcigpLT5mb2xkZXJUeXBlKCkgIT0gS01Gb2xkZXJUeXBlSW1hcCAmJgorICAgICAgIG1E
bGctPmZvbGRlcigpLT5mb2xkZXJUeXBlKCkgIT0gS01Gb2xkZXJUeXBlQ2FjaGVkSW1hcDsKKwor
ICBRVkJveExheW91dCAqdG9wTGF5b3V0ID0gbmV3IFFWQm94TGF5b3V0KCB0aGlzLCAwLCBLRGlh
bG9nOjpzcGFjaW5nSGludCgpICk7CisgIAorICBtQ3VzdG9tID0gbmV3IFFDaGVja0JveCggaTE4
bigiJlVzZSBjdXN0b20gbWVzc2FnZSB0ZW1wbGF0ZXMiKSwgdGhpcyk7CisgIHRvcExheW91dC0+
YWRkV2lkZ2V0KCBtQ3VzdG9tICk7CisgIAorICBtV2lkZ2V0ID0gbmV3IFRlbXBsYXRlc0NvbmZp
Z3VyYXRpb24oIHRoaXMgKTsKKyAgbVdpZGdldC0+c2V0RW5hYmxlZCggZmFsc2UgKTsKKyAgdG9w
TGF5b3V0LT5hZGRXaWRnZXQoIG1XaWRnZXQgKTsKKyAgCisgIFFIQm94TGF5b3V0ICpidG5zID0g
bmV3IFFIQm94TGF5b3V0KCB0b3BMYXlvdXQsIEtEaWFsb2c6OnNwYWNpbmdIaW50KCkgKTsKKyAg
bUNvcHlHbG9iYWwgPSBuZXcgS1B1c2hCdXR0b24oIGkxOG4oIiZDb3B5IGdsb2JhbCB0ZW1wbGF0
ZXMiKSwgdGhpcyk7CisgIG1Db3B5R2xvYmFsLT5zZXRFbmFibGVkKCBmYWxzZSApOworICBidG5z
LT5hZGRXaWRnZXQoIG1Db3B5R2xvYmFsICk7CisgIAorICB0b3BMYXlvdXQtPmFkZFN0cmV0Y2go
IDIwMCApOyAvLyB3ZSBhcmUgbW9yZSBpbXBvcnRhbnQgdGhhbiBnZW5lcmFsIHRhYgorCisgIGNv
bm5lY3QoIG1DdXN0b20sIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwKKyAgICAgICAgbVdpZGdldCwg
U0xPVChzZXRFbmFibGVkKGJvb2wpKSApOworICBjb25uZWN0KCBtQ3VzdG9tLCBTSUdOQUwodG9n
Z2xlZChib29sKSksCisgICAgICAgIG1Db3B5R2xvYmFsLCBTTE9UKHNldEVuYWJsZWQoYm9vbCkp
ICk7CisgIAorICBjb25uZWN0KCBtQ29weUdsb2JhbCwgU0lHTkFMKGNsaWNrZWQoKSksCisgICAg
ICAgIHRoaXMsIFNMT1Qoc2xvdENvcHlHbG9iYWwoKSkgKTsKKworICBpbml0aWFsaXplV2l0aFZh
bHVlc0Zyb21Gb2xkZXIoIG1EbGctPmZvbGRlcigpICk7CisKKyAgY29ubmVjdCggbVdpZGdldCwg
U0lHTkFMKCBjaGFuZ2VkKCkgKSwKKyAgICAgICAgICAgdGhpcywgU0xPVCggc2xvdEVtaXRDaGFu
Z2VkKCB2b2lkICkgKSApOworfQorCit2b2lkIEZvbGRlckRpYVRlbXBsYXRlc1RhYjo6bG9hZCgp
Cit7CisgIAorfQorCit2b2lkIEZvbGRlckRpYVRlbXBsYXRlc1RhYjo6aW5pdGlhbGl6ZVdpdGhW
YWx1ZXNGcm9tRm9sZGVyKCBLTUZvbGRlciogZm9sZGVyICkgeworICBpZiAoICFmb2xkZXIgKQor
ICAgIHJldHVybjsKKworICBRU3RyaW5nIGZpZCA9IGZvbGRlci0+aWRTdHJpbmcoKTsKKyAgCisg
IFRlbXBsYXRlcyB0KGZpZCk7CisKKyAgbUN1c3RvbS0+c2V0Q2hlY2tlZCh0LnVzZUN1c3RvbVRl
bXBsYXRlcygpKTsKKyAgCisgIG1XaWRnZXQtPmxvYWRGcm9tRm9sZGVyKGZpZCk7Cit9CisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Jvb2wgRm9sZGVyRGlhVGVtcGxhdGVzVGFiOjpzYXZlKCkK
K3sKKyAgS01Gb2xkZXIqIGZvbGRlciA9IG1EbGctPmZvbGRlcigpOworICAKKyAgUVN0cmluZyBm
aWQgPSBmb2xkZXItPmlkU3RyaW5nKCk7CisgIFRlbXBsYXRlcyB0KGZpZCk7CisgIAorICBrZERl
YnVnKCkgPDwgInVzZSBjdXN0b20gdGVtcGxhdGVzIGZvciBmb2xkZXIgIiA8PCBmaWQgPDwgIjog
IiA8PCBtQ3VzdG9tLT5pc0NoZWNrZWQoKSA8PCBlbmRsOworICB0LnNldFVzZUN1c3RvbVRlbXBs
YXRlcyhtQ3VzdG9tLT5pc0NoZWNrZWQoKSk7CisgIAorICBtV2lkZ2V0LT5zYXZlVG9Gb2xkZXIo
ZmlkKTsKKyAgCisgIHJldHVybiB0cnVlOworfQorCisKK3ZvaWQgRm9sZGVyRGlhVGVtcGxhdGVz
VGFiOjpzbG90RW1pdENoYW5nZWQoKSB7fTsKKwordm9pZCBGb2xkZXJEaWFUZW1wbGF0ZXNUYWI6
OnNsb3RDb3B5R2xvYmFsKCkgeworICBtV2lkZ2V0LT5sb2FkRnJvbUdsb2JhbCgpOworfTsKSW5k
ZXg6IGttYWlsL2NvbmZpZ3VyZWRpYWxvZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwvY29uZmln
dXJlZGlhbG9nLmNwcAkocmV2aXNpb24gNTk1OTQ5KQorKysga21haWwvY29uZmlndXJlZGlhbG9n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiZ2xvYmFs
c2V0dGluZ3MuaCIKICNpbmNsdWRlICJyZXBseXBocmFzZXMuaCIKKyNpbmNsdWRlICJ0ZW1wbGF0
ZXNjb25maWd1cmF0aW9uX2tmZy5oIgogCiAvLyBvdGhlciBLTWFpbCBoZWFkZXJzOgogI2luY2x1
ZGUgImtta2VybmVsLmgiCkBAIC00OSw2ICs1MCw3IEBACiAjaW5jbHVkZSA8Y29tcG9zZXJjcnlw
dG9jb25maWd1cmF0aW9uLmg+CiAjaW5jbHVkZSA8d2FybmluZ2NvbmZpZ3VyYXRpb24uaD4KICNp
bmNsdWRlIDxzbWltZWNvbmZpZ3VyYXRpb24uaD4KKyNpbmNsdWRlICJ0ZW1wbGF0ZXNjb25maWd1
cmF0aW9uaW1wbC5oIgogI2luY2x1ZGUgImZvbGRlcnJlcXVlc3Rlci5oIgogdXNpbmcgS01haWw6
OkZvbGRlclJlcXVlc3RlcjsKICNpbmNsdWRlICJhY2NvdW50Y29tYm9ib3guaCIKQEAgLTI0NDYs
MTAgKzI0NDgsMTYgQEAKICAgLy8KICAgLy8gIlBocmFzZXMiIHRhYjoKICAgLy8KLSAgbVBocmFz
ZXNUYWIgPSBuZXcgUGhyYXNlc1RhYigpOwotICBhZGRUYWIoIG1QaHJhc2VzVGFiLCBpMThuKCIm
UGhyYXNlcyIpICk7CisgIC8vIG1QaHJhc2VzVGFiID0gbmV3IFBocmFzZXNUYWIoKTsKKyAgLy8g
YWRkVGFiKCBtUGhyYXNlc1RhYiwgaTE4bigiJlBocmFzZXMiKSApOwogCiAgIC8vCisgIC8vICJU
ZW1wbGF0ZXMiIHRhYjoKKyAgLy8KKyAgbVRlbXBsYXRlc1RhYiA9IG5ldyBUZW1wbGF0ZXNUYWIo
KTsKKyAgYWRkVGFiKCBtVGVtcGxhdGVzVGFiLCBpMThuKCImVGVtcGxhdGVzIikgKTsKKyAgCisg
IC8vCiAgIC8vICJTdWJqZWN0IiB0YWI6CiAgIC8vCiAgIG1TdWJqZWN0VGFiID0gbmV3IFN1Ympl
Y3RUYWIoKTsKQEAgLTI5MDMsNiArMjkxMSwzMSBAQAogICB9CiB9CiAKK1FTdHJpbmcgQ29tcG9z
ZXJQYWdlOjpUZW1wbGF0ZXNUYWI6OmhlbHBBbmNob3IoKSBjb25zdCB7CisgIHJldHVybiBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCJjb25maWd1cmUtY29tcG9zZXItdGVtcGxhdGVzIik7Cit9CisKK0Nv
bXBvc2VyUGFnZVRlbXBsYXRlc1RhYjo6Q29tcG9zZXJQYWdlVGVtcGxhdGVzVGFiKCBRV2lkZ2V0
ICogcGFyZW50LCBjb25zdCBjaGFyICogbmFtZSApCisgIDogQ29uZmlnTW9kdWxlVGFiICggcGFy
ZW50LCBuYW1lICkKK3sKKyAgUVZCb3hMYXlvdXQqIHZsYXkgPSBuZXcgUVZCb3hMYXlvdXQoIHRo
aXMsIDAsIDAgKTsKKworICBtV2lkZ2V0ID0gbmV3IFRlbXBsYXRlc0NvbmZpZ3VyYXRpb24oIHRo
aXMgKTsKKyAgdmxheS0+YWRkV2lkZ2V0KCBtV2lkZ2V0ICk7CisgIHZsYXktPmFkZFN0cmV0Y2go
MTAwKTsKKworICBjb25uZWN0KCBtV2lkZ2V0LCBTSUdOQUwoIGNoYW5nZWQoKSApLAorICAgICAg
ICAgICB0aGlzLCBTTE9UKCBzbG90RW1pdENoYW5nZWQoIHZvaWQgKSApICk7Cit9CisKK3ZvaWQg
Q29tcG9zZXJQYWdlOjpUZW1wbGF0ZXNUYWI6OmRvTG9hZEZyb21HbG9iYWxTZXR0aW5ncygpIHsK
KyAgICBtV2lkZ2V0LT5sb2FkRnJvbUdsb2JhbCgpOworfQorCit2b2lkIENvbXBvc2VyUGFnZTo6
VGVtcGxhdGVzVGFiOjpzYXZlKCkgeworICAgIG1XaWRnZXQtPnNhdmVUb0dsb2JhbCgpOworfQor
CiBRU3RyaW5nIENvbXBvc2VyUGFnZTo6U3ViamVjdFRhYjo6aGVscEFuY2hvcigpIGNvbnN0IHsK
ICAgcmV0dXJuIFFTdHJpbmc6OmZyb21MYXRpbjEoImNvbmZpZ3VyZS1jb21wb3Nlci1zdWJqZWN0
Iik7CiB9CkluZGV4OiBrbWFpbC9rbWZvbGRlcmRpYS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGttYWlsL2tt
Zm9sZGVyZGlhLmgJKHJldmlzaW9uIDU5NTk0OSkKKysrIGttYWlsL2ttZm9sZGVyZGlhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAKIGNsYXNzIEtNRm9sZGVyRGlhbG9nOwogY2xh
c3MgS01Gb2xkZXJUcmVlOwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFFHdWFyZGVkUHRy
OworY2xhc3MgVGVtcGxhdGVzQ29uZmlndXJhdGlvbjsKK2NsYXNzIEtQdXNoQnV0dG9uOwogCiBu
YW1lc3BhY2UgS01haWwgewogICBjbGFzcyBGb2xkZXJSZXF1ZXN0ZXI7IApAQCAtMTUwLDYgKzE1
MiwzOSBAQAogICBib29sIG1Jc0xvY2FsU3lzdGVtRm9sZGVyOwogfTsKIAorLyoqCisgKiAiVGVt
cGxhdGVzIiB0YWIgaW4gdGhlIGZvbGRlciBkaWFsb2cKKyAqIEludGVybmFsIGNsYXNzLCBvbmx5
IHVzZWQgYnkgS01Gb2xkZXJEaWFsb2cKKyAqLworY2xhc3MgRm9sZGVyRGlhVGVtcGxhdGVzVGFi
IDogcHVibGljIEZvbGRlckRpYVRhYgoreworICBRX09CSkVDVAorCitwdWJsaWM6CisgIEZvbGRl
ckRpYVRlbXBsYXRlc1RhYiggS01Gb2xkZXJEaWFsb2cqIGRsZywKKyAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUVN0cmluZyYgYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIFFXaWRn
ZXQqIHBhcmVudCwgY29uc3QgY2hhciogbmFtZSA9IDAgKTsKKworICB2aXJ0dWFsIHZvaWQgbG9h
ZCgpOworICB2aXJ0dWFsIGJvb2wgc2F2ZSgpOworCitwdWJsaWMgc2xvdHM6CisgIHZvaWQgc2xv
dEVtaXRDaGFuZ2VkKCk7IC8vIGRvIG5vdGhpbmcgZm9yIG5vdworICAKKyAgdm9pZCBzbG90Q29w
eUdsb2JhbCgpOworCitwcml2YXRlOgorICB2b2lkIGluaXRpYWxpemVXaXRoVmFsdWVzRnJvbUZv
bGRlciggS01Gb2xkZXIqIGZvbGRlciApOworCitwcml2YXRlOgorICBRQ2hlY2tCb3gqIG1DdXN0
b207CisgIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb24qIG1XaWRnZXQ7CisgIEtQdXNoQnV0dG9uKiBt
Q29weUdsb2JhbDsKKworICBLTUZvbGRlckRpYWxvZyogbURsZzsKKyAgYm9vbCBtSXNMb2NhbFN5
c3RlbUZvbGRlcjsKK307CisKIH0gLy8gZW5kIG9mIG5hbWVzcGFjZSBLTWFpbAogCiAvKioK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18137</attachid>
            <date>2006-10-16 12:32:03 +0000</date>
            <delta_ts>2006-10-18 09:07:32 +0000</delta_ts>
            <desc>Thebat-like template engine for kmail</desc>
            <filename>kmail-templates-20061016-1.diff</filename>
            <type>text/plain</type>
            <size>79768</size>
            <attacher name="Dmitry Morozhnikov">dmiceman</attacher>
            
              <data encoding="base64">SW5kZXg6IGttYWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb25fa2ZnLmtjZmdjCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGttYWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb25fa2ZnLmtjZmdjCShyZXZpc2lvbiAwKQor
Kysga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcua2NmZ2MJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNSBAQAorRmlsZT10ZW1wbGF0ZXNjb25maWd1cmF0aW9uX2tmZy5rY2ZnCitDbGFz
c05hbWU9VGVtcGxhdGVzCitNdXRhdG9ycz10cnVlCitJdGVtQWNjZXNzb3JzPXRydWUKK1NldFVz
ZXJUZXh0cz10cnVlCkluZGV4OiBrbWFpbC90ZW1wbGF0ZXBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga21haWwvdGVtcGxhdGVwYXJzZXIuY3BwCShyZXZpc2lvbiAwKQorKysga21haWwvdGVtcGxh
dGVwYXJzZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4MyBAQAorLyogICAtKi0gbW9k
ZTogQysrOyBjLWZpbGUtc3R5bGU6ICJnbnUiIC0qLQorICogICBrbWFpbDogS0RFIG1haWwgY2xp
ZW50CisgKiAgIFRoaXMgZmlsZTogQ29weXJpZ2h0IChDKSAyMDA2IERtaXRyeSBNb3JvemhuaWtv
dgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IK
KyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMg
cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5j
bHVkZSA8cXN0cmluZy5oPgorI2luY2x1ZGUgPHFkYXRldGltZS5oPgorI2luY2x1ZGUgPGtsb2Nh
bGUuaD4KKyNpbmNsdWRlIDxrY2FsZW5kYXJzeXN0ZW0uaD4KKyNpbmNsdWRlIDxrbWltZV91dGls
Lmg+CisjaW5jbHVkZSA8a2dsb2JhbC5oPgorI2luY2x1ZGUgPGtwcm9jZXNzLmg+CisjaW5jbHVk
ZSA8cXJlZ2V4cC5oPgorI2luY2x1ZGUgPHFmaWxlLmg+CisjaW5jbHVkZSA8a21lc3NhZ2Vib3gu
aD4KKyNpbmNsdWRlIDxrc2hlbGwuaD4KKyNpbmNsdWRlIDxxZmlsZWluZm8uaD4KKworI2luY2x1
ZGUgImttbWVzc2FnZS5oIgorI2luY2x1ZGUgImttbXNnYmFzZS5oIgorI2luY2x1ZGUgImttZm9s
ZGVyLmgiCisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcuaCIKKyNpbmNsdWRl
ICJnbG9iYWxzZXR0aW5nc19iYXNlLmgiCisKKyNpbmNsdWRlICJ0ZW1wbGF0ZXBhcnNlci5oIgor
CisjZGVmaW5lIFFVT1RFUkUgIlwiKC4qKVwiIgorCitUZW1wbGF0ZVBhcnNlcjo6VGVtcGxhdGVQ
YXJzZXIoS01NZXNzYWdlKiBhbXNnLCBNb2RlIGFtb2RlLCBRU3RyaW5nIGFzZWxlY3Rpb24sIAor
ICAgICAgICAgICAgYm9vbCBhc21hcnRRdW90ZSwgYm9vbCBhbm9RdW90ZSwgYm9vbCBhYWxsb3dE
ZWNyeXB0aW9uLCBib29sIGFzZWxlY3Rpb25Jc0JvZHkpIDoKKyAgICAgICAgICAgIG1vZGUoYW1v
ZGUpLCBzZWxlY3Rpb24oYXNlbGVjdGlvbiksIAorICAgICAgICAgICAgc21hcnRRdW90ZShhc21h
cnRRdW90ZSksIG5vUXVvdGUoYW5vUXVvdGUpLCAKKyAgICAgICAgICAgIGFsbG93RGVjcnlwdGlv
bihhYWxsb3dEZWNyeXB0aW9uKSwgc2VsZWN0aW9uSXNCb2R5KGFzZWxlY3Rpb25Jc0JvZHkpLCAK
KyAgICAgICAgICAgIGRlYnVnKGZhbHNlKSwgcXVvdGVTdHJpbmcoIj4gIikgeworICAgIG1zZyA9
IGFtc2c7Cit9OworCitpbnQgVGVtcGxhdGVQYXJzZXI6OnBhcnNlUXVvdGVzKFFTdHJpbmcgcHJl
Zml4LCBRU3RyaW5nIHN0ciwgUVN0cmluZyYgcXVvdGUpIHsKKyAgICBpbnQgcG9zID0gcHJlZml4
Lmxlbmd0aCgpOworICAgIGludCBsZW47CisgICAgaW50IHN0cl9sZW4gPSBzdHIubGVuZ3RoKCk7
CisgICAgUUNoYXIgcWMgPSAnIic7CisgICAgUUNoYXIgcHJldiA9IDA7CisgICAgCisgICAgcG9z
Kys7CisgICAgbGVuID0gcG9zOworICAgIAorICAgIHdoaWxlKHBvcyA8IHN0cl9sZW4pIHsKKyAg
ICAgICAgUUNoYXIgYyA9IHN0cltwb3NdOworICAgICAgICAKKyAgICAgICAgcG9zKys7CisgICAg
ICAgIGxlbisrOworICAgICAgICAKKyAgICAgICAgaWYocHJldikgeworICAgICAgICAgICAgcXVv
dGUuYXBwZW5kKGMpOworICAgICAgICAgICAgcHJldiA9IDA7CisgICAgICAgIH0gZWxzZSB7CisJ
ICAgIGlmKGMgPT0gJ1xcJykgeworCQlwcmV2ID0gYzsKKwkgICAgfSBlbHNlIGlmKGMgPT0gcWMp
IHsKKwkJYnJlYWs7CisJICAgIH0gZWxzZSB7CisJCXF1b3RlLmFwcGVuZChjKTsKKwkgICAgfTsK
Kwl9OworICAgIH07CisgICAgCisgICAgcmV0dXJuIGxlbjsKK307CisKK3ZvaWQgVGVtcGxhdGVQ
YXJzZXI6OnByb2Nlc3MoS01NZXNzYWdlKiBhb3JpZ19tc2csIEtNRm9sZGVyKiBhZm9sZGVyKSB7
CisgICAgb3JpZ19tc2cgPSBhb3JpZ19tc2c7CisgICAgZm9sZGVyID0gYWZvbGRlcjsKKyAgICBR
U3RyaW5nIHRtcGwgPSBmaW5kVGVtcGxhdGUoKTsKKyAgICBRU3RyaW5nIGJvZHk7CisgICAgaW50
IHRtcGxfbGVuID0gdG1wbC5sZW5ndGgoKTsKKyAgICAKKyAgICAvLyBrZERlYnVnKCkgPDwgIk1v
ZGUgIiA8PCBtb2RlIDw8ICIsIHRlbXBsYXRlIGZvdW5kOiAiIDw8IHRtcGwgPDwgZW5kbDsKKyAg
ICAKKyAgICBib29sIGRubCA9IGZhbHNlOworICAgIGZvcihpbnQgaSA9IDA7IGkgPCB0bXBsX2xl
bjsgKytpKSB7CisgICAgICAgIFFDaGFyIGMgPSB0bXBsW2ldOworICAgICAgICAvLyBrZERlYnVn
KCkgPDwgIk5leHQgY2hhcjogIiA8PCBjIDw8IGVuZGw7CisgICAgICAgIGlmKGMgPT0gJyUnKSB7
CisgICAgICAgICAgICBRU3RyaW5nIGNtZCA9IHRtcGwubWlkKGkgKyAxKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYoY21kLnN0YXJ0c1dpdGgoIi0iKSkgeworICAgICAgICAgICAgICAg
IC8vIGRubAorICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogLSIgPDwgZW5k
bDsKKyAgICAgICAgICAgICAgICBkbmwgPSB0cnVlOworICAgICAgICAgICAgICAgIGkgKz0gMTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJSRU09
IikpIHsKKyAgICAgICAgICAgICAgICAvLyBjb21tZW50cworICAgICAgICAgICAgICAgIGtkRGVi
dWcoKSA8PCAiQ29tbWFuZDogUkVNPSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBRU3RyaW5n
IHE7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHBhcnNlUXVvdGVzKCJSRU09IiwgY21kLCBx
KTsKKyAgICAgICAgICAgICAgICBpICs9IGxlbjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
fSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJJTlNFUlQ9IikpIHsKKyAgICAgICAgICAgICAgICAv
LyBpbnNlcnQgY29udGVudCBvZiBzcGVjaWZpZWQgZmlsZSBhcyBpcworICAgICAgICAgICAgICAg
IGtkRGVidWcoKSA8PCAiQ29tbWFuZDogSU5TRVJUPSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAg
ICBRU3RyaW5nIHE7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHBhcnNlUXVvdGVzKCJJTlNF
UlQ9IiwgY21kLCBxKTsKKyAgICAgICAgICAgICAgICBpICs9IGxlbjsKKwkJUVN0cmluZyBwYXRo
ID0gS1NoZWxsOjp0aWxkZUV4cGFuZChxKTsKKwkJUUZpbGVJbmZvIGZpbmZvKHBhdGgpOworCQlp
ZihmaW5mby5pc1JlbGF0aXZlKCkpIHsKKwkJICAgIHBhdGggPSBLU2hlbGw6OmhvbWVEaXIoIiIp
OworCQkgICAgcGF0aCArPSAiLyI7CisJCSAgICBwYXRoICs9IHE7CisJCX07CisJCVFGaWxlIGZp
bGUocGF0aCk7CisJCWlmKGZpbGUub3BlbihJT19SZWFkT25seSkpIHsKKwkJICAgIFFCeXRlQXJy
YXkgY29udGVudCA9IGZpbGUucmVhZEFsbCgpOworCQkgICAgUVN0cmluZyBzdHIgPSBRU3RyaW5n
Ojpmcm9tTG9jYWw4Qml0KGNvbnRlbnQsIGNvbnRlbnQuc2l6ZSgpKTsKKwkJICAgIGJvZHkuYXBw
ZW5kKHN0cik7CisJCX0gZWxzZSBpZihkZWJ1ZykgeworCQkgICAgS01lc3NhZ2VCb3g6OmVycm9y
KE5VTEwsIAorCQkJaTE4bigiQ2FuYHQgaW5zZXJ0IGNvbnRlbnQgZnJvbSBmaWxlICUxOiAlMiIp
LmFyZyhwYXRoKS5hcmcoZmlsZS5lcnJvclN0cmluZygpKSk7CisJCX07CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiU1lTVEVNPSIpKSB7CisgICAg
ICAgICAgICAgICAgLy8gaW5zZXJ0IGNvbnRlbnQgb2Ygc3BlY2lmaWVkIGZpbGUgYXMgaXMKKyAg
ICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IFNZU1RFTT0iIDw8IGVuZGw7Cisg
ICAgICAgICAgICAgICAgUVN0cmluZyBxOworICAgICAgICAgICAgICAgIGludCBsZW4gPSBwYXJz
ZVF1b3RlcygiU1lTVEVNPSIsIGNtZCwgcSk7CisgICAgICAgICAgICAgICAgaSArPSBsZW47CisJ
CVFTdHJpbmcgcGlwZV9jbWQgPSBxOworCQlRU3RyaW5nIHN0ciA9IHBpcGUocGlwZV9jbWQsICIi
KTsKKwkJYm9keS5hcHBlbmQoc3RyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNl
IGlmKGNtZC5zdGFydHNXaXRoKCJQVVQ9IikpIHsKKyAgICAgICAgICAgICAgICAvLyBpbnNlcnQg
Y29udGVudCBvZiBzcGVjaWZpZWQgZmlsZSBhcyBpcworICAgICAgICAgICAgICAgIGtkRGVidWco
KSA8PCAiQ29tbWFuZDogUFVUPSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBRU3RyaW5nIHE7
CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHBhcnNlUXVvdGVzKCJQVVQ9IiwgY21kLCBxKTsK
KyAgICAgICAgICAgICAgICBpICs9IGxlbjsKKwkJUVN0cmluZyBwYXRoID0gS1NoZWxsOjp0aWxk
ZUV4cGFuZChxKTsKKwkJUUZpbGVJbmZvIGZpbmZvKHBhdGgpOworCQlpZihmaW5mby5pc1JlbGF0
aXZlKCkpIHsKKwkJICAgIHBhdGggPSBLU2hlbGw6OmhvbWVEaXIoIiIpOworCQkgICAgcGF0aCAr
PSAiLyI7CisJCSAgICBwYXRoICs9IHE7CisJCX07CisJCVFGaWxlIGZpbGUocGF0aCk7CisJCWlm
KGZpbGUub3BlbihJT19SZWFkT25seSkpIHsKKwkJICAgIFFCeXRlQXJyYXkgY29udGVudCA9IGZp
bGUucmVhZEFsbCgpOworCQkgICAgYm9keS5hcHBlbmQoUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChj
b250ZW50LCBjb250ZW50LnNpemUoKSkpOworCQl9IGVsc2UgaWYoZGVidWcpIHsKKwkJICAgIEtN
ZXNzYWdlQm94OjplcnJvcihOVUxMLCAKKwkJCWkxOG4oIkNhbmB0IGluc2VydCBjb250ZW50IGZy
b20gZmlsZSAlMTogJTIiKS5hcmcocGF0aCkuYXJnKGZpbGUuZXJyb3JTdHJpbmcoKSkpOworCQl9
OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlFV
T1RFUElQRT0iKSkgeworICAgICAgICAgICAgICAgIC8vIHBpcGUgbWVzc2FnZSBib2R5IHRocm93
IGNvbW1hbmQgYW5kIGluc2VydCBpdCBhcyBxdW90YXRpb24KKyAgICAgICAgICAgICAgICBrZERl
YnVnKCkgPDwgIkNvbW1hbmQ6IFFVT1RFUElQRT0iIDw8IGVuZGw7CisgICAgICAgICAgICAgICAg
UVN0cmluZyBxOworICAgICAgICAgICAgICAgIGludCBsZW4gPSBwYXJzZVF1b3RlcygiUVVPVEVQ
SVBFPSIsIGNtZCwgcSk7CisgICAgICAgICAgICAgICAgaSArPSBsZW47CisJCVFTdHJpbmcgcGlw
ZV9jbWQgPSBxOworCQlpZihvcmlnX21zZyAmJiAhbm9RdW90ZSkgeworCQkgICAgUVN0cmluZyBz
dHIgPSBwaXBlKHBpcGVfY21kLCBzZWxlY3Rpb24pOworCQkgICAgUVN0cmluZyBxdW90ZSA9IG9y
aWdfbXNnLT5hc1F1b3RlZFN0cmluZygiIiwgcXVvdGVTdHJpbmcsIHN0ciwgc21hcnRRdW90ZSwg
YWxsb3dEZWNyeXB0aW9uKTsKKwkJICAgIGJvZHkuYXBwZW5kKHF1b3RlKTsKKwkJfTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJRVU9URSIpKSB7
CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBRVU9URSIgPDwgZW5kbDsK
KyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiUVVPVEUiKTsKKyAgICAgICAgICAgICAgICBp
ZihvcmlnX21zZyAmJiAhbm9RdW90ZSkgeworCQkgICAgUVN0cmluZyBxdW90ZSA9IG9yaWdfbXNn
LT5hc1F1b3RlZFN0cmluZygiIiwgcXVvdGVTdHJpbmcsIHNlbGVjdGlvbiwgc21hcnRRdW90ZSwg
YWxsb3dEZWNyeXB0aW9uKTsKKwkJICAgIGJvZHkuYXBwZW5kKHF1b3RlKTsKKwkJfTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJRSEVBREVSUyIp
KSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBRSEVBREVSUyIgPDwg
ZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiUUhFQURFUlMiKTsKKyAgICAgICAg
ICAgICAgICBpZihvcmlnX21zZyAmJiAhbm9RdW90ZSkgeworCQkgICAgUVN0cmluZyBxdW90ZSA9
IG9yaWdfbXNnLT5hc1F1b3RlZFN0cmluZygiIiwgcXVvdGVTdHJpbmcsIG9yaWdfbXNnLT5oZWFk
ZXJBc1NlbmRhYmxlU3RyaW5nKCksIHNtYXJ0UXVvdGUsIGZhbHNlKTsKKwkJICAgIGJvZHkuYXBw
ZW5kKHF1b3RlKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNt
ZC5zdGFydHNXaXRoKCJIRUFERVJTIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwg
IkNvbW1hbmQ6IEhFQURFUlMiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4o
IkhFQURFUlMiKTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21zZyAmJiAhbm9RdW90ZSkgewor
CQkgICAgUVN0cmluZyBzdHIgPSBvcmlnX21zZy0+aGVhZGVyQXNTZW5kYWJsZVN0cmluZygpOwor
CQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
fSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJURVhUUElQRT0iKSkgeworICAgICAgICAgICAgICAg
IC8vIHBpcGUgbWVzc2FnZSBib2R5IHRocm93IGNvbW1hbmQgYW5kIGluc2VydCBpdCBhcyBpcwor
ICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogVEVYVFBJUEU9IiA8PCBlbmRs
OworICAgICAgICAgICAgICAgIFFTdHJpbmcgcTsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0g
cGFyc2VRdW90ZXMoIlRFWFRQSVBFPSIsIGNtZCwgcSk7CisgICAgICAgICAgICAgICAgaSArPSBs
ZW47CisJCVFTdHJpbmcgcGlwZV9jbWQgPSBxOworCQlpZihvcmlnX21zZykgeworCQkgICAgUVN0
cmluZyBzdHIgPSBwaXBlKHBpcGVfY21kLCBvcmlnX21zZy0+Ym9keSgpKTsKKwkJICAgIGJvZHku
YXBwZW5kKHN0cik7CisJCX07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihj
bWQuc3RhcnRzV2l0aCgiTVNHUElQRT0iKSkgeworICAgICAgICAgICAgICAgIC8vIHBpcGUgZnVs
bCBtZXNzYWdlIHRocm93IGNvbW1hbmQgYW5kIGluc2VydCByZXN1bHQgYXMgaXMKKyAgICAgICAg
ICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE1TR1BJUEU9IiA8PCBlbmRsOworICAgICAg
ICAgICAgICAgIFFTdHJpbmcgcTsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gcGFyc2VRdW90
ZXMoIk1TR1BJUEU9IiwgY21kLCBxKTsKKyAgICAgICAgICAgICAgICBpICs9IGxlbjsKKwkJUVN0
cmluZyBwaXBlX2NtZCA9IHE7CisJCWlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9
IHBpcGUocGlwZV9jbWQsIG9yaWdfbXNnLT5hc1N0cmluZygpKTsKKwkJICAgIGJvZHkuYXBwZW5k
KHN0cik7CisJCX07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3Rh
cnRzV2l0aCgiQk9EWVBJUEU9IikpIHsKKyAgICAgICAgICAgICAgICAvLyBwaXBlIG1lc3NhZ2Ug
Ym9keSBnZW5lcmF0ZWQgc28gZmFyIHRocm93IGNvbW1hbmQgYW5kIGluc2VydCByZXN1bHQgYXMg
aXMKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IEJPRFlQSVBFPSIgPDwg
ZW5kbDsKKyAgICAgICAgICAgICAgICBRU3RyaW5nIHE7CisgICAgICAgICAgICAgICAgaW50IGxl
biA9IHBhcnNlUXVvdGVzKCJCT0RZUElQRT0iLCBjbWQsIHEpOworICAgICAgICAgICAgICAgIGkg
Kz0gbGVuOworCQlRU3RyaW5nIHBpcGVfY21kID0gcTsKKwkJUVN0cmluZyBzdHIgPSBwaXBlKHBp
cGVfY21kLCBib2R5KTsKKwkJYm9keS5hcHBlbmQoc3RyKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJDTEVBUlBJUEU9IikpIHsKKyAgICAgICAg
ICAgICAgICAvLyBwaXBlIG1lc3NhZ2UgYm9keSBnZW5lcmF0ZWQgc28gZmFyIHRocm93IGNvbW1h
bmQgYW5kIGluc2VydCByZXN1bHQgYXMgaXMgcmVwbGFjaW5nIGN1cnJlbnQgYm9keQorICAgICAg
ICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogQ0xFQVJQSVBFPSIgPDwgZW5kbDsKKyAg
ICAgICAgICAgICAgICBRU3RyaW5nIHE7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHBhcnNl
UXVvdGVzKCJDTEVBUlBJUEU9IiwgY21kLCBxKTsKKyAgICAgICAgICAgICAgICBpICs9IGxlbjsK
KwkJUVN0cmluZyBwaXBlX2NtZCA9IHE7CisJCVFTdHJpbmcgc3RyID0gcGlwZShwaXBlX2NtZCwg
Ym9keSk7CisJCWJvZHkgPSBzdHI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBp
ZihjbWQuc3RhcnRzV2l0aCgiVEVYVCIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8
ICJDb21tYW5kOiBURVhUIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJU
RVhUIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcgcXVv
dGUgPSBvcmlnX21zZy0+Ym9keSgpOworCQkgICAgYm9keS5hcHBlbmQocXVvdGUpOworCQl9Owor
ICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9URVhU
U0laRSIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBPVEVYVFNJ
WkUiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9URVhUU0laRSIpOwor
ICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IFFTdHJp
bmcoIiUxIikuYXJnKG9yaWdfbXNnLT5ib2R5KCkubGVuZ3RoKCkpOworCQkgICAgYm9keS5hcHBl
bmQoc3RyKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5z
dGFydHNXaXRoKCJPVEVYVCIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21t
YW5kOiBPVEVYVCIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT1RFWFQi
KTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21zZykgeworCQkgICAgUVN0cmluZyBxdW90ZSA9
IG9yaWdfbXNnLT5ib2R5KCk7CisJCSAgICBib2R5LmFwcGVuZChxdW90ZSk7CisJCX07CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiVE9BRERSIikp
IHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IFRPQUREUiIgPDwgZW5k
bDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiVE9BRERSIik7CisJCVFTdHJpbmcgc3Ry
ID0gbXNnLT50bygpOworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlRPTkFNRSIpKSB7CisgICAgICAgICAgICAg
ICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBUT05BTUUiIDw8IGVuZGw7CisgICAgICAgICAgICAg
ICAgaSArPSBzdHJsZW4oIlRPTkFNRSIpOworCQlRU3RyaW5nIHN0ciA9IG1zZy0+dG9TdHJpcCgp
OworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2Ug
aWYoY21kLnN0YXJ0c1dpdGgoIlRPTElTVCIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1Zygp
IDw8ICJDb21tYW5kOiBUT0xJU1QiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJs
ZW4oIlRPTElTVCIpOworCQlRU3RyaW5nIHN0ciA9IG1zZy0+dG8oKTsKKwkJYm9keS5hcHBlbmQo
c3RyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRo
KCJGUk9NQUREUiIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBG
Uk9NQUREUiIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiRlJPTUFERFIi
KTsKKwkJUVN0cmluZyBzdHIgPSBtc2ctPmZyb20oKTsKKwkJYm9keS5hcHBlbmQoc3RyKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJGUk9NTkFN
RSIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBGUk9NTkFNRSIg
PDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiRlJPTU5BTUUiKTsKKwkJUVN0
cmluZyBzdHIgPSBtc2ctPmZyb21TdHJpcCgpOworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIkZVTExTVUJKRUNU
IikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IEZVTExTVUJKRUNU
IiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJGVUxMU1VCSkVDVCIpOwor
CQlRU3RyaW5nIHN0ciA9IG1zZy0+c3ViamVjdCgpOworCQlib2R5LmFwcGVuZChzdHIpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIkZVTExTVUJK
IikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IEZVTExTVUJKIiA8
PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJGVUxMU1VCSiIpOworCQlRU3Ry
aW5nIHN0ciA9IG1zZy0+c3ViamVjdCgpOworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk1TR0lEIikpIHsKKyAg
ICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE1TR0lEIiA8PCBlbmRsOworICAg
ICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJNU0dJRCIpOworCQlRU3RyaW5nIHN0ciA9IG1zZy0+
aWQoKTsKKwkJYm9keS5hcHBlbmQoc3RyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBl
bHNlIGlmKGNtZC5zdGFydHNXaXRoKCJPSEVBREVSPSIpKSB7CisgICAgICAgICAgICAgICAgLy8g
aW5zZXJ0IHNwZWNpZmllZCBjb250ZW50IG9mIGhlYWRlciBmcm9tIG9yaWdpbmFsIG1lc3NhZ2UK
KyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE9IRUFERVI9IiA8PCBlbmRs
OworICAgICAgICAgICAgICAgIFFTdHJpbmcgcTsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0g
cGFyc2VRdW90ZXMoIk9IRUFERVI9IiwgY21kLCBxKTsKKyAgICAgICAgICAgICAgICBpICs9IGxl
bjsKKwkJaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcgaGRyID0gcTsKKwkJICAgIFFTdHJp
bmcgc3RyID0gb3JpZ19tc2ctPmhlYWRlckZpZWxkcyhoZHIubG9jYWw4Qml0KCkpLmpvaW4oIiwg
Iik7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAgICAgCisgICAgICAg
ICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIkhFQURFUj0iKSkgeworICAgICAgICAgICAg
ICAgIC8vIGluc2VydCBzcGVjaWZpZWQgY29udGVudCBvZiBoZWFkZXIgZnJvbSBjdXJyZW50IG1l
c3NhZ2UKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IEhFQURFUj0iIDw8
IGVuZGw7CisgICAgICAgICAgICAgICAgUVN0cmluZyBxOworICAgICAgICAgICAgICAgIGludCBs
ZW4gPSBwYXJzZVF1b3RlcygiSEVBREVSPSIsIGNtZCwgcSk7CisgICAgICAgICAgICAgICAgaSAr
PSBsZW47CisJCVFTdHJpbmcgaGRyID0gcTsKKwkJUVN0cmluZyBzdHIgPSBtc2ctPmhlYWRlckZp
ZWxkcyhoZHIubG9jYWw4Qml0KCkpLmpvaW4oIiwgIik7CisJCWJvZHkuYXBwZW5kKHN0cik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiSEVBREVS
KCIpKSB7CisgICAgICAgICAgICAgICAgLy8gaW5zZXJ0IHNwZWNpZmllZCBjb250ZW50IG9mIGhl
YWRlciBmcm9tIGN1cnJlbnQgbWVzc2FnZQorICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAi
Q29tbWFuZDogSEVBREVSKCIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBRUmVnRXhwIHJlID0g
UVJlZ0V4cCgiXkhFQURFUlxcKCguKylcXCkiKTsKKyAgICAgICAgICAgICAgICByZS5zZXRNaW5p
bWFsKHRydWUpOworICAgICAgICAgICAgICAgIGludCByZXMgPSByZS5zZWFyY2goY21kKTsKKyAg
ICAgICAgICAgICAgICBpZihyZXMgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBzb21l
dGhpbmcgd3JvbmcKKyAgICAgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIkhFQURFUigiKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpICs9IHJlLm1h
dGNoZWRMZW5ndGgoKTsKKwkJICAgIFFTdHJpbmcgaGRyID0gcmUuY2FwKDEpOworCQkgICAgUVN0
cmluZyBzdHIgPSBtc2ctPmhlYWRlckZpZWxkcyhoZHIubG9jYWw4Qml0KCkpLmpvaW4oIiwgIik7
CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAg
ICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9UT0FERFIiKSkgeworICAgICAgICAgICAgICAg
IGtkRGVidWcoKSA8PCAiQ29tbWFuZDogT1RPQUREUiIgPDwgZW5kbDsKKyAgICAgICAgICAgICAg
ICBpICs9IHN0cmxlbigiT1RPQUREUiIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7
CisJCSAgICBRU3RyaW5nIHN0ciA9IG9yaWdfbXNnLT50bygpOworCQkgICAgYm9keS5hcHBlbmQo
c3RyKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFy
dHNXaXRoKCJPVE9OQU1FIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1h
bmQ6IE9UT05BTUUiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9UT05B
TUUiKTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21zZykgeworCQkgICAgUVN0cmluZyBzdHIg
PSBvcmlnX21zZy0+dG9TdHJpcCgpOworCQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJPVE9MSVNU
IikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE9UT0xJU1QiIDw8
IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9UT0xJU1QiKTsKKyAgICAgICAg
ICAgICAgICBpZihvcmlnX21zZykgeworCQkgICAgUVN0cmluZyBzdHIgPSBvcmlnX21zZy0+dG8o
KTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiT1RPIikpIHsKKyAgICAgICAgICAgICAgICBr
ZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE9UTyIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9
IHN0cmxlbigiT1RPIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFT
dHJpbmcgc3RyID0gb3JpZ19tc2ctPnRvKCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9
OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9G
Uk9NQUREUiIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBPRlJP
TUFERFIiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9GUk9NQUREUiIp
OworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IG9y
aWdfbXNnLT5mcm9tKCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAg
ICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9GUk9NTkFNRSIpKSB7
CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBPRlJPTU5BTUUiIDw8IGVu
ZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9GUk9NTkFNRSIpOworICAgICAgICAg
ICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IG9yaWdfbXNnLT5mcm9t
U3RyaXAoKTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiT0ZVTExTVUJKRUNUIikpIHsKKyAg
ICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE9GVUxMU1VCSkVDVCIgPDwgZW5k
bDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT0ZVTExTVUJKRUNUIik7CisgICAgICAg
ICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcgc3RyID0gb3JpZ19tc2ctPnN1
YmplY3QoKTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiT0ZVTExTVUJKIikpIHsKKyAgICAg
ICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE9GVUxMU1VCSiIgPDwgZW5kbDsKKyAg
ICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT0ZVTExTVUJKIik7CisgICAgICAgICAgICAgICAg
aWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcgc3RyID0gb3JpZ19tc2ctPnN1YmplY3QoKTsK
KwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiT01TR0lEIikpIHsKKyAgICAgICAgICAgICAgICBr
ZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE9NU0dJRCIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBp
ICs9IHN0cmxlbigiT01TR0lEIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJ
ICAgIFFTdHJpbmcgc3RyID0gb3JpZ19tc2ctPmlkKCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIp
OworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dp
dGgoIkRBVEVFTiIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBE
QVRFRU4iIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIkRBVEVFTiIpOwor
CQlRRGF0ZVRpbWUgZGF0ZSA9IFFEYXRlVGltZTo6Y3VycmVudERhdGVUaW1lKCk7CisJCUtMb2Nh
bGUgbG9jYWxlKCJDIik7CisJCVFTdHJpbmcgc3RyID0gUVN0cmluZygiJTEsICUyICUzLCAlNCIp
CisJCSAgICAuYXJnKGxvY2FsZS5jYWxlbmRhcigpLT53ZWVrRGF5TmFtZShkYXRlLmRhdGUoKSwg
ZmFsc2UpKQorCQkgICAgLmFyZyhsb2NhbGUuY2FsZW5kYXIoKS0+bW9udGhOYW1lKGRhdGUuZGF0
ZSgpLCBmYWxzZSkpCisJCSAgICAuYXJnKGRhdGUuZGF0ZSgpLmRheSgpKQorCQkgICAgLmFyZyhk
YXRlLmRhdGUoKS55ZWFyKCkpOworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJEQVRFU0hPUlQiKSkgewor
ICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogREFURVNIT1JUIiA8PCBlbmRs
OworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJEQVRFU0hPUlQiKTsKKwkJUURhdGVUaW1l
IGRhdGUgPSBRRGF0ZVRpbWU6OmN1cnJlbnREYXRlVGltZSgpOworCQlRU3RyaW5nIHN0ciA9IGRh
dGUuZGF0ZSgpLnRvU3RyaW5nKFF0OjpMb2NhbERhdGUpOworCQlib2R5LmFwcGVuZChzdHIpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJE
QVRFIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IERBVEUiIDw8
IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIkRBVEUiKTsKKwkJUURhdGVUaW1l
IGRhdGUgPSBRRGF0ZVRpbWU6OmN1cnJlbnREYXRlVGltZSgpOworCQlRU3RyaW5nIHN0ciA9IGRh
dGUuZGF0ZSgpLnRvU3RyaW5nKFF0OjpUZXh0RGF0ZSk7CisJCWJvZHkuYXBwZW5kKHN0cik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiRE9XIikp
IHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IERPVyIgPDwgZW5kbDsK
KyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiRE9XIik7CisJCVFEYXRlVGltZSBkYXRlID0g
UURhdGVUaW1lOjpjdXJyZW50RGF0ZVRpbWUoKTsKKwkJUVN0cmluZyBzdHIgPSBRRGF0ZTo6bG9u
Z0RheU5hbWUoZGF0ZS5kYXRlKCkuZGF5T2ZXZWVrKCkpOworCQlib2R5LmFwcGVuZChzdHIpOwor
CSAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiVElNRUxPTkdFTiIp
KSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBUSU1FTE9OR0VOIiA8
PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJUSU1FTE9OR0VOIik7CisJCVFE
YXRlVGltZSBkYXRlID0gUURhdGVUaW1lOjpjdXJyZW50RGF0ZVRpbWUoKTsKKwkJUVN0cmluZyBz
dHIgPSBkYXRlLnRpbWUoKS50b1N0cmluZygiaGg6bW06c3MgQVAiKTsKKwkJYm9keS5hcHBlbmQo
c3RyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRo
KCJUSU1FTE9ORyIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBU
SU1FTE9ORyIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiVElNRUxPTkci
KTsKKwkJUURhdGVUaW1lIGRhdGUgPSBRRGF0ZVRpbWU6OmN1cnJlbnREYXRlVGltZSgpOworCQlR
U3RyaW5nIHN0ciA9IGRhdGUudGltZSgpLnRvU3RyaW5nKFF0OjpUZXh0RGF0ZSk7CisJCWJvZHku
YXBwZW5kKHN0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3Rh
cnRzV2l0aCgiVElNRSIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5k
OiBUSU1FIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJUSU1FIik7CisJ
CVFEYXRlVGltZSBkYXRlID0gUURhdGVUaW1lOjpjdXJyZW50RGF0ZVRpbWUoKTsKKwkJUVN0cmlu
ZyBzdHIgPSBkYXRlLnRpbWUoKS50b1N0cmluZyhRdDo6TG9jYWxEYXRlKTsKKwkJYm9keS5hcHBl
bmQoc3RyKTsKKwkgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9E
QVRFRU4iKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogT0RBVEVF
TiIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT0RBVEVFTiIpOworICAg
ICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisgICAgICAgICAgICAgICAgICAgIFFEYXRlVGlt
ZSBkYXRlOworICAgICAgICAgICAgICAgICAgICBkYXRlLnNldFRpbWVfdChvcmlnX21zZy0+ZGF0
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgS0xvY2FsZSBsb2NhbGUoIkMiKTsKKwkJICAgIFFT
dHJpbmcgc3RyID0gUVN0cmluZygiJTEsICUyICUzLCAlNCIpCisJCSAgICAgIC5hcmcobG9jYWxl
LmNhbGVuZGFyKCktPndlZWtEYXlOYW1lKGRhdGUuZGF0ZSgpLCBmYWxzZSkpCisJCSAgICAgIC5h
cmcobG9jYWxlLmNhbGVuZGFyKCktPm1vbnRoTmFtZShkYXRlLmRhdGUoKSwgZmFsc2UpKQorCQkg
ICAgICAuYXJnKGRhdGUuZGF0ZSgpLmRheSgpKQorCQkgICAgICAuYXJnKGRhdGUuZGF0ZSgpLnll
YXIoKSk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJPREFURVNIT1JUIikpIHsKKyAg
ICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE9EQVRFU0hPUlQiIDw8IGVuZGw7
CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9EQVRFU0hPUlQiKTsKKyAgICAgICAgICAg
ICAgICBpZihvcmlnX21zZykgeworICAgICAgICAgICAgICAgICAgICBRRGF0ZVRpbWUgZGF0ZTsK
KyAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXRUaW1lX3Qob3JpZ19tc2ctPmRhdGUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgc3RyID0gZGF0ZS5kYXRlKCkudG9TdHJpbmcoUXQ6
OkxvY2FsRGF0ZSk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJPREFURSIpKSB7Cisg
ICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBPREFURSIgPDwgZW5kbDsKKyAg
ICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT0RBVEUiKTsKKyAgICAgICAgICAgICAgICBpZihv
cmlnX21zZykgeworICAgICAgICAgICAgICAgICAgICBRRGF0ZVRpbWUgZGF0ZTsKKyAgICAgICAg
ICAgICAgICAgICAgZGF0ZS5zZXRUaW1lX3Qob3JpZ19tc2ctPmRhdGUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIFFTdHJpbmcgc3RyID0gZGF0ZS5kYXRlKCkudG9TdHJpbmcoUXQ6OlRleHREYXRl
KTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiT0RPVyIpKSB7CisgICAgICAgICAgICAgICAg
a2REZWJ1ZygpIDw8ICJDb21tYW5kOiBPRE9XIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkg
Kz0gc3RybGVuKCJPRE9XIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKyAgICAg
ICAgICAgICAgICAgICAgUURhdGVUaW1lIGRhdGU7CisgICAgICAgICAgICAgICAgICAgIGRhdGUu
c2V0VGltZV90KG9yaWdfbXNnLT5kYXRlKCkpOworICAgICAgICAgICAgICAgICAgICBRU3RyaW5n
IHN0ciA9IFFEYXRlOjpsb25nRGF5TmFtZShkYXRlLmRhdGUoKS5kYXlPZldlZWsoKSk7CisJCSAg
ICBib2R5LmFwcGVuZChzdHIpOworCQl9OworCSAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihj
bWQuc3RhcnRzV2l0aCgiT1RJTUVMT05HRU4iKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWco
KSA8PCAiQ29tbWFuZDogT1RJTUVMT05HRU4iIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSAr
PSBzdHJsZW4oIk9USU1FTE9OR0VOIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsK
KyAgICAgICAgICAgICAgICAgICAgUURhdGVUaW1lIGRhdGU7CisgICAgICAgICAgICAgICAgICAg
IGRhdGUuc2V0VGltZV90KG9yaWdfbXNnLT5kYXRlKCkpOworICAgICAgICAgICAgICAgICAgICBR
U3RyaW5nIHN0ciA9IGRhdGUudGltZSgpLnRvU3RyaW5nKCJoaDptbTpzcyBBUCIpOworCQkgICAg
Ym9keS5hcHBlbmQoc3RyKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNl
IGlmKGNtZC5zdGFydHNXaXRoKCJPVElNRUxPTkciKSkgeworICAgICAgICAgICAgICAgIGtkRGVi
dWcoKSA8PCAiQ29tbWFuZDogT1RJTUVMT05HIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkg
Kz0gc3RybGVuKCJPVElNRUxPTkciKTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21zZykgewor
ICAgICAgICAgICAgICAgICAgICBRRGF0ZVRpbWUgZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAg
ZGF0ZS5zZXRUaW1lX3Qob3JpZ19tc2ctPmRhdGUoKSk7CisgICAgICAgICAgICAgICAgICAgIFFT
dHJpbmcgc3RyID0gZGF0ZS50aW1lKCkudG9TdHJpbmcoUXQ6OlRleHREYXRlKTsKKwkJICAgIGJv
ZHkuYXBwZW5kKHN0cik7CisJCX07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBp
ZihjbWQuc3RhcnRzV2l0aCgiT1RJTUUiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8
PCAiQ29tbWFuZDogT1RJTUUiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4o
Ik9USU1FIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKyAgICAgICAgICAgICAg
ICAgICAgUURhdGVUaW1lIGRhdGU7CisgICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0VGltZV90
KG9yaWdfbXNnLT5kYXRlKCkpOworICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHN0ciA9IGRh
dGUudGltZSgpLnRvU3RyaW5nKFF0OjpMb2NhbERhdGUpOworCQkgICAgYm9keS5hcHBlbmQoc3Ry
KTsKKwkJfTsKKwkgICAgCisJICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiQkxBTksiKSkg
eworICAgICAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcKKwkJa2REZWJ1ZygpIDw8ICJDb21tYW5k
OiBCTEFOSyIgPDwgZW5kbDsKKwkJaSArPSBzdHJsZW4oIkJMQU5LIik7CisgICAgICAgICAgICAK
KwkgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJOT1AiKSkgeworICAgICAgICAgICAgICAg
IC8vIGRvIG5vdGhpbmcKKwkJa2REZWJ1ZygpIDw8ICJDb21tYW5kOiBOT1AiIDw8IGVuZGw7CisJ
CWkgKz0gc3RybGVuKCJOT1AiKTsKKwkgICAgCisJICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0
aCgiQ0xFQVIiKSkgeworICAgICAgICAgICAgICAgIC8vIGNsZWFyIGJvZHkgYnVmZmVyOyBub3Qg
dG9vIHVzZWZ1bCB5ZXQKKwkJa2REZWJ1ZygpIDw8ICJDb21tYW5kOiBDTEVBUiIgPDwgZW5kbDsK
KwkJaSArPSBzdHJsZW4oIkNMRUFSIik7CisJCWJvZHkgPSAiIjsKKyAgICAgICAgICAgIAorCSAg
ICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIkRFQlVHT0ZGIikpIHsKKyAgICAgICAgICAgICAg
ICAvLyB0dXJuIG9mZiBkZWJ1ZworCQlrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IERFQlVHT0ZGIiA8
PCBlbmRsOworCQlpICs9IHN0cmxlbigiREVCVUdPRkYiKTsKKwkJZGVidWcgPSBmYWxzZTsKKwkg
ICAgCisJICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiREVCVUciKSkgeworICAgICAgICAg
ICAgICAgIC8vIHR1cm4gb24gZGVidWcKKwkJa2REZWJ1ZygpIDw8ICJDb21tYW5kOiBERUJVRyIg
PDwgZW5kbDsKKwkJaSArPSBzdHJsZW4oIkRFQlVHIik7CisJCWRlYnVnID0gdHJ1ZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyB3cm9uZyBj
b21tYW5kLCBkbyBub3RoaW5nCisgICAgICAgICAgICAgICAgYm9keS5hcHBlbmQoYyk7CisgICAg
ICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmKGRubCAmJiAoYyA9PSAnXG4n
IHx8IGMgPT0gJ1xyJykpIHsKKyAgICAgICAgICAgIC8vIHNraXAKKyAgICAgICAgICAgIGlmKChj
ID09ICdcbicgJiYgdG1wbFtpICsgMV0gPT0gJ1xyJykgfHwgKGMgPT0gJ1xyJyAmJiB0bXBsW2kg
KyAxXSA9PSAnXG4nKSkgeworICAgICAgICAgICAgICAgIC8vIHNraXAgb25lIG1vcmUKKyAgICAg
ICAgICAgICAgICBpICs9IDE7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgZG5sID0gZmFs
c2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib2R5LmFwcGVuZChjKTsKKyAgICAg
ICAgfTsKKyAgICB9OworICAgIAorICAgIC8vIGtkRGVidWcoKSA8PCAiTWVzc2FnZSBib2R5OiAi
IDw8IGJvZHkgPDwgZW5kbDsKKyAgICAKKyAgICBtc2ctPnNldEJvZHkoYm9keS51dGY4KCkpOwor
fTsKKworUVN0cmluZyBUZW1wbGF0ZVBhcnNlcjo6ZmluZFRlbXBsYXRlKCkgeworICAgIAorICAg
IC8vIGtkRGVidWcoKSA8PCAiVHJ5aW5nIHRvIGZpbmQgdGVtcGxhdGUgZm9yIG1vZGUgIiA8PCBt
b2RlIDw8IGVuZGw7CisgICAgCisgICAgUVN0cmluZyB0bXBsOworICAgIAorICAgIGlmKCFmb2xk
ZXIpIHsKKwlmb2xkZXIgPSBtc2ctPnBhcmVudCgpOworCWlmKCFmb2xkZXIpIHsKKwkgICAgaWYo
b3JpZ19tc2cpIHsKKwkJZm9sZGVyID0gb3JpZ19tc2ctPnBhcmVudCgpOworCSAgICB9OworCSAg
ICBpZighZm9sZGVyKSB7CisJCWtkRGVidWcoKSA8PCAiT29wcyEgTm8gZm9sZGVyIGZvciBtZXNz
YWdlIiA8PCBlbmRsOworCQlyZXR1cm4gIiI7CisJICAgIH07CisJfTsKKyAgICB9OworICAgIAor
ICAgIFFTdHJpbmcgZmlkID0gZm9sZGVyLT5pZFN0cmluZygpOworICAgIFRlbXBsYXRlcyBmY29u
ZihmaWQpOworICAgIGlmKGZjb25mLnVzZUN1c3RvbVRlbXBsYXRlcygpKSB7CisgICAgICAgIHN3
aXRjaChtb2RlKSB7CisgICAgICAgICAgICBjYXNlIE5ld01lc3NhZ2U6CisgICAgICAgICAgICAg
ICAgdG1wbCA9IGZjb25mLnRlbXBsYXRlTmV3TWVzc2FnZSgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBSZXBseToKKyAgICAgICAgICAgICAgICB0bXBsID0gZmNv
bmYudGVtcGxhdGVSZXBseSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBSZXBseUFsbDoKKyAgICAgICAgICAgICAgICB0bXBsID0gZmNvbmYudGVtcGxhdGVSZXBs
eUFsbCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGb3J3YXJk
OgorICAgICAgICAgICAgICAgIHRtcGwgPSBmY29uZi50ZW1wbGF0ZUZvcndhcmQoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
a2REZWJ1ZygpIDw8ICJVbmtub3duIG1lc3NhZ2UgbW9kZTogIiA8PCBtb2RlIDw8IGVuZGw7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICB9OworICAgICAgICBxdW90ZVN0cmlu
ZyA9IGZjb25mLnF1b3RlU3RyaW5nKCk7CisgICAgICAgIGlmKCF0bXBsLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgcmV0dXJuIHRtcGw7CisgICAgICAgIH07CisgICAgfTsKKyAgICBzd2l0Y2go
bW9kZSkgeworCWNhc2UgTmV3TWVzc2FnZToKKwkgICAgdG1wbCA9IEdsb2JhbFNldHRpbmdzOjpz
ZWxmKCktPnRlbXBsYXRlTmV3TWVzc2FnZSgpOworCSAgICBicmVhazsKKwljYXNlIFJlcGx5Ogor
CSAgICB0bXBsID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+dGVtcGxhdGVSZXBseSgpOworCSAg
ICBicmVhazsKKwljYXNlIFJlcGx5QWxsOgorCSAgICB0bXBsID0gR2xvYmFsU2V0dGluZ3M6OnNl
bGYoKS0+dGVtcGxhdGVSZXBseUFsbCgpOworCSAgICBicmVhazsKKwljYXNlIEZvcndhcmQ6CisJ
ICAgIHRtcGwgPSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT50ZW1wbGF0ZUZvcndhcmQoKTsKKwkg
ICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAga2REZWJ1ZygpIDw8ICJVbmtub3duIG1lc3NhZ2Ug
bW9kZTogIiA8PCBtb2RlIDw8IGVuZGw7CisJICAgIHJldHVybiAiIjsKKyAgICB9OworICAgIHF1
b3RlU3RyaW5nID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+cXVvdGVTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gdG1wbDsKK307CisKK1FTdHJpbmcgVGVtcGxhdGVQYXJzZXI6OnBpcGUoUVN0cmluZyBj
bWQsIFFTdHJpbmcgYnVmKSB7CisgICAgcGlwZV9vdXQgPSAiIjsKKyAgICBwaXBlX2VyciA9ICIi
OworICAgIHBpcGVfcmMgPSAwOworICAgIAorICAgIEtQcm9jZXNzIHByb2M7CisgICAgUUNTdHJp
bmcgZGF0YSA9IGJ1Zi5sb2NhbDhCaXQoKTsKKyAgICAKKyAgICAvLyBrZERlYnVnKCkgPDwgIkNv
bW1hbmQgZGF0YTogIiA8PCBkYXRhIDw8IGVuZGw7CisgICAgCisgICAgcHJvYyA8PCBLU2hlbGw6
OnNwbGl0QXJncyhjbWQsIEtTaGVsbDo6VGlsZGVFeHBhbmQpOworICAgIHByb2Muc2V0VXNlU2hl
bGwodHJ1ZSk7CisgICAgY29ubmVjdCgmcHJvYywgU0lHTkFMKHJlY2VpdmVkU3Rkb3V0KEtQcm9j
ZXNzICosIGNoYXIgKiwgaW50ICkpLCAKKwl0aGlzLCBTTE9UKG9uUmVjZWl2ZWRTdGRvdXQoS1By
b2Nlc3MgKiwgY2hhciAqLCBpbnQgKSkpOworICAgIGNvbm5lY3QoJnByb2MsIFNJR05BTChyZWNl
aXZlZFN0ZGVycihLUHJvY2VzcyAqLCBjaGFyICosIGludCApKSwgCisJdGhpcywgU0xPVChvblJl
Y2VpdmVkU3RkZXJyKEtQcm9jZXNzICosIGNoYXIgKiwgaW50ICkpKTsKKyAgICBjb25uZWN0KCZw
cm9jLCBTSUdOQUwod3JvdGVTdGRpbihLUHJvY2VzcyAqKSksIAorCXRoaXMsIFNMT1Qob25Xcm90
ZVN0ZGluKEtQcm9jZXNzICopKSk7CisgICAgCisgICAgaWYocHJvYy5zdGFydChLUHJvY2Vzczo6
Tm90aWZ5T25FeGl0LCBLUHJvY2Vzczo6QWxsKSkgeworICAgICAgICAKKyAgICAgICAgYm9vbCBw
aXBlX2ZpbGxlZCA9IHByb2Mud3JpdGVTdGRpbihkYXRhLCBkYXRhLmxlbmd0aCgpKTsKKyAgICAg
ICAgaWYocGlwZV9maWxsZWQpIHsKKyAgICAgICAgICAgIHByb2MuY2xvc2VTdGRpbigpOworICAg
ICAgICAKKwkgICAgYm9vbCBleGl0ZWQgPSBwcm9jLndhaXQoUGlwZVRpbWVvdXQpOworCSAgICBp
ZihleGl0ZWQpIHsKKwkgICAgCisJCWlmKHByb2Mubm9ybWFsRXhpdCgpKSB7CisJCSAgICAKKwkJ
ICAgIHBpcGVfcmMgPSBwcm9jLmV4aXRTdGF0dXMoKTsKKwkJICAgIGlmKHBpcGVfcmMgIT0gMCAm
JiBkZWJ1ZykgeworCQkJaWYocGlwZV9lcnIuaXNFbXB0eSgpKSB7CisJCQkgICAgS01lc3NhZ2VC
b3g6OmVycm9yKE5VTEwsIAorCQkJCWkxOG4oIlBpcGUgY29tbWFuZCBleGl0IHdpdGggc3RhdHVz
ICUxOiAlMiIpLmFyZyhwaXBlX3JjKS5hcmcoY21kKSk7CisJCQl9IGVsc2UgeworCQkJICAgIEtN
ZXNzYWdlQm94OjpkZXRhaWxlZEVycm9yKE5VTEwsIAorCQkJCWkxOG4oIlBpcGUgY29tbWFuZCBl
eGl0IHdpdGggc3RhdHVzICUxOiAlMiIpLmFyZyhwaXBlX3JjKS5hcmcoY21kKSwgcGlwZV9lcnIp
OworCQkJfTsKKwkJICAgIH07CisJCSAgICAKKwkJfSBlbHNlIHsKKwkJICAgIAorCQkgICAgcGlw
ZV9yYyA9IC0ocHJvYy5leGl0U2lnbmFsKCkpOworCQkgICAgaWYocGlwZV9yYyAhPSAwICYmIGRl
YnVnKSB7CisJCQlpZihwaXBlX2Vyci5pc0VtcHR5KCkpIHsKKwkJCSAgICBLTWVzc2FnZUJveDo6
ZXJyb3IoTlVMTCwgCisJCQkJaTE4bigiUGlwZSBjb21tYW5kIGtpbGxlZCBieSBzaWduYWwgJTE6
ICUyIikuYXJnKC0ocGlwZV9yYykpLmFyZyhjbWQpKTsKKwkJCX0gZWxzZSB7CisJCQkgICAgS01l
c3NhZ2VCb3g6OmRldGFpbGVkRXJyb3IoTlVMTCwgCisJCQkJaTE4bigiUGlwZSBjb21tYW5kIGtp
bGxlZCBieSBzaWduYWwgJTE6ICUyIikuYXJnKC0ocGlwZV9yYykpLmFyZyhjbWQpLCBwaXBlX2Vy
cik7CisJCQl9OworCQkgICAgfTsKKwkJICAgIAorCQl9OworCSAgICAKKwkgICAgfSBlbHNlIHsK
KwkJLy8gcHJvY2VzcyBkb2VzIG5vdCBleGl0ZWQgYWZ0ZXIgVGVtcGxhdGVQYXJzZXI6OlBpcGVU
aW1lb3V0IHNlY29uZHMsIGtpbGwgaXQKKwkJcHJvYy5raWxsKCk7CisJCXByb2MuZGV0YWNoKCk7
CisJCWlmKGRlYnVnKSB7CisJCSAgICBLTWVzc2FnZUJveDo6ZXJyb3IoTlVMTCwgCisJCQlpMThu
KCJQaXBlIGNvbW1hbmQgZG9lcyBub3QgZmluaXNoZWQgd2l0aGluICUxIHNlY29uZHM6ICUyIiku
YXJnKFBpcGVUaW1lb3V0KS5hcmcoY21kKSk7CisJCX07CisJICAgIH07CisJICAgIAorCX0gZWxz
ZSB7CisJICAgIC8vIGNhbmB0IHdyaXRlIHRvIHN0ZGluIG9mIHByb2Nlc3MKKwkgICAgcHJvYy5r
aWxsKCk7CisJICAgIHByb2MuZGV0YWNoKCk7CisJICAgIGlmKGRlYnVnKSB7CisJCWlmKHBpcGVf
ZXJyLmlzRW1wdHkoKSkgeworCQkgICAgS01lc3NhZ2VCb3g6OmVycm9yKE5VTEwsIAorCQkJaTE4
bigiQ2FuYHQgd3JpdGUgdG8gcHJvY2VzcyBzdGRpbjogJTEiKS5hcmcoY21kKSk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKwkJICAgIEtNZXNzYWdlQm94OjpkZXRhaWxlZEVycm9yKE5VTEws
IAorCQkJaTE4bigiQ2FuYHQgd3JpdGUgdG8gcHJvY2VzcyBzdGRpbjogJTEiKS5hcmcoY21kKSwg
cGlwZV9lcnIpOworICAgICAgICAgICAgICAgIH07CQorCSAgICB9OworCX07CisgICAgICAgICAg
ICAgICAgCisgICAgfSBlbHNlIGlmKGRlYnVnKSB7CisgICAgICAgIEtNZXNzYWdlQm94OjplcnJv
cihOVUxMLCBpMThuKCJDYW5gdCBzdGFydCBwaXBlIGNvbW1hbmQgZnJvbSB0ZW1wbGF0ZTogJTEi
KS5hcmcoY21kKSk7CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gcGlwZV9vdXQ7Cit9OworCit2
b2lkIFRlbXBsYXRlUGFyc2VyOjpvblByb2Nlc3NFeGl0ZWQoS1Byb2Nlc3MgKnByb2MpIHsKKyAg
ICAvLyBkbyBub3RoaW5nIGZvciBub3cKK307CisKK3ZvaWQgVGVtcGxhdGVQYXJzZXI6Om9uUmVj
ZWl2ZWRTdGRvdXQoS1Byb2Nlc3MgKnByb2MsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1Zmxlbikgewor
ICAgIHBpcGVfb3V0ICs9IFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoYnVmZmVyLCBidWZsZW4pOwor
fTsKKwordm9pZCBUZW1wbGF0ZVBhcnNlcjo6b25SZWNlaXZlZFN0ZGVycihLUHJvY2VzcyAqcHJv
YywgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKSB7CisgICAgcGlwZV9lcnIgKz0gUVN0cmluZzo6
ZnJvbUxvY2FsOEJpdChidWZmZXIsIGJ1Zmxlbik7Cit9OworCit2b2lkIFRlbXBsYXRlUGFyc2Vy
Ojpvbldyb3RlU3RkaW4oS1Byb2Nlc3MgKnByb2MpIHsKKyAgICBib29sIHJjID0gcHJvYy0+Y2xv
c2VTdGRpbigpOworfTsKKworI2luY2x1ZGUgInRlbXBsYXRlcGFyc2VyLm1vYy5jcHAiCkluZGV4
OiBrbWFpbC9NYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC9NYWtlZmlsZS5hbQkocmV2
aXNpb24gNTk1OTU2KQorKysga21haWwvTWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEy
NCw3ICsxMjQsOCBAQAogICAgICAgICAgICAgICAgIG1haWxpbmdsaXN0cHJvcGVydGllc2RpYWxv
Zy5jcHAgbmV3Zm9sZGVyZGlhbG9nLmNwcCBcCiAgICAgICAgICAgICAgICAgYWNjb3VudHdpemFy
ZC5jcHAgdGV4dHNvdXJjZS5jcHAgXAogICAgICAgICAgICAgICAgIG1hbmFnZXNpZXZlc2NyaXB0
c2RpYWxvZy5jcHAgY2hpYXNtdXNrZXlzZWxlY3Rvci5jcHAgXAotICAgICAgICAgICAgICAgIHV0
aWwuY3BwCisgICAgICAgICAgICAgICAgdXRpbC5jcHAgdGVtcGxhdGVzY29uZmlndXJhdGlvbl9r
Zmcua2NmZ2MgdGVtcGxhdGVzY29uZmlndXJhdGlvbi51aSBcCisgICAgICAgICAgICAgICAgdGVt
cGxhdGVwYXJzZXIuY3BwIHRlbXBsYXRlc2NvbmZpZ3VyYXRpb25pbXBsLmNwcAogCiBrbWFpbF9T
T1VSQ0VTID0gbWFpbi5jcHAKIApAQCAtMTk2LDcgKzE5Nyw3IEBACiAJJChYR0VUVEVYVCkgLWt0
cmFuc2xhdGUgKi5jcHAgKi5oIC1vICQocG9kaXIpL2ttYWlsLnBvdAogCXJtIC1mIHRpcHMuY3Bw
CiAKLWtkZV9rY2ZnX0RBVEEgPSBrbWFpbC5rY2ZnIHJlcGx5cGhyYXNlcy5rY2ZnIGN1c3RvbW1p
bWVoZWFkZXIua2NmZwora2RlX2tjZmdfREFUQSA9IGttYWlsLmtjZmcgcmVwbHlwaHJhc2VzLmtj
ZmcgY3VzdG9tbWltZWhlYWRlci5rY2ZnIHRlbXBsYXRlc2NvbmZpZ3VyYXRpb25fa2ZnLmtjZmcK
IAogRE9YWUdFTl9SRUZFUkVOQ0VTID0ga2RldWkKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9hZG1p
bi9Eb3h5ZmlsZS5hbQpJbmRleDoga21haWwva21tZXNzYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
bWFpbC9rbW1lc3NhZ2UuY3BwCShyZXZpc2lvbiA1OTU5NTYpCisrKyBrbWFpbC9rbW1lc3NhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiB1c2luZyBLTWFpbDo6SGVhZGVy
U3RyYXRlZ3k7CiAjaW5jbHVkZSAia21hZGRyYm9vay5oIgogI2luY2x1ZGUgImtjdXJzb3JzYXZl
ci5oIgorI2luY2x1ZGUgInRlbXBsYXRlcGFyc2VyLmgiCiAKICNpbmNsdWRlIDxsaWJrcGltaWRl
bnRpdGllcy9pZGVudGl0eS5oPgogI2luY2x1ZGUgPGxpYmtwaW1pZGVudGl0aWVzL2lkZW50aXR5
bWFuYWdlci5oPgpAQCAtODQ4LDYgKzg0OSw3IEBACiAgIFFTdHJpbmcgc3RyLCByZXBseVN0ciwg
bWFpbGluZ0xpc3RTdHIsIHJlcGx5VG9TdHIsIHRvU3RyOwogICBRU3RyaW5nTGlzdCBtYWlsaW5n
TGlzdEFkZHJlc3NlczsKICAgUUNTdHJpbmcgcmVmU3RyLCBoZWFkZXJOYW1lOworICBib29sIHJl
cGx5QWxsID0gdHJ1ZTsKIAogICBtc2ctPmluaXRGcm9tTWVzc2FnZSh0aGlzKTsKIApAQCAtODg3
LDYgKzg4OSw3IEBACiAgICAgICAvLyBkb2Vzbid0IHNlZW0gdG8gYmUgYSBtYWlsaW5nIGxpc3Qs
IHJlcGx5IHRvIEZyb206IGFkZHJlc3MKICAgICAgIHRvU3RyID0gZnJvbSgpOwogICAgICAgcmVw
bHlTdHIgPSBzUmVwbHlTdHI7IC8vIHJlcGx5IHRvIGF1dGhvciwgc28gdXNlICJPbiAuLi4geW91
IHdyb3RlOiIKKyAgICAgIHJlcGx5QWxsID0gZmFsc2U7CiAgICAgfQogICAgIC8vIHN0cmlwIGFs
bCBteSBhZGRyZXNzZXMgZnJvbSB0aGUgbGlzdCBvZiByZWNpcGllbnRzCiAgICAgUVN0cmluZ0xp
c3QgcmVjaXBpZW50cyA9IEtQSU06OnNwbGl0RW1haWxBZGRyTGlzdCggdG9TdHIgKTsKQEAgLTEw
MTYsNiArMTAxOSw3IEBACiAgICAgICB0b1N0ciA9IGZyb20oKTsKICAgICB9CiAgICAgcmVwbHlT
dHIgPSBzUmVwbHlTdHI7IC8vIHJlcGx5IHRvIGF1dGhvciwgc28gdXNlICJPbiAuLi4geW91IHdy
b3RlOiIKKyAgICByZXBseUFsbCA9IGZhbHNlOwogICAgIGJyZWFrOwogICB9CiAgIGNhc2UgS01h
aWw6OlJlcGx5Tm9uZSA6IHsKQEAgLTEwMzEsMTggKzEwMzUsMjIgQEAKICAgLy9Jbi1SZXBseS1U
byA9IG9yaWdpbmFsIG1zZy1pZAogICBtc2ctPnNldFJlcGx5VG9JZChtc2dJZCgpKTsKIAotICBp
ZiAoIW5vUXVvdGUpIHsKLSAgICBpZiggc2VsZWN0aW9uSXNCb2R5ICl7Ci0gICAgICBRQ1N0cmlu
ZyBjU3RyID0gc2VsZWN0aW9uLmxhdGluMSgpOwotICAgICAgbXNnLT5zZXRCb2R5KCBjU3RyICk7
Ci0gICAgfWVsc2V7Ci0gICAgICBtc2ctPnNldEJvZHkoYXNRdW90ZWRTdHJpbmcocmVwbHlTdHIg
KyAiXG4iLCBzSW5kZW50UHJlZml4U3RyLCBzZWxlY3Rpb24sCi0JCQkJICBzU21hcnRRdW90ZSwg
YWxsb3dEZWNyeXB0aW9uKS51dGY4KCkpOwotICAgIH0KLSAgfQorLy8gICBpZiAoIW5vUXVvdGUp
IHsKKy8vICAgICBpZiggc2VsZWN0aW9uSXNCb2R5ICl7CisvLyAgICAgICBRQ1N0cmluZyBjU3Ry
ID0gc2VsZWN0aW9uLmxhdGluMSgpOworLy8gICAgICAgbXNnLT5zZXRCb2R5KCBjU3RyICk7Cisv
LyAgICAgfWVsc2V7CisvLyAgICAgICBtc2ctPnNldEJvZHkoYXNRdW90ZWRTdHJpbmcocmVwbHlT
dHIgKyAiXG4iLCBzSW5kZW50UHJlZml4U3RyLCBzZWxlY3Rpb24sCisvLyAJCQkJICBzU21hcnRR
dW90ZSwgYWxsb3dEZWNyeXB0aW9uKS51dGY4KCkpOworLy8gICAgIH0KKy8vICAgfQogCiAgIG1z
Zy0+c2V0U3ViamVjdCggcmVwbHlTdWJqZWN0KCkgKTsKIAorICBUZW1wbGF0ZVBhcnNlciBwYXJz
ZXIoIG1zZywgKHJlcGx5QWxsID8gVGVtcGxhdGVQYXJzZXI6OlJlcGx5QWxsIDogVGVtcGxhdGVQ
YXJzZXI6OlJlcGx5KSwgCisgICAgc2VsZWN0aW9uLCBzU21hcnRRdW90ZSwgbm9RdW90ZSwgYWxs
b3dEZWNyeXB0aW9uLCBzZWxlY3Rpb25Jc0JvZHkgKTsKKyAgcGFyc2VyLnByb2Nlc3MoIHRoaXMg
KTsKKwogICAvLyBzZXRTdGF0dXMoS01Nc2dTdGF0dXNSZXBsaWVkKTsKICAgbXNnLT5saW5rKHRo
aXMsIEtNTXNnU3RhdHVzUmVwbGllZCk7CiAKQEAgLTEyMzQsMTIgKzEyNDIsMTggQEAKICAgICBt
c2ctPm1OZWVkc0Fzc2VtYmx5ID0gdHJ1ZTsKICAgICBtc2ctPmNsZWFudXBIZWFkZXIoKTsKICAg
fQotICBRU3RyaW5nIHN0ID0gUVN0cmluZzo6ZnJvbVV0ZjgoY3JlYXRlRm9yd2FyZEJvZHkoKSk7
Ci0gIFFDU3RyaW5nIGVuY29kaW5nID0gYXV0b0RldGVjdENoYXJzZXQoY2hhcnNldCgpLCBzUHJl
ZkNoYXJzZXRzLCBzdCk7CisgIC8vIFFTdHJpbmcgc3QgPSBRU3RyaW5nOjpmcm9tVXRmOChjcmVh
dGVGb3J3YXJkQm9keSgpKTsKKworICBtc2ctPnNldFN1YmplY3QoIGZvcndhcmRTdWJqZWN0KCkg
KTsKKyAgCisgIFRlbXBsYXRlUGFyc2VyIHBhcnNlciggbXNnLCBUZW1wbGF0ZVBhcnNlcjo6Rm9y
d2FyZCwgCisgICAgdGhpcy0+Ym9keSgpLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Cisg
IHBhcnNlci5wcm9jZXNzKCB0aGlzICk7CisgIAorICBRQ1N0cmluZyBlbmNvZGluZyA9IGF1dG9E
ZXRlY3RDaGFyc2V0KGNoYXJzZXQoKSwgc1ByZWZDaGFyc2V0cywgbXNnLT5ib2R5KCkpOwogICBp
ZiAoZW5jb2RpbmcuaXNFbXB0eSgpKSBlbmNvZGluZyA9ICJ1dGYtOCI7CiAgIG1zZy0+c2V0Q2hh
cnNldChlbmNvZGluZyk7Ci0KLSAgbXNnLT5zZXRTdWJqZWN0KCBmb3J3YXJkU3ViamVjdCgpICk7
CisgIAogICBtc2ctPmxpbmsodGhpcywgS01Nc2dTdGF0dXNGb3J3YXJkZWQpOwogICByZXR1cm4g
bXNnOwogfQpJbmRleDoga21haWwvY29uZmlndXJlZGlhbG9nX3AuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
bWFpbC9jb25maWd1cmVkaWFsb2dfcC5oCShyZXZpc2lvbiA1OTU5NTYpCisrKyBrbWFpbC9jb25m
aWd1cmVkaWFsb2dfcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiBjbGFzcyBD
b21wb3NlckNyeXB0b0NvbmZpZ3VyYXRpb247CiBjbGFzcyBXYXJuaW5nQ29uZmlndXJhdGlvbjsK
IGNsYXNzIFNNaW1lQ29uZmlndXJhdGlvbjsKK2NsYXNzIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb247
CiAKIG5hbWVzcGFjZSBLcGdwIHsKICAgY2xhc3MgQ29uZmlnOwpAQCAtNjMyLDYgKzYzMywyMyBA
QAogICBMYW5ndWFnZUl0ZW1MaXN0IG1MYW5ndWFnZUxpc3Q7CiB9OwogCitjbGFzcyBDb21wb3Nl
clBhZ2VUZW1wbGF0ZXNUYWIgOiBwdWJsaWMgQ29uZmlnTW9kdWxlVGFiIHsKKyAgUV9PQkpFQ1QK
K3B1YmxpYzoKKyAgQ29tcG9zZXJQYWdlVGVtcGxhdGVzVGFiKCBRV2lkZ2V0ICogcGFyZW50PTAs
IGNvbnN0IGNoYXIgKiBuYW1lPTAgKTsKKyAgUVN0cmluZyBoZWxwQW5jaG9yKCkgY29uc3Q7CisK
KyAgdm9pZCBzYXZlKCk7CisKK3ByaXZhdGUgc2xvdHM6CisKK3ByaXZhdGU6CisgIHZpcnR1YWwg
dm9pZCBkb0xvYWRGcm9tR2xvYmFsU2V0dGluZ3MoKTsKKworcHJpdmF0ZToKKyAgICBUZW1wbGF0
ZXNDb25maWd1cmF0aW9uKiBtV2lkZ2V0OworfTsKKwogY2xhc3MgQ29tcG9zZXJQYWdlU3ViamVj
dFRhYiA6IHB1YmxpYyBDb25maWdNb2R1bGVUYWIgewogICBRX09CSkVDVAogcHVibGljOgpAQCAt
NzM0LDYgKzc1Miw3IEBACiAgIC8vIGhybXBmLiBtb2MgZG9lc24ndCBsaWtlIG5lc3RlZCBjbGFz
c2VzIHdpdGggc2xvdHMvc2lnbmFscy4uLjoKICAgdHlwZWRlZiBDb21wb3NlclBhZ2VHZW5lcmFs
VGFiIEdlbmVyYWxUYWI7CiAgIHR5cGVkZWYgQ29tcG9zZXJQYWdlUGhyYXNlc1RhYiBQaHJhc2Vz
VGFiOworICB0eXBlZGVmIENvbXBvc2VyUGFnZVRlbXBsYXRlc1RhYiBUZW1wbGF0ZXNUYWI7CiAg
IHR5cGVkZWYgQ29tcG9zZXJQYWdlU3ViamVjdFRhYiBTdWJqZWN0VGFiOwogICB0eXBlZGVmIENv
bXBvc2VyUGFnZUNoYXJzZXRUYWIgQ2hhcnNldFRhYjsKICAgdHlwZWRlZiBDb21wb3NlclBhZ2VI
ZWFkZXJzVGFiIEhlYWRlcnNUYWI7CkBAIC03NDIsNiArNzYxLDcgQEAKIHByaXZhdGU6CiAgIEdl
bmVyYWxUYWIgICptR2VuZXJhbFRhYjsKICAgUGhyYXNlc1RhYiAgKm1QaHJhc2VzVGFiOworICBU
ZW1wbGF0ZXNUYWIgICptVGVtcGxhdGVzVGFiOwogICBTdWJqZWN0VGFiICAqbVN1YmplY3RUYWI7
CiAgIENoYXJzZXRUYWIgICptQ2hhcnNldFRhYjsKICAgSGVhZGVyc1RhYiAgKm1IZWFkZXJzVGFi
OwpJbmRleDoga21haWwvdGVtcGxhdGVwYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC90ZW1w
bGF0ZXBhcnNlci5oCShyZXZpc2lvbiAwKQorKysga21haWwvdGVtcGxhdGVwYXJzZXIuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyogICAtKi0gbW9kZTogQysrOyBjLWZpbGUtc3R5
bGU6ICJnbnUiIC0qLQorICogICBrbWFpbDogS0RFIG1haWwgY2xpZW50CisgKiAgIFRoaXMgZmls
ZTogQ29weXJpZ2h0IChDKSAyMDA2IERtaXRyeSBNb3JvemhuaWtvdgorICoKKyAqICAgVGhpcyBw
cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt
b2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisKK2NsYXNzIEtNTWVzc2FnZTsKK2NsYXNzIFFTdHJp
bmc7CitjbGFzcyBLTUZvbGRlcjsKK2NsYXNzIFFPYmplY3Q7CitjbGFzcyBLUHJvY2VzczsKKwor
I2luY2x1ZGUgPHFvYmplY3QuaD4KKworY2xhc3MgVGVtcGxhdGVQYXJzZXIgOiBwdWJsaWMgUU9i
amVjdCB7CisgICAgUV9PQkpFQ1QKKyAgICAKKyAgICBwdWJsaWM6CisgICAgCisgICAgICAgIGVu
dW0gTW9kZSB7TmV3TWVzc2FnZSwgUmVwbHksIFJlcGx5QWxsLCBGb3J3YXJkfTsKKyAgICAgICAg
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgUGlwZVRpbWVvdXQgPSAxNTsKKyAgICAKKyAgICBw
dWJsaWM6CisgICAgCisgICAgICAgIFRlbXBsYXRlUGFyc2VyKEtNTWVzc2FnZSogYW1zZywgTW9k
ZSBhbW9kZSwgUVN0cmluZyBhc2VsZWN0aW9uLCAKKyAgICAgICAgICAgIGJvb2wgYVNtYXJ0UXVv
dGUsIGJvb2wgYW5vUXVvdGUsIGJvb2wgYWFsbG93RGVjcnlwdGlvbiwgYm9vbCBhc2VsZWN0aW9u
SXNCb2R5KTsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKEtNTWVzc2Fn
ZSogYW9yaWdfbXNnLCBLTUZvbGRlciogYWZvbGRlciA9IE5VTEwpOworICAgICAgICB2aXJ0dWFs
IFFTdHJpbmcgZmluZFRlbXBsYXRlKCk7CisgICAgICAgIHZpcnR1YWwgUVN0cmluZyBwaXBlKFFT
dHJpbmcgY21kLCBRU3RyaW5nIGJ1Zik7CisgICAgCisgICAgcHJvdGVjdGVkOgorICAgIAorICAg
ICAgICBNb2RlIG1vZGU7CisgICAgICAgIEtNRm9sZGVyKiBmb2xkZXI7CisgICAgICAgIEtNTWVz
c2FnZSogbXNnOworICAgICAgICBLTU1lc3NhZ2UqIG9yaWdfbXNnOworICAgICAgICBRU3RyaW5n
IHNlbGVjdGlvbjsKKyAgICAgICAgYm9vbCBzbWFydFF1b3RlOworICAgICAgICBib29sIG5vUXVv
dGU7CisgICAgICAgIGJvb2wgYWxsb3dEZWNyeXB0aW9uOworICAgICAgICBib29sIHNlbGVjdGlv
bklzQm9keTsKKyAgICAgICAgaW50IHBpcGVfcmM7CisgICAgICAgIFFTdHJpbmcgcGlwZV9vdXQ7
CisgICAgICAgIFFTdHJpbmcgcGlwZV9lcnI7CisgICAgICAgIGJvb2wgZGVidWc7CisgICAgICAg
IFFTdHJpbmcgcXVvdGVTdHJpbmc7CisgICAgICAgIAorICAgICAgICBpbnQgcGFyc2VRdW90ZXMo
UVN0cmluZyBwcmVmaXgsIFFTdHJpbmcgc3RyLCBRU3RyaW5nJiBxdW90ZSk7CisgICAgCisgICAg
cHJvdGVjdGVkIHNsb3RzOgorICAgIAorICAgICAgICB2b2lkIG9uUHJvY2Vzc0V4aXRlZChLUHJv
Y2VzcyAqcHJvYyk7CisgICAgICAgIHZvaWQgb25SZWNlaXZlZFN0ZG91dChLUHJvY2VzcyAqcHJv
YywgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKTsKKyAgICAgICAgdm9pZCBvblJlY2VpdmVkU3Rk
ZXJyKEtQcm9jZXNzICpwcm9jLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pOworICAgICAgICB2
b2lkIG9uV3JvdGVTdGRpbihLUHJvY2VzcyAqcHJvYyk7CisgICAgICAgIAorfTsKSW5kZXg6IGtt
YWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb25fa2ZnLmtjZmcKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwv
dGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcua2NmZwkocmV2aXNpb24gMCkKKysrIGttYWlsL3Rl
bXBsYXRlc2NvbmZpZ3VyYXRpb25fa2ZnLmtjZmcJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMg
QEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8a2NmZyB4bWxucz0i
aHR0cDovL3d3dy5rZGUub3JnL3N0YW5kYXJkcy9rY2ZnLzEuMCIKKyAgICAgIHhtbG5zOnhzaT0i
aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICB4c2k6c2No
ZW1hTG9jYXRpb249Imh0dHA6Ly93d3cua2RlLm9yZy9zdGFuZGFyZHMva2NmZy8xLjAKKyAgICAg
IGh0dHA6Ly93d3cua2RlLm9yZy9zdGFuZGFyZHMva2NmZy8xLjAva2NmZy54c2QiID4KKyAgPGtj
ZmdmaWxlIG5hbWU9ImttYWlscmMiPgorICAgIDxwYXJhbWV0ZXIgbmFtZT0iZm9sZGVyIiAvPgor
ICA8L2tjZmdmaWxlPgorCisgIDxncm91cCBuYW1lPSJUZW1wbGF0ZXMgIyQoZm9sZGVyKSI+Cisg
ICAgPGVudHJ5IG5hbWU9IlVzZUN1c3RvbVRlbXBsYXRlcyIgdHlwZT0iQm9vbCIga2V5PSJVc2VD
dXN0b21UZW1wbGF0ZXMiPgorICAgICAgPGxhYmVsPjwvbGFiZWw+CisgICAgICA8d2hhdHN0aGlz
Pjwvd2hhdHN0aGlzPgorICAgICAgPGRlZmF1bHQ+ZmFsc2U8L2RlZmF1bHQ+CisgICAgPC9lbnRy
eT4KKyAgICA8ZW50cnkgbmFtZT0iVGVtcGxhdGVOZXdNZXNzYWdlIiB0eXBlPSJTdHJpbmciIGtl
eT0iVGVtcGxhdGVOZXdNZXNzYWdlIj4KKyAgICAgIDxsYWJlbD48L2xhYmVsPgorICAgICAgPHdo
YXRzdGhpcz48L3doYXRzdGhpcz4KKyAgICAgIDxkZWZhdWx0PjwvZGVmYXVsdD4KKyAgICA8L2Vu
dHJ5PgorICAgIDxlbnRyeSBuYW1lPSJUZW1wbGF0ZVJlcGx5IiB0eXBlPSJTdHJpbmciIGtleT0i
VGVtcGxhdGVSZXBseSI+CisgICAgICA8bGFiZWw+PC9sYWJlbD4KKyAgICAgIDx3aGF0c3RoaXM+
PC93aGF0c3RoaXM+CisgICAgICA8ZGVmYXVsdD48L2RlZmF1bHQ+CisgICAgPC9lbnRyeT4KKyAg
ICA8ZW50cnkgbmFtZT0iVGVtcGxhdGVSZXBseUFsbCIgdHlwZT0iU3RyaW5nIiBrZXk9IlRlbXBs
YXRlUmVwbHlBbGwiPgorICAgICAgPGxhYmVsPjwvbGFiZWw+CisgICAgICA8d2hhdHN0aGlzPjwv
d2hhdHN0aGlzPgorICAgICAgPGRlZmF1bHQ+PC9kZWZhdWx0PgorICAgIDwvZW50cnk+CisgICAg
PGVudHJ5IG5hbWU9IlRlbXBsYXRlRm9yd2FyZCIgdHlwZT0iU3RyaW5nIiBrZXk9IlRlbXBsYXRl
Rm9yd2FyZCI+CisgICAgICA8bGFiZWw+PC9sYWJlbD4KKyAgICAgIDx3aGF0c3RoaXM+PC93aGF0
c3RoaXM+CisgICAgICA8ZGVmYXVsdD48L2RlZmF1bHQ+CisgICAgPC9lbnRyeT4KKyAgICA8ZW50
cnkgbmFtZT0iUXVvdGVTdHJpbmciIHR5cGU9IlN0cmluZyIga2V5PSJRdW90ZVN0cmluZyI+Cisg
ICAgICA8bGFiZWw+PC9sYWJlbD4KKyAgICAgIDx3aGF0c3RoaXM+PC93aGF0c3RoaXM+CisgICAg
ICA8ZGVmYXVsdD48L2RlZmF1bHQ+CisgICAgPC9lbnRyeT4KKyAgPC9ncm91cD4KKworPC9rY2Zn
PgpJbmRleDoga21haWwva21jb21tYW5kcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwva21jb21t
YW5kcy5jcHAJKHJldmlzaW9uIDU5NTk1NikKKysrIGttYWlsL2ttY29tbWFuZHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDcgQEAKICNpbmNsdWRlICJyZWRpcmVjdGRpYWxvZy5o
IgogdXNpbmcgS01haWw6OlJlZGlyZWN0RGlhbG9nOwogI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNs
dWRlICJ0ZW1wbGF0ZXBhcnNlci5oIgogCiAjaW5jbHVkZSAiYnJvYWRjYXN0c3RhdHVzLmgiCiAj
aW5jbHVkZSAiZ2xvYmFsc2V0dGluZ3MuaCIKQEAgLTExODUsNyArMTE4Niw3IEBACiAgICAgewog
ICAgICAgS01haWw6OkNvbXBvc2VyICogd2luID0gS01haWw6Om1ha2VDb21wb3NlciggZndkTXNn
LCBpZCApOwogICAgICAgd2luLT5zZXRDaGFyc2V0KCBmd2RNc2ctPmNvZGVjKCktPm1pbWVOYW1l
KCksIHRydWUgKTsKLSAgICAgIHdpbi0+c2V0Qm9keSggUVN0cmluZzo6ZnJvbVV0ZjgoIG1zZy0+
Y3JlYXRlRm9yd2FyZEJvZHkoKSApICk7CisgICAgICAvLyB3aW4tPnNldEJvZHkoIFFTdHJpbmc6
OmZyb21VdGY4KCBtc2ctPmNyZWF0ZUZvcndhcmRCb2R5KCkgKSApOwogICAgICAgd2luLT5zaG93
KCk7CiAgICAgfQogICB9CkluZGV4OiBrbWFpbC9rbWFpbC5rY2ZnCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtt
YWlsL2ttYWlsLmtjZmcJKHJldmlzaW9uIDU5NTk1NikKKysrIGttYWlsL2ttYWlsLmtjZmcJKHdv
cmtpbmcgY29weSkKQEAgLTUsNiArNSw4IEBACiAgICAgICBodHRwOi8vd3d3LmtkZS5vcmcvc3Rh
bmRhcmRzL2tjZmcvMS4wL2tjZmcueHNkIiA+CiAgIDxpbmNsdWRlPmttZ2xvYmFsLmg8L2luY2x1
ZGU+CiAgIDxpbmNsdWRlPnF0ZXh0Y29kZWMuaDwvaW5jbHVkZT4KKyAgPGluY2x1ZGU+dGVtcGxh
dGVzY29uZmlndXJhdGlvbi5oPC9pbmNsdWRlPgorICA8aW5jbHVkZT50ZW1wbGF0ZXNjb25maWd1
cmF0aW9uaW1wbC5oPC9pbmNsdWRlPgogICA8a2NmZ2ZpbGUgbmFtZT0ia21haWxyYyIvPgogICAg
IDxncm91cCBuYW1lPSJCZWhhdmlvdXIiPgogICAgICAgPGVudHJ5IG5hbWU9IkRlbGF5ZWRNYXJr
QXNSZWFkIiAgdHlwZT0iQm9vbCI+CkBAIC00NTEsNCArNDUzLDMyIEBACiAgICAgICA8L2VudHJ5
PgogICAgIDwvZ3JvdXA+CiAKKyAgPGdyb3VwIG5hbWU9Ikdsb2JhbFRlbXBsYXRlcyI+CisgICAg
PGVudHJ5IG5hbWU9IlRlbXBsYXRlTmV3TWVzc2FnZSIgdHlwZT0iU3RyaW5nIiBrZXk9IlRlbXBs
YXRlTmV3TWVzc2FnZSI+CisgICAgICA8bGFiZWw+TWVzc2FnZSB0ZW1wbGF0ZSBmb3IgbmV3IG1l
c3NhZ2U8L2xhYmVsPgorICAgICAgPHdoYXRzdGhpcz48L3doYXRzdGhpcz4KKyAgICAgIDxkZWZh
dWx0IGNvZGU9InRydWUiPlRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OmRlZmF1bHROZXdNZXNzYWdl
KCk8L2RlZmF1bHQ+CisgICAgPC9lbnRyeT4KKyAgICA8ZW50cnkgbmFtZT0iVGVtcGxhdGVSZXBs
eSIgdHlwZT0iU3RyaW5nIiBrZXk9IlRlbXBsYXRlUmVwbHkiPgorICAgICAgPGxhYmVsPk1lc3Nh
Z2UgdGVtcGxhdGUgZm9yIHJlcGx5PC9sYWJlbD4KKyAgICAgIDx3aGF0c3RoaXM+PC93aGF0c3Ro
aXM+CisgICAgICA8ZGVmYXVsdCBjb2RlPSJ0cnVlIj5UZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpk
ZWZhdWx0UmVwbHkoKTwvZGVmYXVsdD4KKyAgICA8L2VudHJ5PgorICAgIDxlbnRyeSBuYW1lPSJU
ZW1wbGF0ZVJlcGx5QWxsIiB0eXBlPSJTdHJpbmciIGtleT0iVGVtcGxhdGVSZXBseUFsbCI+Cisg
ICAgICA8bGFiZWw+TWVzc2FnZSB0ZW1wbGF0ZSBmb3IgcmVwbHkgdG8gYWxsPC9sYWJlbD4KKyAg
ICAgIDx3aGF0c3RoaXM+PC93aGF0c3RoaXM+CisgICAgICA8ZGVmYXVsdCBjb2RlPSJ0cnVlIj5U
ZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpkZWZhdWx0UmVwbHlBbGwoKTwvZGVmYXVsdD4KKyAgICA8
L2VudHJ5PgorICAgIDxlbnRyeSBuYW1lPSJUZW1wbGF0ZUZvcndhcmQiIHR5cGU9IlN0cmluZyIg
a2V5PSJUZW1wbGF0ZUZvcndhcmQiPgorICAgICAgPGxhYmVsPk1lc3NhZ2UgdGVtcGxhdGUgZm9y
IGZvcndhcmQ8L2xhYmVsPgorICAgICAgPHdoYXRzdGhpcz48L3doYXRzdGhpcz4KKyAgICAgIDxk
ZWZhdWx0IGNvZGU9InRydWUiPlRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OmRlZmF1bHRGb3J3YXJk
KCk8L2RlZmF1bHQ+CisgICAgPC9lbnRyeT4KKyAgICA8ZW50cnkgbmFtZT0iUXVvdGVTdHJpbmci
IHR5cGU9IlN0cmluZyIga2V5PSJRdW90ZVN0cmluZyI+CisgICAgICA8bGFiZWw+UXVvdGUgY2hh
cmFjdGVyczwvbGFiZWw+CisgICAgICA8d2hhdHN0aGlzPjwvd2hhdHN0aGlzPgorICAgICAgPGRl
ZmF1bHQgY29kZT0idHJ1ZSI+VGVtcGxhdGVzQ29uZmlndXJhdGlvbjo6ZGVmYXVsdFF1b3RlU3Ry
aW5nKCk8L2RlZmF1bHQ+CisgICAgPC9lbnRyeT4KKyAgPC9ncm91cD4KKwogPC9rY2ZnPgpJbmRl
eDoga21haWwva21tYWlud2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC9rbW1haW53aWRn
ZXQuY3BwCShyZXZpc2lvbiA1OTU5NTYpCisrKyBrbWFpbC9rbW1haW53aWRnZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Myw2ICs5Myw3IEBACiB1c2luZyBLTWFpbDo6SGVhZGVyTGlzdFF1aWNr
U2VhcmNoOwogI2luY2x1ZGUgImttaGVhZGVycy5oIgogI2luY2x1ZGUgIm1haWxpbmdsaXN0cHJv
cGVydGllc2RpYWxvZy5oIgorI2luY2x1ZGUgInRlbXBsYXRlcGFyc2VyLmgiCiAKICNpZiAhZGVm
aW5lZChOREVCVUcpCiAgICAgI2luY2x1ZGUgInNpZXZlZGVidWdkaWFsb2cuaCIKQEAgLTg4MSw5
ICs4ODIsMTUgQEAKIAogICBpZiAoIG1Gb2xkZXIgKSB7CiAgICAgICBtc2ctPmluaXRIZWFkZXIo
IG1Gb2xkZXItPmlkZW50aXR5KCkgKTsKKyAgICAgIFRlbXBsYXRlUGFyc2VyIHBhcnNlciggbXNn
LCBUZW1wbGF0ZVBhcnNlcjo6TmV3TWVzc2FnZSwgCisJIiIsIGZhbHNlLCBmYWxzZSwgZmFsc2Us
IGZhbHNlICk7CisgICAgICBwYXJzZXIucHJvY2VzcyggTlVMTCwgbUZvbGRlciApOwogICAgICAg
d2luID0gS01haWw6Om1ha2VDb21wb3NlciggbXNnLCBtRm9sZGVyLT5pZGVudGl0eSgpICk7CiAg
IH0gZWxzZSB7CiAgICAgICBtc2ctPmluaXRIZWFkZXIoKTsKKyAgICAgIFRlbXBsYXRlUGFyc2Vy
IHBhcnNlciggbXNnLCBUZW1wbGF0ZVBhcnNlcjo6TmV3TWVzc2FnZSwgCisJIiIsIGZhbHNlLCBm
YWxzZSwgZmFsc2UsIGZhbHNlICk7CisgICAgICBwYXJzZXIucHJvY2VzcyggTlVMTCwgTlVMTCAp
OwogICAgICAgd2luID0gS01haWw6Om1ha2VDb21wb3NlciggbXNnICk7CiAgIH0KIApJbmRleDog
a21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGttYWls
L3RlbXBsYXRlc2NvbmZpZ3VyYXRpb25pbXBsLmNwcAkocmV2aXNpb24gMCkKKysrIGttYWlsL3Rl
bXBsYXRlc2NvbmZpZ3VyYXRpb25pbXBsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNTkg
QEAKKy8qICAgLSotIG1vZGU6IEMrKzsgYy1maWxlLXN0eWxlOiAiZ251IiAtKi0KKyAqICAga21h
aWw6IEtERSBtYWlsIGNsaWVudAorICogICBUaGlzIGZpbGU6IENvcHlyaWdodCAoQykgMjAwNiBE
bWl0cnkgTW9yb3pobmlrb3YKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxj
b25maWcuaD4KKworI2luY2x1ZGUgPGtsb2NhbGUuaD4KKyNpbmNsdWRlIDxrZ2xvYmFsLmg+Cisj
aW5jbHVkZSA8cXBvcHVwbWVudS5oPgorI2luY2x1ZGUgPHFwdXNoYnV0dG9uLmg+CisjaW5jbHVk
ZSA8cXRleHRlZGl0Lmg+CisjaW5jbHVkZSA8cWxpbmVlZGl0Lmg+CisjaW5jbHVkZSA8cXRvb2xi
b3guaD4KKyNpbmNsdWRlIDxrZGVidWcuaD4KKyNpbmNsdWRlIDxxZm9udC5oPgorCisjaW5jbHVk
ZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgInRlbXBsYXRlc2NvbmZpZ3Vy
YXRpb25fa2ZnLmgiCisjaW5jbHVkZSAiZ2xvYmFsc2V0dGluZ3MuaCIKKworI2luY2x1ZGUgInRl
bXBsYXRlc2NvbmZpZ3VyYXRpb25pbXBsLmgiCisKK1RlbXBsYXRlc0NvbmZpZ3VyYXRpb246OlRl
bXBsYXRlc0NvbmZpZ3VyYXRpb24oUVdpZGdldCAqcGFyZW50LCBjb25zdCBjaGFyICpuYW1lKQor
ICAgIDpUZW1wbGF0ZXNDb25maWd1cmF0aW9uU3R1YihwYXJlbnQsIG5hbWUpCit7CisgICAgUUZv
bnQgZigiQ291cmllciBOZXciKTsKKyAgICB0ZXh0RWRpdF9uZXctPnNldEZvbnQoZik7CisgICAg
dGV4dEVkaXRfcmVwbHktPnNldEZvbnQoZik7CisgICAgdGV4dEVkaXRfcmVwbHlfYWxsLT5zZXRG
b250KGYpOworICAgIHRleHRFZGl0X2ZvcndhcmQtPnNldEZvbnQoZik7CisgICAgCisgICAgc2V0
U2l6ZVBvbGljeShRU2l6ZVBvbGljeTo6RXhwYW5kaW5nLCBRU2l6ZVBvbGljeTo6RXhwYW5kaW5n
KTsKKyAgICBzaXplSGludCgpOworICAgIAorICAgIGNvbm5lY3QoIHRleHRFZGl0X25ldywgU0lH
TkFMKCB0ZXh0Q2hhbmdlZCgpICksCisJICAgIHRoaXMsIFNMT1QoIHNsb3RUZXh0Q2hhbmdlZCgg
dm9pZCApICkgKTsKKyAgICBjb25uZWN0KCB0ZXh0RWRpdF9yZXBseSwgU0lHTkFMKCB0ZXh0Q2hh
bmdlZCgpICksCisJICAgIHRoaXMsIFNMT1QoIHNsb3RUZXh0Q2hhbmdlZCggdm9pZCApICkgKTsK
KyAgICBjb25uZWN0KCB0ZXh0RWRpdF9yZXBseV9hbGwsIFNJR05BTCggdGV4dENoYW5nZWQoKSAp
LAorCSAgICB0aGlzLCBTTE9UKCBzbG90VGV4dENoYW5nZWQoIHZvaWQgKSApICk7CisgICAgY29u
bmVjdCggdGV4dEVkaXRfZm9yd2FyZCwgU0lHTkFMKCB0ZXh0Q2hhbmdlZCgpICksCisJICAgIHRo
aXMsIFNMT1QoIHNsb3RUZXh0Q2hhbmdlZCggdm9pZCApICkgKTsKKyAgICBjb25uZWN0KCBsaW5l
RWRpdF9xdW90ZSwgU0lHTkFMKCB0ZXh0Q2hhbmdlZCggY29uc3QgUVN0cmluZyAmICkgKSwKKwkg
ICAgdGhpcywgU0xPVCggc2xvdFRleHRDaGFuZ2VkKCB2b2lkICkgKSApOworfTsKKwordm9pZCBU
ZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpzbG90VGV4dENoYW5nZWQoKSB7CisgICAgZW1pdCBjaGFu
Z2VkKCk7Cit9OworCit2b2lkIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OmxvYWRGcm9tR2xvYmFs
KCkgeworICAgIFFTdHJpbmcgc3RyOworICAgIHN0ciA9IEdsb2JhbFNldHRpbmdzOjpzZWxmKCkt
PnRlbXBsYXRlTmV3TWVzc2FnZSgpOworICAgIGlmKHN0ci5pc0VtcHR5KCkpIHsKKyAgICAgICAg
dGV4dEVkaXRfbmV3LT5zZXRUZXh0KGRlZmF1bHROZXdNZXNzYWdlKCkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHRleHRFZGl0X25ldy0+c2V0VGV4dChzdHIpOworICAgIH07CisgICAgc3RyID0g
R2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+dGVtcGxhdGVSZXBseSgpOworICAgIGlmKHN0ci5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgdGV4dEVkaXRfcmVwbHktPnNldFRleHQoZGVmYXVsdFJlcGx5KCkp
OworICAgIH0gZWxzZSB7CisgICAgICAgIHRleHRFZGl0X3JlcGx5LT5zZXRUZXh0KHN0cik7Cisg
ICAgfTsKKyAgICBzdHIgPSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT50ZW1wbGF0ZVJlcGx5QWxs
KCk7CisgICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAgICB0ZXh0RWRpdF9yZXBseV9hbGwt
PnNldFRleHQoZGVmYXVsdFJlcGx5QWxsKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRleHRF
ZGl0X3JlcGx5X2FsbC0+c2V0VGV4dChzdHIpOworICAgIH07CisgICAgc3RyID0gR2xvYmFsU2V0
dGluZ3M6OnNlbGYoKS0+dGVtcGxhdGVGb3J3YXJkKCk7CisgICAgaWYoc3RyLmlzRW1wdHkoKSkg
eworICAgICAgICB0ZXh0RWRpdF9mb3J3YXJkLT5zZXRUZXh0KGRlZmF1bHRGb3J3YXJkKCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHRleHRFZGl0X2ZvcndhcmQtPnNldFRleHQoc3RyKTsKKyAg
ICB9OworICAgIHN0ciA9IEdsb2JhbFNldHRpbmdzOjpzZWxmKCktPnF1b3RlU3RyaW5nKCk7Cisg
ICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAgICBsaW5lRWRpdF9xdW90ZS0+c2V0VGV4dChk
ZWZhdWx0UXVvdGVTdHJpbmcoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGluZUVkaXRfcXVv
dGUtPnNldFRleHQoc3RyKTsKKyAgICB9OworfTsKKwordm9pZCBUZW1wbGF0ZXNDb25maWd1cmF0
aW9uOjpzYXZlVG9HbG9iYWwoKSB7CisgICAgR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+c2V0VGVt
cGxhdGVOZXdNZXNzYWdlKHRleHRFZGl0X25ldy0+dGV4dCgpKTsKKyAgICBHbG9iYWxTZXR0aW5n
czo6c2VsZigpLT5zZXRUZW1wbGF0ZVJlcGx5KHRleHRFZGl0X3JlcGx5LT50ZXh0KCkpOworICAg
IEdsb2JhbFNldHRpbmdzOjpzZWxmKCktPnNldFRlbXBsYXRlUmVwbHlBbGwodGV4dEVkaXRfcmVw
bHlfYWxsLT50ZXh0KCkpOworICAgIEdsb2JhbFNldHRpbmdzOjpzZWxmKCktPnNldFRlbXBsYXRl
Rm9yd2FyZCh0ZXh0RWRpdF9mb3J3YXJkLT50ZXh0KCkpOworICAgIEdsb2JhbFNldHRpbmdzOjpz
ZWxmKCktPnNldFF1b3RlU3RyaW5nKGxpbmVFZGl0X3F1b3RlLT50ZXh0KCkpOworICAgIEdsb2Jh
bFNldHRpbmdzOjpzZWxmKCktPndyaXRlQ29uZmlnKCk7Cit9OworCit2b2lkIFRlbXBsYXRlc0Nv
bmZpZ3VyYXRpb246OmxvYWRGcm9tRm9sZGVyKFFTdHJpbmcgaWQpIHsKKyAgICBUZW1wbGF0ZXMg
dChpZCk7CisgICAgCisgICAgUVN0cmluZyBzdHI7CisgICAgCisgICAgc3RyID0gdC50ZW1wbGF0
ZU5ld01lc3NhZ2UoKTsKKyAgICBpZihzdHIuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0ciA9IEds
b2JhbFNldHRpbmdzOjpzZWxmKCktPnRlbXBsYXRlTmV3TWVzc2FnZSgpOworICAgIH07CisgICAg
aWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAgICBzdHIgPSBkZWZhdWx0TmV3TWVzc2FnZSgpOwor
ICAgIH07CisgICAgdGV4dEVkaXRfbmV3LT5zZXRUZXh0KHN0cik7CisgICAgCisgICAgc3RyID0g
dC50ZW1wbGF0ZVJlcGx5KCk7CisgICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAgICBzdHIg
PSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT50ZW1wbGF0ZVJlcGx5KCk7CisgICAgfTsKKyAgICBp
ZihzdHIuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0ciA9IGRlZmF1bHRSZXBseSgpOworICAgIH07
CisgICAgdGV4dEVkaXRfcmVwbHktPnNldFRleHQoc3RyKTsKKyAgICAKKyAgICBzdHIgPSB0LnRl
bXBsYXRlUmVwbHlBbGwoKTsKKyAgICBpZihzdHIuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0ciA9
IEdsb2JhbFNldHRpbmdzOjpzZWxmKCktPnRlbXBsYXRlUmVwbHlBbGwoKTsKKyAgICB9OworICAg
IGlmKHN0ci5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3RyID0gZGVmYXVsdFJlcGx5QWxsKCk7Cisg
ICAgfTsKKyAgICB0ZXh0RWRpdF9yZXBseV9hbGwtPnNldFRleHQoc3RyKTsKKyAgICAKKyAgICBz
dHIgPSB0LnRlbXBsYXRlRm9yd2FyZCgpOworICAgIGlmKHN0ci5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgc3RyID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+dGVtcGxhdGVGb3J3YXJkKCk7CisgICAg
fTsKKyAgICBpZihzdHIuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0ciA9IGRlZmF1bHRGb3J3YXJk
KCk7CisgICAgfTsKKyAgICB0ZXh0RWRpdF9mb3J3YXJkLT5zZXRUZXh0KHN0cik7CisgICAgCisg
ICAgc3RyID0gdC5xdW90ZVN0cmluZygpOworICAgIGlmKHN0ci5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgc3RyID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+cXVvdGVTdHJpbmcoKTsKKyAgICB9Owor
ICAgIGlmKHN0ci5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3RyID0gZGVmYXVsdFF1b3RlU3RyaW5n
KCk7CisgICAgfTsKKyAgICBsaW5lRWRpdF9xdW90ZS0+c2V0VGV4dChzdHIpOworfTsKKwordm9p
ZCBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpzYXZlVG9Gb2xkZXIoUVN0cmluZyBpZCkgeworICAg
IFRlbXBsYXRlcyB0KGlkKTsKKyAgICAKKyAgICB0LnNldFRlbXBsYXRlTmV3TWVzc2FnZSh0ZXh0
RWRpdF9uZXctPnRleHQoKSk7CisgICAgdC5zZXRUZW1wbGF0ZVJlcGx5KHRleHRFZGl0X3JlcGx5
LT50ZXh0KCkpOworICAgIHQuc2V0VGVtcGxhdGVSZXBseUFsbCh0ZXh0RWRpdF9yZXBseV9hbGwt
PnRleHQoKSk7CisgICAgdC5zZXRUZW1wbGF0ZUZvcndhcmQodGV4dEVkaXRfZm9yd2FyZC0+dGV4
dCgpKTsKKyAgICB0LnNldFF1b3RlU3RyaW5nKGxpbmVFZGl0X3F1b3RlLT50ZXh0KCkpOworICAg
IHQud3JpdGVDb25maWcoKTsKK307CisKK3ZvaWQgVGVtcGxhdGVzQ29uZmlndXJhdGlvbjo6YnV0
dG9uX2luc2VydF9jbGlja2VkKCkgeworICAgIFFQb3B1cE1lbnUgcG9wdXAoYnV0dG9uX2luc2Vy
dCk7CisgICAgCisgICAgUVBvcHVwTWVudSBxdW90ZV9wb3B1cCgmcG9wdXApOworICAgIHF1b3Rl
X3BvcHVwLmluc2VydEl0ZW0oaTE4bigiUXVvdGVkIG1lc3NhZ2UiKSwgQ1F1b3RlKTsKKyAgICBx
dW90ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIk1lc3NhZ2UgdGV4dCBhcyBpcyIpLCBDVGV4dCk7
CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJNZXNzYWdlIGlkIiksIENPTXNnSWQp
OworICAgIHF1b3RlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiRGF0ZSIpLCBDT0RhdGUpOworICAg
IHF1b3RlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiRGF0ZSBpbiBzaG9ydCBmb3JtYXQiKSwgQ09E
YXRlU2hvcnQpOworICAgIHF1b3RlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiRGF0ZSBpbiBDIGxv
Y2FsZSIpLCBDT0RhdGVFbik7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJEYXkg
b2Ygd2VlayIpLCBDT0Rvdyk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJUaW1l
IiksIENPVGltZSk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJUaW1lIGluIGxv
bmcgZm9ybWF0IiksIENPVGltZUxvbmcpOworICAgIHF1b3RlX3BvcHVwLmluc2VydEl0ZW0oaTE4
bigiVGltZSBpbiBDIGxvY2FsZSIpLCBDT1RpbWVMb25nRW4pOworICAgIHF1b3RlX3BvcHVwLmlu
c2VydEl0ZW0oaTE4bigiVG8gZmllbGQgYWRkcmVzcyIpLCBDT1RvQWRkcik7CisgICAgcXVvdGVf
cG9wdXAuaW5zZXJ0SXRlbShpMThuKCJUbyBmaWVsZCBuYW1lIiksIENPVG9OYW1lKTsKKyAgICBx
dW90ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkZyb20gZmllbGQgYWRkcmVzcyIpLCBDT0Zyb21B
ZGRyKTsKKyAgICBxdW90ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkZyb20gZmllbGQgbmFtZSIp
LCBDT0Zyb21OYW1lKTsKKyAgICBxdW90ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlN1YmplY3Qi
KSwgQ09GdWxsU3ViamVjdCk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJRdW90
ZWQgaGVhZGVycyIpLCBDUUhlYWRlcnMpOworICAgIHF1b3RlX3BvcHVwLmluc2VydEl0ZW0oaTE4
bigiSGVhZGVycyBhcyBpcyIpLCBDSGVhZGVycyk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRl
bShpMThuKCJIZWFkZXIgY29udGVudCIpLCBDT0hlYWRlcik7CisgICAgcG9wdXAuaW5zZXJ0SXRl
bShpMThuKCJPcmlnaW5hbCBtZXNzYWdlIiksICZxdW90ZV9wb3B1cCk7CisgICAgCisgICAgUVBv
cHVwTWVudSBtc2dfcG9wdXAoJnBvcHVwKTsKKyAgICBtc2dfcG9wdXAuaW5zZXJ0SXRlbShpMThu
KCJNZXNzYWdlIGlkIiksIENNc2dJZCk7CisgICAgbXNnX3BvcHVwLmluc2VydEl0ZW0oaTE4bigi
RGF0ZSIpLCBDRGF0ZSk7CisgICAgbXNnX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiRGF0ZSBpbiBz
aG9ydCBmb3JtYXQiKSwgQ0RhdGVTaG9ydCk7CisgICAgbXNnX3BvcHVwLmluc2VydEl0ZW0oaTE4
bigiRGF0ZSBpbiBDIGxvY2FsZSIpLCBDRGF0ZUVuKTsKKyAgICBtc2dfcG9wdXAuaW5zZXJ0SXRl
bShpMThuKCJEYXkgb2Ygd2VlayIpLCBDRG93KTsKKyAgICBtc2dfcG9wdXAuaW5zZXJ0SXRlbShp
MThuKCJUaW1lIiksIENUaW1lKTsKKyAgICBtc2dfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJUaW1l
IGluIGxvbmcgZm9ybWF0IiksIENUaW1lTG9uZyk7CisgICAgbXNnX3BvcHVwLmluc2VydEl0ZW0o
aTE4bigiVGltZSBpbiBDIGxvY2FsZSIpLCBDVGltZUxvbmdFbik7CisgICAgbXNnX3BvcHVwLmlu
c2VydEl0ZW0oaTE4bigiVG8gZmllbGQgYWRkcmVzcyIpLCBDVG9BZGRyKTsKKyAgICBtc2dfcG9w
dXAuaW5zZXJ0SXRlbShpMThuKCJUbyBmaWVsZCBuYW1lIiksIENUb05hbWUpOworICAgIG1zZ19w
b3B1cC5pbnNlcnRJdGVtKGkxOG4oIkZyb20gZmllbGQgYWRkcmVzcyIpLCBDRnJvbUFkZHIpOwor
ICAgIG1zZ19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkZyb20gZmllbGQgbmFtZSIpLCBDRnJvbU5h
bWUpOworICAgIG1zZ19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlN1YmplY3QiKSwgQ0Z1bGxTdWJq
ZWN0KTsKKyAgICBtc2dfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJIZWFkZXIgY29udGVudCIpLCBD
SGVhZGVyKTsKKyAgICBwb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkN1cnJlbnQgbWVzc2FnZSIpLCAm
bXNnX3BvcHVwKTsKKyAgICAKKyAgICBRUG9wdXBNZW51IHBpcGVfcG9wdXAoJnBvcHVwKTsKKyAg
ICBwaXBlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiSW5zZXJ0IHJlc3VsdCBvZiBjb21tYW5kIiks
IENTeXN0ZW0pOworICAgIHBpcGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJQaXBlIG9yaWdpbmFs
IG1lc3NhZ2UgYm9keSBhbmQgaW5zZXJ0IHJlc3VsdCBhcyBxdW90ZWQgdGV4dCIpLCBDUXVvdGVQ
aXBlKTsKKyAgICBwaXBlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiUGlwZSBvcmlnaW5hbCBtZXNz
YWdlIGJvZHkgYW5kIGluc2VydCByZXN1bHQgYXMgaXMiKSwgQ1RleHRQaXBlKTsKKyAgICBwaXBl
X3BvcHVwLmluc2VydEl0ZW0oaTE4bigiUGlwZSBvcmlnaW5hbCBtZXNzYWdlIHdpdGggaGVhZGVy
cyBhbmQgaW5zZXJ0IHJlc3VsdCBhcyBpcyIpLCBDTXNnUGlwZSk7CisgICAgcGlwZV9wb3B1cC5p
bnNlcnRJdGVtKGkxOG4oIlBpcGUgY3VycmVudCBtZXNzYWdlIGJvZHkgYW5kIGluc2VydCByZXN1
bHQgYXMgaXMiKSwgQ0JvZHlQaXBlKTsKKyAgICBwaXBlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigi
UGlwZSBjdXJyZW50IG1lc3NhZ2UgYm9keSBhbmQgcmVwbGFjZSB3aXRoIHJlc3VsdCIpLCBDQ2xl
YXJQaXBlKTsKKyAgICBwb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlByb2Nlc3Mgd2l0aCBleHRlcm5h
bCBwcm9ncmFtcyIpLCAmcGlwZV9wb3B1cCk7CisgICAgCisgICAgUVBvcHVwTWVudSBtaXNjX3Bv
cHVwKCZwb3B1cCk7CisgICAgbWlzY19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkluc2VydCBmaWxl
IGNvbnRlbnQiKSwgQ0luc2VydCk7CisgICAgbWlzY19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkRO
TCIpLCBDRG5sKTsKKyAgICBtaXNjX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiVGVtcGxhdGUgY29t
bWVudCIpLCBDUmVtKTsKKyAgICBtaXNjX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiTm8gb3BlcmF0
aW9uIiksIENOb3ApOworICAgIG1pc2NfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJDbGVhciBnZW5l
cmF0ZWQgbWVzc2FnZSIpLCBDQ2xlYXIpOworICAgIG1pc2NfcG9wdXAuaW5zZXJ0SXRlbShpMThu
KCJUdXJuIGRlYnVnIG9uIiksIENEZWJ1Zyk7CisgICAgbWlzY19wb3B1cC5pbnNlcnRJdGVtKGkx
OG4oIlR1cm4gZGVidWcgb2ZmIiksIENEZWJ1Z09mZik7CisgICAgcG9wdXAuaW5zZXJ0SXRlbShp
MThuKCJNaXNjZWxhbmVvdXMiKSwgJm1pc2NfcG9wdXApOworICAgIAorICAgIFFTaXplIHBzID0g
cG9wdXAuc2l6ZUhpbnQoKTsKKyAgICBpbnQgaW5kZXggPSBwb3B1cC5leGVjKGJ1dHRvbl9pbnNl
cnQtPm1hcFRvR2xvYmFsKFFQb2ludCgwLC0ocHMuaGVpZ2h0KCkpKSkpOworICAgIAorICAgIC8v
IGtkRGVidWcoKSA8PCAiVGVtcGxhdGUgY29tbWFuZCBpbmRleDogIiA8PCBpbmRleCA8PCBlbmRs
OworICAgIAorICAgIGlmKGluZGV4ID4gMCkgeworICAgICAgICBzd2l0Y2goaW5kZXgpIHsKKyAg
ICAgICAgICAgIGNhc2UgQ1F1b3RlOiBpbnNlcnRDb21tYW5kKCIlUVVPVEUiKTsgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIENUZXh0OiBpbnNlcnRDb21tYW5kKCIlVEVYVCIpOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQ09Nc2dJZDogaW5zZXJ0Q29tbWFuZCgiJU9NU0dJRCIpOyBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgQ09EYXRlOiBpbnNlcnRDb21tYW5kKCIlT0RBVEUiKTsgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENPRGF0ZVNob3J0OiBpbnNlcnRDb21tYW5kKCIlT0RBVEVTSE9S
VCIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09EYXRlRW46IGluc2VydENvbW1hbmQoIiVP
REFURUVOIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0RvdzogaW5zZXJ0Q29tbWFuZCgi
JU9ET1ciKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPVGltZTogaW5zZXJ0Q29tbWFuZCgi
JU9USU1FIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT1RpbWVMb25nOiBpbnNlcnRDb21t
YW5kKCIlT1RJTUVMT05HIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT1RpbWVMb25nRW46
IGluc2VydENvbW1hbmQoIiVPVElNRUxPTkdFTiIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Q09Ub0FkZHI6IGluc2VydENvbW1hbmQoIiVPVE9BRERSIik7IGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBDT1RvTmFtZTogaW5zZXJ0Q29tbWFuZCgiJU9UT05BTUUiKTsgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIENPRnJvbUFkZHI6IGluc2VydENvbW1hbmQoIiVPRlJPTUFERFIiKTsgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENPRnJvbU5hbWU6IGluc2VydENvbW1hbmQoIiVPRlJPTU5BTUUi
KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPRnVsbFN1YmplY3Q6IGluc2VydENvbW1hbmQo
IiVPRlVMTFNVQkpFQ1QiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENRSGVhZGVyczogaW5z
ZXJ0Q29tbWFuZCgiJVFIRUFERVJTIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDSGVhZGVy
czogaW5zZXJ0Q29tbWFuZCgiJUhFQURFUlMiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENP
SGVhZGVyOiBpbnNlcnRDb21tYW5kKCIlT0hFQURFUj1cIlwiIiwgLTEpOyBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQ01zZ0lkOiBpbnNlcnRDb21tYW5kKCIlTVNHSUQiKTsgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIENEYXRlOiBpbnNlcnRDb21tYW5kKCIlREFURSIpOyBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQ0RhdGVTaG9ydDogaW5zZXJ0Q29tbWFuZCgiJURBVEVTSE9SVCIpOyBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQ0RhdGVFbjogaW5zZXJ0Q29tbWFuZCgiJURBVEVFTiIpOyBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0RvdzogaW5zZXJ0Q29tbWFuZCgiJURPVyIpOyBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQ1RpbWU6IGluc2VydENvbW1hbmQoIiVUSU1FIik7IGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDVGltZUxvbmc6IGluc2VydENvbW1hbmQoIiVUSU1FTE9ORyIp
OyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1RpbWVMb25nRW46IGluc2VydENvbW1hbmQoIiVU
SU1FTE9OR0VOIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDVG9BZGRyOiBpbnNlcnRDb21t
YW5kKCIlVE9BRERSIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDVG9OYW1lOiBpbnNlcnRD
b21tYW5kKCIlVE9OQU1FIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDRnJvbUFkZHI6IGlu
c2VydENvbW1hbmQoIiVGUk9NQUREUiIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0Zyb21O
YW1lOiBpbnNlcnRDb21tYW5kKCIlRlJPTU5BTUUiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IENGdWxsU3ViamVjdDogaW5zZXJ0Q29tbWFuZCgiJUZVTExTVUJKRUNUIik7IGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBDSGVhZGVyOiBpbnNlcnRDb21tYW5kKCIlSEVBREVSPVwiXCIiLCAtMSk7
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU3lzdGVtOiBpbnNlcnRDb21tYW5kKCIlU1lTVEVN
PVwiXCIiLCAtMSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDUXVvdGVQaXBlOiBpbnNlcnRD
b21tYW5kKCIlUVVPVEVQSVBFPVwiXCIiLCAtMSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBD
VGV4dFBpcGU6IGluc2VydENvbW1hbmQoIiVURVhUUElQRT1cIlwiIiwgLTEpOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQ01zZ1BpcGU6IGluc2VydENvbW1hbmQoIiVNU0dQSVBFPVwiXCIiLCAt
MSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDQm9keVBpcGU6IGluc2VydENvbW1hbmQoIiVC
T0RZUElQRT1cIlwiIiwgLTEpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0NsZWFyUGlwZTog
aW5zZXJ0Q29tbWFuZCgiJUNMRUFSUElQRT1cIlwiIiwgLTEpOyBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQ0luc2VydDogaW5zZXJ0Q29tbWFuZCgiJUlOU0VSVD1cIlwiIiwgLTEpOyBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgQ0RubDogaW5zZXJ0Q29tbWFuZCgiJS0iKTsgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIENSZW06IGluc2VydENvbW1hbmQoIiVSRU09XCJcIiIsIC0xKTsgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENOb3A6IGluc2VydENvbW1hbmQoIiVOT1AiKTsgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIENDbGVhcjogaW5zZXJ0Q29tbWFuZCgiJUNMRUFSIik7IGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBDRGVidWc6IGluc2VydENvbW1hbmQoIiVERUJVRyIpOyBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgQ0RlYnVnT2ZmOiBpbnNlcnRDb21tYW5kKCIlREVCVUdPRkYiKTsg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiAKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkg
PDwgIlVua25vd24gdGVtcGxhdGUgY29tbWFuZCBpbmRleDogIiA8PCBpbmRleCA8PCBlbmRsOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9OworICAgIH07Cit9OworCit2b2lkIFRl
bXBsYXRlc0NvbmZpZ3VyYXRpb246Omluc2VydENvbW1hbmQoUVN0cmluZyBjbWQsIGludCBhZGp1
c3RDdXJzb3IpIHsKKyAgICBRVGV4dEVkaXQqIGVkaXQ7CisgICAgCisgICAgaWYodG9vbEJveDEt
PmN1cnJlbnRJdGVtKCkgPT0gcGFnZV9uZXcpIHsKKyAgICAgICAgZWRpdCA9IHRleHRFZGl0X25l
dzsKKyAgICB9IGVsc2UgaWYodG9vbEJveDEtPmN1cnJlbnRJdGVtKCkgPT0gcGFnZV9yZXBseSkg
eworICAgICAgICBlZGl0ID0gdGV4dEVkaXRfcmVwbHk7CisgICAgfSBlbHNlIGlmKHRvb2xCb3gx
LT5jdXJyZW50SXRlbSgpID09IHBhZ2VfcmVwbHlfYWxsKSB7CisgICAgICAgIGVkaXQgPSB0ZXh0
RWRpdF9yZXBseV9hbGw7CisgICAgfSBlbHNlIGlmKHRvb2xCb3gxLT5jdXJyZW50SXRlbSgpID09
IHBhZ2VfZm9yd2FyZCkgeworICAgICAgICBlZGl0ID0gdGV4dEVkaXRfZm9yd2FyZDsKKyAgICB9
IGVsc2UgeworICAgICAgICBrZERlYnVnKCkgPDwgIlVua25vd24gY3VycmVudCBwYWdlIGluIFRl
bXBsYXRlc0NvbmZpZ3VyYXRpb24hIiA8PCBlbmRsOworICAgICAgICByZXR1cm47CisgICAgfTsK
KyAgICAKKyAgICAvLyBrZERlYnVnKCkgPDwgIkluc2VydCBjb21tYW5kOiAiIDw8IGNtZCA8PCBl
bmRsOworICAgIAorICAgIGludCBwYXJhLCBpbmRleDsKKyAgICBlZGl0LT5nZXRDdXJzb3JQb3Np
dGlvbigmcGFyYSwgJmluZGV4KTsKKyAgICBlZGl0LT5pbnNlcnRBdChjbWQsIHBhcmEsIGluZGV4
KTsKKyAgICAKKyAgICBpbmRleCArPSBhZGp1c3RDdXJzb3I7CisgICAgCisgICAgZWRpdC0+c2V0
Q3Vyc29yUG9zaXRpb24ocGFyYSwgaW5kZXggKyBjbWQubGVuZ3RoKCkpOworfTsKKworUVN0cmlu
ZyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpkZWZhdWx0TmV3TWVzc2FnZSgpIHsKKyAgICByZXR1
cm4gaTE4bigKKyAgICAgICAgIiVSRU09XCJEZWZhdWx0IG5ldyBtZXNzYWdlIHRlbXBsYXRlXCIl
LVxuIgorICAgICAgICAiJUJMQU5LIgorICAgICAgICApOworfTsKKworUVN0cmluZyBUZW1wbGF0
ZXNDb25maWd1cmF0aW9uOjpkZWZhdWx0UmVwbHkoKSB7CisgICAgcmV0dXJuIGkxOG4oCisgICAg
ICAgICIlUkVNPVwiRGVmYXVsdCByZXBseSB0ZW1wbGF0ZVwiJS1cbiIKKyAgICAgICAgIkhlbGxv
LCAlT0ZST01OQU1FIVxuIgorICAgICAgICAiXG4iCisgICAgICAgICJPbiAlT0RBVEVFTiAlT1RJ
TUVMT05HRU4geW91IHdyb3RlOlxuIgorICAgICAgICAiJVFVT1RFXG4iCisgICAgICAgICk7Cit9
OworCitRU3RyaW5nIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OmRlZmF1bHRSZXBseUFsbCgpIHsK
KyAgICByZXR1cm4gaTE4bigKKyAgICAgICAgIiVSRU09XCJEZWZhdWx0IHJlcGx5IGFsbCB0ZW1w
bGF0ZVwiJS1cbiIKKyAgICAgICAgIkhlbGxvIVxuIgorICAgICAgICAiXG4iCisgICAgICAgICJP
biAlT0RBVEVFTiAlT1RJTUVMT05HRU4gJU9GUk9NTkFNRSB3cm90ZTpcbiIKKyAgICAgICAgIiVR
VU9URVxuIgorICAgICAgICApOworfTsKKworUVN0cmluZyBUZW1wbGF0ZXNDb25maWd1cmF0aW9u
OjpkZWZhdWx0Rm9yd2FyZCgpIHsKKyAgICByZXR1cm4gaTE4bigKKyAgICAgICAgIiVSRU09XCJE
ZWZhdWx0IGZvcndhcmQgdGVtcGxhdGVcIiUtXG4iCisgICAgICAgICJUaGlzIGlzIGEgZm9yd2Fy
ZGVkIG1lc3NhZ2U6XG4iCisgICAgICAgICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT1cbiIKKyAgICAgICAgIiVURVhUXG4iCisgICAgICAgICI9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisgICAgICAgICk7Cit9OworCitRU3RyaW5n
IFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OmRlZmF1bHRRdW90ZVN0cmluZygpIHsKKyAgICByZXR1
cm4gIj4gIjsKK307CisKKyNpbmNsdWRlICJ0ZW1wbGF0ZXNjb25maWd1cmF0aW9uaW1wbC5tb2Mi
CkluZGV4OiBrbWFpbC90ZW1wbGF0ZXNjb25maWd1cmF0aW9uLnVpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtt
YWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb24udWkJKHJldmlzaW9uIDApCisrKyBrbWFpbC90ZW1w
bGF0ZXNjb25maWd1cmF0aW9uLnVpCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzNCBAQAorPCFE
T0NUWVBFIFVJPjxVSSB2ZXJzaW9uPSIzLjMiIHN0ZHNldGRlZj0iMSI+Cis8Y2xhc3M+VGVtcGxh
dGVzQ29uZmlndXJhdGlvblN0dWI8L2NsYXNzPgorPHdpZGdldCBjbGFzcz0iUVdpZGdldCI+Cisg
ICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICA8Y3N0cmluZz5UZW1wbGF0ZXNDb25m
aWd1cmF0aW9uPC9jc3RyaW5nPgorICAgIDwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9
Imdlb21ldHJ5Ij4KKyAgICAgICAgPHJlY3Q+CisgICAgICAgICAgICA8eD4wPC94PgorICAgICAg
ICAgICAgPHk+MDwveT4KKyAgICAgICAgICAgIDx3aWR0aD40NDk8L3dpZHRoPgorICAgICAgICAg
ICAgPGhlaWdodD40NTA8L2hlaWdodD4KKyAgICAgICAgPC9yZWN0PgorICAgIDwvcHJvcGVydHk+
CisgICAgPHByb3BlcnR5IG5hbWU9InNpemVQb2xpY3kiPgorICAgICAgICA8c2l6ZXBvbGljeT4K
KyAgICAgICAgICAgIDxoc2l6ZXR5cGU+NzwvaHNpemV0eXBlPgorICAgICAgICAgICAgPHZzaXpl
dHlwZT43PC92c2l6ZXR5cGU+CisgICAgICAgICAgICA8aG9yc3RyZXRjaD4zPC9ob3JzdHJldGNo
PgorICAgICAgICAgICAgPHZlcnN0cmV0Y2g+MzwvdmVyc3RyZXRjaD4KKyAgICAgICAgPC9zaXpl
cG9saWN5PgorICAgIDwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9Im1pbmltdW1TaXpl
Ij4KKyAgICAgICAgPHNpemU+CisgICAgICAgICAgICA8d2lkdGg+NDMwPC93aWR0aD4KKyAgICAg
ICAgICAgIDxoZWlnaHQ+NDUwPC9oZWlnaHQ+CisgICAgICAgIDwvc2l6ZT4KKyAgICA8L3Byb3Bl
cnR5PgorICAgIDxwcm9wZXJ0eSBuYW1lPSJjYXB0aW9uIj4KKyAgICAgICAgPHN0cmluZz5Gb3Jt
MTwvc3RyaW5nPgorICAgIDwvcHJvcGVydHk+CisgICAgPHdpZGdldCBjbGFzcz0iUUxheW91dFdp
ZGdldCI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAgICAgIDxjc3Ry
aW5nPmxheW91dDM8L2NzdHJpbmc+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJnZW9tZXRyeSI+CisgICAgICAgICAgICA8cmVjdD4KKyAgICAgICAgICAgICAg
ICA8eD4xMDwveD4KKyAgICAgICAgICAgICAgICA8eT4xMDwveT4KKyAgICAgICAgICAgICAgICA8
d2lkdGg+NDMwPC93aWR0aD4KKyAgICAgICAgICAgICAgICA8aGVpZ2h0PjQzMDwvaGVpZ2h0Pgor
ICAgICAgICAgICAgPC9yZWN0PgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8dmJveD4K
KyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAgICAgICAgICA8Y3N0
cmluZz51bm5hbWVkPC9jc3RyaW5nPgorICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAg
ICAgIDx3aWRnZXQgY2xhc3M9IlFUb29sQm94Ij4KKyAgICAgICAgICAgICAgICA8cHJvcGVydHkg
bmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnRvb2xCb3gxPC9jc3Ry
aW5nPgorICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3Bl
cnR5IG5hbWU9InNpemVQb2xpY3kiPgorICAgICAgICAgICAgICAgICAgICA8c2l6ZXBvbGljeT4K
KyAgICAgICAgICAgICAgICAgICAgICAgIDxoc2l6ZXR5cGU+NzwvaHNpemV0eXBlPgorICAgICAg
ICAgICAgICAgICAgICAgICAgPHZzaXpldHlwZT43PC92c2l6ZXR5cGU+CisgICAgICAgICAgICAg
ICAgICAgICAgICA8aG9yc3RyZXRjaD4zPC9ob3JzdHJldGNoPgorICAgICAgICAgICAgICAgICAg
ICAgICAgPHZlcnN0cmV0Y2g+MzwvdmVyc3RyZXRjaD4KKyAgICAgICAgICAgICAgICAgICAgPC9z
aXplcG9saWN5PgorICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAg
PHByb3BlcnR5IG5hbWU9Im1pbmltdW1TaXplIj4KKyAgICAgICAgICAgICAgICAgICAgPHNpemU+
CisgICAgICAgICAgICAgICAgICAgICAgICA8d2lkdGg+MDwvd2lkdGg+CisgICAgICAgICAgICAg
ICAgICAgICAgICA8aGVpZ2h0PjA8L2hlaWdodD4KKyAgICAgICAgICAgICAgICAgICAgPC9zaXpl
PgorICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5
IG5hbWU9ImZyYW1lU2hhcGUiPgorICAgICAgICAgICAgICAgICAgICA8ZW51bT5QYW5lbDwvZW51
bT4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJmcmFtZVNoYWRvdyI+CisgICAgICAgICAgICAgICAgICAgIDxlbnVtPlN1bmtlbjwv
ZW51bT4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJjdXJyZW50SW5kZXgiPgorICAgICAgICAgICAgICAgICAgICA8bnVtYmVyPjI8
L251bWJlcj4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDx3
aWRnZXQgY2xhc3M9IlFXaWRnZXQiPgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFt
ZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5wYWdlX25ldzwvY3N0
cmluZz4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAg
ICAgPHByb3BlcnR5IG5hbWU9ImJhY2tncm91bmRNb2RlIj4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIDxlbnVtPlBhbGV0dGVCYWNrZ3JvdW5kPC9lbnVtPgorICAgICAgICAgICAgICAgICAgICA8
L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhYmVsIj4K
KyAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+TmV3IE1lc3NhZ2U8L3N0cmluZz4KKyAg
ICAgICAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgICAgIDxoYm94
PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnVubmFtZWQ8L2NzdHJpbmc+CisgICAgICAg
ICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHdp
ZGdldCBjbGFzcz0iUVRleHRFZGl0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJv
cGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3Ry
aW5nPnRleHRFZGl0X25ldzwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJz
aXplUG9saWN5Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpemVwb2xpY3k+
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHNpemV0eXBlPjc8L2hzaXpl
dHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2c2l6ZXR5cGU+Nzwv
dnNpemV0eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhvcnN0cmV0
Y2g+MzwvaG9yc3RyZXRjaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2
ZXJzdHJldGNoPjM8L3ZlcnN0cmV0Y2g+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDwvc2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5Pgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJtaW5pbXVtU2l6ZSI+
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaXplPgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPHdpZHRoPjA8L3dpZHRoPgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPGhlaWdodD4wPC9oZWlnaHQ+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDwvc2l6ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3Bl
cnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmb250Ij4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvbnQ+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8ZmFtaWx5Pk1vbm9zcGFjZTwvZmFtaWx5PgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8L2ZvbnQ+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFt
ZT0icmVzaXplUG9saWN5Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudW0+
TWFudWFsPC9lbnVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZTY3JvbGxCYXJNb2Rl
Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudW0+QXV0bzwvZW51bT4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoU2Nyb2xsQmFyTW9kZSI+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDxlbnVtPkF1dG88L2VudW0+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVy
dHkgbmFtZT0idGV4dEZvcm1hdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxl
bnVtPlBsYWluVGV4dDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3Bl
cnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3b3JkV3Jh
cCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPk5vV3JhcDwvZW51bT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhdXRvRm9ybWF0dGluZyI+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxzZXQ+QXV0b05vbmU8L3NldD4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRn
ZXQ+CisgICAgICAgICAgICAgICAgICAgIDwvaGJveD4KKyAgICAgICAgICAgICAgICA8L3dpZGdl
dD4KKyAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJRV2lkZ2V0Ij4KKyAgICAgICAgICAg
ICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICAgICAgICAgICAgICAgICAg
PGNzdHJpbmc+cGFnZV9yZXBseTwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9w
ZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJhY2tncm91bmRNb2Rl
Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPlBhbGV0dGVCYWNrZ3JvdW5kPC9lbnVt
PgorICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8
YXR0cmlidXRlIG5hbWU9ImxhYmVsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+
UmVwbHkgdG8gU2VuZGVyPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvYXR0cmlidXRl
PgorICAgICAgICAgICAgICAgICAgICA8aGJveD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmlu
Zz51bm5hbWVkPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4K
KyAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9IlFUZXh0RWRpdCI+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz50ZXh0RWRpdF9yZXBseTwvY3N0cmluZz4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPHNpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8aHNpemV0eXBlPjM8L2hzaXpldHlwZT4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDx2c2l6ZXR5cGU+MzwvdnNpemV0eXBlPgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPGhvcnN0cmV0Y2g+MDwvaG9yc3RyZXRjaD4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzdHJldGNoPjA8L3ZlcnN0cmV0Y2g+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2l6ZXBvbGljeT4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PGZvbnQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmFtaWx5Pk1vbm9z
cGFjZTwvZmFtaWx5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvbnQ+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dEZvcm1hdCI+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxlbnVtPlBsYWluVGV4dDwvZW51bT4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJ3b3JkV3JhcCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxl
bnVtPk5vV3JhcDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5
PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhdXRvRm9ybWF0
dGluZyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZXQ+QXV0b05vbmU8L3Nl
dD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAg
ICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgIDwvaGJveD4KKyAgICAg
ICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJRV2lk
Z2V0Ij4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAg
ICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+cGFnZV9yZXBseV9hbGw8L2NzdHJpbmc+CisgICAg
ICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJiYWNrZ3JvdW5kTW9kZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5Q
YWxldHRlQmFja2dyb3VuZDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4K
KyAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsYWJlbCI+CisgICAgICAgICAg
ICAgICAgICAgICAgICA8c3RyaW5nPlJlcGx5IHRvIEFsbDwvc3RyaW5nPgorICAgICAgICAgICAg
ICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgPGhib3g+CisgICAgICAg
ICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPGNzdHJpbmc+dW5uYW1lZDwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNz
PSJRVGV4dEVkaXQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJuYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+dGV4dEVk
aXRfcmVwbHlfYWxsPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJv
cGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InNpemVQ
b2xpY3kiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2l6ZXBvbGljeT4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoc2l6ZXR5cGU+MzwvaHNpemV0eXBl
PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZzaXpldHlwZT4zPC92c2l6
ZXR5cGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aG9yc3RyZXRjaD4w
PC9ob3JzdHJldGNoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnN0
cmV0Y2g+MDwvdmVyc3RyZXRjaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9z
aXplcG9saWN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImZvbnQiPgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8Zm9udD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDxmYW1pbHk+TW9ub3NwYWNlPC9mYW1pbHk+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDwvZm9udD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3Bl
cnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0Rm9y
bWF0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudW0+UGxhaW5UZXh0PC9l
bnVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9IndvcmRXcmFwIj4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPGVudW0+Tm9XcmFwPC9lbnVtPgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBy
b3BlcnR5IG5hbWU9ImF1dG9Gb3JtYXR0aW5nIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPHNldD5BdXRvTm9uZTwvc2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwv
cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAg
ICAgICAgICAgPC9oYm94PgorICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAg
ICAgIDx3aWRnZXQgY2xhc3M9IlFXaWRnZXQiPgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVy
dHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5wYWdlX2Zv
cndhcmQ8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAg
ICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJiYWNrZ3JvdW5kTW9kZSI+CisgICAgICAgICAg
ICAgICAgICAgICAgICA8ZW51bT5QYWxldHRlQmFja2dyb3VuZDwvZW51bT4KKyAgICAgICAgICAg
ICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1l
PSJsYWJlbCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPkZvcndhcmQgTWVzc2Fn
ZTwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgICAg
ICAgICAgICAgPGhib3g+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0i
bmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+dW5uYW1lZDwvY3N0
cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAg
ICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJRVGV4dEVkaXQiPgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPGNzdHJpbmc+dGV4dEVkaXRfZm9yd2FyZDwvY3N0cmluZz4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPHNpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
aHNpemV0eXBlPjM8L2hzaXpldHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDx2c2l6ZXR5cGU+MzwvdnNpemV0eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPGhvcnN0cmV0Y2g+MDwvaG9yc3RyZXRjaD4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDx2ZXJzdHJldGNoPjA8L3ZlcnN0cmV0Y2g+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDwvc2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBu
YW1lPSJmb250Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvbnQ+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmFtaWx5Pk1vbm9zcGFjZTwvZmFtaWx5
PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvbnQ+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
cHJvcGVydHkgbmFtZT0idGV4dEZvcm1hdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxlbnVtPlBsYWluVGV4dDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3
b3JkV3JhcCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPk5vV3JhcDwv
ZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhdXRvRm9ybWF0dGluZyI+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZXQ+QXV0b05vbmU8L3NldD4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAg
PC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgIDwvaGJveD4KKyAgICAgICAgICAgICAgICA8
L3dpZGdldD4KKyAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgPHdpZGdldCBjbGFz
cz0iUUxheW91dFdpZGdldCI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUi
PgorICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5sYXlvdXQyPC9jc3RyaW5nPgorICAgICAg
ICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGhib3g+CisgICAgICAgICAg
ICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAg
IDxjc3RyaW5nPnVubmFtZWQ8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVy
dHk+CisgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9IlFQdXNoQnV0dG9uIj4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8Y3N0cmluZz5idXR0b25faW5zZXJ0PC9jc3RyaW5nPgorICAgICAg
ICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
c2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhzaXpldHlwZT4x
PC9oc2l6ZXR5cGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2c2l6ZXR5cGU+
MDwvdnNpemV0eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aG9yc3RyZXRj
aD4xPC9ob3JzdHJldGNoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc3Ry
ZXRjaD4wPC92ZXJzdHJldGNoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2l6ZXBv
bGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAg
ICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCI+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPHN0cmluZz4mYW1wO0luc2VydCBjb21tYW5kLi4uPC9zdHJpbmc+CisgICAgICAgICAg
ICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3Bl
cnR5IG5hbWU9ImFjY2VsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPkFs
dCtJPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAg
ICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFz
cz0iUUxhYmVsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1l
Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz50ZXh0TGFiZWwxPC9jc3Ry
aW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8c2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PGhzaXpldHlwZT41PC9oc2l6ZXR5cGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDx2c2l6ZXR5cGU+NTwvdnNpemV0eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8aG9yc3RyZXRjaD4yPC9ob3JzdHJldGNoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8dmVyc3RyZXRjaD4wPC92ZXJzdHJldGNoPgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDwvc2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Cisg
ICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCI+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPHN0cmluZz4mYW1wO1F1b3RlIGluZGljYXRvcjo8L3N0cmluZz4K
KyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAg
ICAgICA8cHJvcGVydHkgbmFtZT0iYWxpZ25tZW50Ij4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8c2V0PkFsaWduVkNlbnRlcnxBbGlnblJpZ2h0PC9zZXQ+CisgICAgICAgICAgICAgICAg
ICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5h
bWU9ImJ1ZGR5IiBzdGRzZXQ9IjAiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3Ry
aW5nPmxpbmVFZGl0X3F1b3RlPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9w
cm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAg
ICAgIDx3aWRnZXQgY2xhc3M9IlFMaW5lRWRpdCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8
cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJp
bmc+bGluZUVkaXRfcXVvdGU8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3By
b3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICA8
L2hib3g+CisgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgPC92Ym94PgorICAgIDwvd2lk
Z2V0PgorPC93aWRnZXQ+Cis8Y29ubmVjdGlvbnM+CisgICAgPGNvbm5lY3Rpb24+CisgICAgICAg
IDxzZW5kZXI+YnV0dG9uX2luc2VydDwvc2VuZGVyPgorICAgICAgICA8c2lnbmFsPmNsaWNrZWQo
KTwvc2lnbmFsPgorICAgICAgICA8cmVjZWl2ZXI+VGVtcGxhdGVzQ29uZmlndXJhdGlvbjwvcmVj
ZWl2ZXI+CisgICAgICAgIDxzbG90PmJ1dHRvbl9pbnNlcnRfY2xpY2tlZCgpPC9zbG90PgorICAg
IDwvY29ubmVjdGlvbj4KKzwvY29ubmVjdGlvbnM+Cis8c2xvdHM+CisgICAgPHNsb3Q+YnV0dG9u
X2luc2VydF9jbGlja2VkKCk8L3Nsb3Q+Cis8L3Nsb3RzPgorPGxheW91dGRlZmF1bHRzIHNwYWNp
bmc9IjYiIG1hcmdpbj0iMTEiLz4KKzwvVUk+CkluZGV4OiBrbWFpbC9rbWZpbHRlcmFjdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga21haWwva21maWx0ZXJhY3Rpb24uY3BwCShyZXZpc2lvbiA1OTU5
NTYpCisrKyBrbWFpbC9rbWZpbHRlcmFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNpbmNsdWRlICJmb2xkZXJyZXF1ZXN0ZXIuaCIKIHVzaW5nIEtNYWlsOjpGb2xk
ZXJSZXF1ZXN0ZXI7CiAjaW5jbHVkZSAia21tc2diYXNlLmgiCisjaW5jbHVkZSAidGVtcGxhdGVw
YXJzZXIuaCIKICNpbmNsdWRlICJtZXNzYWdlcHJvcGVydHkuaCIKICNpbmNsdWRlICJhY3Rpb25z
Y2hlZHVsZXIuaCIKIHVzaW5nIEtNYWlsOjpNZXNzYWdlUHJvcGVydHk7CkBAIC0xNDUyLDE0ICsx
NDUzLDE5IEBACiAKICAgbXNnLT5pbml0RnJvbU1lc3NhZ2UoIGFNc2cgKTsKIAotICBRU3RyaW5n
IHN0ID0gUVN0cmluZzo6ZnJvbVV0ZjgoIGFNc2ctPmNyZWF0ZUZvcndhcmRCb2R5KCkgKTsKKyAg
Ly8gUVN0cmluZyBzdCA9IFFTdHJpbmc6OmZyb21VdGY4KCBhTXNnLT5jcmVhdGVGb3J3YXJkQm9k
eSgpICk7CisgIAorICBUZW1wbGF0ZVBhcnNlciBwYXJzZXIoIG1zZywgVGVtcGxhdGVQYXJzZXI6
OkZvcndhcmQsIAorICAgIGFNc2ctPmJvZHkoKSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Up
OworICBwYXJzZXIucHJvY2VzcyggYU1zZyApOworICAKICAgUUNTdHJpbmcKICAgICBlbmNvZGlu
ZyA9IEtNTXNnQmFzZTo6YXV0b0RldGVjdENoYXJzZXQoIGFNc2ctPmNoYXJzZXQoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtNTWVzc2FnZTo6cHJlZmVy
cmVkQ2hhcnNldHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
c2ctPmJvZHkoKSApOwogICBpZiggZW5jb2RpbmcuaXNFbXB0eSgpICkKICAgICBlbmNvZGluZyA9
ICJ1dGYtOCI7Ci0gIFFDU3RyaW5nIHN0ciA9IEtNTXNnQmFzZTo6Y29kZWNGb3JOYW1lKCBlbmNv
ZGluZyApLT5mcm9tVW5pY29kZSggc3QgKTsKKyAgUUNTdHJpbmcgc3RyID0gS01Nc2dCYXNlOjpj
b2RlY0Zvck5hbWUoIGVuY29kaW5nICktPmZyb21Vbmljb2RlKCBtc2ctPmJvZHkoKSApOwogCiAg
IG1zZy0+c2V0Q2hhcnNldCggZW5jb2RpbmcgKTsKICAgbXNnLT5zZXRUbyggbVBhcmFtZXRlciAp
OwpJbmRleDoga21haWwva21mb2xkZXJkaWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGttYWlsL2ttZm9s
ZGVyZGlhLmNwcAkocmV2aXNpb24gNTk1OTU2KQorKysga21haWwva21mb2xkZXJkaWEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSA8a2NvbmZpZy5oPgogI2lu
Y2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGtsaXN0dmlldy5oPgorI2luY2x1ZGUgPGtwdXNo
YnV0dG9uLmg+CiAKICNpbmNsdWRlIDxxY2hlY2tib3guaD4KICNpbmNsdWRlIDxxbGF5b3V0Lmg+
CkBAIC02OSw3ICs3MCwxMSBAQAogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHFoYnV0
dG9uZ3JvdXAuaD4KICNpbmNsdWRlIDxxcmFkaW9idXR0b24uaD4KKyNpbmNsdWRlIDxxdGV4dGVk
aXQuaD4KIAorI2luY2x1ZGUgInRlbXBsYXRlc2NvbmZpZ3VyYXRpb25pbXBsLmgiCisjaW5jbHVk
ZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcuaCIKKwogI2luY2x1ZGUgImttZm9sZGVyZGlh
Lm1vYyIKIAogdXNpbmcgbmFtZXNwYWNlIEtNYWlsOwpAQCAtMTE1LDYgKzEyMCw5IEBACiAgIGJv
eCA9IGFkZFZCb3hQYWdlKCBpMThuKCJHZW5lcmFsIikgKTsKICAgdGFiID0gbmV3IEZvbGRlckRp
YUdlbmVyYWxUYWIoIHRoaXMsIGFOYW1lLCBib3ggKTsKICAgYWRkVGFiKCB0YWIgKTsKKyAgYm94
ID0gYWRkVkJveFBhZ2UoIGkxOG4oIlRlbXBsYXRlcyIpICk7CisgIHRhYiA9IG5ldyBGb2xkZXJE
aWFUZW1wbGF0ZXNUYWIoIHRoaXMsIGFOYW1lLCBib3ggKTsKKyAgYWRkVGFiKCB0YWIgKTsKIAog
ICBLTUZvbGRlciogcmVmRm9sZGVyID0gbUZvbGRlciA/IG1Gb2xkZXIgOiBtUGFyZW50Rm9sZGVy
OwogICBLTUZvbGRlclR5cGUgZm9sZGVyVHlwZSA9IHJlZkZvbGRlciA/IHJlZkZvbGRlci0+Zm9s
ZGVyVHlwZSgpIDogS01Gb2xkZXJUeXBlVW5rbm93bjsKQEAgLTY0NywzICs2NTUsODYgQEAKIHsK
ICAgICBtVW5yZWFkSWNvbkJ1dHRvbi0+c2V0SWNvbiggaWNvbiApOwogfQorCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KK0tNYWlsOjpGb2xkZXJEaWFUZW1wbGF0ZXNUYWI6OkZvbGRlckRpYVRlbXBs
YXRlc1RhYiggS01Gb2xkZXJEaWFsb2cqIGRsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBhTmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRV2lkZ2V0KiBwYXJlbnQsIGNv
bnN0IGNoYXIqIG5hbWUgKQorICA6IEZvbGRlckRpYVRhYiggcGFyZW50LCBuYW1lICksIG1EbGco
IGRsZyApCit7CisKKyAgbUlzTG9jYWxTeXN0ZW1Gb2xkZXIgPSBtRGxnLT5mb2xkZXIoKS0+aXNT
eXN0ZW1Gb2xkZXIoKSAmJgorICAgICAgIG1EbGctPmZvbGRlcigpLT5mb2xkZXJUeXBlKCkgIT0g
S01Gb2xkZXJUeXBlSW1hcCAmJgorICAgICAgIG1EbGctPmZvbGRlcigpLT5mb2xkZXJUeXBlKCkg
IT0gS01Gb2xkZXJUeXBlQ2FjaGVkSW1hcDsKKworICBRVkJveExheW91dCAqdG9wTGF5b3V0ID0g
bmV3IFFWQm94TGF5b3V0KCB0aGlzLCAwLCBLRGlhbG9nOjpzcGFjaW5nSGludCgpICk7CisgIAor
ICBtQ3VzdG9tID0gbmV3IFFDaGVja0JveCggaTE4bigiJlVzZSBjdXN0b20gbWVzc2FnZSB0ZW1w
bGF0ZXMiKSwgdGhpcyk7CisgIHRvcExheW91dC0+YWRkV2lkZ2V0KCBtQ3VzdG9tICk7CisgIAor
ICBtV2lkZ2V0ID0gbmV3IFRlbXBsYXRlc0NvbmZpZ3VyYXRpb24oIHRoaXMgKTsKKyAgbVdpZGdl
dC0+c2V0RW5hYmxlZCggZmFsc2UgKTsKKyAgdG9wTGF5b3V0LT5hZGRXaWRnZXQoIG1XaWRnZXQg
KTsKKyAgCisgIFFIQm94TGF5b3V0ICpidG5zID0gbmV3IFFIQm94TGF5b3V0KCB0b3BMYXlvdXQs
IEtEaWFsb2c6OnNwYWNpbmdIaW50KCkgKTsKKyAgbUNvcHlHbG9iYWwgPSBuZXcgS1B1c2hCdXR0
b24oIGkxOG4oIiZDb3B5IGdsb2JhbCB0ZW1wbGF0ZXMiKSwgdGhpcyk7CisgIG1Db3B5R2xvYmFs
LT5zZXRFbmFibGVkKCBmYWxzZSApOworICBidG5zLT5hZGRXaWRnZXQoIG1Db3B5R2xvYmFsICk7
CisgIAorICB0b3BMYXlvdXQtPmFkZFN0cmV0Y2goIDIwMCApOyAvLyB3ZSBhcmUgbW9yZSBpbXBv
cnRhbnQgdGhhbiBnZW5lcmFsIHRhYgorCisgIGNvbm5lY3QoIG1DdXN0b20sIFNJR05BTCh0b2dn
bGVkKGJvb2wpKSwKKyAgICAgICAgbVdpZGdldCwgU0xPVChzZXRFbmFibGVkKGJvb2wpKSApOwor
ICBjb25uZWN0KCBtQ3VzdG9tLCBTSUdOQUwodG9nZ2xlZChib29sKSksCisgICAgICAgIG1Db3B5
R2xvYmFsLCBTTE9UKHNldEVuYWJsZWQoYm9vbCkpICk7CisgIAorICBjb25uZWN0KCBtQ29weUds
b2JhbCwgU0lHTkFMKGNsaWNrZWQoKSksCisgICAgICAgIHRoaXMsIFNMT1Qoc2xvdENvcHlHbG9i
YWwoKSkgKTsKKworICBpbml0aWFsaXplV2l0aFZhbHVlc0Zyb21Gb2xkZXIoIG1EbGctPmZvbGRl
cigpICk7CisKKyAgY29ubmVjdCggbVdpZGdldCwgU0lHTkFMKCBjaGFuZ2VkKCkgKSwKKyAgICAg
ICAgICAgdGhpcywgU0xPVCggc2xvdEVtaXRDaGFuZ2VkKCB2b2lkICkgKSApOworfQorCit2b2lk
IEZvbGRlckRpYVRlbXBsYXRlc1RhYjo6bG9hZCgpCit7CisgIAorfQorCit2b2lkIEZvbGRlckRp
YVRlbXBsYXRlc1RhYjo6aW5pdGlhbGl6ZVdpdGhWYWx1ZXNGcm9tRm9sZGVyKCBLTUZvbGRlciog
Zm9sZGVyICkgeworICBpZiAoICFmb2xkZXIgKQorICAgIHJldHVybjsKKworICBRU3RyaW5nIGZp
ZCA9IGZvbGRlci0+aWRTdHJpbmcoKTsKKyAgCisgIFRlbXBsYXRlcyB0KGZpZCk7CisKKyAgbUN1
c3RvbS0+c2V0Q2hlY2tlZCh0LnVzZUN1c3RvbVRlbXBsYXRlcygpKTsKKyAgCisgIG1XaWRnZXQt
PmxvYWRGcm9tRm9sZGVyKGZpZCk7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Jvb2wg
Rm9sZGVyRGlhVGVtcGxhdGVzVGFiOjpzYXZlKCkKK3sKKyAgS01Gb2xkZXIqIGZvbGRlciA9IG1E
bGctPmZvbGRlcigpOworICAKKyAgUVN0cmluZyBmaWQgPSBmb2xkZXItPmlkU3RyaW5nKCk7Cisg
IFRlbXBsYXRlcyB0KGZpZCk7CisgIAorICBrZERlYnVnKCkgPDwgInVzZSBjdXN0b20gdGVtcGxh
dGVzIGZvciBmb2xkZXIgIiA8PCBmaWQgPDwgIjogIiA8PCBtQ3VzdG9tLT5pc0NoZWNrZWQoKSA8
PCBlbmRsOworICB0LnNldFVzZUN1c3RvbVRlbXBsYXRlcyhtQ3VzdG9tLT5pc0NoZWNrZWQoKSk7
CisgIHQud3JpdGVDb25maWcoKTsKKyAgCisgIG1XaWRnZXQtPnNhdmVUb0ZvbGRlcihmaWQpOwor
ICAKKyAgcmV0dXJuIHRydWU7Cit9CisKKwordm9pZCBGb2xkZXJEaWFUZW1wbGF0ZXNUYWI6OnNs
b3RFbWl0Q2hhbmdlZCgpIHt9OworCit2b2lkIEZvbGRlckRpYVRlbXBsYXRlc1RhYjo6c2xvdENv
cHlHbG9iYWwoKSB7CisgIG1XaWRnZXQtPmxvYWRGcm9tR2xvYmFsKCk7Cit9OwpJbmRleDoga21h
aWwvY29uZmlndXJlZGlhbG9nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC9jb25maWd1cmVkaWFs
b2cuY3BwCShyZXZpc2lvbiA1OTU5NTYpCisrKyBrbWFpbC9jb25maWd1cmVkaWFsb2cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJnbG9iYWxzZXR0aW5n
cy5oIgogI2luY2x1ZGUgInJlcGx5cGhyYXNlcy5oIgorI2luY2x1ZGUgInRlbXBsYXRlc2NvbmZp
Z3VyYXRpb25fa2ZnLmgiCiAKIC8vIG90aGVyIEtNYWlsIGhlYWRlcnM6CiAjaW5jbHVkZSAia21r
ZXJuZWwuaCIKQEAgLTQ5LDYgKzUwLDcgQEAKICNpbmNsdWRlIDxjb21wb3NlcmNyeXB0b2NvbmZp
Z3VyYXRpb24uaD4KICNpbmNsdWRlIDx3YXJuaW5nY29uZmlndXJhdGlvbi5oPgogI2luY2x1ZGUg
PHNtaW1lY29uZmlndXJhdGlvbi5oPgorI2luY2x1ZGUgInRlbXBsYXRlc2NvbmZpZ3VyYXRpb25p
bXBsLmgiCiAjaW5jbHVkZSAiZm9sZGVycmVxdWVzdGVyLmgiCiB1c2luZyBLTWFpbDo6Rm9sZGVy
UmVxdWVzdGVyOwogI2luY2x1ZGUgImFjY291bnRjb21ib2JveC5oIgpAQCAtMjQ0NiwxMCArMjQ0
OCwxNiBAQAogICAvLwogICAvLyAiUGhyYXNlcyIgdGFiOgogICAvLwotICBtUGhyYXNlc1RhYiA9
IG5ldyBQaHJhc2VzVGFiKCk7Ci0gIGFkZFRhYiggbVBocmFzZXNUYWIsIGkxOG4oIiZQaHJhc2Vz
IikgKTsKKyAgLy8gbVBocmFzZXNUYWIgPSBuZXcgUGhyYXNlc1RhYigpOworICAvLyBhZGRUYWIo
IG1QaHJhc2VzVGFiLCBpMThuKCImUGhyYXNlcyIpICk7CiAKICAgLy8KKyAgLy8gIlRlbXBsYXRl
cyIgdGFiOgorICAvLworICBtVGVtcGxhdGVzVGFiID0gbmV3IFRlbXBsYXRlc1RhYigpOworICBh
ZGRUYWIoIG1UZW1wbGF0ZXNUYWIsIGkxOG4oIiZUZW1wbGF0ZXMiKSApOworICAKKyAgLy8KICAg
Ly8gIlN1YmplY3QiIHRhYjoKICAgLy8KICAgbVN1YmplY3RUYWIgPSBuZXcgU3ViamVjdFRhYigp
OwpAQCAtMjkwMyw2ICsyOTExLDMxIEBACiAgIH0KIH0KIAorUVN0cmluZyBDb21wb3NlclBhZ2U6
OlRlbXBsYXRlc1RhYjo6aGVscEFuY2hvcigpIGNvbnN0IHsKKyAgcmV0dXJuIFFTdHJpbmc6OmZy
b21MYXRpbjEoImNvbmZpZ3VyZS1jb21wb3Nlci10ZW1wbGF0ZXMiKTsKK30KKworQ29tcG9zZXJQ
YWdlVGVtcGxhdGVzVGFiOjpDb21wb3NlclBhZ2VUZW1wbGF0ZXNUYWIoIFFXaWRnZXQgKiBwYXJl
bnQsIGNvbnN0IGNoYXIgKiBuYW1lICkKKyAgOiBDb25maWdNb2R1bGVUYWIgKCBwYXJlbnQsIG5h
bWUgKQoreworICBRVkJveExheW91dCogdmxheSA9IG5ldyBRVkJveExheW91dCggdGhpcywgMCwg
MCApOworCisgIG1XaWRnZXQgPSBuZXcgVGVtcGxhdGVzQ29uZmlndXJhdGlvbiggdGhpcyApOwor
ICB2bGF5LT5hZGRXaWRnZXQoIG1XaWRnZXQgKTsKKyAgdmxheS0+YWRkU3RyZXRjaCgxMDApOwor
CisgIGNvbm5lY3QoIG1XaWRnZXQsIFNJR05BTCggY2hhbmdlZCgpICksCisgICAgICAgICAgIHRo
aXMsIFNMT1QoIHNsb3RFbWl0Q2hhbmdlZCggdm9pZCApICkgKTsKK30KKwordm9pZCBDb21wb3Nl
clBhZ2U6OlRlbXBsYXRlc1RhYjo6ZG9Mb2FkRnJvbUdsb2JhbFNldHRpbmdzKCkgeworICAgIG1X
aWRnZXQtPmxvYWRGcm9tR2xvYmFsKCk7Cit9CisKK3ZvaWQgQ29tcG9zZXJQYWdlOjpUZW1wbGF0
ZXNUYWI6OnNhdmUoKSB7CisgICAgbVdpZGdldC0+c2F2ZVRvR2xvYmFsKCk7Cit9CisKIFFTdHJp
bmcgQ29tcG9zZXJQYWdlOjpTdWJqZWN0VGFiOjpoZWxwQW5jaG9yKCkgY29uc3QgewogICByZXR1
cm4gUVN0cmluZzo6ZnJvbUxhdGluMSgiY29uZmlndXJlLWNvbXBvc2VyLXN1YmplY3QiKTsKIH0K
SW5kZXg6IGttYWlsL2ttZm9sZGVyZGlhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwva21mb2xkZXJk
aWEuaAkocmV2aXNpb24gNTk1OTU2KQorKysga21haWwva21mb2xkZXJkaWEuaAkod29ya2luZyBj
b3B5KQpAQCAtNTEsNiArNTEsOCBAQAogY2xhc3MgS01Gb2xkZXJEaWFsb2c7CiBjbGFzcyBLTUZv
bGRlclRyZWU7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUUd1YXJkZWRQdHI7CitjbGFz
cyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOworY2xhc3MgS1B1c2hCdXR0b247CiAKIG5hbWVzcGFj
ZSBLTWFpbCB7CiAgIGNsYXNzIEZvbGRlclJlcXVlc3RlcjsgCkBAIC0xNTAsNiArMTUyLDM5IEBA
CiAgIGJvb2wgbUlzTG9jYWxTeXN0ZW1Gb2xkZXI7CiB9OwogCisvKioKKyAqICJUZW1wbGF0ZXMi
IHRhYiBpbiB0aGUgZm9sZGVyIGRpYWxvZworICogSW50ZXJuYWwgY2xhc3MsIG9ubHkgdXNlZCBi
eSBLTUZvbGRlckRpYWxvZworICovCitjbGFzcyBGb2xkZXJEaWFUZW1wbGF0ZXNUYWIgOiBwdWJs
aWMgRm9sZGVyRGlhVGFiCit7CisgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgRm9sZGVyRGlhVGVt
cGxhdGVzVGFiKCBLTUZvbGRlckRpYWxvZyogZGxnLAorICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBRU3RyaW5nJiBhTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgUVdpZGdldCogcGFy
ZW50LCBjb25zdCBjaGFyKiBuYW1lID0gMCApOworCisgIHZpcnR1YWwgdm9pZCBsb2FkKCk7Cisg
IHZpcnR1YWwgYm9vbCBzYXZlKCk7CisKK3B1YmxpYyBzbG90czoKKyAgdm9pZCBzbG90RW1pdENo
YW5nZWQoKTsgLy8gZG8gbm90aGluZyBmb3Igbm93CisgIAorICB2b2lkIHNsb3RDb3B5R2xvYmFs
KCk7CisKK3ByaXZhdGU6CisgIHZvaWQgaW5pdGlhbGl6ZVdpdGhWYWx1ZXNGcm9tRm9sZGVyKCBL
TUZvbGRlciogZm9sZGVyICk7CisKK3ByaXZhdGU6CisgIFFDaGVja0JveCogbUN1c3RvbTsKKyAg
VGVtcGxhdGVzQ29uZmlndXJhdGlvbiogbVdpZGdldDsKKyAgS1B1c2hCdXR0b24qIG1Db3B5R2xv
YmFsOworCisgIEtNRm9sZGVyRGlhbG9nKiBtRGxnOworICBib29sIG1Jc0xvY2FsU3lzdGVtRm9s
ZGVyOworfTsKKwogfSAvLyBlbmQgb2YgbmFtZXNwYWNlIEtNYWlsCiAKIC8qKgpJbmRleDoga21h
aWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC90ZW1w
bGF0ZXNjb25maWd1cmF0aW9uaW1wbC5oCShyZXZpc2lvbiAwKQorKysga21haWwvdGVtcGxhdGVz
Y29uZmlndXJhdGlvbmltcGwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MCBAQAorLyogICAt
Ki0gbW9kZTogQysrOyBjLWZpbGUtc3R5bGU6ICJnbnUiIC0qLQorICogICBrbWFpbDogS0RFIG1h
aWwgY2xpZW50CisgKiAgIFRoaXMgZmlsZTogQ29weXJpZ2h0IChDKSAyMDA2IERtaXRyeSBNb3Jv
emhuaWtvdgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3
aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgor
CisjaWZuZGVmIFRFTVBMQVRFU0NPTkZJR1VSQVRJT05JTVBMX0gKKyNkZWZpbmUgVEVNUExBVEVT
Q09ORklHVVJBVElPTklNUExfSAorCisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbi5o
IgorCitjbGFzcyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOiBwdWJsaWMgVGVtcGxhdGVzQ29uZmln
dXJhdGlvblN0dWIgeworICAgIFFfT0JKRUNUCisgICAgCisgICAgcHVibGljOgorICAgIAorCVRl
bXBsYXRlc0NvbmZpZ3VyYXRpb24oUVdpZGdldCAqcGFyZW50ID0gMCwgY29uc3QgY2hhciAqbmFt
ZSA9IDApOworCQorCXZvaWQgbG9hZEZyb21HbG9iYWwoKTsKKwl2b2lkIHNhdmVUb0dsb2JhbCgp
OworCXZvaWQgbG9hZEZyb21Gb2xkZXIoUVN0cmluZyBpZCk7CisJdm9pZCBzYXZlVG9Gb2xkZXIo
UVN0cmluZyBpZCk7CisJCisJdm9pZCBpbnNlcnRDb21tYW5kKFFTdHJpbmcgY21kLCBpbnQgYWRq
dXN0Q3Vyc29yID0gMCk7CisJCisJc3RhdGljIFFTdHJpbmcgZGVmYXVsdE5ld01lc3NhZ2UoKTsK
KwlzdGF0aWMgUVN0cmluZyBkZWZhdWx0UmVwbHkoKTsKKwlzdGF0aWMgUVN0cmluZyBkZWZhdWx0
UmVwbHlBbGwoKTsKKwlzdGF0aWMgUVN0cmluZyBkZWZhdWx0Rm9yd2FyZCgpOworCXN0YXRpYyBR
U3RyaW5nIGRlZmF1bHRRdW90ZVN0cmluZygpOworCQorICAgIHB1YmxpYyBzbG90czoKKyAgICAK
Kwl2b2lkIGJ1dHRvbl9pbnNlcnRfY2xpY2tlZCgpOworCQorCXZvaWQgc2xvdFRleHRDaGFuZ2Vk
KCk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgCisgICAgICAgIGVudW0ge0NEbmwgPSAxLCBDUmVt
LCBDSW5zZXJ0LCBDU3lzdGVtLCBDUXVvdGVQaXBlLCBDUXVvdGUsIENRSGVhZGVycywgQ0hlYWRl
cnMsIAorICAgICAgICAgICAgQ1RleHRQaXBlLCBDTXNnUGlwZSwgQ0JvZHlQaXBlLCBDQ2xlYXJQ
aXBlLCBDVGV4dCwgCisgICAgICAgICAgICBDVG9BZGRyLCBDVG9OYW1lLCBDRnJvbUFkZHIsIENG
cm9tTmFtZSwgQ0Z1bGxTdWJqZWN0LCBDTXNnSWQsIAorICAgICAgICAgICAgQ09IZWFkZXIsIENI
ZWFkZXIsIENPVG9BZGRyLCBDT1RvTmFtZSwgQ09Gcm9tQWRkciwgQ09Gcm9tTmFtZSwgQ09GdWxs
U3ViamVjdCwgCisgICAgICAgICAgICBDT01zZ0lkLCBDRGF0ZUVuLCBDRGF0ZVNob3J0LCBDRGF0
ZSwgQ0RvdywgQ1RpbWVMb25nRW4sIENUaW1lTG9uZywgQ1RpbWUsIAorICAgICAgICAgICAgQ09E
YXRlRW4sIENPRGF0ZVNob3J0LCBDT0RhdGUsIENPRG93LCBDT1RpbWVMb25nRW4sIENPVGltZUxv
bmcsIENPVGltZSwgCisgICAgICAgICAgICBDQmxhbmssIENOb3AsIENDbGVhciwgQ0RlYnVnLCBD
RGVidWdPZmZ9OworICAgIAorICAgIHNpZ25hbHM6CisgICAgCisgICAgICAgIHZvaWQgY2hhbmdl
ZCgpOworICAgIAorfTsKKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18158</attachid>
            <date>2006-10-18 09:07:31 +0000</date>
            <delta_ts>2006-10-18 10:15:05 +0000</delta_ts>
            <desc>Thebat-like template engine for kmail</desc>
            <filename>kmail-templates-20061018.diff</filename>
            <type>text/plain</type>
            <size>91736</size>
            <attacher name="Dmitry Morozhnikov">dmiceman</attacher>
            
              <data encoding="base64">SW5kZXg6IGttYWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb25fa2ZnLmtjZmdjCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGttYWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb25fa2ZnLmtjZmdjCShyZXZpc2lvbiAwKQor
Kysga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcua2NmZ2MJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNSBAQAorRmlsZT10ZW1wbGF0ZXNjb25maWd1cmF0aW9uX2tmZy5rY2ZnCitDbGFz
c05hbWU9VGVtcGxhdGVzCitNdXRhdG9ycz10cnVlCitJdGVtQWNjZXNzb3JzPXRydWUKK1NldFVz
ZXJUZXh0cz10cnVlCkluZGV4OiBrbWFpbC90ZW1wbGF0ZXBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga21haWwvdGVtcGxhdGVwYXJzZXIuY3BwCShyZXZpc2lvbiAwKQorKysga21haWwvdGVtcGxh
dGVwYXJzZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkyNCBAQAorLyogICAtKi0gbW9k
ZTogQysrOyBjLWZpbGUtc3R5bGU6ICJnbnUiIC0qLQorICogICBrbWFpbDogS0RFIG1haWwgY2xp
ZW50CisgKiAgIFRoaXMgZmlsZTogQ29weXJpZ2h0IChDKSAyMDA2IERtaXRyeSBNb3JvemhuaWtv
dgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IK
KyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMg
cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5j
bHVkZSA8cXN0cmluZy5oPgorI2luY2x1ZGUgPHFkYXRldGltZS5oPgorI2luY2x1ZGUgPGtsb2Nh
bGUuaD4KKyNpbmNsdWRlIDxrY2FsZW5kYXJzeXN0ZW0uaD4KKyNpbmNsdWRlIDxrbWltZV91dGls
Lmg+CisjaW5jbHVkZSA8a2dsb2JhbC5oPgorI2luY2x1ZGUgPGtwcm9jZXNzLmg+CisjaW5jbHVk
ZSA8cXJlZ2V4cC5oPgorI2luY2x1ZGUgPHFmaWxlLmg+CisjaW5jbHVkZSA8a21lc3NhZ2Vib3gu
aD4KKyNpbmNsdWRlIDxrc2hlbGwuaD4KKyNpbmNsdWRlIDxxZmlsZWluZm8uaD4KKworI2luY2x1
ZGUgImttbWVzc2FnZS5oIgorI2luY2x1ZGUgImttbXNnYmFzZS5oIgorI2luY2x1ZGUgImttZm9s
ZGVyLmgiCisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcuaCIKKyNpbmNsdWRl
ICJnbG9iYWxzZXR0aW5nc19iYXNlLmgiCisKKyNpbmNsdWRlICJ0ZW1wbGF0ZXBhcnNlci5oIgor
CisjZGVmaW5lIFFVT1RFUkUgIlwiKC4qKVwiIgorCitUZW1wbGF0ZVBhcnNlcjo6VGVtcGxhdGVQ
YXJzZXIoS01NZXNzYWdlKiBhbXNnLCBNb2RlIGFtb2RlLCBRU3RyaW5nIGFzZWxlY3Rpb24sIAor
ICAgICAgICAgICAgYm9vbCBhc21hcnRRdW90ZSwgYm9vbCBhbm9RdW90ZSwgYm9vbCBhYWxsb3dE
ZWNyeXB0aW9uLCBib29sIGFzZWxlY3Rpb25Jc0JvZHkpIDoKKyAgICAgICAgICAgIG1vZGUoYW1v
ZGUpLCBzZWxlY3Rpb24oYXNlbGVjdGlvbiksIAorICAgICAgICAgICAgc21hcnRRdW90ZShhc21h
cnRRdW90ZSksIG5vUXVvdGUoYW5vUXVvdGUpLCAKKyAgICAgICAgICAgIGFsbG93RGVjcnlwdGlv
bihhYWxsb3dEZWNyeXB0aW9uKSwgc2VsZWN0aW9uSXNCb2R5KGFzZWxlY3Rpb25Jc0JvZHkpLCAK
KyAgICAgICAgICAgIGRlYnVnKGZhbHNlKSwgcXVvdGVTdHJpbmcoIj4gIikgeworICAgIG1zZyA9
IGFtc2c7Cit9OworCitpbnQgVGVtcGxhdGVQYXJzZXI6OnBhcnNlUXVvdGVzKFFTdHJpbmcgcHJl
Zml4LCBRU3RyaW5nIHN0ciwgUVN0cmluZyYgcXVvdGUpIHsKKyAgICBpbnQgcG9zID0gcHJlZml4
Lmxlbmd0aCgpOworICAgIGludCBsZW47CisgICAgaW50IHN0cl9sZW4gPSBzdHIubGVuZ3RoKCk7
CisgICAgUUNoYXIgcWMgPSAnIic7CisgICAgUUNoYXIgcHJldiA9IDA7CisgICAgCisgICAgcG9z
Kys7CisgICAgbGVuID0gcG9zOworICAgIAorICAgIHdoaWxlKHBvcyA8IHN0cl9sZW4pIHsKKyAg
ICAgICAgUUNoYXIgYyA9IHN0cltwb3NdOworICAgICAgICAKKyAgICAgICAgcG9zKys7CisgICAg
ICAgIGxlbisrOworICAgICAgICAKKyAgICAgICAgaWYocHJldikgeworICAgICAgICAgICAgcXVv
dGUuYXBwZW5kKGMpOworICAgICAgICAgICAgcHJldiA9IDA7CisgICAgICAgIH0gZWxzZSB7CisJ
ICAgIGlmKGMgPT0gJ1xcJykgeworCQlwcmV2ID0gYzsKKwkgICAgfSBlbHNlIGlmKGMgPT0gcWMp
IHsKKwkJYnJlYWs7CisJICAgIH0gZWxzZSB7CisJCXF1b3RlLmFwcGVuZChjKTsKKwkgICAgfTsK
Kwl9OworICAgIH07CisgICAgCisgICAgcmV0dXJuIGxlbjsKK307CisKK1FTdHJpbmcgVGVtcGxh
dGVQYXJzZXI6OmdldEZOYW1lKFFTdHJpbmcgc3RyKSB7CisgICAgLy8gc2ltcGxlIGxvZ2ljOgor
ICAgIC8vIGlmIHRoZXJlIGlzICcsJyBpbiBuYW1lLCB0aGFuIGZvcm1hdCBpcyAnTGFzdCwgRmly
c3QnCisgICAgLy8gZWxzZSBmb3JtYXQgaXMgJ0ZpcnN0IExhc3QnCisgICAgLy8gbGFzdCByZXNv
cnQgLS0gcmV0dXJuICduYW1lJyBmcm9tICduYW1lQGRvbWFpbicKKyAgICBpbnQgc2VwX3BvczsK
KyAgICBRU3RyaW5nIHJlczsKKyAgICBpZigoc2VwX3BvcyA9IHN0ci5maW5kKCdAJykpID4gMCkg
eworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yKGkgPSAoc2VwX3BvcyAtIDEpOyBpID49IDA7
IC0taSkgeworICAgICAgICAgICAgUUNoYXIgYyA9IHN0cltpXTsKKyAgICAgICAgICAgIGlmKGMu
aXNMZXR0ZXJPck51bWJlcigpKSB7CisgICAgICAgICAgICAgICAgcmVzLnByZXBlbmQoYyk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fTsKKyAgICAgICAgfTsKKyAgICB9IGVsc2UgaWYoKHNlcF9wb3MgPSBzdHIuZmluZCgnLCcpKSA+
IDApIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgIGJvb2wgYmVnaW4gPSBmYWxz
ZTsKKyAgICAgICAgZm9yKGkgPSBzZXBfcG9zOyBpIDwgc3RyLmxlbmd0aCgpOyArK2kpIHsKKyAg
ICAgICAgICAgIFFDaGFyIGMgPSBzdHJbaV07CisgICAgICAgICAgICBpZihjLmlzTGV0dGVyT3JO
dW1iZXIoKSkgeworICAgICAgICAgICAgICAgIGJlZ2luID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICByZXMuYXBwZW5kKGMpOworICAgICAgICAgICAgfSBlbHNlIGlmKGJlZ2luKSB7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9OworICAgICAgICB9OworICAgIH0gZWxzZSB7
CisgICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgICBmb3IoaSA9IDA7IGkgPCBzdHIubGVu
Z3RoKCk7ICsraSkgeworICAgICAgICAgICAgUUNoYXIgYyA9IHN0cltpXTsKKyAgICAgICAgICAg
IGlmKGMuaXNMZXR0ZXJPck51bWJlcigpKSB7CisgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChj
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9OworICAgICAgICB9OworICAgIH07CisgICAgcmV0dXJuIHJlczsKK307CisKK1FTdHJp
bmcgVGVtcGxhdGVQYXJzZXI6OmdldExOYW1lKFFTdHJpbmcgc3RyKSB7CisgICAgLy8gc2ltcGxl
IGxvZ2ljOgorICAgIC8vIGlmIHRoZXJlIGlzICcsJyBpbiBuYW1lLCB0aGFuIGZvcm1hdCBpcyAn
TGFzdCwgRmlyc3QnCisgICAgLy8gZWxzZSBmb3JtYXQgaXMgJ0ZpcnN0IExhc3QnCisgICAgaW50
IHNlcF9wb3M7CisgICAgUVN0cmluZyByZXM7CisgICAgaWYoKHNlcF9wb3MgPSBzdHIuZmluZCgn
LCcpKSA+IDApIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvcihpID0gc2VwX3BvczsgaSA+
PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIFFDaGFyIGMgPSBzdHJbaV07CisgICAgICAgICAgICBp
ZihjLmlzTGV0dGVyT3JOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIHJlcy5wcmVwZW5kKGMp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH07CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYoKHNlcF9wb3MgPSBz
dHIuZmluZCgnICcpKSA+IDApIHsKKwkgICAgdW5zaWduZWQgaW50IGk7CisJICAgIGJvb2wgYmVn
aW4gPSBmYWxzZTsKKwkgICAgZm9yKGkgPSBzZXBfcG9zOyBpIDwgc3RyLmxlbmd0aCgpOyArK2kp
IHsKKwkJUUNoYXIgYyA9IHN0cltpXTsKKwkJaWYoYy5pc0xldHRlck9yTnVtYmVyKCkpIHsKKwkJ
ICAgIGJlZ2luID0gdHJ1ZTsKKwkJICAgIHJlcy5hcHBlbmQoYyk7CisJCX0gZWxzZSBpZihiZWdp
bikgeworCQkgICAgYnJlYWs7CisJCX07CisJICAgIH07CisgICAgICAgIH07CisgICAgfTsKKyAg
ICByZXR1cm4gcmVzOworfTsKKwordm9pZCBUZW1wbGF0ZVBhcnNlcjo6cHJvY2VzcyhLTU1lc3Nh
Z2UqIGFvcmlnX21zZywgS01Gb2xkZXIqIGFmb2xkZXIpIHsKKyAgICBvcmlnX21zZyA9IGFvcmln
X21zZzsKKyAgICBmb2xkZXIgPSBhZm9sZGVyOworICAgIFFTdHJpbmcgdG1wbCA9IGZpbmRUZW1w
bGF0ZSgpOworICAgIFFTdHJpbmcgYm9keTsKKyAgICBpbnQgdG1wbF9sZW4gPSB0bXBsLmxlbmd0
aCgpOworICAgIAorICAgIC8vIGtkRGVidWcoKSA8PCAiTW9kZSAiIDw8IG1vZGUgPDwgIiwgdGVt
cGxhdGUgZm91bmQ6ICIgPDwgdG1wbCA8PCBlbmRsOworICAgIAorICAgIGJvb2wgZG5sID0gZmFs
c2U7CisgICAgZm9yKGludCBpID0gMDsgaSA8IHRtcGxfbGVuOyArK2kpIHsKKyAgICAgICAgUUNo
YXIgYyA9IHRtcGxbaV07CisgICAgICAgIC8vIGtkRGVidWcoKSA8PCAiTmV4dCBjaGFyOiAiIDw8
IGMgPDwgZW5kbDsKKyAgICAgICAgaWYoYyA9PSAnJScpIHsKKyAgICAgICAgICAgIFFTdHJpbmcg
Y21kID0gdG1wbC5taWQoaSArIDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZihjbWQu
c3RhcnRzV2l0aCgiLSIpKSB7CisgICAgICAgICAgICAgICAgLy8gZG5sCisgICAgICAgICAgICAg
ICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiAtIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGRu
bCA9IHRydWU7CisgICAgICAgICAgICAgICAgaSArPSAxOworICAgICAgICAgICAgCisgICAgICAg
ICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlJFTT0iKSkgeworICAgICAgICAgICAgICAg
IC8vIGNvbW1lbnRzCisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBSRU09
IiA8PCBlbmRsOworICAgICAgICAgICAgICAgIFFTdHJpbmcgcTsKKyAgICAgICAgICAgICAgICBp
bnQgbGVuID0gcGFyc2VRdW90ZXMoIlJFTT0iLCBjbWQsIHEpOworICAgICAgICAgICAgICAgIGkg
Kz0gbGVuOworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dp
dGgoIklOU0VSVD0iKSkgeworICAgICAgICAgICAgICAgIC8vIGluc2VydCBjb250ZW50IG9mIHNw
ZWNpZmllZCBmaWxlIGFzIGlzCisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5k
OiBJTlNFUlQ9IiA8PCBlbmRsOworICAgICAgICAgICAgICAgIFFTdHJpbmcgcTsKKyAgICAgICAg
ICAgICAgICBpbnQgbGVuID0gcGFyc2VRdW90ZXMoIklOU0VSVD0iLCBjbWQsIHEpOworICAgICAg
ICAgICAgICAgIGkgKz0gbGVuOworCQlRU3RyaW5nIHBhdGggPSBLU2hlbGw6OnRpbGRlRXhwYW5k
KHEpOworCQlRRmlsZUluZm8gZmluZm8ocGF0aCk7CisJCWlmKGZpbmZvLmlzUmVsYXRpdmUoKSkg
eworCQkgICAgcGF0aCA9IEtTaGVsbDo6aG9tZURpcigiIik7CisJCSAgICBwYXRoICs9ICIvIjsK
KwkJICAgIHBhdGggKz0gcTsKKwkJfTsKKwkJUUZpbGUgZmlsZShwYXRoKTsKKwkJaWYoZmlsZS5v
cGVuKElPX1JlYWRPbmx5KSkgeworCQkgICAgUUJ5dGVBcnJheSBjb250ZW50ID0gZmlsZS5yZWFk
QWxsKCk7CisJCSAgICBRU3RyaW5nIHN0ciA9IFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoY29udGVu
dCwgY29udGVudC5zaXplKCkpOworCQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfSBlbHNlIGlm
KGRlYnVnKSB7CisJCSAgICBLTWVzc2FnZUJveDo6ZXJyb3IoTlVMTCwgCisJCQlpMThuKCJDYW5g
dCBpbnNlcnQgY29udGVudCBmcm9tIGZpbGUgJTE6ICUyIikuYXJnKHBhdGgpLmFyZyhmaWxlLmVy
cm9yU3RyaW5nKCkpKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlm
KGNtZC5zdGFydHNXaXRoKCJTWVNURU09IikpIHsKKyAgICAgICAgICAgICAgICAvLyBpbnNlcnQg
Y29udGVudCBvZiBzcGVjaWZpZWQgZmlsZSBhcyBpcworICAgICAgICAgICAgICAgIGtkRGVidWco
KSA8PCAiQ29tbWFuZDogU1lTVEVNPSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBRU3RyaW5n
IHE7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHBhcnNlUXVvdGVzKCJTWVNURU09IiwgY21k
LCBxKTsKKyAgICAgICAgICAgICAgICBpICs9IGxlbjsKKwkJUVN0cmluZyBwaXBlX2NtZCA9IHE7
CisJCVFTdHJpbmcgc3RyID0gcGlwZShwaXBlX2NtZCwgIiIpOworCQlib2R5LmFwcGVuZChzdHIp
OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlBV
VD0iKSkgeworICAgICAgICAgICAgICAgIC8vIGluc2VydCBjb250ZW50IG9mIHNwZWNpZmllZCBm
aWxlIGFzIGlzCisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBQVVQ9IiA8
PCBlbmRsOworICAgICAgICAgICAgICAgIFFTdHJpbmcgcTsKKyAgICAgICAgICAgICAgICBpbnQg
bGVuID0gcGFyc2VRdW90ZXMoIlBVVD0iLCBjbWQsIHEpOworICAgICAgICAgICAgICAgIGkgKz0g
bGVuOworCQlRU3RyaW5nIHBhdGggPSBLU2hlbGw6OnRpbGRlRXhwYW5kKHEpOworCQlRRmlsZUlu
Zm8gZmluZm8ocGF0aCk7CisJCWlmKGZpbmZvLmlzUmVsYXRpdmUoKSkgeworCQkgICAgcGF0aCA9
IEtTaGVsbDo6aG9tZURpcigiIik7CisJCSAgICBwYXRoICs9ICIvIjsKKwkJICAgIHBhdGggKz0g
cTsKKwkJfTsKKwkJUUZpbGUgZmlsZShwYXRoKTsKKwkJaWYoZmlsZS5vcGVuKElPX1JlYWRPbmx5
KSkgeworCQkgICAgUUJ5dGVBcnJheSBjb250ZW50ID0gZmlsZS5yZWFkQWxsKCk7CisJCSAgICBi
b2R5LmFwcGVuZChRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGNvbnRlbnQsIGNvbnRlbnQuc2l6ZSgp
KSk7CisJCX0gZWxzZSBpZihkZWJ1ZykgeworCQkgICAgS01lc3NhZ2VCb3g6OmVycm9yKE5VTEws
IAorCQkJaTE4bigiQ2FuYHQgaW5zZXJ0IGNvbnRlbnQgZnJvbSBmaWxlICUxOiAlMiIpLmFyZyhw
YXRoKS5hcmcoZmlsZS5lcnJvclN0cmluZygpKSk7CisJCX07CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiUVVPVEVQSVBFPSIpKSB7CisgICAgICAg
ICAgICAgICAgLy8gcGlwZSBtZXNzYWdlIGJvZHkgdGhyb3cgY29tbWFuZCBhbmQgaW5zZXJ0IGl0
IGFzIHF1b3RhdGlvbgorICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogUVVP
VEVQSVBFPSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBRU3RyaW5nIHE7CisgICAgICAgICAg
ICAgICAgaW50IGxlbiA9IHBhcnNlUXVvdGVzKCJRVU9URVBJUEU9IiwgY21kLCBxKTsKKyAgICAg
ICAgICAgICAgICBpICs9IGxlbjsKKwkJUVN0cmluZyBwaXBlX2NtZCA9IHE7CisJCWlmKG9yaWdf
bXNnICYmICFub1F1b3RlKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IHBpcGUocGlwZV9jbWQsIHNl
bGVjdGlvbik7CisJCSAgICBRU3RyaW5nIHF1b3RlID0gb3JpZ19tc2ctPmFzUXVvdGVkU3RyaW5n
KCIiLCBxdW90ZVN0cmluZywgc3RyLCBzbWFydFF1b3RlLCBhbGxvd0RlY3J5cHRpb24pOworCQkg
ICAgYm9keS5hcHBlbmQocXVvdGUpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9
IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlFVT1RFIikpIHsKKyAgICAgICAgICAgICAgICBrZERl
YnVnKCkgPDwgIkNvbW1hbmQ6IFFVT1RFIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0g
c3RybGVuKCJRVU9URSIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnICYmICFub1F1b3Rl
KSB7CisJCSAgICBRU3RyaW5nIHF1b3RlID0gb3JpZ19tc2ctPmFzUXVvdGVkU3RyaW5nKCIiLCBx
dW90ZVN0cmluZywgc2VsZWN0aW9uLCBzbWFydFF1b3RlLCBhbGxvd0RlY3J5cHRpb24pOworCQkg
ICAgYm9keS5hcHBlbmQocXVvdGUpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9
IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlFIRUFERVJTIikpIHsKKyAgICAgICAgICAgICAgICBr
ZERlYnVnKCkgPDwgIkNvbW1hbmQ6IFFIRUFERVJTIiA8PCBlbmRsOworICAgICAgICAgICAgICAg
IGkgKz0gc3RybGVuKCJRSEVBREVSUyIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnICYm
ICFub1F1b3RlKSB7CisJCSAgICBRU3RyaW5nIHF1b3RlID0gb3JpZ19tc2ctPmFzUXVvdGVkU3Ry
aW5nKCIiLCBxdW90ZVN0cmluZywgb3JpZ19tc2ctPmhlYWRlckFzU2VuZGFibGVTdHJpbmcoKSwg
c21hcnRRdW90ZSwgZmFsc2UpOworCQkgICAgYm9keS5hcHBlbmQocXVvdGUpOworCQl9OworICAg
ICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIkhFQURFUlMi
KSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogSEVBREVSUyIgPDwg
ZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiSEVBREVSUyIpOworICAgICAgICAg
ICAgICAgIGlmKG9yaWdfbXNnICYmICFub1F1b3RlKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IG9y
aWdfbXNnLT5oZWFkZXJBc1NlbmRhYmxlU3RyaW5nKCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIp
OworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dp
dGgoIlRFWFRQSVBFPSIpKSB7CisgICAgICAgICAgICAgICAgLy8gcGlwZSBtZXNzYWdlIGJvZHkg
dGhyb3cgY29tbWFuZCBhbmQgaW5zZXJ0IGl0IGFzIGlzCisgICAgICAgICAgICAgICAga2REZWJ1
ZygpIDw8ICJDb21tYW5kOiBURVhUUElQRT0iIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgUVN0
cmluZyBxOworICAgICAgICAgICAgICAgIGludCBsZW4gPSBwYXJzZVF1b3RlcygiVEVYVFBJUEU9
IiwgY21kLCBxKTsKKyAgICAgICAgICAgICAgICBpICs9IGxlbjsKKwkJUVN0cmluZyBwaXBlX2Nt
ZCA9IHE7CisJCWlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IHBpcGUocGlwZV9j
bWQsIG9yaWdfbXNnLT5ib2R5KCkpOworCQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJNU0dQSVBF
PSIpKSB7CisgICAgICAgICAgICAgICAgLy8gcGlwZSBmdWxsIG1lc3NhZ2UgdGhyb3cgY29tbWFu
ZCBhbmQgaW5zZXJ0IHJlc3VsdCBhcyBpcworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAi
Q29tbWFuZDogTVNHUElQRT0iIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgUVN0cmluZyBxOwor
ICAgICAgICAgICAgICAgIGludCBsZW4gPSBwYXJzZVF1b3RlcygiTVNHUElQRT0iLCBjbWQsIHEp
OworICAgICAgICAgICAgICAgIGkgKz0gbGVuOworCQlRU3RyaW5nIHBpcGVfY21kID0gcTsKKwkJ
aWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcgc3RyID0gcGlwZShwaXBlX2NtZCwgb3JpZ19t
c2ctPmFzU3RyaW5nKCkpOworCQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJCT0RZUElQRT0iKSkg
eworICAgICAgICAgICAgICAgIC8vIHBpcGUgbWVzc2FnZSBib2R5IGdlbmVyYXRlZCBzbyBmYXIg
dGhyb3cgY29tbWFuZCBhbmQgaW5zZXJ0IHJlc3VsdCBhcyBpcworICAgICAgICAgICAgICAgIGtk
RGVidWcoKSA8PCAiQ29tbWFuZDogQk9EWVBJUEU9IiA8PCBlbmRsOworICAgICAgICAgICAgICAg
IFFTdHJpbmcgcTsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gcGFyc2VRdW90ZXMoIkJPRFlQ
SVBFPSIsIGNtZCwgcSk7CisgICAgICAgICAgICAgICAgaSArPSBsZW47CisJCVFTdHJpbmcgcGlw
ZV9jbWQgPSBxOworCQlRU3RyaW5nIHN0ciA9IHBpcGUocGlwZV9jbWQsIGJvZHkpOworCQlib2R5
LmFwcGVuZChzdHIpOworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0
YXJ0c1dpdGgoIkNMRUFSUElQRT0iKSkgeworICAgICAgICAgICAgICAgIC8vIHBpcGUgbWVzc2Fn
ZSBib2R5IGdlbmVyYXRlZCBzbyBmYXIgdGhyb3cgY29tbWFuZCBhbmQgaW5zZXJ0IHJlc3VsdCBh
cyBpcyByZXBsYWNpbmcgY3VycmVudCBib2R5CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8
ICJDb21tYW5kOiBDTEVBUlBJUEU9IiA8PCBlbmRsOworICAgICAgICAgICAgICAgIFFTdHJpbmcg
cTsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gcGFyc2VRdW90ZXMoIkNMRUFSUElQRT0iLCBj
bWQsIHEpOworICAgICAgICAgICAgICAgIGkgKz0gbGVuOworCQlRU3RyaW5nIHBpcGVfY21kID0g
cTsKKwkJUVN0cmluZyBzdHIgPSBwaXBlKHBpcGVfY21kLCBib2R5KTsKKwkJYm9keSA9IHN0cjsK
KwkJbXNnLT5zZXRDdXJzb3JQb3MoMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxz
ZSBpZihjbWQuc3RhcnRzV2l0aCgiVEVYVCIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1Zygp
IDw8ICJDb21tYW5kOiBURVhUIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVu
KCJURVhUIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcg
cXVvdGUgPSBvcmlnX21zZy0+Ym9keSgpOworCQkgICAgYm9keS5hcHBlbmQocXVvdGUpOworCQl9
OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9U
RVhUU0laRSIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBPVEVY
VFNJWkUiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9URVhUU0laRSIp
OworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IFFT
dHJpbmcoIiUxIikuYXJnKG9yaWdfbXNnLT5ib2R5KCkubGVuZ3RoKCkpOworCQkgICAgYm9keS5h
cHBlbmQoc3RyKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNt
ZC5zdGFydHNXaXRoKCJPVEVYVCIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJD
b21tYW5kOiBPVEVYVCIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT1RF
WFQiKTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21zZykgeworCQkgICAgUVN0cmluZyBxdW90
ZSA9IG9yaWdfbXNnLT5ib2R5KCk7CisJCSAgICBib2R5LmFwcGVuZChxdW90ZSk7CisJCX07Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiVE9BRERS
IikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IFRPQUREUiIgPDwg
ZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiVE9BRERSIik7CisJCVFTdHJpbmcg
c3RyID0gbXNnLT50bygpOworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlRPTkFNRSIpKSB7CisgICAgICAgICAg
ICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBUT05BTUUiIDw8IGVuZGw7CisgICAgICAgICAg
ICAgICAgaSArPSBzdHJsZW4oIlRPTkFNRSIpOworCQlRU3RyaW5nIHN0ciA9IG1zZy0+dG9TdHJp
cCgpOworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVs
c2UgaWYoY21kLnN0YXJ0c1dpdGgoIlRPRk5BTUUiKSkgeworICAgICAgICAgICAgICAgIGtkRGVi
dWcoKSA8PCAiQ29tbWFuZDogVE9GTkFNRSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9
IHN0cmxlbigiVE9GTkFNRSIpOworCQlRU3RyaW5nIHN0ciA9IG1zZy0+dG9TdHJpcCgpOworCQli
b2R5LmFwcGVuZChnZXRGTmFtZShzdHIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBl
bHNlIGlmKGNtZC5zdGFydHNXaXRoKCJUT0xOQU1FIikpIHsKKyAgICAgICAgICAgICAgICBrZERl
YnVnKCkgPDwgIkNvbW1hbmQ6IFRPTE5BTUUiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSAr
PSBzdHJsZW4oIlRPTE5BTUUiKTsKKwkJUVN0cmluZyBzdHIgPSBtc2ctPnRvU3RyaXAoKTsKKwkJ
Ym9keS5hcHBlbmQoZ2V0TE5hbWUoc3RyKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0g
ZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiVE9MSVNUIikpIHsKKyAgICAgICAgICAgICAgICBrZERl
YnVnKCkgPDwgIkNvbW1hbmQ6IFRPTElTVCIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9
IHN0cmxlbigiVE9MSVNUIik7CisJCVFTdHJpbmcgc3RyID0gbXNnLT50bygpOworCQlib2R5LmFw
cGVuZChzdHIpOworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0
c1dpdGgoIkZST01BRERSIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1h
bmQ6IEZST01BRERSIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJGUk9N
QUREUiIpOworCQlRU3RyaW5nIHN0ciA9IG1zZy0+ZnJvbSgpOworCQlib2R5LmFwcGVuZChzdHIp
OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIkZS
T01OQU1FIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IEZST01O
QU1FIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJGUk9NTkFNRSIpOwor
CQlRU3RyaW5nIHN0ciA9IG1zZy0+ZnJvbVN0cmlwKCk7CisJCWJvZHkuYXBwZW5kKHN0cik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiRlJPTUZO
QU1FIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IEZST01GTkFN
RSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiRlJPTUZOQU1FIik7CisJ
CVFTdHJpbmcgc3RyID0gbXNnLT5mcm9tU3RyaXAoKTsKKwkJYm9keS5hcHBlbmQoZ2V0Rk5hbWUo
c3RyKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0
aCgiRlJPTUxOQU1FIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6
IEZST01MTkFNRSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiRlJPTUxO
QU1FIik7CisJCVFTdHJpbmcgc3RyID0gbXNnLT5mcm9tU3RyaXAoKTsKKwkJYm9keS5hcHBlbmQo
Z2V0TE5hbWUoc3RyKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQu
c3RhcnRzV2l0aCgiRlVMTFNVQkpFQ1QiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8
PCAiQ29tbWFuZDogRlVMTFNVQkpFQ1QiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBz
dHJsZW4oIkZVTExTVUJKRUNUIik7CisJCVFTdHJpbmcgc3RyID0gbXNnLT5zdWJqZWN0KCk7CisJ
CWJvZHkuYXBwZW5kKHN0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihj
bWQuc3RhcnRzV2l0aCgiRlVMTFNVQkoiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8
PCAiQ29tbWFuZDogRlVMTFNVQkoiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJs
ZW4oIkZVTExTVUJKIik7CisJCVFTdHJpbmcgc3RyID0gbXNnLT5zdWJqZWN0KCk7CisJCWJvZHku
YXBwZW5kKHN0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3Rh
cnRzV2l0aCgiTVNHSUQiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFu
ZDogTVNHSUQiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk1TR0lEIik7
CisJCVFTdHJpbmcgc3RyID0gbXNnLT5pZCgpOworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9IRUFERVI9Iikp
IHsKKyAgICAgICAgICAgICAgICAvLyBpbnNlcnQgc3BlY2lmaWVkIGNvbnRlbnQgb2YgaGVhZGVy
IGZyb20gb3JpZ2luYWwgbWVzc2FnZQorICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29t
bWFuZDogT0hFQURFUj0iIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgUVN0cmluZyBxOworICAg
ICAgICAgICAgICAgIGludCBsZW4gPSBwYXJzZVF1b3RlcygiT0hFQURFUj0iLCBjbWQsIHEpOwor
ICAgICAgICAgICAgICAgIGkgKz0gbGVuOworCQlpZihvcmlnX21zZykgeworCQkgICAgUVN0cmlu
ZyBoZHIgPSBxOworCQkgICAgUVN0cmluZyBzdHIgPSBvcmlnX21zZy0+aGVhZGVyRmllbGRzKGhk
ci5sb2NhbDhCaXQoKSkuam9pbigiLCAiKTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiSEVB
REVSPSIpKSB7CisgICAgICAgICAgICAgICAgLy8gaW5zZXJ0IHNwZWNpZmllZCBjb250ZW50IG9m
IGhlYWRlciBmcm9tIGN1cnJlbnQgbWVzc2FnZQorICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8
PCAiQ29tbWFuZDogSEVBREVSPSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBRU3RyaW5nIHE7
CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHBhcnNlUXVvdGVzKCJIRUFERVI9IiwgY21kLCBx
KTsKKyAgICAgICAgICAgICAgICBpICs9IGxlbjsKKwkJUVN0cmluZyBoZHIgPSBxOworCQlRU3Ry
aW5nIHN0ciA9IG1zZy0+aGVhZGVyRmllbGRzKGhkci5sb2NhbDhCaXQoKSkuam9pbigiLCAiKTsK
KwkJYm9keS5hcHBlbmQoc3RyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlm
KGNtZC5zdGFydHNXaXRoKCJIRUFERVIoIikpIHsKKyAgICAgICAgICAgICAgICAvLyBpbnNlcnQg
c3BlY2lmaWVkIGNvbnRlbnQgb2YgaGVhZGVyIGZyb20gY3VycmVudCBtZXNzYWdlCisgICAgICAg
ICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBIRUFERVIoIiA8PCBlbmRsOworICAgICAg
ICAgICAgICAgIFFSZWdFeHAgcmUgPSBRUmVnRXhwKCJeSEVBREVSXFwoKC4rKVxcKSIpOworICAg
ICAgICAgICAgICAgIHJlLnNldE1pbmltYWwodHJ1ZSk7CisgICAgICAgICAgICAgICAgaW50IHJl
cyA9IHJlLnNlYXJjaChjbWQpOworICAgICAgICAgICAgICAgIGlmKHJlcyAhPSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyB3cm9uZworICAgICAgICAgICAgICAgICAgICBp
ICs9IHN0cmxlbigiSEVBREVSKCIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIGkgKz0gcmUubWF0Y2hlZExlbmd0aCgpOworCQkgICAgUVN0cmluZyBoZHIg
PSByZS5jYXAoMSk7CisJCSAgICBRU3RyaW5nIHN0ciA9IG1zZy0+aGVhZGVyRmllbGRzKGhkci5s
b2NhbDhCaXQoKSkuam9pbigiLCAiKTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiT1RPQURE
UiIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBPVE9BRERSIiA8
PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJPVE9BRERSIik7CisgICAgICAg
ICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcgc3RyID0gb3JpZ19tc2ctPnRv
KCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAgICAgCisgICAgICAg
ICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9UT05BTUUiKSkgeworICAgICAgICAgICAg
ICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogT1RPTkFNRSIgPDwgZW5kbDsKKyAgICAgICAgICAg
ICAgICBpICs9IHN0cmxlbigiT1RPTkFNRSIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNn
KSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IG9yaWdfbXNnLT50b1N0cmlwKCk7CisJCSAgICBib2R5
LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYo
Y21kLnN0YXJ0c1dpdGgoIk9UT0ZOQU1FIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkg
PDwgIkNvbW1hbmQ6IE9UT0ZOQU1FIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3Ry
bGVuKCJPVE9GTkFNRSIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBR
U3RyaW5nIHN0ciA9IG9yaWdfbXNnLT50b1N0cmlwKCk7CisJCSAgICBib2R5LmFwcGVuZChnZXRG
TmFtZShzdHIpKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNt
ZC5zdGFydHNXaXRoKCJPVE9MTkFNRSIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8
ICJDb21tYW5kOiBPVE9MTkFNRSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxl
bigiT1RPTE5BTUUiKTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21zZykgeworCQkgICAgUVN0
cmluZyBzdHIgPSBvcmlnX21zZy0+dG9TdHJpcCgpOworCQkgICAgYm9keS5hcHBlbmQoZ2V0TE5h
bWUoc3RyKSk7CisJCX07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQu
c3RhcnRzV2l0aCgiT1RPTElTVCIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJD
b21tYW5kOiBPVE9MSVNUIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJP
VE9MSVNUIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcg
c3RyID0gb3JpZ19tc2ctPnRvKCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAg
ICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9UTyIpKSB7
CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBPVE8iIDw8IGVuZGw7Cisg
ICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9UTyIpOworICAgICAgICAgICAgICAgIGlmKG9y
aWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IG9yaWdfbXNnLT50bygpOworCQkgICAgYm9k
eS5hcHBlbmQoc3RyKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlm
KGNtZC5zdGFydHNXaXRoKCJPRlJPTUFERFIiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWco
KSA8PCAiQ29tbWFuZDogT0ZST01BRERSIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0g
c3RybGVuKCJPRlJPTUFERFIiKTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21zZykgeworCQkg
ICAgUVN0cmluZyBzdHIgPSBvcmlnX21zZy0+ZnJvbSgpOworCQkgICAgYm9keS5hcHBlbmQoc3Ry
KTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNX
aXRoKCJPRlJPTU5BTUUiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFu
ZDogT0ZST01OQU1FIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJPRlJP
TU5BTUUiKTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21zZykgeworCQkgICAgUVN0cmluZyBz
dHIgPSBvcmlnX21zZy0+ZnJvbVN0cmlwKCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9
OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9G
Uk9NRk5BTUUiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogT0ZS
T01GTkFNRSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT0ZST01GTkFN
RSIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9
IG9yaWdfbXNnLT5mcm9tU3RyaXAoKTsKKwkJICAgIGJvZHkuYXBwZW5kKGdldEZOYW1lKHN0cikp
OworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dp
dGgoIk9GUk9NTE5BTUUiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFu
ZDogT0ZST01MTkFNRSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT0ZS
T01MTkFNRSIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5n
IHN0ciA9IG9yaWdfbXNnLT5mcm9tU3RyaXAoKTsKKwkJICAgIGJvZHkuYXBwZW5kKGdldExOYW1l
KHN0cikpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0
YXJ0c1dpdGgoIk9GVUxMU1VCSkVDVCIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8
ICJDb21tYW5kOiBPRlVMTFNVQkpFQ1QiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBz
dHJsZW4oIk9GVUxMU1VCSkVDVCIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJ
CSAgICBRU3RyaW5nIHN0ciA9IG9yaWdfbXNnLT5zdWJqZWN0KCk7CisJCSAgICBib2R5LmFwcGVu
ZChzdHIpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0
YXJ0c1dpdGgoIk9GVUxMU1VCSiIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJD
b21tYW5kOiBPRlVMTFNVQkoiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4o
Ik9GVUxMU1VCSiIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3Ry
aW5nIHN0ciA9IG9yaWdfbXNnLT5zdWJqZWN0KCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOwor
CQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgo
Ik9NU0dJRCIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBPTVNH
SUQiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9NU0dJRCIpOworICAg
ICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IG9yaWdfbXNn
LT5pZCgpOworCQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJEQVRFRU4iKSkgeworICAgICAgICAg
ICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogREFURUVOIiA8PCBlbmRsOworICAgICAgICAg
ICAgICAgIGkgKz0gc3RybGVuKCJEQVRFRU4iKTsKKwkJUURhdGVUaW1lIGRhdGUgPSBRRGF0ZVRp
bWU6OmN1cnJlbnREYXRlVGltZSgpOworCQlLTG9jYWxlIGxvY2FsZSgiQyIpOworCQlRU3RyaW5n
IHN0ciA9IFFTdHJpbmcoIiUxLCAlMiAlMywgJTQiKQorCQkgICAgLmFyZyhsb2NhbGUuY2FsZW5k
YXIoKS0+d2Vla0RheU5hbWUoZGF0ZS5kYXRlKCksIGZhbHNlKSkKKwkJICAgIC5hcmcobG9jYWxl
LmNhbGVuZGFyKCktPm1vbnRoTmFtZShkYXRlLmRhdGUoKSwgZmFsc2UpKQorCQkgICAgLmFyZyhk
YXRlLmRhdGUoKS5kYXkoKSkKKwkJICAgIC5hcmcoZGF0ZS5kYXRlKCkueWVhcigpKTsKKwkJYm9k
eS5hcHBlbmQoc3RyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihj
bWQuc3RhcnRzV2l0aCgiREFURVNIT1JUIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkg
PDwgIkNvbW1hbmQ6IERBVEVTSE9SVCIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0
cmxlbigiREFURVNIT1JUIik7CisJCVFEYXRlVGltZSBkYXRlID0gUURhdGVUaW1lOjpjdXJyZW50
RGF0ZVRpbWUoKTsKKwkJUVN0cmluZyBzdHIgPSBkYXRlLmRhdGUoKS50b1N0cmluZyhRdDo6TG9j
YWxEYXRlKTsKKwkJYm9keS5hcHBlbmQoc3RyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiREFURSIpKSB7CisgICAgICAgICAgICAgICAg
a2REZWJ1ZygpIDw8ICJDb21tYW5kOiBEQVRFIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkg
Kz0gc3RybGVuKCJEQVRFIik7CisJCVFEYXRlVGltZSBkYXRlID0gUURhdGVUaW1lOjpjdXJyZW50
RGF0ZVRpbWUoKTsKKwkJUVN0cmluZyBzdHIgPSBkYXRlLmRhdGUoKS50b1N0cmluZyhRdDo6VGV4
dERhdGUpOworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAgICAgICAgCisgICAgICAgICAgICB9
IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIkRPVyIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1
ZygpIDw8ICJDb21tYW5kOiBET1ciIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJs
ZW4oIkRPVyIpOworCQlRRGF0ZVRpbWUgZGF0ZSA9IFFEYXRlVGltZTo6Y3VycmVudERhdGVUaW1l
KCk7CisJCVFTdHJpbmcgc3RyID0gUURhdGU6OmxvbmdEYXlOYW1lKGRhdGUuZGF0ZSgpLmRheU9m
V2VlaygpKTsKKwkJYm9keS5hcHBlbmQoc3RyKTsKKwkgICAgCisgICAgICAgICAgICB9IGVsc2Ug
aWYoY21kLnN0YXJ0c1dpdGgoIlRJTUVMT05HRU4iKSkgeworICAgICAgICAgICAgICAgIGtkRGVi
dWcoKSA8PCAiQ29tbWFuZDogVElNRUxPTkdFTiIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBp
ICs9IHN0cmxlbigiVElNRUxPTkdFTiIpOworCQlRRGF0ZVRpbWUgZGF0ZSA9IFFEYXRlVGltZTo6
Y3VycmVudERhdGVUaW1lKCk7CisJCVFTdHJpbmcgc3RyID0gZGF0ZS50aW1lKCkudG9TdHJpbmco
ImhoOm1tOnNzIEFQIik7CisJCWJvZHkuYXBwZW5kKHN0cik7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiVElNRUxPTkciKSkgeworICAgICAgICAg
ICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogVElNRUxPTkciIDw8IGVuZGw7CisgICAgICAg
ICAgICAgICAgaSArPSBzdHJsZW4oIlRJTUVMT05HIik7CisJCVFEYXRlVGltZSBkYXRlID0gUURh
dGVUaW1lOjpjdXJyZW50RGF0ZVRpbWUoKTsKKwkJUVN0cmluZyBzdHIgPSBkYXRlLnRpbWUoKS50
b1N0cmluZyhRdDo6VGV4dERhdGUpOworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAgICAgICAg
CisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlRJTUUiKSkgeworICAgICAg
ICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogVElNRSIgPDwgZW5kbDsKKyAgICAgICAg
ICAgICAgICBpICs9IHN0cmxlbigiVElNRSIpOworCQlRRGF0ZVRpbWUgZGF0ZSA9IFFEYXRlVGlt
ZTo6Y3VycmVudERhdGVUaW1lKCk7CisJCVFTdHJpbmcgc3RyID0gZGF0ZS50aW1lKCkudG9TdHJp
bmcoUXQ6OkxvY2FsRGF0ZSk7CisJCWJvZHkuYXBwZW5kKHN0cik7CisJICAgIAorICAgICAgICAg
ICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJPREFURUVOIikpIHsKKyAgICAgICAgICAgICAg
ICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE9EQVRFRU4iIDw8IGVuZGw7CisgICAgICAgICAgICAg
ICAgaSArPSBzdHJsZW4oIk9EQVRFRU4iKTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21zZykg
eworICAgICAgICAgICAgICAgICAgICBRRGF0ZVRpbWUgZGF0ZTsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0ZS5zZXRUaW1lX3Qob3JpZ19tc2ctPmRhdGUoKSk7CisgICAgICAgICAgICAgICAgICAg
IEtMb2NhbGUgbG9jYWxlKCJDIik7CisJCSAgICBRU3RyaW5nIHN0ciA9IFFTdHJpbmcoIiUxLCAl
MiAlMywgJTQiKQorCQkgICAgICAuYXJnKGxvY2FsZS5jYWxlbmRhcigpLT53ZWVrRGF5TmFtZShk
YXRlLmRhdGUoKSwgZmFsc2UpKQorCQkgICAgICAuYXJnKGxvY2FsZS5jYWxlbmRhcigpLT5tb250
aE5hbWUoZGF0ZS5kYXRlKCksIGZhbHNlKSkKKwkJICAgICAgLmFyZyhkYXRlLmRhdGUoKS5kYXko
KSkKKwkJICAgICAgLmFyZyhkYXRlLmRhdGUoKS55ZWFyKCkpOworCQkgICAgYm9keS5hcHBlbmQo
c3RyKTsKKwkJfTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQu
c3RhcnRzV2l0aCgiT0RBVEVTSE9SVCIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8
ICJDb21tYW5kOiBPREFURVNIT1JUIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3Ry
bGVuKCJPREFURVNIT1JUIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKyAgICAg
ICAgICAgICAgICAgICAgUURhdGVUaW1lIGRhdGU7CisgICAgICAgICAgICAgICAgICAgIGRhdGUu
c2V0VGltZV90KG9yaWdfbXNnLT5kYXRlKCkpOworICAgICAgICAgICAgICAgICAgICBRU3RyaW5n
IHN0ciA9IGRhdGUuZGF0ZSgpLnRvU3RyaW5nKFF0OjpMb2NhbERhdGUpOworCQkgICAgYm9keS5h
cHBlbmQoc3RyKTsKKwkJfTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBp
ZihjbWQuc3RhcnRzV2l0aCgiT0RBVEUiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8
PCAiQ29tbWFuZDogT0RBVEUiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4o
Ik9EQVRFIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKyAgICAgICAgICAgICAg
ICAgICAgUURhdGVUaW1lIGRhdGU7CisgICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0VGltZV90
KG9yaWdfbXNnLT5kYXRlKCkpOworICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHN0ciA9IGRh
dGUuZGF0ZSgpLnRvU3RyaW5nKFF0OjpUZXh0RGF0ZSk7CisJCSAgICBib2R5LmFwcGVuZChzdHIp
OworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dp
dGgoIk9ET1ciKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogT0RP
VyIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT0RPVyIpOworICAgICAg
ICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisgICAgICAgICAgICAgICAgICAgIFFEYXRlVGltZSBk
YXRlOworICAgICAgICAgICAgICAgICAgICBkYXRlLnNldFRpbWVfdChvcmlnX21zZy0+ZGF0ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBzdHIgPSBRRGF0ZTo6bG9uZ0RheU5hbWUo
ZGF0ZS5kYXRlKCkuZGF5T2ZXZWVrKCkpOworCQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfTsK
KwkgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9USU1FTE9OR0VO
IikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE9USU1FTE9OR0VO
IiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJPVElNRUxPTkdFTiIpOwor
ICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisgICAgICAgICAgICAgICAgICAgIFFEYXRl
VGltZSBkYXRlOworICAgICAgICAgICAgICAgICAgICBkYXRlLnNldFRpbWVfdChvcmlnX21zZy0+
ZGF0ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBzdHIgPSBkYXRlLnRpbWUoKS50
b1N0cmluZygiaGg6bW06c3MgQVAiKTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiT1RJTUVM
T05HIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE9USU1FTE9O
RyIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT1RJTUVMT05HIik7Cisg
ICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKyAgICAgICAgICAgICAgICAgICAgUURhdGVU
aW1lIGRhdGU7CisgICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0VGltZV90KG9yaWdfbXNnLT5k
YXRlKCkpOworICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHN0ciA9IGRhdGUudGltZSgpLnRv
U3RyaW5nKFF0OjpUZXh0RGF0ZSk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAg
ICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9USU1FIikp
IHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE9USU1FIiA8PCBlbmRs
OworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJPVElNRSIpOworICAgICAgICAgICAgICAg
IGlmKG9yaWdfbXNnKSB7CisgICAgICAgICAgICAgICAgICAgIFFEYXRlVGltZSBkYXRlOworICAg
ICAgICAgICAgICAgICAgICBkYXRlLnNldFRpbWVfdChvcmlnX21zZy0+ZGF0ZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgUVN0cmluZyBzdHIgPSBkYXRlLnRpbWUoKS50b1N0cmluZyhRdDo6TG9j
YWxEYXRlKTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07CisJICAgIAorCSAgICB9IGVs
c2UgaWYoY21kLnN0YXJ0c1dpdGgoIkJMQU5LIikpIHsKKyAgICAgICAgICAgICAgICAvLyBkbyBu
b3RoaW5nCisJCWtkRGVidWcoKSA8PCAiQ29tbWFuZDogQkxBTksiIDw8IGVuZGw7CisJCWkgKz0g
c3RybGVuKCJCTEFOSyIpOworICAgICAgICAgICAgCisJICAgIH0gZWxzZSBpZihjbWQuc3RhcnRz
V2l0aCgiTk9QIikpIHsKKyAgICAgICAgICAgICAgICAvLyBkbyBub3RoaW5nCisJCWtkRGVidWco
KSA8PCAiQ29tbWFuZDogTk9QIiA8PCBlbmRsOworCQlpICs9IHN0cmxlbigiTk9QIik7CisJICAg
IAorCSAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIkNMRUFSIikpIHsKKyAgICAgICAgICAg
ICAgICAvLyBjbGVhciBib2R5IGJ1ZmZlcjsgbm90IHRvbyB1c2VmdWwgeWV0CisJCWtkRGVidWco
KSA8PCAiQ29tbWFuZDogQ0xFQVIiIDw8IGVuZGw7CisJCWkgKz0gc3RybGVuKCJDTEVBUiIpOwor
CQlib2R5ID0gIiI7CisJCW1zZy0+c2V0Q3Vyc29yUG9zKDApOworICAgICAgICAgICAgCisJICAg
IH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiREVCVUdPRkYiKSkgeworICAgICAgICAgICAgICAg
IC8vIHR1cm4gb2ZmIGRlYnVnCisJCWtkRGVidWcoKSA8PCAiQ29tbWFuZDogREVCVUdPRkYiIDw8
IGVuZGw7CisJCWkgKz0gc3RybGVuKCJERUJVR09GRiIpOworCQlkZWJ1ZyA9IGZhbHNlOworCSAg
ICAKKwkgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJERUJVRyIpKSB7CisgICAgICAgICAg
ICAgICAgLy8gdHVybiBvbiBkZWJ1ZworCQlrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IERFQlVHIiA8
PCBlbmRsOworCQlpICs9IHN0cmxlbigiREVCVUciKTsKKwkJZGVidWcgPSB0cnVlOworICAgICAg
ICAgICAgCisJICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiQ1VSU09SIikpIHsKKyAgICAg
ICAgICAgICAgICAvLyB0dXJuIG9uIGRlYnVnCisJCWtkRGVidWcoKSA8PCAiQ29tbWFuZDogQ1VS
U09SIiA8PCBlbmRsOworCQlpICs9IHN0cmxlbigiQ1VSU09SIik7CisJCW1zZy0+c2V0Q3Vyc29y
UG9zKGJvZHkubGVuZ3RoKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIC8vIHdyb25nIGNvbW1hbmQsIGRvIG5vdGhpbmcKKyAgICAgICAgICAg
ICAgICBib2R5LmFwcGVuZChjKTsKKyAgICAgICAgICAgIH07CisgICAgICAgIAorICAgICAgICB9
IGVsc2UgaWYoZG5sICYmIChjID09ICdcbicgfHwgYyA9PSAnXHInKSkgeworICAgICAgICAgICAg
Ly8gc2tpcAorICAgICAgICAgICAgaWYoKGMgPT0gJ1xuJyAmJiB0bXBsW2kgKyAxXSA9PSAnXHIn
KSB8fCAoYyA9PSAnXHInICYmIHRtcGxbaSArIDFdID09ICdcbicpKSB7CisgICAgICAgICAgICAg
ICAgLy8gc2tpcCBvbmUgbW9yZQorICAgICAgICAgICAgICAgIGkgKz0gMTsKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICBkbmwgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGJvZHkuYXBwZW5kKGMpOworICAgICAgICB9OworICAgIH07CisgICAgCisgICAgLy8ga2RE
ZWJ1ZygpIDw8ICJNZXNzYWdlIGJvZHk6ICIgPDwgYm9keSA8PCBlbmRsOworICAgIAorICAgIG1z
Zy0+c2V0Qm9keShib2R5LnV0ZjgoKSk7Cit9OworCitRU3RyaW5nIFRlbXBsYXRlUGFyc2VyOjpm
aW5kVGVtcGxhdGUoKSB7CisgICAgCisgICAgLy8ga2REZWJ1ZygpIDw8ICJUcnlpbmcgdG8gZmlu
ZCB0ZW1wbGF0ZSBmb3IgbW9kZSAiIDw8IG1vZGUgPDwgZW5kbDsKKyAgICAKKyAgICBRU3RyaW5n
IHRtcGw7CisgICAgCisgICAgaWYoIWZvbGRlcikgeworCWZvbGRlciA9IG1zZy0+cGFyZW50KCk7
CisJaWYoIWZvbGRlcikgeworCSAgICBpZihvcmlnX21zZykgeworCQlmb2xkZXIgPSBvcmlnX21z
Zy0+cGFyZW50KCk7CisJICAgIH07CisJICAgIGlmKCFmb2xkZXIpIHsKKwkJa2REZWJ1ZygpIDw8
ICJPb3BzISBObyBmb2xkZXIgZm9yIG1lc3NhZ2UiIDw8IGVuZGw7CisJCXJldHVybiAiIjsKKwkg
ICAgfTsKKwl9OworICAgIH07CisgICAgCisgICAgUVN0cmluZyBmaWQgPSBmb2xkZXItPmlkU3Ry
aW5nKCk7CisgICAgVGVtcGxhdGVzIGZjb25mKGZpZCk7CisgICAgaWYoZmNvbmYudXNlQ3VzdG9t
VGVtcGxhdGVzKCkpIHsKKyAgICAgICAgc3dpdGNoKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2Ug
TmV3TWVzc2FnZToKKyAgICAgICAgICAgICAgICB0bXBsID0gZmNvbmYudGVtcGxhdGVOZXdNZXNz
YWdlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFJlcGx5Ogor
ICAgICAgICAgICAgICAgIHRtcGwgPSBmY29uZi50ZW1wbGF0ZVJlcGx5KCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFJlcGx5QWxsOgorICAgICAgICAgICAgICAg
IHRtcGwgPSBmY29uZi50ZW1wbGF0ZVJlcGx5QWxsKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEZvcndhcmQ6CisgICAgICAgICAgICAgICAgdG1wbCA9IGZjb25m
LnRlbXBsYXRlRm9yd2FyZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIlVua25vd24gbWVzc2FnZSBt
b2RlOiAiIDw8IG1vZGUgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICByZXR1cm4gIiI7CisgICAg
ICAgIH07CisgICAgICAgIHF1b3RlU3RyaW5nID0gZmNvbmYucXVvdGVTdHJpbmcoKTsKKyAgICAg
ICAgaWYoIXRtcGwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZXR1cm4gdG1wbDsKKyAgICAg
ICAgfTsKKyAgICB9OworICAgIHN3aXRjaChtb2RlKSB7CisJY2FzZSBOZXdNZXNzYWdlOgorCSAg
ICB0bXBsID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+dGVtcGxhdGVOZXdNZXNzYWdlKCk7CisJ
ICAgIGJyZWFrOworCWNhc2UgUmVwbHk6CisJICAgIHRtcGwgPSBHbG9iYWxTZXR0aW5nczo6c2Vs
ZigpLT50ZW1wbGF0ZVJlcGx5KCk7CisJICAgIGJyZWFrOworCWNhc2UgUmVwbHlBbGw6CisJICAg
IHRtcGwgPSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT50ZW1wbGF0ZVJlcGx5QWxsKCk7CisJICAg
IGJyZWFrOworCWNhc2UgRm9yd2FyZDoKKwkgICAgdG1wbCA9IEdsb2JhbFNldHRpbmdzOjpzZWxm
KCktPnRlbXBsYXRlRm9yd2FyZCgpOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBrZERl
YnVnKCkgPDwgIlVua25vd24gbWVzc2FnZSBtb2RlOiAiIDw8IG1vZGUgPDwgZW5kbDsKKwkgICAg
cmV0dXJuICIiOworICAgIH07CisgICAgcXVvdGVTdHJpbmcgPSBHbG9iYWxTZXR0aW5nczo6c2Vs
ZigpLT5xdW90ZVN0cmluZygpOworICAgIHJldHVybiB0bXBsOworfTsKKworUVN0cmluZyBUZW1w
bGF0ZVBhcnNlcjo6cGlwZShRU3RyaW5nIGNtZCwgUVN0cmluZyBidWYpIHsKKyAgICBwaXBlX291
dCA9ICIiOworICAgIHBpcGVfZXJyID0gIiI7CisgICAgcGlwZV9yYyA9IDA7CisgICAgCisgICAg
S1Byb2Nlc3MgcHJvYzsKKyAgICBRQ1N0cmluZyBkYXRhID0gYnVmLmxvY2FsOEJpdCgpOworICAg
IAorICAgIC8vIGtkRGVidWcoKSA8PCAiQ29tbWFuZCBkYXRhOiAiIDw8IGRhdGEgPDwgZW5kbDsK
KyAgICAKKyAgICBwcm9jIDw8IEtTaGVsbDo6c3BsaXRBcmdzKGNtZCwgS1NoZWxsOjpUaWxkZUV4
cGFuZCk7CisgICAgcHJvYy5zZXRVc2VTaGVsbCh0cnVlKTsKKyAgICBjb25uZWN0KCZwcm9jLCBT
SUdOQUwocmVjZWl2ZWRTdGRvdXQoS1Byb2Nlc3MgKiwgY2hhciAqLCBpbnQgKSksIAorCXRoaXMs
IFNMT1Qob25SZWNlaXZlZFN0ZG91dChLUHJvY2VzcyAqLCBjaGFyICosIGludCApKSk7CisgICAg
Y29ubmVjdCgmcHJvYywgU0lHTkFMKHJlY2VpdmVkU3RkZXJyKEtQcm9jZXNzICosIGNoYXIgKiwg
aW50ICkpLCAKKwl0aGlzLCBTTE9UKG9uUmVjZWl2ZWRTdGRlcnIoS1Byb2Nlc3MgKiwgY2hhciAq
LCBpbnQgKSkpOworICAgIGNvbm5lY3QoJnByb2MsIFNJR05BTCh3cm90ZVN0ZGluKEtQcm9jZXNz
ICopKSwgCisJdGhpcywgU0xPVChvbldyb3RlU3RkaW4oS1Byb2Nlc3MgKikpKTsKKyAgICAKKyAg
ICBpZihwcm9jLnN0YXJ0KEtQcm9jZXNzOjpOb3RpZnlPbkV4aXQsIEtQcm9jZXNzOjpBbGwpKSB7
CisgICAgICAgIAorICAgICAgICBib29sIHBpcGVfZmlsbGVkID0gcHJvYy53cml0ZVN0ZGluKGRh
dGEsIGRhdGEubGVuZ3RoKCkpOworICAgICAgICBpZihwaXBlX2ZpbGxlZCkgeworICAgICAgICAg
ICAgcHJvYy5jbG9zZVN0ZGluKCk7CisgICAgICAgIAorCSAgICBib29sIGV4aXRlZCA9IHByb2Mu
d2FpdChQaXBlVGltZW91dCk7CisJICAgIGlmKGV4aXRlZCkgeworCSAgICAKKwkJaWYocHJvYy5u
b3JtYWxFeGl0KCkpIHsKKwkJICAgIAorCQkgICAgcGlwZV9yYyA9IHByb2MuZXhpdFN0YXR1cygp
OworCQkgICAgaWYocGlwZV9yYyAhPSAwICYmIGRlYnVnKSB7CisJCQlpZihwaXBlX2Vyci5pc0Vt
cHR5KCkpIHsKKwkJCSAgICBLTWVzc2FnZUJveDo6ZXJyb3IoTlVMTCwgCisJCQkJaTE4bigiUGlw
ZSBjb21tYW5kIGV4aXQgd2l0aCBzdGF0dXMgJTE6ICUyIikuYXJnKHBpcGVfcmMpLmFyZyhjbWQp
KTsKKwkJCX0gZWxzZSB7CisJCQkgICAgS01lc3NhZ2VCb3g6OmRldGFpbGVkRXJyb3IoTlVMTCwg
CisJCQkJaTE4bigiUGlwZSBjb21tYW5kIGV4aXQgd2l0aCBzdGF0dXMgJTE6ICUyIikuYXJnKHBp
cGVfcmMpLmFyZyhjbWQpLCBwaXBlX2Vycik7CisJCQl9OworCQkgICAgfTsKKwkJICAgIAorCQl9
IGVsc2UgeworCQkgICAgCisJCSAgICBwaXBlX3JjID0gLShwcm9jLmV4aXRTaWduYWwoKSk7CisJ
CSAgICBpZihwaXBlX3JjICE9IDAgJiYgZGVidWcpIHsKKwkJCWlmKHBpcGVfZXJyLmlzRW1wdHko
KSkgeworCQkJICAgIEtNZXNzYWdlQm94OjplcnJvcihOVUxMLCAKKwkJCQlpMThuKCJQaXBlIGNv
bW1hbmQga2lsbGVkIGJ5IHNpZ25hbCAlMTogJTIiKS5hcmcoLShwaXBlX3JjKSkuYXJnKGNtZCkp
OworCQkJfSBlbHNlIHsKKwkJCSAgICBLTWVzc2FnZUJveDo6ZGV0YWlsZWRFcnJvcihOVUxMLCAK
KwkJCQlpMThuKCJQaXBlIGNvbW1hbmQga2lsbGVkIGJ5IHNpZ25hbCAlMTogJTIiKS5hcmcoLShw
aXBlX3JjKSkuYXJnKGNtZCksIHBpcGVfZXJyKTsKKwkJCX07CisJCSAgICB9OworCQkgICAgCisJ
CX07CisJICAgIAorCSAgICB9IGVsc2UgeworCQkvLyBwcm9jZXNzIGRvZXMgbm90IGV4aXRlZCBh
ZnRlciBUZW1wbGF0ZVBhcnNlcjo6UGlwZVRpbWVvdXQgc2Vjb25kcywga2lsbCBpdAorCQlwcm9j
LmtpbGwoKTsKKwkJcHJvYy5kZXRhY2goKTsKKwkJaWYoZGVidWcpIHsKKwkJICAgIEtNZXNzYWdl
Qm94OjplcnJvcihOVUxMLCAKKwkJCWkxOG4oIlBpcGUgY29tbWFuZCBkb2VzIG5vdCBmaW5pc2hl
ZCB3aXRoaW4gJTEgc2Vjb25kczogJTIiKS5hcmcoUGlwZVRpbWVvdXQpLmFyZyhjbWQpKTsKKwkJ
fTsKKwkgICAgfTsKKwkgICAgCisJfSBlbHNlIHsKKwkgICAgLy8gY2FuYHQgd3JpdGUgdG8gc3Rk
aW4gb2YgcHJvY2VzcworCSAgICBwcm9jLmtpbGwoKTsKKwkgICAgcHJvYy5kZXRhY2goKTsKKwkg
ICAgaWYoZGVidWcpIHsKKwkJaWYocGlwZV9lcnIuaXNFbXB0eSgpKSB7CisJCSAgICBLTWVzc2Fn
ZUJveDo6ZXJyb3IoTlVMTCwgCisJCQlpMThuKCJDYW5gdCB3cml0ZSB0byBwcm9jZXNzIHN0ZGlu
OiAlMSIpLmFyZyhjbWQpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCQkgICAgS01lc3Nh
Z2VCb3g6OmRldGFpbGVkRXJyb3IoTlVMTCwgCisJCQlpMThuKCJDYW5gdCB3cml0ZSB0byBwcm9j
ZXNzIHN0ZGluOiAlMSIpLmFyZyhjbWQpLCBwaXBlX2Vycik7CisgICAgICAgICAgICAgICAgfTsJ
CisJICAgIH07CisJfTsKKyAgICAgICAgICAgICAgICAKKyAgICB9IGVsc2UgaWYoZGVidWcpIHsK
KyAgICAgICAgS01lc3NhZ2VCb3g6OmVycm9yKE5VTEwsIGkxOG4oIkNhbmB0IHN0YXJ0IHBpcGUg
Y29tbWFuZCBmcm9tIHRlbXBsYXRlOiAlMSIpLmFyZyhjbWQpKTsKKyAgICB9OworICAgIAorICAg
IHJldHVybiBwaXBlX291dDsKK307CisKK3ZvaWQgVGVtcGxhdGVQYXJzZXI6Om9uUHJvY2Vzc0V4
aXRlZChLUHJvY2VzcyAqcHJvYykgeworICAgIC8vIGRvIG5vdGhpbmcgZm9yIG5vdworfTsKKwor
dm9pZCBUZW1wbGF0ZVBhcnNlcjo6b25SZWNlaXZlZFN0ZG91dChLUHJvY2VzcyAqcHJvYywgY2hh
ciAqYnVmZmVyLCBpbnQgYnVmbGVuKSB7CisgICAgcGlwZV9vdXQgKz0gUVN0cmluZzo6ZnJvbUxv
Y2FsOEJpdChidWZmZXIsIGJ1Zmxlbik7Cit9OworCit2b2lkIFRlbXBsYXRlUGFyc2VyOjpvblJl
Y2VpdmVkU3RkZXJyKEtQcm9jZXNzICpwcm9jLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pIHsK
KyAgICBwaXBlX2VyciArPSBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGJ1ZmZlciwgYnVmbGVuKTsK
K307CisKK3ZvaWQgVGVtcGxhdGVQYXJzZXI6Om9uV3JvdGVTdGRpbihLUHJvY2VzcyAqcHJvYykg
eworICAgIHByb2MtPmNsb3NlU3RkaW4oKTsKK307CisKKyNpbmNsdWRlICJ0ZW1wbGF0ZXBhcnNl
ci5tb2MuY3BwIgpJbmRleDoga21haWwva21lZGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC9r
bWVkaXQuY3BwCShyZXZpc2lvbiA1OTY2NzkpCisrKyBrbWFpbC9rbWVkaXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MzIsNCArNzMyLDE0IEBACiAgIH0KIH0KIAordm9pZCBLTUVkaXQ6OnNldEN1
cnNvclBvc2l0aW9uRnJvbVN0YXJ0KHVuc2lnbmVkIGludCBwb3MpIHsKKyAgdW5zaWduZWQgaW50
IGwgPSAwOworICB1bnNpZ25lZCBpbnQgYyA9IDA7CisgIHBvc1RvUm93Q29sKCBwb3MsIGwsIGMg
KTsKKyAgLy8ga2REZWJ1ZygpIDw8ICJOdW0gbGluZXM6ICIgPDwgbnVtTGluZXMoKSA8PCBlbmRs
OworICAvLyBrZERlYnVnKCkgPDwgIlBvc2l0aW9uICIgPDwgcG9zIDw8ICIgY29udmVydGVkIHRv
ICIgPDwgbCA8PCAiOiIgPDwgYyA8PCBlbmRsOworICBzZXRDdXJzb3JQb3NpdGlvbiggbCwgYyAp
OworICBlbnN1cmVDdXJzb3JWaXNpYmxlKCk7Cit9OworCiAjaW5jbHVkZSAia21lZGl0Lm1vYyIK
SW5kZXg6IGttYWlsL2ttbWVzc2FnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGttYWlsL2ttbWVzc2FnZS5o
CShyZXZpc2lvbiA1OTY2NzkpCisrKyBrbWFpbC9rbW1lc3NhZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtODQyLDYgKzg0MiwxMiBAQAogICAvKiogUmV0dXJuIHRoZSB0ZXh0dWFsIGNvbnRlbnQgb2Yg
dGhlIG1lc3NhZ2UgYXMgcGxhaW4gdGV4dCwKICAgICAgIGNvbnZlcnRpbmcgSFRNTCB0byBwbGFp
biB0ZXh0IGlmIG5lY2Vzc2FyeS4gKi8KICAgUVN0cmluZyBhc1BsYWluVGV4dCggYm9vbCBzdHJp
cFNpZ25hdHVyZSwgYm9vbCBhbGxvd0RlY3J5cHRpb24gKSBjb25zdDsKKyAgCisgIC8qKiBHZXQg
c3RvcmVkIGN1cnNvciBwb3NpdGlvbiAqLworICBpbnQgZ2V0Q3Vyc29yUG9zKCkgeyByZXR1cm4g
bUN1cnNvclBvczsgfTsKKyAgLyoqIFNldCBjdXJzb3IgcG9zaXRpb24gYXMgb2Zmc2V0IGZyb20g
bWVzc2FnZSBzdGFydCAqLworICB2b2lkIHNldEN1cnNvclBvcyhpbnQgcG9zKSB7IG1DdXJzb3JQ
b3MgPSBwb3M7IH07CisgIAogcHJpdmF0ZToKIAogICAvKiogSW5pdGlhbGl6YXRpb24gc2hhcmVk
IGJ5IHRoZSBjdG9ycy4gKi8KQEAgLTg2OCw2ICs4NzQsNyBAQAogICBLTU1zZ01ETlNlbnRTdGF0
ZSBtTUROU2VudFN0YXRlOwogICBLTU1lc3NhZ2UqIG1VbmVuY3J5cHRlZE1zZzsKICAgRHdCb2R5
UGFydCogbUxhc3RVcGRhdGVkOworICBpbnQgbUN1cnNvclBvczsKIH07CiAKIApJbmRleDoga21h
aWwvTWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwvTWFrZWZpbGUuYW0JKHJldmlzaW9u
IDU5NjY3OSkKKysrIGttYWlsL01ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyAr
MTI0LDggQEAKICAgICAgICAgICAgICAgICBtYWlsaW5nbGlzdHByb3BlcnRpZXNkaWFsb2cuY3Bw
IG5ld2ZvbGRlcmRpYWxvZy5jcHAgXAogICAgICAgICAgICAgICAgIGFjY291bnR3aXphcmQuY3Bw
IHRleHRzb3VyY2UuY3BwIFwKICAgICAgICAgICAgICAgICBtYW5hZ2VzaWV2ZXNjcmlwdHNkaWFs
b2cuY3BwIGNoaWFzbXVza2V5c2VsZWN0b3IuY3BwIFwKLSAgICAgICAgICAgICAgICB1dGlsLmNw
cAorICAgICAgICAgICAgICAgIHV0aWwuY3BwIHRlbXBsYXRlc2NvbmZpZ3VyYXRpb25fa2ZnLmtj
ZmdjIHRlbXBsYXRlc2NvbmZpZ3VyYXRpb24udWkgXAorICAgICAgICAgICAgICAgIHRlbXBsYXRl
cGFyc2VyLmNwcCB0ZW1wbGF0ZXNjb25maWd1cmF0aW9uaW1wbC5jcHAKIAoga21haWxfU09VUkNF
UyA9IG1haW4uY3BwCiAKQEAgLTE5Niw3ICsxOTcsNyBAQAogCSQoWEdFVFRFWFQpIC1rdHJhbnNs
YXRlICouY3BwICouaCAtbyAkKHBvZGlyKS9rbWFpbC5wb3QKIAlybSAtZiB0aXBzLmNwcAogCi1r
ZGVfa2NmZ19EQVRBID0ga21haWwua2NmZyByZXBseXBocmFzZXMua2NmZyBjdXN0b21taW1laGVh
ZGVyLmtjZmcKK2tkZV9rY2ZnX0RBVEEgPSBrbWFpbC5rY2ZnIHJlcGx5cGhyYXNlcy5rY2ZnIGN1
c3RvbW1pbWVoZWFkZXIua2NmZyB0ZW1wbGF0ZXNjb25maWd1cmF0aW9uX2tmZy5rY2ZnCiAKIERP
WFlHRU5fUkVGRVJFTkNFUyA9IGtkZXVpCiBpbmNsdWRlICQodG9wX3NyY2RpcikvYWRtaW4vRG94
eWZpbGUuYW0KSW5kZXg6IGttYWlsL2ttbWVzc2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwv
a21tZXNzYWdlLmNwcAkocmV2aXNpb24gNTk2Njc5KQorKysga21haWwva21tZXNzYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogdXNpbmcgS01haWw6OkhlYWRlclN0cmF0
ZWd5OwogI2luY2x1ZGUgImttYWRkcmJvb2suaCIKICNpbmNsdWRlICJrY3Vyc29yc2F2ZXIuaCIK
KyNpbmNsdWRlICJ0ZW1wbGF0ZXBhcnNlci5oIgogCiAjaW5jbHVkZSA8bGlia3BpbWlkZW50aXRp
ZXMvaWRlbnRpdHkuaD4KICNpbmNsdWRlIDxsaWJrcGltaWRlbnRpdGllcy9pZGVudGl0eW1hbmFn
ZXIuaD4KQEAgLTE1NSw2ICsxNTYsNyBAQAogICBtRGF0ZSAgICA9IDA7CiAgIG1VbmVuY3J5cHRl
ZE1zZyA9IDA7CiAgIG1MYXN0VXBkYXRlZCA9IDA7CisgIG1DdXJzb3JQb3MgPSAwOwogfQogCiB2
b2lkIEtNTWVzc2FnZTo6YXNzaWduKCBjb25zdCBLTU1lc3NhZ2UmIG90aGVyICkKQEAgLTg0OCw2
ICs4NTAsNyBAQAogICBRU3RyaW5nIHN0ciwgcmVwbHlTdHIsIG1haWxpbmdMaXN0U3RyLCByZXBs
eVRvU3RyLCB0b1N0cjsKICAgUVN0cmluZ0xpc3QgbWFpbGluZ0xpc3RBZGRyZXNzZXM7CiAgIFFD
U3RyaW5nIHJlZlN0ciwgaGVhZGVyTmFtZTsKKyAgYm9vbCByZXBseUFsbCA9IHRydWU7CiAKICAg
bXNnLT5pbml0RnJvbU1lc3NhZ2UodGhpcyk7CiAKQEAgLTg4Nyw2ICs4OTAsNyBAQAogICAgICAg
Ly8gZG9lc24ndCBzZWVtIHRvIGJlIGEgbWFpbGluZyBsaXN0LCByZXBseSB0byBGcm9tOiBhZGRy
ZXNzCiAgICAgICB0b1N0ciA9IGZyb20oKTsKICAgICAgIHJlcGx5U3RyID0gc1JlcGx5U3RyOyAv
LyByZXBseSB0byBhdXRob3IsIHNvIHVzZSAiT24gLi4uIHlvdSB3cm90ZToiCisgICAgICByZXBs
eUFsbCA9IGZhbHNlOwogICAgIH0KICAgICAvLyBzdHJpcCBhbGwgbXkgYWRkcmVzc2VzIGZyb20g
dGhlIGxpc3Qgb2YgcmVjaXBpZW50cwogICAgIFFTdHJpbmdMaXN0IHJlY2lwaWVudHMgPSBLUElN
OjpzcGxpdEVtYWlsQWRkckxpc3QoIHRvU3RyICk7CkBAIC0xMDE2LDYgKzEwMjAsNyBAQAogICAg
ICAgdG9TdHIgPSBmcm9tKCk7CiAgICAgfQogICAgIHJlcGx5U3RyID0gc1JlcGx5U3RyOyAvLyBy
ZXBseSB0byBhdXRob3IsIHNvIHVzZSAiT24gLi4uIHlvdSB3cm90ZToiCisgICAgcmVwbHlBbGwg
PSBmYWxzZTsKICAgICBicmVhazsKICAgfQogICBjYXNlIEtNYWlsOjpSZXBseU5vbmUgOiB7CkBA
IC0xMDMxLDE4ICsxMDM2LDIyIEBACiAgIC8vSW4tUmVwbHktVG8gPSBvcmlnaW5hbCBtc2ctaWQK
ICAgbXNnLT5zZXRSZXBseVRvSWQobXNnSWQoKSk7CiAKLSAgaWYgKCFub1F1b3RlKSB7Ci0gICAg
aWYoIHNlbGVjdGlvbklzQm9keSApewotICAgICAgUUNTdHJpbmcgY1N0ciA9IHNlbGVjdGlvbi5s
YXRpbjEoKTsKLSAgICAgIG1zZy0+c2V0Qm9keSggY1N0ciApOwotICAgIH1lbHNlewotICAgICAg
bXNnLT5zZXRCb2R5KGFzUXVvdGVkU3RyaW5nKHJlcGx5U3RyICsgIlxuIiwgc0luZGVudFByZWZp
eFN0ciwgc2VsZWN0aW9uLAotCQkJCSAgc1NtYXJ0UXVvdGUsIGFsbG93RGVjcnlwdGlvbikudXRm
OCgpKTsKLSAgICB9Ci0gIH0KKy8vICAgaWYgKCFub1F1b3RlKSB7CisvLyAgICAgaWYoIHNlbGVj
dGlvbklzQm9keSApeworLy8gICAgICAgUUNTdHJpbmcgY1N0ciA9IHNlbGVjdGlvbi5sYXRpbjEo
KTsKKy8vICAgICAgIG1zZy0+c2V0Qm9keSggY1N0ciApOworLy8gICAgIH1lbHNleworLy8gICAg
ICAgbXNnLT5zZXRCb2R5KGFzUXVvdGVkU3RyaW5nKHJlcGx5U3RyICsgIlxuIiwgc0luZGVudFBy
ZWZpeFN0ciwgc2VsZWN0aW9uLAorLy8gCQkJCSAgc1NtYXJ0UXVvdGUsIGFsbG93RGVjcnlwdGlv
bikudXRmOCgpKTsKKy8vICAgICB9CisvLyAgIH0KIAogICBtc2ctPnNldFN1YmplY3QoIHJlcGx5
U3ViamVjdCgpICk7CiAKKyAgVGVtcGxhdGVQYXJzZXIgcGFyc2VyKCBtc2csIChyZXBseUFsbCA/
IFRlbXBsYXRlUGFyc2VyOjpSZXBseUFsbCA6IFRlbXBsYXRlUGFyc2VyOjpSZXBseSksIAorICAg
IHNlbGVjdGlvbiwgc1NtYXJ0UXVvdGUsIG5vUXVvdGUsIGFsbG93RGVjcnlwdGlvbiwgc2VsZWN0
aW9uSXNCb2R5ICk7CisgIHBhcnNlci5wcm9jZXNzKCB0aGlzICk7CisKICAgLy8gc2V0U3RhdHVz
KEtNTXNnU3RhdHVzUmVwbGllZCk7CiAgIG1zZy0+bGluayh0aGlzLCBLTU1zZ1N0YXR1c1JlcGxp
ZWQpOwogCkBAIC0xMjM0LDEyICsxMjQzLDE4IEBACiAgICAgbXNnLT5tTmVlZHNBc3NlbWJseSA9
IHRydWU7CiAgICAgbXNnLT5jbGVhbnVwSGVhZGVyKCk7CiAgIH0KLSAgUVN0cmluZyBzdCA9IFFT
dHJpbmc6OmZyb21VdGY4KGNyZWF0ZUZvcndhcmRCb2R5KCkpOwotICBRQ1N0cmluZyBlbmNvZGlu
ZyA9IGF1dG9EZXRlY3RDaGFyc2V0KGNoYXJzZXQoKSwgc1ByZWZDaGFyc2V0cywgc3QpOworICAv
LyBRU3RyaW5nIHN0ID0gUVN0cmluZzo6ZnJvbVV0ZjgoY3JlYXRlRm9yd2FyZEJvZHkoKSk7CisK
KyAgbXNnLT5zZXRTdWJqZWN0KCBmb3J3YXJkU3ViamVjdCgpICk7CisgIAorICBUZW1wbGF0ZVBh
cnNlciBwYXJzZXIoIG1zZywgVGVtcGxhdGVQYXJzZXI6OkZvcndhcmQsIAorICAgIHRoaXMtPmJv
ZHkoKSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICBwYXJzZXIucHJvY2VzcyggdGhp
cyApOworICAKKyAgUUNTdHJpbmcgZW5jb2RpbmcgPSBhdXRvRGV0ZWN0Q2hhcnNldChjaGFyc2V0
KCksIHNQcmVmQ2hhcnNldHMsIG1zZy0+Ym9keSgpKTsKICAgaWYgKGVuY29kaW5nLmlzRW1wdHko
KSkgZW5jb2RpbmcgPSAidXRmLTgiOwogICBtc2ctPnNldENoYXJzZXQoZW5jb2RpbmcpOwotCi0g
IG1zZy0+c2V0U3ViamVjdCggZm9yd2FyZFN1YmplY3QoKSApOworICAKICAgbXNnLT5saW5rKHRo
aXMsIEtNTXNnU3RhdHVzRm9yd2FyZGVkKTsKICAgcmV0dXJuIG1zZzsKIH0KSW5kZXg6IGttYWls
L2NvbmZpZ3VyZWRpYWxvZ19wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwvY29uZmlndXJlZGlhbG9n
X3AuaAkocmV2aXNpb24gNTk2Njc5KQorKysga21haWwvY29uZmlndXJlZGlhbG9nX3AuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogY2xhc3MgQ29tcG9zZXJDcnlwdG9Db25maWd1
cmF0aW9uOwogY2xhc3MgV2FybmluZ0NvbmZpZ3VyYXRpb247CiBjbGFzcyBTTWltZUNvbmZpZ3Vy
YXRpb247CitjbGFzcyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOwogCiBuYW1lc3BhY2UgS3BncCB7
CiAgIGNsYXNzIENvbmZpZzsKQEAgLTYzMiw2ICs2MzMsMjMgQEAKICAgTGFuZ3VhZ2VJdGVtTGlz
dCBtTGFuZ3VhZ2VMaXN0OwogfTsKIAorY2xhc3MgQ29tcG9zZXJQYWdlVGVtcGxhdGVzVGFiIDog
cHVibGljIENvbmZpZ01vZHVsZVRhYiB7CisgIFFfT0JKRUNUCitwdWJsaWM6CisgIENvbXBvc2Vy
UGFnZVRlbXBsYXRlc1RhYiggUVdpZGdldCAqIHBhcmVudD0wLCBjb25zdCBjaGFyICogbmFtZT0w
ICk7CisgIFFTdHJpbmcgaGVscEFuY2hvcigpIGNvbnN0OworCisgIHZvaWQgc2F2ZSgpOworCitw
cml2YXRlIHNsb3RzOgorCitwcml2YXRlOgorICB2aXJ0dWFsIHZvaWQgZG9Mb2FkRnJvbUdsb2Jh
bFNldHRpbmdzKCk7CisKK3ByaXZhdGU6CisgICAgVGVtcGxhdGVzQ29uZmlndXJhdGlvbiogbVdp
ZGdldDsKK307CisKIGNsYXNzIENvbXBvc2VyUGFnZVN1YmplY3RUYWIgOiBwdWJsaWMgQ29uZmln
TW9kdWxlVGFiIHsKICAgUV9PQkpFQ1QKIHB1YmxpYzoKQEAgLTczNCw2ICs3NTIsNyBAQAogICAv
LyBocm1wZi4gbW9jIGRvZXNuJ3QgbGlrZSBuZXN0ZWQgY2xhc3NlcyB3aXRoIHNsb3RzL3NpZ25h
bHMuLi46CiAgIHR5cGVkZWYgQ29tcG9zZXJQYWdlR2VuZXJhbFRhYiBHZW5lcmFsVGFiOwogICB0
eXBlZGVmIENvbXBvc2VyUGFnZVBocmFzZXNUYWIgUGhyYXNlc1RhYjsKKyAgdHlwZWRlZiBDb21w
b3NlclBhZ2VUZW1wbGF0ZXNUYWIgVGVtcGxhdGVzVGFiOwogICB0eXBlZGVmIENvbXBvc2VyUGFn
ZVN1YmplY3RUYWIgU3ViamVjdFRhYjsKICAgdHlwZWRlZiBDb21wb3NlclBhZ2VDaGFyc2V0VGFi
IENoYXJzZXRUYWI7CiAgIHR5cGVkZWYgQ29tcG9zZXJQYWdlSGVhZGVyc1RhYiBIZWFkZXJzVGFi
OwpAQCAtNzQyLDYgKzc2MSw3IEBACiBwcml2YXRlOgogICBHZW5lcmFsVGFiICAqbUdlbmVyYWxU
YWI7CiAgIFBocmFzZXNUYWIgICptUGhyYXNlc1RhYjsKKyAgVGVtcGxhdGVzVGFiICAqbVRlbXBs
YXRlc1RhYjsKICAgU3ViamVjdFRhYiAgKm1TdWJqZWN0VGFiOwogICBDaGFyc2V0VGFiICAqbUNo
YXJzZXRUYWI7CiAgIEhlYWRlcnNUYWIgICptSGVhZGVyc1RhYjsKSW5kZXg6IGttYWlsL3RlbXBs
YXRlcGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwvdGVtcGxhdGVwYXJzZXIuaAkocmV2aXNp
b24gMCkKKysrIGttYWlsL3RlbXBsYXRlcGFyc2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzggQEAKKy8qICAgLSotIG1vZGU6IEMrKzsgYy1maWxlLXN0eWxlOiAiZ251IiAtKi0KKyAqICAg
a21haWw6IEtERSBtYWlsIGNsaWVudAorICogICBUaGlzIGZpbGU6IENvcHlyaWdodCAoQykgMjAw
NiBEbWl0cnkgTW9yb3pobmlrb3YKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNwcmFnbWEg
b25jZQorCitjbGFzcyBLTU1lc3NhZ2U7CitjbGFzcyBRU3RyaW5nOworY2xhc3MgS01Gb2xkZXI7
CitjbGFzcyBRT2JqZWN0OworY2xhc3MgS1Byb2Nlc3M7CisKKyNpbmNsdWRlIDxxb2JqZWN0Lmg+
CisKK2NsYXNzIFRlbXBsYXRlUGFyc2VyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNU
CisgICAgCisgICAgcHVibGljOgorICAgIAorICAgICAgICBlbnVtIE1vZGUge05ld01lc3NhZ2Us
IFJlcGx5LCBSZXBseUFsbCwgRm9yd2FyZH07CisgICAgICAgIAorICAgICAgICBzdGF0aWMgY29u
c3QgaW50IFBpcGVUaW1lb3V0ID0gMTU7CisgICAgCisgICAgcHVibGljOgorICAgIAorICAgICAg
ICBUZW1wbGF0ZVBhcnNlcihLTU1lc3NhZ2UqIGFtc2csIE1vZGUgYW1vZGUsIFFTdHJpbmcgYXNl
bGVjdGlvbiwgCisgICAgICAgICAgICBib29sIGFTbWFydFF1b3RlLCBib29sIGFub1F1b3RlLCBi
b29sIGFhbGxvd0RlY3J5cHRpb24sIGJvb2wgYXNlbGVjdGlvbklzQm9keSk7CisgICAgICAgIAor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhLTU1lc3NhZ2UqIGFvcmlnX21zZywgS01Gb2xk
ZXIqIGFmb2xkZXIgPSBOVUxMKTsKKyAgICAgICAgdmlydHVhbCBRU3RyaW5nIGZpbmRUZW1wbGF0
ZSgpOworICAgICAgICB2aXJ0dWFsIFFTdHJpbmcgcGlwZShRU3RyaW5nIGNtZCwgUVN0cmluZyBi
dWYpOworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBRU3RyaW5nIGdldEZOYW1lKFFTdHJpbmcg
c3RyKTsKKyAgICAgICAgdmlydHVhbCBRU3RyaW5nIGdldExOYW1lKFFTdHJpbmcgc3RyKTsKKyAg
ICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgCisgICAgICAgIE1vZGUgbW9kZTsKKyAgICAgICAgS01G
b2xkZXIqIGZvbGRlcjsKKyAgICAgICAgS01NZXNzYWdlKiBtc2c7CisgICAgICAgIEtNTWVzc2Fn
ZSogb3JpZ19tc2c7CisgICAgICAgIFFTdHJpbmcgc2VsZWN0aW9uOworICAgICAgICBib29sIHNt
YXJ0UXVvdGU7CisgICAgICAgIGJvb2wgbm9RdW90ZTsKKyAgICAgICAgYm9vbCBhbGxvd0RlY3J5
cHRpb247CisgICAgICAgIGJvb2wgc2VsZWN0aW9uSXNCb2R5OworICAgICAgICBpbnQgcGlwZV9y
YzsKKyAgICAgICAgUVN0cmluZyBwaXBlX291dDsKKyAgICAgICAgUVN0cmluZyBwaXBlX2VycjsK
KyAgICAgICAgYm9vbCBkZWJ1ZzsKKyAgICAgICAgUVN0cmluZyBxdW90ZVN0cmluZzsKKyAgICAg
ICAgCisgICAgICAgIGludCBwYXJzZVF1b3RlcyhRU3RyaW5nIHByZWZpeCwgUVN0cmluZyBzdHIs
IFFTdHJpbmcmIHF1b3RlKTsKKyAgICAKKyAgICBwcm90ZWN0ZWQgc2xvdHM6CisgICAgCisgICAg
ICAgIHZvaWQgb25Qcm9jZXNzRXhpdGVkKEtQcm9jZXNzICpwcm9jKTsKKyAgICAgICAgdm9pZCBv
blJlY2VpdmVkU3Rkb3V0KEtQcm9jZXNzICpwcm9jLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4p
OworICAgICAgICB2b2lkIG9uUmVjZWl2ZWRTdGRlcnIoS1Byb2Nlc3MgKnByb2MsIGNoYXIgKmJ1
ZmZlciwgaW50IGJ1Zmxlbik7CisgICAgICAgIHZvaWQgb25Xcm90ZVN0ZGluKEtQcm9jZXNzICpw
cm9jKTsKKyAgICAgICAgCit9OwpJbmRleDoga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbl9r
Zmcua2NmZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC90ZW1wbGF0ZXNjb25maWd1cmF0aW9uX2tmZy5r
Y2ZnCShyZXZpc2lvbiAwKQorKysga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcua2Nm
ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0iVVRGLTgiPz4KKzxrY2ZnIHhtbG5zPSJodHRwOi8vd3d3LmtkZS5vcmcvc3RhbmRhcmRz
L2tjZmcvMS4wIgorICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNj
aGVtYS1pbnN0YW5jZSIKKyAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5rZGUu
b3JnL3N0YW5kYXJkcy9rY2ZnLzEuMAorICAgICAgaHR0cDovL3d3dy5rZGUub3JnL3N0YW5kYXJk
cy9rY2ZnLzEuMC9rY2ZnLnhzZCIgPgorICA8a2NmZ2ZpbGUgbmFtZT0ia21haWxyYyI+CisgICAg
PHBhcmFtZXRlciBuYW1lPSJmb2xkZXIiIC8+CisgIDwva2NmZ2ZpbGU+CisKKyAgPGdyb3VwIG5h
bWU9IlRlbXBsYXRlcyAjJChmb2xkZXIpIj4KKyAgICA8ZW50cnkgbmFtZT0iVXNlQ3VzdG9tVGVt
cGxhdGVzIiB0eXBlPSJCb29sIiBrZXk9IlVzZUN1c3RvbVRlbXBsYXRlcyI+CisgICAgICA8bGFi
ZWw+PC9sYWJlbD4KKyAgICAgIDx3aGF0c3RoaXM+PC93aGF0c3RoaXM+CisgICAgICA8ZGVmYXVs
dD5mYWxzZTwvZGVmYXVsdD4KKyAgICA8L2VudHJ5PgorICAgIDxlbnRyeSBuYW1lPSJUZW1wbGF0
ZU5ld01lc3NhZ2UiIHR5cGU9IlN0cmluZyIga2V5PSJUZW1wbGF0ZU5ld01lc3NhZ2UiPgorICAg
ICAgPGxhYmVsPjwvbGFiZWw+CisgICAgICA8d2hhdHN0aGlzPjwvd2hhdHN0aGlzPgorICAgICAg
PGRlZmF1bHQ+PC9kZWZhdWx0PgorICAgIDwvZW50cnk+CisgICAgPGVudHJ5IG5hbWU9IlRlbXBs
YXRlUmVwbHkiIHR5cGU9IlN0cmluZyIga2V5PSJUZW1wbGF0ZVJlcGx5Ij4KKyAgICAgIDxsYWJl
bD48L2xhYmVsPgorICAgICAgPHdoYXRzdGhpcz48L3doYXRzdGhpcz4KKyAgICAgIDxkZWZhdWx0
PjwvZGVmYXVsdD4KKyAgICA8L2VudHJ5PgorICAgIDxlbnRyeSBuYW1lPSJUZW1wbGF0ZVJlcGx5
QWxsIiB0eXBlPSJTdHJpbmciIGtleT0iVGVtcGxhdGVSZXBseUFsbCI+CisgICAgICA8bGFiZWw+
PC9sYWJlbD4KKyAgICAgIDx3aGF0c3RoaXM+PC93aGF0c3RoaXM+CisgICAgICA8ZGVmYXVsdD48
L2RlZmF1bHQ+CisgICAgPC9lbnRyeT4KKyAgICA8ZW50cnkgbmFtZT0iVGVtcGxhdGVGb3J3YXJk
IiB0eXBlPSJTdHJpbmciIGtleT0iVGVtcGxhdGVGb3J3YXJkIj4KKyAgICAgIDxsYWJlbD48L2xh
YmVsPgorICAgICAgPHdoYXRzdGhpcz48L3doYXRzdGhpcz4KKyAgICAgIDxkZWZhdWx0PjwvZGVm
YXVsdD4KKyAgICA8L2VudHJ5PgorICAgIDxlbnRyeSBuYW1lPSJRdW90ZVN0cmluZyIgdHlwZT0i
U3RyaW5nIiBrZXk9IlF1b3RlU3RyaW5nIj4KKyAgICAgIDxsYWJlbD48L2xhYmVsPgorICAgICAg
PHdoYXRzdGhpcz48L3doYXRzdGhpcz4KKyAgICAgIDxkZWZhdWx0PjwvZGVmYXVsdD4KKyAgICA8
L2VudHJ5PgorICA8L2dyb3VwPgorCis8L2tjZmc+CkluZGV4OiBrbWFpbC9rbWNvbW1hbmRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrbWFpbC9rbWNvbW1hbmRzLmNwcAkocmV2aXNpb24gNTk2Njc5KQor
Kysga21haWwva21jb21tYW5kcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksNyBA
QAogI2luY2x1ZGUgInJlZGlyZWN0ZGlhbG9nLmgiCiB1c2luZyBLTWFpbDo6UmVkaXJlY3REaWFs
b2c7CiAjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgInRlbXBsYXRlcGFyc2VyLmgiCiAKICNp
bmNsdWRlICJicm9hZGNhc3RzdGF0dXMuaCIKICNpbmNsdWRlICJnbG9iYWxzZXR0aW5ncy5oIgpA
QCAtMTE4NSw3ICsxMTg2LDcgQEAKICAgICB7CiAgICAgICBLTWFpbDo6Q29tcG9zZXIgKiB3aW4g
PSBLTWFpbDo6bWFrZUNvbXBvc2VyKCBmd2RNc2csIGlkICk7CiAgICAgICB3aW4tPnNldENoYXJz
ZXQoIGZ3ZE1zZy0+Y29kZWMoKS0+bWltZU5hbWUoKSwgdHJ1ZSApOwotICAgICAgd2luLT5zZXRC
b2R5KCBRU3RyaW5nOjpmcm9tVXRmOCggbXNnLT5jcmVhdGVGb3J3YXJkQm9keSgpICkgKTsKKyAg
ICAgIC8vIHdpbi0+c2V0Qm9keSggUVN0cmluZzo6ZnJvbVV0ZjgoIG1zZy0+Y3JlYXRlRm9yd2Fy
ZEJvZHkoKSApICk7CiAgICAgICB3aW4tPnNob3coKTsKICAgICB9CiAgIH0KSW5kZXg6IGttYWls
L2ttYWlsLmtjZmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwva21haWwua2NmZwkocmV2aXNpb24gNTk2
Njc5KQorKysga21haWwva21haWwua2NmZwkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDggQEAK
ICAgICAgIGh0dHA6Ly93d3cua2RlLm9yZy9zdGFuZGFyZHMva2NmZy8xLjAva2NmZy54c2QiID4K
ICAgPGluY2x1ZGU+a21nbG9iYWwuaDwvaW5jbHVkZT4KICAgPGluY2x1ZGU+cXRleHRjb2RlYy5o
PC9pbmNsdWRlPgorICA8aW5jbHVkZT50ZW1wbGF0ZXNjb25maWd1cmF0aW9uLmg8L2luY2x1ZGU+
CisgIDxpbmNsdWRlPnRlbXBsYXRlc2NvbmZpZ3VyYXRpb25pbXBsLmg8L2luY2x1ZGU+CiAgIDxr
Y2ZnZmlsZSBuYW1lPSJrbWFpbHJjIi8+CiAgICAgPGdyb3VwIG5hbWU9IkJlaGF2aW91ciI+CiAg
ICAgICA8ZW50cnkgbmFtZT0iRGVsYXllZE1hcmtBc1JlYWQiICB0eXBlPSJCb29sIj4KQEAgLTQ1
MSw0ICs0NTMsMzIgQEAKICAgICAgIDwvZW50cnk+CiAgICAgPC9ncm91cD4KIAorICA8Z3JvdXAg
bmFtZT0iR2xvYmFsVGVtcGxhdGVzIj4KKyAgICA8ZW50cnkgbmFtZT0iVGVtcGxhdGVOZXdNZXNz
YWdlIiB0eXBlPSJTdHJpbmciIGtleT0iVGVtcGxhdGVOZXdNZXNzYWdlIj4KKyAgICAgIDxsYWJl
bD5NZXNzYWdlIHRlbXBsYXRlIGZvciBuZXcgbWVzc2FnZTwvbGFiZWw+CisgICAgICA8d2hhdHN0
aGlzPjwvd2hhdHN0aGlzPgorICAgICAgPGRlZmF1bHQgY29kZT0idHJ1ZSI+VGVtcGxhdGVzQ29u
ZmlndXJhdGlvbjo6ZGVmYXVsdE5ld01lc3NhZ2UoKTwvZGVmYXVsdD4KKyAgICA8L2VudHJ5Pgor
ICAgIDxlbnRyeSBuYW1lPSJUZW1wbGF0ZVJlcGx5IiB0eXBlPSJTdHJpbmciIGtleT0iVGVtcGxh
dGVSZXBseSI+CisgICAgICA8bGFiZWw+TWVzc2FnZSB0ZW1wbGF0ZSBmb3IgcmVwbHk8L2xhYmVs
PgorICAgICAgPHdoYXRzdGhpcz48L3doYXRzdGhpcz4KKyAgICAgIDxkZWZhdWx0IGNvZGU9InRy
dWUiPlRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OmRlZmF1bHRSZXBseSgpPC9kZWZhdWx0PgorICAg
IDwvZW50cnk+CisgICAgPGVudHJ5IG5hbWU9IlRlbXBsYXRlUmVwbHlBbGwiIHR5cGU9IlN0cmlu
ZyIga2V5PSJUZW1wbGF0ZVJlcGx5QWxsIj4KKyAgICAgIDxsYWJlbD5NZXNzYWdlIHRlbXBsYXRl
IGZvciByZXBseSB0byBhbGw8L2xhYmVsPgorICAgICAgPHdoYXRzdGhpcz48L3doYXRzdGhpcz4K
KyAgICAgIDxkZWZhdWx0IGNvZGU9InRydWUiPlRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OmRlZmF1
bHRSZXBseUFsbCgpPC9kZWZhdWx0PgorICAgIDwvZW50cnk+CisgICAgPGVudHJ5IG5hbWU9IlRl
bXBsYXRlRm9yd2FyZCIgdHlwZT0iU3RyaW5nIiBrZXk9IlRlbXBsYXRlRm9yd2FyZCI+CisgICAg
ICA8bGFiZWw+TWVzc2FnZSB0ZW1wbGF0ZSBmb3IgZm9yd2FyZDwvbGFiZWw+CisgICAgICA8d2hh
dHN0aGlzPjwvd2hhdHN0aGlzPgorICAgICAgPGRlZmF1bHQgY29kZT0idHJ1ZSI+VGVtcGxhdGVz
Q29uZmlndXJhdGlvbjo6ZGVmYXVsdEZvcndhcmQoKTwvZGVmYXVsdD4KKyAgICA8L2VudHJ5Pgor
ICAgIDxlbnRyeSBuYW1lPSJRdW90ZVN0cmluZyIgdHlwZT0iU3RyaW5nIiBrZXk9IlF1b3RlU3Ry
aW5nIj4KKyAgICAgIDxsYWJlbD5RdW90ZSBjaGFyYWN0ZXJzPC9sYWJlbD4KKyAgICAgIDx3aGF0
c3RoaXM+PC93aGF0c3RoaXM+CisgICAgICA8ZGVmYXVsdCBjb2RlPSJ0cnVlIj5UZW1wbGF0ZXND
b25maWd1cmF0aW9uOjpkZWZhdWx0UXVvdGVTdHJpbmcoKTwvZGVmYXVsdD4KKyAgICA8L2VudHJ5
PgorICA8L2dyb3VwPgorCiA8L2tjZmc+CkluZGV4OiBrbWFpbC9rbW1haW53aWRnZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGttYWlsL2ttbWFpbndpZGdldC5jcHAJKHJldmlzaW9uIDU5NjY3OSkKKysr
IGttYWlsL2ttbWFpbndpZGdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAK
IHVzaW5nIEtNYWlsOjpIZWFkZXJMaXN0UXVpY2tTZWFyY2g7CiAjaW5jbHVkZSAia21oZWFkZXJz
LmgiCiAjaW5jbHVkZSAibWFpbGluZ2xpc3Rwcm9wZXJ0aWVzZGlhbG9nLmgiCisjaW5jbHVkZSAi
dGVtcGxhdGVwYXJzZXIuaCIKIAogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICAjaW5jbHVkZSAi
c2lldmVkZWJ1Z2RpYWxvZy5oIgpAQCAtODg1LDkgKzg4NiwxNSBAQAogCiAgIGlmICggbUZvbGRl
ciApIHsKICAgICAgIG1zZy0+aW5pdEhlYWRlciggbUZvbGRlci0+aWRlbnRpdHkoKSApOworICAg
ICAgVGVtcGxhdGVQYXJzZXIgcGFyc2VyKCBtc2csIFRlbXBsYXRlUGFyc2VyOjpOZXdNZXNzYWdl
LCAKKwkiIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UgKTsKKyAgICAgIHBhcnNlci5wcm9j
ZXNzKCBOVUxMLCBtRm9sZGVyICk7CiAgICAgICB3aW4gPSBLTWFpbDo6bWFrZUNvbXBvc2VyKCBt
c2csIG1Gb2xkZXItPmlkZW50aXR5KCkgKTsKICAgfSBlbHNlIHsKICAgICAgIG1zZy0+aW5pdEhl
YWRlcigpOworICAgICAgVGVtcGxhdGVQYXJzZXIgcGFyc2VyKCBtc2csIFRlbXBsYXRlUGFyc2Vy
OjpOZXdNZXNzYWdlLCAKKwkiIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UgKTsKKyAgICAg
IHBhcnNlci5wcm9jZXNzKCBOVUxMLCBOVUxMICk7CiAgICAgICB3aW4gPSBLTWFpbDo6bWFrZUNv
bXBvc2VyKCBtc2cgKTsKICAgfQogCkluZGV4OiBrbWFpbC90ZW1wbGF0ZXNjb25maWd1cmF0aW9u
aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwu
Y3BwCShyZXZpc2lvbiAwKQorKysga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3OSBAQAorLyogICAtKi0gbW9kZTogQysrOyBjLWZp
bGUtc3R5bGU6ICJnbnUiIC0qLQorICogICBrbWFpbDogS0RFIG1haWwgY2xpZW50CisgKiAgIFRo
aXMgZmlsZTogQ29weXJpZ2h0IChDKSAyMDA2IERtaXRyeSBNb3JvemhuaWtvdgorICoKKyAqICAg
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8a2xvY2Fs
ZS5oPgorI2luY2x1ZGUgPGtnbG9iYWwuaD4KKyNpbmNsdWRlIDxxcG9wdXBtZW51Lmg+CisjaW5j
bHVkZSA8cXB1c2hidXR0b24uaD4KKyNpbmNsdWRlIDxxdGV4dGVkaXQuaD4KKyNpbmNsdWRlIDxx
bGluZWVkaXQuaD4KKyNpbmNsdWRlIDxxdG9vbGJveC5oPgorI2luY2x1ZGUgPGtkZWJ1Zy5oPgor
I2luY2x1ZGUgPHFmb250Lmg+CisKKyNpbmNsdWRlICJ0ZW1wbGF0ZXNjb25maWd1cmF0aW9uLmgi
CisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcuaCIKKyNpbmNsdWRlICJnbG9i
YWxzZXR0aW5ncy5oIgorCisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwuaCIK
KworVGVtcGxhdGVzQ29uZmlndXJhdGlvbjo6VGVtcGxhdGVzQ29uZmlndXJhdGlvbihRV2lkZ2V0
ICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpCisgICAgOlRlbXBsYXRlc0NvbmZpZ3VyYXRpb25T
dHViKHBhcmVudCwgbmFtZSkKK3sKKyAgICBRRm9udCBmKCJDb3VyaWVyIE5ldyIpOworICAgIHRl
eHRFZGl0X25ldy0+c2V0Rm9udChmKTsKKyAgICB0ZXh0RWRpdF9yZXBseS0+c2V0Rm9udChmKTsK
KyAgICB0ZXh0RWRpdF9yZXBseV9hbGwtPnNldEZvbnQoZik7CisgICAgdGV4dEVkaXRfZm9yd2Fy
ZC0+c2V0Rm9udChmKTsKKyAgICAKKyAgICBzZXRTaXplUG9saWN5KFFTaXplUG9saWN5OjpFeHBh
bmRpbmcsIFFTaXplUG9saWN5OjpFeHBhbmRpbmcpOworICAgIHNpemVIaW50KCk7CisgICAgCisg
ICAgY29ubmVjdCggdGV4dEVkaXRfbmV3LCBTSUdOQUwoIHRleHRDaGFuZ2VkKCkgKSwKKwkgICAg
dGhpcywgU0xPVCggc2xvdFRleHRDaGFuZ2VkKCB2b2lkICkgKSApOworICAgIGNvbm5lY3QoIHRl
eHRFZGl0X3JlcGx5LCBTSUdOQUwoIHRleHRDaGFuZ2VkKCkgKSwKKwkgICAgdGhpcywgU0xPVCgg
c2xvdFRleHRDaGFuZ2VkKCB2b2lkICkgKSApOworICAgIGNvbm5lY3QoIHRleHRFZGl0X3JlcGx5
X2FsbCwgU0lHTkFMKCB0ZXh0Q2hhbmdlZCgpICksCisJICAgIHRoaXMsIFNMT1QoIHNsb3RUZXh0
Q2hhbmdlZCggdm9pZCApICkgKTsKKyAgICBjb25uZWN0KCB0ZXh0RWRpdF9mb3J3YXJkLCBTSUdO
QUwoIHRleHRDaGFuZ2VkKCkgKSwKKwkgICAgdGhpcywgU0xPVCggc2xvdFRleHRDaGFuZ2VkKCB2
b2lkICkgKSApOworICAgIGNvbm5lY3QoIGxpbmVFZGl0X3F1b3RlLCBTSUdOQUwoIHRleHRDaGFu
Z2VkKCBjb25zdCBRU3RyaW5nICYgKSApLAorCSAgICB0aGlzLCBTTE9UKCBzbG90VGV4dENoYW5n
ZWQoIHZvaWQgKSApICk7Cit9OworCit2b2lkIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OnNsb3RU
ZXh0Q2hhbmdlZCgpIHsKKyAgICBlbWl0IGNoYW5nZWQoKTsKK307CisKK3ZvaWQgVGVtcGxhdGVz
Q29uZmlndXJhdGlvbjo6bG9hZEZyb21HbG9iYWwoKSB7CisgICAgUVN0cmluZyBzdHI7CisgICAg
c3RyID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+dGVtcGxhdGVOZXdNZXNzYWdlKCk7CisgICAg
aWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAgICB0ZXh0RWRpdF9uZXctPnNldFRleHQoZGVmYXVs
dE5ld01lc3NhZ2UoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4dEVkaXRfbmV3LT5zZXRU
ZXh0KHN0cik7CisgICAgfTsKKyAgICBzdHIgPSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT50ZW1w
bGF0ZVJlcGx5KCk7CisgICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAgICB0ZXh0RWRpdF9y
ZXBseS0+c2V0VGV4dChkZWZhdWx0UmVwbHkoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4
dEVkaXRfcmVwbHktPnNldFRleHQoc3RyKTsKKyAgICB9OworICAgIHN0ciA9IEdsb2JhbFNldHRp
bmdzOjpzZWxmKCktPnRlbXBsYXRlUmVwbHlBbGwoKTsKKyAgICBpZihzdHIuaXNFbXB0eSgpKSB7
CisgICAgICAgIHRleHRFZGl0X3JlcGx5X2FsbC0+c2V0VGV4dChkZWZhdWx0UmVwbHlBbGwoKSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4dEVkaXRfcmVwbHlfYWxsLT5zZXRUZXh0KHN0cik7
CisgICAgfTsKKyAgICBzdHIgPSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT50ZW1wbGF0ZUZvcndh
cmQoKTsKKyAgICBpZihzdHIuaXNFbXB0eSgpKSB7CisgICAgICAgIHRleHRFZGl0X2ZvcndhcmQt
PnNldFRleHQoZGVmYXVsdEZvcndhcmQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4dEVk
aXRfZm9yd2FyZC0+c2V0VGV4dChzdHIpOworICAgIH07CisgICAgc3RyID0gR2xvYmFsU2V0dGlu
Z3M6OnNlbGYoKS0+cXVvdGVTdHJpbmcoKTsKKyAgICBpZihzdHIuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGxpbmVFZGl0X3F1b3RlLT5zZXRUZXh0KGRlZmF1bHRRdW90ZVN0cmluZygpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBsaW5lRWRpdF9xdW90ZS0+c2V0VGV4dChzdHIpOworICAgIH07Cit9
OworCit2b2lkIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OnNhdmVUb0dsb2JhbCgpIHsKKyAgICBH
bG9iYWxTZXR0aW5nczo6c2VsZigpLT5zZXRUZW1wbGF0ZU5ld01lc3NhZ2UodGV4dEVkaXRfbmV3
LT50ZXh0KCkpOworICAgIEdsb2JhbFNldHRpbmdzOjpzZWxmKCktPnNldFRlbXBsYXRlUmVwbHko
dGV4dEVkaXRfcmVwbHktPnRleHQoKSk7CisgICAgR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+c2V0
VGVtcGxhdGVSZXBseUFsbCh0ZXh0RWRpdF9yZXBseV9hbGwtPnRleHQoKSk7CisgICAgR2xvYmFs
U2V0dGluZ3M6OnNlbGYoKS0+c2V0VGVtcGxhdGVGb3J3YXJkKHRleHRFZGl0X2ZvcndhcmQtPnRl
eHQoKSk7CisgICAgR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+c2V0UXVvdGVTdHJpbmcobGluZUVk
aXRfcXVvdGUtPnRleHQoKSk7CisgICAgR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+d3JpdGVDb25m
aWcoKTsKK307CisKK3ZvaWQgVGVtcGxhdGVzQ29uZmlndXJhdGlvbjo6bG9hZEZyb21Gb2xkZXIo
UVN0cmluZyBpZCkgeworICAgIFRlbXBsYXRlcyB0KGlkKTsKKyAgICAKKyAgICBRU3RyaW5nIHN0
cjsKKyAgICAKKyAgICBzdHIgPSB0LnRlbXBsYXRlTmV3TWVzc2FnZSgpOworICAgIGlmKHN0ci5p
c0VtcHR5KCkpIHsKKyAgICAgICAgc3RyID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+dGVtcGxh
dGVOZXdNZXNzYWdlKCk7CisgICAgfTsKKyAgICBpZihzdHIuaXNFbXB0eSgpKSB7CisgICAgICAg
IHN0ciA9IGRlZmF1bHROZXdNZXNzYWdlKCk7CisgICAgfTsKKyAgICB0ZXh0RWRpdF9uZXctPnNl
dFRleHQoc3RyKTsKKyAgICAKKyAgICBzdHIgPSB0LnRlbXBsYXRlUmVwbHkoKTsKKyAgICBpZihz
dHIuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0ciA9IEdsb2JhbFNldHRpbmdzOjpzZWxmKCktPnRl
bXBsYXRlUmVwbHkoKTsKKyAgICB9OworICAgIGlmKHN0ci5pc0VtcHR5KCkpIHsKKyAgICAgICAg
c3RyID0gZGVmYXVsdFJlcGx5KCk7CisgICAgfTsKKyAgICB0ZXh0RWRpdF9yZXBseS0+c2V0VGV4
dChzdHIpOworICAgIAorICAgIHN0ciA9IHQudGVtcGxhdGVSZXBseUFsbCgpOworICAgIGlmKHN0
ci5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3RyID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+dGVt
cGxhdGVSZXBseUFsbCgpOworICAgIH07CisgICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAg
ICBzdHIgPSBkZWZhdWx0UmVwbHlBbGwoKTsKKyAgICB9OworICAgIHRleHRFZGl0X3JlcGx5X2Fs
bC0+c2V0VGV4dChzdHIpOworICAgIAorICAgIHN0ciA9IHQudGVtcGxhdGVGb3J3YXJkKCk7Cisg
ICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAgICBzdHIgPSBHbG9iYWxTZXR0aW5nczo6c2Vs
ZigpLT50ZW1wbGF0ZUZvcndhcmQoKTsKKyAgICB9OworICAgIGlmKHN0ci5pc0VtcHR5KCkpIHsK
KyAgICAgICAgc3RyID0gZGVmYXVsdEZvcndhcmQoKTsKKyAgICB9OworICAgIHRleHRFZGl0X2Zv
cndhcmQtPnNldFRleHQoc3RyKTsKKyAgICAKKyAgICBzdHIgPSB0LnF1b3RlU3RyaW5nKCk7Cisg
ICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAgICBzdHIgPSBHbG9iYWxTZXR0aW5nczo6c2Vs
ZigpLT5xdW90ZVN0cmluZygpOworICAgIH07CisgICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAg
ICAgICBzdHIgPSBkZWZhdWx0UXVvdGVTdHJpbmcoKTsKKyAgICB9OworICAgIGxpbmVFZGl0X3F1
b3RlLT5zZXRUZXh0KHN0cik7Cit9OworCit2b2lkIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OnNh
dmVUb0ZvbGRlcihRU3RyaW5nIGlkKSB7CisgICAgVGVtcGxhdGVzIHQoaWQpOworICAgIAorICAg
IHQuc2V0VGVtcGxhdGVOZXdNZXNzYWdlKHRleHRFZGl0X25ldy0+dGV4dCgpKTsKKyAgICB0LnNl
dFRlbXBsYXRlUmVwbHkodGV4dEVkaXRfcmVwbHktPnRleHQoKSk7CisgICAgdC5zZXRUZW1wbGF0
ZVJlcGx5QWxsKHRleHRFZGl0X3JlcGx5X2FsbC0+dGV4dCgpKTsKKyAgICB0LnNldFRlbXBsYXRl
Rm9yd2FyZCh0ZXh0RWRpdF9mb3J3YXJkLT50ZXh0KCkpOworICAgIHQuc2V0UXVvdGVTdHJpbmco
bGluZUVkaXRfcXVvdGUtPnRleHQoKSk7CisgICAgdC53cml0ZUNvbmZpZygpOworfTsKKwordm9p
ZCBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpidXR0b25faW5zZXJ0X2NsaWNrZWQoKSB7CisgICAg
UVBvcHVwTWVudSBwb3B1cChidXR0b25faW5zZXJ0KTsKKyAgICAKKyAgICBRUG9wdXBNZW51IHF1
b3RlX3BvcHVwKCZwb3B1cCk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJRdW90
ZWQgbWVzc2FnZSIpLCBDUXVvdGUpOworICAgIHF1b3RlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigi
TWVzc2FnZSB0ZXh0IGFzIGlzIiksIENUZXh0KTsKKyAgICBxdW90ZV9wb3B1cC5pbnNlcnRJdGVt
KGkxOG4oIk1lc3NhZ2UgaWQiKSwgQ09Nc2dJZCk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRl
bShpMThuKCJEYXRlIiksIENPRGF0ZSk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThu
KCJEYXRlIGluIHNob3J0IGZvcm1hdCIpLCBDT0RhdGVTaG9ydCk7CisgICAgcXVvdGVfcG9wdXAu
aW5zZXJ0SXRlbShpMThuKCJEYXRlIGluIEMgbG9jYWxlIiksIENPRGF0ZUVuKTsKKyAgICBxdW90
ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkRheSBvZiB3ZWVrIiksIENPRG93KTsKKyAgICBxdW90
ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlRpbWUiKSwgQ09UaW1lKTsKKyAgICBxdW90ZV9wb3B1
cC5pbnNlcnRJdGVtKGkxOG4oIlRpbWUgaW4gbG9uZyBmb3JtYXQiKSwgQ09UaW1lTG9uZyk7Cisg
ICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJUaW1lIGluIEMgbG9jYWxlIiksIENPVGlt
ZUxvbmdFbik7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJUbyBmaWVsZCBhZGRy
ZXNzIiksIENPVG9BZGRyKTsKKyAgICBxdW90ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlRvIGZp
ZWxkIG5hbWUiKSwgQ09Ub05hbWUpOworICAgIHF1b3RlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigi
VG8gZmllbGQgZmlyc3QgbmFtZSIpLCBDT1RvRk5hbWUpOworICAgIHF1b3RlX3BvcHVwLmluc2Vy
dEl0ZW0oaTE4bigiVG8gZmllbGQgbGFzdCBuYW1lIiksIENPVG9MTmFtZSk7CisgICAgcXVvdGVf
cG9wdXAuaW5zZXJ0SXRlbShpMThuKCJGcm9tIGZpZWxkIGFkZHJlc3MiKSwgQ09Gcm9tQWRkcik7
CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJGcm9tIGZpZWxkIG5hbWUiKSwgQ09G
cm9tTmFtZSk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJGcm9tIGZpZWxkIGZp
cnN0IG5hbWUiKSwgQ09Gcm9tRk5hbWUpOworICAgIHF1b3RlX3BvcHVwLmluc2VydEl0ZW0oaTE4
bigiRnJvbSBmaWVsZCBsYXN0IG5hbWUiKSwgQ09Gcm9tTE5hbWUpOworICAgIHF1b3RlX3BvcHVw
Lmluc2VydEl0ZW0oaTE4bigiU3ViamVjdCIpLCBDT0Z1bGxTdWJqZWN0KTsKKyAgICBxdW90ZV9w
b3B1cC5pbnNlcnRJdGVtKGkxOG4oIlF1b3RlZCBoZWFkZXJzIiksIENRSGVhZGVycyk7CisgICAg
cXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJIZWFkZXJzIGFzIGlzIiksIENIZWFkZXJzKTsK
KyAgICBxdW90ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkhlYWRlciBjb250ZW50IiksIENPSGVh
ZGVyKTsKKyAgICBwb3B1cC5pbnNlcnRJdGVtKGkxOG4oIk9yaWdpbmFsIG1lc3NhZ2UiKSwgJnF1
b3RlX3BvcHVwKTsKKyAgICAKKyAgICBRUG9wdXBNZW51IG1zZ19wb3B1cCgmcG9wdXApOworICAg
IG1zZ19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIk1lc3NhZ2UgaWQiKSwgQ01zZ0lkKTsKKyAgICBt
c2dfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJEYXRlIiksIENEYXRlKTsKKyAgICBtc2dfcG9wdXAu
aW5zZXJ0SXRlbShpMThuKCJEYXRlIGluIHNob3J0IGZvcm1hdCIpLCBDRGF0ZVNob3J0KTsKKyAg
ICBtc2dfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJEYXRlIGluIEMgbG9jYWxlIiksIENEYXRlRW4p
OworICAgIG1zZ19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkRheSBvZiB3ZWVrIiksIENEb3cpOwor
ICAgIG1zZ19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlRpbWUiKSwgQ1RpbWUpOworICAgIG1zZ19w
b3B1cC5pbnNlcnRJdGVtKGkxOG4oIlRpbWUgaW4gbG9uZyBmb3JtYXQiKSwgQ1RpbWVMb25nKTsK
KyAgICBtc2dfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJUaW1lIGluIEMgbG9jYWxlIiksIENUaW1l
TG9uZ0VuKTsKKyAgICBtc2dfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJUbyBmaWVsZCBhZGRyZXNz
IiksIENUb0FkZHIpOworICAgIG1zZ19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlRvIGZpZWxkIG5h
bWUiKSwgQ1RvTmFtZSk7CisgICAgbXNnX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiVG8gZmllbGQg
Zmlyc3QgbmFtZSIpLCBDVG9GTmFtZSk7CisgICAgbXNnX3BvcHVwLmluc2VydEl0ZW0oaTE4bigi
VG8gZmllbGQgbGFzdCBuYW1lIiksIENUb0xOYW1lKTsKKyAgICBtc2dfcG9wdXAuaW5zZXJ0SXRl
bShpMThuKCJGcm9tIGZpZWxkIGFkZHJlc3MiKSwgQ0Zyb21BZGRyKTsKKyAgICBtc2dfcG9wdXAu
aW5zZXJ0SXRlbShpMThuKCJGcm9tIGZpZWxkIG5hbWUiKSwgQ0Zyb21OYW1lKTsKKyAgICBtc2df
cG9wdXAuaW5zZXJ0SXRlbShpMThuKCJGcm9tIGZpZWxkIGZpcnN0IG5hbWUiKSwgQ0Zyb21GTmFt
ZSk7CisgICAgbXNnX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiRnJvbSBmaWVsZCBsYXN0IG5hbWUi
KSwgQ0Zyb21MTmFtZSk7CisgICAgbXNnX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiU3ViamVjdCIp
LCBDRnVsbFN1YmplY3QpOworICAgIG1zZ19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkhlYWRlciBj
b250ZW50IiksIENIZWFkZXIpOworICAgIHBvcHVwLmluc2VydEl0ZW0oaTE4bigiQ3VycmVudCBt
ZXNzYWdlIiksICZtc2dfcG9wdXApOworICAgIAorICAgIFFQb3B1cE1lbnUgcGlwZV9wb3B1cCgm
cG9wdXApOworICAgIHBpcGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJJbnNlcnQgcmVzdWx0IG9m
IGNvbW1hbmQiKSwgQ1N5c3RlbSk7CisgICAgcGlwZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlBp
cGUgb3JpZ2luYWwgbWVzc2FnZSBib2R5IGFuZCBpbnNlcnQgcmVzdWx0IGFzIHF1b3RlZCB0ZXh0
IiksIENRdW90ZVBpcGUpOworICAgIHBpcGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJQaXBlIG9y
aWdpbmFsIG1lc3NhZ2UgYm9keSBhbmQgaW5zZXJ0IHJlc3VsdCBhcyBpcyIpLCBDVGV4dFBpcGUp
OworICAgIHBpcGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJQaXBlIG9yaWdpbmFsIG1lc3NhZ2Ug
d2l0aCBoZWFkZXJzIGFuZCBpbnNlcnQgcmVzdWx0IGFzIGlzIiksIENNc2dQaXBlKTsKKyAgICBw
aXBlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiUGlwZSBjdXJyZW50IG1lc3NhZ2UgYm9keSBhbmQg
aW5zZXJ0IHJlc3VsdCBhcyBpcyIpLCBDQm9keVBpcGUpOworICAgIHBpcGVfcG9wdXAuaW5zZXJ0
SXRlbShpMThuKCJQaXBlIGN1cnJlbnQgbWVzc2FnZSBib2R5IGFuZCByZXBsYWNlIHdpdGggcmVz
dWx0IiksIENDbGVhclBpcGUpOworICAgIHBvcHVwLmluc2VydEl0ZW0oaTE4bigiUHJvY2VzcyB3
aXRoIGV4dGVybmFsIHByb2dyYW1zIiksICZwaXBlX3BvcHVwKTsKKyAgICAKKyAgICBRUG9wdXBN
ZW51IG1pc2NfcG9wdXAoJnBvcHVwKTsKKyAgICBtaXNjX3BvcHVwLmluc2VydEl0ZW0oaTE4bigi
U2V0IGN1cnNvciBwb3NpdGlvbiIpLCBDQ3Vyc29yKTsKKyAgICBtaXNjX3BvcHVwLmluc2VydEl0
ZW0oaTE4bigiSW5zZXJ0IGZpbGUgY29udGVudCIpLCBDSW5zZXJ0KTsKKyAgICBtaXNjX3BvcHVw
Lmluc2VydEl0ZW0oaTE4bigiRE5MIiksIENEbmwpOworICAgIG1pc2NfcG9wdXAuaW5zZXJ0SXRl
bShpMThuKCJUZW1wbGF0ZSBjb21tZW50IiksIENSZW0pOworICAgIG1pc2NfcG9wdXAuaW5zZXJ0
SXRlbShpMThuKCJObyBvcGVyYXRpb24iKSwgQ05vcCk7CisgICAgbWlzY19wb3B1cC5pbnNlcnRJ
dGVtKGkxOG4oIkNsZWFyIGdlbmVyYXRlZCBtZXNzYWdlIiksIENDbGVhcik7CisgICAgbWlzY19w
b3B1cC5pbnNlcnRJdGVtKGkxOG4oIlR1cm4gZGVidWcgb24iKSwgQ0RlYnVnKTsKKyAgICBtaXNj
X3BvcHVwLmluc2VydEl0ZW0oaTE4bigiVHVybiBkZWJ1ZyBvZmYiKSwgQ0RlYnVnT2ZmKTsKKyAg
ICBwb3B1cC5pbnNlcnRJdGVtKGkxOG4oIk1pc2NlbGFuZW91cyIpLCAmbWlzY19wb3B1cCk7Cisg
ICAgCisgICAgUVNpemUgcHMgPSBwb3B1cC5zaXplSGludCgpOworICAgIGludCBpbmRleCA9IHBv
cHVwLmV4ZWMoYnV0dG9uX2luc2VydC0+bWFwVG9HbG9iYWwoUVBvaW50KDAsLShwcy5oZWlnaHQo
KSkpKSk7CisgICAgCisgICAgLy8ga2REZWJ1ZygpIDw8ICJUZW1wbGF0ZSBjb21tYW5kIGluZGV4
OiAiIDw8IGluZGV4IDw8IGVuZGw7CisgICAgCisgICAgaWYoaW5kZXggPiAwKSB7CisgICAgICAg
IHN3aXRjaChpbmRleCkgeworICAgICAgICAgICAgY2FzZSBDUXVvdGU6IGluc2VydENvbW1hbmQo
IiVRVU9URSIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1RleHQ6IGluc2VydENvbW1hbmQo
IiVURVhUIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT01zZ0lkOiBpbnNlcnRDb21tYW5k
KCIlT01TR0lEIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0RhdGU6IGluc2VydENvbW1h
bmQoIiVPREFURSIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09EYXRlU2hvcnQ6IGluc2Vy
dENvbW1hbmQoIiVPREFURVNIT1JUIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0RhdGVF
bjogaW5zZXJ0Q29tbWFuZCgiJU9EQVRFRU4iKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENP
RG93OiBpbnNlcnRDb21tYW5kKCIlT0RPVyIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09U
aW1lOiBpbnNlcnRDb21tYW5kKCIlT1RJTUUiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENP
VGltZUxvbmc6IGluc2VydENvbW1hbmQoIiVPVElNRUxPTkciKTsgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIENPVGltZUxvbmdFbjogaW5zZXJ0Q29tbWFuZCgiJU9USU1FTE9OR0VOIik7IGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDT1RvQWRkcjogaW5zZXJ0Q29tbWFuZCgiJU9UT0FERFIiKTsg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIENPVG9OYW1lOiBpbnNlcnRDb21tYW5kKCIlT1RPTkFN
RSIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09Ub0ZOYW1lOiBpbnNlcnRDb21tYW5kKCIl
T1RPRk5BTUUiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPVG9MTmFtZTogaW5zZXJ0Q29t
bWFuZCgiJU9UT0xOQU1FIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0Zyb21BZGRyOiBp
bnNlcnRDb21tYW5kKCIlT0ZST01BRERSIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0Zy
b21OYW1lOiBpbnNlcnRDb21tYW5kKCIlT0ZST01OQU1FIik7IGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBDT0Zyb21GTmFtZTogaW5zZXJ0Q29tbWFuZCgiJU9GUk9NRk5BTUUiKTsgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIENPRnJvbUxOYW1lOiBpbnNlcnRDb21tYW5kKCIlT0ZST01MTkFNRSIp
OyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09GdWxsU3ViamVjdDogaW5zZXJ0Q29tbWFuZCgi
JU9GVUxMU1VCSkVDVCIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1FIZWFkZXJzOiBpbnNl
cnRDb21tYW5kKCIlUUhFQURFUlMiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENIZWFkZXJz
OiBpbnNlcnRDb21tYW5kKCIlSEVBREVSUyIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09I
ZWFkZXI6IGluc2VydENvbW1hbmQoIiVPSEVBREVSPVwiXCIiLCAtMSk7IGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBDTXNnSWQ6IGluc2VydENvbW1hbmQoIiVNU0dJRCIpOyBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQ0RhdGU6IGluc2VydENvbW1hbmQoIiVEQVRFIik7IGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBDRGF0ZVNob3J0OiBpbnNlcnRDb21tYW5kKCIlREFURVNIT1JUIik7IGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDRGF0ZUVuOiBpbnNlcnRDb21tYW5kKCIlREFURUVOIik7IGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBDRG93OiBpbnNlcnRDb21tYW5kKCIlRE9XIik7IGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDVGltZTogaW5zZXJ0Q29tbWFuZCgiJVRJTUUiKTsgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENUaW1lTG9uZzogaW5zZXJ0Q29tbWFuZCgiJVRJTUVMT05HIik7
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDVGltZUxvbmdFbjogaW5zZXJ0Q29tbWFuZCgiJVRJ
TUVMT05HRU4iKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENUb0FkZHI6IGluc2VydENvbW1h
bmQoIiVUT0FERFIiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENUb05hbWU6IGluc2VydENv
bW1hbmQoIiVUT05BTUUiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENUb0ZOYW1lOiBpbnNl
cnRDb21tYW5kKCIlVE9GTkFNRSIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1RvTE5hbWU6
IGluc2VydENvbW1hbmQoIiVUT0xOQU1FIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDRnJv
bUFkZHI6IGluc2VydENvbW1hbmQoIiVGUk9NQUREUiIpOyBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQ0Zyb21OYW1lOiBpbnNlcnRDb21tYW5kKCIlRlJPTU5BTUUiKTsgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIENGcm9tRk5hbWU6IGluc2VydENvbW1hbmQoIiVGUk9NRk5BTUUiKTsgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENGcm9tTE5hbWU6IGluc2VydENvbW1hbmQoIiVGUk9NTE5BTUUi
KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENGdWxsU3ViamVjdDogaW5zZXJ0Q29tbWFuZCgi
JUZVTExTVUJKRUNUIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDSGVhZGVyOiBpbnNlcnRD
b21tYW5kKCIlSEVBREVSPVwiXCIiLCAtMSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU3lz
dGVtOiBpbnNlcnRDb21tYW5kKCIlU1lTVEVNPVwiXCIiLCAtMSk7IGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBDUXVvdGVQaXBlOiBpbnNlcnRDb21tYW5kKCIlUVVPVEVQSVBFPVwiXCIiLCAtMSk7
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDVGV4dFBpcGU6IGluc2VydENvbW1hbmQoIiVURVhU
UElQRT1cIlwiIiwgLTEpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ01zZ1BpcGU6IGluc2Vy
dENvbW1hbmQoIiVNU0dQSVBFPVwiXCIiLCAtMSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBD
Qm9keVBpcGU6IGluc2VydENvbW1hbmQoIiVCT0RZUElQRT1cIlwiIiwgLTEpOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQ0NsZWFyUGlwZTogaW5zZXJ0Q29tbWFuZCgiJUNMRUFSUElQRT1cIlwi
IiwgLTEpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0N1cnNvcjogaW5zZXJ0Q29tbWFuZCgi
JUNVUlNPUiIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0luc2VydDogaW5zZXJ0Q29tbWFu
ZCgiJUlOU0VSVD1cIlwiIiwgLTEpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0RubDogaW5z
ZXJ0Q29tbWFuZCgiJS0iKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENSZW06IGluc2VydENv
bW1hbmQoIiVSRU09XCJcIiIsIC0xKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENOb3A6IGlu
c2VydENvbW1hbmQoIiVOT1AiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENDbGVhcjogaW5z
ZXJ0Q29tbWFuZCgiJUNMRUFSIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDRGVidWc6IGlu
c2VydENvbW1hbmQoIiVERUJVRyIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0RlYnVnT2Zm
OiBpbnNlcnRDb21tYW5kKCIlREVCVUdPRkYiKTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OiAKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIlVua25vd24gdGVtcGxhdGUgY29tbWFu
ZCBpbmRleDogIiA8PCBpbmRleCA8PCBlbmRsOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9OworICAgIH07Cit9OworCit2b2lkIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246Omluc2Vy
dENvbW1hbmQoUVN0cmluZyBjbWQsIGludCBhZGp1c3RDdXJzb3IpIHsKKyAgICBRVGV4dEVkaXQq
IGVkaXQ7CisgICAgCisgICAgaWYodG9vbEJveDEtPmN1cnJlbnRJdGVtKCkgPT0gcGFnZV9uZXcp
IHsKKyAgICAgICAgZWRpdCA9IHRleHRFZGl0X25ldzsKKyAgICB9IGVsc2UgaWYodG9vbEJveDEt
PmN1cnJlbnRJdGVtKCkgPT0gcGFnZV9yZXBseSkgeworICAgICAgICBlZGl0ID0gdGV4dEVkaXRf
cmVwbHk7CisgICAgfSBlbHNlIGlmKHRvb2xCb3gxLT5jdXJyZW50SXRlbSgpID09IHBhZ2VfcmVw
bHlfYWxsKSB7CisgICAgICAgIGVkaXQgPSB0ZXh0RWRpdF9yZXBseV9hbGw7CisgICAgfSBlbHNl
IGlmKHRvb2xCb3gxLT5jdXJyZW50SXRlbSgpID09IHBhZ2VfZm9yd2FyZCkgeworICAgICAgICBl
ZGl0ID0gdGV4dEVkaXRfZm9yd2FyZDsKKyAgICB9IGVsc2UgeworICAgICAgICBrZERlYnVnKCkg
PDwgIlVua25vd24gY3VycmVudCBwYWdlIGluIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb24hIiA8PCBl
bmRsOworICAgICAgICByZXR1cm47CisgICAgfTsKKyAgICAKKyAgICAvLyBrZERlYnVnKCkgPDwg
Ikluc2VydCBjb21tYW5kOiAiIDw8IGNtZCA8PCBlbmRsOworICAgIAorICAgIGludCBwYXJhLCBp
bmRleDsKKyAgICBlZGl0LT5nZXRDdXJzb3JQb3NpdGlvbigmcGFyYSwgJmluZGV4KTsKKyAgICBl
ZGl0LT5pbnNlcnRBdChjbWQsIHBhcmEsIGluZGV4KTsKKyAgICAKKyAgICBpbmRleCArPSBhZGp1
c3RDdXJzb3I7CisgICAgCisgICAgZWRpdC0+c2V0Q3Vyc29yUG9zaXRpb24ocGFyYSwgaW5kZXgg
KyBjbWQubGVuZ3RoKCkpOworfTsKKworUVN0cmluZyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpk
ZWZhdWx0TmV3TWVzc2FnZSgpIHsKKyAgICByZXR1cm4gaTE4bigKKyAgICAgICAgIiVSRU09XCJE
ZWZhdWx0IG5ldyBtZXNzYWdlIHRlbXBsYXRlXCIlLVxuIgorICAgICAgICAiJUJMQU5LIgorICAg
ICAgICApOworfTsKKworUVN0cmluZyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpkZWZhdWx0UmVw
bHkoKSB7CisgICAgcmV0dXJuIGkxOG4oCisgICAgICAgICIlUkVNPVwiRGVmYXVsdCByZXBseSB0
ZW1wbGF0ZVwiJS1cbiIKKyAgICAgICAgIkhlbGxvLCAlT0ZST01GTkFNRSFcbiIKKyAgICAgICAg
IlxuIgorICAgICAgICAiT24gJU9EQVRFRU4gJU9USU1FTE9OR0VOIHlvdSB3cm90ZTpcbiIKKyAg
ICAgICAgIiVRVU9URVxuIgorICAgICAgICAiJUNVUlNPUlxuIgorICAgICAgICApOworfTsKKwor
UVN0cmluZyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpkZWZhdWx0UmVwbHlBbGwoKSB7CisgICAg
cmV0dXJuIGkxOG4oCisgICAgICAgICIlUkVNPVwiRGVmYXVsdCByZXBseSBhbGwgdGVtcGxhdGVc
IiUtXG4iCisgICAgICAgICJIZWxsbyFcbiIKKyAgICAgICAgIlxuIgorICAgICAgICAiT24gJU9E
QVRFRU4gJU9USU1FTE9OR0VOICVPRlJPTU5BTUUgd3JvdGU6XG4iCisgICAgICAgICIlUVVPVEVc
biIKKyAgICAgICAgIiVDVVJTT1JcbiIKKyAgICAgICAgKTsKK307CisKK1FTdHJpbmcgVGVtcGxh
dGVzQ29uZmlndXJhdGlvbjo6ZGVmYXVsdEZvcndhcmQoKSB7CisgICAgcmV0dXJuIGkxOG4oCisg
ICAgICAgICIlUkVNPVwiRGVmYXVsdCBmb3J3YXJkIHRlbXBsYXRlXCIlLVxuIgorICAgICAgICAi
VGhpcyBpcyBhIGZvcndhcmRlZCBtZXNzYWdlOlxuIgorICAgICAgICAiPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iCisgICAgICAgICIlVEVYVFxuIgorICAgICAg
ICAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgorICAgICAgICAp
OworfTsKKworUVN0cmluZyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpkZWZhdWx0UXVvdGVTdHJp
bmcoKSB7CisgICAgcmV0dXJuICI+ICI7Cit9OworCisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmln
dXJhdGlvbmltcGwubW9jIgpJbmRleDoga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbi51aQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrbWFpbC90ZW1wbGF0ZXNjb25maWd1cmF0aW9uLnVpCShyZXZpc2lvbiAw
KQorKysga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbi51aQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzMzQgQEAKKzwhRE9DVFlQRSBVST48VUkgdmVyc2lvbj0iMy4zIiBzdGRzZXRkZWY9IjEi
PgorPGNsYXNzPlRlbXBsYXRlc0NvbmZpZ3VyYXRpb25TdHViPC9jbGFzcz4KKzx3aWRnZXQgY2xh
c3M9IlFXaWRnZXQiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAgPGNzdHJp
bmc+VGVtcGxhdGVzQ29uZmlndXJhdGlvbjwvY3N0cmluZz4KKyAgICA8L3Byb3BlcnR5PgorICAg
IDxwcm9wZXJ0eSBuYW1lPSJnZW9tZXRyeSI+CisgICAgICAgIDxyZWN0PgorICAgICAgICAgICAg
PHg+MDwveD4KKyAgICAgICAgICAgIDx5PjA8L3k+CisgICAgICAgICAgICA8d2lkdGg+NDQ5PC93
aWR0aD4KKyAgICAgICAgICAgIDxoZWlnaHQ+NDUwPC9oZWlnaHQ+CisgICAgICAgIDwvcmVjdD4K
KyAgICA8L3Byb3BlcnR5PgorICAgIDxwcm9wZXJ0eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAg
ICAgPHNpemVwb2xpY3k+CisgICAgICAgICAgICA8aHNpemV0eXBlPjc8L2hzaXpldHlwZT4KKyAg
ICAgICAgICAgIDx2c2l6ZXR5cGU+NzwvdnNpemV0eXBlPgorICAgICAgICAgICAgPGhvcnN0cmV0
Y2g+MzwvaG9yc3RyZXRjaD4KKyAgICAgICAgICAgIDx2ZXJzdHJldGNoPjM8L3ZlcnN0cmV0Y2g+
CisgICAgICAgIDwvc2l6ZXBvbGljeT4KKyAgICA8L3Byb3BlcnR5PgorICAgIDxwcm9wZXJ0eSBu
YW1lPSJtaW5pbXVtU2l6ZSI+CisgICAgICAgIDxzaXplPgorICAgICAgICAgICAgPHdpZHRoPjQz
MDwvd2lkdGg+CisgICAgICAgICAgICA8aGVpZ2h0PjQ1MDwvaGVpZ2h0PgorICAgICAgICA8L3Np
emU+CisgICAgPC9wcm9wZXJ0eT4KKyAgICA8cHJvcGVydHkgbmFtZT0iY2FwdGlvbiI+CisgICAg
ICAgIDxzdHJpbmc+Rm9ybTE8L3N0cmluZz4KKyAgICA8L3Byb3BlcnR5PgorICAgIDx3aWRnZXQg
Y2xhc3M9IlFMYXlvdXRXaWRnZXQiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+Cisg
ICAgICAgICAgICA8Y3N0cmluZz5sYXlvdXQzPC9jc3RyaW5nPgorICAgICAgICA8L3Byb3BlcnR5
PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iZ2VvbWV0cnkiPgorICAgICAgICAgICAgPHJlY3Q+
CisgICAgICAgICAgICAgICAgPHg+MTA8L3g+CisgICAgICAgICAgICAgICAgPHk+MTA8L3k+Cisg
ICAgICAgICAgICAgICAgPHdpZHRoPjQzMDwvd2lkdGg+CisgICAgICAgICAgICAgICAgPGhlaWdo
dD40MzA8L2hlaWdodD4KKyAgICAgICAgICAgIDwvcmVjdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4K
KyAgICAgICAgPHZib3g+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAg
ICAgICAgICAgICAgPGNzdHJpbmc+dW5uYW1lZDwvY3N0cmluZz4KKyAgICAgICAgICAgIDwvcHJv
cGVydHk+CisgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJRVG9vbEJveCI+CisgICAgICAgICAg
ICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICAgICAgICAgICAgICA8Y3N0cmlu
Zz50b29sQm94MTwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAg
ICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAgICAgICAgICAgICAg
ICAgPHNpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICA8aHNpemV0eXBlPjc8L2hz
aXpldHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2c2l6ZXR5cGU+NzwvdnNpemV0eXBl
PgorICAgICAgICAgICAgICAgICAgICAgICAgPGhvcnN0cmV0Y2g+MzwvaG9yc3RyZXRjaD4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzdHJldGNoPjM8L3ZlcnN0cmV0Y2g+CisgICAgICAg
ICAgICAgICAgICAgIDwvc2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5Pgor
ICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJtaW5pbXVtU2l6ZSI+CisgICAgICAgICAg
ICAgICAgICAgIDxzaXplPgorICAgICAgICAgICAgICAgICAgICAgICAgPHdpZHRoPjA8L3dpZHRo
PgorICAgICAgICAgICAgICAgICAgICAgICAgPGhlaWdodD4wPC9oZWlnaHQ+CisgICAgICAgICAg
ICAgICAgICAgIDwvc2l6ZT4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAg
ICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmcmFtZVNoYXBlIj4KKyAgICAgICAgICAgICAgICAgICAg
PGVudW0+UGFuZWw8L2VudW0+CisgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAg
ICAgICAgICA8cHJvcGVydHkgbmFtZT0iZnJhbWVTaGFkb3ciPgorICAgICAgICAgICAgICAgICAg
ICA8ZW51bT5TdW5rZW48L2VudW0+CisgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAg
ICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY3VycmVudEluZGV4Ij4KKyAgICAgICAgICAgICAg
ICAgICAgPG51bWJlcj4yPC9udW1iZXI+CisgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAg
ICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJRV2lkZ2V0Ij4KKyAgICAgICAgICAgICAgICAg
ICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJp
bmc+cGFnZV9uZXc8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Cisg
ICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJiYWNrZ3JvdW5kTW9kZSI+CisgICAg
ICAgICAgICAgICAgICAgICAgICA8ZW51bT5QYWxldHRlQmFja2dyb3VuZDwvZW51bT4KKyAgICAg
ICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0
ZSBuYW1lPSJsYWJlbCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPk5ldyBNZXNz
YWdlPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAg
ICAgICAgICAgICA8aGJveD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJuYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz51bm5hbWVkPC9j
c3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9IlFUZXh0RWRpdCI+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8Y3N0cmluZz50ZXh0RWRpdF9uZXc8L2NzdHJpbmc+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
cHJvcGVydHkgbmFtZT0ic2l6ZVBvbGljeSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxzaXplcG9saWN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhz
aXpldHlwZT43PC9oc2l6ZXR5cGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8dnNpemV0eXBlPjc8L3ZzaXpldHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxob3JzdHJldGNoPjM8L2hvcnN0cmV0Y2g+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8dmVyc3RyZXRjaD4zPC92ZXJzdHJldGNoPgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8L3NpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFt
ZT0ibWluaW11bVNpemUiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2l6ZT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWR0aD4wPC93aWR0aD4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoZWlnaHQ+MDwvaGVpZ2h0PgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NpemU+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVy
dHkgbmFtZT0iZm9udCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb250Pgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZhbWlseT5Nb25vc3BhY2U8L2Zh
bWlseT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb250PgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPHByb3BlcnR5IG5hbWU9InJlc2l6ZVBvbGljeSI+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDxlbnVtPk1hbnVhbDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ2U2Nyb2xsQmFyTW9kZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVt
PkF1dG88L2VudW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaFNjcm9sbEJhck1vZGUi
PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5BdXRvPC9lbnVtPgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHRGb3JtYXQiPgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8ZW51bT5QbGFpblRleHQ8L2VudW0+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVy
dHkgbmFtZT0id29yZFdyYXAiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51
bT5Ob1dyYXA8L2VudW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYXV0b0Zvcm1hdHRp
bmciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2V0PkF1dG9Ob25lPC9zZXQ+
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICA8L2hib3g+CisgICAgICAg
ICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iUVdpZGdl
dCI+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIDxjc3RyaW5nPnBhZ2VfcmVwbHk8L2NzdHJpbmc+CisgICAgICAgICAg
ICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJiYWNrZ3JvdW5kTW9kZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5QYWxldHRl
QmFja2dyb3VuZDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAg
ICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsYWJlbCI+CisgICAgICAgICAgICAgICAg
ICAgICAgICA8c3RyaW5nPlJlcGx5IHRvIFNlbmRlcjwvc3RyaW5nPgorICAgICAgICAgICAgICAg
ICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgPGhib3g+CisgICAgICAgICAg
ICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPGNzdHJpbmc+dW5uYW1lZDwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJR
VGV4dEVkaXQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJu
YW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+dGV4dEVkaXRf
cmVwbHk8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2l6ZVBvbGljeSI+
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaXplcG9saWN5PgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhzaXpldHlwZT4zPC9oc2l6ZXR5cGU+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dnNpemV0eXBlPjM8L3ZzaXpldHlwZT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxob3JzdHJldGNoPjA8L2hvcnN0
cmV0Y2g+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc3RyZXRjaD4w
PC92ZXJzdHJldGNoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NpemVwb2xp
Y3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZm9udCI+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxmb250PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGZhbWlseT5Nb25vc3BhY2U8L2ZhbWlseT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPC9mb250PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHRGb3JtYXQiPgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5QbGFpblRleHQ8L2VudW0+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0id29yZFdyYXAiPgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8ZW51bT5Ob1dyYXA8L2VudW0+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkg
bmFtZT0iYXV0b0Zvcm1hdHRpbmciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
c2V0PkF1dG9Ob25lPC9zZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0
eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAg
ICA8L2hib3g+CisgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgPHdp
ZGdldCBjbGFzcz0iUVdpZGdldCI+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJuYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnBhZ2VfcmVwbHlfYWxs
PC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAg
ICAgICAgICA8cHJvcGVydHkgbmFtZT0iYmFja2dyb3VuZE1vZGUiPgorICAgICAgICAgICAgICAg
ICAgICAgICAgPGVudW0+UGFsZXR0ZUJhY2tncm91bmQ8L2VudW0+CisgICAgICAgICAgICAgICAg
ICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibGFi
ZWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5SZXBseSB0byBBbGw8L3N0cmlu
Zz4KKyAgICAgICAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgICAg
IDxoYm94PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnVubmFtZWQ8L2NzdHJpbmc+Cisg
ICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAg
ICAgPHdpZGdldCBjbGFzcz0iUVRleHRFZGl0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDxjc3RyaW5nPnRleHRFZGl0X3JlcGx5X2FsbDwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PHNpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHNpemV0
eXBlPjM8L2hzaXpldHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2
c2l6ZXR5cGU+MzwvdnNpemV0eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGhvcnN0cmV0Y2g+MDwvaG9yc3RyZXRjaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDx2ZXJzdHJldGNoPjA8L3ZlcnN0cmV0Y2g+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDwvc2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJm
b250Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvbnQ+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmFtaWx5Pk1vbm9zcGFjZTwvZmFtaWx5PgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvbnQ+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVy
dHkgbmFtZT0idGV4dEZvcm1hdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxl
bnVtPlBsYWluVGV4dDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3Bl
cnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3b3JkV3Jh
cCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPk5vV3JhcDwvZW51bT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhdXRvRm9ybWF0dGluZyI+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxzZXQ+QXV0b05vbmU8L3NldD4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRn
ZXQ+CisgICAgICAgICAgICAgICAgICAgIDwvaGJveD4KKyAgICAgICAgICAgICAgICA8L3dpZGdl
dD4KKyAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJRV2lkZ2V0Ij4KKyAgICAgICAgICAg
ICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICAgICAgICAgICAgICAgICAg
PGNzdHJpbmc+cGFnZV9mb3J3YXJkPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICA8L3By
b3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYmFja2dyb3VuZE1v
ZGUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudW0+UGFsZXR0ZUJhY2tncm91bmQ8L2Vu
dW0+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAg
IDxhdHRyaWJ1dGUgbmFtZT0ibGFiZWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmlu
Zz5Gb3J3YXJkIE1lc3NhZ2U8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgPC9hdHRyaWJ1
dGU+CisgICAgICAgICAgICAgICAgICAgIDxoYm94PgorICAgICAgICAgICAgICAgICAgICAgICAg
PHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3Ry
aW5nPnVubmFtZWQ8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5
PgorICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iUVRleHRFZGl0Ij4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnRleHRFZGl0X2ZvcndhcmQ8L2NzdHJp
bmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2l6ZVBvbGljeSI+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxzaXplcG9saWN5PgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPGhzaXpldHlwZT4zPC9oc2l6ZXR5cGU+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8dnNpemV0eXBlPjM8L3ZzaXpldHlwZT4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDxob3JzdHJldGNoPjA8L2hvcnN0cmV0Y2g+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc3RyZXRjaD4wPC92ZXJzdHJldGNo
PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NpemVwb2xpY3k+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8cHJvcGVydHkgbmFtZT0iZm9udCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxmb250PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZhbWlseT5N
b25vc3BhY2U8L2ZhbWlseT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb250
PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHRGb3JtYXQiPgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8ZW51bT5QbGFpblRleHQ8L2VudW0+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
cHJvcGVydHkgbmFtZT0id29yZFdyYXAiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8ZW51bT5Ob1dyYXA8L2VudW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9w
ZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYXV0b0Zv
cm1hdHRpbmciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2V0PkF1dG9Ob25l
PC9zZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICA8L2hib3g+Cisg
ICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAg
ICAgIDx3aWRnZXQgY2xhc3M9IlFMYXlvdXRXaWRnZXQiPgorICAgICAgICAgICAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+bGF5b3V0Mjwv
Y3N0cmluZz4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxo
Ym94PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAg
ICAgICAgICAgICAgICAgICA8Y3N0cmluZz51bm5hbWVkPC9jc3RyaW5nPgorICAgICAgICAgICAg
ICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJR
UHVzaEJ1dHRvbiI+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibmFt
ZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+YnV0dG9uX2luc2VydDwv
Y3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAg
ICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2l6ZVBvbGljeSI+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPHNpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxoc2l6ZXR5cGU+MTwvaHNpemV0eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8dnNpemV0eXBlPjA8L3ZzaXpldHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPGhvcnN0cmV0Y2g+MTwvaG9yc3RyZXRjaD4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPHZlcnN0cmV0Y2g+MDwvdmVyc3RyZXRjaD4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8L3NpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5
PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+JmFtcDtJbnNlcnQgY29tbWFuZC4uLjwvc3Ry
aW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhY2NlbCI+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPHN0cmluZz5BbHQrSTwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9w
cm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAg
ICAgIDx3aWRnZXQgY2xhc3M9IlFMYWJlbCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJv
cGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+
dGV4dExhYmVsMTwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+
CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2l6ZVBvbGljeSI+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpemVwb2xpY3k+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxoc2l6ZXR5cGU+NTwvaHNpemV0eXBlPgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8dnNpemV0eXBlPjU8L3ZzaXpldHlwZT4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPGhvcnN0cmV0Y2g+MjwvaG9yc3RyZXRjaD4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPHZlcnN0cmV0Y2g+MDwvdmVyc3RyZXRjaD4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8L3NpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAg
ICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRl
eHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+JmFtcDtRdW90ZSBpbmRp
Y2F0b3I6PC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAg
ICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFsaWdubWVudCI+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPHNldD5BbGlnblZDZW50ZXJ8QWxpZ25SaWdodDwvc2V0Pgor
ICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJidWRkeSIgc3Rkc2V0PSIwIj4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8Y3N0cmluZz5saW5lRWRpdF9xdW90ZTwvY3N0cmluZz4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0Pgor
ICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJRTGluZUVkaXQiPgorICAgICAgICAg
ICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDxjc3RyaW5nPmxpbmVFZGl0X3F1b3RlPC9jc3RyaW5nPgorICAgICAgICAgICAg
ICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Cisg
ICAgICAgICAgICAgICAgPC9oYm94PgorICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgIDwv
dmJveD4KKyAgICA8L3dpZGdldD4KKzwvd2lkZ2V0PgorPGNvbm5lY3Rpb25zPgorICAgIDxjb25u
ZWN0aW9uPgorICAgICAgICA8c2VuZGVyPmJ1dHRvbl9pbnNlcnQ8L3NlbmRlcj4KKyAgICAgICAg
PHNpZ25hbD5jbGlja2VkKCk8L3NpZ25hbD4KKyAgICAgICAgPHJlY2VpdmVyPlRlbXBsYXRlc0Nv
bmZpZ3VyYXRpb248L3JlY2VpdmVyPgorICAgICAgICA8c2xvdD5idXR0b25faW5zZXJ0X2NsaWNr
ZWQoKTwvc2xvdD4KKyAgICA8L2Nvbm5lY3Rpb24+Cis8L2Nvbm5lY3Rpb25zPgorPHNsb3RzPgor
ICAgIDxzbG90PmJ1dHRvbl9pbnNlcnRfY2xpY2tlZCgpPC9zbG90PgorPC9zbG90cz4KKzxsYXlv
dXRkZWZhdWx0cyBzcGFjaW5nPSI2IiBtYXJnaW49IjExIi8+Cis8L1VJPgpJbmRleDoga21haWwv
a21maWx0ZXJhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGttYWlsL2ttZmlsdGVyYWN0aW9uLmNw
cAkocmV2aXNpb24gNTk2Njc5KQorKysga21haWwva21maWx0ZXJhY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiZm9sZGVycmVxdWVzdGVyLmgiCiB1
c2luZyBLTWFpbDo6Rm9sZGVyUmVxdWVzdGVyOwogI2luY2x1ZGUgImttbXNnYmFzZS5oIgorI2lu
Y2x1ZGUgInRlbXBsYXRlcGFyc2VyLmgiCiAjaW5jbHVkZSAibWVzc2FnZXByb3BlcnR5LmgiCiAj
aW5jbHVkZSAiYWN0aW9uc2NoZWR1bGVyLmgiCiB1c2luZyBLTWFpbDo6TWVzc2FnZVByb3BlcnR5
OwpAQCAtMTQ1MiwxNCArMTQ1MywxOSBAQAogCiAgIG1zZy0+aW5pdEZyb21NZXNzYWdlKCBhTXNn
ICk7CiAKLSAgUVN0cmluZyBzdCA9IFFTdHJpbmc6OmZyb21VdGY4KCBhTXNnLT5jcmVhdGVGb3J3
YXJkQm9keSgpICk7CisgIC8vIFFTdHJpbmcgc3QgPSBRU3RyaW5nOjpmcm9tVXRmOCggYU1zZy0+
Y3JlYXRlRm9yd2FyZEJvZHkoKSApOworICAKKyAgVGVtcGxhdGVQYXJzZXIgcGFyc2VyKCBtc2cs
IFRlbXBsYXRlUGFyc2VyOjpGb3J3YXJkLCAKKyAgICBhTXNnLT5ib2R5KCksIGZhbHNlLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlKTsKKyAgcGFyc2VyLnByb2Nlc3MoIGFNc2cgKTsKKyAgCiAgIFFDU3Ry
aW5nCiAgICAgZW5jb2RpbmcgPSBLTU1zZ0Jhc2U6OmF1dG9EZXRlY3RDaGFyc2V0KCBhTXNnLT5j
aGFyc2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBL
TU1lc3NhZ2U6OnByZWZlcnJlZENoYXJzZXRzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXNnLT5ib2R5KCkgKTsKICAgaWYoIGVuY29kaW5nLmlzRW1wdHkoKSAp
CiAgICAgZW5jb2RpbmcgPSAidXRmLTgiOwotICBRQ1N0cmluZyBzdHIgPSBLTU1zZ0Jhc2U6OmNv
ZGVjRm9yTmFtZSggZW5jb2RpbmcgKS0+ZnJvbVVuaWNvZGUoIHN0ICk7CisgIFFDU3RyaW5nIHN0
ciA9IEtNTXNnQmFzZTo6Y29kZWNGb3JOYW1lKCBlbmNvZGluZyApLT5mcm9tVW5pY29kZSggbXNn
LT5ib2R5KCkgKTsKIAogICBtc2ctPnNldENoYXJzZXQoIGVuY29kaW5nICk7CiAgIG1zZy0+c2V0
VG8oIG1QYXJhbWV0ZXIgKTsKSW5kZXg6IGttYWlsL2ttY29tcG9zZXdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga21haWwva21jb21wb3Nld2luLmNwcAkocmV2aXNpb24gNTk2Njc5KQorKysga21haWwv
a21jb21wb3Nld2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIwLDExICs2MjAsMTggQEAKICAg
d2hpbGUgKCB0cmFuc3BvcnRIaXN0b3J5LmNvdW50KCkgPiAodWludClHbG9iYWxTZXR0aW5nczo6
c2VsZigpLT5tYXhUcmFuc3BvcnRFbnRyaWVzKCkgKQogICAgIHRyYW5zcG9ydEhpc3RvcnkucmVt
b3ZlKCB0cmFuc3BvcnRIaXN0b3J5Lmxhc3QoKSApOwogICBtVHJhbnNwb3J0LT5pbnNlcnRTdHJp
bmdMaXN0KCB0cmFuc3BvcnRIaXN0b3J5ICk7Ci0gIG1UcmFuc3BvcnQtPnNldEN1cnJlbnRUZXh0
KCBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT5kZWZhdWx0VHJhbnNwb3J0KCkgKTsKLSAgaWYgKCBt
QnRuVHJhbnNwb3J0LT5pc0NoZWNrZWQoKSApIHsKLSAgICBzZXRUcmFuc3BvcnQoIGN1cnJlbnRU
cmFuc3BvcnQgKTsKKyAgaWYgKG1CdG5UcmFuc3BvcnQtPmlzQ2hlY2tlZCgpICYmICFjdXJyZW50
VHJhbnNwb3J0LmlzRW1wdHkoKSkKKyAgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVRyYW5z
cG9ydC0+Y291bnQoKTsgaSsrKQorICAgICAgaWYgKG1UcmFuc3BvcnQtPnRleHQoaSkgPT0gY3Vy
cmVudFRyYW5zcG9ydCkKKyAgICAgICAgbVRyYW5zcG9ydC0+c2V0Q3VycmVudEl0ZW0oaSk7Cisg
ICAgbVRyYW5zcG9ydC0+c2V0RWRpdFRleHQoIGN1cnJlbnRUcmFuc3BvcnQgKTsKICAgfQogCisg
IGlmICggIW1CdG5UcmFuc3BvcnQtPmlzQ2hlY2tlZCgpICkgeworICAgIG1UcmFuc3BvcnQtPnNl
dEN1cnJlbnRUZXh0KCBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT5kZWZhdWx0VHJhbnNwb3J0KCkg
KTsKKyAgfQorCiAgIFFTdHJpbmcgZmNjTmFtZSA9ICIiOwogICBpZiAoIG1CdG5GY2MtPmlzQ2hl
Y2tlZCgpICkgewogICAgIGZjY05hbWUgPSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT5wcmV2aW91
c0ZjYygpOwpAQCAtMTY1MiwzNyArMTY1OSw2IEBACiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLXZvaWQgS01Db21wb3NlV2luOjpzZXRUcmFuc3BvcnQoIGNvbnN0IFFTdHJpbmcgJiB0cmFu
c3BvcnQgKQotewotICBrZERlYnVnKDUwMDYpIDw8ICJLTUNvbXBvc2VXaW46OnNldFRyYW5zcG9y
dCggXCIiIDw8IHRyYW5zcG9ydCA8PCAiXCIgKSIgPDwgZW5kbDsKLSAgLy8gRG9uJ3QgY2hhbmdl
IHRoZSB0cmFuc3BvcnQgY29tYm9ib3ggaWYgdHJhbnNwb3J0IGlzIGVtcHR5Ci0gIGlmICggdHJh
bnNwb3J0LmlzRW1wdHkoKSApCi0gICAgcmV0dXJuOwotCi0gIGJvb2wgdHJhbnNwb3J0Rm91bmQg
PSBmYWxzZTsKLSAgZm9yICggaW50IGkgPSAwOyBpIDwgbVRyYW5zcG9ydC0+Y291bnQoKTsgKytp
ICkgewotICAgIGlmICggbVRyYW5zcG9ydC0+dGV4dChpKSA9PSB0cmFuc3BvcnQgKSB7Ci0gICAg
ICB0cmFuc3BvcnRGb3VuZCA9IHRydWU7Ci0gICAgICBtVHJhbnNwb3J0LT5zZXRDdXJyZW50SXRl
bShpKTsKLSAgICAgIGtkRGVidWcoNTAwNikgPDwgInRyYW5zcG9ydCBmb3VuZCwgaXQncyBuby4g
IiA8PCBpIDw8ICIgaW4gdGhlIGxpc3QiIDw8IGVuZGw7Ci0gICAgICBicmVhazsKLSAgICB9Ci0g
IH0KLSAgaWYgKCAhdHJhbnNwb3J0Rm91bmQgKSB7IC8vIHVua25vd24gdHJhbnNwb3J0Ci0gICAg
a2REZWJ1Zyg1MDA2KSA8PCAidW5rbm93biB0cmFuc3BvcnQgXCIiIDw8IHRyYW5zcG9ydCA8PCAi
XCIiIDw8IGVuZGw7Ci0gICAgaWYgKCB0cmFuc3BvcnQuc3RhcnRzV2l0aCgic210cDovLyIpIHx8
IHRyYW5zcG9ydC5zdGFydHNXaXRoKCJzbXRwczovLyIpIHx8Ci0gICAgICAgICB0cmFuc3BvcnQu
c3RhcnRzV2l0aCgiZmlsZTovLyIpICkgewotICAgICAgLy8gc2V0IGN1c3RvbSB0cmFuc3BvcnQK
LSAgICAgIG1UcmFuc3BvcnQtPnNldEVkaXRUZXh0KCB0cmFuc3BvcnQgKTsKLSAgICB9Ci0gICAg
ZWxzZSB7Ci0gICAgICAvLyBuZWl0aGVyIGtub3duIG5vciBjdXN0b20gdHJhbnNwb3J0IC0+IHVz
ZSBkZWZhdWx0IHRyYW5zcG9ydAotICAgICAgbVRyYW5zcG9ydC0+c2V0Q3VycmVudFRleHQoIEds
b2JhbFNldHRpbmdzOjpzZWxmKCktPmRlZmF1bHRUcmFuc3BvcnQoKSApOwotICAgIH0KLSAgfQot
fQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB2b2lkIEtNQ29tcG9zZVdpbjo6c2V0TXNnKEtN
TWVzc2FnZSogbmV3TXNnLCBib29sIG1heUF1dG9TaWduLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGFsbG93RGVjcnlwdGlvbiwgYm9vbCBpc01vZGlmaWVkKQogewpAQCAtMTgwMiw3
ICsxNzc4LDEyIEBACiAKICAgUVN0cmluZyB0cmFuc3BvcnQgPSBuZXdNc2ctPmhlYWRlckZpZWxk
KCJYLUtNYWlsLVRyYW5zcG9ydCIpOwogICBpZiAoIW1CdG5UcmFuc3BvcnQtPmlzQ2hlY2tlZCgp
ICYmICF0cmFuc3BvcnQuaXNFbXB0eSgpKQotICAgIHNldFRyYW5zcG9ydCggdHJhbnNwb3J0ICk7
CisgIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1UcmFuc3BvcnQtPmNvdW50KCk7IGkrKykK
KyAgICAgIGlmIChtVHJhbnNwb3J0LT50ZXh0KGkpID09IHRyYW5zcG9ydCkKKyAgICAgICAgbVRy
YW5zcG9ydC0+c2V0Q3VycmVudEl0ZW0oaSk7CisgICAgbVRyYW5zcG9ydC0+c2V0RWRpdFRleHQo
IHRyYW5zcG9ydCApOworICB9CiAKICAgaWYgKCFtQnRuRmNjLT5pc0NoZWNrZWQoKSkKICAgewpA
QCAtNDMxMiwxMSArNDI5MywyNCBAQAogICAgIGlmICggdHJhbnNwLmlzRW1wdHkoKSApCiAgICAg
ewogICAgICAgbU1zZy0+cmVtb3ZlSGVhZGVyRmllbGQoIlgtS01haWwtVHJhbnNwb3J0Iik7Ci0g
ICAgICB0cmFuc3AgPSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT5kZWZhdWx0VHJhbnNwb3J0KCk7
CisgICAgICB0cmFuc3AgPSBtVHJhbnNwb3J0LT50ZXh0KDApOwogICAgIH0KICAgICBlbHNlCiAg
ICAgICBtTXNnLT5zZXRIZWFkZXJGaWVsZCgiWC1LTWFpbC1UcmFuc3BvcnQiLCB0cmFuc3ApOwot
ICAgIHNldFRyYW5zcG9ydCggdHJhbnNwICk7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAg
IGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBtVHJhbnNwb3J0LT5jb3VudCgpOyBpKyspIHsK
KyAgICAgIGlmIChtVHJhbnNwb3J0LT50ZXh0KGkpID09IHRyYW5zcCkgeworICAgICAgICBmb3Vu
ZCA9IHRydWU7CisgICAgICAgIG1UcmFuc3BvcnQtPnNldEN1cnJlbnRJdGVtKGkpOworICAgICAg
ICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGZvdW5kID09IGZhbHNlKSB7CisgICAg
ICBpZiAoaSA9PSBtVHJhbnNwb3J0LT5tYXhDb3VudCgpKSBtVHJhbnNwb3J0LT5zZXRNYXhDb3Vu
dChpICsgMSk7CisgICAgICBtVHJhbnNwb3J0LT5pbnNlcnRJdGVtKHRyYW5zcCxpKTsKKyAgICAg
IG1UcmFuc3BvcnQtPnNldEN1cnJlbnRJdGVtKGkpOworICAgIH0KICAgfQogCiAgIG1EaWN0aW9u
YXJ5Q29tYm8tPnNldEN1cnJlbnRCeURpY3Rpb25hcnkoIGlkZW50LmRpY3Rpb25hcnkoKSApOwpA
QCAtNDQ0MSw4ICs0NDM1LDE1IEBACiB2b2lkIEtNQ29tcG9zZVdpbjo6c2V0UmVwbHlGb2N1cygg
Ym9vbCBoYXNNZXNzYWdlICkKIHsKICAgbUVkaXRvci0+c2V0Rm9jdXMoKTsKLSAgaWYgKCBoYXNN
ZXNzYWdlICkKLSAgICBtRWRpdG9yLT5zZXRDdXJzb3JQb3NpdGlvbiggMSwgMCApOworICBpZiAo
IGhhc01lc3NhZ2UgKSB7CisgICAgaWYoIG1Nc2ctPmdldEN1cnNvclBvcygpICkgeworICAgICAg
ICAvLyBrZERlYnVnKCkgPDwgIkN1cnNvciBwb3NpdGlvbiA6ICIgPDwgbU1zZy0+Z2V0Q3Vyc29y
UG9zKCkgPDwgZW5kbDsKKyAgICAgICAgbUVkaXRvci0+c2V0Q3Vyc29yUG9zaXRpb25Gcm9tU3Rh
cnQoICh1bnNpZ25lZCBpbnQpIG1Nc2ctPmdldEN1cnNvclBvcygpICk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8ga2REZWJ1ZygpIDw8ICJObyBDdXJzb3IgcG9zaXRpb24iIDw8IGVuZGw7Cisg
ICAgICAgIG1FZGl0b3ItPnNldEN1cnNvclBvc2l0aW9uKCAxLCAwICk7CisgICAgfTsKKyAgfTsK
IH0KIAogdm9pZCBLTUNvbXBvc2VXaW46OnNldEZvY3VzVG9TdWJqZWN0KCkKSW5kZXg6IGttYWls
L2ttZm9sZGVyZGlhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC9rbWZvbGRlcmRpYS5jcHAJKHJl
dmlzaW9uIDU5NjY3OSkKKysrIGttYWlsL2ttZm9sZGVyZGlhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgPGtjb25maWcuaD4KICNpbmNsdWRlIDxrZGVidWcu
aD4KICNpbmNsdWRlIDxrbGlzdHZpZXcuaD4KKyNpbmNsdWRlIDxrcHVzaGJ1dHRvbi5oPgogCiAj
aW5jbHVkZSA8cWNoZWNrYm94Lmg+CiAjaW5jbHVkZSA8cWxheW91dC5oPgpAQCAtNjksNyArNzAs
MTEgQEAKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxxaGJ1dHRvbmdyb3VwLmg+CiAj
aW5jbHVkZSA8cXJhZGlvYnV0dG9uLmg+CisjaW5jbHVkZSA8cXRleHRlZGl0Lmg+CiAKKyNpbmNs
dWRlICJ0ZW1wbGF0ZXNjb25maWd1cmF0aW9uaW1wbC5oIgorI2luY2x1ZGUgInRlbXBsYXRlc2Nv
bmZpZ3VyYXRpb25fa2ZnLmgiCisKICNpbmNsdWRlICJrbWZvbGRlcmRpYS5tb2MiCiAKIHVzaW5n
IG5hbWVzcGFjZSBLTWFpbDsKQEAgLTExNSw2ICsxMjAsOSBAQAogICBib3ggPSBhZGRWQm94UGFn
ZSggaTE4bigiR2VuZXJhbCIpICk7CiAgIHRhYiA9IG5ldyBGb2xkZXJEaWFHZW5lcmFsVGFiKCB0
aGlzLCBhTmFtZSwgYm94ICk7CiAgIGFkZFRhYiggdGFiICk7CisgIGJveCA9IGFkZFZCb3hQYWdl
KCBpMThuKCJUZW1wbGF0ZXMiKSApOworICB0YWIgPSBuZXcgRm9sZGVyRGlhVGVtcGxhdGVzVGFi
KCB0aGlzLCBhTmFtZSwgYm94ICk7CisgIGFkZFRhYiggdGFiICk7CiAKICAgS01Gb2xkZXIqIHJl
ZkZvbGRlciA9IG1Gb2xkZXIgPyBtRm9sZGVyIDogbVBhcmVudEZvbGRlcjsKICAgS01Gb2xkZXJU
eXBlIGZvbGRlclR5cGUgPSByZWZGb2xkZXIgPyByZWZGb2xkZXItPmZvbGRlclR5cGUoKSA6IEtN
Rm9sZGVyVHlwZVVua25vd247CkBAIC02NDcsMyArNjU1LDg2IEBACiB7CiAgICAgbVVucmVhZElj
b25CdXR0b24tPnNldEljb24oIGljb24gKTsKIH0KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitL
TWFpbDo6Rm9sZGVyRGlhVGVtcGxhdGVzVGFiOjpGb2xkZXJEaWFUZW1wbGF0ZXNUYWIoIEtNRm9s
ZGVyRGlhbG9nKiBkbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUVN0cmluZyYgYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUVdpZGdldCogcGFyZW50LCBjb25zdCBjaGFyKiBuYW1l
ICkKKyAgOiBGb2xkZXJEaWFUYWIoIHBhcmVudCwgbmFtZSApLCBtRGxnKCBkbGcgKQoreworCisg
IG1Jc0xvY2FsU3lzdGVtRm9sZGVyID0gbURsZy0+Zm9sZGVyKCktPmlzU3lzdGVtRm9sZGVyKCkg
JiYKKyAgICAgICBtRGxnLT5mb2xkZXIoKS0+Zm9sZGVyVHlwZSgpICE9IEtNRm9sZGVyVHlwZUlt
YXAgJiYKKyAgICAgICBtRGxnLT5mb2xkZXIoKS0+Zm9sZGVyVHlwZSgpICE9IEtNRm9sZGVyVHlw
ZUNhY2hlZEltYXA7CisKKyAgUVZCb3hMYXlvdXQgKnRvcExheW91dCA9IG5ldyBRVkJveExheW91
dCggdGhpcywgMCwgS0RpYWxvZzo6c3BhY2luZ0hpbnQoKSApOworICAKKyAgbUN1c3RvbSA9IG5l
dyBRQ2hlY2tCb3goIGkxOG4oIiZVc2UgY3VzdG9tIG1lc3NhZ2UgdGVtcGxhdGVzIiksIHRoaXMp
OworICB0b3BMYXlvdXQtPmFkZFdpZGdldCggbUN1c3RvbSApOworICAKKyAgbVdpZGdldCA9IG5l
dyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uKCB0aGlzICk7CisgIG1XaWRnZXQtPnNldEVuYWJsZWQo
IGZhbHNlICk7CisgIHRvcExheW91dC0+YWRkV2lkZ2V0KCBtV2lkZ2V0ICk7CisgIAorICBRSEJv
eExheW91dCAqYnRucyA9IG5ldyBRSEJveExheW91dCggdG9wTGF5b3V0LCBLRGlhbG9nOjpzcGFj
aW5nSGludCgpICk7CisgIG1Db3B5R2xvYmFsID0gbmV3IEtQdXNoQnV0dG9uKCBpMThuKCImQ29w
eSBnbG9iYWwgdGVtcGxhdGVzIiksIHRoaXMpOworICBtQ29weUdsb2JhbC0+c2V0RW5hYmxlZCgg
ZmFsc2UgKTsKKyAgYnRucy0+YWRkV2lkZ2V0KCBtQ29weUdsb2JhbCApOworICAKKyAgdG9wTGF5
b3V0LT5hZGRTdHJldGNoKCAyMDAgKTsgLy8gd2UgYXJlIG1vcmUgaW1wb3J0YW50IHRoYW4gZ2Vu
ZXJhbCB0YWIKKworICBjb25uZWN0KCBtQ3VzdG9tLCBTSUdOQUwodG9nZ2xlZChib29sKSksCisg
ICAgICAgIG1XaWRnZXQsIFNMT1Qoc2V0RW5hYmxlZChib29sKSkgKTsKKyAgY29ubmVjdCggbUN1
c3RvbSwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLAorICAgICAgICBtQ29weUdsb2JhbCwgU0xPVChz
ZXRFbmFibGVkKGJvb2wpKSApOworICAKKyAgY29ubmVjdCggbUNvcHlHbG9iYWwsIFNJR05BTChj
bGlja2VkKCkpLAorICAgICAgICB0aGlzLCBTTE9UKHNsb3RDb3B5R2xvYmFsKCkpICk7CisKKyAg
aW5pdGlhbGl6ZVdpdGhWYWx1ZXNGcm9tRm9sZGVyKCBtRGxnLT5mb2xkZXIoKSApOworCisgIGNv
bm5lY3QoIG1XaWRnZXQsIFNJR05BTCggY2hhbmdlZCgpICksCisgICAgICAgICAgIHRoaXMsIFNM
T1QoIHNsb3RFbWl0Q2hhbmdlZCggdm9pZCApICkgKTsKK30KKwordm9pZCBGb2xkZXJEaWFUZW1w
bGF0ZXNUYWI6OmxvYWQoKQoreworICAKK30KKwordm9pZCBGb2xkZXJEaWFUZW1wbGF0ZXNUYWI6
OmluaXRpYWxpemVXaXRoVmFsdWVzRnJvbUZvbGRlciggS01Gb2xkZXIqIGZvbGRlciApIHsKKyAg
aWYgKCAhZm9sZGVyICkKKyAgICByZXR1cm47CisKKyAgUVN0cmluZyBmaWQgPSBmb2xkZXItPmlk
U3RyaW5nKCk7CisgIAorICBUZW1wbGF0ZXMgdChmaWQpOworCisgIG1DdXN0b20tPnNldENoZWNr
ZWQodC51c2VDdXN0b21UZW1wbGF0ZXMoKSk7CisgIAorICBtV2lkZ2V0LT5sb2FkRnJvbUZvbGRl
cihmaWQpOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitib29sIEZvbGRlckRpYVRlbXBs
YXRlc1RhYjo6c2F2ZSgpCit7CisgIEtNRm9sZGVyKiBmb2xkZXIgPSBtRGxnLT5mb2xkZXIoKTsK
KyAgCisgIFFTdHJpbmcgZmlkID0gZm9sZGVyLT5pZFN0cmluZygpOworICBUZW1wbGF0ZXMgdChm
aWQpOworICAKKyAga2REZWJ1ZygpIDw8ICJ1c2UgY3VzdG9tIHRlbXBsYXRlcyBmb3IgZm9sZGVy
ICIgPDwgZmlkIDw8ICI6ICIgPDwgbUN1c3RvbS0+aXNDaGVja2VkKCkgPDwgZW5kbDsKKyAgdC5z
ZXRVc2VDdXN0b21UZW1wbGF0ZXMobUN1c3RvbS0+aXNDaGVja2VkKCkpOworICB0LndyaXRlQ29u
ZmlnKCk7CisgIAorICBtV2lkZ2V0LT5zYXZlVG9Gb2xkZXIoZmlkKTsKKyAgCisgIHJldHVybiB0
cnVlOworfQorCisKK3ZvaWQgRm9sZGVyRGlhVGVtcGxhdGVzVGFiOjpzbG90RW1pdENoYW5nZWQo
KSB7fTsKKwordm9pZCBGb2xkZXJEaWFUZW1wbGF0ZXNUYWI6OnNsb3RDb3B5R2xvYmFsKCkgewor
ICBtV2lkZ2V0LT5sb2FkRnJvbUdsb2JhbCgpOworfTsKSW5kZXg6IGttYWlsL2NvbmZpZ3VyZWRp
YWxvZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwvY29uZmlndXJlZGlhbG9nLmNwcAkocmV2aXNp
b24gNTk2Njc5KQorKysga21haWwvY29uZmlndXJlZGlhbG9nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiZ2xvYmFsc2V0dGluZ3MuaCIKICNpbmNsdWRl
ICJyZXBseXBocmFzZXMuaCIKKyNpbmNsdWRlICJ0ZW1wbGF0ZXNjb25maWd1cmF0aW9uX2tmZy5o
IgogCiAvLyBvdGhlciBLTWFpbCBoZWFkZXJzOgogI2luY2x1ZGUgImtta2VybmVsLmgiCkBAIC00
OSw2ICs1MCw3IEBACiAjaW5jbHVkZSA8Y29tcG9zZXJjcnlwdG9jb25maWd1cmF0aW9uLmg+CiAj
aW5jbHVkZSA8d2FybmluZ2NvbmZpZ3VyYXRpb24uaD4KICNpbmNsdWRlIDxzbWltZWNvbmZpZ3Vy
YXRpb24uaD4KKyNpbmNsdWRlICJ0ZW1wbGF0ZXNjb25maWd1cmF0aW9uaW1wbC5oIgogI2luY2x1
ZGUgImZvbGRlcnJlcXVlc3Rlci5oIgogdXNpbmcgS01haWw6OkZvbGRlclJlcXVlc3RlcjsKICNp
bmNsdWRlICJhY2NvdW50Y29tYm9ib3guaCIKQEAgLTI0NDYsMTAgKzI0NDgsMTYgQEAKICAgLy8K
ICAgLy8gIlBocmFzZXMiIHRhYjoKICAgLy8KLSAgbVBocmFzZXNUYWIgPSBuZXcgUGhyYXNlc1Rh
YigpOwotICBhZGRUYWIoIG1QaHJhc2VzVGFiLCBpMThuKCImUGhyYXNlcyIpICk7CisgIC8vIG1Q
aHJhc2VzVGFiID0gbmV3IFBocmFzZXNUYWIoKTsKKyAgLy8gYWRkVGFiKCBtUGhyYXNlc1RhYiwg
aTE4bigiJlBocmFzZXMiKSApOwogCiAgIC8vCisgIC8vICJUZW1wbGF0ZXMiIHRhYjoKKyAgLy8K
KyAgbVRlbXBsYXRlc1RhYiA9IG5ldyBUZW1wbGF0ZXNUYWIoKTsKKyAgYWRkVGFiKCBtVGVtcGxh
dGVzVGFiLCBpMThuKCImVGVtcGxhdGVzIikgKTsKKyAgCisgIC8vCiAgIC8vICJTdWJqZWN0IiB0
YWI6CiAgIC8vCiAgIG1TdWJqZWN0VGFiID0gbmV3IFN1YmplY3RUYWIoKTsKQEAgLTI5MDMsNiAr
MjkxMSwzMSBAQAogICB9CiB9CiAKK1FTdHJpbmcgQ29tcG9zZXJQYWdlOjpUZW1wbGF0ZXNUYWI6
OmhlbHBBbmNob3IoKSBjb25zdCB7CisgIHJldHVybiBRU3RyaW5nOjpmcm9tTGF0aW4xKCJjb25m
aWd1cmUtY29tcG9zZXItdGVtcGxhdGVzIik7Cit9CisKK0NvbXBvc2VyUGFnZVRlbXBsYXRlc1Rh
Yjo6Q29tcG9zZXJQYWdlVGVtcGxhdGVzVGFiKCBRV2lkZ2V0ICogcGFyZW50LCBjb25zdCBjaGFy
ICogbmFtZSApCisgIDogQ29uZmlnTW9kdWxlVGFiICggcGFyZW50LCBuYW1lICkKK3sKKyAgUVZC
b3hMYXlvdXQqIHZsYXkgPSBuZXcgUVZCb3hMYXlvdXQoIHRoaXMsIDAsIDAgKTsKKworICBtV2lk
Z2V0ID0gbmV3IFRlbXBsYXRlc0NvbmZpZ3VyYXRpb24oIHRoaXMgKTsKKyAgdmxheS0+YWRkV2lk
Z2V0KCBtV2lkZ2V0ICk7CisgIHZsYXktPmFkZFN0cmV0Y2goMTAwKTsKKworICBjb25uZWN0KCBt
V2lkZ2V0LCBTSUdOQUwoIGNoYW5nZWQoKSApLAorICAgICAgICAgICB0aGlzLCBTTE9UKCBzbG90
RW1pdENoYW5nZWQoIHZvaWQgKSApICk7Cit9CisKK3ZvaWQgQ29tcG9zZXJQYWdlOjpUZW1wbGF0
ZXNUYWI6OmRvTG9hZEZyb21HbG9iYWxTZXR0aW5ncygpIHsKKyAgICBtV2lkZ2V0LT5sb2FkRnJv
bUdsb2JhbCgpOworfQorCit2b2lkIENvbXBvc2VyUGFnZTo6VGVtcGxhdGVzVGFiOjpzYXZlKCkg
eworICAgIG1XaWRnZXQtPnNhdmVUb0dsb2JhbCgpOworfQorCiBRU3RyaW5nIENvbXBvc2VyUGFn
ZTo6U3ViamVjdFRhYjo6aGVscEFuY2hvcigpIGNvbnN0IHsKICAgcmV0dXJuIFFTdHJpbmc6OmZy
b21MYXRpbjEoImNvbmZpZ3VyZS1jb21wb3Nlci1zdWJqZWN0Iik7CiB9CkluZGV4OiBrbWFpbC9r
bWVkaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC9rbWVkaXQuaAkocmV2aXNpb24gNTk2Njc5KQor
Kysga21haWwva21lZGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDkgQEAKICAgdm9p
ZCBkZWxldGVBdXRvU3BlbGxDaGVja2luZygpOwogCiAgIHVuc2lnbmVkIGludCBsaW5lQnJlYWtD
b2x1bW4oKSBjb25zdDsKKyAgCisgIC8qKiBzZXQgY3Vyc29yIHRvIGFic29sdXRlIHBvc2l0aW9u
IHBvcyAqLworICB2b2lkIHNldEN1cnNvclBvc2l0aW9uRnJvbVN0YXJ0KHVuc2lnbmVkIGludCBw
b3MpOwogCiBzaWduYWxzOgogICB2b2lkIHNwZWxsY2hlY2tfZG9uZShpbnQgcmVzdWx0KTsKSW5k
ZXg6IGttYWlsL2ttZm9sZGVyZGlhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwva21mb2xkZXJkaWEu
aAkocmV2aXNpb24gNTk2Njc5KQorKysga21haWwva21mb2xkZXJkaWEuaAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNiArNTEsOCBAQAogY2xhc3MgS01Gb2xkZXJEaWFsb2c7CiBjbGFzcyBLTUZvbGRl
clRyZWU7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUUd1YXJkZWRQdHI7CitjbGFzcyBU
ZW1wbGF0ZXNDb25maWd1cmF0aW9uOworY2xhc3MgS1B1c2hCdXR0b247CiAKIG5hbWVzcGFjZSBL
TWFpbCB7CiAgIGNsYXNzIEZvbGRlclJlcXVlc3RlcjsgCkBAIC0xNTAsNiArMTUyLDM5IEBACiAg
IGJvb2wgbUlzTG9jYWxTeXN0ZW1Gb2xkZXI7CiB9OwogCisvKioKKyAqICJUZW1wbGF0ZXMiIHRh
YiBpbiB0aGUgZm9sZGVyIGRpYWxvZworICogSW50ZXJuYWwgY2xhc3MsIG9ubHkgdXNlZCBieSBL
TUZvbGRlckRpYWxvZworICovCitjbGFzcyBGb2xkZXJEaWFUZW1wbGF0ZXNUYWIgOiBwdWJsaWMg
Rm9sZGVyRGlhVGFiCit7CisgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgRm9sZGVyRGlhVGVtcGxh
dGVzVGFiKCBLTUZvbGRlckRpYWxvZyogZGxnLAorICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBRU3RyaW5nJiBhTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgUVdpZGdldCogcGFyZW50
LCBjb25zdCBjaGFyKiBuYW1lID0gMCApOworCisgIHZpcnR1YWwgdm9pZCBsb2FkKCk7CisgIHZp
cnR1YWwgYm9vbCBzYXZlKCk7CisKK3B1YmxpYyBzbG90czoKKyAgdm9pZCBzbG90RW1pdENoYW5n
ZWQoKTsgLy8gZG8gbm90aGluZyBmb3Igbm93CisgIAorICB2b2lkIHNsb3RDb3B5R2xvYmFsKCk7
CisKK3ByaXZhdGU6CisgIHZvaWQgaW5pdGlhbGl6ZVdpdGhWYWx1ZXNGcm9tRm9sZGVyKCBLTUZv
bGRlciogZm9sZGVyICk7CisKK3ByaXZhdGU6CisgIFFDaGVja0JveCogbUN1c3RvbTsKKyAgVGVt
cGxhdGVzQ29uZmlndXJhdGlvbiogbVdpZGdldDsKKyAgS1B1c2hCdXR0b24qIG1Db3B5R2xvYmFs
OworCisgIEtNRm9sZGVyRGlhbG9nKiBtRGxnOworICBib29sIG1Jc0xvY2FsU3lzdGVtRm9sZGVy
OworfTsKKwogfSAvLyBlbmQgb2YgbmFtZXNwYWNlIEtNYWlsCiAKIC8qKgpJbmRleDoga21haWwv
dGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC90ZW1wbGF0
ZXNjb25maWd1cmF0aW9uaW1wbC5oCShyZXZpc2lvbiAwKQorKysga21haWwvdGVtcGxhdGVzY29u
ZmlndXJhdGlvbmltcGwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyogICAtKi0g
bW9kZTogQysrOyBjLWZpbGUtc3R5bGU6ICJnbnUiIC0qLQorICogICBrbWFpbDogS0RFIG1haWwg
Y2xpZW50CisgKiAgIFRoaXMgZmlsZTogQ29weXJpZ2h0IChDKSAyMDA2IERtaXRyeSBNb3Jvemhu
aWtvdgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRo
aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisj
aWZuZGVmIFRFTVBMQVRFU0NPTkZJR1VSQVRJT05JTVBMX0gKKyNkZWZpbmUgVEVNUExBVEVTQ09O
RklHVVJBVElPTklNUExfSAorCisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbi5oIgor
CitjbGFzcyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOiBwdWJsaWMgVGVtcGxhdGVzQ29uZmlndXJh
dGlvblN0dWIgeworICAgIFFfT0JKRUNUCisgICAgCisgICAgcHVibGljOgorICAgIAorCVRlbXBs
YXRlc0NvbmZpZ3VyYXRpb24oUVdpZGdldCAqcGFyZW50ID0gMCwgY29uc3QgY2hhciAqbmFtZSA9
IDApOworCQorCXZvaWQgbG9hZEZyb21HbG9iYWwoKTsKKwl2b2lkIHNhdmVUb0dsb2JhbCgpOwor
CXZvaWQgbG9hZEZyb21Gb2xkZXIoUVN0cmluZyBpZCk7CisJdm9pZCBzYXZlVG9Gb2xkZXIoUVN0
cmluZyBpZCk7CisJCisJdm9pZCBpbnNlcnRDb21tYW5kKFFTdHJpbmcgY21kLCBpbnQgYWRqdXN0
Q3Vyc29yID0gMCk7CisJCisJc3RhdGljIFFTdHJpbmcgZGVmYXVsdE5ld01lc3NhZ2UoKTsKKwlz
dGF0aWMgUVN0cmluZyBkZWZhdWx0UmVwbHkoKTsKKwlzdGF0aWMgUVN0cmluZyBkZWZhdWx0UmVw
bHlBbGwoKTsKKwlzdGF0aWMgUVN0cmluZyBkZWZhdWx0Rm9yd2FyZCgpOworCXN0YXRpYyBRU3Ry
aW5nIGRlZmF1bHRRdW90ZVN0cmluZygpOworCQorICAgIHB1YmxpYyBzbG90czoKKyAgICAKKwl2
b2lkIGJ1dHRvbl9pbnNlcnRfY2xpY2tlZCgpOworCQorCXZvaWQgc2xvdFRleHRDaGFuZ2VkKCk7
CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgCisgICAgICAgIGVudW0ge0NEbmwgPSAxLCBDUmVtLCBD
SW5zZXJ0LCBDU3lzdGVtLCBDUXVvdGVQaXBlLCBDUXVvdGUsIENRSGVhZGVycywgQ0hlYWRlcnMs
IAorICAgICAgICAgICAgQ1RleHRQaXBlLCBDTXNnUGlwZSwgQ0JvZHlQaXBlLCBDQ2xlYXJQaXBl
LCBDVGV4dCwgCisgICAgICAgICAgICBDVG9BZGRyLCBDVG9OYW1lLCBDRnJvbUFkZHIsIENGcm9t
TmFtZSwgQ0Z1bGxTdWJqZWN0LCBDTXNnSWQsIAorICAgICAgICAgICAgQ09IZWFkZXIsIENIZWFk
ZXIsIENPVG9BZGRyLCBDT1RvTmFtZSwgQ09Gcm9tQWRkciwgQ09Gcm9tTmFtZSwgQ09GdWxsU3Vi
amVjdCwgCisgICAgICAgICAgICBDT01zZ0lkLCBDRGF0ZUVuLCBDRGF0ZVNob3J0LCBDRGF0ZSwg
Q0RvdywgQ1RpbWVMb25nRW4sIENUaW1lTG9uZywgQ1RpbWUsIAorICAgICAgICAgICAgQ09EYXRl
RW4sIENPRGF0ZVNob3J0LCBDT0RhdGUsIENPRG93LCBDT1RpbWVMb25nRW4sIENPVGltZUxvbmcs
IENPVGltZSwgCisgICAgICAgICAgICBDQmxhbmssIENOb3AsIENDbGVhciwgQ0RlYnVnLCBDRGVi
dWdPZmYsIENUb0ZOYW1lLCBDVG9MTmFtZSwgQ0Zyb21GTmFtZSwgQ0Zyb21MTmFtZSwgCisgICAg
ICAgICAgICBDT1RvRk5hbWUsIENPVG9MTmFtZSwgQ09Gcm9tRk5hbWUsIENPRnJvbUxOYW1lLCBD
Q3Vyc29yfTsKKyAgICAKKyAgICBzaWduYWxzOgorICAgIAorICAgICAgICB2b2lkIGNoYW5nZWQo
KTsKKyAgICAKK307CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18160</attachid>
            <date>2006-10-18 10:12:02 +0000</date>
            <delta_ts>2006-10-18 10:12:02 +0000</delta_ts>
            <desc>Thebat-like template engine for kmail</desc>
            <filename>kmail-templates-20061018-1.diff</filename>
            <type>text/plain</type>
            <size>88095</size>
            <attacher name="Dmitry Morozhnikov">dmiceman</attacher>
            
              <data encoding="base64">SW5kZXg6IGttYWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb25fa2ZnLmtjZmdjCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGttYWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb25fa2ZnLmtjZmdjCShyZXZpc2lvbiAwKQor
Kysga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcua2NmZ2MJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNSBAQAorRmlsZT10ZW1wbGF0ZXNjb25maWd1cmF0aW9uX2tmZy5rY2ZnCitDbGFz
c05hbWU9VGVtcGxhdGVzCitNdXRhdG9ycz10cnVlCitJdGVtQWNjZXNzb3JzPXRydWUKK1NldFVz
ZXJUZXh0cz10cnVlCkluZGV4OiBrbWFpbC90ZW1wbGF0ZXBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga21haWwvdGVtcGxhdGVwYXJzZXIuY3BwCShyZXZpc2lvbiAwKQorKysga21haWwvdGVtcGxh
dGVwYXJzZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkyNCBAQAorLyogICAtKi0gbW9k
ZTogQysrOyBjLWZpbGUtc3R5bGU6ICJnbnUiIC0qLQorICogICBrbWFpbDogS0RFIG1haWwgY2xp
ZW50CisgKiAgIFRoaXMgZmlsZTogQ29weXJpZ2h0IChDKSAyMDA2IERtaXRyeSBNb3JvemhuaWtv
dgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IK
KyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMg
cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5j
bHVkZSA8cXN0cmluZy5oPgorI2luY2x1ZGUgPHFkYXRldGltZS5oPgorI2luY2x1ZGUgPGtsb2Nh
bGUuaD4KKyNpbmNsdWRlIDxrY2FsZW5kYXJzeXN0ZW0uaD4KKyNpbmNsdWRlIDxrbWltZV91dGls
Lmg+CisjaW5jbHVkZSA8a2dsb2JhbC5oPgorI2luY2x1ZGUgPGtwcm9jZXNzLmg+CisjaW5jbHVk
ZSA8cXJlZ2V4cC5oPgorI2luY2x1ZGUgPHFmaWxlLmg+CisjaW5jbHVkZSA8a21lc3NhZ2Vib3gu
aD4KKyNpbmNsdWRlIDxrc2hlbGwuaD4KKyNpbmNsdWRlIDxxZmlsZWluZm8uaD4KKworI2luY2x1
ZGUgImttbWVzc2FnZS5oIgorI2luY2x1ZGUgImttbXNnYmFzZS5oIgorI2luY2x1ZGUgImttZm9s
ZGVyLmgiCisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcuaCIKKyNpbmNsdWRl
ICJnbG9iYWxzZXR0aW5nc19iYXNlLmgiCisKKyNpbmNsdWRlICJ0ZW1wbGF0ZXBhcnNlci5oIgor
CisjZGVmaW5lIFFVT1RFUkUgIlwiKC4qKVwiIgorCitUZW1wbGF0ZVBhcnNlcjo6VGVtcGxhdGVQ
YXJzZXIoS01NZXNzYWdlKiBhbXNnLCBNb2RlIGFtb2RlLCBRU3RyaW5nIGFzZWxlY3Rpb24sIAor
ICAgICAgICAgICAgYm9vbCBhc21hcnRRdW90ZSwgYm9vbCBhbm9RdW90ZSwgYm9vbCBhYWxsb3dE
ZWNyeXB0aW9uLCBib29sIGFzZWxlY3Rpb25Jc0JvZHkpIDoKKyAgICAgICAgICAgIG1vZGUoYW1v
ZGUpLCBzZWxlY3Rpb24oYXNlbGVjdGlvbiksIAorICAgICAgICAgICAgc21hcnRRdW90ZShhc21h
cnRRdW90ZSksIG5vUXVvdGUoYW5vUXVvdGUpLCAKKyAgICAgICAgICAgIGFsbG93RGVjcnlwdGlv
bihhYWxsb3dEZWNyeXB0aW9uKSwgc2VsZWN0aW9uSXNCb2R5KGFzZWxlY3Rpb25Jc0JvZHkpLCAK
KyAgICAgICAgICAgIGRlYnVnKGZhbHNlKSwgcXVvdGVTdHJpbmcoIj4gIikgeworICAgIG1zZyA9
IGFtc2c7Cit9OworCitpbnQgVGVtcGxhdGVQYXJzZXI6OnBhcnNlUXVvdGVzKFFTdHJpbmcgcHJl
Zml4LCBRU3RyaW5nIHN0ciwgUVN0cmluZyYgcXVvdGUpIHsKKyAgICBpbnQgcG9zID0gcHJlZml4
Lmxlbmd0aCgpOworICAgIGludCBsZW47CisgICAgaW50IHN0cl9sZW4gPSBzdHIubGVuZ3RoKCk7
CisgICAgUUNoYXIgcWMgPSAnIic7CisgICAgUUNoYXIgcHJldiA9IDA7CisgICAgCisgICAgcG9z
Kys7CisgICAgbGVuID0gcG9zOworICAgIAorICAgIHdoaWxlKHBvcyA8IHN0cl9sZW4pIHsKKyAg
ICAgICAgUUNoYXIgYyA9IHN0cltwb3NdOworICAgICAgICAKKyAgICAgICAgcG9zKys7CisgICAg
ICAgIGxlbisrOworICAgICAgICAKKyAgICAgICAgaWYocHJldikgeworICAgICAgICAgICAgcXVv
dGUuYXBwZW5kKGMpOworICAgICAgICAgICAgcHJldiA9IDA7CisgICAgICAgIH0gZWxzZSB7CisJ
ICAgIGlmKGMgPT0gJ1xcJykgeworCQlwcmV2ID0gYzsKKwkgICAgfSBlbHNlIGlmKGMgPT0gcWMp
IHsKKwkJYnJlYWs7CisJICAgIH0gZWxzZSB7CisJCXF1b3RlLmFwcGVuZChjKTsKKwkgICAgfTsK
Kwl9OworICAgIH07CisgICAgCisgICAgcmV0dXJuIGxlbjsKK307CisKK1FTdHJpbmcgVGVtcGxh
dGVQYXJzZXI6OmdldEZOYW1lKFFTdHJpbmcgc3RyKSB7CisgICAgLy8gc2ltcGxlIGxvZ2ljOgor
ICAgIC8vIGlmIHRoZXJlIGlzICcsJyBpbiBuYW1lLCB0aGFuIGZvcm1hdCBpcyAnTGFzdCwgRmly
c3QnCisgICAgLy8gZWxzZSBmb3JtYXQgaXMgJ0ZpcnN0IExhc3QnCisgICAgLy8gbGFzdCByZXNv
cnQgLS0gcmV0dXJuICduYW1lJyBmcm9tICduYW1lQGRvbWFpbicKKyAgICBpbnQgc2VwX3BvczsK
KyAgICBRU3RyaW5nIHJlczsKKyAgICBpZigoc2VwX3BvcyA9IHN0ci5maW5kKCdAJykpID4gMCkg
eworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yKGkgPSAoc2VwX3BvcyAtIDEpOyBpID49IDA7
IC0taSkgeworICAgICAgICAgICAgUUNoYXIgYyA9IHN0cltpXTsKKyAgICAgICAgICAgIGlmKGMu
aXNMZXR0ZXJPck51bWJlcigpKSB7CisgICAgICAgICAgICAgICAgcmVzLnByZXBlbmQoYyk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fTsKKyAgICAgICAgfTsKKyAgICB9IGVsc2UgaWYoKHNlcF9wb3MgPSBzdHIuZmluZCgnLCcpKSA+
IDApIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgIGJvb2wgYmVnaW4gPSBmYWxz
ZTsKKyAgICAgICAgZm9yKGkgPSBzZXBfcG9zOyBpIDwgc3RyLmxlbmd0aCgpOyArK2kpIHsKKyAg
ICAgICAgICAgIFFDaGFyIGMgPSBzdHJbaV07CisgICAgICAgICAgICBpZihjLmlzTGV0dGVyT3JO
dW1iZXIoKSkgeworICAgICAgICAgICAgICAgIGJlZ2luID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICByZXMuYXBwZW5kKGMpOworICAgICAgICAgICAgfSBlbHNlIGlmKGJlZ2luKSB7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9OworICAgICAgICB9OworICAgIH0gZWxzZSB7
CisgICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgICBmb3IoaSA9IDA7IGkgPCBzdHIubGVu
Z3RoKCk7ICsraSkgeworICAgICAgICAgICAgUUNoYXIgYyA9IHN0cltpXTsKKyAgICAgICAgICAg
IGlmKGMuaXNMZXR0ZXJPck51bWJlcigpKSB7CisgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChj
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9OworICAgICAgICB9OworICAgIH07CisgICAgcmV0dXJuIHJlczsKK307CisKK1FTdHJp
bmcgVGVtcGxhdGVQYXJzZXI6OmdldExOYW1lKFFTdHJpbmcgc3RyKSB7CisgICAgLy8gc2ltcGxl
IGxvZ2ljOgorICAgIC8vIGlmIHRoZXJlIGlzICcsJyBpbiBuYW1lLCB0aGFuIGZvcm1hdCBpcyAn
TGFzdCwgRmlyc3QnCisgICAgLy8gZWxzZSBmb3JtYXQgaXMgJ0ZpcnN0IExhc3QnCisgICAgaW50
IHNlcF9wb3M7CisgICAgUVN0cmluZyByZXM7CisgICAgaWYoKHNlcF9wb3MgPSBzdHIuZmluZCgn
LCcpKSA+IDApIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvcihpID0gc2VwX3BvczsgaSA+
PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIFFDaGFyIGMgPSBzdHJbaV07CisgICAgICAgICAgICBp
ZihjLmlzTGV0dGVyT3JOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIHJlcy5wcmVwZW5kKGMp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH07CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYoKHNlcF9wb3MgPSBz
dHIuZmluZCgnICcpKSA+IDApIHsKKwkgICAgdW5zaWduZWQgaW50IGk7CisJICAgIGJvb2wgYmVn
aW4gPSBmYWxzZTsKKwkgICAgZm9yKGkgPSBzZXBfcG9zOyBpIDwgc3RyLmxlbmd0aCgpOyArK2kp
IHsKKwkJUUNoYXIgYyA9IHN0cltpXTsKKwkJaWYoYy5pc0xldHRlck9yTnVtYmVyKCkpIHsKKwkJ
ICAgIGJlZ2luID0gdHJ1ZTsKKwkJICAgIHJlcy5hcHBlbmQoYyk7CisJCX0gZWxzZSBpZihiZWdp
bikgeworCQkgICAgYnJlYWs7CisJCX07CisJICAgIH07CisgICAgICAgIH07CisgICAgfTsKKyAg
ICByZXR1cm4gcmVzOworfTsKKwordm9pZCBUZW1wbGF0ZVBhcnNlcjo6cHJvY2VzcyhLTU1lc3Nh
Z2UqIGFvcmlnX21zZywgS01Gb2xkZXIqIGFmb2xkZXIpIHsKKyAgICBvcmlnX21zZyA9IGFvcmln
X21zZzsKKyAgICBmb2xkZXIgPSBhZm9sZGVyOworICAgIFFTdHJpbmcgdG1wbCA9IGZpbmRUZW1w
bGF0ZSgpOworICAgIFFTdHJpbmcgYm9keTsKKyAgICBpbnQgdG1wbF9sZW4gPSB0bXBsLmxlbmd0
aCgpOworICAgIAorICAgIC8vIGtkRGVidWcoKSA8PCAiTW9kZSAiIDw8IG1vZGUgPDwgIiwgdGVt
cGxhdGUgZm91bmQ6ICIgPDwgdG1wbCA8PCBlbmRsOworICAgIAorICAgIGJvb2wgZG5sID0gZmFs
c2U7CisgICAgZm9yKGludCBpID0gMDsgaSA8IHRtcGxfbGVuOyArK2kpIHsKKyAgICAgICAgUUNo
YXIgYyA9IHRtcGxbaV07CisgICAgICAgIC8vIGtkRGVidWcoKSA8PCAiTmV4dCBjaGFyOiAiIDw8
IGMgPDwgZW5kbDsKKyAgICAgICAgaWYoYyA9PSAnJScpIHsKKyAgICAgICAgICAgIFFTdHJpbmcg
Y21kID0gdG1wbC5taWQoaSArIDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZihjbWQu
c3RhcnRzV2l0aCgiLSIpKSB7CisgICAgICAgICAgICAgICAgLy8gZG5sCisgICAgICAgICAgICAg
ICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiAtIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGRu
bCA9IHRydWU7CisgICAgICAgICAgICAgICAgaSArPSAxOworICAgICAgICAgICAgCisgICAgICAg
ICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlJFTT0iKSkgeworICAgICAgICAgICAgICAg
IC8vIGNvbW1lbnRzCisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBSRU09
IiA8PCBlbmRsOworICAgICAgICAgICAgICAgIFFTdHJpbmcgcTsKKyAgICAgICAgICAgICAgICBp
bnQgbGVuID0gcGFyc2VRdW90ZXMoIlJFTT0iLCBjbWQsIHEpOworICAgICAgICAgICAgICAgIGkg
Kz0gbGVuOworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dp
dGgoIklOU0VSVD0iKSkgeworICAgICAgICAgICAgICAgIC8vIGluc2VydCBjb250ZW50IG9mIHNw
ZWNpZmllZCBmaWxlIGFzIGlzCisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5k
OiBJTlNFUlQ9IiA8PCBlbmRsOworICAgICAgICAgICAgICAgIFFTdHJpbmcgcTsKKyAgICAgICAg
ICAgICAgICBpbnQgbGVuID0gcGFyc2VRdW90ZXMoIklOU0VSVD0iLCBjbWQsIHEpOworICAgICAg
ICAgICAgICAgIGkgKz0gbGVuOworCQlRU3RyaW5nIHBhdGggPSBLU2hlbGw6OnRpbGRlRXhwYW5k
KHEpOworCQlRRmlsZUluZm8gZmluZm8ocGF0aCk7CisJCWlmKGZpbmZvLmlzUmVsYXRpdmUoKSkg
eworCQkgICAgcGF0aCA9IEtTaGVsbDo6aG9tZURpcigiIik7CisJCSAgICBwYXRoICs9ICIvIjsK
KwkJICAgIHBhdGggKz0gcTsKKwkJfTsKKwkJUUZpbGUgZmlsZShwYXRoKTsKKwkJaWYoZmlsZS5v
cGVuKElPX1JlYWRPbmx5KSkgeworCQkgICAgUUJ5dGVBcnJheSBjb250ZW50ID0gZmlsZS5yZWFk
QWxsKCk7CisJCSAgICBRU3RyaW5nIHN0ciA9IFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoY29udGVu
dCwgY29udGVudC5zaXplKCkpOworCQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfSBlbHNlIGlm
KGRlYnVnKSB7CisJCSAgICBLTWVzc2FnZUJveDo6ZXJyb3IoTlVMTCwgCisJCQlpMThuKCJDYW5g
dCBpbnNlcnQgY29udGVudCBmcm9tIGZpbGUgJTE6ICUyIikuYXJnKHBhdGgpLmFyZyhmaWxlLmVy
cm9yU3RyaW5nKCkpKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlm
KGNtZC5zdGFydHNXaXRoKCJTWVNURU09IikpIHsKKyAgICAgICAgICAgICAgICAvLyBpbnNlcnQg
Y29udGVudCBvZiBzcGVjaWZpZWQgZmlsZSBhcyBpcworICAgICAgICAgICAgICAgIGtkRGVidWco
KSA8PCAiQ29tbWFuZDogU1lTVEVNPSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBRU3RyaW5n
IHE7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHBhcnNlUXVvdGVzKCJTWVNURU09IiwgY21k
LCBxKTsKKyAgICAgICAgICAgICAgICBpICs9IGxlbjsKKwkJUVN0cmluZyBwaXBlX2NtZCA9IHE7
CisJCVFTdHJpbmcgc3RyID0gcGlwZShwaXBlX2NtZCwgIiIpOworCQlib2R5LmFwcGVuZChzdHIp
OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlBV
VD0iKSkgeworICAgICAgICAgICAgICAgIC8vIGluc2VydCBjb250ZW50IG9mIHNwZWNpZmllZCBm
aWxlIGFzIGlzCisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBQVVQ9IiA8
PCBlbmRsOworICAgICAgICAgICAgICAgIFFTdHJpbmcgcTsKKyAgICAgICAgICAgICAgICBpbnQg
bGVuID0gcGFyc2VRdW90ZXMoIlBVVD0iLCBjbWQsIHEpOworICAgICAgICAgICAgICAgIGkgKz0g
bGVuOworCQlRU3RyaW5nIHBhdGggPSBLU2hlbGw6OnRpbGRlRXhwYW5kKHEpOworCQlRRmlsZUlu
Zm8gZmluZm8ocGF0aCk7CisJCWlmKGZpbmZvLmlzUmVsYXRpdmUoKSkgeworCQkgICAgcGF0aCA9
IEtTaGVsbDo6aG9tZURpcigiIik7CisJCSAgICBwYXRoICs9ICIvIjsKKwkJICAgIHBhdGggKz0g
cTsKKwkJfTsKKwkJUUZpbGUgZmlsZShwYXRoKTsKKwkJaWYoZmlsZS5vcGVuKElPX1JlYWRPbmx5
KSkgeworCQkgICAgUUJ5dGVBcnJheSBjb250ZW50ID0gZmlsZS5yZWFkQWxsKCk7CisJCSAgICBi
b2R5LmFwcGVuZChRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGNvbnRlbnQsIGNvbnRlbnQuc2l6ZSgp
KSk7CisJCX0gZWxzZSBpZihkZWJ1ZykgeworCQkgICAgS01lc3NhZ2VCb3g6OmVycm9yKE5VTEws
IAorCQkJaTE4bigiQ2FuYHQgaW5zZXJ0IGNvbnRlbnQgZnJvbSBmaWxlICUxOiAlMiIpLmFyZyhw
YXRoKS5hcmcoZmlsZS5lcnJvclN0cmluZygpKSk7CisJCX07CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiUVVPVEVQSVBFPSIpKSB7CisgICAgICAg
ICAgICAgICAgLy8gcGlwZSBtZXNzYWdlIGJvZHkgdGhyb3cgY29tbWFuZCBhbmQgaW5zZXJ0IGl0
IGFzIHF1b3RhdGlvbgorICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogUVVP
VEVQSVBFPSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBRU3RyaW5nIHE7CisgICAgICAgICAg
ICAgICAgaW50IGxlbiA9IHBhcnNlUXVvdGVzKCJRVU9URVBJUEU9IiwgY21kLCBxKTsKKyAgICAg
ICAgICAgICAgICBpICs9IGxlbjsKKwkJUVN0cmluZyBwaXBlX2NtZCA9IHE7CisJCWlmKG9yaWdf
bXNnICYmICFub1F1b3RlKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IHBpcGUocGlwZV9jbWQsIHNl
bGVjdGlvbik7CisJCSAgICBRU3RyaW5nIHF1b3RlID0gb3JpZ19tc2ctPmFzUXVvdGVkU3RyaW5n
KCIiLCBxdW90ZVN0cmluZywgc3RyLCBzbWFydFF1b3RlLCBhbGxvd0RlY3J5cHRpb24pOworCQkg
ICAgYm9keS5hcHBlbmQocXVvdGUpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9
IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlFVT1RFIikpIHsKKyAgICAgICAgICAgICAgICBrZERl
YnVnKCkgPDwgIkNvbW1hbmQ6IFFVT1RFIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0g
c3RybGVuKCJRVU9URSIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnICYmICFub1F1b3Rl
KSB7CisJCSAgICBRU3RyaW5nIHF1b3RlID0gb3JpZ19tc2ctPmFzUXVvdGVkU3RyaW5nKCIiLCBx
dW90ZVN0cmluZywgc2VsZWN0aW9uLCBzbWFydFF1b3RlLCBhbGxvd0RlY3J5cHRpb24pOworCQkg
ICAgYm9keS5hcHBlbmQocXVvdGUpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9
IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlFIRUFERVJTIikpIHsKKyAgICAgICAgICAgICAgICBr
ZERlYnVnKCkgPDwgIkNvbW1hbmQ6IFFIRUFERVJTIiA8PCBlbmRsOworICAgICAgICAgICAgICAg
IGkgKz0gc3RybGVuKCJRSEVBREVSUyIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnICYm
ICFub1F1b3RlKSB7CisJCSAgICBRU3RyaW5nIHF1b3RlID0gb3JpZ19tc2ctPmFzUXVvdGVkU3Ry
aW5nKCIiLCBxdW90ZVN0cmluZywgb3JpZ19tc2ctPmhlYWRlckFzU2VuZGFibGVTdHJpbmcoKSwg
c21hcnRRdW90ZSwgZmFsc2UpOworCQkgICAgYm9keS5hcHBlbmQocXVvdGUpOworCQl9OworICAg
ICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIkhFQURFUlMi
KSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogSEVBREVSUyIgPDwg
ZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiSEVBREVSUyIpOworICAgICAgICAg
ICAgICAgIGlmKG9yaWdfbXNnICYmICFub1F1b3RlKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IG9y
aWdfbXNnLT5oZWFkZXJBc1NlbmRhYmxlU3RyaW5nKCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIp
OworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dp
dGgoIlRFWFRQSVBFPSIpKSB7CisgICAgICAgICAgICAgICAgLy8gcGlwZSBtZXNzYWdlIGJvZHkg
dGhyb3cgY29tbWFuZCBhbmQgaW5zZXJ0IGl0IGFzIGlzCisgICAgICAgICAgICAgICAga2REZWJ1
ZygpIDw8ICJDb21tYW5kOiBURVhUUElQRT0iIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgUVN0
cmluZyBxOworICAgICAgICAgICAgICAgIGludCBsZW4gPSBwYXJzZVF1b3RlcygiVEVYVFBJUEU9
IiwgY21kLCBxKTsKKyAgICAgICAgICAgICAgICBpICs9IGxlbjsKKwkJUVN0cmluZyBwaXBlX2Nt
ZCA9IHE7CisJCWlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IHBpcGUocGlwZV9j
bWQsIG9yaWdfbXNnLT5ib2R5KCkpOworCQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJNU0dQSVBF
PSIpKSB7CisgICAgICAgICAgICAgICAgLy8gcGlwZSBmdWxsIG1lc3NhZ2UgdGhyb3cgY29tbWFu
ZCBhbmQgaW5zZXJ0IHJlc3VsdCBhcyBpcworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAi
Q29tbWFuZDogTVNHUElQRT0iIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgUVN0cmluZyBxOwor
ICAgICAgICAgICAgICAgIGludCBsZW4gPSBwYXJzZVF1b3RlcygiTVNHUElQRT0iLCBjbWQsIHEp
OworICAgICAgICAgICAgICAgIGkgKz0gbGVuOworCQlRU3RyaW5nIHBpcGVfY21kID0gcTsKKwkJ
aWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcgc3RyID0gcGlwZShwaXBlX2NtZCwgb3JpZ19t
c2ctPmFzU3RyaW5nKCkpOworCQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJCT0RZUElQRT0iKSkg
eworICAgICAgICAgICAgICAgIC8vIHBpcGUgbWVzc2FnZSBib2R5IGdlbmVyYXRlZCBzbyBmYXIg
dGhyb3cgY29tbWFuZCBhbmQgaW5zZXJ0IHJlc3VsdCBhcyBpcworICAgICAgICAgICAgICAgIGtk
RGVidWcoKSA8PCAiQ29tbWFuZDogQk9EWVBJUEU9IiA8PCBlbmRsOworICAgICAgICAgICAgICAg
IFFTdHJpbmcgcTsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gcGFyc2VRdW90ZXMoIkJPRFlQ
SVBFPSIsIGNtZCwgcSk7CisgICAgICAgICAgICAgICAgaSArPSBsZW47CisJCVFTdHJpbmcgcGlw
ZV9jbWQgPSBxOworCQlRU3RyaW5nIHN0ciA9IHBpcGUocGlwZV9jbWQsIGJvZHkpOworCQlib2R5
LmFwcGVuZChzdHIpOworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0
YXJ0c1dpdGgoIkNMRUFSUElQRT0iKSkgeworICAgICAgICAgICAgICAgIC8vIHBpcGUgbWVzc2Fn
ZSBib2R5IGdlbmVyYXRlZCBzbyBmYXIgdGhyb3cgY29tbWFuZCBhbmQgaW5zZXJ0IHJlc3VsdCBh
cyBpcyByZXBsYWNpbmcgY3VycmVudCBib2R5CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8
ICJDb21tYW5kOiBDTEVBUlBJUEU9IiA8PCBlbmRsOworICAgICAgICAgICAgICAgIFFTdHJpbmcg
cTsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gcGFyc2VRdW90ZXMoIkNMRUFSUElQRT0iLCBj
bWQsIHEpOworICAgICAgICAgICAgICAgIGkgKz0gbGVuOworCQlRU3RyaW5nIHBpcGVfY21kID0g
cTsKKwkJUVN0cmluZyBzdHIgPSBwaXBlKHBpcGVfY21kLCBib2R5KTsKKwkJYm9keSA9IHN0cjsK
KwkJbXNnLT5zZXRDdXJzb3JQb3MoMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxz
ZSBpZihjbWQuc3RhcnRzV2l0aCgiVEVYVCIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1Zygp
IDw8ICJDb21tYW5kOiBURVhUIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVu
KCJURVhUIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcg
cXVvdGUgPSBvcmlnX21zZy0+Ym9keSgpOworCQkgICAgYm9keS5hcHBlbmQocXVvdGUpOworCQl9
OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9U
RVhUU0laRSIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBPVEVY
VFNJWkUiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9URVhUU0laRSIp
OworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IFFT
dHJpbmcoIiUxIikuYXJnKG9yaWdfbXNnLT5ib2R5KCkubGVuZ3RoKCkpOworCQkgICAgYm9keS5h
cHBlbmQoc3RyKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNt
ZC5zdGFydHNXaXRoKCJPVEVYVCIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJD
b21tYW5kOiBPVEVYVCIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT1RF
WFQiKTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21zZykgeworCQkgICAgUVN0cmluZyBxdW90
ZSA9IG9yaWdfbXNnLT5ib2R5KCk7CisJCSAgICBib2R5LmFwcGVuZChxdW90ZSk7CisJCX07Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiVE9BRERS
IikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IFRPQUREUiIgPDwg
ZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiVE9BRERSIik7CisJCVFTdHJpbmcg
c3RyID0gbXNnLT50bygpOworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlRPTkFNRSIpKSB7CisgICAgICAgICAg
ICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBUT05BTUUiIDw8IGVuZGw7CisgICAgICAgICAg
ICAgICAgaSArPSBzdHJsZW4oIlRPTkFNRSIpOworCQlRU3RyaW5nIHN0ciA9IG1zZy0+dG9TdHJp
cCgpOworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVs
c2UgaWYoY21kLnN0YXJ0c1dpdGgoIlRPRk5BTUUiKSkgeworICAgICAgICAgICAgICAgIGtkRGVi
dWcoKSA8PCAiQ29tbWFuZDogVE9GTkFNRSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9
IHN0cmxlbigiVE9GTkFNRSIpOworCQlRU3RyaW5nIHN0ciA9IG1zZy0+dG9TdHJpcCgpOworCQli
b2R5LmFwcGVuZChnZXRGTmFtZShzdHIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBl
bHNlIGlmKGNtZC5zdGFydHNXaXRoKCJUT0xOQU1FIikpIHsKKyAgICAgICAgICAgICAgICBrZERl
YnVnKCkgPDwgIkNvbW1hbmQ6IFRPTE5BTUUiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSAr
PSBzdHJsZW4oIlRPTE5BTUUiKTsKKwkJUVN0cmluZyBzdHIgPSBtc2ctPnRvU3RyaXAoKTsKKwkJ
Ym9keS5hcHBlbmQoZ2V0TE5hbWUoc3RyKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0g
ZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiVE9MSVNUIikpIHsKKyAgICAgICAgICAgICAgICBrZERl
YnVnKCkgPDwgIkNvbW1hbmQ6IFRPTElTVCIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9
IHN0cmxlbigiVE9MSVNUIik7CisJCVFTdHJpbmcgc3RyID0gbXNnLT50bygpOworCQlib2R5LmFw
cGVuZChzdHIpOworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0
c1dpdGgoIkZST01BRERSIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1h
bmQ6IEZST01BRERSIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJGUk9N
QUREUiIpOworCQlRU3RyaW5nIHN0ciA9IG1zZy0+ZnJvbSgpOworCQlib2R5LmFwcGVuZChzdHIp
OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIkZS
T01OQU1FIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IEZST01O
QU1FIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJGUk9NTkFNRSIpOwor
CQlRU3RyaW5nIHN0ciA9IG1zZy0+ZnJvbVN0cmlwKCk7CisJCWJvZHkuYXBwZW5kKHN0cik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiRlJPTUZO
QU1FIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IEZST01GTkFN
RSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiRlJPTUZOQU1FIik7CisJ
CVFTdHJpbmcgc3RyID0gbXNnLT5mcm9tU3RyaXAoKTsKKwkJYm9keS5hcHBlbmQoZ2V0Rk5hbWUo
c3RyKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0
aCgiRlJPTUxOQU1FIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6
IEZST01MTkFNRSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiRlJPTUxO
QU1FIik7CisJCVFTdHJpbmcgc3RyID0gbXNnLT5mcm9tU3RyaXAoKTsKKwkJYm9keS5hcHBlbmQo
Z2V0TE5hbWUoc3RyKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQu
c3RhcnRzV2l0aCgiRlVMTFNVQkpFQ1QiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8
PCAiQ29tbWFuZDogRlVMTFNVQkpFQ1QiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBz
dHJsZW4oIkZVTExTVUJKRUNUIik7CisJCVFTdHJpbmcgc3RyID0gbXNnLT5zdWJqZWN0KCk7CisJ
CWJvZHkuYXBwZW5kKHN0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihj
bWQuc3RhcnRzV2l0aCgiRlVMTFNVQkoiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8
PCAiQ29tbWFuZDogRlVMTFNVQkoiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJs
ZW4oIkZVTExTVUJKIik7CisJCVFTdHJpbmcgc3RyID0gbXNnLT5zdWJqZWN0KCk7CisJCWJvZHku
YXBwZW5kKHN0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3Rh
cnRzV2l0aCgiTVNHSUQiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFu
ZDogTVNHSUQiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk1TR0lEIik7
CisJCVFTdHJpbmcgc3RyID0gbXNnLT5pZCgpOworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9IRUFERVI9Iikp
IHsKKyAgICAgICAgICAgICAgICAvLyBpbnNlcnQgc3BlY2lmaWVkIGNvbnRlbnQgb2YgaGVhZGVy
IGZyb20gb3JpZ2luYWwgbWVzc2FnZQorICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29t
bWFuZDogT0hFQURFUj0iIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgUVN0cmluZyBxOworICAg
ICAgICAgICAgICAgIGludCBsZW4gPSBwYXJzZVF1b3RlcygiT0hFQURFUj0iLCBjbWQsIHEpOwor
ICAgICAgICAgICAgICAgIGkgKz0gbGVuOworCQlpZihvcmlnX21zZykgeworCQkgICAgUVN0cmlu
ZyBoZHIgPSBxOworCQkgICAgUVN0cmluZyBzdHIgPSBvcmlnX21zZy0+aGVhZGVyRmllbGRzKGhk
ci5sb2NhbDhCaXQoKSkuam9pbigiLCAiKTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiSEVB
REVSPSIpKSB7CisgICAgICAgICAgICAgICAgLy8gaW5zZXJ0IHNwZWNpZmllZCBjb250ZW50IG9m
IGhlYWRlciBmcm9tIGN1cnJlbnQgbWVzc2FnZQorICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8
PCAiQ29tbWFuZDogSEVBREVSPSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBRU3RyaW5nIHE7
CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHBhcnNlUXVvdGVzKCJIRUFERVI9IiwgY21kLCBx
KTsKKyAgICAgICAgICAgICAgICBpICs9IGxlbjsKKwkJUVN0cmluZyBoZHIgPSBxOworCQlRU3Ry
aW5nIHN0ciA9IG1zZy0+aGVhZGVyRmllbGRzKGhkci5sb2NhbDhCaXQoKSkuam9pbigiLCAiKTsK
KwkJYm9keS5hcHBlbmQoc3RyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlm
KGNtZC5zdGFydHNXaXRoKCJIRUFERVIoIikpIHsKKyAgICAgICAgICAgICAgICAvLyBpbnNlcnQg
c3BlY2lmaWVkIGNvbnRlbnQgb2YgaGVhZGVyIGZyb20gY3VycmVudCBtZXNzYWdlCisgICAgICAg
ICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBIRUFERVIoIiA8PCBlbmRsOworICAgICAg
ICAgICAgICAgIFFSZWdFeHAgcmUgPSBRUmVnRXhwKCJeSEVBREVSXFwoKC4rKVxcKSIpOworICAg
ICAgICAgICAgICAgIHJlLnNldE1pbmltYWwodHJ1ZSk7CisgICAgICAgICAgICAgICAgaW50IHJl
cyA9IHJlLnNlYXJjaChjbWQpOworICAgICAgICAgICAgICAgIGlmKHJlcyAhPSAwKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyB3cm9uZworICAgICAgICAgICAgICAgICAgICBp
ICs9IHN0cmxlbigiSEVBREVSKCIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIGkgKz0gcmUubWF0Y2hlZExlbmd0aCgpOworCQkgICAgUVN0cmluZyBoZHIg
PSByZS5jYXAoMSk7CisJCSAgICBRU3RyaW5nIHN0ciA9IG1zZy0+aGVhZGVyRmllbGRzKGhkci5s
b2NhbDhCaXQoKSkuam9pbigiLCAiKTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiT1RPQURE
UiIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBPVE9BRERSIiA8
PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJPVE9BRERSIik7CisgICAgICAg
ICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcgc3RyID0gb3JpZ19tc2ctPnRv
KCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAgICAgCisgICAgICAg
ICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9UT05BTUUiKSkgeworICAgICAgICAgICAg
ICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogT1RPTkFNRSIgPDwgZW5kbDsKKyAgICAgICAgICAg
ICAgICBpICs9IHN0cmxlbigiT1RPTkFNRSIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNn
KSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IG9yaWdfbXNnLT50b1N0cmlwKCk7CisJCSAgICBib2R5
LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYo
Y21kLnN0YXJ0c1dpdGgoIk9UT0ZOQU1FIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkg
PDwgIkNvbW1hbmQ6IE9UT0ZOQU1FIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3Ry
bGVuKCJPVE9GTkFNRSIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBR
U3RyaW5nIHN0ciA9IG9yaWdfbXNnLT50b1N0cmlwKCk7CisJCSAgICBib2R5LmFwcGVuZChnZXRG
TmFtZShzdHIpKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNt
ZC5zdGFydHNXaXRoKCJPVE9MTkFNRSIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8
ICJDb21tYW5kOiBPVE9MTkFNRSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxl
bigiT1RPTE5BTUUiKTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21zZykgeworCQkgICAgUVN0
cmluZyBzdHIgPSBvcmlnX21zZy0+dG9TdHJpcCgpOworCQkgICAgYm9keS5hcHBlbmQoZ2V0TE5h
bWUoc3RyKSk7CisJCX07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQu
c3RhcnRzV2l0aCgiT1RPTElTVCIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJD
b21tYW5kOiBPVE9MSVNUIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJP
VE9MSVNUIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcg
c3RyID0gb3JpZ19tc2ctPnRvKCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAg
ICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9UTyIpKSB7
CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBPVE8iIDw8IGVuZGw7Cisg
ICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9UTyIpOworICAgICAgICAgICAgICAgIGlmKG9y
aWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IG9yaWdfbXNnLT50bygpOworCQkgICAgYm9k
eS5hcHBlbmQoc3RyKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlm
KGNtZC5zdGFydHNXaXRoKCJPRlJPTUFERFIiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWco
KSA8PCAiQ29tbWFuZDogT0ZST01BRERSIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0g
c3RybGVuKCJPRlJPTUFERFIiKTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21zZykgeworCQkg
ICAgUVN0cmluZyBzdHIgPSBvcmlnX21zZy0+ZnJvbSgpOworCQkgICAgYm9keS5hcHBlbmQoc3Ry
KTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNX
aXRoKCJPRlJPTU5BTUUiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFu
ZDogT0ZST01OQU1FIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJPRlJP
TU5BTUUiKTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21zZykgeworCQkgICAgUVN0cmluZyBz
dHIgPSBvcmlnX21zZy0+ZnJvbVN0cmlwKCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9
OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9G
Uk9NRk5BTUUiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogT0ZS
T01GTkFNRSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT0ZST01GTkFN
RSIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9
IG9yaWdfbXNnLT5mcm9tU3RyaXAoKTsKKwkJICAgIGJvZHkuYXBwZW5kKGdldEZOYW1lKHN0cikp
OworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dp
dGgoIk9GUk9NTE5BTUUiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFu
ZDogT0ZST01MTkFNRSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT0ZS
T01MTkFNRSIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5n
IHN0ciA9IG9yaWdfbXNnLT5mcm9tU3RyaXAoKTsKKwkJICAgIGJvZHkuYXBwZW5kKGdldExOYW1l
KHN0cikpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0
YXJ0c1dpdGgoIk9GVUxMU1VCSkVDVCIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8
ICJDb21tYW5kOiBPRlVMTFNVQkpFQ1QiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBz
dHJsZW4oIk9GVUxMU1VCSkVDVCIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJ
CSAgICBRU3RyaW5nIHN0ciA9IG9yaWdfbXNnLT5zdWJqZWN0KCk7CisJCSAgICBib2R5LmFwcGVu
ZChzdHIpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0
YXJ0c1dpdGgoIk9GVUxMU1VCSiIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJD
b21tYW5kOiBPRlVMTFNVQkoiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4o
Ik9GVUxMU1VCSiIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3Ry
aW5nIHN0ciA9IG9yaWdfbXNnLT5zdWJqZWN0KCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOwor
CQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgo
Ik9NU0dJRCIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8ICJDb21tYW5kOiBPTVNH
SUQiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9NU0dJRCIpOworICAg
ICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IG9yaWdfbXNn
LT5pZCgpOworCQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJEQVRFRU4iKSkgeworICAgICAgICAg
ICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogREFURUVOIiA8PCBlbmRsOworICAgICAgICAg
ICAgICAgIGkgKz0gc3RybGVuKCJEQVRFRU4iKTsKKwkJUURhdGVUaW1lIGRhdGUgPSBRRGF0ZVRp
bWU6OmN1cnJlbnREYXRlVGltZSgpOworCQlLTG9jYWxlIGxvY2FsZSgiQyIpOworCQlRU3RyaW5n
IHN0ciA9IFFTdHJpbmcoIiUxLCAlMiAlMywgJTQiKQorCQkgICAgLmFyZyhsb2NhbGUuY2FsZW5k
YXIoKS0+d2Vla0RheU5hbWUoZGF0ZS5kYXRlKCksIGZhbHNlKSkKKwkJICAgIC5hcmcobG9jYWxl
LmNhbGVuZGFyKCktPm1vbnRoTmFtZShkYXRlLmRhdGUoKSwgZmFsc2UpKQorCQkgICAgLmFyZyhk
YXRlLmRhdGUoKS5kYXkoKSkKKwkJICAgIC5hcmcoZGF0ZS5kYXRlKCkueWVhcigpKTsKKwkJYm9k
eS5hcHBlbmQoc3RyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihj
bWQuc3RhcnRzV2l0aCgiREFURVNIT1JUIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkg
PDwgIkNvbW1hbmQ6IERBVEVTSE9SVCIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0
cmxlbigiREFURVNIT1JUIik7CisJCVFEYXRlVGltZSBkYXRlID0gUURhdGVUaW1lOjpjdXJyZW50
RGF0ZVRpbWUoKTsKKwkJUVN0cmluZyBzdHIgPSBkYXRlLmRhdGUoKS50b1N0cmluZyhRdDo6TG9j
YWxEYXRlKTsKKwkJYm9keS5hcHBlbmQoc3RyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiREFURSIpKSB7CisgICAgICAgICAgICAgICAg
a2REZWJ1ZygpIDw8ICJDb21tYW5kOiBEQVRFIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkg
Kz0gc3RybGVuKCJEQVRFIik7CisJCVFEYXRlVGltZSBkYXRlID0gUURhdGVUaW1lOjpjdXJyZW50
RGF0ZVRpbWUoKTsKKwkJUVN0cmluZyBzdHIgPSBkYXRlLmRhdGUoKS50b1N0cmluZyhRdDo6VGV4
dERhdGUpOworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAgICAgICAgCisgICAgICAgICAgICB9
IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIkRPVyIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1
ZygpIDw8ICJDb21tYW5kOiBET1ciIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJs
ZW4oIkRPVyIpOworCQlRRGF0ZVRpbWUgZGF0ZSA9IFFEYXRlVGltZTo6Y3VycmVudERhdGVUaW1l
KCk7CisJCVFTdHJpbmcgc3RyID0gUURhdGU6OmxvbmdEYXlOYW1lKGRhdGUuZGF0ZSgpLmRheU9m
V2VlaygpKTsKKwkJYm9keS5hcHBlbmQoc3RyKTsKKwkgICAgCisgICAgICAgICAgICB9IGVsc2Ug
aWYoY21kLnN0YXJ0c1dpdGgoIlRJTUVMT05HRU4iKSkgeworICAgICAgICAgICAgICAgIGtkRGVi
dWcoKSA8PCAiQ29tbWFuZDogVElNRUxPTkdFTiIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBp
ICs9IHN0cmxlbigiVElNRUxPTkdFTiIpOworCQlRRGF0ZVRpbWUgZGF0ZSA9IFFEYXRlVGltZTo6
Y3VycmVudERhdGVUaW1lKCk7CisJCVFTdHJpbmcgc3RyID0gZGF0ZS50aW1lKCkudG9TdHJpbmco
ImhoOm1tOnNzIEFQIik7CisJCWJvZHkuYXBwZW5kKHN0cik7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiVElNRUxPTkciKSkgeworICAgICAgICAg
ICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogVElNRUxPTkciIDw8IGVuZGw7CisgICAgICAg
ICAgICAgICAgaSArPSBzdHJsZW4oIlRJTUVMT05HIik7CisJCVFEYXRlVGltZSBkYXRlID0gUURh
dGVUaW1lOjpjdXJyZW50RGF0ZVRpbWUoKTsKKwkJUVN0cmluZyBzdHIgPSBkYXRlLnRpbWUoKS50
b1N0cmluZyhRdDo6VGV4dERhdGUpOworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAgICAgICAg
CisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlRJTUUiKSkgeworICAgICAg
ICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogVElNRSIgPDwgZW5kbDsKKyAgICAgICAg
ICAgICAgICBpICs9IHN0cmxlbigiVElNRSIpOworCQlRRGF0ZVRpbWUgZGF0ZSA9IFFEYXRlVGlt
ZTo6Y3VycmVudERhdGVUaW1lKCk7CisJCVFTdHJpbmcgc3RyID0gZGF0ZS50aW1lKCkudG9TdHJp
bmcoUXQ6OkxvY2FsRGF0ZSk7CisJCWJvZHkuYXBwZW5kKHN0cik7CisJICAgIAorICAgICAgICAg
ICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJPREFURUVOIikpIHsKKyAgICAgICAgICAgICAg
ICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE9EQVRFRU4iIDw8IGVuZGw7CisgICAgICAgICAgICAg
ICAgaSArPSBzdHJsZW4oIk9EQVRFRU4iKTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21zZykg
eworICAgICAgICAgICAgICAgICAgICBRRGF0ZVRpbWUgZGF0ZTsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0ZS5zZXRUaW1lX3Qob3JpZ19tc2ctPmRhdGUoKSk7CisgICAgICAgICAgICAgICAgICAg
IEtMb2NhbGUgbG9jYWxlKCJDIik7CisJCSAgICBRU3RyaW5nIHN0ciA9IFFTdHJpbmcoIiUxLCAl
MiAlMywgJTQiKQorCQkgICAgICAuYXJnKGxvY2FsZS5jYWxlbmRhcigpLT53ZWVrRGF5TmFtZShk
YXRlLmRhdGUoKSwgZmFsc2UpKQorCQkgICAgICAuYXJnKGxvY2FsZS5jYWxlbmRhcigpLT5tb250
aE5hbWUoZGF0ZS5kYXRlKCksIGZhbHNlKSkKKwkJICAgICAgLmFyZyhkYXRlLmRhdGUoKS5kYXko
KSkKKwkJICAgICAgLmFyZyhkYXRlLmRhdGUoKS55ZWFyKCkpOworCQkgICAgYm9keS5hcHBlbmQo
c3RyKTsKKwkJfTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQu
c3RhcnRzV2l0aCgiT0RBVEVTSE9SVCIpKSB7CisgICAgICAgICAgICAgICAga2REZWJ1ZygpIDw8
ICJDb21tYW5kOiBPREFURVNIT1JUIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3Ry
bGVuKCJPREFURVNIT1JUIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKyAgICAg
ICAgICAgICAgICAgICAgUURhdGVUaW1lIGRhdGU7CisgICAgICAgICAgICAgICAgICAgIGRhdGUu
c2V0VGltZV90KG9yaWdfbXNnLT5kYXRlKCkpOworICAgICAgICAgICAgICAgICAgICBRU3RyaW5n
IHN0ciA9IGRhdGUuZGF0ZSgpLnRvU3RyaW5nKFF0OjpMb2NhbERhdGUpOworCQkgICAgYm9keS5h
cHBlbmQoc3RyKTsKKwkJfTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBp
ZihjbWQuc3RhcnRzV2l0aCgiT0RBVEUiKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8
PCAiQ29tbWFuZDogT0RBVEUiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4o
Ik9EQVRFIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKyAgICAgICAgICAgICAg
ICAgICAgUURhdGVUaW1lIGRhdGU7CisgICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0VGltZV90
KG9yaWdfbXNnLT5kYXRlKCkpOworICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHN0ciA9IGRh
dGUuZGF0ZSgpLnRvU3RyaW5nKFF0OjpUZXh0RGF0ZSk7CisJCSAgICBib2R5LmFwcGVuZChzdHIp
OworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dp
dGgoIk9ET1ciKSkgeworICAgICAgICAgICAgICAgIGtkRGVidWcoKSA8PCAiQ29tbWFuZDogT0RP
VyIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT0RPVyIpOworICAgICAg
ICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisgICAgICAgICAgICAgICAgICAgIFFEYXRlVGltZSBk
YXRlOworICAgICAgICAgICAgICAgICAgICBkYXRlLnNldFRpbWVfdChvcmlnX21zZy0+ZGF0ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBzdHIgPSBRRGF0ZTo6bG9uZ0RheU5hbWUo
ZGF0ZS5kYXRlKCkuZGF5T2ZXZWVrKCkpOworCQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfTsK
KwkgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9USU1FTE9OR0VO
IikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE9USU1FTE9OR0VO
IiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJPVElNRUxPTkdFTiIpOwor
ICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisgICAgICAgICAgICAgICAgICAgIFFEYXRl
VGltZSBkYXRlOworICAgICAgICAgICAgICAgICAgICBkYXRlLnNldFRpbWVfdChvcmlnX21zZy0+
ZGF0ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBzdHIgPSBkYXRlLnRpbWUoKS50
b1N0cmluZygiaGg6bW06c3MgQVAiKTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiT1RJTUVM
T05HIikpIHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE9USU1FTE9O
RyIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT1RJTUVMT05HIik7Cisg
ICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKyAgICAgICAgICAgICAgICAgICAgUURhdGVU
aW1lIGRhdGU7CisgICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0VGltZV90KG9yaWdfbXNnLT5k
YXRlKCkpOworICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHN0ciA9IGRhdGUudGltZSgpLnRv
U3RyaW5nKFF0OjpUZXh0RGF0ZSk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAg
ICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9USU1FIikp
IHsKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IE9USU1FIiA8PCBlbmRs
OworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJPVElNRSIpOworICAgICAgICAgICAgICAg
IGlmKG9yaWdfbXNnKSB7CisgICAgICAgICAgICAgICAgICAgIFFEYXRlVGltZSBkYXRlOworICAg
ICAgICAgICAgICAgICAgICBkYXRlLnNldFRpbWVfdChvcmlnX21zZy0+ZGF0ZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgUVN0cmluZyBzdHIgPSBkYXRlLnRpbWUoKS50b1N0cmluZyhRdDo6TG9j
YWxEYXRlKTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07CisJICAgIAorCSAgICB9IGVs
c2UgaWYoY21kLnN0YXJ0c1dpdGgoIkJMQU5LIikpIHsKKyAgICAgICAgICAgICAgICAvLyBkbyBu
b3RoaW5nCisJCWtkRGVidWcoKSA8PCAiQ29tbWFuZDogQkxBTksiIDw8IGVuZGw7CisJCWkgKz0g
c3RybGVuKCJCTEFOSyIpOworICAgICAgICAgICAgCisJICAgIH0gZWxzZSBpZihjbWQuc3RhcnRz
V2l0aCgiTk9QIikpIHsKKyAgICAgICAgICAgICAgICAvLyBkbyBub3RoaW5nCisJCWtkRGVidWco
KSA8PCAiQ29tbWFuZDogTk9QIiA8PCBlbmRsOworCQlpICs9IHN0cmxlbigiTk9QIik7CisJICAg
IAorCSAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIkNMRUFSIikpIHsKKyAgICAgICAgICAg
ICAgICAvLyBjbGVhciBib2R5IGJ1ZmZlcjsgbm90IHRvbyB1c2VmdWwgeWV0CisJCWtkRGVidWco
KSA8PCAiQ29tbWFuZDogQ0xFQVIiIDw8IGVuZGw7CisJCWkgKz0gc3RybGVuKCJDTEVBUiIpOwor
CQlib2R5ID0gIiI7CisJCW1zZy0+c2V0Q3Vyc29yUG9zKDApOworICAgICAgICAgICAgCisJICAg
IH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiREVCVUdPRkYiKSkgeworICAgICAgICAgICAgICAg
IC8vIHR1cm4gb2ZmIGRlYnVnCisJCWtkRGVidWcoKSA8PCAiQ29tbWFuZDogREVCVUdPRkYiIDw8
IGVuZGw7CisJCWkgKz0gc3RybGVuKCJERUJVR09GRiIpOworCQlkZWJ1ZyA9IGZhbHNlOworCSAg
ICAKKwkgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJERUJVRyIpKSB7CisgICAgICAgICAg
ICAgICAgLy8gdHVybiBvbiBkZWJ1ZworCQlrZERlYnVnKCkgPDwgIkNvbW1hbmQ6IERFQlVHIiA8
PCBlbmRsOworCQlpICs9IHN0cmxlbigiREVCVUciKTsKKwkJZGVidWcgPSB0cnVlOworICAgICAg
ICAgICAgCisJICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiQ1VSU09SIikpIHsKKyAgICAg
ICAgICAgICAgICAvLyB0dXJuIG9uIGRlYnVnCisJCWtkRGVidWcoKSA8PCAiQ29tbWFuZDogQ1VS
U09SIiA8PCBlbmRsOworCQlpICs9IHN0cmxlbigiQ1VSU09SIik7CisJCW1zZy0+c2V0Q3Vyc29y
UG9zKGJvZHkubGVuZ3RoKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIC8vIHdyb25nIGNvbW1hbmQsIGRvIG5vdGhpbmcKKyAgICAgICAgICAg
ICAgICBib2R5LmFwcGVuZChjKTsKKyAgICAgICAgICAgIH07CisgICAgICAgIAorICAgICAgICB9
IGVsc2UgaWYoZG5sICYmIChjID09ICdcbicgfHwgYyA9PSAnXHInKSkgeworICAgICAgICAgICAg
Ly8gc2tpcAorICAgICAgICAgICAgaWYoKGMgPT0gJ1xuJyAmJiB0bXBsW2kgKyAxXSA9PSAnXHIn
KSB8fCAoYyA9PSAnXHInICYmIHRtcGxbaSArIDFdID09ICdcbicpKSB7CisgICAgICAgICAgICAg
ICAgLy8gc2tpcCBvbmUgbW9yZQorICAgICAgICAgICAgICAgIGkgKz0gMTsKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICBkbmwgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGJvZHkuYXBwZW5kKGMpOworICAgICAgICB9OworICAgIH07CisgICAgCisgICAgLy8ga2RE
ZWJ1ZygpIDw8ICJNZXNzYWdlIGJvZHk6ICIgPDwgYm9keSA8PCBlbmRsOworICAgIAorICAgIG1z
Zy0+c2V0Qm9keShib2R5LnV0ZjgoKSk7Cit9OworCitRU3RyaW5nIFRlbXBsYXRlUGFyc2VyOjpm
aW5kVGVtcGxhdGUoKSB7CisgICAgCisgICAgLy8ga2REZWJ1ZygpIDw8ICJUcnlpbmcgdG8gZmlu
ZCB0ZW1wbGF0ZSBmb3IgbW9kZSAiIDw8IG1vZGUgPDwgZW5kbDsKKyAgICAKKyAgICBRU3RyaW5n
IHRtcGw7CisgICAgCisgICAgaWYoIWZvbGRlcikgeworCWZvbGRlciA9IG1zZy0+cGFyZW50KCk7
CisJaWYoIWZvbGRlcikgeworCSAgICBpZihvcmlnX21zZykgeworCQlmb2xkZXIgPSBvcmlnX21z
Zy0+cGFyZW50KCk7CisJICAgIH07CisJICAgIGlmKCFmb2xkZXIpIHsKKwkJa2REZWJ1ZygpIDw8
ICJPb3BzISBObyBmb2xkZXIgZm9yIG1lc3NhZ2UiIDw8IGVuZGw7CisJCXJldHVybiAiIjsKKwkg
ICAgfTsKKwl9OworICAgIH07CisgICAgCisgICAgUVN0cmluZyBmaWQgPSBmb2xkZXItPmlkU3Ry
aW5nKCk7CisgICAgVGVtcGxhdGVzIGZjb25mKGZpZCk7CisgICAgaWYoZmNvbmYudXNlQ3VzdG9t
VGVtcGxhdGVzKCkpIHsKKyAgICAgICAgc3dpdGNoKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2Ug
TmV3TWVzc2FnZToKKyAgICAgICAgICAgICAgICB0bXBsID0gZmNvbmYudGVtcGxhdGVOZXdNZXNz
YWdlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFJlcGx5Ogor
ICAgICAgICAgICAgICAgIHRtcGwgPSBmY29uZi50ZW1wbGF0ZVJlcGx5KCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFJlcGx5QWxsOgorICAgICAgICAgICAgICAg
IHRtcGwgPSBmY29uZi50ZW1wbGF0ZVJlcGx5QWxsKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEZvcndhcmQ6CisgICAgICAgICAgICAgICAgdG1wbCA9IGZjb25m
LnRlbXBsYXRlRm9yd2FyZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIlVua25vd24gbWVzc2FnZSBt
b2RlOiAiIDw8IG1vZGUgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICByZXR1cm4gIiI7CisgICAg
ICAgIH07CisgICAgICAgIHF1b3RlU3RyaW5nID0gZmNvbmYucXVvdGVTdHJpbmcoKTsKKyAgICAg
ICAgaWYoIXRtcGwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZXR1cm4gdG1wbDsKKyAgICAg
ICAgfTsKKyAgICB9OworICAgIHN3aXRjaChtb2RlKSB7CisJY2FzZSBOZXdNZXNzYWdlOgorCSAg
ICB0bXBsID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+dGVtcGxhdGVOZXdNZXNzYWdlKCk7CisJ
ICAgIGJyZWFrOworCWNhc2UgUmVwbHk6CisJICAgIHRtcGwgPSBHbG9iYWxTZXR0aW5nczo6c2Vs
ZigpLT50ZW1wbGF0ZVJlcGx5KCk7CisJICAgIGJyZWFrOworCWNhc2UgUmVwbHlBbGw6CisJICAg
IHRtcGwgPSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT50ZW1wbGF0ZVJlcGx5QWxsKCk7CisJICAg
IGJyZWFrOworCWNhc2UgRm9yd2FyZDoKKwkgICAgdG1wbCA9IEdsb2JhbFNldHRpbmdzOjpzZWxm
KCktPnRlbXBsYXRlRm9yd2FyZCgpOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBrZERl
YnVnKCkgPDwgIlVua25vd24gbWVzc2FnZSBtb2RlOiAiIDw8IG1vZGUgPDwgZW5kbDsKKwkgICAg
cmV0dXJuICIiOworICAgIH07CisgICAgcXVvdGVTdHJpbmcgPSBHbG9iYWxTZXR0aW5nczo6c2Vs
ZigpLT5xdW90ZVN0cmluZygpOworICAgIHJldHVybiB0bXBsOworfTsKKworUVN0cmluZyBUZW1w
bGF0ZVBhcnNlcjo6cGlwZShRU3RyaW5nIGNtZCwgUVN0cmluZyBidWYpIHsKKyAgICBwaXBlX291
dCA9ICIiOworICAgIHBpcGVfZXJyID0gIiI7CisgICAgcGlwZV9yYyA9IDA7CisgICAgCisgICAg
S1Byb2Nlc3MgcHJvYzsKKyAgICBRQ1N0cmluZyBkYXRhID0gYnVmLmxvY2FsOEJpdCgpOworICAg
IAorICAgIC8vIGtkRGVidWcoKSA8PCAiQ29tbWFuZCBkYXRhOiAiIDw8IGRhdGEgPDwgZW5kbDsK
KyAgICAKKyAgICBwcm9jIDw8IEtTaGVsbDo6c3BsaXRBcmdzKGNtZCwgS1NoZWxsOjpUaWxkZUV4
cGFuZCk7CisgICAgcHJvYy5zZXRVc2VTaGVsbCh0cnVlKTsKKyAgICBjb25uZWN0KCZwcm9jLCBT
SUdOQUwocmVjZWl2ZWRTdGRvdXQoS1Byb2Nlc3MgKiwgY2hhciAqLCBpbnQgKSksIAorCXRoaXMs
IFNMT1Qob25SZWNlaXZlZFN0ZG91dChLUHJvY2VzcyAqLCBjaGFyICosIGludCApKSk7CisgICAg
Y29ubmVjdCgmcHJvYywgU0lHTkFMKHJlY2VpdmVkU3RkZXJyKEtQcm9jZXNzICosIGNoYXIgKiwg
aW50ICkpLCAKKwl0aGlzLCBTTE9UKG9uUmVjZWl2ZWRTdGRlcnIoS1Byb2Nlc3MgKiwgY2hhciAq
LCBpbnQgKSkpOworICAgIGNvbm5lY3QoJnByb2MsIFNJR05BTCh3cm90ZVN0ZGluKEtQcm9jZXNz
ICopKSwgCisJdGhpcywgU0xPVChvbldyb3RlU3RkaW4oS1Byb2Nlc3MgKikpKTsKKyAgICAKKyAg
ICBpZihwcm9jLnN0YXJ0KEtQcm9jZXNzOjpOb3RpZnlPbkV4aXQsIEtQcm9jZXNzOjpBbGwpKSB7
CisgICAgICAgIAorICAgICAgICBib29sIHBpcGVfZmlsbGVkID0gcHJvYy53cml0ZVN0ZGluKGRh
dGEsIGRhdGEubGVuZ3RoKCkpOworICAgICAgICBpZihwaXBlX2ZpbGxlZCkgeworICAgICAgICAg
ICAgcHJvYy5jbG9zZVN0ZGluKCk7CisgICAgICAgIAorCSAgICBib29sIGV4aXRlZCA9IHByb2Mu
d2FpdChQaXBlVGltZW91dCk7CisJICAgIGlmKGV4aXRlZCkgeworCSAgICAKKwkJaWYocHJvYy5u
b3JtYWxFeGl0KCkpIHsKKwkJICAgIAorCQkgICAgcGlwZV9yYyA9IHByb2MuZXhpdFN0YXR1cygp
OworCQkgICAgaWYocGlwZV9yYyAhPSAwICYmIGRlYnVnKSB7CisJCQlpZihwaXBlX2Vyci5pc0Vt
cHR5KCkpIHsKKwkJCSAgICBLTWVzc2FnZUJveDo6ZXJyb3IoTlVMTCwgCisJCQkJaTE4bigiUGlw
ZSBjb21tYW5kIGV4aXQgd2l0aCBzdGF0dXMgJTE6ICUyIikuYXJnKHBpcGVfcmMpLmFyZyhjbWQp
KTsKKwkJCX0gZWxzZSB7CisJCQkgICAgS01lc3NhZ2VCb3g6OmRldGFpbGVkRXJyb3IoTlVMTCwg
CisJCQkJaTE4bigiUGlwZSBjb21tYW5kIGV4aXQgd2l0aCBzdGF0dXMgJTE6ICUyIikuYXJnKHBp
cGVfcmMpLmFyZyhjbWQpLCBwaXBlX2Vycik7CisJCQl9OworCQkgICAgfTsKKwkJICAgIAorCQl9
IGVsc2UgeworCQkgICAgCisJCSAgICBwaXBlX3JjID0gLShwcm9jLmV4aXRTaWduYWwoKSk7CisJ
CSAgICBpZihwaXBlX3JjICE9IDAgJiYgZGVidWcpIHsKKwkJCWlmKHBpcGVfZXJyLmlzRW1wdHko
KSkgeworCQkJICAgIEtNZXNzYWdlQm94OjplcnJvcihOVUxMLCAKKwkJCQlpMThuKCJQaXBlIGNv
bW1hbmQga2lsbGVkIGJ5IHNpZ25hbCAlMTogJTIiKS5hcmcoLShwaXBlX3JjKSkuYXJnKGNtZCkp
OworCQkJfSBlbHNlIHsKKwkJCSAgICBLTWVzc2FnZUJveDo6ZGV0YWlsZWRFcnJvcihOVUxMLCAK
KwkJCQlpMThuKCJQaXBlIGNvbW1hbmQga2lsbGVkIGJ5IHNpZ25hbCAlMTogJTIiKS5hcmcoLShw
aXBlX3JjKSkuYXJnKGNtZCksIHBpcGVfZXJyKTsKKwkJCX07CisJCSAgICB9OworCQkgICAgCisJ
CX07CisJICAgIAorCSAgICB9IGVsc2UgeworCQkvLyBwcm9jZXNzIGRvZXMgbm90IGV4aXRlZCBh
ZnRlciBUZW1wbGF0ZVBhcnNlcjo6UGlwZVRpbWVvdXQgc2Vjb25kcywga2lsbCBpdAorCQlwcm9j
LmtpbGwoKTsKKwkJcHJvYy5kZXRhY2goKTsKKwkJaWYoZGVidWcpIHsKKwkJICAgIEtNZXNzYWdl
Qm94OjplcnJvcihOVUxMLCAKKwkJCWkxOG4oIlBpcGUgY29tbWFuZCBkb2VzIG5vdCBmaW5pc2hl
ZCB3aXRoaW4gJTEgc2Vjb25kczogJTIiKS5hcmcoUGlwZVRpbWVvdXQpLmFyZyhjbWQpKTsKKwkJ
fTsKKwkgICAgfTsKKwkgICAgCisJfSBlbHNlIHsKKwkgICAgLy8gY2FuYHQgd3JpdGUgdG8gc3Rk
aW4gb2YgcHJvY2VzcworCSAgICBwcm9jLmtpbGwoKTsKKwkgICAgcHJvYy5kZXRhY2goKTsKKwkg
ICAgaWYoZGVidWcpIHsKKwkJaWYocGlwZV9lcnIuaXNFbXB0eSgpKSB7CisJCSAgICBLTWVzc2Fn
ZUJveDo6ZXJyb3IoTlVMTCwgCisJCQlpMThuKCJDYW5gdCB3cml0ZSB0byBwcm9jZXNzIHN0ZGlu
OiAlMSIpLmFyZyhjbWQpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCQkgICAgS01lc3Nh
Z2VCb3g6OmRldGFpbGVkRXJyb3IoTlVMTCwgCisJCQlpMThuKCJDYW5gdCB3cml0ZSB0byBwcm9j
ZXNzIHN0ZGluOiAlMSIpLmFyZyhjbWQpLCBwaXBlX2Vycik7CisgICAgICAgICAgICAgICAgfTsJ
CisJICAgIH07CisJfTsKKyAgICAgICAgICAgICAgICAKKyAgICB9IGVsc2UgaWYoZGVidWcpIHsK
KyAgICAgICAgS01lc3NhZ2VCb3g6OmVycm9yKE5VTEwsIGkxOG4oIkNhbmB0IHN0YXJ0IHBpcGUg
Y29tbWFuZCBmcm9tIHRlbXBsYXRlOiAlMSIpLmFyZyhjbWQpKTsKKyAgICB9OworICAgIAorICAg
IHJldHVybiBwaXBlX291dDsKK307CisKK3ZvaWQgVGVtcGxhdGVQYXJzZXI6Om9uUHJvY2Vzc0V4
aXRlZChLUHJvY2VzcyAqcHJvYykgeworICAgIC8vIGRvIG5vdGhpbmcgZm9yIG5vdworfTsKKwor
dm9pZCBUZW1wbGF0ZVBhcnNlcjo6b25SZWNlaXZlZFN0ZG91dChLUHJvY2VzcyAqcHJvYywgY2hh
ciAqYnVmZmVyLCBpbnQgYnVmbGVuKSB7CisgICAgcGlwZV9vdXQgKz0gUVN0cmluZzo6ZnJvbUxv
Y2FsOEJpdChidWZmZXIsIGJ1Zmxlbik7Cit9OworCit2b2lkIFRlbXBsYXRlUGFyc2VyOjpvblJl
Y2VpdmVkU3RkZXJyKEtQcm9jZXNzICpwcm9jLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pIHsK
KyAgICBwaXBlX2VyciArPSBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGJ1ZmZlciwgYnVmbGVuKTsK
K307CisKK3ZvaWQgVGVtcGxhdGVQYXJzZXI6Om9uV3JvdGVTdGRpbihLUHJvY2VzcyAqcHJvYykg
eworICAgIHByb2MtPmNsb3NlU3RkaW4oKTsKK307CisKKyNpbmNsdWRlICJ0ZW1wbGF0ZXBhcnNl
ci5tb2MuY3BwIgpJbmRleDoga21haWwva21lZGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC9r
bWVkaXQuY3BwCShyZXZpc2lvbiA1OTY2OTUpCisrKyBrbWFpbC9rbWVkaXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MzIsNCArNzMyLDE0IEBACiAgIH0KIH0KIAordm9pZCBLTUVkaXQ6OnNldEN1
cnNvclBvc2l0aW9uRnJvbVN0YXJ0KHVuc2lnbmVkIGludCBwb3MpIHsKKyAgdW5zaWduZWQgaW50
IGwgPSAwOworICB1bnNpZ25lZCBpbnQgYyA9IDA7CisgIHBvc1RvUm93Q29sKCBwb3MsIGwsIGMg
KTsKKyAgLy8ga2REZWJ1ZygpIDw8ICJOdW0gbGluZXM6ICIgPDwgbnVtTGluZXMoKSA8PCBlbmRs
OworICAvLyBrZERlYnVnKCkgPDwgIlBvc2l0aW9uICIgPDwgcG9zIDw8ICIgY29udmVydGVkIHRv
ICIgPDwgbCA8PCAiOiIgPDwgYyA8PCBlbmRsOworICBzZXRDdXJzb3JQb3NpdGlvbiggbCwgYyAp
OworICBlbnN1cmVDdXJzb3JWaXNpYmxlKCk7Cit9OworCiAjaW5jbHVkZSAia21lZGl0Lm1vYyIK
SW5kZXg6IGttYWlsL2ttbWVzc2FnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGttYWlsL2ttbWVzc2FnZS5o
CShyZXZpc2lvbiA1OTY2OTUpCisrKyBrbWFpbC9rbW1lc3NhZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtODQyLDYgKzg0MiwxMiBAQAogICAvKiogUmV0dXJuIHRoZSB0ZXh0dWFsIGNvbnRlbnQgb2Yg
dGhlIG1lc3NhZ2UgYXMgcGxhaW4gdGV4dCwKICAgICAgIGNvbnZlcnRpbmcgSFRNTCB0byBwbGFp
biB0ZXh0IGlmIG5lY2Vzc2FyeS4gKi8KICAgUVN0cmluZyBhc1BsYWluVGV4dCggYm9vbCBzdHJp
cFNpZ25hdHVyZSwgYm9vbCBhbGxvd0RlY3J5cHRpb24gKSBjb25zdDsKKyAgCisgIC8qKiBHZXQg
c3RvcmVkIGN1cnNvciBwb3NpdGlvbiAqLworICBpbnQgZ2V0Q3Vyc29yUG9zKCkgeyByZXR1cm4g
bUN1cnNvclBvczsgfTsKKyAgLyoqIFNldCBjdXJzb3IgcG9zaXRpb24gYXMgb2Zmc2V0IGZyb20g
bWVzc2FnZSBzdGFydCAqLworICB2b2lkIHNldEN1cnNvclBvcyhpbnQgcG9zKSB7IG1DdXJzb3JQ
b3MgPSBwb3M7IH07CisgIAogcHJpdmF0ZToKIAogICAvKiogSW5pdGlhbGl6YXRpb24gc2hhcmVk
IGJ5IHRoZSBjdG9ycy4gKi8KQEAgLTg2OCw2ICs4NzQsNyBAQAogICBLTU1zZ01ETlNlbnRTdGF0
ZSBtTUROU2VudFN0YXRlOwogICBLTU1lc3NhZ2UqIG1VbmVuY3J5cHRlZE1zZzsKICAgRHdCb2R5
UGFydCogbUxhc3RVcGRhdGVkOworICBpbnQgbUN1cnNvclBvczsKIH07CiAKIApJbmRleDoga21h
aWwvTWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwvTWFrZWZpbGUuYW0JKHJldmlzaW9u
IDU5NjY5NSkKKysrIGttYWlsL01ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyAr
MTI0LDggQEAKICAgICAgICAgICAgICAgICBtYWlsaW5nbGlzdHByb3BlcnRpZXNkaWFsb2cuY3Bw
IG5ld2ZvbGRlcmRpYWxvZy5jcHAgXAogICAgICAgICAgICAgICAgIGFjY291bnR3aXphcmQuY3Bw
IHRleHRzb3VyY2UuY3BwIFwKICAgICAgICAgICAgICAgICBtYW5hZ2VzaWV2ZXNjcmlwdHNkaWFs
b2cuY3BwIGNoaWFzbXVza2V5c2VsZWN0b3IuY3BwIFwKLSAgICAgICAgICAgICAgICB1dGlsLmNw
cAorICAgICAgICAgICAgICAgIHV0aWwuY3BwIHRlbXBsYXRlc2NvbmZpZ3VyYXRpb25fa2ZnLmtj
ZmdjIHRlbXBsYXRlc2NvbmZpZ3VyYXRpb24udWkgXAorICAgICAgICAgICAgICAgIHRlbXBsYXRl
cGFyc2VyLmNwcCB0ZW1wbGF0ZXNjb25maWd1cmF0aW9uaW1wbC5jcHAKIAoga21haWxfU09VUkNF
UyA9IG1haW4uY3BwCiAKQEAgLTE5Niw3ICsxOTcsNyBAQAogCSQoWEdFVFRFWFQpIC1rdHJhbnNs
YXRlICouY3BwICouaCAtbyAkKHBvZGlyKS9rbWFpbC5wb3QKIAlybSAtZiB0aXBzLmNwcAogCi1r
ZGVfa2NmZ19EQVRBID0ga21haWwua2NmZyByZXBseXBocmFzZXMua2NmZyBjdXN0b21taW1laGVh
ZGVyLmtjZmcKK2tkZV9rY2ZnX0RBVEEgPSBrbWFpbC5rY2ZnIHJlcGx5cGhyYXNlcy5rY2ZnIGN1
c3RvbW1pbWVoZWFkZXIua2NmZyB0ZW1wbGF0ZXNjb25maWd1cmF0aW9uX2tmZy5rY2ZnCiAKIERP
WFlHRU5fUkVGRVJFTkNFUyA9IGtkZXVpCiBpbmNsdWRlICQodG9wX3NyY2RpcikvYWRtaW4vRG94
eWZpbGUuYW0KSW5kZXg6IGttYWlsL2ttbWVzc2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwv
a21tZXNzYWdlLmNwcAkocmV2aXNpb24gNTk2Njk1KQorKysga21haWwva21tZXNzYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogdXNpbmcgS01haWw6OkhlYWRlclN0cmF0
ZWd5OwogI2luY2x1ZGUgImttYWRkcmJvb2suaCIKICNpbmNsdWRlICJrY3Vyc29yc2F2ZXIuaCIK
KyNpbmNsdWRlICJ0ZW1wbGF0ZXBhcnNlci5oIgogCiAjaW5jbHVkZSA8bGlia3BpbWlkZW50aXRp
ZXMvaWRlbnRpdHkuaD4KICNpbmNsdWRlIDxsaWJrcGltaWRlbnRpdGllcy9pZGVudGl0eW1hbmFn
ZXIuaD4KQEAgLTE1NSw2ICsxNTYsNyBAQAogICBtRGF0ZSAgICA9IDA7CiAgIG1VbmVuY3J5cHRl
ZE1zZyA9IDA7CiAgIG1MYXN0VXBkYXRlZCA9IDA7CisgIG1DdXJzb3JQb3MgPSAwOwogfQogCiB2
b2lkIEtNTWVzc2FnZTo6YXNzaWduKCBjb25zdCBLTU1lc3NhZ2UmIG90aGVyICkKQEAgLTg0OCw2
ICs4NTAsNyBAQAogICBRU3RyaW5nIHN0ciwgcmVwbHlTdHIsIG1haWxpbmdMaXN0U3RyLCByZXBs
eVRvU3RyLCB0b1N0cjsKICAgUVN0cmluZ0xpc3QgbWFpbGluZ0xpc3RBZGRyZXNzZXM7CiAgIFFD
U3RyaW5nIHJlZlN0ciwgaGVhZGVyTmFtZTsKKyAgYm9vbCByZXBseUFsbCA9IHRydWU7CiAKICAg
bXNnLT5pbml0RnJvbU1lc3NhZ2UodGhpcyk7CiAKQEAgLTg4Nyw2ICs4OTAsNyBAQAogICAgICAg
Ly8gZG9lc24ndCBzZWVtIHRvIGJlIGEgbWFpbGluZyBsaXN0LCByZXBseSB0byBGcm9tOiBhZGRy
ZXNzCiAgICAgICB0b1N0ciA9IGZyb20oKTsKICAgICAgIHJlcGx5U3RyID0gc1JlcGx5U3RyOyAv
LyByZXBseSB0byBhdXRob3IsIHNvIHVzZSAiT24gLi4uIHlvdSB3cm90ZToiCisgICAgICByZXBs
eUFsbCA9IGZhbHNlOwogICAgIH0KICAgICAvLyBzdHJpcCBhbGwgbXkgYWRkcmVzc2VzIGZyb20g
dGhlIGxpc3Qgb2YgcmVjaXBpZW50cwogICAgIFFTdHJpbmdMaXN0IHJlY2lwaWVudHMgPSBLUElN
OjpzcGxpdEVtYWlsQWRkckxpc3QoIHRvU3RyICk7CkBAIC0xMDE2LDYgKzEwMjAsNyBAQAogICAg
ICAgdG9TdHIgPSBmcm9tKCk7CiAgICAgfQogICAgIHJlcGx5U3RyID0gc1JlcGx5U3RyOyAvLyBy
ZXBseSB0byBhdXRob3IsIHNvIHVzZSAiT24gLi4uIHlvdSB3cm90ZToiCisgICAgcmVwbHlBbGwg
PSBmYWxzZTsKICAgICBicmVhazsKICAgfQogICBjYXNlIEtNYWlsOjpSZXBseU5vbmUgOiB7CkBA
IC0xMDMxLDE4ICsxMDM2LDIyIEBACiAgIC8vSW4tUmVwbHktVG8gPSBvcmlnaW5hbCBtc2ctaWQK
ICAgbXNnLT5zZXRSZXBseVRvSWQobXNnSWQoKSk7CiAKLSAgaWYgKCFub1F1b3RlKSB7Ci0gICAg
aWYoIHNlbGVjdGlvbklzQm9keSApewotICAgICAgUUNTdHJpbmcgY1N0ciA9IHNlbGVjdGlvbi5s
YXRpbjEoKTsKLSAgICAgIG1zZy0+c2V0Qm9keSggY1N0ciApOwotICAgIH1lbHNlewotICAgICAg
bXNnLT5zZXRCb2R5KGFzUXVvdGVkU3RyaW5nKHJlcGx5U3RyICsgIlxuIiwgc0luZGVudFByZWZp
eFN0ciwgc2VsZWN0aW9uLAotCQkJCSAgc1NtYXJ0UXVvdGUsIGFsbG93RGVjcnlwdGlvbikudXRm
OCgpKTsKLSAgICB9Ci0gIH0KKy8vICAgaWYgKCFub1F1b3RlKSB7CisvLyAgICAgaWYoIHNlbGVj
dGlvbklzQm9keSApeworLy8gICAgICAgUUNTdHJpbmcgY1N0ciA9IHNlbGVjdGlvbi5sYXRpbjEo
KTsKKy8vICAgICAgIG1zZy0+c2V0Qm9keSggY1N0ciApOworLy8gICAgIH1lbHNleworLy8gICAg
ICAgbXNnLT5zZXRCb2R5KGFzUXVvdGVkU3RyaW5nKHJlcGx5U3RyICsgIlxuIiwgc0luZGVudFBy
ZWZpeFN0ciwgc2VsZWN0aW9uLAorLy8gCQkJCSAgc1NtYXJ0UXVvdGUsIGFsbG93RGVjcnlwdGlv
bikudXRmOCgpKTsKKy8vICAgICB9CisvLyAgIH0KIAogICBtc2ctPnNldFN1YmplY3QoIHJlcGx5
U3ViamVjdCgpICk7CiAKKyAgVGVtcGxhdGVQYXJzZXIgcGFyc2VyKCBtc2csIChyZXBseUFsbCA/
IFRlbXBsYXRlUGFyc2VyOjpSZXBseUFsbCA6IFRlbXBsYXRlUGFyc2VyOjpSZXBseSksIAorICAg
IHNlbGVjdGlvbiwgc1NtYXJ0UXVvdGUsIG5vUXVvdGUsIGFsbG93RGVjcnlwdGlvbiwgc2VsZWN0
aW9uSXNCb2R5ICk7CisgIHBhcnNlci5wcm9jZXNzKCB0aGlzICk7CisKICAgLy8gc2V0U3RhdHVz
KEtNTXNnU3RhdHVzUmVwbGllZCk7CiAgIG1zZy0+bGluayh0aGlzLCBLTU1zZ1N0YXR1c1JlcGxp
ZWQpOwogCkBAIC0xMjM0LDEyICsxMjQzLDE4IEBACiAgICAgbXNnLT5tTmVlZHNBc3NlbWJseSA9
IHRydWU7CiAgICAgbXNnLT5jbGVhbnVwSGVhZGVyKCk7CiAgIH0KLSAgUVN0cmluZyBzdCA9IFFT
dHJpbmc6OmZyb21VdGY4KGNyZWF0ZUZvcndhcmRCb2R5KCkpOwotICBRQ1N0cmluZyBlbmNvZGlu
ZyA9IGF1dG9EZXRlY3RDaGFyc2V0KGNoYXJzZXQoKSwgc1ByZWZDaGFyc2V0cywgc3QpOworICAv
LyBRU3RyaW5nIHN0ID0gUVN0cmluZzo6ZnJvbVV0ZjgoY3JlYXRlRm9yd2FyZEJvZHkoKSk7CisK
KyAgbXNnLT5zZXRTdWJqZWN0KCBmb3J3YXJkU3ViamVjdCgpICk7CisgIAorICBUZW1wbGF0ZVBh
cnNlciBwYXJzZXIoIG1zZywgVGVtcGxhdGVQYXJzZXI6OkZvcndhcmQsIAorICAgIHRoaXMtPmJv
ZHkoKSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOworICBwYXJzZXIucHJvY2VzcyggdGhp
cyApOworICAKKyAgUUNTdHJpbmcgZW5jb2RpbmcgPSBhdXRvRGV0ZWN0Q2hhcnNldChjaGFyc2V0
KCksIHNQcmVmQ2hhcnNldHMsIG1zZy0+Ym9keSgpKTsKICAgaWYgKGVuY29kaW5nLmlzRW1wdHko
KSkgZW5jb2RpbmcgPSAidXRmLTgiOwogICBtc2ctPnNldENoYXJzZXQoZW5jb2RpbmcpOwotCi0g
IG1zZy0+c2V0U3ViamVjdCggZm9yd2FyZFN1YmplY3QoKSApOworICAKICAgbXNnLT5saW5rKHRo
aXMsIEtNTXNnU3RhdHVzRm9yd2FyZGVkKTsKICAgcmV0dXJuIG1zZzsKIH0KSW5kZXg6IGttYWls
L2NvbmZpZ3VyZWRpYWxvZ19wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwvY29uZmlndXJlZGlhbG9n
X3AuaAkocmV2aXNpb24gNTk2Njk1KQorKysga21haWwvY29uZmlndXJlZGlhbG9nX3AuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogY2xhc3MgQ29tcG9zZXJDcnlwdG9Db25maWd1
cmF0aW9uOwogY2xhc3MgV2FybmluZ0NvbmZpZ3VyYXRpb247CiBjbGFzcyBTTWltZUNvbmZpZ3Vy
YXRpb247CitjbGFzcyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOwogCiBuYW1lc3BhY2UgS3BncCB7
CiAgIGNsYXNzIENvbmZpZzsKQEAgLTYzMiw2ICs2MzMsMjMgQEAKICAgTGFuZ3VhZ2VJdGVtTGlz
dCBtTGFuZ3VhZ2VMaXN0OwogfTsKIAorY2xhc3MgQ29tcG9zZXJQYWdlVGVtcGxhdGVzVGFiIDog
cHVibGljIENvbmZpZ01vZHVsZVRhYiB7CisgIFFfT0JKRUNUCitwdWJsaWM6CisgIENvbXBvc2Vy
UGFnZVRlbXBsYXRlc1RhYiggUVdpZGdldCAqIHBhcmVudD0wLCBjb25zdCBjaGFyICogbmFtZT0w
ICk7CisgIFFTdHJpbmcgaGVscEFuY2hvcigpIGNvbnN0OworCisgIHZvaWQgc2F2ZSgpOworCitw
cml2YXRlIHNsb3RzOgorCitwcml2YXRlOgorICB2aXJ0dWFsIHZvaWQgZG9Mb2FkRnJvbUdsb2Jh
bFNldHRpbmdzKCk7CisKK3ByaXZhdGU6CisgICAgVGVtcGxhdGVzQ29uZmlndXJhdGlvbiogbVdp
ZGdldDsKK307CisKIGNsYXNzIENvbXBvc2VyUGFnZVN1YmplY3RUYWIgOiBwdWJsaWMgQ29uZmln
TW9kdWxlVGFiIHsKICAgUV9PQkpFQ1QKIHB1YmxpYzoKQEAgLTczNCw2ICs3NTIsNyBAQAogICAv
LyBocm1wZi4gbW9jIGRvZXNuJ3QgbGlrZSBuZXN0ZWQgY2xhc3NlcyB3aXRoIHNsb3RzL3NpZ25h
bHMuLi46CiAgIHR5cGVkZWYgQ29tcG9zZXJQYWdlR2VuZXJhbFRhYiBHZW5lcmFsVGFiOwogICB0
eXBlZGVmIENvbXBvc2VyUGFnZVBocmFzZXNUYWIgUGhyYXNlc1RhYjsKKyAgdHlwZWRlZiBDb21w
b3NlclBhZ2VUZW1wbGF0ZXNUYWIgVGVtcGxhdGVzVGFiOwogICB0eXBlZGVmIENvbXBvc2VyUGFn
ZVN1YmplY3RUYWIgU3ViamVjdFRhYjsKICAgdHlwZWRlZiBDb21wb3NlclBhZ2VDaGFyc2V0VGFi
IENoYXJzZXRUYWI7CiAgIHR5cGVkZWYgQ29tcG9zZXJQYWdlSGVhZGVyc1RhYiBIZWFkZXJzVGFi
OwpAQCAtNzQyLDYgKzc2MSw3IEBACiBwcml2YXRlOgogICBHZW5lcmFsVGFiICAqbUdlbmVyYWxU
YWI7CiAgIFBocmFzZXNUYWIgICptUGhyYXNlc1RhYjsKKyAgVGVtcGxhdGVzVGFiICAqbVRlbXBs
YXRlc1RhYjsKICAgU3ViamVjdFRhYiAgKm1TdWJqZWN0VGFiOwogICBDaGFyc2V0VGFiICAqbUNo
YXJzZXRUYWI7CiAgIEhlYWRlcnNUYWIgICptSGVhZGVyc1RhYjsKSW5kZXg6IGttYWlsL3RlbXBs
YXRlcGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwvdGVtcGxhdGVwYXJzZXIuaAkocmV2aXNp
b24gMCkKKysrIGttYWlsL3RlbXBsYXRlcGFyc2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzggQEAKKy8qICAgLSotIG1vZGU6IEMrKzsgYy1maWxlLXN0eWxlOiAiZ251IiAtKi0KKyAqICAg
a21haWw6IEtERSBtYWlsIGNsaWVudAorICogICBUaGlzIGZpbGU6IENvcHlyaWdodCAoQykgMjAw
NiBEbWl0cnkgTW9yb3pobmlrb3YKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNwcmFnbWEg
b25jZQorCitjbGFzcyBLTU1lc3NhZ2U7CitjbGFzcyBRU3RyaW5nOworY2xhc3MgS01Gb2xkZXI7
CitjbGFzcyBRT2JqZWN0OworY2xhc3MgS1Byb2Nlc3M7CisKKyNpbmNsdWRlIDxxb2JqZWN0Lmg+
CisKK2NsYXNzIFRlbXBsYXRlUGFyc2VyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNU
CisgICAgCisgICAgcHVibGljOgorICAgIAorICAgICAgICBlbnVtIE1vZGUge05ld01lc3NhZ2Us
IFJlcGx5LCBSZXBseUFsbCwgRm9yd2FyZH07CisgICAgICAgIAorICAgICAgICBzdGF0aWMgY29u
c3QgaW50IFBpcGVUaW1lb3V0ID0gMTU7CisgICAgCisgICAgcHVibGljOgorICAgIAorICAgICAg
ICBUZW1wbGF0ZVBhcnNlcihLTU1lc3NhZ2UqIGFtc2csIE1vZGUgYW1vZGUsIFFTdHJpbmcgYXNl
bGVjdGlvbiwgCisgICAgICAgICAgICBib29sIGFTbWFydFF1b3RlLCBib29sIGFub1F1b3RlLCBi
b29sIGFhbGxvd0RlY3J5cHRpb24sIGJvb2wgYXNlbGVjdGlvbklzQm9keSk7CisgICAgICAgIAor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhLTU1lc3NhZ2UqIGFvcmlnX21zZywgS01Gb2xk
ZXIqIGFmb2xkZXIgPSBOVUxMKTsKKyAgICAgICAgdmlydHVhbCBRU3RyaW5nIGZpbmRUZW1wbGF0
ZSgpOworICAgICAgICB2aXJ0dWFsIFFTdHJpbmcgcGlwZShRU3RyaW5nIGNtZCwgUVN0cmluZyBi
dWYpOworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBRU3RyaW5nIGdldEZOYW1lKFFTdHJpbmcg
c3RyKTsKKyAgICAgICAgdmlydHVhbCBRU3RyaW5nIGdldExOYW1lKFFTdHJpbmcgc3RyKTsKKyAg
ICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgCisgICAgICAgIE1vZGUgbW9kZTsKKyAgICAgICAgS01G
b2xkZXIqIGZvbGRlcjsKKyAgICAgICAgS01NZXNzYWdlKiBtc2c7CisgICAgICAgIEtNTWVzc2Fn
ZSogb3JpZ19tc2c7CisgICAgICAgIFFTdHJpbmcgc2VsZWN0aW9uOworICAgICAgICBib29sIHNt
YXJ0UXVvdGU7CisgICAgICAgIGJvb2wgbm9RdW90ZTsKKyAgICAgICAgYm9vbCBhbGxvd0RlY3J5
cHRpb247CisgICAgICAgIGJvb2wgc2VsZWN0aW9uSXNCb2R5OworICAgICAgICBpbnQgcGlwZV9y
YzsKKyAgICAgICAgUVN0cmluZyBwaXBlX291dDsKKyAgICAgICAgUVN0cmluZyBwaXBlX2VycjsK
KyAgICAgICAgYm9vbCBkZWJ1ZzsKKyAgICAgICAgUVN0cmluZyBxdW90ZVN0cmluZzsKKyAgICAg
ICAgCisgICAgICAgIGludCBwYXJzZVF1b3RlcyhRU3RyaW5nIHByZWZpeCwgUVN0cmluZyBzdHIs
IFFTdHJpbmcmIHF1b3RlKTsKKyAgICAKKyAgICBwcm90ZWN0ZWQgc2xvdHM6CisgICAgCisgICAg
ICAgIHZvaWQgb25Qcm9jZXNzRXhpdGVkKEtQcm9jZXNzICpwcm9jKTsKKyAgICAgICAgdm9pZCBv
blJlY2VpdmVkU3Rkb3V0KEtQcm9jZXNzICpwcm9jLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4p
OworICAgICAgICB2b2lkIG9uUmVjZWl2ZWRTdGRlcnIoS1Byb2Nlc3MgKnByb2MsIGNoYXIgKmJ1
ZmZlciwgaW50IGJ1Zmxlbik7CisgICAgICAgIHZvaWQgb25Xcm90ZVN0ZGluKEtQcm9jZXNzICpw
cm9jKTsKKyAgICAgICAgCit9OwpJbmRleDoga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbl9r
Zmcua2NmZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC90ZW1wbGF0ZXNjb25maWd1cmF0aW9uX2tmZy5r
Y2ZnCShyZXZpc2lvbiAwKQorKysga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcua2Nm
ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0iVVRGLTgiPz4KKzxrY2ZnIHhtbG5zPSJodHRwOi8vd3d3LmtkZS5vcmcvc3RhbmRhcmRz
L2tjZmcvMS4wIgorICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNj
aGVtYS1pbnN0YW5jZSIKKyAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5rZGUu
b3JnL3N0YW5kYXJkcy9rY2ZnLzEuMAorICAgICAgaHR0cDovL3d3dy5rZGUub3JnL3N0YW5kYXJk
cy9rY2ZnLzEuMC9rY2ZnLnhzZCIgPgorICA8a2NmZ2ZpbGUgbmFtZT0ia21haWxyYyI+CisgICAg
PHBhcmFtZXRlciBuYW1lPSJmb2xkZXIiIC8+CisgIDwva2NmZ2ZpbGU+CisKKyAgPGdyb3VwIG5h
bWU9IlRlbXBsYXRlcyAjJChmb2xkZXIpIj4KKyAgICA8ZW50cnkgbmFtZT0iVXNlQ3VzdG9tVGVt
cGxhdGVzIiB0eXBlPSJCb29sIiBrZXk9IlVzZUN1c3RvbVRlbXBsYXRlcyI+CisgICAgICA8bGFi
ZWw+PC9sYWJlbD4KKyAgICAgIDx3aGF0c3RoaXM+PC93aGF0c3RoaXM+CisgICAgICA8ZGVmYXVs
dD5mYWxzZTwvZGVmYXVsdD4KKyAgICA8L2VudHJ5PgorICAgIDxlbnRyeSBuYW1lPSJUZW1wbGF0
ZU5ld01lc3NhZ2UiIHR5cGU9IlN0cmluZyIga2V5PSJUZW1wbGF0ZU5ld01lc3NhZ2UiPgorICAg
ICAgPGxhYmVsPjwvbGFiZWw+CisgICAgICA8d2hhdHN0aGlzPjwvd2hhdHN0aGlzPgorICAgICAg
PGRlZmF1bHQ+PC9kZWZhdWx0PgorICAgIDwvZW50cnk+CisgICAgPGVudHJ5IG5hbWU9IlRlbXBs
YXRlUmVwbHkiIHR5cGU9IlN0cmluZyIga2V5PSJUZW1wbGF0ZVJlcGx5Ij4KKyAgICAgIDxsYWJl
bD48L2xhYmVsPgorICAgICAgPHdoYXRzdGhpcz48L3doYXRzdGhpcz4KKyAgICAgIDxkZWZhdWx0
PjwvZGVmYXVsdD4KKyAgICA8L2VudHJ5PgorICAgIDxlbnRyeSBuYW1lPSJUZW1wbGF0ZVJlcGx5
QWxsIiB0eXBlPSJTdHJpbmciIGtleT0iVGVtcGxhdGVSZXBseUFsbCI+CisgICAgICA8bGFiZWw+
PC9sYWJlbD4KKyAgICAgIDx3aGF0c3RoaXM+PC93aGF0c3RoaXM+CisgICAgICA8ZGVmYXVsdD48
L2RlZmF1bHQ+CisgICAgPC9lbnRyeT4KKyAgICA8ZW50cnkgbmFtZT0iVGVtcGxhdGVGb3J3YXJk
IiB0eXBlPSJTdHJpbmciIGtleT0iVGVtcGxhdGVGb3J3YXJkIj4KKyAgICAgIDxsYWJlbD48L2xh
YmVsPgorICAgICAgPHdoYXRzdGhpcz48L3doYXRzdGhpcz4KKyAgICAgIDxkZWZhdWx0PjwvZGVm
YXVsdD4KKyAgICA8L2VudHJ5PgorICAgIDxlbnRyeSBuYW1lPSJRdW90ZVN0cmluZyIgdHlwZT0i
U3RyaW5nIiBrZXk9IlF1b3RlU3RyaW5nIj4KKyAgICAgIDxsYWJlbD48L2xhYmVsPgorICAgICAg
PHdoYXRzdGhpcz48L3doYXRzdGhpcz4KKyAgICAgIDxkZWZhdWx0PjwvZGVmYXVsdD4KKyAgICA8
L2VudHJ5PgorICA8L2dyb3VwPgorCis8L2tjZmc+CkluZGV4OiBrbWFpbC9rbWNvbW1hbmRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrbWFpbC9rbWNvbW1hbmRzLmNwcAkocmV2aXNpb24gNTk2Njk1KQor
Kysga21haWwva21jb21tYW5kcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksNyBA
QAogI2luY2x1ZGUgInJlZGlyZWN0ZGlhbG9nLmgiCiB1c2luZyBLTWFpbDo6UmVkaXJlY3REaWFs
b2c7CiAjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1ZGUgInRlbXBsYXRlcGFyc2VyLmgiCiAKICNp
bmNsdWRlICJicm9hZGNhc3RzdGF0dXMuaCIKICNpbmNsdWRlICJnbG9iYWxzZXR0aW5ncy5oIgpA
QCAtMTE4NSw3ICsxMTg2LDcgQEAKICAgICB7CiAgICAgICBLTWFpbDo6Q29tcG9zZXIgKiB3aW4g
PSBLTWFpbDo6bWFrZUNvbXBvc2VyKCBmd2RNc2csIGlkICk7CiAgICAgICB3aW4tPnNldENoYXJz
ZXQoIGZ3ZE1zZy0+Y29kZWMoKS0+bWltZU5hbWUoKSwgdHJ1ZSApOwotICAgICAgd2luLT5zZXRC
b2R5KCBRU3RyaW5nOjpmcm9tVXRmOCggbXNnLT5jcmVhdGVGb3J3YXJkQm9keSgpICkgKTsKKyAg
ICAgIC8vIHdpbi0+c2V0Qm9keSggUVN0cmluZzo6ZnJvbVV0ZjgoIG1zZy0+Y3JlYXRlRm9yd2Fy
ZEJvZHkoKSApICk7CiAgICAgICB3aW4tPnNob3coKTsKICAgICB9CiAgIH0KSW5kZXg6IGttYWls
L2ttYWlsLmtjZmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwva21haWwua2NmZwkocmV2aXNpb24gNTk2
Njk1KQorKysga21haWwva21haWwua2NmZwkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDggQEAK
ICAgICAgIGh0dHA6Ly93d3cua2RlLm9yZy9zdGFuZGFyZHMva2NmZy8xLjAva2NmZy54c2QiID4K
ICAgPGluY2x1ZGU+a21nbG9iYWwuaDwvaW5jbHVkZT4KICAgPGluY2x1ZGU+cXRleHRjb2RlYy5o
PC9pbmNsdWRlPgorICA8aW5jbHVkZT50ZW1wbGF0ZXNjb25maWd1cmF0aW9uLmg8L2luY2x1ZGU+
CisgIDxpbmNsdWRlPnRlbXBsYXRlc2NvbmZpZ3VyYXRpb25pbXBsLmg8L2luY2x1ZGU+CiAgIDxr
Y2ZnZmlsZSBuYW1lPSJrbWFpbHJjIi8+CiAgICAgPGdyb3VwIG5hbWU9IkJlaGF2aW91ciI+CiAg
ICAgICA8ZW50cnkgbmFtZT0iRGVsYXllZE1hcmtBc1JlYWQiICB0eXBlPSJCb29sIj4KQEAgLTQ1
MSw0ICs0NTMsMzIgQEAKICAgICAgIDwvZW50cnk+CiAgICAgPC9ncm91cD4KIAorICA8Z3JvdXAg
bmFtZT0iR2xvYmFsVGVtcGxhdGVzIj4KKyAgICA8ZW50cnkgbmFtZT0iVGVtcGxhdGVOZXdNZXNz
YWdlIiB0eXBlPSJTdHJpbmciIGtleT0iVGVtcGxhdGVOZXdNZXNzYWdlIj4KKyAgICAgIDxsYWJl
bD5NZXNzYWdlIHRlbXBsYXRlIGZvciBuZXcgbWVzc2FnZTwvbGFiZWw+CisgICAgICA8d2hhdHN0
aGlzPjwvd2hhdHN0aGlzPgorICAgICAgPGRlZmF1bHQgY29kZT0idHJ1ZSI+VGVtcGxhdGVzQ29u
ZmlndXJhdGlvbjo6ZGVmYXVsdE5ld01lc3NhZ2UoKTwvZGVmYXVsdD4KKyAgICA8L2VudHJ5Pgor
ICAgIDxlbnRyeSBuYW1lPSJUZW1wbGF0ZVJlcGx5IiB0eXBlPSJTdHJpbmciIGtleT0iVGVtcGxh
dGVSZXBseSI+CisgICAgICA8bGFiZWw+TWVzc2FnZSB0ZW1wbGF0ZSBmb3IgcmVwbHk8L2xhYmVs
PgorICAgICAgPHdoYXRzdGhpcz48L3doYXRzdGhpcz4KKyAgICAgIDxkZWZhdWx0IGNvZGU9InRy
dWUiPlRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OmRlZmF1bHRSZXBseSgpPC9kZWZhdWx0PgorICAg
IDwvZW50cnk+CisgICAgPGVudHJ5IG5hbWU9IlRlbXBsYXRlUmVwbHlBbGwiIHR5cGU9IlN0cmlu
ZyIga2V5PSJUZW1wbGF0ZVJlcGx5QWxsIj4KKyAgICAgIDxsYWJlbD5NZXNzYWdlIHRlbXBsYXRl
IGZvciByZXBseSB0byBhbGw8L2xhYmVsPgorICAgICAgPHdoYXRzdGhpcz48L3doYXRzdGhpcz4K
KyAgICAgIDxkZWZhdWx0IGNvZGU9InRydWUiPlRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OmRlZmF1
bHRSZXBseUFsbCgpPC9kZWZhdWx0PgorICAgIDwvZW50cnk+CisgICAgPGVudHJ5IG5hbWU9IlRl
bXBsYXRlRm9yd2FyZCIgdHlwZT0iU3RyaW5nIiBrZXk9IlRlbXBsYXRlRm9yd2FyZCI+CisgICAg
ICA8bGFiZWw+TWVzc2FnZSB0ZW1wbGF0ZSBmb3IgZm9yd2FyZDwvbGFiZWw+CisgICAgICA8d2hh
dHN0aGlzPjwvd2hhdHN0aGlzPgorICAgICAgPGRlZmF1bHQgY29kZT0idHJ1ZSI+VGVtcGxhdGVz
Q29uZmlndXJhdGlvbjo6ZGVmYXVsdEZvcndhcmQoKTwvZGVmYXVsdD4KKyAgICA8L2VudHJ5Pgor
ICAgIDxlbnRyeSBuYW1lPSJRdW90ZVN0cmluZyIgdHlwZT0iU3RyaW5nIiBrZXk9IlF1b3RlU3Ry
aW5nIj4KKyAgICAgIDxsYWJlbD5RdW90ZSBjaGFyYWN0ZXJzPC9sYWJlbD4KKyAgICAgIDx3aGF0
c3RoaXM+PC93aGF0c3RoaXM+CisgICAgICA8ZGVmYXVsdCBjb2RlPSJ0cnVlIj5UZW1wbGF0ZXND
b25maWd1cmF0aW9uOjpkZWZhdWx0UXVvdGVTdHJpbmcoKTwvZGVmYXVsdD4KKyAgICA8L2VudHJ5
PgorICA8L2dyb3VwPgorCiA8L2tjZmc+CkluZGV4OiBrbWFpbC9rbW1haW53aWRnZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGttYWlsL2ttbWFpbndpZGdldC5jcHAJKHJldmlzaW9uIDU5NjY5NSkKKysr
IGttYWlsL2ttbWFpbndpZGdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAK
IHVzaW5nIEtNYWlsOjpIZWFkZXJMaXN0UXVpY2tTZWFyY2g7CiAjaW5jbHVkZSAia21oZWFkZXJz
LmgiCiAjaW5jbHVkZSAibWFpbGluZ2xpc3Rwcm9wZXJ0aWVzZGlhbG9nLmgiCisjaW5jbHVkZSAi
dGVtcGxhdGVwYXJzZXIuaCIKIAogI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICAjaW5jbHVkZSAi
c2lldmVkZWJ1Z2RpYWxvZy5oIgpAQCAtODg1LDkgKzg4NiwxNSBAQAogCiAgIGlmICggbUZvbGRl
ciApIHsKICAgICAgIG1zZy0+aW5pdEhlYWRlciggbUZvbGRlci0+aWRlbnRpdHkoKSApOworICAg
ICAgVGVtcGxhdGVQYXJzZXIgcGFyc2VyKCBtc2csIFRlbXBsYXRlUGFyc2VyOjpOZXdNZXNzYWdl
LCAKKwkiIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UgKTsKKyAgICAgIHBhcnNlci5wcm9j
ZXNzKCBOVUxMLCBtRm9sZGVyICk7CiAgICAgICB3aW4gPSBLTWFpbDo6bWFrZUNvbXBvc2VyKCBt
c2csIG1Gb2xkZXItPmlkZW50aXR5KCkgKTsKICAgfSBlbHNlIHsKICAgICAgIG1zZy0+aW5pdEhl
YWRlcigpOworICAgICAgVGVtcGxhdGVQYXJzZXIgcGFyc2VyKCBtc2csIFRlbXBsYXRlUGFyc2Vy
OjpOZXdNZXNzYWdlLCAKKwkiIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UgKTsKKyAgICAg
IHBhcnNlci5wcm9jZXNzKCBOVUxMLCBOVUxMICk7CiAgICAgICB3aW4gPSBLTWFpbDo6bWFrZUNv
bXBvc2VyKCBtc2cgKTsKICAgfQogCkluZGV4OiBrbWFpbC90ZW1wbGF0ZXNjb25maWd1cmF0aW9u
aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwu
Y3BwCShyZXZpc2lvbiAwKQorKysga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3OSBAQAorLyogICAtKi0gbW9kZTogQysrOyBjLWZp
bGUtc3R5bGU6ICJnbnUiIC0qLQorICogICBrbWFpbDogS0RFIG1haWwgY2xpZW50CisgKiAgIFRo
aXMgZmlsZTogQ29weXJpZ2h0IChDKSAyMDA2IERtaXRyeSBNb3JvemhuaWtvdgorICoKKyAqICAg
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8a2xvY2Fs
ZS5oPgorI2luY2x1ZGUgPGtnbG9iYWwuaD4KKyNpbmNsdWRlIDxxcG9wdXBtZW51Lmg+CisjaW5j
bHVkZSA8cXB1c2hidXR0b24uaD4KKyNpbmNsdWRlIDxxdGV4dGVkaXQuaD4KKyNpbmNsdWRlIDxx
bGluZWVkaXQuaD4KKyNpbmNsdWRlIDxxdG9vbGJveC5oPgorI2luY2x1ZGUgPGtkZWJ1Zy5oPgor
I2luY2x1ZGUgPHFmb250Lmg+CisKKyNpbmNsdWRlICJ0ZW1wbGF0ZXNjb25maWd1cmF0aW9uLmgi
CisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcuaCIKKyNpbmNsdWRlICJnbG9i
YWxzZXR0aW5ncy5oIgorCisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwuaCIK
KworVGVtcGxhdGVzQ29uZmlndXJhdGlvbjo6VGVtcGxhdGVzQ29uZmlndXJhdGlvbihRV2lkZ2V0
ICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpCisgICAgOlRlbXBsYXRlc0NvbmZpZ3VyYXRpb25T
dHViKHBhcmVudCwgbmFtZSkKK3sKKyAgICBRRm9udCBmKCJDb3VyaWVyIE5ldyIpOworICAgIHRl
eHRFZGl0X25ldy0+c2V0Rm9udChmKTsKKyAgICB0ZXh0RWRpdF9yZXBseS0+c2V0Rm9udChmKTsK
KyAgICB0ZXh0RWRpdF9yZXBseV9hbGwtPnNldEZvbnQoZik7CisgICAgdGV4dEVkaXRfZm9yd2Fy
ZC0+c2V0Rm9udChmKTsKKyAgICAKKyAgICBzZXRTaXplUG9saWN5KFFTaXplUG9saWN5OjpFeHBh
bmRpbmcsIFFTaXplUG9saWN5OjpFeHBhbmRpbmcpOworICAgIHNpemVIaW50KCk7CisgICAgCisg
ICAgY29ubmVjdCggdGV4dEVkaXRfbmV3LCBTSUdOQUwoIHRleHRDaGFuZ2VkKCkgKSwKKwkgICAg
dGhpcywgU0xPVCggc2xvdFRleHRDaGFuZ2VkKCB2b2lkICkgKSApOworICAgIGNvbm5lY3QoIHRl
eHRFZGl0X3JlcGx5LCBTSUdOQUwoIHRleHRDaGFuZ2VkKCkgKSwKKwkgICAgdGhpcywgU0xPVCgg
c2xvdFRleHRDaGFuZ2VkKCB2b2lkICkgKSApOworICAgIGNvbm5lY3QoIHRleHRFZGl0X3JlcGx5
X2FsbCwgU0lHTkFMKCB0ZXh0Q2hhbmdlZCgpICksCisJICAgIHRoaXMsIFNMT1QoIHNsb3RUZXh0
Q2hhbmdlZCggdm9pZCApICkgKTsKKyAgICBjb25uZWN0KCB0ZXh0RWRpdF9mb3J3YXJkLCBTSUdO
QUwoIHRleHRDaGFuZ2VkKCkgKSwKKwkgICAgdGhpcywgU0xPVCggc2xvdFRleHRDaGFuZ2VkKCB2
b2lkICkgKSApOworICAgIGNvbm5lY3QoIGxpbmVFZGl0X3F1b3RlLCBTSUdOQUwoIHRleHRDaGFu
Z2VkKCBjb25zdCBRU3RyaW5nICYgKSApLAorCSAgICB0aGlzLCBTTE9UKCBzbG90VGV4dENoYW5n
ZWQoIHZvaWQgKSApICk7Cit9OworCit2b2lkIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OnNsb3RU
ZXh0Q2hhbmdlZCgpIHsKKyAgICBlbWl0IGNoYW5nZWQoKTsKK307CisKK3ZvaWQgVGVtcGxhdGVz
Q29uZmlndXJhdGlvbjo6bG9hZEZyb21HbG9iYWwoKSB7CisgICAgUVN0cmluZyBzdHI7CisgICAg
c3RyID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+dGVtcGxhdGVOZXdNZXNzYWdlKCk7CisgICAg
aWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAgICB0ZXh0RWRpdF9uZXctPnNldFRleHQoZGVmYXVs
dE5ld01lc3NhZ2UoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4dEVkaXRfbmV3LT5zZXRU
ZXh0KHN0cik7CisgICAgfTsKKyAgICBzdHIgPSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT50ZW1w
bGF0ZVJlcGx5KCk7CisgICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAgICB0ZXh0RWRpdF9y
ZXBseS0+c2V0VGV4dChkZWZhdWx0UmVwbHkoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4
dEVkaXRfcmVwbHktPnNldFRleHQoc3RyKTsKKyAgICB9OworICAgIHN0ciA9IEdsb2JhbFNldHRp
bmdzOjpzZWxmKCktPnRlbXBsYXRlUmVwbHlBbGwoKTsKKyAgICBpZihzdHIuaXNFbXB0eSgpKSB7
CisgICAgICAgIHRleHRFZGl0X3JlcGx5X2FsbC0+c2V0VGV4dChkZWZhdWx0UmVwbHlBbGwoKSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4dEVkaXRfcmVwbHlfYWxsLT5zZXRUZXh0KHN0cik7
CisgICAgfTsKKyAgICBzdHIgPSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT50ZW1wbGF0ZUZvcndh
cmQoKTsKKyAgICBpZihzdHIuaXNFbXB0eSgpKSB7CisgICAgICAgIHRleHRFZGl0X2ZvcndhcmQt
PnNldFRleHQoZGVmYXVsdEZvcndhcmQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4dEVk
aXRfZm9yd2FyZC0+c2V0VGV4dChzdHIpOworICAgIH07CisgICAgc3RyID0gR2xvYmFsU2V0dGlu
Z3M6OnNlbGYoKS0+cXVvdGVTdHJpbmcoKTsKKyAgICBpZihzdHIuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGxpbmVFZGl0X3F1b3RlLT5zZXRUZXh0KGRlZmF1bHRRdW90ZVN0cmluZygpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBsaW5lRWRpdF9xdW90ZS0+c2V0VGV4dChzdHIpOworICAgIH07Cit9
OworCit2b2lkIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OnNhdmVUb0dsb2JhbCgpIHsKKyAgICBH
bG9iYWxTZXR0aW5nczo6c2VsZigpLT5zZXRUZW1wbGF0ZU5ld01lc3NhZ2UodGV4dEVkaXRfbmV3
LT50ZXh0KCkpOworICAgIEdsb2JhbFNldHRpbmdzOjpzZWxmKCktPnNldFRlbXBsYXRlUmVwbHko
dGV4dEVkaXRfcmVwbHktPnRleHQoKSk7CisgICAgR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+c2V0
VGVtcGxhdGVSZXBseUFsbCh0ZXh0RWRpdF9yZXBseV9hbGwtPnRleHQoKSk7CisgICAgR2xvYmFs
U2V0dGluZ3M6OnNlbGYoKS0+c2V0VGVtcGxhdGVGb3J3YXJkKHRleHRFZGl0X2ZvcndhcmQtPnRl
eHQoKSk7CisgICAgR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+c2V0UXVvdGVTdHJpbmcobGluZUVk
aXRfcXVvdGUtPnRleHQoKSk7CisgICAgR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+d3JpdGVDb25m
aWcoKTsKK307CisKK3ZvaWQgVGVtcGxhdGVzQ29uZmlndXJhdGlvbjo6bG9hZEZyb21Gb2xkZXIo
UVN0cmluZyBpZCkgeworICAgIFRlbXBsYXRlcyB0KGlkKTsKKyAgICAKKyAgICBRU3RyaW5nIHN0
cjsKKyAgICAKKyAgICBzdHIgPSB0LnRlbXBsYXRlTmV3TWVzc2FnZSgpOworICAgIGlmKHN0ci5p
c0VtcHR5KCkpIHsKKyAgICAgICAgc3RyID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+dGVtcGxh
dGVOZXdNZXNzYWdlKCk7CisgICAgfTsKKyAgICBpZihzdHIuaXNFbXB0eSgpKSB7CisgICAgICAg
IHN0ciA9IGRlZmF1bHROZXdNZXNzYWdlKCk7CisgICAgfTsKKyAgICB0ZXh0RWRpdF9uZXctPnNl
dFRleHQoc3RyKTsKKyAgICAKKyAgICBzdHIgPSB0LnRlbXBsYXRlUmVwbHkoKTsKKyAgICBpZihz
dHIuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0ciA9IEdsb2JhbFNldHRpbmdzOjpzZWxmKCktPnRl
bXBsYXRlUmVwbHkoKTsKKyAgICB9OworICAgIGlmKHN0ci5pc0VtcHR5KCkpIHsKKyAgICAgICAg
c3RyID0gZGVmYXVsdFJlcGx5KCk7CisgICAgfTsKKyAgICB0ZXh0RWRpdF9yZXBseS0+c2V0VGV4
dChzdHIpOworICAgIAorICAgIHN0ciA9IHQudGVtcGxhdGVSZXBseUFsbCgpOworICAgIGlmKHN0
ci5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3RyID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+dGVt
cGxhdGVSZXBseUFsbCgpOworICAgIH07CisgICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAg
ICBzdHIgPSBkZWZhdWx0UmVwbHlBbGwoKTsKKyAgICB9OworICAgIHRleHRFZGl0X3JlcGx5X2Fs
bC0+c2V0VGV4dChzdHIpOworICAgIAorICAgIHN0ciA9IHQudGVtcGxhdGVGb3J3YXJkKCk7Cisg
ICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAgICBzdHIgPSBHbG9iYWxTZXR0aW5nczo6c2Vs
ZigpLT50ZW1wbGF0ZUZvcndhcmQoKTsKKyAgICB9OworICAgIGlmKHN0ci5pc0VtcHR5KCkpIHsK
KyAgICAgICAgc3RyID0gZGVmYXVsdEZvcndhcmQoKTsKKyAgICB9OworICAgIHRleHRFZGl0X2Zv
cndhcmQtPnNldFRleHQoc3RyKTsKKyAgICAKKyAgICBzdHIgPSB0LnF1b3RlU3RyaW5nKCk7Cisg
ICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAgICBzdHIgPSBHbG9iYWxTZXR0aW5nczo6c2Vs
ZigpLT5xdW90ZVN0cmluZygpOworICAgIH07CisgICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAg
ICAgICBzdHIgPSBkZWZhdWx0UXVvdGVTdHJpbmcoKTsKKyAgICB9OworICAgIGxpbmVFZGl0X3F1
b3RlLT5zZXRUZXh0KHN0cik7Cit9OworCit2b2lkIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OnNh
dmVUb0ZvbGRlcihRU3RyaW5nIGlkKSB7CisgICAgVGVtcGxhdGVzIHQoaWQpOworICAgIAorICAg
IHQuc2V0VGVtcGxhdGVOZXdNZXNzYWdlKHRleHRFZGl0X25ldy0+dGV4dCgpKTsKKyAgICB0LnNl
dFRlbXBsYXRlUmVwbHkodGV4dEVkaXRfcmVwbHktPnRleHQoKSk7CisgICAgdC5zZXRUZW1wbGF0
ZVJlcGx5QWxsKHRleHRFZGl0X3JlcGx5X2FsbC0+dGV4dCgpKTsKKyAgICB0LnNldFRlbXBsYXRl
Rm9yd2FyZCh0ZXh0RWRpdF9mb3J3YXJkLT50ZXh0KCkpOworICAgIHQuc2V0UXVvdGVTdHJpbmco
bGluZUVkaXRfcXVvdGUtPnRleHQoKSk7CisgICAgdC53cml0ZUNvbmZpZygpOworfTsKKwordm9p
ZCBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpidXR0b25faW5zZXJ0X2NsaWNrZWQoKSB7CisgICAg
UVBvcHVwTWVudSBwb3B1cChidXR0b25faW5zZXJ0KTsKKyAgICAKKyAgICBRUG9wdXBNZW51IHF1
b3RlX3BvcHVwKCZwb3B1cCk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJRdW90
ZWQgbWVzc2FnZSIpLCBDUXVvdGUpOworICAgIHF1b3RlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigi
TWVzc2FnZSB0ZXh0IGFzIGlzIiksIENUZXh0KTsKKyAgICBxdW90ZV9wb3B1cC5pbnNlcnRJdGVt
KGkxOG4oIk1lc3NhZ2UgaWQiKSwgQ09Nc2dJZCk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRl
bShpMThuKCJEYXRlIiksIENPRGF0ZSk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThu
KCJEYXRlIGluIHNob3J0IGZvcm1hdCIpLCBDT0RhdGVTaG9ydCk7CisgICAgcXVvdGVfcG9wdXAu
aW5zZXJ0SXRlbShpMThuKCJEYXRlIGluIEMgbG9jYWxlIiksIENPRGF0ZUVuKTsKKyAgICBxdW90
ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkRheSBvZiB3ZWVrIiksIENPRG93KTsKKyAgICBxdW90
ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlRpbWUiKSwgQ09UaW1lKTsKKyAgICBxdW90ZV9wb3B1
cC5pbnNlcnRJdGVtKGkxOG4oIlRpbWUgaW4gbG9uZyBmb3JtYXQiKSwgQ09UaW1lTG9uZyk7Cisg
ICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJUaW1lIGluIEMgbG9jYWxlIiksIENPVGlt
ZUxvbmdFbik7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJUbyBmaWVsZCBhZGRy
ZXNzIiksIENPVG9BZGRyKTsKKyAgICBxdW90ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlRvIGZp
ZWxkIG5hbWUiKSwgQ09Ub05hbWUpOworICAgIHF1b3RlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigi
VG8gZmllbGQgZmlyc3QgbmFtZSIpLCBDT1RvRk5hbWUpOworICAgIHF1b3RlX3BvcHVwLmluc2Vy
dEl0ZW0oaTE4bigiVG8gZmllbGQgbGFzdCBuYW1lIiksIENPVG9MTmFtZSk7CisgICAgcXVvdGVf
cG9wdXAuaW5zZXJ0SXRlbShpMThuKCJGcm9tIGZpZWxkIGFkZHJlc3MiKSwgQ09Gcm9tQWRkcik7
CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJGcm9tIGZpZWxkIG5hbWUiKSwgQ09G
cm9tTmFtZSk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJGcm9tIGZpZWxkIGZp
cnN0IG5hbWUiKSwgQ09Gcm9tRk5hbWUpOworICAgIHF1b3RlX3BvcHVwLmluc2VydEl0ZW0oaTE4
bigiRnJvbSBmaWVsZCBsYXN0IG5hbWUiKSwgQ09Gcm9tTE5hbWUpOworICAgIHF1b3RlX3BvcHVw
Lmluc2VydEl0ZW0oaTE4bigiU3ViamVjdCIpLCBDT0Z1bGxTdWJqZWN0KTsKKyAgICBxdW90ZV9w
b3B1cC5pbnNlcnRJdGVtKGkxOG4oIlF1b3RlZCBoZWFkZXJzIiksIENRSGVhZGVycyk7CisgICAg
cXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJIZWFkZXJzIGFzIGlzIiksIENIZWFkZXJzKTsK
KyAgICBxdW90ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkhlYWRlciBjb250ZW50IiksIENPSGVh
ZGVyKTsKKyAgICBwb3B1cC5pbnNlcnRJdGVtKGkxOG4oIk9yaWdpbmFsIG1lc3NhZ2UiKSwgJnF1
b3RlX3BvcHVwKTsKKyAgICAKKyAgICBRUG9wdXBNZW51IG1zZ19wb3B1cCgmcG9wdXApOworICAg
IG1zZ19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIk1lc3NhZ2UgaWQiKSwgQ01zZ0lkKTsKKyAgICBt
c2dfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJEYXRlIiksIENEYXRlKTsKKyAgICBtc2dfcG9wdXAu
aW5zZXJ0SXRlbShpMThuKCJEYXRlIGluIHNob3J0IGZvcm1hdCIpLCBDRGF0ZVNob3J0KTsKKyAg
ICBtc2dfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJEYXRlIGluIEMgbG9jYWxlIiksIENEYXRlRW4p
OworICAgIG1zZ19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkRheSBvZiB3ZWVrIiksIENEb3cpOwor
ICAgIG1zZ19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlRpbWUiKSwgQ1RpbWUpOworICAgIG1zZ19w
b3B1cC5pbnNlcnRJdGVtKGkxOG4oIlRpbWUgaW4gbG9uZyBmb3JtYXQiKSwgQ1RpbWVMb25nKTsK
KyAgICBtc2dfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJUaW1lIGluIEMgbG9jYWxlIiksIENUaW1l
TG9uZ0VuKTsKKyAgICBtc2dfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJUbyBmaWVsZCBhZGRyZXNz
IiksIENUb0FkZHIpOworICAgIG1zZ19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlRvIGZpZWxkIG5h
bWUiKSwgQ1RvTmFtZSk7CisgICAgbXNnX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiVG8gZmllbGQg
Zmlyc3QgbmFtZSIpLCBDVG9GTmFtZSk7CisgICAgbXNnX3BvcHVwLmluc2VydEl0ZW0oaTE4bigi
VG8gZmllbGQgbGFzdCBuYW1lIiksIENUb0xOYW1lKTsKKyAgICBtc2dfcG9wdXAuaW5zZXJ0SXRl
bShpMThuKCJGcm9tIGZpZWxkIGFkZHJlc3MiKSwgQ0Zyb21BZGRyKTsKKyAgICBtc2dfcG9wdXAu
aW5zZXJ0SXRlbShpMThuKCJGcm9tIGZpZWxkIG5hbWUiKSwgQ0Zyb21OYW1lKTsKKyAgICBtc2df
cG9wdXAuaW5zZXJ0SXRlbShpMThuKCJGcm9tIGZpZWxkIGZpcnN0IG5hbWUiKSwgQ0Zyb21GTmFt
ZSk7CisgICAgbXNnX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiRnJvbSBmaWVsZCBsYXN0IG5hbWUi
KSwgQ0Zyb21MTmFtZSk7CisgICAgbXNnX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiU3ViamVjdCIp
LCBDRnVsbFN1YmplY3QpOworICAgIG1zZ19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkhlYWRlciBj
b250ZW50IiksIENIZWFkZXIpOworICAgIHBvcHVwLmluc2VydEl0ZW0oaTE4bigiQ3VycmVudCBt
ZXNzYWdlIiksICZtc2dfcG9wdXApOworICAgIAorICAgIFFQb3B1cE1lbnUgcGlwZV9wb3B1cCgm
cG9wdXApOworICAgIHBpcGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJJbnNlcnQgcmVzdWx0IG9m
IGNvbW1hbmQiKSwgQ1N5c3RlbSk7CisgICAgcGlwZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlBp
cGUgb3JpZ2luYWwgbWVzc2FnZSBib2R5IGFuZCBpbnNlcnQgcmVzdWx0IGFzIHF1b3RlZCB0ZXh0
IiksIENRdW90ZVBpcGUpOworICAgIHBpcGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJQaXBlIG9y
aWdpbmFsIG1lc3NhZ2UgYm9keSBhbmQgaW5zZXJ0IHJlc3VsdCBhcyBpcyIpLCBDVGV4dFBpcGUp
OworICAgIHBpcGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJQaXBlIG9yaWdpbmFsIG1lc3NhZ2Ug
d2l0aCBoZWFkZXJzIGFuZCBpbnNlcnQgcmVzdWx0IGFzIGlzIiksIENNc2dQaXBlKTsKKyAgICBw
aXBlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiUGlwZSBjdXJyZW50IG1lc3NhZ2UgYm9keSBhbmQg
aW5zZXJ0IHJlc3VsdCBhcyBpcyIpLCBDQm9keVBpcGUpOworICAgIHBpcGVfcG9wdXAuaW5zZXJ0
SXRlbShpMThuKCJQaXBlIGN1cnJlbnQgbWVzc2FnZSBib2R5IGFuZCByZXBsYWNlIHdpdGggcmVz
dWx0IiksIENDbGVhclBpcGUpOworICAgIHBvcHVwLmluc2VydEl0ZW0oaTE4bigiUHJvY2VzcyB3
aXRoIGV4dGVybmFsIHByb2dyYW1zIiksICZwaXBlX3BvcHVwKTsKKyAgICAKKyAgICBRUG9wdXBN
ZW51IG1pc2NfcG9wdXAoJnBvcHVwKTsKKyAgICBtaXNjX3BvcHVwLmluc2VydEl0ZW0oaTE4bigi
U2V0IGN1cnNvciBwb3NpdGlvbiIpLCBDQ3Vyc29yKTsKKyAgICBtaXNjX3BvcHVwLmluc2VydEl0
ZW0oaTE4bigiSW5zZXJ0IGZpbGUgY29udGVudCIpLCBDSW5zZXJ0KTsKKyAgICBtaXNjX3BvcHVw
Lmluc2VydEl0ZW0oaTE4bigiRE5MIiksIENEbmwpOworICAgIG1pc2NfcG9wdXAuaW5zZXJ0SXRl
bShpMThuKCJUZW1wbGF0ZSBjb21tZW50IiksIENSZW0pOworICAgIG1pc2NfcG9wdXAuaW5zZXJ0
SXRlbShpMThuKCJObyBvcGVyYXRpb24iKSwgQ05vcCk7CisgICAgbWlzY19wb3B1cC5pbnNlcnRJ
dGVtKGkxOG4oIkNsZWFyIGdlbmVyYXRlZCBtZXNzYWdlIiksIENDbGVhcik7CisgICAgbWlzY19w
b3B1cC5pbnNlcnRJdGVtKGkxOG4oIlR1cm4gZGVidWcgb24iKSwgQ0RlYnVnKTsKKyAgICBtaXNj
X3BvcHVwLmluc2VydEl0ZW0oaTE4bigiVHVybiBkZWJ1ZyBvZmYiKSwgQ0RlYnVnT2ZmKTsKKyAg
ICBwb3B1cC5pbnNlcnRJdGVtKGkxOG4oIk1pc2NlbGFuZW91cyIpLCAmbWlzY19wb3B1cCk7Cisg
ICAgCisgICAgUVNpemUgcHMgPSBwb3B1cC5zaXplSGludCgpOworICAgIGludCBpbmRleCA9IHBv
cHVwLmV4ZWMoYnV0dG9uX2luc2VydC0+bWFwVG9HbG9iYWwoUVBvaW50KDAsLShwcy5oZWlnaHQo
KSkpKSk7CisgICAgCisgICAgLy8ga2REZWJ1ZygpIDw8ICJUZW1wbGF0ZSBjb21tYW5kIGluZGV4
OiAiIDw8IGluZGV4IDw8IGVuZGw7CisgICAgCisgICAgaWYoaW5kZXggPiAwKSB7CisgICAgICAg
IHN3aXRjaChpbmRleCkgeworICAgICAgICAgICAgY2FzZSBDUXVvdGU6IGluc2VydENvbW1hbmQo
IiVRVU9URSIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1RleHQ6IGluc2VydENvbW1hbmQo
IiVURVhUIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT01zZ0lkOiBpbnNlcnRDb21tYW5k
KCIlT01TR0lEIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0RhdGU6IGluc2VydENvbW1h
bmQoIiVPREFURSIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09EYXRlU2hvcnQ6IGluc2Vy
dENvbW1hbmQoIiVPREFURVNIT1JUIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0RhdGVF
bjogaW5zZXJ0Q29tbWFuZCgiJU9EQVRFRU4iKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENP
RG93OiBpbnNlcnRDb21tYW5kKCIlT0RPVyIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09U
aW1lOiBpbnNlcnRDb21tYW5kKCIlT1RJTUUiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENP
VGltZUxvbmc6IGluc2VydENvbW1hbmQoIiVPVElNRUxPTkciKTsgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIENPVGltZUxvbmdFbjogaW5zZXJ0Q29tbWFuZCgiJU9USU1FTE9OR0VOIik7IGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDT1RvQWRkcjogaW5zZXJ0Q29tbWFuZCgiJU9UT0FERFIiKTsg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIENPVG9OYW1lOiBpbnNlcnRDb21tYW5kKCIlT1RPTkFN
RSIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09Ub0ZOYW1lOiBpbnNlcnRDb21tYW5kKCIl
T1RPRk5BTUUiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPVG9MTmFtZTogaW5zZXJ0Q29t
bWFuZCgiJU9UT0xOQU1FIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0Zyb21BZGRyOiBp
bnNlcnRDb21tYW5kKCIlT0ZST01BRERSIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0Zy
b21OYW1lOiBpbnNlcnRDb21tYW5kKCIlT0ZST01OQU1FIik7IGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBDT0Zyb21GTmFtZTogaW5zZXJ0Q29tbWFuZCgiJU9GUk9NRk5BTUUiKTsgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIENPRnJvbUxOYW1lOiBpbnNlcnRDb21tYW5kKCIlT0ZST01MTkFNRSIp
OyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09GdWxsU3ViamVjdDogaW5zZXJ0Q29tbWFuZCgi
JU9GVUxMU1VCSkVDVCIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1FIZWFkZXJzOiBpbnNl
cnRDb21tYW5kKCIlUUhFQURFUlMiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENIZWFkZXJz
OiBpbnNlcnRDb21tYW5kKCIlSEVBREVSUyIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09I
ZWFkZXI6IGluc2VydENvbW1hbmQoIiVPSEVBREVSPVwiXCIiLCAtMSk7IGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBDTXNnSWQ6IGluc2VydENvbW1hbmQoIiVNU0dJRCIpOyBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQ0RhdGU6IGluc2VydENvbW1hbmQoIiVEQVRFIik7IGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBDRGF0ZVNob3J0OiBpbnNlcnRDb21tYW5kKCIlREFURVNIT1JUIik7IGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDRGF0ZUVuOiBpbnNlcnRDb21tYW5kKCIlREFURUVOIik7IGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBDRG93OiBpbnNlcnRDb21tYW5kKCIlRE9XIik7IGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDVGltZTogaW5zZXJ0Q29tbWFuZCgiJVRJTUUiKTsgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENUaW1lTG9uZzogaW5zZXJ0Q29tbWFuZCgiJVRJTUVMT05HIik7
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDVGltZUxvbmdFbjogaW5zZXJ0Q29tbWFuZCgiJVRJ
TUVMT05HRU4iKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENUb0FkZHI6IGluc2VydENvbW1h
bmQoIiVUT0FERFIiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENUb05hbWU6IGluc2VydENv
bW1hbmQoIiVUT05BTUUiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENUb0ZOYW1lOiBpbnNl
cnRDb21tYW5kKCIlVE9GTkFNRSIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1RvTE5hbWU6
IGluc2VydENvbW1hbmQoIiVUT0xOQU1FIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDRnJv
bUFkZHI6IGluc2VydENvbW1hbmQoIiVGUk9NQUREUiIpOyBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQ0Zyb21OYW1lOiBpbnNlcnRDb21tYW5kKCIlRlJPTU5BTUUiKTsgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIENGcm9tRk5hbWU6IGluc2VydENvbW1hbmQoIiVGUk9NRk5BTUUiKTsgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENGcm9tTE5hbWU6IGluc2VydENvbW1hbmQoIiVGUk9NTE5BTUUi
KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENGdWxsU3ViamVjdDogaW5zZXJ0Q29tbWFuZCgi
JUZVTExTVUJKRUNUIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDSGVhZGVyOiBpbnNlcnRD
b21tYW5kKCIlSEVBREVSPVwiXCIiLCAtMSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU3lz
dGVtOiBpbnNlcnRDb21tYW5kKCIlU1lTVEVNPVwiXCIiLCAtMSk7IGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBDUXVvdGVQaXBlOiBpbnNlcnRDb21tYW5kKCIlUVVPVEVQSVBFPVwiXCIiLCAtMSk7
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDVGV4dFBpcGU6IGluc2VydENvbW1hbmQoIiVURVhU
UElQRT1cIlwiIiwgLTEpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ01zZ1BpcGU6IGluc2Vy
dENvbW1hbmQoIiVNU0dQSVBFPVwiXCIiLCAtMSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBD
Qm9keVBpcGU6IGluc2VydENvbW1hbmQoIiVCT0RZUElQRT1cIlwiIiwgLTEpOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQ0NsZWFyUGlwZTogaW5zZXJ0Q29tbWFuZCgiJUNMRUFSUElQRT1cIlwi
IiwgLTEpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0N1cnNvcjogaW5zZXJ0Q29tbWFuZCgi
JUNVUlNPUiIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0luc2VydDogaW5zZXJ0Q29tbWFu
ZCgiJUlOU0VSVD1cIlwiIiwgLTEpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0RubDogaW5z
ZXJ0Q29tbWFuZCgiJS0iKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENSZW06IGluc2VydENv
bW1hbmQoIiVSRU09XCJcIiIsIC0xKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENOb3A6IGlu
c2VydENvbW1hbmQoIiVOT1AiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENDbGVhcjogaW5z
ZXJ0Q29tbWFuZCgiJUNMRUFSIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDRGVidWc6IGlu
c2VydENvbW1hbmQoIiVERUJVRyIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0RlYnVnT2Zm
OiBpbnNlcnRDb21tYW5kKCIlREVCVUdPRkYiKTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OiAKKyAgICAgICAgICAgICAgICBrZERlYnVnKCkgPDwgIlVua25vd24gdGVtcGxhdGUgY29tbWFu
ZCBpbmRleDogIiA8PCBpbmRleCA8PCBlbmRsOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9OworICAgIH07Cit9OworCit2b2lkIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246Omluc2Vy
dENvbW1hbmQoUVN0cmluZyBjbWQsIGludCBhZGp1c3RDdXJzb3IpIHsKKyAgICBRVGV4dEVkaXQq
IGVkaXQ7CisgICAgCisgICAgaWYodG9vbEJveDEtPmN1cnJlbnRJdGVtKCkgPT0gcGFnZV9uZXcp
IHsKKyAgICAgICAgZWRpdCA9IHRleHRFZGl0X25ldzsKKyAgICB9IGVsc2UgaWYodG9vbEJveDEt
PmN1cnJlbnRJdGVtKCkgPT0gcGFnZV9yZXBseSkgeworICAgICAgICBlZGl0ID0gdGV4dEVkaXRf
cmVwbHk7CisgICAgfSBlbHNlIGlmKHRvb2xCb3gxLT5jdXJyZW50SXRlbSgpID09IHBhZ2VfcmVw
bHlfYWxsKSB7CisgICAgICAgIGVkaXQgPSB0ZXh0RWRpdF9yZXBseV9hbGw7CisgICAgfSBlbHNl
IGlmKHRvb2xCb3gxLT5jdXJyZW50SXRlbSgpID09IHBhZ2VfZm9yd2FyZCkgeworICAgICAgICBl
ZGl0ID0gdGV4dEVkaXRfZm9yd2FyZDsKKyAgICB9IGVsc2UgeworICAgICAgICBrZERlYnVnKCkg
PDwgIlVua25vd24gY3VycmVudCBwYWdlIGluIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb24hIiA8PCBl
bmRsOworICAgICAgICByZXR1cm47CisgICAgfTsKKyAgICAKKyAgICAvLyBrZERlYnVnKCkgPDwg
Ikluc2VydCBjb21tYW5kOiAiIDw8IGNtZCA8PCBlbmRsOworICAgIAorICAgIGludCBwYXJhLCBp
bmRleDsKKyAgICBlZGl0LT5nZXRDdXJzb3JQb3NpdGlvbigmcGFyYSwgJmluZGV4KTsKKyAgICBl
ZGl0LT5pbnNlcnRBdChjbWQsIHBhcmEsIGluZGV4KTsKKyAgICAKKyAgICBpbmRleCArPSBhZGp1
c3RDdXJzb3I7CisgICAgCisgICAgZWRpdC0+c2V0Q3Vyc29yUG9zaXRpb24ocGFyYSwgaW5kZXgg
KyBjbWQubGVuZ3RoKCkpOworfTsKKworUVN0cmluZyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpk
ZWZhdWx0TmV3TWVzc2FnZSgpIHsKKyAgICByZXR1cm4gaTE4bigKKyAgICAgICAgIiVSRU09XCJE
ZWZhdWx0IG5ldyBtZXNzYWdlIHRlbXBsYXRlXCIlLVxuIgorICAgICAgICAiJUJMQU5LIgorICAg
ICAgICApOworfTsKKworUVN0cmluZyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpkZWZhdWx0UmVw
bHkoKSB7CisgICAgcmV0dXJuIGkxOG4oCisgICAgICAgICIlUkVNPVwiRGVmYXVsdCByZXBseSB0
ZW1wbGF0ZVwiJS1cbiIKKyAgICAgICAgIkhlbGxvLCAlT0ZST01GTkFNRSFcbiIKKyAgICAgICAg
IlxuIgorICAgICAgICAiT24gJU9EQVRFRU4gJU9USU1FTE9OR0VOIHlvdSB3cm90ZTpcbiIKKyAg
ICAgICAgIiVRVU9URVxuIgorICAgICAgICAiJUNVUlNPUlxuIgorICAgICAgICApOworfTsKKwor
UVN0cmluZyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpkZWZhdWx0UmVwbHlBbGwoKSB7CisgICAg
cmV0dXJuIGkxOG4oCisgICAgICAgICIlUkVNPVwiRGVmYXVsdCByZXBseSBhbGwgdGVtcGxhdGVc
IiUtXG4iCisgICAgICAgICJIZWxsbyFcbiIKKyAgICAgICAgIlxuIgorICAgICAgICAiT24gJU9E
QVRFRU4gJU9USU1FTE9OR0VOICVPRlJPTU5BTUUgd3JvdGU6XG4iCisgICAgICAgICIlUVVPVEVc
biIKKyAgICAgICAgIiVDVVJTT1JcbiIKKyAgICAgICAgKTsKK307CisKK1FTdHJpbmcgVGVtcGxh
dGVzQ29uZmlndXJhdGlvbjo6ZGVmYXVsdEZvcndhcmQoKSB7CisgICAgcmV0dXJuIGkxOG4oCisg
ICAgICAgICIlUkVNPVwiRGVmYXVsdCBmb3J3YXJkIHRlbXBsYXRlXCIlLVxuIgorICAgICAgICAi
VGhpcyBpcyBhIGZvcndhcmRlZCBtZXNzYWdlOlxuIgorICAgICAgICAiPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iCisgICAgICAgICIlVEVYVFxuIgorICAgICAg
ICAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgorICAgICAgICAp
OworfTsKKworUVN0cmluZyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpkZWZhdWx0UXVvdGVTdHJp
bmcoKSB7CisgICAgcmV0dXJuICI+ICI7Cit9OworCisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmln
dXJhdGlvbmltcGwubW9jIgpJbmRleDoga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbi51aQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrbWFpbC90ZW1wbGF0ZXNjb25maWd1cmF0aW9uLnVpCShyZXZpc2lvbiAw
KQorKysga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbi51aQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzMzQgQEAKKzwhRE9DVFlQRSBVST48VUkgdmVyc2lvbj0iMy4zIiBzdGRzZXRkZWY9IjEi
PgorPGNsYXNzPlRlbXBsYXRlc0NvbmZpZ3VyYXRpb25TdHViPC9jbGFzcz4KKzx3aWRnZXQgY2xh
c3M9IlFXaWRnZXQiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAgPGNzdHJp
bmc+VGVtcGxhdGVzQ29uZmlndXJhdGlvbjwvY3N0cmluZz4KKyAgICA8L3Byb3BlcnR5PgorICAg
IDxwcm9wZXJ0eSBuYW1lPSJnZW9tZXRyeSI+CisgICAgICAgIDxyZWN0PgorICAgICAgICAgICAg
PHg+MDwveD4KKyAgICAgICAgICAgIDx5PjA8L3k+CisgICAgICAgICAgICA8d2lkdGg+NDQ5PC93
aWR0aD4KKyAgICAgICAgICAgIDxoZWlnaHQ+NDUwPC9oZWlnaHQ+CisgICAgICAgIDwvcmVjdD4K
KyAgICA8L3Byb3BlcnR5PgorICAgIDxwcm9wZXJ0eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAg
ICAgPHNpemVwb2xpY3k+CisgICAgICAgICAgICA8aHNpemV0eXBlPjc8L2hzaXpldHlwZT4KKyAg
ICAgICAgICAgIDx2c2l6ZXR5cGU+NzwvdnNpemV0eXBlPgorICAgICAgICAgICAgPGhvcnN0cmV0
Y2g+MzwvaG9yc3RyZXRjaD4KKyAgICAgICAgICAgIDx2ZXJzdHJldGNoPjM8L3ZlcnN0cmV0Y2g+
CisgICAgICAgIDwvc2l6ZXBvbGljeT4KKyAgICA8L3Byb3BlcnR5PgorICAgIDxwcm9wZXJ0eSBu
YW1lPSJtaW5pbXVtU2l6ZSI+CisgICAgICAgIDxzaXplPgorICAgICAgICAgICAgPHdpZHRoPjQz
MDwvd2lkdGg+CisgICAgICAgICAgICA8aGVpZ2h0PjQ1MDwvaGVpZ2h0PgorICAgICAgICA8L3Np
emU+CisgICAgPC9wcm9wZXJ0eT4KKyAgICA8cHJvcGVydHkgbmFtZT0iY2FwdGlvbiI+CisgICAg
ICAgIDxzdHJpbmc+Rm9ybTE8L3N0cmluZz4KKyAgICA8L3Byb3BlcnR5PgorICAgIDx3aWRnZXQg
Y2xhc3M9IlFMYXlvdXRXaWRnZXQiPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+Cisg
ICAgICAgICAgICA8Y3N0cmluZz5sYXlvdXQzPC9jc3RyaW5nPgorICAgICAgICA8L3Byb3BlcnR5
PgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iZ2VvbWV0cnkiPgorICAgICAgICAgICAgPHJlY3Q+
CisgICAgICAgICAgICAgICAgPHg+MTA8L3g+CisgICAgICAgICAgICAgICAgPHk+MTA8L3k+Cisg
ICAgICAgICAgICAgICAgPHdpZHRoPjQzMDwvd2lkdGg+CisgICAgICAgICAgICAgICAgPGhlaWdo
dD40MzA8L2hlaWdodD4KKyAgICAgICAgICAgIDwvcmVjdD4KKyAgICAgICAgPC9wcm9wZXJ0eT4K
KyAgICAgICAgPHZib3g+CisgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAg
ICAgICAgICAgICAgPGNzdHJpbmc+dW5uYW1lZDwvY3N0cmluZz4KKyAgICAgICAgICAgIDwvcHJv
cGVydHk+CisgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJRVG9vbEJveCI+CisgICAgICAgICAg
ICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICAgICAgICAgICAgICA8Y3N0cmlu
Zz50b29sQm94MTwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAg
ICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAgICAgICAgICAgICAg
ICAgPHNpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICA8aHNpemV0eXBlPjc8L2hz
aXpldHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2c2l6ZXR5cGU+NzwvdnNpemV0eXBl
PgorICAgICAgICAgICAgICAgICAgICAgICAgPGhvcnN0cmV0Y2g+MzwvaG9yc3RyZXRjaD4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzdHJldGNoPjM8L3ZlcnN0cmV0Y2g+CisgICAgICAg
ICAgICAgICAgICAgIDwvc2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5Pgor
ICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJtaW5pbXVtU2l6ZSI+CisgICAgICAgICAg
ICAgICAgICAgIDxzaXplPgorICAgICAgICAgICAgICAgICAgICAgICAgPHdpZHRoPjA8L3dpZHRo
PgorICAgICAgICAgICAgICAgICAgICAgICAgPGhlaWdodD4wPC9oZWlnaHQ+CisgICAgICAgICAg
ICAgICAgICAgIDwvc2l6ZT4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAg
ICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmcmFtZVNoYXBlIj4KKyAgICAgICAgICAgICAgICAgICAg
PGVudW0+UGFuZWw8L2VudW0+CisgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAg
ICAgICAgICA8cHJvcGVydHkgbmFtZT0iZnJhbWVTaGFkb3ciPgorICAgICAgICAgICAgICAgICAg
ICA8ZW51bT5TdW5rZW48L2VudW0+CisgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAg
ICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iY3VycmVudEluZGV4Ij4KKyAgICAgICAgICAgICAg
ICAgICAgPG51bWJlcj4yPC9udW1iZXI+CisgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAg
ICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJRV2lkZ2V0Ij4KKyAgICAgICAgICAgICAgICAg
ICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJp
bmc+cGFnZV9uZXc8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Cisg
ICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJiYWNrZ3JvdW5kTW9kZSI+CisgICAg
ICAgICAgICAgICAgICAgICAgICA8ZW51bT5QYWxldHRlQmFja2dyb3VuZDwvZW51bT4KKyAgICAg
ICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0
ZSBuYW1lPSJsYWJlbCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPk5ldyBNZXNz
YWdlPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAg
ICAgICAgICAgICA8aGJveD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJuYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz51bm5hbWVkPC9j
c3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9IlFUZXh0RWRpdCI+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8Y3N0cmluZz50ZXh0RWRpdF9uZXc8L2NzdHJpbmc+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
cHJvcGVydHkgbmFtZT0ic2l6ZVBvbGljeSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxzaXplcG9saWN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhz
aXpldHlwZT43PC9oc2l6ZXR5cGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8dnNpemV0eXBlPjc8L3ZzaXpldHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxob3JzdHJldGNoPjM8L2hvcnN0cmV0Y2g+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8dmVyc3RyZXRjaD4zPC92ZXJzdHJldGNoPgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8L3NpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFt
ZT0ibWluaW11bVNpemUiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2l6ZT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aWR0aD4wPC93aWR0aD4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoZWlnaHQ+MDwvaGVpZ2h0PgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NpemU+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVy
dHkgbmFtZT0iZm9udCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb250Pgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZhbWlseT5Nb25vc3BhY2U8L2Zh
bWlseT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb250PgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPHByb3BlcnR5IG5hbWU9InJlc2l6ZVBvbGljeSI+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDxlbnVtPk1hbnVhbDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ2U2Nyb2xsQmFyTW9kZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVt
PkF1dG88L2VudW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaFNjcm9sbEJhck1vZGUi
PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5BdXRvPC9lbnVtPgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHRGb3JtYXQiPgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8ZW51bT5QbGFpblRleHQ8L2VudW0+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVy
dHkgbmFtZT0id29yZFdyYXAiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51
bT5Ob1dyYXA8L2VudW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYXV0b0Zvcm1hdHRp
bmciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2V0PkF1dG9Ob25lPC9zZXQ+
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICA8L2hib3g+CisgICAgICAg
ICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iUVdpZGdl
dCI+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIDxjc3RyaW5nPnBhZ2VfcmVwbHk8L2NzdHJpbmc+CisgICAgICAgICAg
ICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJiYWNrZ3JvdW5kTW9kZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5QYWxldHRl
QmFja2dyb3VuZDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAg
ICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsYWJlbCI+CisgICAgICAgICAgICAgICAg
ICAgICAgICA8c3RyaW5nPlJlcGx5IHRvIFNlbmRlcjwvc3RyaW5nPgorICAgICAgICAgICAgICAg
ICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgPGhib3g+CisgICAgICAgICAg
ICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPGNzdHJpbmc+dW5uYW1lZDwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJR
VGV4dEVkaXQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJu
YW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+dGV4dEVkaXRf
cmVwbHk8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2l6ZVBvbGljeSI+
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaXplcG9saWN5PgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhzaXpldHlwZT4zPC9oc2l6ZXR5cGU+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dnNpemV0eXBlPjM8L3ZzaXpldHlwZT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxob3JzdHJldGNoPjA8L2hvcnN0
cmV0Y2g+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc3RyZXRjaD4w
PC92ZXJzdHJldGNoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NpemVwb2xp
Y3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iZm9udCI+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxmb250PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGZhbWlseT5Nb25vc3BhY2U8L2ZhbWlseT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPC9mb250PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHRGb3JtYXQiPgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5QbGFpblRleHQ8L2VudW0+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0id29yZFdyYXAiPgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8ZW51bT5Ob1dyYXA8L2VudW0+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkg
bmFtZT0iYXV0b0Zvcm1hdHRpbmciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
c2V0PkF1dG9Ob25lPC9zZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0
eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAg
ICA8L2hib3g+CisgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgPHdp
ZGdldCBjbGFzcz0iUVdpZGdldCI+CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJuYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnBhZ2VfcmVwbHlfYWxs
PC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAg
ICAgICAgICA8cHJvcGVydHkgbmFtZT0iYmFja2dyb3VuZE1vZGUiPgorICAgICAgICAgICAgICAg
ICAgICAgICAgPGVudW0+UGFsZXR0ZUJhY2tncm91bmQ8L2VudW0+CisgICAgICAgICAgICAgICAg
ICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibGFi
ZWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5SZXBseSB0byBBbGw8L3N0cmlu
Zz4KKyAgICAgICAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAgICAg
IDxoYm94PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnVubmFtZWQ8L2NzdHJpbmc+Cisg
ICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAg
ICAgPHdpZGdldCBjbGFzcz0iUVRleHRFZGl0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDxjc3RyaW5nPnRleHRFZGl0X3JlcGx5X2FsbDwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PHNpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHNpemV0
eXBlPjM8L2hzaXpldHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2
c2l6ZXR5cGU+MzwvdnNpemV0eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGhvcnN0cmV0Y2g+MDwvaG9yc3RyZXRjaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDx2ZXJzdHJldGNoPjA8L3ZlcnN0cmV0Y2g+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDwvc2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJm
b250Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvbnQ+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmFtaWx5Pk1vbm9zcGFjZTwvZmFtaWx5PgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvbnQ+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVy
dHkgbmFtZT0idGV4dEZvcm1hdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxl
bnVtPlBsYWluVGV4dDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3Bl
cnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3b3JkV3Jh
cCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPk5vV3JhcDwvZW51bT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhdXRvRm9ybWF0dGluZyI+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxzZXQ+QXV0b05vbmU8L3NldD4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC93aWRn
ZXQ+CisgICAgICAgICAgICAgICAgICAgIDwvaGJveD4KKyAgICAgICAgICAgICAgICA8L3dpZGdl
dD4KKyAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJRV2lkZ2V0Ij4KKyAgICAgICAgICAg
ICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICAgICAgICAgICAgICAgICAg
PGNzdHJpbmc+cGFnZV9mb3J3YXJkPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICA8L3By
b3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYmFja2dyb3VuZE1v
ZGUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVudW0+UGFsZXR0ZUJhY2tncm91bmQ8L2Vu
dW0+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAg
IDxhdHRyaWJ1dGUgbmFtZT0ibGFiZWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmlu
Zz5Gb3J3YXJkIE1lc3NhZ2U8L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgPC9hdHRyaWJ1
dGU+CisgICAgICAgICAgICAgICAgICAgIDxoYm94PgorICAgICAgICAgICAgICAgICAgICAgICAg
PHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3Ry
aW5nPnVubmFtZWQ8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5
PgorICAgICAgICAgICAgICAgICAgICAgICAgPHdpZGdldCBjbGFzcz0iUVRleHRFZGl0Ij4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnRleHRFZGl0X2ZvcndhcmQ8L2NzdHJp
bmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2l6ZVBvbGljeSI+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxzaXplcG9saWN5PgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPGhzaXpldHlwZT4zPC9oc2l6ZXR5cGU+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8dnNpemV0eXBlPjM8L3ZzaXpldHlwZT4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDxob3JzdHJldGNoPjA8L2hvcnN0cmV0Y2g+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc3RyZXRjaD4wPC92ZXJzdHJldGNo
PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NpemVwb2xpY3k+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8cHJvcGVydHkgbmFtZT0iZm9udCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxmb250PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZhbWlseT5N
b25vc3BhY2U8L2ZhbWlseT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb250
PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHRGb3JtYXQiPgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8ZW51bT5QbGFpblRleHQ8L2VudW0+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
cHJvcGVydHkgbmFtZT0id29yZFdyYXAiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8ZW51bT5Ob1dyYXA8L2VudW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9w
ZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYXV0b0Zv
cm1hdHRpbmciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2V0PkF1dG9Ob25l
PC9zZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgICAgICAgICA8L2hib3g+Cisg
ICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAg
ICAgIDx3aWRnZXQgY2xhc3M9IlFMYXlvdXRXaWRnZXQiPgorICAgICAgICAgICAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+bGF5b3V0Mjwv
Y3N0cmluZz4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgIDxo
Ym94PgorICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAg
ICAgICAgICAgICAgICAgICA8Y3N0cmluZz51bm5hbWVkPC9jc3RyaW5nPgorICAgICAgICAgICAg
ICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJR
UHVzaEJ1dHRvbiI+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibmFt
ZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+YnV0dG9uX2luc2VydDwv
Y3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAg
ICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2l6ZVBvbGljeSI+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPHNpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxoc2l6ZXR5cGU+MTwvaHNpemV0eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8dnNpemV0eXBlPjA8L3ZzaXpldHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPGhvcnN0cmV0Y2g+MTwvaG9yc3RyZXRjaD4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPHZlcnN0cmV0Y2g+MDwvdmVyc3RyZXRjaD4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8L3NpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5
PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+JmFtcDtJbnNlcnQgY29tbWFuZC4uLjwvc3Ry
aW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhY2NlbCI+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPHN0cmluZz5BbHQrSTwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9w
cm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAg
ICAgIDx3aWRnZXQgY2xhc3M9IlFMYWJlbCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJv
cGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+
dGV4dExhYmVsMTwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+
CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2l6ZVBvbGljeSI+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpemVwb2xpY3k+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxoc2l6ZXR5cGU+NTwvaHNpemV0eXBlPgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8dnNpemV0eXBlPjU8L3ZzaXpldHlwZT4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPGhvcnN0cmV0Y2g+MjwvaG9yc3RyZXRjaD4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPHZlcnN0cmV0Y2g+MDwvdmVyc3RyZXRjaD4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8L3NpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAg
ICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InRl
eHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+JmFtcDtRdW90ZSBpbmRp
Y2F0b3I6PC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAg
ICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFsaWdubWVudCI+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPHNldD5BbGlnblZDZW50ZXJ8QWxpZ25SaWdodDwvc2V0Pgor
ICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJidWRkeSIgc3Rkc2V0PSIwIj4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8Y3N0cmluZz5saW5lRWRpdF9xdW90ZTwvY3N0cmluZz4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDwvd2lkZ2V0Pgor
ICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJRTGluZUVkaXQiPgorICAgICAgICAg
ICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDxjc3RyaW5nPmxpbmVFZGl0X3F1b3RlPC9jc3RyaW5nPgorICAgICAgICAgICAg
ICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+Cisg
ICAgICAgICAgICAgICAgPC9oYm94PgorICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgIDwv
dmJveD4KKyAgICA8L3dpZGdldD4KKzwvd2lkZ2V0PgorPGNvbm5lY3Rpb25zPgorICAgIDxjb25u
ZWN0aW9uPgorICAgICAgICA8c2VuZGVyPmJ1dHRvbl9pbnNlcnQ8L3NlbmRlcj4KKyAgICAgICAg
PHNpZ25hbD5jbGlja2VkKCk8L3NpZ25hbD4KKyAgICAgICAgPHJlY2VpdmVyPlRlbXBsYXRlc0Nv
bmZpZ3VyYXRpb248L3JlY2VpdmVyPgorICAgICAgICA8c2xvdD5idXR0b25faW5zZXJ0X2NsaWNr
ZWQoKTwvc2xvdD4KKyAgICA8L2Nvbm5lY3Rpb24+Cis8L2Nvbm5lY3Rpb25zPgorPHNsb3RzPgor
ICAgIDxzbG90PmJ1dHRvbl9pbnNlcnRfY2xpY2tlZCgpPC9zbG90PgorPC9zbG90cz4KKzxsYXlv
dXRkZWZhdWx0cyBzcGFjaW5nPSI2IiBtYXJnaW49IjExIi8+Cis8L1VJPgpJbmRleDoga21haWwv
a21maWx0ZXJhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGttYWlsL2ttZmlsdGVyYWN0aW9uLmNw
cAkocmV2aXNpb24gNTk2Njk1KQorKysga21haWwva21maWx0ZXJhY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiZm9sZGVycmVxdWVzdGVyLmgiCiB1
c2luZyBLTWFpbDo6Rm9sZGVyUmVxdWVzdGVyOwogI2luY2x1ZGUgImttbXNnYmFzZS5oIgorI2lu
Y2x1ZGUgInRlbXBsYXRlcGFyc2VyLmgiCiAjaW5jbHVkZSAibWVzc2FnZXByb3BlcnR5LmgiCiAj
aW5jbHVkZSAiYWN0aW9uc2NoZWR1bGVyLmgiCiB1c2luZyBLTWFpbDo6TWVzc2FnZVByb3BlcnR5
OwpAQCAtMTQ1MiwxNCArMTQ1MywxOSBAQAogCiAgIG1zZy0+aW5pdEZyb21NZXNzYWdlKCBhTXNn
ICk7CiAKLSAgUVN0cmluZyBzdCA9IFFTdHJpbmc6OmZyb21VdGY4KCBhTXNnLT5jcmVhdGVGb3J3
YXJkQm9keSgpICk7CisgIC8vIFFTdHJpbmcgc3QgPSBRU3RyaW5nOjpmcm9tVXRmOCggYU1zZy0+
Y3JlYXRlRm9yd2FyZEJvZHkoKSApOworICAKKyAgVGVtcGxhdGVQYXJzZXIgcGFyc2VyKCBtc2cs
IFRlbXBsYXRlUGFyc2VyOjpGb3J3YXJkLCAKKyAgICBhTXNnLT5ib2R5KCksIGZhbHNlLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlKTsKKyAgcGFyc2VyLnByb2Nlc3MoIGFNc2cgKTsKKyAgCiAgIFFDU3Ry
aW5nCiAgICAgZW5jb2RpbmcgPSBLTU1zZ0Jhc2U6OmF1dG9EZXRlY3RDaGFyc2V0KCBhTXNnLT5j
aGFyc2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBL
TU1lc3NhZ2U6OnByZWZlcnJlZENoYXJzZXRzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXNnLT5ib2R5KCkgKTsKICAgaWYoIGVuY29kaW5nLmlzRW1wdHkoKSAp
CiAgICAgZW5jb2RpbmcgPSAidXRmLTgiOwotICBRQ1N0cmluZyBzdHIgPSBLTU1zZ0Jhc2U6OmNv
ZGVjRm9yTmFtZSggZW5jb2RpbmcgKS0+ZnJvbVVuaWNvZGUoIHN0ICk7CisgIFFDU3RyaW5nIHN0
ciA9IEtNTXNnQmFzZTo6Y29kZWNGb3JOYW1lKCBlbmNvZGluZyApLT5mcm9tVW5pY29kZSggbXNn
LT5ib2R5KCkgKTsKIAogICBtc2ctPnNldENoYXJzZXQoIGVuY29kaW5nICk7CiAgIG1zZy0+c2V0
VG8oIG1QYXJhbWV0ZXIgKTsKSW5kZXg6IGttYWlsL2ttY29tcG9zZXdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga21haWwva21jb21wb3Nld2luLmNwcAkocmV2aXNpb24gNTk2Njk1KQorKysga21haWwv
a21jb21wb3Nld2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ0MSw4ICs0NDQxLDEzIEBACiB2
b2lkIEtNQ29tcG9zZVdpbjo6c2V0UmVwbHlGb2N1cyggYm9vbCBoYXNNZXNzYWdlICkKIHsKICAg
bUVkaXRvci0+c2V0Rm9jdXMoKTsKLSAgaWYgKCBoYXNNZXNzYWdlICkKLSAgICBtRWRpdG9yLT5z
ZXRDdXJzb3JQb3NpdGlvbiggMSwgMCApOworICBpZiAoIGhhc01lc3NhZ2UgKSB7CisgICAgaWYo
IG1Nc2ctPmdldEN1cnNvclBvcygpICkgeworICAgICAgbUVkaXRvci0+c2V0Q3Vyc29yUG9zaXRp
b25Gcm9tU3RhcnQoICh1bnNpZ25lZCBpbnQpIG1Nc2ctPmdldEN1cnNvclBvcygpICk7CisgICAg
fSBlbHNlIHsKKyAgICAgIG1FZGl0b3ItPnNldEN1cnNvclBvc2l0aW9uKCAxLCAwICk7CisgICAg
fQorICB9CiB9CiAKIHZvaWQgS01Db21wb3NlV2luOjpzZXRGb2N1c1RvU3ViamVjdCgpCkluZGV4
OiBrbWFpbC9rbWZvbGRlcmRpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwva21mb2xkZXJkaWEu
Y3BwCShyZXZpc2lvbiA1OTY2OTUpCisrKyBrbWFpbC9rbWZvbGRlcmRpYS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNsdWRlIDxrY29uZmlnLmg+CiAjaW5jbHVkZSA8
a2RlYnVnLmg+CiAjaW5jbHVkZSA8a2xpc3R2aWV3Lmg+CisjaW5jbHVkZSA8a3B1c2hidXR0b24u
aD4KIAogI2luY2x1ZGUgPHFjaGVja2JveC5oPgogI2luY2x1ZGUgPHFsYXlvdXQuaD4KQEAgLTY5
LDcgKzcwLDExIEBACiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8cWhidXR0b25ncm91
cC5oPgogI2luY2x1ZGUgPHFyYWRpb2J1dHRvbi5oPgorI2luY2x1ZGUgPHF0ZXh0ZWRpdC5oPgog
CisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwuaCIKKyNpbmNsdWRlICJ0ZW1w
bGF0ZXNjb25maWd1cmF0aW9uX2tmZy5oIgorCiAjaW5jbHVkZSAia21mb2xkZXJkaWEubW9jIgog
CiB1c2luZyBuYW1lc3BhY2UgS01haWw7CkBAIC0xMTUsNiArMTIwLDkgQEAKICAgYm94ID0gYWRk
VkJveFBhZ2UoIGkxOG4oIkdlbmVyYWwiKSApOwogICB0YWIgPSBuZXcgRm9sZGVyRGlhR2VuZXJh
bFRhYiggdGhpcywgYU5hbWUsIGJveCApOwogICBhZGRUYWIoIHRhYiApOworICBib3ggPSBhZGRW
Qm94UGFnZSggaTE4bigiVGVtcGxhdGVzIikgKTsKKyAgdGFiID0gbmV3IEZvbGRlckRpYVRlbXBs
YXRlc1RhYiggdGhpcywgYU5hbWUsIGJveCApOworICBhZGRUYWIoIHRhYiApOwogCiAgIEtNRm9s
ZGVyKiByZWZGb2xkZXIgPSBtRm9sZGVyID8gbUZvbGRlciA6IG1QYXJlbnRGb2xkZXI7CiAgIEtN
Rm9sZGVyVHlwZSBmb2xkZXJUeXBlID0gcmVmRm9sZGVyID8gcmVmRm9sZGVyLT5mb2xkZXJUeXBl
KCkgOiBLTUZvbGRlclR5cGVVbmtub3duOwpAQCAtNjQ3LDMgKzY1NSw4NiBAQAogewogICAgIG1V
bnJlYWRJY29uQnV0dG9uLT5zZXRJY29uKCBpY29uICk7CiB9CisKKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorS01haWw6OkZvbGRlckRpYVRlbXBsYXRlc1RhYjo6Rm9sZGVyRGlhVGVtcGxhdGVzVGFi
KCBLTUZvbGRlckRpYWxvZyogZGxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIGFOYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFXaWRnZXQqIHBhcmVudCwgY29uc3QgY2hh
ciogbmFtZSApCisgIDogRm9sZGVyRGlhVGFiKCBwYXJlbnQsIG5hbWUgKSwgbURsZyggZGxnICkK
K3sKKworICBtSXNMb2NhbFN5c3RlbUZvbGRlciA9IG1EbGctPmZvbGRlcigpLT5pc1N5c3RlbUZv
bGRlcigpICYmCisgICAgICAgbURsZy0+Zm9sZGVyKCktPmZvbGRlclR5cGUoKSAhPSBLTUZvbGRl
clR5cGVJbWFwICYmCisgICAgICAgbURsZy0+Zm9sZGVyKCktPmZvbGRlclR5cGUoKSAhPSBLTUZv
bGRlclR5cGVDYWNoZWRJbWFwOworCisgIFFWQm94TGF5b3V0ICp0b3BMYXlvdXQgPSBuZXcgUVZC
b3hMYXlvdXQoIHRoaXMsIDAsIEtEaWFsb2c6OnNwYWNpbmdIaW50KCkgKTsKKyAgCisgIG1DdXN0
b20gPSBuZXcgUUNoZWNrQm94KCBpMThuKCImVXNlIGN1c3RvbSBtZXNzYWdlIHRlbXBsYXRlcyIp
LCB0aGlzKTsKKyAgdG9wTGF5b3V0LT5hZGRXaWRnZXQoIG1DdXN0b20gKTsKKyAgCisgIG1XaWRn
ZXQgPSBuZXcgVGVtcGxhdGVzQ29uZmlndXJhdGlvbiggdGhpcyApOworICBtV2lkZ2V0LT5zZXRF
bmFibGVkKCBmYWxzZSApOworICB0b3BMYXlvdXQtPmFkZFdpZGdldCggbVdpZGdldCApOworICAK
KyAgUUhCb3hMYXlvdXQgKmJ0bnMgPSBuZXcgUUhCb3hMYXlvdXQoIHRvcExheW91dCwgS0RpYWxv
Zzo6c3BhY2luZ0hpbnQoKSApOworICBtQ29weUdsb2JhbCA9IG5ldyBLUHVzaEJ1dHRvbiggaTE4
bigiJkNvcHkgZ2xvYmFsIHRlbXBsYXRlcyIpLCB0aGlzKTsKKyAgbUNvcHlHbG9iYWwtPnNldEVu
YWJsZWQoIGZhbHNlICk7CisgIGJ0bnMtPmFkZFdpZGdldCggbUNvcHlHbG9iYWwgKTsKKyAgCisg
IHRvcExheW91dC0+YWRkU3RyZXRjaCggMjAwICk7IC8vIHdlIGFyZSBtb3JlIGltcG9ydGFudCB0
aGFuIGdlbmVyYWwgdGFiCisKKyAgY29ubmVjdCggbUN1c3RvbSwgU0lHTkFMKHRvZ2dsZWQoYm9v
bCkpLAorICAgICAgICBtV2lkZ2V0LCBTTE9UKHNldEVuYWJsZWQoYm9vbCkpICk7CisgIGNvbm5l
Y3QoIG1DdXN0b20sIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwKKyAgICAgICAgbUNvcHlHbG9iYWws
IFNMT1Qoc2V0RW5hYmxlZChib29sKSkgKTsKKyAgCisgIGNvbm5lY3QoIG1Db3B5R2xvYmFsLCBT
SUdOQUwoY2xpY2tlZCgpKSwKKyAgICAgICAgdGhpcywgU0xPVChzbG90Q29weUdsb2JhbCgpKSAp
OworCisgIGluaXRpYWxpemVXaXRoVmFsdWVzRnJvbUZvbGRlciggbURsZy0+Zm9sZGVyKCkgKTsK
KworICBjb25uZWN0KCBtV2lkZ2V0LCBTSUdOQUwoIGNoYW5nZWQoKSApLAorICAgICAgICAgICB0
aGlzLCBTTE9UKCBzbG90RW1pdENoYW5nZWQoIHZvaWQgKSApICk7Cit9CisKK3ZvaWQgRm9sZGVy
RGlhVGVtcGxhdGVzVGFiOjpsb2FkKCkKK3sKKyAgCit9CisKK3ZvaWQgRm9sZGVyRGlhVGVtcGxh
dGVzVGFiOjppbml0aWFsaXplV2l0aFZhbHVlc0Zyb21Gb2xkZXIoIEtNRm9sZGVyKiBmb2xkZXIg
KSB7CisgIGlmICggIWZvbGRlciApCisgICAgcmV0dXJuOworCisgIFFTdHJpbmcgZmlkID0gZm9s
ZGVyLT5pZFN0cmluZygpOworICAKKyAgVGVtcGxhdGVzIHQoZmlkKTsKKworICBtQ3VzdG9tLT5z
ZXRDaGVja2VkKHQudXNlQ3VzdG9tVGVtcGxhdGVzKCkpOworICAKKyAgbVdpZGdldC0+bG9hZEZy
b21Gb2xkZXIoZmlkKTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYm9vbCBGb2xkZXJE
aWFUZW1wbGF0ZXNUYWI6OnNhdmUoKQoreworICBLTUZvbGRlciogZm9sZGVyID0gbURsZy0+Zm9s
ZGVyKCk7CisgIAorICBRU3RyaW5nIGZpZCA9IGZvbGRlci0+aWRTdHJpbmcoKTsKKyAgVGVtcGxh
dGVzIHQoZmlkKTsKKyAgCisgIGtkRGVidWcoKSA8PCAidXNlIGN1c3RvbSB0ZW1wbGF0ZXMgZm9y
IGZvbGRlciAiIDw8IGZpZCA8PCAiOiAiIDw8IG1DdXN0b20tPmlzQ2hlY2tlZCgpIDw8IGVuZGw7
CisgIHQuc2V0VXNlQ3VzdG9tVGVtcGxhdGVzKG1DdXN0b20tPmlzQ2hlY2tlZCgpKTsKKyAgdC53
cml0ZUNvbmZpZygpOworICAKKyAgbVdpZGdldC0+c2F2ZVRvRm9sZGVyKGZpZCk7CisgIAorICBy
ZXR1cm4gdHJ1ZTsKK30KKworCit2b2lkIEZvbGRlckRpYVRlbXBsYXRlc1RhYjo6c2xvdEVtaXRD
aGFuZ2VkKCkge307CisKK3ZvaWQgRm9sZGVyRGlhVGVtcGxhdGVzVGFiOjpzbG90Q29weUdsb2Jh
bCgpIHsKKyAgbVdpZGdldC0+bG9hZEZyb21HbG9iYWwoKTsKK307CkluZGV4OiBrbWFpbC9jb25m
aWd1cmVkaWFsb2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGttYWlsL2NvbmZpZ3VyZWRpYWxvZy5jcHAJ
KHJldmlzaW9uIDU5NjY5NSkKKysrIGttYWlsL2NvbmZpZ3VyZWRpYWxvZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgImdsb2JhbHNldHRpbmdzLmgiCiAj
aW5jbHVkZSAicmVwbHlwaHJhc2VzLmgiCisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmlndXJhdGlv
bl9rZmcuaCIKIAogLy8gb3RoZXIgS01haWwgaGVhZGVyczoKICNpbmNsdWRlICJrbWtlcm5lbC5o
IgpAQCAtNDksNiArNTAsNyBAQAogI2luY2x1ZGUgPGNvbXBvc2VyY3J5cHRvY29uZmlndXJhdGlv
bi5oPgogI2luY2x1ZGUgPHdhcm5pbmdjb25maWd1cmF0aW9uLmg+CiAjaW5jbHVkZSA8c21pbWVj
b25maWd1cmF0aW9uLmg+CisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwuaCIK
ICNpbmNsdWRlICJmb2xkZXJyZXF1ZXN0ZXIuaCIKIHVzaW5nIEtNYWlsOjpGb2xkZXJSZXF1ZXN0
ZXI7CiAjaW5jbHVkZSAiYWNjb3VudGNvbWJvYm94LmgiCkBAIC0yNDQ2LDEwICsyNDQ4LDE2IEBA
CiAgIC8vCiAgIC8vICJQaHJhc2VzIiB0YWI6CiAgIC8vCi0gIG1QaHJhc2VzVGFiID0gbmV3IFBo
cmFzZXNUYWIoKTsKLSAgYWRkVGFiKCBtUGhyYXNlc1RhYiwgaTE4bigiJlBocmFzZXMiKSApOwor
ICAvLyBtUGhyYXNlc1RhYiA9IG5ldyBQaHJhc2VzVGFiKCk7CisgIC8vIGFkZFRhYiggbVBocmFz
ZXNUYWIsIGkxOG4oIiZQaHJhc2VzIikgKTsKIAogICAvLworICAvLyAiVGVtcGxhdGVzIiB0YWI6
CisgIC8vCisgIG1UZW1wbGF0ZXNUYWIgPSBuZXcgVGVtcGxhdGVzVGFiKCk7CisgIGFkZFRhYigg
bVRlbXBsYXRlc1RhYiwgaTE4bigiJlRlbXBsYXRlcyIpICk7CisgIAorICAvLwogICAvLyAiU3Vi
amVjdCIgdGFiOgogICAvLwogICBtU3ViamVjdFRhYiA9IG5ldyBTdWJqZWN0VGFiKCk7CkBAIC0y
OTAzLDYgKzI5MTEsMzEgQEAKICAgfQogfQogCitRU3RyaW5nIENvbXBvc2VyUGFnZTo6VGVtcGxh
dGVzVGFiOjpoZWxwQW5jaG9yKCkgY29uc3QgeworICByZXR1cm4gUVN0cmluZzo6ZnJvbUxhdGlu
MSgiY29uZmlndXJlLWNvbXBvc2VyLXRlbXBsYXRlcyIpOworfQorCitDb21wb3NlclBhZ2VUZW1w
bGF0ZXNUYWI6OkNvbXBvc2VyUGFnZVRlbXBsYXRlc1RhYiggUVdpZGdldCAqIHBhcmVudCwgY29u
c3QgY2hhciAqIG5hbWUgKQorICA6IENvbmZpZ01vZHVsZVRhYiAoIHBhcmVudCwgbmFtZSApCit7
CisgIFFWQm94TGF5b3V0KiB2bGF5ID0gbmV3IFFWQm94TGF5b3V0KCB0aGlzLCAwLCAwICk7CisK
KyAgbVdpZGdldCA9IG5ldyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uKCB0aGlzICk7CisgIHZsYXkt
PmFkZFdpZGdldCggbVdpZGdldCApOworICB2bGF5LT5hZGRTdHJldGNoKDEwMCk7CisKKyAgY29u
bmVjdCggbVdpZGdldCwgU0lHTkFMKCBjaGFuZ2VkKCkgKSwKKyAgICAgICAgICAgdGhpcywgU0xP
VCggc2xvdEVtaXRDaGFuZ2VkKCB2b2lkICkgKSApOworfQorCit2b2lkIENvbXBvc2VyUGFnZTo6
VGVtcGxhdGVzVGFiOjpkb0xvYWRGcm9tR2xvYmFsU2V0dGluZ3MoKSB7CisgICAgbVdpZGdldC0+
bG9hZEZyb21HbG9iYWwoKTsKK30KKwordm9pZCBDb21wb3NlclBhZ2U6OlRlbXBsYXRlc1RhYjo6
c2F2ZSgpIHsKKyAgICBtV2lkZ2V0LT5zYXZlVG9HbG9iYWwoKTsKK30KKwogUVN0cmluZyBDb21w
b3NlclBhZ2U6OlN1YmplY3RUYWI6OmhlbHBBbmNob3IoKSBjb25zdCB7CiAgIHJldHVybiBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCJjb25maWd1cmUtY29tcG9zZXItc3ViamVjdCIpOwogfQpJbmRleDog
a21haWwva21lZGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwva21lZGl0LmgJKHJldmlzaW9uIDU5
NjY5NSkKKysrIGttYWlsL2ttZWRpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw5IEBA
CiAgIHZvaWQgZGVsZXRlQXV0b1NwZWxsQ2hlY2tpbmcoKTsKIAogICB1bnNpZ25lZCBpbnQgbGlu
ZUJyZWFrQ29sdW1uKCkgY29uc3Q7CisgIAorICAvKiogc2V0IGN1cnNvciB0byBhYnNvbHV0ZSBw
b3NpdGlvbiBwb3MgKi8KKyAgdm9pZCBzZXRDdXJzb3JQb3NpdGlvbkZyb21TdGFydCh1bnNpZ25l
ZCBpbnQgcG9zKTsKIAogc2lnbmFsczoKICAgdm9pZCBzcGVsbGNoZWNrX2RvbmUoaW50IHJlc3Vs
dCk7CkluZGV4OiBrbWFpbC9rbWZvbGRlcmRpYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGttYWlsL2ttZm9s
ZGVyZGlhLmgJKHJldmlzaW9uIDU5NjY5NSkKKysrIGttYWlsL2ttZm9sZGVyZGlhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAKIGNsYXNzIEtNRm9sZGVyRGlhbG9nOwogY2xhc3Mg
S01Gb2xkZXJUcmVlOwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFFHdWFyZGVkUHRyOwor
Y2xhc3MgVGVtcGxhdGVzQ29uZmlndXJhdGlvbjsKK2NsYXNzIEtQdXNoQnV0dG9uOwogCiBuYW1l
c3BhY2UgS01haWwgewogICBjbGFzcyBGb2xkZXJSZXF1ZXN0ZXI7IApAQCAtMTUwLDYgKzE1Miwz
OSBAQAogICBib29sIG1Jc0xvY2FsU3lzdGVtRm9sZGVyOwogfTsKIAorLyoqCisgKiAiVGVtcGxh
dGVzIiB0YWIgaW4gdGhlIGZvbGRlciBkaWFsb2cKKyAqIEludGVybmFsIGNsYXNzLCBvbmx5IHVz
ZWQgYnkgS01Gb2xkZXJEaWFsb2cKKyAqLworY2xhc3MgRm9sZGVyRGlhVGVtcGxhdGVzVGFiIDog
cHVibGljIEZvbGRlckRpYVRhYgoreworICBRX09CSkVDVAorCitwdWJsaWM6CisgIEZvbGRlckRp
YVRlbXBsYXRlc1RhYiggS01Gb2xkZXJEaWFsb2cqIGRsZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUVN0cmluZyYgYU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIFFXaWRnZXQq
IHBhcmVudCwgY29uc3QgY2hhciogbmFtZSA9IDAgKTsKKworICB2aXJ0dWFsIHZvaWQgbG9hZCgp
OworICB2aXJ0dWFsIGJvb2wgc2F2ZSgpOworCitwdWJsaWMgc2xvdHM6CisgIHZvaWQgc2xvdEVt
aXRDaGFuZ2VkKCk7IC8vIGRvIG5vdGhpbmcgZm9yIG5vdworICAKKyAgdm9pZCBzbG90Q29weUds
b2JhbCgpOworCitwcml2YXRlOgorICB2b2lkIGluaXRpYWxpemVXaXRoVmFsdWVzRnJvbUZvbGRl
ciggS01Gb2xkZXIqIGZvbGRlciApOworCitwcml2YXRlOgorICBRQ2hlY2tCb3gqIG1DdXN0b207
CisgIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb24qIG1XaWRnZXQ7CisgIEtQdXNoQnV0dG9uKiBtQ29w
eUdsb2JhbDsKKworICBLTUZvbGRlckRpYWxvZyogbURsZzsKKyAgYm9vbCBtSXNMb2NhbFN5c3Rl
bUZvbGRlcjsKK307CisKIH0gLy8gZW5kIG9mIG5hbWVzcGFjZSBLTWFpbAogCiAvKioKSW5kZXg6
IGttYWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb25pbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwv
dGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwuaAkocmV2aXNpb24gMCkKKysrIGttYWlsL3RlbXBs
YXRlc2NvbmZpZ3VyYXRpb25pbXBsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8q
ICAgLSotIG1vZGU6IEMrKzsgYy1maWxlLXN0eWxlOiAiZ251IiAtKi0KKyAqICAga21haWw6IEtE
RSBtYWlsIGNsaWVudAorICogICBUaGlzIGZpbGU6IENvcHlyaWdodCAoQykgMjAwNiBEbWl0cnkg
TW9yb3pobmlrb3YKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxv
bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxjb25maWcu
aD4KKworI2lmbmRlZiBURU1QTEFURVNDT05GSUdVUkFUSU9OSU1QTF9ICisjZGVmaW5lIFRFTVBM
QVRFU0NPTkZJR1VSQVRJT05JTVBMX0gKKworI2luY2x1ZGUgInRlbXBsYXRlc2NvbmZpZ3VyYXRp
b24uaCIKKworY2xhc3MgVGVtcGxhdGVzQ29uZmlndXJhdGlvbjogcHVibGljIFRlbXBsYXRlc0Nv
bmZpZ3VyYXRpb25TdHViIHsKKyAgICBRX09CSkVDVAorICAgIAorICAgIHB1YmxpYzoKKyAgICAK
KwlUZW1wbGF0ZXNDb25maWd1cmF0aW9uKFFXaWRnZXQgKnBhcmVudCA9IDAsIGNvbnN0IGNoYXIg
Km5hbWUgPSAwKTsKKwkKKwl2b2lkIGxvYWRGcm9tR2xvYmFsKCk7CisJdm9pZCBzYXZlVG9HbG9i
YWwoKTsKKwl2b2lkIGxvYWRGcm9tRm9sZGVyKFFTdHJpbmcgaWQpOworCXZvaWQgc2F2ZVRvRm9s
ZGVyKFFTdHJpbmcgaWQpOworCQorCXZvaWQgaW5zZXJ0Q29tbWFuZChRU3RyaW5nIGNtZCwgaW50
IGFkanVzdEN1cnNvciA9IDApOworCQorCXN0YXRpYyBRU3RyaW5nIGRlZmF1bHROZXdNZXNzYWdl
KCk7CisJc3RhdGljIFFTdHJpbmcgZGVmYXVsdFJlcGx5KCk7CisJc3RhdGljIFFTdHJpbmcgZGVm
YXVsdFJlcGx5QWxsKCk7CisJc3RhdGljIFFTdHJpbmcgZGVmYXVsdEZvcndhcmQoKTsKKwlzdGF0
aWMgUVN0cmluZyBkZWZhdWx0UXVvdGVTdHJpbmcoKTsKKwkKKyAgICBwdWJsaWMgc2xvdHM6Cisg
ICAgCisJdm9pZCBidXR0b25faW5zZXJ0X2NsaWNrZWQoKTsKKwkKKwl2b2lkIHNsb3RUZXh0Q2hh
bmdlZCgpOworCisgICAgcHJvdGVjdGVkOgorICAgIAorICAgICAgICBlbnVtIHtDRG5sID0gMSwg
Q1JlbSwgQ0luc2VydCwgQ1N5c3RlbSwgQ1F1b3RlUGlwZSwgQ1F1b3RlLCBDUUhlYWRlcnMsIENI
ZWFkZXJzLCAKKyAgICAgICAgICAgIENUZXh0UGlwZSwgQ01zZ1BpcGUsIENCb2R5UGlwZSwgQ0Ns
ZWFyUGlwZSwgQ1RleHQsIAorICAgICAgICAgICAgQ1RvQWRkciwgQ1RvTmFtZSwgQ0Zyb21BZGRy
LCBDRnJvbU5hbWUsIENGdWxsU3ViamVjdCwgQ01zZ0lkLCAKKyAgICAgICAgICAgIENPSGVhZGVy
LCBDSGVhZGVyLCBDT1RvQWRkciwgQ09Ub05hbWUsIENPRnJvbUFkZHIsIENPRnJvbU5hbWUsIENP
RnVsbFN1YmplY3QsIAorICAgICAgICAgICAgQ09Nc2dJZCwgQ0RhdGVFbiwgQ0RhdGVTaG9ydCwg
Q0RhdGUsIENEb3csIENUaW1lTG9uZ0VuLCBDVGltZUxvbmcsIENUaW1lLCAKKyAgICAgICAgICAg
IENPRGF0ZUVuLCBDT0RhdGVTaG9ydCwgQ09EYXRlLCBDT0RvdywgQ09UaW1lTG9uZ0VuLCBDT1Rp
bWVMb25nLCBDT1RpbWUsIAorICAgICAgICAgICAgQ0JsYW5rLCBDTm9wLCBDQ2xlYXIsIENEZWJ1
ZywgQ0RlYnVnT2ZmLCBDVG9GTmFtZSwgQ1RvTE5hbWUsIENGcm9tRk5hbWUsIENGcm9tTE5hbWUs
IAorICAgICAgICAgICAgQ09Ub0ZOYW1lLCBDT1RvTE5hbWUsIENPRnJvbUZOYW1lLCBDT0Zyb21M
TmFtZSwgQ0N1cnNvcn07CisgICAgCisgICAgc2lnbmFsczoKKyAgICAKKyAgICAgICAgdm9pZCBj
aGFuZ2VkKCk7CisgICAgCit9OworCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18171</attachid>
            <date>2006-10-18 13:01:26 +0000</date>
            <delta_ts>2006-10-18 13:01:26 +0000</delta_ts>
            <desc>templates for kmail -- patch for KDE4 trunk</desc>
            <filename>kmail-templates-20061018-trunk.diff</filename>
            <type>text/plain</type>
            <size>89314</size>
            <attacher name="Dmitry Morozhnikov">dmiceman</attacher>
            
              <data encoding="base64">SW5kZXg6IGttYWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb25fa2ZnLmtjZmdjCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGttYWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb25fa2ZnLmtjZmdjCShyZXZpc2lvbiAwKQor
Kysga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcua2NmZ2MJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNSBAQAorRmlsZT10ZW1wbGF0ZXNjb25maWd1cmF0aW9uX2tmZy5rY2ZnCitDbGFz
c05hbWU9VGVtcGxhdGVzCitNdXRhdG9ycz10cnVlCitJdGVtQWNjZXNzb3JzPXRydWUKK1NldFVz
ZXJUZXh0cz10cnVlCkluZGV4OiBrbWFpbC90ZW1wbGF0ZXBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga21haWwvdGVtcGxhdGVwYXJzZXIuY3BwCShyZXZpc2lvbiAwKQorKysga21haWwvdGVtcGxh
dGVwYXJzZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkyNyBAQAorLyogICAtKi0gbW9k
ZTogQysrOyBjLWZpbGUtc3R5bGU6ICJnbnUiIC0qLQorICogICBrbWFpbDogS0RFIG1haWwgY2xp
ZW50CisgKiAgIFRoaXMgZmlsZTogQ29weXJpZ2h0IChDKSAyMDA2IERtaXRyeSBNb3JvemhuaWtv
dgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IK
KyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMg
cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5j
bHVkZSA8cXN0cmluZy5oPgorI2luY2x1ZGUgPHFkYXRldGltZS5oPgorLy9BZGRlZCBieSBxdDN0
bzQ6CisjaW5jbHVkZSA8UTNDU3RyaW5nPgorI2luY2x1ZGUgPGtsb2NhbGUuaD4KKyNpbmNsdWRl
IDxrY2FsZW5kYXJzeXN0ZW0uaD4KKyNpbmNsdWRlIDxrbWltZV91dGlsLmg+CisjaW5jbHVkZSA8
a2dsb2JhbC5oPgorI2luY2x1ZGUgPGtwcm9jZXNzLmg+CisjaW5jbHVkZSA8cXJlZ2V4cC5oPgor
I2luY2x1ZGUgPHFmaWxlLmg+CisjaW5jbHVkZSA8a21lc3NhZ2Vib3guaD4KKyNpbmNsdWRlIDxr
c2hlbGwuaD4KKyNpbmNsdWRlIDxxZmlsZWluZm8uaD4KKworI2luY2x1ZGUgImttbWVzc2FnZS5o
IgorI2luY2x1ZGUgImttbXNnYmFzZS5oIgorI2luY2x1ZGUgImttZm9sZGVyLmgiCisjaW5jbHVk
ZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcuaCIKKyNpbmNsdWRlICJnbG9iYWxzZXR0aW5n
c19iYXNlLmgiCisKKyNpbmNsdWRlICJ0ZW1wbGF0ZXBhcnNlci5oIgorCisjZGVmaW5lIFFVT1RF
UkUgIlwiKC4qKVwiIgorCitUZW1wbGF0ZVBhcnNlcjo6VGVtcGxhdGVQYXJzZXIoS01NZXNzYWdl
KiBhbXNnLCBNb2RlIGFtb2RlLCBRU3RyaW5nIGFzZWxlY3Rpb24sIAorICAgICAgICAgICAgYm9v
bCBhc21hcnRRdW90ZSwgYm9vbCBhbm9RdW90ZSwgYm9vbCBhYWxsb3dEZWNyeXB0aW9uLCBib29s
IGFzZWxlY3Rpb25Jc0JvZHkpIDoKKyAgICAgICAgICAgIG1vZGUoYW1vZGUpLCBzZWxlY3Rpb24o
YXNlbGVjdGlvbiksIAorICAgICAgICAgICAgc21hcnRRdW90ZShhc21hcnRRdW90ZSksIG5vUXVv
dGUoYW5vUXVvdGUpLCAKKyAgICAgICAgICAgIGFsbG93RGVjcnlwdGlvbihhYWxsb3dEZWNyeXB0
aW9uKSwgc2VsZWN0aW9uSXNCb2R5KGFzZWxlY3Rpb25Jc0JvZHkpLCAKKyAgICAgICAgICAgIGRl
YnVnKGZhbHNlKSwgcXVvdGVTdHJpbmcoIj4gIikgeworICAgIG1zZyA9IGFtc2c7Cit9OworCitp
bnQgVGVtcGxhdGVQYXJzZXI6OnBhcnNlUXVvdGVzKFFTdHJpbmcgcHJlZml4LCBRU3RyaW5nIHN0
ciwgUVN0cmluZyYgcXVvdGUpIHsKKyAgICBpbnQgcG9zID0gcHJlZml4Lmxlbmd0aCgpOworICAg
IGludCBsZW47CisgICAgaW50IHN0cl9sZW4gPSBzdHIubGVuZ3RoKCk7CisgICAgUUNoYXIgcWMg
PSAnIic7CisgICAgUUNoYXIgcHJldiA9IDA7CisgICAgCisgICAgcG9zKys7CisgICAgbGVuID0g
cG9zOworICAgIAorICAgIHdoaWxlKHBvcyA8IHN0cl9sZW4pIHsKKyAgICAgICAgUUNoYXIgYyA9
IHN0cltwb3NdOworICAgICAgICAvLyBrRGVidWcoKSA8PCAiQ2hhcjogIiA8PCBjIDw8IGVuZGw7
CisgICAgICAgIAorICAgICAgICBwb3MrKzsKKyAgICAgICAgbGVuKys7CisgICAgICAgIAorICAg
ICAgICBpZighcHJldi5pc051bGwoKSkgeworICAgICAgICAgICAgcXVvdGUuYXBwZW5kKGMpOwor
ICAgICAgICAgICAgcHJldiA9IDA7CisgICAgICAgIH0gZWxzZSB7CisJICAgIGlmKGMgPT0gJ1xc
JykgeworCQlwcmV2ID0gYzsKKwkgICAgfSBlbHNlIGlmKGMgPT0gcWMpIHsKKwkJYnJlYWs7CisJ
ICAgIH0gZWxzZSB7CisJCXF1b3RlLmFwcGVuZChjKTsKKwkgICAgfTsKKwl9OworICAgIH07Cisg
ICAgCisgICAgcmV0dXJuIGxlbjsKK307CisKK1FTdHJpbmcgVGVtcGxhdGVQYXJzZXI6OmdldEZO
YW1lKFFTdHJpbmcgc3RyKSB7CisgICAgLy8gc2ltcGxlIGxvZ2ljOgorICAgIC8vIGlmIHRoZXJl
IGlzICcsJyBpbiBuYW1lLCB0aGFuIGZvcm1hdCBpcyAnTGFzdCwgRmlyc3QnCisgICAgLy8gZWxz
ZSBmb3JtYXQgaXMgJ0ZpcnN0IExhc3QnCisgICAgLy8gbGFzdCByZXNvcnQgLS0gcmV0dXJuICdu
YW1lJyBmcm9tICduYW1lQGRvbWFpbicKKyAgICBpbnQgc2VwX3BvczsKKyAgICBRU3RyaW5nIHJl
czsKKyAgICBpZigoc2VwX3BvcyA9IHN0ci5pbmRleE9mKCdAJykpID4gMCkgeworICAgICAgICBp
bnQgaTsKKyAgICAgICAgZm9yKGkgPSAoc2VwX3BvcyAtIDEpOyBpID49IDA7IC0taSkgeworICAg
ICAgICAgICAgUUNoYXIgYyA9IHN0cltpXTsKKyAgICAgICAgICAgIGlmKGMuaXNMZXR0ZXJPck51
bWJlcigpKSB7CisgICAgICAgICAgICAgICAgcmVzLnByZXBlbmQoYyk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfTsKKyAgICAgICAg
fTsKKyAgICB9IGVsc2UgaWYoKHNlcF9wb3MgPSBzdHIuaW5kZXhPZignLCcpKSA+IDApIHsKKyAg
ICAgICAgaW50IGk7CisgICAgICAgIGJvb2wgYmVnaW4gPSBmYWxzZTsKKyAgICAgICAgZm9yKGkg
PSBzZXBfcG9zOyBpIDwgc3RyLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIFFDaGFyIGMg
PSBzdHJbaV07CisgICAgICAgICAgICBpZihjLmlzTGV0dGVyT3JOdW1iZXIoKSkgeworICAgICAg
ICAgICAgICAgIGJlZ2luID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXMuYXBwZW5kKGMpOwor
ICAgICAgICAgICAgfSBlbHNlIGlmKGJlZ2luKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9OworICAgICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGludCBpOwor
ICAgICAgICBmb3IoaSA9IDA7IGkgPCBzdHIubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAg
UUNoYXIgYyA9IHN0cltpXTsKKyAgICAgICAgICAgIGlmKGMuaXNMZXR0ZXJPck51bWJlcigpKSB7
CisgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9OworICAgICAgICB9OworICAgIH07
CisgICAgcmV0dXJuIHJlczsKK307CisKK1FTdHJpbmcgVGVtcGxhdGVQYXJzZXI6OmdldExOYW1l
KFFTdHJpbmcgc3RyKSB7CisgICAgLy8gc2ltcGxlIGxvZ2ljOgorICAgIC8vIGlmIHRoZXJlIGlz
ICcsJyBpbiBuYW1lLCB0aGFuIGZvcm1hdCBpcyAnTGFzdCwgRmlyc3QnCisgICAgLy8gZWxzZSBm
b3JtYXQgaXMgJ0ZpcnN0IExhc3QnCisgICAgaW50IHNlcF9wb3M7CisgICAgUVN0cmluZyByZXM7
CisgICAgaWYoKHNlcF9wb3MgPSBzdHIuaW5kZXhPZignLCcpKSA+IDApIHsKKyAgICAgICAgaW50
IGk7CisgICAgICAgIGZvcihpID0gc2VwX3BvczsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAg
IFFDaGFyIGMgPSBzdHJbaV07CisgICAgICAgICAgICBpZihjLmlzTGV0dGVyT3JOdW1iZXIoKSkg
eworICAgICAgICAgICAgICAgIHJlcy5wcmVwZW5kKGMpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH07CisgICAgICAgIH07CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYoKHNlcF9wb3MgPSBzdHIuaW5kZXhPZignICcpKSA+IDApIHsK
KwkgICAgaW50IGk7CisJICAgIGJvb2wgYmVnaW4gPSBmYWxzZTsKKwkgICAgZm9yKGkgPSBzZXBf
cG9zOyBpIDwgc3RyLmxlbmd0aCgpOyArK2kpIHsKKwkJUUNoYXIgYyA9IHN0cltpXTsKKwkJaWYo
Yy5pc0xldHRlck9yTnVtYmVyKCkpIHsKKwkJICAgIGJlZ2luID0gdHJ1ZTsKKwkJICAgIHJlcy5h
cHBlbmQoYyk7CisJCX0gZWxzZSBpZihiZWdpbikgeworCQkgICAgYnJlYWs7CisJCX07CisJICAg
IH07CisgICAgICAgIH07CisgICAgfTsKKyAgICByZXR1cm4gcmVzOworfTsKKwordm9pZCBUZW1w
bGF0ZVBhcnNlcjo6cHJvY2VzcyhLTU1lc3NhZ2UqIGFvcmlnX21zZywgS01Gb2xkZXIqIGFmb2xk
ZXIpIHsKKyAgICBvcmlnX21zZyA9IGFvcmlnX21zZzsKKyAgICBmb2xkZXIgPSBhZm9sZGVyOwor
ICAgIFFTdHJpbmcgdG1wbCA9IGZpbmRUZW1wbGF0ZSgpOworICAgIFFTdHJpbmcgYm9keTsKKyAg
ICBpbnQgdG1wbF9sZW4gPSB0bXBsLmxlbmd0aCgpOworICAgIAorICAgIGtEZWJ1ZygpIDw8ICJU
ZW1wbGF0ZVBhcnNlcjo6cHJvY2VzcygpIGludm9rZWQgd2l0aCBtb2RlICIgPDwgbW9kZSA8PCAi
LCB0ZW1wbGF0ZSBmb3VuZDogIiA8PCB0bXBsIDw8IGVuZGw7CisgICAgCisgICAgYm9vbCBkbmwg
PSBmYWxzZTsKKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgdG1wbF9sZW47ICsraSkgeworICAgICAg
ICBRQ2hhciBjID0gdG1wbFtpXTsKKyAgICAgICAgLy8ga0RlYnVnKCkgPDwgIk5leHQgY2hhcjog
IiA8PCBjIDw8IGVuZGw7CisgICAgICAgIGlmKGMgPT0gJyUnKSB7CisgICAgICAgICAgICBRU3Ry
aW5nIGNtZCA9IHRtcGwubWlkKGkgKyAxKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYo
Y21kLnN0YXJ0c1dpdGgoIi0iKSkgeworICAgICAgICAgICAgICAgIC8vIGRubAorICAgICAgICAg
ICAgICAgIGtEZWJ1ZygpIDw8ICJDb21tYW5kOiAtIiA8PCBlbmRsOworICAgICAgICAgICAgICAg
IGRubCA9IHRydWU7CisgICAgICAgICAgICAgICAgaSArPSAxOworICAgICAgICAgICAgCisgICAg
ICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlJFTT0iKSkgeworICAgICAgICAgICAg
ICAgIC8vIGNvbW1lbnRzCisgICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgIkNvbW1hbmQ6IFJF
TT0iIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgUVN0cmluZyBxOworICAgICAgICAgICAgICAg
IGludCBsZW4gPSBwYXJzZVF1b3RlcygiUkVNPSIsIGNtZCwgcSk7CisgICAgICAgICAgICAgICAg
aSArPSBsZW47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRz
V2l0aCgiSU5TRVJUPSIpKSB7CisgICAgICAgICAgICAgICAgLy8gaW5zZXJ0IGNvbnRlbnQgb2Yg
c3BlY2lmaWVkIGZpbGUgYXMgaXMKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiQ29tbWFu
ZDogSU5TRVJUPSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBRU3RyaW5nIHE7CisgICAgICAg
ICAgICAgICAgaW50IGxlbiA9IHBhcnNlUXVvdGVzKCJJTlNFUlQ9IiwgY21kLCBxKTsKKyAgICAg
ICAgICAgICAgICBpICs9IGxlbjsKKwkJUVN0cmluZyBwYXRoID0gS1NoZWxsOjp0aWxkZUV4cGFu
ZChxKTsKKwkJUUZpbGVJbmZvIGZpbmZvKHBhdGgpOworCQlpZihmaW5mby5pc1JlbGF0aXZlKCkp
IHsKKwkJICAgIHBhdGggPSBLU2hlbGw6OmhvbWVEaXIoIiIpOworCQkgICAgcGF0aCArPSAiLyI7
CisJCSAgICBwYXRoICs9IHE7CisJCX07CisJCVFGaWxlIGZpbGUocGF0aCk7CisJCWlmKGZpbGUu
b3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KSkgeworCQkgICAgUUJ5dGVBcnJheSBjb250ZW50ID0g
ZmlsZS5yZWFkQWxsKCk7CisJCSAgICBRU3RyaW5nIHN0ciA9IFFTdHJpbmc6OmZyb21Mb2NhbDhC
aXQoY29udGVudCwgY29udGVudC5zaXplKCkpOworCQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJ
fSBlbHNlIGlmKGRlYnVnKSB7CisJCSAgICBLTWVzc2FnZUJveDo6ZXJyb3IoTlVMTCwgCisJCQlp
MThuKCJDYW5gdCBpbnNlcnQgY29udGVudCBmcm9tIGZpbGUgJTE6ICUyIikuYXJnKHBhdGgpLmFy
ZyhmaWxlLmVycm9yU3RyaW5nKCkpKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
fSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJTWVNURU09IikpIHsKKyAgICAgICAgICAgICAgICAv
LyBpbnNlcnQgY29udGVudCBvZiBzcGVjaWZpZWQgZmlsZSBhcyBpcworICAgICAgICAgICAgICAg
IGtEZWJ1ZygpIDw8ICJDb21tYW5kOiBTWVNURU09IiA8PCBlbmRsOworICAgICAgICAgICAgICAg
IFFTdHJpbmcgcTsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gcGFyc2VRdW90ZXMoIlNZU1RF
TT0iLCBjbWQsIHEpOworICAgICAgICAgICAgICAgIGkgKz0gbGVuOworCQlRU3RyaW5nIHBpcGVf
Y21kID0gcTsKKwkJUVN0cmluZyBzdHIgPSBwaXBlKHBpcGVfY21kLCAiIik7CisJCWJvZHkuYXBw
ZW5kKHN0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRz
V2l0aCgiUFVUPSIpKSB7CisgICAgICAgICAgICAgICAgLy8gaW5zZXJ0IGNvbnRlbnQgb2Ygc3Bl
Y2lmaWVkIGZpbGUgYXMgaXMKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiQ29tbWFuZDog
UFVUPSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBRU3RyaW5nIHE7CisgICAgICAgICAgICAg
ICAgaW50IGxlbiA9IHBhcnNlUXVvdGVzKCJQVVQ9IiwgY21kLCBxKTsKKyAgICAgICAgICAgICAg
ICBpICs9IGxlbjsKKwkJUVN0cmluZyBwYXRoID0gS1NoZWxsOjp0aWxkZUV4cGFuZChxKTsKKwkJ
UUZpbGVJbmZvIGZpbmZvKHBhdGgpOworCQlpZihmaW5mby5pc1JlbGF0aXZlKCkpIHsKKwkJICAg
IHBhdGggPSBLU2hlbGw6OmhvbWVEaXIoIiIpOworCQkgICAgcGF0aCArPSAiLyI7CisJCSAgICBw
YXRoICs9IHE7CisJCX07CisJCVFGaWxlIGZpbGUocGF0aCk7CisJCWlmKGZpbGUub3BlbihRSU9E
ZXZpY2U6OlJlYWRPbmx5KSkgeworCQkgICAgUUJ5dGVBcnJheSBjb250ZW50ID0gZmlsZS5yZWFk
QWxsKCk7CisJCSAgICBib2R5LmFwcGVuZChRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KGNvbnRlbnQs
IGNvbnRlbnQuc2l6ZSgpKSk7CisJCX0gZWxzZSBpZihkZWJ1ZykgeworCQkgICAgS01lc3NhZ2VC
b3g6OmVycm9yKE5VTEwsIAorCQkJaTE4bigiQ2FuYHQgaW5zZXJ0IGNvbnRlbnQgZnJvbSBmaWxl
ICUxOiAlMiIpLmFyZyhwYXRoKS5hcmcoZmlsZS5lcnJvclN0cmluZygpKSk7CisJCX07CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiUVVPVEVQSVBF
PSIpKSB7CisgICAgICAgICAgICAgICAgLy8gcGlwZSBtZXNzYWdlIGJvZHkgdGhyb3cgY29tbWFu
ZCBhbmQgaW5zZXJ0IGl0IGFzIHF1b3RhdGlvbgorICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8
ICJDb21tYW5kOiBRVU9URVBJUEU9IiA8PCBlbmRsOworICAgICAgICAgICAgICAgIFFTdHJpbmcg
cTsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gcGFyc2VRdW90ZXMoIlFVT1RFUElQRT0iLCBj
bWQsIHEpOworICAgICAgICAgICAgICAgIGkgKz0gbGVuOworCQlRU3RyaW5nIHBpcGVfY21kID0g
cTsKKwkJaWYob3JpZ19tc2cgJiYgIW5vUXVvdGUpIHsKKwkJICAgIFFTdHJpbmcgc3RyID0gcGlw
ZShwaXBlX2NtZCwgc2VsZWN0aW9uKTsKKwkJICAgIFFTdHJpbmcgcXVvdGUgPSBvcmlnX21zZy0+
YXNRdW90ZWRTdHJpbmcoIiIsIHF1b3RlU3RyaW5nLCBzdHIsIHNtYXJ0UXVvdGUsIGFsbG93RGVj
cnlwdGlvbik7CisJCSAgICBib2R5LmFwcGVuZChxdW90ZSk7CisJCX07CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiUVVPVEUiKSkgeworICAgICAg
ICAgICAgICAgIGtEZWJ1ZygpIDw8ICJDb21tYW5kOiBRVU9URSIgPDwgZW5kbDsKKyAgICAgICAg
ICAgICAgICBpICs9IHN0cmxlbigiUVVPVEUiKTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21z
ZyAmJiAhbm9RdW90ZSkgeworCQkgICAgUVN0cmluZyBxdW90ZSA9IG9yaWdfbXNnLT5hc1F1b3Rl
ZFN0cmluZygiIiwgcXVvdGVTdHJpbmcsIHNlbGVjdGlvbiwgc21hcnRRdW90ZSwgYWxsb3dEZWNy
eXB0aW9uKTsKKwkJICAgIGJvZHkuYXBwZW5kKHF1b3RlKTsKKwkJfTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJRSEVBREVSUyIpKSB7CisgICAg
ICAgICAgICAgICAga0RlYnVnKCkgPDwgIkNvbW1hbmQ6IFFIRUFERVJTIiA8PCBlbmRsOworICAg
ICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJRSEVBREVSUyIpOworICAgICAgICAgICAgICAgIGlm
KG9yaWdfbXNnICYmICFub1F1b3RlKSB7CisJCSAgICBRU3RyaW5nIHF1b3RlID0gb3JpZ19tc2ct
PmFzUXVvdGVkU3RyaW5nKCIiLCBxdW90ZVN0cmluZywgb3JpZ19tc2ctPmhlYWRlckFzU2VuZGFi
bGVTdHJpbmcoKSwgc21hcnRRdW90ZSwgZmFsc2UpOworCQkgICAgYm9keS5hcHBlbmQocXVvdGUp
OworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dp
dGgoIkhFQURFUlMiKSkgeworICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJDb21tYW5kOiBI
RUFERVJTIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJIRUFERVJTIik7
CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cgJiYgIW5vUXVvdGUpIHsKKwkJICAgIFFTdHJp
bmcgc3RyID0gb3JpZ19tc2ctPmhlYWRlckFzU2VuZGFibGVTdHJpbmcoKTsKKwkJICAgIGJvZHku
YXBwZW5kKHN0cik7CisJCX07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihj
bWQuc3RhcnRzV2l0aCgiVEVYVFBJUEU9IikpIHsKKyAgICAgICAgICAgICAgICAvLyBwaXBlIG1l
c3NhZ2UgYm9keSB0aHJvdyBjb21tYW5kIGFuZCBpbnNlcnQgaXQgYXMgaXMKKyAgICAgICAgICAg
ICAgICBrRGVidWcoKSA8PCAiQ29tbWFuZDogVEVYVFBJUEU9IiA8PCBlbmRsOworICAgICAgICAg
ICAgICAgIFFTdHJpbmcgcTsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gcGFyc2VRdW90ZXMo
IlRFWFRQSVBFPSIsIGNtZCwgcSk7CisgICAgICAgICAgICAgICAgaSArPSBsZW47CisJCVFTdHJp
bmcgcGlwZV9jbWQgPSBxOworCQlpZihvcmlnX21zZykgeworCQkgICAgUVN0cmluZyBzdHIgPSBw
aXBlKHBpcGVfY21kLCBvcmlnX21zZy0+Ym9keSgpKTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7
CisJCX07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0
aCgiTVNHUElQRT0iKSkgeworICAgICAgICAgICAgICAgIC8vIHBpcGUgZnVsbCBtZXNzYWdlIHRo
cm93IGNvbW1hbmQgYW5kIGluc2VydCByZXN1bHQgYXMgaXMKKyAgICAgICAgICAgICAgICBrRGVi
dWcoKSA8PCAiQ29tbWFuZDogTVNHUElQRT0iIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgUVN0
cmluZyBxOworICAgICAgICAgICAgICAgIGludCBsZW4gPSBwYXJzZVF1b3RlcygiTVNHUElQRT0i
LCBjbWQsIHEpOworICAgICAgICAgICAgICAgIGkgKz0gbGVuOworCQlRU3RyaW5nIHBpcGVfY21k
ID0gcTsKKwkJaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcgc3RyID0gcGlwZShwaXBlX2Nt
ZCwgb3JpZ19tc2ctPmFzU3RyaW5nKCkpOworCQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJCT0RZ
UElQRT0iKSkgeworICAgICAgICAgICAgICAgIC8vIHBpcGUgbWVzc2FnZSBib2R5IGdlbmVyYXRl
ZCBzbyBmYXIgdGhyb3cgY29tbWFuZCBhbmQgaW5zZXJ0IHJlc3VsdCBhcyBpcworICAgICAgICAg
ICAgICAgIGtEZWJ1ZygpIDw8ICJDb21tYW5kOiBCT0RZUElQRT0iIDw8IGVuZGw7CisgICAgICAg
ICAgICAgICAgUVN0cmluZyBxOworICAgICAgICAgICAgICAgIGludCBsZW4gPSBwYXJzZVF1b3Rl
cygiQk9EWVBJUEU9IiwgY21kLCBxKTsKKyAgICAgICAgICAgICAgICBpICs9IGxlbjsKKwkJUVN0
cmluZyBwaXBlX2NtZCA9IHE7CisJCVFTdHJpbmcgc3RyID0gcGlwZShwaXBlX2NtZCwgYm9keSk7
CisJCWJvZHkuYXBwZW5kKHN0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBp
ZihjbWQuc3RhcnRzV2l0aCgiQ0xFQVJQSVBFPSIpKSB7CisgICAgICAgICAgICAgICAgLy8gcGlw
ZSBtZXNzYWdlIGJvZHkgZ2VuZXJhdGVkIHNvIGZhciB0aHJvdyBjb21tYW5kIGFuZCBpbnNlcnQg
cmVzdWx0IGFzIGlzIHJlcGxhY2luZyBjdXJyZW50IGJvZHkKKyAgICAgICAgICAgICAgICBrRGVi
dWcoKSA8PCAiQ29tbWFuZDogQ0xFQVJQSVBFPSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBR
U3RyaW5nIHE7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IHBhcnNlUXVvdGVzKCJDTEVBUlBJ
UEU9IiwgY21kLCBxKTsKKyAgICAgICAgICAgICAgICBpICs9IGxlbjsKKwkJUVN0cmluZyBwaXBl
X2NtZCA9IHE7CisJCVFTdHJpbmcgc3RyID0gcGlwZShwaXBlX2NtZCwgYm9keSk7CisJCWJvZHkg
PSBzdHI7CisJCW1zZy0+c2V0Q3Vyc29yUG9zKDApOworICAgICAgICAgICAgCisgICAgICAgICAg
ICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlRFWFQiKSkgeworICAgICAgICAgICAgICAgIGtE
ZWJ1ZygpIDw8ICJDb21tYW5kOiBURVhUIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0g
c3RybGVuKCJURVhUIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFT
dHJpbmcgcXVvdGUgPSBvcmlnX21zZy0+Ym9keSgpOworCQkgICAgYm9keS5hcHBlbmQocXVvdGUp
OworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dp
dGgoIk9URVhUU0laRSIpKSB7CisgICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgIkNvbW1hbmQ6
IE9URVhUU0laRSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT1RFWFRT
SVpFIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcgc3Ry
ID0gUVN0cmluZygiJTEiKS5hcmcob3JpZ19tc2ctPmJvZHkoKS5sZW5ndGgoKSk7CisJCSAgICBi
b2R5LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2Ug
aWYoY21kLnN0YXJ0c1dpdGgoIk9URVhUIikpIHsKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8
PCAiQ29tbWFuZDogT1RFWFQiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4o
Ik9URVhUIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcg
cXVvdGUgPSBvcmlnX21zZy0+Ym9keSgpOworCQkgICAgYm9keS5hcHBlbmQocXVvdGUpOworCQl9
OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlRP
QUREUiIpKSB7CisgICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgIkNvbW1hbmQ6IFRPQUREUiIg
PDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiVE9BRERSIik7CisJCVFTdHJp
bmcgc3RyID0gbXNnLT50bygpOworCQlib2R5LmFwcGVuZChzdHIpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlRPTkFNRSIpKSB7CisgICAgICAg
ICAgICAgICAga0RlYnVnKCkgPDwgIkNvbW1hbmQ6IFRPTkFNRSIgPDwgZW5kbDsKKyAgICAgICAg
ICAgICAgICBpICs9IHN0cmxlbigiVE9OQU1FIik7CisJCVFTdHJpbmcgc3RyID0gbXNnLT50b1N0
cmlwKCk7CisJCWJvZHkuYXBwZW5kKHN0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0g
ZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiVE9GTkFNRSIpKSB7CisgICAgICAgICAgICAgICAga0Rl
YnVnKCkgPDwgIkNvbW1hbmQ6IFRPRk5BTUUiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSAr
PSBzdHJsZW4oIlRPRk5BTUUiKTsKKwkJUVN0cmluZyBzdHIgPSBtc2ctPnRvU3RyaXAoKTsKKwkJ
Ym9keS5hcHBlbmQoZ2V0Rk5hbWUoc3RyKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0g
ZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiVE9MTkFNRSIpKSB7CisgICAgICAgICAgICAgICAga0Rl
YnVnKCkgPDwgIkNvbW1hbmQ6IFRPTE5BTUUiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSAr
PSBzdHJsZW4oIlRPTE5BTUUiKTsKKwkJUVN0cmluZyBzdHIgPSBtc2ctPnRvU3RyaXAoKTsKKwkJ
Ym9keS5hcHBlbmQoZ2V0TE5hbWUoc3RyKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0g
ZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiVE9MSVNUIikpIHsKKyAgICAgICAgICAgICAgICBrRGVi
dWcoKSA8PCAiQ29tbWFuZDogVE9MSVNUIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0g
c3RybGVuKCJUT0xJU1QiKTsKKwkJUVN0cmluZyBzdHIgPSBtc2ctPnRvKCk7CisJCWJvZHkuYXBw
ZW5kKHN0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRz
V2l0aCgiRlJPTUFERFIiKSkgeworICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJDb21tYW5k
OiBGUk9NQUREUiIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiRlJPTUFE
RFIiKTsKKwkJUVN0cmluZyBzdHIgPSBtc2ctPmZyb20oKTsKKwkJYm9keS5hcHBlbmQoc3RyKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJGUk9N
TkFNRSIpKSB7CisgICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgIkNvbW1hbmQ6IEZST01OQU1F
IiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJGUk9NTkFNRSIpOworCQlR
U3RyaW5nIHN0ciA9IG1zZy0+ZnJvbVN0cmlwKCk7CisJCWJvZHkuYXBwZW5kKHN0cik7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiRlJPTUZOQU1F
IikpIHsKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiQ29tbWFuZDogRlJPTUZOQU1FIiA8
PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJGUk9NRk5BTUUiKTsKKwkJUVN0
cmluZyBzdHIgPSBtc2ctPmZyb21TdHJpcCgpOworCQlib2R5LmFwcGVuZChnZXRGTmFtZShzdHIp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJG
Uk9NTE5BTUUiKSkgeworICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJDb21tYW5kOiBGUk9N
TE5BTUUiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIkZST01MTkFNRSIp
OworCQlRU3RyaW5nIHN0ciA9IG1zZy0+ZnJvbVN0cmlwKCk7CisJCWJvZHkuYXBwZW5kKGdldExO
YW1lKHN0cikpOworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0
c1dpdGgoIkZVTExTVUJKRUNUIikpIHsKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiQ29t
bWFuZDogRlVMTFNVQkpFQ1QiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4o
IkZVTExTVUJKRUNUIik7CisJCVFTdHJpbmcgc3RyID0gbXNnLT5zdWJqZWN0KCk7CisJCWJvZHku
YXBwZW5kKHN0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3Rh
cnRzV2l0aCgiRlVMTFNVQkoiKSkgeworICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJDb21t
YW5kOiBGVUxMU1VCSiIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiRlVM
TFNVQkoiKTsKKwkJUVN0cmluZyBzdHIgPSBtc2ctPnN1YmplY3QoKTsKKwkJYm9keS5hcHBlbmQo
c3RyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRo
KCJNU0dJRCIpKSB7CisgICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgIkNvbW1hbmQ6IE1TR0lE
IiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJNU0dJRCIpOworCQlRU3Ry
aW5nIHN0ciA9IG1zZy0+aWQoKTsKKwkJYm9keS5hcHBlbmQoc3RyKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJPSEVBREVSPSIpKSB7CisgICAg
ICAgICAgICAgICAgLy8gaW5zZXJ0IHNwZWNpZmllZCBjb250ZW50IG9mIGhlYWRlciBmcm9tIG9y
aWdpbmFsIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiQ29tbWFuZDogT0hF
QURFUj0iIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgUVN0cmluZyBxOworICAgICAgICAgICAg
ICAgIGludCBsZW4gPSBwYXJzZVF1b3RlcygiT0hFQURFUj0iLCBjbWQsIHEpOworICAgICAgICAg
ICAgICAgIGkgKz0gbGVuOworCQlpZihvcmlnX21zZykgeworCQkgICAgUVN0cmluZyBoZHIgPSBx
OworCQkgICAgUVN0cmluZyBzdHIgPSBvcmlnX21zZy0+aGVhZGVyRmllbGRzKGhkci50b0xvY2Fs
OEJpdCgpKS5qb2luKCIsICIpOworCQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJIRUFERVI9Iikp
IHsKKyAgICAgICAgICAgICAgICAvLyBpbnNlcnQgc3BlY2lmaWVkIGNvbnRlbnQgb2YgaGVhZGVy
IGZyb20gY3VycmVudCBtZXNzYWdlCisgICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgIkNvbW1h
bmQ6IEhFQURFUj0iIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgUVN0cmluZyBxOworICAgICAg
ICAgICAgICAgIGludCBsZW4gPSBwYXJzZVF1b3RlcygiSEVBREVSPSIsIGNtZCwgcSk7CisgICAg
ICAgICAgICAgICAgaSArPSBsZW47CisJCVFTdHJpbmcgaGRyID0gcTsKKwkJUVN0cmluZyBzdHIg
PSBtc2ctPmhlYWRlckZpZWxkcyhoZHIudG9Mb2NhbDhCaXQoKSkuam9pbigiLCAiKTsKKwkJYm9k
eS5hcHBlbmQoc3RyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5z
dGFydHNXaXRoKCJIRUFERVIoIikpIHsKKyAgICAgICAgICAgICAgICAvLyBpbnNlcnQgc3BlY2lm
aWVkIGNvbnRlbnQgb2YgaGVhZGVyIGZyb20gY3VycmVudCBtZXNzYWdlCisgICAgICAgICAgICAg
ICAga0RlYnVnKCkgPDwgIkNvbW1hbmQ6IEhFQURFUigiIDw8IGVuZGw7CisgICAgICAgICAgICAg
ICAgUVJlZ0V4cCByZSA9IFFSZWdFeHAoIl5IRUFERVJcXCgoLispXFwpIik7CisgICAgICAgICAg
ICAgICAgcmUuc2V0TWluaW1hbCh0cnVlKTsKKyAgICAgICAgICAgICAgICBpbnQgcmVzID0gcmUu
aW5kZXhJbihjbWQpOworICAgICAgICAgICAgICAgIGlmKHJlcyAhPSAwKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIHNvbWV0aGluZyB3cm9uZworICAgICAgICAgICAgICAgICAgICBpICs9IHN0
cmxlbigiSEVBREVSKCIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGkgKz0gcmUubWF0Y2hlZExlbmd0aCgpOworCQkgICAgUVN0cmluZyBoZHIgPSByZS5j
YXAoMSk7CisJCSAgICBRU3RyaW5nIHN0ciA9IG1zZy0+aGVhZGVyRmllbGRzKGhkci50b0xvY2Fs
OEJpdCgpKS5qb2luKCIsICIpOworCQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJPVE9BRERSIikp
IHsKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiQ29tbWFuZDogT1RPQUREUiIgPDwgZW5k
bDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT1RPQUREUiIpOworICAgICAgICAgICAg
ICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0ciA9IG9yaWdfbXNnLT50bygpOwor
CQkgICAgYm9keS5hcHBlbmQoc3RyKTsKKwkJfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
fSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJPVE9OQU1FIikpIHsKKyAgICAgICAgICAgICAgICBr
RGVidWcoKSA8PCAiQ29tbWFuZDogT1RPTkFNRSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBp
ICs9IHN0cmxlbigiT1RPTkFNRSIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJ
CSAgICBRU3RyaW5nIHN0ciA9IG9yaWdfbXNnLT50b1N0cmlwKCk7CisJCSAgICBib2R5LmFwcGVu
ZChzdHIpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0
YXJ0c1dpdGgoIk9UT0ZOQU1FIikpIHsKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiQ29t
bWFuZDogT1RPRk5BTUUiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9U
T0ZOQU1FIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcg
c3RyID0gb3JpZ19tc2ctPnRvU3RyaXAoKTsKKwkJICAgIGJvZHkuYXBwZW5kKGdldEZOYW1lKHN0
cikpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0
c1dpdGgoIk9UT0xOQU1FIikpIHsKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiQ29tbWFu
ZDogT1RPTE5BTUUiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9UT0xO
QU1FIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcgc3Ry
ID0gb3JpZ19tc2ctPnRvU3RyaXAoKTsKKwkJICAgIGJvZHkuYXBwZW5kKGdldExOYW1lKHN0cikp
OworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dp
dGgoIk9UT0xJU1QiKSkgeworICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJDb21tYW5kOiBP
VE9MSVNUIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJPVE9MSVNUIik7
CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcgc3RyID0gb3Jp
Z19tc2ctPnRvKCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAgICAg
CisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9UTyIpKSB7CisgICAgICAg
ICAgICAgICAga0RlYnVnKCkgPDwgIkNvbW1hbmQ6IE9UTyIgPDwgZW5kbDsKKyAgICAgICAgICAg
ICAgICBpICs9IHN0cmxlbigiT1RPIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsK
KwkJICAgIFFTdHJpbmcgc3RyID0gb3JpZ19tc2ctPnRvKCk7CisJCSAgICBib2R5LmFwcGVuZChz
dHIpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0
c1dpdGgoIk9GUk9NQUREUiIpKSB7CisgICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgIkNvbW1h
bmQ6IE9GUk9NQUREUiIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT0ZS
T01BRERSIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcg
c3RyID0gb3JpZ19tc2ctPmZyb20oKTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiT0ZST01O
QU1FIikpIHsKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiQ29tbWFuZDogT0ZST01OQU1F
IiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJPRlJPTU5BTUUiKTsKKyAg
ICAgICAgICAgICAgICBpZihvcmlnX21zZykgeworCQkgICAgUVN0cmluZyBzdHIgPSBvcmlnX21z
Zy0+ZnJvbVN0cmlwKCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAg
ICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9GUk9NRk5BTUUiKSkg
eworICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJDb21tYW5kOiBPRlJPTUZOQU1FIiA8PCBl
bmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJPRlJPTUZOQU1FIik7CisgICAgICAg
ICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcgc3RyID0gb3JpZ19tc2ctPmZy
b21TdHJpcCgpOworCQkgICAgYm9keS5hcHBlbmQoZ2V0Rk5hbWUoc3RyKSk7CisJCX07CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiT0ZST01MTkFN
RSIpKSB7CisgICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgIkNvbW1hbmQ6IE9GUk9NTE5BTUUi
IDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9GUk9NTE5BTUUiKTsKKyAg
ICAgICAgICAgICAgICBpZihvcmlnX21zZykgeworCQkgICAgUVN0cmluZyBzdHIgPSBvcmlnX21z
Zy0+ZnJvbVN0cmlwKCk7CisJCSAgICBib2R5LmFwcGVuZChnZXRMTmFtZShzdHIpKTsKKwkJfTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJPRlVM
TFNVQkpFQ1QiKSkgeworICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJDb21tYW5kOiBPRlVM
TFNVQkpFQ1QiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9GVUxMU1VC
SkVDVCIpOworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisJCSAgICBRU3RyaW5nIHN0
ciA9IG9yaWdfbXNnLT5zdWJqZWN0KCk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9Owor
ICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9GVUxM
U1VCSiIpKSB7CisgICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgIkNvbW1hbmQ6IE9GVUxMU1VC
SiIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT0ZVTExTVUJKIik7Cisg
ICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKwkJICAgIFFTdHJpbmcgc3RyID0gb3JpZ19t
c2ctPnN1YmplY3QoKTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiT01TR0lEIikpIHsKKyAg
ICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiQ29tbWFuZDogT01TR0lEIiA8PCBlbmRsOworICAg
ICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJPTVNHSUQiKTsKKyAgICAgICAgICAgICAgICBpZihv
cmlnX21zZykgeworCQkgICAgUVN0cmluZyBzdHIgPSBvcmlnX21zZy0+aWQoKTsKKwkJICAgIGJv
ZHkuYXBwZW5kKHN0cik7CisJCX07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBp
ZihjbWQuc3RhcnRzV2l0aCgiREFURUVOIikpIHsKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8
PCAiQ29tbWFuZDogREFURUVOIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVu
KCJEQVRFRU4iKTsKKwkJUURhdGVUaW1lIGRhdGUgPSBRRGF0ZVRpbWU6OmN1cnJlbnREYXRlVGlt
ZSgpOworCQlLTG9jYWxlIGxvY2FsZSgiQyIpOworCQlRU3RyaW5nIHN0ciA9IFFTdHJpbmcoIiUx
LCAlMiAlMywgJTQiKQorCQkgICAgLmFyZyhsb2NhbGUuY2FsZW5kYXIoKS0+d2Vla0RheU5hbWUo
ZGF0ZS5kYXRlKCksIGZhbHNlKSkKKwkJICAgIC5hcmcobG9jYWxlLmNhbGVuZGFyKCktPm1vbnRo
TmFtZShkYXRlLmRhdGUoKSwgZmFsc2UpKQorCQkgICAgLmFyZyhkYXRlLmRhdGUoKS5kYXkoKSkK
KwkJICAgIC5hcmcoZGF0ZS5kYXRlKCkueWVhcigpKTsKKwkJYm9keS5hcHBlbmQoc3RyKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiREFU
RVNIT1JUIikpIHsKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiQ29tbWFuZDogREFURVNI
T1JUIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJEQVRFU0hPUlQiKTsK
KwkJUURhdGVUaW1lIGRhdGUgPSBRRGF0ZVRpbWU6OmN1cnJlbnREYXRlVGltZSgpOworCQlRU3Ry
aW5nIHN0ciA9IGRhdGUuZGF0ZSgpLnRvU3RyaW5nKFF0OjpMb2NhbERhdGUpOworCQlib2R5LmFw
cGVuZChzdHIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5z
dGFydHNXaXRoKCJEQVRFIikpIHsKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiQ29tbWFu
ZDogREFURSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiREFURSIpOwor
CQlRRGF0ZVRpbWUgZGF0ZSA9IFFEYXRlVGltZTo6Y3VycmVudERhdGVUaW1lKCk7CisJCVFTdHJp
bmcgc3RyID0gZGF0ZS5kYXRlKCkudG9TdHJpbmcoUXQ6OlRleHREYXRlKTsKKwkJYm9keS5hcHBl
bmQoc3RyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNX
aXRoKCJET1ciKSkgeworICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJDb21tYW5kOiBET1ci
IDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIkRPVyIpOworCQlRRGF0ZVRp
bWUgZGF0ZSA9IFFEYXRlVGltZTo6Y3VycmVudERhdGVUaW1lKCk7CisJCVFTdHJpbmcgc3RyID0g
UURhdGU6OmxvbmdEYXlOYW1lKGRhdGUuZGF0ZSgpLmRheU9mV2VlaygpKTsKKwkJYm9keS5hcHBl
bmQoc3RyKTsKKwkgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIlRJ
TUVMT05HRU4iKSkgeworICAgICAgICAgICAgICAgIGtEZWJ1ZygpIDw8ICJDb21tYW5kOiBUSU1F
TE9OR0VOIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJUSU1FTE9OR0VO
Iik7CisJCVFEYXRlVGltZSBkYXRlID0gUURhdGVUaW1lOjpjdXJyZW50RGF0ZVRpbWUoKTsKKwkJ
UVN0cmluZyBzdHIgPSBkYXRlLnRpbWUoKS50b1N0cmluZygiaGg6bW06c3MgQVAiKTsKKwkJYm9k
eS5hcHBlbmQoc3RyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5z
dGFydHNXaXRoKCJUSU1FTE9ORyIpKSB7CisgICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgIkNv
bW1hbmQ6IFRJTUVMT05HIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIGkgKz0gc3RybGVuKCJU
SU1FTE9ORyIpOworCQlRRGF0ZVRpbWUgZGF0ZSA9IFFEYXRlVGltZTo6Y3VycmVudERhdGVUaW1l
KCk7CisJCVFTdHJpbmcgc3RyID0gZGF0ZS50aW1lKCkudG9TdHJpbmcoUXQ6OlRleHREYXRlKTsK
KwkJYm9keS5hcHBlbmQoc3RyKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlIGlm
KGNtZC5zdGFydHNXaXRoKCJUSU1FIikpIHsKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAi
Q29tbWFuZDogVElNRSIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiVElN
RSIpOworCQlRRGF0ZVRpbWUgZGF0ZSA9IFFEYXRlVGltZTo6Y3VycmVudERhdGVUaW1lKCk7CisJ
CVFTdHJpbmcgc3RyID0gZGF0ZS50aW1lKCkudG9TdHJpbmcoUXQ6OkxvY2FsRGF0ZSk7CisJCWJv
ZHkuYXBwZW5kKHN0cik7CisJICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNX
aXRoKCJPREFURUVOIikpIHsKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiQ29tbWFuZDog
T0RBVEVFTiIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT0RBVEVFTiIp
OworICAgICAgICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisgICAgICAgICAgICAgICAgICAgIFFE
YXRlVGltZSBkYXRlOworICAgICAgICAgICAgICAgICAgICBkYXRlLnNldFRpbWVfdChvcmlnX21z
Zy0+ZGF0ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgS0xvY2FsZSBsb2NhbGUoIkMiKTsKKwkJ
ICAgIFFTdHJpbmcgc3RyID0gUVN0cmluZygiJTEsICUyICUzLCAlNCIpCisJCSAgICAgIC5hcmco
bG9jYWxlLmNhbGVuZGFyKCktPndlZWtEYXlOYW1lKGRhdGUuZGF0ZSgpLCBmYWxzZSkpCisJCSAg
ICAgIC5hcmcobG9jYWxlLmNhbGVuZGFyKCktPm1vbnRoTmFtZShkYXRlLmRhdGUoKSwgZmFsc2Up
KQorCQkgICAgICAuYXJnKGRhdGUuZGF0ZSgpLmRheSgpKQorCQkgICAgICAuYXJnKGRhdGUuZGF0
ZSgpLnllYXIoKSk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJPREFURVNIT1JUIikp
IHsKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiQ29tbWFuZDogT0RBVEVTSE9SVCIgPDwg
ZW5kbDsKKyAgICAgICAgICAgICAgICBpICs9IHN0cmxlbigiT0RBVEVTSE9SVCIpOworICAgICAg
ICAgICAgICAgIGlmKG9yaWdfbXNnKSB7CisgICAgICAgICAgICAgICAgICAgIFFEYXRlVGltZSBk
YXRlOworICAgICAgICAgICAgICAgICAgICBkYXRlLnNldFRpbWVfdChvcmlnX21zZy0+ZGF0ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBzdHIgPSBkYXRlLmRhdGUoKS50b1N0cmlu
ZyhRdDo6TG9jYWxEYXRlKTsKKwkJICAgIGJvZHkuYXBwZW5kKHN0cik7CisJCX07CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9EQVRFIikp
IHsKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8PCAiQ29tbWFuZDogT0RBVEUiIDw8IGVuZGw7
CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4oIk9EQVRFIik7CisgICAgICAgICAgICAgICAg
aWYob3JpZ19tc2cpIHsKKyAgICAgICAgICAgICAgICAgICAgUURhdGVUaW1lIGRhdGU7CisgICAg
ICAgICAgICAgICAgICAgIGRhdGUuc2V0VGltZV90KG9yaWdfbXNnLT5kYXRlKCkpOworICAgICAg
ICAgICAgICAgICAgICBRU3RyaW5nIHN0ciA9IGRhdGUuZGF0ZSgpLnRvU3RyaW5nKFF0OjpUZXh0
RGF0ZSk7CisJCSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAgICAgCisgICAg
ICAgICAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9ET1ciKSkgeworICAgICAgICAgICAg
ICAgIGtEZWJ1ZygpIDw8ICJDb21tYW5kOiBPRE9XIiA8PCBlbmRsOworICAgICAgICAgICAgICAg
IGkgKz0gc3RybGVuKCJPRE9XIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKyAg
ICAgICAgICAgICAgICAgICAgUURhdGVUaW1lIGRhdGU7CisgICAgICAgICAgICAgICAgICAgIGRh
dGUuc2V0VGltZV90KG9yaWdfbXNnLT5kYXRlKCkpOworICAgICAgICAgICAgICAgICAgICBRU3Ry
aW5nIHN0ciA9IFFEYXRlOjpsb25nRGF5TmFtZShkYXRlLmRhdGUoKS5kYXlPZldlZWsoKSk7CisJ
CSAgICBib2R5LmFwcGVuZChzdHIpOworCQl9OworCSAgICAKKyAgICAgICAgICAgIH0gZWxzZSBp
ZihjbWQuc3RhcnRzV2l0aCgiT1RJTUVMT05HRU4iKSkgeworICAgICAgICAgICAgICAgIGtEZWJ1
ZygpIDw8ICJDb21tYW5kOiBPVElNRUxPTkdFTiIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBp
ICs9IHN0cmxlbigiT1RJTUVMT05HRU4iKTsKKyAgICAgICAgICAgICAgICBpZihvcmlnX21zZykg
eworICAgICAgICAgICAgICAgICAgICBRRGF0ZVRpbWUgZGF0ZTsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0ZS5zZXRUaW1lX3Qob3JpZ19tc2ctPmRhdGUoKSk7CisgICAgICAgICAgICAgICAgICAg
IFFTdHJpbmcgc3RyID0gZGF0ZS50aW1lKCkudG9TdHJpbmcoImhoOm1tOnNzIEFQIik7CisJCSAg
ICBib2R5LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVs
c2UgaWYoY21kLnN0YXJ0c1dpdGgoIk9USU1FTE9ORyIpKSB7CisgICAgICAgICAgICAgICAga0Rl
YnVnKCkgPDwgIkNvbW1hbmQ6IE9USU1FTE9ORyIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICBp
ICs9IHN0cmxlbigiT1RJTUVMT05HIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsK
KyAgICAgICAgICAgICAgICAgICAgUURhdGVUaW1lIGRhdGU7CisgICAgICAgICAgICAgICAgICAg
IGRhdGUuc2V0VGltZV90KG9yaWdfbXNnLT5kYXRlKCkpOworICAgICAgICAgICAgICAgICAgICBR
U3RyaW5nIHN0ciA9IGRhdGUudGltZSgpLnRvU3RyaW5nKFF0OjpUZXh0RGF0ZSk7CisJCSAgICBi
b2R5LmFwcGVuZChzdHIpOworCQl9OworICAgICAgICAgICAgCisgICAgICAgICAgICB9IGVsc2Ug
aWYoY21kLnN0YXJ0c1dpdGgoIk9USU1FIikpIHsKKyAgICAgICAgICAgICAgICBrRGVidWcoKSA8
PCAiQ29tbWFuZDogT1RJTUUiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgaSArPSBzdHJsZW4o
Ik9USU1FIik7CisgICAgICAgICAgICAgICAgaWYob3JpZ19tc2cpIHsKKyAgICAgICAgICAgICAg
ICAgICAgUURhdGVUaW1lIGRhdGU7CisgICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0VGltZV90
KG9yaWdfbXNnLT5kYXRlKCkpOworICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHN0ciA9IGRh
dGUudGltZSgpLnRvU3RyaW5nKFF0OjpMb2NhbERhdGUpOworCQkgICAgYm9keS5hcHBlbmQoc3Ry
KTsKKwkJfTsKKwkgICAgCisJICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgiQkxBTksiKSkg
eworICAgICAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcKKwkJa0RlYnVnKCkgPDwgIkNvbW1hbmQ6
IEJMQU5LIiA8PCBlbmRsOworCQlpICs9IHN0cmxlbigiQkxBTksiKTsKKyAgICAgICAgICAgIAor
CSAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgoIk5PUCIpKSB7CisgICAgICAgICAgICAgICAg
Ly8gZG8gbm90aGluZworCQlrRGVidWcoKSA8PCAiQ29tbWFuZDogTk9QIiA8PCBlbmRsOworCQlp
ICs9IHN0cmxlbigiTk9QIik7CisJICAgIAorCSAgICB9IGVsc2UgaWYoY21kLnN0YXJ0c1dpdGgo
IkNMRUFSIikpIHsKKyAgICAgICAgICAgICAgICAvLyBjbGVhciBib2R5IGJ1ZmZlcjsgbm90IHRv
byB1c2VmdWwgeWV0CisJCWtEZWJ1ZygpIDw8ICJDb21tYW5kOiBDTEVBUiIgPDwgZW5kbDsKKwkJ
aSArPSBzdHJsZW4oIkNMRUFSIik7CisJCWJvZHkgPSAiIjsKKwkJbXNnLT5zZXRDdXJzb3JQb3Mo
MCk7CisgICAgICAgICAgICAKKwkgICAgfSBlbHNlIGlmKGNtZC5zdGFydHNXaXRoKCJERUJVR09G
RiIpKSB7CisgICAgICAgICAgICAgICAgLy8gdHVybiBvZmYgZGVidWcKKwkJa0RlYnVnKCkgPDwg
IkNvbW1hbmQ6IERFQlVHT0ZGIiA8PCBlbmRsOworCQlpICs9IHN0cmxlbigiREVCVUdPRkYiKTsK
KwkJZGVidWcgPSBmYWxzZTsKKwkgICAgCisJICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0aCgi
REVCVUciKSkgeworICAgICAgICAgICAgICAgIC8vIHR1cm4gb24gZGVidWcKKwkJa0RlYnVnKCkg
PDwgIkNvbW1hbmQ6IERFQlVHIiA8PCBlbmRsOworCQlpICs9IHN0cmxlbigiREVCVUciKTsKKwkJ
ZGVidWcgPSB0cnVlOworICAgICAgICAgICAgCisJICAgIH0gZWxzZSBpZihjbWQuc3RhcnRzV2l0
aCgiQ1VSU09SIikpIHsKKyAgICAgICAgICAgICAgICAvLyB0dXJuIG9uIGRlYnVnCisJCWtEZWJ1
ZygpIDw8ICJDb21tYW5kOiBDVVJTT1IiIDw8IGVuZGw7CisJCWkgKz0gc3RybGVuKCJDVVJTT1Ii
KTsKKwkJbXNnLT5zZXRDdXJzb3JQb3MoYm9keS5sZW5ndGgoKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gd3JvbmcgY29tbWFuZCwgZG8g
bm90aGluZworICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKGMpOworICAgICAgICAgICAgfTsK
KyAgICAgICAgCisgICAgICAgIH0gZWxzZSBpZihkbmwgJiYgKGMgPT0gJ1xuJyB8fCBjID09ICdc
cicpKSB7CisgICAgICAgICAgICAvLyBza2lwCisgICAgICAgICAgICBpZigoYyA9PSAnXG4nICYm
IHRtcGxbaSArIDFdID09ICdccicpIHx8IChjID09ICdccicgJiYgdG1wbFtpICsgMV0gPT0gJ1xu
JykpIHsKKyAgICAgICAgICAgICAgICAvLyBza2lwIG9uZSBtb3JlCisgICAgICAgICAgICAgICAg
aSArPSAxOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGRubCA9IGZhbHNlOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgYm9keS5hcHBlbmQoYyk7CisgICAgICAgIH07CisgICAg
fTsKKyAgICAKKyAgICAvLyBrRGVidWcoKSA8PCAiTWVzc2FnZSBib2R5OiAiIDw8IGJvZHkgPDwg
ZW5kbDsKKyAgICAKKyAgICBtc2ctPnNldEJvZHkoYm9keS50b1V0ZjgoKSk7Cit9OworCitRU3Ry
aW5nIFRlbXBsYXRlUGFyc2VyOjpmaW5kVGVtcGxhdGUoKSB7CisgICAgCisgICAgLy8ga0RlYnVn
KCkgPDwgIlRyeWluZyB0byBmaW5kIHRlbXBsYXRlIGZvciBtb2RlICIgPDwgbW9kZSA8PCBlbmRs
OworICAgIAorICAgIFFTdHJpbmcgdG1wbDsKKyAgICAKKyAgICBpZighZm9sZGVyKSB7CisJZm9s
ZGVyID0gbXNnLT5wYXJlbnQoKTsKKwlpZighZm9sZGVyKSB7CisJICAgIGlmKG9yaWdfbXNnKSB7
CisJCWZvbGRlciA9IG9yaWdfbXNnLT5wYXJlbnQoKTsKKwkgICAgfTsKKwkgICAgaWYoIWZvbGRl
cikgeworCQlrRGVidWcoKSA8PCAiT29wcyEgTm8gZm9sZGVyIGZvciBtZXNzYWdlIiA8PCBlbmRs
OworCQlyZXR1cm4gIiI7CisJICAgIH07CisJfTsKKyAgICB9OworICAgIAorICAgIFFTdHJpbmcg
ZmlkID0gZm9sZGVyLT5pZFN0cmluZygpOworICAgIFRlbXBsYXRlcyBmY29uZihmaWQpOworICAg
IGlmKGZjb25mLnVzZUN1c3RvbVRlbXBsYXRlcygpKSB7CisgICAgICAgIHN3aXRjaChtb2RlKSB7
CisgICAgICAgICAgICBjYXNlIE5ld01lc3NhZ2U6CisgICAgICAgICAgICAgICAgdG1wbCA9IGZj
b25mLnRlbXBsYXRlTmV3TWVzc2FnZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBSZXBseToKKyAgICAgICAgICAgICAgICB0bXBsID0gZmNvbmYudGVtcGxhdGVS
ZXBseSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBSZXBseUFs
bDoKKyAgICAgICAgICAgICAgICB0bXBsID0gZmNvbmYudGVtcGxhdGVSZXBseUFsbCgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGb3J3YXJkOgorICAgICAgICAg
ICAgICAgIHRtcGwgPSBmY29uZi50ZW1wbGF0ZUZvcndhcmQoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAga0RlYnVnKCkgPDwg
IlVua25vd24gbWVzc2FnZSBtb2RlOiAiIDw8IG1vZGUgPDwgZW5kbDsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gIiI7CisgICAgICAgIH07CisgICAgICAgIHF1b3RlU3RyaW5nID0gZmNvbmYucXVv
dGVTdHJpbmcoKTsKKyAgICAgICAgaWYoIXRtcGwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdG1wbDsKKyAgICAgICAgfTsKKyAgICB9OworICAgIHN3aXRjaChtb2RlKSB7CisJY2Fz
ZSBOZXdNZXNzYWdlOgorCSAgICB0bXBsID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+dGVtcGxh
dGVOZXdNZXNzYWdlKCk7CisJICAgIGJyZWFrOworCWNhc2UgUmVwbHk6CisJICAgIHRtcGwgPSBH
bG9iYWxTZXR0aW5nczo6c2VsZigpLT50ZW1wbGF0ZVJlcGx5KCk7CisJICAgIGJyZWFrOworCWNh
c2UgUmVwbHlBbGw6CisJICAgIHRtcGwgPSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT50ZW1wbGF0
ZVJlcGx5QWxsKCk7CisJICAgIGJyZWFrOworCWNhc2UgRm9yd2FyZDoKKwkgICAgdG1wbCA9IEds
b2JhbFNldHRpbmdzOjpzZWxmKCktPnRlbXBsYXRlRm9yd2FyZCgpOworCSAgICBicmVhazsKKwlk
ZWZhdWx0OgorCSAgICBrRGVidWcoKSA8PCAiVW5rbm93biBtZXNzYWdlIG1vZGU6ICIgPDwgbW9k
ZSA8PCBlbmRsOworCSAgICByZXR1cm4gIiI7CisgICAgfTsKKyAgICBxdW90ZVN0cmluZyA9IEds
b2JhbFNldHRpbmdzOjpzZWxmKCktPnF1b3RlU3RyaW5nKCk7CisgICAgcmV0dXJuIHRtcGw7Cit9
OworCitRU3RyaW5nIFRlbXBsYXRlUGFyc2VyOjpwaXBlKFFTdHJpbmcgY21kLCBRU3RyaW5nIGJ1
ZikgeworICAgIHBpcGVfb3V0ID0gIiI7CisgICAgcGlwZV9lcnIgPSAiIjsKKyAgICBwaXBlX3Jj
ID0gMDsKKyAgICAKKyAgICBLUHJvY2VzcyBwcm9jOworICAgIFEzQ1N0cmluZyBkYXRhID0gYnVm
LnRvTG9jYWw4Qml0KCk7CisgICAgCisgICAgLy8ga0RlYnVnKCkgPDwgIkNvbW1hbmQgZGF0YTog
IiA8PCBkYXRhIDw8IGVuZGw7CisgICAgCisgICAgcHJvYyA8PCBLU2hlbGw6OnNwbGl0QXJncyhj
bWQsIEtTaGVsbDo6VGlsZGVFeHBhbmQpOworICAgIHByb2Muc2V0VXNlU2hlbGwodHJ1ZSk7Cisg
ICAgY29ubmVjdCgmcHJvYywgU0lHTkFMKHJlY2VpdmVkU3Rkb3V0KEtQcm9jZXNzICosIGNoYXIg
KiwgaW50ICkpLCAKKwl0aGlzLCBTTE9UKG9uUmVjZWl2ZWRTdGRvdXQoS1Byb2Nlc3MgKiwgY2hh
ciAqLCBpbnQgKSkpOworICAgIGNvbm5lY3QoJnByb2MsIFNJR05BTChyZWNlaXZlZFN0ZGVycihL
UHJvY2VzcyAqLCBjaGFyICosIGludCApKSwgCisJdGhpcywgU0xPVChvblJlY2VpdmVkU3RkZXJy
KEtQcm9jZXNzICosIGNoYXIgKiwgaW50ICkpKTsKKyAgICBjb25uZWN0KCZwcm9jLCBTSUdOQUwo
d3JvdGVTdGRpbihLUHJvY2VzcyAqKSksIAorCXRoaXMsIFNMT1Qob25Xcm90ZVN0ZGluKEtQcm9j
ZXNzICopKSk7CisgICAgCisgICAgaWYocHJvYy5zdGFydChLUHJvY2Vzczo6Tm90aWZ5T25FeGl0
LCBLUHJvY2Vzczo6QWxsKSkgeworICAgICAgICAKKyAgICAgICAgYm9vbCBwaXBlX2ZpbGxlZCA9
IHByb2Mud3JpdGVTdGRpbihkYXRhLCBkYXRhLmxlbmd0aCgpKTsKKyAgICAgICAgaWYocGlwZV9m
aWxsZWQpIHsKKyAgICAgICAgICAgIHByb2MuY2xvc2VTdGRpbigpOworICAgICAgICAKKwkgICAg
Ym9vbCBleGl0ZWQgPSBwcm9jLndhaXQoUGlwZVRpbWVvdXQpOworCSAgICBpZihleGl0ZWQpIHsK
KwkgICAgCisJCWlmKHByb2Mubm9ybWFsRXhpdCgpKSB7CisJCSAgICAKKwkJICAgIHBpcGVfcmMg
PSBwcm9jLmV4aXRTdGF0dXMoKTsKKwkJICAgIGlmKHBpcGVfcmMgIT0gMCAmJiBkZWJ1Zykgewor
CQkJaWYocGlwZV9lcnIuaXNFbXB0eSgpKSB7CisJCQkgICAgS01lc3NhZ2VCb3g6OmVycm9yKE5V
TEwsIAorCQkJCWkxOG4oIlBpcGUgY29tbWFuZCBleGl0IHdpdGggc3RhdHVzICUxOiAlMiIpLmFy
ZyhwaXBlX3JjKS5hcmcoY21kKSk7CisJCQl9IGVsc2UgeworCQkJICAgIEtNZXNzYWdlQm94Ojpk
ZXRhaWxlZEVycm9yKE5VTEwsIAorCQkJCWkxOG4oIlBpcGUgY29tbWFuZCBleGl0IHdpdGggc3Rh
dHVzICUxOiAlMiIpLmFyZyhwaXBlX3JjKS5hcmcoY21kKSwgcGlwZV9lcnIpOworCQkJfTsKKwkJ
ICAgIH07CisJCSAgICAKKwkJfSBlbHNlIHsKKwkJICAgIAorCQkgICAgcGlwZV9yYyA9IC0ocHJv
Yy5leGl0U2lnbmFsKCkpOworCQkgICAgaWYocGlwZV9yYyAhPSAwICYmIGRlYnVnKSB7CisJCQlp
ZihwaXBlX2Vyci5pc0VtcHR5KCkpIHsKKwkJCSAgICBLTWVzc2FnZUJveDo6ZXJyb3IoTlVMTCwg
CisJCQkJaTE4bigiUGlwZSBjb21tYW5kIGtpbGxlZCBieSBzaWduYWwgJTE6ICUyIikuYXJnKC0o
cGlwZV9yYykpLmFyZyhjbWQpKTsKKwkJCX0gZWxzZSB7CisJCQkgICAgS01lc3NhZ2VCb3g6OmRl
dGFpbGVkRXJyb3IoTlVMTCwgCisJCQkJaTE4bigiUGlwZSBjb21tYW5kIGtpbGxlZCBieSBzaWdu
YWwgJTE6ICUyIikuYXJnKC0ocGlwZV9yYykpLmFyZyhjbWQpLCBwaXBlX2Vycik7CisJCQl9Owor
CQkgICAgfTsKKwkJICAgIAorCQl9OworCSAgICAKKwkgICAgfSBlbHNlIHsKKwkJLy8gcHJvY2Vz
cyBkb2VzIG5vdCBleGl0ZWQgYWZ0ZXIgVGVtcGxhdGVQYXJzZXI6OlBpcGVUaW1lb3V0IHNlY29u
ZHMsIGtpbGwgaXQKKwkJcHJvYy5raWxsKCk7CisJCXByb2MuZGV0YWNoKCk7CisJCWlmKGRlYnVn
KSB7CisJCSAgICBLTWVzc2FnZUJveDo6ZXJyb3IoTlVMTCwgCisJCQlpMThuKCJQaXBlIGNvbW1h
bmQgZG9lcyBub3QgZmluaXNoZWQgd2l0aGluICUxIHNlY29uZHM6ICUyIikuYXJnKFBpcGVUaW1l
b3V0KS5hcmcoY21kKSk7CisJCX07CisJICAgIH07CisJICAgIAorCX0gZWxzZSB7CisJICAgIC8v
IGNhbmB0IHdyaXRlIHRvIHN0ZGluIG9mIHByb2Nlc3MKKwkgICAgcHJvYy5raWxsKCk7CisJICAg
IHByb2MuZGV0YWNoKCk7CisJICAgIGlmKGRlYnVnKSB7CisJCWlmKHBpcGVfZXJyLmlzRW1wdHko
KSkgeworCQkgICAgS01lc3NhZ2VCb3g6OmVycm9yKE5VTEwsIAorCQkJaTE4bigiQ2FuYHQgd3Jp
dGUgdG8gcHJvY2VzcyBzdGRpbjogJTEiKS5hcmcoY21kKSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKwkJICAgIEtNZXNzYWdlQm94OjpkZXRhaWxlZEVycm9yKE5VTEwsIAorCQkJaTE4bigi
Q2FuYHQgd3JpdGUgdG8gcHJvY2VzcyBzdGRpbjogJTEiKS5hcmcoY21kKSwgcGlwZV9lcnIpOwor
ICAgICAgICAgICAgICAgIH07CQorCSAgICB9OworCX07CisgICAgICAgICAgICAgICAgCisgICAg
fSBlbHNlIGlmKGRlYnVnKSB7CisgICAgICAgIEtNZXNzYWdlQm94OjplcnJvcihOVUxMLCBpMThu
KCJDYW5gdCBzdGFydCBwaXBlIGNvbW1hbmQgZnJvbSB0ZW1wbGF0ZTogJTEiKS5hcmcoY21kKSk7
CisgICAgfTsKKyAgICAKKyAgICByZXR1cm4gcGlwZV9vdXQ7Cit9OworCit2b2lkIFRlbXBsYXRl
UGFyc2VyOjpvblByb2Nlc3NFeGl0ZWQoS1Byb2Nlc3MgKnByb2MpIHsKKyAgICAvLyBkbyBub3Ro
aW5nIGZvciBub3cKK307CisKK3ZvaWQgVGVtcGxhdGVQYXJzZXI6Om9uUmVjZWl2ZWRTdGRvdXQo
S1Byb2Nlc3MgKnByb2MsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbikgeworICAgIHBpcGVfb3V0
ICs9IFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoYnVmZmVyLCBidWZsZW4pOworfTsKKwordm9pZCBU
ZW1wbGF0ZVBhcnNlcjo6b25SZWNlaXZlZFN0ZGVycihLUHJvY2VzcyAqcHJvYywgY2hhciAqYnVm
ZmVyLCBpbnQgYnVmbGVuKSB7CisgICAgcGlwZV9lcnIgKz0gUVN0cmluZzo6ZnJvbUxvY2FsOEJp
dChidWZmZXIsIGJ1Zmxlbik7Cit9OworCit2b2lkIFRlbXBsYXRlUGFyc2VyOjpvbldyb3RlU3Rk
aW4oS1Byb2Nlc3MgKnByb2MpIHsKKyAgICBwcm9jLT5jbG9zZVN0ZGluKCk7Cit9OworCisjaW5j
bHVkZSAidGVtcGxhdGVwYXJzZXIubW9jIgpJbmRleDoga21haWwva21lZGl0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrbWFpbC9rbWVkaXQuY3BwCShyZXZpc2lvbiA1OTY3MjUpCisrKyBrbWFpbC9rbWVk
aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDEsNCArNzQxLDE0IEBACiAgIH0KIH0KIAordm9p
ZCBLTUVkaXQ6OnNldEN1cnNvclBvc2l0aW9uRnJvbVN0YXJ0KHVuc2lnbmVkIGludCBwb3MpIHsK
KyAgdW5zaWduZWQgaW50IGwgPSAwOworICB1bnNpZ25lZCBpbnQgYyA9IDA7CisgIHBvc1RvUm93
Q29sKCBwb3MsIGwsIGMgKTsKKyAgLy8ga2REZWJ1ZygpIDw8ICJOdW0gbGluZXM6ICIgPDwgbnVt
TGluZXMoKSA8PCBlbmRsOworICAvLyBrZERlYnVnKCkgPDwgIlBvc2l0aW9uICIgPDwgcG9zIDw8
ICIgY29udmVydGVkIHRvICIgPDwgbCA8PCAiOiIgPDwgYyA8PCBlbmRsOworICBzZXRDdXJzb3JQ
b3NpdGlvbiggbCwgYyApOworICBlbnN1cmVDdXJzb3JWaXNpYmxlKCk7Cit9OworCiAjaW5jbHVk
ZSAia21lZGl0Lm1vYyIKSW5kZXg6IGttYWlsL2ttbWVzc2FnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtt
YWlsL2ttbWVzc2FnZS5oCShyZXZpc2lvbiA1OTY3MjUpCisrKyBrbWFpbC9rbW1lc3NhZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtODM4LDYgKzgzOCwxMiBAQAogICAvKiogUmV0dXJuIHRoZSB0ZXh0
dWFsIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UgYXMgcGxhaW4gdGV4dCwKICAgICAgIGNvbnZlcnRp
bmcgSFRNTCB0byBwbGFpbiB0ZXh0IGlmIG5lY2Vzc2FyeS4gKi8KICAgUVN0cmluZyBhc1BsYWlu
VGV4dCggYm9vbCBzdHJpcFNpZ25hdHVyZSwgYm9vbCBhbGxvd0RlY3J5cHRpb24gKSBjb25zdDsK
KyAgCisgIC8qKiBHZXQgc3RvcmVkIGN1cnNvciBwb3NpdGlvbiAqLworICBpbnQgZ2V0Q3Vyc29y
UG9zKCkgeyByZXR1cm4gbUN1cnNvclBvczsgfTsKKyAgLyoqIFNldCBjdXJzb3IgcG9zaXRpb24g
YXMgb2Zmc2V0IGZyb20gbWVzc2FnZSBzdGFydCAqLworICB2b2lkIHNldEN1cnNvclBvcyhpbnQg
cG9zKSB7IG1DdXJzb3JQb3MgPSBwb3M7IH07CisgIAogcHJpdmF0ZToKIAogICAvKiogSW5pdGlh
bGl6YXRpb24gc2hhcmVkIGJ5IHRoZSBjdG9ycy4gKi8KQEAgLTg2NCw2ICs4NzAsNyBAQAogICBL
TU1zZ01ETlNlbnRTdGF0ZSBtTUROU2VudFN0YXRlOwogICBLTU1lc3NhZ2UqIG1VbmVuY3J5cHRl
ZE1zZzsKICAgRHdCb2R5UGFydCogbUxhc3RVcGRhdGVkOworICBpbnQgbUN1cnNvclBvczsKIH07
CiAKIApJbmRleDoga21haWwva21tZXNzYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC9rbW1l
c3NhZ2UuY3BwCShyZXZpc2lvbiA1OTY3MjUpCisrKyBrbWFpbC9rbW1lc3NhZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiB1c2luZyBLTWFpbDo6SGVhZGVyU3RyYXRlZ3k7
CiAjaW5jbHVkZSAia21hZGRyYm9vay5oIgogI2luY2x1ZGUgImtjdXJzb3JzYXZlci5oIgorI2lu
Y2x1ZGUgInRlbXBsYXRlcGFyc2VyLmgiCiAKICNpbmNsdWRlIDxsaWJrcGltaWRlbnRpdGllcy9p
ZGVudGl0eS5oPgogI2luY2x1ZGUgPGxpYmtwaW1pZGVudGl0aWVzL2lkZW50aXR5bWFuYWdlci5o
PgpAQCAtMTU4LDYgKzE1OSw3IEBACiAgIG1EYXRlICAgID0gMDsKICAgbVVuZW5jcnlwdGVkTXNn
ID0gMDsKICAgbUxhc3RVcGRhdGVkID0gMDsKKyAgbUN1cnNvclBvcyA9IDA7CiB9CiAKIHZvaWQg
S01NZXNzYWdlOjphc3NpZ24oIGNvbnN0IEtNTWVzc2FnZSYgb3RoZXIgKQpAQCAtODU3LDYgKzg1
OSw3IEBACiAgIFFTdHJpbmcgc3RyLCByZXBseVN0ciwgbWFpbGluZ0xpc3RTdHIsIHJlcGx5VG9T
dHIsIHRvU3RyOwogICBRU3RyaW5nTGlzdCBtYWlsaW5nTGlzdEFkZHJlc3NlczsKICAgUTNDU3Ry
aW5nIHJlZlN0ciwgaGVhZGVyTmFtZTsKKyAgYm9vbCByZXBseUFsbCA9IHRydWU7CiAKICAgbXNn
LT5pbml0RnJvbU1lc3NhZ2UodGhpcyk7CiAKQEAgLTg5Niw2ICs4OTksNyBAQAogICAgICAgLy8g
ZG9lc24ndCBzZWVtIHRvIGJlIGEgbWFpbGluZyBsaXN0LCByZXBseSB0byBGcm9tOiBhZGRyZXNz
CiAgICAgICB0b1N0ciA9IGZyb20oKTsKICAgICAgIHJlcGx5U3RyID0gc1JlcGx5U3RyOyAvLyBy
ZXBseSB0byBhdXRob3IsIHNvIHVzZSAiT24gLi4uIHlvdSB3cm90ZToiCisgICAgICByZXBseUFs
bCA9IGZhbHNlOwogICAgIH0KICAgICAvLyBzdHJpcCBhbGwgbXkgYWRkcmVzc2VzIGZyb20gdGhl
IGxpc3Qgb2YgcmVjaXBpZW50cwogICAgIFFTdHJpbmdMaXN0IHJlY2lwaWVudHMgPSBFbWFpbEFk
ZHJlc3NUb29sczo6c3BsaXRBZGRyZXNzTGlzdCggdG9TdHIgKTsKQEAgLTEwMjUsNiArMTAyOSw3
IEBACiAgICAgICB0b1N0ciA9IGZyb20oKTsKICAgICB9CiAgICAgcmVwbHlTdHIgPSBzUmVwbHlT
dHI7IC8vIHJlcGx5IHRvIGF1dGhvciwgc28gdXNlICJPbiAuLi4geW91IHdyb3RlOiIKKyAgICBy
ZXBseUFsbCA9IGZhbHNlOwogICAgIGJyZWFrOwogICB9CiAgIGNhc2UgS01haWw6OlJlcGx5Tm9u
ZSA6IHsKQEAgLTEwNDAsMTcgKzEwNDUsMjIgQEAKICAgLy9Jbi1SZXBseS1UbyA9IG9yaWdpbmFs
IG1zZy1pZAogICBtc2ctPnNldFJlcGx5VG9JZChtc2dJZCgpKTsKIAotICBpZiAoIW5vUXVvdGUp
IHsKLSAgICBpZiggc2VsZWN0aW9uSXNCb2R5ICl7Ci0gICAgICBRM0NTdHJpbmcgY1N0ciA9IHNl
bGVjdGlvbi50b0xhdGluMSgpOwotICAgICAgbXNnLT5zZXRCb2R5KCBjU3RyICk7Ci0gICAgfWVs
c2V7Ci0gICAgICBtc2ctPnNldEJvZHkoYXNRdW90ZWRTdHJpbmcocmVwbHlTdHIgKyAnXG4nLCBz
SW5kZW50UHJlZml4U3RyLCBzZWxlY3Rpb24sCi0JCQkJICBzU21hcnRRdW90ZSwgYWxsb3dEZWNy
eXB0aW9uKS50b1V0ZjgoKSk7Ci0gICAgfQotICB9CisvLyAgIGlmICghbm9RdW90ZSkgeworLy8g
ICAgIGlmKCBzZWxlY3Rpb25Jc0JvZHkgKXsKKy8vICAgICAgIFEzQ1N0cmluZyBjU3RyID0gc2Vs
ZWN0aW9uLnRvTGF0aW4xKCk7CisvLyAgICAgICBtc2ctPnNldEJvZHkoIGNTdHIgKTsKKy8vICAg
ICB9ZWxzZXsKKy8vICAgICAgIG1zZy0+c2V0Qm9keShhc1F1b3RlZFN0cmluZyhyZXBseVN0ciAr
ICdcbicsIHNJbmRlbnRQcmVmaXhTdHIsIHNlbGVjdGlvbiwKKy8vIAkJCQkgIHNTbWFydFF1b3Rl
LCBhbGxvd0RlY3J5cHRpb24pLnRvVXRmOCgpKTsKKy8vICAgICB9CisvLyAgIH0KIAogICBtc2ct
PnNldFN1YmplY3QoIHJlcGx5U3ViamVjdCgpICk7CisgIAorICBUZW1wbGF0ZVBhcnNlciBwYXJz
ZXIoIG1zZywgKHJlcGx5QWxsID8gVGVtcGxhdGVQYXJzZXI6OlJlcGx5QWxsIDogVGVtcGxhdGVQ
YXJzZXI6OlJlcGx5KSwKKyAgICBzZWxlY3Rpb24sIHNTbWFydFF1b3RlLCBub1F1b3RlLCBhbGxv
d0RlY3J5cHRpb24sIHNlbGVjdGlvbklzQm9keSApOworICBwYXJzZXIucHJvY2VzcyggdGhpcyAp
OworICAKICAgbXNnLT5saW5rKCB0aGlzLCBNZXNzYWdlU3RhdHVzOjpzdGF0dXNSZXBsaWVkKCkg
KTsKIAogICBpZiAoIHBhcmVudCgpICYmIHBhcmVudCgpLT5wdXRSZXBsaWVzSW5TYW1lRm9sZGVy
KCkgKQpAQCAtMTI0MSwxMiArMTI1MSwxNyBAQAogICAgIG1zZy0+bU5lZWRzQXNzZW1ibHkgPSB0
cnVlOwogICAgIG1zZy0+Y2xlYW51cEhlYWRlcigpOwogICB9Ci0gIFFTdHJpbmcgc3QgPSBRU3Ry
aW5nOjpmcm9tVXRmOChjcmVhdGVGb3J3YXJkQm9keSgpKTsKLSAgUTNDU3RyaW5nIGVuY29kaW5n
ID0gYXV0b0RldGVjdENoYXJzZXQoY2hhcnNldCgpLCBzUHJlZkNoYXJzZXRzLCBzdCk7CisgIC8v
IFFTdHJpbmcgc3QgPSBRU3RyaW5nOjpmcm9tVXRmOChjcmVhdGVGb3J3YXJkQm9keSgpKTsKKyAg
bXNnLT5zZXRTdWJqZWN0KCBmb3J3YXJkU3ViamVjdCgpICk7CisgIFRlbXBsYXRlUGFyc2VyIHBh
cnNlciggbXNnLCBUZW1wbGF0ZVBhcnNlcjo6Rm9yd2FyZCwKKyAgICB0aGlzLT5ib2R5KCksIGZh
bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKKyAgcGFyc2VyLnByb2Nlc3MoIHRoaXMgKTsKKyAg
CisgIFEzQ1N0cmluZyBlbmNvZGluZyA9IGF1dG9EZXRlY3RDaGFyc2V0KGNoYXJzZXQoKSwgc1By
ZWZDaGFyc2V0cywgbXNnLT5ib2R5KCkpOworCiAgIGlmIChlbmNvZGluZy5pc0VtcHR5KCkpIGVu
Y29kaW5nID0gInV0Zi04IjsKICAgbXNnLT5zZXRDaGFyc2V0KGVuY29kaW5nKTsKIAotICBtc2ct
PnNldFN1YmplY3QoIGZvcndhcmRTdWJqZWN0KCkgKTsKICAgbXNnLT5saW5rKCB0aGlzLCBNZXNz
YWdlU3RhdHVzOjpzdGF0dXNGb3J3YXJkZWQoKSApOwogICByZXR1cm4gbXNnOwogfQpJbmRleDog
a21haWwvY29uZmlndXJlZGlhbG9nX3AuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC9jb25maWd1cmVk
aWFsb2dfcC5oCShyZXZpc2lvbiA1OTY3MjUpCisrKyBrbWFpbC9jb25maWd1cmVkaWFsb2dfcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBACiBjbGFzcyBLQ29uZmlnOwogY2xhc3Mg
UVBvaW50OwogY2xhc3MgU01pbWVDb25maWd1cmF0aW9uOworY2xhc3MgVGVtcGxhdGVzQ29uZmln
dXJhdGlvbjsKIAogbmFtZXNwYWNlIEtwZ3AgewogICBjbGFzcyBDb25maWc7CkBAIC02NTUsNiAr
NjU2LDIzIEBACiAgIExhbmd1YWdlSXRlbUxpc3QgbUxhbmd1YWdlTGlzdDsKIH07CiAKK2NsYXNz
IENvbXBvc2VyUGFnZVRlbXBsYXRlc1RhYiA6IHB1YmxpYyBDb25maWdNb2R1bGVUYWIgeworICBR
X09CSkVDVAorcHVibGljOgorICBDb21wb3NlclBhZ2VUZW1wbGF0ZXNUYWIoIFFXaWRnZXQgKiBw
YXJlbnQ9MCApOworICBRU3RyaW5nIGhlbHBBbmNob3IoKSBjb25zdDsKKworICB2b2lkIHNhdmUo
KTsKKworcHJpdmF0ZSBzbG90czoKKworcHJpdmF0ZToKKyAgdmlydHVhbCB2b2lkIGRvTG9hZEZy
b21HbG9iYWxTZXR0aW5ncygpOworCitwcml2YXRlOgorICAgIFRlbXBsYXRlc0NvbmZpZ3VyYXRp
b24qIG1XaWRnZXQ7Cit9OworCiBjbGFzcyBDb21wb3NlclBhZ2VTdWJqZWN0VGFiIDogcHVibGlj
IENvbmZpZ01vZHVsZVRhYiB7CiAgIFFfT0JKRUNUCiBwdWJsaWM6CkBAIC03NTcsNiArNzc1LDcg
QEAKICAgLy8gaHJtcGYuIG1vYyBkb2Vzbid0IGxpa2UgbmVzdGVkIGNsYXNzZXMgd2l0aCBzbG90
cy9zaWduYWxzLi4uOgogICB0eXBlZGVmIENvbXBvc2VyUGFnZUdlbmVyYWxUYWIgR2VuZXJhbFRh
YjsKICAgdHlwZWRlZiBDb21wb3NlclBhZ2VQaHJhc2VzVGFiIFBocmFzZXNUYWI7CisgIHR5cGVk
ZWYgQ29tcG9zZXJQYWdlVGVtcGxhdGVzVGFiIFRlbXBsYXRlc1RhYjsKICAgdHlwZWRlZiBDb21w
b3NlclBhZ2VTdWJqZWN0VGFiIFN1YmplY3RUYWI7CiAgIHR5cGVkZWYgQ29tcG9zZXJQYWdlQ2hh
cnNldFRhYiBDaGFyc2V0VGFiOwogICB0eXBlZGVmIENvbXBvc2VyUGFnZUhlYWRlcnNUYWIgSGVh
ZGVyc1RhYjsKQEAgLTc2NSw2ICs3ODQsNyBAQAogcHJpdmF0ZToKICAgR2VuZXJhbFRhYiAgKm1H
ZW5lcmFsVGFiOwogICBQaHJhc2VzVGFiICAqbVBocmFzZXNUYWI7CisgIFRlbXBsYXRlc1RhYiAg
Km1UZW1wbGF0ZXNUYWI7CiAgIFN1YmplY3RUYWIgICptU3ViamVjdFRhYjsKICAgQ2hhcnNldFRh
YiAgKm1DaGFyc2V0VGFiOwogICBIZWFkZXJzVGFiICAqbUhlYWRlcnNUYWI7CkluZGV4OiBrbWFp
bC90ZW1wbGF0ZXBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGttYWlsL3RlbXBsYXRlcGFyc2VyLmgJ
KHJldmlzaW9uIDApCisrKyBrbWFpbC90ZW1wbGF0ZXBhcnNlci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc4IEBACisvKiAgIC0qLSBtb2RlOiBDKys7IGMtZmlsZS1zdHlsZTogImdudSIgLSot
CisgKiAgIGttYWlsOiBLREUgbWFpbCBjbGllbnQKKyAqICAgVGhpcyBmaWxlOiBDb3B5cmlnaHQg
KEMpIDIwMDYgRG1pdHJ5IE1vcm96aG5pa292CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
cHJhZ21hIG9uY2UKKworY2xhc3MgS01NZXNzYWdlOworY2xhc3MgUVN0cmluZzsKK2NsYXNzIEtN
Rm9sZGVyOworY2xhc3MgUU9iamVjdDsKK2NsYXNzIEtQcm9jZXNzOworCisjaW5jbHVkZSA8UU9i
amVjdD4KKworY2xhc3MgVGVtcGxhdGVQYXJzZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9P
QkpFQ1QKKyAgICAKKyAgICBwdWJsaWM6CisgICAgCisgICAgICAgIGVudW0gTW9kZSB7TmV3TWVz
c2FnZSwgUmVwbHksIFJlcGx5QWxsLCBGb3J3YXJkfTsKKyAgICAgICAgCisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgUGlwZVRpbWVvdXQgPSAxNTsKKyAgICAKKyAgICBwdWJsaWM6CisgICAgCisg
ICAgICAgIFRlbXBsYXRlUGFyc2VyKEtNTWVzc2FnZSogYW1zZywgTW9kZSBhbW9kZSwgUVN0cmlu
ZyBhc2VsZWN0aW9uLCAKKyAgICAgICAgICAgIGJvb2wgYVNtYXJ0UXVvdGUsIGJvb2wgYW5vUXVv
dGUsIGJvb2wgYWFsbG93RGVjcnlwdGlvbiwgYm9vbCBhc2VsZWN0aW9uSXNCb2R5KTsKKyAgICAg
ICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKEtNTWVzc2FnZSogYW9yaWdfbXNnLCBL
TUZvbGRlciogYWZvbGRlciA9IE5VTEwpOworICAgICAgICB2aXJ0dWFsIFFTdHJpbmcgZmluZFRl
bXBsYXRlKCk7CisgICAgICAgIHZpcnR1YWwgUVN0cmluZyBwaXBlKFFTdHJpbmcgY21kLCBRU3Ry
aW5nIGJ1Zik7CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIFFTdHJpbmcgZ2V0Rk5hbWUoUVN0
cmluZyBzdHIpOworICAgICAgICB2aXJ0dWFsIFFTdHJpbmcgZ2V0TE5hbWUoUVN0cmluZyBzdHIp
OworICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAKKyAgICAgICAgTW9kZSBtb2RlOworICAgICAg
ICBLTUZvbGRlciogZm9sZGVyOworICAgICAgICBLTU1lc3NhZ2UqIG1zZzsKKyAgICAgICAgS01N
ZXNzYWdlKiBvcmlnX21zZzsKKyAgICAgICAgUVN0cmluZyBzZWxlY3Rpb247CisgICAgICAgIGJv
b2wgc21hcnRRdW90ZTsKKyAgICAgICAgYm9vbCBub1F1b3RlOworICAgICAgICBib29sIGFsbG93
RGVjcnlwdGlvbjsKKyAgICAgICAgYm9vbCBzZWxlY3Rpb25Jc0JvZHk7CisgICAgICAgIGludCBw
aXBlX3JjOworICAgICAgICBRU3RyaW5nIHBpcGVfb3V0OworICAgICAgICBRU3RyaW5nIHBpcGVf
ZXJyOworICAgICAgICBib29sIGRlYnVnOworICAgICAgICBRU3RyaW5nIHF1b3RlU3RyaW5nOwor
ICAgICAgICAKKyAgICAgICAgaW50IHBhcnNlUXVvdGVzKFFTdHJpbmcgcHJlZml4LCBRU3RyaW5n
IHN0ciwgUVN0cmluZyYgcXVvdGUpOworICAgIAorICAgIHByb3RlY3RlZCBzbG90czoKKyAgICAK
KyAgICAgICAgdm9pZCBvblByb2Nlc3NFeGl0ZWQoS1Byb2Nlc3MgKnByb2MpOworICAgICAgICB2
b2lkIG9uUmVjZWl2ZWRTdGRvdXQoS1Byb2Nlc3MgKnByb2MsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1
Zmxlbik7CisgICAgICAgIHZvaWQgb25SZWNlaXZlZFN0ZGVycihLUHJvY2VzcyAqcHJvYywgY2hh
ciAqYnVmZmVyLCBpbnQgYnVmbGVuKTsKKyAgICAgICAgdm9pZCBvbldyb3RlU3RkaW4oS1Byb2Nl
c3MgKnByb2MpOworICAgICAgICAKK307CkluZGV4OiBrbWFpbC90ZW1wbGF0ZXNjb25maWd1cmF0
aW9uX2tmZy5rY2ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGttYWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb25f
a2ZnLmtjZmcJKHJldmlzaW9uIDApCisrKyBrbWFpbC90ZW1wbGF0ZXNjb25maWd1cmF0aW9uX2tm
Zy5rY2ZnCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAi
IGVuY29kaW5nPSJVVEYtOCI/PgorPGtjZmcgeG1sbnM9Imh0dHA6Ly93d3cua2RlLm9yZy9zdGFu
ZGFyZHMva2NmZy8xLjAiCisgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv
WE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3
LmtkZS5vcmcvc3RhbmRhcmRzL2tjZmcvMS4wCisgICAgICBodHRwOi8vd3d3LmtkZS5vcmcvc3Rh
bmRhcmRzL2tjZmcvMS4wL2tjZmcueHNkIiA+CisgIDxrY2ZnZmlsZSBuYW1lPSJrbWFpbHJjIj4K
KyAgICA8cGFyYW1ldGVyIG5hbWU9ImZvbGRlciIgLz4KKyAgPC9rY2ZnZmlsZT4KKworICA8Z3Jv
dXAgbmFtZT0iVGVtcGxhdGVzICMkKGZvbGRlcikiPgorICAgIDxlbnRyeSBuYW1lPSJVc2VDdXN0
b21UZW1wbGF0ZXMiIHR5cGU9IkJvb2wiIGtleT0iVXNlQ3VzdG9tVGVtcGxhdGVzIj4KKyAgICAg
IDxsYWJlbD48L2xhYmVsPgorICAgICAgPHdoYXRzdGhpcz48L3doYXRzdGhpcz4KKyAgICAgIDxk
ZWZhdWx0PmZhbHNlPC9kZWZhdWx0PgorICAgIDwvZW50cnk+CisgICAgPGVudHJ5IG5hbWU9IlRl
bXBsYXRlTmV3TWVzc2FnZSIgdHlwZT0iU3RyaW5nIiBrZXk9IlRlbXBsYXRlTmV3TWVzc2FnZSI+
CisgICAgICA8bGFiZWw+PC9sYWJlbD4KKyAgICAgIDx3aGF0c3RoaXM+PC93aGF0c3RoaXM+Cisg
ICAgICA8ZGVmYXVsdD48L2RlZmF1bHQ+CisgICAgPC9lbnRyeT4KKyAgICA8ZW50cnkgbmFtZT0i
VGVtcGxhdGVSZXBseSIgdHlwZT0iU3RyaW5nIiBrZXk9IlRlbXBsYXRlUmVwbHkiPgorICAgICAg
PGxhYmVsPjwvbGFiZWw+CisgICAgICA8d2hhdHN0aGlzPjwvd2hhdHN0aGlzPgorICAgICAgPGRl
ZmF1bHQ+PC9kZWZhdWx0PgorICAgIDwvZW50cnk+CisgICAgPGVudHJ5IG5hbWU9IlRlbXBsYXRl
UmVwbHlBbGwiIHR5cGU9IlN0cmluZyIga2V5PSJUZW1wbGF0ZVJlcGx5QWxsIj4KKyAgICAgIDxs
YWJlbD48L2xhYmVsPgorICAgICAgPHdoYXRzdGhpcz48L3doYXRzdGhpcz4KKyAgICAgIDxkZWZh
dWx0PjwvZGVmYXVsdD4KKyAgICA8L2VudHJ5PgorICAgIDxlbnRyeSBuYW1lPSJUZW1wbGF0ZUZv
cndhcmQiIHR5cGU9IlN0cmluZyIga2V5PSJUZW1wbGF0ZUZvcndhcmQiPgorICAgICAgPGxhYmVs
PjwvbGFiZWw+CisgICAgICA8d2hhdHN0aGlzPjwvd2hhdHN0aGlzPgorICAgICAgPGRlZmF1bHQ+
PC9kZWZhdWx0PgorICAgIDwvZW50cnk+CisgICAgPGVudHJ5IG5hbWU9IlF1b3RlU3RyaW5nIiB0
eXBlPSJTdHJpbmciIGtleT0iUXVvdGVTdHJpbmciPgorICAgICAgPGxhYmVsPjwvbGFiZWw+Cisg
ICAgICA8d2hhdHN0aGlzPjwvd2hhdHN0aGlzPgorICAgICAgPGRlZmF1bHQ+PC9kZWZhdWx0Pgor
ICAgIDwvZW50cnk+CisgIDwvZ3JvdXA+CisKKzwva2NmZz4KSW5kZXg6IGttYWlsL2ttY29tbWFu
ZHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGttYWlsL2ttY29tbWFuZHMuY3BwCShyZXZpc2lvbiA1OTY3
MjUpCisrKyBrbWFpbC9rbWNvbW1hbmRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzEx
NCw3IEBACiAjaW5jbHVkZSAicmVkaXJlY3RkaWFsb2cuaCIKIHVzaW5nIEtNYWlsOjpSZWRpcmVj
dERpYWxvZzsKICNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAidGVtcGxhdGVwYXJzZXIuaCIK
IAogI2luY2x1ZGUgImJyb2FkY2FzdHN0YXR1cy5oIgogI2luY2x1ZGUgImdsb2JhbHNldHRpbmdz
LmgiCkBAIC0xMjU3LDcgKzEyNTgsNyBAQAogICB7CiAgICAgS01haWw6OkNvbXBvc2VyICogd2lu
ID0gS01haWw6Om1ha2VDb21wb3NlciggZndkTXNnLCBpZCApOwogICAgIHdpbi0+c2V0Q2hhcnNl
dCggZndkTXNnLT5jb2RlYygpLT5uYW1lKCksIHRydWUgKTsKLSAgICB3aW4tPnNldEJvZHkoIFFT
dHJpbmc6OmZyb21VdGY4KCBtc2ctPmNyZWF0ZUZvcndhcmRCb2R5KCkgKSApOworICAgIC8vIHdp
bi0+c2V0Qm9keSggUVN0cmluZzo6ZnJvbVV0ZjgoIG1zZy0+Y3JlYXRlRm9yd2FyZEJvZHkoKSAp
ICk7CiAgICAgd2luLT5zaG93KCk7CiAgIH0KIApJbmRleDoga21haWwva21haWwua2NmZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBrbWFpbC9rbWFpbC5rY2ZnCShyZXZpc2lvbiA1OTY3MjUpCisrKyBrbWFpbC9r
bWFpbC5rY2ZnCSh3b3JraW5nIGNvcHkpCkBAIC01LDYgKzUsOCBAQAogICAgICAgaHR0cDovL3d3
dy5rZGUub3JnL3N0YW5kYXJkcy9rY2ZnLzEuMC9rY2ZnLnhzZCIgPgogICA8aW5jbHVkZT5rbWds
b2JhbC5oPC9pbmNsdWRlPgogICA8aW5jbHVkZT5xdGV4dGNvZGVjLmg8L2luY2x1ZGU+CisgIDxp
bmNsdWRlPnRlbXBsYXRlc2NvbmZpZ3VyYXRpb24uaDwvaW5jbHVkZT4KKyAgPGluY2x1ZGU+dGVt
cGxhdGVzY29uZmlndXJhdGlvbmltcGwuaDwvaW5jbHVkZT4KICAgPGtjZmdmaWxlIG5hbWU9Imtt
YWlscmMiLz4KICAgICA8Z3JvdXAgbmFtZT0iQmVoYXZpb3VyIj4KICAgICAgIDxlbnRyeSBuYW1l
PSJEZWxheWVkTWFya0FzUmVhZCIgIHR5cGU9IkJvb2wiPgpAQCAtNDQ5LDQgKzQ1MSwzMiBAQAog
ICAgICAgPC9lbnRyeT4KICAgICA8L2dyb3VwPgogCisgIDxncm91cCBuYW1lPSJHbG9iYWxUZW1w
bGF0ZXMiPgorICAgIDxlbnRyeSBuYW1lPSJUZW1wbGF0ZU5ld01lc3NhZ2UiIHR5cGU9IlN0cmlu
ZyIga2V5PSJUZW1wbGF0ZU5ld01lc3NhZ2UiPgorICAgICAgPGxhYmVsPk1lc3NhZ2UgdGVtcGxh
dGUgZm9yIG5ldyBtZXNzYWdlPC9sYWJlbD4KKyAgICAgIDx3aGF0c3RoaXM+PC93aGF0c3RoaXM+
CisgICAgICA8ZGVmYXVsdCBjb2RlPSJ0cnVlIj5UZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpkZWZh
dWx0TmV3TWVzc2FnZSgpPC9kZWZhdWx0PgorICAgIDwvZW50cnk+CisgICAgPGVudHJ5IG5hbWU9
IlRlbXBsYXRlUmVwbHkiIHR5cGU9IlN0cmluZyIga2V5PSJUZW1wbGF0ZVJlcGx5Ij4KKyAgICAg
IDxsYWJlbD5NZXNzYWdlIHRlbXBsYXRlIGZvciByZXBseTwvbGFiZWw+CisgICAgICA8d2hhdHN0
aGlzPjwvd2hhdHN0aGlzPgorICAgICAgPGRlZmF1bHQgY29kZT0idHJ1ZSI+VGVtcGxhdGVzQ29u
ZmlndXJhdGlvbjo6ZGVmYXVsdFJlcGx5KCk8L2RlZmF1bHQ+CisgICAgPC9lbnRyeT4KKyAgICA8
ZW50cnkgbmFtZT0iVGVtcGxhdGVSZXBseUFsbCIgdHlwZT0iU3RyaW5nIiBrZXk9IlRlbXBsYXRl
UmVwbHlBbGwiPgorICAgICAgPGxhYmVsPk1lc3NhZ2UgdGVtcGxhdGUgZm9yIHJlcGx5IHRvIGFs
bDwvbGFiZWw+CisgICAgICA8d2hhdHN0aGlzPjwvd2hhdHN0aGlzPgorICAgICAgPGRlZmF1bHQg
Y29kZT0idHJ1ZSI+VGVtcGxhdGVzQ29uZmlndXJhdGlvbjo6ZGVmYXVsdFJlcGx5QWxsKCk8L2Rl
ZmF1bHQ+CisgICAgPC9lbnRyeT4KKyAgICA8ZW50cnkgbmFtZT0iVGVtcGxhdGVGb3J3YXJkIiB0
eXBlPSJTdHJpbmciIGtleT0iVGVtcGxhdGVGb3J3YXJkIj4KKyAgICAgIDxsYWJlbD5NZXNzYWdl
IHRlbXBsYXRlIGZvciBmb3J3YXJkPC9sYWJlbD4KKyAgICAgIDx3aGF0c3RoaXM+PC93aGF0c3Ro
aXM+CisgICAgICA8ZGVmYXVsdCBjb2RlPSJ0cnVlIj5UZW1wbGF0ZXNDb25maWd1cmF0aW9uOjpk
ZWZhdWx0Rm9yd2FyZCgpPC9kZWZhdWx0PgorICAgIDwvZW50cnk+CisgICAgPGVudHJ5IG5hbWU9
IlF1b3RlU3RyaW5nIiB0eXBlPSJTdHJpbmciIGtleT0iUXVvdGVTdHJpbmciPgorICAgICAgPGxh
YmVsPlF1b3RlIGNoYXJhY3RlcnM8L2xhYmVsPgorICAgICAgPHdoYXRzdGhpcz48L3doYXRzdGhp
cz4KKyAgICAgIDxkZWZhdWx0IGNvZGU9InRydWUiPlRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OmRl
ZmF1bHRRdW90ZVN0cmluZygpPC9kZWZhdWx0PgorICAgIDwvZW50cnk+CisgIDwvZ3JvdXA+CisK
IDwva2NmZz4KSW5kZXg6IGttYWlsL2ttbWFpbndpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21h
aWwva21tYWlud2lkZ2V0LmNwcAkocmV2aXNpb24gNTk2NzI1KQorKysga21haWwva21tYWlud2lk
Z2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSw3IEBACiB1c2luZyBLTWFpbDo6
SGVhZGVyTGlzdFF1aWNrU2VhcmNoOwogI2luY2x1ZGUgImttaGVhZGVycy5oIgogI2luY2x1ZGUg
Im1haWxpbmdsaXN0cHJvcGVydGllc2RpYWxvZy5oIgorI2luY2x1ZGUgInRlbXBsYXRlcGFyc2Vy
LmgiCiAKICNpZiAhZGVmaW5lZChOREVCVUcpCiAgICAgI2luY2x1ZGUgInNpZXZlZGVidWdkaWFs
b2cuaCIKQEAgLTkzMyw5ICs5MzQsMTUgQEAKIAogICBpZiAoIG1Gb2xkZXIgKSB7CiAgICAgICBt
c2ctPmluaXRIZWFkZXIoIG1Gb2xkZXItPmlkZW50aXR5KCkgKTsKKyAgICAgIFRlbXBsYXRlUGFy
c2VyIHBhcnNlciggbXNnLCBUZW1wbGF0ZVBhcnNlcjo6TmV3TWVzc2FnZSwgCisJIiIsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsIGZhbHNlICk7CisgICAgICBwYXJzZXIucHJvY2VzcyggTlVMTCwgbUZv
bGRlciApOwogICAgICAgd2luID0gS01haWw6Om1ha2VDb21wb3NlciggbXNnLCBtRm9sZGVyLT5p
ZGVudGl0eSgpICk7CiAgIH0gZWxzZSB7CiAgICAgICBtc2ctPmluaXRIZWFkZXIoKTsKKyAgICAg
IFRlbXBsYXRlUGFyc2VyIHBhcnNlciggbXNnLCBUZW1wbGF0ZVBhcnNlcjo6TmV3TWVzc2FnZSwg
CisJIiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlICk7CisgICAgICBwYXJzZXIucHJvY2Vz
cyggTlVMTCwgTlVMTCApOwogICAgICAgd2luID0gS01haWw6Om1ha2VDb21wb3NlciggbXNnICk7
CiAgIH0KIApJbmRleDoga21haWwvdGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGttYWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb25pbXBsLmNwcAkocmV2aXNpb24g
MCkKKysrIGttYWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb25pbXBsLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzODIgQEAKKy8qICAgLSotIG1vZGU6IEMrKzsgYy1maWxlLXN0eWxlOiAiZ251
IiAtKi0KKyAqICAga21haWw6IEtERSBtYWlsIGNsaWVudAorICogICBUaGlzIGZpbGU6IENvcHly
aWdodCAoQykgMjAwNiBEbWl0cnkgTW9yb3pobmlrb3YKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg
KiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
ciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor
ICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPGtsb2NhbGUuaD4KKyNpbmNsdWRl
IDxrZ2xvYmFsLmg+CisjaW5jbHVkZSA8cTNwb3B1cG1lbnUuaD4KKyNpbmNsdWRlIDxxcHVzaGJ1
dHRvbi5oPgorI2luY2x1ZGUgPHEzdGV4dGVkaXQuaD4KKyNpbmNsdWRlIDxxbGluZWVkaXQuaD4K
KyNpbmNsdWRlIDxxdG9vbGJveC5oPgorI2luY2x1ZGUgPGtkZWJ1Zy5oPgorI2luY2x1ZGUgPHFm
b250Lmg+CisKKyNpbmNsdWRlICJ0ZW1wbGF0ZXNjb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAi
dGVtcGxhdGVzY29uZmlndXJhdGlvbl9rZmcuaCIKKyNpbmNsdWRlICJnbG9iYWxzZXR0aW5ncy5o
IgorCisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwuaCIKKworVGVtcGxhdGVz
Q29uZmlndXJhdGlvbjo6VGVtcGxhdGVzQ29uZmlndXJhdGlvbihRV2lkZ2V0ICpwYXJlbnQsIGNv
bnN0IGNoYXIgKm5hbWUpCisgICAgOlRlbXBsYXRlc0NvbmZpZ3VyYXRpb25TdHViKHBhcmVudCwg
bmFtZSkKK3sKKyAgICBRRm9udCBmKCJDb3VyaWVyIE5ldyIpOworICAgIHRleHRFZGl0X25ldy0+
c2V0Rm9udChmKTsKKyAgICB0ZXh0RWRpdF9yZXBseS0+c2V0Rm9udChmKTsKKyAgICB0ZXh0RWRp
dF9yZXBseV9hbGwtPnNldEZvbnQoZik7CisgICAgdGV4dEVkaXRfZm9yd2FyZC0+c2V0Rm9udChm
KTsKKyAgICAKKyAgICBzZXRTaXplUG9saWN5KFFTaXplUG9saWN5OjpFeHBhbmRpbmcsIFFTaXpl
UG9saWN5OjpFeHBhbmRpbmcpOworICAgIHNpemVIaW50KCk7CisgICAgCisgICAgY29ubmVjdCgg
dGV4dEVkaXRfbmV3LCBTSUdOQUwoIHRleHRDaGFuZ2VkKCkgKSwKKwkgICAgdGhpcywgU0xPVCgg
c2xvdFRleHRDaGFuZ2VkKCB2b2lkICkgKSApOworICAgIGNvbm5lY3QoIHRleHRFZGl0X3JlcGx5
LCBTSUdOQUwoIHRleHRDaGFuZ2VkKCkgKSwKKwkgICAgdGhpcywgU0xPVCggc2xvdFRleHRDaGFu
Z2VkKCB2b2lkICkgKSApOworICAgIGNvbm5lY3QoIHRleHRFZGl0X3JlcGx5X2FsbCwgU0lHTkFM
KCB0ZXh0Q2hhbmdlZCgpICksCisJICAgIHRoaXMsIFNMT1QoIHNsb3RUZXh0Q2hhbmdlZCggdm9p
ZCApICkgKTsKKyAgICBjb25uZWN0KCB0ZXh0RWRpdF9mb3J3YXJkLCBTSUdOQUwoIHRleHRDaGFu
Z2VkKCkgKSwKKwkgICAgdGhpcywgU0xPVCggc2xvdFRleHRDaGFuZ2VkKCB2b2lkICkgKSApOwor
ICAgIGNvbm5lY3QoIGxpbmVFZGl0X3F1b3RlLCBTSUdOQUwoIHRleHRDaGFuZ2VkKCBjb25zdCBR
U3RyaW5nICYgKSApLAorCSAgICB0aGlzLCBTTE9UKCBzbG90VGV4dENoYW5nZWQoIHZvaWQgKSAp
ICk7CisgICAgCisgICAgY29ubmVjdCggYnV0dG9uX2luc2VydCwgU0lHTkFMKCBjbGlja2VkICgg
dm9pZCApICksCisJICAgIHRoaXMsIFNMT1QoIGJ1dHRvbl9pbnNlcnRfY2xpY2tlZCAoIHZvaWQg
KSApICk7Cit9OworCit2b2lkIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OnNsb3RUZXh0Q2hhbmdl
ZCgpIHsKKyAgICBlbWl0IGNoYW5nZWQoKTsKK307CisKK3ZvaWQgVGVtcGxhdGVzQ29uZmlndXJh
dGlvbjo6bG9hZEZyb21HbG9iYWwoKSB7CisgICAgUVN0cmluZyBzdHI7CisgICAgc3RyID0gR2xv
YmFsU2V0dGluZ3M6OnNlbGYoKS0+dGVtcGxhdGVOZXdNZXNzYWdlKCk7CisgICAgaWYoc3RyLmlz
RW1wdHkoKSkgeworICAgICAgICB0ZXh0RWRpdF9uZXctPnNldFRleHQoZGVmYXVsdE5ld01lc3Nh
Z2UoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4dEVkaXRfbmV3LT5zZXRUZXh0KHN0cik7
CisgICAgfTsKKyAgICBzdHIgPSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT50ZW1wbGF0ZVJlcGx5
KCk7CisgICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAgICB0ZXh0RWRpdF9yZXBseS0+c2V0
VGV4dChkZWZhdWx0UmVwbHkoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4dEVkaXRfcmVw
bHktPnNldFRleHQoc3RyKTsKKyAgICB9OworICAgIHN0ciA9IEdsb2JhbFNldHRpbmdzOjpzZWxm
KCktPnRlbXBsYXRlUmVwbHlBbGwoKTsKKyAgICBpZihzdHIuaXNFbXB0eSgpKSB7CisgICAgICAg
IHRleHRFZGl0X3JlcGx5X2FsbC0+c2V0VGV4dChkZWZhdWx0UmVwbHlBbGwoKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgdGV4dEVkaXRfcmVwbHlfYWxsLT5zZXRUZXh0KHN0cik7CisgICAgfTsK
KyAgICBzdHIgPSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT50ZW1wbGF0ZUZvcndhcmQoKTsKKyAg
ICBpZihzdHIuaXNFbXB0eSgpKSB7CisgICAgICAgIHRleHRFZGl0X2ZvcndhcmQtPnNldFRleHQo
ZGVmYXVsdEZvcndhcmQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4dEVkaXRfZm9yd2Fy
ZC0+c2V0VGV4dChzdHIpOworICAgIH07CisgICAgc3RyID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYo
KS0+cXVvdGVTdHJpbmcoKTsKKyAgICBpZihzdHIuaXNFbXB0eSgpKSB7CisgICAgICAgIGxpbmVF
ZGl0X3F1b3RlLT5zZXRUZXh0KGRlZmF1bHRRdW90ZVN0cmluZygpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBsaW5lRWRpdF9xdW90ZS0+c2V0VGV4dChzdHIpOworICAgIH07Cit9OworCit2b2lk
IFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OnNhdmVUb0dsb2JhbCgpIHsKKyAgICBHbG9iYWxTZXR0
aW5nczo6c2VsZigpLT5zZXRUZW1wbGF0ZU5ld01lc3NhZ2UodGV4dEVkaXRfbmV3LT50ZXh0KCkp
OworICAgIEdsb2JhbFNldHRpbmdzOjpzZWxmKCktPnNldFRlbXBsYXRlUmVwbHkodGV4dEVkaXRf
cmVwbHktPnRleHQoKSk7CisgICAgR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+c2V0VGVtcGxhdGVS
ZXBseUFsbCh0ZXh0RWRpdF9yZXBseV9hbGwtPnRleHQoKSk7CisgICAgR2xvYmFsU2V0dGluZ3M6
OnNlbGYoKS0+c2V0VGVtcGxhdGVGb3J3YXJkKHRleHRFZGl0X2ZvcndhcmQtPnRleHQoKSk7Cisg
ICAgR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+c2V0UXVvdGVTdHJpbmcobGluZUVkaXRfcXVvdGUt
PnRleHQoKSk7CisgICAgR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+d3JpdGVDb25maWcoKTsKK307
CisKK3ZvaWQgVGVtcGxhdGVzQ29uZmlndXJhdGlvbjo6bG9hZEZyb21Gb2xkZXIoUVN0cmluZyBp
ZCkgeworICAgIFRlbXBsYXRlcyB0KGlkKTsKKyAgICAKKyAgICBRU3RyaW5nIHN0cjsKKyAgICAK
KyAgICBzdHIgPSB0LnRlbXBsYXRlTmV3TWVzc2FnZSgpOworICAgIGlmKHN0ci5pc0VtcHR5KCkp
IHsKKyAgICAgICAgc3RyID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+dGVtcGxhdGVOZXdNZXNz
YWdlKCk7CisgICAgfTsKKyAgICBpZihzdHIuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0ciA9IGRl
ZmF1bHROZXdNZXNzYWdlKCk7CisgICAgfTsKKyAgICB0ZXh0RWRpdF9uZXctPnNldFRleHQoc3Ry
KTsKKyAgICAKKyAgICBzdHIgPSB0LnRlbXBsYXRlUmVwbHkoKTsKKyAgICBpZihzdHIuaXNFbXB0
eSgpKSB7CisgICAgICAgIHN0ciA9IEdsb2JhbFNldHRpbmdzOjpzZWxmKCktPnRlbXBsYXRlUmVw
bHkoKTsKKyAgICB9OworICAgIGlmKHN0ci5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3RyID0gZGVm
YXVsdFJlcGx5KCk7CisgICAgfTsKKyAgICB0ZXh0RWRpdF9yZXBseS0+c2V0VGV4dChzdHIpOwor
ICAgIAorICAgIHN0ciA9IHQudGVtcGxhdGVSZXBseUFsbCgpOworICAgIGlmKHN0ci5pc0VtcHR5
KCkpIHsKKyAgICAgICAgc3RyID0gR2xvYmFsU2V0dGluZ3M6OnNlbGYoKS0+dGVtcGxhdGVSZXBs
eUFsbCgpOworICAgIH07CisgICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAgICBzdHIgPSBk
ZWZhdWx0UmVwbHlBbGwoKTsKKyAgICB9OworICAgIHRleHRFZGl0X3JlcGx5X2FsbC0+c2V0VGV4
dChzdHIpOworICAgIAorICAgIHN0ciA9IHQudGVtcGxhdGVGb3J3YXJkKCk7CisgICAgaWYoc3Ry
LmlzRW1wdHkoKSkgeworICAgICAgICBzdHIgPSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT50ZW1w
bGF0ZUZvcndhcmQoKTsKKyAgICB9OworICAgIGlmKHN0ci5pc0VtcHR5KCkpIHsKKyAgICAgICAg
c3RyID0gZGVmYXVsdEZvcndhcmQoKTsKKyAgICB9OworICAgIHRleHRFZGl0X2ZvcndhcmQtPnNl
dFRleHQoc3RyKTsKKyAgICAKKyAgICBzdHIgPSB0LnF1b3RlU3RyaW5nKCk7CisgICAgaWYoc3Ry
LmlzRW1wdHkoKSkgeworICAgICAgICBzdHIgPSBHbG9iYWxTZXR0aW5nczo6c2VsZigpLT5xdW90
ZVN0cmluZygpOworICAgIH07CisgICAgaWYoc3RyLmlzRW1wdHkoKSkgeworICAgICAgICBzdHIg
PSBkZWZhdWx0UXVvdGVTdHJpbmcoKTsKKyAgICB9OworICAgIGxpbmVFZGl0X3F1b3RlLT5zZXRU
ZXh0KHN0cik7Cit9OworCit2b2lkIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OnNhdmVUb0ZvbGRl
cihRU3RyaW5nIGlkKSB7CisgICAgVGVtcGxhdGVzIHQoaWQpOworICAgIAorICAgIHQuc2V0VGVt
cGxhdGVOZXdNZXNzYWdlKHRleHRFZGl0X25ldy0+dGV4dCgpKTsKKyAgICB0LnNldFRlbXBsYXRl
UmVwbHkodGV4dEVkaXRfcmVwbHktPnRleHQoKSk7CisgICAgdC5zZXRUZW1wbGF0ZVJlcGx5QWxs
KHRleHRFZGl0X3JlcGx5X2FsbC0+dGV4dCgpKTsKKyAgICB0LnNldFRlbXBsYXRlRm9yd2FyZCh0
ZXh0RWRpdF9mb3J3YXJkLT50ZXh0KCkpOworICAgIHQuc2V0UXVvdGVTdHJpbmcobGluZUVkaXRf
cXVvdGUtPnRleHQoKSk7CisgICAgdC53cml0ZUNvbmZpZygpOworfTsKKwordm9pZCBUZW1wbGF0
ZXNDb25maWd1cmF0aW9uOjpidXR0b25faW5zZXJ0X2NsaWNrZWQoKSB7CisgICAgUTNQb3B1cE1l
bnUgcG9wdXAoYnV0dG9uX2luc2VydCk7CisgICAgCisgICAgUTNQb3B1cE1lbnUgcXVvdGVfcG9w
dXAoJnBvcHVwKTsKKyAgICBxdW90ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlF1b3RlZCBtZXNz
YWdlIiksIENRdW90ZSk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJNZXNzYWdl
IHRleHQgYXMgaXMiKSwgQ1RleHQpOworICAgIHF1b3RlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigi
TWVzc2FnZSBpZCIpLCBDT01zZ0lkKTsKKyAgICBxdW90ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4o
IkRhdGUiKSwgQ09EYXRlKTsKKyAgICBxdW90ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkRhdGUg
aW4gc2hvcnQgZm9ybWF0IiksIENPRGF0ZVNob3J0KTsKKyAgICBxdW90ZV9wb3B1cC5pbnNlcnRJ
dGVtKGkxOG4oIkRhdGUgaW4gQyBsb2NhbGUiKSwgQ09EYXRlRW4pOworICAgIHF1b3RlX3BvcHVw
Lmluc2VydEl0ZW0oaTE4bigiRGF5IG9mIHdlZWsiKSwgQ09Eb3cpOworICAgIHF1b3RlX3BvcHVw
Lmluc2VydEl0ZW0oaTE4bigiVGltZSIpLCBDT1RpbWUpOworICAgIHF1b3RlX3BvcHVwLmluc2Vy
dEl0ZW0oaTE4bigiVGltZSBpbiBsb25nIGZvcm1hdCIpLCBDT1RpbWVMb25nKTsKKyAgICBxdW90
ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlRpbWUgaW4gQyBsb2NhbGUiKSwgQ09UaW1lTG9uZ0Vu
KTsKKyAgICBxdW90ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlRvIGZpZWxkIGFkZHJlc3MiKSwg
Q09Ub0FkZHIpOworICAgIHF1b3RlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiVG8gZmllbGQgbmFt
ZSIpLCBDT1RvTmFtZSk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJUbyBmaWVs
ZCBmaXJzdCBuYW1lIiksIENPVG9GTmFtZSk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShp
MThuKCJUbyBmaWVsZCBsYXN0IG5hbWUiKSwgQ09Ub0xOYW1lKTsKKyAgICBxdW90ZV9wb3B1cC5p
bnNlcnRJdGVtKGkxOG4oIkZyb20gZmllbGQgYWRkcmVzcyIpLCBDT0Zyb21BZGRyKTsKKyAgICBx
dW90ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkZyb20gZmllbGQgbmFtZSIpLCBDT0Zyb21OYW1l
KTsKKyAgICBxdW90ZV9wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkZyb20gZmllbGQgZmlyc3QgbmFt
ZSIpLCBDT0Zyb21GTmFtZSk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJGcm9t
IGZpZWxkIGxhc3QgbmFtZSIpLCBDT0Zyb21MTmFtZSk7CisgICAgcXVvdGVfcG9wdXAuaW5zZXJ0
SXRlbShpMThuKCJTdWJqZWN0IiksIENPRnVsbFN1YmplY3QpOworICAgIHF1b3RlX3BvcHVwLmlu
c2VydEl0ZW0oaTE4bigiUXVvdGVkIGhlYWRlcnMiKSwgQ1FIZWFkZXJzKTsKKyAgICBxdW90ZV9w
b3B1cC5pbnNlcnRJdGVtKGkxOG4oIkhlYWRlcnMgYXMgaXMiKSwgQ0hlYWRlcnMpOworICAgIHF1
b3RlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiSGVhZGVyIGNvbnRlbnQiKSwgQ09IZWFkZXIpOwor
ICAgIHBvcHVwLmluc2VydEl0ZW0oaTE4bigiT3JpZ2luYWwgbWVzc2FnZSIpLCAmcXVvdGVfcG9w
dXApOworICAgIAorICAgIFEzUG9wdXBNZW51IG1zZ19wb3B1cCgmcG9wdXApOworICAgIG1zZ19w
b3B1cC5pbnNlcnRJdGVtKGkxOG4oIk1lc3NhZ2UgaWQiKSwgQ01zZ0lkKTsKKyAgICBtc2dfcG9w
dXAuaW5zZXJ0SXRlbShpMThuKCJEYXRlIiksIENEYXRlKTsKKyAgICBtc2dfcG9wdXAuaW5zZXJ0
SXRlbShpMThuKCJEYXRlIGluIHNob3J0IGZvcm1hdCIpLCBDRGF0ZVNob3J0KTsKKyAgICBtc2df
cG9wdXAuaW5zZXJ0SXRlbShpMThuKCJEYXRlIGluIEMgbG9jYWxlIiksIENEYXRlRW4pOworICAg
IG1zZ19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkRheSBvZiB3ZWVrIiksIENEb3cpOworICAgIG1z
Z19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlRpbWUiKSwgQ1RpbWUpOworICAgIG1zZ19wb3B1cC5p
bnNlcnRJdGVtKGkxOG4oIlRpbWUgaW4gbG9uZyBmb3JtYXQiKSwgQ1RpbWVMb25nKTsKKyAgICBt
c2dfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJUaW1lIGluIEMgbG9jYWxlIiksIENUaW1lTG9uZ0Vu
KTsKKyAgICBtc2dfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJUbyBmaWVsZCBhZGRyZXNzIiksIENU
b0FkZHIpOworICAgIG1zZ19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlRvIGZpZWxkIG5hbWUiKSwg
Q1RvTmFtZSk7CisgICAgbXNnX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiVG8gZmllbGQgZmlyc3Qg
bmFtZSIpLCBDVG9GTmFtZSk7CisgICAgbXNnX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiVG8gZmll
bGQgbGFzdCBuYW1lIiksIENUb0xOYW1lKTsKKyAgICBtc2dfcG9wdXAuaW5zZXJ0SXRlbShpMThu
KCJGcm9tIGZpZWxkIGFkZHJlc3MiKSwgQ0Zyb21BZGRyKTsKKyAgICBtc2dfcG9wdXAuaW5zZXJ0
SXRlbShpMThuKCJGcm9tIGZpZWxkIG5hbWUiKSwgQ0Zyb21OYW1lKTsKKyAgICBtc2dfcG9wdXAu
aW5zZXJ0SXRlbShpMThuKCJGcm9tIGZpZWxkIGZpcnN0IG5hbWUiKSwgQ0Zyb21GTmFtZSk7Cisg
ICAgbXNnX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiRnJvbSBmaWVsZCBsYXN0IG5hbWUiKSwgQ0Zy
b21MTmFtZSk7CisgICAgbXNnX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiU3ViamVjdCIpLCBDRnVs
bFN1YmplY3QpOworICAgIG1zZ19wb3B1cC5pbnNlcnRJdGVtKGkxOG4oIkhlYWRlciBjb250ZW50
IiksIENIZWFkZXIpOworICAgIHBvcHVwLmluc2VydEl0ZW0oaTE4bigiQ3VycmVudCBtZXNzYWdl
IiksICZtc2dfcG9wdXApOworICAgIAorICAgIFEzUG9wdXBNZW51IHBpcGVfcG9wdXAoJnBvcHVw
KTsKKyAgICBwaXBlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiSW5zZXJ0IHJlc3VsdCBvZiBjb21t
YW5kIiksIENTeXN0ZW0pOworICAgIHBpcGVfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJQaXBlIG9y
aWdpbmFsIG1lc3NhZ2UgYm9keSBhbmQgaW5zZXJ0IHJlc3VsdCBhcyBxdW90ZWQgdGV4dCIpLCBD
UXVvdGVQaXBlKTsKKyAgICBwaXBlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiUGlwZSBvcmlnaW5h
bCBtZXNzYWdlIGJvZHkgYW5kIGluc2VydCByZXN1bHQgYXMgaXMiKSwgQ1RleHRQaXBlKTsKKyAg
ICBwaXBlX3BvcHVwLmluc2VydEl0ZW0oaTE4bigiUGlwZSBvcmlnaW5hbCBtZXNzYWdlIHdpdGgg
aGVhZGVycyBhbmQgaW5zZXJ0IHJlc3VsdCBhcyBpcyIpLCBDTXNnUGlwZSk7CisgICAgcGlwZV9w
b3B1cC5pbnNlcnRJdGVtKGkxOG4oIlBpcGUgY3VycmVudCBtZXNzYWdlIGJvZHkgYW5kIGluc2Vy
dCByZXN1bHQgYXMgaXMiKSwgQ0JvZHlQaXBlKTsKKyAgICBwaXBlX3BvcHVwLmluc2VydEl0ZW0o
aTE4bigiUGlwZSBjdXJyZW50IG1lc3NhZ2UgYm9keSBhbmQgcmVwbGFjZSB3aXRoIHJlc3VsdCIp
LCBDQ2xlYXJQaXBlKTsKKyAgICBwb3B1cC5pbnNlcnRJdGVtKGkxOG4oIlByb2Nlc3Mgd2l0aCBl
eHRlcm5hbCBwcm9ncmFtcyIpLCAmcGlwZV9wb3B1cCk7CisgICAgCisgICAgUTNQb3B1cE1lbnUg
bWlzY19wb3B1cCgmcG9wdXApOworICAgIG1pc2NfcG9wdXAuaW5zZXJ0SXRlbShpMThuKCJTZXQg
Y3Vyc29yIHBvc2l0aW9uIiksIENDdXJzb3IpOworICAgIG1pc2NfcG9wdXAuaW5zZXJ0SXRlbShp
MThuKCJJbnNlcnQgZmlsZSBjb250ZW50IiksIENJbnNlcnQpOworICAgIG1pc2NfcG9wdXAuaW5z
ZXJ0SXRlbShpMThuKCJETkwiKSwgQ0RubCk7CisgICAgbWlzY19wb3B1cC5pbnNlcnRJdGVtKGkx
OG4oIlRlbXBsYXRlIGNvbW1lbnQiKSwgQ1JlbSk7CisgICAgbWlzY19wb3B1cC5pbnNlcnRJdGVt
KGkxOG4oIk5vIG9wZXJhdGlvbiIpLCBDTm9wKTsKKyAgICBtaXNjX3BvcHVwLmluc2VydEl0ZW0o
aTE4bigiQ2xlYXIgZ2VuZXJhdGVkIG1lc3NhZ2UiKSwgQ0NsZWFyKTsKKyAgICBtaXNjX3BvcHVw
Lmluc2VydEl0ZW0oaTE4bigiVHVybiBkZWJ1ZyBvbiIpLCBDRGVidWcpOworICAgIG1pc2NfcG9w
dXAuaW5zZXJ0SXRlbShpMThuKCJUdXJuIGRlYnVnIG9mZiIpLCBDRGVidWdPZmYpOworICAgIHBv
cHVwLmluc2VydEl0ZW0oaTE4bigiTWlzY2VsYW5lb3VzIiksICZtaXNjX3BvcHVwKTsKKyAgICAK
KyAgICBRU2l6ZSBwcyA9IHBvcHVwLnNpemVIaW50KCk7CisgICAgaW50IGluZGV4ID0gcG9wdXAu
ZXhlYyhidXR0b25faW5zZXJ0LT5tYXBUb0dsb2JhbChRUG9pbnQoMCwtKHBzLmhlaWdodCgpKSkp
KTsKKyAgICAKKyAgICAvLyBrRGVidWcoKSA8PCAiVGVtcGxhdGUgY29tbWFuZCBpbmRleDogIiA8
PCBpbmRleCA8PCBlbmRsOworICAgIAorICAgIGlmKGluZGV4ID4gMCkgeworICAgICAgICBzd2l0
Y2goaW5kZXgpIHsKKyAgICAgICAgICAgIGNhc2UgQ1F1b3RlOiBpbnNlcnRDb21tYW5kKCIlUVVP
VEUiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENUZXh0OiBpbnNlcnRDb21tYW5kKCIlVEVY
VCIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09Nc2dJZDogaW5zZXJ0Q29tbWFuZCgiJU9N
U0dJRCIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09EYXRlOiBpbnNlcnRDb21tYW5kKCIl
T0RBVEUiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPRGF0ZVNob3J0OiBpbnNlcnRDb21t
YW5kKCIlT0RBVEVTSE9SVCIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09EYXRlRW46IGlu
c2VydENvbW1hbmQoIiVPREFURUVOIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0Rvdzog
aW5zZXJ0Q29tbWFuZCgiJU9ET1ciKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPVGltZTog
aW5zZXJ0Q29tbWFuZCgiJU9USU1FIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT1RpbWVM
b25nOiBpbnNlcnRDb21tYW5kKCIlT1RJTUVMT05HIik7IGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBDT1RpbWVMb25nRW46IGluc2VydENvbW1hbmQoIiVPVElNRUxPTkdFTiIpOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQ09Ub0FkZHI6IGluc2VydENvbW1hbmQoIiVPVE9BRERSIik7IGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDT1RvTmFtZTogaW5zZXJ0Q29tbWFuZCgiJU9UT05BTUUiKTsg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIENPVG9GTmFtZTogaW5zZXJ0Q29tbWFuZCgiJU9UT0ZO
QU1FIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT1RvTE5hbWU6IGluc2VydENvbW1hbmQo
IiVPVE9MTkFNRSIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09Gcm9tQWRkcjogaW5zZXJ0
Q29tbWFuZCgiJU9GUk9NQUREUiIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09Gcm9tTmFt
ZTogaW5zZXJ0Q29tbWFuZCgiJU9GUk9NTkFNRSIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Q09Gcm9tRk5hbWU6IGluc2VydENvbW1hbmQoIiVPRlJPTUZOQU1FIik7IGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBDT0Zyb21MTmFtZTogaW5zZXJ0Q29tbWFuZCgiJU9GUk9NTE5BTUUiKTsgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIENPRnVsbFN1YmplY3Q6IGluc2VydENvbW1hbmQoIiVPRlVM
TFNVQkpFQ1QiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENRSGVhZGVyczogaW5zZXJ0Q29t
bWFuZCgiJVFIRUFERVJTIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDSGVhZGVyczogaW5z
ZXJ0Q29tbWFuZCgiJUhFQURFUlMiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPSGVhZGVy
OiBpbnNlcnRDb21tYW5kKCIlT0hFQURFUj1cIlwiIiwgLTEpOyBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQ01zZ0lkOiBpbnNlcnRDb21tYW5kKCIlTVNHSUQiKTsgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIENEYXRlOiBpbnNlcnRDb21tYW5kKCIlREFURSIpOyBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQ0RhdGVTaG9ydDogaW5zZXJ0Q29tbWFuZCgiJURBVEVTSE9SVCIpOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQ0RhdGVFbjogaW5zZXJ0Q29tbWFuZCgiJURBVEVFTiIpOyBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgQ0RvdzogaW5zZXJ0Q29tbWFuZCgiJURPVyIpOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQ1RpbWU6IGluc2VydENvbW1hbmQoIiVUSU1FIik7IGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBDVGltZUxvbmc6IGluc2VydENvbW1hbmQoIiVUSU1FTE9ORyIpOyBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQ1RpbWVMb25nRW46IGluc2VydENvbW1hbmQoIiVUSU1FTE9O
R0VOIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDVG9BZGRyOiBpbnNlcnRDb21tYW5kKCIl
VE9BRERSIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDVG9OYW1lOiBpbnNlcnRDb21tYW5k
KCIlVE9OQU1FIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDVG9GTmFtZTogaW5zZXJ0Q29t
bWFuZCgiJVRPRk5BTUUiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENUb0xOYW1lOiBpbnNl
cnRDb21tYW5kKCIlVE9MTkFNRSIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0Zyb21BZGRy
OiBpbnNlcnRDb21tYW5kKCIlRlJPTUFERFIiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENG
cm9tTmFtZTogaW5zZXJ0Q29tbWFuZCgiJUZST01OQU1FIik7IGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBDRnJvbUZOYW1lOiBpbnNlcnRDb21tYW5kKCIlRlJPTUZOQU1FIik7IGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBDRnJvbUxOYW1lOiBpbnNlcnRDb21tYW5kKCIlRlJPTUxOQU1FIik7IGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBDRnVsbFN1YmplY3Q6IGluc2VydENvbW1hbmQoIiVGVUxM
U1VCSkVDVCIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0hlYWRlcjogaW5zZXJ0Q29tbWFu
ZCgiJUhFQURFUj1cIlwiIiwgLTEpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1N5c3RlbTog
aW5zZXJ0Q29tbWFuZCgiJVNZU1RFTT1cIlwiIiwgLTEpOyBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQ1F1b3RlUGlwZTogaW5zZXJ0Q29tbWFuZCgiJVFVT1RFUElQRT1cIlwiIiwgLTEpOyBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQ1RleHRQaXBlOiBpbnNlcnRDb21tYW5kKCIlVEVYVFBJUEU9
XCJcIiIsIC0xKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENNc2dQaXBlOiBpbnNlcnRDb21t
YW5kKCIlTVNHUElQRT1cIlwiIiwgLTEpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0JvZHlQ
aXBlOiBpbnNlcnRDb21tYW5kKCIlQk9EWVBJUEU9XCJcIiIsIC0xKTsgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIENDbGVhclBpcGU6IGluc2VydENvbW1hbmQoIiVDTEVBUlBJUEU9XCJcIiIsIC0x
KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENDdXJzb3I6IGluc2VydENvbW1hbmQoIiVDVVJT
T1IiKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENJbnNlcnQ6IGluc2VydENvbW1hbmQoIiVJ
TlNFUlQ9XCJcIiIsIC0xKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENEbmw6IGluc2VydENv
bW1hbmQoIiUtIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDUmVtOiBpbnNlcnRDb21tYW5k
KCIlUkVNPVwiXCIiLCAtMSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDTm9wOiBpbnNlcnRD
b21tYW5kKCIlTk9QIik7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDQ2xlYXI6IGluc2VydENv
bW1hbmQoIiVDTEVBUiIpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0RlYnVnOiBpbnNlcnRD
b21tYW5kKCIlREVCVUciKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENEZWJ1Z09mZjogaW5z
ZXJ0Q29tbWFuZCgiJURFQlVHT0ZGIik7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogCisg
ICAgICAgICAgICAgICAga0RlYnVnKCkgPDwgIlVua25vd24gdGVtcGxhdGUgY29tbWFuZCBpbmRl
eDogIiA8PCBpbmRleCA8PCBlbmRsOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
OworICAgIH07Cit9OworCit2b2lkIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246Omluc2VydENvbW1h
bmQoUVN0cmluZyBjbWQsIGludCBhZGp1c3RDdXJzb3IpIHsKKyAgICBRM1RleHRFZGl0KiBlZGl0
OworICAgIAorICAgIGlmKHRvb2xCb3gxLT5jdXJyZW50SXRlbSgpID09IHBhZ2VfbmV3KSB7Cisg
ICAgICAgIGVkaXQgPSB0ZXh0RWRpdF9uZXc7CisgICAgfSBlbHNlIGlmKHRvb2xCb3gxLT5jdXJy
ZW50SXRlbSgpID09IHBhZ2VfcmVwbHkpIHsKKyAgICAgICAgZWRpdCA9IHRleHRFZGl0X3JlcGx5
OworICAgIH0gZWxzZSBpZih0b29sQm94MS0+Y3VycmVudEl0ZW0oKSA9PSBwYWdlX3JlcGx5X2Fs
bCkgeworICAgICAgICBlZGl0ID0gdGV4dEVkaXRfcmVwbHlfYWxsOworICAgIH0gZWxzZSBpZih0
b29sQm94MS0+Y3VycmVudEl0ZW0oKSA9PSBwYWdlX2ZvcndhcmQpIHsKKyAgICAgICAgZWRpdCA9
IHRleHRFZGl0X2ZvcndhcmQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAga0RlYnVnKCkgPDwgIlVu
a25vd24gY3VycmVudCBwYWdlIGluIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb24hIiA8PCBlbmRsOwor
ICAgICAgICByZXR1cm47CisgICAgfTsKKyAgICAKKyAgICAvLyBrRGVidWcoKSA8PCAiSW5zZXJ0
IGNvbW1hbmQ6ICIgPDwgY21kIDw8IGVuZGw7CisgICAgCisgICAgaW50IHBhcmEsIGluZGV4Owor
ICAgIGVkaXQtPmdldEN1cnNvclBvc2l0aW9uKCZwYXJhLCAmaW5kZXgpOworICAgIGVkaXQtPmlu
c2VydEF0KGNtZCwgcGFyYSwgaW5kZXgpOworICAgIAorICAgIGluZGV4ICs9IGFkanVzdEN1cnNv
cjsKKyAgICAKKyAgICBlZGl0LT5zZXRDdXJzb3JQb3NpdGlvbihwYXJhLCBpbmRleCArIGNtZC5s
ZW5ndGgoKSk7Cit9OworCitRU3RyaW5nIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OmRlZmF1bHRO
ZXdNZXNzYWdlKCkgeworICAgIHJldHVybiBpMThuKAorICAgICAgICAiJVJFTT1cIkRlZmF1bHQg
bmV3IG1lc3NhZ2UgdGVtcGxhdGVcIiUtXG4iCisgICAgICAgICIlQkxBTksiCisgICAgICAgICk7
Cit9OworCitRU3RyaW5nIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OmRlZmF1bHRSZXBseSgpIHsK
KyAgICByZXR1cm4gaTE4bigKKyAgICAgICAgIiVSRU09XCJEZWZhdWx0IHJlcGx5IHRlbXBsYXRl
XCIlLVxuIgorICAgICAgICAiSGVsbG8sICVPRlJPTUZOQU1FIVxuIgorICAgICAgICAiXG4iCisg
ICAgICAgICJPbiAlT0RBVEVFTiAlT1RJTUVMT05HRU4geW91IHdyb3RlOlxuIgorICAgICAgICAi
JVFVT1RFXG4iCisgICAgICAgICIlQ1VSU09SXG4iCisgICAgICAgICk7Cit9OworCitRU3RyaW5n
IFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OmRlZmF1bHRSZXBseUFsbCgpIHsKKyAgICByZXR1cm4g
aTE4bigKKyAgICAgICAgIiVSRU09XCJEZWZhdWx0IHJlcGx5IGFsbCB0ZW1wbGF0ZVwiJS1cbiIK
KyAgICAgICAgIkhlbGxvIVxuIgorICAgICAgICAiXG4iCisgICAgICAgICJPbiAlT0RBVEVFTiAl
T1RJTUVMT05HRU4gJU9GUk9NTkFNRSB3cm90ZTpcbiIKKyAgICAgICAgIiVRVU9URVxuIgorICAg
ICAgICAiJUNVUlNPUlxuIgorICAgICAgICApOworfTsKKworUVN0cmluZyBUZW1wbGF0ZXNDb25m
aWd1cmF0aW9uOjpkZWZhdWx0Rm9yd2FyZCgpIHsKKyAgICByZXR1cm4gaTE4bigKKyAgICAgICAg
IiVSRU09XCJEZWZhdWx0IGZvcndhcmQgdGVtcGxhdGVcIiUtXG4iCisgICAgICAgICJUaGlzIGlz
IGEgZm9yd2FyZGVkIG1lc3NhZ2U6XG4iCisgICAgICAgICI9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT1cbiIKKyAgICAgICAgIiVURVhUXG4iCisgICAgICAgICI9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisgICAgICAgICk7Cit9Owor
CitRU3RyaW5nIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246OmRlZmF1bHRRdW90ZVN0cmluZygpIHsK
KyAgICByZXR1cm4gIj4gIjsKK307CisKKyNpbmNsdWRlICJ0ZW1wbGF0ZXNjb25maWd1cmF0aW9u
aW1wbC5tb2MiCkluZGV4OiBrbWFpbC90ZW1wbGF0ZXNjb25maWd1cmF0aW9uLnVpCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGttYWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb24udWkJKHJldmlzaW9uIDApCisrKyBr
bWFpbC90ZW1wbGF0ZXNjb25maWd1cmF0aW9uLnVpCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMz
NCBAQAorPCFET0NUWVBFIFVJPjxVSSB2ZXJzaW9uPSIzLjMiIHN0ZHNldGRlZj0iMSI+Cis8Y2xh
c3M+VGVtcGxhdGVzQ29uZmlndXJhdGlvblN0dWI8L2NsYXNzPgorPHdpZGdldCBjbGFzcz0iUVdp
ZGdldCI+CisgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICA8Y3N0cmluZz5UZW1w
bGF0ZXNDb25maWd1cmF0aW9uPC9jc3RyaW5nPgorICAgIDwvcHJvcGVydHk+CisgICAgPHByb3Bl
cnR5IG5hbWU9Imdlb21ldHJ5Ij4KKyAgICAgICAgPHJlY3Q+CisgICAgICAgICAgICA8eD4wPC94
PgorICAgICAgICAgICAgPHk+MDwveT4KKyAgICAgICAgICAgIDx3aWR0aD40NDk8L3dpZHRoPgor
ICAgICAgICAgICAgPGhlaWdodD40NTA8L2hlaWdodD4KKyAgICAgICAgPC9yZWN0PgorICAgIDwv
cHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9InNpemVQb2xpY3kiPgorICAgICAgICA8c2l6
ZXBvbGljeT4KKyAgICAgICAgICAgIDxoc2l6ZXR5cGU+NzwvaHNpemV0eXBlPgorICAgICAgICAg
ICAgPHZzaXpldHlwZT43PC92c2l6ZXR5cGU+CisgICAgICAgICAgICA8aG9yc3RyZXRjaD4zPC9o
b3JzdHJldGNoPgorICAgICAgICAgICAgPHZlcnN0cmV0Y2g+MzwvdmVyc3RyZXRjaD4KKyAgICAg
ICAgPC9zaXplcG9saWN5PgorICAgIDwvcHJvcGVydHk+CisgICAgPHByb3BlcnR5IG5hbWU9Im1p
bmltdW1TaXplIj4KKyAgICAgICAgPHNpemU+CisgICAgICAgICAgICA8d2lkdGg+NDMwPC93aWR0
aD4KKyAgICAgICAgICAgIDxoZWlnaHQ+NDUwPC9oZWlnaHQ+CisgICAgICAgIDwvc2l6ZT4KKyAg
ICA8L3Byb3BlcnR5PgorICAgIDxwcm9wZXJ0eSBuYW1lPSJjYXB0aW9uIj4KKyAgICAgICAgPHN0
cmluZz5Gb3JtMTwvc3RyaW5nPgorICAgIDwvcHJvcGVydHk+CisgICAgPHdpZGdldCBjbGFzcz0i
UUxheW91dFdpZGdldCI+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAg
ICAgIDxjc3RyaW5nPmxheW91dDM8L2NzdHJpbmc+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJnZW9tZXRyeSI+CisgICAgICAgICAgICA8cmVjdD4KKyAgICAg
ICAgICAgICAgICA8eD4xMDwveD4KKyAgICAgICAgICAgICAgICA8eT4xMDwveT4KKyAgICAgICAg
ICAgICAgICA8d2lkdGg+NDMwPC93aWR0aD4KKyAgICAgICAgICAgICAgICA8aGVpZ2h0PjQzMDwv
aGVpZ2h0PgorICAgICAgICAgICAgPC9yZWN0PgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAg
ICA8dmJveD4KKyAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAgICAg
ICAgICA8Y3N0cmluZz51bm5hbWVkPC9jc3RyaW5nPgorICAgICAgICAgICAgPC9wcm9wZXJ0eT4K
KyAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9IlFUb29sQm94Ij4KKyAgICAgICAgICAgICAgICA8
cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnRvb2xC
b3gxPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAg
ICAgPHByb3BlcnR5IG5hbWU9InNpemVQb2xpY3kiPgorICAgICAgICAgICAgICAgICAgICA8c2l6
ZXBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxoc2l6ZXR5cGU+NzwvaHNpemV0eXBl
PgorICAgICAgICAgICAgICAgICAgICAgICAgPHZzaXpldHlwZT43PC92c2l6ZXR5cGU+CisgICAg
ICAgICAgICAgICAgICAgICAgICA8aG9yc3RyZXRjaD4zPC9ob3JzdHJldGNoPgorICAgICAgICAg
ICAgICAgICAgICAgICAgPHZlcnN0cmV0Y2g+MzwvdmVyc3RyZXRjaD4KKyAgICAgICAgICAgICAg
ICAgICAgPC9zaXplcG9saWN5PgorICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAg
ICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im1pbmltdW1TaXplIj4KKyAgICAgICAgICAgICAgICAg
ICAgPHNpemU+CisgICAgICAgICAgICAgICAgICAgICAgICA8d2lkdGg+MDwvd2lkdGg+CisgICAg
ICAgICAgICAgICAgICAgICAgICA8aGVpZ2h0PjA8L2hlaWdodD4KKyAgICAgICAgICAgICAgICAg
ICAgPC9zaXplPgorICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAg
PHByb3BlcnR5IG5hbWU9ImZyYW1lU2hhcGUiPgorICAgICAgICAgICAgICAgICAgICA8ZW51bT5Q
YW5lbDwvZW51bT4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJmcmFtZVNoYWRvdyI+CisgICAgICAgICAgICAgICAgICAgIDxlbnVt
PlN1bmtlbjwvZW51bT4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJjdXJyZW50SW5kZXgiPgorICAgICAgICAgICAgICAgICAgICA8
bnVtYmVyPjI8L251bWJlcj4KKyAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAg
ICAgICAgIDx3aWRnZXQgY2xhc3M9IlFXaWRnZXQiPgorICAgICAgICAgICAgICAgICAgICA8cHJv
cGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5wYWdl
X25ldzwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAg
ICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJhY2tncm91bmRNb2RlIj4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIDxlbnVtPlBhbGV0dGVCYWNrZ3JvdW5kPC9lbnVtPgorICAgICAgICAgICAg
ICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9
ImxhYmVsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+TmV3IE1lc3NhZ2U8L3N0
cmluZz4KKyAgICAgICAgICAgICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICAgICAgICAg
ICAgIDxoYm94PgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUi
PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjc3RyaW5nPnVubmFtZWQ8L2NzdHJpbmc+
CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAg
ICAgICAgPHdpZGdldCBjbGFzcz0iUVRleHRFZGl0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxjc3RyaW5nPnRleHRFZGl0X25ldzwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNp
emVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHNpemV0eXBl
Pjc8L2hzaXpldHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2c2l6
ZXR5cGU+NzwvdnNpemV0eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PGhvcnN0cmV0Y2g+MzwvaG9yc3RyZXRjaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDx2ZXJzdHJldGNoPjM8L3ZlcnN0cmV0Y2g+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDwvc2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3By
b3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJtaW5p
bXVtU2l6ZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaXplPgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpZHRoPjA8L3dpZHRoPgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhlaWdodD4wPC9oZWlnaHQ+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDwvc2l6ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJmb250Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvbnQ+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmFtaWx5Pk1vbm9zcGFjZTwvZmFtaWx5Pgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvbnQ+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJv
cGVydHkgbmFtZT0icmVzaXplUG9saWN5Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGVudW0+TWFudWFsPC9lbnVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJv
cGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InZTY3Jv
bGxCYXJNb2RlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudW0+QXV0bzwv
ZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoU2Nyb2xsQmFyTW9kZSI+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPkF1dG88L2VudW0+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8cHJvcGVydHkgbmFtZT0idGV4dEZvcm1hdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxlbnVtPlBsYWluVGV4dDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ3b3JkV3JhcCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPk5vV3Jh
cDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhdXRvRm9ybWF0dGluZyI+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZXQ+QXV0b05vbmU8L3NldD4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAg
ICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgIDwvaGJveD4KKyAgICAgICAgICAgICAg
ICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJRV2lkZ2V0Ij4KKyAg
ICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgorICAgICAgICAgICAgICAg
ICAgICAgICAgPGNzdHJpbmc+cGFnZV9yZXBseTwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAg
ICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJhY2tn
cm91bmRNb2RlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPlBhbGV0dGVCYWNrZ3Jv
dW5kPC9lbnVtPgorICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAg
ICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxhYmVsIj4KKyAgICAgICAgICAgICAgICAgICAgICAg
IDxzdHJpbmc+UmVwbHkgdG8gU2VuZGVyPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgIDwv
YXR0cmlidXRlPgorICAgICAgICAgICAgICAgICAgICA8aGJveD4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8Y3N0cmluZz51bm5hbWVkPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9w
cm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9IlFUZXh0RWRp
dCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUiPgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz50ZXh0RWRpdF9yZXBseTwv
Y3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpemVwb2xpY3k+CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8aHNpemV0eXBlPjM8L2hzaXpldHlwZT4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDx2c2l6ZXR5cGU+MzwvdnNpemV0eXBlPgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhvcnN0cmV0Y2g+MDwvaG9yc3RyZXRjaD4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzdHJldGNoPjA8L3ZlcnN0
cmV0Y2g+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2l6ZXBvbGljeT4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPGZvbnQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmFt
aWx5Pk1vbm9zcGFjZTwvZmFtaWx5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
L2ZvbnQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dEZvcm1hdCI+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVtPlBsYWluVGV4dDwvZW51bT4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJ3b3JkV3JhcCI+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxlbnVtPk5vV3JhcDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJh
dXRvRm9ybWF0dGluZyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZXQ+QXV0
b05vbmU8L3NldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAg
ICAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgIDwvaGJv
eD4KKyAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICA8d2lkZ2V0IGNs
YXNzPSJRV2lkZ2V0Ij4KKyAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im5hbWUi
PgorICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+cGFnZV9yZXBseV9hbGw8L2NzdHJp
bmc+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJiYWNrZ3JvdW5kTW9kZSI+CisgICAgICAgICAgICAgICAgICAgICAg
ICA8ZW51bT5QYWxldHRlQmFja2dyb3VuZDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgPC9w
cm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsYWJlbCI+Cisg
ICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPlJlcGx5IHRvIEFsbDwvc3RyaW5nPgorICAg
ICAgICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgICAgICAgICAgICAgPGhib3g+
CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+dW5uYW1lZDwvY3N0cmluZz4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8d2lk
Z2V0IGNsYXNzPSJRVGV4dEVkaXQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJp
bmc+dGV4dEVkaXRfcmVwbHlfYWxsPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5h
bWU9InNpemVQb2xpY3kiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2l6ZXBv
bGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoc2l6ZXR5cGU+Mzwv
aHNpemV0eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZzaXpldHlw
ZT4zPC92c2l6ZXR5cGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aG9y
c3RyZXRjaD4wPC9ob3JzdHJldGNoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPHZlcnN0cmV0Y2g+MDwvdmVyc3RyZXRjaD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPC9zaXplcG9saWN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVy
dHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImZvbnQiPgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9udD4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDxmYW1pbHk+TW9ub3NwYWNlPC9mYW1pbHk+CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDwvZm9udD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ0ZXh0Rm9ybWF0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudW0+UGxh
aW5UZXh0PC9lbnVtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9IndvcmRXcmFwIj4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudW0+Tm9XcmFwPC9lbnVtPgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPHByb3BlcnR5IG5hbWU9ImF1dG9Gb3JtYXR0aW5nIj4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPHNldD5BdXRvTm9uZTwvc2V0PgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAg
ICAgICAgICAgICAgICAgICAgPC9oYm94PgorICAgICAgICAgICAgICAgIDwvd2lkZ2V0PgorICAg
ICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9IlFXaWRnZXQiPgorICAgICAgICAgICAgICAgICAg
ICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmlu
Zz5wYWdlX2ZvcndhcmQ8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+
CisgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJiYWNrZ3JvdW5kTW9kZSI+Cisg
ICAgICAgICAgICAgICAgICAgICAgICA8ZW51bT5QYWxldHRlQmFja2dyb3VuZDwvZW51bT4KKyAg
ICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPGF0dHJp
YnV0ZSBuYW1lPSJsYWJlbCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPkZvcndh
cmQgTWVzc2FnZTwvc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAg
ICAgICAgICAgICAgICAgICAgPGhib3g+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVy
dHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+dW5u
YW1lZDwvY3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAg
ICAgICAgICAgICAgICAgICAgICA8d2lkZ2V0IGNsYXNzPSJRVGV4dEVkaXQiPgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPGNzdHJpbmc+dGV4dEVkaXRfZm9yd2FyZDwvY3N0cmluZz4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPHNpemVwb2xpY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8aHNpemV0eXBlPjM8L2hzaXpldHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDx2c2l6ZXR5cGU+MzwvdnNpemV0eXBlPgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPGhvcnN0cmV0Y2g+MDwvaG9yc3RyZXRjaD4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzdHJldGNoPjA8L3ZlcnN0cmV0Y2g+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJmb250Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZv
bnQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmFtaWx5Pk1vbm9zcGFj
ZTwvZmFtaWx5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvbnQ+CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dEZvcm1hdCI+CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDxlbnVtPlBsYWluVGV4dDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJ3b3JkV3JhcCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnVt
Pk5vV3JhcDwvZW51bT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5Pgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhdXRvRm9ybWF0dGlu
ZyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZXQ+QXV0b05vbmU8L3NldD4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAg
ICAgICAgICAgPC93aWRnZXQ+CisgICAgICAgICAgICAgICAgICAgIDwvaGJveD4KKyAgICAgICAg
ICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgIDwvd2lkZ2V0PgorICAgICAgICAgICAgPHdp
ZGdldCBjbGFzcz0iUUxheW91dFdpZGdldCI+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5h
bWU9Im5hbWUiPgorICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5sYXlvdXQyPC9jc3RyaW5n
PgorICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgPGhib3g+Cisg
ICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIDxjc3RyaW5nPnVubmFtZWQ8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAg
IDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9IlFQdXNoQnV0
dG9uIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJuYW1lIj4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz5idXR0b25faW5zZXJ0PC9jc3RyaW5n
PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8c2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhz
aXpldHlwZT4xPC9oc2l6ZXR5cGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2
c2l6ZXR5cGU+MDwvdnNpemV0eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
aG9yc3RyZXRjaD4xPC9ob3JzdHJldGNoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8dmVyc3RyZXRjaD4wPC92ZXJzdHJldGNoPgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDwvc2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAg
ICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCI+CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPHN0cmluZz4mYW1wO0luc2VydCBjb21tYW5kLi4uPC9zdHJpbmc+Cisg
ICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAg
ICAgPHByb3BlcnR5IG5hbWU9ImFjY2VsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
c3RyaW5nPkFsdCtJPC9zdHJpbmc+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5
PgorICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgICAgICAgICAgICAgPHdp
ZGdldCBjbGFzcz0iUUxhYmVsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBu
YW1lPSJuYW1lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3N0cmluZz50ZXh0TGFi
ZWwxPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaXplUG9saWN5Ij4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8c2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPGhzaXpldHlwZT41PC9oc2l6ZXR5cGU+CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDx2c2l6ZXR5cGU+NTwvdnNpemV0eXBlPgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8aG9yc3RyZXRjaD4yPC9ob3JzdHJldGNoPgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8dmVyc3RyZXRjaD4wPC92ZXJzdHJldGNoPgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDwvc2l6ZXBvbGljeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJv
cGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCI+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZz4mYW1wO1F1b3RlIGluZGljYXRvcjo8
L3N0cmluZz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAg
ICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYWxpZ25tZW50Ij4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8c2V0PkFsaWduVkNlbnRlcnxBbGlnblJpZ2h0PC9zZXQ+CisgICAgICAg
ICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgPHBy
b3BlcnR5IG5hbWU9ImJ1ZGR5IiBzdGRzZXQ9IjAiPgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxjc3RyaW5nPmxpbmVFZGl0X3F1b3RlPC9jc3RyaW5nPgorICAgICAgICAgICAgICAgICAg
ICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPC93aWRnZXQ+CisgICAgICAg
ICAgICAgICAgICAgIDx3aWRnZXQgY2xhc3M9IlFMaW5lRWRpdCI+CisgICAgICAgICAgICAgICAg
ICAgICAgICA8cHJvcGVydHkgbmFtZT0ibmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGNzdHJpbmc+bGluZUVkaXRfcXVvdGU8L2NzdHJpbmc+CisgICAgICAgICAgICAgICAgICAg
ICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAg
ICAgICAgICA8L2hib3g+CisgICAgICAgICAgICA8L3dpZGdldD4KKyAgICAgICAgPC92Ym94Pgor
ICAgIDwvd2lkZ2V0PgorPC93aWRnZXQ+Cis8Y29ubmVjdGlvbnM+CisgICAgPGNvbm5lY3Rpb24+
CisgICAgICAgIDxzZW5kZXI+YnV0dG9uX2luc2VydDwvc2VuZGVyPgorICAgICAgICA8c2lnbmFs
PmNsaWNrZWQoKTwvc2lnbmFsPgorICAgICAgICA8cmVjZWl2ZXI+VGVtcGxhdGVzQ29uZmlndXJh
dGlvbjwvcmVjZWl2ZXI+CisgICAgICAgIDxzbG90PmJ1dHRvbl9pbnNlcnRfY2xpY2tlZCgpPC9z
bG90PgorICAgIDwvY29ubmVjdGlvbj4KKzwvY29ubmVjdGlvbnM+Cis8c2xvdHM+CisgICAgPHNs
b3Q+YnV0dG9uX2luc2VydF9jbGlja2VkKCk8L3Nsb3Q+Cis8L3Nsb3RzPgorPGxheW91dGRlZmF1
bHRzIHNwYWNpbmc9IjYiIG1hcmdpbj0iMTEiLz4KKzwvVUk+CkluZGV4OiBrbWFpbC9rbWZpbHRl
cmFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga21haWwva21maWx0ZXJhY3Rpb24uY3BwCShyZXZp
c2lvbiA1OTY3MjUpCisrKyBrbWFpbC9rbWZpbHRlcmFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJmb2xkZXJyZXF1ZXN0ZXIuaCIKIHVzaW5nIEtN
YWlsOjpGb2xkZXJSZXF1ZXN0ZXI7CiAjaW5jbHVkZSAia21tc2diYXNlLmgiCisjaW5jbHVkZSAi
dGVtcGxhdGVwYXJzZXIuaCIKICNpbmNsdWRlICJtZXNzYWdlcHJvcGVydHkuaCIKICNpbmNsdWRl
ICJhY3Rpb25zY2hlZHVsZXIuaCIKIHVzaW5nIEtNYWlsOjpNZXNzYWdlUHJvcGVydHk7CkBAIC0x
NDczLDE0ICsxNDc0LDE5IEBACiAKICAgbXNnLT5pbml0RnJvbU1lc3NhZ2UoIGFNc2cgKTsKIAot
ICBRU3RyaW5nIHN0ID0gUVN0cmluZzo6ZnJvbVV0ZjgoIGFNc2ctPmNyZWF0ZUZvcndhcmRCb2R5
KCkgKTsKKyAgLy8gUVN0cmluZyBzdCA9IFFTdHJpbmc6OmZyb21VdGY4KCBhTXNnLT5jcmVhdGVG
b3J3YXJkQm9keSgpICk7CisgIAorICBUZW1wbGF0ZVBhcnNlciBwYXJzZXIoIG1zZywgVGVtcGxh
dGVQYXJzZXI6OkZvcndhcmQsCisgICAgYU1zZy0+Ym9keSgpLCBmYWxzZSwgZmFsc2UsIGZhbHNl
LCBmYWxzZSk7CisgIHBhcnNlci5wcm9jZXNzKCBhTXNnICk7CisgIAogICBRQnl0ZUFycmF5CiAg
ICAgZW5jb2RpbmcgPSBLTU1zZ0Jhc2U6OmF1dG9EZXRlY3RDaGFyc2V0KCBhTXNnLT5jaGFyc2V0
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLTU1lc3Nh
Z2U6OnByZWZlcnJlZENoYXJzZXRzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbXNnLT5ib2R5KCkgKTsKICAgaWYoIGVuY29kaW5nLmlzRW1wdHkoKSApCiAgICAg
ZW5jb2RpbmcgPSAidXRmLTgiOwotICBRQnl0ZUFycmF5IHN0ciA9IEtNTXNnQmFzZTo6Y29kZWNG
b3JOYW1lKCBlbmNvZGluZyApLT5mcm9tVW5pY29kZSggc3QgKTsKKyAgUUJ5dGVBcnJheSBzdHIg
PSBLTU1zZ0Jhc2U6OmNvZGVjRm9yTmFtZSggZW5jb2RpbmcgKS0+ZnJvbVVuaWNvZGUoIG1zZy0+
Ym9keSgpICk7CiAKICAgbXNnLT5zZXRDaGFyc2V0KCBlbmNvZGluZyApOwogICBtc2ctPnNldFRv
KCBtUGFyYW1ldGVyICk7CkluZGV4OiBrbWFpbC9rbWNvbXBvc2V3aW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGttYWlsL2ttY29tcG9zZXdpbi5jcHAJKHJldmlzaW9uIDU5NjcyNSkKKysrIGttYWlsL2tt
Y29tcG9zZXdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0MjAsOCArNDQyMCwxMyBAQAogdm9p
ZCBLTUNvbXBvc2VXaW46OnNldFJlcGx5Rm9jdXMoIGJvb2wgaGFzTWVzc2FnZSApCiB7CiAgIG1F
ZGl0b3ItPnNldEZvY3VzKCk7Ci0gIGlmICggaGFzTWVzc2FnZSApCi0gICAgbUVkaXRvci0+c2V0
Q3Vyc29yUG9zaXRpb24oIDEsIDAgKTsKKyAgaWYgKCBoYXNNZXNzYWdlICkgeworICAgIGlmICgg
bU1zZy0+Z2V0Q3Vyc29yUG9zKCkgKSB7CisgICAgICBtRWRpdG9yLT5zZXRDdXJzb3JQb3NpdGlv
bkZyb21TdGFydCggKHVuc2lnbmVkIGludCkgbU1zZy0+Z2V0Q3Vyc29yUG9zKCkgKTsKKyAgICB9
IGVsc2UgeworICAgICAgbUVkaXRvci0+c2V0Q3Vyc29yUG9zaXRpb24oIDEsIDAgKTsKKyAgICB9
CisgIH0KIH0KIAogdm9pZCBLTUNvbXBvc2VXaW46OnNldEZvY3VzVG9TdWJqZWN0KCkKSW5kZXg6
IGttYWlsL2ttZm9sZGVyZGlhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC9rbWZvbGRlcmRpYS5j
cHAJKHJldmlzaW9uIDU5NjcyNSkKKysrIGttYWlsL2ttZm9sZGVyZGlhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGsz
bGlzdHZpZXcuaD4KICNpbmNsdWRlIDxrdmJveC5oPgorI2luY2x1ZGUgPGtwdXNoYnV0dG9uLmg+
CiAKICNpbmNsdWRlIDxRQ2hlY2tCb3g+CiAjaW5jbHVkZSA8UUxheW91dD4KQEAgLTc0LDcgKzc1
LDExIEBACiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8cTNidXR0b25ncm91cC5oPgog
I2luY2x1ZGUgPFFSYWRpb0J1dHRvbj4KKyNpbmNsdWRlIDxRVGV4dEVkaXQ+CiAKKyNpbmNsdWRl
ICJ0ZW1wbGF0ZXNjb25maWd1cmF0aW9uaW1wbC5oIgorI2luY2x1ZGUgInRlbXBsYXRlc2NvbmZp
Z3VyYXRpb25fa2ZnLmgiCisKICNpbmNsdWRlICJrbWZvbGRlcmRpYS5tb2MiCiAKIHVzaW5nIG5h
bWVzcGFjZSBLTWFpbDsKQEAgLTEyNiw2ICsxMzEsMTAgQEAKICAgYWRkUGFnZSggYm94LCBpMThu
KCJHZW5lcmFsIikgKTsKICAgdGFiID0gbmV3IEZvbGRlckRpYUdlbmVyYWxUYWIoIHRoaXMsIGFO
YW1lLCBib3ggKTsKICAgYWRkVGFiKCB0YWIgKTsKKyAgYm94ID0gbmV3IEtWQm94KCB0aGlzICk7
CisgIGFkZFBhZ2UgKCBib3gsIGkxOG4oIlRlbXBsYXRlcyIpICk7CisgIHRhYiA9IG5ldyBGb2xk
ZXJEaWFUZW1wbGF0ZXNUYWIoIHRoaXMsIGFOYW1lLCBib3ggKTsKKyAgYWRkVGFiKCB0YWIgKTsK
IAogICBLTUZvbGRlciogcmVmRm9sZGVyID0gbUZvbGRlciA/IG1Gb2xkZXIgOiBtUGFyZW50Rm9s
ZGVyOwogICBLTUZvbGRlclR5cGUgZm9sZGVyVHlwZSA9IHJlZkZvbGRlciA/IHJlZkZvbGRlci0+
Zm9sZGVyVHlwZSgpIDogS01Gb2xkZXJUeXBlVW5rbm93bjsKQEAgLTY3MywzICs2ODIsODYgQEAK
IHsKICAgICBtVW5yZWFkSWNvbkJ1dHRvbi0+c2V0SWNvbiggaWNvbiApOwogfQorCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KK0tNYWlsOjpGb2xkZXJEaWFUZW1wbGF0ZXNUYWI6OkZvbGRlckRpYVRl
bXBsYXRlc1RhYiggS01Gb2xkZXJEaWFsb2cqIGRsZywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBhTmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRV2lkZ2V0KiBwYXJlbnQs
IGNvbnN0IGNoYXIqIG5hbWUgKQorICA6IEZvbGRlckRpYVRhYiggcGFyZW50LCBuYW1lICksIG1E
bGcoIGRsZyApCit7CisKKyAgbUlzTG9jYWxTeXN0ZW1Gb2xkZXIgPSBtRGxnLT5mb2xkZXIoKS0+
aXNTeXN0ZW1Gb2xkZXIoKSAmJgorICAgICAgIG1EbGctPmZvbGRlcigpLT5mb2xkZXJUeXBlKCkg
IT0gS01Gb2xkZXJUeXBlSW1hcCAmJgorICAgICAgIG1EbGctPmZvbGRlcigpLT5mb2xkZXJUeXBl
KCkgIT0gS01Gb2xkZXJUeXBlQ2FjaGVkSW1hcDsKKworICBRVkJveExheW91dCAqdG9wTGF5b3V0
ID0gbmV3IFFWQm94TGF5b3V0KCB0aGlzLCAwLCBLRGlhbG9nOjpzcGFjaW5nSGludCgpICk7Cisg
IAorICBtQ3VzdG9tID0gbmV3IFFDaGVja0JveCggaTE4bigiJlVzZSBjdXN0b20gbWVzc2FnZSB0
ZW1wbGF0ZXMiKSwgdGhpcyk7CisgIHRvcExheW91dC0+YWRkV2lkZ2V0KCBtQ3VzdG9tICk7Cisg
IAorICBtV2lkZ2V0ID0gbmV3IFRlbXBsYXRlc0NvbmZpZ3VyYXRpb24oIHRoaXMgKTsKKyAgbVdp
ZGdldC0+c2V0RW5hYmxlZCggZmFsc2UgKTsKKyAgdG9wTGF5b3V0LT5hZGRXaWRnZXQoIG1XaWRn
ZXQgKTsKKyAgCisgIFFIQm94TGF5b3V0ICpidG5zID0gbmV3IFFIQm94TGF5b3V0KCB0b3BMYXlv
dXQsIEtEaWFsb2c6OnNwYWNpbmdIaW50KCkgKTsKKyAgbUNvcHlHbG9iYWwgPSBuZXcgS1B1c2hC
dXR0b24oIGkxOG4oIiZDb3B5IGdsb2JhbCB0ZW1wbGF0ZXMiKSwgdGhpcyk7CisgIG1Db3B5R2xv
YmFsLT5zZXRFbmFibGVkKCBmYWxzZSApOworICBidG5zLT5hZGRXaWRnZXQoIG1Db3B5R2xvYmFs
ICk7CisgIAorICB0b3BMYXlvdXQtPmFkZFN0cmV0Y2goIDIwMCApOyAvLyB3ZSBhcmUgbW9yZSBp
bXBvcnRhbnQgdGhhbiBnZW5lcmFsIHRhYgorCisgIGNvbm5lY3QoIG1DdXN0b20sIFNJR05BTCh0
b2dnbGVkKGJvb2wpKSwKKyAgICAgICAgbVdpZGdldCwgU0xPVChzZXRFbmFibGVkKGJvb2wpKSAp
OworICBjb25uZWN0KCBtQ3VzdG9tLCBTSUdOQUwodG9nZ2xlZChib29sKSksCisgICAgICAgIG1D
b3B5R2xvYmFsLCBTTE9UKHNldEVuYWJsZWQoYm9vbCkpICk7CisgIAorICBjb25uZWN0KCBtQ29w
eUdsb2JhbCwgU0lHTkFMKGNsaWNrZWQoKSksCisgICAgICAgIHRoaXMsIFNMT1Qoc2xvdENvcHlH
bG9iYWwoKSkgKTsKKworICBpbml0aWFsaXplV2l0aFZhbHVlc0Zyb21Gb2xkZXIoIG1EbGctPmZv
bGRlcigpICk7CisKKyAgY29ubmVjdCggbVdpZGdldCwgU0lHTkFMKCBjaGFuZ2VkKCkgKSwKKyAg
ICAgICAgICAgdGhpcywgU0xPVCggc2xvdEVtaXRDaGFuZ2VkKCB2b2lkICkgKSApOworfQorCit2
b2lkIEZvbGRlckRpYVRlbXBsYXRlc1RhYjo6bG9hZCgpCit7CisgIAorfQorCit2b2lkIEZvbGRl
ckRpYVRlbXBsYXRlc1RhYjo6aW5pdGlhbGl6ZVdpdGhWYWx1ZXNGcm9tRm9sZGVyKCBLTUZvbGRl
ciogZm9sZGVyICkgeworICBpZiAoICFmb2xkZXIgKQorICAgIHJldHVybjsKKworICBRU3RyaW5n
IGZpZCA9IGZvbGRlci0+aWRTdHJpbmcoKTsKKyAgCisgIFRlbXBsYXRlcyB0KGZpZCk7CisKKyAg
bUN1c3RvbS0+c2V0Q2hlY2tlZCh0LnVzZUN1c3RvbVRlbXBsYXRlcygpKTsKKyAgCisgIG1XaWRn
ZXQtPmxvYWRGcm9tRm9sZGVyKGZpZCk7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Jv
b2wgRm9sZGVyRGlhVGVtcGxhdGVzVGFiOjpzYXZlKCkKK3sKKyAgS01Gb2xkZXIqIGZvbGRlciA9
IG1EbGctPmZvbGRlcigpOworICAKKyAgUVN0cmluZyBmaWQgPSBmb2xkZXItPmlkU3RyaW5nKCk7
CisgIFRlbXBsYXRlcyB0KGZpZCk7CisgIAorICBrRGVidWcoKSA8PCAidXNlIGN1c3RvbSB0ZW1w
bGF0ZXMgZm9yIGZvbGRlciAiIDw8IGZpZCA8PCAiOiAiIDw8IG1DdXN0b20tPmlzQ2hlY2tlZCgp
IDw8IGVuZGw7CisgIHQuc2V0VXNlQ3VzdG9tVGVtcGxhdGVzKG1DdXN0b20tPmlzQ2hlY2tlZCgp
KTsKKyAgdC53cml0ZUNvbmZpZygpOworICAKKyAgbVdpZGdldC0+c2F2ZVRvRm9sZGVyKGZpZCk7
CisgIAorICByZXR1cm4gdHJ1ZTsKK30KKworCit2b2lkIEZvbGRlckRpYVRlbXBsYXRlc1RhYjo6
c2xvdEVtaXRDaGFuZ2VkKCkge307CisKK3ZvaWQgRm9sZGVyRGlhVGVtcGxhdGVzVGFiOjpzbG90
Q29weUdsb2JhbCgpIHsKKyAgbVdpZGdldC0+bG9hZEZyb21HbG9iYWwoKTsKK307CkluZGV4OiBr
bWFpbC9jb25maWd1cmVkaWFsb2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGttYWlsL2NvbmZpZ3VyZWRp
YWxvZy5jcHAJKHJldmlzaW9uIDU5NjcyNSkKKysrIGttYWlsL2NvbmZpZ3VyZWRpYWxvZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgImdsb2JhbHNldHRp
bmdzLmgiCiAjaW5jbHVkZSAicmVwbHlwaHJhc2VzLmgiCisjaW5jbHVkZSAidGVtcGxhdGVzY29u
ZmlndXJhdGlvbl9rZmcuaCIKIAogLy8gb3RoZXIgS01haWwgaGVhZGVyczoKICNpbmNsdWRlICJr
bWtlcm5lbC5oIgpAQCAtNDcsNiArNDgsNyBAQAogI2luY2x1ZGUgImtjdXJzb3JzYXZlci5oIgog
I2luY2x1ZGUgImFjY291bnRtYW5hZ2VyLmgiCiAjaW5jbHVkZSA8c21pbWVjb25maWd1cmF0aW9u
Lmg+CisjaW5jbHVkZSAidGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwuaCIKICNpbmNsdWRlICJm
b2xkZXJyZXF1ZXN0ZXIuaCIKIHVzaW5nIEtNYWlsOjpGb2xkZXJSZXF1ZXN0ZXI7CiAjaW5jbHVk
ZSAiYWNjb3VudGNvbWJvYm94LmgiCkBAIC0yNTA1LDEwICsyNTA3LDE2IEBACiAgIC8vCiAgIC8v
ICJQaHJhc2VzIiB0YWI6CiAgIC8vCi0gIG1QaHJhc2VzVGFiID0gbmV3IFBocmFzZXNUYWIoKTsK
LSAgYWRkVGFiKCBtUGhyYXNlc1RhYiwgaTE4bigiJlBocmFzZXMiKSApOworICAvLyBtUGhyYXNl
c1RhYiA9IG5ldyBQaHJhc2VzVGFiKCk7CisgIC8vIGFkZFRhYiggbVBocmFzZXNUYWIsIGkxOG4o
IiZQaHJhc2VzIikgKTsKIAogICAvLworICAvLyAiVGVtcGxhdGVzIiB0YWI6CisgIC8vCisgIG1U
ZW1wbGF0ZXNUYWIgPSBuZXcgVGVtcGxhdGVzVGFiKCk7CisgIGFkZFRhYiggbVRlbXBsYXRlc1Rh
YiwgaTE4bigiJlRlbXBsYXRlcyIpICk7CisgIAorICAvLwogICAvLyAiU3ViamVjdCIgdGFiOgog
ICAvLwogICBtU3ViamVjdFRhYiA9IG5ldyBTdWJqZWN0VGFiKCk7CkBAIC0yOTkzLDYgKzMwMDEs
MzEgQEAKICAgfQogfQogCitRU3RyaW5nIENvbXBvc2VyUGFnZTo6VGVtcGxhdGVzVGFiOjpoZWxw
QW5jaG9yKCkgY29uc3QgeworICByZXR1cm4gUVN0cmluZzo6ZnJvbUxhdGluMSgiY29uZmlndXJl
LWNvbXBvc2VyLXRlbXBsYXRlcyIpOworfQorCitDb21wb3NlclBhZ2VUZW1wbGF0ZXNUYWI6OkNv
bXBvc2VyUGFnZVRlbXBsYXRlc1RhYiggUVdpZGdldCAqIHBhcmVudCApCisgIDogQ29uZmlnTW9k
dWxlVGFiICggcGFyZW50ICkKK3sKKyAgUVZCb3hMYXlvdXQqIHZsYXkgPSBuZXcgUVZCb3hMYXlv
dXQoIHRoaXMsIDAsIDAgKTsKKworICBtV2lkZ2V0ID0gbmV3IFRlbXBsYXRlc0NvbmZpZ3VyYXRp
b24oIHRoaXMgKTsKKyAgdmxheS0+YWRkV2lkZ2V0KCBtV2lkZ2V0ICk7CisgIHZsYXktPmFkZFN0
cmV0Y2goMTAwKTsKKworICBjb25uZWN0KCBtV2lkZ2V0LCBTSUdOQUwoIGNoYW5nZWQoKSApLAor
ICAgICAgICAgICB0aGlzLCBTTE9UKCBzbG90RW1pdENoYW5nZWQoIHZvaWQgKSApICk7Cit9CisK
K3ZvaWQgQ29tcG9zZXJQYWdlOjpUZW1wbGF0ZXNUYWI6OmRvTG9hZEZyb21HbG9iYWxTZXR0aW5n
cygpIHsKKyAgICBtV2lkZ2V0LT5sb2FkRnJvbUdsb2JhbCgpOworfQorCit2b2lkIENvbXBvc2Vy
UGFnZTo6VGVtcGxhdGVzVGFiOjpzYXZlKCkgeworICAgIG1XaWRnZXQtPnNhdmVUb0dsb2JhbCgp
OworfQorCiBRU3RyaW5nIENvbXBvc2VyUGFnZTo6U3ViamVjdFRhYjo6aGVscEFuY2hvcigpIGNv
bnN0IHsKICAgcmV0dXJuIFFTdHJpbmc6OmZyb21MYXRpbjEoImNvbmZpZ3VyZS1jb21wb3Nlci1z
dWJqZWN0Iik7CiB9CkluZGV4OiBrbWFpbC9rbWVkaXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC9r
bWVkaXQuaAkocmV2aXNpb24gNTk2NzI1KQorKysga21haWwva21lZGl0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDYgKzc1LDkgQEAKICAgdm9pZCBkZWxldGVBdXRvU3BlbGxDaGVja2luZygpOwog
CiAgIHVuc2lnbmVkIGludCBsaW5lQnJlYWtDb2x1bW4oKSBjb25zdDsKKyAgCisgIC8qKiBzZXQg
Y3Vyc29yIHRvIGFic29sdXRlIHBvc2l0aW9uIHBvcyAqLworICB2b2lkIHNldEN1cnNvclBvc2l0
aW9uRnJvbVN0YXJ0KHVuc2lnbmVkIGludCBwb3MpOwogCiBzaWduYWxzOgogICB2b2lkIHNwZWxs
Y2hlY2tfZG9uZShpbnQgcmVzdWx0KTsKSW5kZXg6IGttYWlsL2ttZm9sZGVyZGlhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga21haWwva21mb2xkZXJkaWEuaAkocmV2aXNpb24gNTk2NzI1KQorKysga21haWwv
a21mb2xkZXJkaWEuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsOCBAQAogY2xhc3MgS01G
b2xkZXJEaWFsb2c7CiBjbGFzcyBLTUZvbGRlclRyZWU7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
Y2xhc3MgUVBvaW50ZXI7CitjbGFzcyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uOworY2xhc3MgS1B1
c2hCdXR0b247CiAKIG5hbWVzcGFjZSBLTWFpbCB7CiAgIGNsYXNzIEZvbGRlclJlcXVlc3RlcjsK
QEAgLTE1Myw2ICsxNTUsMzkgQEAKICAgYm9vbCBtSXNMb2NhbFN5c3RlbUZvbGRlcjsKIH07CiAK
Ky8qKgorICogIlRlbXBsYXRlcyIgdGFiIGluIHRoZSBmb2xkZXIgZGlhbG9nCisgKiBJbnRlcm5h
bCBjbGFzcywgb25seSB1c2VkIGJ5IEtNRm9sZGVyRGlhbG9nCisgKi8KK2NsYXNzIEZvbGRlckRp
YVRlbXBsYXRlc1RhYiA6IHB1YmxpYyBGb2xkZXJEaWFUYWIKK3sKKyAgUV9PQkpFQ1QKKworcHVi
bGljOgorICBGb2xkZXJEaWFUZW1wbGF0ZXNUYWIoIEtNRm9sZGVyRGlhbG9nKiBkbGcsCisgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIGFOYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICBRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0IGNoYXIqIG5hbWUgPSAwICk7CisKKyAgdmly
dHVhbCB2b2lkIGxvYWQoKTsKKyAgdmlydHVhbCBib29sIHNhdmUoKTsKKworcHVibGljIHNsb3Rz
OgorICB2b2lkIHNsb3RFbWl0Q2hhbmdlZCgpOyAvLyBkbyBub3RoaW5nIGZvciBub3cKKyAgCisg
IHZvaWQgc2xvdENvcHlHbG9iYWwoKTsKKworcHJpdmF0ZToKKyAgdm9pZCBpbml0aWFsaXplV2l0
aFZhbHVlc0Zyb21Gb2xkZXIoIEtNRm9sZGVyKiBmb2xkZXIgKTsKKworcHJpdmF0ZToKKyAgUUNo
ZWNrQm94KiBtQ3VzdG9tOworICBUZW1wbGF0ZXNDb25maWd1cmF0aW9uKiBtV2lkZ2V0OworICBL
UHVzaEJ1dHRvbiogbUNvcHlHbG9iYWw7CisKKyAgS01Gb2xkZXJEaWFsb2cqIG1EbGc7CisgIGJv
b2wgbUlzTG9jYWxTeXN0ZW1Gb2xkZXI7Cit9OworCiB9IC8vIGVuZCBvZiBuYW1lc3BhY2UgS01h
aWwKIAogLyoqCkluZGV4OiBrbWFpbC90ZW1wbGF0ZXNjb25maWd1cmF0aW9uaW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGttYWlsL3RlbXBsYXRlc2NvbmZpZ3VyYXRpb25pbXBsLmgJKHJldmlzaW9uIDAp
CisrKyBrbWFpbC90ZW1wbGF0ZXNjb25maWd1cmF0aW9uaW1wbC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDcxIEBACisvKiAgIC0qLSBtb2RlOiBDKys7IGMtZmlsZS1zdHlsZTogImdudSIgLSot
CisgKiAgIGttYWlsOiBLREUgbWFpbCBjbGllbnQKKyAqICAgVGhpcyBmaWxlOiBDb3B5cmlnaHQg
KEMpIDIwMDYgRG1pdHJ5IE1vcm96aG5pa292CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpZm5kZWYgVEVNUExBVEVTQ09ORklHVVJBVElPTklNUExf
SAorI2RlZmluZSBURU1QTEFURVNDT05GSUdVUkFUSU9OSU1QTF9ICisKKyNpbmNsdWRlICJ0ZW1w
bGF0ZXNjb25maWd1cmF0aW9uLmgiCisKK2NsYXNzIFRlbXBsYXRlc0NvbmZpZ3VyYXRpb246IHB1
YmxpYyBUZW1wbGF0ZXNDb25maWd1cmF0aW9uU3R1YiB7CisgICAgUV9PQkpFQ1QKKyAgICAKKyAg
ICBwdWJsaWM6CisgICAgCisJVGVtcGxhdGVzQ29uZmlndXJhdGlvbihRV2lkZ2V0ICpwYXJlbnQg
PSAwLCBjb25zdCBjaGFyICpuYW1lID0gMCk7CisJCisJdm9pZCBsb2FkRnJvbUdsb2JhbCgpOwor
CXZvaWQgc2F2ZVRvR2xvYmFsKCk7CisJdm9pZCBsb2FkRnJvbUZvbGRlcihRU3RyaW5nIGlkKTsK
Kwl2b2lkIHNhdmVUb0ZvbGRlcihRU3RyaW5nIGlkKTsKKwkKKwl2b2lkIGluc2VydENvbW1hbmQo
UVN0cmluZyBjbWQsIGludCBhZGp1c3RDdXJzb3IgPSAwKTsKKwkKKwlzdGF0aWMgUVN0cmluZyBk
ZWZhdWx0TmV3TWVzc2FnZSgpOworCXN0YXRpYyBRU3RyaW5nIGRlZmF1bHRSZXBseSgpOworCXN0
YXRpYyBRU3RyaW5nIGRlZmF1bHRSZXBseUFsbCgpOworCXN0YXRpYyBRU3RyaW5nIGRlZmF1bHRG
b3J3YXJkKCk7CisJc3RhdGljIFFTdHJpbmcgZGVmYXVsdFF1b3RlU3RyaW5nKCk7CisJCisgICAg
cHVibGljIHNsb3RzOgorICAgIAorCXZvaWQgYnV0dG9uX2luc2VydF9jbGlja2VkKCk7CisJCisJ
dm9pZCBzbG90VGV4dENoYW5nZWQoKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAKKyAgICAgICAg
ZW51bSB7Q0RubCA9IDEsIENSZW0sIENJbnNlcnQsIENTeXN0ZW0sIENRdW90ZVBpcGUsIENRdW90
ZSwgQ1FIZWFkZXJzLCBDSGVhZGVycywgCisgICAgICAgICAgICBDVGV4dFBpcGUsIENNc2dQaXBl
LCBDQm9keVBpcGUsIENDbGVhclBpcGUsIENUZXh0LCAKKyAgICAgICAgICAgIENUb0FkZHIsIENU
b05hbWUsIENGcm9tQWRkciwgQ0Zyb21OYW1lLCBDRnVsbFN1YmplY3QsIENNc2dJZCwgCisgICAg
ICAgICAgICBDT0hlYWRlciwgQ0hlYWRlciwgQ09Ub0FkZHIsIENPVG9OYW1lLCBDT0Zyb21BZGRy
LCBDT0Zyb21OYW1lLCBDT0Z1bGxTdWJqZWN0LCAKKyAgICAgICAgICAgIENPTXNnSWQsIENEYXRl
RW4sIENEYXRlU2hvcnQsIENEYXRlLCBDRG93LCBDVGltZUxvbmdFbiwgQ1RpbWVMb25nLCBDVGlt
ZSwgCisgICAgICAgICAgICBDT0RhdGVFbiwgQ09EYXRlU2hvcnQsIENPRGF0ZSwgQ09Eb3csIENP
VGltZUxvbmdFbiwgQ09UaW1lTG9uZywgQ09UaW1lLCAKKyAgICAgICAgICAgIENCbGFuaywgQ05v
cCwgQ0NsZWFyLCBDRGVidWcsIENEZWJ1Z09mZiwgQ1RvRk5hbWUsIENUb0xOYW1lLCBDRnJvbUZO
YW1lLCBDRnJvbUxOYW1lLCAKKyAgICAgICAgICAgIENPVG9GTmFtZSwgQ09Ub0xOYW1lLCBDT0Zy
b21GTmFtZSwgQ09Gcm9tTE5hbWUsIENDdXJzb3J9OworICAgIAorICAgIHNpZ25hbHM6CisgICAg
CisgICAgICAgIHZvaWQgY2hhbmdlZCgpOworICAgIAorfTsKKworI2VuZGlmCkluZGV4OiBrbWFp
bC9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrbWFpbC9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gNTk2NzI1KQorKysga21haWwvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTE4MSwxNCArMTgxLDE3IEBACiAgICBtYW5hZ2VzaWV2ZXNjcmlwdHNkaWFsb2cuY3BwIAogICAg
Y2hpYXNtdXNrZXlzZWxlY3Rvci5jcHAgCiAgICB1dGlsLmNwcAotICAga2VkaXRjbDEuY3BwIGtl
ZGl0Y2wyLmNwcCApCisgICBrZWRpdGNsMS5jcHAga2VkaXRjbDIuY3BwIAorICAgdGVtcGxhdGVw
YXJzZXIuY3BwIAorICAgdGVtcGxhdGVzY29uZmlndXJhdGlvbmltcGwuY3BwICkKIAoga2RlNF9h
dXRvbW9jKGttYWlscHJpdmF0ZSAke2ttYWlscHJpdmF0ZV9MSUJfU1JDU30pCiAKIGtkZTRfYWRk
X3VpM19maWxlcyhrbWFpbHByaXZhdGVfTElCX1NSQ1MgCiAgICBzaWduYXR1cmVjb25maWd1cmF0
aW9uZGlhbG9nLnVpIAogICAgZW5jcnlwdGlvbmNvbmZpZ3VyYXRpb25kaWFsb2cudWkgCi0gICBz
bWltZWNvbmZpZ3VyYXRpb24udWkgKQorICAgc21pbWVjb25maWd1cmF0aW9uLnVpIAorICAgdGVt
cGxhdGVzY29uZmlndXJhdGlvbi51aSApCiAKIGtkZTRfYWRkX3VpX2ZpbGVzKGttYWlscHJpdmF0
ZV9MSUJfU1JDUyBjb21wb3NlcmNyeXB0b2NvbmZpZ3VyYXRpb24udWkgd2FybmluZ2NvbmZpZ3Vy
YXRpb24udWkpCiAKQEAgLTIwMCw3ICsyMDMsNyBAQAogCiAja2RlNF9hZGRfZGNvcF9zdHVicyhr
bWFpbHByaXZhdGVfTElCX1NSQ1MgJHtDTUFLRV9TT1VSQ0VfRElSfS9rb3JnYW5pemVyL2tvcmdh
bml6ZXJpZmFjZS5oICkKIAota2RlNF9hZGRfa2NmZ19maWxlcyhrbWFpbHByaXZhdGUga21haWxw
cml2YXRlX0xJQl9TUkNTIGdsb2JhbHNldHRpbmdzX2Jhc2Uua2NmZ2MgcmVwbHlwaHJhc2VzLmtj
ZmdjIGN1c3RvbW1pbWVoZWFkZXIua2NmZ2MgKQora2RlNF9hZGRfa2NmZ19maWxlcyhrbWFpbHBy
aXZhdGUga21haWxwcml2YXRlX0xJQl9TUkNTIGdsb2JhbHNldHRpbmdzX2Jhc2Uua2NmZ2MgcmVw
bHlwaHJhc2VzLmtjZmdjIGN1c3RvbW1pbWVoZWFkZXIua2NmZ2MgdGVtcGxhdGVzY29uZmlndXJh
dGlvbl9rZmcua2NmZ2MgKQogCiBrZGU0X2FkZF9saWJyYXJ5KGttYWlscHJpdmF0ZSBTSEFSRUQg
JHtrbWFpbHByaXZhdGVfTElCX1NSQ1N9KQogCkBAIC0zMDMsNyArMzA2LDcgQEAKICMjIyMjIyMj
IyMjIGluc3RhbGwgZmlsZXMgIyMjIyMjIyMjIyMjIyMjCiAKIGluc3RhbGwoIEZJTEVTIEtNYWls
LmRlc2t0b3Aga21haWxfdmlldy5kZXNrdG9wICBERVNUSU5BVElPTiAke1hER19BUFBTX0RJUn0p
Ci1pbnN0YWxsKCBGSUxFUyBrbWFpbC5rY2ZnIHJlcGx5cGhyYXNlcy5rY2ZnIGN1c3RvbW1pbWVo
ZWFkZXIua2NmZyAgREVTVElOQVRJT04gJHtLQ0ZHX0lOU1RBTExfRElSfSkKK2luc3RhbGwoIEZJ
TEVTIGttYWlsLmtjZmcgcmVwbHlwaHJhc2VzLmtjZmcgY3VzdG9tbWltZWhlYWRlci5rY2ZnIHRl
bXBsYXRlc2NvbmZpZ3VyYXRpb25fa2ZnLmtjZmcgREVTVElOQVRJT04gJHtLQ0ZHX0lOU1RBTExf
RElSfSkKIGluc3RhbGwoIEZJTEVTIGttYWlsLmFudGlzcGFtcmMga21haWwuYW50aXZpcnVzcmMg
IERFU1RJTkFUSU9OICR7Q09ORklHX0lOU1RBTExfRElSfSkKIGluc3RhbGwoIEZJTEVTIHRpcHMg
IERFU1RJTkFUSU9OICR7REFUQV9JTlNUQUxMX0RJUn0va21haWwpCiBpbnN0YWxsKCBGSUxFUyBr
bWFpbF9jb25maWdfbWlzYy5kZXNrdG9wIGttYWlsX2NvbmZpZ19hcHBlYXJhbmNlLmRlc2t0b3Ag
ICAgIGttYWlsX2NvbmZpZ19pZGVudGl0eS5kZXNrdG9wIGttYWlsX2NvbmZpZ19hY2NvdW50cy5k
ZXNrdG9wIGttYWlsX2NvbmZpZ19jb21wb3Nlci5kZXNrdG9wICAgICBrbWFpbF9jb25maWdfc2Vj
dXJpdHkuZGVza3RvcCAgREVTVElOQVRJT04gJHtTRVJWSUNFU19JTlNUQUxMX0RJUn0pCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>