<?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>10957</bug_id>
          
          <creation_ts>2006-09-20 17:25:34 -0700</creation_ts>
          <short_desc>HttpOnly Cookie Option</short_desc>
          <delta_ts>2011-04-27 10:27:57 -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>WebKit Misc.</component>
          <version>420+</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>http://msdn.microsoft.com/workshop/author/dhtml/httponly_cookies.asp</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="Robert Sesek">rsesek</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>collinj</cc>
    
    <cc>darin</cc>
    
    <cc>jim</cc>
    
    <cc>priyajeet.hora</cc>
    
    <cc>sam</cc>
          

      

      

      <flag name="CloneForRadar"
          id="7715"
          type_id="2"
          status="+"
          setter="ddkilzer"
    />

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>56068</commentid>
    <comment_count>0</comment_count>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2006-09-20 17:25:34 -0700</bug_when>
    <thetext>In the web development arena, HttpOnly cookies have become quite the buzz. It basically disallows JavaScript access to a cookie when it is sent with the HttpOnly flag. Currently only IE supports it, but Firefox is looking into it. I think it&apos;d be very helpful to have (especially since PHP 5.2 will now support it--meaning lots of developers will use it). I&apos;ve linked to Microsoft&apos;s spec on the flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56077</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-09-20 21:51:19 -0700</bug_when>
    <thetext>Mozilla bug: &lt;https://bugzilla.mozilla.org/show_bug.cgi?id=178993&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>63930</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-12-11 08:28:42 -0800</bug_when>
    <thetext>This is now implemented in Firefox 2 and Opera 9.5.

This looks like a pretty important feature to me, but we need support from underlying system frameworks to implement it. A request to add such support is tracked by &lt;rdar://problem/4154226&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>63931</commentid>
    <comment_count>3</comment_count>
      <attachid>17845</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-12-11 08:30:33 -0800</bug_when>
    <thetext>Created attachment 17845
test case (for http/tests/security)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64016</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-12-12 06:19:28 -0800</bug_when>
    <thetext>&lt;rdar://problem/5642992&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75265</commentid>
    <comment_count>5</comment_count>
    <who name="Jim Manico">jim</who>
    <bug_when>2008-03-25 23:28:33 -0700</bug_when>
    <thetext>Safari is the last browser to lack HttpOnly support.  I for one think it&apos;s a critical need to bring Safari&apos;s browser security in line with the rest of the industry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75550</commentid>
    <comment_count>6</comment_count>
    <who name="Jim Manico">jim</who>
    <bug_when>2008-03-27 18:47:04 -0700</bug_when>
    <thetext>(from Robert)

The problem isn&apos;t entirely with WebKit itself, but with the underlying implementation of HTTP. Safari uses CFNetwork on the mac to parse HTTP headers into objects. Unfortunately, this code isn&apos;t public, and it&apos;s this code that needs to be changed in order for HTTPOnly to be implemented. While preventing DOM/JavaScript access to cookies needs to be done in the WebKit source, until the underlying network implementation is updated to parse the HTTPOnly flag, there&apos;s no way this is possible.

So in short, Apple is blocking this bug from being fixed. Once they update CFNetwork, progress on this patch can be made. Until then, no dice. I recommend you file a bug in RadarWeb if you&apos;re interested in getting HTTPOnly/CFNetwork done.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75591</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-03-27 23:52:03 -0700</bug_when>
    <thetext>As mentioned above, there is already a Radar bug filed about this (which was closed as a duplicate of &lt;rdar://problem/4154226&gt;). As always, you are welcome to file another bug, citing your specific use case; please include this original bug number if you decide to file it, to ensure that it is handled right when screening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75596</commentid>
    <comment_count>8</comment_count>
    <who name="Jim Manico">jim</who>
    <bug_when>2008-03-28 01:01:20 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; As mentioned above, there is already a Radar bug filed about this (which was
&gt; closed as a duplicate of &lt;rdar://problem/4154226&gt;). As always, you are welcome
&gt; to file another bug, citing your specific use case; please include this
&gt; original bug number if you decide to file it, to ensure that it is handled
&gt; right when screening.
&gt; 

Alex, my apologies. I&apos;m not certain how to access rdar://problem/5642992 - is there an Internet facing URL for this problem, or is rdar for Apple employees only?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75598</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-03-28 01:36:57 -0700</bug_when>
    <thetext>The latter is correct - it&apos;s only accessible to Apple folks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>75649</commentid>
    <comment_count>10</comment_count>
    <who name="Jim Manico">jim</who>
    <bug_when>2008-03-28 10:11:50 -0700</bug_when>
    <thetext>So, a closed source proprietary library is blocking an open source project from adding a key security feature that the rest of the browser industry supports? I smell a rat. It might be at rdar but it sure sounds &quot;off the radar&quot; to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>76059</commentid>
    <comment_count>11</comment_count>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2008-04-01 05:55:32 -0700</bug_when>
    <thetext>Apple isn&apos;t the only company we&apos;re waiting on to get HttpOnly support. Qt/Trolltech is also lacking HttpOnly support in QNetworkCookie. I filed bug #205188 with them to get QNetworkCookie::isHttpOnly() added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>76121</commentid>
    <comment_count>12</comment_count>
    <who name="Jim Manico">jim</who>
    <bug_when>2008-04-01 22:58:56 -0700</bug_when>
    <thetext>Robert, thank you very kindly for taking to time to submit a bug to Qt/Trolltech.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>76491</commentid>
    <comment_count>13</comment_count>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2008-04-07 06:24:16 -0700</bug_when>
    <thetext>Here&apos;s the public issue for Qt: http://trolltech.com/developer/task-tracker/index_html?id=206125&amp;method=entry</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81229</commentid>
    <comment_count>14</comment_count>
    <who name="Jim Manico">jim</who>
    <bug_when>2008-05-22 12:33:59 -0700</bug_when>
    <thetext>The Java EE Servlet 3.0 spec now includes support for the HttpOnly cookie. This is just more evidence that HttpOnly is becoming a widespread non-MS standard and is worthy of Safari support. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81230</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-22 12:35:37 -0700</bug_when>
    <thetext>It should definitely be supported by Safari!

I&apos;m not sure why having a WebKit bug report open for this is helpful, though. It&apos;s not something handled by WebKit, and adding this to the CFNetwork library used on Mac OS X won&apos;t require any WebKit code changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81232</commentid>
    <comment_count>16</comment_count>
    <who name="Jim Manico">jim</who>
    <bug_when>2008-05-22 12:40:57 -0700</bug_when>
    <thetext>Thank you Darin! I&apos;m grateful that someone at Apple agrees that we need HttpOnly support in Safari. Safari is the last holdout - Opera, IE and FireFox all support HttpOnly!

Will the trolltech issue posted in comment #13 cover this issue? Of is there another place we can post a bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81233</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-22 12:43:38 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Thank you Darin! I&apos;m grateful that someone at Apple agrees that we need
&gt; HttpOnly support in Safari. Safari is the last holdout - Opera, IE and FireFox
&gt; all support HttpOnly!
&gt; 
&gt; Will the trolltech issue posted in comment #13 cover this issue? Of is there
&gt; another place we can post a bug?

It&apos;s actually comment #7 that covers the Safari issue. What Alexey said is exactly right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81239</commentid>
    <comment_count>18</comment_count>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2008-05-22 13:13:56 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; I&apos;m not sure why having a WebKit bug report open for this is helpful, though.
&gt; It&apos;s not something handled by WebKit, and adding this to the CFNetwork library
&gt; used on Mac OS X won&apos;t require any WebKit code changes.

I think a code change to the WebCore/platform still needs to be made. Looking at the various CookieJar classes, it looks like it will be up to WebCore to disregard HttpOnly cookies -- they will still be passed to us from the underlying network layer. So I do think this bug needs to be open; however, maybe the component should be changed to WebCore?

(In reply to comment #16)
&gt; Will the trolltech issue posted in comment #13 cover this issue? Of is there
&gt; another place we can post a bug?

Trolltech fixed this for the upcoming v4.5 of Qt. I&apos;m currently working on compiling Qt and testing a patch I have made for the Qt-backed WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81240</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-22 13:20:33 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; I think a code change to the WebCore/platform still needs to be made. Looking
&gt; at the various CookieJar classes, it looks like it will be up to WebCore to
&gt; disregard HttpOnly cookies -- they will still be passed to us from the
&gt; underlying network layer.

I see. You&apos;re right -- it might turn out that way. Another design would be to have HttpOnly cookies entirely invisible to the old API and add new API that allows clients to see them. I guess we won&apos;t know what&apos;s required until this gets implemented by the networking layer.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81248</commentid>
    <comment_count>20</comment_count>
    <who name="Robert Sesek">rsesek</who>
    <bug_when>2008-05-22 13:51:33 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; I think a code change to the WebCore/platform still needs to be made. Looking
&gt; &gt; at the various CookieJar classes, it looks like it will be up to WebCore to
&gt; &gt; disregard HttpOnly cookies -- they will still be passed to us from the
&gt; &gt; underlying network layer.
&gt; 
&gt; I see. You&apos;re right -- it might turn out that way. Another design would be to
&gt; have HttpOnly cookies entirely invisible to the old API and add new API that
&gt; allows clients to see them. I guess we won&apos;t know what&apos;s required until this
&gt; gets implemented by the networking layer.
&gt; 

Looking at Qt&apos;s implementation in the 4.5 snapshot, you get all the cookies and then have to call isHttpOnly() on QNetworkCookie to figure out whether or not you keep it in the CookieJar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85435</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-07-07 22:15:57 -0700</bug_when>
    <thetext>Something else that will need to be done at WebCore level is filtering out HttpOnly cookies from XMLHttpRequest getResponseHeader results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85436</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-07-07 22:17:02 -0700</bug_when>
    <thetext>See also: https://bugzilla.mozilla.org/show_bug.cgi?id=380418</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85478</commentid>
    <comment_count>23</comment_count>
    <who name="Jim Manico">jim</who>
    <bug_when>2008-07-08 12:38:15 -0700</bug_when>
    <thetext>http://www.owasp.org/index.php/HTTPOnly is also a great reference. Complete implementation includes read and write prevention though document.cookie, as well prevention of reading or writing the session cookie via a XMLHTTPRequest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85479</commentid>
    <comment_count>24</comment_count>
    <who name="Jim Manico">jim</who>
    <bug_when>2008-07-08 12:39:19 -0700</bug_when>
    <thetext>Let me correct that:

http://www.owasp.org/index.php/HTTPOnly is also a great reference. Complete
implementation includes read and write prevention of HttpOnly cookies though document.cookie, as well as prevention of reading or writing HttpOnly cookies via a XMLHTTPRequest.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99063</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-17 09:38:30 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; http://www.owasp.org/index.php/HTTPOnly is also a great reference. Complete
&gt; implementation includes read and write prevention of HttpOnly cookies though
&gt; document.cookie, as well as prevention of reading or writing HttpOnly cookies
&gt; via a XMLHTTPRequest.

That page doesn&apos;t mention prevention of writing HttpOnly cookies vis XMLHttpRequest. Should that really be prevented? Does any browser currently do that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99071</commentid>
    <comment_count>26</comment_count>
      <attachid>25220</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-17 10:19:33 -0800</bug_when>
    <thetext>Created attachment 25220
patch; someone needs to help me make more regression tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99072</commentid>
    <comment_count>27</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-17 10:21:22 -0800</bug_when>
    <thetext>Loose ends that need to be resolved:

    1) include test cases in the patch
    2) figure out how to compile the CFNetwork version
    3) [optional] add implementations for other platforms that have HTTP-only support in the networking layers (e.g. Qt)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99082</commentid>
    <comment_count>28</comment_count>
      <attachid>25222</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-17 12:25:17 -0800</bug_when>
    <thetext>Created attachment 25222
