<?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>59435</bug_id>
          
          <creation_ts>2011-04-26 00:49:51 -0700</creation_ts>
          <short_desc>Can&apos;t select a line of RTL text on Facebook</short_desc>
          <delta_ts>2023-07-31 16:11:39 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, NeedsReduction</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>54929</dependson>
    
    <dependson>55481</dependson>
    
    <dependson>59811</dependson>
    
    <dependson>60000</dependson>
    
    <dependson>73056</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Moskovich">playmobil</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>adele</cc>
    
    <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>mitz</cc>
    
    <cc>progame+wk</cc>
    
    <cc>rniwa</cc>
    
    <cc>xji</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>392341</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Moskovich">playmobil</who>
    <bug_when>2011-04-26 00:49:51 -0700</bug_when>
    <thetext>Steps to reproduce:
* Log into Facebook and try to select a full line of RTL text by dragging from one end of the text to the other.

Expected result:
* Entire line should be selected

Actual result:
* Everything works fine until you try to drag over the last letter at which point the selection is cleared :(

Browsers tested:
Safari 5.0.3: OK
WebKit r84622: FAIL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392513</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-26 09:35:05 -0700</bug_when>
    <thetext>&lt;rdar://problem/9338216&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392579</commentid>
    <comment_count>2</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-04-26 11:15:23 -0700</bug_when>
    <thetext>This seems very similar to https://bugs.webkit.org/show_bug.cgi?id=57340</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393730</commentid>
    <comment_count>3</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-04-27 13:05:25 -0700</bug_when>
    <thetext>Looks like it (and 57340) started regress since
http://trac.webkit.org/changeset/74971/trunk/WebCore/rendering/InlineTextBox.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393876</commentid>
    <comment_count>4</comment_count>
      <attachid>91359</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-27 15:21:45 -0700</bug_when>
    <thetext>Created attachment 91359
demo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394018</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-27 17:11:36 -0700</bug_when>
    <thetext>Mn... odd. we&apos;re getting offset 3 for both of the following markups when I click on the right of the text:
&lt;div contenteditable&gt;ابص&lt;/p&gt;
&lt;div contenteditable&gt;&lt;span dir=&quot;rtl&quot;&gt;ابص&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/p&gt;

but the caret is rendered on the left for the second case. Let me investigate it further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394042</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-27 18:08:44 -0700</bug_when>
    <thetext>The root cause of this bug is inline text boxes created by &lt;br&gt;.  It seems like we need to ignore those inline boxes in Position::getInlineBoxAndOffset when looking for next/previous leaf child.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394046</commentid>
    <comment_count>7</comment_count>
      <attachid>91394</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-04-27 18:19:44 -0700</bug_when>
    <thetext>Created attachment 91394
test case

I attached this simple html with a &lt;p&gt; and &lt;div&gt; (no &lt;br&gt;), 
but the selection is not correct in the ways that:
1. select from left to right, you can not select the rightmost character.
2. select from rightmost to left, you can not select the rightmost character.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394048</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-27 18:22:16 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I attached this simple html with a &lt;p&gt; and &lt;div&gt; (no &lt;br&gt;), 
&gt; but the selection is not correct in the ways that:
&gt; 1. select from left to right, you can not select the rightmost character.
&gt; 2. select from rightmost to left, you can not select the rightmost character.

This should be a separate bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394073</commentid>
    <comment_count>9</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-04-27 18:34:05 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=91394) [details]
&gt; test case
&gt; 
&gt; I attached this simple html with a &lt;p&gt; and &lt;div&gt; (no &lt;br&gt;), 
&gt; but the selection is not correct in the ways that:
&gt; 1. select from left to right, you can not select the rightmost character.
&gt; 2. select from rightmost to left, you can not select the rightmost character.

For example, given the logical text &quot;abcABC&quot; in LTR context, whose display is &quot;abcCBA&quot;, when caret is placed rightmost at &quot;abcCBA|&quot;, the returned offset from 
http://trac.webkit.org/changeset/74971/trunk/WebCore/rendering/InlineTextBox.cpp is swapped from 0 to 3 due to the box and its containing block are in different directionality. Select left and stops at &quot;abcCB|A&quot;, the offset returned is 1, which is correct. The correct selection range should be from offset 0 to 1 and selects &apos;A&apos;, instead, the selection range is from offset 3 to 1 and &quot;CB&quot; is selected.

Similar when select left to right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394079</commentid>
    <comment_count>10</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-04-27 18:40:26 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; I attached this simple html with a &lt;p&gt; and &lt;div&gt; (no &lt;br&gt;), 
&gt; &gt; but the selection is not correct in the ways that:
&gt; &gt; 1. select from left to right, you can not select the rightmost character.
&gt; &gt; 2. select from rightmost to left, you can not select the rightmost character.
&gt; 
&gt; This should be a separate bug.

I think you are right. This bug is about &quot;selection is cleared&quot;, not &quot;selection is mis-placed&quot;.

Then, I do not know whether it is caused by 74971. Sorry for the false alarm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394087</commentid>
    <comment_count>11</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-04-27 18:47:39 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; I attached this simple html with a &lt;p&gt; and &lt;div&gt; (no &lt;br&gt;), 
&gt; &gt; &gt; but the selection is not correct in the ways that:
&gt; &gt; &gt; 1. select from left to right, you can not select the rightmost character.
&gt; &gt; &gt; 2. select from rightmost to left, you can not select the rightmost character.
&gt; &gt; 
&gt; &gt; This should be a separate bug.
&gt; 
&gt; I think you are right. This bug is about &quot;selection is cleared&quot;, not &quot;selection is mis-placed&quot;.
&gt; 
&gt; Then, I do not know whether it is caused by 74971. Sorry for the false alarm.

You might be right about the &lt;br&gt; in comment #6. 
But blindly removing the offset swapping at line 1165 in http://trac.webkit.org/changeset/74971/trunk/WebCore/rendering/InlineTextBox.cpp will make your demo test case work (selection could select the whole line).

I am wondering whether the logical at line 1165 is correct or could be as simple as that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394116</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-27 19:22:48 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; You might be right about the &lt;br&gt; in comment #6. 
&gt; But blindly removing the offset swapping at line 1165 in http://trac.webkit.org/changeset/74971/trunk/WebCore/rendering/InlineTextBox.cpp will make your demo test case work (selection could select the whole line).

Sure but that&apos;s because the bug I fixed happens to cancel-out this bug.

&gt; I am wondering whether the logical at line 1165 is correct or could be as simple as that?

I believe the logic in line 1165 is correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394118</commentid>
    <comment_count>13</comment_count>
      <attachid>91409</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-27 19:25:20 -0700</bug_when>
    <thetext>Created attachment 91409
work in progress

I think this would do it (at least passes all the tests).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394125</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-27 19:42:04 -0700</bug_when>
    <thetext>This bug is about getInlineBoxAndOffset giving a wrong result when we&apos;re at the end of a line and the line break&apos;s text direction doesn&apos;t match that of the containing block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394130</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-27 19:51:21 -0700</bug_when>
    <thetext>An alternative approach is to use the containing block&apos;s direction to create inline boxes for line breaks.  That might just work although I&apos;ll have to check if that&apos;s even allowed in UBA/HTML5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395049</commentid>
    <comment_count>16</comment_count>
      <attachid>91623</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-28 19:56:41 -0700</bug_when>
    <thetext>Created attachment 91623
work in progress 2

It turned out that fixing this bug requires fixing a whole bunch of other bugs.  In general, we need to avoid getting an inline text box that&apos;s a line break in hit testing and caret rendering.

