<?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>11011</bug_id>
          
          <creation_ts>2006-09-24 14:12:31 -0700</creation_ts>
          <short_desc>External CSS is parsed as iso-8859-1 even though the main document is utf-8</short_desc>
          <delta_ts>2008-11-26 03:58:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</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://simon.html5.org/test/css/syndata/representation/001.htm</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Pieters">zcorpan</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>robburns1</cc>
    
    <cc>zcorpan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>56372</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Pieters">zcorpan</who>
    <bug_when>2006-09-24 14:12:31 -0700</bug_when>
    <thetext>iso-8859-1 (or perhaps windows-1252?) is assumed for external style sheets, even though charset=utf-8 has been specified in Content-Type HTTP header. See http://www.w3.org/TR/CSS21/syndata.html#q23 for how encoding information should be gathered for CSS.

Steps to reproduce:
1. Use non-ascii characters in a utf-8 stylesheet in &apos;content&apos;.
2. Specify charset=utf-8 in Content-Type HTTP header.

Expected results:
The style sheet should be parsed with the specified encoding (utf-8).

Actual results:
The style sheet is parsed as iso-8859-1 (or windows-1252?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56422</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-09-25 06:31:57 -0700</bug_when>
    <thetext>This stylesheet comes without a charset in Content-Type:

$ curl -I http://simon.html5.org/test/css/syndata/representation/support/001.css
HTTP/1.1 200 OK
&lt;...&gt;
Content-Type: text/css

However, we do have a bug - the charset must be inherited from the main document (rule 4 from the quoted spec). Technically, CSS 2.1 also suggests that UTF-8 should be a default (rule 5), but since CSS files aren&apos;t standalone, this is hardly practical.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56451</commentid>
    <comment_count>2</comment_count>
    <who name="Robert Burns">robburns1</who>
    <bug_when>2006-09-25 13:37:50 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; This stylesheet comes without a charset in Content-Type:
&gt; 
&gt; $ curl -I
&gt; http://simon.html5.org/test/css/syndata/representation/support/001.css
&gt; HTTP/1.1 200 OK
&gt; &lt;...&gt;
&gt; Content-Type: text/css
&gt; 
&gt; However, we do have a bug - the charset must be inherited from the main
&gt; document (rule 4 from the quoted spec). Technically, CSS 2.1 also suggests that
&gt; UTF-8 should be a default (rule 5), but since CSS files aren&apos;t standalone, this
&gt; is hardly practical.
&gt; 

I&apos;m not sure what you mean by hardly practical The spec says that If the encoding can&apos;t be determined through any of the previous means then UTF-8 should be assumed (rather than assuming 8859-1 or something else). Could you elaborate what you mean by hardly practical?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56452</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-09-25 13:45:45 -0700</bug_when>
    <thetext>What I meant was that rules 1-4 are always sufficient (the referring resource always has a charset), so rule 5 is never used. And even if viewing standalone CSS files, the browser default is probably a better approximation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56453</commentid>
    <comment_count>4</comment_count>
    <who name="Robert Burns">robburns1</who>
    <bug_when>2006-09-25 13:58:24 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; What I meant was that rules 1-4 are always sufficient (the referring resource
&gt; always has a charset), so rule 5 is never used. And even if viewing standalone
&gt; CSS files, the browser default is probably a better approximation.
&gt; 

I see. Also I see the sample stylesheet has no BOM either so rule 2 would not kick in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56484</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Pieters">zcorpan</who>
    <bug_when>2006-09-25 15:00:14 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; This stylesheet comes without a charset in Content-Type:
&gt; [...]

Sorry, fixed now. The bug still applies.

&gt; However, we do have a bug - the charset must be inherited from the main
&gt; document (rule 4 from the quoted spec). Technically, CSS 2.1 also suggests that
&gt; UTF-8 should be a default (rule 5), but since CSS files aren&apos;t standalone, this
&gt; is hardly practical.

Yeah. That broadens the scope of this bug, however. I&apos;ll create more test cases on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56493</commentid>
    <comment_count>6</comment_count>
    <who name="Robert Burns">robburns1</who>
    <bug_when>2006-09-25 16:08:37 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #1)
&gt; &gt; This stylesheet comes without a charset in Content-Type:
&gt; &gt; [...]
&gt; 
&gt; Sorry, fixed now. The bug still applies.
&gt; 
&gt; &gt; However, we do have a bug - the charset must be inherited from the main
&gt; &gt; document (rule 4 from the quoted spec). Technically, CSS 2.1 also suggests that
&gt; &gt; UTF-8 should be a default (rule 5), but since CSS files aren&apos;t standalone, this
&gt; &gt; is hardly practical.
&gt; 
&gt; Yeah. That broadens the scope of this bug, however. I&apos;ll create more test cases
&gt; on this.
&gt; 

As far as I can tell this is loading as UTF-8. Even when I set the default in the nightly build to Western (ISO Latiin-1).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56499</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-09-25 21:23:53 -0700</bug_when>
    <thetext>Yes, charset from Content-Type (and @charset) has been already fixed - you can use nightly builds from &lt;http://nightly.webkit.org&gt; for testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56519</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Pieters">zcorpan</who>
    <bug_when>2006-09-26 03:13:42 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Yes, charset from Content-Type (and @charset) has been already fixed
 
Ok. I&apos;ve removed charset from Content-Type in the test case again so that it matches this bug report.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56650</commentid>
    <comment_count>9</comment_count>
      <attachid>10805</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-09-27 13:30:20 -0700</bug_when>
    <thetext>Created attachment 10805
work in progress

This implements inheriting the charset from a document, but not from a referring stylesheet yet. Parts of the implementation are common between CSS and XSL, so I wonder if XSL has similar inheritance rules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56666</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Pieters">zcorpan</who>
    <bug_when>2006-09-27 15:06:54 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; [...] Parts of the implementation are common between CSS
&gt; and XSL, so I wonder if XSL has similar inheritance rules.

XSL doesn&apos;t inherit encoding. XSL is XML and so should get XML treatment when it comes to encoding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56843</commentid>
    <comment_count>11</comment_count>
      <attachid>10851</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-09-30 13:19:43 -0700</bug_when>
    <thetext>Created attachment 10851
proposed fix

This fixes a bunch of cases; one loose end that might remain is handling of dynamically modified stylesheets, e.g.:
s = document.implementation.createCSSStyleSheet(...);
s.insertRule(&apos;@charset ...&apos;, 0);
s.insertRule(&apos;@import...&apos;, 1);

However, I don&apos;t think the behavior in such cases is rigorously specified, and testing to match other browsers seems infeasible (Firefox 1.5 doesn&apos;t even have createCSSStyleSheet()).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56845</commentid>
    <comment_count>12</comment_count>
      <attachid>10851</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-09-30 13:49:25 -0700</bug_when>
    <thetext>Comment on attachment 10851
proposed fix

+#include &quot;CSSCharsetRule.h&quot;

Why is this additional include needed in CSSStyleSheet.cpp?

+StyleSheet *StyleSheetList::item(unsigned index)

Should move the * to the left too while we&apos;re at it.

+            c-&gt;setCSSStyleSheet(String(ResponseURL(m_response)), m_decoder-&gt;encoding().name(), m_sheet);

Do we really need the explicit String() here?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56851</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-09-30 14:19:37 -0700</bug_when>
    <thetext>Committed revision 16689.

&gt; Why is this additional include needed in CSSStyleSheet.cpp?

  I forgot to remove it (originally considered looking at CSSCharsetRule to support dynamic stylesheet manipulation). Fixed. 

&gt; Should move the * to the left too while we&apos;re at it.

  Done.

&gt; Do we really need the explicit String() here?

  Apparently not, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56942</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-10-02 11:08:01 -0700</bug_when>
    <thetext>This change broke the loading of the error page&apos;s style sheet! Working on that (Radar 4759256).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22329</commentid>
    <comment_count>15</comment_count>
    <who name="Robert Burns">robburns1</who>
    <bug_when>2007-02-21 19:08:51 -0800</bug_when>
    <thetext>Lookin over the recommenation on this again, I think we sshould interpret it more charitably.

http://www.w3.org/TR/CSS21/syndata.html#q23

Rather than suggesting that it can never get to setp 6, I think the recommendation means, by the charset of the referring document, the actual declared charset. Certainly every document has an imputed charset (by some method), however if the referring document chraset is likewise unkown, I think the recommendation is suggesting to use UTF-8. 

Now, I&apos;m not sure if this is how other browsers would interpret it. Peraps some testing could be done on that. However, I think the more we can assume UTF-8 the better. If we could get away from these other charsets that would be a good thing. Certainly if it&apos;s not ISO-8859-1  or unicode it would be more common to include an @harset rule at the beginning of a document. Or to include the charset in the reference link or the http header. So with that all left out, the decision is over whether to assume latin or assume UTF-8 (for the most part).  I would vote for UTF-8 without significant flow of other browsers in the opposite direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22296</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-02-22 01:04:45 -0800</bug_when>
    <thetext>If you have examples where WebKit gives different results than Firefox, please open new bugs for them!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22087</commentid>
    <comment_count>17</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2007-02-22 15:41:33 -0800</bug_when>
    <thetext>Regarding comment %15 above: We (the CSSWG) meant the assumed charset of the referring page, not the declared charset. The &quot;assume UTF-8&quot; step only applies if there&apos;s no referring page (e.g. in a CSS editor opening a CSS file directly).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22090</commentid>
    <comment_count>18</comment_count>
    <who name="Robert Burns">robburns1</who>
    <bug_when>2007-02-22 16:40:31 -0800</bug_when>
    <thetext>Regarding comment #15 again: Well, I&apos;m not sure that one person can speak for the entire WG. However, I took a look at CSS2 which is much clearer on this. However, CSS2 doesn&apos;t include the fallback of the referring document&apos;s imputed or declared charset:

&quot;4. charset of referring style sheet or document (if any)&quot;

I guess the &quot;if any&quot; refers to teh word &quot;document&quot; and not &quot;charset of&quot;

It would be better if CSS2.1 made it clear by saying something like:

&quot;4. the declared or imputed charset of referring style sheet or document (if any)&quot;

It&apos;s not good when updated recommendations add to the confusion.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10805</attachid>
            <date>2006-09-27 13:30:20 -0700</date>
            <delta_ts>2006-09-30 13:19:43 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>11011_in_progress.txt</filename>
            <type>text/plain</type>
            <size>3917</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZW5jb2RpbmcvY3NzLWNoYXJzZXQtZGVmYXVsdC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZW5jb2RpbmcvY3NzLWNoYXJzZXQtZGVm
YXVsdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9lbmNvZGluZy9jc3Mt
Y2hhcnNldC1kZWZhdWx0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKzxodG1s
PgorPGhlYWQ+CisgICAgPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3Mt
MTI1MSIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIi8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iY3NzLWNoYXJzZXQtaW5oZXJpdC5jc3MiPgorICAg
IDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImNzcy1jaGFyc2V0
LWltcG9ydC5jc3MiPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgorPHA+VGVzdCBm
b3IgPGEgaHJlZj0iaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTAxMSI+YnVnIDExMDExPC9hPjoKK0V4dGVybmFsIENTUyBpcyBwYXJzZWQgYXMgaXNvLTg4
NTktMSBldmVuIHRob3VnaCB0aGUgbWFpbiBkb2N1bWVudCBpcyB1dGYtOC48L3A+CisKKzx1bCBp
ZD0icmVzdWx0Ij48L3VsPgorCis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9u
IGxvZyhtZXNzYWdlKQoreworICAgIHZhciBpdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
bGkiKTsKKyAgICBpdGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3Nh
Z2UpKTsKKyAgICByZXN1bHQuYXBwZW5kQ2hpbGQoaXRlbSk7Cit9CisKK2Z1bmN0aW9uIHRlc3Qo
KSB7CisgIHRyeSB7CisgICAgbG9nKCJTdHlsZXNoZWV0IDEgKGluaGVyaXQgZG9jdW1lbnQgY2hh
cnNldCk6Iik7CisgICAgbG9nKCJjb250ZW50OiAiICsgZG9jdW1lbnQuc3R5bGVTaGVldHNbMF0u
Y3NzUnVsZXNbMF0uc3R5bGUuY29udGVudCk7CisgICAgCisgICAgbG9nKCJTdHlsZXNoZWV0IDIg
KGluaGVyaXQgcmVmZXJyaW5nIHN0eWxlc2hlZXQgY2hhcnNldCk6Iik7CisgICAgbG9nKCJjb250
ZW50OiAiICsgZG9jdW1lbnQuc3R5bGVTaGVldHNbMV0uY3NzUnVsZXNbMV0uc3R5bGVTaGVldC5j
c3NSdWxlc1swXS5zdHlsZS5jb250ZW50KTsKKyAgfSBjYXRjaCAoZXgpIHsKKyAgICBsb2coZXgu
dG9TdHJpbmcoKSk7CisgIH0KK30KKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2VuY29kaW5nL2Nzcy1jaGFyc2V0LWRl
ZmF1bHQuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwK
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2VuY29kaW5nL2Nzcy1jaGFyc2V0LWltcG9ydC5jc3MK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9lbmNvZGluZy9jc3MtY2hhcnNldC1pbXBv
cnQuY3NzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9lbmNvZGluZy9jc3MtY2hh
cnNldC1pbXBvcnQuY3NzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK0BjaGFyc2V0ICJr
b2k4LXIiOworQGltcG9ydCAiY3NzLWNoYXJzZXQtaW5oZXJpdC0yLmNzcyI7ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9l
bmNvZGluZy9jc3MtY2hhcnNldC1pbXBvcnQuY3NzCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUt
dHlwZQogICArIHRleHQvY3NzCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9lbmNvZGluZy9jc3Mt
Y2hhcnNldC1pbmhlcml0LTIuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZW5j
b2RpbmcvY3NzLWNoYXJzZXQtaW5oZXJpdC0yLmNzcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZW5jb2RpbmcvY3NzLWNoYXJzZXQtaW5oZXJpdC0yLmNzcwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyIEBACisvKiBrb2ktOCBlbmNvZGluZyAqLworI2R1bW15OmJlZm9yZSB7IGNv
bnRlbnQ6ICJTVfPz5VNTIjsgfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFz
dC9lbmNvZGluZy9jc3MtY2hhcnNldC1pbmhlcml0LTIuY3NzCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3Zu
Om1pbWUtdHlwZQogICArIHRleHQvY3NzCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9lbmNvZGlu
Zy9jc3MtY2hhcnNldC1pbmhlcml0LmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2VuY29kaW5nL2Nzcy1jaGFyc2V0LWluaGVyaXQuY3NzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9lbmNvZGluZy9jc3MtY2hhcnNldC1pbmhlcml0LmNzcwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyIEBACisvKiB3aW5kb3dzLTEyNTEgZW5jb2RpbmcgKi8KKyNkdW1teTpiZWZv
cmUgeyBjb250ZW50OiAiU1XR0cVTUyI7IH0KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRl
c3RzL2Zhc3QvZW5jb2RpbmcvY3NzLWNoYXJzZXQtaW5oZXJpdC5jc3MKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1l
OiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9jc3MKCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExp
bmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50
LmNwcAkocmV2aXNpb24gMTY1OTQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3NiwxMCBAQCB2b2lkIEhUTUxMaW5rRWxlbWVu
dDo6cHJvY2VzcygpCiAgICAgICAgICAgICBpZiAoIWlzQWx0ZXJuYXRlKCkpCiAgICAgICAgICAg
ICAgICAgZG9jdW1lbnQoKS0+YWRkUGVuZGluZ1NoZWV0KCk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgY2hzZXQgPSBnZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIp
LmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgICAgIFN0cmluZyBjaHNldCA9IGdldEF0dHJp
YnV0ZShjaGFyc2V0QXR0cik7CisgICAgICAgICAgICBpZiAoY2hzZXQuaXNFbXB0eSgpICYmIGRv
Y3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICAgICAgY2hzZXQgPSBkb2N1bWVudCgpLT5m
cmFtZSgpLT5lbmNvZGluZygpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV9jYWNo
ZWRTaGVldCkgewogICAgICAgICAgICAgICAgIGlmIChtX2xvYWRpbmcpIHsKICAgICAgICAgICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10851</attachid>
            <date>2006-09-30 13:19:43 -0700</date>
            <delta_ts>2006-09-30 13:49:25 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>11011r1_patch.txt</filename>
            <type>text/plain</type>
            <size>36788</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE2Njg4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDYtMDktMzAgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEBueXBvcC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGVzdCBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEwMTEKKyAgICAgICAgRXh0ZXJuYWwgQ1NTIGlzIHBhcnNlZCBhcyBpc28tODg1OS0xIGV2
ZW4gdGhvdWdoIHRoZSBtYWluIGRvY3VtZW50IGlzIHV0Zi04CisKKyAgICAgICAgKiBmYXN0L2Vu
Y29kaW5nL2Nzcy1jaGFyc2V0LWRlZmF1bHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2VuY29kaW5nL2Nzcy1jaGFyc2V0LWRlZmF1bHQueGh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZW5jb2RpbmcvY3NzLWNoYXJzZXQtaW1wb3J0LmNzczogQWRkZWQuCisgICAgICAg
ICogZmFzdC9lbmNvZGluZy9jc3MtY2hhcnNldC1pbmhlcml0LWlzby04ODU5LTUuY3NzOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2VuY29kaW5nL2Nzcy1jaGFyc2V0LWluaGVyaXQta29pLTguY3Nz
OiBBZGRlZC4KKwogMjAwNi0wOS0zMCAgUm9iIEJ1aXMgIDxidWlzQGtkZS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgZXNlaWRlbC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZW5jb2Rpbmcv
Y3NzLWNoYXJzZXQtZGVmYXVsdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9lbmNvZGluZy9jc3MtY2hhcnNldC1kZWZhdWx0LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZW5jb2RpbmcvY3NzLWNoYXJzZXQtZGVmYXVsdC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3QgZm9yIGJ1ZyAx
MTAxMTogRXh0ZXJuYWwgQ1NTIGlzIHBhcnNlZCBhcyBpc28tODg1OS0xIGV2ZW4gdGhvdWdoIHRo
ZSBtYWluIGRvY3VtZW50IGlzIHV0Zi04LgorCitTdHlsZXNoZWV0IDEgKGluaGVyaXQgZG9jdW1l
bnQgY2hhcnNldCB1c2luZyB4bWwtc3R5bGVzaGVldCBwcm9jZXNzaW5nIGluc3RydWN0aW9uKTog
U1XQodCh0JVTUworCitTdHlsZXNoZWV0IDIgKGluaGVyaXQgZG9jdW1lbnQgY2hhcnNldCB1c2lu
ZyBsaW5rKTogU1XQodCh0JVTUworCitTdHlsZXNoZWV0IDMgKGluaGVyaXQgcmVmZXJyaW5nIHN0
eWxlc2hlZXQgY2hhcnNldCk6IFNV0KHQodCVU1MKKworU3R5bGVzaGVldCA0IChpbmhlcml0IHJl
ZmVycmluZyBpbmxpbmUgc3R5bGVzaGVldCBjaGFyc2V0KTogU1XQodCh0JVTUworCisKClByb3Bl
cnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvZW5jb2RpbmcvY3NzLWNoYXJzZXQtZGVm
YXVsdC1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4
dC9wbGFpbgpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9lbmNvZGluZy9jc3MtY2hhcnNldC1kZWZhdWx0LnhodG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZW5jb2RpbmcvY3NzLWNoYXJzZXQtZGVmYXVsdC54aHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZW5jb2RpbmcvY3NzLWNoYXJzZXQtZGVmYXVs
dC54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorPD94bWwgdmVyc2lvbj0iMS4w
IiBlbmNvZGluZz0iaXNvLTg4NTktNSI/PgorPD94bWwtc3R5bGVzaGVldCBocmVmPSJjc3MtY2hh
cnNldC1pbmhlcml0LWlzby04ODU5LTUuY3NzPzEiIHR5cGU9InRleHQvY3NzIj8+Cis8IURPQ1RZ
UEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIgorICAgICAg
ICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5k
dGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+
CisgICAgPHRpdGxlPkNTUyBEZWZhdWx0IGNoYXJzZXQ8L3RpdGxlPgorICAgIDxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImNzcy1jaGFyc2V0LWluaGVyaXQtaXNv
LTg4NTktNS5jc3M/MiIvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9j
c3MiIGhyZWY9ImNzcy1jaGFyc2V0LWltcG9ydC5jc3MiLz4KKyAgICA8c3R5bGUgdHlwZT0idGV4
dC9jc3MiPgorICAgICAgICBAaW1wb3J0ICJjc3MtY2hhcnNldC1pbmhlcml0LWlzby04ODU5LTUu
Y3NzPzQiOworICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InRlc3QoKSI+Cis8
cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTAxMSI+YnVnIDExMDExPC9hPjoKK0V4dGVybmFsIENTUyBpcyBwYXJzZWQgYXMgaXNvLTg4
NTktMSBldmVuIHRob3VnaCB0aGUgbWFpbiBkb2N1bWVudCBpcyB1dGYtOC48L3A+CisKKzxwIGlk
PSJyZXMxIj5TdHlsZXNoZWV0IDEgKGluaGVyaXQgZG9jdW1lbnQgY2hhcnNldCB1c2luZyB4bWwt
c3R5bGVzaGVldCBwcm9jZXNzaW5nIGluc3RydWN0aW9uKTogPC9wPgorPHAgaWQ9InJlczIiPlN0
eWxlc2hlZXQgMiAoaW5oZXJpdCBkb2N1bWVudCBjaGFyc2V0IHVzaW5nIGxpbmspOiA8L3A+Cis8
cCBpZD0icmVzMyI+U3R5bGVzaGVldCAzIChpbmhlcml0IHJlZmVycmluZyBzdHlsZXNoZWV0IGNo
YXJzZXQpOiA8L3A+Cis8cCBpZD0icmVzNCI+U3R5bGVzaGVldCA0IChpbmhlcml0IHJlZmVycmlu
ZyBpbmxpbmUgc3R5bGVzaGVldCBjaGFyc2V0KTogPC9wPgorCis8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCI+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gdGVzdCgpIHsKKyAgdHJ5
IHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzMSIpLmlubmVySFRNTCArPSBkb2N1
bWVudC5zdHlsZVNoZWV0c1swXS5jc3NSdWxlc1swXS5zdHlsZS5jb250ZW50OworCisgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlczIiKS5pbm5lckhUTUwgKz0gZG9jdW1lbnQuc3R5bGVT
aGVldHNbMV0uY3NzUnVsZXNbMF0uc3R5bGUuY29udGVudDsKKyAgICAKKyAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicmVzMyIpLmlubmVySFRNTCArPSBkb2N1bWVudC5zdHlsZVNoZWV0c1sy
XS5jc3NSdWxlc1sxXS5zdHlsZVNoZWV0LmNzc1J1bGVzWzBdLnN0eWxlLmNvbnRlbnQ7CisKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzNCIpLmlubmVySFRNTCArPSBkb2N1bWVudC5z
dHlsZVNoZWV0c1szXS5jc3NSdWxlc1swXS5zdHlsZVNoZWV0LmNzc1J1bGVzWzBdLnN0eWxlLmNv
bnRlbnQ7CisgIH0gY2F0Y2ggKGV4KSB7CisgICAgYWxlcnQoZXgudG9TdHJpbmcoKSk7CisgIH0K
K30KKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBM
YXlvdXRUZXN0cy9mYXN0L2VuY29kaW5nL2Nzcy1jaGFyc2V0LWRlZmF1bHQueGh0bWwKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC94bWwKCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2VuY29kaW5nL2Nzcy1jaGFyc2V0LWltcG9ydC5jc3MKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9lbmNvZGluZy9jc3MtY2hhcnNldC1pbXBvcnQuY3NzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9lbmNvZGluZy9jc3MtY2hhcnNldC1pbXBvcnQuY3NzCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK0BjaGFyc2V0ICJrb2k4LXIiOworQGltcG9ydCAi
Y3NzLWNoYXJzZXQtaW5oZXJpdC1rb2ktOC5jc3MiOwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5
b3V0VGVzdHMvZmFzdC9lbmNvZGluZy9jc3MtY2hhcnNldC1pbXBvcnQuY3NzCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvY3NzCgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9lbmNvZGluZy9jc3MtY2hhcnNldC1pbmhlcml0LWlzby04ODU5LTUuY3NzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZW5jb2RpbmcvY3NzLWNoYXJzZXQtaW5oZXJpdC1pc28tODg1
OS01LmNzcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZW5jb2RpbmcvY3NzLWNo
YXJzZXQtaW5oZXJpdC1pc28tODg1OS01LmNzcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBA
CisvKiBpc28tODg1OS01IGVuY29kaW5nICovCisjZHVtbXk6YmVmb3JlIHsgY29udGVudDogIlNV
wcG1U1MiOyB9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2VuY29kaW5n
L2Nzcy1jaGFyc2V0LWluaGVyaXQtaXNvLTg4NTktNS5jc3MKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46
bWltZS10eXBlCiAgICsgdGV4dC9jc3MKCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2VuY29kaW5n
L2Nzcy1jaGFyc2V0LWluaGVyaXQta29pLTguY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvZW5jb2RpbmcvY3NzLWNoYXJzZXQtaW5oZXJpdC1rb2ktOC5jc3MJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2VuY29kaW5nL2Nzcy1jaGFyc2V0LWluaGVyaXQta29pLTgu
Y3NzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKKy8qIGtvaS04IGVuY29kaW5nICovCisj
ZHVtbXk6YmVmb3JlIHsgY29udGVudDogIlNV8/PlU1MiOyB9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBMYXlvdXRUZXN0cy9mYXN0L2VuY29kaW5nL2Nzcy1jaGFyc2V0LWluaGVyaXQta29pLTguY3Nz
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvY3NzCgpJbmRleDogV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE2Njg4KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5
MiBAQAorMjAwNi0wOS0zMCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQG55cG9wLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAxMQorICAgICAgICBFeHRlcm5hbCBDU1Mg
aXMgcGFyc2VkIGFzIGlzby04ODU5LTEgZXZlbiB0aG91Z2ggdGhlIG1haW4gZG9jdW1lbnQgaXMg
dXRmLTgKKworICAgICAgICBUZXN0OiBmYXN0L2VuY29kaW5nL2Nzcy1jaGFyc2V0LWRlZmF1bHQu
eGh0bWwKKworICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZUNsaWVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VDbGllbnQ6OnNldENTU1N0eWxlU2hlZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VDbGllbnQ6OnNldFhTTFN0eWxlU2hlZXQpOgor
ICAgICAgICBEaXZpZGVkIHNldFN0eWxlU2hlZXQgaW50byBzZXRDU1NTdHlsZVNoZWV0IGFuZCBz
ZXRYU0xTdHlsZVNoZWV0LiBUaGUgZm9ybWVyCisgICAgICAgIHRha2VzIGFuIGFkZGl0aW9uYWwg
Y2hhcnNldCBwYXJhbWV0ZXIsIHRvIGJlIHBhc3NlZCB0byBDU1NTdHlsZVNoZWV0IGNvbnN0cnVj
dG9yLgorCisgICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTSW1wb3J0UnVsZTo6c2V0Q1NTU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NJbXBvcnRSdWxlOjppbnNlcnRlZEludG9QYXJlbnQpOiBEZWZhdWx0IHRvIHBhcmVudCBzdHls
ZXNoZWV0J3MgY2hhcnNldC4KKyAgICAgICAgKiBjc3MvQ1NTSW1wb3J0UnVsZS5oOgorCisgICAg
ICAgICogY3NzL0NTU1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
aGVldDo6Q1NTU3R5bGVTaGVldCk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2hlZXQuaDoKKyAg
ICAgICAgQWRkZWQgYW4gbV9jaGFyc2V0IG1lbWJlciB0byBiZSB1c2VkIHdoZW4gbG9hZGluZyBj
aGlsZCBzdHlsZXNoZWV0cy4gUmVtb3ZlZCBhbiB1bnVzZWQgbV9pbXBsaWNpdAorICAgICAgICBt
ZW1iZXIuIENoYW5nZWQgc29tZSBTdHJpbmcgcGFyYW1ldGVycyB0byBjb25zdCBTdHJpbmcmLgor
CisgICAgICAgICogY3NzL1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVT
aGVldDo6U3R5bGVTaGVldCk6CisgICAgICAgICogY3NzL1N0eWxlU2hlZXQuaDoKKyAgICAgICAg
Q2hhbmdlZCBzb21lIFN0cmluZyBwYXJhbWV0ZXJzIHRvIGNvbnN0IFN0cmluZyYuIFJlbW92ZWQg
YW4gdW51c2VkIChldmVuIHVuaW1wbGVtZW50ZWQpIGNvbnN0cnVjdG9yLgorCisgICAgICAgICog
Y3NzL1N0eWxlU2hlZXRMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRMaXN0
OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldExpc3Q6Oml0ZW0pOgorICAg
ICAgICAqIGNzcy9TdHlsZVNoZWV0TGlzdC5oOgorICAgICAgICBTcGVjaWFsLWNhc2luZyBpbXBs
aWNpdCBzdHlsZXNoZWV0cyBzZWVtZWQgdG8gYmUgZGVhZCBjb2RlLCByZW1vdmVkLgorCisgICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRD
U1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZVNl
bGVjdG9yKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgUmVuYW1lZCBzZXRT
dHlsZVNoZWV0KCkgdG8gc2V0Q1NTU3R5bGVTaGVldCgpLgorCisgICAgICAgICogZG9tL1Byb2Nl
c3NpbmdJbnN0cnVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb246OmNoZWNrU3R5bGVTaGVldCk6IFBhc3MgYSBjb3JyZWN0IGNoYXJzZXQgdG8gcmVxdWVz
dENTU1N0eWxlU2hlZXQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlv
bjo6c2V0Q1NTU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb246OnNldFhTTFN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0lu
c3RydWN0aW9uOjpwYXJzZVN0eWxlU2hlZXQpOgorICAgICAgICAqIGRvbS9Qcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24uaDoKKworICAgICAgICAqIGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6cHJvY2Vzcyk6IERlZmF1bHQgdG8gZG9jdW1l
bnQgZW5jb2RpbmcgaWYgYSBjaGFyc2V0IGF0dHJpYnV0ZSAKKyAgICAgICAgaXMgbm90IHNwZWNp
ZmllZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6c2V0Q1NTU3R5bGVTaGVl
dCk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuaDoKKworICAgICAgICAqIGh0bWwv
SFRNTFN0eWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50
OjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTdHlsZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQp
OgorICAgICAgICBJbmhlcml0IFVSTCBhbmQgY2hhcnNldCBmcm9tIHRoZSBkb2N1bWVudC4KKwor
ICAgICAgICAqIGxvYWRlci9DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6cmVx
dWVzdENTU1N0eWxlU2hlZXQpOgorICAgICAgICAqIGxvYWRlci9DYWNoZS5oOgorICAgICAgICBB
ZGp1c3QgZm9yIHNldFN0eWxlU2hlZXQoKSByZW5hbWluZy4KKworICAgICAgICAqIGxvYWRlci9D
YWNoZWRDU1NTdHlsZVNoZWV0Lmg6IFJlbW92ZWQgYW4gdW51c2VkIGNvbnN0cnVjdG9yLgorICAg
ICAgICAqIGxvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZENTU1N0eWxlU2hlZXQ6OnJlZik6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRDU1NT
dHlsZVNoZWV0OjpkZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0
OjpjaGVja05vdGlmeSk6CisgICAgICAgIFBhc3MgdGhlIGVuY29kaW5nIHRvIHNldENTU1N0eWxl
U2hlZXQoKS4KKworICAgICAgICAqIGxvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZFhTTFN0eWxlU2hlZXQ6OnJlZik6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRYU0xTdHlsZVNoZWV0OjpjaGVja05vdGlmeSk6CisgICAgICAgICogbG9hZGVy
L0RvY0xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2NMb2FkZXI6OnJlcXVlc3RDU1NT
dHlsZVNoZWV0KToKKyAgICAgICAgKiBsb2FkZXIvRG9jTG9hZGVyLmg6CisgICAgICAgICogcGFn
ZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVc2VyU3R5bGVTaGVldExvYWRlcjo6VXNl
clN0eWxlU2hlZXRMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VXNlclN0eWxlU2hlZXRMb2Fk
ZXI6OnNldENTU1N0eWxlU2hlZXQpOgorICAgICAgICAqIHhtbC9YU0xJbXBvcnRSdWxlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlhTTEltcG9ydFJ1bGU6OnNldFhTTFN0eWxlU2hlZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6WFNMSW1wb3J0UnVsZTo6bG9hZFNoZWV0KToKKyAgICAgICAgKiB4bWwv
WFNMSW1wb3J0UnVsZS5oOgorICAgICAgICBBZGp1c3QgZm9yIHNldFN0eWxlU2hlZXQoKSByZW5h
bWluZy4KKwogMjAwNi0wOS0zMCAgUm9iIEJ1aXMgIDxidWlzQGtkZS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgZXNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCShyZXZpc2lvbiAx
NjY4NykKKysrIFdlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NiwxMSArNTYsMTEgQEAgQ1NTSW1wb3J0UnVsZTo6fkNTU0ltcG9ydFJ1bGUoKQogICAgICAg
ICBtX2NhY2hlZFNoZWV0LT5kZXJlZih0aGlzKTsKIH0KIAotdm9pZCBDU1NJbXBvcnRSdWxlOjpz
ZXRTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyAmdXJsLCBjb25zdCBTdHJpbmcgJnNoZWV0KQordm9p
ZCBDU1NJbXBvcnRSdWxlOjpzZXRDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyAmdXJsLCBjb25z
dCBTdHJpbmcmIGNoYXJzZXQsIGNvbnN0IFN0cmluZyAmc2hlZXQpCiB7CiAgICAgaWYgKG1fc3R5
bGVTaGVldCkKICAgICAgICAgbV9zdHlsZVNoZWV0LT5zZXRQYXJlbnQoMCk7Ci0gICAgbV9zdHls
ZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQodGhpcywgdXJsKTsKKyAgICBtX3N0eWxlU2hlZXQg
PSBuZXcgQ1NTU3R5bGVTaGVldCh0aGlzLCB1cmwsIGNoYXJzZXQpOwogCiAgICAgQ1NTU3R5bGVT
aGVldCAqcGFyZW50ID0gcGFyZW50U3R5bGVTaGVldCgpOwogICAgIG1fc3R5bGVTaGVldC0+cGFy
c2VTdHJpbmcoc2hlZXQsICFwYXJlbnQgfHwgcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkpOwpA
QCAtOTgsOCArOTgsNyBAQCB2b2lkIENTU0ltcG9ydFJ1bGU6Omluc2VydGVkSW50b1BhcmVudCgp
CiAgICAgICAgIGlmIChhYnNIcmVmID09IHBhcmVudC0+YmFzZVVSTCgpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIC8vICMjIyBwYXNzIGNvcnJlY3QgY2hhcnNldCBoZXJlISEKLSAg
ICBtX2NhY2hlZFNoZWV0ID0gZG9jTG9hZGVyLT5yZXF1ZXN0U3R5bGVTaGVldChhYnNIcmVmLCBT
dHJpbmcoKSk7CisgICAgbV9jYWNoZWRTaGVldCA9IGRvY0xvYWRlci0+cmVxdWVzdENTU1N0eWxl
U2hlZXQoYWJzSHJlZiwgcGFyZW50U2hlZXQtPmNoYXJzZXQoKSk7CiAgICAgaWYgKG1fY2FjaGVk
U2hlZXQpIHsKICAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgbV9jYWNoZWRTaGVl
dC0+cmVmKHRoaXMpOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuaAkocmV2aXNpb24gMTY2ODcpCisrKyBX
ZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcg
QEAgcHVibGljOgogICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CiAKICAgICAvLyBmcm9tIENh
Y2hlZFJlc291cmNlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlU2hlZXQoY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2hlZXQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRD
U1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGNv
bnN0IFN0cmluZyYgc2hlZXQpOwogCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1BhcmVu
dCgpOwogCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMTY2ODcpCisrKyBXZWJD
b3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKIAorI2lu
Y2x1ZGUgIkNTU0NoYXJzZXRSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgogI2lu
Y2x1ZGUgIkNTU05hbWVzcGFjZS5oIgogI2luY2x1ZGUgImNzc3BhcnNlci5oIgpAQCAtMzIsMjcg
KzMzLDI3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ1NTU3R5bGVTaGVldDo6Q1NTU3R5
bGVTaGVldChDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCwgU3RyaW5nIGhyZWYpCitDU1NTdHls
ZVNoZWV0OjpDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0LCBjb25zdCBT
dHJpbmcmIGhyZWYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKICAgICA6IFN0eWxlU2hlZXQocGFy
ZW50U2hlZXQsIGhyZWYpCiAgICAgLCBtX2RvYyhwYXJlbnRTaGVldCA/IHBhcmVudFNoZWV0LT5k
b2MoKSA6IDApCi0gICAgLCBtX2ltcGxpY2l0KGZhbHNlKQogICAgICwgbV9uYW1lc3BhY2VzKDAp
CisgICAgLCBtX2NoYXJzZXQoY2hhcnNldCkKIHsKIH0KIAotQ1NTU3R5bGVTaGVldDo6Q1NTU3R5
bGVTaGVldChOb2RlICpwYXJlbnROb2RlLCBTdHJpbmcgaHJlZiwgYm9vbCBfaW1wbGljaXQpCitD
U1NTdHlsZVNoZWV0OjpDU1NTdHlsZVNoZWV0KE5vZGUgKnBhcmVudE5vZGUsIGNvbnN0IFN0cmlu
ZyYgaHJlZiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQogICAgIDogU3R5bGVTaGVldChwYXJlbnRO
b2RlLCBocmVmKQogICAgICwgbV9kb2MocGFyZW50Tm9kZS0+ZG9jdW1lbnQoKSkKLSAgICAsIG1f
aW1wbGljaXQoX2ltcGxpY2l0KSAKICAgICAsIG1fbmFtZXNwYWNlcygwKQorICAgICwgbV9jaGFy
c2V0KGNoYXJzZXQpCiB7CiB9CiAKLUNTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoQ1NTUnVs
ZSAqb3duZXJSdWxlLCBTdHJpbmcgaHJlZikKK0NTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQo
Q1NTUnVsZSAqb3duZXJSdWxlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFN0cmluZyYgY2hh
cnNldCkKICAgICA6IFN0eWxlU2hlZXQob3duZXJSdWxlLCBocmVmKQogICAgICwgbV9kb2MoMCkK
LSAgICAsIG1faW1wbGljaXQoZmFsc2UpCiAgICAgLCBtX25hbWVzcGFjZXMoMCkKKyAgICAsIG1f
Y2hhcnNldChjaGFyc2V0KQogewogfQogCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiAx
NjY4NykKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksOSArMzksOSBAQCB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogY2xhc3MgQ1NTU3R5bGVT
aGVldCA6IHB1YmxpYyBTdHlsZVNoZWV0CiB7CiBwdWJsaWM6Ci0gICAgQ1NTU3R5bGVTaGVldChO
b2RlKiBwYXJlbnROb2RlLCBTdHJpbmcgaHJlZiA9IFN0cmluZygpLCBib29sIF9pbXBsaWNpdCA9
IGZhbHNlKTsKLSAgICBDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0LCBT
dHJpbmcgaHJlZiA9IFN0cmluZygpKTsKLSAgICBDU1NTdHlsZVNoZWV0KENTU1J1bGUqIG93bmVy
UnVsZSwgU3RyaW5nIGhyZWYgPSBTdHJpbmcoKSk7CisgICAgQ1NTU3R5bGVTaGVldChOb2RlKiBw
YXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYgPSBTdHJpbmcoKSwgY29uc3QgU3RyaW5nJiBj
aGFyc2V0ID0gU3RyaW5nKCkpOworICAgIENTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogcGFy
ZW50U2hlZXQsIGNvbnN0IFN0cmluZyYgaHJlZiA9IFN0cmluZygpLCBjb25zdCBTdHJpbmcmIGNo
YXJzZXQgPSBTdHJpbmcoKSk7CisgICAgQ1NTU3R5bGVTaGVldChDU1NSdWxlKiBvd25lclJ1bGUs
IGNvbnN0IFN0cmluZyYgaHJlZiA9IFN0cmluZygpLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQgPSBT
dHJpbmcoKSk7CiAgICAgCiAgICAgfkNTU1N0eWxlU2hlZXQoKTsKICAgICAKQEAgLTY4LDEyICs2
OCwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrTG9hZGVkKCk7CiAgICAgRG9j
TG9hZGVyKiBkb2NMb2FkZXIoKTsKICAgICBEb2N1bWVudCogZG9jKCkgeyByZXR1cm4gbV9kb2M7
IH0KLSAgICBib29sIGltcGxpY2l0KCkgeyByZXR1cm4gbV9pbXBsaWNpdDsgfQorICAgIGNvbnN0
IFN0cmluZyYgY2hhcnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcnNldDsgfQogCiBwcm90ZWN0
ZWQ6CiAgICAgRG9jdW1lbnQqIG1fZG9jOwotICAgIGJvb2wgbV9pbXBsaWNpdDsKICAgICBDU1NO
YW1lc3BhY2UqIG1fbmFtZXNwYWNlczsKKyAgICBTdHJpbmcgbV9jaGFyc2V0OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvY3NzL1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvY3NzL1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxNjY4NykKKysrIFdlYkNv
cmUvY3NzL1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3R5bGVTaGVldDo6U3R5bGVTaGVldChTdHlsZVNoZWV0
KiBwYXJlbnRTaGVldCwgU3RyaW5nIGhyZWYpCitTdHlsZVNoZWV0OjpTdHlsZVNoZWV0KFN0eWxl
U2hlZXQqIHBhcmVudFNoZWV0LCBjb25zdCBTdHJpbmcmIGhyZWYpCiAgICAgOiBTdHlsZUxpc3Qo
cGFyZW50U2hlZXQpCiAgICAgLCBtX3BhcmVudE5vZGUoMCkKICAgICAsIG1fc3RySHJlZihocmVm
KQpAQCAtMzUsNyArMzUsNyBAQCBTdHlsZVNoZWV0OjpTdHlsZVNoZWV0KFN0eWxlU2hlZXQqIHBh
cmVuCiB9CiAKIAotU3R5bGVTaGVldDo6U3R5bGVTaGVldChOb2RlKiBwYXJlbnROb2RlLCBTdHJp
bmcgaHJlZikKK1N0eWxlU2hlZXQ6OlN0eWxlU2hlZXQoTm9kZSogcGFyZW50Tm9kZSwgY29uc3Qg
U3RyaW5nJiBocmVmKQogICAgIDogU3R5bGVMaXN0KDApCiAgICAgLCBtX3BhcmVudE5vZGUocGFy
ZW50Tm9kZSkKICAgICAsIG1fc3RySHJlZihocmVmKQpAQCAtNDMsNyArNDMsNyBAQCBTdHlsZVNo
ZWV0OjpTdHlsZVNoZWV0KE5vZGUqIHBhcmVudE5vZGUsCiB7CiB9CiAKLVN0eWxlU2hlZXQ6OlN0
eWxlU2hlZXQoU3R5bGVCYXNlKiBvd25lciwgU3RyaW5nIGhyZWYpCitTdHlsZVNoZWV0OjpTdHls
ZVNoZWV0KFN0eWxlQmFzZSogb3duZXIsIGNvbnN0IFN0cmluZyYgaHJlZikKICAgICA6IFN0eWxl
TGlzdChvd25lcikKICAgICAsIG1fcGFyZW50Tm9kZSgwKQogICAgICwgbV9zdHJIcmVmKGhyZWYp
CkluZGV4OiBXZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9j
c3MvU3R5bGVTaGVldC5oCShyZXZpc2lvbiAxNjY4NykKKysrIFdlYkNvcmUvY3NzL1N0eWxlU2hl
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDkgQEAgY2xhc3MgTWVkaWFMaXN0Owog
CiBjbGFzcyBTdHlsZVNoZWV0IDogcHVibGljIFN0eWxlTGlzdCB7CiBwdWJsaWM6Ci0gICAgU3R5
bGVTaGVldChOb2RlKiBvd25lck5vZGUsIFN0cmluZyBocmVmID0gU3RyaW5nKCkpOwotICAgIFN0
eWxlU2hlZXQoU3R5bGVTaGVldCogcGFyZW50U2hlZXQsIFN0cmluZyBocmVmID0gU3RyaW5nKCkp
OwotICAgIFN0eWxlU2hlZXQoU3R5bGVCYXNlKiBvd25lciwgU3RyaW5nIGhyZWYgPSBTdHJpbmco
KSk7Ci0gICAgU3R5bGVTaGVldChDYWNoZWRDU1NTdHlsZVNoZWV0KiwgU3RyaW5nIGhyZWYgPSBT
dHJpbmcoKSk7CisgICAgU3R5bGVTaGVldChOb2RlKiBvd25lck5vZGUsIGNvbnN0IFN0cmluZyYg
aHJlZiA9IFN0cmluZygpKTsKKyAgICBTdHlsZVNoZWV0KFN0eWxlU2hlZXQqIHBhcmVudFNoZWV0
LCBjb25zdCBTdHJpbmcmIGhyZWYgPSBTdHJpbmcoKSk7CisgICAgU3R5bGVTaGVldChTdHlsZUJh
c2UqIG93bmVyLCBjb25zdCBTdHJpbmcmIGhyZWYgPSBTdHJpbmcoKSk7CiAgICAgdmlydHVhbCB+
U3R5bGVTaGVldCgpOwogCiAgICAgdmlydHVhbCBib29sIGlzU3R5bGVTaGVldCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAJKHJldmlzaW9uIDE2Njg3
KQorKysgV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OCwyOCArNDgsMTIgQEAgdm9pZCBTdHlsZVNoZWV0TGlzdDo6cmVtb3ZlKFN0eWxlU2hlZXQqIAog
CiB1bnNpZ25lZCBTdHlsZVNoZWV0TGlzdDo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICAvLyBoYWNr
IHNvIGltcGxpY2l0IEJPRFkgc3R5bGVzaGVldHMgZG9uJ3QgZ2V0IGNvdW50ZWQgaGVyZQotICAg
IHVuc2lnbmVkIGwgPSAwOwotICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8U3R5bGVTaGVl
dD4gaXQoc3R5bGVTaGVldHMpOwotICAgIGZvciAoOyBpdC5jdXJyZW50KCk7ICsraXQpIHsKLSAg
ICAgICAgaWYgKCFpdC5jdXJyZW50KCktPmlzQ1NTU3R5bGVTaGVldCgpIHx8ICFzdGF0aWNfY2Fz
dDxDU1NTdHlsZVNoZWV0Kj4oaXQuY3VycmVudCgpKS0+aW1wbGljaXQoKSkKLSAgICAgICAgICAg
IGwrKzsKLSAgICB9Ci0gICAgcmV0dXJuIGw7CisgICAgcmV0dXJuIHN0eWxlU2hlZXRzLmNvdW50
KCk7CiB9CiAKLVN0eWxlU2hlZXQgKlN0eWxlU2hlZXRMaXN0OjppdGVtICh1bnNpZ25lZCBpbmRl
eCkKK1N0eWxlU2hlZXQgKlN0eWxlU2hlZXRMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KQogewot
ICAgIHVuc2lnbmVkIGwgPSAwOwotICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8U3R5bGVT
aGVldD4gaXQoc3R5bGVTaGVldHMpOwotICAgIGZvciAoOyBpdC5jdXJyZW50KCk7ICsraXQpIHsK
LSAgICAgICAgaWYgKCFpdC5jdXJyZW50KCktPmlzQ1NTU3R5bGVTaGVldCgpIHx8ICFzdGF0aWNf
Y2FzdDxDU1NTdHlsZVNoZWV0Kj4oaXQuY3VycmVudCgpKS0+aW1wbGljaXQoKSkgewotICAgICAg
ICAgICAgaWYgKGwgPT0gaW5kZXgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGl0LmN1cnJlbnQo
KTsKLSAgICAgICAgICAgIGwrKzsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gaW5kZXggPCBsZW5ndGgoKSA/IHN0eWxlU2hlZXRzLmF0KGluZGV4KSA6IDA7CiB9
CiAKIH0KSW5kZXg6IFdlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuaAkocmV2aXNpb24gMTY2ODcpCisrKyBXZWJDb3Jl
L2Nzcy9TdHlsZVNoZWV0TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBAIGNs
YXNzIFN0eWxlU2hlZXRMaXN0IDogcHVibGljIFNoYXJlZDxTdHkKIHB1YmxpYzoKICAgICB+U3R5
bGVTaGVldExpc3QoKTsKIAotICAgIC8vIHRoZSBmb2xsb3dpbmcgdHdvIGlnbm9yZSBpbXBsaWNp
dCBzdHlsZXNoZWV0cwogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIFN0eWxlU2hl
ZXQqIGl0ZW0odW5zaWduZWQgaW5kZXgpOwogCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNjY4
NykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3NCw5
ICsxMzc0LDkgQEAgdm9pZCBEb2N1bWVudDo6c2V0VVJMKGNvbnN0IERlcHJlY2F0ZWRTdAogICAg
ICAgICBtX3N0eWxlU2VsZWN0b3ItPnNldEVuY29kZWRVUkwobV91cmwpOwogfQogCi12b2lkIERv
Y3VtZW50OjpzZXRTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyAmdXJsLCBjb25zdCBTdHJpbmcgJnNo
ZWV0KQordm9pZCBEb2N1bWVudDo6c2V0Q1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcgJnVybCwg
Y29uc3QgU3RyaW5nJiBjaGFyc2V0LCBjb25zdCBTdHJpbmcgJnNoZWV0KQogewotICAgIG1fc2hl
ZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCh0aGlzLCB1cmwpOworICAgIG1fc2hlZXQgPSBuZXcgQ1NT
U3R5bGVTaGVldCh0aGlzLCB1cmwsIGNoYXJzZXQpOwogICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5n
KHNoZWV0KTsKICAgICBtX2xvYWRpbmdTaGVldCA9IGZhbHNlOwogCkBAIC0xODU1LDcgKzE4NTUs
NyBAQCB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKIAogICAgICAgICAgICAg
ICAgICAgICBDU1NTdHlsZVNoZWV0ICpjc3NTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KHRoaXMp
OwogICAgICAgICAgICAgICAgICAgICBjc3NTaGVldC0+cGFyc2VTdHJpbmcoc2hlZXRUZXh0KTsK
LSAgICAgICAgICAgICAgICAgICAgcGktPnNldFN0eWxlU2hlZXQoY3NzU2hlZXQpOworICAgICAg
ICAgICAgICAgICAgICBwaS0+c2V0Q1NTU3R5bGVTaGVldChjc3NTaGVldCk7CiAgICAgICAgICAg
ICAgICAgICAgIHNoZWV0ID0gY3NzU2hlZXQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxNjY4NykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzMSw3ICszMzEsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5n
IGNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYpOwogCiAgICAgLy8gZnJvbSBjYWNoZWRPYmplY3RD
bGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgU3RyaW5nJiBzaGVldFN0cik7CisgICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hl
ZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgY29uc3QgU3RyaW5n
JiBzaGVldFN0cik7CiAgICAgdm9pZCBzZXRVc2VyU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHNo
ZWV0KTsKICAgICBjb25zdCBTdHJpbmcmIHVzZXJTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4g
bV91c2Vyc2hlZXQ7IH0KICAgICB2b2lkIHNldFByaW50U3R5bGVTaGVldChjb25zdCBTdHJpbmcm
IHNoZWV0KSB7IG1fcHJpbnRTaGVldCA9IHNoZWV0OyB9CkluZGV4OiBXZWJDb3JlL2RvbS9Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Byb2Nlc3Np
bmdJbnN0cnVjdGlvbi5jcHAJKHJldmlzaW9uIDE2Njg3KQorKysgV2ViQ29yZS9kb20vUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiWFNMU3R5bGVTaGVl
dC5oIgogI2luY2x1ZGUgIlhNTFRva2VuaXplci5oIiAvLyBmb3IgcGFyc2VBdHRyaWJ1dGVzKCkK
IApAQCAtMTQ2LDggKzE0Nyw3IEBAIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0
eWxlU2gKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAvLyAjIyMgc29tZSB2YWxpZGF0aW9uIG9uIHRoZSBVUkw/Ci0gICAgICAg
ICAgICAgICAgLy8gIyMjIEZJWE1FIGNoYXJzZXQKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
c29tZSB2YWxpZGF0aW9uIG9uIHRoZSBVUkw/CiAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50
KCktPmZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkUGVuZGluZ1NoZWV0KCk7CkBAIC0xNTgs
NyArMTU4LDEzIEBAIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2gKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5kb2NMb2Fk
ZXIoKS0+cmVxdWVzdFhTTFN0eWxlU2hlZXQoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoaHJlZikp
OwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAg
bV9jYWNoZWRTaGVldCA9IGRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0U3R5bGVTaGVl
dChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChocmVmKSwgU3RyaW5nKCkpOworICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY2hhcnNldCA9IGF0dHJz
LmdldCgiY2hhcnNldCIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJzZXQuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSBkb2N1bWVudCgp
LT5mcmFtZSgpLT5lbmNvZGluZygpOworCisgICAgICAgICAgICAgICAgICAgICAgICBtX2NhY2hl
ZFNoZWV0ID0gZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RDU1NTdHlsZVNoZWV0KGRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKGhyZWYpLCBjaGFyc2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAobV9jYWNoZWRTaGVldCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQtPnJlZiggdGhpcyApOwogI2lmIFhTTFRfU1VQUE9S
VApAQCAtMTg4LDE0ICsxOTQsMjQgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnNoZWV0
TG9hZGVkKAogICAgICAgICBkb2N1bWVudCgpLT5zdHlsZXNoZWV0TG9hZGVkKCk7CiB9CiAKLXZv
aWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpzZXRTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyAmdXJs
LCBjb25zdCBTdHJpbmcgJnNoZWV0KQordm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnNldENT
U1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nICZ1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgY29u
c3QgU3RyaW5nICZzaGVldCkKIHsKKyAgICBBU1NFUlQoIW1faXNYU0wpOworICAgIG1fc2hlZXQg
PSBuZXcgQ1NTU3R5bGVTaGVldCh0aGlzLCB1cmwsIGNoYXJzZXQpOworICAgIHBhcnNlU3R5bGVT
aGVldChzaGVldCk7Cit9CisKICNpZiBYU0xUX1NVUFBPUlQKLSAgICBpZiAobV9pc1hTTCkKLSAg
ICAgICAgbV9zaGVldCA9IG5ldyBYU0xTdHlsZVNoZWV0KHRoaXMsIHVybCk7Ci0gICAgZWxzZQor
dm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnNldFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5n
ICZ1cmwsIGNvbnN0IFN0cmluZyAmc2hlZXQpCit7CisgICAgQVNTRVJUKG1faXNYU0wpOworICAg
IG1fc2hlZXQgPSBuZXcgWFNMU3R5bGVTaGVldCh0aGlzLCB1cmwpOworICAgIHBhcnNlU3R5bGVT
aGVldChzaGVldCk7Cit9CiAjZW5kaWYKLSAgICAgICAgbV9zaGVldCA9IG5ldyBDU1NTdHlsZVNo
ZWV0KHRoaXMsIHVybCk7CisKK3ZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpwYXJzZVN0eWxl
U2hlZXQoY29uc3QgU3RyaW5nICZzaGVldCkKK3sKICAgICBtX3NoZWV0LT5wYXJzZVN0cmluZyhz
aGVldCk7CiAgICAgaWYgKG1fY2FjaGVkU2hlZXQpCiAgICAgICAgIG1fY2FjaGVkU2hlZXQtPmRl
cmVmKHRoaXMpOwpAQCAtMjE4LDggKzIzNCwxMCBAQCBTdHJpbmcgUHJvY2Vzc2luZ0luc3RydWN0
aW9uOjp0b1N0cmluZygpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb246OnNldFN0eWxlU2hlZXQoU3R5bGVTaGVldCogc2hlZXQpCit2b2lkIFByb2Nl
c3NpbmdJbnN0cnVjdGlvbjo6c2V0Q1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCkK
IHsKKyAgICBBU1NFUlQoIW1fY2FjaGVkU2hlZXQpOworICAgIEFTU0VSVCghbV9sb2FkaW5nKTsK
ICAgICBtX3NoZWV0ID0gc2hlZXQ7CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVj
dGlvbi5oCShyZXZpc2lvbiAxNjY4NykKKysrIFdlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVj
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFN0eWxlU2hlZXQ7CitjbGFzcyBDU1NTdHlsZVNoZWV0OwogCiBjbGFzcyBQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24gOiBwdWJsaWMgQ29udGFpbmVyTm9kZSwgcHJpdmF0ZSBDYWNo
ZWRSZXNvdXJjZUNsaWVudAogewpAQCAtNTUsOCArNTYsMTEgQEAgcHVibGljOgogICAgIFN0cmlu
ZyBsb2NhbEhyZWYoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsSHJlZi5nZXQoKTsgfQogICAgIFN0
eWxlU2hlZXQqIHNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldC5nZXQoKTsgfQogICAgIGJv
b2wgY2hlY2tTdHlsZVNoZWV0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlU2hlZXQoY29u
c3QgU3RyaW5nJiBVUkwsIGNvbnN0IFN0cmluZyYgc2hlZXQpOwotICAgIHZvaWQgc2V0U3R5bGVT
aGVldChTdHlsZVNoZWV0Kik7CisgICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29u
c3QgU3RyaW5nJiBVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgY29uc3QgU3RyaW5nJiBzaGVl
dCk7CisjaWYgWFNMVF9TVVBQT1JUCisgICAgdmlydHVhbCB2b2lkIHNldFhTTFN0eWxlU2hlZXQo
Y29uc3QgU3RyaW5nJiBVUkwsIGNvbnN0IFN0cmluZyYgc2hlZXQpOworI2VuZGlmCisgICAgdm9p
ZCBzZXRDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqKTsKICAgICBib29sIGlzTG9hZGluZygp
IGNvbnN0OwogICAgIHZvaWQgc2hlZXRMb2FkZWQoKTsKICAgICB2aXJ0dWFsIFN0cmluZyB0b1N0
cmluZygpIGNvbnN0OwpAQCAtNjYsNiArNzAsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0
ZToKKyAgICB2b2lkIHBhcnNlU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHNoZWV0KTsKKwogICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiBtX3RhcmdldDsKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9k
YXRhOwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2xvY2FsSHJlZjsKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
TGlua0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjY4NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGlu
a0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDEwIEBAIHZvaWQgSFRN
TExpbmtFbGVtZW50Ojpwcm9jZXNzKCkKICAgICAgICAgICAgIGlmICghaXNBbHRlcm5hdGUoKSkK
ICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hlZXQoKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyBjaHNldCA9IGdldEF0dHJpYnV0ZShj
aGFyc2V0QXR0cikuZGVwcmVjYXRlZFN0cmluZygpOworICAgICAgICAgICAgU3RyaW5nIGNoc2V0
ID0gZ2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKTsKKyAgICAgICAgICAgIGlmIChjaHNldC5pc0Vt
cHR5KCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgICAgICAgICBjaHNldCA9IGRv
Y3VtZW50KCktPmZyYW1lKCktPmVuY29kaW5nKCk7CisgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChtX2NhY2hlZFNoZWV0KSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fbG9hZGluZykgewog
ICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5zdHlsZXNoZWV0TG9hZGVkKCk7CkBAIC0x
ODQsNyArMTg3LDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MoKQogICAgICAgICAg
ICAgICAgIG1fY2FjaGVkU2hlZXQtPmRlcmVmKHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1
bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFN0eWxlU2hlZXQobV91cmwsIGNoc2V0KTsKKyAg
ICAgICAgICAgIG1fY2FjaGVkU2hlZXQgPSBkb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVz
dENTU1N0eWxlU2hlZXQobV91cmwsIGNoc2V0KTsKICAgICAgICAgICAgIGlmIChtX2NhY2hlZFNo
ZWV0KQogICAgICAgICAgICAgICAgIG1fY2FjaGVkU2hlZXQtPnJlZih0aGlzKTsKICAgICAgICAg
fQpAQCAtMjA3LDkgKzIxMCw5IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpyZW1vdmVkRnJvbURv
Y3VtZW4KICAgICBwcm9jZXNzKCk7CiB9CiAKLXZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRTdHls
ZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNoZWV0U3RyKQordm9pZCBI
VE1MTGlua0VsZW1lbnQ6OnNldENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgY2hhcnNldCwgY29uc3QgU3RyaW5nJiBzaGVldFN0cikKIHsKLSAgICBtX3NoZWV0
ID0gbmV3IENTU1N0eWxlU2hlZXQodGhpcywgdXJsKTsKKyAgICBtX3NoZWV0ID0gbmV3IENTU1N0
eWxlU2hlZXQodGhpcywgdXJsLCBjaGFyc2V0KTsKICAgICBtX3NoZWV0LT5wYXJzZVN0cmluZyhz
aGVldFN0ciwgIWRvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpKTsKIAogICAgIFJlZlB0cjxNZWRp
YUxpc3Q+IG1lZGlhID0gbmV3IE1lZGlhTGlzdCgoQ1NTU3R5bGVTaGVldCopMCwgbV9tZWRpYSwg
dHJ1ZSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCShyZXZpc2lvbiAxNjY4NykKKysrIFdl
YkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzks
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKIAog
ICAgIC8vIGZyb20gQ2FjaGVkUmVzb3VyY2VDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5
bGVTaGVldChjb25zdCBTdHJpbmcgJnVybCwgY29uc3QgU3RyaW5nICZzaGVldCk7CisgICAgdmly
dHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nICZ1cmwsIGNvbnN0IFN0cmlu
ZyYgY2hhcnNldCwgY29uc3QgU3RyaW5nICZzaGVldCk7CiAgICAgYm9vbCBpc0xvYWRpbmcoKSBj
b25zdDsKICAgICB2b2lkIHNoZWV0TG9hZGVkKCk7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
U3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE2Njg3KQorKysgV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgSFRNTFN0eWxlRWxl
bWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCkKICAgICAgICAgaWYgKHNjcmVlbkV2YWwuZXZhbChtZWRp
YS5nZXQoKSkgfHwgcHJpbnRFdmFsLmV2YWwobWVkaWEuZ2V0KCkpKSB7CiAgICAgICAgICAgICBk
b2N1bWVudCgpLT5hZGRQZW5kaW5nU2hlZXQoKTsKICAgICAgICAgICAgIG1fbG9hZGluZyA9IHRy
dWU7Ci0gICAgICAgICAgICBtX3NoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQodGhpcyk7CisgICAg
ICAgICAgICBtX3NoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQodGhpcywgZG9jdW1lbnQoKS0+VVJM
KCksIGRvY3VtZW50KCktPmlucHV0RW5jb2RpbmcoKSk7CiAgICAgICAgICAgICBtX3NoZWV0LT5w
YXJzZVN0cmluZyh0ZXh0LCAhZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOwogICAgICAgICAg
ICAgbV9zaGVldC0+c2V0TWVkaWEobWVkaWEuZ2V0KCkpOwogICAgICAgICAgICAgbV9sb2FkaW5n
ID0gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDE2Njg3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCB2b2lkIFNWR1N0eWxlRWxlbWVudDo6Y2hpbGRy
ZW5DaGFuZ2VkKCkKICAgICBpZihtX3NoZWV0KQogICAgICAgICBtX3NoZWV0ID0gMDsKIAorICAg
IC8vIEZJWE1FOiB0aGlzIGNvZGUgc2hvdWxkIGJlIHNoYXJlZCB3aXRoIEhUTUxTdHlsZUVsZW1l
bnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCiAgICAgbV9sb2FkaW5nID0gZmFsc2U7CiAgICAgTWVkaWFR
dWVyeUV2YWx1YXRvciBzY3JlZW5FdmFsKCJzY3JlZW4iLCB0cnVlKTsKICAgICBNZWRpYVF1ZXJ5
RXZhbHVhdG9yIHByaW50RXZhbCgicHJpbnQiLCB0cnVlKTsgICAKQEAgLTEwNCw3ICsxMDUsNyBA
QCB2b2lkIFNWR1N0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCkKIAogICAgICAgICBtX2xv
YWRpbmcgPSB0cnVlOwogIAotICAgICAgICBtX3NoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQodGhp
cyk7CisgICAgICAgIG1fc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCh0aGlzLCBkb2N1bWVudCgp
LT5VUkwoKSwgZG9jdW1lbnQoKS0+aW5wdXRFbmNvZGluZygpKTsKICAgICAgICAgbV9zaGVldC0+
cGFyc2VTdHJpbmcodGV4dENvbnRlbnQoKSk7IC8vIFNWRyBjc3MgaXMgYWx3YXlzIHBhcnNlZCBp
biBzdHJpY3QgbW9kZQogICAgICAgICAKICAgICAgICAgbV9zaGVldC0+c2V0TWVkaWEobWVkaWFM
aXN0LmdldCgpKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJKHJldmlzaW9uIDE2Njg3KQorKysgV2ViQ29yZS9s
b2FkZXIvQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgQ2FjaGVk
SW1hZ2UqIENhY2hlOjpyZXF1ZXN0SW1hZ2UoRG9jTG9hZAogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDYWNoZWRJbWFnZSAqPihvKTsKIH0KIAotQ2FjaGVkQ1NTU3R5bGVTaGVldCogQ2FjaGU6OnJl
cXVlc3RTdHlsZVNoZWV0KERvY0xvYWRlciogZGwsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIHJl
bG9hZCwgdGltZV90IGV4cGlyZURhdGUsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKK0NhY2hlZENT
U1N0eWxlU2hlZXQqIENhY2hlOjpyZXF1ZXN0Q1NTU3R5bGVTaGVldChEb2NMb2FkZXIqIGRsLCBj
b25zdCBTdHJpbmcmIHVybCwgYm9vbCByZWxvYWQsIHRpbWVfdCBleHBpcmVEYXRlLCBjb25zdCBT
dHJpbmcmIGNoYXJzZXQpCiB7CiAgICAgLy8gdGhpcyBicmluZ3MgdGhlIF91cmwgdG8gYSBzdGFu
ZGFyZCBmb3JtLi4uCiAgICAgS1VSTCBrdXJsOwpAQCAtMjEyLDcgKzIxMiw3IEBAIENhY2hlZENT
U1N0eWxlU2hlZXQqIENhY2hlOjpyZXF1ZXN0U3R5bGUKICAgICBpZiAoby0+dHlwZSgpICE9IENh
Y2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KQogICAgIHsKICNpZmRlZiBDQUNIRV9ERUJVRwot
ICAgICAgICBrZERlYnVnKDYwNjApIDw8ICJDYWNoZTo6SW50ZXJuYWwgRXJyb3IgaW4gcmVxdWVz
dFN0eWxlU2hlZXQgdXJsPSIgPDwga3VybC51cmwoKSA8PCAiISIgPDwgZW5kbDsKKyAgICAgICAg
a2REZWJ1Zyg2MDYwKSA8PCAiQ2FjaGU6OkludGVybmFsIEVycm9yIGluIHJlcXVlc3RDU1NTdHls
ZVNoZWV0IHVybD0iIDw8IGt1cmwudXJsKCkgPDwgIiEiIDw8IGVuZGw7CiAjZW5kaWYKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZS5oCShyZXZpc2lvbiAxNjY4NykKKysrIFdlYkNv
cmUvbG9hZGVyL0NhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgIHsKICAgICAgICAgICovCiAgICAgICAgIHN0YXRpYyBDYWNoZWRJbWFnZSog
cmVxdWVzdEltYWdlKERvY0xvYWRlciosIGNvbnN0IFN0cmluZyYgVVJMLCBib29sIHJlbG9hZCA9
IGZhbHNlLCB0aW1lX3QgZXhwaXJlRGF0ZSA9IDApOwogICAgICAgICBzdGF0aWMgQ2FjaGVkSW1h
Z2UqIHJlcXVlc3RJbWFnZShEb2NMb2FkZXIqLCBjb25zdCBLVVJMJiBVUkwsIGJvb2wgcmVsb2Fk
LCB0aW1lX3QgZXhwaXJlRGF0ZSk7Ci0gICAgICAgIHN0YXRpYyBDYWNoZWRDU1NTdHlsZVNoZWV0
KiByZXF1ZXN0U3R5bGVTaGVldChEb2NMb2FkZXIqLCBjb25zdCBTdHJpbmcmIFVSTCwgYm9vbCBy
ZWxvYWQsIHRpbWVfdCBleHBpcmVEYXRlLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOworICAgICAg
ICBzdGF0aWMgQ2FjaGVkQ1NTU3R5bGVTaGVldCogcmVxdWVzdENTU1N0eWxlU2hlZXQoRG9jTG9h
ZGVyKiwgY29uc3QgU3RyaW5nJiBVUkwsIGJvb2wgcmVsb2FkLCB0aW1lX3QgZXhwaXJlRGF0ZSwg
Y29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKICAgICAgICAgc3RhdGljIENhY2hlZFNjcmlwdCogcmVx
dWVzdFNjcmlwdChEb2NMb2FkZXIqLCBjb25zdCBTdHJpbmcmIFVSTCwgYm9vbCByZWxvYWQsIHRp
bWVfdCBleHBpcmVEYXRlLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwogCiAjaWZkZWYgWFNMVF9T
VVBQT1JUCkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNp
b24gMTY2ODcpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTEsMTQgKzUxLDYgQEAgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Q2FjaGVk
Q1NTU3R5bGVTaGVldAogICAgIG1fbG9hZGluZyA9IHRydWU7CiB9CiAKLUNhY2hlZENTU1N0eWxl
U2hlZXQ6OkNhY2hlZENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nICZ1cmwsIGNvbnN0IFN0cmlu
ZyYgc3R5bGVzaGVldF9kYXRhKQotICAgIDogQ2FjaGVkUmVzb3VyY2UodXJsLCBDU1NTdHlsZVNo
ZWV0LCBDYWNoZVBvbGljeVZlcmlmeSwgMCwgc3R5bGVzaGVldF9kYXRhLmxlbmd0aCgpKQotewot
ICAgIG1fbG9hZGluZyA9IGZhbHNlOwotICAgIG1fc3RhdHVzID0gUGVyc2lzdGVudDsKLSAgICBt
X3NoZWV0ID0gc3R5bGVzaGVldF9kYXRhOwotfQotCiBDYWNoZWRDU1NTdHlsZVNoZWV0Ojp+Q2Fj
aGVkQ1NTU3R5bGVTaGVldCgpCiB7CiB9CkBAIC02OCwxNSArNjAsMTUgQEAgdm9pZCBDYWNoZWRD
U1NTdHlsZVNoZWV0OjpyZWYoQ2FjaGVkUmVzbwogICAgIENhY2hlZFJlc291cmNlOjpyZWYoYyk7
CiAKICAgICBpZiAoIW1fbG9hZGluZykKLSAgICAgICAgYy0+c2V0U3R5bGVTaGVldChtX3VybCwg
bV9zaGVldCk7CisgICAgICAgIGMtPnNldENTU1N0eWxlU2hlZXQobV91cmwsIG1fZGVjb2Rlci0+
ZW5jb2RpbmcoKS5uYW1lKCksIG1fc2hlZXQpOwogfQogCiB2b2lkIENhY2hlZENTU1N0eWxlU2hl
ZXQ6OmRlcmVmKENhY2hlZFJlc291cmNlQ2xpZW50ICpjKQogewogICAgIENhY2hlOjpmbHVzaCgp
OwogICAgIENhY2hlZFJlc291cmNlOjpkZXJlZihjKTsKLSAgICBpZiAoIGNhbkRlbGV0ZSgpICYm
IG1fZnJlZSApCi0gICAgICBkZWxldGUgdGhpczsKKyAgICBpZiAoY2FuRGVsZXRlKCkgJiYgbV9m
cmVlKQorICAgICAgICBkZWxldGUgdGhpczsKIH0KIAogdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0
OjpzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyYgY2hzKQpAQCAtMTA1LDEwICs5NywxMCBAQCB2b2lk
IENhY2hlZENTU1N0eWxlU2hlZXQ6OmNoZWNrTm90aWZ5KCkKICAgICB3aGlsZSAoQ2FjaGVkUmVz
b3VyY2VDbGllbnQgKmMgPSB3Lm5leHQoKSkgewogI2lmIF9fQVBQTEVfXwogICAgICAgICBpZiAo
bV9yZXNwb25zZSAmJiAhSXNSZXNwb25zZVVSTEVxdWFsVG9VUkwobV9yZXNwb25zZSwgbV91cmwp
KQotICAgICAgICAgICAgYy0+c2V0U3R5bGVTaGVldChTdHJpbmcoUmVzcG9uc2VVUkwobV9yZXNw
b25zZSkpLCBtX3NoZWV0KTsKKyAgICAgICAgICAgIGMtPnNldENTU1N0eWxlU2hlZXQoU3RyaW5n
KFJlc3BvbnNlVVJMKG1fcmVzcG9uc2UpKSwgbV9kZWNvZGVyLT5lbmNvZGluZygpLm5hbWUoKSwg
bV9zaGVldCk7CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgYy0+c2V0U3R5bGVT
aGVldChtX3VybCwgbV9zaGVldCk7CisgICAgICAgICAgICBjLT5zZXRDU1NTdHlsZVNoZWV0KG1f
dXJsLCBtX2RlY29kZXItPmVuY29kaW5nKCkubmFtZSgpLCBtX3NoZWV0KTsKICAgICB9CiB9CiAK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZENTU1N0eWxlU2hlZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9DYWNoZWRDU1NTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDE2Njg3KQor
KysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw3ICs0MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDYWNoZWRDU1NT
dHlsZVNoZWV0IDogcHVibGljIENhY2hlZFJlc291cmNlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IENhY2hlZENTU1N0eWxlU2hlZXQoRG9jTG9hZGVyKiwgY29uc3QgU3RyaW5nJiBVUkwsIENhY2hl
UG9saWN5LCB0aW1lX3QgZXhwaXJlRGF0ZSwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKLSAgICAg
ICAgQ2FjaGVkQ1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIFVSTCwgY29uc3QgU3RyaW5nJiBz
dHlsZXNoZWV0RGF0YSk7CiAgICAgICAgIHZpcnR1YWwgfkNhY2hlZENTU1N0eWxlU2hlZXQoKTsK
IAogICAgICAgICBjb25zdCBTdHJpbmcmIHNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldDsg
fQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZUNsaWVudC5oCShyZXZpc2lvbiAxNjY4
NykKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYzLDcgKzYzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBlLmcu
LCBpbiB0aGUgYi9mIGNhY2hlIG9yIGluIGEgYmFja2dyb3VuZCB0YWIpLgogICAgICAgICB2aXJ0
dWFsIGJvb2wgd2lsbFJlbmRlckltYWdlKENhY2hlZEltYWdlKikgeyByZXR1cm4gZmFsc2U7IH0K
IAotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIC8qVVJM
Ki8sIGNvbnN0IFN0cmluZyYgLypzaGVldCovKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHNl
dENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiAvKlVSTCovLCBjb25zdCBTdHJpbmcmIC8qY2hh
cnNldCovLCBjb25zdCBTdHJpbmcmIC8qc2hlZXQqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRYU0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgLypVUkwqLywgY29uc3QgU3RyaW5nJiAv
KnNoZWV0Ki8pIHsgfQogCiAjaWZkZWYgWEJMX1NVUFBPUlQKICAgICAgICAgdmlydHVhbCB2b2lk
IHNldFhCTERvY3VtZW50KGNvbnN0IFN0cmluZyYgLypVUkwqLywgWEJMOjpYQkxEb2N1bWVudCop
IHsgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAJKHJldmlzaW9u
IDE2Njg3KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpyZWYo
Q2FjaGVkUmVzbwogICAgIENhY2hlZFJlc291cmNlOjpyZWYoYyk7CiAgICAgCiAgICAgaWYgKCFt
X2xvYWRpbmcpCi0gICAgICAgIGMtPnNldFN0eWxlU2hlZXQobV91cmwsIG1fc2hlZXQpOworICAg
ICAgICBjLT5zZXRYU0xTdHlsZVNoZWV0KG1fdXJsLCBtX3NoZWV0KTsKIH0KIAogdm9pZCBDYWNo
ZWRYU0xTdHlsZVNoZWV0OjpkZXJlZihDYWNoZWRSZXNvdXJjZUNsaWVudCAqYykKQEAgLTkzLDcg
KzkzLDcgQEAgdm9pZCBDYWNoZWRYU0xTdHlsZVNoZWV0OjpjaGVja05vdGlmeSgpCiAgICAgCiAg
ICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOwogICAgIHdoaWxlIChD
YWNoZWRSZXNvdXJjZUNsaWVudCAqYyA9IHcubmV4dCgpKQotICAgICAgICBjLT5zZXRTdHlsZVNo
ZWV0KG1fdXJsLCBtX3NoZWV0KTsKKyAgICAgICAgYy0+c2V0WFNMU3R5bGVTaGVldChtX3VybCwg
bV9zaGVldCk7CiB9CiAKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCShyZXZpc2lvbiAxNjY4NykK
KysrIFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3
ICsxMDEsNyBAQCBDYWNoZWRJbWFnZSAqRG9jTG9hZGVyOjpyZXF1ZXN0SW1hZ2UoY29uCiAgICAg
cmV0dXJuIGNhY2hlZE9iamVjdDsKIH0KIAotQ2FjaGVkQ1NTU3R5bGVTaGVldCAqRG9jTG9hZGVy
OjpyZXF1ZXN0U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFy
c2V0KQorQ2FjaGVkQ1NTU3R5bGVTaGVldCAqRG9jTG9hZGVyOjpyZXF1ZXN0Q1NTU3R5bGVTaGVl
dChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQogewogICAgIEtVUkwg
ZnVsbFVSTCA9IG1fZG9jLT5jb21wbGV0ZVVSTCh1cmwuZGVwcmVjYXRlZFN0cmluZygpKTsKIApA
QCAtMTEwLDcgKzExMCw3IEBAIENhY2hlZENTU1N0eWxlU2hlZXQgKkRvY0xvYWRlcjo6cmVxdWVz
dFMKIAogICAgIGJvb2wgcmVsb2FkID0gbmVlZFJlbG9hZChmdWxsVVJMKTsKIAotICAgIENhY2hl
ZENTU1N0eWxlU2hlZXQqIGNhY2hlZE9iamVjdCA9IENhY2hlOjpyZXF1ZXN0U3R5bGVTaGVldCh0
aGlzLCB1cmwsIHJlbG9hZCwgbV9leHBpcmVEYXRlLCBjaGFyc2V0KTsKKyAgICBDYWNoZWRDU1NT
dHlsZVNoZWV0KiBjYWNoZWRPYmplY3QgPSBDYWNoZTo6cmVxdWVzdENTU1N0eWxlU2hlZXQodGhp
cywgdXJsLCByZWxvYWQsIG1fZXhwaXJlRGF0ZSwgY2hhcnNldCk7CiAgICAgQ2hlY2tDYWNoZU9i
amVjdFN0YXR1cyh0aGlzLCBjYWNoZWRPYmplY3QpOwogICAgIHJldHVybiBjYWNoZWRPYmplY3Q7
CiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9Eb2NMb2FkZXIuaAkocmV2aXNpb24gMTY2ODcpCisrKyBXZWJDb3JlL2xvYWRl
ci9Eb2NMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIH5Eb2NMb2FkZXIoKTsKIAogICAgICAgICBDYWNoZWRJbWFnZSog
cmVxdWVzdEltYWdlKGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICAgICAgQ2FjaGVkQ1NTU3R5bGVT
aGVldCogcmVxdWVzdFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y2hhcnNldCk7CisgICAgICAgIENhY2hlZENTU1N0eWxlU2hlZXQqIHJlcXVlc3RDU1NTdHlsZVNo
ZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwogICAgICAgICBD
YWNoZWRTY3JpcHQqIHJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY2hhcnNldCk7CiAKICNpZmRlZiBYU0xUX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUvcGFnZS9G
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24g
MTY2ODcpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMs
NyArMTIzLDcgQEAgY2xhc3MgVXNlclN0eWxlU2hlZXRMb2FkZXIgOiBwdWJsaWMgQ2FjaAogcHVi
bGljOgogICAgIFVzZXJTdHlsZVNoZWV0TG9hZGVyKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5n
JiB1cmwsIERvY0xvYWRlciogZGwpCiAgICAgICAgIDogbV9mcmFtZShmcmFtZSkKLSAgICAgICAg
LCBtX2NhY2hlZFNoZWV0KENhY2hlOjpyZXF1ZXN0U3R5bGVTaGVldChkbCwgdXJsLCBmYWxzZSwg
MCwgIiIpKQorICAgICAgICAsIG1fY2FjaGVkU2hlZXQoQ2FjaGU6OnJlcXVlc3RDU1NTdHlsZVNo
ZWV0KGRsLCB1cmwsIGZhbHNlLCAwLCAiIikpCiAgICAgewogICAgICAgICBtX2NhY2hlZFNoZWV0
LT5yZWYodGhpcyk7CiAgICAgfQpAQCAtMTMyLDcgKzEzMiw3IEBAIHB1YmxpYzoKICAgICAgICAg
bV9jYWNoZWRTaGVldC0+ZGVyZWYodGhpcyk7CiAgICAgfQogcHJpdmF0ZToKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIC8qVVJMKi8sIGNvbnN0IFN0cmluZyYg
c2hlZXQpCisgICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiAv
KlVSTCovLCBjb25zdCBTdHJpbmcmIC8qY2hhcnNldCovLCBjb25zdCBTdHJpbmcmIHNoZWV0KQog
ICAgIHsKICAgICAgICAgbV9mcmFtZS0+c2V0VXNlclN0eWxlU2hlZXQoc2hlZXQpOwogICAgIH0K
SW5kZXg6IFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUveG1sL1hTTEltcG9ydFJ1bGUuY3BwCShyZXZpc2lvbiAxNjY4NykKKysrIFdlYkNvcmUveG1s
L1hTTEltcG9ydFJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIFhTTFN0
eWxlU2hlZXQqIFhTTEltcG9ydFJ1bGU6OnBhcmVudFN0eWwKICAgICByZXR1cm4gKHBhcmVudCgp
ICYmIHBhcmVudCgpLT5pc1hTTFN0eWxlU2hlZXQoKSkgPyBzdGF0aWNfY2FzdDxYU0xTdHlsZVNo
ZWV0Kj4ocGFyZW50KCkpIDogMDsKIH0KIAotdm9pZCBYU0xJbXBvcnRSdWxlOjpzZXRTdHlsZVNo
ZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNoZWV0KQordm9pZCBYU0xJbXBv
cnRSdWxlOjpzZXRYU0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcm
IHNoZWV0KQogewogICAgIGlmIChtX3N0eWxlU2hlZXQpCiAgICAgICAgIG1fc3R5bGVTaGVldC0+
c2V0UGFyZW50KDApOwpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgWFNMSW1wb3J0UnVsZTo6bG9h
ZFNoZWV0KCkKICAgICBpZiAobV9jYWNoZWRTaGVldCkgewogICAgICAgICBtX2NhY2hlZFNoZWV0
LT5yZWYodGhpcyk7CiAgICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgaW1wb3J0ZWQgc2hlZXQg
aXMgaW4gdGhlIGNhY2hlLCB0aGVuIHNldFN0eWxlU2hlZXQgZ2V0cyBjYWxsZWQsCisgICAgICAg
IC8vIElmIHRoZSBpbXBvcnRlZCBzaGVldCBpcyBpbiB0aGUgY2FjaGUsIHRoZW4gc2V0WFNMU3R5
bGVTaGVldCBnZXRzIGNhbGxlZCwKICAgICAgICAgLy8gYW5kIHRoZSBzaGVldCBldmVuIGdldHMg
cGFyc2VkICh2aWEgcGFyc2VTdHJpbmcpLiAgSW4gdGhpcyBjYXNlIHdlIGhhdmUKICAgICAgICAg
Ly8gbG9hZGVkIChldmVuIGlmIG91ciBzdWJyZXNvdXJjZXMgaGF2ZW4ndCksIHNvIGlmIHdlIGhh
dmUgYSBzdHlsZXNoZWV0IGFmdGVyCiAgICAgICAgIC8vIGNoZWNraW5nIHRoZSBjYWNoZSwgdGhl
biB3ZSd2ZSBjbGVhcmx5IGxvYWRlZC4KSW5kZXg6IFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmgJKHJldmlzaW9uIDE2
Njg3KQorKysgV2ViQ29yZS94bWwvWFNMSW1wb3J0UnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICBYU0xTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0
KCkgY29uc3Q7CiAgICAgCiAgICAgLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudAotICAgIHZp
cnR1YWwgdm9pZCBzZXRTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcm
IHNoZWV0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0WFNMU3R5bGVTaGVldChjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBzaGVldCk7CiAgICAgCiAgICAgYm9vbCBpc0xvYWRpbmcoKTsK
ICAgICB2b2lkIGxvYWRTaGVldCgpOwo=
</data>
<flag name="review"
          id="3597"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>