patch

Windows side is not compiled or tested yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99125</commentid>
    <comment_count>29</comment_count>
    <who name="Jim Manico">jim</who>
    <bug_when>2008-11-17 18:03:12 -0800</bug_when>
    <thetext>Sorry, my mistake.

I was referring to preventing XMLHTTPRequest access to set-cookie and set-cookie2 response headers - for HTTPOnly cookies.

There is no need to prevent write prevention via XMLHTTPRequest response headers. (no such thing) </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99126</commentid>
    <comment_count>30</comment_count>
    <who name="Jim Manico">jim</who>
    <bug_when>2008-11-17 18:08:12 -0800</bug_when>
    <thetext>Actually, the HttpOnly RFC working group says:

When the server sends a Set-Cookie or Set-Cookie2 header with the HTTPOnly flag set, the client should:

(1) Prevent client-side scripts from reading Cookie or Cookie2 values
(2) Prevent client-side scripts from writing Cookie or Cookie2 values
(3) Prevent client-side scripts from reading Set-Cookie or Set-Cookie2 response headers (via XHR)
(4) Prevent client-side scripts from writing Cookie or Cookie2 request headers (via XHR)

Let me get more info and post back asap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99127</commentid>
    <comment_count>31</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-11-17 18:47:23 -0800</bug_when>
    <thetext>&gt; Actually, the HttpOnly RFC working group says:

It would be useful to test the behavior of Firefox and Internet Explorer to make sure we have identical semantics.

In some sense, it is impossible to prevent writes because the script could always exhaust the browser&apos;s cookie store and then add a new non-HTTPOnly versions of the cookie.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99130</commentid>
    <comment_count>32</comment_count>
    <who name="Jim Manico">jim</who>
    <bug_when>2008-11-17 20:03:38 -0800</bug_when>
    <thetext>&gt; In some sense, it is impossible to prevent writes because the script could
&gt; always exhaust the browser&apos;s cookie store and then add a new non-HTTPOnly
&gt; versions of the cookie.

(From Bill Cory)

That is an interesting problem.  They&apos;re referring to the hard limit that governs the number of cookies a site can have stored on the browser -- there&apos;s a limit to prevent a malicious site from filling up your hard drive with numerous cookies.  So for most browsers, the limit is 20 cookies max, and when a browser receives cookie #21, it will discard the least used (or oldest?).  This talks a bit about it:

	http://www.cookiecentral.com/faq/#2.5

So if an attacker sets 20 cookies, they can force the HTTPOnly-protected cookie out of the cookie store, then set a non-HTTPOnly cookie.

It would be tempting to change the browser behavior to NOT bump out existing cookies when the cookie store is full, but that would then allow an attacker to populate the store with bogus cookies, and wouldn&apos;t allow the legitimate website to set any additional cookies (a cookie DoS attack of sorts).  Of course, the server could just iterate through the cookies and cause the bogus ones to expire, but it&apos;s not ideal.

One solution might be that HTTPOnly cookies can&apos;t be bumped out of the cookie store.  Another solution might be that the Cookie header sent to the server somehow identifies the cookies that are HTTPOnly, which would allow the server to detect tampering (or two headers, one for regular cookies and one for HTTPOnly cookies).

Or other ideas?

The spec should probably state that the HTTPOnly flag can only be set by the server via a Set-Cookie or Set-Cookie2 header -- scripts are not allowed to set the flag or modify the incoming Set-Cookie/2 header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99135</commentid>
    <comment_count>33</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-11-17 21:47:26 -0800</bug_when>
    <thetext>&gt; (From Bill Cory)

I really wouldn&apos;t be that concerned about it.  Secure cookies have all the same problems and IMHO are more critical to secure.  Playing with the eviction strategy is very fragile and hard to get right.  Altering the Cookie header is unlikely to succeed (there have already been several failed attempts for Secure cookies).  In any case, it&apos;s not clear to me what attack you&apos;re trying to prevent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99153</commentid>
    <comment_count>34</comment_count>
      <attachid>25222</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-18 06:04:46 -0800</bug_when>
    <thetext>Comment on attachment 25222
patch

&gt; -    // &lt;rdar://problem/5632883&gt; On 10.5, NSHTTPCookieStorage would happily store an empty cookie, which would be sent as &quot;Cookie: =&quot;.
&gt; +    // &lt;rdar://problem/5632883&gt; On 10.5, NSHTTPCookieStorage would happily store an empty cookie,

You removed &quot;happily&quot; elsewhere, but not here :-)

&gt; Index: WebCore/platform/network/soup/CookieJarSoup.h
&gt; +#include &lt;wtf/Platform.h&gt;

Why is this include needed? I think that we rely on cpp files to include config.h, which includes Platform.h.

&gt; +    return reinterpret_cast&lt;IsHTTPOnlyFunction&gt;(GetProcAddress(GetModuleHandleA(&quot;CFNetwork&quot;), &quot;CFHTTPCookieIsHTTPOnly&quot;));

Just to confirm: weak linking doesn&apos;t work with MSVC and/or CFNetwork.dll, correct?

&gt; +    frame-&gt;domWindow()-&gt;console()-&gt;addMessage(JSMessageSource, ErrorMessageLevel, message, 1, String());

I really wish we could get rid of these source-less error messages everywhere, but this patch is obviously not when it should be done.

&gt; +    if (isSetCookieHeader(name) &amp;&amp; !document()-&gt;securityOrigin()-&gt;canLoadLocalResources()) {
&gt; +        reportUnsafeUsage(document(), &quot;Refused to get unsafe header \&quot;&quot; + name + &quot;\&quot;&quot;);

I think this could have a comment explaining why we are doing this (which is that we need to filter out HTTPOnly cookies, but that&apos;s hard, and Firefox trunk also doesn&apos;t try to). Similarly, it may be better to explicitly test for HTTPOnly cookies being hidden from XHR, or at least to explain that some failures of the test are not catastrophic.

r=me, assuming this builds and works on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99164</commentid>
    <comment_count>35</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-18 09:23:31 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; You removed &quot;happily&quot; elsewhere, but not here :-)

Will do.

&gt; &gt; Index: WebCore/platform/network/soup/CookieJarSoup.h
&gt; &gt; +#include &lt;wtf/Platform.h&gt;
&gt; 
&gt; Why is this include needed? I think that we rely on cpp files to include
&gt; config.h, which includes Platform.h.

I guess it&apos;s not.

&gt; &gt; +    return reinterpret_cast&lt;IsHTTPOnlyFunction&gt;(GetProcAddress(GetModuleHandleA(&quot;CFNetwork&quot;), &quot;CFHTTPCookieIsHTTPOnly&quot;));
&gt; 
&gt; Just to confirm: weak linking doesn&apos;t work with MSVC and/or CFNetwork.dll,
&gt; correct?

Weak linking might work, but it&apos;s more complicated to get that right with project files changes and such, so I&apos;d prefer to do it this way.

&gt; &gt; +    frame-&gt;domWindow()-&gt;console()-&gt;addMessage(JSMessageSource, ErrorMessageLevel, message, 1, String());
&gt; 
&gt; I really wish we could get rid of these source-less error messages everywhere,
&gt; but this patch is obviously not when it should be done.

I&apos;d love to hear more about how to fix that.