Xiaomei &amp; Dan, could you take a look at the current patch and see if you can find any serious issues with it? (passes all layout tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396699</commentid>
    <comment_count>17</comment_count>
      <attachid>91989</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-02 15:03:17 -0700</bug_when>
    <thetext>Created attachment 91989
work in progress 3

Here&apos;s a patch that mostly works but regressed some tests in fast/forms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477970</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-04 14:43:12 -0700</bug_when>
    <thetext>Xiaomei&apos;s test case now works after r95964 but my test case doesn&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525126</commentid>
    <comment_count>19</comment_count>
      <attachid>120150</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-20 23:25:04 -0800</bug_when>
    <thetext>Created attachment 120150
Finally, it&apos;s time to fix this old bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526091</commentid>
    <comment_count>20</comment_count>
      <attachid>120287</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-22 01:13:14 -0800</bug_when>
    <thetext>Created attachment 120287
Added more descriptions to change log and some comment in InlineBox.h per Eric&apos;s suggestion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527276</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-26 22:01:42 -0800</bug_when>
    <thetext>Ping reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568901</commentid>
    <comment_count>22</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-01 14:12:29 -0800</bug_when>
    <thetext>This isn&apos;t really a regression anymore. It improves the selection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568912</commentid>
    <comment_count>23</comment_count>
      <attachid>120287</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-03-01 14:23:49 -0800</bug_when>
    <thetext>Comment on attachment 120287
Added more descriptions to change log and some comment in InlineBox.h per Eric&apos;s suggestion

Thank you for the in-person explanation.  This looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569819</commentid>
    <comment_count>24</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-02 11:54:46 -0800</bug_when>
    <thetext>Committed r109593: &lt;http://trac.webkit.org/changeset/109593&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571982</commentid>
    <comment_count>25</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-06 10:49:38 -0800</bug_when>
    <thetext>Oops, re-open the bug since there&apos;s one place I need to deploy *ChildIgnoringLineBreak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571990</commentid>
    <comment_count>26</comment_count>
      <attachid>130408</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-06 11:03:32 -0800</bug_when>
    <thetext>Created attachment 130408
Fixes one last bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572062</commentid>
    <comment_count>27</comment_count>
      <attachid>130408</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-03-06 12:21:51 -0800</bug_when>
    <thetext>Comment on attachment 130408
Fixes one last bug

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572303</commentid>
    <comment_count>28</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-06 17:14:03 -0800</bug_when>
    <thetext>Committed r109984: &lt;http://trac.webkit.org/changeset/109984&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572953</commentid>
    <comment_count>29</comment_count>
    <who name="Jeremy Moskovich">playmobil</who>
    <bug_when>2012-03-07 09:24:43 -0800</bug_when>
    <thetext>Thanks for fixing this Ryosuke!

One weird case I still see is that in the testcase, if I drag a selection starting from &apos;a&apos; then when I reach the &apos;ב&apos;, I&apos;d expect the whole run to be selected but instead I get the whole run selected apart from the &apos;ב&apos;.

The only way to select the whole string is to drag all the way to the right of the string.

IMHO FF&apos;s behavior where dragging to the center of the string selects the whole string is better for this corner case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572974</commentid>
    <comment_count>30</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-07 09:48:45 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; One weird case I still see is that in the testcase, if I drag a selection starting from &apos;a&apos; then when I reach the &apos;ב&apos;, I&apos;d expect the whole run to be selected but instead I get the whole run selected apart from the &apos;ב&apos;.

Could you file a separate bug for it?  As far as I understand it, this is a bug in our hit testing code and the fix will be touching quite different places in the codebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572981</commentid>
    <comment_count>31</comment_count>
    <who name="Yair Yogev">progame+wk</who>
    <bug_when>2012-03-07 09:53:26 -0800</bug_when>
    <thetext>i think you described http://crbug.com/90580
(i was waiting for the canary to catch this change to see if anything changed regarding it)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572994</commentid>
    <comment_count>32</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-07 10:21:54 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; i think you described http://crbug.com/90580
&gt; (i was waiting for the canary to catch this change to see if anything changed regarding it)

This patch won&apos;t fix that Chromium issue. The issue had been incorrectly marked as related to the bug 57340 and a regression so I&apos;ve removed those labels. We need a separate bug if we wanted to fix that issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573165</commentid>
    <comment_count>33</comment_count>
    <who name="Jeremy Moskovich">playmobil</who>
    <bug_when>2012-03-07 13:20:20 -0800</bug_when>
    <thetext>Mouse selection bug filed as Issue 80535 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1968943</commentid>
    <comment_count>34</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2023-07-31 16:11:39 -0700</bug_when>
    <thetext>*** Bug 6487 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>91359</attachid>
            <date>2011-04-27 15:21:45 -0700</date>
            <delta_ts>2011-04-27 15:21:45 -0700</delta_ts>
            <desc>demo</desc>
            <filename>bug59435.html</filename>
            <type>text/html</type>
            <size>125</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8Ym9keT4KPGRpdj48c3BhbiBkaXI9InJ0bCI+2LrZhSDZ
hdmGINqp2YUg2YbYqNmI2K8g2KfYsiDYutmFINiq2Yg8YnI+PGJyPjwvc3Bhbj48L3A+CjwvYm9k
eT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>91394</attachid>
            <date>2011-04-27 18:19:44 -0700</date>
            <delta_ts>2011-04-27 18:19:44 -0700</delta_ts>
            <desc>test case</desc>
            <filename>selection.html</filename>
            <type>text/html</type>
            <size>289</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">77u/PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlv
bmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRp
b25hbC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiID4N
CjxoZWFkPg0KICAgIDx0aXRsZT5VbnRpdGxlZCBQYWdlPC90aXRsZT4NCjwvaGVhZD4NCjxib2R5
Pg0KPHA+YWJj16nXoNeRPC9wPg0KPGRpdj5hYmPXqdeg15E8L2Rpdj4NCjwvYm9keT4NCjwvaHRt
bD4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91409</attachid>
            <date>2011-04-27 19:25:20 -0700</date>
            <delta_ts>2011-04-28 19:56:41 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>wip59435</filename>
            <type>text/plain</type>
            <size>4393</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkocmV2aXNpb24gODUwNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDkyLDYgKzEwOTIs
OSBAQAogCiAgICAgICAgICAgICBpZiAoY2FyZXRPZmZzZXQgPCBjYXJldE1pbk9mZnNldCB8fCBj
YXJldE9mZnNldCA+IGNhcmV0TWF4T2Zmc2V0IHx8IChjYXJldE9mZnNldCA9PSBjYXJldE1heE9m
ZnNldCAmJiBib3gtPmlzTGluZUJyZWFrKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgSW5saW5lVGV4dEJveCogbmV4dEJveCA9IGJveC0+bmV4dFRleHRCb3goKTsK
KyAgICAgICAgICAgIGlmIChjYXJldE9mZnNldCA9PSBjYXJldE1pbk9mZnNldCAmJiBib3gtPmlz
TGluZUJyZWFrKCkgJiYgbmV4dEJveCAmJiBib3gtPnJvb3QoKSA9PSBuZXh0Qm94LT5yb290KCkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGlmIChjYXJldE9mZnNl
dCA+IGNhcmV0TWluT2Zmc2V0ICYmIGNhcmV0T2Zmc2V0IDwgY2FyZXRNYXhPZmZzZXQpIHsKICAg
ICAgICAgICAgICAgICBpbmxpbmVCb3ggPSBib3g7CkBAIC0xMTY0LDEwICsxMTY3LDEwIEBACiAg
ICAgfQogCiAgICAgaWYgKGNhcmV0T2Zmc2V0ID09IGlubGluZUJveC0+Y2FyZXRMZWZ0bW9zdE9m
ZnNldCgpKSB7Ci0gICAgICAgIElubGluZUJveCogcHJldkJveCA9IGlubGluZUJveC0+cHJldkxl
YWZDaGlsZCgpOworICAgICAgICBJbmxpbmVCb3gqIHByZXZCb3ggPSBpbmxpbmVCb3gtPnByZXZM
ZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVhaygpOwogICAgICAgICBpZiAoIXByZXZCb3ggfHwgcHJl
dkJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkgewogICAgICAgICAgICAgLy8gTGVmdCBlZGdlIG9m
IGEgc2Vjb25kYXJ5IHJ1bi4gU2V0IHRvIHRoZSByaWdodCBlZGdlIG9mIHRoZSBlbnRpcmUgcnVu
LgotICAgICAgICAgICAgd2hpbGUgKElubGluZUJveCogbmV4dEJveCA9IGlubGluZUJveC0+bmV4
dExlYWZDaGlsZCgpKSB7CisgICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiBuZXh0Qm94ID0g
aW5saW5lQm94LT5uZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKSkgewogICAgICAgICAg
ICAgICAgIGlmIChuZXh0Qm94LT5iaWRpTGV2ZWwoKSA8IGxldmVsKQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpbmxpbmVCb3ggPSBuZXh0Qm94OwpAQCAtMTE3
NSw3ICsxMTc4LDcgQEAKICAgICAgICAgICAgIGNhcmV0T2Zmc2V0ID0gaW5saW5lQm94LT5jYXJl
dFJpZ2h0bW9zdE9mZnNldCgpOwogICAgICAgICB9IGVsc2UgaWYgKHByZXZCb3gtPmJpZGlMZXZl
bCgpID4gbGV2ZWwpIHsKICAgICAgICAgICAgIC8vIFJpZ2h0IGVkZ2Ugb2YgYSAidGVydGlhcnki
IHJ1bi4gU2V0IHRvIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhhdCBydW4uCi0gICAgICAgICAgICB3aGls
ZSAoSW5saW5lQm94KiB0ZXJ0aWFyeUJveCA9IGlubGluZUJveC0+cHJldkxlYWZDaGlsZCgpKSB7
CisgICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiB0ZXJ0aWFyeUJveCA9IGlubGluZUJveC0+
cHJldkxlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
dGVydGlhcnlCb3gtPmJpZGlMZXZlbCgpIDw9IGxldmVsKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBpbmxpbmVCb3ggPSB0ZXJ0aWFyeUJveDsKQEAgLTExODMs
MTAgKzExODYsMTAgQEAKICAgICAgICAgICAgIGNhcmV0T2Zmc2V0ID0gaW5saW5lQm94LT5jYXJl
dExlZnRtb3N0T2Zmc2V0KCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBJbmxp
bmVCb3gqIG5leHRCb3ggPSBpbmxpbmVCb3gtPm5leHRMZWFmQ2hpbGQoKTsKKyAgICAgICAgSW5s
aW5lQm94KiBuZXh0Qm94ID0gaW5saW5lQm94LT5uZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJl
YWsoKTsKICAgICAgICAgaWYgKCFuZXh0Qm94IHx8IG5leHRCb3gtPmJpZGlMZXZlbCgpIDwgbGV2
ZWwpIHsKICAgICAgICAgICAgIC8vIFJpZ2h0IGVkZ2Ugb2YgYSBzZWNvbmRhcnkgcnVuLiBTZXQg
dG8gdGhlIGxlZnQgZWRnZSBvZiB0aGUgZW50aXJlIHJ1bi4KLSAgICAgICAgICAgIHdoaWxlIChJ
bmxpbmVCb3gqIHByZXZCb3ggPSBpbmxpbmVCb3gtPnByZXZMZWFmQ2hpbGQoKSkgeworICAgICAg
ICAgICAgd2hpbGUgKElubGluZUJveCogcHJldkJveCA9IGlubGluZUJveC0+cHJldkxlYWZDaGls
ZElnbm9yaW5nTGluZUJyZWFrKCkpIHsKICAgICAgICAgICAgICAgICBpZiAocHJldkJveC0+Ymlk
aUxldmVsKCkgPCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgaW5saW5lQm94ID0gcHJldkJveDsKQEAgLTExOTQsNyArMTE5Nyw3IEBACiAgICAgICAg
ICAgICBjYXJldE9mZnNldCA9IGlubGluZUJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpOwogICAg
ICAgICB9IGVsc2UgaWYgKG5leHRCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpIHsKICAgICAgICAg
ICAgIC8vIExlZnQgZWRnZSBvZiBhICJ0ZXJ0aWFyeSIgcnVuLiBTZXQgdG8gdGhlIHJpZ2h0IGVk
Z2Ugb2YgdGhhdCBydW4uCi0gICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiB0ZXJ0aWFyeUJv
eCA9IGlubGluZUJveC0+bmV4dExlYWZDaGlsZCgpKSB7CisgICAgICAgICAgICB3aGlsZSAoSW5s
aW5lQm94KiB0ZXJ0aWFyeUJveCA9IGlubGluZUJveC0+bmV4dExlYWZDaGlsZElnbm9yaW5nTGlu
ZUJyZWFrKCkpIHsKICAgICAgICAgICAgICAgICBpZiAodGVydGlhcnlCb3gtPmJpZGlMZXZlbCgp
IDw9IGxldmVsKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBp
bmxpbmVCb3ggPSB0ZXJ0aWFyeUJveDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVCb3guY3BwCShyZXZpc2lvbiA4NTA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDIzIEBACiAgICAgICAg
IGxlYWYgPSBwYXJlbnQoKS0+cHJldkxlYWZDaGlsZCgpOwogICAgIHJldHVybiBsZWFmOwogfQot
ICAgIAorCitJbmxpbmVCb3gqIElubGluZUJveDo6bmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJy
ZWFrKCkgY29uc3QKK3sKKyAgICBJbmxpbmVCb3gqIGxlYWYgPSBuZXh0TGVhZkNoaWxkKCk7Cisg
ICAgaWYgKGxlYWYgJiYgbGVhZi0+aXNMaW5lQnJlYWsoKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIGxlYWY7Cit9CisKK0lubGluZUJveCogSW5saW5lQm94OjpwcmV2TGVhZkNoaWxk
SWdub3JpbmdMaW5lQnJlYWsoKSBjb25zdAoreworICAgIElubGluZUJveCogbGVhZiA9IHByZXZM
ZWFmQ2hpbGQoKTsKKyAgICBpZiAobGVhZiAmJiBsZWFmLT5pc0xpbmVCcmVhaygpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbGVhZjsKK30KKwogUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25TdGF0ZSBJbmxpbmVCb3g6OnNlbGVjdGlvblN0YXRlKCkKIHsKICAgICByZXR1cm4gcmVuZGVy
ZXIoKS0+c2VsZWN0aW9uU3RhdGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Qm94LmgJKHJldmlzaW9uIDg1MDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyArMjA3LDkgQEAKICAgICAKICAgICBJbmxp
bmVCb3gqIG5leHRMZWFmQ2hpbGQoKSBjb25zdDsKICAgICBJbmxpbmVCb3gqIHByZXZMZWFmQ2hp
bGQoKSBjb25zdDsKLSAgICAgICAgCisgICAgSW5saW5lQm94KiBuZXh0TGVhZkNoaWxkSWdub3Jp
bmdMaW5lQnJlYWsoKSBjb25zdDsKKyAgICBJbmxpbmVCb3gqIHByZXZMZWFmQ2hpbGRJZ25vcmlu
Z0xpbmVCcmVhaygpIGNvbnN0OworCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0
IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KIAogICAgIElubGluZUZsb3dCb3gqIHBhcmVudCgpIGNv
bnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91623</attachid>
            <date>2011-04-28 19:56:41 -0700</date>
            <delta_ts>2011-05-02 15:03:17 -0700</delta_ts>
            <desc>work in progress 2</desc>
            <filename>wip59435b</filename>
            <type>text/plain</type>
            <size>20110</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdC1saW5lLWJyZWFrLXdp
dGgtb3Bwb3NpdGUtZGlyZWN0aW9uYWxpdHkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3QtbGluZS1icmVhay13aXRoLW9wcG9zaXRlLWRpcmVj
dGlvbmFsaXR5Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVj
dGlvbi9zZWxlY3QtbGluZS1icmVhay13aXRoLW9wcG9zaXRlLWRpcmVjdGlvbmFsaXR5Lmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRt
bDtjaGFyc2V0PXV0Zi04Ij4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisKKy50ZXN0cyB7Cisg
ICAgd2lkdGg6IDI1MHB4OworICAgIGZsb2F0OiBsZWZ0OworICAgIGxpc3Qtc3R5bGU6IG5vbmU7
Cit9CisKKy50ZXN0cyBkaXYsIC50ZXN0cyBwcmUgeworICAgIGJvcmRlcjogc29saWQgMXB4IGJs
YWNrOworICAgIHdpZHRoOiAyMDBweDsKKyAgICBmb250LXNpemU6IDEzcHg7CisgICAgbGluZS1o
ZWlnaHQ6IDEzcHg7CisgICAgcGFkZGluZzogMTNweDsKK30KKworLmhpZGVUZXN0c0luRFJUIC50
ZXN0cyB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5
PgorPHA+VGhpcyB0ZXN0cyBzZWxlY3RpbmcgTFRSL1JUTCB0ZXh0IHRoYXQgc3BhbnMgbXVsdGlw
bGUgbGluZXMgaW4gUlRML0xUUiBibG9jayAob3Bwb3NpdGUgZGlyZWN0aW9uYWxpdHkpLgorVG8g
bWFudWFsbHkgdGVzdCwgc2VsZWN0IHRleHQgaW4gZWFjaCBvZiBlZGl0YWJsZSByZWdpb25zIGJl
bG93IGJ5IGRyYWdnaW5nIG1vdXNlIGZyb20gb25lIGVkZ2UgdG8gYW5vdGhlci4KK1RoZSBlbnRp
cmUgbGluZSBzaG91bGQgYmUgc2VsZWN0ZWQuPC9wPgorPGJvZHk+Cis8b2wgY2xhc3M9InRlc3Rz
Ij4KKzxsaT48ZGl2IGNvbnRlbnRlZGl0YWJsZSB0aXRsZT0iMCAzLCA0IDYiPmFiYzxicj5kZWY8
L2Rpdj48L2xpPgorPGxpPjxkaXYgY29udGVudGVkaXRhYmxlIHRpdGxlPSIwIDMiPtin2KjYtTwv
ZGl2PjwvbGk+Cis8bGk+PGRpdiBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiIHRpdGxlPSIwIDMi
PmFiYzwvZGl2PjwvbGk+Cis8bGk+PGRpdiBjb250ZW50ZWRpdGFibGUgdGl0bGU9IjAgMywgNCwg
NSA2Ij7Yp9io2LU8c3BhbiBkaXI9Imx0ciI+PGJyPjxicj5hPC9zcGFuPjwvZGl2PjwvbGk+Cis8
bGk+PGRpdiBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiIHRpdGxlPSIwIDMsIDQsIDUgNiI+YWJj
PHNwYW4gZGlyPSJydGwiPjxicj48YnI+2Kc8L3NwYW4+PC9kaXY+PC9saT4KKzxsaT48ZGl2IGNv
bnRlbnRlZGl0YWJsZSB0aXRsZT0iMCAzLCA0LCA1IDYiPtin2KjYtTxicj48YnI+YTwvZGl2Pjwv
bGk+Cis8bGk+PGRpdiBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiIHRpdGxlPSIwIDMsIDQsIDUg
NiI+2KfYqNi1PGJyPjxicj5hPC9kaXY+PC9saT4KKzwvb2w+Cis8b2wgY2xhc3M9InRlc3RzIj4K
KzxsaT48cHJlIGNvbnRlbnRlZGl0YWJsZSB0aXRsZT0iMCAzLCA0LCA1IDYiPjxzcGFuIGRpcj0i
cnRsIj7Yp9io2LUKKworYTwvc3Bhbj48L3ByZT48L2xpPgorPGxpPjxwcmUgY29udGVudGVkaXRh
YmxlIGRpcj0icnRsIiB0aXRsZT0iMCAzLCA0LCA1IDYiPjxzcGFuIGRpcj0ibHRyIj5hYmMKKwor
YTwvc3Bhbj48L3ByZT48L2xpPgorPGxpPjxwcmUgY29udGVudGVkaXRhYmxlIGRpcj0icnRsIiB0
aXRsZT0iMCAzLCA0LCA1IDYiPmFiYzxzcGFuIGRpcj0icnRsIj4KKworYTwvc3Bhbj48L3ByZT48
L2xpPgorPC9vbD4KKzxwcmUgaWQ9ImxvZyI+PHNjcmlwdD4KKworZnVuY3Rpb24gc2VsZWN0TGlu
ZVNhZmVseSh0ZXN0LCBsaW5lVG9wKSB7CisgICAgdmFyIHkgPSB0ZXN0Lm9mZnNldFRvcCArIGxp
bmVUb3AgKyA1OworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRlc3Qub2Zmc2V0TGVmdCAr
IDUsIHkpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworCisgICAgZXZlbnRTZW5kZXIu
bGVhcEZvcndhcmQoMjAwKTsKKworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRlc3Qub2Zm
c2V0TGVmdCArIHRlc3Qub2Zmc2V0V2lkdGggLSA1LCB5KTsKKyAgICBldmVudFNlbmRlci5tb3Vz
ZVVwKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICBpZiAoIXdpbmRvdy5ldmVudFNl
bmRlcikKKyAgICAgICAgZG9jdW1lbnQud3JpdGVsbignVGhpcyB0ZXN0IHJlcXVpcmVzIGV2ZW50
U2VuZGVyJyk7CisgICAgZWxzZSB7CisgICAgICAgIHZhciB0ZXN0cyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCdsaScpOworICAgICAgICB2YXIgdGVzdE51bWJlciA9IDA7CisKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgdmFyIHRlc3QgPSB0ZXN0c1tpXS5maXJzdENoaWxkOworICAgICAgICAgICAgb2Zmc2V0cyA9
IHRlc3QudGl0bGUuc3BsaXQoJywgJyk7CisKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgb2Zmc2V0cy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxvZyht
c2cpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LndyaXRlKCdURVNUICcg
KyAoaSArIDEpICsgJyBsaW5lICcgKyAoaiArIDEpICsgJzonICsgbXNnICsgJ1xuJyk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gcGFyc2VJbnQob2Zm
c2V0c1tqXS5zcGxpdCgnICcpWzBdKTsKKyAgICAgICAgICAgICAgICB2YXIgYWZ0ZXJFbmQgPSBw
YXJzZUludChvZmZzZXRzW2pdLnNwbGl0KCcgJylbMV0pOyAvLyBNaWdodCBiZSBOYU4KKyAgICAg
ICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOworCisgICAg
ICAgICAgICAgICAgc2VsZWN0TGluZVNhZmVseSh0ZXN0LCAxMyAqIChqICsgMSkpOworCisgICAg
ICAgICAgICAgICAgdmFyIGFjdHVhbCA9IHNlbGVjdGlvbi50b1N0cmluZygpOworICAgICAgICAg
ICAgICAgIHZhciBleHBlY3RlZCA9IHRlc3QuaW5uZXJUZXh0LnN1YnN0cihzdGFydCwgYWZ0ZXJF
bmQpOworICAgICAgICAgICAgICAgIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpCisgICAgICAgICAg
ICAgICAgICAgIGxvZygnUEFTUycpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgbG9nKCdGQUlMIC0gZXhwZWN0ZWQgIicgKyBleHBlY3RlZCArICciIGJ1dCBnb3Qg
IicgKyBhY3R1YWwgKyAnIicpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgPSAnaGlkZVRlc3RzSW5EUlQnOworfQorCitkb2N1
bWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb25jaGFuZ2UnLCBmdW5jdGlvbiAoKSB7Cisg
ICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0
aW9uLmlzQ29sbGFwc2VkKQorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJyku
aW5uZXJIVE1MICs9IHNlbGVjdGlvbi5iYXNlT2Zmc2V0ICsgJ1xuJzsKKyAgICBlbHNlCisgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2cnKS5pbm5lckhUTUwgKz0gc2VsZWN0aW9u
LmJhc2VPZmZzZXQgKyAnOicgKyBzZWxlY3Rpb24uZXh0ZW50T2Zmc2V0ICsgJ1xuJzsKK30pCisK
Kzwvc2NyaXB0Cis+PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vc2VsZWN0LWxpbmUtYnJlYWstd2l0aC1vcHBvc2l0ZS1kaXJlY3Rpb25hbGl0eS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24v
c2VsZWN0LWxpbmUtYnJlYWstd2l0aC1vcHBvc2l0ZS1kaXJlY3Rpb25hbGl0eS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Qt
bGluZS1icmVhay13aXRoLW9wcG9zaXRlLWRpcmVjdGlvbmFsaXR5LWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorVGhpcyB0ZXN0cyBzZWxlY3RpbmcgTFRSL1JUTCB0
ZXh0IHRoYXQgc3BhbnMgbXVsdGlwbGUgbGluZXMgaW4gUlRML0xUUiBibG9jayAob3Bwb3NpdGUg
ZGlyZWN0aW9uYWxpdHkpLiBUbyBtYW51YWxseSB0ZXN0LCBzZWxlY3QgdGV4dCBpbiBlYWNoIG9m
IGVkaXRhYmxlIHJlZ2lvbnMgYmVsb3cgYnkgZHJhZ2dpbmcgbW91c2UgZnJvbSBvbmUgZWRnZSB0
byBhbm90aGVyLiBUaGUgZW50aXJlIGxpbmUgc2hvdWxkIGJlIHNlbGVjdGVkLgorCitURVNUIDEg
bGluZSAxOlBBU1MKK1RFU1QgMSBsaW5lIDI6UEFTUworVEVTVCAyIGxpbmUgMTpQQVNTCitURVNU
IDMgbGluZSAxOlBBU1MKK1RFU1QgNCBsaW5lIDE6UEFTUworVEVTVCA0IGxpbmUgMjpQQVNTCitU
RVNUIDQgbGluZSAzOlBBU1MKK1RFU1QgNSBsaW5lIDE6UEFTUworVEVTVCA1IGxpbmUgMjpQQVNT
CitURVNUIDUgbGluZSAzOlBBU1MKK1RFU1QgNiBsaW5lIDE6UEFTUworVEVTVCA2IGxpbmUgMjpQ
QVNTCitURVNUIDYgbGluZSAzOlBBU1MKK1RFU1QgNyBsaW5lIDE6UEFTUworVEVTVCA3IGxpbmUg
MjpQQVNTCitURVNUIDcgbGluZSAzOlBBU1MKK1RFU1QgOCBsaW5lIDE6UEFTUworVEVTVCA4IGxp
bmUgMjpQQVNTCitURVNUIDggbGluZSAzOlBBU1MKK1RFU1QgOSBsaW5lIDE6UEFTUworVEVTVCA5
IGxpbmUgMjpQQVNTCitURVNUIDkgbGluZSAzOlBBU1MKK1RFU1QgMTAgbGluZSAxOlBBU1MKK1RF
U1QgMTAgbGluZSAyOlBBU1MKK1RFU1QgMTAgbGluZSAzOlBBU1MKKworCisKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1Bvc2l0aW9uLmNwcAkocmV2aXNpb24gODUwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
UG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU0LDYgKzEwNTQsMTEgQEAKICAgICBy
ZXR1cm4gcG9zaXRpb247CiB9CiAKK3N0YXRpYyBib29sIGlzUlRMTGluZUJyZWFrSW5Ob25FbXB0
eUxpbmUoSW5saW5lVGV4dEJveCogYm94KQoreworICAgIHJldHVybiBib3gtPmlzTGluZUJyZWFr
KCkgJiYgIWJveC0+cHJldkxlYWZDaGlsZCgpICYmIGJveC0+bmV4dExlYWZDaGlsZCgpOworfQor
CiB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmluaXR5IGFmZmluaXR5
LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJveComIGlubGluZUJveCwg
aW50JiBjYXJldE9mZnNldCkgY29uc3QKIHsKICAgICBjYXJldE9mZnNldCA9IGRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCk7CkBAIC0xMDkwLDcgKzEwOTUsOCBAQAogICAgICAgICAgICAgaW50IGNh
cmV0TWluT2Zmc2V0ID0gYm94LT5jYXJldE1pbk9mZnNldCgpOwogICAgICAgICAgICAgaW50IGNh
cmV0TWF4T2Zmc2V0ID0gYm94LT5jYXJldE1heE9mZnNldCgpOwogCi0gICAgICAgICAgICBpZiAo
Y2FyZXRPZmZzZXQgPCBjYXJldE1pbk9mZnNldCB8fCBjYXJldE9mZnNldCA+IGNhcmV0TWF4T2Zm
c2V0IHx8IChjYXJldE9mZnNldCA9PSBjYXJldE1heE9mZnNldCAmJiBib3gtPmlzTGluZUJyZWFr
KCkpKQorICAgICAgICAgICAgaWYgKGNhcmV0T2Zmc2V0IDwgY2FyZXRNaW5PZmZzZXQgfHwgY2Fy
ZXRPZmZzZXQgPiBjYXJldE1heE9mZnNldCB8fCAoY2FyZXRPZmZzZXQgPT0gY2FyZXRNYXhPZmZz
ZXQgJiYgYm94LT5pc0xpbmVCcmVhaygpKQorICAgICAgICAgICAgICAgIHx8IChjYXJldE9mZnNl
dCA9PSBjYXJldE1pbk9mZnNldCAmJiBpc1JUTExpbmVCcmVha0luTm9uRW1wdHlMaW5lKGJveCkp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBpZiAoY2FyZXRPZmZz
ZXQgPiBjYXJldE1pbk9mZnNldCAmJiBjYXJldE9mZnNldCA8IGNhcmV0TWF4T2Zmc2V0KSB7CkBA
IC0xMTAyLDYgKzExMDgsOSBAQAogICAgICAgICAgICAgICAgIHx8ICgoY2FyZXRPZmZzZXQgPT0g
Y2FyZXRNaW5PZmZzZXQpIF4gKGFmZmluaXR5ID09IFVQU1RSRUFNKSkpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKKyAgICAgICAgICAgIGlmIChjYXJldE9mZnNldCA9PSBjYXJldE1heE9mZnNl
dCAmJiBib3gtPm5leHRMZWFmQ2hpbGQoKSAmJiBib3gtPm5leHRMZWFmQ2hpbGQoKS0+aXNMaW5l
QnJlYWsoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgY2FuZGlkYXRl
ID0gYm94OwogICAgICAgICB9CiAgICAgICAgIGlmIChjYW5kaWRhdGUgJiYgY2FuZGlkYXRlID09
IHRleHRSZW5kZXJlci0+bGFzdFRleHRCb3goKSAmJiBhZmZpbml0eSA9PSBET1dOU1RSRUFNKSB7
CkBAIC0xMTY0LDEwICsxMTczLDEwIEBACiAgICAgfQogCiAgICAgaWYgKGNhcmV0T2Zmc2V0ID09
IGlubGluZUJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpKSB7Ci0gICAgICAgIElubGluZUJveCog
cHJldkJveCA9IGlubGluZUJveC0+cHJldkxlYWZDaGlsZCgpOworICAgICAgICBJbmxpbmVCb3gq
IHByZXZCb3ggPSBpbmxpbmVCb3gtPnByZXZMZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVhaygpOwog
ICAgICAgICBpZiAoIXByZXZCb3ggfHwgcHJldkJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkgewog
ICAgICAgICAgICAgLy8gTGVmdCBlZGdlIG9mIGEgc2Vjb25kYXJ5IHJ1bi4gU2V0IHRvIHRoZSBy
aWdodCBlZGdlIG9mIHRoZSBlbnRpcmUgcnVuLgotICAgICAgICAgICAgd2hpbGUgKElubGluZUJv
eCogbmV4dEJveCA9IGlubGluZUJveC0+bmV4dExlYWZDaGlsZCgpKSB7CisgICAgICAgICAgICB3
aGlsZSAoSW5saW5lQm94KiBuZXh0Qm94ID0gaW5saW5lQm94LT5uZXh0TGVhZkNoaWxkSWdub3Jp
bmdMaW5lQnJlYWsoKSkgewogICAgICAgICAgICAgICAgIGlmIChuZXh0Qm94LT5iaWRpTGV2ZWwo
KSA8IGxldmVsKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBp
bmxpbmVCb3ggPSBuZXh0Qm94OwpAQCAtMTE3NSw3ICsxMTg0LDcgQEAKICAgICAgICAgICAgIGNh
cmV0T2Zmc2V0ID0gaW5saW5lQm94LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpOwogICAgICAgICB9
IGVsc2UgaWYgKHByZXZCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpIHsKICAgICAgICAgICAgIC8v
IFJpZ2h0IGVkZ2Ugb2YgYSAidGVydGlhcnkiIHJ1bi4gU2V0IHRvIHRoZSBsZWZ0IGVkZ2Ugb2Yg
dGhhdCBydW4uCi0gICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiB0ZXJ0aWFyeUJveCA9IGlu
bGluZUJveC0+cHJldkxlYWZDaGlsZCgpKSB7CisgICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94
KiB0ZXJ0aWFyeUJveCA9IGlubGluZUJveC0+cHJldkxlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFr
KCkpIHsKICAgICAgICAgICAgICAgICBpZiAodGVydGlhcnlCb3gtPmJpZGlMZXZlbCgpIDw9IGxl
dmVsKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpbmxpbmVC
b3ggPSB0ZXJ0aWFyeUJveDsKQEAgLTExODMsMTAgKzExOTIsMTAgQEAKICAgICAgICAgICAgIGNh
cmV0T2Zmc2V0ID0gaW5saW5lQm94LT5jYXJldExlZnRtb3N0T2Zmc2V0KCk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewotICAgICAgICBJbmxpbmVCb3gqIG5leHRCb3ggPSBpbmxpbmVCb3gtPm5l
eHRMZWFmQ2hpbGQoKTsKKyAgICAgICAgSW5saW5lQm94KiBuZXh0Qm94ID0gaW5saW5lQm94LT5u
ZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKTsKICAgICAgICAgaWYgKCFuZXh0Qm94IHx8
IG5leHRCb3gtPmJpZGlMZXZlbCgpIDwgbGV2ZWwpIHsKICAgICAgICAgICAgIC8vIFJpZ2h0IGVk
Z2Ugb2YgYSBzZWNvbmRhcnkgcnVuLiBTZXQgdG8gdGhlIGxlZnQgZWRnZSBvZiB0aGUgZW50aXJl
IHJ1bi4KLSAgICAgICAgICAgIHdoaWxlIChJbmxpbmVCb3gqIHByZXZCb3ggPSBpbmxpbmVCb3gt
PnByZXZMZWFmQ2hpbGQoKSkgeworICAgICAgICAgICAgd2hpbGUgKElubGluZUJveCogcHJldkJv
eCA9IGlubGluZUJveC0+cHJldkxlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAocHJldkJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgaW5saW5lQm94ID0gcHJldkJveDsKQEAg
LTExOTQsNyArMTIwMyw3IEBACiAgICAgICAgICAgICBjYXJldE9mZnNldCA9IGlubGluZUJveC0+
Y2FyZXRMZWZ0bW9zdE9mZnNldCgpOwogICAgICAgICB9IGVsc2UgaWYgKG5leHRCb3gtPmJpZGlM
ZXZlbCgpID4gbGV2ZWwpIHsKICAgICAgICAgICAgIC8vIExlZnQgZWRnZSBvZiBhICJ0ZXJ0aWFy
eSIgcnVuLiBTZXQgdG8gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhhdCBydW4uCi0gICAgICAgICAgICB3
aGlsZSAoSW5saW5lQm94KiB0ZXJ0aWFyeUJveCA9IGlubGluZUJveC0+bmV4dExlYWZDaGlsZCgp
KSB7CisgICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiB0ZXJ0aWFyeUJveCA9IGlubGluZUJv
eC0+bmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCkpIHsKICAgICAgICAgICAgICAgICBp
ZiAodGVydGlhcnlCb3gtPmJpZGlMZXZlbCgpIDw9IGxldmVsKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBpbmxpbmVCb3ggPSB0ZXJ0aWFyeUJveDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gODUwNjcp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NjcsNyArNTY3LDcgQEAKICAgICAgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5u
b2RlKCk7CiAgICAgICAgIGlmIChub2RlICYmIGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSkK
ICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShub2RlKTsKLSAg
ICAgICAgcmV0dXJuIHJlbmRlcmVyLT5wb3NpdGlvbkZvclBvaW50KEludFBvaW50KHggLSBhYnNQ
b3MueCgpLCByb290LT5saW5lVG9wKCkpKTsKKyAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5wb3Np
dGlvbkZvclBvaW50KEludFBvaW50KHggLSBhYnNQb3MueCgpLCByb290LT5zZWxlY3Rpb25Ub3Ao
KSkpOwogICAgIH0KICAgICAKICAgICAvLyBDb3VsZCBub3QgZmluZCBhIHByZXZpb3VzIGxpbmUu
IFRoaXMgbWVhbnMgd2UgbXVzdCBhbHJlYWR5IGJlIG9uIHRoZSBmaXJzdCBsaW5lLgpAQCAtNjc0
LDcgKzY3NCw3IEBACiAgICAgICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci0+bm9kZSgpOwogICAg
ICAgICBpZiAobm9kZSAmJiBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkpCiAgICAgICAgICAg
ICByZXR1cm4gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobm9kZSk7Ci0gICAgICAgIHJldHVy
biByZW5kZXJlci0+cG9zaXRpb25Gb3JQb2ludChJbnRQb2ludCh4IC0gYWJzUG9zLngoKSwgcm9v
dC0+bGluZVRvcCgpKSk7CisgICAgICAgIHJldHVybiByZW5kZXJlci0+cG9zaXRpb25Gb3JQb2lu
dChJbnRQb2ludCh4IC0gYWJzUG9zLngoKSwgcm9vdC0+c2VsZWN0aW9uVG9wKCkpKTsKICAgICB9
ICAgIAogCiAgICAgLy8gQ291bGQgbm90IGZpbmQgYSBuZXh0IGxpbmUuIFRoaXMgbWVhbnMgd2Ug
bXVzdCBhbHJlYWR5IGJlIG9uIHRoZSBsYXN0IGxpbmUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24gODUwNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDcgKzI2MCwyMyBA
QAogICAgICAgICBsZWFmID0gcGFyZW50KCktPnByZXZMZWFmQ2hpbGQoKTsKICAgICByZXR1cm4g
bGVhZjsKIH0KLSAgICAKKworSW5saW5lQm94KiBJbmxpbmVCb3g6Om5leHRMZWFmQ2hpbGRJZ25v
cmluZ0xpbmVCcmVhaygpIGNvbnN0Cit7CisgICAgSW5saW5lQm94KiBsZWFmID0gbmV4dExlYWZD
aGlsZCgpOworICAgIGlmIChsZWFmICYmIGxlYWYtPmlzTGluZUJyZWFrKCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBsZWFmOworfQorCitJbmxpbmVCb3gqIElubGluZUJveDo6cHJl
dkxlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCkgY29uc3QKK3sKKyAgICBJbmxpbmVCb3gqIGxl
YWYgPSBwcmV2TGVhZkNoaWxkKCk7CisgICAgaWYgKGxlYWYgJiYgbGVhZi0+aXNMaW5lQnJlYWso
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGxlYWY7Cit9CisKIFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lQm94OjpzZWxlY3Rpb25TdGF0ZSgpCiB7CiAgICAgcmV0
dXJuIHJlbmRlcmVyKCktPnNlbGVjdGlvblN0YXRlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiA4NTA2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM5LDEyICs0Mzks
OSBAQAogICAgIGlmICghZmlyc3RUZXh0Qm94KCkgfHwgdGV4dExlbmd0aCgpID09IDApCiAgICAg
ICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oMCwgRE9XTlNUUkVBTSk7CiAKLSAgICAv
LyBHZXQgdGhlIG9mZnNldCBmb3IgdGhlIHBvc2l0aW9uLCBzaW5jZSB0aGlzIHdpbGwgdGFrZSBy
dGwgdGV4dCBpbnRvIGFjY291bnQuCi0gICAgaW50IG9mZnNldDsKLQogICAgIGludCBwb2ludExp
bmVEaXJlY3Rpb24gPSBmaXJzdFRleHRCb3goKS0+aXNIb3Jpem9udGFsKCkgPyBwb2ludC54KCkg
OiBwb2ludC55KCk7CiAgICAgaW50IHBvaW50QmxvY2tEaXJlY3Rpb24gPSBmaXJzdFRleHRCb3go
KS0+aXNIb3Jpem9udGFsKCkgPyBwb2ludC55KCkgOiBwb2ludC54KCk7Ci0gICAgCisvKgogICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byByb2xsIHRoZXNlIHNwZWNpYWwgY2FzZXMg
aW50byB0aGUgZ2VuZXJhbCBjYXNlcyBpbiB0aGUgbG9vcCBiZWxvdy4KICAgICBpZiAoZmlyc3RU
ZXh0Qm94KCkgJiYgcG9pbnRCbG9ja0RpcmVjdGlvbiA8ICBmaXJzdFRleHRCb3goKS0+cm9vdCgp
LT5zZWxlY3Rpb25Cb3R0b20oKSAmJiBwb2ludExpbmVEaXJlY3Rpb24gPCBmaXJzdFRleHRCb3go
KS0+bG9naWNhbExlZnQoKSkgewogICAgICAgICAvLyBhdCB0aGUgeSBjb29yZGluYXRlIG9mIHRo
ZSBmaXJzdCBsaW5lIG9yIGFib3ZlCkBAIC00NTgsNDMgKzQ1NSw3NiBAQAogICAgICAgICBvZmZz
ZXQgPSBsYXN0VGV4dEJveCgpLT5vZmZzZXRGb3JQb3NpdGlvbihwb2ludExpbmVEaXJlY3Rpb24p
OwogICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKG9mZnNldCArIGxhc3RUZXh0
Qm94KCktPnN0YXJ0KCksIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKTsKICAgICB9Ci0KKyovCiAg
ICAgSW5saW5lVGV4dEJveCogbGFzdEJveEFib3ZlID0gMDsKICAgICBmb3IgKElubGluZVRleHRC
b3gqIGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkg
eworICAgICAgICBpZiAoYm94LT5pc0xpbmVCcmVhaygpICYmICFib3gtPnByZXZMZWFmQ2hpbGQo
KSAmJiBib3gtPm5leHRMZWFmQ2hpbGQoKSAmJiAhYm94LT5uZXh0TGVhZkNoaWxkKCktPmlzTGlu
ZUJyZWFrKCkpCisgICAgICAgICAgICBib3ggPSBib3gtPm5leHRUZXh0Qm94KCk7CisKICAgICAg
ICAgUm9vdElubGluZUJveCogcm9vdEJveCA9IGJveC0+cm9vdCgpOwogICAgICAgICBpZiAocG9p
bnRCbG9ja0RpcmVjdGlvbiA+PSByb290Qm94LT5zZWxlY3Rpb25Ub3AoKSkgewogICAgICAgICAg
ICAgaW50IGJvdHRvbSA9IHJvb3RCb3gtPnNlbGVjdGlvbkJvdHRvbSgpOwogICAgICAgICAgICAg
aWYgKHJvb3RCb3gtPm5leHRSb290Qm94KCkpCiAgICAgICAgICAgICAgICAgYm90dG9tID0gbWlu
KGJvdHRvbSwgcm9vdEJveC0+bmV4dFJvb3RCb3goKS0+bGluZVRvcCgpKTsKICAgICAgICAgICAg
IGlmIChwb2ludEJsb2NrRGlyZWN0aW9uIDwgYm90dG9tKSB7Ci0gICAgICAgICAgICAgICAgb2Zm
c2V0ID0gYm94LT5vZmZzZXRGb3JQb3NpdGlvbihwb2ludExpbmVEaXJlY3Rpb24pOworICAgICAg
ICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgICBpZiAo
Z2V0VmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoYm94LCBwb2ludExpbmVEaXJlY3Rpb24sIHBvc2l0
aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworICAgICAgICAgICAg
fQorLy8gICAgICAgICAgICBsYXN0Qm94QWJvdmUgPSBib3g7CisgICAgICAgIH0KKyAgICAgICAg
bGFzdEJveEFib3ZlID0gYm94OworICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChwb2ludExp
bmVEaXJlY3Rpb24gPT0gYm94LT5sb2dpY2FsTGVmdCgpKQotICAgICAgICAgICAgICAgICAgICAv
LyB0aGUgeCBjb29yZGluYXRlIGlzIGVxdWFsIHRvIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhpcyBib3gK
LSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFmZmluaXR5IG11c3QgYmUgZG93bnN0cmVhbSBz
byB0aGUgcG9zaXRpb24gZG9lc24ndCBqdW1wIGJhY2sgdG8gdGhlIHByZXZpb3VzIGxpbmUKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihvZmZzZXQgKyBi
b3gtPnN0YXJ0KCksIERPV05TVFJFQU0pOworLy8gICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3Np
dGlvbihsYXN0Qm94QWJvdmUgPyBsYXN0Qm94QWJvdmUtPnN0YXJ0KCkgKyBsYXN0Qm94QWJvdmUt
PmxlbigpIDogMCwgRE9XTlNUUkVBTSk7CisgICAgaWYgKGxhc3RCb3hBYm92ZSkgeworICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb247CisgICAgICAgIGlmIChnZXRWaXNpYmxlUG9zaXRp
b25Gb3JQb2ludChsYXN0Qm94QWJvdmUsIHBvaW50TGluZURpcmVjdGlvbiwgcG9zaXRpb24pKQor
ICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogCi0gICAgICAgICAgICAgICAgaWYgKHBvaW50
TGluZURpcmVjdGlvbiA8IGJveC0+bG9naWNhbFJpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAg
IC8vIGFuZCB0aGUgeCBjb29yZGluYXRlIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSByaWdodCBlZGdl
IG9mIHRoaXMgYm94Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRvIHNlZSBpZiBwb3Np
dGlvbiBnb2VzIGluIHRoaXMgYm94Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVW
aXNpYmxlUG9zaXRpb24ob2Zmc2V0ICsgYm94LT5zdGFydCgpLCBvZmZzZXQgPiAwID8gVlBfVVBT
VFJFQU1fSUZfUE9TU0lCTEUgOiBET1dOU1RSRUFNKTsKKyAgICAgICAgaW50IG9mZnNldCA9IGxh
c3RCb3hBYm92ZS0+b2Zmc2V0Rm9yUG9zaXRpb24ocG9pbnRMaW5lRGlyZWN0aW9uKTsKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihvZmZzZXQgKyBsYXN0Qm94QWJvdmUtPnN0
YXJ0KCksIERPV05TVFJFQU0pOworICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICghYm94LT5w
cmV2T25MaW5lKCkgJiYgcG9pbnRMaW5lRGlyZWN0aW9uIDwgYm94LT5sb2dpY2FsTGVmdCgpKQot
ICAgICAgICAgICAgICAgICAgICAvLyBib3ggaXMgZmlyc3Qgb24gbGluZQotICAgICAgICAgICAg
ICAgICAgICAvLyBhbmQgdGhlIHggY29vcmRpbmF0ZSBpcyB0byB0aGUgbGVmdCBvZiB0aGUgZmly
c3QgdGV4dCBib3ggbGVmdCBlZGdlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVW
aXNpYmxlUG9zaXRpb24ob2Zmc2V0ICsgYm94LT5zdGFydCgpLCBET1dOU1RSRUFNKTsKKyAgICBy
ZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIERPV05TVFJFQU0pOworfQogCi0gICAgICAg
ICAgICAgICAgaWYgKCFib3gtPm5leHRPbkxpbmUoKSkKLSAgICAgICAgICAgICAgICAgICAgLy8g
Ym94IGlzIGxhc3Qgb24gbGluZQotICAgICAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIHggY29v
cmRpbmF0ZSBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIGxhc3QgdGV4dCBib3ggcmlnaHQgZWRnZQot
ICAgICAgICAgICAgICAgICAgICAvLyBnZW5lcmF0ZSBWaXNpYmxlUG9zaXRpb24sIHVzZSBVUFNU
UkVBTSBhZmZpbml0eSBpZiBwb3NzaWJsZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Jl
YXRlVmlzaWJsZVBvc2l0aW9uKG9mZnNldCArIGJveC0+c3RhcnQoKSwgb2Zmc2V0ID4gMCA/IFZQ
X1VQU1RSRUFNX0lGX1BPU1NJQkxFIDogRE9XTlNUUkVBTSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBsYXN0Qm94QWJvdmUgPSBib3g7Ci0gICAgICAgIH0KK2Jvb2wgUmVuZGVyVGV4dDo6
Z2V0VmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoSW5saW5lVGV4dEJveCogYm94LCBpbnQgcG9pbnRM
aW5lRGlyZWN0aW9uLCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIC8vIEdldCB0
aGUgb2Zmc2V0IGZvciB0aGUgcG9zaXRpb24sIHNpbmNlIHRoaXMgd2lsbCB0YWtlIHJ0bCB0ZXh0
IGludG8gYWNjb3VudC4KKyAgICBpbnQgb2Zmc2V0ID0gYm94LT5vZmZzZXRGb3JQb3NpdGlvbihw
b2ludExpbmVEaXJlY3Rpb24pOworCisgICAgaWYgKHBvaW50TGluZURpcmVjdGlvbiA8PSBib3gt
PmxvZ2ljYWxMZWZ0KCkpIHsKKyAgICAgICAgLy8gdGhlIHggY29vcmRpbmF0ZSBpcyBlcXVhbCB0
byB0aGUgbGVmdCBlZGdlIG9mIHRoaXMgYm94CisgICAgICAgIC8vIHRoZSBhZmZpbml0eSBtdXN0
IGJlIGRvd25zdHJlYW0gc28gdGhlIHBvc2l0aW9uIGRvZXNuJ3QganVtcCBiYWNrIHRvIHRoZSBw
cmV2aW91cyBsaW5lCisgICAgICAgIC8vIGV4Y2VwdCB3aGVuIGJveCBpcyB0aGUgZmlyc3QgYm94
IGluIHRoZSBsaW5lCisgICAgICAgIHBvc2l0aW9uID0gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKG9m
ZnNldCArIGJveC0+c3RhcnQoKSwgKCFib3gtPnByZXZMZWFmQ2hpbGQoKSAmJiBvZmZzZXQgPiAw
KSA/IFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFIDogRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24obGFzdEJv
eEFib3ZlID8gbGFzdEJveEFib3ZlLT5zdGFydCgpICsgbGFzdEJveEFib3ZlLT5sZW4oKSA6IDAs
IERPV05TVFJFQU0pOworICAgIGlmIChwb2ludExpbmVEaXJlY3Rpb24gPCBib3gtPmxvZ2ljYWxS
aWdodCgpKSB7CisgICAgICAgIC8vIGFuZCB0aGUgeCBjb29yZGluYXRlIGlzIHRvIHRoZSBsZWZ0
IG9mIHRoZSByaWdodCBlZGdlIG9mIHRoaXMgYm94CisgICAgICAgIC8vIGNoZWNrIHRvIHNlZSBp
ZiBwb3NpdGlvbiBnb2VzIGluIHRoaXMgYm94CisgICAgICAgIHBvc2l0aW9uID0gY3JlYXRlVmlz
aWJsZVBvc2l0aW9uKG9mZnNldCArIGJveC0+c3RhcnQoKSwgb2Zmc2V0ID4gMCA/IFZQX1VQU1RS
RUFNX0lGX1BPU1NJQkxFIDogRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGlmICgoIWJveC0+cHJldk9uTGluZSgpIHx8IGJveC0+cHJldkxlYWZDaGlsZCgp
LT5pc0xpbmVCcmVhaygpKSAmJiBwb2ludExpbmVEaXJlY3Rpb24gPCBib3gtPmxvZ2ljYWxMZWZ0
KCkpIHsKKyAgICAgICAgLy8gYm94IGlzIGZpcnN0IG9uIGxpbmUKKyAgICAgICAgLy8gYW5kIHRo
ZSB4IGNvb3JkaW5hdGUgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IHRleHQgYm94IGxlZnQg
ZWRnZQorICAgICAgICBwb3NpdGlvbiA9IGNyZWF0ZVZpc2libGVQb3NpdGlvbihvZmZzZXQgKyBi
b3gtPnN0YXJ0KCksIERPV05TVFJFQU0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAoIWJveC0+bmV4dExlYWZDaGlsZCgpIHx8IGJveC0+bmV4dExlYWZDaGlsZCgpLT5p
c0xpbmVCcmVhaygpKSB7CisgICAgICAgIC8vIGJveCBpcyBsYXN0IG9uIGxpbmUKKyAgICAgICAg
Ly8gYW5kIHRoZSB4IGNvb3JkaW5hdGUgaXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBsYXN0IHRleHQg
Ym94IHJpZ2h0IGVkZ2UKKyAgICAgICAgLy8gZ2VuZXJhdGUgVmlzaWJsZVBvc2l0aW9uLCB1c2Ug
VVBTVFJFQU0gYWZmaW5pdHkgaWYgcG9zc2libGUKKyAgICAgICAgcG9zaXRpb24gPSBjcmVhdGVW
aXNpYmxlUG9zaXRpb24ob2Zmc2V0ICsgYm94LT5zdGFydCgpLCBvZmZzZXQgPiAwID8gVlBfVVBT
VFJFQU1fSUZfUE9TU0lCTEUgOiBET1dOU1RSRUFNKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBJbnRSZWN0IFJlbmRlclRleHQ6OmxvY2Fs
Q2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCShyZXZpc2lvbiA4NTA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwODEsMTQgKzQwODEsMjMgQEAKICAg
ICAgICAgY2xvc2VzdEJveCA9IGxhc3RSb290Qm94V2l0aENoaWxkcmVuLT5jbG9zZXN0TGVhZkNo
aWxkRm9yTG9naWNhbExlZnRQb3NpdGlvbihwb2ludEluTG9naWNhbENvbnRlbnRzLngoKSk7CiAg
ICAgfQogCisgICAgaWYgKGNsb3Nlc3RCb3ggJiYgY2xvc2VzdEJveC0+aXNMaW5lQnJlYWsoKSAm
JiAhY2xvc2VzdEJveC0+cHJldkxlYWZDaGlsZCgpICYmIGNsb3Nlc3RCb3gtPm5leHRMZWFmQ2hp
bGRJZ25vcmluZ0xpbmVCcmVhaygpKQorICAgICAgICBjbG9zZXN0Qm94ID0gY2xvc2VzdEJveC0+
bmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCk7CisKKyAgICBpZiAoY2xvc2VzdEJveCAm
JiBjbG9zZXN0Qm94LT5pc0xpbmVCcmVhaygpICYmICFjbG9zZXN0Qm94LT5uZXh0TGVhZkNoaWxk
KCkgJiYgY2xvc2VzdEJveC0+cHJldkxlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCkpCisgICAg
ICAgIGNsb3Nlc3RCb3ggPSBjbG9zZXN0Qm94LT5wcmV2TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJl
YWsoKTsKKwogICAgIGlmIChjbG9zZXN0Qm94KSB7CiAgICAgICAgIGlmIChtb3ZlQ2FyZXRUb0Jv
dW5kYXJ5ICYmIHBvaW50SW5Mb2dpY2FsQ29udGVudHMueSgpIDwgZmlyc3RSb290Qm94V2l0aENo
aWxkcmVuLT5zZWxlY3Rpb25Ub3AoKSkgewogICAgICAgICAgICAgLy8geSBjb29yZGluYXRlIGlz
IGFib3ZlIGZpcnN0IHJvb3QgbGluZSBib3gsIHNvIHJldHVybiB0aGUgc3RhcnQgb2YgdGhlIGZp
cnN0Ci0gICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHBvc2l0aW9uRm9yQm94KGZp
cnN0Um9vdEJveFdpdGhDaGlsZHJlbi0+Zmlyc3RMZWFmQ2hpbGQoKSwgdHJ1ZSksIERPV05TVFJF
QU0pOworICAgICAgICAgICAgSW5saW5lQm94KiBib3ggPSBmaXJzdFJvb3RCb3hXaXRoQ2hpbGRy
ZW4tPmZpcnN0TGVhZkNoaWxkKCk7CisgICAgICAgICAgICBpZiAoYm94LT5pc0xpbmVCcmVhaygp
ICYmIGJveC0+bmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCkpCisgICAgICAgICAgICAg
ICAgYm94ID0gYm94LT5uZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKTsKKyAgICAgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24ocG9zaXRpb25Gb3JCb3goYm94LCBzdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpLCBET1dOU1RSRUFNKTsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIHBhc3MgdGhlIGJveCBhIHRvcCBwb3NpdGlvbiB0aGF0IGlzIGluc2lkZSBpdAotICAg
ICAgICBJbnRQb2ludCBwb2ludChwb2ludEluTG9naWNhbENvbnRlbnRzLngoKSwgY2xvc2VzdEJv
eC0+bG9naWNhbFRvcCgpKTsKKyAgICAgICAgSW50UG9pbnQgcG9pbnQocG9pbnRJbkxvZ2ljYWxD
b250ZW50cy54KCksIGNsb3Nlc3RCb3gtPnJvb3QoKS0+c2VsZWN0aW9uVG9wKCkpOwogICAgICAg
ICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBwb2ludCA9IHBv
aW50LnRyYW5zcG9zZWRQb2ludCgpOwogICAgICAgICBpZiAoY2xvc2VzdEJveC0+cmVuZGVyZXIo
KS0+aXNSZXBsYWNlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5o
CShyZXZpc2lvbiA4NTA2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw2ICsxNTMsNyBAQAogCiAgICAgdm9pZCBkZWxldGVU
ZXh0Qm94ZXMoKTsKICAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbGVuKSBjb25zdDsKKyAgICBib29sIGdldFZpc2libGVQb3NpdGlvbkZvclBv
aW50KElubGluZVRleHRCb3gqLCBpbnQgcG9pbnRMaW5lRGlyZWN0aW9uLCBWaXNpYmxlUG9zaXRp
b24mKTsKICAgICBmbG9hdCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250JiwgaW50IHN0YXJ0LCBp
bnQgbGVuLCBmbG9hdCB4UG9zLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxi
YWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqKSBjb25zdDsKICAgICBib29sIGlzQWxsQVNDSUkoKSBj
b25zdCB7IHJldHVybiBtX2lzQWxsQVNDSUk7IH0KICAgICB2b2lkIHVwZGF0ZU5lZWRzVHJhbnNj
b2RpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHJldmlzaW9u
IDg1MDY3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDcsNyArMjA3LDkgQEAKICAgICAKICAgICBJbmxpbmVCb3gqIG5leHRMZWFm
Q2hpbGQoKSBjb25zdDsKICAgICBJbmxpbmVCb3gqIHByZXZMZWFmQ2hpbGQoKSBjb25zdDsKLSAg
ICAgICAgCisgICAgSW5saW5lQm94KiBuZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKSBj
b25zdDsKKyAgICBJbmxpbmVCb3gqIHByZXZMZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVhaygpIGNv
bnN0OworCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVu
ZGVyZXI7IH0KIAogICAgIElubGluZUZsb3dCb3gqIHBhcmVudCgpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91989</attachid>
            <date>2011-05-02 15:03:17 -0700</date>
            <delta_ts>2011-12-20 23:24:57 -0800</delta_ts>
            <desc>work in progress 3</desc>
            <filename>wip59435c</filename>
            <type>text/plain</type>
            <size>18225</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkocmV2aXNpb24gODU1MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU0LDYgKzEwNTQs
MTEgQEAKICAgICByZXR1cm4gcG9zaXRpb247CiB9CiAKK3N0YXRpYyBib29sIGlzUlRMTGluZUJy
ZWFrSW5Ob25FbXB0eUxpbmUoSW5saW5lVGV4dEJveCogYm94KQoreworICAgIHJldHVybiBib3gt
PmlzTGluZUJyZWFrKCkgJiYgIWJveC0+cHJldkxlYWZDaGlsZCgpICYmIGJveC0+bmV4dExlYWZD
aGlsZCgpOworfQorCiB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmZmlu
aXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJveCom
IGlubGluZUJveCwgaW50JiBjYXJldE9mZnNldCkgY29uc3QKIHsKICAgICBjYXJldE9mZnNldCA9
IGRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CkBAIC0xMDkwLDcgKzEwOTUsOCBAQAogICAgICAg
ICAgICAgaW50IGNhcmV0TWluT2Zmc2V0ID0gYm94LT5jYXJldE1pbk9mZnNldCgpOwogICAgICAg
ICAgICAgaW50IGNhcmV0TWF4T2Zmc2V0ID0gYm94LT5jYXJldE1heE9mZnNldCgpOwogCi0gICAg
ICAgICAgICBpZiAoY2FyZXRPZmZzZXQgPCBjYXJldE1pbk9mZnNldCB8fCBjYXJldE9mZnNldCA+
IGNhcmV0TWF4T2Zmc2V0IHx8IChjYXJldE9mZnNldCA9PSBjYXJldE1heE9mZnNldCAmJiBib3gt
PmlzTGluZUJyZWFrKCkpKQorICAgICAgICAgICAgaWYgKGNhcmV0T2Zmc2V0IDwgY2FyZXRNaW5P
ZmZzZXQgfHwgY2FyZXRPZmZzZXQgPiBjYXJldE1heE9mZnNldCB8fCAoY2FyZXRPZmZzZXQgPT0g
Y2FyZXRNYXhPZmZzZXQgJiYgYm94LT5pc0xpbmVCcmVhaygpKQorICAgICAgICAgICAgICAgIHx8
IChjYXJldE9mZnNldCA9PSBjYXJldE1pbk9mZnNldCAmJiBpc1JUTExpbmVCcmVha0luTm9uRW1w
dHlMaW5lKGJveCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBp
ZiAoY2FyZXRPZmZzZXQgPiBjYXJldE1pbk9mZnNldCAmJiBjYXJldE9mZnNldCA8IGNhcmV0TWF4
T2Zmc2V0KSB7CkBAIC0xMTAyLDYgKzExMDgsOSBAQAogICAgICAgICAgICAgICAgIHx8ICgoY2Fy
ZXRPZmZzZXQgPT0gY2FyZXRNaW5PZmZzZXQpIF4gKGFmZmluaXR5ID09IFVQU1RSRUFNKSkpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAgIGlmIChjYXJldE9mZnNldCA9PSBj
YXJldE1heE9mZnNldCAmJiBib3gtPm5leHRMZWFmQ2hpbGQoKSAmJiBib3gtPm5leHRMZWFmQ2hp
bGQoKS0+aXNMaW5lQnJlYWsoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAg
ICAgY2FuZGlkYXRlID0gYm94OwogICAgICAgICB9CiAgICAgICAgIGlmIChjYW5kaWRhdGUgJiYg
Y2FuZGlkYXRlID09IHRleHRSZW5kZXJlci0+bGFzdFRleHRCb3goKSAmJiBhZmZpbml0eSA9PSBE
T1dOU1RSRUFNKSB7CkBAIC0xMTY0LDEwICsxMTczLDEwIEBACiAgICAgfQogCiAgICAgaWYgKGNh
cmV0T2Zmc2V0ID09IGlubGluZUJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpKSB7Ci0gICAgICAg
IElubGluZUJveCogcHJldkJveCA9IGlubGluZUJveC0+cHJldkxlYWZDaGlsZCgpOworICAgICAg
ICBJbmxpbmVCb3gqIHByZXZCb3ggPSBpbmxpbmVCb3gtPnByZXZMZWFmQ2hpbGRJZ25vcmluZ0xp
bmVCcmVhaygpOwogICAgICAgICBpZiAoIXByZXZCb3ggfHwgcHJldkJveC0+YmlkaUxldmVsKCkg
PCBsZXZlbCkgewogICAgICAgICAgICAgLy8gTGVmdCBlZGdlIG9mIGEgc2Vjb25kYXJ5IHJ1bi4g
U2V0IHRvIHRoZSByaWdodCBlZGdlIG9mIHRoZSBlbnRpcmUgcnVuLgotICAgICAgICAgICAgd2hp
bGUgKElubGluZUJveCogbmV4dEJveCA9IGlubGluZUJveC0+bmV4dExlYWZDaGlsZCgpKSB7Cisg
ICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiBuZXh0Qm94ID0gaW5saW5lQm94LT5uZXh0TGVh
ZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKSkgewogICAgICAgICAgICAgICAgIGlmIChuZXh0Qm94
LT5iaWRpTGV2ZWwoKSA8IGxldmVsKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBpbmxpbmVCb3ggPSBuZXh0Qm94OwpAQCAtMTE3NSw3ICsxMTg0LDcgQEAKICAg
ICAgICAgICAgIGNhcmV0T2Zmc2V0ID0gaW5saW5lQm94LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgp
OwogICAgICAgICB9IGVsc2UgaWYgKHByZXZCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpIHsKICAg
ICAgICAgICAgIC8vIFJpZ2h0IGVkZ2Ugb2YgYSAidGVydGlhcnkiIHJ1bi4gU2V0IHRvIHRoZSBs
ZWZ0IGVkZ2Ugb2YgdGhhdCBydW4uCi0gICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiB0ZXJ0
aWFyeUJveCA9IGlubGluZUJveC0+cHJldkxlYWZDaGlsZCgpKSB7CisgICAgICAgICAgICB3aGls
ZSAoSW5saW5lQm94KiB0ZXJ0aWFyeUJveCA9IGlubGluZUJveC0+cHJldkxlYWZDaGlsZElnbm9y
aW5nTGluZUJyZWFrKCkpIHsKICAgICAgICAgICAgICAgICBpZiAodGVydGlhcnlCb3gtPmJpZGlM
ZXZlbCgpIDw9IGxldmVsKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBpbmxpbmVCb3ggPSB0ZXJ0aWFyeUJveDsKQEAgLTExODMsMTAgKzExOTIsMTAgQEAKICAg
ICAgICAgICAgIGNhcmV0T2Zmc2V0ID0gaW5saW5lQm94LT5jYXJldExlZnRtb3N0T2Zmc2V0KCk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBJbmxpbmVCb3gqIG5leHRCb3ggPSBp
bmxpbmVCb3gtPm5leHRMZWFmQ2hpbGQoKTsKKyAgICAgICAgSW5saW5lQm94KiBuZXh0Qm94ID0g
aW5saW5lQm94LT5uZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKTsKICAgICAgICAgaWYg
KCFuZXh0Qm94IHx8IG5leHRCb3gtPmJpZGlMZXZlbCgpIDwgbGV2ZWwpIHsKICAgICAgICAgICAg
IC8vIFJpZ2h0IGVkZ2Ugb2YgYSBzZWNvbmRhcnkgcnVuLiBTZXQgdG8gdGhlIGxlZnQgZWRnZSBv
ZiB0aGUgZW50aXJlIHJ1bi4KLSAgICAgICAgICAgIHdoaWxlIChJbmxpbmVCb3gqIHByZXZCb3gg
PSBpbmxpbmVCb3gtPnByZXZMZWFmQ2hpbGQoKSkgeworICAgICAgICAgICAgd2hpbGUgKElubGlu
ZUJveCogcHJldkJveCA9IGlubGluZUJveC0+cHJldkxlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFr
KCkpIHsKICAgICAgICAgICAgICAgICBpZiAocHJldkJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgaW5saW5lQm94ID0g
cHJldkJveDsKQEAgLTExOTQsNyArMTIwMyw3IEBACiAgICAgICAgICAgICBjYXJldE9mZnNldCA9
IGlubGluZUJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpOwogICAgICAgICB9IGVsc2UgaWYgKG5l
eHRCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpIHsKICAgICAgICAgICAgIC8vIExlZnQgZWRnZSBv
ZiBhICJ0ZXJ0aWFyeSIgcnVuLiBTZXQgdG8gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhhdCBydW4uCi0g
ICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiB0ZXJ0aWFyeUJveCA9IGlubGluZUJveC0+bmV4
dExlYWZDaGlsZCgpKSB7CisgICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiB0ZXJ0aWFyeUJv
eCA9IGlubGluZUJveC0+bmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAodGVydGlhcnlCb3gtPmJpZGlMZXZlbCgpIDw9IGxldmVsKQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpbmxpbmVCb3ggPSB0ZXJ0aWFy
eUJveDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2
aXNpb24gODU1MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NjcsNyArNTY3LDcgQEAKICAgICAgICAgTm9kZSogbm9kZSA9
IHJlbmRlcmVyLT5ub2RlKCk7CiAgICAgICAgIGlmIChub2RlICYmIGVkaXRpbmdJZ25vcmVzQ29u
dGVudChub2RlKSkKICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9k
ZShub2RlKTsKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5wb3NpdGlvbkZvclBvaW50KEludFBv
aW50KHggLSBhYnNQb3MueCgpLCByb290LT5saW5lVG9wKCkpKTsKKyAgICAgICAgcmV0dXJuIHJl
bmRlcmVyLT5wb3NpdGlvbkZvclBvaW50KEludFBvaW50KHggLSBhYnNQb3MueCgpLCByb290LT5z
ZWxlY3Rpb25Ub3AoKSkpOwogICAgIH0KICAgICAKICAgICAvLyBDb3VsZCBub3QgZmluZCBhIHBy
ZXZpb3VzIGxpbmUuIFRoaXMgbWVhbnMgd2UgbXVzdCBhbHJlYWR5IGJlIG9uIHRoZSBmaXJzdCBs
aW5lLgpAQCAtNjc0LDcgKzY3NCw3IEBACiAgICAgICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlci0+
bm9kZSgpOwogICAgICAgICBpZiAobm9kZSAmJiBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkp
CiAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobm9kZSk7Ci0g
ICAgICAgIHJldHVybiByZW5kZXJlci0+cG9zaXRpb25Gb3JQb2ludChJbnRQb2ludCh4IC0gYWJz
UG9zLngoKSwgcm9vdC0+bGluZVRvcCgpKSk7CisgICAgICAgIHJldHVybiByZW5kZXJlci0+cG9z
aXRpb25Gb3JQb2ludChJbnRQb2ludCh4IC0gYWJzUG9zLngoKSwgcm9vdC0+c2VsZWN0aW9uVG9w
KCkpKTsKICAgICB9ICAgIAogCiAgICAgLy8gQ291bGQgbm90IGZpbmQgYSBuZXh0IGxpbmUuIFRo
aXMgbWVhbnMgd2UgbXVzdCBhbHJlYWR5IGJlIG9uIHRoZSBsYXN0IGxpbmUuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24gODU1MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYw
LDcgKzI2MCwyMyBAQAogICAgICAgICBsZWFmID0gcGFyZW50KCktPnByZXZMZWFmQ2hpbGQoKTsK
ICAgICByZXR1cm4gbGVhZjsKIH0KLSAgICAKKworSW5saW5lQm94KiBJbmxpbmVCb3g6Om5leHRM
ZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVhaygpIGNvbnN0Cit7CisgICAgSW5saW5lQm94KiBsZWFm
ID0gbmV4dExlYWZDaGlsZCgpOworICAgIGlmIChsZWFmICYmIGxlYWYtPmlzTGluZUJyZWFrKCkp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBsZWFmOworfQorCitJbmxpbmVCb3gqIElu
bGluZUJveDo6cHJldkxlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCkgY29uc3QKK3sKKyAgICBJ
bmxpbmVCb3gqIGxlYWYgPSBwcmV2TGVhZkNoaWxkKCk7CisgICAgaWYgKGxlYWYgJiYgbGVhZi0+
aXNMaW5lQnJlYWsoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGxlYWY7Cit9CisK
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lQm94OjpzZWxlY3Rpb25TdGF0ZSgp
CiB7CiAgICAgcmV0dXJuIHJlbmRlcmVyKCktPnNlbGVjdGlvblN0YXRlKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiA4NTUwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDQwLDggKzQ0MCwxMSBAQAogCiAgICAgLy8gdGhlIHggY29vcmRpbmF0ZSBpcyBlcXVhbCB0byB0
aGUgbGVmdCBlZGdlIG9mIHRoaXMgYm94CiAgICAgLy8gdGhlIGFmZmluaXR5IG11c3QgYmUgZG93
bnN0cmVhbSBzbyB0aGUgcG9zaXRpb24gZG9lc24ndCBqdW1wIGJhY2sgdG8gdGhlIHByZXZpb3Vz
IGxpbmUKLSAgICBpZiAocG9pbnRMaW5lRGlyZWN0aW9uID09IGJveC0+bG9naWNhbExlZnQoKSkK
KyAgICAvLyBleGNlcHQgd2hlbiBib3ggaXMgdGhlIGZpcnN0IGJveCBpbiB0aGUgbGluZQorICAg
IGlmIChwb2ludExpbmVEaXJlY3Rpb24gPD0gYm94LT5sb2dpY2FsTGVmdCgpKSB7CisgICAgICAg
IGFmZmluaXR5ID0gKCFib3gtPnByZXZMZWFmQ2hpbGQoKSAmJiBvZmZzZXQgPiAwKSA/IFZQX1VQ
U1RSRUFNX0lGX1BPU1NJQkxFIDogRE9XTlNUUkVBTTsKICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQogCiAgICAgLy8gYW5kIHRoZSB4IGNvb3JkaW5hdGUgaXMgdG8gdGhlIGxlZnQgb2YgdGhl
IHJpZ2h0IGVkZ2Ugb2YgdGhpcyBib3gKICAgICAvLyBjaGVjayB0byBzZWUgaWYgcG9zaXRpb24g
Z29lcyBpbiB0aGlzIGJveApAQCAtNDUyLDEzICs0NTUsMTMgQEAKIAogICAgIC8vIGJveCBpcyBm
aXJzdCBvbiBsaW5lCiAgICAgLy8gYW5kIHRoZSB4IGNvb3JkaW5hdGUgaXMgdG8gdGhlIGxlZnQg
b2YgdGhlIGZpcnN0IHRleHQgYm94IGxlZnQgZWRnZQotICAgIGlmICghYm94LT5wcmV2T25MaW5l
KCkgJiYgcG9pbnRMaW5lRGlyZWN0aW9uIDwgYm94LT5sb2dpY2FsTGVmdCgpKQorICAgIGlmICgo
IWJveC0+cHJldk9uTGluZSgpIHx8IGJveC0+cHJldkxlYWZDaGlsZCgpLT5pc0xpbmVCcmVhaygp
KSAmJiBwb2ludExpbmVEaXJlY3Rpb24gPCBib3gtPmxvZ2ljYWxMZWZ0KCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgaWYgKCFib3gtPm5leHRPbkxpbmUoKSkgewotICAgICAgICAvLyBi
b3ggaXMgbGFzdCBvbiBsaW5lCi0gICAgICAgIC8vIGFuZCB0aGUgeCBjb29yZGluYXRlIGlzIHRv
IHRoZSByaWdodCBvZiB0aGUgbGFzdCB0ZXh0IGJveCByaWdodCBlZGdlCi0gICAgICAgIC8vIGdl
bmVyYXRlIFZpc2libGVQb3NpdGlvbiwgdXNlIFVQU1RSRUFNIGFmZmluaXR5IGlmIHBvc3NpYmxl
CisgICAgLy8gYm94IGlzIGxhc3Qgb24gbGluZQorICAgIC8vIGFuZCB0aGUgeCBjb29yZGluYXRl
IGlzIHRvIHRoZSByaWdodCBvZiB0aGUgbGFzdCB0ZXh0IGJveCByaWdodCBlZGdlCisgICAgLy8g
Z2VuZXJhdGUgVmlzaWJsZVBvc2l0aW9uLCB1c2UgVVBTVFJFQU0gYWZmaW5pdHkgaWYgcG9zc2li
bGUKKyAgICBpZiAoIWJveC0+bmV4dExlYWZDaGlsZCgpIHx8IGJveC0+bmV4dExlYWZDaGlsZCgp
LT5pc0xpbmVCcmVhaygpKSB7CiAgICAgICAgIGFmZmluaXR5ID0gb2Zmc2V0ID4gMCA/IFZQX1VQ
U1RSRUFNX0lGX1BPU1NJQkxFIDogRE9XTlNUUkVBTTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpAQCAtNDcxLDQ1ICs0NzQsNDAgQEAKICAgICBpZiAoIWZpcnN0VGV4dEJveCgpIHx8IHRl
eHRMZW5ndGgoKSA9PSAwKQogICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAs
IERPV05TVFJFQU0pOwogCi0gICAgLy8gR2V0IHRoZSBvZmZzZXQgZm9yIHRoZSBwb3NpdGlvbiwg
c2luY2UgdGhpcyB3aWxsIHRha2UgcnRsIHRleHQgaW50byBhY2NvdW50LgotICAgIGludCBvZmZz
ZXQ7Ci0KICAgICBpbnQgcG9pbnRMaW5lRGlyZWN0aW9uID0gZmlyc3RUZXh0Qm94KCktPmlzSG9y
aXpvbnRhbCgpID8gcG9pbnQueCgpIDogcG9pbnQueSgpOwogICAgIGludCBwb2ludEJsb2NrRGly
ZWN0aW9uID0gZmlyc3RUZXh0Qm94KCktPmlzSG9yaXpvbnRhbCgpID8gcG9pbnQueSgpIDogcG9p
bnQueCgpOwotICAgIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byByb2xsIHRo
ZXNlIHNwZWNpYWwgY2FzZXMgaW50byB0aGUgZ2VuZXJhbCBjYXNlcyBpbiB0aGUgbG9vcCBiZWxv
dy4KLSAgICBpZiAoZmlyc3RUZXh0Qm94KCkgJiYgcG9pbnRCbG9ja0RpcmVjdGlvbiA8ICBmaXJz
dFRleHRCb3goKS0+cm9vdCgpLT5zZWxlY3Rpb25Cb3R0b20oKSAmJiBwb2ludExpbmVEaXJlY3Rp
b24gPCBmaXJzdFRleHRCb3goKS0+bG9naWNhbExlZnQoKSkgewotICAgICAgICAvLyBhdCB0aGUg
eSBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBsaW5lIG9yIGFib3ZlCi0gICAgICAgIC8vIGFuZCB0
aGUgeCBjb29yZGluYXRlIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCB0ZXh0IGJveCBsZWZ0
IGVkZ2UKLSAgICAgICAgb2Zmc2V0ID0gZmlyc3RUZXh0Qm94KCktPm9mZnNldEZvclBvc2l0aW9u
KHBvaW50TGluZURpcmVjdGlvbik7Ci0gICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRp
b24ob2Zmc2V0ICsgZmlyc3RUZXh0Qm94KCktPnN0YXJ0KCksIG9mZnNldCA+IDAgPyBWUF9VUFNU
UkVBTV9JRl9QT1NTSUJMRSA6IERPV05TVFJFQU0pOwotICAgIH0KLSAgICBpZiAobGFzdFRleHRC
b3goKSAmJiBwb2ludEJsb2NrRGlyZWN0aW9uID49IGxhc3RUZXh0Qm94KCktPnJvb3QoKS0+c2Vs
ZWN0aW9uVG9wKCkgJiYgcG9pbnRMaW5lRGlyZWN0aW9uID49IGxhc3RUZXh0Qm94KCktPmxvZ2lj
YWxSaWdodCgpKSB7Ci0gICAgICAgIC8vIGF0IHRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxhc3Qg
bGluZSBvciBiZWxvdwotICAgICAgICAvLyBhbmQgdGhlIHggY29vcmRpbmF0ZSBpcyB0byB0aGUg
cmlnaHQgb2YgdGhlIGxhc3QgdGV4dCBib3ggcmlnaHQgZWRnZQotICAgICAgICBvZmZzZXQgPSBs
YXN0VGV4dEJveCgpLT5vZmZzZXRGb3JQb3NpdGlvbihwb2ludExpbmVEaXJlY3Rpb24pOwotICAg
ICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKG9mZnNldCArIGxhc3RUZXh0Qm94KCkt
PnN0YXJ0KCksIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKTsKLSAgICB9CiAKLSAgICBJbmxpbmVU
ZXh0Qm94KiBsYXN0Qm94QWJvdmUgPSAwOworICAgIElubGluZVRleHRCb3gqIGxhc3RCb3ggPSAw
OwogICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94
ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CisgICAgICAgIGlmIChib3gtPmlzTGluZUJyZWFrKCkg
JiYgIWJveC0+cHJldkxlYWZDaGlsZCgpICYmIGJveC0+bmV4dExlYWZDaGlsZCgpICYmICFib3gt
Pm5leHRMZWFmQ2hpbGQoKS0+aXNMaW5lQnJlYWsoKSkKKyAgICAgICAgICAgIGJveCA9IGJveC0+
bmV4dFRleHRCb3goKTsKKwogICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gYm94LT5y
b290KCk7CiAgICAgICAgIGlmIChwb2ludEJsb2NrRGlyZWN0aW9uID49IHJvb3RCb3gtPnNlbGVj
dGlvblRvcCgpKSB7CiAgICAgICAgICAgICBpbnQgYm90dG9tID0gcm9vdEJveC0+c2VsZWN0aW9u
Qm90dG9tKCk7CiAgICAgICAgICAgICBpZiAocm9vdEJveC0+bmV4dFJvb3RCb3goKSkKICAgICAg
ICAgICAgICAgICBib3R0b20gPSBtaW4oYm90dG9tLCByb290Qm94LT5uZXh0Um9vdEJveCgpLT5s
aW5lVG9wKCkpOwotCiAgICAgICAgICAgICBpZiAocG9pbnRCbG9ja0RpcmVjdGlvbiA8IGJvdHRv
bSkgewogICAgICAgICAgICAgICAgIEVBZmZpbml0eSBhZmZpbml0eTsKICAgICAgICAgICAgICAg
ICBpbnQgb2Zmc2V0ID0gYm94LT5vZmZzZXRGb3JQb3NpdGlvbihwb2ludExpbmVEaXJlY3Rpb24p
OwogICAgICAgICAgICAgICAgIGlmIChsaW5lRGlyZWN0aW9uUG9pbnRGaXRzSW5Cb3gocG9pbnRM
aW5lRGlyZWN0aW9uLCBib3gsIG9mZnNldCwgYWZmaW5pdHkpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKG9mZnNldCArIGJveC0+c3RhcnQoKSwgYWZm
aW5pdHkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGFzdEJveEFib3ZlID0gYm94Owog
ICAgICAgICB9CisgICAgICAgIGxhc3RCb3ggPSBib3g7CiAgICAgfQogCi0gICAgcmV0dXJuIGNy
ZWF0ZVZpc2libGVQb3NpdGlvbihsYXN0Qm94QWJvdmUgPyBsYXN0Qm94QWJvdmUtPnN0YXJ0KCkg
KyBsYXN0Qm94QWJvdmUtPmxlbigpIDogMCwgRE9XTlNUUkVBTSk7CisgICAgaWYgKGxhc3RCb3gp
IHsKKyAgICAgICAgaW50IG9mZnNldCA9IGxhc3RCb3gtPm9mZnNldEZvclBvc2l0aW9uKHBvaW50
TGluZURpcmVjdGlvbik7CisKKyAgICAgICAgRUFmZmluaXR5IGFmZmluaXR5ID0gRE9XTlNUUkVB
TTsKKyAgICAgICAgaWYgKGxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJveChwb2ludExpbmVEaXJl
Y3Rpb24sIGxhc3RCb3gsIG9mZnNldCwgYWZmaW5pdHkpKQorICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZVZpc2libGVQb3NpdGlvbihvZmZzZXQgKyBsYXN0Qm94LT5zdGFydCgpLCBhZmZpbml0eSk7
CisKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihvZmZzZXQgKyBsYXN0Qm94
LT5zdGFydCgpLCBET1dOU1RSRUFNKTsKKyAgICB9CisKKyAgICByZXR1cm4gY3JlYXRlVmlzaWJs
ZVBvc2l0aW9uKDAsIERPV05TVFJFQU0pOwogfQogCiBJbnRSZWN0IFJlbmRlclRleHQ6OmxvY2Fs
Q2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCShyZXZpc2lvbiA4NTUwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwODEsMTQgKzQwODEsMjMgQEAKICAg
ICAgICAgY2xvc2VzdEJveCA9IGxhc3RSb290Qm94V2l0aENoaWxkcmVuLT5jbG9zZXN0TGVhZkNo
aWxkRm9yTG9naWNhbExlZnRQb3NpdGlvbihwb2ludEluTG9naWNhbENvbnRlbnRzLngoKSk7CiAg
ICAgfQogCisgICAgaWYgKGNsb3Nlc3RCb3ggJiYgY2xvc2VzdEJveC0+aXNMaW5lQnJlYWsoKSAm
JiAhY2xvc2VzdEJveC0+cHJldkxlYWZDaGlsZCgpICYmIGNsb3Nlc3RCb3gtPm5leHRMZWFmQ2hp
bGRJZ25vcmluZ0xpbmVCcmVhaygpKQorICAgICAgICBjbG9zZXN0Qm94ID0gY2xvc2VzdEJveC0+
bmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCk7CisKKyAgICBpZiAoY2xvc2VzdEJveCAm
JiBjbG9zZXN0Qm94LT5pc0xpbmVCcmVhaygpICYmICFjbG9zZXN0Qm94LT5uZXh0TGVhZkNoaWxk
KCkgJiYgY2xvc2VzdEJveC0+cHJldkxlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCkpCisgICAg
ICAgIGNsb3Nlc3RCb3ggPSBjbG9zZXN0Qm94LT5wcmV2TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJl
YWsoKTsKKwogICAgIGlmIChjbG9zZXN0Qm94KSB7CiAgICAgICAgIGlmIChtb3ZlQ2FyZXRUb0Jv
dW5kYXJ5ICYmIHBvaW50SW5Mb2dpY2FsQ29udGVudHMueSgpIDwgZmlyc3RSb290Qm94V2l0aENo
aWxkcmVuLT5zZWxlY3Rpb25Ub3AoKSkgewogICAgICAgICAgICAgLy8geSBjb29yZGluYXRlIGlz
IGFib3ZlIGZpcnN0IHJvb3QgbGluZSBib3gsIHNvIHJldHVybiB0aGUgc3RhcnQgb2YgdGhlIGZp
cnN0Ci0gICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHBvc2l0aW9uRm9yQm94KGZp
cnN0Um9vdEJveFdpdGhDaGlsZHJlbi0+Zmlyc3RMZWFmQ2hpbGQoKSwgdHJ1ZSksIERPV05TVFJF
QU0pOworICAgICAgICAgICAgSW5saW5lQm94KiBib3ggPSBmaXJzdFJvb3RCb3hXaXRoQ2hpbGRy
ZW4tPmZpcnN0TGVhZkNoaWxkKCk7CisgICAgICAgICAgICBpZiAoYm94LT5pc0xpbmVCcmVhaygp
ICYmIGJveC0+bmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCkpCisgICAgICAgICAgICAg
ICAgYm94ID0gYm94LT5uZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKTsKKyAgICAgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24ocG9zaXRpb25Gb3JCb3goYm94LCBzdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpLCBET1dOU1RSRUFNKTsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIHBhc3MgdGhlIGJveCBhIHRvcCBwb3NpdGlvbiB0aGF0IGlzIGluc2lkZSBpdAotICAg
ICAgICBJbnRQb2ludCBwb2ludChwb2ludEluTG9naWNhbENvbnRlbnRzLngoKSwgY2xvc2VzdEJv
eC0+bG9naWNhbFRvcCgpKTsKKyAgICAgICAgSW50UG9pbnQgcG9pbnQocG9pbnRJbkxvZ2ljYWxD
b250ZW50cy54KCksIGNsb3Nlc3RCb3gtPnJvb3QoKS0+c2VsZWN0aW9uVG9wKCkpOwogICAgICAg
ICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBwb2ludCA9IHBv
aW50LnRyYW5zcG9zZWRQb2ludCgpOwogICAgICAgICBpZiAoY2xvc2VzdEJveC0+cmVuZGVyZXIo
KS0+aXNSZXBsYWNlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJv
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAko
cmV2aXNpb24gODU1MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNyw3ICsyMDcsOSBAQAogICAgIAogICAgIElubGluZUJveCog
bmV4dExlYWZDaGlsZCgpIGNvbnN0OwogICAgIElubGluZUJveCogcHJldkxlYWZDaGlsZCgpIGNv
bnN0OwotICAgICAgICAKKyAgICBJbmxpbmVCb3gqIG5leHRMZWFmQ2hpbGRJZ25vcmluZ0xpbmVC
cmVhaygpIGNvbnN0OworICAgIElubGluZUJveCogcHJldkxlYWZDaGlsZElnbm9yaW5nTGluZUJy
ZWFrKCkgY29uc3Q7CisKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1
cm4gbV9yZW5kZXJlcjsgfQogCiAgICAgSW5saW5lRmxvd0JveCogcGFyZW50KCkgY29uc3QKSW5k
ZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdC1saW5lLWJyZWFrLXdpdGgt
b3Bwb3NpdGUtZGlyZWN0aW9uYWxpdHkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9l
ZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3QtbGluZS1icmVhay13aXRoLW9wcG9zaXRlLWRpcmVjdGlv
bmFsaXR5Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlv
bi9zZWxlY3QtbGluZS1icmVhay13aXRoLW9wcG9zaXRlLWRpcmVjdGlvbmFsaXR5Lmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDtj
aGFyc2V0PXV0Zi04Ij4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisKKy50ZXN0cyB7CisgICAg
d2lkdGg6IDI1MHB4OworICAgIGZsb2F0OiBsZWZ0OworICAgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9
CisKKy50ZXN0cyBkaXYsIC50ZXN0cyBwcmUgeworICAgIGJvcmRlcjogc29saWQgMXB4IGJsYWNr
OworICAgIHdpZHRoOiAyMDBweDsKKyAgICBmb250LXNpemU6IDEzcHg7CisgICAgbGluZS1oZWln
aHQ6IDEzcHg7CisgICAgcGFkZGluZzogMTNweDsKK30KKworLmhpZGVUZXN0c0luRFJUIC50ZXN0
cyB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5Pgor
PHA+VGhpcyB0ZXN0cyBzZWxlY3RpbmcgTFRSL1JUTCB0ZXh0IHRoYXQgc3BhbnMgbXVsdGlwbGUg
bGluZXMgaW4gUlRML0xUUiBibG9jayAob3Bwb3NpdGUgZGlyZWN0aW9uYWxpdHkpLgorVG8gbWFu
dWFsbHkgdGVzdCwgc2VsZWN0IHRleHQgaW4gZWFjaCBvZiBlZGl0YWJsZSByZWdpb25zIGJlbG93
IGJ5IGRyYWdnaW5nIG1vdXNlIGZyb20gb25lIGVkZ2UgdG8gYW5vdGhlci4KK1RoZSBlbnRpcmUg
bGluZSBzaG91bGQgYmUgc2VsZWN0ZWQuPC9wPgorPGJvZHk+Cis8b2wgY2xhc3M9InRlc3RzIj4K
KzxsaT48ZGl2IGNvbnRlbnRlZGl0YWJsZSB0aXRsZT0iMCAzLCA0IDYiPmFiYzxicj5kZWY8L2Rp
dj48L2xpPgorPGxpPjxkaXYgY29udGVudGVkaXRhYmxlIHRpdGxlPSIwIDMiPtin2KjYtTwvZGl2
PjwvbGk+Cis8bGk+PGRpdiBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiIHRpdGxlPSIwIDMiPmFi
YzwvZGl2PjwvbGk+Cis8bGk+PGRpdiBjb250ZW50ZWRpdGFibGUgdGl0bGU9IjAgMywgNCwgNSA2
Ij7Yp9io2LU8c3BhbiBkaXI9Imx0ciI+PGJyPjxicj5hPC9zcGFuPjwvZGl2PjwvbGk+Cis8bGk+
PGRpdiBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiIHRpdGxlPSIwIDMsIDQsIDUgNiI+YWJjPHNw
YW4gZGlyPSJydGwiPjxicj48YnI+2Kc8L3NwYW4+PC9kaXY+PC9saT4KKzxsaT48ZGl2IGNvbnRl
bnRlZGl0YWJsZSB0aXRsZT0iMCAzLCA0LCA1IDYiPtin2KjYtTxicj48YnI+YTwvZGl2PjwvbGk+
Cis8bGk+PGRpdiBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiIHRpdGxlPSIwIDMsIDQsIDUgNiI+
2KfYqNi1PGJyPjxicj5hPC9kaXY+PC9saT4KKzwvb2w+Cis8b2wgY2xhc3M9InRlc3RzIj4KKzxs
aT48cHJlIGNvbnRlbnRlZGl0YWJsZSB0aXRsZT0iMCAzLCA0LCA1IDYiPjxzcGFuIGRpcj0icnRs
Ij7Yp9io2LUKKworYTwvc3Bhbj48L3ByZT48L2xpPgorPGxpPjxwcmUgY29udGVudGVkaXRhYmxl
IGRpcj0icnRsIiB0aXRsZT0iMCAzLCA0LCA1IDYiPjxzcGFuIGRpcj0ibHRyIj5hYmMKKworYTwv
c3Bhbj48L3ByZT48L2xpPgorPGxpPjxwcmUgY29udGVudGVkaXRhYmxlIGRpcj0icnRsIiB0aXRs
ZT0iMCAzLCA0LCA1IDYiPmFiYzxzcGFuIGRpcj0icnRsIj4KKworYTwvc3Bhbj48L3ByZT48L2xp
PgorPC9vbD4KKzxwcmUgaWQ9ImxvZyI+PHNjcmlwdD4KKworZnVuY3Rpb24gc2VsZWN0TGluZVNh
ZmVseSh0ZXN0LCBsaW5lVG9wKSB7CisgICAgdmFyIHkgPSB0ZXN0Lm9mZnNldFRvcCArIGxpbmVU
b3AgKyA1OworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRlc3Qub2Zmc2V0TGVmdCArIDUs
IHkpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworCisgICAgZXZlbnRTZW5kZXIubGVh
cEZvcndhcmQoMjAwKTsKKworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRlc3Qub2Zmc2V0
TGVmdCArIHRlc3Qub2Zmc2V0V2lkdGggLSA1LCB5KTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVw
KCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICBpZiAoIXdpbmRvdy5ldmVudFNlbmRl
cikKKyAgICAgICAgZG9jdW1lbnQud3JpdGVsbignVGhpcyB0ZXN0IHJlcXVpcmVzIGV2ZW50U2Vu
ZGVyJyk7CisgICAgZWxzZSB7CisgICAgICAgIHZhciB0ZXN0cyA9IGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCdsaScpOworICAgICAgICB2YXIgdGVzdE51bWJlciA9IDA7CisKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
dmFyIHRlc3QgPSB0ZXN0c1tpXS5maXJzdENoaWxkOworICAgICAgICAgICAgb2Zmc2V0cyA9IHRl
c3QudGl0bGUuc3BsaXQoJywgJyk7CisKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwg
b2Zmc2V0cy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LndyaXRlKCdURVNUICcgKyAo
aSArIDEpICsgJyBsaW5lICcgKyAoaiArIDEpICsgJzonICsgbXNnICsgJ1xuJyk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gcGFyc2VJbnQob2Zmc2V0
c1tqXS5zcGxpdCgnICcpWzBdKTsKKyAgICAgICAgICAgICAgICB2YXIgYWZ0ZXJFbmQgPSBwYXJz
ZUludChvZmZzZXRzW2pdLnNwbGl0KCcgJylbMV0pOyAvLyBNaWdodCBiZSBOYU4KKyAgICAgICAg
ICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOworCisgICAgICAg
ICAgICAgICAgc2VsZWN0TGluZVNhZmVseSh0ZXN0LCAxMyAqIChqICsgMSkpOworCisgICAgICAg
ICAgICAgICAgdmFyIGFjdHVhbCA9IHNlbGVjdGlvbi50b1N0cmluZygpOworICAgICAgICAgICAg
ICAgIHZhciBleHBlY3RlZCA9IHRlc3QuaW5uZXJUZXh0LnN1YnN0cihzdGFydCwgYWZ0ZXJFbmQp
OworICAgICAgICAgICAgICAgIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpCisgICAgICAgICAgICAg
ICAgICAgIGxvZygnUEFTUycpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgbG9nKCdGQUlMIC0gZXhwZWN0ZWQgIicgKyBleHBlY3RlZCArICciIGJ1dCBnb3QgIicg
KyBhY3R1YWwgKyAnIicpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
ZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgPSAnaGlkZVRlc3RzSW5EUlQnOworfQorCitkb2N1bWVu
dC5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb25jaGFuZ2UnLCBmdW5jdGlvbiAoKSB7CisgICAg
dmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9u
LmlzQ29sbGFwc2VkKQorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJykuaW5u
ZXJIVE1MICs9IHNlbGVjdGlvbi5iYXNlT2Zmc2V0ICsgJ1xuJzsKKyAgICBlbHNlCisgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2cnKS5pbm5lckhUTUwgKz0gc2VsZWN0aW9uLmJh
c2VPZmZzZXQgKyAnOicgKyBzZWxlY3Rpb24uZXh0ZW50T2Zmc2V0ICsgJ1xuJzsKK30pCisKKzwv
c2NyaXB0Cis+PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxl
Y3Rpb24vc2VsZWN0LWxpbmUtYnJlYWstd2l0aC1vcHBvc2l0ZS1kaXJlY3Rpb25hbGl0eS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vc2Vs
ZWN0LWxpbmUtYnJlYWstd2l0aC1vcHBvc2l0ZS1kaXJlY3Rpb25hbGl0eS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3QtbGlu
ZS1icmVhay13aXRoLW9wcG9zaXRlLWRpcmVjdGlvbmFsaXR5LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzMCBAQAorVGhpcyB0ZXN0cyBzZWxlY3RpbmcgTFRSL1JUTCB0ZXh0
IHRoYXQgc3BhbnMgbXVsdGlwbGUgbGluZXMgaW4gUlRML0xUUiBibG9jayAob3Bwb3NpdGUgZGly
ZWN0aW9uYWxpdHkpLiBUbyBtYW51YWxseSB0ZXN0LCBzZWxlY3QgdGV4dCBpbiBlYWNoIG9mIGVk
aXRhYmxlIHJlZ2lvbnMgYmVsb3cgYnkgZHJhZ2dpbmcgbW91c2UgZnJvbSBvbmUgZWRnZSB0byBh
bm90aGVyLiBUaGUgZW50aXJlIGxpbmUgc2hvdWxkIGJlIHNlbGVjdGVkLgorCitURVNUIDEgbGlu
ZSAxOlBBU1MKK1RFU1QgMSBsaW5lIDI6UEFTUworVEVTVCAyIGxpbmUgMTpQQVNTCitURVNUIDMg
bGluZSAxOlBBU1MKK1RFU1QgNCBsaW5lIDE6UEFTUworVEVTVCA0IGxpbmUgMjpQQVNTCitURVNU
IDQgbGluZSAzOlBBU1MKK1RFU1QgNSBsaW5lIDE6UEFTUworVEVTVCA1IGxpbmUgMjpQQVNTCitU
RVNUIDUgbGluZSAzOlBBU1MKK1RFU1QgNiBsaW5lIDE6UEFTUworVEVTVCA2IGxpbmUgMjpQQVNT
CitURVNUIDYgbGluZSAzOlBBU1MKK1RFU1QgNyBsaW5lIDE6UEFTUworVEVTVCA3IGxpbmUgMjpQ
QVNTCitURVNUIDcgbGluZSAzOlBBU1MKK1RFU1QgOCBsaW5lIDE6UEFTUworVEVTVCA4IGxpbmUg
MjpQQVNTCitURVNUIDggbGluZSAzOlBBU1MKK1RFU1QgOSBsaW5lIDE6UEFTUworVEVTVCA5IGxp
bmUgMjpQQVNTCitURVNUIDkgbGluZSAzOlBBU1MKK1RFU1QgMTAgbGluZSAxOlBBU1MKK1RFU1Qg
MTAgbGluZSAyOlBBU1MKK1RFU1QgMTAgbGluZSAzOlBBU1MKKworCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120150</attachid>
            <date>2011-12-20 23:25:04 -0800</date>
            <delta_ts>2011-12-22 01:13:09 -0800</delta_ts>
            <desc>Finally, it&apos;s time to fix this old bug</desc>
            <filename>bug-59435-20111220232503.patch</filename>
            <type>text/plain</type>
            <size>24739</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzM5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDExLTEyLTIwICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJFR1JFU1NJT04ocjc0OTcxKTog
Q2FuJ3Qgc2VsZWN0IGEgbGluZSBvZiBSVEwgdGV4dCBvbiBGYWNlYm9vaworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk0MzUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgYnVnIHdhcyBjYXVzZWQgYnkg
aW5saW5lIHRleHQgYm94ZXMgY3JlYXRlZCBieSBCUnMgYmVpbmcgcGxhY2VkIGF0IHRoZSBlbmQg
b2YgdGhlIGxpbmUKKyAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBibG9jaydzIGRpcmVjdGlvbiBy
ZWdhcmRsZXNzIG9mIGl0cyB1bmljb2RlIGJpZGktbGV2ZWw7IHRoZSBoaXQgdGVzdGluZyBhbmQK
KyAgICAgICAgZWRpdGluZyBjb2RlIGRvZXNuJ3QgcXVpdGUgdW5kZXJzdGFuZCB0aGlzIGNvbnN0
cnVjdGlvbi4KKworICAgICAgICBGaXhlZCB0aGUgYnVnIGJ5IHJlcGxhY2luZyBjYWxscyB0byBu
ZXh0TGVhZkNoaWxkIGFuZCBwcmV2TGVhZkNoaWxkIGJ5IG5ld2x5IGludHJvZHVjZWQKKyAgICAg
ICAgbmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrIGFuZCBwcmV2TGVhZkNoaWxkSWdub3Jp
bmdMaW5lQnJlYWsuIFRoZXNlIHR3byBmdW5jdGlvbnMgd2lsbAorICAgICAgICByZXR1cm4gMCB3
aGVuIHRoZXkgaGl0IHRoZSBlbmQgb2YgYSBsaW5lIG9yIGlubGluZSB0ZXh0IGJveCB0aGF0J3Mg
YSBsaW5lIGJyZWFrLgorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdC1s
aW5lLWJyZWFrLXdpdGgtb3Bwb3NpdGUtZGlyZWN0aW9uYWxpdHkuaHRtbAorCisgICAgICAgICog
ZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpnZXRJbmxpbmVC
b3hBbmRPZmZzZXQpOgorICAgICAgICAqIGVkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJlZFBvc2l0aW9uOjpwcmV2TGVhZkNoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246Om5leHRMZWFmQ2hpbGQpOgorICAgICAgICAq
IHJlbmRlcmluZy9JbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94Ojpu
ZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
Qm94OjpwcmV2TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWspOgorICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnRXaXRoSW5saW5lQ2hp
bGRyZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJveCk6IElmIHdlJ3JlIG9uIHRoZSBsZWZ0
IG9mIGEgUlRMIGxpbmUsIHdlIHNob3VsZCBzdGF5IGF0CisgICAgICAgIHVwc3RyZWFtIHBvc2l0
aW9uIHNpbmNlIHdlJ3JlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlVmlzaWJsZVBvc2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZzZXRGb3JCaURpKTogTWVyZ2Ug
dGhlIHR3byBzcGVjaWFsIGNhc2VzIGludG8KKyAgICAgICAgdGhlIGdlbmVyYWwgbG9vcCBhcyB0
aGUgY29tbWVudCBzdWdnZXN0cy4gU2tpcCBhbiBpbmxpbmUgdGV4dCBib3ggZm9yIGEgbGluZSBi
cmVhayBhdCB0aGUgbGVmdAorICAgICAgICBlZGdlIHdoZW4gdGhlcmUgYXJlIG1vcmUgbGluZSBi
b3hlcyBvbiB0aGUgbGluZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnBvc2l0aW9u
Rm9yUG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmNsb3Nlc3RMZWFmQ2hpbGRGb3JMb2dpY2FsTGVm
dFBvc2l0aW9uKTogSWdub3JlIGxpbmUgYm94ZXMgY3JlYXRlZCBmb3IKKyAgICAgICAgbGluZSBi
b3hlcyB3aGVuIHRoZXJlIGFyZSBvdGhlciBib3hlcyBvbiB0aGUgbGluZS4KKwogMjAxMS0xMi0y
MCAgUGV0ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQ29kZUdlbmVyYXRvciBzaG91bGQgbm90IHVzZSBwb2ludGVycyBmb3Igb3V0IHBh
cmFtcyBvZiBSZWZQdHIgdHlwZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkocmV2aXNp
b24gMTAzMzgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE1Miw3ICsxMTUyLDggQEAgdm9pZCBQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5k
T2Zmc2V0KEVBZgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoKChjYXJldE9mZnNl
dCA9PSBjYXJldE1heE9mZnNldCkgXiAoYWZmaW5pdHkgPT0gRE9XTlNUUkVBTSkpCi0gICAgICAg
ICAgICAgICAgfHwgKChjYXJldE9mZnNldCA9PSBjYXJldE1pbk9mZnNldCkgXiAoYWZmaW5pdHkg
PT0gVVBTVFJFQU0pKSkKKyAgICAgICAgICAgICAgICB8fCAoKGNhcmV0T2Zmc2V0ID09IGNhcmV0
TWluT2Zmc2V0KSBeIChhZmZpbml0eSA9PSBVUFNUUkVBTSkpCisgICAgICAgICAgICAgICAgfHwg
KGNhcmV0T2Zmc2V0ID09IGNhcmV0TWF4T2Zmc2V0ICYmIGJveC0+bmV4dExlYWZDaGlsZCgpICYm
IGJveC0+bmV4dExlYWZDaGlsZCgpLT5pc0xpbmVCcmVhaygpKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgY2FuZGlkYXRlID0gYm94OwpAQCAtMTIxNywxMCArMTIxOCwx
MCBAQCB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmCiAgICAgfQogCiAg
ICAgaWYgKGNhcmV0T2Zmc2V0ID09IGlubGluZUJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpKSB7
Ci0gICAgICAgIElubGluZUJveCogcHJldkJveCA9IGlubGluZUJveC0+cHJldkxlYWZDaGlsZCgp
OworICAgICAgICBJbmxpbmVCb3gqIHByZXZCb3ggPSBpbmxpbmVCb3gtPnByZXZMZWFmQ2hpbGRJ
Z25vcmluZ0xpbmVCcmVhaygpOwogICAgICAgICBpZiAoIXByZXZCb3ggfHwgcHJldkJveC0+Ymlk
aUxldmVsKCkgPCBsZXZlbCkgewogICAgICAgICAgICAgLy8gTGVmdCBlZGdlIG9mIGEgc2Vjb25k
YXJ5IHJ1bi4gU2V0IHRvIHRoZSByaWdodCBlZGdlIG9mIHRoZSBlbnRpcmUgcnVuLgotICAgICAg
ICAgICAgd2hpbGUgKElubGluZUJveCogbmV4dEJveCA9IGlubGluZUJveC0+bmV4dExlYWZDaGls
ZCgpKSB7CisgICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiBuZXh0Qm94ID0gaW5saW5lQm94
LT5uZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKSkgewogICAgICAgICAgICAgICAgIGlm
IChuZXh0Qm94LT5iaWRpTGV2ZWwoKSA8IGxldmVsKQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICBpbmxpbmVCb3ggPSBuZXh0Qm94OwpAQCAtMTIyOCw3ICsxMjI5
LDcgQEAgdm9pZCBQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZgogICAgICAgICAg
ICAgY2FyZXRPZmZzZXQgPSBpbmxpbmVCb3gtPmNhcmV0UmlnaHRtb3N0T2Zmc2V0KCk7CiAgICAg
ICAgIH0gZWxzZSBpZiAocHJldkJveC0+YmlkaUxldmVsKCkgPiBsZXZlbCkgewogICAgICAgICAg
ICAgLy8gUmlnaHQgZWRnZSBvZiBhICJ0ZXJ0aWFyeSIgcnVuLiBTZXQgdG8gdGhlIGxlZnQgZWRn
ZSBvZiB0aGF0IHJ1bi4KLSAgICAgICAgICAgIHdoaWxlIChJbmxpbmVCb3gqIHRlcnRpYXJ5Qm94
ID0gaW5saW5lQm94LT5wcmV2TGVhZkNoaWxkKCkpIHsKKyAgICAgICAgICAgIHdoaWxlIChJbmxp
bmVCb3gqIHRlcnRpYXJ5Qm94ID0gaW5saW5lQm94LT5wcmV2TGVhZkNoaWxkSWdub3JpbmdMaW5l
QnJlYWsoKSkgewogICAgICAgICAgICAgICAgIGlmICh0ZXJ0aWFyeUJveC0+YmlkaUxldmVsKCkg
PD0gbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGlu
bGluZUJveCA9IHRlcnRpYXJ5Qm94OwpAQCAtMTIzNiwxMCArMTIzNywxMCBAQCB2b2lkIFBvc2l0
aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmCiAgICAgICAgICAgICBjYXJldE9mZnNldCA9
IGlubGluZUJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpOwogICAgICAgICB9CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgSW5saW5lQm94KiBuZXh0Qm94ID0gaW5saW5lQm94LT5uZXh0TGVhZkNoaWxk
KCk7CisgICAgICAgIElubGluZUJveCogbmV4dEJveCA9IGlubGluZUJveC0+bmV4dExlYWZDaGls
ZElnbm9yaW5nTGluZUJyZWFrKCk7CiAgICAgICAgIGlmICghbmV4dEJveCB8fCBuZXh0Qm94LT5i
aWRpTGV2ZWwoKSA8IGxldmVsKSB7CiAgICAgICAgICAgICAvLyBSaWdodCBlZGdlIG9mIGEgc2Vj
b25kYXJ5IHJ1bi4gU2V0IHRvIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGVudGlyZSBydW4uCi0gICAg
ICAgICAgICB3aGlsZSAoSW5saW5lQm94KiBwcmV2Qm94ID0gaW5saW5lQm94LT5wcmV2TGVhZkNo
aWxkKCkpIHsKKyAgICAgICAgICAgIHdoaWxlIChJbmxpbmVCb3gqIHByZXZCb3ggPSBpbmxpbmVC
b3gtPnByZXZMZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVhaygpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKHByZXZCb3gtPmJpZGlMZXZlbCgpIDwgbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIGlubGluZUJveCA9IHByZXZCb3g7CkBAIC0xMjQ3LDcgKzEy
NDgsNyBAQCB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmCiAgICAgICAg
ICAgICBjYXJldE9mZnNldCA9IGlubGluZUJveC0+Y2FyZXRMZWZ0bW9zdE9mZnNldCgpOwogICAg
ICAgICB9IGVsc2UgaWYgKG5leHRCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpIHsKICAgICAgICAg
ICAgIC8vIExlZnQgZWRnZSBvZiBhICJ0ZXJ0aWFyeSIgcnVuLiBTZXQgdG8gdGhlIHJpZ2h0IGVk
Z2Ugb2YgdGhhdCBydW4uCi0gICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiB0ZXJ0aWFyeUJv
eCA9IGlubGluZUJveC0+bmV4dExlYWZDaGlsZCgpKSB7CisgICAgICAgICAgICB3aGlsZSAoSW5s
aW5lQm94KiB0ZXJ0aWFyeUJveCA9IGlubGluZUJveC0+bmV4dExlYWZDaGlsZElnbm9yaW5nTGlu
ZUJyZWFrKCkpIHsKICAgICAgICAgICAgICAgICBpZiAodGVydGlhcnlCb3gtPmJpZGlMZXZlbCgp
IDw9IGxldmVsKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBp
bmxpbmVCb3ggPSB0ZXJ0aWFyeUJveDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVu
ZGVyZWRQb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZW5kZXJlZFBvc2l0aW9uLmNwcAkocmV2aXNpb24gMTAzMzgwKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDE0ICsx
MDAsMTQgQEAgUmVuZGVyZWRQb3NpdGlvbjo6UmVuZGVyZWRQb3NpdGlvbihjb25zdAogSW5saW5l
Qm94KiBSZW5kZXJlZFBvc2l0aW9uOjpwcmV2TGVhZkNoaWxkKCkgY29uc3QKIHsKICAgICBpZiAo
bV9wcmV2TGVhZkNoaWxkID09IHVuY2FjaGVkSW5saW5lQm94KCkpCi0gICAgICAgIG1fcHJldkxl
YWZDaGlsZCA9IG1faW5saW5lQm94LT5wcmV2TGVhZkNoaWxkKCk7CisgICAgICAgIG1fcHJldkxl
YWZDaGlsZCA9IG1faW5saW5lQm94LT5wcmV2TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKTsK
ICAgICByZXR1cm4gbV9wcmV2TGVhZkNoaWxkOwogfQogCiBJbmxpbmVCb3gqIFJlbmRlcmVkUG9z
aXRpb246Om5leHRMZWFmQ2hpbGQoKSBjb25zdAogewogICAgIGlmIChtX25leHRMZWFmQ2hpbGQg
PT0gdW5jYWNoZWRJbmxpbmVCb3goKSkKLSAgICAgICAgbV9uZXh0TGVhZkNoaWxkID0gbV9pbmxp
bmVCb3gtPm5leHRMZWFmQ2hpbGQoKTsKKyAgICAgICAgbV9uZXh0TGVhZkNoaWxkID0gbV9pbmxp
bmVCb3gtPm5leHRMZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVhaygpOwogICAgIHJldHVybiBtX25l
eHRMZWFmQ2hpbGQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3gu
Y3BwCShyZXZpc2lvbiAxMDMzODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5MiwyMyBAQCBJbmxpbmVCb3gqIElu
bGluZUJveDo6cHJldkxlYWZDaGlsZCgpIGNvCiAgICAgICAgIGxlYWYgPSBwYXJlbnQoKS0+cHJl
dkxlYWZDaGlsZCgpOwogICAgIHJldHVybiBsZWFmOwogfQotICAgIAorCitJbmxpbmVCb3gqIElu
bGluZUJveDo6bmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCkgY29uc3QKK3sKKyAgICBJ
bmxpbmVCb3gqIGxlYWYgPSBuZXh0TGVhZkNoaWxkKCk7CisgICAgaWYgKGxlYWYgJiYgbGVhZi0+
aXNMaW5lQnJlYWsoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGxlYWY7Cit9CisK
K0lubGluZUJveCogSW5saW5lQm94OjpwcmV2TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKSBj
b25zdAoreworICAgIElubGluZUJveCogbGVhZiA9IHByZXZMZWFmQ2hpbGQoKTsKKyAgICBpZiAo
bGVhZiAmJiBsZWFmLT5pc0xpbmVCcmVhaygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gbGVhZjsKK30KKwogUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVCb3g6OnNl
bGVjdGlvblN0YXRlKCkKIHsKICAgICByZXR1cm4gcmVuZGVyZXIoKS0+c2VsZWN0aW9uU3RhdGUo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHJldmlzaW9uIDEwMzM4
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5
KQpAQCAtMjAwLDcgKzIwMCw5IEBAIHB1YmxpYzoKICAgICAKICAgICBJbmxpbmVCb3gqIG5leHRM
ZWFmQ2hpbGQoKSBjb25zdDsKICAgICBJbmxpbmVCb3gqIHByZXZMZWFmQ2hpbGQoKSBjb25zdDsK
LSAgICAgICAgCisgICAgSW5saW5lQm94KiBuZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWso
KSBjb25zdDsKKyAgICBJbmxpbmVCb3gqIHByZXZMZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVhaygp
IGNvbnN0OworCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
cmVuZGVyZXI7IH0KIAogICAgIElubGluZUZsb3dCb3gqIHBhcmVudCgpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDEwMzM4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0NDcsMTIgKzQ0NDcsMTcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpw
b3NpdGlvbkZvcgogICAgIGlmIChjbG9zZXN0Qm94KSB7CiAgICAgICAgIGlmIChtb3ZlQ2FyZXRU
b0JvdW5kYXJ5ICYmIHBvaW50SW5Mb2dpY2FsQ29udGVudHMueSgpIDwgZmlyc3RSb290Qm94V2l0
aENoaWxkcmVuLT5zZWxlY3Rpb25Ub3AoKQogICAgICAgICAgICAgJiYgcG9pbnRJbkxvZ2ljYWxD
b250ZW50cy55KCkgPCBmaXJzdFJvb3RCb3hXaXRoQ2hpbGRyZW4tPmxvZ2ljYWxUb3AoKSkgewor
ICAgICAgICAgICAgSW5saW5lQm94KiBib3ggPSBmaXJzdFJvb3RCb3hXaXRoQ2hpbGRyZW4tPmZp
cnN0TGVhZkNoaWxkKCk7CisgICAgICAgICAgICBpZiAoYm94LT5pc0xpbmVCcmVhaygpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKElubGluZUJveCogbmV3Qm94ID0gYm94LT5uZXh0TGVhZkNoaWxk
SWdub3JpbmdMaW5lQnJlYWsoKSkKKyAgICAgICAgICAgICAgICAgICAgYm94ID0gbmV3Qm94Owor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8geSBjb29yZGluYXRlIGlzIGFib3ZlIGZpcnN0
IHJvb3QgbGluZSBib3gsIHNvIHJldHVybiB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0Ci0gICAgICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHBvc2l0aW9uRm9yQm94KGZpcnN0Um9vdEJveFdp
dGhDaGlsZHJlbi0+Zmlyc3RMZWFmQ2hpbGQoKSwgdHJ1ZSksIERPV05TVFJFQU0pOworICAgICAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihwb3NpdGlvbkZvckJveChib3gsIHRydWUpLCBE
T1dOU1RSRUFNKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIHBhc3MgdGhlIGJveCBhIHRvcCBw
b3NpdGlvbiB0aGF0IGlzIGluc2lkZSBpdAotICAgICAgICBMYXlvdXRQb2ludCBwb2ludChwb2lu
dEluTG9naWNhbENvbnRlbnRzLngoKSwgY2xvc2VzdEJveC0+bG9naWNhbFRvcCgpKTsKKyAgICAg
ICAgTGF5b3V0UG9pbnQgcG9pbnQocG9pbnRJbkxvZ2ljYWxDb250ZW50cy54KCksIG1heChjbG9z
ZXN0Qm94LT5yb290KCktPmxpbmVUb3AoKSwgY2xvc2VzdEJveC0+cm9vdCgpLT5zZWxlY3Rpb25U
b3AoKSkpOwogICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAg
ICAgICBwb2ludCA9IHBvaW50LnRyYW5zcG9zZWRQb2ludCgpOwogICAgICAgICBpZiAoY2xvc2Vz
dEJveC0+cmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMTAzMzgwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsOCArNDc3LDEx
IEBAIHN0YXRpYyBib29sIGxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJveCgKIAogICAgIC8vIHRo
ZSB4IGNvb3JkaW5hdGUgaXMgZXF1YWwgdG8gdGhlIGxlZnQgZWRnZSBvZiB0aGlzIGJveAogICAg
IC8vIHRoZSBhZmZpbml0eSBtdXN0IGJlIGRvd25zdHJlYW0gc28gdGhlIHBvc2l0aW9uIGRvZXNu
J3QganVtcCBiYWNrIHRvIHRoZSBwcmV2aW91cyBsaW5lCi0gICAgaWYgKHBvaW50TGluZURpcmVj
dGlvbiA9PSBib3gtPmxvZ2ljYWxMZWZ0KCkpCisgICAgLy8gZXhjZXB0IHdoZW4gYm94IGlzIHRo
ZSBmaXJzdCBib3ggaW4gdGhlIGxpbmUKKyAgICBpZiAocG9pbnRMaW5lRGlyZWN0aW9uIDw9IGJv
eC0+bG9naWNhbExlZnQoKSkgeworICAgICAgICBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSA9
ICFib3gtPnByZXZMZWFmQ2hpbGQoKSA/IFVwc3RyZWFtSWZQb3NpdGlvbklzTm90QXRTdGFydCA6
IEFsd2F5c0Rvd25zdHJlYW07CiAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAgIC8v
IGFuZCB0aGUgeCBjb29yZGluYXRlIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSByaWdodCBlZGdlIG9m
IHRoaXMgYm94CiAgICAgLy8gY2hlY2sgdG8gc2VlIGlmIHBvc2l0aW9uIGdvZXMgaW4gdGhpcyBi
b3gKQEAgLTQ4OSwxMCArNDkyLDEwIEBAIHN0YXRpYyBib29sIGxpbmVEaXJlY3Rpb25Qb2ludEZp
dHNJbkJveCgKIAogICAgIC8vIGJveCBpcyBmaXJzdCBvbiBsaW5lCiAgICAgLy8gYW5kIHRoZSB4
IGNvb3JkaW5hdGUgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IHRleHQgYm94IGxlZnQgZWRn
ZQotICAgIGlmICghYm94LT5wcmV2T25MaW5lKCkgJiYgcG9pbnRMaW5lRGlyZWN0aW9uIDwgYm94
LT5sb2dpY2FsTGVmdCgpKQorICAgIGlmICghYm94LT5wcmV2TGVhZkNoaWxkSWdub3JpbmdMaW5l
QnJlYWsoKSAmJiBwb2ludExpbmVEaXJlY3Rpb24gPCBib3gtPmxvZ2ljYWxMZWZ0KCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFib3gtPm5leHRPbkxpbmUoKSkgeworICAgIGlm
ICghYm94LT5uZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKSkgewogICAgICAgICAvLyBi
b3ggaXMgbGFzdCBvbiBsaW5lCiAgICAgICAgIC8vIGFuZCB0aGUgeCBjb29yZGluYXRlIGlzIHRv
IHRoZSByaWdodCBvZiB0aGUgbGFzdCB0ZXh0IGJveCByaWdodCBlZGdlCiAgICAgICAgIC8vIGdl
bmVyYXRlIFZpc2libGVQb3NpdGlvbiwgdXNlIFVQU1RSRUFNIGFmZmluaXR5IGlmIHBvc3NpYmxl
CkBAIC01MzMsNyArNTM2LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBjcmVhdGVWaXNpYmxl
UG9zaQogICAgIGlmIChwb3NpdGlvbklzQXRTdGFydE9mQm94ID09IGJveC0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKSB7CiAgICAgICAgIC8vIG9mZnNldCBpcyBvbiB0aGUgbGVmdCBlZGdlCiAK
LSAgICAgICAgY29uc3QgSW5saW5lQm94KiBwcmV2Qm94ID0gYm94LT5wcmV2TGVhZkNoaWxkKCk7
CisgICAgICAgIGNvbnN0IElubGluZUJveCogcHJldkJveCA9IGJveC0+cHJldkxlYWZDaGlsZEln
bm9yaW5nTGluZUJyZWFrKCk7CiAgICAgICAgIGlmICgocHJldkJveCAmJiBwcmV2Qm94LT5iaWRp
TGV2ZWwoKSA9PSBib3gtPmJpZGlMZXZlbCgpKQogICAgICAgICAgICAgfHwgYm94LT5yZW5kZXJl
cigpLT5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gYm94LT5kaXJl
Y3Rpb24oKSkgLy8gRklYTUU6IGxlZnQgb24gMTJDQkEKICAgICAgICAgICAgIHJldHVybiBjcmVh
dGVWaXNpYmxlUG9zaXRpb25Gb3JCb3goYm94LCBib3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKSwg
c2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOwpAQCAtNTQzLDcgKzU0Niw3IEBAIHN0YXRpYyBW
aXNpYmxlUG9zaXRpb24gY3JlYXRlVmlzaWJsZVBvc2kKICAgICAgICAgICAgIGNvbnN0IElubGlu
ZUJveCogbGVmdG1vc3RCb3g7CiAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgbGVm
dG1vc3RCb3ggPSBwcmV2Qm94OwotICAgICAgICAgICAgICAgIHByZXZCb3ggPSBsZWZ0bW9zdEJv
eC0+cHJldkxlYWZDaGlsZCgpOworICAgICAgICAgICAgICAgIHByZXZCb3ggPSBsZWZ0bW9zdEJv
eC0+cHJldkxlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCk7CiAgICAgICAgICAgICB9IHdoaWxl
IChwcmV2Qm94ICYmIHByZXZCb3gtPmJpZGlMZXZlbCgpID4gYm94LT5iaWRpTGV2ZWwoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9yQm94KGxlZnRtb3N0Qm94
LCBsZWZ0bW9zdEJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKSwgc2hvdWxkQWZmaW5pdHlCZURv
d25zdHJlYW0pOwogICAgICAgICB9CkBAIC01NTQsNyArNTU3LDcgQEAgc3RhdGljIFZpc2libGVQ
b3NpdGlvbiBjcmVhdGVWaXNpYmxlUG9zaQogICAgICAgICAgICAgY29uc3QgSW5saW5lQm94KiBu
ZXh0Qm94ID0gYm94OwogICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgIHJpZ2h0bW9z
dEJveCA9IG5leHRCb3g7Ci0gICAgICAgICAgICAgICAgbmV4dEJveCA9IHJpZ2h0bW9zdEJveC0+
bmV4dExlYWZDaGlsZCgpOworICAgICAgICAgICAgICAgIG5leHRCb3ggPSByaWdodG1vc3RCb3gt
Pm5leHRMZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVhaygpOwogICAgICAgICAgICAgfSB3aGlsZSAo
bmV4dEJveCAmJiBuZXh0Qm94LT5iaWRpTGV2ZWwoKSA+PSBib3gtPmJpZGlMZXZlbCgpKTsKICAg
ICAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JCb3gocmlnaHRtb3N0Qm94
LAogICAgICAgICAgICAgICAgIGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmlnaHRt
b3N0Qm94LT5jYXJldE1heE9mZnNldCgpIDogcmlnaHRtb3N0Qm94LT5jYXJldE1pbk9mZnNldCgp
LCBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSk7CkBAIC01NjMsNyArNTY2LDcgQEAgc3RhdGlj
IFZpc2libGVQb3NpdGlvbiBjcmVhdGVWaXNpYmxlUG9zaQogICAgICAgICByZXR1cm4gY3JlYXRl
VmlzaWJsZVBvc2l0aW9uRm9yQm94KGJveCwgYm94LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpLCBz
aG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSk7CiAgICAgfQogCi0gICAgY29uc3QgSW5saW5lQm94
KiBuZXh0Qm94ID0gYm94LT5uZXh0TGVhZkNoaWxkKCk7CisgICAgY29uc3QgSW5saW5lQm94KiBu
ZXh0Qm94ID0gYm94LT5uZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKTsKICAgICBpZiAo
KG5leHRCb3ggJiYgbmV4dEJveC0+YmlkaUxldmVsKCkgPT0gYm94LT5iaWRpTGV2ZWwoKSkKICAg
ICAgICAgfHwgYm94LT5yZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS0+ZGly
ZWN0aW9uKCkgPT0gYm94LT5kaXJlY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2li
bGVQb3NpdGlvbkZvckJveChib3gsIGJveC0+Y2FyZXRSaWdodG1vc3RPZmZzZXQoKSwgc2hvdWxk
QWZmaW5pdHlCZURvd25zdHJlYW0pOwpAQCAtNTc0LDcgKzU3Nyw3IEBAIHN0YXRpYyBWaXNpYmxl
UG9zaXRpb24gY3JlYXRlVmlzaWJsZVBvc2kKICAgICAgICAgY29uc3QgSW5saW5lQm94KiByaWdo
dG1vc3RCb3g7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIHJpZ2h0bW9zdEJveCA9IG5leHRC
b3g7Ci0gICAgICAgICAgICBuZXh0Qm94ID0gcmlnaHRtb3N0Qm94LT5uZXh0TGVhZkNoaWxkKCk7
CisgICAgICAgICAgICBuZXh0Qm94ID0gcmlnaHRtb3N0Qm94LT5uZXh0TGVhZkNoaWxkSWdub3Jp
bmdMaW5lQnJlYWsoKTsKICAgICAgICAgfSB3aGlsZSAobmV4dEJveCAmJiBuZXh0Qm94LT5iaWRp
TGV2ZWwoKSA+IGJveC0+YmlkaUxldmVsKCkpOwogICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJs
ZVBvc2l0aW9uRm9yQm94KHJpZ2h0bW9zdEJveCwgcmlnaHRtb3N0Qm94LT5jYXJldExlZnRtb3N0
T2Zmc2V0KCksIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKICAgICB9CkBAIC01ODUsNyAr
NTg4LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBjcmVhdGVWaXNpYmxlUG9zaQogICAgICAg
ICBjb25zdCBJbmxpbmVCb3gqIHByZXZCb3ggPSBib3g7CiAgICAgICAgIGRvIHsKICAgICAgICAg
ICAgIGxlZnRtb3N0Qm94ID0gcHJldkJveDsKLSAgICAgICAgICAgIHByZXZCb3ggPSBsZWZ0bW9z
dEJveC0+cHJldkxlYWZDaGlsZCgpOworICAgICAgICAgICAgcHJldkJveCA9IGxlZnRtb3N0Qm94
LT5wcmV2TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKTsKICAgICAgICAgfSB3aGlsZSAocHJl
dkJveCAmJiBwcmV2Qm94LT5iaWRpTGV2ZWwoKSA+PSBib3gtPmJpZGlMZXZlbCgpKTsKICAgICAg
ICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJveChsZWZ0bW9zdEJveCwKICAgICAg
ICAgICAgIGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbGVmdG1vc3RCb3gtPmNhcmV0
TWluT2Zmc2V0KCkgOiBsZWZ0bW9zdEJveC0+Y2FyZXRNYXhPZmZzZXQoKSwgc2hvdWxkQWZmaW5p
dHlCZURvd25zdHJlYW0pOwpAQCAtNTk5LDI4ICs2MDIsMTQgQEAgVmlzaWJsZVBvc2l0aW9uIFJl
bmRlclRleHQ6OnBvc2l0aW9uRm9yUAogICAgIGlmICghZmlyc3RUZXh0Qm94KCkgfHwgdGV4dExl
bmd0aCgpID09IDApCiAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oMCwgRE9X
TlNUUkVBTSk7CiAKLSAgICAvLyBHZXQgdGhlIG9mZnNldCBmb3IgdGhlIHBvc2l0aW9uLCBzaW5j
ZSB0aGlzIHdpbGwgdGFrZSBydGwgdGV4dCBpbnRvIGFjY291bnQuCi0gICAgaW50IG9mZnNldDsK
LQogICAgIExheW91dFVuaXQgcG9pbnRMaW5lRGlyZWN0aW9uID0gZmlyc3RUZXh0Qm94KCktPmlz
SG9yaXpvbnRhbCgpID8gcG9pbnQueCgpIDogcG9pbnQueSgpOwogICAgIExheW91dFVuaXQgcG9p
bnRCbG9ja0RpcmVjdGlvbiA9IGZpcnN0VGV4dEJveCgpLT5pc0hvcml6b250YWwoKSA/IHBvaW50
LnkoKSA6IHBvaW50LngoKTsKLSAgICAKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUg
dG8gcm9sbCB0aGVzZSBzcGVjaWFsIGNhc2VzIGludG8gdGhlIGdlbmVyYWwgY2FzZXMgaW4gdGhl
IGxvb3AgYmVsb3cuCi0gICAgaWYgKGZpcnN0VGV4dEJveCgpICYmIHBvaW50QmxvY2tEaXJlY3Rp
b24gPCAgZmlyc3RUZXh0Qm94KCktPnJvb3QoKS0+c2VsZWN0aW9uQm90dG9tKCkgJiYgcG9pbnRM
aW5lRGlyZWN0aW9uIDwgZmlyc3RUZXh0Qm94KCktPmxvZ2ljYWxMZWZ0KCkpIHsKLSAgICAgICAg
Ly8gYXQgdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgbGluZSBvciBhYm92ZQotICAgICAg
ICAvLyBhbmQgdGhlIHggY29vcmRpbmF0ZSBpcyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3QgdGV4
dCBib3ggbGVmdCBlZGdlCi0gICAgICAgIG9mZnNldCA9IGZpcnN0VGV4dEJveCgpLT5vZmZzZXRG
b3JQb3NpdGlvbihwb2ludExpbmVEaXJlY3Rpb24pOwotICAgICAgICByZXR1cm4gY3JlYXRlVmlz
aWJsZVBvc2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZzZXRGb3JCaURpKGZpcnN0VGV4dEJveCgpLCBv
ZmZzZXQsIFVwc3RyZWFtSWZQb3NpdGlvbklzTm90QXRTdGFydCk7Ci0gICAgfQotICAgIGlmIChs
YXN0VGV4dEJveCgpICYmIHBvaW50QmxvY2tEaXJlY3Rpb24gPj0gbGFzdFRleHRCb3goKS0+cm9v
dCgpLT5zZWxlY3Rpb25Ub3AoKSAmJiBwb2ludExpbmVEaXJlY3Rpb24gPj0gbGFzdFRleHRCb3go
KS0+bG9naWNhbFJpZ2h0KCkpIHsKLSAgICAgICAgLy8gYXQgdGhlIHkgY29vcmRpbmF0ZSBvZiB0
aGUgbGFzdCBsaW5lIG9yIGJlbG93Ci0gICAgICAgIC8vIGFuZCB0aGUgeCBjb29yZGluYXRlIGlz
IHRvIHRoZSByaWdodCBvZiB0aGUgbGFzdCB0ZXh0IGJveCByaWdodCBlZGdlCi0gICAgICAgIG9m
ZnNldCA9IGxhc3RUZXh0Qm94KCktPm9mZnNldEZvclBvc2l0aW9uKHBvaW50TGluZURpcmVjdGlv
bik7Ci0gICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25BZnRlckFkanVzdGluZ09m
ZnNldEZvckJpRGkobGFzdFRleHRCb3goKSwgb2Zmc2V0LCBBbHdheXNVcHN0cmVhbSk7Ci0gICAg
fQogCi0gICAgSW5saW5lVGV4dEJveCogbGFzdEJveEFib3ZlID0gMDsKKyAgICBJbmxpbmVUZXh0
Qm94KiBsYXN0Qm94ID0gMDsKICAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4
dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgeworICAgICAgICBpZiAoYm94
LT5pc0xpbmVCcmVhaygpICYmICFib3gtPnByZXZMZWFmQ2hpbGQoKSAmJiBib3gtPm5leHRMZWFm
Q2hpbGQoKSAmJiAhYm94LT5uZXh0TGVhZkNoaWxkKCktPmlzTGluZUJyZWFrKCkpCisgICAgICAg
ICAgICBib3ggPSBib3gtPm5leHRUZXh0Qm94KCk7CisKICAgICAgICAgUm9vdElubGluZUJveCog
cm9vdEJveCA9IGJveC0+cm9vdCgpOwogICAgICAgICBpZiAocG9pbnRCbG9ja0RpcmVjdGlvbiA+
PSByb290Qm94LT5zZWxlY3Rpb25Ub3AoKSB8fCBwb2ludEJsb2NrRGlyZWN0aW9uID49IHJvb3RC
b3gtPmxpbmVUb3AoKSkgewogICAgICAgICAgICAgTGF5b3V0VW5pdCBib3R0b20gPSByb290Qm94
LT5zZWxlY3Rpb25Cb3R0b20oKTsKQEAgLTYyOSwxNSArNjE4LDE5IEBAIFZpc2libGVQb3NpdGlv
biBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvclAKIAogICAgICAgICAgICAgaWYgKHBvaW50QmxvY2tE
aXJlY3Rpb24gPCBib3R0b20pIHsKICAgICAgICAgICAgICAgICBTaG91bGRBZmZpbml0eUJlRG93
bnN0cmVhbSBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbTsKLSAgICAgICAgICAgICAgICBvZmZz
ZXQgPSBib3gtPm9mZnNldEZvclBvc2l0aW9uKHBvaW50TGluZURpcmVjdGlvbik7CiAgICAgICAg
ICAgICAgICAgaWYgKGxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJveChwb2ludExpbmVEaXJlY3Rp
b24sIGJveCwgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uQWZ0ZXJBZGp1c3RpbmdPZmZzZXRGb3JCaURp
KGJveCwgb2Zmc2V0LCBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25BZnRlckFkanVzdGluZ09mZnNldEZv
ckJpRGkoYm94LCBib3gtPm9mZnNldEZvclBvc2l0aW9uKHBvaW50TGluZURpcmVjdGlvbiksIHNo
b3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxh
c3RCb3hBYm92ZSA9IGJveDsKICAgICAgICAgfQorICAgICAgICBsYXN0Qm94ID0gYm94OwogICAg
IH0KIAotICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24obGFzdEJveEFib3ZlID8gbGFz
dEJveEFib3ZlLT5zdGFydCgpICsgbGFzdEJveEFib3ZlLT5sZW4oKSA6IDAsIERPV05TVFJFQU0p
OworICAgIGlmIChsYXN0Qm94KSB7CisgICAgICAgIFNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFt
IHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtOworICAgICAgICBsaW5lRGlyZWN0aW9uUG9pbnRG
aXRzSW5Cb3gocG9pbnRMaW5lRGlyZWN0aW9uLCBsYXN0Qm94LCBzaG91bGRBZmZpbml0eUJlRG93
bnN0cmVhbSk7CisgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25BZnRlckFkanVz
dGluZ09mZnNldEZvckJpRGkobGFzdEJveCwgbGFzdEJveC0+b2Zmc2V0Rm9yUG9zaXRpb24ocG9p
bnRMaW5lRGlyZWN0aW9uKSArIGxhc3RCb3gtPnN0YXJ0KCksIHNob3VsZEFmZmluaXR5QmVEb3du
c3RyZWFtKTsKKyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBET1dO
U1RSRUFNKTsKIH0KIAogTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVjdChJbmxp
bmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRo
VG9FbmRPZkxpbmUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guY3BwCShyZXZpc2lvbiAxMDMzODApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9v
dElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Miw2ICs0ODIsMTQgQEAgSW5saW5l
Qm94KiBSb290SW5saW5lQm94OjpjbG9zZXN0TGVhZkNoaQogewogICAgIElubGluZUJveCogZmly
c3RMZWFmID0gZmlyc3RMZWFmQ2hpbGQoKTsKICAgICBJbmxpbmVCb3gqIGxhc3RMZWFmID0gbGFz
dExlYWZDaGlsZCgpOworCisgICAgaWYgKGZpcnN0TGVhZiAhPSBsYXN0TGVhZikgeworICAgICAg
ICBpZiAoZmlyc3RMZWFmLT5pc0xpbmVCcmVhaygpKQorICAgICAgICAgICAgZmlyc3RMZWFmID0g
Zmlyc3RMZWFmLT5uZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKTsKKyAgICAgICAgZWxz
ZSBpZiAobGFzdExlYWYtPmlzTGluZUJyZWFrKCkpCisgICAgICAgICAgICBsYXN0TGVhZiA9IGxh
c3RMZWFmLT5wcmV2TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKTsKKyAgICB9CisKICAgICBp
ZiAoZmlyc3RMZWFmID09IGxhc3RMZWFmICYmICghb25seUVkaXRhYmxlTGVhdmVzIHx8IGlzRWRp
dGFibGVMZWFmKGZpcnN0TGVhZikpKQogICAgICAgICByZXR1cm4gZmlyc3RMZWFmOwogCkBAIC00
OTcsNyArNTA1LDcgQEAgSW5saW5lQm94KiBSb290SW5saW5lQm94OjpjbG9zZXN0TGVhZkNoaQog
ICAgICAgICByZXR1cm4gbGFzdExlYWY7CiAKICAgICBJbmxpbmVCb3gqIGNsb3Nlc3RMZWFmID0g
MDsKLSAgICBmb3IgKElubGluZUJveCogbGVhZiA9IGZpcnN0TGVhZjsgbGVhZjsgbGVhZiA9IGxl
YWYtPm5leHRMZWFmQ2hpbGQoKSkgeworICAgIGZvciAoSW5saW5lQm94KiBsZWFmID0gZmlyc3RM
ZWFmOyBsZWFmOyBsZWFmID0gbGVhZi0+bmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCkp
IHsKICAgICAgICAgaWYgKCFsZWFmLT5yZW5kZXJlcigpLT5pc0xpc3RNYXJrZXIoKSAmJiAoIW9u
bHlFZGl0YWJsZUxlYXZlcyB8fCBpc0VkaXRhYmxlTGVhZihsZWFmKSkpIHsKICAgICAgICAgICAg
IGNsb3Nlc3RMZWFmID0gbGVhZjsKICAgICAgICAgICAgIGlmIChsZWZ0UG9zaXRpb24gPCBsZWFm
LT5sb2dpY2FsUmlnaHQoKSkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzM5MCkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDExLTEyLTIw
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJFR1JFU1NJT04o
cjc0OTcxKTogQ2FuJ3Qgc2VsZWN0IGEgbGluZSBvZiBSVEwgdGV4dCBvbiBGYWNlYm9vaworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk0MzUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSByZWdyZXNz
aW9uIHRlc3QgZm9yIHNlbGVjdGluZyAgbXVsdGlsaW5lIGJpZGlyZWN0aW9uYWwgdGV4dC4KKwor
ICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdC1saW5lLWJyZWFrLXdpdGgtb3Bwb3Np
dGUtZGlyZWN0aW9uYWxpdHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5n
L3NlbGVjdGlvbi9zZWxlY3QtbGluZS1icmVhay13aXRoLW9wcG9zaXRlLWRpcmVjdGlvbmFsaXR5
Lmh0bWw6IEFkZGVkLgorCiAyMDExLTEyLTIwICBGbG9yaW4gTWFsaXRhICA8Zm1hbGl0YUBnb29n
bGUuY29tPgogCiAgICAgICAgIHRkIGVsZW1lbnQgaWdub3JlcyB6ZXJvIHdpZHRoL2hlaWdodCBp
bnB1dCBlbGVtZW50CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3Qt
bGluZS1icmVhay13aXRoLW9wcG9zaXRlLWRpcmVjdGlvbmFsaXR5LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3QtbGluZS1icmVh
ay13aXRoLW9wcG9zaXRlLWRpcmVjdGlvbmFsaXR5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdC1saW5lLWJyZWFrLXdpdGgt
b3Bwb3NpdGUtZGlyZWN0aW9uYWxpdHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMwIEBACitUaGlzIHRlc3RzIHNlbGVjdGluZyBMVFIvUlRMIHRleHQgdGhhdCBzcGFucyBt
dWx0aXBsZSBsaW5lcyBpbiBSVEwvTFRSIGJsb2NrIChvcHBvc2l0ZSBkaXJlY3Rpb25hbGl0eSku
IFRvIG1hbnVhbGx5IHRlc3QsIHNlbGVjdCB0ZXh0IGluIGVhY2ggb2YgZWRpdGFibGUgcmVnaW9u
cyBiZWxvdyBieSBkcmFnZ2luZyBtb3VzZSBmcm9tIG9uZSBlZGdlIHRvIGFub3RoZXIuIFRoZSBl
bnRpcmUgbGluZSBzaG91bGQgYmUgc2VsZWN0ZWQuCisKK1RFU1QgMSBsaW5lIDE6UEFTUworVEVT
VCAxIGxpbmUgMjpQQVNTCitURVNUIDIgbGluZSAxOlBBU1MKK1RFU1QgMyBsaW5lIDE6UEFTUwor
VEVTVCA0IGxpbmUgMTpQQVNTCitURVNUIDQgbGluZSAyOlBBU1MKK1RFU1QgNCBsaW5lIDM6UEFT
UworVEVTVCA1IGxpbmUgMTpQQVNTCitURVNUIDUgbGluZSAyOlBBU1MKK1RFU1QgNSBsaW5lIDM6
UEFTUworVEVTVCA2IGxpbmUgMTpQQVNTCitURVNUIDYgbGluZSAyOlBBU1MKK1RFU1QgNiBsaW5l
IDM6UEFTUworVEVTVCA3IGxpbmUgMTpQQVNTCitURVNUIDcgbGluZSAyOlBBU1MKK1RFU1QgNyBs
aW5lIDM6UEFTUworVEVTVCA4IGxpbmUgMTpQQVNTCitURVNUIDggbGluZSAyOlBBU1MKK1RFU1Qg
OCBsaW5lIDM6UEFTUworVEVTVCA5IGxpbmUgMTpQQVNTCitURVNUIDkgbGluZSAyOlBBU1MKK1RF
U1QgOSBsaW5lIDM6UEFTUworVEVTVCAxMCBsaW5lIDE6UEFTUworVEVTVCAxMCBsaW5lIDI6UEFT
UworVEVTVCAxMCBsaW5lIDM6UEFTUworCisKKwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9z
ZWxlY3Rpb24vc2VsZWN0LWxpbmUtYnJlYWstd2l0aC1vcHBvc2l0ZS1kaXJlY3Rpb25hbGl0eS5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdC1s
aW5lLWJyZWFrLXdpdGgtb3Bwb3NpdGUtZGlyZWN0aW9uYWxpdHkuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdC1saW5lLWJyZWFrLXdpdGgt
b3Bwb3NpdGUtZGlyZWN0aW9uYWxpdHkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTIg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9ImNv
bnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiPgorPHN0eWxlIHR5
cGU9InRleHQvY3NzIj4KKworLnRlc3RzIHsKKyAgICB3aWR0aDogMjUwcHg7CisgICAgZmxvYXQ6
IGxlZnQ7CisgICAgbGlzdC1zdHlsZTogbm9uZTsKK30KKworLnRlc3RzIGRpdiwgLnRlc3RzIHBy
ZSB7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggYmxhY2s7CisgICAgd2lkdGg6IDIwMHB4OworICAg
IGZvbnQtc2l6ZTogMTNweDsKKyAgICBsaW5lLWhlaWdodDogMTNweDsKKyAgICBwYWRkaW5nOiAx
M3B4OworfQorCisuaGlkZVRlc3RzSW5EUlQgLnRlc3RzIHsKKyAgICBkaXNwbGF5OiBub25lOwor
fQorCis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UaGlzIHRlc3RzIHNlbGVjdGluZyBM
VFIvUlRMIHRleHQgdGhhdCBzcGFucyBtdWx0aXBsZSBsaW5lcyBpbiBSVEwvTFRSIGJsb2NrIChv
cHBvc2l0ZSBkaXJlY3Rpb25hbGl0eSkuCitUbyBtYW51YWxseSB0ZXN0LCBzZWxlY3QgdGV4dCBp
biBlYWNoIG9mIGVkaXRhYmxlIHJlZ2lvbnMgYmVsb3cgYnkgZHJhZ2dpbmcgbW91c2UgZnJvbSBv
bmUgZWRnZSB0byBhbm90aGVyLgorVGhlIGVudGlyZSBsaW5lIHNob3VsZCBiZSBzZWxlY3RlZC48
L3A+Cis8Ym9keT4KKzxvbCBjbGFzcz0idGVzdHMiPgorPGxpPjxkaXYgY29udGVudGVkaXRhYmxl
IHRpdGxlPSIwIDMsIDQgNiI+YWJjPGJyPmRlZjwvZGl2PjwvbGk+Cis8bGk+PGRpdiBjb250ZW50
ZWRpdGFibGUgdGl0bGU9IjAgMyI+2KfYqNi1PC9kaXY+PC9saT4KKzxsaT48ZGl2IGNvbnRlbnRl
ZGl0YWJsZSBkaXI9InJ0bCIgdGl0bGU9IjAgMyI+YWJjPC9kaXY+PC9saT4KKzxsaT48ZGl2IGNv
bnRlbnRlZGl0YWJsZSB0aXRsZT0iMCAzLCA0LCA1IDYiPtin2KjYtTxzcGFuIGRpcj0ibHRyIj48
YnI+PGJyPmE8L3NwYW4+PC9kaXY+PC9saT4KKzxsaT48ZGl2IGNvbnRlbnRlZGl0YWJsZSBkaXI9
InJ0bCIgdGl0bGU9IjAgMywgNCwgNSA2Ij5hYmM8c3BhbiBkaXI9InJ0bCI+PGJyPjxicj7Ypzwv
c3Bhbj48L2Rpdj48L2xpPgorPGxpPjxkaXYgY29udGVudGVkaXRhYmxlIHRpdGxlPSIwIDMsIDQs
IDUgNiI+2KfYqNi1PGJyPjxicj5hPC9kaXY+PC9saT4KKzxsaT48ZGl2IGNvbnRlbnRlZGl0YWJs
ZSBkaXI9InJ0bCIgdGl0bGU9IjAgMywgNCwgNSA2Ij7Yp9io2LU8YnI+PGJyPmE8L2Rpdj48L2xp
PgorPC9vbD4KKzxvbCBjbGFzcz0idGVzdHMiPgorPGxpPjxwcmUgY29udGVudGVkaXRhYmxlIHRp
dGxlPSIwIDMsIDQsIDUgNiI+PHNwYW4gZGlyPSJydGwiPtin2KjYtQorCithPC9zcGFuPjwvcHJl
PjwvbGk+Cis8bGk+PHByZSBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiIHRpdGxlPSIwIDMsIDQs
IDUgNiI+PHNwYW4gZGlyPSJsdHIiPmFiYworCithPC9zcGFuPjwvcHJlPjwvbGk+Cis8bGk+PHBy
ZSBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiIHRpdGxlPSIwIDMsIDQsIDUgNiI+YWJjPHNwYW4g
ZGlyPSJydGwiPgorCithPC9zcGFuPjwvcHJlPjwvbGk+Cis8L29sPgorPHByZSBpZD0ibG9nIj48
c2NyaXB0PgorCitmdW5jdGlvbiBzZWxlY3RMaW5lU2FmZWx5KHRlc3QsIGxpbmVUb3ApIHsKKyAg
ICB2YXIgeSA9IHRlc3Qub2Zmc2V0VG9wICsgbGluZVRvcCArIDU7CisgICAgZXZlbnRTZW5kZXIu
bW91c2VNb3ZlVG8odGVzdC5vZmZzZXRMZWZ0ICsgNSwgeSk7CisgICAgZXZlbnRTZW5kZXIubW91
c2VEb3duKCk7CisKKyAgICBldmVudFNlbmRlci5sZWFwRm9yd2FyZCgyMDApOworCisgICAgZXZl
bnRTZW5kZXIubW91c2VNb3ZlVG8odGVzdC5vZmZzZXRMZWZ0ICsgdGVzdC5vZmZzZXRXaWR0aCAt
IDUsIHkpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKK30KKworaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKworICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVyKQorICAgICAgICBkb2N1bWVudC53cml0
ZWxuKCdUaGlzIHRlc3QgcmVxdWlyZXMgZXZlbnRTZW5kZXInKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgdmFyIHRlc3RzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpJyk7CisgICAg
ICAgIHZhciB0ZXN0TnVtYmVyID0gMDsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRl
c3RzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgdGVzdCA9IHRlc3RzW2ldLmZpcnN0
Q2hpbGQ7CisgICAgICAgICAgICBvZmZzZXRzID0gdGVzdC50aXRsZS5zcGxpdCgnLCAnKTsKKwor
ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvZmZzZXRzLmxlbmd0aDsgaisrKSB7Cisg
ICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZG9jdW1lbnQud3JpdGUoJ1RFU1QgJyArIChpICsgMSkgKyAnIGxpbmUgJyArIChqICsg
MSkgKyAnOicgKyBtc2cgKyAnXG4nKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICB2YXIgc3RhcnQgPSBwYXJzZUludChvZmZzZXRzW2pdLnNwbGl0KCcgJylbMF0pOworICAg
ICAgICAgICAgICAgIHZhciBhZnRlckVuZCA9IHBhcnNlSW50KG9mZnNldHNbal0uc3BsaXQoJyAn
KVsxXSk7IC8vIE1pZ2h0IGJlIE5hTgorICAgICAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3
aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisKKyAgICAgICAgICAgICAgICBzZWxlY3RMaW5lU2FmZWx5
KHRlc3QsIDEzICogKGogKyAxKSk7CisKKyAgICAgICAgICAgICAgICB2YXIgYWN0dWFsID0gc2Vs
ZWN0aW9uLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gdGVzdC5p
bm5lclRleHQuc3Vic3RyKHN0YXJ0LCBhZnRlckVuZCk7CisgICAgICAgICAgICAgICAgaWYgKGFj
dHVhbCA9PSBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICAgICAgbG9nKCdQQVNTJyk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBsb2coJ0ZBSUwgLSBleHBlY3Rl
ZCAiJyArIGV4cGVjdGVkICsgJyIgYnV0IGdvdCAiJyArIGFjdHVhbCArICciJyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSA9
ICdoaWRlVGVzdHNJbkRSVCc7Cit9CisKK2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVj
dGlvbmNoYW5nZScsIGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93Lmdl
dFNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb24uaXNDb2xsYXBzZWQpCisgICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2cnKS5pbm5lckhUTUwgKz0gc2VsZWN0aW9uLmJhc2VP
ZmZzZXQgKyAnXG4nOworICAgIGVsc2UKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2xvZycpLmlubmVySFRNTCArPSBzZWxlY3Rpb24uYmFzZU9mZnNldCArICc6JyArIHNlbGVjdGlv
bi5leHRlbnRPZmZzZXQgKyAnXG4nOworfSkKKworPC9zY3JpcHQKKz48L2JvZHk+Cis8L2h0bWw+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120287</attachid>
            <date>2011-12-22 01:13:14 -0800</date>
            <delta_ts>2012-03-01 14:23:49 -0800</delta_ts>
            <desc>Added more descriptions to change log and some comment in InlineBox.h per Eric&apos;s suggestion</desc>
            <filename>bug-59435-20111222011312.patch</filename>
            <type>text/plain</type>
            <size>25514</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzQ5NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDExLTEyLTIyICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJFR1JFU1NJT04ocjc0OTcxKTog
Q2FuJ3Qgc2VsZWN0IGEgbGluZSBvZiBSVEwgdGV4dCBvbiBGYWNlYm9vaworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk0MzUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgYnVnIHdhcyBjYXVzZWQgYnkg
aW5saW5lIHRleHQgYm94ZXMgY3JlYXRlZCBieSBCUnMgYmVpbmcgcGxhY2VkIGF0IHRoZSBlbmQg
b2YgdGhlIGxpbmUKKyAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBibG9jaydzIGRpcmVjdGlvbiBy
ZWdhcmRsZXNzIG9mIGl0cyB1bmljb2RlIGJpZGktbGV2ZWwuIGUuZy4gaWYgd2UgaGF2ZQorICAg
ICAgICA8ZGl2IGRpcj0icnRsIj48c3BhbiBkaXI9Imx0ciI+aGVsbG88YnI+d29ybGQ8L3NwYW4+
PC9kaXY+CisgICAgICAgIHRoZSBpbmxpbmUgYm94IGdlbmVyYXRlZCBieSB0aGUgYnIgaGFzIHRo
ZSBiaWRpLWxldmVsIG9mIDIgbGlrZSB0aGUgcmVzdCBvZiB0ZXh0IGluIHRoZSBzcGFuLgorICAg
ICAgICBUaGlzIGlubGluZSB0ZXh0IGJveCBnaXZlcyBhbiBpbGx1c2lvbiBvZiBoYXZpbmcgdGV4
dCBvbiB0aGUgbGVmdCBvZiAiaGVsbG8iIHRvIGhpdCB0ZXN0aW5nCisgICAgICAgIGFuZCBlZGl0
aW5nIGNvZGUgYW5kIGNhdXNlcyBhbGwgc29ydHMgb2YgcHJvYmxlbXMuCisKKyAgICAgICAgRml4
ZWQgdGhlIGJ1ZyBieSByZXBsYWNpbmcgY2FsbHMgdG8gbmV4dExlYWZDaGlsZCBhbmQgcHJldkxl
YWZDaGlsZCBieSBuZXdseSBpbnRyb2R1Y2VkCisgICAgICAgIG5leHRMZWFmQ2hpbGRJZ25vcmlu
Z0xpbmVCcmVhayBhbmQgcHJldkxlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrLiBUaGVzZSB0d28g
ZnVuY3Rpb25zIHdpbGwKKyAgICAgICAgcmV0dXJuIDAgd2hlbiB0aGV5IGhpdCB0aGUgZW5kIG9m
IGEgbGluZSBvciBpbmxpbmUgdGV4dCBib3ggdGhhdCdzIGEgbGluZSBicmVhay4gSW4gZWZmZWN0
LAorICAgICAgICBoaXQgdGVzdGluZyBhbmQgZWRpdGluZyBjb2RlIGNhbiBpZ25vcmUgaW5saW5l
IGJveGVzIGdlbmVyYXRlZCBieSBicidzLgorCisgICAgICAgIEluIHRoZSBsb25nIHRlcm0sIHdl
IHNob3VsZCBtb3ZlIHRoZXNlIHR3byBmdW5jdGlvbnMgaW50byBSZW5kZXJlZFBvc2l0aW9uIGFs
b25nIHdpdGggdGhlIHJlc3QKKyAgICAgICAgb2YgY29kZSB0aGF0IGNvbnZlcnRzIGEgUG9zaXRp
b24gYW5kIGFuIGlubGluZSBib3gsIG9mZnNldCBwYWlyLgorCisgICAgICAgIFRlc3Q6IGVkaXRp
bmcvc2VsZWN0aW9uL3NlbGVjdC1saW5lLWJyZWFrLXdpdGgtb3Bwb3NpdGUtZGlyZWN0aW9uYWxp
dHkuaHRtbAorCisgICAgICAgICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQpOgorICAgICAgICAqIGVkaXRpbmcvUmVu
ZGVyZWRQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJlZFBvc2l0aW9uOjpw
cmV2TGVhZkNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246Om5leHRM
ZWFmQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lQm94OjpuZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWspOgorICAg
ICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpwcmV2TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsp
OgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBvc2l0aW9u
Rm9yUG9pbnRXaXRoSW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJveCk6
IElmIHdlJ3JlIG9uIHRoZSBsZWZ0IG9mIGEgUlRMIGxpbmUsIHdlIHNob3VsZCBzdGF5IGF0Cisg
ICAgICAgIHVwc3RyZWFtIHBvc2l0aW9uIHNpbmNlIHdlJ3JlIGF0IHRoZSBlbmQgb2YgYSBsaW5l
LgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9uQWZ0ZXJBZGp1c3RpbmdP
ZmZzZXRGb3JCaURpKTogTWVyZ2UgdGhlIHR3byBzcGVjaWFsIGNhc2VzIGludG8KKyAgICAgICAg
dGhlIGdlbmVyYWwgbG9vcCBhcyB0aGUgY29tbWVudCBzdWdnZXN0cy4gU2tpcCBhbiBpbmxpbmUg
dGV4dCBib3ggZm9yIGEgbGluZSBicmVhayBhdCB0aGUgbGVmdAorICAgICAgICBlZGdlIHdoZW4g
dGhlcmUgYXJlIG1vcmUgbGluZSBib3hlcyBvbiB0aGUgbGluZS4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290
SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmNsb3Nlc3RM
ZWFmQ2hpbGRGb3JMb2dpY2FsTGVmdFBvc2l0aW9uKTogSWdub3JlIGxpbmUgYm94ZXMgY3JlYXRl
ZCBmb3IKKyAgICAgICAgbGluZSBib3hlcyB3aGVuIHRoZXJlIGFyZSBvdGhlciBib3hlcyBvbiB0
aGUgbGluZS4KKwogMjAxMS0xMi0yMSAgWW9zaWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW0Zvcm1zXSBTZWxlY3Rpb24gY2hhbmdlIGJ5IHR5cGUtYWhlYWQgZG9l
c24ndCBmaXJlICdjaGFuZ2UnIGV2ZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJl
dmlzaW9uIDEwMzQ5NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNTIsNyArMTE1Miw4IEBAIHZvaWQgUG9zaXRpb246OmdldElubGluZUJv
eEFuZE9mZnNldChFQWYKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCgoY2FyZXRP
ZmZzZXQgPT0gY2FyZXRNYXhPZmZzZXQpIF4gKGFmZmluaXR5ID09IERPV05TVFJFQU0pKQotICAg
ICAgICAgICAgICAgIHx8ICgoY2FyZXRPZmZzZXQgPT0gY2FyZXRNaW5PZmZzZXQpIF4gKGFmZmlu
aXR5ID09IFVQU1RSRUFNKSkpCisgICAgICAgICAgICAgICAgfHwgKChjYXJldE9mZnNldCA9PSBj
YXJldE1pbk9mZnNldCkgXiAoYWZmaW5pdHkgPT0gVVBTVFJFQU0pKQorICAgICAgICAgICAgICAg
IHx8IChjYXJldE9mZnNldCA9PSBjYXJldE1heE9mZnNldCAmJiBib3gtPm5leHRMZWFmQ2hpbGQo
KSAmJiBib3gtPm5leHRMZWFmQ2hpbGQoKS0+aXNMaW5lQnJlYWsoKSkpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGJveDsKQEAgLTEyMTcsMTAgKzEy
MTgsMTAgQEAgdm9pZCBQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZgogICAgIH0K
IAogICAgIGlmIChjYXJldE9mZnNldCA9PSBpbmxpbmVCb3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQo
KSkgewotICAgICAgICBJbmxpbmVCb3gqIHByZXZCb3ggPSBpbmxpbmVCb3gtPnByZXZMZWFmQ2hp
bGQoKTsKKyAgICAgICAgSW5saW5lQm94KiBwcmV2Qm94ID0gaW5saW5lQm94LT5wcmV2TGVhZkNo
aWxkSWdub3JpbmdMaW5lQnJlYWsoKTsKICAgICAgICAgaWYgKCFwcmV2Qm94IHx8IHByZXZCb3gt
PmJpZGlMZXZlbCgpIDwgbGV2ZWwpIHsKICAgICAgICAgICAgIC8vIExlZnQgZWRnZSBvZiBhIHNl
Y29uZGFyeSBydW4uIFNldCB0byB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgZW50aXJlIHJ1bi4KLSAg
ICAgICAgICAgIHdoaWxlIChJbmxpbmVCb3gqIG5leHRCb3ggPSBpbmxpbmVCb3gtPm5leHRMZWFm
Q2hpbGQoKSkgeworICAgICAgICAgICAgd2hpbGUgKElubGluZUJveCogbmV4dEJveCA9IGlubGlu
ZUJveC0+bmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAobmV4dEJveC0+YmlkaUxldmVsKCkgPCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgaW5saW5lQm94ID0gbmV4dEJveDsKQEAgLTEyMjgsNyAr
MTIyOSw3IEBAIHZvaWQgUG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldChFQWYKICAgICAg
ICAgICAgIGNhcmV0T2Zmc2V0ID0gaW5saW5lQm94LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpOwog
ICAgICAgICB9IGVsc2UgaWYgKHByZXZCb3gtPmJpZGlMZXZlbCgpID4gbGV2ZWwpIHsKICAgICAg
ICAgICAgIC8vIFJpZ2h0IGVkZ2Ugb2YgYSAidGVydGlhcnkiIHJ1bi4gU2V0IHRvIHRoZSBsZWZ0
IGVkZ2Ugb2YgdGhhdCBydW4uCi0gICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiB0ZXJ0aWFy
eUJveCA9IGlubGluZUJveC0+cHJldkxlYWZDaGlsZCgpKSB7CisgICAgICAgICAgICB3aGlsZSAo
SW5saW5lQm94KiB0ZXJ0aWFyeUJveCA9IGlubGluZUJveC0+cHJldkxlYWZDaGlsZElnbm9yaW5n
TGluZUJyZWFrKCkpIHsKICAgICAgICAgICAgICAgICBpZiAodGVydGlhcnlCb3gtPmJpZGlMZXZl
bCgpIDw9IGxldmVsKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICBpbmxpbmVCb3ggPSB0ZXJ0aWFyeUJveDsKQEAgLTEyMzYsMTAgKzEyMzcsMTAgQEAgdm9pZCBQ
b3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZgogICAgICAgICAgICAgY2FyZXRPZmZz
ZXQgPSBpbmxpbmVCb3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIElubGluZUJveCogbmV4dEJveCA9IGlubGluZUJveC0+bmV4dExlYWZD
aGlsZCgpOworICAgICAgICBJbmxpbmVCb3gqIG5leHRCb3ggPSBpbmxpbmVCb3gtPm5leHRMZWFm
Q2hpbGRJZ25vcmluZ0xpbmVCcmVhaygpOwogICAgICAgICBpZiAoIW5leHRCb3ggfHwgbmV4dEJv
eC0+YmlkaUxldmVsKCkgPCBsZXZlbCkgewogICAgICAgICAgICAgLy8gUmlnaHQgZWRnZSBvZiBh
IHNlY29uZGFyeSBydW4uIFNldCB0byB0aGUgbGVmdCBlZGdlIG9mIHRoZSBlbnRpcmUgcnVuLgot
ICAgICAgICAgICAgd2hpbGUgKElubGluZUJveCogcHJldkJveCA9IGlubGluZUJveC0+cHJldkxl
YWZDaGlsZCgpKSB7CisgICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94KiBwcmV2Qm94ID0gaW5s
aW5lQm94LT5wcmV2TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKSkgewogICAgICAgICAgICAg
ICAgIGlmIChwcmV2Qm94LT5iaWRpTGV2ZWwoKSA8IGxldmVsKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBpbmxpbmVCb3ggPSBwcmV2Qm94OwpAQCAtMTI0Nyw3
ICsxMjQ4LDcgQEAgdm9pZCBQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZgogICAg
ICAgICAgICAgY2FyZXRPZmZzZXQgPSBpbmxpbmVCb3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKTsK
ICAgICAgICAgfSBlbHNlIGlmIChuZXh0Qm94LT5iaWRpTGV2ZWwoKSA+IGxldmVsKSB7CiAgICAg
ICAgICAgICAvLyBMZWZ0IGVkZ2Ugb2YgYSAidGVydGlhcnkiIHJ1bi4gU2V0IHRvIHRoZSByaWdo
dCBlZGdlIG9mIHRoYXQgcnVuLgotICAgICAgICAgICAgd2hpbGUgKElubGluZUJveCogdGVydGlh
cnlCb3ggPSBpbmxpbmVCb3gtPm5leHRMZWFmQ2hpbGQoKSkgeworICAgICAgICAgICAgd2hpbGUg
KElubGluZUJveCogdGVydGlhcnlCb3ggPSBpbmxpbmVCb3gtPm5leHRMZWFmQ2hpbGRJZ25vcmlu
Z0xpbmVCcmVhaygpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRlcnRpYXJ5Qm94LT5iaWRpTGV2
ZWwoKSA8PSBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgaW5saW5lQm94ID0gdGVydGlhcnlCb3g7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlbmRlcmVkUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAJKHJldmlzaW9uIDEwMzQ5NykKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwx
NCArMTAwLDE0IEBAIFJlbmRlcmVkUG9zaXRpb246OlJlbmRlcmVkUG9zaXRpb24oY29uc3QKIElu
bGluZUJveCogUmVuZGVyZWRQb3NpdGlvbjo6cHJldkxlYWZDaGlsZCgpIGNvbnN0CiB7CiAgICAg
aWYgKG1fcHJldkxlYWZDaGlsZCA9PSB1bmNhY2hlZElubGluZUJveCgpKQotICAgICAgICBtX3By
ZXZMZWFmQ2hpbGQgPSBtX2lubGluZUJveC0+cHJldkxlYWZDaGlsZCgpOworICAgICAgICBtX3By
ZXZMZWFmQ2hpbGQgPSBtX2lubGluZUJveC0+cHJldkxlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFr
KCk7CiAgICAgcmV0dXJuIG1fcHJldkxlYWZDaGlsZDsKIH0KIAogSW5saW5lQm94KiBSZW5kZXJl
ZFBvc2l0aW9uOjpuZXh0TGVhZkNoaWxkKCkgY29uc3QKIHsKICAgICBpZiAobV9uZXh0TGVhZkNo
aWxkID09IHVuY2FjaGVkSW5saW5lQm94KCkpCi0gICAgICAgIG1fbmV4dExlYWZDaGlsZCA9IG1f
aW5saW5lQm94LT5uZXh0TGVhZkNoaWxkKCk7CisgICAgICAgIG1fbmV4dExlYWZDaGlsZCA9IG1f
aW5saW5lQm94LT5uZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKTsKICAgICByZXR1cm4g
bV9uZXh0TGVhZkNoaWxkOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Qm94LmNwcAkocmV2aXNpb24gMTAzNDk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsMjMgQEAgSW5saW5lQm94
KiBJbmxpbmVCb3g6OnByZXZMZWFmQ2hpbGQoKSBjbwogICAgICAgICBsZWFmID0gcGFyZW50KCkt
PnByZXZMZWFmQ2hpbGQoKTsKICAgICByZXR1cm4gbGVhZjsKIH0KLSAgICAKKworSW5saW5lQm94
KiBJbmxpbmVCb3g6Om5leHRMZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVhaygpIGNvbnN0Cit7Cisg
ICAgSW5saW5lQm94KiBsZWFmID0gbmV4dExlYWZDaGlsZCgpOworICAgIGlmIChsZWFmICYmIGxl
YWYtPmlzTGluZUJyZWFrKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBsZWFmOwor
fQorCitJbmxpbmVCb3gqIElubGluZUJveDo6cHJldkxlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFr
KCkgY29uc3QKK3sKKyAgICBJbmxpbmVCb3gqIGxlYWYgPSBwcmV2TGVhZkNoaWxkKCk7CisgICAg
aWYgKGxlYWYgJiYgbGVhZi0+aXNMaW5lQnJlYWsoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGxlYWY7Cit9CisKIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lQm94
OjpzZWxlY3Rpb25TdGF0ZSgpCiB7CiAgICAgcmV0dXJuIHJlbmRlcmVyKCktPnNlbGVjdGlvblN0
YXRlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCShyZXZpc2lvbiAx
MDM0OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMCw3ICsyMDAsMTMgQEAgcHVibGljOgogICAgIAogICAgIElubGluZUJveCog
bmV4dExlYWZDaGlsZCgpIGNvbnN0OwogICAgIElubGluZUJveCogcHJldkxlYWZDaGlsZCgpIGNv
bnN0OwotICAgICAgICAKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGVkaXRpbmcgYW5k
IGhpdC10ZXN0aW5nIGNvZGUuCisgICAgLy8gRklYTUU6IFRoZXNlIHR3byBmdW5jdGlvbnMgc2hv
dWxkIGJlIG1vdmVkIHRvIFJlbmRlcmVkUG9zaXRpb24gb25jZSB0aGUgY29kZSB0byBjb252ZXJ0
IGJldHdlZW4KKyAgICAvLyBQb3NpdGlvbiBhbmQgaW5saW5lIGJveCwgb2Zmc2V0IHBhaXIgaXMg
bW92ZWQgdG8gUmVuZGVyZWRQb3NpdGlvbi4KKyAgICBJbmxpbmVCb3gqIG5leHRMZWFmQ2hpbGRJ
Z25vcmluZ0xpbmVCcmVhaygpIGNvbnN0OworICAgIElubGluZUJveCogcHJldkxlYWZDaGlsZEln
bm9yaW5nTGluZUJyZWFrKCkgY29uc3Q7CisKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQogCiAgICAgSW5saW5lRmxvd0JveCogcGFyZW50
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAko
cmV2aXNpb24gMTAzNDk3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ0NywxMiArNDQ0NywxNyBAQCBWaXNpYmxlUG9zaXRp
b24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yCiAgICAgaWYgKGNsb3Nlc3RCb3gpIHsKICAgICAg
ICAgaWYgKG1vdmVDYXJldFRvQm91bmRhcnkgJiYgcG9pbnRJbkxvZ2ljYWxDb250ZW50cy55KCkg
PCBmaXJzdFJvb3RCb3hXaXRoQ2hpbGRyZW4tPnNlbGVjdGlvblRvcCgpCiAgICAgICAgICAgICAm
JiBwb2ludEluTG9naWNhbENvbnRlbnRzLnkoKSA8IGZpcnN0Um9vdEJveFdpdGhDaGlsZHJlbi0+
bG9naWNhbFRvcCgpKSB7CisgICAgICAgICAgICBJbmxpbmVCb3gqIGJveCA9IGZpcnN0Um9vdEJv
eFdpdGhDaGlsZHJlbi0+Zmlyc3RMZWFmQ2hpbGQoKTsKKyAgICAgICAgICAgIGlmIChib3gtPmlz
TGluZUJyZWFrKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoSW5saW5lQm94KiBuZXdCb3ggPSBi
b3gtPm5leHRMZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVhaygpKQorICAgICAgICAgICAgICAgICAg
ICBib3ggPSBuZXdCb3g7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyB5IGNvb3JkaW5h
dGUgaXMgYWJvdmUgZmlyc3Qgcm9vdCBsaW5lIGJveCwgc28gcmV0dXJuIHRoZSBzdGFydCBvZiB0
aGUgZmlyc3QKLSAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24ocG9zaXRpb25Gb3JC
b3goZmlyc3RSb290Qm94V2l0aENoaWxkcmVuLT5maXJzdExlYWZDaGlsZCgpLCB0cnVlKSwgRE9X
TlNUUkVBTSk7CisgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHBvc2l0aW9uRm9y
Qm94KGJveCwgdHJ1ZSksIERPV05TVFJFQU0pOwogICAgICAgICB9CiAKICAgICAgICAgLy8gcGFz
cyB0aGUgYm94IGEgdG9wIHBvc2l0aW9uIHRoYXQgaXMgaW5zaWRlIGl0Ci0gICAgICAgIExheW91
dFBvaW50IHBvaW50KHBvaW50SW5Mb2dpY2FsQ29udGVudHMueCgpLCBjbG9zZXN0Qm94LT5sb2dp
Y2FsVG9wKCkpOworICAgICAgICBMYXlvdXRQb2ludCBwb2ludChwb2ludEluTG9naWNhbENvbnRl
bnRzLngoKSwgbWF4KGNsb3Nlc3RCb3gtPnJvb3QoKS0+bGluZVRvcCgpLCBjbG9zZXN0Qm94LT5y
b290KCktPnNlbGVjdGlvblRvcCgpKSk7CiAgICAgICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKICAgICAgICAgICAgIHBvaW50ID0gcG9pbnQudHJhbnNwb3NlZFBvaW50KCk7CiAg
ICAgICAgIGlmIChjbG9zZXN0Qm94LT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxMDM0OTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3Nyw4ICs0NzcsMTEgQEAgc3RhdGljIGJvb2wgbGluZURpcmVjdGlvblBvaW50Rml0c0lu
Qm94KAogCiAgICAgLy8gdGhlIHggY29vcmRpbmF0ZSBpcyBlcXVhbCB0byB0aGUgbGVmdCBlZGdl
IG9mIHRoaXMgYm94CiAgICAgLy8gdGhlIGFmZmluaXR5IG11c3QgYmUgZG93bnN0cmVhbSBzbyB0
aGUgcG9zaXRpb24gZG9lc24ndCBqdW1wIGJhY2sgdG8gdGhlIHByZXZpb3VzIGxpbmUKLSAgICBp
ZiAocG9pbnRMaW5lRGlyZWN0aW9uID09IGJveC0+bG9naWNhbExlZnQoKSkKKyAgICAvLyBleGNl
cHQgd2hlbiBib3ggaXMgdGhlIGZpcnN0IGJveCBpbiB0aGUgbGluZQorICAgIGlmIChwb2ludExp
bmVEaXJlY3Rpb24gPD0gYm94LT5sb2dpY2FsTGVmdCgpKSB7CisgICAgICAgIHNob3VsZEFmZmlu
aXR5QmVEb3duc3RyZWFtID0gIWJveC0+cHJldkxlYWZDaGlsZCgpID8gVXBzdHJlYW1JZlBvc2l0
aW9uSXNOb3RBdFN0YXJ0IDogQWx3YXlzRG93bnN0cmVhbTsKICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQogCiAgICAgLy8gYW5kIHRoZSB4IGNvb3JkaW5hdGUgaXMgdG8gdGhlIGxlZnQgb2Yg
dGhlIHJpZ2h0IGVkZ2Ugb2YgdGhpcyBib3gKICAgICAvLyBjaGVjayB0byBzZWUgaWYgcG9zaXRp
b24gZ29lcyBpbiB0aGlzIGJveApAQCAtNDg5LDEwICs0OTIsMTAgQEAgc3RhdGljIGJvb2wgbGlu
ZURpcmVjdGlvblBvaW50Rml0c0luQm94KAogCiAgICAgLy8gYm94IGlzIGZpcnN0IG9uIGxpbmUK
ICAgICAvLyBhbmQgdGhlIHggY29vcmRpbmF0ZSBpcyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qg
dGV4dCBib3ggbGVmdCBlZGdlCi0gICAgaWYgKCFib3gtPnByZXZPbkxpbmUoKSAmJiBwb2ludExp
bmVEaXJlY3Rpb24gPCBib3gtPmxvZ2ljYWxMZWZ0KCkpCisgICAgaWYgKCFib3gtPnByZXZMZWFm
Q2hpbGRJZ25vcmluZ0xpbmVCcmVhaygpICYmIHBvaW50TGluZURpcmVjdGlvbiA8IGJveC0+bG9n
aWNhbExlZnQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIWJveC0+bmV4dE9u
TGluZSgpKSB7CisgICAgaWYgKCFib3gtPm5leHRMZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVhaygp
KSB7CiAgICAgICAgIC8vIGJveCBpcyBsYXN0IG9uIGxpbmUKICAgICAgICAgLy8gYW5kIHRoZSB4
IGNvb3JkaW5hdGUgaXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBsYXN0IHRleHQgYm94IHJpZ2h0IGVk
Z2UKICAgICAgICAgLy8gZ2VuZXJhdGUgVmlzaWJsZVBvc2l0aW9uLCB1c2UgVVBTVFJFQU0gYWZm
aW5pdHkgaWYgcG9zc2libGUKQEAgLTUzMyw3ICs1MzYsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIGNyZWF0ZVZpc2libGVQb3NpCiAgICAgaWYgKHBvc2l0aW9uSXNBdFN0YXJ0T2ZCb3ggPT0g
Ym94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgLy8gb2Zmc2V0IGlzIG9u
IHRoZSBsZWZ0IGVkZ2UKIAotICAgICAgICBjb25zdCBJbmxpbmVCb3gqIHByZXZCb3ggPSBib3gt
PnByZXZMZWFmQ2hpbGQoKTsKKyAgICAgICAgY29uc3QgSW5saW5lQm94KiBwcmV2Qm94ID0gYm94
LT5wcmV2TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKTsKICAgICAgICAgaWYgKChwcmV2Qm94
ICYmIHByZXZCb3gtPmJpZGlMZXZlbCgpID09IGJveC0+YmlkaUxldmVsKCkpCiAgICAgICAgICAg
ICB8fCBib3gtPnJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBib3gtPmRpcmVjdGlvbigpKSAvLyBGSVhNRTogbGVmdCBvbiAxMkNCQQogICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZvckJveChib3gsIGJveC0+Y2FyZXRM
ZWZ0bW9zdE9mZnNldCgpLCBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSk7CkBAIC01NDMsNyAr
NTQ2LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBjcmVhdGVWaXNpYmxlUG9zaQogICAgICAg
ICAgICAgY29uc3QgSW5saW5lQm94KiBsZWZ0bW9zdEJveDsKICAgICAgICAgICAgIGRvIHsKICAg
ICAgICAgICAgICAgICBsZWZ0bW9zdEJveCA9IHByZXZCb3g7Ci0gICAgICAgICAgICAgICAgcHJl
dkJveCA9IGxlZnRtb3N0Qm94LT5wcmV2TGVhZkNoaWxkKCk7CisgICAgICAgICAgICAgICAgcHJl
dkJveCA9IGxlZnRtb3N0Qm94LT5wcmV2TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKTsKICAg
ICAgICAgICAgIH0gd2hpbGUgKHByZXZCb3ggJiYgcHJldkJveC0+YmlkaUxldmVsKCkgPiBib3gt
PmJpZGlMZXZlbCgpKTsKICAgICAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25G
b3JCb3gobGVmdG1vc3RCb3gsIGxlZnRtb3N0Qm94LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpLCBz
aG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSk7CiAgICAgICAgIH0KQEAgLTU1NCw3ICs1NTcsNyBA
QCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGNyZWF0ZVZpc2libGVQb3NpCiAgICAgICAgICAgICBj
b25zdCBJbmxpbmVCb3gqIG5leHRCb3ggPSBib3g7CiAgICAgICAgICAgICBkbyB7CiAgICAgICAg
ICAgICAgICAgcmlnaHRtb3N0Qm94ID0gbmV4dEJveDsKLSAgICAgICAgICAgICAgICBuZXh0Qm94
ID0gcmlnaHRtb3N0Qm94LT5uZXh0TGVhZkNoaWxkKCk7CisgICAgICAgICAgICAgICAgbmV4dEJv
eCA9IHJpZ2h0bW9zdEJveC0+bmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCk7CiAgICAg
ICAgICAgICB9IHdoaWxlIChuZXh0Qm94ICYmIG5leHRCb3gtPmJpZGlMZXZlbCgpID49IGJveC0+
YmlkaUxldmVsKCkpOwogICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkZv
ckJveChyaWdodG1vc3RCb3gsCiAgICAgICAgICAgICAgICAgYm94LT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgPyByaWdodG1vc3RCb3gtPmNhcmV0TWF4T2Zmc2V0KCkgOiByaWdodG1vc3RCb3gt
PmNhcmV0TWluT2Zmc2V0KCksIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKQEAgLTU2Myw3
ICs1NjYsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGNyZWF0ZVZpc2libGVQb3NpCiAgICAg
ICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JCb3goYm94LCBib3gtPmNhcmV0Umln
aHRtb3N0T2Zmc2V0KCksIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKICAgICB9CiAKLSAg
ICBjb25zdCBJbmxpbmVCb3gqIG5leHRCb3ggPSBib3gtPm5leHRMZWFmQ2hpbGQoKTsKKyAgICBj
b25zdCBJbmxpbmVCb3gqIG5leHRCb3ggPSBib3gtPm5leHRMZWFmQ2hpbGRJZ25vcmluZ0xpbmVC
cmVhaygpOwogICAgIGlmICgobmV4dEJveCAmJiBuZXh0Qm94LT5iaWRpTGV2ZWwoKSA9PSBib3gt
PmJpZGlMZXZlbCgpKQogICAgICAgICB8fCBib3gtPnJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9j
aygpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBib3gtPmRpcmVjdGlvbigpKQogICAgICAgICBy
ZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9yQm94KGJveCwgYm94LT5jYXJldFJpZ2h0bW9z
dE9mZnNldCgpLCBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSk7CkBAIC01NzQsNyArNTc3LDcg
QEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBjcmVhdGVWaXNpYmxlUG9zaQogICAgICAgICBjb25z
dCBJbmxpbmVCb3gqIHJpZ2h0bW9zdEJveDsKICAgICAgICAgZG8gewogICAgICAgICAgICAgcmln
aHRtb3N0Qm94ID0gbmV4dEJveDsKLSAgICAgICAgICAgIG5leHRCb3ggPSByaWdodG1vc3RCb3gt
Pm5leHRMZWFmQ2hpbGQoKTsKKyAgICAgICAgICAgIG5leHRCb3ggPSByaWdodG1vc3RCb3gtPm5l
eHRMZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVhaygpOwogICAgICAgICB9IHdoaWxlIChuZXh0Qm94
ICYmIG5leHRCb3gtPmJpZGlMZXZlbCgpID4gYm94LT5iaWRpTGV2ZWwoKSk7CiAgICAgICAgIHJl
dHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25Gb3JCb3gocmlnaHRtb3N0Qm94LCByaWdodG1vc3RC
b3gtPmNhcmV0TGVmdG1vc3RPZmZzZXQoKSwgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOwog
ICAgIH0KQEAgLTU4NSw3ICs1ODgsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGNyZWF0ZVZp
c2libGVQb3NpCiAgICAgICAgIGNvbnN0IElubGluZUJveCogcHJldkJveCA9IGJveDsKICAgICAg
ICAgZG8gewogICAgICAgICAgICAgbGVmdG1vc3RCb3ggPSBwcmV2Qm94OwotICAgICAgICAgICAg
cHJldkJveCA9IGxlZnRtb3N0Qm94LT5wcmV2TGVhZkNoaWxkKCk7CisgICAgICAgICAgICBwcmV2
Qm94ID0gbGVmdG1vc3RCb3gtPnByZXZMZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVhaygpOwogICAg
ICAgICB9IHdoaWxlIChwcmV2Qm94ICYmIHByZXZCb3gtPmJpZGlMZXZlbCgpID49IGJveC0+Ymlk
aUxldmVsKCkpOwogICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uRm9yQm94KGxl
ZnRtb3N0Qm94LAogICAgICAgICAgICAgYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBs
ZWZ0bW9zdEJveC0+Y2FyZXRNaW5PZmZzZXQoKSA6IGxlZnRtb3N0Qm94LT5jYXJldE1heE9mZnNl
dCgpLCBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSk7CkBAIC01OTksMjggKzYwMiwxNCBAQCBW
aXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dDo6cG9zaXRpb25Gb3JQCiAgICAgaWYgKCFmaXJzdFRl
eHRCb3goKSB8fCB0ZXh0TGVuZ3RoKCkgPT0gMCkKICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2li
bGVQb3NpdGlvbigwLCBET1dOU1RSRUFNKTsKIAotICAgIC8vIEdldCB0aGUgb2Zmc2V0IGZvciB0
aGUgcG9zaXRpb24sIHNpbmNlIHRoaXMgd2lsbCB0YWtlIHJ0bCB0ZXh0IGludG8gYWNjb3VudC4K
LSAgICBpbnQgb2Zmc2V0OwotCiAgICAgTGF5b3V0VW5pdCBwb2ludExpbmVEaXJlY3Rpb24gPSBm
aXJzdFRleHRCb3goKS0+aXNIb3Jpem9udGFsKCkgPyBwb2ludC54KCkgOiBwb2ludC55KCk7CiAg
ICAgTGF5b3V0VW5pdCBwb2ludEJsb2NrRGlyZWN0aW9uID0gZmlyc3RUZXh0Qm94KCktPmlzSG9y
aXpvbnRhbCgpID8gcG9pbnQueSgpIDogcG9pbnQueCgpOwotICAgIAotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgYmUgYWJsZSB0byByb2xsIHRoZXNlIHNwZWNpYWwgY2FzZXMgaW50byB0aGUgZ2Vu
ZXJhbCBjYXNlcyBpbiB0aGUgbG9vcCBiZWxvdy4KLSAgICBpZiAoZmlyc3RUZXh0Qm94KCkgJiYg
cG9pbnRCbG9ja0RpcmVjdGlvbiA8ICBmaXJzdFRleHRCb3goKS0+cm9vdCgpLT5zZWxlY3Rpb25C
b3R0b20oKSAmJiBwb2ludExpbmVEaXJlY3Rpb24gPCBmaXJzdFRleHRCb3goKS0+bG9naWNhbExl
ZnQoKSkgewotICAgICAgICAvLyBhdCB0aGUgeSBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBsaW5l
IG9yIGFib3ZlCi0gICAgICAgIC8vIGFuZCB0aGUgeCBjb29yZGluYXRlIGlzIHRvIHRoZSBsZWZ0
IG9mIHRoZSBmaXJzdCB0ZXh0IGJveCBsZWZ0IGVkZ2UKLSAgICAgICAgb2Zmc2V0ID0gZmlyc3RU
ZXh0Qm94KCktPm9mZnNldEZvclBvc2l0aW9uKHBvaW50TGluZURpcmVjdGlvbik7Ci0gICAgICAg
IHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25BZnRlckFkanVzdGluZ09mZnNldEZvckJpRGko
Zmlyc3RUZXh0Qm94KCksIG9mZnNldCwgVXBzdHJlYW1JZlBvc2l0aW9uSXNOb3RBdFN0YXJ0KTsK
LSAgICB9Ci0gICAgaWYgKGxhc3RUZXh0Qm94KCkgJiYgcG9pbnRCbG9ja0RpcmVjdGlvbiA+PSBs
YXN0VGV4dEJveCgpLT5yb290KCktPnNlbGVjdGlvblRvcCgpICYmIHBvaW50TGluZURpcmVjdGlv
biA+PSBsYXN0VGV4dEJveCgpLT5sb2dpY2FsUmlnaHQoKSkgewotICAgICAgICAvLyBhdCB0aGUg
eSBjb29yZGluYXRlIG9mIHRoZSBsYXN0IGxpbmUgb3IgYmVsb3cKLSAgICAgICAgLy8gYW5kIHRo
ZSB4IGNvb3JkaW5hdGUgaXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBsYXN0IHRleHQgYm94IHJpZ2h0
IGVkZ2UKLSAgICAgICAgb2Zmc2V0ID0gbGFzdFRleHRCb3goKS0+b2Zmc2V0Rm9yUG9zaXRpb24o
cG9pbnRMaW5lRGlyZWN0aW9uKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlv
bkFmdGVyQWRqdXN0aW5nT2Zmc2V0Rm9yQmlEaShsYXN0VGV4dEJveCgpLCBvZmZzZXQsIEFsd2F5
c1Vwc3RyZWFtKTsKLSAgICB9CiAKLSAgICBJbmxpbmVUZXh0Qm94KiBsYXN0Qm94QWJvdmUgPSAw
OworICAgIElubGluZVRleHRCb3gqIGxhc3RCb3ggPSAwOwogICAgIGZvciAoSW5saW5lVGV4dEJv
eCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7
CisgICAgICAgIGlmIChib3gtPmlzTGluZUJyZWFrKCkgJiYgIWJveC0+cHJldkxlYWZDaGlsZCgp
ICYmIGJveC0+bmV4dExlYWZDaGlsZCgpICYmICFib3gtPm5leHRMZWFmQ2hpbGQoKS0+aXNMaW5l
QnJlYWsoKSkKKyAgICAgICAgICAgIGJveCA9IGJveC0+bmV4dFRleHRCb3goKTsKKwogICAgICAg
ICBSb290SW5saW5lQm94KiByb290Qm94ID0gYm94LT5yb290KCk7CiAgICAgICAgIGlmIChwb2lu
dEJsb2NrRGlyZWN0aW9uID49IHJvb3RCb3gtPnNlbGVjdGlvblRvcCgpIHx8IHBvaW50QmxvY2tE
aXJlY3Rpb24gPj0gcm9vdEJveC0+bGluZVRvcCgpKSB7CiAgICAgICAgICAgICBMYXlvdXRVbml0
IGJvdHRvbSA9IHJvb3RCb3gtPnNlbGVjdGlvbkJvdHRvbSgpOwpAQCAtNjI5LDE1ICs2MTgsMTkg
QEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUAogCiAgICAgICAgICAg
ICBpZiAocG9pbnRCbG9ja0RpcmVjdGlvbiA8IGJvdHRvbSkgewogICAgICAgICAgICAgICAgIFNo
b3VsZEFmZmluaXR5QmVEb3duc3RyZWFtIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtOwotICAg
ICAgICAgICAgICAgIG9mZnNldCA9IGJveC0+b2Zmc2V0Rm9yUG9zaXRpb24ocG9pbnRMaW5lRGly
ZWN0aW9uKTsKICAgICAgICAgICAgICAgICBpZiAobGluZURpcmVjdGlvblBvaW50Rml0c0luQm94
KHBvaW50TGluZURpcmVjdGlvbiwgYm94LCBzaG91bGRBZmZpbml0eUJlRG93bnN0cmVhbSkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb25BZnRlckFkanVz
dGluZ09mZnNldEZvckJpRGkoYm94LCBvZmZzZXQsIHNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFt
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbkFmdGVy
QWRqdXN0aW5nT2Zmc2V0Rm9yQmlEaShib3gsIGJveC0+b2Zmc2V0Rm9yUG9zaXRpb24ocG9pbnRM
aW5lRGlyZWN0aW9uKSwgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgbGFzdEJveEFib3ZlID0gYm94OwogICAgICAgICB9CisgICAgICAgIGxh
c3RCb3ggPSBib3g7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihs
YXN0Qm94QWJvdmUgPyBsYXN0Qm94QWJvdmUtPnN0YXJ0KCkgKyBsYXN0Qm94QWJvdmUtPmxlbigp
IDogMCwgRE9XTlNUUkVBTSk7CisgICAgaWYgKGxhc3RCb3gpIHsKKyAgICAgICAgU2hvdWxkQWZm
aW5pdHlCZURvd25zdHJlYW0gc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW07CisgICAgICAgIGxp
bmVEaXJlY3Rpb25Qb2ludEZpdHNJbkJveChwb2ludExpbmVEaXJlY3Rpb24sIGxhc3RCb3gsIHNo
b3VsZEFmZmluaXR5QmVEb3duc3RyZWFtKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQ
b3NpdGlvbkFmdGVyQWRqdXN0aW5nT2Zmc2V0Rm9yQmlEaShsYXN0Qm94LCBsYXN0Qm94LT5vZmZz
ZXRGb3JQb3NpdGlvbihwb2ludExpbmVEaXJlY3Rpb24pICsgbGFzdEJveC0+c3RhcnQoKSwgc2hv
dWxkQWZmaW5pdHlCZURvd25zdHJlYW0pOworICAgIH0KKyAgICByZXR1cm4gY3JlYXRlVmlzaWJs
ZVBvc2l0aW9uKDAsIERPV05TVFJFQU0pOwogfQogCiBMYXlvdXRSZWN0IFJlbmRlclRleHQ6Omxv
Y2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIExheW91
dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDEwMzQ5NykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgyLDYg
KzQ4MiwxNCBAQCBJbmxpbmVCb3gqIFJvb3RJbmxpbmVCb3g6OmNsb3Nlc3RMZWFmQ2hpCiB7CiAg
ICAgSW5saW5lQm94KiBmaXJzdExlYWYgPSBmaXJzdExlYWZDaGlsZCgpOwogICAgIElubGluZUJv
eCogbGFzdExlYWYgPSBsYXN0TGVhZkNoaWxkKCk7CisKKyAgICBpZiAoZmlyc3RMZWFmICE9IGxh
c3RMZWFmKSB7CisgICAgICAgIGlmIChmaXJzdExlYWYtPmlzTGluZUJyZWFrKCkpCisgICAgICAg
ICAgICBmaXJzdExlYWYgPSBmaXJzdExlYWYtPm5leHRMZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVh
aygpOworICAgICAgICBlbHNlIGlmIChsYXN0TGVhZi0+aXNMaW5lQnJlYWsoKSkKKyAgICAgICAg
ICAgIGxhc3RMZWFmID0gbGFzdExlYWYtPnByZXZMZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVhaygp
OworICAgIH0KKwogICAgIGlmIChmaXJzdExlYWYgPT0gbGFzdExlYWYgJiYgKCFvbmx5RWRpdGFi
bGVMZWF2ZXMgfHwgaXNFZGl0YWJsZUxlYWYoZmlyc3RMZWFmKSkpCiAgICAgICAgIHJldHVybiBm
aXJzdExlYWY7CiAKQEAgLTQ5Nyw3ICs1MDUsNyBAQCBJbmxpbmVCb3gqIFJvb3RJbmxpbmVCb3g6
OmNsb3Nlc3RMZWFmQ2hpCiAgICAgICAgIHJldHVybiBsYXN0TGVhZjsKIAogICAgIElubGluZUJv
eCogY2xvc2VzdExlYWYgPSAwOwotICAgIGZvciAoSW5saW5lQm94KiBsZWFmID0gZmlyc3RMZWFm
OyBsZWFmOyBsZWFmID0gbGVhZi0+bmV4dExlYWZDaGlsZCgpKSB7CisgICAgZm9yIChJbmxpbmVC
b3gqIGxlYWYgPSBmaXJzdExlYWY7IGxlYWY7IGxlYWYgPSBsZWFmLT5uZXh0TGVhZkNoaWxkSWdu
b3JpbmdMaW5lQnJlYWsoKSkgewogICAgICAgICBpZiAoIWxlYWYtPnJlbmRlcmVyKCktPmlzTGlz
dE1hcmtlcigpICYmICghb25seUVkaXRhYmxlTGVhdmVzIHx8IGlzRWRpdGFibGVMZWFmKGxlYWYp
KSkgewogICAgICAgICAgICAgY2xvc2VzdExlYWYgPSBsZWFmOwogICAgICAgICAgICAgaWYgKGxl
ZnRQb3NpdGlvbiA8IGxlYWYtPmxvZ2ljYWxSaWdodCgpKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTAz
NDk3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMTEtMTItMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgUkVHUkVTU0lPTihyNzQ5NzEpOiBDYW4ndCBzZWxlY3QgYSBsaW5lIG9mIFJUTCB0ZXh0
IG9uIEZhY2Vib29rCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01OTQzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBhIHJlZ3Jlc3Npb24gdGVzdCBmb3Igc2VsZWN0aW5nICBtdWx0aWxpbmUgYmlkaXJl
Y3Rpb25hbCB0ZXh0LgorCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vc2VsZWN0LWxpbmUt
YnJlYWstd2l0aC1vcHBvc2l0ZS1kaXJlY3Rpb25hbGl0eS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdC1saW5lLWJyZWFrLXdpdGgtb3Bwb3Np
dGUtZGlyZWN0aW9uYWxpdHkuaHRtbDogQWRkZWQuCisKIDIwMTEtMTItMjEgIFlvc2lmdW1pIElu
b3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtGb3Jtc10gU2VsZWN0aW9uIGNo
YW5nZSBieSB0eXBlLWFoZWFkIGRvZXNuJ3QgZmlyZSAnY2hhbmdlJyBldmVudApJbmRleDogTGF5
b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vc2VsZWN0LWxpbmUtYnJlYWstd2l0aC1vcHBvc2l0
ZS1kaXJlY3Rpb25hbGl0eS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZWRpdGluZy9zZWxlY3Rpb24vc2VsZWN0LWxpbmUtYnJlYWstd2l0aC1vcHBvc2l0ZS1kaXJlY3Rp
b25hbGl0eS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9zZWxlY3QtbGluZS1icmVhay13aXRoLW9wcG9zaXRlLWRpcmVjdGlvbmFsaXR5
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorVGhpcyB0ZXN0cyBz
ZWxlY3RpbmcgTFRSL1JUTCB0ZXh0IHRoYXQgc3BhbnMgbXVsdGlwbGUgbGluZXMgaW4gUlRML0xU
UiBibG9jayAob3Bwb3NpdGUgZGlyZWN0aW9uYWxpdHkpLiBUbyBtYW51YWxseSB0ZXN0LCBzZWxl
Y3QgdGV4dCBpbiBlYWNoIG9mIGVkaXRhYmxlIHJlZ2lvbnMgYmVsb3cgYnkgZHJhZ2dpbmcgbW91
c2UgZnJvbSBvbmUgZWRnZSB0byBhbm90aGVyLiBUaGUgZW50aXJlIGxpbmUgc2hvdWxkIGJlIHNl
bGVjdGVkLgorCitURVNUIDEgbGluZSAxOlBBU1MKK1RFU1QgMSBsaW5lIDI6UEFTUworVEVTVCAy
IGxpbmUgMTpQQVNTCitURVNUIDMgbGluZSAxOlBBU1MKK1RFU1QgNCBsaW5lIDE6UEFTUworVEVT
VCA0IGxpbmUgMjpQQVNTCitURVNUIDQgbGluZSAzOlBBU1MKK1RFU1QgNSBsaW5lIDE6UEFTUwor
VEVTVCA1IGxpbmUgMjpQQVNTCitURVNUIDUgbGluZSAzOlBBU1MKK1RFU1QgNiBsaW5lIDE6UEFT
UworVEVTVCA2IGxpbmUgMjpQQVNTCitURVNUIDYgbGluZSAzOlBBU1MKK1RFU1QgNyBsaW5lIDE6
UEFTUworVEVTVCA3IGxpbmUgMjpQQVNTCitURVNUIDcgbGluZSAzOlBBU1MKK1RFU1QgOCBsaW5l
IDE6UEFTUworVEVTVCA4IGxpbmUgMjpQQVNTCitURVNUIDggbGluZSAzOlBBU1MKK1RFU1QgOSBs
aW5lIDE6UEFTUworVEVTVCA5IGxpbmUgMjpQQVNTCitURVNUIDkgbGluZSAzOlBBU1MKK1RFU1Qg
MTAgbGluZSAxOlBBU1MKK1RFU1QgMTAgbGluZSAyOlBBU1MKK1RFU1QgMTAgbGluZSAzOlBBU1MK
KworCisKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdC1saW5lLWJy
ZWFrLXdpdGgtb3Bwb3NpdGUtZGlyZWN0aW9uYWxpdHkuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3QtbGluZS1icmVhay13aXRoLW9wcG9zaXRl
LWRpcmVjdGlvbmFsaXR5Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5n
L3NlbGVjdGlvbi9zZWxlY3QtbGluZS1icmVhay13aXRoLW9wcG9zaXRlLWRpcmVjdGlvbmFsaXR5
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRl
eHQvaHRtbDtjaGFyc2V0PXV0Zi04Ij4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisKKy50ZXN0
cyB7CisgICAgd2lkdGg6IDI1MHB4OworICAgIGZsb2F0OiBsZWZ0OworICAgIGxpc3Qtc3R5bGU6
IG5vbmU7Cit9CisKKy50ZXN0cyBkaXYsIC50ZXN0cyBwcmUgeworICAgIGJvcmRlcjogc29saWQg
MXB4IGJsYWNrOworICAgIHdpZHRoOiAyMDBweDsKKyAgICBmb250LXNpemU6IDEzcHg7CisgICAg
bGluZS1oZWlnaHQ6IDEzcHg7CisgICAgcGFkZGluZzogMTNweDsKK30KKworLmhpZGVUZXN0c0lu
RFJUIC50ZXN0cyB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworPC9zdHlsZT4KKzwvaGVhZD4K
Kzxib2R5PgorPHA+VGhpcyB0ZXN0cyBzZWxlY3RpbmcgTFRSL1JUTCB0ZXh0IHRoYXQgc3BhbnMg
bXVsdGlwbGUgbGluZXMgaW4gUlRML0xUUiBibG9jayAob3Bwb3NpdGUgZGlyZWN0aW9uYWxpdHkp
LgorVG8gbWFudWFsbHkgdGVzdCwgc2VsZWN0IHRleHQgaW4gZWFjaCBvZiBlZGl0YWJsZSByZWdp
b25zIGJlbG93IGJ5IGRyYWdnaW5nIG1vdXNlIGZyb20gb25lIGVkZ2UgdG8gYW5vdGhlci4KK1Ro
ZSBlbnRpcmUgbGluZSBzaG91bGQgYmUgc2VsZWN0ZWQuPC9wPgorPGJvZHk+Cis8b2wgY2xhc3M9
InRlc3RzIj4KKzxsaT48ZGl2IGNvbnRlbnRlZGl0YWJsZSB0aXRsZT0iMCAzLCA0IDYiPmFiYzxi
cj5kZWY8L2Rpdj48L2xpPgorPGxpPjxkaXYgY29udGVudGVkaXRhYmxlIHRpdGxlPSIwIDMiPtin
2KjYtTwvZGl2PjwvbGk+Cis8bGk+PGRpdiBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiIHRpdGxl
PSIwIDMiPmFiYzwvZGl2PjwvbGk+Cis8bGk+PGRpdiBjb250ZW50ZWRpdGFibGUgdGl0bGU9IjAg
MywgNCwgNSA2Ij7Yp9io2LU8c3BhbiBkaXI9Imx0ciI+PGJyPjxicj5hPC9zcGFuPjwvZGl2Pjwv
bGk+Cis8bGk+PGRpdiBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiIHRpdGxlPSIwIDMsIDQsIDUg
NiI+YWJjPHNwYW4gZGlyPSJydGwiPjxicj48YnI+2Kc8L3NwYW4+PC9kaXY+PC9saT4KKzxsaT48
ZGl2IGNvbnRlbnRlZGl0YWJsZSB0aXRsZT0iMCAzLCA0LCA1IDYiPtin2KjYtTxicj48YnI+YTwv
ZGl2PjwvbGk+Cis8bGk+PGRpdiBjb250ZW50ZWRpdGFibGUgZGlyPSJydGwiIHRpdGxlPSIwIDMs
IDQsIDUgNiI+2KfYqNi1PGJyPjxicj5hPC9kaXY+PC9saT4KKzwvb2w+Cis8b2wgY2xhc3M9InRl
c3RzIj4KKzxsaT48cHJlIGNvbnRlbnRlZGl0YWJsZSB0aXRsZT0iMCAzLCA0LCA1IDYiPjxzcGFu
IGRpcj0icnRsIj7Yp9io2LUKKworYTwvc3Bhbj48L3ByZT48L2xpPgorPGxpPjxwcmUgY29udGVu
dGVkaXRhYmxlIGRpcj0icnRsIiB0aXRsZT0iMCAzLCA0LCA1IDYiPjxzcGFuIGRpcj0ibHRyIj5h
YmMKKworYTwvc3Bhbj48L3ByZT48L2xpPgorPGxpPjxwcmUgY29udGVudGVkaXRhYmxlIGRpcj0i
cnRsIiB0aXRsZT0iMCAzLCA0LCA1IDYiPmFiYzxzcGFuIGRpcj0icnRsIj4KKworYTwvc3Bhbj48
L3ByZT48L2xpPgorPC9vbD4KKzxwcmUgaWQ9ImxvZyI+PHNjcmlwdD4KKworZnVuY3Rpb24gc2Vs
ZWN0TGluZVNhZmVseSh0ZXN0LCBsaW5lVG9wKSB7CisgICAgdmFyIHkgPSB0ZXN0Lm9mZnNldFRv
cCArIGxpbmVUb3AgKyA1OworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRlc3Qub2Zmc2V0
TGVmdCArIDUsIHkpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworCisgICAgZXZlbnRT
ZW5kZXIubGVhcEZvcndhcmQoMjAwKTsKKworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHRl
c3Qub2Zmc2V0TGVmdCArIHRlc3Qub2Zmc2V0V2lkdGggLSA1LCB5KTsKKyAgICBldmVudFNlbmRl
ci5tb3VzZVVwKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICBpZiAoIXdpbmRvdy5l
dmVudFNlbmRlcikKKyAgICAgICAgZG9jdW1lbnQud3JpdGVsbignVGhpcyB0ZXN0IHJlcXVpcmVz
IGV2ZW50U2VuZGVyJyk7CisgICAgZWxzZSB7CisgICAgICAgIHZhciB0ZXN0cyA9IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaScpOworICAgICAgICB2YXIgdGVzdE51bWJlciA9IDA7
CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgdmFyIHRlc3QgPSB0ZXN0c1tpXS5maXJzdENoaWxkOworICAgICAgICAgICAgb2Zm
c2V0cyA9IHRlc3QudGl0bGUuc3BsaXQoJywgJyk7CisKKyAgICAgICAgICAgIGZvciAodmFyIGog
PSAwOyBqIDwgb2Zmc2V0cy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgICAgIGZ1bmN0aW9u
IGxvZyhtc2cpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LndyaXRlKCdU
RVNUICcgKyAoaSArIDEpICsgJyBsaW5lICcgKyAoaiArIDEpICsgJzonICsgbXNnICsgJ1xuJyk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gcGFyc2VJ
bnQob2Zmc2V0c1tqXS5zcGxpdCgnICcpWzBdKTsKKyAgICAgICAgICAgICAgICB2YXIgYWZ0ZXJF
bmQgPSBwYXJzZUludChvZmZzZXRzW2pdLnNwbGl0KCcgJylbMV0pOyAvLyBNaWdodCBiZSBOYU4K
KyAgICAgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwor
CisgICAgICAgICAgICAgICAgc2VsZWN0TGluZVNhZmVseSh0ZXN0LCAxMyAqIChqICsgMSkpOwor
CisgICAgICAgICAgICAgICAgdmFyIGFjdHVhbCA9IHNlbGVjdGlvbi50b1N0cmluZygpOworICAg
ICAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IHRlc3QuaW5uZXJUZXh0LnN1YnN0cihzdGFydCwg
YWZ0ZXJFbmQpOworICAgICAgICAgICAgICAgIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpCisgICAg
ICAgICAgICAgICAgICAgIGxvZygnUEFTUycpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgbG9nKCdGQUlMIC0gZXhwZWN0ZWQgIicgKyBleHBlY3RlZCArICciIGJ1
dCBnb3QgIicgKyBhY3R1YWwgKyAnIicpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgPSAnaGlkZVRlc3RzSW5EUlQnOworfQor
Citkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb25jaGFuZ2UnLCBmdW5jdGlvbiAo
KSB7CisgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKKyAgICBpZiAo
c2VsZWN0aW9uLmlzQ29sbGFwc2VkKQorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
bG9nJykuaW5uZXJIVE1MICs9IHNlbGVjdGlvbi5iYXNlT2Zmc2V0ICsgJ1xuJzsKKyAgICBlbHNl
CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2cnKS5pbm5lckhUTUwgKz0gc2Vs
ZWN0aW9uLmJhc2VPZmZzZXQgKyAnOicgKyBzZWxlY3Rpb24uZXh0ZW50T2Zmc2V0ICsgJ1xuJzsK
K30pCisKKzwvc2NyaXB0Cis+PC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="120526"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130408</attachid>
            <date>2012-03-06 11:03:32 -0800</date>
            <delta_ts>2012-03-06 12:21:51 -0800</delta_ts>
            <desc>Fixes one last bug</desc>
            <filename>bug-59435-20120306110331.patch</filename>
            <type>text/plain</type>
            <size>4219</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTkzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAzLTA2ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIENhbid0IHNlbGVjdCBhIGxpbmUg
b2YgUlRMIHRleHQgb24gRmFjZWJvb2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU5NDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRGVwbG95IHByZXZMZWFmQ2hpbGRJZ25vcmluZ0xpbmVCcmVhayBhbmQg
bmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrCisgICAgICAgIGluIFJlbmRlcmVkUG9zaXRp
b246OmxlZnRCb3VuZGFyeU9mQmlkaVJ1biBhbmQgUmVuZGVyZWRQb3NpdGlvbjo6cmlnaHRCb3Vu
ZGFyeU9mQmlkaVJ1bi4KKworICAgICAgICBXaXRob3V0IHRoaXMgcGF0Y2gsIFdlYktpdCBleHRl
bmRzIHNlbGVjdGlvbiBmcm9tIHJpZ2h0IHRvIGxlZnQgd2hlbiB0aGUgdXNlciBzZWxlY3RzCisg
ICAgICAgIDxzcGFuIGRpcj0icnRsIj5BQkM8YnI+PC9zcGFuPiBmcm9tIGxlZnQgdG8gcmlnaHQg
YnkgYSBtb3VzZSBkcmFnLgorCisgICAgICAgIFRlc3Q6IGVkaXRpbmcvc2VsZWN0aW9uL3NlbGVj
dC1iaWRpLXJ1bi5odG1sCisKKyAgICAgICAgKiBlZGl0aW5nL1JlbmRlcmVkUG9zaXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyZWRQb3NpdGlvbjo6bGVmdEJvdW5kYXJ5T2ZCaWRp
UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkUG9zaXRpb246OnJpZ2h0Qm91bmRhcnlP
ZkJpZGlSdW4pOgorCiAyMDEyLTAzLTA2ICBEYXZpZCBDb3J2b3lzaWVyICA8ZGF2aWQuY29ydm95
c2llckBvcmFuZ2UuY29tPgogCiAgICAgICAgIFVucmVsZWFzZWQgZ3N0X29iamVjdF9yZWZlcmVu
Y2UgdG8gYXVkaW8gc2luayBpbiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVuZGVyZWRQb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcAkocmV2aXNpb24gMTA5
ODA5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW5kZXJlZFBvc2l0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIFJlbmRlcmVkUG9zaXRpb24gUmVuZGVyZWRQ
b3NpdGlvbjo6bGVmdEIKIAogICAgIElubGluZUJveCogYm94ID0gbV9pbmxpbmVCb3g7CiAgICAg
ZG8gewotICAgICAgICBJbmxpbmVCb3gqIHByZXYgPSBib3gtPnByZXZMZWFmQ2hpbGQoKTsKKyAg
ICAgICAgSW5saW5lQm94KiBwcmV2ID0gYm94LT5wcmV2TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJl
YWsoKTsKICAgICAgICAgaWYgKCFwcmV2IHx8IHByZXYtPmJpZGlMZXZlbCgpIDwgYmlkaUxldmVs
T2ZSdW4pCiAgICAgICAgICAgICByZXR1cm4gUmVuZGVyZWRQb3NpdGlvbihib3gtPnJlbmRlcmVy
KCksIGJveCwgYm94LT5jYXJldExlZnRtb3N0T2Zmc2V0KCkpOwogICAgICAgICBib3ggPSBwcmV2
OwpAQCAtMTU0LDcgKzE1NCw3IEBAIFJlbmRlcmVkUG9zaXRpb24gUmVuZGVyZWRQb3NpdGlvbjo6
cmlnaHQKIAogICAgIElubGluZUJveCogYm94ID0gbV9pbmxpbmVCb3g7CiAgICAgZG8gewotICAg
ICAgICBJbmxpbmVCb3gqIG5leHQgPSBib3gtPm5leHRMZWFmQ2hpbGQoKTsKKyAgICAgICAgSW5s
aW5lQm94KiBuZXh0ID0gYm94LT5uZXh0TGVhZkNoaWxkSWdub3JpbmdMaW5lQnJlYWsoKTsKICAg
ICAgICAgaWYgKCFuZXh0IHx8IG5leHQtPmJpZGlMZXZlbCgpIDwgYmlkaUxldmVsT2ZSdW4pCiAg
ICAgICAgICAgICByZXR1cm4gUmVuZGVyZWRQb3NpdGlvbihib3gtPnJlbmRlcmVyKCksIGJveCwg
Ym94LT5jYXJldFJpZ2h0bW9zdE9mZnNldCgpKTsKICAgICAgICAgYm94ID0gbmV4dDsKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDEwOTkzNCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAzLTA2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgorCisgICAgICAgIENhbid0IHNlbGVjdCBhIGxpbmUgb2YgUlRMIHRleHQgb24g
RmFjZWJvb2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU5NDM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgYSByZWdyZXNzaW9uIHRlc3QgY2FzZS4KKworICAgICAgICAqIGVkaXRpbmcvc2VsZWN0
aW9uL3NlbGVjdC1iaWRpLXJ1bi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZWRpdGluZy9zZWxl
Y3Rpb24vc2VsZWN0LWJpZGktcnVuLmh0bWw6CisKIDIwMTItMDMtMDYgIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgc2VsZWN0LWxpbmUtYnJlYWstd2l0aC1vcHBv
c2l0ZS1kaXJlY3Rpb25hbGl0eS5odG1sIGlzIGZsYWt5CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0
aW5nL3NlbGVjdGlvbi9zZWxlY3QtYmlkaS1ydW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdC1iaWRpLXJ1bi1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDEwOTgwOSkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL3Nl
bGVjdC1iaWRpLXJ1bi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIs
MTYgQEAgUEFTUyBzZWxlY3RlZCAiQSIKIFBBU1Mgc2VsZWN0ZWQgIkFCIgogUEFTUyBzZWxlY3Rl
ZCAiQUJDIgogCitUZXN0ICJBQkMiIGluICJBQkMiOgorU2VsZWN0aW5nIGZyb20gbGVmdCB0byBy
aWdodAorUEFTUyBzZWxlY3RlZCAiQyIKK1BBU1Mgc2VsZWN0ZWQgIkJDIgorUEFTUyBzZWxlY3Rl
ZCAiQUJDIgorU2VsZWN0aW5nIGZyb20gcmlnaHQgdG8gbGVmdAorUEFTUyBzZWxlY3RlZCAiQSIK
K1BBU1Mgc2VsZWN0ZWQgIkFCIgorUEFTUyBzZWxlY3RlZCAiQUJDIgorCiBQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Vk
aXRpbmcvc2VsZWN0aW9uL3NlbGVjdC1iaWRpLXJ1bi5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL3NlbGVjdC1iaWRpLXJ1bi5odG1sCShyZXZpc2lvbiAx
MDk4MDkpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9zZWxlY3QtYmlkaS1ydW4u
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOSBAQCBEbyB0aGUgc2FtZSBieSBhIG1v
dXNlIGRyYWcgZnJvbSByaWdodCB0CiA8ZHQgY29udGVudGVkaXRhYmxlIHN0eWxlPSJwb3NpdGlv
bjogcmVsYXRpdmU7Ij5h15DXkdeSYjxkaXYgY2xhc3M9InRhcmdldENvbnRhaW5lciI+YTxzcGFu
IGNsYXNzPSJ0YXJnZXQiPteQ15HXkjwvc3Bhbj5iPC9kaXY+PC9kdD4KIDxkZD5DLEJDLEFCQ3xB
LEFCLEFCQzwvZGQ+CiAKKzxkdCBjb250ZW50ZWRpdGFibGUgZGlyPSJsdHIiPjxzcGFuIGNsYXNz
PSJ0YXJnZXQiIGRpcj0icnRsIj7XkNeR15I8YnI+PC9zcGFuPjwvZHQ+Cis8ZGQ+QyxCQyxBQkN8
QSxBQixBQkM8L2RkPgorCiA8IS0tPGR0IGNvbnRlbnRlZGl0YWJsZT48c3BhbiBjbGFzcz0idGFy
Z2V0Ij7XkNeR15IgMTIzIC0gNDU2PC9zcGFuPjwvZHQ+CiA8ZGQ+MSwxMiwgMTIzLEMgMTIzLEJD
IDEyMyxBQkMgMTIzfEEsQUIsQUJDLEFCQyAsQUJDIDEyLEFCQyAxLEFCQyAxMjM8L2RkPi0tPgog
Cg==
</data>
<flag name="review"
          id="133396"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>