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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>13029</bug_id>
          
          <creation_ts>2007-03-09 15:17:20 -0800</creation_ts>
          <short_desc>Permit NPAPI plug-ins to see HTTP response headers</short_desc>
          <delta_ts>2007-04-16 20:11:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Plug-ins</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Deneb Meketa">dmeketa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>19724</commentid>
    <comment_count>0</comment_count>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-03-09 15:17:20 -0800</bug_when>
    <thetext>For several years now, we on the Flash Player team have wanted to be able to see HTTP response headers after making a network request through the browser.  This need is becoming ever more urgent as more of our features depend on this ability.  For the time being, we are still an NPAPI plugin, so we can&apos;t see the NSHTTPURLResponse object underlying a response.  On the &quot;plugin-futures&quot; mailing list, which owns the evolution of the NPAPI (and of which I know at least Maciej is a member), we agreed on a mechanism to support this: a new &quot;headers&quot; member of the NPStream struct.  Opera has already implemented this, and I have submitted a patch to Mozilla at https://bugzilla.mozilla.org/show_bug.cgi?id=299054 .  For Safari, we have filed rdar://problem/4994849 .  I am entering this bug so that I can attach a WebKit patch that achieves the same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19729</commentid>
    <comment_count>1</comment_count>
      <attachid>13569</attachid>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-03-09 16:24:34 -0800</bug_when>
    <thetext>Created attachment 13569
Proposed solution</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19692</commentid>
    <comment_count>2</comment_count>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-03-09 17:38:33 -0800</bug_when>
    <thetext>Please review existing patch, but note I&apos;m working on adding a test as well, using the test plugin. Will include this in next version of patch, as well as any suggested changes. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19613</commentid>
    <comment_count>3</comment_count>
      <attachid>13569</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-10 12:31:00 -0800</bug_when>
    <thetext>Comment on attachment 13569
Proposed solution

Looks great.

I&apos;m a little concerned that the headers string is in random (dictionary key) order. I&apos;d prefer some sort of sorted order. That could be done using keysSortedByValueUsingSelector: and then objectEnumerator instead of just keyEnumerator.

It seems a shame that we have to compose this string every time even though it&apos;s only used for certain headers.

I think it would be better if the headers were in the form of NSData rather than NSString.

I think we want NSUTF8StringEncoding rather than NSASCIIStringEncoding.

Is it really safe to claim to have features like XPConnect scripting (which we almost certainly won&apos;t ever implement), form values, and popups enabled state? How can the plug-in detect the fact that we don&apos;t implement those?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19269</commentid>
    <comment_count>4</comment_count>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-03-12 19:41:46 -0700</bug_when>
    <thetext>(In reply to comment #3)

Thanks Darin.  I&apos;m revising the patch to address these comments and add a test case, but I&apos;ll respond here now in advance of having the next version ready.

&gt; I&apos;m a little concerned that the headers string is in random (dictionary key)
&gt; order. I&apos;d prefer some sort of sorted order. That could be done using
&gt; keysSortedByValueUsingSelector: and then objectEnumerator instead of just
&gt; keyEnumerator.

Fair enough, the order isn&apos;t supposed to matter, but stable ordering is a good thing.  If we had access to the raw HTTP stream, we could send things through verbatim, but since we must choose an ordering, a stable one seems like a good idea.  I&apos;m going for sorting on header names rather than header values, using allKeys and sortedArrayUsingSelector:@selector(caseInsensitiveCompare:).

&gt; It seems a shame that we have to compose this string every time even though
&gt; it&apos;s only used for certain headers.

Agreed, but I don&apos;t know how to solve this problem, given that we don&apos;t have access to the raw HTTP stream.  We could define a more complex interface via the NPAPI (get status line, enumerate all headers, get specific header), but simple seems good for cross-vendor standards, and plugin-futures has already approved this API, and Opera has already implemented it.  Since the string only needs to be built once per URL transfer, it doesn&apos;t seem likely to have a major performance impact, but if someone can point to a performance regression, I&apos;ll certainly see what I can do.

&gt; I think it would be better if the headers were in the form of NSData rather
&gt; than NSString.

I&apos;m still learning here, so I&apos;m happy to make this change if someone can give me a more detailed reason why.  As far as I can tell, though, this choice of NSData vs. NSString is only used in one place (the interface between startStreamWithResponse: and startStreamResponseURL:etc), the difference in container classes is minor, the headers are in this case in fact ASCII text, and the string classes permit handy manipulation through things like appendFormat:.  NSString seemed natural to me in these circumstances.  Again, tell me why I&apos;m being thick, and I&apos;ll change it...

&gt; I think we want NSUTF8StringEncoding rather than NSASCIIStringEncoding.

You&apos;re probably right.  I&apos;ve made this change, and added the following comment:

// HACK: pass the headers through as UTF-8.
// This is not the intended behavior; we&apos;re supposed to pass original bytes verbatim.
// But we don&apos;t have the original bytes, we have NSStrings built by the URL loading system.
// It hopefully shouldn&apos;t matter, since RFC2616/RFC822 require ASCII-only headers,
// but surely someone out there is using non-ASCII characters, and hopefully UTF-8 is adequate here.
// It seems better than NSASCIIStringEncoding, which will lose information if non-ASCII is used.

&gt; Is it really safe to claim to have features like XPConnect scripting (which we
&gt; almost certainly won&apos;t ever implement), form values, and popups enabled state?
&gt; How can the plug-in detect the fact that we don&apos;t implement those?

A tricky topic, since the NPAPI versioning system wasn&apos;t designed with optional features in mind.  But I&apos;ve reassured myself that all the version numbers we&apos;re hopping over are handled safely:

12 (actual) or 13 (documented): XPConnect.  WebKit was already 14 before I came along, to promise NPRuntime, and the implicit promise of XPConnect doesn&apos;t seem to have done any harm.  I think the reason is that XPConnect starts out with either the plugin or the browser querying the other for a root XPConnect object, using NPN_GetValue or NPP_GetValue, and if NULL is returned, the attempt is aborted.  NULL is the value that comes back for the &quot;I don&apos;t understand that variable&quot; situation.  Anyone not checking for NULL when calling NPN_GetValue or NPP_GetValue is asking for trouble.

15: Plugin form values.  This actually doesn&apos;t seem to promise anything on the browser&apos;s part, only on the plugin&apos;s part.  The plugin supports an additional variable in NPP_GetValue that indicates the plugin&apos;s (text-only) value for a form submission.  And, as above, a plugin is free to return NULL here.

16: Popups enabled state.  This just promises the existence of NPN_PushPopupsEnabledState and NPN_PopPopupsEnabledState.  My patch includes stub implementations of these that can safely be called, but don&apos;t do anything.  If anyone wants to implement these for real, enter a separate bug and ask on plugin-futures for a detailed spec of what they do.  The basic idea is that they allow a plugin to inform the browser &quot;I&apos;m handling a user input event, so don&apos;t disable popups right now&quot;, which is useful because the browser doesn&apos;t know about input events to plugins on some systems, e.g. Windows.  On the Mac, however, I think all events go through the browser, so it&apos;s probably a non-issue except in WebKit ports.

17: That&apos;s this feature, which would end up implemented as promised.

New patch soon, hopefully tomorrow.  Thanks again to anyone who&apos;s reading.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19104</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-13 11:54:16 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; If we had access to the raw HTTP stream, we could send things through verbatim,

I&apos;d like to address this eventually by requesting a new feature in the NSURLResponse API. Would you be willing to file a bug about that at &lt;http://bugreport.apple.com&gt;? In the short term I assume this won&apos;t happen but in the longer term it would be good.

&gt; I&apos;m going for sorting on header names rather than header values, using
&gt; allKeys and sortedArrayUsingSelector:@selector(caseInsensitiveCompare:).

Right. Even though that&apos;s not what I said, it *is* what I meant.
 
&gt; &gt; I think it would be better if the headers were in the form of NSData rather
&gt; &gt; than NSString.
&gt; 
&gt; I&apos;m still learning here, so I&apos;m happy to make this change if someone can give
&gt; me a more detailed reason why.  As far as I can tell, though, this choice of
&gt; NSData vs. NSString is only used in one place (the interface between
&gt; startStreamWithResponse: and startStreamResponseURL:etc), the difference in
&gt; container classes is minor, the headers are in this case in fact ASCII text,
&gt; and the string classes permit handy manipulation through things like
&gt; appendFormat:.  NSString seemed natural to me in these circumstances.  Again,
&gt; tell me why I&apos;m being thick, and I&apos;ll change it...

The only convincing argument in favor of NSString is the appeal appendFormat:. I think it&apos;s wrong, but not terribly so, to convert to and from a UTF-16 string here. Although NSString looks abstract, really it&apos;s effectively UTF-16. I think it&apos;s relatively easy to append to an NSMutableData with appendBytes:length: and I slightly prefer that approach.

&gt; You&apos;re probably right.  I&apos;ve made this change, and added the following comment:

Good comment.

&gt; 15: Plugin form values.  This actually doesn&apos;t seem to promise anything on the
&gt; browser&apos;s part, only on the plugin&apos;s part.  The plugin supports an additional
&gt; variable in NPP_GetValue that indicates the plugin&apos;s (text-only) value for a
&gt; form submission.  And, as above, a plugin is free to return NULL here.

Wow, we should really implement that. It would be *so* easy. Would you be willing to file another bug in bugs.webkit.org about this feature?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19088</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-13 11:57:28 -0700</bug_when>
    <thetext>One other thing I forgot! We should make the test plug-in in DumpRenderTree use this so we can make a regression test for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19075</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-13 11:59:33 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Please review existing patch, but note I&apos;m working on adding a test as well,
&gt; using the test plugin.

Oh, oops. I missed this. Great news!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19068</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-13 12:01:44 -0700</bug_when>
    <thetext>I think the comments &quot;not implemented in WebKit&quot; in the npapi.h header are a bit misleading. For one thing, these features are &quot;not implemented *yet* in WebKit&quot;. For another, this really should be a shared copy of a common header, not a WebKit-specific one.

I can&apos;t decide what I want here, but I figured I&apos;d at least share my thoughts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18934</commentid>
    <comment_count>9</comment_count>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-03-13 16:27:25 -0700</bug_when>
    <thetext>(In reply to comment #5)

&gt; I&apos;d like to address this eventually by requesting a new feature in the
&gt; NSURLResponse API. Would you be willing to file a bug about that at
&gt; &lt;http://bugreport.apple.com&gt;?

Sure, if you think it would be effective - but I&apos;m surprised to hear you suggest this, since it seems like the request might carry more weight coming from inside Apple.  Maybe it&apos;s just the opposite?  Let me know.

&gt; I think it&apos;s wrong, but not terribly so, to convert to and from a UTF-16 string
&gt; here. Although NSString looks abstract, really it&apos;s effectively UTF-16.

But I don&apos;t see how there&apos;d be any conversion taking place.  If I look at the objects that come out of the NSDictionary returned by allHeaders, they are all NSCFString, both keys and values.  It seems that the URL Loading System has already converted everything to UTF-16.

Still, I will go ahead and change to NSData, because it reinforces the way we actually would prefer it to work in the future: just send a sequence of bytes.

&gt; &gt; 15: Plugin form values.
&gt; Wow, we should really implement that. It would be *so* easy. Would you be
&gt; willing to file another bug in bugs.webkit.org about this feature?

Done: bug 13061.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18826</commentid>
    <comment_count>10</comment_count>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-03-13 16:33:21 -0700</bug_when>
    <thetext>(In reply to comment #8)

&gt; I think the comments &quot;not implemented in WebKit&quot; in the npapi.h header are a
&gt; bit misleading. For one thing, these features are &quot;not implemented *yet* in
&gt; WebKit&quot;. For another, this really should be a shared copy of a common header,
&gt; not a WebKit-specific one.
&gt; 
&gt; I can&apos;t decide what I want here, but I figured I&apos;d at least share my thoughts.

Funny, I actually started by writing &quot;not yet implemented in WebKit&quot;.  But then I changed my mind and decided to just imitate what was already written elsewhere in many places in npapi.h.  After all, who am I to decide what will never be implemented and what is expected to be implemented eventually?  This needs feedback from many other people than me, and I&apos;d prefer to land this with the current generic comments and then let others tweak them to suit their more informed ideas of what&apos;s to come.

When you say a shared copy of a common header, I&apos;m not sure I understand precisely what that means, but I did find the location of npapi.h in JavaScriptCore to be somewhat odd.  However, that&apos;s definitely where it seems to be, and there are no other apparent copies in the WebKit code.  If you feel it should be moved, you&apos;ll need to either accomplish that independently of these changes, or give me some very specific advice on where to move the file to and why.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18841</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-13 18:31:02 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; I&apos;d like to address this eventually by requesting a new feature in the
&gt; &gt; NSURLResponse API. Would you be willing to file a bug about that at
&gt; &gt; &lt;http://bugreport.apple.com&gt;?
&gt; 
&gt; Sure, if you think it would be effective - but I&apos;m surprised to hear you
&gt; suggest this, since it seems like the request might carry more weight coming
&gt; from inside Apple.  Maybe it&apos;s just the opposite?  Let me know.

It will carry a lot of weight if you report the bug and then I push it inside the company. Can&apos;t really say which way will carry the most weight, but the context of a request from a developer at Adobe won&apos;t hurt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18846</commentid>
    <comment_count>12</comment_count>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-03-13 19:05:56 -0700</bug_when>
    <thetext>(In reply to comment #11)

&gt; It will carry a lot of weight if you report the bug and then I push it inside
&gt; the company.

Okay, it&apos;s a deal, I&apos;ll enter a Radar bug.  But, if it&apos;s OK with you, I think I&apos;ll wait until this patch is landed.  I think that would have two advantages: (1) once the patch is landed, I can easily refer to the new code as an example of where the missing API would have been handy; (2) by waiting to file the bug, I avoid any confusion at Apple about priorities, increasing my odds of getting this patch in without holding it up for the potentially more difficult job of adding a new Cocoa API.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18854</commentid>
    <comment_count>13</comment_count>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-03-13 20:44:32 -0700</bug_when>
    <thetext>Through plugin-futures, I have been informed that version 17, which I had been using, has already been taken, for a feature called NPRuntime object enumeration.  I have entered bug 13064 to track that as an enhancement request.  When I submit my next patch (ah, how these things can take longer than one expects), I will be declaring version 18.

This is actually a little hairier than the other version skips I discuss in comment #4.  Version 17 added both NPN_Enumerate and NPClass::enumerate.  I really don&apos;t want the HTTP header work to get hung up waiting for NPRuntime enumeration, and I don&apos;t have the time or expertise to code NPRuntime enumeration, so I think I&apos;ve found a simple workaround: declare version 18 in NPN_Version and NPNetscapeFuncs::version, but fill in NPNetscapeFuncs::enumerate as NULL, and declare version 1 (rather than 2) for NPClass::structVersion.  This will mean that plugins can only run into trouble if they blindly switch on NPN_Version, without checking that NPNetscapeFuncs::enumerate is non-NULL, or without checking that NPClass::structVersion is &gt;= 2.  In addition, I&apos;m not sure there are any plugins out there that could be using this yet; AFAIK it has not yet landed in any shipping browsers, so any plugins attempting to use this will hopefully see WebKit having this stub implementation before they release anything depending on a real implementation.

This is definitely less than ideal, but similar things have happened in many browsers due to the NPAPI&apos;s lousy flat versioning scheme.  On the bright side, bug 13064 is probably worth fixing anyway, and if it is, then that&apos;s one less lie that our NPN_Version will be telling.  (It is already telling several.)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18782</commentid>
    <comment_count>14</comment_count>
      <attachid>13640</attachid>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-03-14 20:34:44 -0700</bug_when>
    <thetext>Created attachment 13640
Proposed solution, take 2

Okay!  New patch, with Darin&apos;s suggested changes, plus a test case (plugin C code and JavaScript to confirm results).

I have stuck with NPAPI version 17, after a discussion on plugin-futures.  It seems no browsers have ever shipped declaring version 17, or including NPRuntime enumeration, so people seem to be okay with the idea of assigning version 17 to response headers, and changing enumeration to be version 18.  I also have a patch ready that deals with things the other way around, where enumeration is 17 and headers are 18, but things are simpler if we don&apos;t have to use that.  I&apos;ll assume that landing this patch will have to wait until a final decision is made on versions, but since the differences are tiny, I think this patch is ready for review and stands a chance of being the final version.

Many thanks to Darin and everyone else who&apos;s helped out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18755</commentid>
    <comment_count>15</comment_count>
      <attachid>13641</attachid>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-03-14 22:00:05 -0700</bug_when>
    <thetext>Created attachment 13641
Proposed solution, take 3

Sorry, I&apos;m an idiot.  Global variables in the test plugin code meant that it didn&apos;t work when instantiated multiple times.  Another patch version to fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18262</commentid>
    <comment_count>16</comment_count>
      <attachid>13641</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-03-19 02:38:55 -0700</bug_when>
    <thetext>Comment on attachment 13641
Proposed solution, take 3

Some of your new code in PluginObject.c uses if statements with the body on the same line as the if.  This goes against our coding style guidelines (&lt;http://webkit.org/coding/coding-style.html&gt;).  There are also a few instances of single-line if statements having braces around their bodies.  We omit them in this situation.

Rather than using cStringUsingEncoding: followed by appendBytes:length: it would be cleaner to use dataUsingEncoding:.  This would also acommodate nul bytes in the headers, though I suppose it&apos;s unlikely that this will happen.  You also seem to nul-terminate theHeaders twice -- once when creating the NSMutableData, and again when  converting it to a byte array.

Your test case looks good.  Some of the JavaScript doesn&apos;t match the style guidelines (braces on same line as  function declaration, one-line if statements with braces, etc.)

It&apos;d be good to have another pass over this patch before it goes in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18141</commentid>
    <comment_count>17</comment_count>
      <attachid>13710</attachid>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-03-19 17:13:51 -0700</bug_when>
    <thetext>Created attachment 13710
Proposed solution, take 4

New patch addressing bdash&apos;s comments - thanks for the guidance.

Updated everything to what I think is correct brace style.

Made suggested change from cStringUsingEncoding: to dataUsingEncoding:.  The double null termination was defensive coding, but I removed the redundant call and added a comment that the bottleneck lower down would do the job.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18160</commentid>
    <comment_count>18</comment_count>
      <attachid>13710</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-19 20:46:32 -0700</bug_when>
    <thetext>Comment on attachment 13710
Proposed solution, take 4

+        char statusStr[10];
+        sprintf(statusStr, &quot;%d&quot;, [httpResponse statusCode]);

To avoid getting the security &quot;cops&quot; on our backs, lets use snprintf here instead of plain old sprintf.

+    if (obj &amp;&amp; (browser-&gt;version &gt;= NPVERS_HAS_RESPONSE_HEADERS)) {
+        notifyStream(obj, stream-&gt;url, stream-&gt;headers);
+    }

No braces around a single-line if statement.

I&apos;m going to say r=me, but I&apos;d like to see a version with snprintf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18081</commentid>
    <comment_count>19</comment_count>
      <attachid>13728</attachid>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-03-20 16:46:03 -0700</bug_when>
    <thetext>Created attachment 13728
Proposed solution, take 5

Thanks, both comments addressed.  New patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18083</commentid>
    <comment_count>20</comment_count>
      <attachid>13728</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-03-20 17:03:48 -0700</bug_when>
    <thetext>Comment on attachment 13728
Proposed solution, take 5

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16775</commentid>
    <comment_count>21</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2007-03-28 10:31:38 -0700</bug_when>
    <thetext>Being version 17 requires that we implement NPN_enumerate too. I have a patch which does that so I&apos;ll land this after I&apos;ve landed the first patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16725</commentid>
    <comment_count>22</comment_count>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-03-28 11:29:06 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Being version 17 requires that we implement NPN_enumerate too.

Actually no!  After discussion on plugin-futures, we decided that NPN_enumerate would become version 18 and response headers would take over 17.  See comment #14.  It would still be great to implement NPN_enumerate, and see bug 13064 for that, but that&apos;s version 18.

Check out http://lxr.mozilla.org/seamonkey/source/modules/plugin/base/public/npapi.h - this is the latest in Mozilla, with:

#define NPVERS_HAS_RESPONSE_HEADERS       17
#define NPVERS_HAS_NPOBJECT_ENUM          18
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16191</commentid>
    <comment_count>23</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-31 03:30:21 -0700</bug_when>
    <thetext>I have tried to land this patch, but it didn&apos;t apply cleanly, and I couldn&apos;t resolve the conflicts manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15264</commentid>
    <comment_count>24</comment_count>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-04-09 18:45:49 -0700</bug_when>
    <thetext>Sorry, I was out last week. Man, the code velocity here is higher than I realized. I&apos;ll make a new patch soon, hopefully tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14964</commentid>
    <comment_count>25</comment_count>
      <attachid>14013</attachid>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-04-11 17:57:28 -0700</bug_when>
    <thetext>Created attachment 14013
Proposed solution, take 6

New patch that should be compatible with latest code from svn trunk. Changes from last patch are:

- No longer need to add NPObject enumeration stubs, since this is now implemented

- Dovetail with code related to NPObject enumeration in test plugin

- Deal with WebBaseNetscapePluginStream.m being renamed WebBaseNetscapePluginStream.mm

- Fix a bug in my usage of snprintf in PluginObject.c

Otherwise it&apos;s the same code. Builds, loads pages, passes LayoutTests. Hopefully review is short &amp; sweet this time around, so this can get landed before it rots again :)

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14960</commentid>
    <comment_count>26</comment_count>
      <attachid>14013</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-04-11 18:02:32 -0700</bug_when>
    <thetext>Comment on attachment 14013
Proposed solution, take 6

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14961</commentid>
    <comment_count>27</comment_count>
      <attachid>14014</attachid>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-04-11 18:02:44 -0700</bug_when>
    <thetext>Created attachment 14014
Proposed solution, take 6, really

Uh... with the right attachment this time</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14959</commentid>
    <comment_count>28</comment_count>
      <attachid>14015</attachid>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-04-11 18:04:07 -0700</bug_when>
    <thetext>Created attachment 14015
Proposed solution, take 6, i swear

Dude, I suck, this is really the right attachment this time (ack, many copies of the codebase sitting around)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14872</commentid>
    <comment_count>29</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-04-12 21:51:28 -0700</bug_when>
    <thetext>Committed revision 20867.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14554</commentid>
    <comment_count>30</comment_count>
    <who name="Deneb Meketa">dmeketa</who>
    <bug_when>2007-04-16 20:11:55 -0700</bug_when>
    <thetext>Looks good in a build of the latest code.  Thanks everybody!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13569</attachid>
            <date>2007-03-09 16:24:34 -0800</date>
            <delta_ts>2007-03-12 19:45:10 -0700</delta_ts>
            <desc>Proposed solution</desc>
            <filename>NsPluginResponseHeaders.patch</filename>
            <type>text/plain</type>
            <size>12710</size>
            <attacher name="Deneb Meketa">dmeketa</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMDkzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDctMDMtMDkgIERlbmViIE1l
a2V0YSAgPGRtZWtldGFAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSB5
ZXQsIHRoaXMgZW50cnkgaXMgZm9yIGEgcmV2aWV3YWJsZSBwYXRjaC4KKworICAgICAgICBodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAyOQorICAgICAgICByZGFyOi8v
cHJvYmxlbS80OTk0ODQ5CisgICAgICAgIEJ1ZyAxMzAyOTogUGVybWl0IE5QQVBJIHBsdWctaW5z
IHRvIHNlZSBIVFRQIHJlc3BvbnNlIGhlYWRlcnMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9ucGFw
aS5oOgorICAgICAgICBBZGQgaGVhZGVycyBtZW1iZXIgdG8gTlBTdHJlYW0gc3RydWN0LiAgQWxz
byBpbmNyZWFzZSBOUF9WRVJTSU9OX01JTk9SIHRvIDE3LAorICAgICAgICBzbyB0aGF0IHBsdWct
aW5zIGNhbiBzYWZlbHkgZGV0ZWN0IHdoZXRoZXIgdG8gbG9vayBmb3IgdGhpcyBtZW1iZXIuICBB
bHNvIGFkZAorICAgICAgICBvdGhlciBtaXNzaW5nIGJpdHMgb2YgbnBhcGkuaCB0byBjYXRjaCB1
cCBmcm9tIDE0IHRvIDE3LiAgVGhpcyBpbmNsdWRlcworICAgICAgICBmZWF0dXJlcyB0aGF0IGFy
ZSBub3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0LCBidXQgdGhvc2UgYXJlIHNhZmVseSBzdHViYmVk
LgorCiAyMDA3LTAzLTA4ICBNb3JnYW5MICA8bW9yZ2FubC53ZWJraXRAeWFob28uY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
bnBhcGkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5oCShy
ZXZpc2lvbiAxOTk4NikKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBpLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2RlZmlu
ZSBOUF9WRVJTSU9OX01BSk9SIDAKLSNkZWZpbmUgTlBfVkVSU0lPTl9NSU5PUiAxNAorI2RlZmlu
ZSBOUF9WRVJTSU9OX01JTk9SIDE3CiAKIAogCkBAIC0xODcsNiArMTg3LDE2IEBAIHR5cGVkZWYg
c3RydWN0IF9OUFN0cmVhbQogICAgIHVpbnQzMiAgICAgICBlbmQ7CiAgICAgdWludDMyICAgICAg
IGxhc3Rtb2RpZmllZDsKICAgICB2b2lkKiAgICAgICAgbm90aWZ5RGF0YTsKKyAgICBjb25zdCBj
aGFyKiAgaGVhZGVyczsgICAgICAvKiBSZXNwb25zZSBoZWFkZXJzIGZyb20gaG9zdC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBFeGlzdHMgb25seSBmb3IgPj0gTlBWRVJTX0hB
U19SRVNQT05TRV9IRUFERVJTLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFVz
ZWQgZm9yIEhUVFAgb25seTsgTlVMTCBmb3Igbm9uLUhUVFAuCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICogQXZhaWxhYmxlIGZyb20gTlBQX05ld1N0cmVhbSBvbndhcmRzLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFBsdWdpbiBzaG91bGQgY29weSB0aGlzIGRh
dGEgYmVmb3JlIHN0b3JpbmcgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICog
SW5jbHVkZXMgSFRUUCBzdGF0dXMgbGluZSBhbmQgYWxsIGhlYWRlcnMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICogcHJlZmVyYWJseSB2ZXJiYXRpbSBhcyByZWNlaXZlZCBmcm9t
IHNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBoZWFkZXJzIGZvcm1h
dHRlZCBhcyBpbiBIVFRQICgiSGVhZGVyOiBWYWx1ZSIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqIGFuZCBuZXdsaW5lcyAoXG4sIE5PVCBcclxuKSBzZXBhcmF0aW5nIGxpbmVz
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRlcm1pbmF0ZWQgYnkgXG5cMCAo
Tk9UIFxuXG5cMCkuICovCiB9IE5QU3RyZWFtOwogCiAKQEAgLTMxNCw3ICszMjQsMTMgQEAgdHlw
ZWRlZiBlbnVtIHsKICAgICBOUFBWcGx1Z2luTmVlZHNYRW1iZWQgICAgICAgICA9IDE0LCAvKiBO
b3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCiAKICAgICAvKiBHZXQgdGhlIE5QT2JqZWN0IGZv
ciBzY3JpcHRpbmcgdGhlIHBsdWdpbi4gKi8KLSAgICBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2Jq
ZWN0ICA9IDE1CisgICAgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCAgPSAxNSwKKwkKKyAg
ICAvKiBHZXQgdGhlIHBsdWdpbiB2YWx1ZSAoYXMgXDAtdGVybWluYXRlZCBVVEYtOCBzdHJpbmcg
ZGF0YSkgZm9yCisgICAgICogZm9ybSBzdWJtaXNzaW9uIGlmIHRoZSBwbHVnaW4gaXMgcGFydCBv
ZiBhIGZvcm0uIFVzZQorICAgICAqIE5QTl9NZW1BbGxvYygpIHRvIGFsbG9jYXRlIG1lbW9yeSBm
b3IgdGhlIHN0cmluZyBkYXRhLgorICAgICAqLworICAgIE5QUFZmb3JtVmFsdWUgPSAxNiAgICAv
KiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCiB9IE5QUFZhcmlhYmxlOwogCiAvKgpAQCAt
NTg3LDYgKzYwMywxMSBAQCB0eXBlZGVmIHN0cnVjdCBOUF9Qb3J0CiAjZGVmaW5lIE5QVkVSU19X
SU4xNl9IQVNfTElWRUNPTk5FQ1QgICAgOQogI2RlZmluZSBOUFZFUlNfNjhLX0hBU19MSVZFQ09O
TkVDVCAgICAxMQogI2RlZmluZSBOUFZFUlNfSEFTX1dJTkRPV0xFU1MgICAgICAgMTEKKyNkZWZp
bmUgTlBWRVJTX0hBU19YUENPTk5FQ1RfU0NSSVBUSU5HICAgMTMgIC8qIE5vdCBpbXBsZW1lbnRl
ZCBpbiBXZWJLaXQgKi8KKyNkZWZpbmUgTlBWRVJTX0hBU19OUFJVTlRJTUVfU0NSSVBUSU5HICAg
MTQKKyNkZWZpbmUgTlBWRVJTX0hBU19GT1JNX1ZBTFVFUyAgICAgICAgICAgMTUgIC8qIE5vdCBp
bXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8KKyNkZWZpbmUgTlBWRVJTX0hBU19QT1BVUFNfRU5BQkxF
RF9TVEFURSAgMTYgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8KKyNkZWZpbmUgTlBW
RVJTX0hBU19SRVNQT05TRV9IRUFERVJTICAgICAgMTcKIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpA
QCAtNjc3LDYgKzY5OCw4IEBAIE5QRXJyb3IgICAgIE5QTl9TZXRWYWx1ZShOUFAgaW5zdGFuY2Us
IE4KIHZvaWQgICAgICAgIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5zdGFuY2UsIE5QUmVjdCAq
aW52YWxpZFJlY3QpOwogdm9pZCAgICAgICAgTlBOX0ludmFsaWRhdGVSZWdpb24oTlBQIGluc3Rh
bmNlLCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKTsKIHZvaWQgICAgICAgIE5QTl9Gb3JjZVJlZHJh
dyhOUFAgaW5zdGFuY2UpOwordm9pZCAgICAgICAgTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGUo
TlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCk7ICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gV2Vi
S2l0ICovCit2b2lkICAgICAgICBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5j
ZSk7ICAgICAgICAgICAgICAgICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8KIAog
I2lmZGVmIF9fY3BsdXNwbHVzCiB9ICAvKiBlbmQgZXh0ZXJuICJDIiAqLwpJbmRleDogV2ViS2l0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDA5
MykKKysrIFdlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAor
MjAwNy0wMy0wOSAgRGVuZWIgTWVrZXRhICA8ZG1la2V0YUBhZG9iZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIHlldCwgdGhpcyBlbnRyeSBpcyBmb3IgYSByZXZpZXdhYmxlIHBh
dGNoLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MDI5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzQ5OTQ4NDkKKyAgICAgICAgQnVnIDEzMDI5OiBQ
ZXJtaXQgTlBBUEkgcGx1Zy1pbnMgdG8gc2VlIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4KKworICAg
ICAgICAqIFBsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtLmg6IGRlY2xhcmF0aW9u
cy4KKyAgICAgICAgKiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbS5tOiBtYWlu
IGltcGxlbWVudGF0aW9uLgorICAgICAgICAoLVtXZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0g
ZGVhbGxvY10pOiBjbGVhbnVwLgorICAgICAgICAoLVtXZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJl
YW0gZmluYWxpemVdKTogY2xlYW51cC4KKyAgICAgICAgKC1bV2ViQmFzZU5ldHNjYXBlUGx1Z2lu
U3RyZWFtIHN0YXJ0U3RyZWFtUmVzcG9uc2VVUkw6ZXhwZWN0ZWRDb250ZW50TGVuZ3RoOmxhc3RN
b2RpZmllZERhdGU6TUlNRVR5cGU6aGVhZGVyczpdKToKKyAgICAgICAgUGFzcyBoZWFkZXJzIGFs
b25nLgorICAgICAgICAoLVtXZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0gc3RhcnRTdHJlYW1X
aXRoUmVzcG9uc2U6XSk6CisgICAgICAgIE1haW4gd29yayBpcyBoZXJlLiAgRXh0cmFjdCBoZWFk
ZXJzIGZyb20gTlNIVFRQVVJMUmVzcG9uc2Ugb2JqZWN0IGludG8gYSBzdHJpbmcuCisgICAgICAg
ICgtW1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbSBfZGVzdHJveVN0cmVhbV0pOiBjbGVhbnVw
LgorICAgICAgICAqIFBsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAg
ICAgKC1bV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBldmFsdWF0ZUphdmFTY3JpcHRQbHVnaW5S
ZXF1ZXN0Ol0pOgorICAgICAgICBDb25mb3JtIHRvIG5ldyBzdGFydFN0cmVhbSBwYXJhbXMuICBO
b3QgYXBwbGljYWJsZSBoZXJlLCBwYXNzIG5pbC4KKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNj
YXBlUGx1Z2luUGFja2FnZS5tOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2Ug
bG9hZF0pOgorICAgICAgICBGaWxsIGluIG5ldyBicm93c2VyRnVuY3MgbWVtYmVycyAod2l0aCBz
dHVicykgcmVxdWlyZWQgYnkgbmV3IG5wYXBpLmggdmVyc2lvbi4KKyAgICAgICAgKiBQbHVnaW5z
L25wYXBpLm06IE5QQVBJIHN0dWJzLgorICAgICAgICAoTlBOX1B1c2hQb3B1cHNFbmFibGVkU3Rh
dGUpOgorICAgICAgICAoTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZSk6CisgICAgICAgICogUGx1
Z2lucy9ucGZ1bmN0aW9ucy5oOiBOUEFQSSBkZWNsYXJhdGlvbnMuCisKIDIwMDctMDMtMDkgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEp1c3Rp
bi4KSW5kZXg6IFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbS5o
CShyZXZpc2lvbiAxOTk4NikKKysrIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdp
blN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAgICAgY2hhciAqcGF0
aDsKICAgICBCT09MIHNlbmROb3RpZmljYXRpb247CiAgICAgdm9pZCAqbm90aWZ5RGF0YTsKKyAg
ICBjaGFyICpoZWFkZXJzOwogICAgIFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgKnBsdWdpblZp
ZXc7CiAgICAgTlBSZWFzb24gcmVhc29uOwogICAgIEJPT0wgaXNUZXJtaW5hdGVkOwpAQCAtNzgs
NyArNzksOCBAQAogLSAodm9pZClzdGFydFN0cmVhbVJlc3BvbnNlVVJMOihOU1VSTCAqKXRoZVJl
c3BvbnNlVVJMCiAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGg6KGxvbmcgbG9uZylleHBl
Y3RlZENvbnRlbnRMZW5ndGgKICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkRGF0ZTooTlNEYXRl
ICopbGFzdE1vZGlmaWVkRGF0ZQotICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOihOU1N0
cmluZyAqKU1JTUVUeXBlOworICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOihOU1N0cmlu
ZyAqKU1JTUVUeXBlCisgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6KE5TU3RyaW5nICop
dGhlSGVhZGVyczsKIAogLy8gY2FuY2VsTG9hZFdpdGhFcnJvciBjYW5jZWxzIHRoZSBOU1VSTENv
bm5lY3Rpb24gYW5kIGluZm9ybXMgV2ViS2l0IG9mIHRoZSBsb2FkIGVycm9yLgogLy8gVGhpcyBt
ZXRob2QgaXMgb3ZlcnJpZGVuIGJ5IHN1YmNsYXNzZXMuCkluZGV4OiBXZWJLaXQvUGx1Z2lucy9X
ZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0ubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvUGx1Z2lu
cy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0ubQkocmV2aXNpb24gMTk5ODYpCisrKyBXZWJL
aXQvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0ubQkod29ya2luZyBjb3B5KQpA
QCAtMTI4LDYgKzEyOCw3IEBAIHN0YXRpYyBjaGFyICpDYXJib25QYXRoRnJvbVBPU0lYUGF0aChj
b24KICAgICAKICAgICBmcmVlKCh2b2lkICopc3RyZWFtLnVybCk7CiAgICAgZnJlZShwYXRoKTsK
KyAgICBmcmVlKGhlYWRlcnMpOwogCiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQpAQCAtMTQzLDYg
KzE0NCw3IEBAIHN0YXRpYyBjaGFyICpDYXJib25QYXRoRnJvbVBPU0lYUGF0aChjb24KIAogICAg
IGZyZWUoKHZvaWQgKilzdHJlYW0udXJsKTsKICAgICBmcmVlKHBhdGgpOworICAgIGZyZWUoaGVh
ZGVycyk7CiAKICAgICBbc3VwZXIgZmluYWxpemVdOwogfQpAQCAtMjExLDYgKzIxMyw3IEBAIHN0
YXRpYyBjaGFyICpDYXJib25QYXRoRnJvbVBPU0lYUGF0aChjb24KICAgICAgICAgIGV4cGVjdGVk
Q29udGVudExlbmd0aDoobG9uZyBsb25nKWV4cGVjdGVkQ29udGVudExlbmd0aAogICAgICAgICAg
ICAgICBsYXN0TW9kaWZpZWREYXRlOihOU0RhdGUgKilsYXN0TW9kaWZpZWREYXRlCiAgICAgICAg
ICAgICAgICAgICAgICAgTUlNRVR5cGU6KE5TU3RyaW5nICopdGhlTUlNRVR5cGUKKyAgICAgICAg
ICAgICAgICAgICAgICAgaGVhZGVyczooTlNTdHJpbmcgKil0aGVIZWFkZXJzCiB7CiAgICAgQVNT
RVJUKCFpc1Rlcm1pbmF0ZWQpOwogICAgIApAQCAtMjI0LDcgKzIyNywxMiBAQCBzdGF0aWMgY2hh
ciAqQ2FyYm9uUGF0aEZyb21QT1NJWFBhdGgoY29uCiAgICAgc3RyZWFtLmVuZCA9IGV4cGVjdGVk
Q29udGVudExlbmd0aCA+IDAgPyBleHBlY3RlZENvbnRlbnRMZW5ndGggOiAwOwogICAgIHN0cmVh
bS5sYXN0bW9kaWZpZWQgPSBbbGFzdE1vZGlmaWVkRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBd
OwogICAgIHN0cmVhbS5ub3RpZnlEYXRhID0gbm90aWZ5RGF0YTsKLSAgICAKKworICAgIGlmICh0
aGVIZWFkZXJzKSB7CisgICAgICAgIGhlYWRlcnMgPSBzdHJkdXAoW3RoZUhlYWRlcnMgY1N0cmlu
Z1VzaW5nRW5jb2Rpbmc6TlNBU0NJSVN0cmluZ0VuY29kaW5nXSk7CisgICAgICAgIHN0cmVhbS5o
ZWFkZXJzID0gaGVhZGVyczsKKyAgICB9CisKICAgICB0cmFuc2Zlck1vZGUgPSBOUF9OT1JNQUw7
CiAgICAgb2Zmc2V0ID0gMDsKICAgICByZWFzb24gPSBXRUJfUkVBU09OX05PTkU7CkBAIC0yNjQs
MTAgKzI3MiwzMyBAQCBzdGF0aWMgY2hhciAqQ2FyYm9uUGF0aEZyb21QT1NJWFBhdGgoY29uCiAK
IC0gKHZvaWQpc3RhcnRTdHJlYW1XaXRoUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyCiB7Cisg
ICAgTlNNdXRhYmxlU3RyaW5nICp0aGVIZWFkZXJzID0gbmlsOworICAgIGlmIChbciBpc0tpbmRP
ZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11dKSB7CisgICAgICAgIE5TSFRUUFVSTFJl
c3BvbnNlICpodHRwUmVzcG9uc2UgPSAoTlNIVFRQVVJMUmVzcG9uc2UgKilyOworICAgICAgICB0
aGVIZWFkZXJzID0gW1tOU011dGFibGVTdHJpbmcgYWxsb2NdIGluaXRdOworICAgICAgICAKKyAg
ICAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBnZXQgdGhlIHJh
dyBIVFRQIGhlYWRlciBibG9jay4KKyAgICAgICAgLy8gVGhpcyBpbmNsdWRlcyB0aGUgcmVhbCBz
dGF0dXMgdGV4dCwKKyAgICAgICAgLy8gYWxsIGhlYWRlcnMgaW4gdGhlaXIgb3JpZ2luYWwgb3Jk
ZXIgYW5kIGluY2x1ZGluZyBkdXBsaWNhdGVzLAorICAgICAgICAvLyBhbmQgYWxsIG9yaWdpbmFs
IGJ5dGVzIHZlcmJhdGltLCByYXRoZXIgdGhhbiBzZW50IHRocm91Z2ggVW5pY29kZSB0cmFuc2xh
dGlvbi4KKworICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmRGb3JtYXQ6QCJIVFRQICVkICVAXG4i
LCBbaHR0cFJlc3BvbnNlIHN0YXR1c0NvZGVdLCBAIk9LIl07CisKKyAgICAgICAgTlNEaWN0aW9u
YXJ5ICpoZWFkZXJEaWN0ID0gW2h0dHBSZXNwb25zZSBhbGxIZWFkZXJGaWVsZHNdOworICAgICAg
ICBOU0VudW1lcmF0b3IgKmkgPSBbaGVhZGVyRGljdCBrZXlFbnVtZXJhdG9yXTsKKyAgICAgICAg
TlNTdHJpbmcgKms7CisgICAgICAgIHdoaWxlICgoayA9IFtpIG5leHRPYmplY3RdKSAhPSBuaWwp
IHsKKyAgICAgICAgICAgIFt0aGVIZWFkZXJzIGFwcGVuZEZvcm1hdDpAIiVAOiAlQFxuIiwgaywg
W2hlYWRlckRpY3Qgb2JqZWN0Rm9yS2V5OmtdXTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIFtz
ZWxmIHN0YXJ0U3RyZWFtUmVzcG9uc2VVUkw6W3IgVVJMXQogICAgICAgICAgICBleHBlY3RlZENv
bnRlbnRMZW5ndGg6W3IgZXhwZWN0ZWRDb250ZW50TGVuZ3RoXQogICAgICAgICAgICAgICAgIGxh
c3RNb2RpZmllZERhdGU6V0tHZXROU1VSTFJlc3BvbnNlTGFzdE1vZGlmaWVkRGF0ZShyKQotICAg
ICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6W3IgTUlNRVR5cGVdXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE1JTUVUeXBlOltyIE1JTUVUeXBlXQorICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlYWRlcnM6dGhlSGVhZGVyc107CisKKyAgICBbdGhlSGVhZGVycyByZWxlYXNlXTsKIH0K
IAogLSAodm9pZClfZGVzdHJveVN0cmVhbQpAQCAtMzA0LDYgKzMzNSwxMCBAQCBzdGF0aWMgY2hh
ciAqQ2FyYm9uUGF0aEZyb21QT1NJWFBhdGgoY29uCiAgICAgICAgIFtwbHVnaW5WaWV3IGRpZENh
bGxQbHVnSW5GdW5jdGlvbl07CiAgICAgICAgIExPRyhQbHVnaW5zLCAiTlBQX0Rlc3Ryb3lTdHJl
YW0gcmVzcG9uc2VVUkw9JUAgZXJyb3I9JWQiLCByZXNwb25zZVVSTCwgbnBFcnIpOwogICAgICAg
ICAKKyAgICAgICAgZnJlZShoZWFkZXJzKTsKKyAgICAgICAgaGVhZGVycyA9IE5VTEw7CisgICAg
ICAgIHN0cmVhbS5oZWFkZXJzID0gTlVMTDsKKwogICAgICAgICBzdHJlYW0ubmRhdGEgPSBuaWw7
CiAgICAgfQogICAgIApJbmRleDogV2ViS2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2lu
Vmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVn
aW5WaWV3Lm1tCShyZXZpc2lvbiAxOTk4NikKKysrIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRz
Y2FwZVBsdWdpblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTE5MjEsNyArMTkyMSw4IEBAIHN0
YXRpYyBPU1N0YXR1cyBUU01FdmVudEhhbmRsZXIoRXZlbnRIYW4KICAgICAgICAgW3N0cmVhbSBz
dGFydFN0cmVhbVJlc3BvbnNlVVJMOlVSTAogICAgICAgICAgICAgICAgICBleHBlY3RlZENvbnRl
bnRMZW5ndGg6W0pTRGF0YSBsZW5ndGhdCiAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlm
aWVkRGF0ZTpuaWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAidGV4
dC9wbGFpbiJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJ0ZXh0
L3BsYWluIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6bmlsXTsKICAg
ICAgICAgW3N0cmVhbSByZWNlaXZlZERhdGE6SlNEYXRhXTsKICAgICAgICAgW3N0cmVhbSBmaW5p
c2hlZExvYWRpbmdXaXRoRGF0YTpKU0RhdGFdOwogICAgICAgICBbc3RyZWFtIHJlbGVhc2VdOwpJ
bmRleDogV2ViS2l0L1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0JKHJldmlzaW9u
IDE5OTg2KQorKysgV2ViS2l0L1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0JKHdv
cmtpbmcgY29weSkKQEAgLTQ4Nyw2ICs0ODcsOSBAQCBzdGF0aWMgVHJhbnNpdGlvblZlY3RvciB0
VmVjdG9yRm9yRnVuY3RpCiAgICAgICAgIGJyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0eSA9IF9OUE5f
U2V0UHJvcGVydHk7CiAgICAgICAgIGJyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IF9OUE5f
UmVtb3ZlUHJvcGVydHk7CiAgICAgICAgIGJyb3dzZXJGdW5jcy5zZXRleGNlcHRpb24gPSBfTlBO
X1NldEV4Y2VwdGlvbjsKKyAgICAgICAgCisgICAgICAgIGJyb3dzZXJGdW5jcy5wdXNocG9wdXBz
ZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7CisgICAgICAgIGJyb3dz
ZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRl
OwogCiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICBDRkFic29sdXRlVGltZSBpbml0aWFsaXpl
U3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKSW5kZXg6IFdlYktpdC9QbHVnaW5z
L25wYXBpLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdpbnMvbnBhcGkubQkocmV2aXNpb24g
MTk5ODYpCisrKyBXZWJLaXQvUGx1Z2lucy9ucGFwaS5tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgs
MyArMTU4LDEzIEBAIHZvaWQqIE5QTl9HZXRKYXZhUGVlcihOUFAgaW5zdGFuY2UpCiAgICAgTE9H
KFBsdWdpbnMsICJOUE5fR2V0SmF2YVBlZXIiKTsKICAgICByZXR1cm4gTlVMTDsKIH0KKwordm9p
ZCBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFibGVk
KQoreworICAgIExPRyhQbHVnaW5zLCAiTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGUiKTsKK30K
Kwordm9pZCBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSkKK3sKKyAgICBM
T0coUGx1Z2lucywgIk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUiKTsKK30KSW5kZXg6IFdlYktp
dC9QbHVnaW5zL25wZnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdpbnMvbnBm
dW5jdGlvbnMuaAkocmV2aXNpb24gMTk5ODYpCisrKyBXZWJLaXQvUGx1Z2lucy9ucGZ1bmN0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBAIHR5cGVkZWYgTlBFcnJvciAoKk5Q
Tl9HZXRVUkxQcm9jUHRyKShOUFAKIHR5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3N0VVJMUHJvY1B0
cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdpbmRvdywgdWlu
dDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSk7CiB0eXBlZGVmIHZvaWQqICgq
TlBOX0dldEphdmFFbnZQcm9jUHRyKSh2b2lkKTsKIHR5cGVkZWYgdm9pZCogKCpOUE5fR2V0SmF2
YVBlZXJQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiB2b2lkICgqTlBOX1B1c2hQb3B1
cHNFbmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFibGVkKTsKK3R5
cGVkZWYgdm9pZCAoKk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5zdGFu
Y2UpOwogCiB0eXBlZGVmIHZvaWQgKCpOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZVByb2NQdHIpIChO
UFZhcmlhbnQgKnZhcmlhbnQpOwogCkBAIC0xMTUsNiArMTE3LDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg
X05QTmV0c2NhcGVGdW5jcyB7CiAgICAgTlBOX0hhc01ldGhvZFByb2NQdHIgaGFzbWV0aG9kOwog
ICAgIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlUHJvY1B0ciByZWxlYXNldmFyaWFudHZhbHVlOwog
ICAgIE5QTl9TZXRFeGNlcHRpb25Qcm9jUHRyIHNldGV4Y2VwdGlvbjsKKyAgICAKKyAgICBOUE5f
UHVzaFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIgcHVzaHBvcHVwc2VuYWJsZWRzdGF0ZTsKKyAg
ICBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0ciBwb3Bwb3B1cHNlbmFibGVkc3RhdGU7
CiB9IE5QTmV0c2NhcGVGdW5jczsKIAogdHlwZWRlZiBzdHJ1Y3QgX05QUGx1Z2luRnVuY3Mgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13640</attachid>
            <date>2007-03-14 20:34:44 -0700</date>
            <delta_ts>2007-03-14 21:57:55 -0700</delta_ts>
            <desc>Proposed solution, take 2</desc>
            <filename>NsPluginResponseHeaders.patch</filename>
            <type>text/plain</type>
            <size>27265</size>
            <attacher name="Deneb Meketa">dmeketa</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMjAzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDctMDMtMTQgIERlbmViIE1l
a2V0YSAgPGRtZWtldGFAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MDI5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzQ5OTQ4NDkKKyAgICAgICAgQnVnIDEzMDI5OiBQ
ZXJtaXQgTlBBUEkgcGx1Zy1pbnMgdG8gc2VlIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4KKyAgICAg
ICAgVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZSBKYXZhU2NyaXB0Q29yZSwgYnV0IHRoYXQn
cyB3aGVyZSBucGFwaS5oIGlzLgorCisgICAgICAgICogYmluZGluZ3MvbnBhcGkuaDoKKyAgICAg
ICAgQWRkIGhlYWRlcnMgbWVtYmVyIHRvIE5QU3RyZWFtIHN0cnVjdC4gIEFsc28gaW5jcmVhc2Ug
TlBfVkVSU0lPTl9NSU5PUiB0byAxNywKKyAgICAgICAgc28gdGhhdCBwbHVnLWlucyBjYW4gc2Fm
ZWx5IGRldGVjdCB3aGV0aGVyIHRvIGxvb2sgZm9yIHRoaXMgbWVtYmVyLiAgQWxzbyBhZGQKKyAg
ICAgICAgb3RoZXIgbWlzc2luZyBiaXRzIG9mIG5wYXBpLmggdG8gY2F0Y2ggdXAgZnJvbSAxNCB0
byAxNy4gIFRoaXMgaW5jbHVkZXMKKyAgICAgICAgZmVhdHVyZXMgdGhhdCBhcmUgbm90IGltcGxl
bWVudGVkIGluIFdlYktpdCwgYnV0IHRob3NlIGFyZSBzYWZlbHkgc3R1YmJlZC4KKwogMjAwNy0w
My0xNCAgS2V2aW4gTWNDdWxsb3VnaCAgPGttY2N1bGxvdWdoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBHZW9mZi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBp
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvbnBhcGkuaAkocmV2aXNp
b24gMTk5ODYpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDQsNyArMTA0LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNkZWZpbmUgTlBf
VkVSU0lPTl9NQUpPUiAwCi0jZGVmaW5lIE5QX1ZFUlNJT05fTUlOT1IgMTQKKyNkZWZpbmUgTlBf
VkVSU0lPTl9NSU5PUiAxNwogCiAKIApAQCAtMTg3LDYgKzE4NywxNiBAQCB0eXBlZGVmIHN0cnVj
dCBfTlBTdHJlYW0KICAgICB1aW50MzIgICAgICAgZW5kOwogICAgIHVpbnQzMiAgICAgICBsYXN0
bW9kaWZpZWQ7CiAgICAgdm9pZCogICAgICAgIG5vdGlmeURhdGE7CisgICAgY29uc3QgY2hhciog
IGhlYWRlcnM7ICAgICAgLyogUmVzcG9uc2UgaGVhZGVycyBmcm9tIGhvc3QuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICogRXhpc3RzIG9ubHkgZm9yID49IE5QVkVSU19IQVNfUkVT
UE9OU0VfSEVBREVSUy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBVc2VkIGZv
ciBIVFRQIG9ubHk7IE5VTEwgZm9yIG5vbi1IVFRQLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqIEF2YWlsYWJsZSBmcm9tIE5QUF9OZXdTdHJlYW0gb253YXJkcy4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKiBQbHVnaW4gc2hvdWxkIGNvcHkgdGhpcyBkYXRhIGJl
Zm9yZSBzdG9yaW5nIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluY2x1
ZGVzIEhUVFAgc3RhdHVzIGxpbmUgYW5kIGFsbCBoZWFkZXJzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqIHByZWZlcmFibHkgdmVyYmF0aW0gYXMgcmVjZWl2ZWQgZnJvbSBzZXJ2
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaGVhZGVycyBmb3JtYXR0ZWQg
YXMgaW4gSFRUUCAoIkhlYWRlcjogVmFsdWUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKiBhbmQgbmV3bGluZXMgKFxuLCBOT1QgXHJcbikgc2VwYXJhdGluZyBsaW5lcy4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUZXJtaW5hdGVkIGJ5IFxuXDAgKE5PVCBc
blxuXDApLiAqLwogfSBOUFN0cmVhbTsKIAogCkBAIC0zMTQsNyArMzI0LDEzIEBAIHR5cGVkZWYg
ZW51bSB7CiAgICAgTlBQVnBsdWdpbk5lZWRzWEVtYmVkICAgICAgICAgPSAxNCwgLyogTm90IGlt
cGxlbWVudGVkIGluIFdlYktpdCAqLwogCiAgICAgLyogR2V0IHRoZSBOUE9iamVjdCBmb3Igc2Ny
aXB0aW5nIHRoZSBwbHVnaW4uICovCi0gICAgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCAg
PSAxNQorICAgIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QgID0gMTUsCisJCisgICAgLyog
R2V0IHRoZSBwbHVnaW4gdmFsdWUgKGFzIFwwLXRlcm1pbmF0ZWQgVVRGLTggc3RyaW5nIGRhdGEp
IGZvcgorICAgICAqIGZvcm0gc3VibWlzc2lvbiBpZiB0aGUgcGx1Z2luIGlzIHBhcnQgb2YgYSBm
b3JtLiBVc2UKKyAgICAgKiBOUE5fTWVtQWxsb2MoKSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRo
ZSBzdHJpbmcgZGF0YS4KKyAgICAgKi8KKyAgICBOUFBWZm9ybVZhbHVlID0gMTYgICAgLyogTm90
IGltcGxlbWVudGVkIGluIFdlYktpdCAqLwogfSBOUFBWYXJpYWJsZTsKIAogLyoKQEAgLTU4Nyw2
ICs2MDMsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgTlBfUG9ydAogI2RlZmluZSBOUFZFUlNfV0lOMTZf
SEFTX0xJVkVDT05ORUNUICAgIDkKICNkZWZpbmUgTlBWRVJTXzY4S19IQVNfTElWRUNPTk5FQ1Qg
ICAgMTEKICNkZWZpbmUgTlBWRVJTX0hBU19XSU5ET1dMRVNTICAgICAgIDExCisjZGVmaW5lIE5Q
VkVSU19IQVNfWFBDT05ORUNUX1NDUklQVElORyAgICAxMyAgLyogTm90IGltcGxlbWVudGVkIGlu
IFdlYktpdCAqLworI2RlZmluZSBOUFZFUlNfSEFTX05QUlVOVElNRV9TQ1JJUFRJTkcgICAgMTQK
KyNkZWZpbmUgTlBWRVJTX0hBU19GT1JNX1ZBTFVFUyAgICAgICAgICAgIDE1ICAvKiBOb3QgaW1w
bGVtZW50ZWQgaW4gV2ViS2l0OyBzZWUgYnVnIDEzMDYxICovCisjZGVmaW5lIE5QVkVSU19IQVNf
UE9QVVBTX0VOQUJMRURfU1RBVEUgICAxNiAgLyogTm90IGltcGxlbWVudGVkIGluIFdlYktpdCAq
LworI2RlZmluZSBOUFZFUlNfSEFTX1JFU1BPTlNFX0hFQURFUlMgICAgICAgMTcKIAogCiAvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwpAQCAtNjc3LDYgKzY5OCw4IEBAIE5QRXJyb3IgICAgIE5QTl9TZXRWYWx1
ZShOUFAgaW5zdGFuY2UsIE4KIHZvaWQgICAgICAgIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5z
dGFuY2UsIE5QUmVjdCAqaW52YWxpZFJlY3QpOwogdm9pZCAgICAgICAgTlBOX0ludmFsaWRhdGVS
ZWdpb24oTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKTsKIHZvaWQgICAgICAg
IE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpOwordm9pZCAgICAgICAgTlBOX1B1c2hQb3B1
cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCk7ICAvKiBOb3QgaW1w
bGVtZW50ZWQgaW4gV2ViS2l0ICovCit2b2lkICAgICAgICBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0
YXRlKE5QUCBpbnN0YW5jZSk7ICAgICAgICAgICAgICAgICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBp
biBXZWJLaXQgKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9ICAvKiBlbmQgZXh0ZXJuICJDIiAq
LwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMjAyMDMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAwNy0wMy0xNCAgRGVuZWIgTWVrZXRhICA8
ZG1la2V0YUBhZG9iZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisK
KyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMjkKKyAg
ICAgICAgcmRhcjovL3Byb2JsZW0vNDk5NDg0OQorICAgICAgICBCdWcgMTMwMjk6IFBlcm1pdCBO
UEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJzLgorCisgICAgICAgICog
aHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNlLWhlYWRlcnMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BsdWdpbnMvbnBhcGktcmVzcG9uc2UtaGVhZGVy
cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xv
YWQtbWUtMS50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvcGx1Z2lucy9yZXNvdXJj
ZXMvbG9hZC1tZS0yLnR4dDogQWRkZWQuCisKIDIwMDctMDMtMTQgIEtldmluIE1jQ3VsbG91Z2gg
IDxrbWNjdWxsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYuCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvbnBhcGktcmVzcG9uc2UtaGVhZGVy
cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVn
aW5zL25wYXBpLXJlc3BvbnNlLWhlYWRlcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNlLWhlYWRlcnMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACisKK1Rlc3QgZm9yIGJ1ZyAx
MzAyOTogUGVybWl0IE5QQVBJIHBsdWctaW5zIHRvIHNlZSBIVFRQIHJlc3BvbnNlIGhlYWRlcnMu
CisKK0V4cGVjdGVkIHJlc3VsdCBiZWxvdyBpcyB0d28gSFRUUCByZXNwb25zZSBleHRyYWN0cywg
b25lIGZvciB0aGUgaW5pdGlhbCBzdHJlYW0gc3BlY2lmaWVkIGluIHRoZSAic3JjIiBhdHRyaWJ1
dGUsIHRoZSBvdGhlciBmb3IgYW4gTlBOX0dldFVSTE5vdGlmeSByZXF1ZXN0LiBFYWNoIGJsb2Nr
IHNob3VsZCBjb250YWluIHRoZSBVUkw7IHRoZSBzdGF0dXMgbGluZSwgd2hpY2ggc2hvdWxkIHNh
eSAiSFRUUCAyMDAgT0siOyBhbmQgdGhlIE1JTUUtdHlwZSwgd2hpY2ggc2hvdWxkIHNheSAiQ29u
dGVudC1UeXBlOiB0ZXh0L3BsYWluIi4KKworLS0tLS0tLS0tLQorCitodHRwOi8vW3Zhcmllcywg
bm90IGJlaW5nIHRlc3RlZF0vcGx1Z2lucy9yZXNvdXJjZXMvbG9hZC1tZS0xLnR4dAorSFRUUCAy
MDAgT0sKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCistLS0tLS0tLS0tCisKK2h0dHA6Ly9b
dmFyaWVzLCBub3QgYmVpbmcgdGVzdGVkXS9wbHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTIudHh0
CitIVFRQIDIwMCBPSworQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKwpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNlLWhlYWRlcnMuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvbnBhcGktcmVzcG9uc2Ut
aGVhZGVycy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVn
aW5zL25wYXBpLXJlc3BvbnNlLWhlYWRlcnMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
MiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIHJlczEsIHJlczI7
CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgdHJ5IHsKKyAgICAgICAgcmVzMSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQxIik7CisgICAgICAgIHJlczIgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgicmVzdWx0MiIpOworICAgICAgICBwbGcuZ2V0VVJMTm90aWZ5KCIvcGx1Z2lu
cy9yZXNvdXJjZXMvbG9hZC1tZS0yLnR4dCIsIG51bGwsICJjYWxsYmFjayIpOworICAgIH0gY2F0
Y2ggKGV4KSB7CisgICAgICAgIHNob3dFcnIoIkV4Y2VwdGlvbjogIiArIGV4LmRlc2NyaXB0aW9u
KTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgfQor
fQorCitmdW5jdGlvbiBjYWxsYmFjayhlcnJDb2RlLCBzdHJlYW1EdW1wKSB7CisgICAgdmFyIHBh
cnNlID0gcGFyc2VTdHJlYW1EdW1wKHN0cmVhbUR1bXApOworICAgIGlmIChwYXJzZS5lcnIpIHsK
KyAgICAgICAgc2hvd0VycihwYXJzZS5lcnIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlczEu
aW5uZXJIVE1MID0gbmV3bGluZXNUb0hUTUwocGFyc2UucmVzMSk7CisgICAgICAgIHJlczIuaW5u
ZXJIVE1MID0gbmV3bGluZXNUb0hUTUwocGFyc2UucmVzMik7CisgICAgfQorICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworICAgIH0KK30KKworLy8gRm9ybWF0IHBhc3NlZCBieSBwbHVnaW46IGZv
dXIgZmllbGRzIHNlcGFyYXRlZCBieSBcblxuOgorLy8gRmlyc3QgVVJMOyBmaXJzdCBoZWFkZXIg
YmxvY2s7IGxhc3QgVVJMOyBsYXN0IGhlYWRlciBibG9jay4KK2Z1bmN0aW9uIHBhcnNlU3RyZWFt
RHVtcChzdHJlYW1EdW1wKSB7CisgICAgdmFyIHJ0biA9IHt9OworICAgIGlmICh0eXBlb2Ygc3Ry
ZWFtRHVtcCA9PSAic3RyaW5nIiB8fCAoKHR5cGVvZiBzdHJlYW1EdW1wID09ICJvYmplY3QiKSAm
JiAoc3RyZWFtRHVtcC5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpKSkgeworICAgICAgICB2YXIgcGFy
dHMgPSBzdHJlYW1EdW1wLnNwbGl0KCJcblxuIik7CisgICAgICAgIGlmIChwYXJ0cy5sZW5ndGgg
Pj0gNCkgeworICAgICAgICAgICAgcnRuLnJlczEgPSBnZW5lcmljVVJMKHBhcnRzWzBdKSArICJc
biIgKyBwYXJzZUhlYWRlcnMocGFydHNbMV0pOworICAgICAgICAgICAgcnRuLnJlczIgPSBnZW5l
cmljVVJMKHBhcnRzWzJdKSArICJcbiIgKyBwYXJzZUhlYWRlcnMocGFydHNbM10pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgcnRuLmVyciA9ICJzdHJlYW1EdW1wIGZyb20gcGx1Z2lu
IGRvZXMgbm90IGhhdmUgZXhwZWN0ZWQgZm9ybWF0IjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIHJ0bi5lcnIgPSAic3RyZWFtRHVtcCBmcm9tIHBsdWdpbiBpcyBub3QgYSBzdHJp
bmc6ICIgKyBzdHJlYW1EdW1wOworICAgIH0KKyAgICByZXR1cm4gcnRuOworfQorCitmdW5jdGlv
biBzaG93RXJyKGVycikgeworICAgIHJlczEuaW5uZXJIVE1MID0gIkZBSUxFRCAtICIgKyBlcnI7
CisgICAgcmVzMi5pbm5lckhUTUwgPSAiIjsKK30KKworZnVuY3Rpb24gbmV3bGluZXNUb0hUTUwo
c3RyKSB7CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cbi9nLCAiPGJyPiIpOworfQorCitmdW5j
dGlvbiBnZW5lcmljVVJMKHVybCkgeworICAgIHJldHVybiB1cmwucmVwbGFjZSgvXihodHRwOlwv
XC8pW15cL10rLywgIiQxW3Zhcmllcywgbm90IGJlaW5nIHRlc3RlZF0iKTsKK30KKworZnVuY3Rp
b24gcGFyc2VIZWFkZXJzKGhkcnMpIHsKKyAgICB2YXIgcGFydHMgPSBoZHJzLnNwbGl0KCJcbiIp
OworICAgIHZhciBydG4gPSBwYXJ0c1swXSArICJcbiI7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBwYXJ0cy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAocGFydHNbaV0ubWF0Y2goL15Db250
ZW50LVR5cGU6LykpIHsKKyAgICAgICAgICAgIHJ0biArPSBwYXJ0c1tpXTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gcnRuOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxv
YWQ9InRlc3QoKSI+Cis8ZW1iZWQgbmFtZT0icGxnIiB0eXBlPSJhcHBsaWNhdGlvbi94LXdlYmtp
dC10ZXN0LW5ldHNjYXBlIiBzcmM9Ii9wbHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTEudHh0Ij48
L2VtYmVkPgorPHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4u
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAyOSI+YnVnIDEzMDI5PGEvPjoKK1Blcm1pdCBOUEFQSSBw
bHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJzLjwvcD4KKzxwPkV4cGVjdGVkIHJl
c3VsdCBiZWxvdyBpcyB0d28gSFRUUCByZXNwb25zZSBleHRyYWN0cywgb25lIGZvciB0aGUgaW5p
dGlhbCBzdHJlYW0gc3BlY2lmaWVkIGluIHRoZSAic3JjIgorYXR0cmlidXRlLCB0aGUgb3RoZXIg
Zm9yIGFuIE5QTl9HZXRVUkxOb3RpZnkgcmVxdWVzdC4gRWFjaCBibG9jayBzaG91bGQgY29udGFp
biB0aGUgVVJMOyB0aGUgc3RhdHVzIGxpbmUsCit3aGljaCBzaG91bGQgc2F5ICJIVFRQIDIwMCBP
SyI7IGFuZCB0aGUgTUlNRS10eXBlLCB3aGljaCBzaG91bGQgc2F5ICJDb250ZW50LVR5cGU6IHRl
eHQvcGxhaW4iLjwvcD4KKzxwPi0tLS0tLS0tLS08L3A+Cis8cCBpZD0icmVzdWx0MSI+UnVubmlu
ZyB0ZXN0LCByZXN1bHQgc2hvdWxkIGFwcGVhciBoZXJlIGluIGEgdmVyeSBzaG9ydCB0aW1lLi4u
PC9wPgorPHA+LS0tLS0tLS0tLTwvcD4KKzxwIGlkPSJyZXN1bHQyIj5SdW5uaW5nIHRlc3QsIHJl
c3VsdCBzaG91bGQgYXBwZWFyIGhlcmUgaW4gYSB2ZXJ5IHNob3J0IHRpbWUuLi48L3A+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3Vy
Y2VzL2xvYWQtbWUtMS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9w
bHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTEudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9wbHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTEudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIgQEAKK0l0J3MgYSBsb25lbHkgZXhpc3RlbmNlIGJlaW5nIGEgdGVzdCBm
aWxlLgorWW91J3JlIHdlbGNvbWUuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdp
bnMvcmVzb3VyY2VzL2xvYWQtbWUtMi50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9wbHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTIudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTIudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKK09oIHllYWguCitOb2JvZHkgbG9va2luJyBhdCBt
ZS4KK0p1c3QgY2hpbGxpbicuCitUZXN0IGZpbGUuCitPaCB5ZWFoLgpJbmRleDogV2ViS2l0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDIwMykK
KysrIFdlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAw
Ny0wMy0xNCAgRGVuZWIgTWVrZXRhICA8ZG1la2V0YUBhZG9iZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMwMjkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vNDk5NDg0OQorICAg
ICAgICBCdWcgMTMwMjk6IFBlcm1pdCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25z
ZSBoZWFkZXJzLgorCisgICAgICAgICogUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJl
YW0uaDogZGVjbGFyYXRpb25zLgorICAgICAgICAqIFBsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1
Z2luU3RyZWFtLm06IG1haW4gaW1wbGVtZW50YXRpb24uCisgICAgICAgICgtW1dlYkJhc2VOZXRz
Y2FwZVBsdWdpblN0cmVhbSBkZWFsbG9jXSk6IGNsZWFudXAuCisgICAgICAgICgtW1dlYkJhc2VO
ZXRzY2FwZVBsdWdpblN0cmVhbSBmaW5hbGl6ZV0pOiBjbGVhbnVwLgorICAgICAgICAoLVtXZWJC
YXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0gc3RhcnRTdHJlYW1SZXNwb25zZVVSTDpleHBlY3RlZENv
bnRlbnRMZW5ndGg6bGFzdE1vZGlmaWVkRGF0ZTpNSU1FVHlwZTpoZWFkZXJzOl0pOgorICAgICAg
ICBQYXNzIGhlYWRlcnMgYWxvbmcuCisgICAgICAgICgtW1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0
cmVhbSBzdGFydFN0cmVhbVdpdGhSZXNwb25zZTpdKToKKyAgICAgICAgTWFpbiB3b3JrIGlzIGhl
cmUuICBFeHRyYWN0IGhlYWRlcnMgZnJvbSBOU0hUVFBVUkxSZXNwb25zZSBvYmplY3QgaW50byBh
IGJ5dGUgc2VxdWVuY2UuCisgICAgICAgIFNlZSBjb21tZW50cyBoZXJlIGFib3V0IGhvdyBpdCB3
b3VsZCBiZSBuaWNlIHRvIGhhdmUgbG93LWxldmVsIGFjY2VzcyB0byB0aGUgSFRUUCByZXNwb25z
ZS4KKyAgICAgICAgKC1bV2ViQmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtIF9kZXN0cm95U3RyZWFt
XSk6IGNsZWFudXAuCisgICAgICAgICogUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3
Lm1tOgorICAgICAgICAoLVtXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGV2YWx1YXRlSmF2YVNj
cmlwdFBsdWdpblJlcXVlc3Q6XSk6CisgICAgICAgIENvbmZvcm0gdG8gbmV3IHN0YXJ0U3RyZWFt
IHBhcmFtcy4gIE5vdCBhcHBsaWNhYmxlIGhlcmUsIHBhc3MgbmlsLgorICAgICAgICAqIFBsdWdp
bnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm06CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1
Z2luUGFja2FnZSBsb2FkXSk6CisgICAgICAgIEZpbGwgaW4gbmV3IGJyb3dzZXJGdW5jcyBtZW1i
ZXJzICh3aXRoIHN0dWJzKSByZXF1aXJlZCBieSBuZXcgbnBhcGkuaCB2ZXJzaW9uLgorICAgICAg
ICAqIFBsdWdpbnMvbnBhcGkubTogTlBBUEkgc3R1YnMuCisgICAgICAgIChOUE5fUHVzaFBvcHVw
c0VuYWJsZWRTdGF0ZSk6CisgICAgICAgIChOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKToKKyAg
ICAgICAgKiBQbHVnaW5zL25wZnVuY3Rpb25zLmg6IE5QQVBJIGRlY2xhcmF0aW9ucy4KKwogMjAw
Ny0wMy0xNCAgRGF2aWQgSGFycmlzb24gIDxoYXJyaXNvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTWFjaWVqLgpJbmRleDogV2ViS2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBl
UGx1Z2luU3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNj
YXBlUGx1Z2luU3RyZWFtLmgJKHJldmlzaW9uIDE5OTg2KQorKysgV2ViS2l0L1BsdWdpbnMvV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcg
QEAKICAgICBjaGFyICpwYXRoOwogICAgIEJPT0wgc2VuZE5vdGlmaWNhdGlvbjsKICAgICB2b2lk
ICpub3RpZnlEYXRhOworICAgIGNoYXIgKmhlYWRlcnM7CiAgICAgV2ViQmFzZU5ldHNjYXBlUGx1
Z2luVmlldyAqcGx1Z2luVmlldzsKICAgICBOUFJlYXNvbiByZWFzb247CiAgICAgQk9PTCBpc1Rl
cm1pbmF0ZWQ7CkBAIC03OCw3ICs3OSw4IEBACiAtICh2b2lkKXN0YXJ0U3RyZWFtUmVzcG9uc2VV
Ukw6KE5TVVJMICopdGhlUmVzcG9uc2VVUkwKICAgICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0
aDoobG9uZyBsb25nKWV4cGVjdGVkQ29udGVudExlbmd0aAogICAgICAgICAgICAgICBsYXN0TW9k
aWZpZWREYXRlOihOU0RhdGUgKilsYXN0TW9kaWZpZWREYXRlCi0gICAgICAgICAgICAgICAgICAg
ICAgTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGU7CisgICAgICAgICAgICAgICAgICAgICAg
TUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgaGVh
ZGVyczooTlNEYXRhICopdGhlSGVhZGVyczsKIAogLy8gY2FuY2VsTG9hZFdpdGhFcnJvciBjYW5j
ZWxzIHRoZSBOU1VSTENvbm5lY3Rpb24gYW5kIGluZm9ybXMgV2ViS2l0IG9mIHRoZSBsb2FkIGVy
cm9yLgogLy8gVGhpcyBtZXRob2QgaXMgb3ZlcnJpZGVuIGJ5IHN1YmNsYXNzZXMuCkluZGV4OiBX
ZWJLaXQvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0ubQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0ubQkocmV2aXNpb24g
MTk5ODYpCisrKyBXZWJLaXQvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0ubQko
d29ya2luZyBjb3B5KQpAQCAtMTI4LDYgKzEyOCw3IEBAIHN0YXRpYyBjaGFyICpDYXJib25QYXRo
RnJvbVBPU0lYUGF0aChjb24KICAgICAKICAgICBmcmVlKCh2b2lkICopc3RyZWFtLnVybCk7CiAg
ICAgZnJlZShwYXRoKTsKKyAgICBmcmVlKGhlYWRlcnMpOwogCiAgICAgW3N1cGVyIGRlYWxsb2Nd
OwogfQpAQCAtMTQzLDYgKzE0NCw3IEBAIHN0YXRpYyBjaGFyICpDYXJib25QYXRoRnJvbVBPU0lY
UGF0aChjb24KIAogICAgIGZyZWUoKHZvaWQgKilzdHJlYW0udXJsKTsKICAgICBmcmVlKHBhdGgp
OworICAgIGZyZWUoaGVhZGVycyk7CiAKICAgICBbc3VwZXIgZmluYWxpemVdOwogfQpAQCAtMjEx
LDYgKzIxMyw3IEBAIHN0YXRpYyBjaGFyICpDYXJib25QYXRoRnJvbVBPU0lYUGF0aChjb24KICAg
ICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0aDoobG9uZyBsb25nKWV4cGVjdGVkQ29udGVudExl
bmd0aAogICAgICAgICAgICAgICBsYXN0TW9kaWZpZWREYXRlOihOU0RhdGUgKilsYXN0TW9kaWZp
ZWREYXRlCiAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6KE5TU3RyaW5nICopdGhlTUlN
RVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczooTlNEYXRhICopdGhlSGVhZGVy
cwogewogICAgIEFTU0VSVCghaXNUZXJtaW5hdGVkKTsKICAgICAKQEAgLTIyNCw3ICsyMjcsMTUg
QEAgc3RhdGljIGNoYXIgKkNhcmJvblBhdGhGcm9tUE9TSVhQYXRoKGNvbgogICAgIHN0cmVhbS5l
bmQgPSBleHBlY3RlZENvbnRlbnRMZW5ndGggPiAwID8gZXhwZWN0ZWRDb250ZW50TGVuZ3RoIDog
MDsKICAgICBzdHJlYW0ubGFzdG1vZGlmaWVkID0gW2xhc3RNb2RpZmllZERhdGUgdGltZUludGVy
dmFsU2luY2UxOTcwXTsKICAgICBzdHJlYW0ubm90aWZ5RGF0YSA9IG5vdGlmeURhdGE7Ci0gICAg
CisKKyAgICBpZiAodGhlSGVhZGVycykgeworICAgICAgICB1bnNpZ25lZCBsZW4gPSBbdGhlSGVh
ZGVycyBsZW5ndGhdOworICAgICAgICBoZWFkZXJzID0gbWFsbG9jKGxlbiArIDEpOworICAgICAg
ICBbdGhlSGVhZGVycyBnZXRCeXRlczpoZWFkZXJzXTsKKyAgICAgICAgaGVhZGVyc1tsZW5dID0g
MDsKKyAgICAgICAgc3RyZWFtLmhlYWRlcnMgPSBoZWFkZXJzOworICAgIH0KKwogICAgIHRyYW5z
ZmVyTW9kZSA9IE5QX05PUk1BTDsKICAgICBvZmZzZXQgPSAwOwogICAgIHJlYXNvbiA9IFdFQl9S
RUFTT05fTk9ORTsKQEAgLTI2NCwxMCArMjc1LDUyIEBAIHN0YXRpYyBjaGFyICpDYXJib25QYXRo
RnJvbVBPU0lYUGF0aChjb24KIAogLSAodm9pZClzdGFydFN0cmVhbVdpdGhSZXNwb25zZTooTlNV
UkxSZXNwb25zZSAqKXIKIHsKKyAgICBOU011dGFibGVEYXRhICp0aGVIZWFkZXJzID0gbmlsOwor
ICAgIGlmIChbciBpc0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11dKSB7Cisg
ICAgICAgIE5TSFRUUFVSTFJlc3BvbnNlICpodHRwUmVzcG9uc2UgPSAoTlNIVFRQVVJMUmVzcG9u
c2UgKilyOworICAgICAgICB0aGVIZWFkZXJzID0gW05TTXV0YWJsZURhdGEgZGF0YVdpdGhDYXBh
Y2l0eToxMDI0XTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBuaWNl
IHRvIGJlIGFibGUgdG8gZ2V0IHRoZSByYXcgSFRUUCBoZWFkZXIgYmxvY2suCisgICAgICAgIC8v
IFRoaXMgaW5jbHVkZXMgdGhlIHJlYWwgc3RhdHVzIHRleHQsCisgICAgICAgIC8vIGFsbCBoZWFk
ZXJzIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyIGFuZCBpbmNsdWRpbmcgZHVwbGljYXRlcywKKyAg
ICAgICAgLy8gYW5kIGFsbCBvcmlnaW5hbCBieXRlcyB2ZXJiYXRpbSwgcmF0aGVyIHRoYW4gc2Vu
dCB0aHJvdWdoIFVuaWNvZGUgdHJhbnNsYXRpb24uCisgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkg
TlNIVFRQVVJMUmVzcG9uc2UgZG9lc24ndCBwcm92aWRlIGFjY2VzcyBhdCB0aGF0IGxvdyBhIGxl
dmVsLgorICAgICAgICAKKyAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6IkhUVFAgIiBs
ZW5ndGg6NV07CisgICAgICAgIGNoYXIgc3RhdHVzU3RyWzEwXTsKKyAgICAgICAgc3ByaW50Zihz
dGF0dXNTdHIsICIlZCIsIFtodHRwUmVzcG9uc2Ugc3RhdHVzQ29kZV0pOworICAgICAgICBbdGhl
SGVhZGVycyBhcHBlbmRCeXRlczpzdGF0dXNTdHIgbGVuZ3RoOnN0cmxlbihzdGF0dXNTdHIpXTsK
KyAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6IiBPS1xuIiBsZW5ndGg6NF07CisKKyAg
ICAgICAgLy8gSEFDSzogcGFzcyB0aGUgaGVhZGVycyB0aHJvdWdoIGFzIFVURi04LgorICAgICAg
ICAvLyBUaGlzIGlzIG5vdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3I7IHdlJ3JlIHN1cHBvc2VkIHRv
IHBhc3Mgb3JpZ2luYWwgYnl0ZXMgdmVyYmF0aW0uCisgICAgICAgIC8vIEJ1dCB3ZSBkb24ndCBo
YXZlIHRoZSBvcmlnaW5hbCBieXRlcywgd2UgaGF2ZSBOU1N0cmluZ3MgYnVpbHQgYnkgdGhlIFVS
TCBsb2FkaW5nIHN5c3RlbS4KKyAgICAgICAgLy8gSXQgaG9wZWZ1bGx5IHNob3VsZG4ndCBtYXR0
ZXIsIHNpbmNlIFJGQzI2MTYvUkZDODIyIHJlcXVpcmUgQVNDSUktb25seSBoZWFkZXJzLAorICAg
ICAgICAvLyBidXQgc3VyZWx5IHNvbWVvbmUgb3V0IHRoZXJlIGlzIHVzaW5nIG5vbi1BU0NJSSBj
aGFyYWN0ZXJzLCBhbmQgaG9wZWZ1bGx5IFVURi04IGlzIGFkZXF1YXRlIGhlcmUuCisgICAgICAg
IC8vIEl0IHNlZW1zIGJldHRlciB0aGFuIE5TQVNDSUlTdHJpbmdFbmNvZGluZywgd2hpY2ggd2ls
bCBsb3NlIGluZm9ybWF0aW9uIGlmIG5vbi1BU0NJSSBpcyB1c2VkLgorCisgICAgICAgIE5TRGlj
dGlvbmFyeSAqaGVhZGVyRGljdCA9IFtodHRwUmVzcG9uc2UgYWxsSGVhZGVyRmllbGRzXTsKKyAg
ICAgICAgTlNBcnJheSAqa2V5cyA9IFtbaGVhZGVyRGljdCBhbGxLZXlzXSBzb3J0ZWRBcnJheVVz
aW5nU2VsZWN0b3I6QHNlbGVjdG9yKGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6KV07CisgICAgICAg
IE5TRW51bWVyYXRvciAqaSA9IFtrZXlzIG9iamVjdEVudW1lcmF0b3JdOworICAgICAgICBOU1N0
cmluZyAqazsKKyAgICAgICAgd2hpbGUgKChrID0gW2kgbmV4dE9iamVjdF0pICE9IG5pbCkgewor
ICAgICAgICAgICAgTlNTdHJpbmcgKnYgPSBbaGVhZGVyRGljdCBvYmplY3RGb3JLZXk6a107Cisg
ICAgICAgICAgICBjb25zdCBjaGFyICprU3RyID0gW2sgY1N0cmluZ1VzaW5nRW5jb2Rpbmc6TlNV
VEY4U3RyaW5nRW5jb2RpbmddOworICAgICAgICAgICAgY29uc3QgY2hhciAqdlN0ciA9IFt2IGNT
dHJpbmdVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICAgICAgICAgIFt0
aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOmtTdHIgbGVuZ3RoOnN0cmxlbihrU3RyKV07CisgICAgICAg
ICAgICBbdGhlSGVhZGVycyBhcHBlbmRCeXRlczoiOiAiIGxlbmd0aDoyXTsKKyAgICAgICAgICAg
IFt0aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOnZTdHIgbGVuZ3RoOnN0cmxlbih2U3RyKV07CisgICAg
ICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmRCeXRlczoiXG4iIGxlbmd0aDoxXTsKKyAgICAgICAg
fQorCisgICAgICAgIFt0aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOiJcMCIgbGVuZ3RoOjFdOworICAg
IH0KKwogICAgIFtzZWxmIHN0YXJ0U3RyZWFtUmVzcG9uc2VVUkw6W3IgVVJMXQogICAgICAgICAg
ICBleHBlY3RlZENvbnRlbnRMZW5ndGg6W3IgZXhwZWN0ZWRDb250ZW50TGVuZ3RoXQogICAgICAg
ICAgICAgICAgIGxhc3RNb2RpZmllZERhdGU6V0tHZXROU1VSTFJlc3BvbnNlTGFzdE1vZGlmaWVk
RGF0ZShyKQotICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6W3IgTUlNRVR5cGVdXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOltyIE1JTUVUeXBlXQorICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlYWRlcnM6dGhlSGVhZGVyc107CiB9CiAKIC0gKHZvaWQpX2Rlc3Ry
b3lTdHJlYW0KQEAgLTMwNCw2ICszNTcsMTAgQEAgc3RhdGljIGNoYXIgKkNhcmJvblBhdGhGcm9t
UE9TSVhQYXRoKGNvbgogICAgICAgICBbcGx1Z2luVmlldyBkaWRDYWxsUGx1Z0luRnVuY3Rpb25d
OwogICAgICAgICBMT0coUGx1Z2lucywgIk5QUF9EZXN0cm95U3RyZWFtIHJlc3BvbnNlVVJMPSVA
IGVycm9yPSVkIiwgcmVzcG9uc2VVUkwsIG5wRXJyKTsKICAgICAgICAgCisgICAgICAgIGZyZWUo
aGVhZGVycyk7CisgICAgICAgIGhlYWRlcnMgPSBOVUxMOworICAgICAgICBzdHJlYW0uaGVhZGVy
cyA9IE5VTEw7CisKICAgICAgICAgc3RyZWFtLm5kYXRhID0gbmlsOwogICAgIH0KICAgICAKSW5k
ZXg6IFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbQkocmV2aXNp
b24gMTk5ODYpCisrKyBXZWJLaXQvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTIxLDcgKzE5MjEsOCBAQCBzdGF0aWMgT1NTdGF0dXMgVFNN
RXZlbnRIYW5kbGVyKEV2ZW50SGFuCiAgICAgICAgIFtzdHJlYW0gc3RhcnRTdHJlYW1SZXNwb25z
ZVVSTDpVUkwKICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOltKU0RhdGEg
bGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZERhdGU6bmlsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAInRleHQvcGxhaW4iXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAidGV4dC9wbGFpbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOm5pbF07CiAgICAgICAgIFtzdHJlYW0gcmVj
ZWl2ZWREYXRhOkpTRGF0YV07CiAgICAgICAgIFtzdHJlYW0gZmluaXNoZWRMb2FkaW5nV2l0aERh
dGE6SlNEYXRhXTsKICAgICAgICAgW3N0cmVhbSByZWxlYXNlXTsKSW5kZXg6IFdlYktpdC9QbHVn
aW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9QbHVn
aW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tCShyZXZpc2lvbiAxOTk4NikKKysrIFdlYktp
dC9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTUsNiArMzk1LDkgQEAgc3RhdGljIFRyYW5zaXRpb25WZWN0b3IgdFZlY3RvckZvckZ1bmN0aQog
ICAgICAgICBicm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSAoTlBOX1JlbW92ZVByb3BlcnR5
UHJvY1B0cil0VmVjdG9yRm9yRnVuY3Rpb25Qb2ludGVyKChGdW5jdGlvblBvaW50ZXIpX05QTl9S
ZW1vdmVQcm9wZXJ0eSk7CiAgICAgICAgIGJyb3dzZXJGdW5jcy5zZXRleGNlcHRpb24gPSAoTlBO
X1NldEV4Y2VwdGlvblByb2NQdHIpdFZlY3RvckZvckZ1bmN0aW9uUG9pbnRlcigoRnVuY3Rpb25Q
b2ludGVyKV9OUE5fU2V0RXhjZXB0aW9uKTsKIAorICAgICAgICBicm93c2VyRnVuY3MucHVzaHBv
cHVwc2VuYWJsZWRzdGF0ZSA9IChOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIpdFZl
Y3RvckZvckZ1bmN0aW9uUG9pbnRlcigoRnVuY3Rpb25Qb2ludGVyKU5QTl9QdXNoUG9wdXBzRW5h
YmxlZFN0YXRlKTsKKyAgICAgICAgYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9
IChOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cil0VmVjdG9yRm9yRnVuY3Rpb25Qb2lu
dGVyKChGdW5jdGlvblBvaW50ZXIpTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZSk7CisKICNpZiAh
TE9HX0RJU0FCTEVECiAgICAgICAgIENGQWJzb2x1dGVUaW1lIG1haW5TdGFydCA9IENGQWJzb2x1
dGVUaW1lR2V0Q3VycmVudCgpOwogI2VuZGlmCkBAIC00ODcsNiArNDkwLDkgQEAgc3RhdGljIFRy
YW5zaXRpb25WZWN0b3IgdFZlY3RvckZvckZ1bmN0aQogICAgICAgICBicm93c2VyRnVuY3Muc2V0
cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5OwogICAgICAgICBicm93c2VyRnVuY3MucmVtb3Zl
cHJvcGVydHkgPSBfTlBOX1JlbW92ZVByb3BlcnR5OwogICAgICAgICBicm93c2VyRnVuY3Muc2V0
ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247CisgICAgICAgIAorICAgICAgICBicm93c2Vy
RnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRl
OworICAgICAgICBicm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBv
cHVwc0VuYWJsZWRTdGF0ZTsKIAogI2lmICFMT0dfRElTQUJMRUQKICAgICAgICAgQ0ZBYnNvbHV0
ZVRpbWUgaW5pdGlhbGl6ZVN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7CkluZGV4
OiBXZWJLaXQvUGx1Z2lucy9ucGFwaS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9QbHVnaW5zL25w
YXBpLm0JKHJldmlzaW9uIDE5OTg2KQorKysgV2ViS2l0L1BsdWdpbnMvbnBhcGkubQkod29ya2lu
ZyBjb3B5KQpAQCAtMTU4LDMgKzE1OCwxMyBAQCB2b2lkKiBOUE5fR2V0SmF2YVBlZXIoTlBQIGlu
c3RhbmNlKQogICAgIExPRyhQbHVnaW5zLCAiTlBOX0dldEphdmFQZWVyIik7CiAgICAgcmV0dXJu
IE5VTEw7CiB9CisKK3ZvaWQgTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNl
LCBOUEJvb2wgZW5hYmxlZCkKK3sKKyAgICBMT0coUGx1Z2lucywgIk5QTl9QdXNoUG9wdXBzRW5h
YmxlZFN0YXRlIik7Cit9CisKK3ZvaWQgTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5z
dGFuY2UpCit7CisgICAgTE9HKFBsdWdpbnMsICJOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlIik7
Cit9CkluZGV4OiBXZWJLaXQvUGx1Z2lucy9ucGZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9QbHVnaW5zL25wZnVuY3Rpb25zLmgJKHJldmlzaW9uIDE5OTg2KQorKysgV2ViS2l0L1Bs
dWdpbnMvbnBmdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQCB0eXBl
ZGVmIE5QRXJyb3IgKCpOUE5fR2V0VVJMUHJvY1B0cikoTlBQCiB0eXBlZGVmIE5QRXJyb3IgKCpO
UE5fUG9zdFVSTFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBj
aGFyKiB3aW5kb3csIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpOwog
dHlwZWRlZiB2b2lkKiAoKk5QTl9HZXRKYXZhRW52UHJvY1B0cikodm9pZCk7CiB0eXBlZGVmIHZv
aWQqICgqTlBOX0dldEphdmFQZWVyUHJvY1B0cikoTlBQIGluc3RhbmNlKTsKK3R5cGVkZWYgdm9p
ZCAoKk5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUEJv
b2wgZW5hYmxlZCk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJv
Y1B0cikoTlBQIGluc3RhbmNlKTsKIAogdHlwZWRlZiB2b2lkICgqTlBOX1JlbGVhc2VWYXJpYW50
VmFsdWVQcm9jUHRyKSAoTlBWYXJpYW50ICp2YXJpYW50KTsKIApAQCAtMTE1LDYgKzExNyw5IEBA
IHR5cGVkZWYgc3RydWN0IF9OUE5ldHNjYXBlRnVuY3MgewogICAgIE5QTl9IYXNNZXRob2RQcm9j
UHRyIGhhc21ldGhvZDsKICAgICBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZVByb2NQdHIgcmVsZWFz
ZXZhcmlhbnR2YWx1ZTsKICAgICBOUE5fU2V0RXhjZXB0aW9uUHJvY1B0ciBzZXRleGNlcHRpb247
CisgICAgCisgICAgTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyIHB1c2hwb3B1cHNl
bmFibGVkc3RhdGU7CisgICAgTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIgcG9wcG9w
dXBzZW5hYmxlZHN0YXRlOwogfSBOUE5ldHNjYXBlRnVuY3M7CiAKIHR5cGVkZWYgc3RydWN0IF9O
UFBsdWdpbkZ1bmNzIHsKSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMjAzKQorKysgV2ViS2l0VG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDctMDMtMTQgIERl
bmViIE1la2V0YSAgPGRtZWtldGFAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMDI5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzQ5OTQ4NDkKKyAgICAgICAgQnVnIDEz
MDI5OiBQZXJtaXQgTlBBUEkgcGx1Zy1pbnMgdG8gc2VlIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4K
KyAgICAgICAgQ2hhbmdlcyBpbiBXZWJLaXRUb29scyBhcmUgb25seSBmb3IgdGhlIE5QQVBJIHRl
c3QgcGx1Z2luLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0lu
LnN1YnByb2ovUGx1Z2luT2JqZWN0LmM6IG1haW4gdGVzdCBsb2dpYy4KKyAgICAgICAgKHBsdWdp
bkludm9rZSk6IHN1cHBvcnQgbnVsbCB3aW5kb3cgYXJndW1lbnQgZm9yIE5QU3RyZWFtIGNyZWF0
aW9uLgorICAgICAgICAocGx1Z2luRGVhbGxvY2F0ZSk6IGNsZWFudXAuCisgICAgICAgIChoYW5k
bGVDYWxsYmFjayk6IGFkZCBzZWNvbmQgSlMgY2FsbGJhY2sgYXJnOiBoZWFkZXIgZHVtcC4KKyAg
ICAgICAgKG5vdGlmeVN0cmVhbSk6IGFkZGVkOyBob29rIGZyb20gTlBQX05ld1N0cmVhbSB0byBy
ZWNvcmQgaGVhZGVycy4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVn
SW4uc3VicHJvai9QbHVnaW5PYmplY3QuaDogZGVjbGFyYXRpb25zLgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL21haW4uYzogY2FsbCBuZXcgaGVh
ZGVyIGhvb2suCisgICAgICAgIChOUFBfTmV3U3RyZWFtKTogY2FsbCBuZXcgaGVhZGVyIGhvb2su
CisKIDIwMDctMDMtMTMgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBNYWNpZWouCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
TmV0c2NhcGVQbHVnSW4uc3VicHJvai9QbHVnaW5PYmplY3QuYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9QbHVnaW5P
YmplY3QuYwkocmV2aXNpb24gMTk5ODYpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9QbHVnaW5PYmplY3QuYwkod29ya2luZyBjb3B5KQpA
QCAtOTIsNiArOTIsMTEgQEAgc3RhdGljIGNvbnN0IE5QVVRGOCAqcGx1Z2luTWV0aG9kSWRlbnRp
ZgogICAgICJnZXRVUkxOb3RpZnkiLAogfTsKIAorc3RhdGljIGNoYXIqIGZpcnN0VXJsID0gTlVM
TDsKK3N0YXRpYyBjaGFyKiBmaXJzdEhlYWRlcnMgPSBOVUxMOworc3RhdGljIGNoYXIqIGxhc3RV
cmwgPSBOVUxMOworc3RhdGljIGNoYXIqIGxhc3RIZWFkZXJzID0gTlVMTDsKKwogc3RhdGljIE5Q
VVRGOCogY3JlYXRlQ1N0cmluZ0Zyb21OUFZhcmlhbnQoY29uc3QgTlBWYXJpYW50ICp2YXJpYW50
KQogewogICAgIHNpemVfdCBsZW5ndGggPSBOUFZBUklBTlRfVE9fU1RSSU5HKCp2YXJpYW50KS5V
VEY4TGVuZ3RoOwpAQCAtMjEyLDE2ICsyMTcsMTkgQEAgc3RhdGljIGJvb2wgcGx1Z2luSW52b2tl
KE5QT2JqZWN0ICpoZWFkZQogICAgICAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIGlmIChuYW1lID09IHBsdWdpbk1ldGhvZElk
ZW50aWZpZXJzW0lEX1RFU1RfR0VUX1VSTF9OT1RJRlldKSB7Ci0gICAgICAgIGlmIChhcmdDb3Vu
dCA9PSAzICYmIE5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1swXSkgJiYgTlBWQVJJQU5UX0lTX1NU
UklORyhhcmdzWzFdKSAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMl0pKSB7CisgICAgICAg
IGlmIChhcmdDb3VudCA9PSAzCisgICAgICAgICAgJiYgTlBWQVJJQU5UX0lTX1NUUklORyhhcmdz
WzBdKQorICAgICAgICAgICYmIChOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMV0pIHx8IE5QVkFS
SUFOVF9JU19OVUxMKGFyZ3NbMV0pKQorICAgICAgICAgICYmIE5QVkFSSUFOVF9JU19TVFJJTkco
YXJnc1syXSkpIHsKICAgICAgICAgICAgIE5QVVRGOCogdXJsU3RyaW5nID0gY3JlYXRlQ1N0cmlu
Z0Zyb21OUFZhcmlhbnQoJmFyZ3NbMF0pOwotICAgICAgICAgICAgTlBVVEY4KiB0YXJnZXRTdHJp
bmcgPSBjcmVhdGVDU3RyaW5nRnJvbU5QVmFyaWFudCgmYXJnc1sxXSk7ICAgICAgICAgICAgCisg
ICAgICAgICAgICBOUFVURjgqIHRhcmdldFN0cmluZyA9IChOUFZBUklBTlRfSVNfU1RSSU5HKGFy
Z3NbMV0pID8gY3JlYXRlQ1N0cmluZ0Zyb21OUFZhcmlhbnQoJmFyZ3NbMV0pIDogTlVMTCk7CiAg
ICAgICAgICAgICBOUFVURjgqIGNhbGxiYWNrU3RyaW5nID0gY3JlYXRlQ1N0cmluZ0Zyb21OUFZh
cmlhbnQoJmFyZ3NbMl0pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBOUElkZW50aWZpZXIg
Y2FsbGJhY2tJZGVudGlmaWVyID0gYnJvd3Nlci0+Z2V0c3RyaW5naWRlbnRpZmllcihjYWxsYmFj
a1N0cmluZyk7CiAgICAgICAgICAgICBicm93c2VyLT5nZXR1cmxub3RpZnkob2JqLT5ucHAsIHVy
bFN0cmluZywgdGFyZ2V0U3RyaW5nLCBjYWxsYmFja0lkZW50aWZpZXIpOwogCiAgICAgICAgICAg
ICBmcmVlKHVybFN0cmluZyk7Ci0gICAgICAgICAgICBmcmVlKHRhcmdldFN0cmluZyk7CisgICAg
ICAgICAgICBpZiAodGFyZ2V0U3RyaW5nKSBmcmVlKHRhcmdldFN0cmluZyk7CiAgICAgICAgICAg
ICBmcmVlKGNhbGxiYWNrU3RyaW5nKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgVk9JRF9U
T19OUFZBUklBTlQoKnJlc3VsdCk7CkBAIC0yNjEsMTMgKzI2OSwxNyBAQCBzdGF0aWMgTlBPYmpl
Y3QgKnBsdWdpbkFsbG9jYXRlKE5QUCBucHAsCiBzdGF0aWMgdm9pZCBwbHVnaW5EZWFsbG9jYXRl
KE5QT2JqZWN0ICpvYmopIAogewogICAgIGZyZWUob2JqKTsKKyAgICBmcmVlKGZpcnN0VXJsKTsK
KyAgICBmcmVlKGZpcnN0SGVhZGVycyk7CisgICAgZnJlZShsYXN0VXJsKTsKKyAgICBmcmVlKGxh
c3RIZWFkZXJzKTsKIH0KIAogdm9pZCBoYW5kbGVDYWxsYmFjayhQbHVnaW5PYmplY3QqIG9iamVj
dCwgY29uc3QgY2hhciAqdXJsLCBOUFJlYXNvbiByZWFzb24sIHZvaWQgKm5vdGlmeURhdGEpCiB7
CiAgICAgYXNzZXJ0KG9iamVjdCk7CiAgICAgCi0gICAgTlBWYXJpYW50IGFyZ3NbMV07CisgICAg
TlBWYXJpYW50IGFyZ3NbMl07CiAgICAgCiAgICAgTlBPYmplY3QgKndpbmRvd1NjcmlwdE9iamVj
dDsKICAgICBicm93c2VyLT5nZXR2YWx1ZShvYmplY3QtPm5wcCwgTlBQVnBsdWdpblNjcmlwdGFi
bGVOUE9iamVjdCwgJndpbmRvd1NjcmlwdE9iamVjdCk7CkBAIC0yNzYsNyArMjg4LDMzIEBAIHZv
aWQgaGFuZGxlQ2FsbGJhY2soUGx1Z2luT2JqZWN0KiBvYmplY3QKIAogICAgIElOVDMyX1RPX05Q
VkFSSUFOVChyZWFzb24sIGFyZ3NbMF0pOwogCisgICAgY2hhciAqc3RySGRyID0gTlVMTDsKKyAg
ICBpZiAoZmlyc3RVcmwgJiYgZmlyc3RIZWFkZXJzICYmIGxhc3RVcmwgJiYgbGFzdEhlYWRlcnMp
IHsKKyAgICAgICAgLy8gRm9ybWF0IGV4cGVjdGVkIGJ5IEphdmFTY3JpcHQgdmFsaWRhdG9yOiBm
b3VyIGZpZWxkcyBzZXBhcmF0ZWQgYnkgXG5cbjoKKyAgICAgICAgLy8gRmlyc3QgVVJMOyBmaXJz
dCBoZWFkZXIgYmxvY2s7IGxhc3QgVVJMOyBsYXN0IGhlYWRlciBibG9jay4KKyAgICAgICAgLy8g
Tm90ZSB0aGF0IGhlYWRlciBibG9ja3MgYWxyZWFkeSBlbmQgd2l0aCBcbiBkdWUgdG8gaG93IE5Q
U3RyZWFtOjpoZWFkZXJzIHdvcmtzLgorICAgICAgICBpbnQgbGVuID0gc3RybGVuKGZpcnN0VXJs
KSArIDIgKyBzdHJsZW4oZmlyc3RIZWFkZXJzKSArIDEgKyBzdHJsZW4obGFzdFVybCkgKyAyICsg
c3RybGVuKGxhc3RIZWFkZXJzKSArIDE7CisgICAgICAgIHN0ckhkciA9IG1hbGxvYyhsZW4gKyAx
KTsKKyAgICAgICAgc3ByaW50ZihzdHJIZHIsICIlc1xuXG4lc1xuJXNcblxuJXNcbiIsIGZpcnN0
VXJsLCBmaXJzdEhlYWRlcnMsIGxhc3RVcmwsIGxhc3RIZWFkZXJzKTsKKyAgICAgICAgU1RSSU5H
Tl9UT19OUFZBUklBTlQoc3RySGRyLCBsZW4sIGFyZ3NbMV0pOworICAgIH0gZWxzZSB7CisgICAg
ICAgIE5VTExfVE9fTlBWQVJJQU5UKGFyZ3NbMV0pOworICAgIH0KKwogICAgIE5QVmFyaWFudCBi
cm93c2VyUmVzdWx0OwotICAgIGJyb3dzZXItPmludm9rZShvYmplY3QtPm5wcCwgd2luZG93U2Ny
aXB0T2JqZWN0LCBjYWxsYmFja0lkZW50aWZpZXIsIGFyZ3MsIDEsICZicm93c2VyUmVzdWx0KTsK
KyAgICBicm93c2VyLT5pbnZva2Uob2JqZWN0LT5ucHAsIHdpbmRvd1NjcmlwdE9iamVjdCwgY2Fs
bGJhY2tJZGVudGlmaWVyLCBhcmdzLCAyLCAmYnJvd3NlclJlc3VsdCk7CiAgICAgYnJvd3Nlci0+
cmVsZWFzZXZhcmlhbnR2YWx1ZSgmYnJvd3NlclJlc3VsdCk7CisKKyAgICBpZiAoc3RySGRyKSBm
cmVlKHN0ckhkcik7Cit9CisKK3ZvaWQgbm90aWZ5U3RyZWFtKFBsdWdpbk9iamVjdCogb2JqZWN0
LCBib29sIGZpcnN0LCBjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmhlYWRlcnMpCit7Cisg
ICAgaWYgKGZpcnN0KSB7CisgICAgICAgIGlmICh1cmwpIGZpcnN0VXJsID0gc3RyZHVwKHVybCk7
CisgICAgICAgIGlmIChoZWFkZXJzKSBmaXJzdEhlYWRlcnMgPSBzdHJkdXAoaGVhZGVycyk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHVybCkgbGFzdFVybCA9IHN0cmR1cCh1cmwpOworICAg
ICAgICBpZiAoaGVhZGVycykgbGFzdEhlYWRlcnMgPSBzdHJkdXAoaGVhZGVycyk7CisgICAgfQog
fQpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1
YnByb2ovUGx1Z2luT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovUGx1Z2luT2JqZWN0LmgJKHJldmlzaW9u
IDE5OTg2KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0lu
LnN1YnByb2ovUGx1Z2luT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDMgKzQzLDQgQEAg
dHlwZWRlZiBzdHJ1Y3QgewogCiBleHRlcm4gTlBDbGFzcyAqZ2V0UGx1Z2luQ2xhc3Modm9pZCk7
CiBleHRlcm4gdm9pZCBoYW5kbGVDYWxsYmFjayhQbHVnaW5PYmplY3QqIG9iamVjdCwgY29uc3Qg
Y2hhciAqdXJsLCBOUFJlYXNvbiByZWFzb24sIHZvaWQgKm5vdGlmeURhdGEpOworZXh0ZXJuIHZv
aWQgbm90aWZ5U3RyZWFtKFBsdWdpbk9iamVjdCogb2JqZWN0LCBib29sIGZpcnN0LCBjb25zdCBj
aGFyICp1cmwsIGNvbnN0IGNoYXIgKmhlYWRlcnMpOwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovbWFpbi5jCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL21h
aW4uYwkocmV2aXNpb24gMTk5ODYpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
TmV0c2NhcGVQbHVnSW4uc3VicHJvai9tYWluLmMJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzky
LDE2IEBAIE5QRXJyb3IgTlBQX1NldFdpbmRvdyhOUFAgaW5zdGFuY2UsIE5QV2kKIAogTlBFcnJv
ciBOUFBfTmV3U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBOUFN0cmVhbSAq
c3RyZWFtLCBOUEJvb2wgc2Vla2FibGUsIHVpbnQxNiAqc3R5cGUpCiB7CisgICAgc3RhdGljIGJv
b2wgYmVlbkNhbGxlZCA9IGZhbHNlOworCiAgICAgKnN0eXBlID0gTlBfQVNGSUxFT05MWTsKKwor
ICAgIFBsdWdpbk9iamVjdCAqb2JqID0gaW5zdGFuY2UtPnBkYXRhOworICAgIGlmIChvYmogJiYg
KGJyb3dzZXItPnZlcnNpb24gPj0gTlBWRVJTX0hBU19SRVNQT05TRV9IRUFERVJTKSkgeworICAg
ICAgICBub3RpZnlTdHJlYW0ob2JqLCAhYmVlbkNhbGxlZCwgc3RyZWFtLT51cmwsIHN0cmVhbS0+
aGVhZGVycyk7CisgICAgfQorCisgICAgYmVlbkNhbGxlZCA9IHRydWU7CiAgICAgcmV0dXJuIE5Q
RVJSX05PX0VSUk9SOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13641</attachid>
            <date>2007-03-14 22:00:05 -0700</date>
            <delta_ts>2007-03-19 17:09:25 -0700</delta_ts>
            <desc>Proposed solution, take 3</desc>
            <filename>NsPluginResponseHeaders.patch</filename>
            <type>text/plain</type>
            <size>27750</size>
            <attacher name="Deneb Meketa">dmeketa</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMjAzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDctMDMtMTQgIERlbmViIE1l
a2V0YSAgPGRtZWtldGFAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MDI5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzQ5OTQ4NDkKKyAgICAgICAgQnVnIDEzMDI5OiBQ
ZXJtaXQgTlBBUEkgcGx1Zy1pbnMgdG8gc2VlIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4KKyAgICAg
ICAgVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZSBKYXZhU2NyaXB0Q29yZSwgYnV0IHRoYXQn
cyB3aGVyZSBucGFwaS5oIGlzLgorCisgICAgICAgICogYmluZGluZ3MvbnBhcGkuaDoKKyAgICAg
ICAgQWRkIGhlYWRlcnMgbWVtYmVyIHRvIE5QU3RyZWFtIHN0cnVjdC4gIEFsc28gaW5jcmVhc2Ug
TlBfVkVSU0lPTl9NSU5PUiB0byAxNywKKyAgICAgICAgc28gdGhhdCBwbHVnLWlucyBjYW4gc2Fm
ZWx5IGRldGVjdCB3aGV0aGVyIHRvIGxvb2sgZm9yIHRoaXMgbWVtYmVyLiAgQWxzbyBhZGQKKyAg
ICAgICAgb3RoZXIgbWlzc2luZyBiaXRzIG9mIG5wYXBpLmggdG8gY2F0Y2ggdXAgZnJvbSAxNCB0
byAxNy4gIFRoaXMgaW5jbHVkZXMKKyAgICAgICAgZmVhdHVyZXMgdGhhdCBhcmUgbm90IGltcGxl
bWVudGVkIGluIFdlYktpdCwgYnV0IHRob3NlIGFyZSBzYWZlbHkgc3R1YmJlZC4KKwogMjAwNy0w
My0xNCAgS2V2aW4gTWNDdWxsb3VnaCAgPGttY2N1bGxvdWdoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBHZW9mZi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBp
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvbnBhcGkuaAkocmV2aXNp
b24gMTk5ODYpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDQsNyArMTA0LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNkZWZpbmUgTlBf
VkVSU0lPTl9NQUpPUiAwCi0jZGVmaW5lIE5QX1ZFUlNJT05fTUlOT1IgMTQKKyNkZWZpbmUgTlBf
VkVSU0lPTl9NSU5PUiAxNwogCiAKIApAQCAtMTg3LDYgKzE4NywxNiBAQCB0eXBlZGVmIHN0cnVj
dCBfTlBTdHJlYW0KICAgICB1aW50MzIgICAgICAgZW5kOwogICAgIHVpbnQzMiAgICAgICBsYXN0
bW9kaWZpZWQ7CiAgICAgdm9pZCogICAgICAgIG5vdGlmeURhdGE7CisgICAgY29uc3QgY2hhciog
IGhlYWRlcnM7ICAgICAgLyogUmVzcG9uc2UgaGVhZGVycyBmcm9tIGhvc3QuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICogRXhpc3RzIG9ubHkgZm9yID49IE5QVkVSU19IQVNfUkVT
UE9OU0VfSEVBREVSUy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBVc2VkIGZv
ciBIVFRQIG9ubHk7IE5VTEwgZm9yIG5vbi1IVFRQLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqIEF2YWlsYWJsZSBmcm9tIE5QUF9OZXdTdHJlYW0gb253YXJkcy4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKiBQbHVnaW4gc2hvdWxkIGNvcHkgdGhpcyBkYXRhIGJl
Zm9yZSBzdG9yaW5nIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEluY2x1
ZGVzIEhUVFAgc3RhdHVzIGxpbmUgYW5kIGFsbCBoZWFkZXJzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqIHByZWZlcmFibHkgdmVyYmF0aW0gYXMgcmVjZWl2ZWQgZnJvbSBzZXJ2
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaGVhZGVycyBmb3JtYXR0ZWQg
YXMgaW4gSFRUUCAoIkhlYWRlcjogVmFsdWUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKiBhbmQgbmV3bGluZXMgKFxuLCBOT1QgXHJcbikgc2VwYXJhdGluZyBsaW5lcy4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUZXJtaW5hdGVkIGJ5IFxuXDAgKE5PVCBc
blxuXDApLiAqLwogfSBOUFN0cmVhbTsKIAogCkBAIC0zMTQsNyArMzI0LDEzIEBAIHR5cGVkZWYg
ZW51bSB7CiAgICAgTlBQVnBsdWdpbk5lZWRzWEVtYmVkICAgICAgICAgPSAxNCwgLyogTm90IGlt
cGxlbWVudGVkIGluIFdlYktpdCAqLwogCiAgICAgLyogR2V0IHRoZSBOUE9iamVjdCBmb3Igc2Ny
aXB0aW5nIHRoZSBwbHVnaW4uICovCi0gICAgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCAg
PSAxNQorICAgIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QgID0gMTUsCisJCisgICAgLyog
R2V0IHRoZSBwbHVnaW4gdmFsdWUgKGFzIFwwLXRlcm1pbmF0ZWQgVVRGLTggc3RyaW5nIGRhdGEp
IGZvcgorICAgICAqIGZvcm0gc3VibWlzc2lvbiBpZiB0aGUgcGx1Z2luIGlzIHBhcnQgb2YgYSBm
b3JtLiBVc2UKKyAgICAgKiBOUE5fTWVtQWxsb2MoKSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRo
ZSBzdHJpbmcgZGF0YS4KKyAgICAgKi8KKyAgICBOUFBWZm9ybVZhbHVlID0gMTYgICAgLyogTm90
IGltcGxlbWVudGVkIGluIFdlYktpdCAqLwogfSBOUFBWYXJpYWJsZTsKIAogLyoKQEAgLTU4Nyw2
ICs2MDMsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgTlBfUG9ydAogI2RlZmluZSBOUFZFUlNfV0lOMTZf
SEFTX0xJVkVDT05ORUNUICAgIDkKICNkZWZpbmUgTlBWRVJTXzY4S19IQVNfTElWRUNPTk5FQ1Qg
ICAgMTEKICNkZWZpbmUgTlBWRVJTX0hBU19XSU5ET1dMRVNTICAgICAgIDExCisjZGVmaW5lIE5Q
VkVSU19IQVNfWFBDT05ORUNUX1NDUklQVElORyAgICAxMyAgLyogTm90IGltcGxlbWVudGVkIGlu
IFdlYktpdCAqLworI2RlZmluZSBOUFZFUlNfSEFTX05QUlVOVElNRV9TQ1JJUFRJTkcgICAgMTQK
KyNkZWZpbmUgTlBWRVJTX0hBU19GT1JNX1ZBTFVFUyAgICAgICAgICAgIDE1ICAvKiBOb3QgaW1w
bGVtZW50ZWQgaW4gV2ViS2l0OyBzZWUgYnVnIDEzMDYxICovCisjZGVmaW5lIE5QVkVSU19IQVNf
UE9QVVBTX0VOQUJMRURfU1RBVEUgICAxNiAgLyogTm90IGltcGxlbWVudGVkIGluIFdlYktpdCAq
LworI2RlZmluZSBOUFZFUlNfSEFTX1JFU1BPTlNFX0hFQURFUlMgICAgICAgMTcKIAogCiAvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwpAQCAtNjc3LDYgKzY5OCw4IEBAIE5QRXJyb3IgICAgIE5QTl9TZXRWYWx1
ZShOUFAgaW5zdGFuY2UsIE4KIHZvaWQgICAgICAgIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAgaW5z
dGFuY2UsIE5QUmVjdCAqaW52YWxpZFJlY3QpOwogdm9pZCAgICAgICAgTlBOX0ludmFsaWRhdGVS
ZWdpb24oTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKTsKIHZvaWQgICAgICAg
IE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpOwordm9pZCAgICAgICAgTlBOX1B1c2hQb3B1
cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCk7ICAvKiBOb3QgaW1w
bGVtZW50ZWQgaW4gV2ViS2l0ICovCit2b2lkICAgICAgICBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0
YXRlKE5QUCBpbnN0YW5jZSk7ICAgICAgICAgICAgICAgICAgIC8qIE5vdCBpbXBsZW1lbnRlZCBp
biBXZWJLaXQgKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9ICAvKiBlbmQgZXh0ZXJuICJDIiAq
LwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gMjAyMDMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAwNy0wMy0xNCAgRGVuZWIgTWVrZXRhICA8
ZG1la2V0YUBhZG9iZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisK
KyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMjkKKyAg
ICAgICAgcmRhcjovL3Byb2JsZW0vNDk5NDg0OQorICAgICAgICBCdWcgMTMwMjk6IFBlcm1pdCBO
UEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJzLgorCisgICAgICAgICog
aHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNlLWhlYWRlcnMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BsdWdpbnMvbnBhcGktcmVzcG9uc2UtaGVhZGVy
cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xv
YWQtbWUtMS50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvcGx1Z2lucy9yZXNvdXJj
ZXMvbG9hZC1tZS0yLnR4dDogQWRkZWQuCisKIDIwMDctMDMtMTQgIEtldmluIE1jQ3VsbG91Z2gg
IDxrbWNjdWxsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYuCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvbnBhcGktcmVzcG9uc2UtaGVhZGVy
cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVn
aW5zL25wYXBpLXJlc3BvbnNlLWhlYWRlcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNlLWhlYWRlcnMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACisKK1Rlc3QgZm9yIGJ1ZyAx
MzAyOTogUGVybWl0IE5QQVBJIHBsdWctaW5zIHRvIHNlZSBIVFRQIHJlc3BvbnNlIGhlYWRlcnMu
CisKK0V4cGVjdGVkIHJlc3VsdCBiZWxvdyBpcyB0d28gSFRUUCByZXNwb25zZSBleHRyYWN0cywg
b25lIGZvciB0aGUgaW5pdGlhbCBzdHJlYW0gc3BlY2lmaWVkIGluIHRoZSAic3JjIiBhdHRyaWJ1
dGUsIHRoZSBvdGhlciBmb3IgYW4gTlBOX0dldFVSTE5vdGlmeSByZXF1ZXN0LiBFYWNoIGJsb2Nr
IHNob3VsZCBjb250YWluIHRoZSBVUkw7IHRoZSBzdGF0dXMgbGluZSwgd2hpY2ggc2hvdWxkIHNh
eSAiSFRUUCAyMDAgT0siOyBhbmQgdGhlIE1JTUUtdHlwZSwgd2hpY2ggc2hvdWxkIHNheSAiQ29u
dGVudC1UeXBlOiB0ZXh0L3BsYWluIi4KKworLS0tLS0tLS0tLQorCitodHRwOi8vW3Zhcmllcywg
bm90IGJlaW5nIHRlc3RlZF0vcGx1Z2lucy9yZXNvdXJjZXMvbG9hZC1tZS0xLnR4dAorSFRUUCAy
MDAgT0sKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCistLS0tLS0tLS0tCisKK2h0dHA6Ly9b
dmFyaWVzLCBub3QgYmVpbmcgdGVzdGVkXS9wbHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTIudHh0
CitIVFRQIDIwMCBPSworQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKwpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNlLWhlYWRlcnMuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvbnBhcGktcmVzcG9uc2Ut
aGVhZGVycy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVn
aW5zL25wYXBpLXJlc3BvbnNlLWhlYWRlcnMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
MiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIHJlczEsIHJlczI7
CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgdHJ5IHsKKyAgICAgICAgcmVzMSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQxIik7CisgICAgICAgIHJlczIgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgicmVzdWx0MiIpOworICAgICAgICBwbGcuZ2V0VVJMTm90aWZ5KCIvcGx1Z2lu
cy9yZXNvdXJjZXMvbG9hZC1tZS0yLnR4dCIsIG51bGwsICJjYWxsYmFjayIpOworICAgIH0gY2F0
Y2ggKGV4KSB7CisgICAgICAgIHNob3dFcnIoIkV4Y2VwdGlvbjogIiArIGV4LmRlc2NyaXB0aW9u
KTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgfQor
fQorCitmdW5jdGlvbiBjYWxsYmFjayhlcnJDb2RlLCBzdHJlYW1EdW1wKSB7CisgICAgdmFyIHBh
cnNlID0gcGFyc2VTdHJlYW1EdW1wKHN0cmVhbUR1bXApOworICAgIGlmIChwYXJzZS5lcnIpIHsK
KyAgICAgICAgc2hvd0VycihwYXJzZS5lcnIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlczEu
aW5uZXJIVE1MID0gbmV3bGluZXNUb0hUTUwocGFyc2UucmVzMSk7CisgICAgICAgIHJlczIuaW5u
ZXJIVE1MID0gbmV3bGluZXNUb0hUTUwocGFyc2UucmVzMik7CisgICAgfQorICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworICAgIH0KK30KKworLy8gRm9ybWF0IHBhc3NlZCBieSBwbHVnaW46IGZv
dXIgZmllbGRzIHNlcGFyYXRlZCBieSBcblxuOgorLy8gRmlyc3QgVVJMOyBmaXJzdCBoZWFkZXIg
YmxvY2s7IGxhc3QgVVJMOyBsYXN0IGhlYWRlciBibG9jay4KK2Z1bmN0aW9uIHBhcnNlU3RyZWFt
RHVtcChzdHJlYW1EdW1wKSB7CisgICAgdmFyIHJ0biA9IHt9OworICAgIGlmICh0eXBlb2Ygc3Ry
ZWFtRHVtcCA9PSAic3RyaW5nIiB8fCAoKHR5cGVvZiBzdHJlYW1EdW1wID09ICJvYmplY3QiKSAm
JiAoc3RyZWFtRHVtcC5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpKSkgeworICAgICAgICB2YXIgcGFy
dHMgPSBzdHJlYW1EdW1wLnNwbGl0KCJcblxuIik7CisgICAgICAgIGlmIChwYXJ0cy5sZW5ndGgg
Pj0gNCkgeworICAgICAgICAgICAgcnRuLnJlczEgPSBnZW5lcmljVVJMKHBhcnRzWzBdKSArICJc
biIgKyBwYXJzZUhlYWRlcnMocGFydHNbMV0pOworICAgICAgICAgICAgcnRuLnJlczIgPSBnZW5l
cmljVVJMKHBhcnRzWzJdKSArICJcbiIgKyBwYXJzZUhlYWRlcnMocGFydHNbM10pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgcnRuLmVyciA9ICJzdHJlYW1EdW1wIGZyb20gcGx1Z2lu
IGRvZXMgbm90IGhhdmUgZXhwZWN0ZWQgZm9ybWF0IjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIHJ0bi5lcnIgPSAic3RyZWFtRHVtcCBmcm9tIHBsdWdpbiBpcyBub3QgYSBzdHJp
bmc6ICIgKyBzdHJlYW1EdW1wOworICAgIH0KKyAgICByZXR1cm4gcnRuOworfQorCitmdW5jdGlv
biBzaG93RXJyKGVycikgeworICAgIHJlczEuaW5uZXJIVE1MID0gIkZBSUxFRCAtICIgKyBlcnI7
CisgICAgcmVzMi5pbm5lckhUTUwgPSAiIjsKK30KKworZnVuY3Rpb24gbmV3bGluZXNUb0hUTUwo
c3RyKSB7CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cbi9nLCAiPGJyPiIpOworfQorCitmdW5j
dGlvbiBnZW5lcmljVVJMKHVybCkgeworICAgIHJldHVybiB1cmwucmVwbGFjZSgvXihodHRwOlwv
XC8pW15cL10rLywgIiQxW3Zhcmllcywgbm90IGJlaW5nIHRlc3RlZF0iKTsKK30KKworZnVuY3Rp
b24gcGFyc2VIZWFkZXJzKGhkcnMpIHsKKyAgICB2YXIgcGFydHMgPSBoZHJzLnNwbGl0KCJcbiIp
OworICAgIHZhciBydG4gPSBwYXJ0c1swXSArICJcbiI7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBwYXJ0cy5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAocGFydHNbaV0ubWF0Y2goL15Db250
ZW50LVR5cGU6LykpIHsKKyAgICAgICAgICAgIHJ0biArPSBwYXJ0c1tpXTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gcnRuOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxv
YWQ9InRlc3QoKSI+Cis8ZW1iZWQgbmFtZT0icGxnIiB0eXBlPSJhcHBsaWNhdGlvbi94LXdlYmtp
dC10ZXN0LW5ldHNjYXBlIiBzcmM9Ii9wbHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTEudHh0Ij48
L2VtYmVkPgorPHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4u
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAyOSI+YnVnIDEzMDI5PGEvPjoKK1Blcm1pdCBOUEFQSSBw
bHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJzLjwvcD4KKzxwPkV4cGVjdGVkIHJl
c3VsdCBiZWxvdyBpcyB0d28gSFRUUCByZXNwb25zZSBleHRyYWN0cywgb25lIGZvciB0aGUgaW5p
dGlhbCBzdHJlYW0gc3BlY2lmaWVkIGluIHRoZSAic3JjIgorYXR0cmlidXRlLCB0aGUgb3RoZXIg
Zm9yIGFuIE5QTl9HZXRVUkxOb3RpZnkgcmVxdWVzdC4gRWFjaCBibG9jayBzaG91bGQgY29udGFp
biB0aGUgVVJMOyB0aGUgc3RhdHVzIGxpbmUsCit3aGljaCBzaG91bGQgc2F5ICJIVFRQIDIwMCBP
SyI7IGFuZCB0aGUgTUlNRS10eXBlLCB3aGljaCBzaG91bGQgc2F5ICJDb250ZW50LVR5cGU6IHRl
eHQvcGxhaW4iLjwvcD4KKzxwPi0tLS0tLS0tLS08L3A+Cis8cCBpZD0icmVzdWx0MSI+UnVubmlu
ZyB0ZXN0LCByZXN1bHQgc2hvdWxkIGFwcGVhciBoZXJlIGluIGEgdmVyeSBzaG9ydCB0aW1lLi4u
PC9wPgorPHA+LS0tLS0tLS0tLTwvcD4KKzxwIGlkPSJyZXN1bHQyIj5SdW5uaW5nIHRlc3QsIHJl
c3VsdCBzaG91bGQgYXBwZWFyIGhlcmUgaW4gYSB2ZXJ5IHNob3J0IHRpbWUuLi48L3A+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3Vy
Y2VzL2xvYWQtbWUtMS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9w
bHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTEudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9wbHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTEudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIgQEAKK0l0J3MgYSBsb25lbHkgZXhpc3RlbmNlIGJlaW5nIGEgdGVzdCBm
aWxlLgorWW91J3JlIHdlbGNvbWUuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdp
bnMvcmVzb3VyY2VzL2xvYWQtbWUtMi50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9wbHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTIudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTIudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKK09oIHllYWguCitOb2JvZHkgbG9va2luJyBhdCBt
ZS4KK0p1c3QgY2hpbGxpbicuCitUZXN0IGZpbGUuCitPaCB5ZWFoLgpJbmRleDogV2ViS2l0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDIwMykK
KysrIFdlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAw
Ny0wMy0xNCAgRGVuZWIgTWVrZXRhICA8ZG1la2V0YUBhZG9iZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMwMjkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vNDk5NDg0OQorICAg
ICAgICBCdWcgMTMwMjk6IFBlcm1pdCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25z
ZSBoZWFkZXJzLgorCisgICAgICAgICogUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJl
YW0uaDogZGVjbGFyYXRpb25zLgorICAgICAgICAqIFBsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1
Z2luU3RyZWFtLm06IG1haW4gaW1wbGVtZW50YXRpb24uCisgICAgICAgICgtW1dlYkJhc2VOZXRz
Y2FwZVBsdWdpblN0cmVhbSBkZWFsbG9jXSk6IGNsZWFudXAuCisgICAgICAgICgtW1dlYkJhc2VO
ZXRzY2FwZVBsdWdpblN0cmVhbSBmaW5hbGl6ZV0pOiBjbGVhbnVwLgorICAgICAgICAoLVtXZWJC
YXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0gc3RhcnRTdHJlYW1SZXNwb25zZVVSTDpleHBlY3RlZENv
bnRlbnRMZW5ndGg6bGFzdE1vZGlmaWVkRGF0ZTpNSU1FVHlwZTpoZWFkZXJzOl0pOgorICAgICAg
ICBQYXNzIGhlYWRlcnMgYWxvbmcuCisgICAgICAgICgtW1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0
cmVhbSBzdGFydFN0cmVhbVdpdGhSZXNwb25zZTpdKToKKyAgICAgICAgTWFpbiB3b3JrIGlzIGhl
cmUuICBFeHRyYWN0IGhlYWRlcnMgZnJvbSBOU0hUVFBVUkxSZXNwb25zZSBvYmplY3QgaW50byBh
IGJ5dGUgc2VxdWVuY2UuCisgICAgICAgIFNlZSBjb21tZW50cyBoZXJlIGFib3V0IGhvdyBpdCB3
b3VsZCBiZSBuaWNlIHRvIGhhdmUgbG93LWxldmVsIGFjY2VzcyB0byB0aGUgSFRUUCByZXNwb25z
ZS4KKyAgICAgICAgKC1bV2ViQmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtIF9kZXN0cm95U3RyZWFt
XSk6IGNsZWFudXAuCisgICAgICAgICogUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3
Lm1tOgorICAgICAgICAoLVtXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGV2YWx1YXRlSmF2YVNj
cmlwdFBsdWdpblJlcXVlc3Q6XSk6CisgICAgICAgIENvbmZvcm0gdG8gbmV3IHN0YXJ0U3RyZWFt
IHBhcmFtcy4gIE5vdCBhcHBsaWNhYmxlIGhlcmUsIHBhc3MgbmlsLgorICAgICAgICAqIFBsdWdp
bnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm06CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1
Z2luUGFja2FnZSBsb2FkXSk6CisgICAgICAgIEZpbGwgaW4gbmV3IGJyb3dzZXJGdW5jcyBtZW1i
ZXJzICh3aXRoIHN0dWJzKSByZXF1aXJlZCBieSBuZXcgbnBhcGkuaCB2ZXJzaW9uLgorICAgICAg
ICAqIFBsdWdpbnMvbnBhcGkubTogTlBBUEkgc3R1YnMuCisgICAgICAgIChOUE5fUHVzaFBvcHVw
c0VuYWJsZWRTdGF0ZSk6CisgICAgICAgIChOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKToKKyAg
ICAgICAgKiBQbHVnaW5zL25wZnVuY3Rpb25zLmg6IE5QQVBJIGRlY2xhcmF0aW9ucy4KKwogMjAw
Ny0wMy0xNCAgRGF2aWQgSGFycmlzb24gIDxoYXJyaXNvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTWFjaWVqLgpJbmRleDogV2ViS2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBl
UGx1Z2luU3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNj
YXBlUGx1Z2luU3RyZWFtLmgJKHJldmlzaW9uIDE5OTg2KQorKysgV2ViS2l0L1BsdWdpbnMvV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcg
QEAKICAgICBjaGFyICpwYXRoOwogICAgIEJPT0wgc2VuZE5vdGlmaWNhdGlvbjsKICAgICB2b2lk
ICpub3RpZnlEYXRhOworICAgIGNoYXIgKmhlYWRlcnM7CiAgICAgV2ViQmFzZU5ldHNjYXBlUGx1
Z2luVmlldyAqcGx1Z2luVmlldzsKICAgICBOUFJlYXNvbiByZWFzb247CiAgICAgQk9PTCBpc1Rl
cm1pbmF0ZWQ7CkBAIC03OCw3ICs3OSw4IEBACiAtICh2b2lkKXN0YXJ0U3RyZWFtUmVzcG9uc2VV
Ukw6KE5TVVJMICopdGhlUmVzcG9uc2VVUkwKICAgICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0
aDoobG9uZyBsb25nKWV4cGVjdGVkQ29udGVudExlbmd0aAogICAgICAgICAgICAgICBsYXN0TW9k
aWZpZWREYXRlOihOU0RhdGUgKilsYXN0TW9kaWZpZWREYXRlCi0gICAgICAgICAgICAgICAgICAg
ICAgTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGU7CisgICAgICAgICAgICAgICAgICAgICAg
TUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgaGVh
ZGVyczooTlNEYXRhICopdGhlSGVhZGVyczsKIAogLy8gY2FuY2VsTG9hZFdpdGhFcnJvciBjYW5j
ZWxzIHRoZSBOU1VSTENvbm5lY3Rpb24gYW5kIGluZm9ybXMgV2ViS2l0IG9mIHRoZSBsb2FkIGVy
cm9yLgogLy8gVGhpcyBtZXRob2QgaXMgb3ZlcnJpZGVuIGJ5IHN1YmNsYXNzZXMuCkluZGV4OiBX
ZWJLaXQvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0ubQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0ubQkocmV2aXNpb24g
MTk5ODYpCisrKyBXZWJLaXQvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0ubQko
d29ya2luZyBjb3B5KQpAQCAtMTI4LDYgKzEyOCw3IEBAIHN0YXRpYyBjaGFyICpDYXJib25QYXRo
RnJvbVBPU0lYUGF0aChjb24KICAgICAKICAgICBmcmVlKCh2b2lkICopc3RyZWFtLnVybCk7CiAg
ICAgZnJlZShwYXRoKTsKKyAgICBmcmVlKGhlYWRlcnMpOwogCiAgICAgW3N1cGVyIGRlYWxsb2Nd
OwogfQpAQCAtMTQzLDYgKzE0NCw3IEBAIHN0YXRpYyBjaGFyICpDYXJib25QYXRoRnJvbVBPU0lY
UGF0aChjb24KIAogICAgIGZyZWUoKHZvaWQgKilzdHJlYW0udXJsKTsKICAgICBmcmVlKHBhdGgp
OworICAgIGZyZWUoaGVhZGVycyk7CiAKICAgICBbc3VwZXIgZmluYWxpemVdOwogfQpAQCAtMjEx
LDYgKzIxMyw3IEBAIHN0YXRpYyBjaGFyICpDYXJib25QYXRoRnJvbVBPU0lYUGF0aChjb24KICAg
ICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0aDoobG9uZyBsb25nKWV4cGVjdGVkQ29udGVudExl
bmd0aAogICAgICAgICAgICAgICBsYXN0TW9kaWZpZWREYXRlOihOU0RhdGUgKilsYXN0TW9kaWZp
ZWREYXRlCiAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6KE5TU3RyaW5nICopdGhlTUlN
RVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczooTlNEYXRhICopdGhlSGVhZGVy
cwogewogICAgIEFTU0VSVCghaXNUZXJtaW5hdGVkKTsKICAgICAKQEAgLTIyNCw3ICsyMjcsMTUg
QEAgc3RhdGljIGNoYXIgKkNhcmJvblBhdGhGcm9tUE9TSVhQYXRoKGNvbgogICAgIHN0cmVhbS5l
bmQgPSBleHBlY3RlZENvbnRlbnRMZW5ndGggPiAwID8gZXhwZWN0ZWRDb250ZW50TGVuZ3RoIDog
MDsKICAgICBzdHJlYW0ubGFzdG1vZGlmaWVkID0gW2xhc3RNb2RpZmllZERhdGUgdGltZUludGVy
dmFsU2luY2UxOTcwXTsKICAgICBzdHJlYW0ubm90aWZ5RGF0YSA9IG5vdGlmeURhdGE7Ci0gICAg
CisKKyAgICBpZiAodGhlSGVhZGVycykgeworICAgICAgICB1bnNpZ25lZCBsZW4gPSBbdGhlSGVh
ZGVycyBsZW5ndGhdOworICAgICAgICBoZWFkZXJzID0gbWFsbG9jKGxlbiArIDEpOworICAgICAg
ICBbdGhlSGVhZGVycyBnZXRCeXRlczpoZWFkZXJzXTsKKyAgICAgICAgaGVhZGVyc1tsZW5dID0g
MDsKKyAgICAgICAgc3RyZWFtLmhlYWRlcnMgPSBoZWFkZXJzOworICAgIH0KKwogICAgIHRyYW5z
ZmVyTW9kZSA9IE5QX05PUk1BTDsKICAgICBvZmZzZXQgPSAwOwogICAgIHJlYXNvbiA9IFdFQl9S
RUFTT05fTk9ORTsKQEAgLTI2NCwxMCArMjc1LDUyIEBAIHN0YXRpYyBjaGFyICpDYXJib25QYXRo
RnJvbVBPU0lYUGF0aChjb24KIAogLSAodm9pZClzdGFydFN0cmVhbVdpdGhSZXNwb25zZTooTlNV
UkxSZXNwb25zZSAqKXIKIHsKKyAgICBOU011dGFibGVEYXRhICp0aGVIZWFkZXJzID0gbmlsOwor
ICAgIGlmIChbciBpc0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11dKSB7Cisg
ICAgICAgIE5TSFRUUFVSTFJlc3BvbnNlICpodHRwUmVzcG9uc2UgPSAoTlNIVFRQVVJMUmVzcG9u
c2UgKilyOworICAgICAgICB0aGVIZWFkZXJzID0gW05TTXV0YWJsZURhdGEgZGF0YVdpdGhDYXBh
Y2l0eToxMDI0XTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBuaWNl
IHRvIGJlIGFibGUgdG8gZ2V0IHRoZSByYXcgSFRUUCBoZWFkZXIgYmxvY2suCisgICAgICAgIC8v
IFRoaXMgaW5jbHVkZXMgdGhlIHJlYWwgc3RhdHVzIHRleHQsCisgICAgICAgIC8vIGFsbCBoZWFk
ZXJzIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyIGFuZCBpbmNsdWRpbmcgZHVwbGljYXRlcywKKyAg
ICAgICAgLy8gYW5kIGFsbCBvcmlnaW5hbCBieXRlcyB2ZXJiYXRpbSwgcmF0aGVyIHRoYW4gc2Vu
dCB0aHJvdWdoIFVuaWNvZGUgdHJhbnNsYXRpb24uCisgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkg
TlNIVFRQVVJMUmVzcG9uc2UgZG9lc24ndCBwcm92aWRlIGFjY2VzcyBhdCB0aGF0IGxvdyBhIGxl
dmVsLgorICAgICAgICAKKyAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6IkhUVFAgIiBs
ZW5ndGg6NV07CisgICAgICAgIGNoYXIgc3RhdHVzU3RyWzEwXTsKKyAgICAgICAgc3ByaW50Zihz
dGF0dXNTdHIsICIlZCIsIFtodHRwUmVzcG9uc2Ugc3RhdHVzQ29kZV0pOworICAgICAgICBbdGhl
SGVhZGVycyBhcHBlbmRCeXRlczpzdGF0dXNTdHIgbGVuZ3RoOnN0cmxlbihzdGF0dXNTdHIpXTsK
KyAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6IiBPS1xuIiBsZW5ndGg6NF07CisKKyAg
ICAgICAgLy8gSEFDSzogcGFzcyB0aGUgaGVhZGVycyB0aHJvdWdoIGFzIFVURi04LgorICAgICAg
ICAvLyBUaGlzIGlzIG5vdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3I7IHdlJ3JlIHN1cHBvc2VkIHRv
IHBhc3Mgb3JpZ2luYWwgYnl0ZXMgdmVyYmF0aW0uCisgICAgICAgIC8vIEJ1dCB3ZSBkb24ndCBo
YXZlIHRoZSBvcmlnaW5hbCBieXRlcywgd2UgaGF2ZSBOU1N0cmluZ3MgYnVpbHQgYnkgdGhlIFVS
TCBsb2FkaW5nIHN5c3RlbS4KKyAgICAgICAgLy8gSXQgaG9wZWZ1bGx5IHNob3VsZG4ndCBtYXR0
ZXIsIHNpbmNlIFJGQzI2MTYvUkZDODIyIHJlcXVpcmUgQVNDSUktb25seSBoZWFkZXJzLAorICAg
ICAgICAvLyBidXQgc3VyZWx5IHNvbWVvbmUgb3V0IHRoZXJlIGlzIHVzaW5nIG5vbi1BU0NJSSBj
aGFyYWN0ZXJzLCBhbmQgaG9wZWZ1bGx5IFVURi04IGlzIGFkZXF1YXRlIGhlcmUuCisgICAgICAg
IC8vIEl0IHNlZW1zIGJldHRlciB0aGFuIE5TQVNDSUlTdHJpbmdFbmNvZGluZywgd2hpY2ggd2ls
bCBsb3NlIGluZm9ybWF0aW9uIGlmIG5vbi1BU0NJSSBpcyB1c2VkLgorCisgICAgICAgIE5TRGlj
dGlvbmFyeSAqaGVhZGVyRGljdCA9IFtodHRwUmVzcG9uc2UgYWxsSGVhZGVyRmllbGRzXTsKKyAg
ICAgICAgTlNBcnJheSAqa2V5cyA9IFtbaGVhZGVyRGljdCBhbGxLZXlzXSBzb3J0ZWRBcnJheVVz
aW5nU2VsZWN0b3I6QHNlbGVjdG9yKGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6KV07CisgICAgICAg
IE5TRW51bWVyYXRvciAqaSA9IFtrZXlzIG9iamVjdEVudW1lcmF0b3JdOworICAgICAgICBOU1N0
cmluZyAqazsKKyAgICAgICAgd2hpbGUgKChrID0gW2kgbmV4dE9iamVjdF0pICE9IG5pbCkgewor
ICAgICAgICAgICAgTlNTdHJpbmcgKnYgPSBbaGVhZGVyRGljdCBvYmplY3RGb3JLZXk6a107Cisg
ICAgICAgICAgICBjb25zdCBjaGFyICprU3RyID0gW2sgY1N0cmluZ1VzaW5nRW5jb2Rpbmc6TlNV
VEY4U3RyaW5nRW5jb2RpbmddOworICAgICAgICAgICAgY29uc3QgY2hhciAqdlN0ciA9IFt2IGNT
dHJpbmdVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICAgICAgICAgIFt0
aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOmtTdHIgbGVuZ3RoOnN0cmxlbihrU3RyKV07CisgICAgICAg
ICAgICBbdGhlSGVhZGVycyBhcHBlbmRCeXRlczoiOiAiIGxlbmd0aDoyXTsKKyAgICAgICAgICAg
IFt0aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOnZTdHIgbGVuZ3RoOnN0cmxlbih2U3RyKV07CisgICAg
ICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmRCeXRlczoiXG4iIGxlbmd0aDoxXTsKKyAgICAgICAg
fQorCisgICAgICAgIFt0aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOiJcMCIgbGVuZ3RoOjFdOworICAg
IH0KKwogICAgIFtzZWxmIHN0YXJ0U3RyZWFtUmVzcG9uc2VVUkw6W3IgVVJMXQogICAgICAgICAg
ICBleHBlY3RlZENvbnRlbnRMZW5ndGg6W3IgZXhwZWN0ZWRDb250ZW50TGVuZ3RoXQogICAgICAg
ICAgICAgICAgIGxhc3RNb2RpZmllZERhdGU6V0tHZXROU1VSTFJlc3BvbnNlTGFzdE1vZGlmaWVk
RGF0ZShyKQotICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6W3IgTUlNRVR5cGVdXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOltyIE1JTUVUeXBlXQorICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlYWRlcnM6dGhlSGVhZGVyc107CiB9CiAKIC0gKHZvaWQpX2Rlc3Ry
b3lTdHJlYW0KQEAgLTMwNCw2ICszNTcsMTAgQEAgc3RhdGljIGNoYXIgKkNhcmJvblBhdGhGcm9t
UE9TSVhQYXRoKGNvbgogICAgICAgICBbcGx1Z2luVmlldyBkaWRDYWxsUGx1Z0luRnVuY3Rpb25d
OwogICAgICAgICBMT0coUGx1Z2lucywgIk5QUF9EZXN0cm95U3RyZWFtIHJlc3BvbnNlVVJMPSVA
IGVycm9yPSVkIiwgcmVzcG9uc2VVUkwsIG5wRXJyKTsKICAgICAgICAgCisgICAgICAgIGZyZWUo
aGVhZGVycyk7CisgICAgICAgIGhlYWRlcnMgPSBOVUxMOworICAgICAgICBzdHJlYW0uaGVhZGVy
cyA9IE5VTEw7CisKICAgICAgICAgc3RyZWFtLm5kYXRhID0gbmlsOwogICAgIH0KICAgICAKSW5k
ZXg6IFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbQkocmV2aXNp
b24gMTk5ODYpCisrKyBXZWJLaXQvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTIxLDcgKzE5MjEsOCBAQCBzdGF0aWMgT1NTdGF0dXMgVFNN
RXZlbnRIYW5kbGVyKEV2ZW50SGFuCiAgICAgICAgIFtzdHJlYW0gc3RhcnRTdHJlYW1SZXNwb25z
ZVVSTDpVUkwKICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOltKU0RhdGEg
bGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZERhdGU6bmlsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAInRleHQvcGxhaW4iXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAidGV4dC9wbGFpbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOm5pbF07CiAgICAgICAgIFtzdHJlYW0gcmVj
ZWl2ZWREYXRhOkpTRGF0YV07CiAgICAgICAgIFtzdHJlYW0gZmluaXNoZWRMb2FkaW5nV2l0aERh
dGE6SlNEYXRhXTsKICAgICAgICAgW3N0cmVhbSByZWxlYXNlXTsKSW5kZXg6IFdlYktpdC9QbHVn
aW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9QbHVn
aW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tCShyZXZpc2lvbiAxOTk4NikKKysrIFdlYktp
dC9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTUsNiArMzk1LDkgQEAgc3RhdGljIFRyYW5zaXRpb25WZWN0b3IgdFZlY3RvckZvckZ1bmN0aQog
ICAgICAgICBicm93c2VyRnVuY3MucmVtb3ZlcHJvcGVydHkgPSAoTlBOX1JlbW92ZVByb3BlcnR5
UHJvY1B0cil0VmVjdG9yRm9yRnVuY3Rpb25Qb2ludGVyKChGdW5jdGlvblBvaW50ZXIpX05QTl9S
ZW1vdmVQcm9wZXJ0eSk7CiAgICAgICAgIGJyb3dzZXJGdW5jcy5zZXRleGNlcHRpb24gPSAoTlBO
X1NldEV4Y2VwdGlvblByb2NQdHIpdFZlY3RvckZvckZ1bmN0aW9uUG9pbnRlcigoRnVuY3Rpb25Q
b2ludGVyKV9OUE5fU2V0RXhjZXB0aW9uKTsKIAorICAgICAgICBicm93c2VyRnVuY3MucHVzaHBv
cHVwc2VuYWJsZWRzdGF0ZSA9IChOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIpdFZl
Y3RvckZvckZ1bmN0aW9uUG9pbnRlcigoRnVuY3Rpb25Qb2ludGVyKU5QTl9QdXNoUG9wdXBzRW5h
YmxlZFN0YXRlKTsKKyAgICAgICAgYnJvd3NlckZ1bmNzLnBvcHBvcHVwc2VuYWJsZWRzdGF0ZSA9
IChOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cil0VmVjdG9yRm9yRnVuY3Rpb25Qb2lu
dGVyKChGdW5jdGlvblBvaW50ZXIpTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZSk7CisKICNpZiAh
TE9HX0RJU0FCTEVECiAgICAgICAgIENGQWJzb2x1dGVUaW1lIG1haW5TdGFydCA9IENGQWJzb2x1
dGVUaW1lR2V0Q3VycmVudCgpOwogI2VuZGlmCkBAIC00ODcsNiArNDkwLDkgQEAgc3RhdGljIFRy
YW5zaXRpb25WZWN0b3IgdFZlY3RvckZvckZ1bmN0aQogICAgICAgICBicm93c2VyRnVuY3Muc2V0
cHJvcGVydHkgPSBfTlBOX1NldFByb3BlcnR5OwogICAgICAgICBicm93c2VyRnVuY3MucmVtb3Zl
cHJvcGVydHkgPSBfTlBOX1JlbW92ZVByb3BlcnR5OwogICAgICAgICBicm93c2VyRnVuY3Muc2V0
ZXhjZXB0aW9uID0gX05QTl9TZXRFeGNlcHRpb247CisgICAgICAgIAorICAgICAgICBicm93c2Vy
RnVuY3MucHVzaHBvcHVwc2VuYWJsZWRzdGF0ZSA9IE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRl
OworICAgICAgICBicm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1BvcFBv
cHVwc0VuYWJsZWRTdGF0ZTsKIAogI2lmICFMT0dfRElTQUJMRUQKICAgICAgICAgQ0ZBYnNvbHV0
ZVRpbWUgaW5pdGlhbGl6ZVN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7CkluZGV4
OiBXZWJLaXQvUGx1Z2lucy9ucGFwaS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9QbHVnaW5zL25w
YXBpLm0JKHJldmlzaW9uIDE5OTg2KQorKysgV2ViS2l0L1BsdWdpbnMvbnBhcGkubQkod29ya2lu
ZyBjb3B5KQpAQCAtMTU4LDMgKzE1OCwxMyBAQCB2b2lkKiBOUE5fR2V0SmF2YVBlZXIoTlBQIGlu
c3RhbmNlKQogICAgIExPRyhQbHVnaW5zLCAiTlBOX0dldEphdmFQZWVyIik7CiAgICAgcmV0dXJu
IE5VTEw7CiB9CisKK3ZvaWQgTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNl
LCBOUEJvb2wgZW5hYmxlZCkKK3sKKyAgICBMT0coUGx1Z2lucywgIk5QTl9QdXNoUG9wdXBzRW5h
YmxlZFN0YXRlIik7Cit9CisKK3ZvaWQgTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5z
dGFuY2UpCit7CisgICAgTE9HKFBsdWdpbnMsICJOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlIik7
Cit9CkluZGV4OiBXZWJLaXQvUGx1Z2lucy9ucGZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9QbHVnaW5zL25wZnVuY3Rpb25zLmgJKHJldmlzaW9uIDE5OTg2KQorKysgV2ViS2l0L1Bs
dWdpbnMvbnBmdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQCB0eXBl
ZGVmIE5QRXJyb3IgKCpOUE5fR2V0VVJMUHJvY1B0cikoTlBQCiB0eXBlZGVmIE5QRXJyb3IgKCpO
UE5fUG9zdFVSTFByb2NQdHIpKE5QUCBpbnN0YW5jZSwgY29uc3QgY2hhciogVVJMLCBjb25zdCBj
aGFyKiB3aW5kb3csIHVpbnQzMiBsZW4sIGNvbnN0IGNoYXIqIGJ1ZiwgTlBCb29sIGZpbGUpOwog
dHlwZWRlZiB2b2lkKiAoKk5QTl9HZXRKYXZhRW52UHJvY1B0cikodm9pZCk7CiB0eXBlZGVmIHZv
aWQqICgqTlBOX0dldEphdmFQZWVyUHJvY1B0cikoTlBQIGluc3RhbmNlKTsKK3R5cGVkZWYgdm9p
ZCAoKk5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cikoTlBQIGluc3RhbmNlLCBOUEJv
b2wgZW5hYmxlZCk7Cit0eXBlZGVmIHZvaWQgKCpOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJv
Y1B0cikoTlBQIGluc3RhbmNlKTsKIAogdHlwZWRlZiB2b2lkICgqTlBOX1JlbGVhc2VWYXJpYW50
VmFsdWVQcm9jUHRyKSAoTlBWYXJpYW50ICp2YXJpYW50KTsKIApAQCAtMTE1LDYgKzExNyw5IEBA
IHR5cGVkZWYgc3RydWN0IF9OUE5ldHNjYXBlRnVuY3MgewogICAgIE5QTl9IYXNNZXRob2RQcm9j
UHRyIGhhc21ldGhvZDsKICAgICBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZVByb2NQdHIgcmVsZWFz
ZXZhcmlhbnR2YWx1ZTsKICAgICBOUE5fU2V0RXhjZXB0aW9uUHJvY1B0ciBzZXRleGNlcHRpb247
CisgICAgCisgICAgTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyIHB1c2hwb3B1cHNl
bmFibGVkc3RhdGU7CisgICAgTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIgcG9wcG9w
dXBzZW5hYmxlZHN0YXRlOwogfSBOUE5ldHNjYXBlRnVuY3M7CiAKIHR5cGVkZWYgc3RydWN0IF9O
UFBsdWdpbkZ1bmNzIHsKSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMjAzKQorKysgV2ViS2l0VG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMDctMDMtMTQgIERl
bmViIE1la2V0YSAgPGRtZWtldGFAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMDI5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzQ5OTQ4NDkKKyAgICAgICAgQnVnIDEz
MDI5OiBQZXJtaXQgTlBBUEkgcGx1Zy1pbnMgdG8gc2VlIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4K
KyAgICAgICAgQ2hhbmdlcyBpbiBXZWJLaXRUb29scyBhcmUgb25seSBmb3IgdGhlIE5QQVBJIHRl
c3QgcGx1Z2luLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0lu
LnN1YnByb2ovUGx1Z2luT2JqZWN0LmM6IG1haW4gdGVzdCBsb2dpYy4KKyAgICAgICAgKHBsdWdp
bkludm9rZSk6IHN1cHBvcnQgbnVsbCB3aW5kb3cgYXJndW1lbnQgZm9yIE5QU3RyZWFtIGNyZWF0
aW9uLgorICAgICAgICAocGx1Z2luQWxsb2NhdGUpOiBpbml0aWFsaXphdGlvbi4KKyAgICAgICAg
KHBsdWdpbkRlYWxsb2NhdGUpOiBjbGVhbnVwLgorICAgICAgICAoaGFuZGxlQ2FsbGJhY2spOiBh
ZGQgc2Vjb25kIEpTIGNhbGxiYWNrIGFyZzogaGVhZGVyIGR1bXAuCisgICAgICAgIChub3RpZnlT
dHJlYW0pOiBhZGRlZDsgaG9vayBmcm9tIE5QUF9OZXdTdHJlYW0gdG8gcmVjb3JkIGhlYWRlcnMu
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovUGx1
Z2luT2JqZWN0Lmg6IGRlY2xhcmF0aW9ucy4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0
TmV0c2NhcGVQbHVnSW4uc3VicHJvai9tYWluLmM6IGNhbGwgbmV3IGhlYWRlciBob29rLgorICAg
ICAgICAoTlBQX05ld1N0cmVhbSk6IGNhbGwgbmV3IGhlYWRlciBob29rLgorCiAyMDA3LTAzLTEz
ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFj
aWVqLgpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0lu
LnN1YnByb2ovUGx1Z2luT2JqZWN0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovUGx1Z2luT2JqZWN0LmMJKHJldmlz
aW9uIDE5OTg2KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1
Z0luLnN1YnByb2ovUGx1Z2luT2JqZWN0LmMJKHdvcmtpbmcgY29weSkKQEAgLTIxMiwxNiArMjEy
LDE5IEBAIHN0YXRpYyBib29sIHBsdWdpbkludm9rZShOUE9iamVjdCAqaGVhZGUKICAgICAgICAg
Vk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0g
ZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0dFVF9VUkxf
Tk9USUZZXSkgewotICAgICAgICBpZiAoYXJnQ291bnQgPT0gMyAmJiBOUFZBUklBTlRfSVNfU1RS
SU5HKGFyZ3NbMF0pICYmIE5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1sxXSkgJiYgTlBWQVJJQU5U
X0lTX1NUUklORyhhcmdzWzJdKSkgeworICAgICAgICBpZiAoYXJnQ291bnQgPT0gMworICAgICAg
ICAgICYmIE5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1swXSkKKyAgICAgICAgICAmJiAoTlBWQVJJ
QU5UX0lTX1NUUklORyhhcmdzWzFdKSB8fCBOUFZBUklBTlRfSVNfTlVMTChhcmdzWzFdKSkKKyAg
ICAgICAgICAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMl0pKSB7CiAgICAgICAgICAgICBO
UFVURjgqIHVybFN0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzWzBdKTsK
LSAgICAgICAgICAgIE5QVVRGOCogdGFyZ2V0U3RyaW5nID0gY3JlYXRlQ1N0cmluZ0Zyb21OUFZh
cmlhbnQoJmFyZ3NbMV0pOyAgICAgICAgICAgIAorICAgICAgICAgICAgTlBVVEY4KiB0YXJnZXRT
dHJpbmcgPSAoTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzFdKSA/IGNyZWF0ZUNTdHJpbmdGcm9t
TlBWYXJpYW50KCZhcmdzWzFdKSA6IE5VTEwpOwogICAgICAgICAgICAgTlBVVEY4KiBjYWxsYmFj
a1N0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzWzJdKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgTlBJZGVudGlmaWVyIGNhbGxiYWNrSWRlbnRpZmllciA9IGJyb3dz
ZXItPmdldHN0cmluZ2lkZW50aWZpZXIoY2FsbGJhY2tTdHJpbmcpOwogICAgICAgICAgICAgYnJv
d3Nlci0+Z2V0dXJsbm90aWZ5KG9iai0+bnBwLCB1cmxTdHJpbmcsIHRhcmdldFN0cmluZywgY2Fs
bGJhY2tJZGVudGlmaWVyKTsKIAogICAgICAgICAgICAgZnJlZSh1cmxTdHJpbmcpOwotICAgICAg
ICAgICAgZnJlZSh0YXJnZXRTdHJpbmcpOworICAgICAgICAgICAgaWYgKHRhcmdldFN0cmluZykg
ZnJlZSh0YXJnZXRTdHJpbmcpOwogICAgICAgICAgICAgZnJlZShjYWxsYmFja1N0cmluZyk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwpAQCAt
MjU1LDExICsyNTgsMjMgQEAgc3RhdGljIE5QT2JqZWN0ICpwbHVnaW5BbGxvY2F0ZShOUFAgbnBw
LAogICAgIAogICAgIG5ld0luc3RhbmNlLT5ldmVudExvZ2dpbmcgPSBGQUxTRTsKICAgICAKKyAg
ICBuZXdJbnN0YW5jZS0+Zmlyc3RVcmwgPSBOVUxMOworICAgIG5ld0luc3RhbmNlLT5maXJzdEhl
YWRlcnMgPSBOVUxMOworICAgIG5ld0luc3RhbmNlLT5sYXN0VXJsID0gTlVMTDsKKyAgICBuZXdJ
bnN0YW5jZS0+bGFzdEhlYWRlcnMgPSBOVUxMOworICAgIAogICAgIHJldHVybiAoTlBPYmplY3Qg
KiluZXdJbnN0YW5jZTsKIH0KIAotc3RhdGljIHZvaWQgcGx1Z2luRGVhbGxvY2F0ZShOUE9iamVj
dCAqb2JqKSAKK3N0YXRpYyB2b2lkIHBsdWdpbkRlYWxsb2NhdGUoTlBPYmplY3QgKmhlYWRlcikK
IHsKKyAgICBQbHVnaW5PYmplY3QgKm9iaiA9IChQbHVnaW5PYmplY3QgKiloZWFkZXI7CisKKyAg
ICBpZiAob2JqLT5maXJzdFVybCkgZnJlZShvYmotPmZpcnN0VXJsKTsKKyAgICBpZiAob2JqLT5m
aXJzdEhlYWRlcnMpIGZyZWUob2JqLT5maXJzdEhlYWRlcnMpOworICAgIGlmIChvYmotPmxhc3RV
cmwpIGZyZWUob2JqLT5sYXN0VXJsKTsKKyAgICBpZiAob2JqLT5sYXN0SGVhZGVycykgZnJlZShv
YmotPmxhc3RIZWFkZXJzKTsKKwogICAgIGZyZWUob2JqKTsKIH0KIApAQCAtMjY3LDcgKzI4Miw3
IEBAIHZvaWQgaGFuZGxlQ2FsbGJhY2soUGx1Z2luT2JqZWN0KiBvYmplY3QKIHsKICAgICBhc3Nl
cnQob2JqZWN0KTsKICAgICAKLSAgICBOUFZhcmlhbnQgYXJnc1sxXTsKKyAgICBOUFZhcmlhbnQg
YXJnc1syXTsKICAgICAKICAgICBOUE9iamVjdCAqd2luZG93U2NyaXB0T2JqZWN0OwogICAgIGJy
b3dzZXItPmdldHZhbHVlKG9iamVjdC0+bnBwLCBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0
LCAmd2luZG93U2NyaXB0T2JqZWN0KTsKQEAgLTI3Niw3ICsyOTEsMzggQEAgdm9pZCBoYW5kbGVD
YWxsYmFjayhQbHVnaW5PYmplY3QqIG9iamVjdAogCiAgICAgSU5UMzJfVE9fTlBWQVJJQU5UKHJl
YXNvbiwgYXJnc1swXSk7CiAKKyAgICBjaGFyICpzdHJIZHIgPSBOVUxMOworICAgIGlmIChvYmpl
Y3QtPmZpcnN0VXJsICYmIG9iamVjdC0+Zmlyc3RIZWFkZXJzICYmIG9iamVjdC0+bGFzdFVybCAm
JiBvYmplY3QtPmxhc3RIZWFkZXJzKSB7CisgICAgICAgIC8vIEZvcm1hdCBleHBlY3RlZCBieSBK
YXZhU2NyaXB0IHZhbGlkYXRvcjogZm91ciBmaWVsZHMgc2VwYXJhdGVkIGJ5IFxuXG46CisgICAg
ICAgIC8vIEZpcnN0IFVSTDsgZmlyc3QgaGVhZGVyIGJsb2NrOyBsYXN0IFVSTDsgbGFzdCBoZWFk
ZXIgYmxvY2suCisgICAgICAgIC8vIE5vdGUgdGhhdCBoZWFkZXIgYmxvY2tzIGFscmVhZHkgZW5k
IHdpdGggXG4gZHVlIHRvIGhvdyBOUFN0cmVhbTo6aGVhZGVycyB3b3Jrcy4KKyAgICAgICAgaW50
IGxlbiA9IHN0cmxlbihvYmplY3QtPmZpcnN0VXJsKSArIDIKKyAgICAgICAgICAgICsgc3RybGVu
KG9iamVjdC0+Zmlyc3RIZWFkZXJzKSArIDEKKyAgICAgICAgICAgICsgc3RybGVuKG9iamVjdC0+
bGFzdFVybCkgKyAyCisgICAgICAgICAgICArIHN0cmxlbihvYmplY3QtPmxhc3RIZWFkZXJzKSAr
IDE7CisgICAgICAgIHN0ckhkciA9IG1hbGxvYyhsZW4gKyAxKTsKKyAgICAgICAgc3ByaW50Zihz
dHJIZHIsICIlc1xuXG4lc1xuJXNcblxuJXNcbiIsIG9iamVjdC0+Zmlyc3RVcmwsIG9iamVjdC0+
Zmlyc3RIZWFkZXJzLCBvYmplY3QtPmxhc3RVcmwsIG9iamVjdC0+bGFzdEhlYWRlcnMpOworICAg
ICAgICBTVFJJTkdOX1RPX05QVkFSSUFOVChzdHJIZHIsIGxlbiwgYXJnc1sxXSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgTlVMTF9UT19OUFZBUklBTlQoYXJnc1sxXSk7CisgICAgfQorCiAgICAg
TlBWYXJpYW50IGJyb3dzZXJSZXN1bHQ7Ci0gICAgYnJvd3Nlci0+aW52b2tlKG9iamVjdC0+bnBw
LCB3aW5kb3dTY3JpcHRPYmplY3QsIGNhbGxiYWNrSWRlbnRpZmllciwgYXJncywgMSwgJmJyb3dz
ZXJSZXN1bHQpOworICAgIGJyb3dzZXItPmludm9rZShvYmplY3QtPm5wcCwgd2luZG93U2NyaXB0
T2JqZWN0LCBjYWxsYmFja0lkZW50aWZpZXIsIGFyZ3MsIDIsICZicm93c2VyUmVzdWx0KTsKICAg
ICBicm93c2VyLT5yZWxlYXNldmFyaWFudHZhbHVlKCZicm93c2VyUmVzdWx0KTsKKworICAgIGlm
IChzdHJIZHIpIGZyZWUoc3RySGRyKTsKK30KKwordm9pZCBub3RpZnlTdHJlYW0oUGx1Z2luT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqaGVhZGVycykKK3sKKyAg
ICBpZiAob2JqZWN0LT5maXJzdFVybCA9PSBOVUxMKSB7CisgICAgICAgIGlmICh1cmwpIG9iamVj
dC0+Zmlyc3RVcmwgPSBzdHJkdXAodXJsKTsKKyAgICAgICAgaWYgKGhlYWRlcnMpIG9iamVjdC0+
Zmlyc3RIZWFkZXJzID0gc3RyZHVwKGhlYWRlcnMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlm
IChvYmplY3QtPmxhc3RVcmwpIGZyZWUob2JqZWN0LT5sYXN0VXJsKTsKKyAgICAgICAgaWYgKG9i
amVjdC0+bGFzdEhlYWRlcnMpIGZyZWUob2JqZWN0LT5sYXN0SGVhZGVycyk7CisgICAgICAgIG9i
amVjdC0+bGFzdFVybCA9ICh1cmwgPyBzdHJkdXAodXJsKSA6IE5VTEwpOworICAgICAgICBvYmpl
Y3QtPmxhc3RIZWFkZXJzID0gKGhlYWRlcnMgPyBzdHJkdXAoaGVhZGVycykgOiBOVUxMKTsKKyAg
ICB9CiB9CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVn
SW4uc3VicHJvai9QbHVnaW5PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9QbHVnaW5PYmplY3QuaAkocmV2
aXNpb24gMTk5ODYpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQ
bHVnSW4uc3VicHJvai9QbHVnaW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzks
MTIgQEAgdHlwZWRlZiBzdHJ1Y3QgewogICAgIE5QT2JqZWN0IGhlYWRlcjsKICAgICBOUFAgbnBw
OwogICAgIEJvb2xlYW4gZXZlbnRMb2dnaW5nOworICAgIGNoYXIqIGZpcnN0VXJsOworICAgIGNo
YXIqIGZpcnN0SGVhZGVyczsKKyAgICBjaGFyKiBsYXN0VXJsOworICAgIGNoYXIqIGxhc3RIZWFk
ZXJzOwogfSBQbHVnaW5PYmplY3Q7CiAKIGV4dGVybiBOUENsYXNzICpnZXRQbHVnaW5DbGFzcyh2
b2lkKTsKIGV4dGVybiB2b2lkIGhhbmRsZUNhbGxiYWNrKFBsdWdpbk9iamVjdCogb2JqZWN0LCBj
b25zdCBjaGFyICp1cmwsIE5QUmVhc29uIHJlYXNvbiwgdm9pZCAqbm90aWZ5RGF0YSk7CitleHRl
cm4gdm9pZCBub3RpZnlTdHJlYW0oUGx1Z2luT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIgKnVy
bCwgY29uc3QgY2hhciAqaGVhZGVycyk7CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9tYWluLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovbWFpbi5jCShy
ZXZpc2lvbiAxOTk4NikKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2Fw
ZVBsdWdJbi5zdWJwcm9qL21haW4uYwkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsMTIgQEAg
TlBFcnJvciBOUFBfU2V0V2luZG93KE5QUCBpbnN0YW5jZSwgTlBXaQogTlBFcnJvciBOUFBfTmV3
U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBOUFN0cmVhbSAqc3RyZWFtLCBO
UEJvb2wgc2Vla2FibGUsIHVpbnQxNiAqc3R5cGUpCiB7CiAgICAgKnN0eXBlID0gTlBfQVNGSUxF
T05MWTsKKworICAgIFBsdWdpbk9iamVjdCAqb2JqID0gaW5zdGFuY2UtPnBkYXRhOworICAgIGlm
IChvYmogJiYgKGJyb3dzZXItPnZlcnNpb24gPj0gTlBWRVJTX0hBU19SRVNQT05TRV9IRUFERVJT
KSkgeworICAgICAgICBub3RpZnlTdHJlYW0ob2JqLCBzdHJlYW0tPnVybCwgc3RyZWFtLT5oZWFk
ZXJzKTsKKyAgICB9CisKICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CiB9CiAK
</data>
<flag name="review"
          id="5419"
          type_id="1"
          status="-"
          setter="mrowe"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13710</attachid>
            <date>2007-03-19 17:13:51 -0700</date>
            <delta_ts>2007-03-20 16:44:45 -0700</delta_ts>
            <desc>Proposed solution, take 4</desc>
            <filename>NsPluginResponseHeaders.patch</filename>
            <type>text/plain</type>
            <size>27300</size>
            <attacher name="Deneb Meketa">dmeketa</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzI4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDctMDMtMTkgIERlbmViIE1l
a2V0YSAgPGRtZWtldGFAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MDI5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzQ5OTQ4NDkKKyAgICAgICAgQnVnIDEzMDI5OiBQ
ZXJtaXQgTlBBUEkgcGx1Zy1pbnMgdG8gc2VlIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4KKyAgICAg
ICAgVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZSBKYXZhU2NyaXB0Q29yZSwgYnV0IHRoYXQn
cyB3aGVyZSBucGFwaS5oIGlzLgorCisgICAgICAgICogYmluZGluZ3MvbnBhcGkuaDoKKyAgICAg
ICAgQWRkIGhlYWRlcnMgbWVtYmVyIHRvIE5QU3RyZWFtIHN0cnVjdC4gIEFsc28gaW5jcmVhc2Ug
TlBfVkVSU0lPTl9NSU5PUiB0byAxNywKKyAgICAgICAgc28gdGhhdCBwbHVnLWlucyBjYW4gc2Fm
ZWx5IGRldGVjdCB3aGV0aGVyIHRvIGxvb2sgZm9yIHRoaXMgbWVtYmVyLiAgQWxzbyBhZGQKKyAg
ICAgICAgb3RoZXIgbWlzc2luZyBiaXRzIG9mIG5wYXBpLmggdG8gY2F0Y2ggdXAgZnJvbSAxNCB0
byAxNy4gIFRoaXMgaW5jbHVkZXMKKyAgICAgICAgZmVhdHVyZXMgdGhhdCBhcmUgbm90IGltcGxl
bWVudGVkIGluIFdlYktpdCwgYnV0IHRob3NlIGFyZSBzYWZlbHkgc3R1YmJlZC4KKwogMjAwNy0w
My0xOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgR2VvZmYuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBpLmgJKHJldmlzaW9uIDE5OTg2KQor
KysgSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvbnBhcGkuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0
LDcgKzEwNCw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAjZGVmaW5lIE5QX1ZFUlNJT05fTUFK
T1IgMAotI2RlZmluZSBOUF9WRVJTSU9OX01JTk9SIDE0CisjZGVmaW5lIE5QX1ZFUlNJT05fTUlO
T1IgMTcKIAogCiAKQEAgLTE4Nyw2ICsxODcsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgX05QU3RyZWFt
CiAgICAgdWludDMyICAgICAgIGVuZDsKICAgICB1aW50MzIgICAgICAgbGFzdG1vZGlmaWVkOwog
ICAgIHZvaWQqICAgICAgICBub3RpZnlEYXRhOworICAgIGNvbnN0IGNoYXIqICBoZWFkZXJzOyAg
ICAgIC8qIFJlc3BvbnNlIGhlYWRlcnMgZnJvbSBob3N0LgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqIEV4aXN0cyBvbmx5IGZvciA+PSBOUFZFUlNfSEFTX1JFU1BPTlNFX0hFQURF
UlMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogVXNlZCBmb3IgSFRUUCBvbmx5
OyBOVUxMIGZvciBub24tSFRUUC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBB
dmFpbGFibGUgZnJvbSBOUFBfTmV3U3RyZWFtIG9ud2FyZHMuCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICogUGx1Z2luIHNob3VsZCBjb3B5IHRoaXMgZGF0YSBiZWZvcmUgc3Rvcmlu
ZyBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBJbmNsdWRlcyBIVFRQIHN0
YXR1cyBsaW5lIGFuZCBhbGwgaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKiBwcmVmZXJhYmx5IHZlcmJhdGltIGFzIHJlY2VpdmVkIGZyb20gc2VydmVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqIGhlYWRlcnMgZm9ybWF0dGVkIGFzIGluIEhUVFAg
KCJIZWFkZXI6IFZhbHVlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYW5k
IG5ld2xpbmVzIChcbiwgTk9UIFxyXG4pIHNlcGFyYXRpbmcgbGluZXMuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICogVGVybWluYXRlZCBieSBcblwwIChOT1QgXG5cblwwKS4gKi8K
IH0gTlBTdHJlYW07CiAKIApAQCAtMzE0LDcgKzMyNCwxMyBAQCB0eXBlZGVmIGVudW0gewogICAg
IE5QUFZwbHVnaW5OZWVkc1hFbWJlZCAgICAgICAgID0gMTQsIC8qIE5vdCBpbXBsZW1lbnRlZCBp
biBXZWJLaXQgKi8KIAogICAgIC8qIEdldCB0aGUgTlBPYmplY3QgZm9yIHNjcmlwdGluZyB0aGUg
cGx1Z2luLiAqLwotICAgIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QgID0gMTUKKyAgICBO
UFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0ICA9IDE1LAorCQorICAgIC8qIEdldCB0aGUgcGx1
Z2luIHZhbHVlIChhcyBcMC10ZXJtaW5hdGVkIFVURi04IHN0cmluZyBkYXRhKSBmb3IKKyAgICAg
KiBmb3JtIHN1Ym1pc3Npb24gaWYgdGhlIHBsdWdpbiBpcyBwYXJ0IG9mIGEgZm9ybS4gVXNlCisg
ICAgICogTlBOX01lbUFsbG9jKCkgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgc3RyaW5nIGRh
dGEuCisgICAgICovCisgICAgTlBQVmZvcm1WYWx1ZSA9IDE2ICAgIC8qIE5vdCBpbXBsZW1lbnRl
ZCBpbiBXZWJLaXQgKi8KIH0gTlBQVmFyaWFibGU7CiAKIC8qCkBAIC01ODcsNiArNjAzLDExIEBA
IHR5cGVkZWYgc3RydWN0IE5QX1BvcnQKICNkZWZpbmUgTlBWRVJTX1dJTjE2X0hBU19MSVZFQ09O
TkVDVCAgICA5CiAjZGVmaW5lIE5QVkVSU182OEtfSEFTX0xJVkVDT05ORUNUICAgIDExCiAjZGVm
aW5lIE5QVkVSU19IQVNfV0lORE9XTEVTUyAgICAgICAxMQorI2RlZmluZSBOUFZFUlNfSEFTX1hQ
Q09OTkVDVF9TQ1JJUFRJTkcgICAgMTMgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8K
KyNkZWZpbmUgTlBWRVJTX0hBU19OUFJVTlRJTUVfU0NSSVBUSU5HICAgIDE0CisjZGVmaW5lIE5Q
VkVSU19IQVNfRk9STV9WQUxVRVMgICAgICAgICAgICAxNSAgLyogTm90IGltcGxlbWVudGVkIGlu
IFdlYktpdDsgc2VlIGJ1ZyAxMzA2MSAqLworI2RlZmluZSBOUFZFUlNfSEFTX1BPUFVQU19FTkFC
TEVEX1NUQVRFICAgMTYgIC8qIE5vdCBpbXBsZW1lbnRlZCBpbiBXZWJLaXQgKi8KKyNkZWZpbmUg
TlBWRVJTX0hBU19SRVNQT05TRV9IRUFERVJTICAgICAgIDE3CiAKIAogLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KQEAgLTY3Nyw2ICs2OTgsOCBAQCBOUEVycm9yICAgICBOUE5fU2V0VmFsdWUoTlBQIGluc3Rh
bmNlLCBOCiB2b2lkICAgICAgICBOUE5fSW52YWxpZGF0ZVJlY3QoTlBQIGluc3RhbmNlLCBOUFJl
Y3QgKmludmFsaWRSZWN0KTsKIHZvaWQgICAgICAgIE5QTl9JbnZhbGlkYXRlUmVnaW9uKE5QUCBp
bnN0YW5jZSwgTlBSZWdpb24gaW52YWxpZFJlZ2lvbik7CiB2b2lkICAgICAgICBOUE5fRm9yY2VS
ZWRyYXcoTlBQIGluc3RhbmNlKTsKK3ZvaWQgICAgICAgIE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0
YXRlKE5QUCBpbnN0YW5jZSwgTlBCb29sIGVuYWJsZWQpOyAgLyogTm90IGltcGxlbWVudGVkIGlu
IFdlYktpdCAqLwordm9pZCAgICAgICAgTlBOX1BvcFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5z
dGFuY2UpOyAgICAgICAgICAgICAgICAgICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICov
CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfSAgLyogZW5kIGV4dGVybiAiQyIgKi8KSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIwMzI4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMDctMDMtMTkgIERlbmViIE1la2V0YSAgPGRtZWtldGFAYWRv
YmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDI5CisgICAgICAgIHJkYXI6
Ly9wcm9ibGVtLzQ5OTQ4NDkKKyAgICAgICAgQnVnIDEzMDI5OiBQZXJtaXQgTlBBUEkgcGx1Zy1p
bnMgdG8gc2VlIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4KKworICAgICAgICAqIGh0dHAvdGVzdHMv
cGx1Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNlLWhlYWRlcnMuaHRtbDogQWRk
ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9wbHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTEudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUt
Mi50eHQ6IEFkZGVkLgorCiAyMDA3LTAzLTE5ICBKdXN0aW4gR2FyY2lhICA8anVzdGluLmdhcmNp
YUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgZGFyaW4KSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvbnBhcGktcmVz
cG9uc2UtaGVhZGVycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3BsdWdpbnMvbnBhcGktcmVzcG9uc2UtaGVhZGVycy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKKworVGVzdCBmb3IgYnVnIDEzMDI5OiBQZXJtaXQg
TlBBUEkgcGx1Zy1pbnMgdG8gc2VlIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4KKworRXhwZWN0ZWQg
cmVzdWx0IGJlbG93IGlzIHR3byBIVFRQIHJlc3BvbnNlIGV4dHJhY3RzLCBvbmUgZm9yIHRoZSBp
bml0aWFsIHN0cmVhbSBzcGVjaWZpZWQgaW4gdGhlICJzcmMiIGF0dHJpYnV0ZSwgdGhlIG90aGVy
IGZvciBhbiBOUE5fR2V0VVJMTm90aWZ5IHJlcXVlc3QuIEVhY2ggYmxvY2sgc2hvdWxkIGNvbnRh
aW4gdGhlIFVSTDsgdGhlIHN0YXR1cyBsaW5lLCB3aGljaCBzaG91bGQgc2F5ICJIVFRQIDIwMCBP
SyI7IGFuZCB0aGUgTUlNRS10eXBlLCB3aGljaCBzaG91bGQgc2F5ICJDb250ZW50LVR5cGU6IHRl
eHQvcGxhaW4iLgorCistLS0tLS0tLS0tCisKK2h0dHA6Ly9bdmFyaWVzLCBub3QgYmVpbmcgdGVz
dGVkXS9wbHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTEudHh0CitIVFRQIDIwMCBPSworQ29udGVu
dC1UeXBlOiB0ZXh0L3BsYWluCisKKy0tLS0tLS0tLS0KKworaHR0cDovL1t2YXJpZXMsIG5vdCBi
ZWluZyB0ZXN0ZWRdL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMi50eHQKK0hUVFAgMjAwIE9L
CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3BsdWdpbnMvbnBhcGktcmVzcG9uc2UtaGVhZGVycy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvbnBhcGktcmVz
cG9uc2UtaGVhZGVycy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk4IEBACis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgcmVzMSwgcmVzMjsKKworZnVuY3Rpb24g
dGVzdCgpCit7CisgICAgdHJ5IHsKKyAgICAgICAgcmVzMSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJyZXN1bHQxIik7CisgICAgICAgIHJlczIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
cmVzdWx0MiIpOworICAgICAgICBwbGcuZ2V0VVJMTm90aWZ5KCIvcGx1Z2lucy9yZXNvdXJjZXMv
bG9hZC1tZS0yLnR4dCIsIG51bGwsICJjYWxsYmFjayIpOworICAgIH0gY2F0Y2ggKGV4KSB7Cisg
ICAgICAgIHNob3dFcnIoIkV4Y2VwdGlvbjogIiArIGV4LmRlc2NyaXB0aW9uKTsKKyAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNhbGxiYWNrKGVy
ckNvZGUsIHN0cmVhbUR1bXApCit7CisgICAgdmFyIHBhcnNlID0gcGFyc2VTdHJlYW1EdW1wKHN0
cmVhbUR1bXApOworICAgIGlmIChwYXJzZS5lcnIpCisgICAgICAgIHNob3dFcnIocGFyc2UuZXJy
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgcmVzMS5pbm5lckhUTUwgPSBuZXdsaW5lc1RvSFRNTChw
YXJzZS5yZXMxKTsKKyAgICAgICAgcmVzMi5pbm5lckhUTUwgPSBuZXdsaW5lc1RvSFRNTChwYXJz
ZS5yZXMyKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKKy8vIEZvcm1h
dCBwYXNzZWQgYnkgcGx1Z2luOiBmb3VyIGZpZWxkcyBzZXBhcmF0ZWQgYnkgXG5cbjoKKy8vIEZp
cnN0IFVSTDsgZmlyc3QgaGVhZGVyIGJsb2NrOyBsYXN0IFVSTDsgbGFzdCBoZWFkZXIgYmxvY2su
CitmdW5jdGlvbiBwYXJzZVN0cmVhbUR1bXAoc3RyZWFtRHVtcCkKK3sKKyAgICB2YXIgcnRuID0g
e307CisKKyAgICBpZiAodHlwZW9mIHN0cmVhbUR1bXAgPT0gInN0cmluZyIgfHwgKCh0eXBlb2Yg
c3RyZWFtRHVtcCA9PSAib2JqZWN0IikgJiYgKHN0cmVhbUR1bXAuY29uc3RydWN0b3IgPT0gU3Ry
aW5nKSkpIHsKKyAgICAgICAgdmFyIHBhcnRzID0gc3RyZWFtRHVtcC5zcGxpdCgiXG5cbiIpOwor
ICAgICAgICBpZiAocGFydHMubGVuZ3RoID49IDQpIHsKKyAgICAgICAgICAgIHJ0bi5yZXMxID0g
Z2VuZXJpY1VSTChwYXJ0c1swXSkgKyAiXG4iICsgcGFyc2VIZWFkZXJzKHBhcnRzWzFdKTsKKyAg
ICAgICAgICAgIHJ0bi5yZXMyID0gZ2VuZXJpY1VSTChwYXJ0c1syXSkgKyAiXG4iICsgcGFyc2VI
ZWFkZXJzKHBhcnRzWzNdKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBydG4uZXJyID0g
InN0cmVhbUR1bXAgZnJvbSBwbHVnaW4gZG9lcyBub3QgaGF2ZSBleHBlY3RlZCBmb3JtYXQiOwor
ICAgIH0gZWxzZQorICAgICAgICBydG4uZXJyID0gInN0cmVhbUR1bXAgZnJvbSBwbHVnaW4gaXMg
bm90IGEgc3RyaW5nOiAiICsgc3RyZWFtRHVtcDsKKworICAgIHJldHVybiBydG47Cit9CisKK2Z1
bmN0aW9uIHNob3dFcnIoZXJyKQoreworICAgIHJlczEuaW5uZXJIVE1MID0gIkZBSUxFRCAtICIg
KyBlcnI7CisgICAgcmVzMi5pbm5lckhUTUwgPSAiIjsKK30KKworZnVuY3Rpb24gbmV3bGluZXNU
b0hUTUwoc3RyKQoreworICAgIHJldHVybiBzdHIucmVwbGFjZSgvXG4vZywgIjxicj4iKTsKK30K
KworZnVuY3Rpb24gZ2VuZXJpY1VSTCh1cmwpCit7CisgICAgcmV0dXJuIHVybC5yZXBsYWNlKC9e
KGh0dHA6XC9cLylbXlwvXSsvLCAiJDFbdmFyaWVzLCBub3QgYmVpbmcgdGVzdGVkXSIpOworfQor
CitmdW5jdGlvbiBwYXJzZUhlYWRlcnMoaGRycykKK3sKKyAgICB2YXIgcGFydHMgPSBoZHJzLnNw
bGl0KCJcbiIpOworICAgIHZhciBydG4gPSBwYXJ0c1swXSArICJcbiI7CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKQorICAgICAgICBpZiAocGFydHNbaV0ubWF0
Y2goL15Db250ZW50LVR5cGU6LykpCisgICAgICAgICAgICBydG4gKz0gcGFydHNbaV07CisKKyAg
ICByZXR1cm4gcnRuOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InRlc3Qo
KSI+Cis8ZW1iZWQgbmFtZT0icGxnIiB0eXBlPSJhcHBsaWNhdGlvbi94LXdlYmtpdC10ZXN0LW5l
dHNjYXBlIiBzcmM9Ii9wbHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTEudHh0Ij48L2VtYmVkPgor
PHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzAyOSI+YnVnIDEzMDI5PGEvPjoKK1Blcm1pdCBOUEFQSSBwbHVnLWlucyB0
byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJzLjwvcD4KKzxwPkV4cGVjdGVkIHJlc3VsdCBiZWxv
dyBpcyB0d28gSFRUUCByZXNwb25zZSBleHRyYWN0cywgb25lIGZvciB0aGUgaW5pdGlhbCBzdHJl
YW0gc3BlY2lmaWVkIGluIHRoZSAic3JjIgorYXR0cmlidXRlLCB0aGUgb3RoZXIgZm9yIGFuIE5Q
Tl9HZXRVUkxOb3RpZnkgcmVxdWVzdC4gRWFjaCBibG9jayBzaG91bGQgY29udGFpbiB0aGUgVVJM
OyB0aGUgc3RhdHVzIGxpbmUsCit3aGljaCBzaG91bGQgc2F5ICJIVFRQIDIwMCBPSyI7IGFuZCB0
aGUgTUlNRS10eXBlLCB3aGljaCBzaG91bGQgc2F5ICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW4i
LjwvcD4KKzxwPi0tLS0tLS0tLS08L3A+Cis8cCBpZD0icmVzdWx0MSI+UnVubmluZyB0ZXN0LCBy
ZXN1bHQgc2hvdWxkIGFwcGVhciBoZXJlIGluIGEgdmVyeSBzaG9ydCB0aW1lLi4uPC9wPgorPHA+
LS0tLS0tLS0tLTwvcD4KKzxwIGlkPSJyZXN1bHQyIj5SdW5uaW5nIHRlc3QsIHJlc3VsdCBzaG91
bGQgYXBwZWFyIGhlcmUgaW4gYSB2ZXJ5IHNob3J0IHRpbWUuLi48L3A+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQt
bWUtMS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL3Jl
c291cmNlcy9sb2FkLW1lLTEudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9wbHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTEudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDIgQEAKK0l0J3MgYSBsb25lbHkgZXhpc3RlbmNlIGJlaW5nIGEgdGVzdCBmaWxlLgorWW91
J3JlIHdlbGNvbWUuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3Vy
Y2VzL2xvYWQtbWUtMi50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9w
bHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTIudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9wbHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTIudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUgQEAKK09oIHllYWguCitOb2JvZHkgbG9va2luJyBhdCBtZS4KK0p1c3Qg
Y2hpbGxpbicuCitUZXN0IGZpbGUuCitPaCB5ZWFoLgpJbmRleDogV2ViS2l0L0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDMyOSkKKysrIFdlYktp
dC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAwNy0wMy0xOSAg
RGVuZWIgTWVrZXRhICA8ZG1la2V0YUBhZG9iZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMwMjkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vNDk5NDg0OQorICAgICAgICBCdWcg
MTMwMjk6IFBlcm1pdCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJz
LgorCisgICAgICAgICogUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0uaDogZGVj
bGFyYXRpb25zLgorICAgICAgICAqIFBsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFt
Lm06IG1haW4gaW1wbGVtZW50YXRpb24uCisgICAgICAgICgtW1dlYkJhc2VOZXRzY2FwZVBsdWdp
blN0cmVhbSBkZWFsbG9jXSk6IGNsZWFudXAuCisgICAgICAgICgtW1dlYkJhc2VOZXRzY2FwZVBs
dWdpblN0cmVhbSBmaW5hbGl6ZV0pOiBjbGVhbnVwLgorICAgICAgICAoLVtXZWJCYXNlTmV0c2Nh
cGVQbHVnaW5TdHJlYW0gc3RhcnRTdHJlYW1SZXNwb25zZVVSTDpleHBlY3RlZENvbnRlbnRMZW5n
dGg6bGFzdE1vZGlmaWVkRGF0ZTpNSU1FVHlwZTpoZWFkZXJzOl0pOgorICAgICAgICBQYXNzIGhl
YWRlcnMgYWxvbmcuCisgICAgICAgICgtW1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbSBzdGFy
dFN0cmVhbVdpdGhSZXNwb25zZTpdKToKKyAgICAgICAgTWFpbiB3b3JrIGlzIGhlcmUuICBFeHRy
YWN0IGhlYWRlcnMgZnJvbSBOU0hUVFBVUkxSZXNwb25zZSBvYmplY3QgaW50byBhIGJ5dGUgc2Vx
dWVuY2UuCisgICAgICAgIFNlZSBjb21tZW50cyBoZXJlIGFib3V0IGhvdyBpdCB3b3VsZCBiZSBu
aWNlIHRvIGhhdmUgbG93LWxldmVsIGFjY2VzcyB0byB0aGUgSFRUUCByZXNwb25zZS4KKyAgICAg
ICAgKC1bV2ViQmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtIF9kZXN0cm95U3RyZWFtXSk6IGNsZWFu
dXAuCisgICAgICAgICogUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tOgorICAg
ICAgICAoLVtXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGV2YWx1YXRlSmF2YVNjcmlwdFBsdWdp
blJlcXVlc3Q6XSk6CisgICAgICAgIENvbmZvcm0gdG8gbmV3IHN0YXJ0U3RyZWFtIHBhcmFtcy4g
IE5vdCBhcHBsaWNhYmxlIGhlcmUsIHBhc3MgbmlsLgorICAgICAgICAqIFBsdWdpbnMvV2ViTmV0
c2NhcGVQbHVnaW5QYWNrYWdlLm06CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luUGFja2Fn
ZSBsb2FkXSk6CisgICAgICAgIEZpbGwgaW4gbmV3IGJyb3dzZXJGdW5jcyBtZW1iZXJzICh3aXRo
IHN0dWJzKSByZXF1aXJlZCBieSBuZXcgbnBhcGkuaCB2ZXJzaW9uLgorICAgICAgICAqIFBsdWdp
bnMvbnBhcGkubTogTlBBUEkgc3R1YnMuCisgICAgICAgIChOUE5fUHVzaFBvcHVwc0VuYWJsZWRT
dGF0ZSk6CisgICAgICAgIChOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKiBQ
bHVnaW5zL25wZnVuY3Rpb25zLmg6IE5QQVBJIGRlY2xhcmF0aW9ucy4KKwogMjAwNy0wMy0xOSAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgKiBFbmdsaXNoLmxwcm9q
L1N0cmluZ3NOb3RUb0JlTG9jYWxpemVkLnR4dDogVXBkYXRlIGZvciByZWNlbnQgY2hhbmdlcy4K
SW5kZXg6IFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbS5oCShy
ZXZpc2lvbiAxOTk4NikKKysrIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0
cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAgICAgY2hhciAqcGF0aDsK
ICAgICBCT09MIHNlbmROb3RpZmljYXRpb247CiAgICAgdm9pZCAqbm90aWZ5RGF0YTsKKyAgICBj
aGFyICpoZWFkZXJzOwogICAgIFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgKnBsdWdpblZpZXc7
CiAgICAgTlBSZWFzb24gcmVhc29uOwogICAgIEJPT0wgaXNUZXJtaW5hdGVkOwpAQCAtNzgsNyAr
NzksOCBAQAogLSAodm9pZClzdGFydFN0cmVhbVJlc3BvbnNlVVJMOihOU1VSTCAqKXRoZVJlc3Bv
bnNlVVJMCiAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGg6KGxvbmcgbG9uZylleHBlY3Rl
ZENvbnRlbnRMZW5ndGgKICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkRGF0ZTooTlNEYXRlICop
bGFzdE1vZGlmaWVkRGF0ZQotICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOihOU1N0cmlu
ZyAqKU1JTUVUeXBlOworICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOihOU1N0cmluZyAq
KU1JTUVUeXBlCisgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6KE5TRGF0YSAqKXRoZUhl
YWRlcnM7CiAKIC8vIGNhbmNlbExvYWRXaXRoRXJyb3IgY2FuY2VscyB0aGUgTlNVUkxDb25uZWN0
aW9uIGFuZCBpbmZvcm1zIFdlYktpdCBvZiB0aGUgbG9hZCBlcnJvci4KIC8vIFRoaXMgbWV0aG9k
IGlzIG92ZXJyaWRlbiBieSBzdWJjbGFzc2VzLgpJbmRleDogV2ViS2l0L1BsdWdpbnMvV2ViQmFz
ZU5ldHNjYXBlUGx1Z2luU3RyZWFtLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdpbnMvV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtLm0JKHJldmlzaW9uIDE5OTg2KQorKysgV2ViS2l0L1Bs
dWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtLm0JKHdvcmtpbmcgY29weSkKQEAgLTEy
OCw2ICsxMjgsNyBAQCBzdGF0aWMgY2hhciAqQ2FyYm9uUGF0aEZyb21QT1NJWFBhdGgoY29uCiAg
ICAgCiAgICAgZnJlZSgodm9pZCAqKXN0cmVhbS51cmwpOwogICAgIGZyZWUocGF0aCk7CisgICAg
ZnJlZShoZWFkZXJzKTsKIAogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KQEAgLTE0Myw2ICsxNDQs
NyBAQCBzdGF0aWMgY2hhciAqQ2FyYm9uUGF0aEZyb21QT1NJWFBhdGgoY29uCiAKICAgICBmcmVl
KCh2b2lkICopc3RyZWFtLnVybCk7CiAgICAgZnJlZShwYXRoKTsKKyAgICBmcmVlKGhlYWRlcnMp
OwogCiAgICAgW3N1cGVyIGZpbmFsaXplXTsKIH0KQEAgLTIxMSw2ICsyMTMsNyBAQCBzdGF0aWMg
Y2hhciAqQ2FyYm9uUGF0aEZyb21QT1NJWFBhdGgoY29uCiAgICAgICAgICBleHBlY3RlZENvbnRl
bnRMZW5ndGg6KGxvbmcgbG9uZylleHBlY3RlZENvbnRlbnRMZW5ndGgKICAgICAgICAgICAgICAg
bGFzdE1vZGlmaWVkRGF0ZTooTlNEYXRlICopbGFzdE1vZGlmaWVkRGF0ZQogICAgICAgICAgICAg
ICAgICAgICAgIE1JTUVUeXBlOihOU1N0cmluZyAqKXRoZU1JTUVUeXBlCisgICAgICAgICAgICAg
ICAgICAgICAgIGhlYWRlcnM6KE5TRGF0YSAqKXRoZUhlYWRlcnMKIHsKICAgICBBU1NFUlQoIWlz
VGVybWluYXRlZCk7CiAgICAgCkBAIC0yMjQsNyArMjI3LDE1IEBAIHN0YXRpYyBjaGFyICpDYXJi
b25QYXRoRnJvbVBPU0lYUGF0aChjb24KICAgICBzdHJlYW0uZW5kID0gZXhwZWN0ZWRDb250ZW50
TGVuZ3RoID4gMCA/IGV4cGVjdGVkQ29udGVudExlbmd0aCA6IDA7CiAgICAgc3RyZWFtLmxhc3Rt
b2RpZmllZCA9IFtsYXN0TW9kaWZpZWREYXRlIHRpbWVJbnRlcnZhbFNpbmNlMTk3MF07CiAgICAg
c3RyZWFtLm5vdGlmeURhdGEgPSBub3RpZnlEYXRhOwotICAgIAorCisgICAgaWYgKHRoZUhlYWRl
cnMpIHsKKyAgICAgICAgdW5zaWduZWQgbGVuID0gW3RoZUhlYWRlcnMgbGVuZ3RoXTsKKyAgICAg
ICAgaGVhZGVycyA9IG1hbGxvYyhsZW4gKyAxKTsKKyAgICAgICAgW3RoZUhlYWRlcnMgZ2V0Qnl0
ZXM6aGVhZGVyc107CisgICAgICAgIGhlYWRlcnNbbGVuXSA9IDA7CisgICAgICAgIHN0cmVhbS5o
ZWFkZXJzID0gaGVhZGVyczsKKyAgICB9CisKICAgICB0cmFuc2Zlck1vZGUgPSBOUF9OT1JNQUw7
CiAgICAgb2Zmc2V0ID0gMDsKICAgICByZWFzb24gPSBXRUJfUkVBU09OX05PTkU7CkBAIC0yNjQs
MTAgKzI3NSw1MCBAQCBzdGF0aWMgY2hhciAqQ2FyYm9uUGF0aEZyb21QT1NJWFBhdGgoY29uCiAK
IC0gKHZvaWQpc3RhcnRTdHJlYW1XaXRoUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyCiB7Cisg
ICAgTlNNdXRhYmxlRGF0YSAqdGhlSGVhZGVycyA9IG5pbDsKKyAgICBpZiAoW3IgaXNLaW5kT2ZD
bGFzczpbTlNIVFRQVVJMUmVzcG9uc2UgY2xhc3NdXSkgeworICAgICAgICBOU0hUVFBVUkxSZXNw
b25zZSAqaHR0cFJlc3BvbnNlID0gKE5TSFRUUFVSTFJlc3BvbnNlICopcjsKKyAgICAgICAgdGhl
SGVhZGVycyA9IFtOU011dGFibGVEYXRhIGRhdGFXaXRoQ2FwYWNpdHk6MTAyNF07CisgICAgICAg
IAorICAgICAgICAvLyBGSVhNRTogaXQgd291bGQgYmUgbmljZSB0byBiZSBhYmxlIHRvIGdldCB0
aGUgcmF3IEhUVFAgaGVhZGVyIGJsb2NrLgorICAgICAgICAvLyBUaGlzIGluY2x1ZGVzIHRoZSBI
VFRQIHZlcnNpb24sIHRoZSByZWFsIHN0YXR1cyB0ZXh0LAorICAgICAgICAvLyBhbGwgaGVhZGVy
cyBpbiB0aGVpciBvcmlnaW5hbCBvcmRlciBhbmQgaW5jbHVkaW5nIGR1cGxpY2F0ZXMsCisgICAg
ICAgIC8vIGFuZCBhbGwgb3JpZ2luYWwgYnl0ZXMgdmVyYmF0aW0sIHJhdGhlciB0aGFuIHNlbnQg
dGhyb3VnaCBVbmljb2RlIHRyYW5zbGF0aW9uLgorICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5IE5T
SFRUUFVSTFJlc3BvbnNlIGRvZXNuJ3QgcHJvdmlkZSBhY2Nlc3MgYXQgdGhhdCBsb3cgYSBsZXZl
bC4KKyAgICAgICAgCisgICAgICAgIFt0aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOiJIVFRQICIgbGVu
Z3RoOjVdOworICAgICAgICBjaGFyIHN0YXR1c1N0clsxMF07CisgICAgICAgIHNwcmludGYoc3Rh
dHVzU3RyLCAiJWQiLCBbaHR0cFJlc3BvbnNlIHN0YXR1c0NvZGVdKTsKKyAgICAgICAgW3RoZUhl
YWRlcnMgYXBwZW5kQnl0ZXM6c3RhdHVzU3RyIGxlbmd0aDpzdHJsZW4oc3RhdHVzU3RyKV07Cisg
ICAgICAgIFt0aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOiIgT0tcbiIgbGVuZ3RoOjRdOworCisgICAg
ICAgIC8vIEhBQ0s6IHBhc3MgdGhlIGhlYWRlcnMgdGhyb3VnaCBhcyBVVEYtOC4KKyAgICAgICAg
Ly8gVGhpcyBpcyBub3QgdGhlIGludGVuZGVkIGJlaGF2aW9yOyB3ZSdyZSBzdXBwb3NlZCB0byBw
YXNzIG9yaWdpbmFsIGJ5dGVzIHZlcmJhdGltLgorICAgICAgICAvLyBCdXQgd2UgZG9uJ3QgaGF2
ZSB0aGUgb3JpZ2luYWwgYnl0ZXMsIHdlIGhhdmUgTlNTdHJpbmdzIGJ1aWx0IGJ5IHRoZSBVUkwg
bG9hZGluZyBzeXN0ZW0uCisgICAgICAgIC8vIEl0IGhvcGVmdWxseSBzaG91bGRuJ3QgbWF0dGVy
LCBzaW5jZSBSRkMyNjE2L1JGQzgyMiByZXF1aXJlIEFTQ0lJLW9ubHkgaGVhZGVycywKKyAgICAg
ICAgLy8gYnV0IHN1cmVseSBzb21lb25lIG91dCB0aGVyZSBpcyB1c2luZyBub24tQVNDSUkgY2hh
cmFjdGVycywgYW5kIGhvcGVmdWxseSBVVEYtOCBpcyBhZGVxdWF0ZSBoZXJlLgorICAgICAgICAv
LyBJdCBzZWVtcyBiZXR0ZXIgdGhhbiBOU0FTQ0lJU3RyaW5nRW5jb2RpbmcsIHdoaWNoIHdpbGwg
bG9zZSBpbmZvcm1hdGlvbiBpZiBub24tQVNDSUkgaXMgdXNlZC4KKworICAgICAgICBOU0RpY3Rp
b25hcnkgKmhlYWRlckRpY3QgPSBbaHR0cFJlc3BvbnNlIGFsbEhlYWRlckZpZWxkc107CisgICAg
ICAgIE5TQXJyYXkgKmtleXMgPSBbW2hlYWRlckRpY3QgYWxsS2V5c10gc29ydGVkQXJyYXlVc2lu
Z1NlbGVjdG9yOkBzZWxlY3RvcihjYXNlSW5zZW5zaXRpdmVDb21wYXJlOildOworICAgICAgICBO
U0VudW1lcmF0b3IgKmkgPSBba2V5cyBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICAgICAgTlNTdHJp
bmcgKms7CisgICAgICAgIHdoaWxlICgoayA9IFtpIG5leHRPYmplY3RdKSAhPSBuaWwpIHsKKyAg
ICAgICAgICAgIE5TU3RyaW5nICp2ID0gW2hlYWRlckRpY3Qgb2JqZWN0Rm9yS2V5OmtdOworICAg
ICAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kRGF0YTpbayBkYXRhVXNpbmdFbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZ11dOworICAgICAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6
IjogIiBsZW5ndGg6Ml07CisgICAgICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmREYXRhOlt2IGRh
dGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07CisgICAgICAgICAgICBbdGhl
SGVhZGVycyBhcHBlbmRCeXRlczoiXG4iIGxlbmd0aDoxXTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIHN0YXJ0U3RyZWFtUmVzcG9uc2VVUkw6Li4uIHdpbGwgbnVsbC10ZXJtaW5hdGUuCisgICAg
fQorCiAgICAgW3NlbGYgc3RhcnRTdHJlYW1SZXNwb25zZVVSTDpbciBVUkxdCiAgICAgICAgICAg
IGV4cGVjdGVkQ29udGVudExlbmd0aDpbciBleHBlY3RlZENvbnRlbnRMZW5ndGhdCiAgICAgICAg
ICAgICAgICAgbGFzdE1vZGlmaWVkRGF0ZTpXS0dldE5TVVJMUmVzcG9uc2VMYXN0TW9kaWZpZWRE
YXRlKHIpCi0gICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpbciBNSU1FVHlwZV1dOwor
ICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6W3IgTUlNRVR5cGVdCisgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVhZGVyczp0aGVIZWFkZXJzXTsKIH0KIAogLSAodm9pZClfZGVzdHJv
eVN0cmVhbQpAQCAtMzA0LDYgKzM1NSwxMCBAQCBzdGF0aWMgY2hhciAqQ2FyYm9uUGF0aEZyb21Q
T1NJWFBhdGgoY29uCiAgICAgICAgIFtwbHVnaW5WaWV3IGRpZENhbGxQbHVnSW5GdW5jdGlvbl07
CiAgICAgICAgIExPRyhQbHVnaW5zLCAiTlBQX0Rlc3Ryb3lTdHJlYW0gcmVzcG9uc2VVUkw9JUAg
ZXJyb3I9JWQiLCByZXNwb25zZVVSTCwgbnBFcnIpOwogICAgICAgICAKKyAgICAgICAgZnJlZSho
ZWFkZXJzKTsKKyAgICAgICAgaGVhZGVycyA9IE5VTEw7CisgICAgICAgIHN0cmVhbS5oZWFkZXJz
ID0gTlVMTDsKKwogICAgICAgICBzdHJlYW0ubmRhdGEgPSBuaWw7CiAgICAgfQogICAgIApJbmRl
eDogV2ViS2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCShyZXZpc2lv
biAxOTk4NikKKysrIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0J
KHdvcmtpbmcgY29weSkKQEAgLTE5MjEsNyArMTkyMSw4IEBAIHN0YXRpYyBPU1N0YXR1cyBUU01F
dmVudEhhbmRsZXIoRXZlbnRIYW4KICAgICAgICAgW3N0cmVhbSBzdGFydFN0cmVhbVJlc3BvbnNl
VVJMOlVSTAogICAgICAgICAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGg6W0pTRGF0YSBs
ZW5ndGhdCiAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkRGF0ZTpuaWwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAidGV4dC9wbGFpbiJdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJ0ZXh0L3BsYWluIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6bmlsXTsKICAgICAgICAgW3N0cmVhbSByZWNl
aXZlZERhdGE6SlNEYXRhXTsKICAgICAgICAgW3N0cmVhbSBmaW5pc2hlZExvYWRpbmdXaXRoRGF0
YTpKU0RhdGFdOwogICAgICAgICBbc3RyZWFtIHJlbGVhc2VdOwpJbmRleDogV2ViS2l0L1BsdWdp
bnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdp
bnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0JKHJldmlzaW9uIDE5OTg2KQorKysgV2ViS2l0
L1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0JKHdvcmtpbmcgY29weSkKQEAgLTM5
NSw2ICszOTUsOSBAQCBzdGF0aWMgVHJhbnNpdGlvblZlY3RvciB0VmVjdG9yRm9yRnVuY3RpCiAg
ICAgICAgIGJyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IChOUE5fUmVtb3ZlUHJvcGVydHlQ
cm9jUHRyKXRWZWN0b3JGb3JGdW5jdGlvblBvaW50ZXIoKEZ1bmN0aW9uUG9pbnRlcilfTlBOX1Jl
bW92ZVByb3BlcnR5KTsKICAgICAgICAgYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IChOUE5f
U2V0RXhjZXB0aW9uUHJvY1B0cil0VmVjdG9yRm9yRnVuY3Rpb25Qb2ludGVyKChGdW5jdGlvblBv
aW50ZXIpX05QTl9TZXRFeGNlcHRpb24pOwogCisgICAgICAgIGJyb3dzZXJGdW5jcy5wdXNocG9w
dXBzZW5hYmxlZHN0YXRlID0gKE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cil0VmVj
dG9yRm9yRnVuY3Rpb25Qb2ludGVyKChGdW5jdGlvblBvaW50ZXIpTlBOX1B1c2hQb3B1cHNFbmFi
bGVkU3RhdGUpOworICAgICAgICBicm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0g
KE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKXRWZWN0b3JGb3JGdW5jdGlvblBvaW50
ZXIoKEZ1bmN0aW9uUG9pbnRlcilOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKTsKKwogI2lmICFM
T0dfRElTQUJMRUQKICAgICAgICAgQ0ZBYnNvbHV0ZVRpbWUgbWFpblN0YXJ0ID0gQ0ZBYnNvbHV0
ZVRpbWVHZXRDdXJyZW50KCk7CiAjZW5kaWYKQEAgLTQ4Nyw2ICs0OTAsOSBAQCBzdGF0aWMgVHJh
bnNpdGlvblZlY3RvciB0VmVjdG9yRm9yRnVuY3RpCiAgICAgICAgIGJyb3dzZXJGdW5jcy5zZXRw
cm9wZXJ0eSA9IF9OUE5fU2V0UHJvcGVydHk7CiAgICAgICAgIGJyb3dzZXJGdW5jcy5yZW1vdmVw
cm9wZXJ0eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7CiAgICAgICAgIGJyb3dzZXJGdW5jcy5zZXRl
eGNlcHRpb24gPSBfTlBOX1NldEV4Y2VwdGlvbjsKKyAgICAgICAgCisgICAgICAgIGJyb3dzZXJG
dW5jcy5wdXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7
CisgICAgICAgIGJyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9w
dXBzRW5hYmxlZFN0YXRlOwogCiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICBDRkFic29sdXRl
VGltZSBpbml0aWFsaXplU3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKSW5kZXg6
IFdlYktpdC9QbHVnaW5zL25wYXBpLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdpbnMvbnBh
cGkubQkocmV2aXNpb24gMTk5ODYpCisrKyBXZWJLaXQvUGx1Z2lucy9ucGFwaS5tCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTgsMyArMTU4LDEzIEBAIHZvaWQqIE5QTl9HZXRKYXZhUGVlcihOUFAgaW5z
dGFuY2UpCiAgICAgTE9HKFBsdWdpbnMsICJOUE5fR2V0SmF2YVBlZXIiKTsKICAgICByZXR1cm4g
TlVMTDsKIH0KKwordm9pZCBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2Us
IE5QQm9vbCBlbmFibGVkKQoreworICAgIExPRyhQbHVnaW5zLCAiTlBOX1B1c2hQb3B1cHNFbmFi
bGVkU3RhdGUiKTsKK30KKwordm9pZCBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0
YW5jZSkKK3sKKyAgICBMT0coUGx1Z2lucywgIk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUiKTsK
K30KSW5kZXg6IFdlYktpdC9QbHVnaW5zL25wZnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L1BsdWdpbnMvbnBmdW5jdGlvbnMuaAkocmV2aXNpb24gMTk5ODYpCisrKyBXZWJLaXQvUGx1
Z2lucy9ucGZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBAIHR5cGVk
ZWYgTlBFcnJvciAoKk5QTl9HZXRVUkxQcm9jUHRyKShOUFAKIHR5cGVkZWYgTlBFcnJvciAoKk5Q
Tl9Qb3N0VVJMUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNo
YXIqIHdpbmRvdywgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSk7CiB0
eXBlZGVmIHZvaWQqICgqTlBOX0dldEphdmFFbnZQcm9jUHRyKSh2b2lkKTsKIHR5cGVkZWYgdm9p
ZCogKCpOUE5fR2V0SmF2YVBlZXJQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiB2b2lk
ICgqTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QQm9v
bCBlbmFibGVkKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9j
UHRyKShOUFAgaW5zdGFuY2UpOwogCiB0eXBlZGVmIHZvaWQgKCpOUE5fUmVsZWFzZVZhcmlhbnRW
YWx1ZVByb2NQdHIpIChOUFZhcmlhbnQgKnZhcmlhbnQpOwogCkBAIC0xMTUsNiArMTE3LDkgQEAg
dHlwZWRlZiBzdHJ1Y3QgX05QTmV0c2NhcGVGdW5jcyB7CiAgICAgTlBOX0hhc01ldGhvZFByb2NQ
dHIgaGFzbWV0aG9kOwogICAgIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlUHJvY1B0ciByZWxlYXNl
dmFyaWFudHZhbHVlOwogICAgIE5QTl9TZXRFeGNlcHRpb25Qcm9jUHRyIHNldGV4Y2VwdGlvbjsK
KyAgICAKKyAgICBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIgcHVzaHBvcHVwc2Vu
YWJsZWRzdGF0ZTsKKyAgICBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0ciBwb3Bwb3B1
cHNlbmFibGVkc3RhdGU7CiB9IE5QTmV0c2NhcGVGdW5jczsKIAogdHlwZWRlZiBzdHJ1Y3QgX05Q
UGx1Z2luRnVuY3MgewpJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzMjgpCisrKyBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAwNy0wMy0xOSAgRGVu
ZWIgTWVrZXRhICA8ZG1la2V0YUBhZG9iZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMwMjkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vNDk5NDg0OQorICAgICAgICBCdWcgMTMw
Mjk6IFBlcm1pdCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJzLgor
ICAgICAgICBDaGFuZ2VzIGluIFdlYktpdFRvb2xzIGFyZSBvbmx5IGZvciB0aGUgTlBBUEkgdGVz
dCBwbHVnaW4uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4u
c3VicHJvai9QbHVnaW5PYmplY3QuYzogbWFpbiB0ZXN0IGxvZ2ljLgorICAgICAgICAocGx1Z2lu
SW52b2tlKTogc3VwcG9ydCBudWxsIHdpbmRvdyBhcmd1bWVudCBmb3IgTlBTdHJlYW0gY3JlYXRp
b24uCisgICAgICAgIChwbHVnaW5BbGxvY2F0ZSk6IGluaXRpYWxpemF0aW9uLgorICAgICAgICAo
cGx1Z2luRGVhbGxvY2F0ZSk6IGNsZWFudXAuCisgICAgICAgIChoYW5kbGVDYWxsYmFjayk6IGFk
ZCBzZWNvbmQgSlMgY2FsbGJhY2sgYXJnOiBoZWFkZXIgZHVtcC4KKyAgICAgICAgKG5vdGlmeVN0
cmVhbSk6IGFkZGVkOyBob29rIGZyb20gTlBQX05ld1N0cmVhbSB0byByZWNvcmQgaGVhZGVycy4K
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9QbHVn
aW5PYmplY3QuaDogZGVjbGFyYXRpb25zLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RO
ZXRzY2FwZVBsdWdJbi5zdWJwcm9qL21haW4uYzogY2FsbCBuZXcgaGVhZGVyIGhvb2suCisgICAg
ICAgIChOUFBfTmV3U3RyZWFtKTogY2FsbCBuZXcgaGVhZGVyIGhvb2suCisKIDIwMDctMDMtMTkg
IERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSB0aGUgbWlu
aW11bSBmb250IHNpemUgcHJlZiB0byBtYXRjaCB0aGUgYWN0dWFsIGRlZmF1bHQgc2V0dGluZyBp
biBTYWZhcmkuICBJdCBzaG91bGQgaGF2ZSBiZWVuIDEKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVjdC5jCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5z
dWJwcm9qL1BsdWdpbk9iamVjdC5jCShyZXZpc2lvbiAxOTk4NikKKysrIFdlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVjdC5jCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTIsOSArMjEyLDEyIEBAIHN0YXRpYyBib29sIHBsdWdpbkludm9r
ZShOUE9iamVjdCAqaGVhZGUKICAgICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJ
ZGVudGlmaWVyc1tJRF9URVNUX0dFVF9VUkxfTk9USUZZXSkgewotICAgICAgICBpZiAoYXJnQ291
bnQgPT0gMyAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMF0pICYmIE5QVkFSSUFOVF9JU19T
VFJJTkcoYXJnc1sxXSkgJiYgTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzJdKSkgeworICAgICAg
ICBpZiAoYXJnQ291bnQgPT0gMworICAgICAgICAgICYmIE5QVkFSSUFOVF9JU19TVFJJTkcoYXJn
c1swXSkKKyAgICAgICAgICAmJiAoTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzFdKSB8fCBOUFZB
UklBTlRfSVNfTlVMTChhcmdzWzFdKSkKKyAgICAgICAgICAmJiBOUFZBUklBTlRfSVNfU1RSSU5H
KGFyZ3NbMl0pKSB7CiAgICAgICAgICAgICBOUFVURjgqIHVybFN0cmluZyA9IGNyZWF0ZUNTdHJp
bmdGcm9tTlBWYXJpYW50KCZhcmdzWzBdKTsKLSAgICAgICAgICAgIE5QVVRGOCogdGFyZ2V0U3Ry
aW5nID0gY3JlYXRlQ1N0cmluZ0Zyb21OUFZhcmlhbnQoJmFyZ3NbMV0pOyAgICAgICAgICAgIAor
ICAgICAgICAgICAgTlBVVEY4KiB0YXJnZXRTdHJpbmcgPSAoTlBWQVJJQU5UX0lTX1NUUklORyhh
cmdzWzFdKSA/IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzWzFdKSA6IE5VTEwpOwog
ICAgICAgICAgICAgTlBVVEY4KiBjYWxsYmFja1N0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBW
YXJpYW50KCZhcmdzWzJdKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTlBJZGVudGlmaWVy
IGNhbGxiYWNrSWRlbnRpZmllciA9IGJyb3dzZXItPmdldHN0cmluZ2lkZW50aWZpZXIoY2FsbGJh
Y2tTdHJpbmcpOwpAQCAtMjU1LDExICsyNTgsMjMgQEAgc3RhdGljIE5QT2JqZWN0ICpwbHVnaW5B
bGxvY2F0ZShOUFAgbnBwLAogICAgIAogICAgIG5ld0luc3RhbmNlLT5ldmVudExvZ2dpbmcgPSBG
QUxTRTsKICAgICAKKyAgICBuZXdJbnN0YW5jZS0+Zmlyc3RVcmwgPSBOVUxMOworICAgIG5ld0lu
c3RhbmNlLT5maXJzdEhlYWRlcnMgPSBOVUxMOworICAgIG5ld0luc3RhbmNlLT5sYXN0VXJsID0g
TlVMTDsKKyAgICBuZXdJbnN0YW5jZS0+bGFzdEhlYWRlcnMgPSBOVUxMOworICAgIAogICAgIHJl
dHVybiAoTlBPYmplY3QgKiluZXdJbnN0YW5jZTsKIH0KIAotc3RhdGljIHZvaWQgcGx1Z2luRGVh
bGxvY2F0ZShOUE9iamVjdCAqb2JqKSAKK3N0YXRpYyB2b2lkIHBsdWdpbkRlYWxsb2NhdGUoTlBP
YmplY3QgKmhlYWRlcikKIHsKKyAgICBQbHVnaW5PYmplY3QgKm9iaiA9IChQbHVnaW5PYmplY3Qg
KiloZWFkZXI7CisKKyAgICBmcmVlKG9iai0+Zmlyc3RVcmwpOworICAgIGZyZWUob2JqLT5maXJz
dEhlYWRlcnMpOworICAgIGZyZWUob2JqLT5sYXN0VXJsKTsKKyAgICBmcmVlKG9iai0+bGFzdEhl
YWRlcnMpOworCiAgICAgZnJlZShvYmopOwogfQogCkBAIC0yNjcsNyArMjgyLDcgQEAgdm9pZCBo
YW5kbGVDYWxsYmFjayhQbHVnaW5PYmplY3QqIG9iamVjdAogewogICAgIGFzc2VydChvYmplY3Qp
OwogICAgIAotICAgIE5QVmFyaWFudCBhcmdzWzFdOworICAgIE5QVmFyaWFudCBhcmdzWzJdOwog
ICAgIAogICAgIE5QT2JqZWN0ICp3aW5kb3dTY3JpcHRPYmplY3Q7CiAgICAgYnJvd3Nlci0+Z2V0
dmFsdWUob2JqZWN0LT5ucHAsIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QsICZ3aW5kb3dT
Y3JpcHRPYmplY3QpOwpAQCAtMjc2LDcgKzI5MSwzOSBAQCB2b2lkIGhhbmRsZUNhbGxiYWNrKFBs
dWdpbk9iamVjdCogb2JqZWN0CiAKICAgICBJTlQzMl9UT19OUFZBUklBTlQocmVhc29uLCBhcmdz
WzBdKTsKIAorICAgIGNoYXIgKnN0ckhkciA9IE5VTEw7CisgICAgaWYgKG9iamVjdC0+Zmlyc3RV
cmwgJiYgb2JqZWN0LT5maXJzdEhlYWRlcnMgJiYgb2JqZWN0LT5sYXN0VXJsICYmIG9iamVjdC0+
bGFzdEhlYWRlcnMpIHsKKyAgICAgICAgLy8gRm9ybWF0IGV4cGVjdGVkIGJ5IEphdmFTY3JpcHQg
dmFsaWRhdG9yOiBmb3VyIGZpZWxkcyBzZXBhcmF0ZWQgYnkgXG5cbjoKKyAgICAgICAgLy8gRmly
c3QgVVJMOyBmaXJzdCBoZWFkZXIgYmxvY2s7IGxhc3QgVVJMOyBsYXN0IGhlYWRlciBibG9jay4K
KyAgICAgICAgLy8gTm90ZSB0aGF0IGhlYWRlciBibG9ja3MgYWxyZWFkeSBlbmQgd2l0aCBcbiBk
dWUgdG8gaG93IE5QU3RyZWFtOjpoZWFkZXJzIHdvcmtzLgorICAgICAgICBpbnQgbGVuID0gc3Ry
bGVuKG9iamVjdC0+Zmlyc3RVcmwpICsgMgorICAgICAgICAgICAgKyBzdHJsZW4ob2JqZWN0LT5m
aXJzdEhlYWRlcnMpICsgMQorICAgICAgICAgICAgKyBzdHJsZW4ob2JqZWN0LT5sYXN0VXJsKSAr
IDIKKyAgICAgICAgICAgICsgc3RybGVuKG9iamVjdC0+bGFzdEhlYWRlcnMpICsgMTsKKyAgICAg
ICAgc3RySGRyID0gbWFsbG9jKGxlbiArIDEpOworICAgICAgICBzcHJpbnRmKHN0ckhkciwgIiVz
XG5cbiVzXG4lc1xuXG4lc1xuIiwgb2JqZWN0LT5maXJzdFVybCwgb2JqZWN0LT5maXJzdEhlYWRl
cnMsIG9iamVjdC0+bGFzdFVybCwgb2JqZWN0LT5sYXN0SGVhZGVycyk7CisgICAgICAgIFNUUklO
R05fVE9fTlBWQVJJQU5UKHN0ckhkciwgbGVuLCBhcmdzWzFdKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgTlVMTF9UT19OUFZBUklBTlQoYXJnc1sxXSk7CisKICAgICBOUFZhcmlhbnQgYnJvd3NlclJl
c3VsdDsKLSAgICBicm93c2VyLT5pbnZva2Uob2JqZWN0LT5ucHAsIHdpbmRvd1NjcmlwdE9iamVj
dCwgY2FsbGJhY2tJZGVudGlmaWVyLCBhcmdzLCAxLCAmYnJvd3NlclJlc3VsdCk7CisgICAgYnJv
d3Nlci0+aW52b2tlKG9iamVjdC0+bnBwLCB3aW5kb3dTY3JpcHRPYmplY3QsIGNhbGxiYWNrSWRl
bnRpZmllciwgYXJncywgMiwgJmJyb3dzZXJSZXN1bHQpOwogICAgIGJyb3dzZXItPnJlbGVhc2V2
YXJpYW50dmFsdWUoJmJyb3dzZXJSZXN1bHQpOworCisgICAgZnJlZShzdHJIZHIpOworfQorCit2
b2lkIG5vdGlmeVN0cmVhbShQbHVnaW5PYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciAqdXJsLCBj
b25zdCBjaGFyICpoZWFkZXJzKQoreworICAgIGlmIChvYmplY3QtPmZpcnN0VXJsID09IE5VTEwp
IHsKKyAgICAgICAgaWYgKHVybCkKKyAgICAgICAgICAgIG9iamVjdC0+Zmlyc3RVcmwgPSBzdHJk
dXAodXJsKTsKKyAgICAgICAgaWYgKGhlYWRlcnMpCisgICAgICAgICAgICBvYmplY3QtPmZpcnN0
SGVhZGVycyA9IHN0cmR1cChoZWFkZXJzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmcmVlKG9i
amVjdC0+bGFzdFVybCk7CisgICAgICAgIGZyZWUob2JqZWN0LT5sYXN0SGVhZGVycyk7CisgICAg
ICAgIG9iamVjdC0+bGFzdFVybCA9ICh1cmwgPyBzdHJkdXAodXJsKSA6IE5VTEwpOworICAgICAg
ICBvYmplY3QtPmxhc3RIZWFkZXJzID0gKGhlYWRlcnMgPyBzdHJkdXAoaGVhZGVycykgOiBOVUxM
KTsKKyAgICB9CiB9CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2Nh
cGVQbHVnSW4uc3VicHJvai9QbHVnaW5PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9QbHVnaW5PYmplY3Qu
aAkocmV2aXNpb24gMTk5ODYpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0TmV0
c2NhcGVQbHVnSW4uc3VicHJvai9QbHVnaW5PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzks
NyArMzksMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgewogICAgIE5QT2JqZWN0IGhlYWRlcjsKICAgICBO
UFAgbnBwOwogICAgIEJvb2xlYW4gZXZlbnRMb2dnaW5nOworICAgIGNoYXIqIGZpcnN0VXJsOwor
ICAgIGNoYXIqIGZpcnN0SGVhZGVyczsKKyAgICBjaGFyKiBsYXN0VXJsOworICAgIGNoYXIqIGxh
c3RIZWFkZXJzOwogfSBQbHVnaW5PYmplY3Q7CiAKIGV4dGVybiBOUENsYXNzICpnZXRQbHVnaW5D
bGFzcyh2b2lkKTsKIGV4dGVybiB2b2lkIGhhbmRsZUNhbGxiYWNrKFBsdWdpbk9iamVjdCogb2Jq
ZWN0LCBjb25zdCBjaGFyICp1cmwsIE5QUmVhc29uIHJlYXNvbiwgdm9pZCAqbm90aWZ5RGF0YSk7
CitleHRlcm4gdm9pZCBub3RpZnlTdHJlYW0oUGx1Z2luT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNo
YXIgKnVybCwgY29uc3QgY2hhciAqaGVhZGVycyk7CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9tYWluLmMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovbWFp
bi5jCShyZXZpc2lvbiAxOTk4NikKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RO
ZXRzY2FwZVBsdWdJbi5zdWJwcm9qL21haW4uYwkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMs
MTIgQEAgTlBFcnJvciBOUFBfU2V0V2luZG93KE5QUCBpbnN0YW5jZSwgTlBXaQogTlBFcnJvciBO
UFBfTmV3U3RyZWFtKE5QUCBpbnN0YW5jZSwgTlBNSU1FVHlwZSB0eXBlLCBOUFN0cmVhbSAqc3Ry
ZWFtLCBOUEJvb2wgc2Vla2FibGUsIHVpbnQxNiAqc3R5cGUpCiB7CiAgICAgKnN0eXBlID0gTlBf
QVNGSUxFT05MWTsKKworICAgIFBsdWdpbk9iamVjdCAqb2JqID0gaW5zdGFuY2UtPnBkYXRhOwor
ICAgIGlmIChvYmogJiYgKGJyb3dzZXItPnZlcnNpb24gPj0gTlBWRVJTX0hBU19SRVNQT05TRV9I
RUFERVJTKSkgeworICAgICAgICBub3RpZnlTdHJlYW0ob2JqLCBzdHJlYW0tPnVybCwgc3RyZWFt
LT5oZWFkZXJzKTsKKyAgICB9CisKICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CiB9CiAK
</data>
<flag name="review"
          id="5455"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13728</attachid>
            <date>2007-03-20 16:46:03 -0700</date>
            <delta_ts>2007-04-11 17:46:21 -0700</delta_ts>
            <desc>Proposed solution, take 5</desc>
            <filename>NsPluginResponseHeaders.patch</filename>
            <type>text/plain</type>
            <size>27377</size>
            <attacher name="Deneb Meketa">dmeketa</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzQ5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDctMDMtMjAgIERlbmViIE1l
a2V0YSAgPGRtZWtldGFAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MDI5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzQ5OTQ4NDkKKyAgICAgICAgQnVnIDEzMDI5OiBQ
ZXJtaXQgTlBBUEkgcGx1Zy1pbnMgdG8gc2VlIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4KKyAgICAg
ICAgVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZSBKYXZhU2NyaXB0Q29yZSwgYnV0IHRoYXQn
cyB3aGVyZSBucGFwaS5oIGlzLgorCisgICAgICAgICogYmluZGluZ3MvbnBhcGkuaDoKKyAgICAg
ICAgQWRkIGhlYWRlcnMgbWVtYmVyIHRvIE5QU3RyZWFtIHN0cnVjdC4gIEFsc28gaW5jcmVhc2Ug
TlBfVkVSU0lPTl9NSU5PUiB0byAxNywKKyAgICAgICAgc28gdGhhdCBwbHVnLWlucyBjYW4gc2Fm
ZWx5IGRldGVjdCB3aGV0aGVyIHRvIGxvb2sgZm9yIHRoaXMgbWVtYmVyLiAgQWxzbyBhZGQKKyAg
ICAgICAgb3RoZXIgbWlzc2luZyBiaXRzIG9mIG5wYXBpLmggdG8gY2F0Y2ggdXAgZnJvbSAxNCB0
byAxNy4gIFRoaXMgaW5jbHVkZXMKKyAgICAgICAgZmVhdHVyZXMgdGhhdCBhcmUgbm90IGltcGxl
bWVudGVkIGluIFdlYktpdCwgYnV0IHRob3NlIGFyZSBzYWZlbHkgc3R1YmJlZC4KKwogMjAwNy0w
My0xOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgKiBranMvdmFs
dWUuaDogUm9sbCB+SlNWYWx1ZSBjaGFuZ2Ugb3V0LiBJdCB3YXMgY2F1c2luZyBwcm9ibGVtcy4g
SSdsbCBkbyBpdCByaWdodCBsYXRlci4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25w
YXBpLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvbnBhcGkuaAkocmV2
aXNpb24gMTk5ODYpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNkZWZpbmUg
TlBfVkVSU0lPTl9NQUpPUiAwCi0jZGVmaW5lIE5QX1ZFUlNJT05fTUlOT1IgMTQKKyNkZWZpbmUg
TlBfVkVSU0lPTl9NSU5PUiAxNwogCiAKIApAQCAtMTg3LDYgKzE4NywxNiBAQCB0eXBlZGVmIHN0
cnVjdCBfTlBTdHJlYW0KICAgICB1aW50MzIgICAgICAgZW5kOwogICAgIHVpbnQzMiAgICAgICBs
YXN0bW9kaWZpZWQ7CiAgICAgdm9pZCogICAgICAgIG5vdGlmeURhdGE7CisgICAgY29uc3QgY2hh
ciogIGhlYWRlcnM7ICAgICAgLyogUmVzcG9uc2UgaGVhZGVycyBmcm9tIGhvc3QuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICogRXhpc3RzIG9ubHkgZm9yID49IE5QVkVSU19IQVNf
UkVTUE9OU0VfSEVBREVSUy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBVc2Vk
IGZvciBIVFRQIG9ubHk7IE5VTEwgZm9yIG5vbi1IVFRQLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqIEF2YWlsYWJsZSBmcm9tIE5QUF9OZXdTdHJlYW0gb253YXJkcy4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBQbHVnaW4gc2hvdWxkIGNvcHkgdGhpcyBkYXRh
IGJlZm9yZSBzdG9yaW5nIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIElu
Y2x1ZGVzIEhUVFAgc3RhdHVzIGxpbmUgYW5kIGFsbCBoZWFkZXJzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqIHByZWZlcmFibHkgdmVyYmF0aW0gYXMgcmVjZWl2ZWQgZnJvbSBz
ZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaGVhZGVycyBmb3JtYXR0
ZWQgYXMgaW4gSFRUUCAoIkhlYWRlcjogVmFsdWUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKiBhbmQgbmV3bGluZXMgKFxuLCBOT1QgXHJcbikgc2VwYXJhdGluZyBsaW5lcy4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUZXJtaW5hdGVkIGJ5IFxuXDAgKE5P
VCBcblxuXDApLiAqLwogfSBOUFN0cmVhbTsKIAogCkBAIC0zMTQsNyArMzI0LDEzIEBAIHR5cGVk
ZWYgZW51bSB7CiAgICAgTlBQVnBsdWdpbk5lZWRzWEVtYmVkICAgICAgICAgPSAxNCwgLyogTm90
IGltcGxlbWVudGVkIGluIFdlYktpdCAqLwogCiAgICAgLyogR2V0IHRoZSBOUE9iamVjdCBmb3Ig
c2NyaXB0aW5nIHRoZSBwbHVnaW4uICovCi0gICAgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVj
dCAgPSAxNQorICAgIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QgID0gMTUsCisJCisgICAg
LyogR2V0IHRoZSBwbHVnaW4gdmFsdWUgKGFzIFwwLXRlcm1pbmF0ZWQgVVRGLTggc3RyaW5nIGRh
dGEpIGZvcgorICAgICAqIGZvcm0gc3VibWlzc2lvbiBpZiB0aGUgcGx1Z2luIGlzIHBhcnQgb2Yg
YSBmb3JtLiBVc2UKKyAgICAgKiBOUE5fTWVtQWxsb2MoKSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9y
IHRoZSBzdHJpbmcgZGF0YS4KKyAgICAgKi8KKyAgICBOUFBWZm9ybVZhbHVlID0gMTYgICAgLyog
Tm90IGltcGxlbWVudGVkIGluIFdlYktpdCAqLwogfSBOUFBWYXJpYWJsZTsKIAogLyoKQEAgLTU4
Nyw2ICs2MDMsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgTlBfUG9ydAogI2RlZmluZSBOUFZFUlNfV0lO
MTZfSEFTX0xJVkVDT05ORUNUICAgIDkKICNkZWZpbmUgTlBWRVJTXzY4S19IQVNfTElWRUNPTk5F
Q1QgICAgMTEKICNkZWZpbmUgTlBWRVJTX0hBU19XSU5ET1dMRVNTICAgICAgIDExCisjZGVmaW5l
IE5QVkVSU19IQVNfWFBDT05ORUNUX1NDUklQVElORyAgICAxMyAgLyogTm90IGltcGxlbWVudGVk
IGluIFdlYktpdCAqLworI2RlZmluZSBOUFZFUlNfSEFTX05QUlVOVElNRV9TQ1JJUFRJTkcgICAg
MTQKKyNkZWZpbmUgTlBWRVJTX0hBU19GT1JNX1ZBTFVFUyAgICAgICAgICAgIDE1ICAvKiBOb3Qg
aW1wbGVtZW50ZWQgaW4gV2ViS2l0OyBzZWUgYnVnIDEzMDYxICovCisjZGVmaW5lIE5QVkVSU19I
QVNfUE9QVVBTX0VOQUJMRURfU1RBVEUgICAxNiAgLyogTm90IGltcGxlbWVudGVkIGluIFdlYktp
dCAqLworI2RlZmluZSBOUFZFUlNfSEFTX1JFU1BPTlNFX0hFQURFUlMgICAgICAgMTcKIAogCiAv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwpAQCAtNjc3LDYgKzY5OCw4IEBAIE5QRXJyb3IgICAgIE5QTl9TZXRW
YWx1ZShOUFAgaW5zdGFuY2UsIE4KIHZvaWQgICAgICAgIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAg
aW5zdGFuY2UsIE5QUmVjdCAqaW52YWxpZFJlY3QpOwogdm9pZCAgICAgICAgTlBOX0ludmFsaWRh
dGVSZWdpb24oTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKTsKIHZvaWQgICAg
ICAgIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpOwordm9pZCAgICAgICAgTlBOX1B1c2hQ
b3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCk7ICAvKiBOb3Qg
aW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCit2b2lkICAgICAgICBOUE5fUG9wUG9wdXBzRW5hYmxl
ZFN0YXRlKE5QUCBpbnN0YW5jZSk7ICAgICAgICAgICAgICAgICAgIC8qIE5vdCBpbXBsZW1lbnRl
ZCBpbiBXZWJLaXQgKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9ICAvKiBlbmQgZXh0ZXJuICJD
IiAqLwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzNDkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAwNy0wMy0yMCAgRGVuZWIgTWVrZXRh
ICA8ZG1la2V0YUBhZG9iZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMjkK
KyAgICAgICAgcmRhcjovL3Byb2JsZW0vNDk5NDg0OQorICAgICAgICBCdWcgMTMwMjk6IFBlcm1p
dCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJzLgorCisgICAgICAg
ICogaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNlLWhlYWRlcnMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BsdWdpbnMvbnBhcGktcmVzcG9uc2UtaGVh
ZGVycy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2Vz
L2xvYWQtbWUtMS50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvcGx1Z2lucy9yZXNv
dXJjZXMvbG9hZC1tZS0yLnR4dDogQWRkZWQuCisKIDIwMDctMDMtMjAgIEp1c3RpbiBHYXJjaWEg
IDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBkYXJpbgpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNlLWhlYWRl
cnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1
Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorCitUZXN0IGZvciBidWcg
MTMwMjk6IFBlcm1pdCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJz
LgorCitFeHBlY3RlZCByZXN1bHQgYmVsb3cgaXMgdHdvIEhUVFAgcmVzcG9uc2UgZXh0cmFjdHMs
IG9uZSBmb3IgdGhlIGluaXRpYWwgc3RyZWFtIHNwZWNpZmllZCBpbiB0aGUgInNyYyIgYXR0cmli
dXRlLCB0aGUgb3RoZXIgZm9yIGFuIE5QTl9HZXRVUkxOb3RpZnkgcmVxdWVzdC4gRWFjaCBibG9j
ayBzaG91bGQgY29udGFpbiB0aGUgVVJMOyB0aGUgc3RhdHVzIGxpbmUsIHdoaWNoIHNob3VsZCBz
YXkgIkhUVFAgMjAwIE9LIjsgYW5kIHRoZSBNSU1FLXR5cGUsIHdoaWNoIHNob3VsZCBzYXkgIkNv
bnRlbnQtVHlwZTogdGV4dC9wbGFpbiIuCisKKy0tLS0tLS0tLS0KKworaHR0cDovL1t2YXJpZXMs
IG5vdCBiZWluZyB0ZXN0ZWRdL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMS50eHQKK0hUVFAg
MjAwIE9LCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworLS0tLS0tLS0tLQorCitodHRwOi8v
W3Zhcmllcywgbm90IGJlaW5nIHRlc3RlZF0vcGx1Z2lucy9yZXNvdXJjZXMvbG9hZC1tZS0yLnR4
dAorSFRUUCAyMDAgT0sKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisKSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNl
LWhlYWRlcnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1
Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTggQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciByZXMxLCByZXMy
OworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB0cnkgeworICAgICAgICByZXMxID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdDEiKTsKKyAgICAgICAgcmVzMiA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJyZXN1bHQyIik7CisgICAgICAgIHBsZy5nZXRVUkxOb3RpZnkoIi9wbHVn
aW5zL3Jlc291cmNlcy9sb2FkLW1lLTIudHh0IiwgbnVsbCwgImNhbGxiYWNrIik7CisgICAgfSBj
YXRjaCAoZXgpIHsKKyAgICAgICAgc2hvd0VycigiRXhjZXB0aW9uOiAiICsgZXguZGVzY3JpcHRp
b24pOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKworZnVuY3Rp
b24gY2FsbGJhY2soZXJyQ29kZSwgc3RyZWFtRHVtcCkKK3sKKyAgICB2YXIgcGFyc2UgPSBwYXJz
ZVN0cmVhbUR1bXAoc3RyZWFtRHVtcCk7CisgICAgaWYgKHBhcnNlLmVycikKKyAgICAgICAgc2hv
d0VycihwYXJzZS5lcnIpOworICAgIGVsc2UgeworICAgICAgICByZXMxLmlubmVySFRNTCA9IG5l
d2xpbmVzVG9IVE1MKHBhcnNlLnJlczEpOworICAgICAgICByZXMyLmlubmVySFRNTCA9IG5ld2xp
bmVzVG9IVE1MKHBhcnNlLnJlczIpOworICAgIH0KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
K30KKworLy8gRm9ybWF0IHBhc3NlZCBieSBwbHVnaW46IGZvdXIgZmllbGRzIHNlcGFyYXRlZCBi
eSBcblxuOgorLy8gRmlyc3QgVVJMOyBmaXJzdCBoZWFkZXIgYmxvY2s7IGxhc3QgVVJMOyBsYXN0
IGhlYWRlciBibG9jay4KK2Z1bmN0aW9uIHBhcnNlU3RyZWFtRHVtcChzdHJlYW1EdW1wKQorewor
ICAgIHZhciBydG4gPSB7fTsKKworICAgIGlmICh0eXBlb2Ygc3RyZWFtRHVtcCA9PSAic3RyaW5n
IiB8fCAoKHR5cGVvZiBzdHJlYW1EdW1wID09ICJvYmplY3QiKSAmJiAoc3RyZWFtRHVtcC5jb25z
dHJ1Y3RvciA9PSBTdHJpbmcpKSkgeworICAgICAgICB2YXIgcGFydHMgPSBzdHJlYW1EdW1wLnNw
bGl0KCJcblxuIik7CisgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gNCkgeworICAgICAgICAg
ICAgcnRuLnJlczEgPSBnZW5lcmljVVJMKHBhcnRzWzBdKSArICJcbiIgKyBwYXJzZUhlYWRlcnMo
cGFydHNbMV0pOworICAgICAgICAgICAgcnRuLnJlczIgPSBnZW5lcmljVVJMKHBhcnRzWzJdKSAr
ICJcbiIgKyBwYXJzZUhlYWRlcnMocGFydHNbM10pOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHJ0bi5lcnIgPSAic3RyZWFtRHVtcCBmcm9tIHBsdWdpbiBkb2VzIG5vdCBoYXZlIGV4cGVj
dGVkIGZvcm1hdCI7CisgICAgfSBlbHNlCisgICAgICAgIHJ0bi5lcnIgPSAic3RyZWFtRHVtcCBm
cm9tIHBsdWdpbiBpcyBub3QgYSBzdHJpbmc6ICIgKyBzdHJlYW1EdW1wOworCisgICAgcmV0dXJu
IHJ0bjsKK30KKworZnVuY3Rpb24gc2hvd0VycihlcnIpCit7CisgICAgcmVzMS5pbm5lckhUTUwg
PSAiRkFJTEVEIC0gIiArIGVycjsKKyAgICByZXMyLmlubmVySFRNTCA9ICIiOworfQorCitmdW5j
dGlvbiBuZXdsaW5lc1RvSFRNTChzdHIpCit7CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cbi9n
LCAiPGJyPiIpOworfQorCitmdW5jdGlvbiBnZW5lcmljVVJMKHVybCkKK3sKKyAgICByZXR1cm4g
dXJsLnJlcGxhY2UoL14oaHR0cDpcL1wvKVteXC9dKy8sICIkMVt2YXJpZXMsIG5vdCBiZWluZyB0
ZXN0ZWRdIik7Cit9CisKK2Z1bmN0aW9uIHBhcnNlSGVhZGVycyhoZHJzKQoreworICAgIHZhciBw
YXJ0cyA9IGhkcnMuc3BsaXQoIlxuIik7CisgICAgdmFyIHJ0biA9IHBhcnRzWzBdICsgIlxuIjsK
KworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspCisgICAgICAgIGlm
IChwYXJ0c1tpXS5tYXRjaCgvXkNvbnRlbnQtVHlwZTovKSkKKyAgICAgICAgICAgIHJ0biArPSBw
YXJ0c1tpXTsKKworICAgIHJldHVybiBydG47Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
IG9ubG9hZD0idGVzdCgpIj4KKzxlbWJlZCBuYW1lPSJwbGciIHR5cGU9ImFwcGxpY2F0aW9uL3gt
d2Via2l0LXRlc3QtbmV0c2NhcGUiIHNyYz0iL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMS50
eHQiPjwvZW1iZWQ+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVnemlsbGEub3BlbmRh
cndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDI5Ij5idWcgMTMwMjk8YS8+OgorUGVybWl0IE5Q
QVBJIHBsdWctaW5zIHRvIHNlZSBIVFRQIHJlc3BvbnNlIGhlYWRlcnMuPC9wPgorPHA+RXhwZWN0
ZWQgcmVzdWx0IGJlbG93IGlzIHR3byBIVFRQIHJlc3BvbnNlIGV4dHJhY3RzLCBvbmUgZm9yIHRo
ZSBpbml0aWFsIHN0cmVhbSBzcGVjaWZpZWQgaW4gdGhlICJzcmMiCithdHRyaWJ1dGUsIHRoZSBv
dGhlciBmb3IgYW4gTlBOX0dldFVSTE5vdGlmeSByZXF1ZXN0LiBFYWNoIGJsb2NrIHNob3VsZCBj
b250YWluIHRoZSBVUkw7IHRoZSBzdGF0dXMgbGluZSwKK3doaWNoIHNob3VsZCBzYXkgIkhUVFAg
MjAwIE9LIjsgYW5kIHRoZSBNSU1FLXR5cGUsIHdoaWNoIHNob3VsZCBzYXkgIkNvbnRlbnQtVHlw
ZTogdGV4dC9wbGFpbiIuPC9wPgorPHA+LS0tLS0tLS0tLTwvcD4KKzxwIGlkPSJyZXN1bHQxIj5S
dW5uaW5nIHRlc3QsIHJlc3VsdCBzaG91bGQgYXBwZWFyIGhlcmUgaW4gYSB2ZXJ5IHNob3J0IHRp
bWUuLi48L3A+Cis8cD4tLS0tLS0tLS0tPC9wPgorPHAgaWQ9InJlc3VsdDIiPlJ1bm5pbmcgdGVz
dCwgcmVzdWx0IHNob3VsZCBhcHBlYXIgaGVyZSBpbiBhIHZlcnkgc2hvcnQgdGltZS4uLjwvcD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9y
ZXNvdXJjZXMvbG9hZC1tZS0xLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMS50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMS50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMiBAQAorSXQncyBhIGxvbmVseSBleGlzdGVuY2UgYmVpbmcgYSB0
ZXN0IGZpbGUuCitZb3UncmUgd2VsY29tZS4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
cGx1Z2lucy9yZXNvdXJjZXMvbG9hZC1tZS0yLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMi50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMi50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorT2ggeWVhaC4KK05vYm9keSBsb29raW4n
IGF0IG1lLgorSnVzdCBjaGlsbGluJy4KK1Rlc3QgZmlsZS4KK09oIHllYWguCkluZGV4OiBXZWJL
aXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIw
MzQ5KQorKysgV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDA3LTAzLTIwICBEZW5lYiBNZWtldGEgIDxkbWVrZXRhQGFkb2JlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAyOQorICAgICAgICByZGFyOi8vcHJvYmxlbS80OTk0ODQ5
CisgICAgICAgIEJ1ZyAxMzAyOTogUGVybWl0IE5QQVBJIHBsdWctaW5zIHRvIHNlZSBIVFRQIHJl
c3BvbnNlIGhlYWRlcnMuCisKKyAgICAgICAgKiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdp
blN0cmVhbS5oOiBkZWNsYXJhdGlvbnMuCisgICAgICAgICogUGx1Z2lucy9XZWJCYXNlTmV0c2Nh
cGVQbHVnaW5TdHJlYW0ubTogbWFpbiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKC1bV2ViQmFz
ZU5ldHNjYXBlUGx1Z2luU3RyZWFtIGRlYWxsb2NdKTogY2xlYW51cC4KKyAgICAgICAgKC1bV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtIGZpbmFsaXplXSk6IGNsZWFudXAuCisgICAgICAgICgt
W1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbSBzdGFydFN0cmVhbVJlc3BvbnNlVVJMOmV4cGVj
dGVkQ29udGVudExlbmd0aDpsYXN0TW9kaWZpZWREYXRlOk1JTUVUeXBlOmhlYWRlcnM6XSk6Cisg
ICAgICAgIFBhc3MgaGVhZGVycyBhbG9uZy4KKyAgICAgICAgKC1bV2ViQmFzZU5ldHNjYXBlUGx1
Z2luU3RyZWFtIHN0YXJ0U3RyZWFtV2l0aFJlc3BvbnNlOl0pOgorICAgICAgICBNYWluIHdvcmsg
aXMgaGVyZS4gIEV4dHJhY3QgaGVhZGVycyBmcm9tIE5TSFRUUFVSTFJlc3BvbnNlIG9iamVjdCBp
bnRvIGEgYnl0ZSBzZXF1ZW5jZS4KKyAgICAgICAgU2VlIGNvbW1lbnRzIGhlcmUgYWJvdXQgaG93
IGl0IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBsb3ctbGV2ZWwgYWNjZXNzIHRvIHRoZSBIVFRQIHJl
c3BvbnNlLgorICAgICAgICAoLVtXZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0gX2Rlc3Ryb3lT
dHJlYW1dKTogY2xlYW51cC4KKyAgICAgICAgKiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdp
blZpZXcubW06CisgICAgICAgICgtW1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgZXZhbHVhdGVK
YXZhU2NyaXB0UGx1Z2luUmVxdWVzdDpdKToKKyAgICAgICAgQ29uZm9ybSB0byBuZXcgc3RhcnRT
dHJlYW0gcGFyYW1zLiAgTm90IGFwcGxpY2FibGUgaGVyZSwgcGFzcyBuaWwuCisgICAgICAgICog
UGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubToKKyAgICAgICAgKC1bV2ViTmV0c2Nh
cGVQbHVnaW5QYWNrYWdlIGxvYWRdKToKKyAgICAgICAgRmlsbCBpbiBuZXcgYnJvd3NlckZ1bmNz
IG1lbWJlcnMgKHdpdGggc3R1YnMpIHJlcXVpcmVkIGJ5IG5ldyBucGFwaS5oIHZlcnNpb24uCisg
ICAgICAgICogUGx1Z2lucy9ucGFwaS5tOiBOUEFQSSBzdHVicy4KKyAgICAgICAgKE5QTl9QdXNo
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUp
OgorICAgICAgICAqIFBsdWdpbnMvbnBmdW5jdGlvbnMuaDogTlBBUEkgZGVjbGFyYXRpb25zLgor
CiAyMDA3LTAzLTE5ICBBbmRlcnMgQ2FybHNzb24gIDxhY2FybHNzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCkluZGV4OiBXZWJLaXQvUGx1Z2lucy9XZWJC
YXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvUGx1Z2lucy9X
ZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0uaAkocmV2aXNpb24gMTk5ODYpCisrKyBXZWJLaXQv
UGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNiArNDgsNyBAQAogICAgIGNoYXIgKnBhdGg7CiAgICAgQk9PTCBzZW5kTm90aWZpY2F0aW9u
OwogICAgIHZvaWQgKm5vdGlmeURhdGE7CisgICAgY2hhciAqaGVhZGVyczsKICAgICBXZWJCYXNl
TmV0c2NhcGVQbHVnaW5WaWV3ICpwbHVnaW5WaWV3OwogICAgIE5QUmVhc29uIHJlYXNvbjsKICAg
ICBCT09MIGlzVGVybWluYXRlZDsKQEAgLTc4LDcgKzc5LDggQEAKIC0gKHZvaWQpc3RhcnRTdHJl
YW1SZXNwb25zZVVSTDooTlNVUkwgKil0aGVSZXNwb25zZVVSTAogICAgICAgICAgZXhwZWN0ZWRD
b250ZW50TGVuZ3RoOihsb25nIGxvbmcpZXhwZWN0ZWRDb250ZW50TGVuZ3RoCiAgICAgICAgICAg
ICAgIGxhc3RNb2RpZmllZERhdGU6KE5TRGF0ZSAqKWxhc3RNb2RpZmllZERhdGUKLSAgICAgICAg
ICAgICAgICAgICAgICBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZTsKKyAgICAgICAgICAg
ICAgICAgICAgICBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZQorICAgICAgICAgICAgICAg
ICAgICAgICBoZWFkZXJzOihOU0RhdGEgKil0aGVIZWFkZXJzOwogCiAvLyBjYW5jZWxMb2FkV2l0
aEVycm9yIGNhbmNlbHMgdGhlIE5TVVJMQ29ubmVjdGlvbiBhbmQgaW5mb3JtcyBXZWJLaXQgb2Yg
dGhlIGxvYWQgZXJyb3IuCiAvLyBUaGlzIG1ldGhvZCBpcyBvdmVycmlkZW4gYnkgc3ViY2xhc3Nl
cy4KSW5kZXg6IFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbS5tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbS5t
CShyZXZpc2lvbiAxOTk4NikKKysrIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdp
blN0cmVhbS5tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDcgQEAgc3RhdGljIGNoYXIg
KkNhcmJvblBhdGhGcm9tUE9TSVhQYXRoKGNvbgogICAgIAogICAgIGZyZWUoKHZvaWQgKilzdHJl
YW0udXJsKTsKICAgICBmcmVlKHBhdGgpOworICAgIGZyZWUoaGVhZGVycyk7CiAKICAgICBbc3Vw
ZXIgZGVhbGxvY107CiB9CkBAIC0xNDMsNiArMTQ0LDcgQEAgc3RhdGljIGNoYXIgKkNhcmJvblBh
dGhGcm9tUE9TSVhQYXRoKGNvbgogCiAgICAgZnJlZSgodm9pZCAqKXN0cmVhbS51cmwpOwogICAg
IGZyZWUocGF0aCk7CisgICAgZnJlZShoZWFkZXJzKTsKIAogICAgIFtzdXBlciBmaW5hbGl6ZV07
CiB9CkBAIC0yMTEsNiArMjEzLDcgQEAgc3RhdGljIGNoYXIgKkNhcmJvblBhdGhGcm9tUE9TSVhQ
YXRoKGNvbgogICAgICAgICAgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOihsb25nIGxvbmcpZXhwZWN0
ZWRDb250ZW50TGVuZ3RoCiAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZERhdGU6KE5TRGF0ZSAq
KWxhc3RNb2RpZmllZERhdGUKICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTooTlNTdHJp
bmcgKil0aGVNSU1FVHlwZQorICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOihOU0RhdGEg
Kil0aGVIZWFkZXJzCiB7CiAgICAgQVNTRVJUKCFpc1Rlcm1pbmF0ZWQpOwogICAgIApAQCAtMjI0
LDcgKzIyNywxNSBAQCBzdGF0aWMgY2hhciAqQ2FyYm9uUGF0aEZyb21QT1NJWFBhdGgoY29uCiAg
ICAgc3RyZWFtLmVuZCA9IGV4cGVjdGVkQ29udGVudExlbmd0aCA+IDAgPyBleHBlY3RlZENvbnRl
bnRMZW5ndGggOiAwOwogICAgIHN0cmVhbS5sYXN0bW9kaWZpZWQgPSBbbGFzdE1vZGlmaWVkRGF0
ZSB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBdOwogICAgIHN0cmVhbS5ub3RpZnlEYXRhID0gbm90aWZ5
RGF0YTsKLSAgICAKKworICAgIGlmICh0aGVIZWFkZXJzKSB7CisgICAgICAgIHVuc2lnbmVkIGxl
biA9IFt0aGVIZWFkZXJzIGxlbmd0aF07CisgICAgICAgIGhlYWRlcnMgPSBtYWxsb2MobGVuICsg
MSk7CisgICAgICAgIFt0aGVIZWFkZXJzIGdldEJ5dGVzOmhlYWRlcnNdOworICAgICAgICBoZWFk
ZXJzW2xlbl0gPSAwOworICAgICAgICBzdHJlYW0uaGVhZGVycyA9IGhlYWRlcnM7CisgICAgfQor
CiAgICAgdHJhbnNmZXJNb2RlID0gTlBfTk9STUFMOwogICAgIG9mZnNldCA9IDA7CiAgICAgcmVh
c29uID0gV0VCX1JFQVNPTl9OT05FOwpAQCAtMjY0LDEwICsyNzUsNTAgQEAgc3RhdGljIGNoYXIg
KkNhcmJvblBhdGhGcm9tUE9TSVhQYXRoKGNvbgogCiAtICh2b2lkKXN0YXJ0U3RyZWFtV2l0aFJl
c3BvbnNlOihOU1VSTFJlc3BvbnNlICopcgogeworICAgIE5TTXV0YWJsZURhdGEgKnRoZUhlYWRl
cnMgPSBuaWw7CisgICAgaWYgKFtyIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNs
YXNzXV0pIHsKKyAgICAgICAgTlNIVFRQVVJMUmVzcG9uc2UgKmh0dHBSZXNwb25zZSA9IChOU0hU
VFBVUkxSZXNwb25zZSAqKXI7CisgICAgICAgIHRoZUhlYWRlcnMgPSBbTlNNdXRhYmxlRGF0YSBk
YXRhV2l0aENhcGFjaXR5OjEwMjRdOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IGl0IHdv
dWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBnZXQgdGhlIHJhdyBIVFRQIGhlYWRlciBibG9jay4K
KyAgICAgICAgLy8gVGhpcyBpbmNsdWRlcyB0aGUgSFRUUCB2ZXJzaW9uLCB0aGUgcmVhbCBzdGF0
dXMgdGV4dCwKKyAgICAgICAgLy8gYWxsIGhlYWRlcnMgaW4gdGhlaXIgb3JpZ2luYWwgb3JkZXIg
YW5kIGluY2x1ZGluZyBkdXBsaWNhdGVzLAorICAgICAgICAvLyBhbmQgYWxsIG9yaWdpbmFsIGJ5
dGVzIHZlcmJhdGltLCByYXRoZXIgdGhhbiBzZW50IHRocm91Z2ggVW5pY29kZSB0cmFuc2xhdGlv
bi4KKyAgICAgICAgLy8gVW5mb3J0dW5hdGVseSBOU0hUVFBVUkxSZXNwb25zZSBkb2Vzbid0IHBy
b3ZpZGUgYWNjZXNzIGF0IHRoYXQgbG93IGEgbGV2ZWwuCisgICAgICAgIAorICAgICAgICBbdGhl
SGVhZGVycyBhcHBlbmRCeXRlczoiSFRUUCAiIGxlbmd0aDo1XTsKKyAgICAgICAgY2hhciBzdGF0
dXNTdHJbMTBdOworICAgICAgICBzbnByaW50ZihzdGF0dXNTdHIsIHNpemVvZihzdGF0dXNTdHIp
LCAiJWQiLCBbaHR0cFJlc3BvbnNlIHN0YXR1c0NvZGVdKTsKKyAgICAgICAgW3RoZUhlYWRlcnMg
YXBwZW5kQnl0ZXM6c3RhdHVzU3RyIGxlbmd0aDpzdHJsZW4oc3RhdHVzU3RyKV07CisgICAgICAg
IFt0aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOiIgT0tcbiIgbGVuZ3RoOjRdOworCisgICAgICAgIC8v
IEhBQ0s6IHBhc3MgdGhlIGhlYWRlcnMgdGhyb3VnaCBhcyBVVEYtOC4KKyAgICAgICAgLy8gVGhp
cyBpcyBub3QgdGhlIGludGVuZGVkIGJlaGF2aW9yOyB3ZSdyZSBzdXBwb3NlZCB0byBwYXNzIG9y
aWdpbmFsIGJ5dGVzIHZlcmJhdGltLgorICAgICAgICAvLyBCdXQgd2UgZG9uJ3QgaGF2ZSB0aGUg
b3JpZ2luYWwgYnl0ZXMsIHdlIGhhdmUgTlNTdHJpbmdzIGJ1aWx0IGJ5IHRoZSBVUkwgbG9hZGlu
ZyBzeXN0ZW0uCisgICAgICAgIC8vIEl0IGhvcGVmdWxseSBzaG91bGRuJ3QgbWF0dGVyLCBzaW5j
ZSBSRkMyNjE2L1JGQzgyMiByZXF1aXJlIEFTQ0lJLW9ubHkgaGVhZGVycywKKyAgICAgICAgLy8g
YnV0IHN1cmVseSBzb21lb25lIG91dCB0aGVyZSBpcyB1c2luZyBub24tQVNDSUkgY2hhcmFjdGVy
cywgYW5kIGhvcGVmdWxseSBVVEYtOCBpcyBhZGVxdWF0ZSBoZXJlLgorICAgICAgICAvLyBJdCBz
ZWVtcyBiZXR0ZXIgdGhhbiBOU0FTQ0lJU3RyaW5nRW5jb2RpbmcsIHdoaWNoIHdpbGwgbG9zZSBp
bmZvcm1hdGlvbiBpZiBub24tQVNDSUkgaXMgdXNlZC4KKworICAgICAgICBOU0RpY3Rpb25hcnkg
KmhlYWRlckRpY3QgPSBbaHR0cFJlc3BvbnNlIGFsbEhlYWRlckZpZWxkc107CisgICAgICAgIE5T
QXJyYXkgKmtleXMgPSBbW2hlYWRlckRpY3QgYWxsS2V5c10gc29ydGVkQXJyYXlVc2luZ1NlbGVj
dG9yOkBzZWxlY3RvcihjYXNlSW5zZW5zaXRpdmVDb21wYXJlOildOworICAgICAgICBOU0VudW1l
cmF0b3IgKmkgPSBba2V5cyBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICAgICAgTlNTdHJpbmcgKms7
CisgICAgICAgIHdoaWxlICgoayA9IFtpIG5leHRPYmplY3RdKSAhPSBuaWwpIHsKKyAgICAgICAg
ICAgIE5TU3RyaW5nICp2ID0gW2hlYWRlckRpY3Qgb2JqZWN0Rm9yS2V5OmtdOworICAgICAgICAg
ICAgW3RoZUhlYWRlcnMgYXBwZW5kRGF0YTpbayBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZ11dOworICAgICAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6IjogIiBs
ZW5ndGg6Ml07CisgICAgICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmREYXRhOlt2IGRhdGFVc2lu
Z0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07CisgICAgICAgICAgICBbdGhlSGVhZGVy
cyBhcHBlbmRCeXRlczoiXG4iIGxlbmd0aDoxXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHN0
YXJ0U3RyZWFtUmVzcG9uc2VVUkw6Li4uIHdpbGwgbnVsbC10ZXJtaW5hdGUuCisgICAgfQorCiAg
ICAgW3NlbGYgc3RhcnRTdHJlYW1SZXNwb25zZVVSTDpbciBVUkxdCiAgICAgICAgICAgIGV4cGVj
dGVkQ29udGVudExlbmd0aDpbciBleHBlY3RlZENvbnRlbnRMZW5ndGhdCiAgICAgICAgICAgICAg
ICAgbGFzdE1vZGlmaWVkRGF0ZTpXS0dldE5TVVJMUmVzcG9uc2VMYXN0TW9kaWZpZWREYXRlKHIp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpbciBNSU1FVHlwZV1dOworICAgICAg
ICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6W3IgTUlNRVR5cGVdCisgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVhZGVyczp0aGVIZWFkZXJzXTsKIH0KIAogLSAodm9pZClfZGVzdHJveVN0cmVh
bQpAQCAtMzA0LDYgKzM1NSwxMCBAQCBzdGF0aWMgY2hhciAqQ2FyYm9uUGF0aEZyb21QT1NJWFBh
dGgoY29uCiAgICAgICAgIFtwbHVnaW5WaWV3IGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAg
ICAgIExPRyhQbHVnaW5zLCAiTlBQX0Rlc3Ryb3lTdHJlYW0gcmVzcG9uc2VVUkw9JUAgZXJyb3I9
JWQiLCByZXNwb25zZVVSTCwgbnBFcnIpOwogICAgICAgICAKKyAgICAgICAgZnJlZShoZWFkZXJz
KTsKKyAgICAgICAgaGVhZGVycyA9IE5VTEw7CisgICAgICAgIHN0cmVhbS5oZWFkZXJzID0gTlVM
TDsKKwogICAgICAgICBzdHJlYW0ubmRhdGEgPSBuaWw7CiAgICAgfQogICAgIApJbmRleDogV2Vi
S2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCShyZXZpc2lvbiAxOTk4
NikKKysrIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE5MjEsNyArMTkyMSw4IEBAIHN0YXRpYyBPU1N0YXR1cyBUU01FdmVudEhh
bmRsZXIoRXZlbnRIYW4KICAgICAgICAgW3N0cmVhbSBzdGFydFN0cmVhbVJlc3BvbnNlVVJMOlVS
TAogICAgICAgICAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGg6W0pTRGF0YSBsZW5ndGhd
CiAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkRGF0ZTpuaWwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAidGV4dC9wbGFpbiJdOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJ0ZXh0L3BsYWluIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlYWRlcnM6bmlsXTsKICAgICAgICAgW3N0cmVhbSByZWNlaXZlZERh
dGE6SlNEYXRhXTsKICAgICAgICAgW3N0cmVhbSBmaW5pc2hlZExvYWRpbmdXaXRoRGF0YTpKU0Rh
dGFdOwogICAgICAgICBbc3RyZWFtIHJlbGVhc2VdOwpJbmRleDogV2ViS2l0L1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0JKHJldmlzaW9uIDE5OTg2KQorKysgV2ViS2l0L1BsdWdp
bnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0JKHdvcmtpbmcgY29weSkKQEAgLTM5NSw2ICsz
OTUsOSBAQCBzdGF0aWMgVHJhbnNpdGlvblZlY3RvciB0VmVjdG9yRm9yRnVuY3RpCiAgICAgICAg
IGJyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IChOUE5fUmVtb3ZlUHJvcGVydHlQcm9jUHRy
KXRWZWN0b3JGb3JGdW5jdGlvblBvaW50ZXIoKEZ1bmN0aW9uUG9pbnRlcilfTlBOX1JlbW92ZVBy
b3BlcnR5KTsKICAgICAgICAgYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IChOUE5fU2V0RXhj
ZXB0aW9uUHJvY1B0cil0VmVjdG9yRm9yRnVuY3Rpb25Qb2ludGVyKChGdW5jdGlvblBvaW50ZXIp
X05QTl9TZXRFeGNlcHRpb24pOwogCisgICAgICAgIGJyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5h
YmxlZHN0YXRlID0gKE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cil0VmVjdG9yRm9y
RnVuY3Rpb25Qb2ludGVyKChGdW5jdGlvblBvaW50ZXIpTlBOX1B1c2hQb3B1cHNFbmFibGVkU3Rh
dGUpOworICAgICAgICBicm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gKE5QTl9Q
b3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKXRWZWN0b3JGb3JGdW5jdGlvblBvaW50ZXIoKEZ1
bmN0aW9uUG9pbnRlcilOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKTsKKwogI2lmICFMT0dfRElT
QUJMRUQKICAgICAgICAgQ0ZBYnNvbHV0ZVRpbWUgbWFpblN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVH
ZXRDdXJyZW50KCk7CiAjZW5kaWYKQEAgLTQ4Nyw2ICs0OTAsOSBAQCBzdGF0aWMgVHJhbnNpdGlv
blZlY3RvciB0VmVjdG9yRm9yRnVuY3RpCiAgICAgICAgIGJyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0
eSA9IF9OUE5fU2V0UHJvcGVydHk7CiAgICAgICAgIGJyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0
eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7CiAgICAgICAgIGJyb3dzZXJGdW5jcy5zZXRleGNlcHRp
b24gPSBfTlBOX1NldEV4Y2VwdGlvbjsKKyAgICAgICAgCisgICAgICAgIGJyb3dzZXJGdW5jcy5w
dXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7CisgICAg
ICAgIGJyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5h
YmxlZFN0YXRlOwogCiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICBDRkFic29sdXRlVGltZSBp
bml0aWFsaXplU3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKSW5kZXg6IFdlYktp
dC9QbHVnaW5zL25wYXBpLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdpbnMvbnBhcGkubQko
cmV2aXNpb24gMTk5ODYpCisrKyBXZWJLaXQvUGx1Z2lucy9ucGFwaS5tCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTgsMyArMTU4LDEzIEBAIHZvaWQqIE5QTl9HZXRKYXZhUGVlcihOUFAgaW5zdGFuY2Up
CiAgICAgTE9HKFBsdWdpbnMsICJOUE5fR2V0SmF2YVBlZXIiKTsKICAgICByZXR1cm4gTlVMTDsK
IH0KKwordm9pZCBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UsIE5QQm9v
bCBlbmFibGVkKQoreworICAgIExPRyhQbHVnaW5zLCAiTlBOX1B1c2hQb3B1cHNFbmFibGVkU3Rh
dGUiKTsKK30KKwordm9pZCBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSkK
K3sKKyAgICBMT0coUGx1Z2lucywgIk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUiKTsKK30KSW5k
ZXg6IFdlYktpdC9QbHVnaW5zL25wZnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1Bs
dWdpbnMvbnBmdW5jdGlvbnMuaAkocmV2aXNpb24gMTk5ODYpCisrKyBXZWJLaXQvUGx1Z2lucy9u
cGZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBAIHR5cGVkZWYgTlBF
cnJvciAoKk5QTl9HZXRVUkxQcm9jUHRyKShOUFAKIHR5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3N0
VVJMUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdp
bmRvdywgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSk7CiB0eXBlZGVm
IHZvaWQqICgqTlBOX0dldEphdmFFbnZQcm9jUHRyKSh2b2lkKTsKIHR5cGVkZWYgdm9pZCogKCpO
UE5fR2V0SmF2YVBlZXJQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiB2b2lkICgqTlBO
X1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFi
bGVkKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShO
UFAgaW5zdGFuY2UpOwogCiB0eXBlZGVmIHZvaWQgKCpOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZVBy
b2NQdHIpIChOUFZhcmlhbnQgKnZhcmlhbnQpOwogCkBAIC0xMTUsNiArMTE3LDkgQEAgdHlwZWRl
ZiBzdHJ1Y3QgX05QTmV0c2NhcGVGdW5jcyB7CiAgICAgTlBOX0hhc01ldGhvZFByb2NQdHIgaGFz
bWV0aG9kOwogICAgIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlUHJvY1B0ciByZWxlYXNldmFyaWFu
dHZhbHVlOwogICAgIE5QTl9TZXRFeGNlcHRpb25Qcm9jUHRyIHNldGV4Y2VwdGlvbjsKKyAgICAK
KyAgICBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIgcHVzaHBvcHVwc2VuYWJsZWRz
dGF0ZTsKKyAgICBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0ciBwb3Bwb3B1cHNlbmFi
bGVkc3RhdGU7CiB9IE5QTmV0c2NhcGVGdW5jczsKIAogdHlwZWRlZiBzdHJ1Y3QgX05QUGx1Z2lu
RnVuY3MgewpJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzNDkpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAwNy0wMy0yMCAgRGVuZWIgTWVr
ZXRhICA8ZG1la2V0YUBhZG9iZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMw
MjkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vNDk5NDg0OQorICAgICAgICBCdWcgMTMwMjk6IFBl
cm1pdCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJzLgorICAgICAg
ICBDaGFuZ2VzIGluIFdlYktpdFRvb2xzIGFyZSBvbmx5IGZvciB0aGUgTlBBUEkgdGVzdCBwbHVn
aW4uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJv
ai9QbHVnaW5PYmplY3QuYzogbWFpbiB0ZXN0IGxvZ2ljLgorICAgICAgICAocGx1Z2luSW52b2tl
KTogc3VwcG9ydCBudWxsIHdpbmRvdyBhcmd1bWVudCBmb3IgTlBTdHJlYW0gY3JlYXRpb24uCisg
ICAgICAgIChwbHVnaW5BbGxvY2F0ZSk6IGluaXRpYWxpemF0aW9uLgorICAgICAgICAocGx1Z2lu
RGVhbGxvY2F0ZSk6IGNsZWFudXAuCisgICAgICAgIChoYW5kbGVDYWxsYmFjayk6IGFkZCBzZWNv
bmQgSlMgY2FsbGJhY2sgYXJnOiBoZWFkZXIgZHVtcC4KKyAgICAgICAgKG5vdGlmeVN0cmVhbSk6
IGFkZGVkOyBob29rIGZyb20gTlBQX05ld1N0cmVhbSB0byByZWNvcmQgaGVhZGVycy4KKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9QbHVnaW5PYmpl
Y3QuaDogZGVjbGFyYXRpb25zLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2Fw
ZVBsdWdJbi5zdWJwcm9qL21haW4uYzogY2FsbCBuZXcgaGVhZGVyIGhvb2suCisgICAgICAgIChO
UFBfTmV3U3RyZWFtKTogY2FsbCBuZXcgaGVhZGVyIGhvb2suCisKIDIwMDctMDMtMTkgIERhdmlk
IEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSB0aGUgbWluaW11bSBm
b250IHNpemUgcHJlZiB0byBtYXRjaCB0aGUgYWN0dWFsIGRlZmF1bHQgc2V0dGluZyBpbiBTYWZh
cmkuICBJdCBzaG91bGQgaGF2ZSBiZWVuIDEKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVjdC5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9q
L1BsdWdpbk9iamVjdC5jCShyZXZpc2lvbiAxOTk4NikKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVjdC5jCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTIsOSArMjEyLDEyIEBAIHN0YXRpYyBib29sIHBsdWdpbkludm9rZShOUE9i
amVjdCAqaGVhZGUKICAgICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlm
aWVyc1tJRF9URVNUX0dFVF9VUkxfTk9USUZZXSkgewotICAgICAgICBpZiAoYXJnQ291bnQgPT0g
MyAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMF0pICYmIE5QVkFSSUFOVF9JU19TVFJJTkco
YXJnc1sxXSkgJiYgTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzJdKSkgeworICAgICAgICBpZiAo
YXJnQ291bnQgPT0gMworICAgICAgICAgICYmIE5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1swXSkK
KyAgICAgICAgICAmJiAoTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzFdKSB8fCBOUFZBUklBTlRf
SVNfTlVMTChhcmdzWzFdKSkKKyAgICAgICAgICAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3Nb
Ml0pKSB7CiAgICAgICAgICAgICBOUFVURjgqIHVybFN0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9t
TlBWYXJpYW50KCZhcmdzWzBdKTsKLSAgICAgICAgICAgIE5QVVRGOCogdGFyZ2V0U3RyaW5nID0g
Y3JlYXRlQ1N0cmluZ0Zyb21OUFZhcmlhbnQoJmFyZ3NbMV0pOyAgICAgICAgICAgIAorICAgICAg
ICAgICAgTlBVVEY4KiB0YXJnZXRTdHJpbmcgPSAoTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzFd
KSA/IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzWzFdKSA6IE5VTEwpOwogICAgICAg
ICAgICAgTlBVVEY4KiBjYWxsYmFja1N0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50
KCZhcmdzWzJdKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTlBJZGVudGlmaWVyIGNhbGxi
YWNrSWRlbnRpZmllciA9IGJyb3dzZXItPmdldHN0cmluZ2lkZW50aWZpZXIoY2FsbGJhY2tTdHJp
bmcpOwpAQCAtMjU1LDExICsyNTgsMjMgQEAgc3RhdGljIE5QT2JqZWN0ICpwbHVnaW5BbGxvY2F0
ZShOUFAgbnBwLAogICAgIAogICAgIG5ld0luc3RhbmNlLT5ldmVudExvZ2dpbmcgPSBGQUxTRTsK
ICAgICAKKyAgICBuZXdJbnN0YW5jZS0+Zmlyc3RVcmwgPSBOVUxMOworICAgIG5ld0luc3RhbmNl
LT5maXJzdEhlYWRlcnMgPSBOVUxMOworICAgIG5ld0luc3RhbmNlLT5sYXN0VXJsID0gTlVMTDsK
KyAgICBuZXdJbnN0YW5jZS0+bGFzdEhlYWRlcnMgPSBOVUxMOworICAgIAogICAgIHJldHVybiAo
TlBPYmplY3QgKiluZXdJbnN0YW5jZTsKIH0KIAotc3RhdGljIHZvaWQgcGx1Z2luRGVhbGxvY2F0
ZShOUE9iamVjdCAqb2JqKSAKK3N0YXRpYyB2b2lkIHBsdWdpbkRlYWxsb2NhdGUoTlBPYmplY3Qg
KmhlYWRlcikKIHsKKyAgICBQbHVnaW5PYmplY3QgKm9iaiA9IChQbHVnaW5PYmplY3QgKiloZWFk
ZXI7CisKKyAgICBmcmVlKG9iai0+Zmlyc3RVcmwpOworICAgIGZyZWUob2JqLT5maXJzdEhlYWRl
cnMpOworICAgIGZyZWUob2JqLT5sYXN0VXJsKTsKKyAgICBmcmVlKG9iai0+bGFzdEhlYWRlcnMp
OworCiAgICAgZnJlZShvYmopOwogfQogCkBAIC0yNjcsNyArMjgyLDcgQEAgdm9pZCBoYW5kbGVD
YWxsYmFjayhQbHVnaW5PYmplY3QqIG9iamVjdAogewogICAgIGFzc2VydChvYmplY3QpOwogICAg
IAotICAgIE5QVmFyaWFudCBhcmdzWzFdOworICAgIE5QVmFyaWFudCBhcmdzWzJdOwogICAgIAog
ICAgIE5QT2JqZWN0ICp3aW5kb3dTY3JpcHRPYmplY3Q7CiAgICAgYnJvd3Nlci0+Z2V0dmFsdWUo
b2JqZWN0LT5ucHAsIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QsICZ3aW5kb3dTY3JpcHRP
YmplY3QpOwpAQCAtMjc2LDcgKzI5MSw0MCBAQCB2b2lkIGhhbmRsZUNhbGxiYWNrKFBsdWdpbk9i
amVjdCogb2JqZWN0CiAKICAgICBJTlQzMl9UT19OUFZBUklBTlQocmVhc29uLCBhcmdzWzBdKTsK
IAorICAgIGNoYXIgKnN0ckhkciA9IE5VTEw7CisgICAgaWYgKG9iamVjdC0+Zmlyc3RVcmwgJiYg
b2JqZWN0LT5maXJzdEhlYWRlcnMgJiYgb2JqZWN0LT5sYXN0VXJsICYmIG9iamVjdC0+bGFzdEhl
YWRlcnMpIHsKKyAgICAgICAgLy8gRm9ybWF0IGV4cGVjdGVkIGJ5IEphdmFTY3JpcHQgdmFsaWRh
dG9yOiBmb3VyIGZpZWxkcyBzZXBhcmF0ZWQgYnkgXG5cbjoKKyAgICAgICAgLy8gRmlyc3QgVVJM
OyBmaXJzdCBoZWFkZXIgYmxvY2s7IGxhc3QgVVJMOyBsYXN0IGhlYWRlciBibG9jay4KKyAgICAg
ICAgLy8gTm90ZSB0aGF0IGhlYWRlciBibG9ja3MgYWxyZWFkeSBlbmQgd2l0aCBcbiBkdWUgdG8g
aG93IE5QU3RyZWFtOjpoZWFkZXJzIHdvcmtzLgorICAgICAgICBpbnQgbGVuID0gc3RybGVuKG9i
amVjdC0+Zmlyc3RVcmwpICsgMgorICAgICAgICAgICAgKyBzdHJsZW4ob2JqZWN0LT5maXJzdEhl
YWRlcnMpICsgMQorICAgICAgICAgICAgKyBzdHJsZW4ob2JqZWN0LT5sYXN0VXJsKSArIDIKKyAg
ICAgICAgICAgICsgc3RybGVuKG9iamVjdC0+bGFzdEhlYWRlcnMpICsgMTsKKyAgICAgICAgc3Ry
SGRyID0gbWFsbG9jKGxlbiArIDEpOworICAgICAgICBzbnByaW50ZihzdHJIZHIsIHNpemVvZihz
dHJIZHIpLCAiJXNcblxuJXNcbiVzXG5cbiVzXG4iLAorICAgICAgICAgICAgICAgICBvYmplY3Qt
PmZpcnN0VXJsLCBvYmplY3QtPmZpcnN0SGVhZGVycywgb2JqZWN0LT5sYXN0VXJsLCBvYmplY3Qt
Pmxhc3RIZWFkZXJzKTsKKyAgICAgICAgU1RSSU5HTl9UT19OUFZBUklBTlQoc3RySGRyLCBsZW4s
IGFyZ3NbMV0pOworICAgIH0gZWxzZQorICAgICAgICBOVUxMX1RPX05QVkFSSUFOVChhcmdzWzFd
KTsKKwogICAgIE5QVmFyaWFudCBicm93c2VyUmVzdWx0OwotICAgIGJyb3dzZXItPmludm9rZShv
YmplY3QtPm5wcCwgd2luZG93U2NyaXB0T2JqZWN0LCBjYWxsYmFja0lkZW50aWZpZXIsIGFyZ3Ms
IDEsICZicm93c2VyUmVzdWx0KTsKKyAgICBicm93c2VyLT5pbnZva2Uob2JqZWN0LT5ucHAsIHdp
bmRvd1NjcmlwdE9iamVjdCwgY2FsbGJhY2tJZGVudGlmaWVyLCBhcmdzLCAyLCAmYnJvd3NlclJl
c3VsdCk7CiAgICAgYnJvd3Nlci0+cmVsZWFzZXZhcmlhbnR2YWx1ZSgmYnJvd3NlclJlc3VsdCk7
CisKKyAgICBmcmVlKHN0ckhkcik7Cit9CisKK3ZvaWQgbm90aWZ5U3RyZWFtKFBsdWdpbk9iamVj
dCogb2JqZWN0LCBjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmhlYWRlcnMpCit7CisgICAg
aWYgKG9iamVjdC0+Zmlyc3RVcmwgPT0gTlVMTCkgeworICAgICAgICBpZiAodXJsKQorICAgICAg
ICAgICAgb2JqZWN0LT5maXJzdFVybCA9IHN0cmR1cCh1cmwpOworICAgICAgICBpZiAoaGVhZGVy
cykKKyAgICAgICAgICAgIG9iamVjdC0+Zmlyc3RIZWFkZXJzID0gc3RyZHVwKGhlYWRlcnMpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGZyZWUob2JqZWN0LT5sYXN0VXJsKTsKKyAgICAgICAgZnJl
ZShvYmplY3QtPmxhc3RIZWFkZXJzKTsKKyAgICAgICAgb2JqZWN0LT5sYXN0VXJsID0gKHVybCA/
IHN0cmR1cCh1cmwpIDogTlVMTCk7CisgICAgICAgIG9iamVjdC0+bGFzdEhlYWRlcnMgPSAoaGVh
ZGVycyA/IHN0cmR1cChoZWFkZXJzKSA6IE5VTEwpOworICAgIH0KIH0KSW5kZXg6IFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2Fw
ZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVjdC5oCShyZXZpc2lvbiAxOTk4NikKKysrIFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSwxMiBAQCB0eXBlZGVmIHN0cnVjdCB7
CiAgICAgTlBPYmplY3QgaGVhZGVyOwogICAgIE5QUCBucHA7CiAgICAgQm9vbGVhbiBldmVudExv
Z2dpbmc7CisgICAgY2hhciogZmlyc3RVcmw7CisgICAgY2hhciogZmlyc3RIZWFkZXJzOworICAg
IGNoYXIqIGxhc3RVcmw7CisgICAgY2hhciogbGFzdEhlYWRlcnM7CiB9IFBsdWdpbk9iamVjdDsK
IAogZXh0ZXJuIE5QQ2xhc3MgKmdldFBsdWdpbkNsYXNzKHZvaWQpOwogZXh0ZXJuIHZvaWQgaGFu
ZGxlQ2FsbGJhY2soUGx1Z2luT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIgKnVybCwgTlBSZWFz
b24gcmVhc29uLCB2b2lkICpub3RpZnlEYXRhKTsKK2V4dGVybiB2b2lkIG5vdGlmeVN0cmVhbShQ
bHVnaW5PYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICpoZWFkZXJz
KTsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5z
dWJwcm9qL21haW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9tYWluLmMJKHJldmlzaW9uIDE5OTg2KQorKysgV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovbWFpbi5j
CSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5MywxMSBAQCBOUEVycm9yIE5QUF9TZXRXaW5kb3co
TlBQIGluc3RhbmNlLCBOUFdpCiBOUEVycm9yIE5QUF9OZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBO
UE1JTUVUeXBlIHR5cGUsIE5QU3RyZWFtICpzdHJlYW0sIE5QQm9vbCBzZWVrYWJsZSwgdWludDE2
ICpzdHlwZSkKIHsKICAgICAqc3R5cGUgPSBOUF9BU0ZJTEVPTkxZOworCisgICAgUGx1Z2luT2Jq
ZWN0ICpvYmogPSBpbnN0YW5jZS0+cGRhdGE7CisgICAgaWYgKG9iaiAmJiAoYnJvd3Nlci0+dmVy
c2lvbiA+PSBOUFZFUlNfSEFTX1JFU1BPTlNFX0hFQURFUlMpKQorICAgICAgICBub3RpZnlTdHJl
YW0ob2JqLCBzdHJlYW0tPnVybCwgc3RyZWFtLT5oZWFkZXJzKTsKKwogICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKIH0KIAo=
</data>
<flag name="review"
          id="5470"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14013</attachid>
            <date>2007-04-11 17:57:28 -0700</date>
            <delta_ts>2007-04-11 18:02:44 -0700</delta_ts>
            <desc>Proposed solution, take 6</desc>
            <filename>NsPluginResponseHeaders.patch</filename>
            <type>text/plain</type>
            <size>27377</size>
            <attacher name="Deneb Meketa">dmeketa</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzQ5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDctMDMtMjAgIERlbmViIE1l
a2V0YSAgPGRtZWtldGFAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MDI5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzQ5OTQ4NDkKKyAgICAgICAgQnVnIDEzMDI5OiBQ
ZXJtaXQgTlBBUEkgcGx1Zy1pbnMgdG8gc2VlIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4KKyAgICAg
ICAgVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZSBKYXZhU2NyaXB0Q29yZSwgYnV0IHRoYXQn
cyB3aGVyZSBucGFwaS5oIGlzLgorCisgICAgICAgICogYmluZGluZ3MvbnBhcGkuaDoKKyAgICAg
ICAgQWRkIGhlYWRlcnMgbWVtYmVyIHRvIE5QU3RyZWFtIHN0cnVjdC4gIEFsc28gaW5jcmVhc2Ug
TlBfVkVSU0lPTl9NSU5PUiB0byAxNywKKyAgICAgICAgc28gdGhhdCBwbHVnLWlucyBjYW4gc2Fm
ZWx5IGRldGVjdCB3aGV0aGVyIHRvIGxvb2sgZm9yIHRoaXMgbWVtYmVyLiAgQWxzbyBhZGQKKyAg
ICAgICAgb3RoZXIgbWlzc2luZyBiaXRzIG9mIG5wYXBpLmggdG8gY2F0Y2ggdXAgZnJvbSAxNCB0
byAxNy4gIFRoaXMgaW5jbHVkZXMKKyAgICAgICAgZmVhdHVyZXMgdGhhdCBhcmUgbm90IGltcGxl
bWVudGVkIGluIFdlYktpdCwgYnV0IHRob3NlIGFyZSBzYWZlbHkgc3R1YmJlZC4KKwogMjAwNy0w
My0xOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgKiBranMvdmFs
dWUuaDogUm9sbCB+SlNWYWx1ZSBjaGFuZ2Ugb3V0LiBJdCB3YXMgY2F1c2luZyBwcm9ibGVtcy4g
SSdsbCBkbyBpdCByaWdodCBsYXRlci4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25w
YXBpLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvbnBhcGkuaAkocmV2
aXNpb24gMTk5ODYpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNkZWZpbmUg
TlBfVkVSU0lPTl9NQUpPUiAwCi0jZGVmaW5lIE5QX1ZFUlNJT05fTUlOT1IgMTQKKyNkZWZpbmUg
TlBfVkVSU0lPTl9NSU5PUiAxNwogCiAKIApAQCAtMTg3LDYgKzE4NywxNiBAQCB0eXBlZGVmIHN0
cnVjdCBfTlBTdHJlYW0KICAgICB1aW50MzIgICAgICAgZW5kOwogICAgIHVpbnQzMiAgICAgICBs
YXN0bW9kaWZpZWQ7CiAgICAgdm9pZCogICAgICAgIG5vdGlmeURhdGE7CisgICAgY29uc3QgY2hh
ciogIGhlYWRlcnM7ICAgICAgLyogUmVzcG9uc2UgaGVhZGVycyBmcm9tIGhvc3QuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICogRXhpc3RzIG9ubHkgZm9yID49IE5QVkVSU19IQVNf
UkVTUE9OU0VfSEVBREVSUy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBVc2Vk
IGZvciBIVFRQIG9ubHk7IE5VTEwgZm9yIG5vbi1IVFRQLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqIEF2YWlsYWJsZSBmcm9tIE5QUF9OZXdTdHJlYW0gb253YXJkcy4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBQbHVnaW4gc2hvdWxkIGNvcHkgdGhpcyBkYXRh
IGJlZm9yZSBzdG9yaW5nIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIElu
Y2x1ZGVzIEhUVFAgc3RhdHVzIGxpbmUgYW5kIGFsbCBoZWFkZXJzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqIHByZWZlcmFibHkgdmVyYmF0aW0gYXMgcmVjZWl2ZWQgZnJvbSBz
ZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaGVhZGVycyBmb3JtYXR0
ZWQgYXMgaW4gSFRUUCAoIkhlYWRlcjogVmFsdWUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKiBhbmQgbmV3bGluZXMgKFxuLCBOT1QgXHJcbikgc2VwYXJhdGluZyBsaW5lcy4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUZXJtaW5hdGVkIGJ5IFxuXDAgKE5P
VCBcblxuXDApLiAqLwogfSBOUFN0cmVhbTsKIAogCkBAIC0zMTQsNyArMzI0LDEzIEBAIHR5cGVk
ZWYgZW51bSB7CiAgICAgTlBQVnBsdWdpbk5lZWRzWEVtYmVkICAgICAgICAgPSAxNCwgLyogTm90
IGltcGxlbWVudGVkIGluIFdlYktpdCAqLwogCiAgICAgLyogR2V0IHRoZSBOUE9iamVjdCBmb3Ig
c2NyaXB0aW5nIHRoZSBwbHVnaW4uICovCi0gICAgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVj
dCAgPSAxNQorICAgIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QgID0gMTUsCisJCisgICAg
LyogR2V0IHRoZSBwbHVnaW4gdmFsdWUgKGFzIFwwLXRlcm1pbmF0ZWQgVVRGLTggc3RyaW5nIGRh
dGEpIGZvcgorICAgICAqIGZvcm0gc3VibWlzc2lvbiBpZiB0aGUgcGx1Z2luIGlzIHBhcnQgb2Yg
YSBmb3JtLiBVc2UKKyAgICAgKiBOUE5fTWVtQWxsb2MoKSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9y
IHRoZSBzdHJpbmcgZGF0YS4KKyAgICAgKi8KKyAgICBOUFBWZm9ybVZhbHVlID0gMTYgICAgLyog
Tm90IGltcGxlbWVudGVkIGluIFdlYktpdCAqLwogfSBOUFBWYXJpYWJsZTsKIAogLyoKQEAgLTU4
Nyw2ICs2MDMsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgTlBfUG9ydAogI2RlZmluZSBOUFZFUlNfV0lO
MTZfSEFTX0xJVkVDT05ORUNUICAgIDkKICNkZWZpbmUgTlBWRVJTXzY4S19IQVNfTElWRUNPTk5F
Q1QgICAgMTEKICNkZWZpbmUgTlBWRVJTX0hBU19XSU5ET1dMRVNTICAgICAgIDExCisjZGVmaW5l
IE5QVkVSU19IQVNfWFBDT05ORUNUX1NDUklQVElORyAgICAxMyAgLyogTm90IGltcGxlbWVudGVk
IGluIFdlYktpdCAqLworI2RlZmluZSBOUFZFUlNfSEFTX05QUlVOVElNRV9TQ1JJUFRJTkcgICAg
MTQKKyNkZWZpbmUgTlBWRVJTX0hBU19GT1JNX1ZBTFVFUyAgICAgICAgICAgIDE1ICAvKiBOb3Qg
aW1wbGVtZW50ZWQgaW4gV2ViS2l0OyBzZWUgYnVnIDEzMDYxICovCisjZGVmaW5lIE5QVkVSU19I
QVNfUE9QVVBTX0VOQUJMRURfU1RBVEUgICAxNiAgLyogTm90IGltcGxlbWVudGVkIGluIFdlYktp
dCAqLworI2RlZmluZSBOUFZFUlNfSEFTX1JFU1BPTlNFX0hFQURFUlMgICAgICAgMTcKIAogCiAv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwpAQCAtNjc3LDYgKzY5OCw4IEBAIE5QRXJyb3IgICAgIE5QTl9TZXRW
YWx1ZShOUFAgaW5zdGFuY2UsIE4KIHZvaWQgICAgICAgIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAg
aW5zdGFuY2UsIE5QUmVjdCAqaW52YWxpZFJlY3QpOwogdm9pZCAgICAgICAgTlBOX0ludmFsaWRh
dGVSZWdpb24oTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKTsKIHZvaWQgICAg
ICAgIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpOwordm9pZCAgICAgICAgTlBOX1B1c2hQ
b3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCk7ICAvKiBOb3Qg
aW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCit2b2lkICAgICAgICBOUE5fUG9wUG9wdXBzRW5hYmxl
ZFN0YXRlKE5QUCBpbnN0YW5jZSk7ICAgICAgICAgICAgICAgICAgIC8qIE5vdCBpbXBsZW1lbnRl
ZCBpbiBXZWJLaXQgKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9ICAvKiBlbmQgZXh0ZXJuICJD
IiAqLwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzNDkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAwNy0wMy0yMCAgRGVuZWIgTWVrZXRh
ICA8ZG1la2V0YUBhZG9iZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMjkK
KyAgICAgICAgcmRhcjovL3Byb2JsZW0vNDk5NDg0OQorICAgICAgICBCdWcgMTMwMjk6IFBlcm1p
dCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJzLgorCisgICAgICAg
ICogaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNlLWhlYWRlcnMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BsdWdpbnMvbnBhcGktcmVzcG9uc2UtaGVh
ZGVycy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2Vz
L2xvYWQtbWUtMS50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvcGx1Z2lucy9yZXNv
dXJjZXMvbG9hZC1tZS0yLnR4dDogQWRkZWQuCisKIDIwMDctMDMtMjAgIEp1c3RpbiBHYXJjaWEg
IDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBkYXJpbgpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNlLWhlYWRl
cnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1
Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorCitUZXN0IGZvciBidWcg
MTMwMjk6IFBlcm1pdCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJz
LgorCitFeHBlY3RlZCByZXN1bHQgYmVsb3cgaXMgdHdvIEhUVFAgcmVzcG9uc2UgZXh0cmFjdHMs
IG9uZSBmb3IgdGhlIGluaXRpYWwgc3RyZWFtIHNwZWNpZmllZCBpbiB0aGUgInNyYyIgYXR0cmli
dXRlLCB0aGUgb3RoZXIgZm9yIGFuIE5QTl9HZXRVUkxOb3RpZnkgcmVxdWVzdC4gRWFjaCBibG9j
ayBzaG91bGQgY29udGFpbiB0aGUgVVJMOyB0aGUgc3RhdHVzIGxpbmUsIHdoaWNoIHNob3VsZCBz
YXkgIkhUVFAgMjAwIE9LIjsgYW5kIHRoZSBNSU1FLXR5cGUsIHdoaWNoIHNob3VsZCBzYXkgIkNv
bnRlbnQtVHlwZTogdGV4dC9wbGFpbiIuCisKKy0tLS0tLS0tLS0KKworaHR0cDovL1t2YXJpZXMs
IG5vdCBiZWluZyB0ZXN0ZWRdL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMS50eHQKK0hUVFAg
MjAwIE9LCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworLS0tLS0tLS0tLQorCitodHRwOi8v
W3Zhcmllcywgbm90IGJlaW5nIHRlc3RlZF0vcGx1Z2lucy9yZXNvdXJjZXMvbG9hZC1tZS0yLnR4
dAorSFRUUCAyMDAgT0sKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisKSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNl
LWhlYWRlcnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1
Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTggQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciByZXMxLCByZXMy
OworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB0cnkgeworICAgICAgICByZXMxID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdDEiKTsKKyAgICAgICAgcmVzMiA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJyZXN1bHQyIik7CisgICAgICAgIHBsZy5nZXRVUkxOb3RpZnkoIi9wbHVn
aW5zL3Jlc291cmNlcy9sb2FkLW1lLTIudHh0IiwgbnVsbCwgImNhbGxiYWNrIik7CisgICAgfSBj
YXRjaCAoZXgpIHsKKyAgICAgICAgc2hvd0VycigiRXhjZXB0aW9uOiAiICsgZXguZGVzY3JpcHRp
b24pOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKworZnVuY3Rp
b24gY2FsbGJhY2soZXJyQ29kZSwgc3RyZWFtRHVtcCkKK3sKKyAgICB2YXIgcGFyc2UgPSBwYXJz
ZVN0cmVhbUR1bXAoc3RyZWFtRHVtcCk7CisgICAgaWYgKHBhcnNlLmVycikKKyAgICAgICAgc2hv
d0VycihwYXJzZS5lcnIpOworICAgIGVsc2UgeworICAgICAgICByZXMxLmlubmVySFRNTCA9IG5l
d2xpbmVzVG9IVE1MKHBhcnNlLnJlczEpOworICAgICAgICByZXMyLmlubmVySFRNTCA9IG5ld2xp
bmVzVG9IVE1MKHBhcnNlLnJlczIpOworICAgIH0KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
K30KKworLy8gRm9ybWF0IHBhc3NlZCBieSBwbHVnaW46IGZvdXIgZmllbGRzIHNlcGFyYXRlZCBi
eSBcblxuOgorLy8gRmlyc3QgVVJMOyBmaXJzdCBoZWFkZXIgYmxvY2s7IGxhc3QgVVJMOyBsYXN0
IGhlYWRlciBibG9jay4KK2Z1bmN0aW9uIHBhcnNlU3RyZWFtRHVtcChzdHJlYW1EdW1wKQorewor
ICAgIHZhciBydG4gPSB7fTsKKworICAgIGlmICh0eXBlb2Ygc3RyZWFtRHVtcCA9PSAic3RyaW5n
IiB8fCAoKHR5cGVvZiBzdHJlYW1EdW1wID09ICJvYmplY3QiKSAmJiAoc3RyZWFtRHVtcC5jb25z
dHJ1Y3RvciA9PSBTdHJpbmcpKSkgeworICAgICAgICB2YXIgcGFydHMgPSBzdHJlYW1EdW1wLnNw
bGl0KCJcblxuIik7CisgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gNCkgeworICAgICAgICAg
ICAgcnRuLnJlczEgPSBnZW5lcmljVVJMKHBhcnRzWzBdKSArICJcbiIgKyBwYXJzZUhlYWRlcnMo
cGFydHNbMV0pOworICAgICAgICAgICAgcnRuLnJlczIgPSBnZW5lcmljVVJMKHBhcnRzWzJdKSAr
ICJcbiIgKyBwYXJzZUhlYWRlcnMocGFydHNbM10pOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHJ0bi5lcnIgPSAic3RyZWFtRHVtcCBmcm9tIHBsdWdpbiBkb2VzIG5vdCBoYXZlIGV4cGVj
dGVkIGZvcm1hdCI7CisgICAgfSBlbHNlCisgICAgICAgIHJ0bi5lcnIgPSAic3RyZWFtRHVtcCBm
cm9tIHBsdWdpbiBpcyBub3QgYSBzdHJpbmc6ICIgKyBzdHJlYW1EdW1wOworCisgICAgcmV0dXJu
IHJ0bjsKK30KKworZnVuY3Rpb24gc2hvd0VycihlcnIpCit7CisgICAgcmVzMS5pbm5lckhUTUwg
PSAiRkFJTEVEIC0gIiArIGVycjsKKyAgICByZXMyLmlubmVySFRNTCA9ICIiOworfQorCitmdW5j
dGlvbiBuZXdsaW5lc1RvSFRNTChzdHIpCit7CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cbi9n
LCAiPGJyPiIpOworfQorCitmdW5jdGlvbiBnZW5lcmljVVJMKHVybCkKK3sKKyAgICByZXR1cm4g
dXJsLnJlcGxhY2UoL14oaHR0cDpcL1wvKVteXC9dKy8sICIkMVt2YXJpZXMsIG5vdCBiZWluZyB0
ZXN0ZWRdIik7Cit9CisKK2Z1bmN0aW9uIHBhcnNlSGVhZGVycyhoZHJzKQoreworICAgIHZhciBw
YXJ0cyA9IGhkcnMuc3BsaXQoIlxuIik7CisgICAgdmFyIHJ0biA9IHBhcnRzWzBdICsgIlxuIjsK
KworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspCisgICAgICAgIGlm
IChwYXJ0c1tpXS5tYXRjaCgvXkNvbnRlbnQtVHlwZTovKSkKKyAgICAgICAgICAgIHJ0biArPSBw
YXJ0c1tpXTsKKworICAgIHJldHVybiBydG47Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
IG9ubG9hZD0idGVzdCgpIj4KKzxlbWJlZCBuYW1lPSJwbGciIHR5cGU9ImFwcGxpY2F0aW9uL3gt
d2Via2l0LXRlc3QtbmV0c2NhcGUiIHNyYz0iL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMS50
eHQiPjwvZW1iZWQ+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVnemlsbGEub3BlbmRh
cndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDI5Ij5idWcgMTMwMjk8YS8+OgorUGVybWl0IE5Q
QVBJIHBsdWctaW5zIHRvIHNlZSBIVFRQIHJlc3BvbnNlIGhlYWRlcnMuPC9wPgorPHA+RXhwZWN0
ZWQgcmVzdWx0IGJlbG93IGlzIHR3byBIVFRQIHJlc3BvbnNlIGV4dHJhY3RzLCBvbmUgZm9yIHRo
ZSBpbml0aWFsIHN0cmVhbSBzcGVjaWZpZWQgaW4gdGhlICJzcmMiCithdHRyaWJ1dGUsIHRoZSBv
dGhlciBmb3IgYW4gTlBOX0dldFVSTE5vdGlmeSByZXF1ZXN0LiBFYWNoIGJsb2NrIHNob3VsZCBj
b250YWluIHRoZSBVUkw7IHRoZSBzdGF0dXMgbGluZSwKK3doaWNoIHNob3VsZCBzYXkgIkhUVFAg
MjAwIE9LIjsgYW5kIHRoZSBNSU1FLXR5cGUsIHdoaWNoIHNob3VsZCBzYXkgIkNvbnRlbnQtVHlw
ZTogdGV4dC9wbGFpbiIuPC9wPgorPHA+LS0tLS0tLS0tLTwvcD4KKzxwIGlkPSJyZXN1bHQxIj5S
dW5uaW5nIHRlc3QsIHJlc3VsdCBzaG91bGQgYXBwZWFyIGhlcmUgaW4gYSB2ZXJ5IHNob3J0IHRp
bWUuLi48L3A+Cis8cD4tLS0tLS0tLS0tPC9wPgorPHAgaWQ9InJlc3VsdDIiPlJ1bm5pbmcgdGVz
dCwgcmVzdWx0IHNob3VsZCBhcHBlYXIgaGVyZSBpbiBhIHZlcnkgc2hvcnQgdGltZS4uLjwvcD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9y
ZXNvdXJjZXMvbG9hZC1tZS0xLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMS50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMS50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMiBAQAorSXQncyBhIGxvbmVseSBleGlzdGVuY2UgYmVpbmcgYSB0
ZXN0IGZpbGUuCitZb3UncmUgd2VsY29tZS4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
cGx1Z2lucy9yZXNvdXJjZXMvbG9hZC1tZS0yLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMi50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMi50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorT2ggeWVhaC4KK05vYm9keSBsb29raW4n
IGF0IG1lLgorSnVzdCBjaGlsbGluJy4KK1Rlc3QgZmlsZS4KK09oIHllYWguCkluZGV4OiBXZWJL
aXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIw
MzQ5KQorKysgV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDA3LTAzLTIwICBEZW5lYiBNZWtldGEgIDxkbWVrZXRhQGFkb2JlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAyOQorICAgICAgICByZGFyOi8vcHJvYmxlbS80OTk0ODQ5
CisgICAgICAgIEJ1ZyAxMzAyOTogUGVybWl0IE5QQVBJIHBsdWctaW5zIHRvIHNlZSBIVFRQIHJl
c3BvbnNlIGhlYWRlcnMuCisKKyAgICAgICAgKiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdp
blN0cmVhbS5oOiBkZWNsYXJhdGlvbnMuCisgICAgICAgICogUGx1Z2lucy9XZWJCYXNlTmV0c2Nh
cGVQbHVnaW5TdHJlYW0ubTogbWFpbiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKC1bV2ViQmFz
ZU5ldHNjYXBlUGx1Z2luU3RyZWFtIGRlYWxsb2NdKTogY2xlYW51cC4KKyAgICAgICAgKC1bV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtIGZpbmFsaXplXSk6IGNsZWFudXAuCisgICAgICAgICgt
W1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbSBzdGFydFN0cmVhbVJlc3BvbnNlVVJMOmV4cGVj
dGVkQ29udGVudExlbmd0aDpsYXN0TW9kaWZpZWREYXRlOk1JTUVUeXBlOmhlYWRlcnM6XSk6Cisg
ICAgICAgIFBhc3MgaGVhZGVycyBhbG9uZy4KKyAgICAgICAgKC1bV2ViQmFzZU5ldHNjYXBlUGx1
Z2luU3RyZWFtIHN0YXJ0U3RyZWFtV2l0aFJlc3BvbnNlOl0pOgorICAgICAgICBNYWluIHdvcmsg
aXMgaGVyZS4gIEV4dHJhY3QgaGVhZGVycyBmcm9tIE5TSFRUUFVSTFJlc3BvbnNlIG9iamVjdCBp
bnRvIGEgYnl0ZSBzZXF1ZW5jZS4KKyAgICAgICAgU2VlIGNvbW1lbnRzIGhlcmUgYWJvdXQgaG93
IGl0IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBsb3ctbGV2ZWwgYWNjZXNzIHRvIHRoZSBIVFRQIHJl
c3BvbnNlLgorICAgICAgICAoLVtXZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0gX2Rlc3Ryb3lT
dHJlYW1dKTogY2xlYW51cC4KKyAgICAgICAgKiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdp
blZpZXcubW06CisgICAgICAgICgtW1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgZXZhbHVhdGVK
YXZhU2NyaXB0UGx1Z2luUmVxdWVzdDpdKToKKyAgICAgICAgQ29uZm9ybSB0byBuZXcgc3RhcnRT
dHJlYW0gcGFyYW1zLiAgTm90IGFwcGxpY2FibGUgaGVyZSwgcGFzcyBuaWwuCisgICAgICAgICog
UGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubToKKyAgICAgICAgKC1bV2ViTmV0c2Nh
cGVQbHVnaW5QYWNrYWdlIGxvYWRdKToKKyAgICAgICAgRmlsbCBpbiBuZXcgYnJvd3NlckZ1bmNz
IG1lbWJlcnMgKHdpdGggc3R1YnMpIHJlcXVpcmVkIGJ5IG5ldyBucGFwaS5oIHZlcnNpb24uCisg
ICAgICAgICogUGx1Z2lucy9ucGFwaS5tOiBOUEFQSSBzdHVicy4KKyAgICAgICAgKE5QTl9QdXNo
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUp
OgorICAgICAgICAqIFBsdWdpbnMvbnBmdW5jdGlvbnMuaDogTlBBUEkgZGVjbGFyYXRpb25zLgor
CiAyMDA3LTAzLTE5ICBBbmRlcnMgQ2FybHNzb24gIDxhY2FybHNzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCkluZGV4OiBXZWJLaXQvUGx1Z2lucy9XZWJC
YXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvUGx1Z2lucy9X
ZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0uaAkocmV2aXNpb24gMTk5ODYpCisrKyBXZWJLaXQv
UGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNiArNDgsNyBAQAogICAgIGNoYXIgKnBhdGg7CiAgICAgQk9PTCBzZW5kTm90aWZpY2F0aW9u
OwogICAgIHZvaWQgKm5vdGlmeURhdGE7CisgICAgY2hhciAqaGVhZGVyczsKICAgICBXZWJCYXNl
TmV0c2NhcGVQbHVnaW5WaWV3ICpwbHVnaW5WaWV3OwogICAgIE5QUmVhc29uIHJlYXNvbjsKICAg
ICBCT09MIGlzVGVybWluYXRlZDsKQEAgLTc4LDcgKzc5LDggQEAKIC0gKHZvaWQpc3RhcnRTdHJl
YW1SZXNwb25zZVVSTDooTlNVUkwgKil0aGVSZXNwb25zZVVSTAogICAgICAgICAgZXhwZWN0ZWRD
b250ZW50TGVuZ3RoOihsb25nIGxvbmcpZXhwZWN0ZWRDb250ZW50TGVuZ3RoCiAgICAgICAgICAg
ICAgIGxhc3RNb2RpZmllZERhdGU6KE5TRGF0ZSAqKWxhc3RNb2RpZmllZERhdGUKLSAgICAgICAg
ICAgICAgICAgICAgICBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZTsKKyAgICAgICAgICAg
ICAgICAgICAgICBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZQorICAgICAgICAgICAgICAg
ICAgICAgICBoZWFkZXJzOihOU0RhdGEgKil0aGVIZWFkZXJzOwogCiAvLyBjYW5jZWxMb2FkV2l0
aEVycm9yIGNhbmNlbHMgdGhlIE5TVVJMQ29ubmVjdGlvbiBhbmQgaW5mb3JtcyBXZWJLaXQgb2Yg
dGhlIGxvYWQgZXJyb3IuCiAvLyBUaGlzIG1ldGhvZCBpcyBvdmVycmlkZW4gYnkgc3ViY2xhc3Nl
cy4KSW5kZXg6IFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbS5tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbS5t
CShyZXZpc2lvbiAxOTk4NikKKysrIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdp
blN0cmVhbS5tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDcgQEAgc3RhdGljIGNoYXIg
KkNhcmJvblBhdGhGcm9tUE9TSVhQYXRoKGNvbgogICAgIAogICAgIGZyZWUoKHZvaWQgKilzdHJl
YW0udXJsKTsKICAgICBmcmVlKHBhdGgpOworICAgIGZyZWUoaGVhZGVycyk7CiAKICAgICBbc3Vw
ZXIgZGVhbGxvY107CiB9CkBAIC0xNDMsNiArMTQ0LDcgQEAgc3RhdGljIGNoYXIgKkNhcmJvblBh
dGhGcm9tUE9TSVhQYXRoKGNvbgogCiAgICAgZnJlZSgodm9pZCAqKXN0cmVhbS51cmwpOwogICAg
IGZyZWUocGF0aCk7CisgICAgZnJlZShoZWFkZXJzKTsKIAogICAgIFtzdXBlciBmaW5hbGl6ZV07
CiB9CkBAIC0yMTEsNiArMjEzLDcgQEAgc3RhdGljIGNoYXIgKkNhcmJvblBhdGhGcm9tUE9TSVhQ
YXRoKGNvbgogICAgICAgICAgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOihsb25nIGxvbmcpZXhwZWN0
ZWRDb250ZW50TGVuZ3RoCiAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZERhdGU6KE5TRGF0ZSAq
KWxhc3RNb2RpZmllZERhdGUKICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTooTlNTdHJp
bmcgKil0aGVNSU1FVHlwZQorICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOihOU0RhdGEg
Kil0aGVIZWFkZXJzCiB7CiAgICAgQVNTRVJUKCFpc1Rlcm1pbmF0ZWQpOwogICAgIApAQCAtMjI0
LDcgKzIyNywxNSBAQCBzdGF0aWMgY2hhciAqQ2FyYm9uUGF0aEZyb21QT1NJWFBhdGgoY29uCiAg
ICAgc3RyZWFtLmVuZCA9IGV4cGVjdGVkQ29udGVudExlbmd0aCA+IDAgPyBleHBlY3RlZENvbnRl
bnRMZW5ndGggOiAwOwogICAgIHN0cmVhbS5sYXN0bW9kaWZpZWQgPSBbbGFzdE1vZGlmaWVkRGF0
ZSB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBdOwogICAgIHN0cmVhbS5ub3RpZnlEYXRhID0gbm90aWZ5
RGF0YTsKLSAgICAKKworICAgIGlmICh0aGVIZWFkZXJzKSB7CisgICAgICAgIHVuc2lnbmVkIGxl
biA9IFt0aGVIZWFkZXJzIGxlbmd0aF07CisgICAgICAgIGhlYWRlcnMgPSBtYWxsb2MobGVuICsg
MSk7CisgICAgICAgIFt0aGVIZWFkZXJzIGdldEJ5dGVzOmhlYWRlcnNdOworICAgICAgICBoZWFk
ZXJzW2xlbl0gPSAwOworICAgICAgICBzdHJlYW0uaGVhZGVycyA9IGhlYWRlcnM7CisgICAgfQor
CiAgICAgdHJhbnNmZXJNb2RlID0gTlBfTk9STUFMOwogICAgIG9mZnNldCA9IDA7CiAgICAgcmVh
c29uID0gV0VCX1JFQVNPTl9OT05FOwpAQCAtMjY0LDEwICsyNzUsNTAgQEAgc3RhdGljIGNoYXIg
KkNhcmJvblBhdGhGcm9tUE9TSVhQYXRoKGNvbgogCiAtICh2b2lkKXN0YXJ0U3RyZWFtV2l0aFJl
c3BvbnNlOihOU1VSTFJlc3BvbnNlICopcgogeworICAgIE5TTXV0YWJsZURhdGEgKnRoZUhlYWRl
cnMgPSBuaWw7CisgICAgaWYgKFtyIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNs
YXNzXV0pIHsKKyAgICAgICAgTlNIVFRQVVJMUmVzcG9uc2UgKmh0dHBSZXNwb25zZSA9IChOU0hU
VFBVUkxSZXNwb25zZSAqKXI7CisgICAgICAgIHRoZUhlYWRlcnMgPSBbTlNNdXRhYmxlRGF0YSBk
YXRhV2l0aENhcGFjaXR5OjEwMjRdOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IGl0IHdv
dWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBnZXQgdGhlIHJhdyBIVFRQIGhlYWRlciBibG9jay4K
KyAgICAgICAgLy8gVGhpcyBpbmNsdWRlcyB0aGUgSFRUUCB2ZXJzaW9uLCB0aGUgcmVhbCBzdGF0
dXMgdGV4dCwKKyAgICAgICAgLy8gYWxsIGhlYWRlcnMgaW4gdGhlaXIgb3JpZ2luYWwgb3JkZXIg
YW5kIGluY2x1ZGluZyBkdXBsaWNhdGVzLAorICAgICAgICAvLyBhbmQgYWxsIG9yaWdpbmFsIGJ5
dGVzIHZlcmJhdGltLCByYXRoZXIgdGhhbiBzZW50IHRocm91Z2ggVW5pY29kZSB0cmFuc2xhdGlv
bi4KKyAgICAgICAgLy8gVW5mb3J0dW5hdGVseSBOU0hUVFBVUkxSZXNwb25zZSBkb2Vzbid0IHBy
b3ZpZGUgYWNjZXNzIGF0IHRoYXQgbG93IGEgbGV2ZWwuCisgICAgICAgIAorICAgICAgICBbdGhl
SGVhZGVycyBhcHBlbmRCeXRlczoiSFRUUCAiIGxlbmd0aDo1XTsKKyAgICAgICAgY2hhciBzdGF0
dXNTdHJbMTBdOworICAgICAgICBzbnByaW50ZihzdGF0dXNTdHIsIHNpemVvZihzdGF0dXNTdHIp
LCAiJWQiLCBbaHR0cFJlc3BvbnNlIHN0YXR1c0NvZGVdKTsKKyAgICAgICAgW3RoZUhlYWRlcnMg
YXBwZW5kQnl0ZXM6c3RhdHVzU3RyIGxlbmd0aDpzdHJsZW4oc3RhdHVzU3RyKV07CisgICAgICAg
IFt0aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOiIgT0tcbiIgbGVuZ3RoOjRdOworCisgICAgICAgIC8v
IEhBQ0s6IHBhc3MgdGhlIGhlYWRlcnMgdGhyb3VnaCBhcyBVVEYtOC4KKyAgICAgICAgLy8gVGhp
cyBpcyBub3QgdGhlIGludGVuZGVkIGJlaGF2aW9yOyB3ZSdyZSBzdXBwb3NlZCB0byBwYXNzIG9y
aWdpbmFsIGJ5dGVzIHZlcmJhdGltLgorICAgICAgICAvLyBCdXQgd2UgZG9uJ3QgaGF2ZSB0aGUg
b3JpZ2luYWwgYnl0ZXMsIHdlIGhhdmUgTlNTdHJpbmdzIGJ1aWx0IGJ5IHRoZSBVUkwgbG9hZGlu
ZyBzeXN0ZW0uCisgICAgICAgIC8vIEl0IGhvcGVmdWxseSBzaG91bGRuJ3QgbWF0dGVyLCBzaW5j
ZSBSRkMyNjE2L1JGQzgyMiByZXF1aXJlIEFTQ0lJLW9ubHkgaGVhZGVycywKKyAgICAgICAgLy8g
YnV0IHN1cmVseSBzb21lb25lIG91dCB0aGVyZSBpcyB1c2luZyBub24tQVNDSUkgY2hhcmFjdGVy
cywgYW5kIGhvcGVmdWxseSBVVEYtOCBpcyBhZGVxdWF0ZSBoZXJlLgorICAgICAgICAvLyBJdCBz
ZWVtcyBiZXR0ZXIgdGhhbiBOU0FTQ0lJU3RyaW5nRW5jb2RpbmcsIHdoaWNoIHdpbGwgbG9zZSBp
bmZvcm1hdGlvbiBpZiBub24tQVNDSUkgaXMgdXNlZC4KKworICAgICAgICBOU0RpY3Rpb25hcnkg
KmhlYWRlckRpY3QgPSBbaHR0cFJlc3BvbnNlIGFsbEhlYWRlckZpZWxkc107CisgICAgICAgIE5T
QXJyYXkgKmtleXMgPSBbW2hlYWRlckRpY3QgYWxsS2V5c10gc29ydGVkQXJyYXlVc2luZ1NlbGVj
dG9yOkBzZWxlY3RvcihjYXNlSW5zZW5zaXRpdmVDb21wYXJlOildOworICAgICAgICBOU0VudW1l
cmF0b3IgKmkgPSBba2V5cyBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICAgICAgTlNTdHJpbmcgKms7
CisgICAgICAgIHdoaWxlICgoayA9IFtpIG5leHRPYmplY3RdKSAhPSBuaWwpIHsKKyAgICAgICAg
ICAgIE5TU3RyaW5nICp2ID0gW2hlYWRlckRpY3Qgb2JqZWN0Rm9yS2V5OmtdOworICAgICAgICAg
ICAgW3RoZUhlYWRlcnMgYXBwZW5kRGF0YTpbayBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZ11dOworICAgICAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6IjogIiBs
ZW5ndGg6Ml07CisgICAgICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmREYXRhOlt2IGRhdGFVc2lu
Z0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07CisgICAgICAgICAgICBbdGhlSGVhZGVy
cyBhcHBlbmRCeXRlczoiXG4iIGxlbmd0aDoxXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHN0
YXJ0U3RyZWFtUmVzcG9uc2VVUkw6Li4uIHdpbGwgbnVsbC10ZXJtaW5hdGUuCisgICAgfQorCiAg
ICAgW3NlbGYgc3RhcnRTdHJlYW1SZXNwb25zZVVSTDpbciBVUkxdCiAgICAgICAgICAgIGV4cGVj
dGVkQ29udGVudExlbmd0aDpbciBleHBlY3RlZENvbnRlbnRMZW5ndGhdCiAgICAgICAgICAgICAg
ICAgbGFzdE1vZGlmaWVkRGF0ZTpXS0dldE5TVVJMUmVzcG9uc2VMYXN0TW9kaWZpZWREYXRlKHIp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpbciBNSU1FVHlwZV1dOworICAgICAg
ICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6W3IgTUlNRVR5cGVdCisgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVhZGVyczp0aGVIZWFkZXJzXTsKIH0KIAogLSAodm9pZClfZGVzdHJveVN0cmVh
bQpAQCAtMzA0LDYgKzM1NSwxMCBAQCBzdGF0aWMgY2hhciAqQ2FyYm9uUGF0aEZyb21QT1NJWFBh
dGgoY29uCiAgICAgICAgIFtwbHVnaW5WaWV3IGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAg
ICAgIExPRyhQbHVnaW5zLCAiTlBQX0Rlc3Ryb3lTdHJlYW0gcmVzcG9uc2VVUkw9JUAgZXJyb3I9
JWQiLCByZXNwb25zZVVSTCwgbnBFcnIpOwogICAgICAgICAKKyAgICAgICAgZnJlZShoZWFkZXJz
KTsKKyAgICAgICAgaGVhZGVycyA9IE5VTEw7CisgICAgICAgIHN0cmVhbS5oZWFkZXJzID0gTlVM
TDsKKwogICAgICAgICBzdHJlYW0ubmRhdGEgPSBuaWw7CiAgICAgfQogICAgIApJbmRleDogV2Vi
S2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCShyZXZpc2lvbiAxOTk4
NikKKysrIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE5MjEsNyArMTkyMSw4IEBAIHN0YXRpYyBPU1N0YXR1cyBUU01FdmVudEhh
bmRsZXIoRXZlbnRIYW4KICAgICAgICAgW3N0cmVhbSBzdGFydFN0cmVhbVJlc3BvbnNlVVJMOlVS
TAogICAgICAgICAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGg6W0pTRGF0YSBsZW5ndGhd
CiAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkRGF0ZTpuaWwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAidGV4dC9wbGFpbiJdOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJ0ZXh0L3BsYWluIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlYWRlcnM6bmlsXTsKICAgICAgICAgW3N0cmVhbSByZWNlaXZlZERh
dGE6SlNEYXRhXTsKICAgICAgICAgW3N0cmVhbSBmaW5pc2hlZExvYWRpbmdXaXRoRGF0YTpKU0Rh
dGFdOwogICAgICAgICBbc3RyZWFtIHJlbGVhc2VdOwpJbmRleDogV2ViS2l0L1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0JKHJldmlzaW9uIDE5OTg2KQorKysgV2ViS2l0L1BsdWdp
bnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0JKHdvcmtpbmcgY29weSkKQEAgLTM5NSw2ICsz
OTUsOSBAQCBzdGF0aWMgVHJhbnNpdGlvblZlY3RvciB0VmVjdG9yRm9yRnVuY3RpCiAgICAgICAg
IGJyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IChOUE5fUmVtb3ZlUHJvcGVydHlQcm9jUHRy
KXRWZWN0b3JGb3JGdW5jdGlvblBvaW50ZXIoKEZ1bmN0aW9uUG9pbnRlcilfTlBOX1JlbW92ZVBy
b3BlcnR5KTsKICAgICAgICAgYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IChOUE5fU2V0RXhj
ZXB0aW9uUHJvY1B0cil0VmVjdG9yRm9yRnVuY3Rpb25Qb2ludGVyKChGdW5jdGlvblBvaW50ZXIp
X05QTl9TZXRFeGNlcHRpb24pOwogCisgICAgICAgIGJyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5h
YmxlZHN0YXRlID0gKE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cil0VmVjdG9yRm9y
RnVuY3Rpb25Qb2ludGVyKChGdW5jdGlvblBvaW50ZXIpTlBOX1B1c2hQb3B1cHNFbmFibGVkU3Rh
dGUpOworICAgICAgICBicm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gKE5QTl9Q
b3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKXRWZWN0b3JGb3JGdW5jdGlvblBvaW50ZXIoKEZ1
bmN0aW9uUG9pbnRlcilOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKTsKKwogI2lmICFMT0dfRElT
QUJMRUQKICAgICAgICAgQ0ZBYnNvbHV0ZVRpbWUgbWFpblN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVH
ZXRDdXJyZW50KCk7CiAjZW5kaWYKQEAgLTQ4Nyw2ICs0OTAsOSBAQCBzdGF0aWMgVHJhbnNpdGlv
blZlY3RvciB0VmVjdG9yRm9yRnVuY3RpCiAgICAgICAgIGJyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0
eSA9IF9OUE5fU2V0UHJvcGVydHk7CiAgICAgICAgIGJyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0
eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7CiAgICAgICAgIGJyb3dzZXJGdW5jcy5zZXRleGNlcHRp
b24gPSBfTlBOX1NldEV4Y2VwdGlvbjsKKyAgICAgICAgCisgICAgICAgIGJyb3dzZXJGdW5jcy5w
dXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7CisgICAg
ICAgIGJyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5h
YmxlZFN0YXRlOwogCiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICBDRkFic29sdXRlVGltZSBp
bml0aWFsaXplU3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKSW5kZXg6IFdlYktp
dC9QbHVnaW5zL25wYXBpLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdpbnMvbnBhcGkubQko
cmV2aXNpb24gMTk5ODYpCisrKyBXZWJLaXQvUGx1Z2lucy9ucGFwaS5tCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTgsMyArMTU4LDEzIEBAIHZvaWQqIE5QTl9HZXRKYXZhUGVlcihOUFAgaW5zdGFuY2Up
CiAgICAgTE9HKFBsdWdpbnMsICJOUE5fR2V0SmF2YVBlZXIiKTsKICAgICByZXR1cm4gTlVMTDsK
IH0KKwordm9pZCBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UsIE5QQm9v
bCBlbmFibGVkKQoreworICAgIExPRyhQbHVnaW5zLCAiTlBOX1B1c2hQb3B1cHNFbmFibGVkU3Rh
dGUiKTsKK30KKwordm9pZCBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSkK
K3sKKyAgICBMT0coUGx1Z2lucywgIk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUiKTsKK30KSW5k
ZXg6IFdlYktpdC9QbHVnaW5zL25wZnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1Bs
dWdpbnMvbnBmdW5jdGlvbnMuaAkocmV2aXNpb24gMTk5ODYpCisrKyBXZWJLaXQvUGx1Z2lucy9u
cGZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBAIHR5cGVkZWYgTlBF
cnJvciAoKk5QTl9HZXRVUkxQcm9jUHRyKShOUFAKIHR5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3N0
VVJMUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdp
bmRvdywgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSk7CiB0eXBlZGVm
IHZvaWQqICgqTlBOX0dldEphdmFFbnZQcm9jUHRyKSh2b2lkKTsKIHR5cGVkZWYgdm9pZCogKCpO
UE5fR2V0SmF2YVBlZXJQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiB2b2lkICgqTlBO
X1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFi
bGVkKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShO
UFAgaW5zdGFuY2UpOwogCiB0eXBlZGVmIHZvaWQgKCpOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZVBy
b2NQdHIpIChOUFZhcmlhbnQgKnZhcmlhbnQpOwogCkBAIC0xMTUsNiArMTE3LDkgQEAgdHlwZWRl
ZiBzdHJ1Y3QgX05QTmV0c2NhcGVGdW5jcyB7CiAgICAgTlBOX0hhc01ldGhvZFByb2NQdHIgaGFz
bWV0aG9kOwogICAgIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlUHJvY1B0ciByZWxlYXNldmFyaWFu
dHZhbHVlOwogICAgIE5QTl9TZXRFeGNlcHRpb25Qcm9jUHRyIHNldGV4Y2VwdGlvbjsKKyAgICAK
KyAgICBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIgcHVzaHBvcHVwc2VuYWJsZWRz
dGF0ZTsKKyAgICBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0ciBwb3Bwb3B1cHNlbmFi
bGVkc3RhdGU7CiB9IE5QTmV0c2NhcGVGdW5jczsKIAogdHlwZWRlZiBzdHJ1Y3QgX05QUGx1Z2lu
RnVuY3MgewpJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzNDkpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAwNy0wMy0yMCAgRGVuZWIgTWVr
ZXRhICA8ZG1la2V0YUBhZG9iZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMw
MjkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vNDk5NDg0OQorICAgICAgICBCdWcgMTMwMjk6IFBl
cm1pdCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJzLgorICAgICAg
ICBDaGFuZ2VzIGluIFdlYktpdFRvb2xzIGFyZSBvbmx5IGZvciB0aGUgTlBBUEkgdGVzdCBwbHVn
aW4uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJv
ai9QbHVnaW5PYmplY3QuYzogbWFpbiB0ZXN0IGxvZ2ljLgorICAgICAgICAocGx1Z2luSW52b2tl
KTogc3VwcG9ydCBudWxsIHdpbmRvdyBhcmd1bWVudCBmb3IgTlBTdHJlYW0gY3JlYXRpb24uCisg
ICAgICAgIChwbHVnaW5BbGxvY2F0ZSk6IGluaXRpYWxpemF0aW9uLgorICAgICAgICAocGx1Z2lu
RGVhbGxvY2F0ZSk6IGNsZWFudXAuCisgICAgICAgIChoYW5kbGVDYWxsYmFjayk6IGFkZCBzZWNv
bmQgSlMgY2FsbGJhY2sgYXJnOiBoZWFkZXIgZHVtcC4KKyAgICAgICAgKG5vdGlmeVN0cmVhbSk6
IGFkZGVkOyBob29rIGZyb20gTlBQX05ld1N0cmVhbSB0byByZWNvcmQgaGVhZGVycy4KKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9QbHVnaW5PYmpl
Y3QuaDogZGVjbGFyYXRpb25zLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2Fw
ZVBsdWdJbi5zdWJwcm9qL21haW4uYzogY2FsbCBuZXcgaGVhZGVyIGhvb2suCisgICAgICAgIChO
UFBfTmV3U3RyZWFtKTogY2FsbCBuZXcgaGVhZGVyIGhvb2suCisKIDIwMDctMDMtMTkgIERhdmlk
IEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSB0aGUgbWluaW11bSBm
b250IHNpemUgcHJlZiB0byBtYXRjaCB0aGUgYWN0dWFsIGRlZmF1bHQgc2V0dGluZyBpbiBTYWZh
cmkuICBJdCBzaG91bGQgaGF2ZSBiZWVuIDEKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVjdC5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9q
L1BsdWdpbk9iamVjdC5jCShyZXZpc2lvbiAxOTk4NikKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVjdC5jCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTIsOSArMjEyLDEyIEBAIHN0YXRpYyBib29sIHBsdWdpbkludm9rZShOUE9i
amVjdCAqaGVhZGUKICAgICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlm
aWVyc1tJRF9URVNUX0dFVF9VUkxfTk9USUZZXSkgewotICAgICAgICBpZiAoYXJnQ291bnQgPT0g
MyAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMF0pICYmIE5QVkFSSUFOVF9JU19TVFJJTkco
YXJnc1sxXSkgJiYgTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzJdKSkgeworICAgICAgICBpZiAo
YXJnQ291bnQgPT0gMworICAgICAgICAgICYmIE5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1swXSkK
KyAgICAgICAgICAmJiAoTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzFdKSB8fCBOUFZBUklBTlRf
SVNfTlVMTChhcmdzWzFdKSkKKyAgICAgICAgICAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3Nb
Ml0pKSB7CiAgICAgICAgICAgICBOUFVURjgqIHVybFN0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9t
TlBWYXJpYW50KCZhcmdzWzBdKTsKLSAgICAgICAgICAgIE5QVVRGOCogdGFyZ2V0U3RyaW5nID0g
Y3JlYXRlQ1N0cmluZ0Zyb21OUFZhcmlhbnQoJmFyZ3NbMV0pOyAgICAgICAgICAgIAorICAgICAg
ICAgICAgTlBVVEY4KiB0YXJnZXRTdHJpbmcgPSAoTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzFd
KSA/IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzWzFdKSA6IE5VTEwpOwogICAgICAg
ICAgICAgTlBVVEY4KiBjYWxsYmFja1N0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50
KCZhcmdzWzJdKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTlBJZGVudGlmaWVyIGNhbGxi
YWNrSWRlbnRpZmllciA9IGJyb3dzZXItPmdldHN0cmluZ2lkZW50aWZpZXIoY2FsbGJhY2tTdHJp
bmcpOwpAQCAtMjU1LDExICsyNTgsMjMgQEAgc3RhdGljIE5QT2JqZWN0ICpwbHVnaW5BbGxvY2F0
ZShOUFAgbnBwLAogICAgIAogICAgIG5ld0luc3RhbmNlLT5ldmVudExvZ2dpbmcgPSBGQUxTRTsK
ICAgICAKKyAgICBuZXdJbnN0YW5jZS0+Zmlyc3RVcmwgPSBOVUxMOworICAgIG5ld0luc3RhbmNl
LT5maXJzdEhlYWRlcnMgPSBOVUxMOworICAgIG5ld0luc3RhbmNlLT5sYXN0VXJsID0gTlVMTDsK
KyAgICBuZXdJbnN0YW5jZS0+bGFzdEhlYWRlcnMgPSBOVUxMOworICAgIAogICAgIHJldHVybiAo
TlBPYmplY3QgKiluZXdJbnN0YW5jZTsKIH0KIAotc3RhdGljIHZvaWQgcGx1Z2luRGVhbGxvY2F0
ZShOUE9iamVjdCAqb2JqKSAKK3N0YXRpYyB2b2lkIHBsdWdpbkRlYWxsb2NhdGUoTlBPYmplY3Qg
KmhlYWRlcikKIHsKKyAgICBQbHVnaW5PYmplY3QgKm9iaiA9IChQbHVnaW5PYmplY3QgKiloZWFk
ZXI7CisKKyAgICBmcmVlKG9iai0+Zmlyc3RVcmwpOworICAgIGZyZWUob2JqLT5maXJzdEhlYWRl
cnMpOworICAgIGZyZWUob2JqLT5sYXN0VXJsKTsKKyAgICBmcmVlKG9iai0+bGFzdEhlYWRlcnMp
OworCiAgICAgZnJlZShvYmopOwogfQogCkBAIC0yNjcsNyArMjgyLDcgQEAgdm9pZCBoYW5kbGVD
YWxsYmFjayhQbHVnaW5PYmplY3QqIG9iamVjdAogewogICAgIGFzc2VydChvYmplY3QpOwogICAg
IAotICAgIE5QVmFyaWFudCBhcmdzWzFdOworICAgIE5QVmFyaWFudCBhcmdzWzJdOwogICAgIAog
ICAgIE5QT2JqZWN0ICp3aW5kb3dTY3JpcHRPYmplY3Q7CiAgICAgYnJvd3Nlci0+Z2V0dmFsdWUo
b2JqZWN0LT5ucHAsIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QsICZ3aW5kb3dTY3JpcHRP
YmplY3QpOwpAQCAtMjc2LDcgKzI5MSw0MCBAQCB2b2lkIGhhbmRsZUNhbGxiYWNrKFBsdWdpbk9i
amVjdCogb2JqZWN0CiAKICAgICBJTlQzMl9UT19OUFZBUklBTlQocmVhc29uLCBhcmdzWzBdKTsK
IAorICAgIGNoYXIgKnN0ckhkciA9IE5VTEw7CisgICAgaWYgKG9iamVjdC0+Zmlyc3RVcmwgJiYg
b2JqZWN0LT5maXJzdEhlYWRlcnMgJiYgb2JqZWN0LT5sYXN0VXJsICYmIG9iamVjdC0+bGFzdEhl
YWRlcnMpIHsKKyAgICAgICAgLy8gRm9ybWF0IGV4cGVjdGVkIGJ5IEphdmFTY3JpcHQgdmFsaWRh
dG9yOiBmb3VyIGZpZWxkcyBzZXBhcmF0ZWQgYnkgXG5cbjoKKyAgICAgICAgLy8gRmlyc3QgVVJM
OyBmaXJzdCBoZWFkZXIgYmxvY2s7IGxhc3QgVVJMOyBsYXN0IGhlYWRlciBibG9jay4KKyAgICAg
ICAgLy8gTm90ZSB0aGF0IGhlYWRlciBibG9ja3MgYWxyZWFkeSBlbmQgd2l0aCBcbiBkdWUgdG8g
aG93IE5QU3RyZWFtOjpoZWFkZXJzIHdvcmtzLgorICAgICAgICBpbnQgbGVuID0gc3RybGVuKG9i
amVjdC0+Zmlyc3RVcmwpICsgMgorICAgICAgICAgICAgKyBzdHJsZW4ob2JqZWN0LT5maXJzdEhl
YWRlcnMpICsgMQorICAgICAgICAgICAgKyBzdHJsZW4ob2JqZWN0LT5sYXN0VXJsKSArIDIKKyAg
ICAgICAgICAgICsgc3RybGVuKG9iamVjdC0+bGFzdEhlYWRlcnMpICsgMTsKKyAgICAgICAgc3Ry
SGRyID0gbWFsbG9jKGxlbiArIDEpOworICAgICAgICBzbnByaW50ZihzdHJIZHIsIHNpemVvZihz
dHJIZHIpLCAiJXNcblxuJXNcbiVzXG5cbiVzXG4iLAorICAgICAgICAgICAgICAgICBvYmplY3Qt
PmZpcnN0VXJsLCBvYmplY3QtPmZpcnN0SGVhZGVycywgb2JqZWN0LT5sYXN0VXJsLCBvYmplY3Qt
Pmxhc3RIZWFkZXJzKTsKKyAgICAgICAgU1RSSU5HTl9UT19OUFZBUklBTlQoc3RySGRyLCBsZW4s
IGFyZ3NbMV0pOworICAgIH0gZWxzZQorICAgICAgICBOVUxMX1RPX05QVkFSSUFOVChhcmdzWzFd
KTsKKwogICAgIE5QVmFyaWFudCBicm93c2VyUmVzdWx0OwotICAgIGJyb3dzZXItPmludm9rZShv
YmplY3QtPm5wcCwgd2luZG93U2NyaXB0T2JqZWN0LCBjYWxsYmFja0lkZW50aWZpZXIsIGFyZ3Ms
IDEsICZicm93c2VyUmVzdWx0KTsKKyAgICBicm93c2VyLT5pbnZva2Uob2JqZWN0LT5ucHAsIHdp
bmRvd1NjcmlwdE9iamVjdCwgY2FsbGJhY2tJZGVudGlmaWVyLCBhcmdzLCAyLCAmYnJvd3NlclJl
c3VsdCk7CiAgICAgYnJvd3Nlci0+cmVsZWFzZXZhcmlhbnR2YWx1ZSgmYnJvd3NlclJlc3VsdCk7
CisKKyAgICBmcmVlKHN0ckhkcik7Cit9CisKK3ZvaWQgbm90aWZ5U3RyZWFtKFBsdWdpbk9iamVj
dCogb2JqZWN0LCBjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmhlYWRlcnMpCit7CisgICAg
aWYgKG9iamVjdC0+Zmlyc3RVcmwgPT0gTlVMTCkgeworICAgICAgICBpZiAodXJsKQorICAgICAg
ICAgICAgb2JqZWN0LT5maXJzdFVybCA9IHN0cmR1cCh1cmwpOworICAgICAgICBpZiAoaGVhZGVy
cykKKyAgICAgICAgICAgIG9iamVjdC0+Zmlyc3RIZWFkZXJzID0gc3RyZHVwKGhlYWRlcnMpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGZyZWUob2JqZWN0LT5sYXN0VXJsKTsKKyAgICAgICAgZnJl
ZShvYmplY3QtPmxhc3RIZWFkZXJzKTsKKyAgICAgICAgb2JqZWN0LT5sYXN0VXJsID0gKHVybCA/
IHN0cmR1cCh1cmwpIDogTlVMTCk7CisgICAgICAgIG9iamVjdC0+bGFzdEhlYWRlcnMgPSAoaGVh
ZGVycyA/IHN0cmR1cChoZWFkZXJzKSA6IE5VTEwpOworICAgIH0KIH0KSW5kZXg6IFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2Fw
ZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVjdC5oCShyZXZpc2lvbiAxOTk4NikKKysrIFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSwxMiBAQCB0eXBlZGVmIHN0cnVjdCB7
CiAgICAgTlBPYmplY3QgaGVhZGVyOwogICAgIE5QUCBucHA7CiAgICAgQm9vbGVhbiBldmVudExv
Z2dpbmc7CisgICAgY2hhciogZmlyc3RVcmw7CisgICAgY2hhciogZmlyc3RIZWFkZXJzOworICAg
IGNoYXIqIGxhc3RVcmw7CisgICAgY2hhciogbGFzdEhlYWRlcnM7CiB9IFBsdWdpbk9iamVjdDsK
IAogZXh0ZXJuIE5QQ2xhc3MgKmdldFBsdWdpbkNsYXNzKHZvaWQpOwogZXh0ZXJuIHZvaWQgaGFu
ZGxlQ2FsbGJhY2soUGx1Z2luT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIgKnVybCwgTlBSZWFz
b24gcmVhc29uLCB2b2lkICpub3RpZnlEYXRhKTsKK2V4dGVybiB2b2lkIG5vdGlmeVN0cmVhbShQ
bHVnaW5PYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICpoZWFkZXJz
KTsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5z
dWJwcm9qL21haW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9tYWluLmMJKHJldmlzaW9uIDE5OTg2KQorKysgV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovbWFpbi5j
CSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5MywxMSBAQCBOUEVycm9yIE5QUF9TZXRXaW5kb3co
TlBQIGluc3RhbmNlLCBOUFdpCiBOUEVycm9yIE5QUF9OZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBO
UE1JTUVUeXBlIHR5cGUsIE5QU3RyZWFtICpzdHJlYW0sIE5QQm9vbCBzZWVrYWJsZSwgdWludDE2
ICpzdHlwZSkKIHsKICAgICAqc3R5cGUgPSBOUF9BU0ZJTEVPTkxZOworCisgICAgUGx1Z2luT2Jq
ZWN0ICpvYmogPSBpbnN0YW5jZS0+cGRhdGE7CisgICAgaWYgKG9iaiAmJiAoYnJvd3Nlci0+dmVy
c2lvbiA+PSBOUFZFUlNfSEFTX1JFU1BPTlNFX0hFQURFUlMpKQorICAgICAgICBub3RpZnlTdHJl
YW0ob2JqLCBzdHJlYW0tPnVybCwgc3RyZWFtLT5oZWFkZXJzKTsKKwogICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKIH0KIAo=
</data>
<flag name="review"
          id="5657"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14014</attachid>
            <date>2007-04-11 18:02:44 -0700</date>
            <delta_ts>2007-04-11 18:04:07 -0700</delta_ts>
            <desc>Proposed solution, take 6, really</desc>
            <filename>NsPluginResponseHeaders.patch</filename>
            <type>text/plain</type>
            <size>27377</size>
            <attacher name="Deneb Meketa">dmeketa</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzQ5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDctMDMtMjAgIERlbmViIE1l
a2V0YSAgPGRtZWtldGFAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MDI5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzQ5OTQ4NDkKKyAgICAgICAgQnVnIDEzMDI5OiBQ
ZXJtaXQgTlBBUEkgcGx1Zy1pbnMgdG8gc2VlIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4KKyAgICAg
ICAgVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZSBKYXZhU2NyaXB0Q29yZSwgYnV0IHRoYXQn
cyB3aGVyZSBucGFwaS5oIGlzLgorCisgICAgICAgICogYmluZGluZ3MvbnBhcGkuaDoKKyAgICAg
ICAgQWRkIGhlYWRlcnMgbWVtYmVyIHRvIE5QU3RyZWFtIHN0cnVjdC4gIEFsc28gaW5jcmVhc2Ug
TlBfVkVSU0lPTl9NSU5PUiB0byAxNywKKyAgICAgICAgc28gdGhhdCBwbHVnLWlucyBjYW4gc2Fm
ZWx5IGRldGVjdCB3aGV0aGVyIHRvIGxvb2sgZm9yIHRoaXMgbWVtYmVyLiAgQWxzbyBhZGQKKyAg
ICAgICAgb3RoZXIgbWlzc2luZyBiaXRzIG9mIG5wYXBpLmggdG8gY2F0Y2ggdXAgZnJvbSAxNCB0
byAxNy4gIFRoaXMgaW5jbHVkZXMKKyAgICAgICAgZmVhdHVyZXMgdGhhdCBhcmUgbm90IGltcGxl
bWVudGVkIGluIFdlYktpdCwgYnV0IHRob3NlIGFyZSBzYWZlbHkgc3R1YmJlZC4KKwogMjAwNy0w
My0xOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgKiBranMvdmFs
dWUuaDogUm9sbCB+SlNWYWx1ZSBjaGFuZ2Ugb3V0LiBJdCB3YXMgY2F1c2luZyBwcm9ibGVtcy4g
SSdsbCBkbyBpdCByaWdodCBsYXRlci4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25w
YXBpLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvbnBhcGkuaAkocmV2
aXNpb24gMTk5ODYpCisrKyBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNkZWZpbmUg
TlBfVkVSU0lPTl9NQUpPUiAwCi0jZGVmaW5lIE5QX1ZFUlNJT05fTUlOT1IgMTQKKyNkZWZpbmUg
TlBfVkVSU0lPTl9NSU5PUiAxNwogCiAKIApAQCAtMTg3LDYgKzE4NywxNiBAQCB0eXBlZGVmIHN0
cnVjdCBfTlBTdHJlYW0KICAgICB1aW50MzIgICAgICAgZW5kOwogICAgIHVpbnQzMiAgICAgICBs
YXN0bW9kaWZpZWQ7CiAgICAgdm9pZCogICAgICAgIG5vdGlmeURhdGE7CisgICAgY29uc3QgY2hh
ciogIGhlYWRlcnM7ICAgICAgLyogUmVzcG9uc2UgaGVhZGVycyBmcm9tIGhvc3QuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICogRXhpc3RzIG9ubHkgZm9yID49IE5QVkVSU19IQVNf
UkVTUE9OU0VfSEVBREVSUy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBVc2Vk
IGZvciBIVFRQIG9ubHk7IE5VTEwgZm9yIG5vbi1IVFRQLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqIEF2YWlsYWJsZSBmcm9tIE5QUF9OZXdTdHJlYW0gb253YXJkcy4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBQbHVnaW4gc2hvdWxkIGNvcHkgdGhpcyBkYXRh
IGJlZm9yZSBzdG9yaW5nIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIElu
Y2x1ZGVzIEhUVFAgc3RhdHVzIGxpbmUgYW5kIGFsbCBoZWFkZXJzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqIHByZWZlcmFibHkgdmVyYmF0aW0gYXMgcmVjZWl2ZWQgZnJvbSBz
ZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaGVhZGVycyBmb3JtYXR0
ZWQgYXMgaW4gSFRUUCAoIkhlYWRlcjogVmFsdWUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKiBhbmQgbmV3bGluZXMgKFxuLCBOT1QgXHJcbikgc2VwYXJhdGluZyBsaW5lcy4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUZXJtaW5hdGVkIGJ5IFxuXDAgKE5P
VCBcblxuXDApLiAqLwogfSBOUFN0cmVhbTsKIAogCkBAIC0zMTQsNyArMzI0LDEzIEBAIHR5cGVk
ZWYgZW51bSB7CiAgICAgTlBQVnBsdWdpbk5lZWRzWEVtYmVkICAgICAgICAgPSAxNCwgLyogTm90
IGltcGxlbWVudGVkIGluIFdlYktpdCAqLwogCiAgICAgLyogR2V0IHRoZSBOUE9iamVjdCBmb3Ig
c2NyaXB0aW5nIHRoZSBwbHVnaW4uICovCi0gICAgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVj
dCAgPSAxNQorICAgIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QgID0gMTUsCisJCisgICAg
LyogR2V0IHRoZSBwbHVnaW4gdmFsdWUgKGFzIFwwLXRlcm1pbmF0ZWQgVVRGLTggc3RyaW5nIGRh
dGEpIGZvcgorICAgICAqIGZvcm0gc3VibWlzc2lvbiBpZiB0aGUgcGx1Z2luIGlzIHBhcnQgb2Yg
YSBmb3JtLiBVc2UKKyAgICAgKiBOUE5fTWVtQWxsb2MoKSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9y
IHRoZSBzdHJpbmcgZGF0YS4KKyAgICAgKi8KKyAgICBOUFBWZm9ybVZhbHVlID0gMTYgICAgLyog
Tm90IGltcGxlbWVudGVkIGluIFdlYktpdCAqLwogfSBOUFBWYXJpYWJsZTsKIAogLyoKQEAgLTU4
Nyw2ICs2MDMsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgTlBfUG9ydAogI2RlZmluZSBOUFZFUlNfV0lO
MTZfSEFTX0xJVkVDT05ORUNUICAgIDkKICNkZWZpbmUgTlBWRVJTXzY4S19IQVNfTElWRUNPTk5F
Q1QgICAgMTEKICNkZWZpbmUgTlBWRVJTX0hBU19XSU5ET1dMRVNTICAgICAgIDExCisjZGVmaW5l
IE5QVkVSU19IQVNfWFBDT05ORUNUX1NDUklQVElORyAgICAxMyAgLyogTm90IGltcGxlbWVudGVk
IGluIFdlYktpdCAqLworI2RlZmluZSBOUFZFUlNfSEFTX05QUlVOVElNRV9TQ1JJUFRJTkcgICAg
MTQKKyNkZWZpbmUgTlBWRVJTX0hBU19GT1JNX1ZBTFVFUyAgICAgICAgICAgIDE1ICAvKiBOb3Qg
aW1wbGVtZW50ZWQgaW4gV2ViS2l0OyBzZWUgYnVnIDEzMDYxICovCisjZGVmaW5lIE5QVkVSU19I
QVNfUE9QVVBTX0VOQUJMRURfU1RBVEUgICAxNiAgLyogTm90IGltcGxlbWVudGVkIGluIFdlYktp
dCAqLworI2RlZmluZSBOUFZFUlNfSEFTX1JFU1BPTlNFX0hFQURFUlMgICAgICAgMTcKIAogCiAv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwpAQCAtNjc3LDYgKzY5OCw4IEBAIE5QRXJyb3IgICAgIE5QTl9TZXRW
YWx1ZShOUFAgaW5zdGFuY2UsIE4KIHZvaWQgICAgICAgIE5QTl9JbnZhbGlkYXRlUmVjdChOUFAg
aW5zdGFuY2UsIE5QUmVjdCAqaW52YWxpZFJlY3QpOwogdm9pZCAgICAgICAgTlBOX0ludmFsaWRh
dGVSZWdpb24oTlBQIGluc3RhbmNlLCBOUFJlZ2lvbiBpbnZhbGlkUmVnaW9uKTsKIHZvaWQgICAg
ICAgIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpOwordm9pZCAgICAgICAgTlBOX1B1c2hQ
b3B1cHNFbmFibGVkU3RhdGUoTlBQIGluc3RhbmNlLCBOUEJvb2wgZW5hYmxlZCk7ICAvKiBOb3Qg
aW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCit2b2lkICAgICAgICBOUE5fUG9wUG9wdXBzRW5hYmxl
ZFN0YXRlKE5QUCBpbnN0YW5jZSk7ICAgICAgICAgICAgICAgICAgIC8qIE5vdCBpbXBsZW1lbnRl
ZCBpbiBXZWJLaXQgKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9ICAvKiBlbmQgZXh0ZXJuICJD
IiAqLwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzNDkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAwNy0wMy0yMCAgRGVuZWIgTWVrZXRh
ICA8ZG1la2V0YUBhZG9iZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMjkK
KyAgICAgICAgcmRhcjovL3Byb2JsZW0vNDk5NDg0OQorICAgICAgICBCdWcgMTMwMjk6IFBlcm1p
dCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJzLgorCisgICAgICAg
ICogaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNlLWhlYWRlcnMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BsdWdpbnMvbnBhcGktcmVzcG9uc2UtaGVh
ZGVycy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2Vz
L2xvYWQtbWUtMS50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvcGx1Z2lucy9yZXNv
dXJjZXMvbG9hZC1tZS0yLnR4dDogQWRkZWQuCisKIDIwMDctMDMtMjAgIEp1c3RpbiBHYXJjaWEg
IDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBkYXJpbgpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNlLWhlYWRl
cnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1
Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorCitUZXN0IGZvciBidWcg
MTMwMjk6IFBlcm1pdCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJz
LgorCitFeHBlY3RlZCByZXN1bHQgYmVsb3cgaXMgdHdvIEhUVFAgcmVzcG9uc2UgZXh0cmFjdHMs
IG9uZSBmb3IgdGhlIGluaXRpYWwgc3RyZWFtIHNwZWNpZmllZCBpbiB0aGUgInNyYyIgYXR0cmli
dXRlLCB0aGUgb3RoZXIgZm9yIGFuIE5QTl9HZXRVUkxOb3RpZnkgcmVxdWVzdC4gRWFjaCBibG9j
ayBzaG91bGQgY29udGFpbiB0aGUgVVJMOyB0aGUgc3RhdHVzIGxpbmUsIHdoaWNoIHNob3VsZCBz
YXkgIkhUVFAgMjAwIE9LIjsgYW5kIHRoZSBNSU1FLXR5cGUsIHdoaWNoIHNob3VsZCBzYXkgIkNv
bnRlbnQtVHlwZTogdGV4dC9wbGFpbiIuCisKKy0tLS0tLS0tLS0KKworaHR0cDovL1t2YXJpZXMs
IG5vdCBiZWluZyB0ZXN0ZWRdL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMS50eHQKK0hUVFAg
MjAwIE9LCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworLS0tLS0tLS0tLQorCitodHRwOi8v
W3Zhcmllcywgbm90IGJlaW5nIHRlc3RlZF0vcGx1Z2lucy9yZXNvdXJjZXMvbG9hZC1tZS0yLnR4
dAorSFRUUCAyMDAgT0sKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisKSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNl
LWhlYWRlcnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1
Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTggQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciByZXMxLCByZXMy
OworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB0cnkgeworICAgICAgICByZXMxID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdDEiKTsKKyAgICAgICAgcmVzMiA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJyZXN1bHQyIik7CisgICAgICAgIHBsZy5nZXRVUkxOb3RpZnkoIi9wbHVn
aW5zL3Jlc291cmNlcy9sb2FkLW1lLTIudHh0IiwgbnVsbCwgImNhbGxiYWNrIik7CisgICAgfSBj
YXRjaCAoZXgpIHsKKyAgICAgICAgc2hvd0VycigiRXhjZXB0aW9uOiAiICsgZXguZGVzY3JpcHRp
b24pOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKworZnVuY3Rp
b24gY2FsbGJhY2soZXJyQ29kZSwgc3RyZWFtRHVtcCkKK3sKKyAgICB2YXIgcGFyc2UgPSBwYXJz
ZVN0cmVhbUR1bXAoc3RyZWFtRHVtcCk7CisgICAgaWYgKHBhcnNlLmVycikKKyAgICAgICAgc2hv
d0VycihwYXJzZS5lcnIpOworICAgIGVsc2UgeworICAgICAgICByZXMxLmlubmVySFRNTCA9IG5l
d2xpbmVzVG9IVE1MKHBhcnNlLnJlczEpOworICAgICAgICByZXMyLmlubmVySFRNTCA9IG5ld2xp
bmVzVG9IVE1MKHBhcnNlLnJlczIpOworICAgIH0KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
K30KKworLy8gRm9ybWF0IHBhc3NlZCBieSBwbHVnaW46IGZvdXIgZmllbGRzIHNlcGFyYXRlZCBi
eSBcblxuOgorLy8gRmlyc3QgVVJMOyBmaXJzdCBoZWFkZXIgYmxvY2s7IGxhc3QgVVJMOyBsYXN0
IGhlYWRlciBibG9jay4KK2Z1bmN0aW9uIHBhcnNlU3RyZWFtRHVtcChzdHJlYW1EdW1wKQorewor
ICAgIHZhciBydG4gPSB7fTsKKworICAgIGlmICh0eXBlb2Ygc3RyZWFtRHVtcCA9PSAic3RyaW5n
IiB8fCAoKHR5cGVvZiBzdHJlYW1EdW1wID09ICJvYmplY3QiKSAmJiAoc3RyZWFtRHVtcC5jb25z
dHJ1Y3RvciA9PSBTdHJpbmcpKSkgeworICAgICAgICB2YXIgcGFydHMgPSBzdHJlYW1EdW1wLnNw
bGl0KCJcblxuIik7CisgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gNCkgeworICAgICAgICAg
ICAgcnRuLnJlczEgPSBnZW5lcmljVVJMKHBhcnRzWzBdKSArICJcbiIgKyBwYXJzZUhlYWRlcnMo
cGFydHNbMV0pOworICAgICAgICAgICAgcnRuLnJlczIgPSBnZW5lcmljVVJMKHBhcnRzWzJdKSAr
ICJcbiIgKyBwYXJzZUhlYWRlcnMocGFydHNbM10pOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHJ0bi5lcnIgPSAic3RyZWFtRHVtcCBmcm9tIHBsdWdpbiBkb2VzIG5vdCBoYXZlIGV4cGVj
dGVkIGZvcm1hdCI7CisgICAgfSBlbHNlCisgICAgICAgIHJ0bi5lcnIgPSAic3RyZWFtRHVtcCBm
cm9tIHBsdWdpbiBpcyBub3QgYSBzdHJpbmc6ICIgKyBzdHJlYW1EdW1wOworCisgICAgcmV0dXJu
IHJ0bjsKK30KKworZnVuY3Rpb24gc2hvd0VycihlcnIpCit7CisgICAgcmVzMS5pbm5lckhUTUwg
PSAiRkFJTEVEIC0gIiArIGVycjsKKyAgICByZXMyLmlubmVySFRNTCA9ICIiOworfQorCitmdW5j
dGlvbiBuZXdsaW5lc1RvSFRNTChzdHIpCit7CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cbi9n
LCAiPGJyPiIpOworfQorCitmdW5jdGlvbiBnZW5lcmljVVJMKHVybCkKK3sKKyAgICByZXR1cm4g
dXJsLnJlcGxhY2UoL14oaHR0cDpcL1wvKVteXC9dKy8sICIkMVt2YXJpZXMsIG5vdCBiZWluZyB0
ZXN0ZWRdIik7Cit9CisKK2Z1bmN0aW9uIHBhcnNlSGVhZGVycyhoZHJzKQoreworICAgIHZhciBw
YXJ0cyA9IGhkcnMuc3BsaXQoIlxuIik7CisgICAgdmFyIHJ0biA9IHBhcnRzWzBdICsgIlxuIjsK
KworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspCisgICAgICAgIGlm
IChwYXJ0c1tpXS5tYXRjaCgvXkNvbnRlbnQtVHlwZTovKSkKKyAgICAgICAgICAgIHJ0biArPSBw
YXJ0c1tpXTsKKworICAgIHJldHVybiBydG47Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
IG9ubG9hZD0idGVzdCgpIj4KKzxlbWJlZCBuYW1lPSJwbGciIHR5cGU9ImFwcGxpY2F0aW9uL3gt
d2Via2l0LXRlc3QtbmV0c2NhcGUiIHNyYz0iL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMS50
eHQiPjwvZW1iZWQ+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVnemlsbGEub3BlbmRh
cndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDI5Ij5idWcgMTMwMjk8YS8+OgorUGVybWl0IE5Q
QVBJIHBsdWctaW5zIHRvIHNlZSBIVFRQIHJlc3BvbnNlIGhlYWRlcnMuPC9wPgorPHA+RXhwZWN0
ZWQgcmVzdWx0IGJlbG93IGlzIHR3byBIVFRQIHJlc3BvbnNlIGV4dHJhY3RzLCBvbmUgZm9yIHRo
ZSBpbml0aWFsIHN0cmVhbSBzcGVjaWZpZWQgaW4gdGhlICJzcmMiCithdHRyaWJ1dGUsIHRoZSBv
dGhlciBmb3IgYW4gTlBOX0dldFVSTE5vdGlmeSByZXF1ZXN0LiBFYWNoIGJsb2NrIHNob3VsZCBj
b250YWluIHRoZSBVUkw7IHRoZSBzdGF0dXMgbGluZSwKK3doaWNoIHNob3VsZCBzYXkgIkhUVFAg
MjAwIE9LIjsgYW5kIHRoZSBNSU1FLXR5cGUsIHdoaWNoIHNob3VsZCBzYXkgIkNvbnRlbnQtVHlw
ZTogdGV4dC9wbGFpbiIuPC9wPgorPHA+LS0tLS0tLS0tLTwvcD4KKzxwIGlkPSJyZXN1bHQxIj5S
dW5uaW5nIHRlc3QsIHJlc3VsdCBzaG91bGQgYXBwZWFyIGhlcmUgaW4gYSB2ZXJ5IHNob3J0IHRp
bWUuLi48L3A+Cis8cD4tLS0tLS0tLS0tPC9wPgorPHAgaWQ9InJlc3VsdDIiPlJ1bm5pbmcgdGVz
dCwgcmVzdWx0IHNob3VsZCBhcHBlYXIgaGVyZSBpbiBhIHZlcnkgc2hvcnQgdGltZS4uLjwvcD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9y
ZXNvdXJjZXMvbG9hZC1tZS0xLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMS50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMS50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMiBAQAorSXQncyBhIGxvbmVseSBleGlzdGVuY2UgYmVpbmcgYSB0
ZXN0IGZpbGUuCitZb3UncmUgd2VsY29tZS4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
cGx1Z2lucy9yZXNvdXJjZXMvbG9hZC1tZS0yLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMi50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMi50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorT2ggeWVhaC4KK05vYm9keSBsb29raW4n
IGF0IG1lLgorSnVzdCBjaGlsbGluJy4KK1Rlc3QgZmlsZS4KK09oIHllYWguCkluZGV4OiBXZWJL
aXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIw
MzQ5KQorKysgV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDA3LTAzLTIwICBEZW5lYiBNZWtldGEgIDxkbWVrZXRhQGFkb2JlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAyOQorICAgICAgICByZGFyOi8vcHJvYmxlbS80OTk0ODQ5
CisgICAgICAgIEJ1ZyAxMzAyOTogUGVybWl0IE5QQVBJIHBsdWctaW5zIHRvIHNlZSBIVFRQIHJl
c3BvbnNlIGhlYWRlcnMuCisKKyAgICAgICAgKiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdp
blN0cmVhbS5oOiBkZWNsYXJhdGlvbnMuCisgICAgICAgICogUGx1Z2lucy9XZWJCYXNlTmV0c2Nh
cGVQbHVnaW5TdHJlYW0ubTogbWFpbiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKC1bV2ViQmFz
ZU5ldHNjYXBlUGx1Z2luU3RyZWFtIGRlYWxsb2NdKTogY2xlYW51cC4KKyAgICAgICAgKC1bV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtIGZpbmFsaXplXSk6IGNsZWFudXAuCisgICAgICAgICgt
W1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbSBzdGFydFN0cmVhbVJlc3BvbnNlVVJMOmV4cGVj
dGVkQ29udGVudExlbmd0aDpsYXN0TW9kaWZpZWREYXRlOk1JTUVUeXBlOmhlYWRlcnM6XSk6Cisg
ICAgICAgIFBhc3MgaGVhZGVycyBhbG9uZy4KKyAgICAgICAgKC1bV2ViQmFzZU5ldHNjYXBlUGx1
Z2luU3RyZWFtIHN0YXJ0U3RyZWFtV2l0aFJlc3BvbnNlOl0pOgorICAgICAgICBNYWluIHdvcmsg
aXMgaGVyZS4gIEV4dHJhY3QgaGVhZGVycyBmcm9tIE5TSFRUUFVSTFJlc3BvbnNlIG9iamVjdCBp
bnRvIGEgYnl0ZSBzZXF1ZW5jZS4KKyAgICAgICAgU2VlIGNvbW1lbnRzIGhlcmUgYWJvdXQgaG93
IGl0IHdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBsb3ctbGV2ZWwgYWNjZXNzIHRvIHRoZSBIVFRQIHJl
c3BvbnNlLgorICAgICAgICAoLVtXZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0gX2Rlc3Ryb3lT
dHJlYW1dKTogY2xlYW51cC4KKyAgICAgICAgKiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdp
blZpZXcubW06CisgICAgICAgICgtW1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgZXZhbHVhdGVK
YXZhU2NyaXB0UGx1Z2luUmVxdWVzdDpdKToKKyAgICAgICAgQ29uZm9ybSB0byBuZXcgc3RhcnRT
dHJlYW0gcGFyYW1zLiAgTm90IGFwcGxpY2FibGUgaGVyZSwgcGFzcyBuaWwuCisgICAgICAgICog
UGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubToKKyAgICAgICAgKC1bV2ViTmV0c2Nh
cGVQbHVnaW5QYWNrYWdlIGxvYWRdKToKKyAgICAgICAgRmlsbCBpbiBuZXcgYnJvd3NlckZ1bmNz
IG1lbWJlcnMgKHdpdGggc3R1YnMpIHJlcXVpcmVkIGJ5IG5ldyBucGFwaS5oIHZlcnNpb24uCisg
ICAgICAgICogUGx1Z2lucy9ucGFwaS5tOiBOUEFQSSBzdHVicy4KKyAgICAgICAgKE5QTl9QdXNo
UG9wdXBzRW5hYmxlZFN0YXRlKToKKyAgICAgICAgKE5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUp
OgorICAgICAgICAqIFBsdWdpbnMvbnBmdW5jdGlvbnMuaDogTlBBUEkgZGVjbGFyYXRpb25zLgor
CiAyMDA3LTAzLTE5ICBBbmRlcnMgQ2FybHNzb24gIDxhY2FybHNzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCkluZGV4OiBXZWJLaXQvUGx1Z2lucy9XZWJC
YXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvUGx1Z2lucy9X
ZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0uaAkocmV2aXNpb24gMTk5ODYpCisrKyBXZWJLaXQv
UGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNiArNDgsNyBAQAogICAgIGNoYXIgKnBhdGg7CiAgICAgQk9PTCBzZW5kTm90aWZpY2F0aW9u
OwogICAgIHZvaWQgKm5vdGlmeURhdGE7CisgICAgY2hhciAqaGVhZGVyczsKICAgICBXZWJCYXNl
TmV0c2NhcGVQbHVnaW5WaWV3ICpwbHVnaW5WaWV3OwogICAgIE5QUmVhc29uIHJlYXNvbjsKICAg
ICBCT09MIGlzVGVybWluYXRlZDsKQEAgLTc4LDcgKzc5LDggQEAKIC0gKHZvaWQpc3RhcnRTdHJl
YW1SZXNwb25zZVVSTDooTlNVUkwgKil0aGVSZXNwb25zZVVSTAogICAgICAgICAgZXhwZWN0ZWRD
b250ZW50TGVuZ3RoOihsb25nIGxvbmcpZXhwZWN0ZWRDb250ZW50TGVuZ3RoCiAgICAgICAgICAg
ICAgIGxhc3RNb2RpZmllZERhdGU6KE5TRGF0ZSAqKWxhc3RNb2RpZmllZERhdGUKLSAgICAgICAg
ICAgICAgICAgICAgICBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZTsKKyAgICAgICAgICAg
ICAgICAgICAgICBNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZQorICAgICAgICAgICAgICAg
ICAgICAgICBoZWFkZXJzOihOU0RhdGEgKil0aGVIZWFkZXJzOwogCiAvLyBjYW5jZWxMb2FkV2l0
aEVycm9yIGNhbmNlbHMgdGhlIE5TVVJMQ29ubmVjdGlvbiBhbmQgaW5mb3JtcyBXZWJLaXQgb2Yg
dGhlIGxvYWQgZXJyb3IuCiAvLyBUaGlzIG1ldGhvZCBpcyBvdmVycmlkZW4gYnkgc3ViY2xhc3Nl
cy4KSW5kZXg6IFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbS5tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbS5t
CShyZXZpc2lvbiAxOTk4NikKKysrIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdp
blN0cmVhbS5tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDcgQEAgc3RhdGljIGNoYXIg
KkNhcmJvblBhdGhGcm9tUE9TSVhQYXRoKGNvbgogICAgIAogICAgIGZyZWUoKHZvaWQgKilzdHJl
YW0udXJsKTsKICAgICBmcmVlKHBhdGgpOworICAgIGZyZWUoaGVhZGVycyk7CiAKICAgICBbc3Vw
ZXIgZGVhbGxvY107CiB9CkBAIC0xNDMsNiArMTQ0LDcgQEAgc3RhdGljIGNoYXIgKkNhcmJvblBh
dGhGcm9tUE9TSVhQYXRoKGNvbgogCiAgICAgZnJlZSgodm9pZCAqKXN0cmVhbS51cmwpOwogICAg
IGZyZWUocGF0aCk7CisgICAgZnJlZShoZWFkZXJzKTsKIAogICAgIFtzdXBlciBmaW5hbGl6ZV07
CiB9CkBAIC0yMTEsNiArMjEzLDcgQEAgc3RhdGljIGNoYXIgKkNhcmJvblBhdGhGcm9tUE9TSVhQ
YXRoKGNvbgogICAgICAgICAgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOihsb25nIGxvbmcpZXhwZWN0
ZWRDb250ZW50TGVuZ3RoCiAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZERhdGU6KE5TRGF0ZSAq
KWxhc3RNb2RpZmllZERhdGUKICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTooTlNTdHJp
bmcgKil0aGVNSU1FVHlwZQorICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOihOU0RhdGEg
Kil0aGVIZWFkZXJzCiB7CiAgICAgQVNTRVJUKCFpc1Rlcm1pbmF0ZWQpOwogICAgIApAQCAtMjI0
LDcgKzIyNywxNSBAQCBzdGF0aWMgY2hhciAqQ2FyYm9uUGF0aEZyb21QT1NJWFBhdGgoY29uCiAg
ICAgc3RyZWFtLmVuZCA9IGV4cGVjdGVkQ29udGVudExlbmd0aCA+IDAgPyBleHBlY3RlZENvbnRl
bnRMZW5ndGggOiAwOwogICAgIHN0cmVhbS5sYXN0bW9kaWZpZWQgPSBbbGFzdE1vZGlmaWVkRGF0
ZSB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBdOwogICAgIHN0cmVhbS5ub3RpZnlEYXRhID0gbm90aWZ5
RGF0YTsKLSAgICAKKworICAgIGlmICh0aGVIZWFkZXJzKSB7CisgICAgICAgIHVuc2lnbmVkIGxl
biA9IFt0aGVIZWFkZXJzIGxlbmd0aF07CisgICAgICAgIGhlYWRlcnMgPSBtYWxsb2MobGVuICsg
MSk7CisgICAgICAgIFt0aGVIZWFkZXJzIGdldEJ5dGVzOmhlYWRlcnNdOworICAgICAgICBoZWFk
ZXJzW2xlbl0gPSAwOworICAgICAgICBzdHJlYW0uaGVhZGVycyA9IGhlYWRlcnM7CisgICAgfQor
CiAgICAgdHJhbnNmZXJNb2RlID0gTlBfTk9STUFMOwogICAgIG9mZnNldCA9IDA7CiAgICAgcmVh
c29uID0gV0VCX1JFQVNPTl9OT05FOwpAQCAtMjY0LDEwICsyNzUsNTAgQEAgc3RhdGljIGNoYXIg
KkNhcmJvblBhdGhGcm9tUE9TSVhQYXRoKGNvbgogCiAtICh2b2lkKXN0YXJ0U3RyZWFtV2l0aFJl
c3BvbnNlOihOU1VSTFJlc3BvbnNlICopcgogeworICAgIE5TTXV0YWJsZURhdGEgKnRoZUhlYWRl
cnMgPSBuaWw7CisgICAgaWYgKFtyIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNs
YXNzXV0pIHsKKyAgICAgICAgTlNIVFRQVVJMUmVzcG9uc2UgKmh0dHBSZXNwb25zZSA9IChOU0hU
VFBVUkxSZXNwb25zZSAqKXI7CisgICAgICAgIHRoZUhlYWRlcnMgPSBbTlNNdXRhYmxlRGF0YSBk
YXRhV2l0aENhcGFjaXR5OjEwMjRdOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IGl0IHdv
dWxkIGJlIG5pY2UgdG8gYmUgYWJsZSB0byBnZXQgdGhlIHJhdyBIVFRQIGhlYWRlciBibG9jay4K
KyAgICAgICAgLy8gVGhpcyBpbmNsdWRlcyB0aGUgSFRUUCB2ZXJzaW9uLCB0aGUgcmVhbCBzdGF0
dXMgdGV4dCwKKyAgICAgICAgLy8gYWxsIGhlYWRlcnMgaW4gdGhlaXIgb3JpZ2luYWwgb3JkZXIg
YW5kIGluY2x1ZGluZyBkdXBsaWNhdGVzLAorICAgICAgICAvLyBhbmQgYWxsIG9yaWdpbmFsIGJ5
dGVzIHZlcmJhdGltLCByYXRoZXIgdGhhbiBzZW50IHRocm91Z2ggVW5pY29kZSB0cmFuc2xhdGlv
bi4KKyAgICAgICAgLy8gVW5mb3J0dW5hdGVseSBOU0hUVFBVUkxSZXNwb25zZSBkb2Vzbid0IHBy
b3ZpZGUgYWNjZXNzIGF0IHRoYXQgbG93IGEgbGV2ZWwuCisgICAgICAgIAorICAgICAgICBbdGhl
SGVhZGVycyBhcHBlbmRCeXRlczoiSFRUUCAiIGxlbmd0aDo1XTsKKyAgICAgICAgY2hhciBzdGF0
dXNTdHJbMTBdOworICAgICAgICBzbnByaW50ZihzdGF0dXNTdHIsIHNpemVvZihzdGF0dXNTdHIp
LCAiJWQiLCBbaHR0cFJlc3BvbnNlIHN0YXR1c0NvZGVdKTsKKyAgICAgICAgW3RoZUhlYWRlcnMg
YXBwZW5kQnl0ZXM6c3RhdHVzU3RyIGxlbmd0aDpzdHJsZW4oc3RhdHVzU3RyKV07CisgICAgICAg
IFt0aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOiIgT0tcbiIgbGVuZ3RoOjRdOworCisgICAgICAgIC8v
IEhBQ0s6IHBhc3MgdGhlIGhlYWRlcnMgdGhyb3VnaCBhcyBVVEYtOC4KKyAgICAgICAgLy8gVGhp
cyBpcyBub3QgdGhlIGludGVuZGVkIGJlaGF2aW9yOyB3ZSdyZSBzdXBwb3NlZCB0byBwYXNzIG9y
aWdpbmFsIGJ5dGVzIHZlcmJhdGltLgorICAgICAgICAvLyBCdXQgd2UgZG9uJ3QgaGF2ZSB0aGUg
b3JpZ2luYWwgYnl0ZXMsIHdlIGhhdmUgTlNTdHJpbmdzIGJ1aWx0IGJ5IHRoZSBVUkwgbG9hZGlu
ZyBzeXN0ZW0uCisgICAgICAgIC8vIEl0IGhvcGVmdWxseSBzaG91bGRuJ3QgbWF0dGVyLCBzaW5j
ZSBSRkMyNjE2L1JGQzgyMiByZXF1aXJlIEFTQ0lJLW9ubHkgaGVhZGVycywKKyAgICAgICAgLy8g
YnV0IHN1cmVseSBzb21lb25lIG91dCB0aGVyZSBpcyB1c2luZyBub24tQVNDSUkgY2hhcmFjdGVy
cywgYW5kIGhvcGVmdWxseSBVVEYtOCBpcyBhZGVxdWF0ZSBoZXJlLgorICAgICAgICAvLyBJdCBz
ZWVtcyBiZXR0ZXIgdGhhbiBOU0FTQ0lJU3RyaW5nRW5jb2RpbmcsIHdoaWNoIHdpbGwgbG9zZSBp
bmZvcm1hdGlvbiBpZiBub24tQVNDSUkgaXMgdXNlZC4KKworICAgICAgICBOU0RpY3Rpb25hcnkg
KmhlYWRlckRpY3QgPSBbaHR0cFJlc3BvbnNlIGFsbEhlYWRlckZpZWxkc107CisgICAgICAgIE5T
QXJyYXkgKmtleXMgPSBbW2hlYWRlckRpY3QgYWxsS2V5c10gc29ydGVkQXJyYXlVc2luZ1NlbGVj
dG9yOkBzZWxlY3RvcihjYXNlSW5zZW5zaXRpdmVDb21wYXJlOildOworICAgICAgICBOU0VudW1l
cmF0b3IgKmkgPSBba2V5cyBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICAgICAgTlNTdHJpbmcgKms7
CisgICAgICAgIHdoaWxlICgoayA9IFtpIG5leHRPYmplY3RdKSAhPSBuaWwpIHsKKyAgICAgICAg
ICAgIE5TU3RyaW5nICp2ID0gW2hlYWRlckRpY3Qgb2JqZWN0Rm9yS2V5OmtdOworICAgICAgICAg
ICAgW3RoZUhlYWRlcnMgYXBwZW5kRGF0YTpbayBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZ11dOworICAgICAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6IjogIiBs
ZW5ndGg6Ml07CisgICAgICAgICAgICBbdGhlSGVhZGVycyBhcHBlbmREYXRhOlt2IGRhdGFVc2lu
Z0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07CisgICAgICAgICAgICBbdGhlSGVhZGVy
cyBhcHBlbmRCeXRlczoiXG4iIGxlbmd0aDoxXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHN0
YXJ0U3RyZWFtUmVzcG9uc2VVUkw6Li4uIHdpbGwgbnVsbC10ZXJtaW5hdGUuCisgICAgfQorCiAg
ICAgW3NlbGYgc3RhcnRTdHJlYW1SZXNwb25zZVVSTDpbciBVUkxdCiAgICAgICAgICAgIGV4cGVj
dGVkQ29udGVudExlbmd0aDpbciBleHBlY3RlZENvbnRlbnRMZW5ndGhdCiAgICAgICAgICAgICAg
ICAgbGFzdE1vZGlmaWVkRGF0ZTpXS0dldE5TVVJMUmVzcG9uc2VMYXN0TW9kaWZpZWREYXRlKHIp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpbciBNSU1FVHlwZV1dOworICAgICAg
ICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6W3IgTUlNRVR5cGVdCisgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVhZGVyczp0aGVIZWFkZXJzXTsKIH0KIAogLSAodm9pZClfZGVzdHJveVN0cmVh
bQpAQCAtMzA0LDYgKzM1NSwxMCBAQCBzdGF0aWMgY2hhciAqQ2FyYm9uUGF0aEZyb21QT1NJWFBh
dGgoY29uCiAgICAgICAgIFtwbHVnaW5WaWV3IGRpZENhbGxQbHVnSW5GdW5jdGlvbl07CiAgICAg
ICAgIExPRyhQbHVnaW5zLCAiTlBQX0Rlc3Ryb3lTdHJlYW0gcmVzcG9uc2VVUkw9JUAgZXJyb3I9
JWQiLCByZXNwb25zZVVSTCwgbnBFcnIpOwogICAgICAgICAKKyAgICAgICAgZnJlZShoZWFkZXJz
KTsKKyAgICAgICAgaGVhZGVycyA9IE5VTEw7CisgICAgICAgIHN0cmVhbS5oZWFkZXJzID0gTlVM
TDsKKwogICAgICAgICBzdHJlYW0ubmRhdGEgPSBuaWw7CiAgICAgfQogICAgIApJbmRleDogV2Vi
S2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCShyZXZpc2lvbiAxOTk4
NikKKysrIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE5MjEsNyArMTkyMSw4IEBAIHN0YXRpYyBPU1N0YXR1cyBUU01FdmVudEhh
bmRsZXIoRXZlbnRIYW4KICAgICAgICAgW3N0cmVhbSBzdGFydFN0cmVhbVJlc3BvbnNlVVJMOlVS
TAogICAgICAgICAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5ndGg6W0pTRGF0YSBsZW5ndGhd
CiAgICAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkRGF0ZTpuaWwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAidGV4dC9wbGFpbiJdOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJ0ZXh0L3BsYWluIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlYWRlcnM6bmlsXTsKICAgICAgICAgW3N0cmVhbSByZWNlaXZlZERh
dGE6SlNEYXRhXTsKICAgICAgICAgW3N0cmVhbSBmaW5pc2hlZExvYWRpbmdXaXRoRGF0YTpKU0Rh
dGFdOwogICAgICAgICBbc3RyZWFtIHJlbGVhc2VdOwpJbmRleDogV2ViS2l0L1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0JKHJldmlzaW9uIDE5OTg2KQorKysgV2ViS2l0L1BsdWdp
bnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0JKHdvcmtpbmcgY29weSkKQEAgLTM5NSw2ICsz
OTUsOSBAQCBzdGF0aWMgVHJhbnNpdGlvblZlY3RvciB0VmVjdG9yRm9yRnVuY3RpCiAgICAgICAg
IGJyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0eSA9IChOUE5fUmVtb3ZlUHJvcGVydHlQcm9jUHRy
KXRWZWN0b3JGb3JGdW5jdGlvblBvaW50ZXIoKEZ1bmN0aW9uUG9pbnRlcilfTlBOX1JlbW92ZVBy
b3BlcnR5KTsKICAgICAgICAgYnJvd3NlckZ1bmNzLnNldGV4Y2VwdGlvbiA9IChOUE5fU2V0RXhj
ZXB0aW9uUHJvY1B0cil0VmVjdG9yRm9yRnVuY3Rpb25Qb2ludGVyKChGdW5jdGlvblBvaW50ZXIp
X05QTl9TZXRFeGNlcHRpb24pOwogCisgICAgICAgIGJyb3dzZXJGdW5jcy5wdXNocG9wdXBzZW5h
YmxlZHN0YXRlID0gKE5QTl9QdXNoUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0cil0VmVjdG9yRm9y
RnVuY3Rpb25Qb2ludGVyKChGdW5jdGlvblBvaW50ZXIpTlBOX1B1c2hQb3B1cHNFbmFibGVkU3Rh
dGUpOworICAgICAgICBicm93c2VyRnVuY3MucG9wcG9wdXBzZW5hYmxlZHN0YXRlID0gKE5QTl9Q
b3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKXRWZWN0b3JGb3JGdW5jdGlvblBvaW50ZXIoKEZ1
bmN0aW9uUG9pbnRlcilOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKTsKKwogI2lmICFMT0dfRElT
QUJMRUQKICAgICAgICAgQ0ZBYnNvbHV0ZVRpbWUgbWFpblN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVH
ZXRDdXJyZW50KCk7CiAjZW5kaWYKQEAgLTQ4Nyw2ICs0OTAsOSBAQCBzdGF0aWMgVHJhbnNpdGlv
blZlY3RvciB0VmVjdG9yRm9yRnVuY3RpCiAgICAgICAgIGJyb3dzZXJGdW5jcy5zZXRwcm9wZXJ0
eSA9IF9OUE5fU2V0UHJvcGVydHk7CiAgICAgICAgIGJyb3dzZXJGdW5jcy5yZW1vdmVwcm9wZXJ0
eSA9IF9OUE5fUmVtb3ZlUHJvcGVydHk7CiAgICAgICAgIGJyb3dzZXJGdW5jcy5zZXRleGNlcHRp
b24gPSBfTlBOX1NldEV4Y2VwdGlvbjsKKyAgICAgICAgCisgICAgICAgIGJyb3dzZXJGdW5jcy5w
dXNocG9wdXBzZW5hYmxlZHN0YXRlID0gTlBOX1B1c2hQb3B1cHNFbmFibGVkU3RhdGU7CisgICAg
ICAgIGJyb3dzZXJGdW5jcy5wb3Bwb3B1cHNlbmFibGVkc3RhdGUgPSBOUE5fUG9wUG9wdXBzRW5h
YmxlZFN0YXRlOwogCiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICBDRkFic29sdXRlVGltZSBp
bml0aWFsaXplU3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKSW5kZXg6IFdlYktp
dC9QbHVnaW5zL25wYXBpLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdpbnMvbnBhcGkubQko
cmV2aXNpb24gMTk5ODYpCisrKyBXZWJLaXQvUGx1Z2lucy9ucGFwaS5tCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTgsMyArMTU4LDEzIEBAIHZvaWQqIE5QTl9HZXRKYXZhUGVlcihOUFAgaW5zdGFuY2Up
CiAgICAgTE9HKFBsdWdpbnMsICJOUE5fR2V0SmF2YVBlZXIiKTsKICAgICByZXR1cm4gTlVMTDsK
IH0KKwordm9pZCBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZShOUFAgaW5zdGFuY2UsIE5QQm9v
bCBlbmFibGVkKQoreworICAgIExPRyhQbHVnaW5zLCAiTlBOX1B1c2hQb3B1cHNFbmFibGVkU3Rh
dGUiKTsKK30KKwordm9pZCBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlKE5QUCBpbnN0YW5jZSkK
K3sKKyAgICBMT0coUGx1Z2lucywgIk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGUiKTsKK30KSW5k
ZXg6IFdlYktpdC9QbHVnaW5zL25wZnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1Bs
dWdpbnMvbnBmdW5jdGlvbnMuaAkocmV2aXNpb24gMTk5ODYpCisrKyBXZWJLaXQvUGx1Z2lucy9u
cGZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBAIHR5cGVkZWYgTlBF
cnJvciAoKk5QTl9HZXRVUkxQcm9jUHRyKShOUFAKIHR5cGVkZWYgTlBFcnJvciAoKk5QTl9Qb3N0
VVJMUHJvY1B0cikoTlBQIGluc3RhbmNlLCBjb25zdCBjaGFyKiBVUkwsIGNvbnN0IGNoYXIqIHdp
bmRvdywgdWludDMyIGxlbiwgY29uc3QgY2hhciogYnVmLCBOUEJvb2wgZmlsZSk7CiB0eXBlZGVm
IHZvaWQqICgqTlBOX0dldEphdmFFbnZQcm9jUHRyKSh2b2lkKTsKIHR5cGVkZWYgdm9pZCogKCpO
UE5fR2V0SmF2YVBlZXJQcm9jUHRyKShOUFAgaW5zdGFuY2UpOwordHlwZWRlZiB2b2lkICgqTlBO
X1B1c2hQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShOUFAgaW5zdGFuY2UsIE5QQm9vbCBlbmFi
bGVkKTsKK3R5cGVkZWYgdm9pZCAoKk5QTl9Qb3BQb3B1cHNFbmFibGVkU3RhdGVQcm9jUHRyKShO
UFAgaW5zdGFuY2UpOwogCiB0eXBlZGVmIHZvaWQgKCpOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZVBy
b2NQdHIpIChOUFZhcmlhbnQgKnZhcmlhbnQpOwogCkBAIC0xMTUsNiArMTE3LDkgQEAgdHlwZWRl
ZiBzdHJ1Y3QgX05QTmV0c2NhcGVGdW5jcyB7CiAgICAgTlBOX0hhc01ldGhvZFByb2NQdHIgaGFz
bWV0aG9kOwogICAgIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlUHJvY1B0ciByZWxlYXNldmFyaWFu
dHZhbHVlOwogICAgIE5QTl9TZXRFeGNlcHRpb25Qcm9jUHRyIHNldGV4Y2VwdGlvbjsKKyAgICAK
KyAgICBOUE5fUHVzaFBvcHVwc0VuYWJsZWRTdGF0ZVByb2NQdHIgcHVzaHBvcHVwc2VuYWJsZWRz
dGF0ZTsKKyAgICBOUE5fUG9wUG9wdXBzRW5hYmxlZFN0YXRlUHJvY1B0ciBwb3Bwb3B1cHNlbmFi
bGVkc3RhdGU7CiB9IE5QTmV0c2NhcGVGdW5jczsKIAogdHlwZWRlZiBzdHJ1Y3QgX05QUGx1Z2lu
RnVuY3MgewpJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzNDkpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAwNy0wMy0yMCAgRGVuZWIgTWVr
ZXRhICA8ZG1la2V0YUBhZG9iZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMw
MjkKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vNDk5NDg0OQorICAgICAgICBCdWcgMTMwMjk6IFBl
cm1pdCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJzLgorICAgICAg
ICBDaGFuZ2VzIGluIFdlYktpdFRvb2xzIGFyZSBvbmx5IGZvciB0aGUgTlBBUEkgdGVzdCBwbHVn
aW4uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJv
ai9QbHVnaW5PYmplY3QuYzogbWFpbiB0ZXN0IGxvZ2ljLgorICAgICAgICAocGx1Z2luSW52b2tl
KTogc3VwcG9ydCBudWxsIHdpbmRvdyBhcmd1bWVudCBmb3IgTlBTdHJlYW0gY3JlYXRpb24uCisg
ICAgICAgIChwbHVnaW5BbGxvY2F0ZSk6IGluaXRpYWxpemF0aW9uLgorICAgICAgICAocGx1Z2lu
RGVhbGxvY2F0ZSk6IGNsZWFudXAuCisgICAgICAgIChoYW5kbGVDYWxsYmFjayk6IGFkZCBzZWNv
bmQgSlMgY2FsbGJhY2sgYXJnOiBoZWFkZXIgZHVtcC4KKyAgICAgICAgKG5vdGlmeVN0cmVhbSk6
IGFkZGVkOyBob29rIGZyb20gTlBQX05ld1N0cmVhbSB0byByZWNvcmQgaGVhZGVycy4KKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9QbHVnaW5PYmpl
Y3QuaDogZGVjbGFyYXRpb25zLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2Fw
ZVBsdWdJbi5zdWJwcm9qL21haW4uYzogY2FsbCBuZXcgaGVhZGVyIGhvb2suCisgICAgICAgIChO
UFBfTmV3U3RyZWFtKTogY2FsbCBuZXcgaGVhZGVyIGhvb2suCisKIDIwMDctMDMtMTkgIERhdmlk
IEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSB0aGUgbWluaW11bSBm
b250IHNpemUgcHJlZiB0byBtYXRjaCB0aGUgYWN0dWFsIGRlZmF1bHQgc2V0dGluZyBpbiBTYWZh
cmkuICBJdCBzaG91bGQgaGF2ZSBiZWVuIDEKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVjdC5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9q
L1BsdWdpbk9iamVjdC5jCShyZXZpc2lvbiAxOTk4NikKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVjdC5jCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTIsOSArMjEyLDEyIEBAIHN0YXRpYyBib29sIHBsdWdpbkludm9rZShOUE9i
amVjdCAqaGVhZGUKICAgICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlm
aWVyc1tJRF9URVNUX0dFVF9VUkxfTk9USUZZXSkgewotICAgICAgICBpZiAoYXJnQ291bnQgPT0g
MyAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMF0pICYmIE5QVkFSSUFOVF9JU19TVFJJTkco
YXJnc1sxXSkgJiYgTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzJdKSkgeworICAgICAgICBpZiAo
YXJnQ291bnQgPT0gMworICAgICAgICAgICYmIE5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1swXSkK
KyAgICAgICAgICAmJiAoTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzFdKSB8fCBOUFZBUklBTlRf
SVNfTlVMTChhcmdzWzFdKSkKKyAgICAgICAgICAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3Nb
Ml0pKSB7CiAgICAgICAgICAgICBOUFVURjgqIHVybFN0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9t
TlBWYXJpYW50KCZhcmdzWzBdKTsKLSAgICAgICAgICAgIE5QVVRGOCogdGFyZ2V0U3RyaW5nID0g
Y3JlYXRlQ1N0cmluZ0Zyb21OUFZhcmlhbnQoJmFyZ3NbMV0pOyAgICAgICAgICAgIAorICAgICAg
ICAgICAgTlBVVEY4KiB0YXJnZXRTdHJpbmcgPSAoTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzFd
KSA/IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzWzFdKSA6IE5VTEwpOwogICAgICAg
ICAgICAgTlBVVEY4KiBjYWxsYmFja1N0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50
KCZhcmdzWzJdKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTlBJZGVudGlmaWVyIGNhbGxi
YWNrSWRlbnRpZmllciA9IGJyb3dzZXItPmdldHN0cmluZ2lkZW50aWZpZXIoY2FsbGJhY2tTdHJp
bmcpOwpAQCAtMjU1LDExICsyNTgsMjMgQEAgc3RhdGljIE5QT2JqZWN0ICpwbHVnaW5BbGxvY2F0
ZShOUFAgbnBwLAogICAgIAogICAgIG5ld0luc3RhbmNlLT5ldmVudExvZ2dpbmcgPSBGQUxTRTsK
ICAgICAKKyAgICBuZXdJbnN0YW5jZS0+Zmlyc3RVcmwgPSBOVUxMOworICAgIG5ld0luc3RhbmNl
LT5maXJzdEhlYWRlcnMgPSBOVUxMOworICAgIG5ld0luc3RhbmNlLT5sYXN0VXJsID0gTlVMTDsK
KyAgICBuZXdJbnN0YW5jZS0+bGFzdEhlYWRlcnMgPSBOVUxMOworICAgIAogICAgIHJldHVybiAo
TlBPYmplY3QgKiluZXdJbnN0YW5jZTsKIH0KIAotc3RhdGljIHZvaWQgcGx1Z2luRGVhbGxvY2F0
ZShOUE9iamVjdCAqb2JqKSAKK3N0YXRpYyB2b2lkIHBsdWdpbkRlYWxsb2NhdGUoTlBPYmplY3Qg
KmhlYWRlcikKIHsKKyAgICBQbHVnaW5PYmplY3QgKm9iaiA9IChQbHVnaW5PYmplY3QgKiloZWFk
ZXI7CisKKyAgICBmcmVlKG9iai0+Zmlyc3RVcmwpOworICAgIGZyZWUob2JqLT5maXJzdEhlYWRl
cnMpOworICAgIGZyZWUob2JqLT5sYXN0VXJsKTsKKyAgICBmcmVlKG9iai0+bGFzdEhlYWRlcnMp
OworCiAgICAgZnJlZShvYmopOwogfQogCkBAIC0yNjcsNyArMjgyLDcgQEAgdm9pZCBoYW5kbGVD
YWxsYmFjayhQbHVnaW5PYmplY3QqIG9iamVjdAogewogICAgIGFzc2VydChvYmplY3QpOwogICAg
IAotICAgIE5QVmFyaWFudCBhcmdzWzFdOworICAgIE5QVmFyaWFudCBhcmdzWzJdOwogICAgIAog
ICAgIE5QT2JqZWN0ICp3aW5kb3dTY3JpcHRPYmplY3Q7CiAgICAgYnJvd3Nlci0+Z2V0dmFsdWUo
b2JqZWN0LT5ucHAsIE5QUFZwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QsICZ3aW5kb3dTY3JpcHRP
YmplY3QpOwpAQCAtMjc2LDcgKzI5MSw0MCBAQCB2b2lkIGhhbmRsZUNhbGxiYWNrKFBsdWdpbk9i
amVjdCogb2JqZWN0CiAKICAgICBJTlQzMl9UT19OUFZBUklBTlQocmVhc29uLCBhcmdzWzBdKTsK
IAorICAgIGNoYXIgKnN0ckhkciA9IE5VTEw7CisgICAgaWYgKG9iamVjdC0+Zmlyc3RVcmwgJiYg
b2JqZWN0LT5maXJzdEhlYWRlcnMgJiYgb2JqZWN0LT5sYXN0VXJsICYmIG9iamVjdC0+bGFzdEhl
YWRlcnMpIHsKKyAgICAgICAgLy8gRm9ybWF0IGV4cGVjdGVkIGJ5IEphdmFTY3JpcHQgdmFsaWRh
dG9yOiBmb3VyIGZpZWxkcyBzZXBhcmF0ZWQgYnkgXG5cbjoKKyAgICAgICAgLy8gRmlyc3QgVVJM
OyBmaXJzdCBoZWFkZXIgYmxvY2s7IGxhc3QgVVJMOyBsYXN0IGhlYWRlciBibG9jay4KKyAgICAg
ICAgLy8gTm90ZSB0aGF0IGhlYWRlciBibG9ja3MgYWxyZWFkeSBlbmQgd2l0aCBcbiBkdWUgdG8g
aG93IE5QU3RyZWFtOjpoZWFkZXJzIHdvcmtzLgorICAgICAgICBpbnQgbGVuID0gc3RybGVuKG9i
amVjdC0+Zmlyc3RVcmwpICsgMgorICAgICAgICAgICAgKyBzdHJsZW4ob2JqZWN0LT5maXJzdEhl
YWRlcnMpICsgMQorICAgICAgICAgICAgKyBzdHJsZW4ob2JqZWN0LT5sYXN0VXJsKSArIDIKKyAg
ICAgICAgICAgICsgc3RybGVuKG9iamVjdC0+bGFzdEhlYWRlcnMpICsgMTsKKyAgICAgICAgc3Ry
SGRyID0gbWFsbG9jKGxlbiArIDEpOworICAgICAgICBzbnByaW50ZihzdHJIZHIsIHNpemVvZihz
dHJIZHIpLCAiJXNcblxuJXNcbiVzXG5cbiVzXG4iLAorICAgICAgICAgICAgICAgICBvYmplY3Qt
PmZpcnN0VXJsLCBvYmplY3QtPmZpcnN0SGVhZGVycywgb2JqZWN0LT5sYXN0VXJsLCBvYmplY3Qt
Pmxhc3RIZWFkZXJzKTsKKyAgICAgICAgU1RSSU5HTl9UT19OUFZBUklBTlQoc3RySGRyLCBsZW4s
IGFyZ3NbMV0pOworICAgIH0gZWxzZQorICAgICAgICBOVUxMX1RPX05QVkFSSUFOVChhcmdzWzFd
KTsKKwogICAgIE5QVmFyaWFudCBicm93c2VyUmVzdWx0OwotICAgIGJyb3dzZXItPmludm9rZShv
YmplY3QtPm5wcCwgd2luZG93U2NyaXB0T2JqZWN0LCBjYWxsYmFja0lkZW50aWZpZXIsIGFyZ3Ms
IDEsICZicm93c2VyUmVzdWx0KTsKKyAgICBicm93c2VyLT5pbnZva2Uob2JqZWN0LT5ucHAsIHdp
bmRvd1NjcmlwdE9iamVjdCwgY2FsbGJhY2tJZGVudGlmaWVyLCBhcmdzLCAyLCAmYnJvd3NlclJl
c3VsdCk7CiAgICAgYnJvd3Nlci0+cmVsZWFzZXZhcmlhbnR2YWx1ZSgmYnJvd3NlclJlc3VsdCk7
CisKKyAgICBmcmVlKHN0ckhkcik7Cit9CisKK3ZvaWQgbm90aWZ5U3RyZWFtKFBsdWdpbk9iamVj
dCogb2JqZWN0LCBjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmhlYWRlcnMpCit7CisgICAg
aWYgKG9iamVjdC0+Zmlyc3RVcmwgPT0gTlVMTCkgeworICAgICAgICBpZiAodXJsKQorICAgICAg
ICAgICAgb2JqZWN0LT5maXJzdFVybCA9IHN0cmR1cCh1cmwpOworICAgICAgICBpZiAoaGVhZGVy
cykKKyAgICAgICAgICAgIG9iamVjdC0+Zmlyc3RIZWFkZXJzID0gc3RyZHVwKGhlYWRlcnMpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGZyZWUob2JqZWN0LT5sYXN0VXJsKTsKKyAgICAgICAgZnJl
ZShvYmplY3QtPmxhc3RIZWFkZXJzKTsKKyAgICAgICAgb2JqZWN0LT5sYXN0VXJsID0gKHVybCA/
IHN0cmR1cCh1cmwpIDogTlVMTCk7CisgICAgICAgIG9iamVjdC0+bGFzdEhlYWRlcnMgPSAoaGVh
ZGVycyA/IHN0cmR1cChoZWFkZXJzKSA6IE5VTEwpOworICAgIH0KIH0KSW5kZXg6IFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2Fw
ZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVjdC5oCShyZXZpc2lvbiAxOTk4NikKKysrIFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSwxMiBAQCB0eXBlZGVmIHN0cnVjdCB7
CiAgICAgTlBPYmplY3QgaGVhZGVyOwogICAgIE5QUCBucHA7CiAgICAgQm9vbGVhbiBldmVudExv
Z2dpbmc7CisgICAgY2hhciogZmlyc3RVcmw7CisgICAgY2hhciogZmlyc3RIZWFkZXJzOworICAg
IGNoYXIqIGxhc3RVcmw7CisgICAgY2hhciogbGFzdEhlYWRlcnM7CiB9IFBsdWdpbk9iamVjdDsK
IAogZXh0ZXJuIE5QQ2xhc3MgKmdldFBsdWdpbkNsYXNzKHZvaWQpOwogZXh0ZXJuIHZvaWQgaGFu
ZGxlQ2FsbGJhY2soUGx1Z2luT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIgKnVybCwgTlBSZWFz
b24gcmVhc29uLCB2b2lkICpub3RpZnlEYXRhKTsKK2V4dGVybiB2b2lkIG5vdGlmeVN0cmVhbShQ
bHVnaW5PYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICpoZWFkZXJz
KTsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5z
dWJwcm9qL21haW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9tYWluLmMJKHJldmlzaW9uIDE5OTg2KQorKysgV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovbWFpbi5j
CSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5MywxMSBAQCBOUEVycm9yIE5QUF9TZXRXaW5kb3co
TlBQIGluc3RhbmNlLCBOUFdpCiBOUEVycm9yIE5QUF9OZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBO
UE1JTUVUeXBlIHR5cGUsIE5QU3RyZWFtICpzdHJlYW0sIE5QQm9vbCBzZWVrYWJsZSwgdWludDE2
ICpzdHlwZSkKIHsKICAgICAqc3R5cGUgPSBOUF9BU0ZJTEVPTkxZOworCisgICAgUGx1Z2luT2Jq
ZWN0ICpvYmogPSBpbnN0YW5jZS0+cGRhdGE7CisgICAgaWYgKG9iaiAmJiAoYnJvd3Nlci0+dmVy
c2lvbiA+PSBOUFZFUlNfSEFTX1JFU1BPTlNFX0hFQURFUlMpKQorICAgICAgICBub3RpZnlTdHJl
YW0ob2JqLCBzdHJlYW0tPnVybCwgc3RyZWFtLT5oZWFkZXJzKTsKKwogICAgIHJldHVybiBOUEVS
Ul9OT19FUlJPUjsKIH0KIAo=
</data>
<flag name="review"
          id="5658"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14015</attachid>
            <date>2007-04-11 18:04:07 -0700</date>
            <delta_ts>2007-04-11 18:04:55 -0700</delta_ts>
            <desc>Proposed solution, take 6, i swear</desc>
            <filename>NsPluginResponseHeaders.patch</filename>
            <type>text/plain</type>
            <size>23629</size>
            <attacher name="Deneb Meketa">dmeketa</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODQ5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDctMDQtMTEgIERlbmViIE1l
a2V0YSAgPGRtZWtldGFAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MDI5CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzQ5OTQ4NDkKKyAgICAgICAgQnVnIDEzMDI5OiBQ
ZXJtaXQgTlBBUEkgcGx1Zy1pbnMgdG8gc2VlIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4KKyAgICAg
ICAgVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZSBKYXZhU2NyaXB0Q29yZSwgYnV0IHRoYXQn
cyB3aGVyZSBucGFwaS5oIGlzLgorCisgICAgICAgICogYmluZGluZ3MvbnBhcGkuaDoKKyAgICAg
ICAgQWRkIGhlYWRlcnMgbWVtYmVyIHRvIE5QU3RyZWFtIHN0cnVjdC4gIEFsc28gaW5jcmVhc2Ug
TlBfVkVSU0lPTl9NSU5PUiB0byAxOC4KKyAgICAgICAgSW5jcmVhc2luZyB0byA+PSAxNyBhbGxv
d3MgcGx1Zy1pbnMgdG8gc2FmZWx5IGRldGVjdCB3aGV0aGVyIHRvIGxvb2sgZm9yCisgICAgICAg
IE5QU3RyZWFtOjpoZWFkZXJzLiAgSW5jcmVhc2luZyBmcm9tIDE3IHRvIDE4IHJlZmxlY3RzIHBy
ZXNlbmNlIG9mIE5QT2JqZWN0CisgICAgICAgIGVudW1lcmF0aW9uLCB3aGljaCB3YXMgYWRkZWQg
aW4gYSBwcmlvciBwYXRjaCwgYW5kIHdoaWNoIGhhcyBiZWVuIGFncmVlZCB0bworICAgICAgICBj
b25zdGl0dXRlIHZlcnNpb24gMTggYnkgdGhlIHBsdWdpbi1mdXR1cmVzIGxpc3QuICBBbHNvIGFk
ZCBvdGhlciBtaXNzaW5nCisgICAgICAgIGJpdHMgb2YgbnBhcGkuaCB0byBjYXRjaCB1cCBmcm9t
IDE0IHRvIDE4LiAgVGhpcyBpbmNsdWRlcyBmZWF0dXJlcyB0aGF0IGFyZQorICAgICAgICBub3Qg
aW1wbGVtZW50ZWQgaW4gV2ViS2l0LCBidXQgdGhvc2UgYXJlIHNhZmVseSBzdHViYmVkLgorCiAy
MDA3LTA0LTEwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgTWFyayBSb3dlLgpJbmRleDogSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvbnBh
cGkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9ucGFwaS5oCShyZXZp
c2lvbiAyMDg0OSkKKysrIEphdmFTY3JpcHRDb3JlL2JpbmRpbmdzL25wYXBpLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2RlZmluZSBO
UF9WRVJTSU9OX01BSk9SIDAKLSNkZWZpbmUgTlBfVkVSU0lPTl9NSU5PUiAxNworI2RlZmluZSBO
UF9WRVJTSU9OX01JTk9SIDE4CiAKIAogCkBAIC0xODcsNiArMTg3LDE2IEBAIHR5cGVkZWYgc3Ry
dWN0IF9OUFN0cmVhbQogICAgIHVpbnQzMiAgICAgICBlbmQ7CiAgICAgdWludDMyICAgICAgIGxh
c3Rtb2RpZmllZDsKICAgICB2b2lkKiAgICAgICAgbm90aWZ5RGF0YTsKKyAgICBjb25zdCBjaGFy
KiAgaGVhZGVyczsgICAgICAvKiBSZXNwb25zZSBoZWFkZXJzIGZyb20gaG9zdC4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKiBFeGlzdHMgb25seSBmb3IgPj0gTlBWRVJTX0hBU19S
RVNQT05TRV9IRUFERVJTLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFVzZWQg
Zm9yIEhUVFAgb25seTsgTlVMTCBmb3Igbm9uLUhUVFAuCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICogQXZhaWxhYmxlIGZyb20gTlBQX05ld1N0cmVhbSBvbndhcmRzLgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqIFBsdWdpbiBzaG91bGQgY29weSB0aGlzIGRhdGEg
YmVmb3JlIHN0b3JpbmcgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogSW5j
bHVkZXMgSFRUUCBzdGF0dXMgbGluZSBhbmQgYWxsIGhlYWRlcnMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICogcHJlZmVyYWJseSB2ZXJiYXRpbSBhcyByZWNlaXZlZCBmcm9tIHNl
cnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBoZWFkZXJzIGZvcm1hdHRl
ZCBhcyBpbiBIVFRQICgiSGVhZGVyOiBWYWx1ZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqIGFuZCBuZXdsaW5lcyAoXG4sIE5PVCBcclxuKSBzZXBhcmF0aW5nIGxpbmVzLgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRlcm1pbmF0ZWQgYnkgXG5cMCAoTk9U
IFxuXG5cMCkuICovCiB9IE5QU3RyZWFtOwogCiAKQEAgLTMxNCw3ICszMjQsMTMgQEAgdHlwZWRl
ZiBlbnVtIHsKICAgICBOUFBWcGx1Z2luTmVlZHNYRW1iZWQgICAgICAgICA9IDE0LCAvKiBOb3Qg
aW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCiAKICAgICAvKiBHZXQgdGhlIE5QT2JqZWN0IGZvciBz
Y3JpcHRpbmcgdGhlIHBsdWdpbi4gKi8KLSAgICBOUFBWcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0
ICA9IDE1CisgICAgTlBQVnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCAgPSAxNSwKKwkKKyAgICAv
KiBHZXQgdGhlIHBsdWdpbiB2YWx1ZSAoYXMgXDAtdGVybWluYXRlZCBVVEYtOCBzdHJpbmcgZGF0
YSkgZm9yCisgICAgICogZm9ybSBzdWJtaXNzaW9uIGlmIHRoZSBwbHVnaW4gaXMgcGFydCBvZiBh
IGZvcm0uIFVzZQorICAgICAqIE5QTl9NZW1BbGxvYygpIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3Ig
dGhlIHN0cmluZyBkYXRhLgorICAgICAqLworICAgIE5QUFZmb3JtVmFsdWUgPSAxNiAgICAvKiBO
b3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0ICovCiB9IE5QUFZhcmlhYmxlOwogCiAvKgpAQCAtNTg3
LDYgKzYwMywxMiBAQCB0eXBlZGVmIHN0cnVjdCBOUF9Qb3J0CiAjZGVmaW5lIE5QVkVSU19XSU4x
Nl9IQVNfTElWRUNPTk5FQ1QgICAgOQogI2RlZmluZSBOUFZFUlNfNjhLX0hBU19MSVZFQ09OTkVD
VCAgICAxMQogI2RlZmluZSBOUFZFUlNfSEFTX1dJTkRPV0xFU1MgICAgICAgMTEKKyNkZWZpbmUg
TlBWRVJTX0hBU19YUENPTk5FQ1RfU0NSSVBUSU5HICAgIDEzICAvKiBOb3QgaW1wbGVtZW50ZWQg
aW4gV2ViS2l0ICovCisjZGVmaW5lIE5QVkVSU19IQVNfTlBSVU5USU1FX1NDUklQVElORyAgICAx
NAorI2RlZmluZSBOUFZFUlNfSEFTX0ZPUk1fVkFMVUVTICAgICAgICAgICAgMTUgIC8qIE5vdCBp
bXBsZW1lbnRlZCBpbiBXZWJLaXQ7IHNlZSBidWcgMTMwNjEgKi8KKyNkZWZpbmUgTlBWRVJTX0hB
U19QT1BVUFNfRU5BQkxFRF9TVEFURSAgIDE2ICAvKiBOb3QgaW1wbGVtZW50ZWQgaW4gV2ViS2l0
ICovCisjZGVmaW5lIE5QVkVSU19IQVNfUkVTUE9OU0VfSEVBREVSUyAgICAgICAxNworI2RlZmlu
ZSBOUFZFUlNfSEFTX05QT0JKRUNUX0VOVU0gICAgICAgICAgMTgKIAogCiAvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NDkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAwNy0wNC0xMSAgRGVuZWIgTWVrZXRh
ICA8ZG1la2V0YUBhZG9iZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMjkK
KyAgICAgICAgcmRhcjovL3Byb2JsZW0vNDk5NDg0OQorICAgICAgICBCdWcgMTMwMjk6IFBlcm1p
dCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJzLgorCisgICAgICAg
ICogaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNlLWhlYWRlcnMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BsdWdpbnMvbnBhcGktcmVzcG9uc2UtaGVh
ZGVycy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2Vz
L2xvYWQtbWUtMS50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvcGx1Z2lucy9yZXNv
dXJjZXMvbG9hZC1tZS0yLnR4dDogQWRkZWQuCisKIDIwMDctMDQtMTAgIEp1c3RpbiBHYXJjaWEg
IDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBoYXJyaXNv
bgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3BvbnNlLWhl
YWRlcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
cGx1Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJz
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorCitUZXN0IGZvciBi
dWcgMTMwMjk6IFBlcm1pdCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFk
ZXJzLgorCitFeHBlY3RlZCByZXN1bHQgYmVsb3cgaXMgdHdvIEhUVFAgcmVzcG9uc2UgZXh0cmFj
dHMsIG9uZSBmb3IgdGhlIGluaXRpYWwgc3RyZWFtIHNwZWNpZmllZCBpbiB0aGUgInNyYyIgYXR0
cmlidXRlLCB0aGUgb3RoZXIgZm9yIGFuIE5QTl9HZXRVUkxOb3RpZnkgcmVxdWVzdC4gRWFjaCBi
bG9jayBzaG91bGQgY29udGFpbiB0aGUgVVJMOyB0aGUgc3RhdHVzIGxpbmUsIHdoaWNoIHNob3Vs
ZCBzYXkgIkhUVFAgMjAwIE9LIjsgYW5kIHRoZSBNSU1FLXR5cGUsIHdoaWNoIHNob3VsZCBzYXkg
IkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbiIuCisKKy0tLS0tLS0tLS0KKworaHR0cDovL1t2YXJp
ZXMsIG5vdCBiZWluZyB0ZXN0ZWRdL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMS50eHQKK0hU
VFAgMjAwIE9LCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworLS0tLS0tLS0tLQorCitodHRw
Oi8vW3Zhcmllcywgbm90IGJlaW5nIHRlc3RlZF0vcGx1Z2lucy9yZXNvdXJjZXMvbG9hZC1tZS0y
LnR4dAorSFRUUCAyMDAgT0sKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisKSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9wbHVnaW5zL25wYXBpLXJlc3Bv
bnNlLWhlYWRlcnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
cGx1Z2lucy9ucGFwaS1yZXNwb25zZS1oZWFkZXJzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTggQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciByZXMxLCBy
ZXMyOworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB0cnkgeworICAgICAgICByZXMxID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdDEiKTsKKyAgICAgICAgcmVzMiA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQyIik7CisgICAgICAgIHBsZy5nZXRVUkxOb3RpZnkoIi9w
bHVnaW5zL3Jlc291cmNlcy9sb2FkLW1lLTIudHh0IiwgbnVsbCwgImNhbGxiYWNrIik7CisgICAg
fSBjYXRjaCAoZXgpIHsKKyAgICAgICAgc2hvd0VycigiRXhjZXB0aW9uOiAiICsgZXguZGVzY3Jp
cHRpb24pOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKworZnVu
Y3Rpb24gY2FsbGJhY2soZXJyQ29kZSwgc3RyZWFtRHVtcCkKK3sKKyAgICB2YXIgcGFyc2UgPSBw
YXJzZVN0cmVhbUR1bXAoc3RyZWFtRHVtcCk7CisgICAgaWYgKHBhcnNlLmVycikKKyAgICAgICAg
c2hvd0VycihwYXJzZS5lcnIpOworICAgIGVsc2UgeworICAgICAgICByZXMxLmlubmVySFRNTCA9
IG5ld2xpbmVzVG9IVE1MKHBhcnNlLnJlczEpOworICAgICAgICByZXMyLmlubmVySFRNTCA9IG5l
d2xpbmVzVG9IVE1MKHBhcnNlLnJlczIpOworICAgIH0KKworICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKK30KKworLy8gRm9ybWF0IHBhc3NlZCBieSBwbHVnaW46IGZvdXIgZmllbGRzIHNlcGFyYXRl
ZCBieSBcblxuOgorLy8gRmlyc3QgVVJMOyBmaXJzdCBoZWFkZXIgYmxvY2s7IGxhc3QgVVJMOyBs
YXN0IGhlYWRlciBibG9jay4KK2Z1bmN0aW9uIHBhcnNlU3RyZWFtRHVtcChzdHJlYW1EdW1wKQor
eworICAgIHZhciBydG4gPSB7fTsKKworICAgIGlmICh0eXBlb2Ygc3RyZWFtRHVtcCA9PSAic3Ry
aW5nIiB8fCAoKHR5cGVvZiBzdHJlYW1EdW1wID09ICJvYmplY3QiKSAmJiAoc3RyZWFtRHVtcC5j
b25zdHJ1Y3RvciA9PSBTdHJpbmcpKSkgeworICAgICAgICB2YXIgcGFydHMgPSBzdHJlYW1EdW1w
LnNwbGl0KCJcblxuIik7CisgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gNCkgeworICAgICAg
ICAgICAgcnRuLnJlczEgPSBnZW5lcmljVVJMKHBhcnRzWzBdKSArICJcbiIgKyBwYXJzZUhlYWRl
cnMocGFydHNbMV0pOworICAgICAgICAgICAgcnRuLnJlczIgPSBnZW5lcmljVVJMKHBhcnRzWzJd
KSArICJcbiIgKyBwYXJzZUhlYWRlcnMocGFydHNbM10pOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIHJ0bi5lcnIgPSAic3RyZWFtRHVtcCBmcm9tIHBsdWdpbiBkb2VzIG5vdCBoYXZlIGV4
cGVjdGVkIGZvcm1hdCI7CisgICAgfSBlbHNlCisgICAgICAgIHJ0bi5lcnIgPSAic3RyZWFtRHVt
cCBmcm9tIHBsdWdpbiBpcyBub3QgYSBzdHJpbmc6ICIgKyBzdHJlYW1EdW1wOworCisgICAgcmV0
dXJuIHJ0bjsKK30KKworZnVuY3Rpb24gc2hvd0VycihlcnIpCit7CisgICAgcmVzMS5pbm5lckhU
TUwgPSAiRkFJTEVEIC0gIiArIGVycjsKKyAgICByZXMyLmlubmVySFRNTCA9ICIiOworfQorCitm
dW5jdGlvbiBuZXdsaW5lc1RvSFRNTChzdHIpCit7CisgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9c
bi9nLCAiPGJyPiIpOworfQorCitmdW5jdGlvbiBnZW5lcmljVVJMKHVybCkKK3sKKyAgICByZXR1
cm4gdXJsLnJlcGxhY2UoL14oaHR0cDpcL1wvKVteXC9dKy8sICIkMVt2YXJpZXMsIG5vdCBiZWlu
ZyB0ZXN0ZWRdIik7Cit9CisKK2Z1bmN0aW9uIHBhcnNlSGVhZGVycyhoZHJzKQoreworICAgIHZh
ciBwYXJ0cyA9IGhkcnMuc3BsaXQoIlxuIik7CisgICAgdmFyIHJ0biA9IHBhcnRzWzBdICsgIlxu
IjsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspCisgICAgICAg
IGlmIChwYXJ0c1tpXS5tYXRjaCgvXkNvbnRlbnQtVHlwZTovKSkKKyAgICAgICAgICAgIHJ0biAr
PSBwYXJ0c1tpXTsKKworICAgIHJldHVybiBydG47Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5IG9ubG9hZD0idGVzdCgpIj4KKzxlbWJlZCBuYW1lPSJwbGciIHR5cGU9ImFwcGxpY2F0aW9u
L3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiIHNyYz0iL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUt
MS50eHQiPjwvZW1iZWQ+Cis8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVnemlsbGEub3Bl
bmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDI5Ij5idWcgMTMwMjk8YS8+OgorUGVybWl0
IE5QQVBJIHBsdWctaW5zIHRvIHNlZSBIVFRQIHJlc3BvbnNlIGhlYWRlcnMuPC9wPgorPHA+RXhw
ZWN0ZWQgcmVzdWx0IGJlbG93IGlzIHR3byBIVFRQIHJlc3BvbnNlIGV4dHJhY3RzLCBvbmUgZm9y
IHRoZSBpbml0aWFsIHN0cmVhbSBzcGVjaWZpZWQgaW4gdGhlICJzcmMiCithdHRyaWJ1dGUsIHRo
ZSBvdGhlciBmb3IgYW4gTlBOX0dldFVSTE5vdGlmeSByZXF1ZXN0LiBFYWNoIGJsb2NrIHNob3Vs
ZCBjb250YWluIHRoZSBVUkw7IHRoZSBzdGF0dXMgbGluZSwKK3doaWNoIHNob3VsZCBzYXkgIkhU
VFAgMjAwIE9LIjsgYW5kIHRoZSBNSU1FLXR5cGUsIHdoaWNoIHNob3VsZCBzYXkgIkNvbnRlbnQt
VHlwZTogdGV4dC9wbGFpbiIuPC9wPgorPHA+LS0tLS0tLS0tLTwvcD4KKzxwIGlkPSJyZXN1bHQx
Ij5SdW5uaW5nIHRlc3QsIHJlc3VsdCBzaG91bGQgYXBwZWFyIGhlcmUgaW4gYSB2ZXJ5IHNob3J0
IHRpbWUuLi48L3A+Cis8cD4tLS0tLS0tLS0tPC9wPgorPHAgaWQ9InJlc3VsdDIiPlJ1bm5pbmcg
dGVzdCwgcmVzdWx0IHNob3VsZCBhcHBlYXIgaGVyZSBpbiBhIHZlcnkgc2hvcnQgdGltZS4uLjwv
cD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvcGx1Z2lu
cy9yZXNvdXJjZXMvbG9hZC1tZS0xLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMS50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMS50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorSXQncyBhIGxvbmVseSBleGlzdGVuY2UgYmVpbmcg
YSB0ZXN0IGZpbGUuCitZb3UncmUgd2VsY29tZS4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvcGx1Z2lucy9yZXNvdXJjZXMvbG9hZC1tZS0yLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUtMi50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL2xvYWQtbWUt
Mi50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorT2ggeWVhaC4KK05vYm9keSBsb29r
aW4nIGF0IG1lLgorSnVzdCBjaGlsbGluJy4KK1Rlc3QgZmlsZS4KK09oIHllYWguCkluZGV4OiBX
ZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIwODQ5KQorKysgV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1
IEBACisyMDA3LTA0LTExICBEZW5lYiBNZWtldGEgIDxkbWVrZXRhQGFkb2JlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAyOQorICAgICAgICByZGFyOi8vcHJvYmxlbS80OTk0
ODQ5CisgICAgICAgIEJ1ZyAxMzAyOTogUGVybWl0IE5QQVBJIHBsdWctaW5zIHRvIHNlZSBIVFRQ
IHJlc3BvbnNlIGhlYWRlcnMuCisKKyAgICAgICAgKiBQbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBs
dWdpblN0cmVhbS5oOiBkZWNsYXJhdGlvbnMuCisgICAgICAgICogUGx1Z2lucy9XZWJCYXNlTmV0
c2NhcGVQbHVnaW5TdHJlYW0ubW06IG1haW4gaW1wbGVtZW50YXRpb24uCisgICAgICAgICgtW1dl
YkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbSBkZWFsbG9jXSk6IGNsZWFudXAuCisgICAgICAgICgt
W1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbSBmaW5hbGl6ZV0pOiBjbGVhbnVwLgorICAgICAg
ICAoLVtXZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0gc3RhcnRTdHJlYW1SZXNwb25zZVVSTDpl
eHBlY3RlZENvbnRlbnRMZW5ndGg6bGFzdE1vZGlmaWVkRGF0ZTpNSU1FVHlwZTpoZWFkZXJzOl0p
OgorICAgICAgICBQYXNzIGhlYWRlcnMgYWxvbmcuCisgICAgICAgICgtW1dlYkJhc2VOZXRzY2Fw
ZVBsdWdpblN0cmVhbSBzdGFydFN0cmVhbVdpdGhSZXNwb25zZTpdKToKKyAgICAgICAgTWFpbiB3
b3JrIGlzIGhlcmUuICBFeHRyYWN0IGhlYWRlcnMgZnJvbSBOU0hUVFBVUkxSZXNwb25zZSBvYmpl
Y3QgaW50byBhIGJ5dGUgc2VxdWVuY2UuCisgICAgICAgIFNlZSBjb21tZW50cyBoZXJlIGFib3V0
IGhvdyBpdCB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgbG93LWxldmVsIGFjY2VzcyB0byB0aGUgSFRU
UCByZXNwb25zZS4KKyAgICAgICAgKC1bV2ViQmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtIF9kZXN0
cm95U3RyZWFtXSk6IGNsZWFudXAuCisgICAgICAgICogUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQ
bHVnaW5WaWV3Lm1tOgorICAgICAgICAoLVtXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGV2YWx1
YXRlSmF2YVNjcmlwdFBsdWdpblJlcXVlc3Q6XSk6CisgICAgICAgIENvbmZvcm0gdG8gbmV3IHN0
YXJ0U3RyZWFtIHBhcmFtcy4gIE5vdCBhcHBsaWNhYmxlIGhlcmUsIHBhc3MgbmlsLgorCiAyMDA3
LTA0LTEwICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbgpJbmRleDogV2ViS2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2lu
U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1
Z2luU3RyZWFtLmgJKHJldmlzaW9uIDIwODQ5KQorKysgV2ViS2l0L1BsdWdpbnMvV2ViQmFzZU5l
dHNjYXBlUGx1Z2luU3RyZWFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICAg
ICBjaGFyICpwYXRoOwogICAgIEJPT0wgc2VuZE5vdGlmaWNhdGlvbjsKICAgICB2b2lkICpub3Rp
ZnlEYXRhOworICAgIGNoYXIgKmhlYWRlcnM7CiAgICAgV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmll
dyAqcGx1Z2luVmlldzsKICAgICBOUFJlYXNvbiByZWFzb247CiAgICAgQk9PTCBpc1Rlcm1pbmF0
ZWQ7CkBAIC04MCw3ICs4MSw4IEBACiAtICh2b2lkKXN0YXJ0U3RyZWFtUmVzcG9uc2VVUkw6KE5T
VVJMICopdGhlUmVzcG9uc2VVUkwKICAgICAgICAgIGV4cGVjdGVkQ29udGVudExlbmd0aDoobG9u
ZyBsb25nKWV4cGVjdGVkQ29udGVudExlbmd0aAogICAgICAgICAgICAgICBsYXN0TW9kaWZpZWRE
YXRlOihOU0RhdGUgKilsYXN0TW9kaWZpZWREYXRlCi0gICAgICAgICAgICAgICAgICAgICAgTUlN
RVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5
cGU6KE5TU3RyaW5nICopTUlNRVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoo
TlNEYXRhICopdGhlSGVhZGVyczsKIAogLy8gY2FuY2VsTG9hZFdpdGhFcnJvciBjYW5jZWxzIHRo
ZSBOU1VSTENvbm5lY3Rpb24gYW5kIGluZm9ybXMgV2ViS2l0IG9mIHRoZSBsb2FkIGVycm9yLgog
Ly8gVGhpcyBtZXRob2QgaXMgb3ZlcnJpZGVuIGJ5IHN1YmNsYXNzZXMuCkluZGV4OiBXZWJLaXQv
UGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5TdHJlYW0ubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtLm1tCShyZXZpc2lvbiAyMDg0
OSkKKysrIFdlYktpdC9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0cmVhbS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSw3IEBAIHN0YXRpYyBTdHJlYW1NYXAmIHN0cmVhbXMo
KQogICAgIAogICAgIGZyZWUoKHZvaWQgKilzdHJlYW0udXJsKTsKICAgICBmcmVlKHBhdGgpOwor
ICAgIGZyZWUoaGVhZGVycyk7CiAKICAgICBzdHJlYW1zKCkucmVtb3ZlKCZzdHJlYW0pOwogCkBA
IC0xNTgsNiArMTU5LDcgQEAgc3RhdGljIFN0cmVhbU1hcCYgc3RyZWFtcygpCiAKICAgICBmcmVl
KCh2b2lkICopc3RyZWFtLnVybCk7CiAgICAgZnJlZShwYXRoKTsKKyAgICBmcmVlKGhlYWRlcnMp
OwogCiAgICAgc3RyZWFtcygpLnJlbW92ZSgmc3RyZWFtKTsKIApAQCAtMjI4LDYgKzIzMCw3IEBA
IHN0YXRpYyBTdHJlYW1NYXAmIHN0cmVhbXMoKQogICAgICAgICAgZXhwZWN0ZWRDb250ZW50TGVu
Z3RoOihsb25nIGxvbmcpZXhwZWN0ZWRDb250ZW50TGVuZ3RoCiAgICAgICAgICAgICAgIGxhc3RN
b2RpZmllZERhdGU6KE5TRGF0ZSAqKWxhc3RNb2RpZmllZERhdGUKICAgICAgICAgICAgICAgICAg
ICAgICBNSU1FVHlwZTooTlNTdHJpbmcgKil0aGVNSU1FVHlwZQorICAgICAgICAgICAgICAgICAg
ICAgICBoZWFkZXJzOihOU0RhdGEgKil0aGVIZWFkZXJzCiB7CiAgICAgQVNTRVJUKCFpc1Rlcm1p
bmF0ZWQpOwogICAgIApAQCAtMjQxLDYgKzI0NCwxNCBAQCBzdGF0aWMgU3RyZWFtTWFwJiBzdHJl
YW1zKCkKICAgICBzdHJlYW0uZW5kID0gZXhwZWN0ZWRDb250ZW50TGVuZ3RoID4gMCA/ICh1aW50
MzIpZXhwZWN0ZWRDb250ZW50TGVuZ3RoIDogMDsKICAgICBzdHJlYW0ubGFzdG1vZGlmaWVkID0g
KHVpbnQzMilbbGFzdE1vZGlmaWVkRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBdOwogICAgIHN0
cmVhbS5ub3RpZnlEYXRhID0gbm90aWZ5RGF0YTsKKworICAgIGlmICh0aGVIZWFkZXJzKSB7Cisg
ICAgICAgIHVuc2lnbmVkIGxlbiA9IFt0aGVIZWFkZXJzIGxlbmd0aF07CisgICAgICAgIGhlYWRl
cnMgPSAoY2hhciopIG1hbGxvYyhsZW4gKyAxKTsKKyAgICAgICAgW3RoZUhlYWRlcnMgZ2V0Qnl0
ZXM6aGVhZGVyc107CisgICAgICAgIGhlYWRlcnNbbGVuXSA9IDA7CisgICAgICAgIHN0cmVhbS5o
ZWFkZXJzID0gaGVhZGVyczsKKyAgICB9CiAgICAgCiAgICAgdHJhbnNmZXJNb2RlID0gTlBfTk9S
TUFMOwogICAgIG9mZnNldCA9IDA7CkBAIC0yODIsMTAgKzI5Myw1MCBAQCBzdGF0aWMgU3RyZWFt
TWFwJiBzdHJlYW1zKCkKIAogLSAodm9pZClzdGFydFN0cmVhbVdpdGhSZXNwb25zZTooTlNVUkxS
ZXNwb25zZSAqKXIKIHsKKyAgICBOU011dGFibGVEYXRhICp0aGVIZWFkZXJzID0gbmlsOworICAg
IGlmIChbciBpc0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11dKSB7CisgICAg
ICAgIE5TSFRUUFVSTFJlc3BvbnNlICpodHRwUmVzcG9uc2UgPSAoTlNIVFRQVVJMUmVzcG9uc2Ug
KilyOworICAgICAgICB0aGVIZWFkZXJzID0gW05TTXV0YWJsZURhdGEgZGF0YVdpdGhDYXBhY2l0
eToxMDI0XTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBpdCB3b3VsZCBiZSBuaWNlIHRv
IGJlIGFibGUgdG8gZ2V0IHRoZSByYXcgSFRUUCBoZWFkZXIgYmxvY2suCisgICAgICAgIC8vIFRo
aXMgaW5jbHVkZXMgdGhlIEhUVFAgdmVyc2lvbiwgdGhlIHJlYWwgc3RhdHVzIHRleHQsCisgICAg
ICAgIC8vIGFsbCBoZWFkZXJzIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyIGFuZCBpbmNsdWRpbmcg
ZHVwbGljYXRlcywKKyAgICAgICAgLy8gYW5kIGFsbCBvcmlnaW5hbCBieXRlcyB2ZXJiYXRpbSwg
cmF0aGVyIHRoYW4gc2VudCB0aHJvdWdoIFVuaWNvZGUgdHJhbnNsYXRpb24uCisgICAgICAgIC8v
IFVuZm9ydHVuYXRlbHkgTlNIVFRQVVJMUmVzcG9uc2UgZG9lc24ndCBwcm92aWRlIGFjY2VzcyBh
dCB0aGF0IGxvdyBhIGxldmVsLgorICAgICAgICAKKyAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5k
Qnl0ZXM6IkhUVFAgIiBsZW5ndGg6NV07CisgICAgICAgIGNoYXIgc3RhdHVzU3RyWzEwXTsKKyAg
ICAgICAgc25wcmludGYoc3RhdHVzU3RyLCBzaXplb2Yoc3RhdHVzU3RyKSwgIiVkIiwgW2h0dHBS
ZXNwb25zZSBzdGF0dXNDb2RlXSk7CisgICAgICAgIFt0aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOnN0
YXR1c1N0ciBsZW5ndGg6c3RybGVuKHN0YXR1c1N0cildOworICAgICAgICBbdGhlSGVhZGVycyBh
cHBlbmRCeXRlczoiIE9LXG4iIGxlbmd0aDo0XTsKKworICAgICAgICAvLyBIQUNLOiBwYXNzIHRo
ZSBoZWFkZXJzIHRocm91Z2ggYXMgVVRGLTguCisgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBp
bnRlbmRlZCBiZWhhdmlvcjsgd2UncmUgc3VwcG9zZWQgdG8gcGFzcyBvcmlnaW5hbCBieXRlcyB2
ZXJiYXRpbS4KKyAgICAgICAgLy8gQnV0IHdlIGRvbid0IGhhdmUgdGhlIG9yaWdpbmFsIGJ5dGVz
LCB3ZSBoYXZlIE5TU3RyaW5ncyBidWlsdCBieSB0aGUgVVJMIGxvYWRpbmcgc3lzdGVtLgorICAg
ICAgICAvLyBJdCBob3BlZnVsbHkgc2hvdWxkbid0IG1hdHRlciwgc2luY2UgUkZDMjYxNi9SRkM4
MjIgcmVxdWlyZSBBU0NJSS1vbmx5IGhlYWRlcnMsCisgICAgICAgIC8vIGJ1dCBzdXJlbHkgc29t
ZW9uZSBvdXQgdGhlcmUgaXMgdXNpbmcgbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIGFuZCBob3BlZnVs
bHkgVVRGLTggaXMgYWRlcXVhdGUgaGVyZS4KKyAgICAgICAgLy8gSXQgc2VlbXMgYmV0dGVyIHRo
YW4gTlNBU0NJSVN0cmluZ0VuY29kaW5nLCB3aGljaCB3aWxsIGxvc2UgaW5mb3JtYXRpb24gaWYg
bm9uLUFTQ0lJIGlzIHVzZWQuCisKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICpoZWFkZXJEaWN0ID0g
W2h0dHBSZXNwb25zZSBhbGxIZWFkZXJGaWVsZHNdOworICAgICAgICBOU0FycmF5ICprZXlzID0g
W1toZWFkZXJEaWN0IGFsbEtleXNdIHNvcnRlZEFycmF5VXNpbmdTZWxlY3RvcjpAc2VsZWN0b3Io
Y2FzZUluc2Vuc2l0aXZlQ29tcGFyZTopXTsKKyAgICAgICAgTlNFbnVtZXJhdG9yICppID0gW2tl
eXMgb2JqZWN0RW51bWVyYXRvcl07CisgICAgICAgIE5TU3RyaW5nICprOworICAgICAgICB3aGls
ZSAoKGsgPSBbaSBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7CisgICAgICAgICAgICBOU1N0cmluZyAq
diA9IFtoZWFkZXJEaWN0IG9iamVjdEZvcktleTprXTsKKyAgICAgICAgICAgIFt0aGVIZWFkZXJz
IGFwcGVuZERhdGE6W2sgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsK
KyAgICAgICAgICAgIFt0aGVIZWFkZXJzIGFwcGVuZEJ5dGVzOiI6ICIgbGVuZ3RoOjJdOworICAg
ICAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kRGF0YTpbdiBkYXRhVXNpbmdFbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZ11dOworICAgICAgICAgICAgW3RoZUhlYWRlcnMgYXBwZW5kQnl0ZXM6
IlxuIiBsZW5ndGg6MV07CisgICAgICAgIH0KKworICAgICAgICAvLyBzdGFydFN0cmVhbVJlc3Bv
bnNlVVJMOi4uLiB3aWxsIG51bGwtdGVybWluYXRlLgorICAgIH0KKwogICAgIFtzZWxmIHN0YXJ0
U3RyZWFtUmVzcG9uc2VVUkw6W3IgVVJMXQogICAgICAgICAgICBleHBlY3RlZENvbnRlbnRMZW5n
dGg6W3IgZXhwZWN0ZWRDb250ZW50TGVuZ3RoXQogICAgICAgICAgICAgICAgIGxhc3RNb2RpZmll
ZERhdGU6V0tHZXROU1VSTFJlc3BvbnNlTGFzdE1vZGlmaWVkRGF0ZShyKQotICAgICAgICAgICAg
ICAgICAgICAgICAgTUlNRVR5cGU6W3IgTUlNRVR5cGVdXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIE1JTUVUeXBlOltyIE1JTUVUeXBlXQorICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRl
cnM6dGhlSGVhZGVyc107CiB9CiAKIC0gKHZvaWQpX2Rlc3Ryb3lTdHJlYW0KQEAgLTMzMSw2ICsz
ODIsMTAgQEAgc3RhdGljIFN0cmVhbU1hcCYgc3RyZWFtcygpCiAgICAgICAgIFtwdiBkaWRDYWxs
UGx1Z0luRnVuY3Rpb25dOwogICAgICAgICBMT0coUGx1Z2lucywgIk5QUF9EZXN0cm95U3RyZWFt
IHJlc3BvbnNlVVJMPSVAIGVycm9yPSVkIiwgcmVzcG9uc2VVUkwsIG5wRXJyKTsKIAorICAgICAg
ICBmcmVlKGhlYWRlcnMpOworICAgICAgICBoZWFkZXJzID0gTlVMTDsKKyAgICAgICAgc3RyZWFt
LmhlYWRlcnMgPSBOVUxMOworCiAgICAgICAgIHN0cmVhbS5uZGF0YSA9IG5pbDsKIAogICAgICAg
ICBpZiAoaXNUZXJtaW5hdGVkKQpJbmRleDogV2ViS2l0L1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBl
UGx1Z2luVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvUGx1Z2lucy9XZWJCYXNlTmV0c2Nh
cGVQbHVnaW5WaWV3Lm1tCShyZXZpc2lvbiAyMDg0OSkKKysrIFdlYktpdC9QbHVnaW5zL1dlYkJh
c2VOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNDIsNyArMjA0Miw4
IEBAIHN0YXRpYyBPU1N0YXR1cyBUU01FdmVudEhhbmRsZXIoRXZlbnRIYW4KICAgICAgICAgW3N0
cmVhbSBzdGFydFN0cmVhbVJlc3BvbnNlVVJMOlVSTAogICAgICAgICAgICAgICAgICBleHBlY3Rl
ZENvbnRlbnRMZW5ndGg6W0pTRGF0YSBsZW5ndGhdCiAgICAgICAgICAgICAgICAgICAgICAgbGFz
dE1vZGlmaWVkRGF0ZTpuaWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBl
OkAidGV4dC9wbGFpbiJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6
QCJ0ZXh0L3BsYWluIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6bmls
XTsKICAgICAgICAgW3N0cmVhbSByZWNlaXZlZERhdGE6SlNEYXRhXTsKICAgICAgICAgW3N0cmVh
bSBmaW5pc2hlZExvYWRpbmdXaXRoRGF0YTpKU0RhdGFdOwogICAgICAgICBbc3RyZWFtIHJlbGVh
c2VdOwpJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NDkpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAwNy0wNC0xMSAgRGVuZWIgTWVrZXRh
ICA8ZG1la2V0YUBhZG9iZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMjkK
KyAgICAgICAgcmRhcjovL3Byb2JsZW0vNDk5NDg0OQorICAgICAgICBCdWcgMTMwMjk6IFBlcm1p
dCBOUEFQSSBwbHVnLWlucyB0byBzZWUgSFRUUCByZXNwb25zZSBoZWFkZXJzLgorICAgICAgICBD
aGFuZ2VzIGluIFdlYktpdFRvb2xzIGFyZSBvbmx5IGZvciB0aGUgTlBBUEkgdGVzdCBwbHVnaW4u
CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9Q
bHVnaW5PYmplY3QuYzogbWFpbiB0ZXN0IGxvZ2ljLgorICAgICAgICAocGx1Z2luSW52b2tlKTog
c3VwcG9ydCBudWxsIHdpbmRvdyBhcmd1bWVudCBmb3IgTlBTdHJlYW0gY3JlYXRpb24uCisgICAg
ICAgIChwbHVnaW5BbGxvY2F0ZSk6IGluaXRpYWxpemF0aW9uLgorICAgICAgICAocGx1Z2luRGVh
bGxvY2F0ZSk6IGNsZWFudXAuCisgICAgICAgIChoYW5kbGVDYWxsYmFjayk6IGFkZCBzZWNvbmQg
SlMgY2FsbGJhY2sgYXJnOiBoZWFkZXIgZHVtcC4KKyAgICAgICAgKG5vdGlmeVN0cmVhbSk6IGFk
ZGVkOyBob29rIGZyb20gTlBQX05ld1N0cmVhbSB0byByZWNvcmQgaGVhZGVycy4KKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3VicHJvai9QbHVnaW5PYmplY3Qu
aDogZGVjbGFyYXRpb25zLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBs
dWdJbi5zdWJwcm9qL21haW4uYzogY2FsbCBuZXcgaGVhZGVyIGhvb2suCisgICAgICAgIChOUFBf
TmV3U3RyZWFtKTogY2FsbCBuZXcgaGVhZGVyIGhvb2suCisKIDIwMDctMDQtMDkgIEdlb2ZmcmV5
IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWog
U3RhY2hvd2lhay4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2Fw
ZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVjdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVjdC5j
CShyZXZpc2lvbiAyMDg0OSkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRz
Y2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVjdC5jCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEs
OSArMjQxLDEyIEBAIHN0YXRpYyBib29sIHBsdWdpbkludm9rZShOUE9iamVjdCAqaGVhZGUKICAg
ICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0gZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0dF
VF9VUkxfTk9USUZZXSkgewotICAgICAgICBpZiAoYXJnQ291bnQgPT0gMyAmJiBOUFZBUklBTlRf
SVNfU1RSSU5HKGFyZ3NbMF0pICYmIE5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1sxXSkgJiYgTlBW
QVJJQU5UX0lTX1NUUklORyhhcmdzWzJdKSkgeworICAgICAgICBpZiAoYXJnQ291bnQgPT0gMwor
ICAgICAgICAgICYmIE5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1swXSkKKyAgICAgICAgICAmJiAo
TlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzFdKSB8fCBOUFZBUklBTlRfSVNfTlVMTChhcmdzWzFd
KSkKKyAgICAgICAgICAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMl0pKSB7CiAgICAgICAg
ICAgICBOUFVURjgqIHVybFN0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZhcmdz
WzBdKTsKLSAgICAgICAgICAgIE5QVVRGOCogdGFyZ2V0U3RyaW5nID0gY3JlYXRlQ1N0cmluZ0Zy
b21OUFZhcmlhbnQoJmFyZ3NbMV0pOyAgICAgICAgICAgIAorICAgICAgICAgICAgTlBVVEY4KiB0
YXJnZXRTdHJpbmcgPSAoTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzFdKSA/IGNyZWF0ZUNTdHJp
bmdGcm9tTlBWYXJpYW50KCZhcmdzWzFdKSA6IE5VTEwpOwogICAgICAgICAgICAgTlBVVEY4KiBj
YWxsYmFja1N0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzWzJdKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgTlBJZGVudGlmaWVyIGNhbGxiYWNrSWRlbnRpZmllciA9
IGJyb3dzZXItPmdldHN0cmluZ2lkZW50aWZpZXIoY2FsbGJhY2tTdHJpbmcpOwpAQCAtMzMyLDYg
KzMzNSwxMSBAQCBzdGF0aWMgTlBPYmplY3QgKnBsdWdpbkFsbG9jYXRlKE5QUCBucHAsCiAgICAg
bmV3SW5zdGFuY2UtPmxvZ0Rlc3Ryb3kgPSBGQUxTRTsKICAgICBuZXdJbnN0YW5jZS0+c3RyZWFt
ID0gMDsKICAgICAKKyAgICBuZXdJbnN0YW5jZS0+Zmlyc3RVcmwgPSBOVUxMOworICAgIG5ld0lu
c3RhbmNlLT5maXJzdEhlYWRlcnMgPSBOVUxMOworICAgIG5ld0luc3RhbmNlLT5sYXN0VXJsID0g
TlVMTDsKKyAgICBuZXdJbnN0YW5jZS0+bGFzdEhlYWRlcnMgPSBOVUxMOworICAgIAogICAgIHJl
dHVybiAoTlBPYmplY3QgKiluZXdJbnN0YW5jZTsKIH0KIApAQCAtMzQwLDE1ICszNDgsMjAgQEAg
c3RhdGljIHZvaWQgcGx1Z2luRGVhbGxvY2F0ZShOUE9iamVjdCAqaAogICAgIFBsdWdpbk9iamVj
dCogb2JqID0gKFBsdWdpbk9iamVjdCopaGVhZGVyOwogICAgIAogICAgIGJyb3dzZXItPnJlbGVh
c2VvYmplY3Qob2JqLT50ZXN0T2JqZWN0KTsKLSAgICAKLSAgICBmcmVlKGhlYWRlcik7CisKKyAg
ICBmcmVlKG9iai0+Zmlyc3RVcmwpOworICAgIGZyZWUob2JqLT5maXJzdEhlYWRlcnMpOworICAg
IGZyZWUob2JqLT5sYXN0VXJsKTsKKyAgICBmcmVlKG9iai0+bGFzdEhlYWRlcnMpOworCisgICAg
ZnJlZShvYmopOwogfQogCiB2b2lkIGhhbmRsZUNhbGxiYWNrKFBsdWdpbk9iamVjdCogb2JqZWN0
LCBjb25zdCBjaGFyICp1cmwsIE5QUmVhc29uIHJlYXNvbiwgdm9pZCAqbm90aWZ5RGF0YSkKIHsK
ICAgICBhc3NlcnQob2JqZWN0KTsKICAgICAKLSAgICBOUFZhcmlhbnQgYXJnc1sxXTsKKyAgICBO
UFZhcmlhbnQgYXJnc1syXTsKICAgICAKICAgICBOUE9iamVjdCAqd2luZG93U2NyaXB0T2JqZWN0
OwogICAgIGJyb3dzZXItPmdldHZhbHVlKG9iamVjdC0+bnBwLCBOUE5WV2luZG93TlBPYmplY3Qs
ICZ3aW5kb3dTY3JpcHRPYmplY3QpOwpAQCAtMzU3LDcgKzM3MCw0MCBAQCB2b2lkIGhhbmRsZUNh
bGxiYWNrKFBsdWdpbk9iamVjdCogb2JqZWN0CiAKICAgICBJTlQzMl9UT19OUFZBUklBTlQocmVh
c29uLCBhcmdzWzBdKTsKIAorICAgIGNoYXIgKnN0ckhkciA9IE5VTEw7CisgICAgaWYgKG9iamVj
dC0+Zmlyc3RVcmwgJiYgb2JqZWN0LT5maXJzdEhlYWRlcnMgJiYgb2JqZWN0LT5sYXN0VXJsICYm
IG9iamVjdC0+bGFzdEhlYWRlcnMpIHsKKyAgICAgICAgLy8gRm9ybWF0IGV4cGVjdGVkIGJ5IEph
dmFTY3JpcHQgdmFsaWRhdG9yOiBmb3VyIGZpZWxkcyBzZXBhcmF0ZWQgYnkgXG5cbjoKKyAgICAg
ICAgLy8gRmlyc3QgVVJMOyBmaXJzdCBoZWFkZXIgYmxvY2s7IGxhc3QgVVJMOyBsYXN0IGhlYWRl
ciBibG9jay4KKyAgICAgICAgLy8gTm90ZSB0aGF0IGhlYWRlciBibG9ja3MgYWxyZWFkeSBlbmQg
d2l0aCBcbiBkdWUgdG8gaG93IE5QU3RyZWFtOjpoZWFkZXJzIHdvcmtzLgorICAgICAgICBpbnQg
bGVuID0gc3RybGVuKG9iamVjdC0+Zmlyc3RVcmwpICsgMgorICAgICAgICAgICAgKyBzdHJsZW4o
b2JqZWN0LT5maXJzdEhlYWRlcnMpICsgMQorICAgICAgICAgICAgKyBzdHJsZW4ob2JqZWN0LT5s
YXN0VXJsKSArIDIKKyAgICAgICAgICAgICsgc3RybGVuKG9iamVjdC0+bGFzdEhlYWRlcnMpICsg
MTsKKyAgICAgICAgc3RySGRyID0gbWFsbG9jKGxlbiArIDEpOworICAgICAgICBzbnByaW50Zihz
dHJIZHIsIGxlbiArIDEsICIlc1xuXG4lc1xuJXNcblxuJXNcbiIsCisgICAgICAgICAgICAgICAg
IG9iamVjdC0+Zmlyc3RVcmwsIG9iamVjdC0+Zmlyc3RIZWFkZXJzLCBvYmplY3QtPmxhc3RVcmws
IG9iamVjdC0+bGFzdEhlYWRlcnMpOworICAgICAgICBTVFJJTkdOX1RPX05QVkFSSUFOVChzdHJI
ZHIsIGxlbiwgYXJnc1sxXSk7CisgICAgfSBlbHNlCisgICAgICAgIE5VTExfVE9fTlBWQVJJQU5U
KGFyZ3NbMV0pOworCiAgICAgTlBWYXJpYW50IGJyb3dzZXJSZXN1bHQ7Ci0gICAgYnJvd3Nlci0+
aW52b2tlKG9iamVjdC0+bnBwLCB3aW5kb3dTY3JpcHRPYmplY3QsIGNhbGxiYWNrSWRlbnRpZmll
ciwgYXJncywgMSwgJmJyb3dzZXJSZXN1bHQpOworICAgIGJyb3dzZXItPmludm9rZShvYmplY3Qt
Pm5wcCwgd2luZG93U2NyaXB0T2JqZWN0LCBjYWxsYmFja0lkZW50aWZpZXIsIGFyZ3MsIDIsICZi
cm93c2VyUmVzdWx0KTsKICAgICBicm93c2VyLT5yZWxlYXNldmFyaWFudHZhbHVlKCZicm93c2Vy
UmVzdWx0KTsKKworICAgIGZyZWUoc3RySGRyKTsKK30KKwordm9pZCBub3RpZnlTdHJlYW0oUGx1
Z2luT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqaGVhZGVycykK
K3sKKyAgICBpZiAob2JqZWN0LT5maXJzdFVybCA9PSBOVUxMKSB7CisgICAgICAgIGlmICh1cmwp
CisgICAgICAgICAgICBvYmplY3QtPmZpcnN0VXJsID0gc3RyZHVwKHVybCk7CisgICAgICAgIGlm
IChoZWFkZXJzKQorICAgICAgICAgICAgb2JqZWN0LT5maXJzdEhlYWRlcnMgPSBzdHJkdXAoaGVh
ZGVycyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZnJlZShvYmplY3QtPmxhc3RVcmwpOworICAg
ICAgICBmcmVlKG9iamVjdC0+bGFzdEhlYWRlcnMpOworICAgICAgICBvYmplY3QtPmxhc3RVcmwg
PSAodXJsID8gc3RyZHVwKHVybCkgOiBOVUxMKTsKKyAgICAgICAgb2JqZWN0LT5sYXN0SGVhZGVy
cyA9IChoZWFkZXJzID8gc3RyZHVwKGhlYWRlcnMpIDogTlVMTCk7CisgICAgfQogfQpJbmRleDog
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovUGx1
Z2luT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVz
dE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovUGx1Z2luT2JqZWN0LmgJKHJldmlzaW9uIDIwODQ5KQor
KysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1YnByb2ov
UGx1Z2luT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDEyIEBAIHR5cGVkZWYg
c3RydWN0IHsKICAgICBOUE9iamVjdCogdGVzdE9iamVjdDsKICAgICBOUFN0cmVhbSogc3RyZWFt
OwogICAgIGNoYXIqIG9uU3RyZWFtTG9hZDsKKyAgICBjaGFyKiBmaXJzdFVybDsKKyAgICBjaGFy
KiBmaXJzdEhlYWRlcnM7CisgICAgY2hhciogbGFzdFVybDsKKyAgICBjaGFyKiBsYXN0SGVhZGVy
czsKIH0gUGx1Z2luT2JqZWN0OwogCiBleHRlcm4gTlBDbGFzcyAqZ2V0UGx1Z2luQ2xhc3Modm9p
ZCk7CiBleHRlcm4gdm9pZCBoYW5kbGVDYWxsYmFjayhQbHVnaW5PYmplY3QqIG9iamVjdCwgY29u
c3QgY2hhciAqdXJsLCBOUFJlYXNvbiByZWFzb24sIHZvaWQgKm5vdGlmeURhdGEpOworZXh0ZXJu
IHZvaWQgbm90aWZ5U3RyZWFtKFBsdWdpbk9iamVjdCogb2JqZWN0LCBjb25zdCBjaGFyICp1cmws
IGNvbnN0IGNoYXIgKmhlYWRlcnMpOwpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
VGVzdE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovbWFpbi5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL21haW4uYwkocmV2
aXNpb24gMjA4NDkpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQ
bHVnSW4uc3VicHJvai9tYWluLmMJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsOSBAQCBO
UEVycm9yIE5QUF9OZXdTdHJlYW0oTlBQIGluc3RhbmNlLCBOUE1JCiAgICAgb2JqLT5zdHJlYW0g
PSBzdHJlYW07CiAgICAgKnN0eXBlID0gTlBfQVNGSUxFT05MWTsKIAorICAgIGlmIChvYmogJiYg
KGJyb3dzZXItPnZlcnNpb24gPj0gTlBWRVJTX0hBU19SRVNQT05TRV9IRUFERVJTKSkKKyAgICAg
ICAgbm90aWZ5U3RyZWFtKG9iaiwgc3RyZWFtLT51cmwsIHN0cmVhbS0+aGVhZGVycyk7CisKICAg
ICBpZiAob2JqLT5vblN0cmVhbUxvYWQpIHsKICAgICAgICAgTlBPYmplY3QgKndpbmRvd1Njcmlw
dE9iamVjdDsKICAgICAgICAgYnJvd3Nlci0+Z2V0dmFsdWUob2JqLT5ucHAsIE5QTlZXaW5kb3dO
UE9iamVjdCwgJndpbmRvd1NjcmlwdE9iamVjdCk7Cg==
</data>
<flag name="review"
          id="5659"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>