&gt; &gt; +    if (isSetCookieHeader(name) &amp;&amp; !document()-&gt;securityOrigin()-&gt;canLoadLocalResources()) {
&gt; &gt; +        reportUnsafeUsage(document(), &quot;Refused to get unsafe header \&quot;&quot; + name + &quot;\&quot;&quot;);
&gt; 
&gt; I think this could have a comment explaining why we are doing this (which is
&gt; that we need to filter out HTTPOnly cookies, but that&apos;s hard, and Firefox trunk
&gt; also doesn&apos;t try to). Similarly, it may be better to explicitly test for
&gt; HTTPOnly cookies being hidden from XHR, or at least to explain that some
&gt; failures of the test are not catastrophic.

I believe that hiding the Set-Cookie header field entirely is a design decision and not just a compromise. I don&apos;t think we&apos;d want to undo this later even if someone donated code to filter out the HTTP-only cookies. However, I&apos;m not an expert in this area, so perhaps my belief is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99165</commentid>
    <comment_count>36</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-18 09:27:57 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (1) Prevent client-side scripts from reading Cookie or Cookie2 values
&gt; (2) Prevent client-side scripts from writing Cookie or Cookie2 values

Roughly speaking, I believe these are prevented by the changes my patch makes to the CookieJar implementations for the Foundation and CFNetwork networking layers. Other ports will have to do similar changes.

&gt; (3) Prevent client-side scripts from reading Set-Cookie or Set-Cookie2 response
&gt; headers (via XHR)

This is prevented by code added to XMLHttpRequest in my patch.

&gt; (4) Prevent client-side scripts from writing Cookie or Cookie2 request headers
&gt; (via XHR)

This was already impossible with TOT WebKit because those header field names are not on the white list in isSafeRequestHeader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99167</commentid>
    <comment_count>37</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-18 09:32:43 -0800</bug_when>
    <thetext>&gt; I believe that hiding the Set-Cookie header field entirely is a design decision
&gt; and not just a compromise. I don&apos;t think we&apos;d want to undo this later even if
&gt; someone donated code to filter out the HTTP-only cookies.

What worries me is that nothing (apart from svn log) will speak about the rationale for this behavior - neither code comments, not tests, really. I do not have an opinion on whether this is a final solution (more likely, it is).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99169</commentid>
    <comment_count>38</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-18 09:35:02 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; What worries me is that nothing (apart from svn log) will speak about the
&gt; rationale for this behavior - neither code comments, not tests, really. I do
&gt; not have an opinion on whether this is a final solution (more likely, it is).

Oh, sorry, I wasn&apos;t clear. I do intend to add a comment based on your remarks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99187</commentid>
    <comment_count>39</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-18 10:49:55 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/38566

We can use new separate bugs to track any problems with the implementation. Testing the Mac port and CFNetwork-based Windows port implementation will be limited to people with the new CFNetwork version on their computer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99273</commentid>
    <comment_count>40</comment_count>
    <who name="Jim Manico">jim</who>
    <bug_when>2008-11-18 21:15:10 -0800</bug_when>
    <thetext>&gt; In any case, it&apos;s not clear to me what attack you&apos;re trying to
&gt; prevent.

(From Bil Cory)

Cookie eviction allows an attacker to remove legitimate cookies, it also allows an attacker to replace legitimate cookies with their own -- most useful for session fixation attacks.

If only a server can create HTTPOnly cookies, and HTTPOnly cookies can never be evicted, then it would prevent a cookie eviction attack.  The cookie will still expire at some point, or the server can update the cookie to remove the HTTPOnly flag, and/or set the cookie to immediately expire, so control over the cookie is kept with the server.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103112</commentid>
    <comment_count>41</comment_count>
    <who name="Jim Manico">jim</who>
    <bug_when>2008-12-21 05:14:46 -0800</bug_when>
    <thetext>Can you please make sure your patch includes protection from both Set-Cookie and Set-Cookie2 per the suggestion of the HTTPOnly working group document, entry A-2? http://docs.google.com/View?docid=dxxqgkd_0cvcqhsdw

-- (WebCore::XMLHttpRequest::getAllResponseHeaders): Hide Set-Cookie headers from
 28 clients that don&apos;t have local-resource privileges.
++ (WebCore::XMLHttpRequest::getAllResponseHeaders): Hide Set-Cookie and Set-Cookie2 headers, in a case insensitive way, from 28 clients that don&apos;t have local-resource privileges.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103121</commentid>
    <comment_count>42</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-21 10:01:54 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; Can you please make sure your patch includes protection from both Set-Cookie
&gt; and Set-Cookie2 per the suggestion of the HTTPOnly working group document,
&gt; entry A-2?

Jim, I&apos;m not sure what &quot;make sure&quot; means in your request. The patch does include what you&apos;re asking for. The patch is &lt;http://trac.webkit.org/changeset/38566&gt;. A relevant function is:

    static bool isSetCookieHeader(const String&amp; name)
    {
        return equalIgnoringCase(name, &quot;set-cookie&quot;) || equalIgnoringCase(name, &quot;set-cookie2&quot;); 
    } 

Is there something specific you&apos;re worried about?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>103158</commentid>
    <comment_count>43</comment_count>
    <who name="Jim Manico">jim</who>
    <bug_when>2008-12-21 23:12:44 -0800</bug_when>
    <thetext>&gt; Jim, I&apos;m not sure what &quot;make sure&quot; means in your request.

The code you submitted covers that request. I was looking at what I think are just the function comments, which did not seem to address set-cookie2 

(WebCore::XMLHttpRequest::getAllResponseHeaders): Hide Set-Cookie headers
from 28 clients that don&apos;t have local-resource privileges.

Sorry for the hassle.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118929</commentid>
    <comment_count>44</comment_count>
    <who name="Michael Gilbert">michael.s.gilbert</who>
    <bug_when>2009-04-26 15:24:18 -0700</bug_when>
    <thetext>Hello, we are looking at whether we need to adopt these patches in debian stable, which includes webkit 1.0.1 dated 2008-06-15; well before revision 38566.  Looking at the code, it looks like these fixes primarily apply to the windows- and mac-specific cookie handling with some clean-up of the libsoup code (but nothing soup-related specifically fixed).

Note that the version of webkit in stable does not make use of libsoup, so does that mean that it is falling back on the windows-specific cookie handling?  Note also that this version appears to pass the regression test attached.

Also, could libsoup itself be vulnerable to these problems, and if so have there any patches been issued?

Please let me know if you think that we need to adopt these patches.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>17845</attachid>
            <date>2007-12-11 08:30:33 -0800</date>
            <delta_ts>2007-12-11 08:30:33 -0800</delta_ts>
            <desc>test case (for http/tests/security)</desc>
            <filename>HttpOnly.pl</filename>
            <type>application/octet-stream</type>
            <size>423</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9wZXJsCiMgCnByaW50ICJDb250ZW50LXR5cGU6IHRleHQvaHRtbFxyXG4iOwpw
cmludCAiU2V0LUNvb2tpZTogc2hvdWxkLXNlZT1ubzsgSHR0cE9ubHlcclxuIjsKcHJpbnQgIlxy
XG4iOwoKcHJpbnQgPDwgIkVPRiI7CjxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTU3Ij5idWcgMTA5NTc8L2E+OiBIdHRwT25seSBD
b29raWUgT3B0aW9uLjwvcD4KPHNjcmlwdD4KICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCiAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwogICAgZG9j
dW1lbnQud3JpdGUoL3Nob3VsZC1zZWUvLnRlc3QoZG9jdW1lbnQuY29va2llKSA/ICJGQUlMIiA6
ICJQQVNTIik7Cjwvc2NyaXB0PgpFT0YK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25220</attachid>
            <date>2008-11-17 10:19:33 -0800</date>
            <delta_ts>2008-11-17 12:25:17 -0800</delta_ts>
            <desc>patch; someone needs to help me make more regression tests</desc>
            <filename>HTTPOnlyCookiesPatch.txt</filename>
            <type>text/plain</type>
            <size>17165</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODUwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMDgtMTEtMTcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZmly
c3QgY3V0IGF0IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk1Nwor
ICAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NTE2NTk0PiBwbGVhc2UgYWRkIHN1cHBvcnQgZm9y
IEhUVFAtb25seSBjb29raWVzCisKKyAgICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERF
RCBPUiBDSEFOR0VECisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6aXNIVFRQT25seSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Zmls
dGVyQ29va2llcyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29va2llcyk6IFVzZSBmaWx0
ZXJDb29raWVzIHRvIHByZXZlbnQgZ2V0dGluZyBIVFRQLW9ubHkgY29va2llcy4KKyAgICAgICAg
KFdlYkNvcmU6OnNldENvb2tpZXMpOiBVc2UgZmlsdGVyQ29va2llcyB0byBwcmV2ZW50IHNldHRp
bmcgSFRUUC1vbmx5IGNvb2tpZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9D
b29raWVKYXJDRk5ldFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0hUVFBPbmx5KTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJDb29raWVzKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpzZXRDb29raWVzKTogVXNlIGZpbHRlckNvb2tpZXMgdG8gcHJldmVudCBnZXR0aW5n
IEhUVFAtb25seSBjb29raWVzLgorICAgICAgICAoV2ViQ29yZTo6Y29va2llcyk6IFVzZSBmaWx0
ZXJDb29raWVzIHRvIHByZXZlbnQgZ2V0dGluZyBIVFRQLW9ubHkgY29va2llcy4KKworICAgICAg
ICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1NldENvb2tp
ZUhlYWRlcik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmdldEFs
bFJlc3BvbnNlSGVhZGVycyk6IEhpZGUgU2V0LUNvb2tpZSBoZWFkZXJzIGZyb20KKyAgICAgICAg
Y2xpZW50cyB0aGF0IGRvbid0IGhhdmUgbG9jYWwtcmVzb3VyY2UgcHJpdmlsZWdlcy4KKyAgICAg
ICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpnZXRSZXNwb25zZUhlYWRlcik6IERpdHRvLgor
CisgICAgICAgIC0gY2xlYW4gc291cC1zcGVjaWZpYyBkZXRhaWxzIG91dCBvZiBzaGFyZWQgY29v
a2llIGphciBoZWFkZXIKKworICAgICAgICAqIHBsYXRmb3JtL0Nvb2tpZUphci5oOiBSZW1vdmVk
IHRoZSBzb3VwLXNwZWNpZmljIHBhcnRzIG9mIHRoaXMuCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwOiBDaGFuZ2VkIHRvIGluY2x1ZGUKKyAgICAgICAg
Q29va2llSmFyU291cC5oLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVK
YXJTb3VwLmg6IEFkZGVkLiBIYXMgdGhlIFNvdXAtc3BlY2lmaWVkCisgICAgICAgIHBhcnQgb2Yg
Q29va2llSmFyLmguCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFu
ZGxlU291cC5jcHA6IENoYW5nZWQgdG8gaW5jbHVkZQorICAgICAgICBDb29raWVKYXJTb3VwLmgu
CisKIDIwMDgtMTEtMTcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Db29r
aWVKYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCShyZXZp
c2lvbiAzODQ0NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMjIgKzI2LDE2IEBACiAjaWZuZGVmIENvb2tp
ZUphcl9oCiAjZGVmaW5lIENvb2tpZUphcl9oCiAKLSNpZiBVU0UoU09VUCkKLSNpbmNsdWRlIDxs
aWJzb3VwL3NvdXAuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFz
cyBLVVJMOwogICAgIGNsYXNzIFN0cmluZzsKICAgICBjbGFzcyBEb2N1bWVudDsKIAotICAgIFN0
cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYpOwotICAg
IHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmLCBjb25zdCBL
VVJMJiBwb2xpY3lCYXNlVVJMLCBjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIGNvb2tpZXNFbmFi
bGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCk7Ci0jaWYgVVNFKFNPVVApCi0gICAgU291cENv
b2tpZUphciogZ2V0Q29va2llSmFyKHZvaWQpOwotI2VuZGlmCisgICAgU3RyaW5nIGNvb2tpZXMo
Y29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7CisgICAgdm9pZCBzZXRDb29raWVzKERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHBvbGljeUJhc2VVUkwsIGNvbnN0IFN0cmlu
ZyYpOworICAgIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKTsKKwogfQogCiAj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0JKHJldmlzaW9uIDM4NDQ2KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw1MyArMzQsNzUgQEAKIHR5cGVkZWYgdW5zaWduZWQgTlNVSW50ZWdlcjsKICNlbmRpZgogCitA
aW50ZXJmYWNlIE5TSFRUUENvb2tpZSAoV2ViQ29yZUhUVFBPbmx5Q29va2llcykKKy0gKEJPT0wp
aXNIVFRQT25seTsKK0BlbmQKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdHJpbmcgY29va2ll
cyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitzdGF0aWMg
Ym9vbCBpc0hUVFBPbmx5KE5TSFRUUENvb2tpZSAqY29va2llKQogewotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0hUVFBPbmx5Q29va2ll
cyA9IFtOU0hUVFBDb29raWUgaW5zdGFuY2VzUmVzcG9uZFRvU2VsZWN0b3I6QHNlbGVjdG9yKGlz
SFRUUE9ubHkpXTsKKyAgICByZXR1cm4gc3VwcG9ydHNIVFRQT25seUNvb2tpZXMgJiYgW2Nvb2tp
ZSBpc0hUVFBPbmx5XTsKK30KIAotICAgIE5TVVJMICpjb29raWVVUkwgPSB1cmw7Ci0gICAgTlNB
cnJheSAqY29va2llc0ZvclVSTCA9IFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29v
a2llU3RvcmFnZV0gY29va2llc0ZvclVSTDpjb29raWVVUkxdOworc3RhdGljIFJldGFpblB0cjxO
U0FycmF5PiBmaWx0ZXJDb29raWVzKE5TQXJyYXkgKnVuZmlsdGVyZWRDb29raWVzKQoreworICAg
IE5TVUludGVnZXIgY291bnQgPSBbdW5maWx0ZXJlZENvb2tpZXMgY291bnRdOworICAgIFJldGFp
blB0cjxOU011dGFibGVBcnJheT4gZmlsdGVyZWRDb29raWVzKEFkb3B0TlMsIFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6Y291bnRdKTsKIAotICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBDb29raWVTdG9yYWdlIHdvdWxkIGhhcHBp
bHkgc3RvcmUgYW4gZW1wdHkgY29va2llLCB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6
ID0iLgotICAgIC8vIFdlIGhhdmUgYSB3b3JrYXJvdW5kIGluIHNldENvb2tpZXMoKSB0byBwcmV2
ZW50IHRoYXQsIGJ1dCB3ZSBhbHNvIG5lZWQgdG8gYXZvaWQgc2VuZGluZyBjb29raWVzIHRoYXQg
d2VyZSBwcmV2aW91c2x5IHN0b3JlZC4KLSAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2Nvb2tpZXNG
b3JVUkwgY291bnRdOwotICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gY29va2llc0ZvclVS
TEZpbHRlcmVkQ29weShBZG9wdE5TLCBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENh
cGFjaXR5OmNvdW50XSk7CiAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewotICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tpZSA9IChOU0hUVFBDb29raWUgKilbY29v
a2llc0ZvclVSTCBvYmplY3RBdEluZGV4OmldOwotICAgICAgICBpZiAoW1tjb29raWUgbmFtZV0g
bGVuZ3RoXSAhPSAwKQotICAgICAgICAgICAgW2Nvb2tpZXNGb3JVUkxGaWx0ZXJlZENvcHkuZ2V0
KCkgYWRkT2JqZWN0OmNvb2tpZV07CisgICAgICAgIE5TSFRUUENvb2tpZSAqY29va2llID0gKE5T
SFRUUENvb2tpZSAqKVt1bmZpbHRlcmVkQ29va2llcyBvYmplY3RBdEluZGV4OmldOworCisgICAg
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBDb29raWVTdG9y
YWdlIHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNvb2tpZSwKKyAgICAgICAgLy8gd2hpY2ggd291bGQg
YmUgc2VudCBhcyAiQ29va2llOiA9Ii4gV2UgaGF2ZSBhIHdvcmthcm91bmQgaW4gc2V0Q29va2ll
cygpIHRvIHByZXZlbnQKKyAgICAgICAgLy8gdGhhdCwgYnV0IHdlIGFsc28gbmVlZCB0byBhdm9p
ZCBzZW5kaW5nIGNvb2tpZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgc3RvcmVkLCBhbmQKKyAgICAg
ICAgLy8gdGhlcmUncyBubyBoYXJtIHRvIGRvaW5nIHRoaXMgY2hlY2sgYmVjYXVzZSBzdWNoIGEg
Y29va2llIGlzIG5ldmVyIHZhbGlkLgorICAgICAgICBpZiAoIVtbY29va2llIG5hbWVdIGxlbmd0
aF0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoaXNIVFRQT25seShjb29r
aWUpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgW2ZpbHRlcmVkQ29va2llcy5n
ZXQoKSBhZGRPYmplY3Q6Y29va2llXTsKICAgICB9CiAKLSAgICBOU0RpY3Rpb25hcnkgKmhlYWRl
ciA9IFtOU0hUVFBDb29raWUgcmVxdWVzdEhlYWRlckZpZWxkc1dpdGhDb29raWVzOmNvb2tpZXNG
b3JVUkxGaWx0ZXJlZENvcHkuZ2V0KCldOwotICAgIHJldHVybiBbaGVhZGVyIG9iamVjdEZvcktl
eTpAIkNvb2tpZSJdOworICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7Cit9CisKK1N0cmluZyBj
b29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5TVVJMICpjb29raWVVUkwgPSB1cmw7CisgICAg
TlNBcnJheSAqY29va2llcyA9IFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2ll
U3RvcmFnZV0gY29va2llc0ZvclVSTDpjb29raWVVUkxdOworICAgIHJldHVybiBbW05TSFRUUENv
b2tpZSByZXF1ZXN0SGVhZGVyRmllbGRzV2l0aENvb2tpZXM6ZmlsdGVyQ29va2llcyhjb29raWVz
KS5nZXQoKV0gb2JqZWN0Rm9yS2V5OkAiQ29va2llIl07CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBzZXRDb29raWVzKERv
Y3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgcG9saWN5
QmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCit2b2lkIHNldENvb2tpZXMoRG9jdW1l
bnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIHBvbGljeUJhc2VVUkwsIGNvbnN0IFN0
cmluZyYgY29va2llU3RyKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAot
ICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBPbiAxMC41LCBOU0hUVFBDb29raWVTdG9y
YWdlIHdvdWxkIGhhcHBpbHkgc3RvcmUgYW4gZW1wdHkgY29va2llLCB3aGljaCB3b3VsZCBiZSBz
ZW50IGFzICJDb29raWU6ID0iLgorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBPbiAx
MC41LCBOU0hUVFBDb29raWVTdG9yYWdlIHdvdWxkIGhhcHBpbHkgc3RvcmUgYW4gZW1wdHkgY29v
a2llLAorICAgIC8vIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuCiAgICAgaWYg
KGNvb2tpZVN0ci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5TVVJMICpjb29r
aWVVUkwgPSB1cmw7Ci0gICAgCiAgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY1MzE+LCA8cmRhcjovLzQ0MDkwMzQ+CiAgICAgLy8gY29va2llc1dpdGhSZXNw
b25zZUhlYWRlckZpZWxkcyBkb2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0aG91dCBhIHZhbHVlCiAg
ICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGNvb2tpZVN0ci5jb250YWlucygnPScpID8gY29va2ll
U3RyIDogY29va2llU3RyICsgIj0iOwotICAgIAorCisgICAgTlNVUkwgKmNvb2tpZVVSTCA9IHVy
bDsgICAgCiAgICAgTlNBcnJheSAqY29va2llcyA9IFtOU0hUVFBDb29raWUgY29va2llc1dpdGhS
ZXNwb25zZUhlYWRlckZpZWxkczpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OmNv
b2tpZVN0cmluZyBmb3JLZXk6QCJTZXQtQ29va2llIl0gZm9yVVJMOmNvb2tpZVVSTF07Ci0gICAg
W1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBzZXRDb29raWVz
OmNvb2tpZXMgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9jdW1lbnRVUkw6cG9saWN5QmFzZVVSTF07
CisgICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBzZXRD
b29raWVzOmZpbHRlckNvb2tpZXMoY29va2llcykuZ2V0KCkgZm9yVVJMOmNvb2tpZVVSTCBtYWlu
RG9jdW1lbnRVUkw6cG9saWN5QmFzZVVSTF07CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50
Ki8pCitib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KikKIHsKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL0Nvb2tpZUphclNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCShyZXZpc2lvbiAzODQ0NikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNywxMyArMTcsMTIgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
Q1N0cmluZy5oIgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIkNvb2tpZUphclNv
dXAuaCIKIAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCi0KICNpbmNsdWRl
IDxsaWJzb3VwL3NvdXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENv
b2tpZUphclNvdXBfaAorI2RlZmluZSBDb29raWVKYXJTb3VwX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgVVNFKFNPVVApCisKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIFNvdXBDb29raWVKYXIqIGdldENvb2tpZUphcigp
OworfQorCisjZW5kaWYKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46
ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCShyZXZpc2lvbiAzODQ0NikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5o
IgogCiAjaW5jbHVkZSAiQmFzZTY0LmgiCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVk
ZSAiQ29va2llSmFyU291cC5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay93aW4vQ29va2llSmFyQ0ZOZXRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyQ0ZOZXRXaW4uY3BwCShyZXZpc2lvbiAzODQ0
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyQ0ZOZXRXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNywyMCArMjcsNTEgQEAKICNpbmNsdWRlICJDb29raWVKYXIu
aCIKIAogI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2VXaW4uaCIKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlIDx3
aW5kb3dzLmg+Ci0jaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KICNp
bmNsdWRlIDxDRk5ldHdvcmsvQ0ZIVFRQQ29va2llc1ByaXYuaD4KKyNpbmNsdWRlIDxDb3JlRm91
bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgogI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFj
ZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHNfc2V0Q29va2llS2V5
Q0YgPSBDRlNUUigiU2V0LUNvb2tpZSIpOwogc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHNfY29v
a2llQ0YgPSBDRlNUUigiQ29va2llIik7CiAKK3N0YXRpYyBib29sIGlzSFRUUE9ubHkoQ0ZIVFRQ
Q29va2llUmVmIGNvb2tpZSkKK3sKKyNpZiAwIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGEgd2F5IHRv
IGNvbXBpbGUgdGhpcyB3aGVuIENGSFRUUENvb2tpZXNQcml2LmggaXMgdGhlIHZlcnNpb24gd2l0
aCBDRkhUVFBDb29raWVJc0hUVFBPbmx5IGluIGl0LgorICAgIHJldHVybiBDRkhUVFBDb29raWVJ
c0hUVFBPbmx5KGNvb2tpZSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQor
CitzdGF0aWMgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZpbHRlckNvb2tpZXMoQ0ZBcnJheVJlZiB1
bmZpbHRlcmVkQ29va2llcykKK3sKKyAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50
KHVuZmlsdGVyZWRDb29raWVzKTsKKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGZp
bHRlcmVkQ29va2llcyhBZG9wdENGLCBDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCBjb3VudCwgJmtD
RlR5cGVBcnJheUNhbGxCYWNrcykpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKKyAgICAgICAgQ0ZIVFRQQ29va2llUmVmIGNvb2tpZSA9IChDRkhUVFBDb29raWVS
ZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleCh1bmZpbHRlcmVkQ29va2llcywgaSk7CisKKyAgICAg
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugd291bGQg
c3RvcmUgYW4gZW1wdHkgY29va2llLAorICAgICAgICAvLyB3aGljaCB3b3VsZCBiZSBzZW50IGFz
ICJDb29raWU6ID0iLiBXZSBoYXZlIGEgd29ya2Fyb3VuZCBpbiBzZXRDb29raWVzKCkgdG8gcHJl
dmVudAorICAgICAgICAvLyB0aGF0LCBidXQgd2UgYWxzbyBuZWVkIHRvIGF2b2lkIHNlbmRpbmcg
Y29va2llcyB0aGF0IHdlcmUgcHJldmlvdXNseSBzdG9yZWQsIGFuZAorICAgICAgICAvLyB0aGVy
ZSdzIG5vIGhhcm0gdG8gZG9pbmcgdGhpcyBjaGVjayBiZWNhdXNlIHN1Y2ggYSBjb29raWUgaXMg
bmV2ZXIgdmFsaWQuCisgICAgICAgIGlmICghQ0ZTdHJpbmdHZXRMZW5ndGgoQ0ZIVFRQQ29va2ll
R2V0TmFtZShjb29raWUpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChp
c0hUVFBPbmx5KGNvb2tpZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBDRkFy
cmF5QXBwZW5kVmFsdWUoZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWUpOworICAgIH0KKyAg
ICByZXR1cm4gZmlsdGVyZWRDb29raWVzOworfQorCiB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQq
IC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBwb2xpY3lVUkwsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENG
SFRUUENvb2tpZVN0b3JhZ2UgaGFwcGlseSBzdG9yZXMgYW4gZW1wdHkgY29va2llLCB3aGljaCB3
b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgpAQCAtNTksMTMgKzkwLDE0IEBAIHZvaWQgc2V0
Q29va2llcyhEb2N1bWVudCogLypkb2N1bWVudCovLCAKICAgICBTdHJpbmcgY29va2llU3RyaW5n
ID0gdmFsdWUuY29udGFpbnMoJz0nKSA/IHZhbHVlIDogdmFsdWUgKyAiPSI7CiAKICAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IGNvb2tpZVN0cmluZ0NGKEFkb3B0Q0YsIGNvb2tpZVN0cmluZy5j
cmVhdGVDRlN0cmluZygpKTsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJG
aWVsZHNDRihBZG9wdENGLCBDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
KGNvbnN0IHZvaWQqKikmc19zZXRDb29raWVLZXlDRiwgCi0gICAgICAgIChjb25zdCB2b2lkKiop
JmNvb2tpZVN0cmluZ0NGLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gaGVhZGVyRmllbGRzQ0YoQWRvcHRDRiwgQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsCisgICAgICAgIChjb25zdCB2b2lkKiopJnNfc2V0Q29va2llS2V5Q0YsIChj
b25zdCB2b2lkKiopJmNvb2tpZVN0cmluZ0NGLCAxLAorICAgICAgICAma0NGVHlwZURpY3Rpb25h
cnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAKICAg
ICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGKEFkb3B0Q0YsIENGSFRUUENvb2tpZUNy
ZWF0ZVdpdGhSZXNwb25zZUhlYWRlckZpZWxkcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LAogICAgICAg
ICBoZWFkZXJGaWVsZHNDRi5nZXQoKSwgdXJsQ0YuZ2V0KCkpKTsKIAotICAgIENGSFRUUENvb2tp
ZVN0b3JhZ2VTZXRDb29raWVzKGNvb2tpZVN0b3JhZ2UsIGNvb2tpZXNDRi5nZXQoKSwgdXJsQ0Yu
Z2V0KCksIHBvbGljeVVSTENGLmdldCgpKTsKKyAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29v
a2llcyhjb29raWVTdG9yYWdlLCBmaWx0ZXJDb29raWVzKGNvb2tpZXNDRi5nZXQoKSkuZ2V0KCks
IHVybENGLmdldCgpLCBwb2xpY3lVUkxDRi5nZXQoKSk7CiB9CiAKIFN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKQEAgLTc0LDI0ICsx
MDYsMTEgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbgogICAgIGlm
ICghY29va2llU3RvcmFnZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgU3RyaW5n
IGNvb2tpZVN0cmluZzsKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFkb3B0Q0YsIHVy
bC5jcmVhdGVDRlVSTCgpKTsKIAotICAgIGJvb2wgc2VjdXJlID0gZXF1YWxJZ25vcmluZ0Nhc2Uo
dXJsLnByb3RvY29sKCksICJodHRwcyIpOwotCisgICAgYm9vbCBzZWN1cmUgPSB1cmwucHJvdG9j
b2xJcygiaHR0cHMiKTsKICAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gY29va2llc0NGKEFkb3B0
Q0YsIENGSFRUUENvb2tpZVN0b3JhZ2VDb3B5Q29va2llc0ZvclVSTChjb29raWVTdG9yYWdlLCB1
cmxDRi5nZXQoKSwgc2VjdXJlKSk7Ci0KLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4g
Q0ZIVFRQQ29va2llU3RvcmFnZSBoYXBwaWx5IHN0b3JlcyBhbiBlbXB0eSBjb29raWUsIHdoaWNo
IHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuCi0gICAgLy8gV2UgaGF2ZSBhIHdvcmthcm91
bmQgaW4gc2V0Q29va2llcygpIHRvIHByZXZlbnQgdGhhdCwgYnV0IHdlIGFsc28gbmVlZCB0byBh
dm9pZCBzZW5kaW5nIGNvb2tpZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgc3RvcmVkLgotICAgIENG
SW5kZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQoY29va2llc0NGLmdldCgpKTsKLSAgICBSZXRh
aW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGNvb2tpZXNGb3JVUkxGaWx0ZXJlZENvcHkoQWRvcHRD
RiwgQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgY291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3Mp
KTsKLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIENG
SFRUUENvb2tpZVJlZiBjb29raWUgPSAoQ0ZIVFRQQ29va2llUmVmKUNGQXJyYXlHZXRWYWx1ZUF0
SW5kZXgoY29va2llc0NGLmdldCgpLCBpKTsKLSAgICAgICAgaWYgKENGU3RyaW5nR2V0TGVuZ3Ro
KENGSFRUUENvb2tpZUdldE5hbWUoY29va2llKSkgIT0gMCkKLSAgICAgICAgICAgIENGQXJyYXlB
cHBlbmRWYWx1ZShjb29raWVzRm9yVVJMRmlsdGVyZWRDb3B5LmdldCgpLCBjb29raWUpOwotICAg
IH0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJDRihBZG9wdENGLCBDRkhU
VFBDb29raWVDb3B5UmVxdWVzdEhlYWRlckZpZWxkcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb29r
aWVzRm9yVVJMRmlsdGVyZWRDb3B5LmdldCgpKSk7Ci0KKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPiBoZWFkZXJDRihBZG9wdENGLCBDRkhUVFBDb29raWVDb3B5UmVxdWVzdEhlYWRlckZp
ZWxkcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmaWx0ZXJDb29raWVzKGNvb2tpZXNDRi5nZXQoKSku
Z2V0KCkpKTsKICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGhl
YWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIApJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNw
cAkocmV2aXNpb24gMzg0NDYpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2Niw2ICsxNjYsMTEgQEAgc3RhdGljIGJvb2wgaXNWYWxpZEhlYWRl
clZhbHVlKGNvbnN0IFN0cgogICAgIHJldHVybiAhbmFtZS5jb250YWlucygnXHInKSAmJiAhbmFt
ZS5jb250YWlucygnXG4nKTsKIH0KIAorc3RhdGljIGJvb2wgaXNTZXRDb29raWVIZWFkZXIoY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
c2V0LWNvb2tpZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJzZXQtY29va2llMiIpOwor
fQorCiBYTUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QoRG9jdW1lbnQqIGRvYykKICAgICA6
IEFjdGl2ZURPTU9iamVjdChkb2MsIHRoaXMpCiAgICAgLCBtX2FzeW5jKHRydWUpCkBAIC04OTMs
NiArODk4LDkgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYQogCiAg
ICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXNwb25zZS5odHRwSGVh
ZGVyRmllbGRzKCkuZW5kKCk7CiAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpLmJlZ2luKCk7IGl0IT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIGlmIChpc1NldENvb2tpZUhlYWRlcihpdC0+Zmlyc3QpICYmICFkb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAh
aXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChpdC0+Zmlyc3QpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKQEAgLTkxNiw2ICs5MjQsMTIgQEAgU3RyaW5nIFhNTEh0dHBS
ZXF1ZXN0OjpnZXRSZXNwb25zZUhlYWRlcgogICAgIGlmICghaXNWYWxpZFRva2VuKG5hbWUpKQog
ICAgICAgICByZXR1cm4gIiI7CiAKKyAgICBpZiAoaXNTZXRDb29raWVIZWFkZXIobmFtZSkgJiYg
IWRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJlc291cmNlcygpKSB7
CisgICAgICAgIGlmIChkb2N1bWVudCgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAg
ICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5kb21XaW5kb3coKS0+Y29uc29sZSgpLT5hZGRNZXNz
YWdlKEpTTWVzc2FnZVNvdXJjZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJSZWZ1c2VkIHRvIGdldCB1
bnNhZmUgaGVhZGVyIFwiIiArIG5hbWUgKyAiXCIiLCAxLCBTdHJpbmcoKSk7CisgICAgICAgIHJl
dHVybiAiIjsKKyAgICB9CisKICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgIWlzT25B
Y2Nlc3NDb250cm9sUmVzcG9uc2VIZWFkZXJXaGl0ZWxpc3QobmFtZSkpCiAgICAgICAgIHJldHVy
biAiIjsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25222</attachid>
            <date>2008-11-17 12:25:17 -0800</date>
            <delta_ts>2008-11-18 06:04:46 -0800</delta_ts>
            <desc>patch</desc>
            <filename>HTTPOnlyPatch.txt</filename>
            <type>text/plain</type>
            <size>24005</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODUxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMDgtMTEtMTcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZmly
c3QgY3V0IGF0IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk1Nwor
ICAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NTE2NTk0PiBwbGVhc2UgYWRkIHN1cHBvcnQgZm9y
IEhUVFAtb25seSBjb29raWVzCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC9nZXQtZGFuZ2Vyb3VzLWhlYWRlcnMuaHRtbAorCisgICAgICAgIE5vIHRlc3QgZm9yIEhU
VFAtb25seSBzdXBwb3J0IGluIEphdmFTY3JpcHQgeWV0LCBzaW5jZSB0aGUgTWFjIGFuZCBXaW4g
Y2hhbmdlcworICAgICAgICByZXF1aXJlIGFuIHVwZGF0ZWQgQ0ZOZXR3b3JrLgorCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbToKKyAgICAgICAgKFdlYkNvcmU6OmlzSFRUUE9u
bHkpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbHRlckNvb2tpZXMpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZXMpOiBVc2UgZmlsdGVyQ29va2llcyB0byBwcmV2ZW50IGdl
dHRpbmcgSFRUUC1vbmx5IGNvb2tpZXMuCisgICAgICAgIChXZWJDb3JlOjpzZXRDb29raWVzKTog
VXNlIGZpbHRlckNvb2tpZXMgdG8gcHJldmVudCBzZXR0aW5nIEhUVFAtb25seSBjb29raWVzLgor
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyQ0ZOZXRXaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aXNIVFRQT25seSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
ZmlsdGVyQ29va2llcyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llcyk6IFVz
ZSBmaWx0ZXJDb29raWVzIHRvIHByZXZlbnQgZ2V0dGluZyBIVFRQLW9ubHkgY29va2llcy4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZXMpOiBVc2UgZmlsdGVyQ29va2llcyB0byBwcmV2ZW50IGdl
dHRpbmcgSFRUUC1vbmx5IGNvb2tpZXMuCisKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNTZXRDb29raWVIZWFkZXIpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpnZXRBbGxSZXNwb25zZUhlYWRlcnMpOiBIaWRl
IFNldC1Db29raWUgaGVhZGVycyBmcm9tCisgICAgICAgIGNsaWVudHMgdGhhdCBkb24ndCBoYXZl
IGxvY2FsLXJlc291cmNlIHByaXZpbGVnZXMuCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVx
dWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIpOiBEaXR0by4KKworICAgICAgICAtIGNsZWFuIHNvdXAt
c3BlY2lmaWMgZGV0YWlscyBvdXQgb2Ygc2hhcmVkIGNvb2tpZSBqYXIgaGVhZGVyCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9Db29raWVKYXIuaDogUmVtb3ZlZCB0aGUgc291cC1zcGVjaWZpYyBwYXJ0
cyBvZiB0aGlzLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3Vw
LmNwcDogQ2hhbmdlZCB0byBpbmNsdWRlCisgICAgICAgIENvb2tpZUphclNvdXAuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5oOiBBZGRlZC4gSGFzIHRo
ZSBTb3VwLXNwZWNpZmllZAorICAgICAgICBwYXJ0IG9mIENvb2tpZUphci5oLgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOiBDaGFuZ2VkIHRv
IGluY2x1ZGUKKyAgICAgICAgQ29va2llSmFyU291cC5oLgorCiAyMDA4LTExLTE3ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdl
aW5pZy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkocmV2aXNpb24gMzg1MTApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL0Nvb2tpZUphci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDIyICsyNiwxNiBAQAogI2lmbmRlZiBDb29raWVKYXJfaAogI2RlZmluZSBDb29raWVK
YXJfaAogCi0jaWYgVVNFKFNPVVApCi0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0jZW5kaWYK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBTdHJp
bmc7CiAgICAgY2xhc3MgRG9jdW1lbnQ7CiAKLSAgICBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIHNldENvb2tpZXMoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgcG9saWN5QmFzZVVSTCwgY29u
c3QgU3RyaW5nJik7Ci0gICAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQpOwotI2lmIFVTRShTT1VQKQotICAgIFNvdXBDb29raWVKYXIqIGdldENvb2tpZUphcih2
b2lkKTsKLSNlbmRpZgorICAgIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3Qg
S1VSTCYpOworICAgIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25z
dCBLVVJMJiBwb2xpY3lCYXNlVVJMLCBjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIGNvb2tpZXNF
bmFibGVkKGNvbnN0IERvY3VtZW50Kik7CisKIH0KIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL21hYy9Db29raWVKYXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvQ29va2llSmFyLm1tCShyZXZpc2lvbiAzODUxMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFj
L0Nvb2tpZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNTMgKzM0LDc1IEBACiB0eXBlZGVm
IHVuc2lnbmVkIE5TVUludGVnZXI7CiAjZW5kaWYKIAorQGludGVyZmFjZSBOU0hUVFBDb29raWUg
KFdlYkNvcmVIVFRQT25seUNvb2tpZXMpCistIChCT09MKWlzSFRUUE9ubHk7CitAZW5kCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9j
dW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorc3RhdGljIGJvb2wgaXNIVFRQT25seShOU0hUVFBD
b29raWUgKmNvb2tpZSkKIHsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAg
c3RhdGljIGJvb2wgc3VwcG9ydHNIVFRQT25seUNvb2tpZXMgPSBbTlNIVFRQQ29va2llIGluc3Rh
bmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3Rvcihpc0hUVFBPbmx5KV07CisgICAgcmV0dXJu
IHN1cHBvcnRzSFRUUE9ubHlDb29raWVzICYmIFtjb29raWUgaXNIVFRQT25seV07Cit9CiAKLSAg
ICBOU1VSTCAqY29va2llVVJMID0gdXJsOwotICAgIE5TQXJyYXkgKmNvb2tpZXNGb3JVUkwgPSBb
W05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIGNvb2tpZXNGb3JV
Ukw6Y29va2llVVJMXTsKK3N0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyQ29va2llcyhO
U0FycmF5ICp1bmZpbHRlcmVkQ29va2llcykKK3sKKyAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW3Vu
ZmlsdGVyZWRDb29raWVzIGNvdW50XTsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGZp
bHRlcmVkQ29va2llcyhBZG9wdE5TLCBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENh
cGFjaXR5OmNvdW50XSk7CiAKLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gT24gMTAu
NSwgTlNIVFRQQ29va2llU3RvcmFnZSB3b3VsZCBoYXBwaWx5IHN0b3JlIGFuIGVtcHR5IGNvb2tp
ZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KLSAgICAvLyBXZSBoYXZlIGEg
d29ya2Fyb3VuZCBpbiBzZXRDb29raWVzKCkgdG8gcHJldmVudCB0aGF0LCBidXQgd2UgYWxzbyBu
ZWVkIHRvIGF2b2lkIHNlbmRpbmcgY29va2llcyB0aGF0IHdlcmUgcHJldmlvdXNseSBzdG9yZWQu
Ci0gICAgTlNVSW50ZWdlciBjb3VudCA9IFtjb29raWVzRm9yVVJMIGNvdW50XTsKLSAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IGNvb2tpZXNGb3JVUkxGaWx0ZXJlZENvcHkoQWRvcHROUywg
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpjb3VudF0pOwogICAgIGZv
ciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgTlNIVFRQQ29v
a2llICpjb29raWUgPSAoTlNIVFRQQ29va2llICopW2Nvb2tpZXNGb3JVUkwgb2JqZWN0QXRJbmRl
eDppXTsKLSAgICAgICAgaWYgKFtbY29va2llIG5hbWVdIGxlbmd0aF0gIT0gMCkKLSAgICAgICAg
ICAgIFtjb29raWVzRm9yVVJMRmlsdGVyZWRDb3B5LmdldCgpIGFkZE9iamVjdDpjb29raWVdOwor
ICAgICAgICBOU0hUVFBDb29raWUgKmNvb2tpZSA9IChOU0hUVFBDb29raWUgKilbdW5maWx0ZXJl
ZENvb2tpZXMgb2JqZWN0QXRJbmRleDppXTsKKworICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0v
NTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29va2llU3RvcmFnZSB3b3VsZCBzdG9yZSBhbiBlbXB0
eSBjb29raWUsCisgICAgICAgIC8vIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIu
IFdlIGhhdmUgYSB3b3JrYXJvdW5kIGluIHNldENvb2tpZXMoKSB0byBwcmV2ZW50CisgICAgICAg
IC8vIHRoYXQsIGJ1dCB3ZSBhbHNvIG5lZWQgdG8gYXZvaWQgc2VuZGluZyBjb29raWVzIHRoYXQg
d2VyZSBwcmV2aW91c2x5IHN0b3JlZCwgYW5kCisgICAgICAgIC8vIHRoZXJlJ3Mgbm8gaGFybSB0
byBkb2luZyB0aGlzIGNoZWNrIGJlY2F1c2Ugc3VjaCBhIGNvb2tpZSBpcyBuZXZlciB2YWxpZC4K
KyAgICAgICAgaWYgKCFbW2Nvb2tpZSBuYW1lXSBsZW5ndGhdKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgaWYgKGlzSFRUUE9ubHkoY29va2llKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIFtmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgYWRkT2JqZWN0OmNvb2tpZV07
CiAgICAgfQogCi0gICAgTlNEaWN0aW9uYXJ5ICpoZWFkZXIgPSBbTlNIVFRQQ29va2llIHJlcXVl
c3RIZWFkZXJGaWVsZHNXaXRoQ29va2llczpjb29raWVzRm9yVVJMRmlsdGVyZWRDb3B5LmdldCgp
XTsKLSAgICByZXR1cm4gW2hlYWRlciBvYmplY3RGb3JLZXk6QCJDb29raWUiXTsKKyAgICByZXR1
cm4gZmlsdGVyZWRDb29raWVzOworfQorCitTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisK
KyAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOworICAgIE5TQXJyYXkgKmNvb2tpZXMgPSBbW05T
SFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIGNvb2tpZXNGb3JVUkw6
Y29va2llVVJMXTsKKyAgICByZXR1cm4gW1tOU0hUVFBDb29raWUgcmVxdWVzdEhlYWRlckZpZWxk
c1dpdGhDb29raWVzOmZpbHRlckNvb2tpZXMoY29va2llcykuZ2V0KCldIG9iamVjdEZvcktleTpA
IkNvb2tpZSJdOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICByZXR1cm4g
U3RyaW5nKCk7CiB9CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogLypkb2N1bWVudCovLCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIHBvbGljeUJhc2VVUkwsIGNvbnN0IFN0cmluZyYg
Y29va2llU3RyKQordm9pZCBzZXRDb29raWVzKERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBLVVJMJiBwb2xpY3lCYXNlVVJMLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKIHsKICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICAvLyA8cmRhcjovL3Byb2JsZW0v
NTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29va2llU3RvcmFnZSB3b3VsZCBoYXBwaWx5IHN0b3Jl
IGFuIGVtcHR5IGNvb2tpZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KKyAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gT24gMTAuNSwgTlNIVFRQQ29va2llU3RvcmFn
ZSB3b3VsZCBoYXBwaWx5IHN0b3JlIGFuIGVtcHR5IGNvb2tpZSwKKyAgICAvLyB3aGljaCB3b3Vs
ZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgogICAgIGlmIChjb29raWVTdHIuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBOU1VSTCAqY29va2llVVJMID0gdXJsOwotICAgIAogICAg
IC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6
Ly80NDA5MDM0PgogICAgIC8vIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24n
dCBwYXJzZSBjb29raWVzIHdpdGhvdXQgYSB2YWx1ZQogICAgIFN0cmluZyBjb29raWVTdHJpbmcg
PSBjb29raWVTdHIuY29udGFpbnMoJz0nKSA/IGNvb2tpZVN0ciA6IGNvb2tpZVN0ciArICI9IjsK
LSAgICAKKworICAgIE5TVVJMICpjb29raWVVUkwgPSB1cmw7ICAgIAogICAgIE5TQXJyYXkgKmNv
b2tpZXMgPSBbTlNIVFRQQ29va2llIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHM6W05T
RGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpjb29raWVTdHJpbmcgZm9yS2V5OkAiU2V0
LUNvb2tpZSJdIGZvclVSTDpjb29raWVVUkxdOwotICAgIFtbTlNIVFRQQ29va2llU3RvcmFnZSBz
aGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llczpjb29raWVzIGZvclVSTDpjb29raWVV
UkwgbWFpbkRvY3VtZW50VVJMOnBvbGljeUJhc2VVUkxdOworICAgIFtbTlNIVFRQQ29va2llU3Rv
cmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llczpmaWx0ZXJDb29raWVzKGNv
b2tpZXMpLmdldCgpIGZvclVSTDpjb29raWVVUkwgbWFpbkRvY3VtZW50VVJMOnBvbGljeUJhc2VV
UkxdOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotYm9vbCBjb29raWVz
RW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBjb29raWVzRW5hYmxl
ZChjb25zdCBEb2N1bWVudCopCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3Vw
LmNwcAkocmV2aXNpb24gMzg1MTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9D
b29raWVKYXJTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcsMTMgKzE3LDEyIEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJD
b29raWVKYXIuaCIKKyNpbmNsdWRlICJDb29raWVKYXJTb3VwLmgiCiAKKyNpbmNsdWRlICJDU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAj
aW5jbHVkZSAiU3RyaW5nSGFzaC5oIgotCiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nv
b2tpZUphclNvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9Db29raWVKYXJTb3VwLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9Db29raWVKYXJTb3VwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb29raWVKYXJTb3VwX2gKKyNkZWZpbmUg
Q29va2llSmFyU291cF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIFVTRShT
T1VQKQorCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICBTb3VwQ29va2llSmFyKiBnZXRDb29raWVKYXIoKTsKK30KKworI2VuZGlmCisKKyNlbmRp
ZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29v
a2llSmFyU291cC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUK
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNl
SGFuZGxlU291cC5jcHAJKHJldmlzaW9uIDM4NTEwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyAr
MjQsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAKICNpbmNsdWRlICJCYXNlNjQu
aCIKLSNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJDb29raWVKYXJTb3VwLmgiCiAj
aW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVFRQ
UGFyc2Vycy5oIgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJD
Rk5ldFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9D
b29raWVKYXJDRk5ldFdpbi5jcHAJKHJldmlzaW9uIDM4NTEwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3dpbi9Db29raWVKYXJDRk5ldFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDIwICsyNyw1NSBAQAogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2ll
U3RvcmFnZVdpbi5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxD
b3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgogI2luY2x1ZGUgPENGTmV0d29yay9DRkhU
VFBDb29raWVzUHJpdi5oPgorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9u
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFj
ZS5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0
aWMgY29uc3QgQ0ZTdHJpbmdSZWYgc19zZXRDb29raWVLZXlDRiA9IENGU1RSKCJTZXQtQ29va2ll
Iik7CiBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYgc19jb29raWVDRiA9IENGU1RSKCJDb29raWUi
KTsKIAordHlwZWRlZiBCb29sZWFuICgqSXNIVFRQT25seUZ1bmN0aW9uKShDRkhUVFBDb29raWVS
ZWYpOworCitzdGF0aWMgSXNIVFRQT25seUZ1bmN0aW9uIGZpbmRJc0hUVFBPbmx5RnVuY3Rpb24o
KQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PElzSFRUUE9ubHlGdW5jdGlvbj4oR2V0
UHJvY0FkZHJlc3MoR2V0TW9kdWxlSGFuZGxlQSgiQ0ZOZXR3b3JrIiksICJDRkhUVFBDb29raWVJ
c0hUVFBPbmx5IikpOworfQorCitzdGF0aWMgYm9vbCBpc0hUVFBPbmx5KENGSFRUUENvb2tpZVJl
ZiBjb29raWUpCit7CisgICAgc3RhdGljIElzSFRUUE9ubHlGdW5jdGlvbiBmdW5jdGlvbiA9IGZp
bmRJc0hUVFBPbmx5RnVuY3Rpb24oKTsKKyAgICByZXR1cm4gZnVuY3Rpb24gJiYgZnVuY3Rpb24o
Y29va2llKTsKK30KKworc3RhdGljIFJldGFpblB0cjxDRkFycmF5UmVmPiBmaWx0ZXJDb29raWVz
KENGQXJyYXlSZWYgdW5maWx0ZXJlZENvb2tpZXMpCit7CisgICAgQ0ZJbmRleCBjb3VudCA9IENG
QXJyYXlHZXRDb3VudCh1bmZpbHRlcmVkQ29va2llcyk7CisgICAgUmV0YWluUHRyPENGTXV0YWJs
ZUFycmF5UmVmPiBmaWx0ZXJlZENvb2tpZXMoQWRvcHRDRiwgQ0ZBcnJheUNyZWF0ZU11dGFibGUo
MCwgY291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIENGSFRUUENvb2tpZVJlZiBjb29raWUgPSAo
Q0ZIVFRQQ29va2llUmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodW5maWx0ZXJlZENvb2tpZXMs
IGkpOworCisgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBDRkhUVFBDb29raWVT
dG9yYWdlIHdvdWxkIHN0b3JlIGFuIGVtcHR5IGNvb2tpZSwKKyAgICAgICAgLy8gd2hpY2ggd291
bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4gV2UgaGF2ZSBhIHdvcmthcm91bmQgaW4gc2V0Q29v
a2llcygpIHRvIHByZXZlbnQKKyAgICAgICAgLy8gdGhhdCwgYnV0IHdlIGFsc28gbmVlZCB0byBh
dm9pZCBzZW5kaW5nIGNvb2tpZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgc3RvcmVkLCBhbmQKKyAg
ICAgICAgLy8gdGhlcmUncyBubyBoYXJtIHRvIGRvaW5nIHRoaXMgY2hlY2sgYmVjYXVzZSBzdWNo
IGEgY29va2llIGlzIG5ldmVyIHZhbGlkLgorICAgICAgICBpZiAoIUNGU3RyaW5nR2V0TGVuZ3Ro
KENGSFRUUENvb2tpZUdldE5hbWUoY29va2llKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBpZiAoaXNIVFRQT25seShjb29raWUpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2ll
KTsKKyAgICB9CisgICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKK30KKwogdm9pZCBzZXRDb29r
aWVzKERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYg
cG9saWN5VVJMLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIC8vIDxyZGFyOi8vcHJvYmxl
bS81NjMyODgzPiBDRkhUVFBDb29raWVTdG9yYWdlIGhhcHBpbHkgc3RvcmVzIGFuIGVtcHR5IGNv
b2tpZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KQEAgLTU5LDEzICs5NCwx
NCBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgCiAgICAgU3RyaW5n
IGNvb2tpZVN0cmluZyA9IHZhbHVlLmNvbnRhaW5zKCc9JykgPyB2YWx1ZSA6IHZhbHVlICsgIj0i
OwogCiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjb29raWVTdHJpbmdDRihBZG9wdENGLCBj
b29raWVTdHJpbmcuY3JlYXRlQ0ZTdHJpbmcoKSk7Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gaGVhZGVyRmllbGRzQ0YoQWRvcHRDRiwgQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIChjb25zdCB2b2lkKiopJnNfc2V0Q29va2llS2V5Q0YsIAotICAgICAgICAo
Y29uc3Qgdm9pZCoqKSZjb29raWVTdHJpbmdDRiwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2Fs
bEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IGhlYWRlckZpZWxkc0NGKEFkb3B0Q0YsIENGRGljdGlvbmFyeUNy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LAorICAgICAgICAoY29uc3Qgdm9pZCoqKSZzX3NldENv
b2tpZUtleUNGLCAoY29uc3Qgdm9pZCoqKSZjb29raWVTdHJpbmdDRiwgMSwKKyAgICAgICAgJmtD
RlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxC
YWNrcykpOwogCiAgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNvb2tpZXNDRihBZG9wdENGLCBD
RkhUVFBDb29raWVDcmVhdGVXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMoa0NGQWxsb2NhdG9yRGVm
YXVsdCwKICAgICAgICAgaGVhZGVyRmllbGRzQ0YuZ2V0KCksIHVybENGLmdldCgpKSk7CiAKLSAg
ICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llcyhjb29raWVTdG9yYWdlLCBjb29raWVzQ0Yu
Z2V0KCksIHVybENGLmdldCgpLCBwb2xpY3lVUkxDRi5nZXQoKSk7CisgICAgQ0ZIVFRQQ29va2ll
U3RvcmFnZVNldENvb2tpZXMoY29va2llU3RvcmFnZSwgZmlsdGVyQ29va2llcyhjb29raWVzQ0Yu
Z2V0KCkpLmdldCgpLCB1cmxDRi5nZXQoKSwgcG9saWN5VVJMQ0YuZ2V0KCkpOwogfQogCiBTdHJp
bmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwp
CkBAIC03NCwyNCArMTEwLDExIEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRv
Y3VtZW4KICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
IAotICAgIFN0cmluZyBjb29raWVTdHJpbmc7CiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxD
RihBZG9wdENGLCB1cmwuY3JlYXRlQ0ZVUkwoKSk7CiAKLSAgICBib29sIHNlY3VyZSA9IGVxdWFs
SWdub3JpbmdDYXNlKHVybC5wcm90b2NvbCgpLCAiaHR0cHMiKTsKLQorICAgIGJvb2wgc2VjdXJl
ID0gdXJsLnByb3RvY29sSXMoImh0dHBzIik7CiAgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGNv
b2tpZXNDRihBZG9wdENGLCBDRkhUVFBDb29raWVTdG9yYWdlQ29weUNvb2tpZXNGb3JVUkwoY29v
a2llU3RvcmFnZSwgdXJsQ0YuZ2V0KCksIHNlY3VyZSkpOwotCi0gICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2UgaGFwcGlseSBzdG9yZXMgYW4gZW1wdHkg
Y29va2llLCB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgotICAgIC8vIFdlIGhh
dmUgYSB3b3JrYXJvdW5kIGluIHNldENvb2tpZXMoKSB0byBwcmV2ZW50IHRoYXQsIGJ1dCB3ZSBh
bHNvIG5lZWQgdG8gYXZvaWQgc2VuZGluZyBjb29raWVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHN0
b3JlZC4KLSAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGNvb2tpZXNDRi5nZXQo
KSk7Ci0gICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBjb29raWVzRm9yVVJMRmlsdGVy
ZWRDb3B5KEFkb3B0Q0YsIENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIGNvdW50LCAma0NGVHlwZUFy
cmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
ewotICAgICAgICBDRkhUVFBDb29raWVSZWYgY29va2llID0gKENGSFRUUENvb2tpZVJlZilDRkFy
cmF5R2V0VmFsdWVBdEluZGV4KGNvb2tpZXNDRi5nZXQoKSwgaSk7Ci0gICAgICAgIGlmIChDRlN0
cmluZ0dldExlbmd0aChDRkhUVFBDb29raWVHZXROYW1lKGNvb2tpZSkpICE9IDApCi0gICAgICAg
ICAgICBDRkFycmF5QXBwZW5kVmFsdWUoY29va2llc0ZvclVSTEZpbHRlcmVkQ29weS5nZXQoKSwg
Y29va2llKTsKLSAgICB9Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaGVhZGVyQ0Yo
QWRvcHRDRiwgQ0ZIVFRQQ29va2llQ29weVJlcXVlc3RIZWFkZXJGaWVsZHMoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgY29va2llc0ZvclVSTEZpbHRlcmVkQ29weS5nZXQoKSkpOwotCisgICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gaGVhZGVyQ0YoQWRvcHRDRiwgQ0ZIVFRQQ29va2llQ29weVJl
cXVlc3RIZWFkZXJGaWVsZHMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZmlsdGVyQ29va2llcyhjb29r
aWVzQ0YuZ2V0KCkpLmdldCgpKSk7CiAgICAgcmV0dXJuIChDRlN0cmluZ1JlZilDRkRpY3Rpb25h
cnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRik7CiB9CiAKSW5kZXg6IFdlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDM4NTEwKQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNiArMTY2LDExIEBAIHN0YXRpYyBib29s
IGlzVmFsaWRIZWFkZXJWYWx1ZShjb25zdCBTdHIKICAgICByZXR1cm4gIW5hbWUuY29udGFpbnMo
J1xyJykgJiYgIW5hbWUuY29udGFpbnMoJ1xuJyk7CiB9CiAKK3N0YXRpYyBib29sIGlzU2V0Q29v
a2llSGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gZXF1YWxJZ25vcmlu
Z0Nhc2UobmFtZSwgInNldC1jb29raWUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAic2V0
LWNvb2tpZTIiKTsKK30KKwogWE1MSHR0cFJlcXVlc3Q6OlhNTEh0dHBSZXF1ZXN0KERvY3VtZW50
KiBkb2MpCiAgICAgOiBBY3RpdmVET01PYmplY3QoZG9jLCB0aGlzKQogICAgICwgbV9hc3luYyh0
cnVlKQpAQCAtODQwLDcgKzg0NSwxNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvdmVycmlkZU1p
bWVUeXBlKGNvCiB7CiAgICAgbV9taW1lVHlwZU92ZXJyaWRlID0gb3ZlcnJpZGU7CiB9Ci0gICAg
CisKK3N0YXRpYyB2b2lkIHJlcG9ydFVuc2FmZVVzYWdlKERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVy
bjsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm47CisgICAgZnJhbWUtPmRvbVdpbmRvdygpLT5jb25zb2xlKCktPmFk
ZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBFcnJvck1lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgMSwg
U3RyaW5nKCkpOworfQorCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgaWYgKG1fc3RhdGUgIT0gT1BFTkVEIHx8IG1fbG9hZGVyKSB7CkBAIC04NjEsOCAr
ODc2LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcihjbwogCiAgICAg
Ly8gQSBwcml2aWxlZ2VkIHNjcmlwdCAoZS5nLiBhIERhc2hib2FyZCB3aWRnZXQpIGNhbiBzZXQg
YW55IGhlYWRlcnMuCiAgICAgaWYgKCFkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5M
b2FkTG9jYWxSZXNvdXJjZXMoKSAmJiAhaXNTYWZlUmVxdWVzdEhlYWRlcihuYW1lKSkgewotICAg
ICAgICBpZiAoZG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKS0+YWRkTWVzc2FnZShK
U01lc3NhZ2VTb3VyY2UsIEVycm9yTWVzc2FnZUxldmVsLCAiUmVmdXNlZCB0byBzZXQgdW5zYWZl
IGhlYWRlciBcIiIgKyBuYW1lICsgIlwiIiwgMSwgU3RyaW5nKCkpOworICAgICAgICByZXBvcnRV
bnNhZmVVc2FnZShkb2N1bWVudCgpLCAiUmVmdXNlZCB0byBzZXQgdW5zYWZlIGhlYWRlciBcIiIg
KyBuYW1lICsgIlwiIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg5Myw2ICs5MDcs
OSBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhCiAKICAgICBIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZHMoKS5lbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkuYmVnaW4oKTsgaXQhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgaWYgKGlzU2V0Q29va2llSGVhZGVyKGl0LT5maXJzdCkgJiYgIWRvY3VtZW50KCkt
PnNlY3VyaXR5T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJlc291cmNlcygpKQorICAgICAgICAgICAg
Y29udGludWU7CisKICAgICAgICAgaWYgKCFtX3NhbWVPcmlnaW5SZXF1ZXN0ICYmICFpc09uQWNj
ZXNzQ29udHJvbFJlc3BvbnNlSGVhZGVyV2hpdGVsaXN0KGl0LT5maXJzdCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIApAQCAtOTE2LDggKzkzMywxNSBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6
OmdldFJlc3BvbnNlSGVhZGVyCiAgICAgaWYgKCFpc1ZhbGlkVG9rZW4obmFtZSkpCiAgICAgICAg
IHJldHVybiAiIjsKIAotICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAhaXNPbkFjY2Vz
c0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChuYW1lKSkKKyAgICBpZiAoaXNTZXRDb29r
aWVIZWFkZXIobmFtZSkgJiYgIWRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkxvYWRM
b2NhbFJlc291cmNlcygpKSB7CisgICAgICAgIHJlcG9ydFVuc2FmZVVzYWdlKGRvY3VtZW50KCks
ICJSZWZ1c2VkIHRvIGdldCB1bnNhZmUgaGVhZGVyIFwiIiArIG5hbWUgKyAiXCIiKTsKICAgICAg
ICAgcmV0dXJuICIiOworICAgIH0KKworICAgIGlmICghbV9zYW1lT3JpZ2luUmVxdWVzdCAmJiAh
aXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25zZUhlYWRlcldoaXRlbGlzdChuYW1lKSkgeworICAgICAg
ICByZXBvcnRVbnNhZmVVc2FnZShkb2N1bWVudCgpLCAiUmVmdXNlZCB0byBnZXQgdW5zYWZlIGhl
YWRlciBcIiIgKyBuYW1lICsgIlwiIik7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CiAKICAg
ICByZXR1cm4gbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQobmFtZSk7CiB9CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAzODUxMCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDA4LTExLTE3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGFk
ZCBhIHRlc3QgZm9yIFhNTEh0dHBSZXF1ZXN0IFNldC1Db29raWUgYmxvY2tpbmcKKworICAgICAg
ICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYWNjZXNzLWNvbnRyb2wtYmFzaWMtd2hpdGVs
aXN0LXJlc3BvbnNlLWhlYWRlcnMtZXhwZWN0ZWQudHh0OgorICAgICAgICBVcGRhdGVkIHNpbmNl
IHdlIG5vdyBsb2cgYXR0ZW1wdHMgdG8gZ2V0IGhlYWRlcnMgdGhhdCBhcmUgbm90IGFsbG93ZWQg
Y3Jvc3MtZG9tYWluIHRvIHRoZSBjb25zb2xlLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3QvZ2V0LWRhbmdlcm91cy1oZWFkZXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9nZXQtZGFuZ2Vyb3VzLWhlYWRlcnMuaHRt
bDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMv
Z2V0LXNldC1jb29raWUuY2dpOiBUd2VhayBzY3JpcHQgYSBiaXQuCisKIDIwMDgtMTEtMTYgIEdl
b2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQu
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250
cm9sLWJhc2ljLXdoaXRlbGlzdC1yZXNwb25zZS1oZWFkZXJzLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2FjY2Vzcy1jb250
cm9sLWJhc2ljLXdoaXRlbGlzdC1yZXNwb25zZS1oZWFkZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMzg1MTApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2FjY2Vz
cy1jb250cm9sLWJhc2ljLXdoaXRlbGlzdC1yZXNwb25zZS1oZWFkZXJzLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBS
ZWZ1c2VkIHRvIGdldCB1bnNhZmUgaGVhZGVyICJ4LXdlYmtpdCIKIFBBU1M6IFJlc3BvbnNlIGhl
YWRlciBjYWNoZS1jb250cm9sIGFsbG93ZWQuCiBQQVNTOiBSZXNwb25zZSBoZWFkZXIgY29udGVu
dC1sYW5ndWFnZSBhbGxvd2VkLgogUEFTUzogUmVzcG9uc2UgaGVhZGVyIGNvbnRlbnQtdHlwZSBh
bGxvd2VkLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9nZXQt
ZGFuZ2Vyb3VzLWhlYWRlcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvZ2V0LWRhbmdlcm91cy1oZWFkZXJzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QvZ2V0LWRhbmdlcm91cy1oZWFkZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3IEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogUmVmdXNlZCB0byBnZXQgdW5zYWZl
IGhlYWRlciAiU2V0LUNvb2tpZSIKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1c2VkIHRv
IGdldCB1bnNhZmUgaGVhZGVyICJzZXQtY29va2llIgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6
IFJlZnVzZWQgdG8gZ2V0IHVuc2FmZSBoZWFkZXIgIlNldC1Db29raWUyIgorQ09OU09MRSBNRVNT
QUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZ2V0IHVuc2FmZSBoZWFkZXIgInNldC1jb29raWUyIgor
VGVzdCB0aGF0IGdldFJlc3BvbnNlSGVhZGVyIGFuZCBnZXRBbGxSZXNwb25zZUhlYWRlcnMgY2Fu
bm90IGJlIHVzZWQgdG8gZ2V0IHRoZSBjb29raWUgaGVhZGVyIGZpZWxkcy4KKworUEFTUwoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9n
ZXQtZGFuZ2Vyb3VzLWhlYWRlcnMtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
b2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0
dHByZXF1ZXN0L2dldC1kYW5nZXJvdXMtaGVhZGVycy5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvZ2V0LWRhbmdlcm91cy1oZWFkZXJzLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L2dldC1kYW5nZXJvdXMtaGVhZGVycy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBA
Cis8aHRtbD4KKzxib2R5PgorPHA+VGVzdCB0aGF0IGdldFJlc3BvbnNlSGVhZGVyIGFuZCBnZXRB
bGxSZXNwb25zZUhlYWRlcnMgY2Fubm90IGJlIHVzZWQgdG8gZ2V0IHRoZSBjb29raWUgaGVhZGVy
IGZpZWxkcy48L3A+Cis8cHJlIGlkPSJyZXN1bHQiPkZBSUw6IFNjcmlwdCBkaWRuJ3QgcnVuIG9y
IHJhaXNlZCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbi48L3ByZT4KKzxzY3JpcHQ+CisgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworCisgICAgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0OworICAgIHJl
cS5vcGVuKCJQT1NUIiwgInJlc291cmNlcy9nZXQtc2V0LWNvb2tpZS5jZ2kiLCBmYWxzZSk7Cisg
ICAgcmVxLnNlbmQoIiIpOworCisgICAgdmFyIHJlc3VsdCA9ICJQQVNTIjsKKworICAgIGlmIChy
ZXEuZ2V0UmVzcG9uc2VIZWFkZXIoIlNldC1Db29raWUiKSAhPSAiIiAmJiByZXN1bHQgPT0gIlBB
U1MiKQorICAgICAgICByZXN1bHQgPSAiRkFJTDogU2F3IGEgU2V0LUNvb2tpZSBoZWFkZXIgd2l0
aCBnZXRSZXNwb25zZUhlYWRlci4iOworICAgIGlmIChyZXEuZ2V0UmVzcG9uc2VIZWFkZXIoInNl
dC1jb29raWUiKSAhPSAiIiAmJiByZXN1bHQgPT0gIlBBU1MiKQorICAgICAgICByZXN1bHQgPSAi
RkFJTDogU2F3IGEgc2V0LWNvb2tpZSBoZWFkZXIgd2l0aCBnZXRSZXNwb25zZUhlYWRlci4iOwor
ICAgIGlmIChyZXEuZ2V0UmVzcG9uc2VIZWFkZXIoIlNldC1Db29raWUyIikgIT0gIiIgJiYgcmVz
dWx0ID09ICJQQVNTIikKKyAgICAgICAgcmVzdWx0ID0gIkZBSUw6IFNhdyBhIFNldC1Db29raWUy
IGhlYWRlciB3aXRoIGdldFJlc3BvbnNlSGVhZGVyLiI7CisgICAgaWYgKHJlcS5nZXRSZXNwb25z
ZUhlYWRlcigic2V0LWNvb2tpZTIiKSAhPSAiIiAmJiByZXN1bHQgPT0gIlBBU1MiKQorICAgICAg
ICByZXN1bHQgPSAiRkFJTDogU2F3IGEgc2V0LWNvb2tpZTIgaGVhZGVyIHdpdGggZ2V0UmVzcG9u
c2VIZWFkZXIuIjsKKworICAgIGlmIChyZXEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkubWF0Y2go
L1NldC1Db29raWUvKSAmJiByZXN1bHQgPT0gIlBBU1MiKQorICAgICAgICByZXN1bHQgPSAiRkFJ
TDogU2F3IFNldC1Db29raWUgd2l0aCBnZXRBbGxSZXNwb25zZUhlYWRlcnMuIjsKKyAgICBpZiAo
cmVxLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLm1hdGNoKC9zZXQtY29va2llLykgJiYgcmVzdWx0
ID09ICJQQVNTIikKKyAgICAgICAgcmVzdWx0ID0gIkZBSUw6IFNhdyBzZXQtY29va2llIHdpdGgg
Z2V0QWxsUmVzcG9uc2VIZWFkZXJzLiI7CisgICAgaWYgKHJlcS5nZXRBbGxSZXNwb25zZUhlYWRl
cnMoKS5tYXRjaCgvU2V0LUNvb2tpZTIvKSAmJiByZXN1bHQgPT0gIlBBU1MiKQorICAgICAgICBy
ZXN1bHQgPSAiRkFJTDogU2F3IFNldC1Db29raWUyIHdpdGggZ2V0QWxsUmVzcG9uc2VIZWFkZXJz
LiI7CisgICAgaWYgKHJlcS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKS5tYXRjaCgvc2V0LWNvb2tp
ZTIvKSAmJiByZXN1bHQgPT0gIlBBU1MiKQorICAgICAgICByZXN1bHQgPSAiRkFJTDogU2F3IHNl
dC1jb29raWUyIHdpdGggZ2V0QWxsUmVzcG9uc2VIZWFkZXJzLiI7CisKKyAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicmVzdWx0IikudGV4dENvbnRlbnQgPSByZXN1bHQ7Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QvZ2V0LWRhbmdlcm91cy1oZWFkZXJzLmh0bWwKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvaHRtbApBZGRlZDogc3ZuOmVvbC1zdHls
ZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QvcmVzb3VyY2VzL2dldC1zZXQtY29va2llLmNnaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9nZXQtc2V0LWNvb2tpZS5jZ2kJ
KHJldmlzaW9uIDM4NTEwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC9yZXNvdXJjZXMvZ2V0LXNldC1jb29raWUuY2dpCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMs
NSBAQAogcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9wbGFpblxuIjsgCiBwcmludCAiU2V0LUNv
b2tpZTogV0stdGVzdD0xXG4iOwogcHJpbnQgIlNldC1Db29raWU6IFdLLXRlc3Qtc2VjdXJlPTE7
IHNlY3VyZVxuXG4iOwotCi1pZiAoJEVOVnsiSFRUUF9DT09LSUUifSkgewotICAgIHByaW50ICIk
RU5We1wiSFRUUF9DT09LSUVcIn1cbiI7Ci19CitwcmludCAiU2V0LUNvb2tpZTI6IFdLLXRlc3Qt
Mj0xXG4iOworcHJpbnQgIiRFTlZ7XCJIVFRQX0NPT0tJRVwifVxuIiBpZiAkRU5WeyJIVFRQX0NP
T0tJRSJ9Owo=
</data>
<flag name="review"
          id="11649"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>