<?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>63029</bug_id>
          
          <creation_ts>2011-06-20 17:05:32 -0700</creation_ts>
          <short_desc>Fix legacy color attribute parsing to match HTML spec</short_desc>
          <delta_ts>2012-08-26 16:14:14 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tab Atkins">tabatkins</reporter>
          <assigned_to name="Tab Atkins">tabatkins</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>krit</cc>
    
    <cc>mitz</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tabatkins</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>424096</commentid>
    <comment_count>0</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-20 17:05:32 -0700</bug_when>
    <thetext>Fix legacy color attribute parsing to match HTML spec</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424107</commentid>
    <comment_count>1</comment_count>
      <attachid>97893</attachid>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-20 17:17:20 -0700</bug_when>
    <thetext>Created attachment 97893
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424108</commentid>
    <comment_count>2</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-20 17:20:10 -0700</bug_when>
    <thetext>This behavior matches Firefox and should match IE (don&apos;t have ability to quickly test).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424121</commentid>
    <comment_count>3</comment_count>
      <attachid>97893</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-20 17:37:49 -0700</bug_when>
    <thetext>Comment on attachment 97893
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=97893&amp;action=review

&gt; Source/WebCore/dom/StyledElement.cpp:321
&gt; -/* color parsing that tries to match as close as possible IE 6. */
&gt; +/* color parsing that matches HTML&apos;s &quot;rules for parsing a legacy color value&quot; */

C++ style comments pls

&gt; Source/WebCore/dom/StyledElement.cpp:324
&gt; +    // These two cases don&apos;t apply any color

Comments should be complete sentences (that end with a &quot;.&quot; ).

&gt; Source/WebCore/dom/StyledElement.cpp:326
&gt; +    if (!c.length() || equalIgnoringCase(c, &quot;transparent&quot;))
&gt;          return;

Can we use a more descriptive variable name than &quot;c&quot; ?

&gt; Source/WebCore/dom/StyledElement.cpp:332
&gt; +    color.stripWhiteSpace();

Does this actually modify the string or just return a new version with whitespace stripped?  I never remember.

&gt; Source/WebCore/dom/StyledElement.cpp:355
&gt; +            if (!isASCIIHexDigit(color[pos]))
&gt; +                color.replace(pos, 1, &quot;0&quot;);

For realz?  Amazing.

&gt; Source/WebCore/dom/StyledElement.cpp:359
&gt; +        if (color.length() % 3 == 2)
&gt; +            color += &quot;0&quot;;
&gt; +        if (color.length() % 3 == 1)

else if, right?

&gt; Source/WebCore/dom/StyledElement.cpp:373
&gt; +            int redIndex = max(0, componentLength - 8);

8?  Can we name this constant.  It&apos;s not obvious to me where it comes from.

&gt; Source/WebCore/dom/StyledElement.cpp:384
&gt; +            colors[0] = toASCIIHexValue(color[redIndex]) * 16 + toASCIIHexValue(color[redIndex+1]);
&gt; +            colors[1] = toASCIIHexValue(color[greenIndex]) * 16 + toASCIIHexValue(color[greenIndex+1]);
&gt; +            colors[2] = toASCIIHexValue(color[blueIndex]) * 16 + toASCIIHexValue(color[blueIndex+1]);

Can you add some ASSERTs before this block to make sure all the indicies remain sane and in their proper bounds?

&gt; Source/WebCore/dom/StyledElement.cpp:390
&gt; +    color = String::format(&quot;#%02x%02x%02x&quot;, colors[0], colors[1], colors[2]);
&gt; +    if (attr-&gt;decl()-&gt;setProperty(id, color, false))
&gt; +        return;

How could this fail?  Should we ASSERT_NOT_REACHED?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424133</commentid>
    <comment_count>4</comment_count>
      <attachid>97893</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-06-20 17:59:14 -0700</bug_when>
    <thetext>Comment on attachment 97893
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=97893&amp;action=review

Do we know of any colors that IE used to parse, that will now fail?

&gt; LayoutTests/fast/dom/script-tests/attribute-legacy-colors.js:3
&gt; +shouldBe(&quot;document.body.bgColor=&apos;&apos;;getComputedStyle(document.body).backgroundColor;&quot;, &quot;&apos;rgba(0, 0, 0, 0)&apos;&quot;);

Wedging the getComputedStyle() in there is pretty ugly. There has to be a better way to write these shouldBe()s.
Would be nice to make this series of tests data driven with a loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424134</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-06-20 17:59:45 -0700</bug_when>
    <thetext>Stupid bugzilla collisions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424167</commentid>
    <comment_count>6</comment_count>
      <attachid>97906</attachid>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-20 18:36:49 -0700</bug_when>
    <thetext>Created attachment 97906
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424168</commentid>
    <comment_count>7</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-20 18:40:05 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 97893 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=97893&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/StyledElement.cpp:321
&gt; &gt; -/* color parsing that tries to match as close as possible IE 6. */
&gt; &gt; +/* color parsing that matches HTML&apos;s &quot;rules for parsing a legacy color value&quot; */
&gt; 
&gt; C++ style comments pls
&gt; 
&gt; &gt; Source/WebCore/dom/StyledElement.cpp:324
&gt; &gt; +    // These two cases don&apos;t apply any color
&gt; 
&gt; Comments should be complete sentences (that end with a &quot;.&quot; ).

Fixed.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:326
&gt; &gt; +    if (!c.length() || equalIgnoringCase(c, &quot;transparent&quot;))
&gt; &gt;          return;
&gt; 
&gt; Can we use a more descriptive variable name than &quot;c&quot; ?

Switched to &quot;attrValue&quot;.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:332
&gt; &gt; +    color.stripWhiteSpace();
&gt; 
&gt; Does this actually modify the string or just return a new version with whitespace stripped?  I never remember.

The latter, as it turns out.  Fixed.  (Also, added a test that would have caught the fact that I was doing this wrong.)

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:355
&gt; &gt; +            if (!isASCIIHexDigit(color[pos]))
&gt; &gt; +                color.replace(pos, 1, &quot;0&quot;);
&gt; 
&gt; For realz?  Amazing.

Indeed.  Still missing the even crazier replacement where everything outside the BMP gets replaced with &quot;00&quot;, because I&apos;m not sure how to query the codepoint of a character in a String.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:359
&gt; &gt; +        if (color.length() % 3 == 2)
&gt; &gt; +            color += &quot;0&quot;;
&gt; &gt; +        if (color.length() % 3 == 1)
&gt; 
&gt; else if, right?

Fixed.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:373
&gt; &gt; +            int redIndex = max(0, componentLength - 8);
&gt; 
&gt; 8?  Can we name this constant.  It&apos;s not obvious to me where it comes from.

The constant was explained in the preceding comment, but I&apos;ve named it and slightly reshuffled the code there to hopefully be clearer.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:384
&gt; &gt; +            colors[0] = toASCIIHexValue(color[redIndex]) * 16 + toASCIIHexValue(color[redIndex+1]);
&gt; &gt; +            colors[1] = toASCIIHexValue(color[greenIndex]) * 16 + toASCIIHexValue(color[greenIndex+1]);
&gt; &gt; +            colors[2] = toASCIIHexValue(color[blueIndex]) * 16 + toASCIIHexValue(color[blueIndex+1]);
&gt; 
&gt; Can you add some ASSERTs before this block to make sure all the indicies remain sane and in their proper bounds?

Done.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:390
&gt; &gt; +    color = String::format(&quot;#%02x%02x%02x&quot;, colors[0], colors[1], colors[2]);
&gt; &gt; +    if (attr-&gt;decl()-&gt;setProperty(id, color, false))
&gt; &gt; +        return;
&gt; 
&gt; How could this fail?  Should we ASSERT_NOT_REACHED?

This was an artifact from the old code.  You&apos;re right that it can&apos;t ever fail.  I&apos;ve just removed the if() entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424169</commentid>
    <comment_count>8</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-20 18:42:27 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 97893 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=97893&amp;action=review
&gt; 
&gt; Do we know of any colors that IE used to parse, that will now fail?

Do you mean &quot;that we used to parse&quot;, or are you actually asking about IE here?

&gt; &gt; LayoutTests/fast/dom/script-tests/attribute-legacy-colors.js:3
&gt; &gt; +shouldBe(&quot;document.body.bgColor=&apos;&apos;;getComputedStyle(document.body).backgroundColor;&quot;, &quot;&apos;rgba(0, 0, 0, 0)&apos;&quot;);
&gt; 
&gt; Wedging the getComputedStyle() in there is pretty ugly. There has to be a better way to write these shouldBe()s.

getComputedStyle() is necessary to actually pull the used color out.  This is my first patch in a year, so I&apos;m not familiar with how these things &quot;should&quot; look.  If there&apos;s a better pattern, I&apos;d be happy to switch to it.

&gt; Would be nice to make this series of tests data driven with a loop.

Sounds good.  I&apos;ll switch over to that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424174</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-06-20 18:50:37 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 97893 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=97893&amp;action=review
&gt; &gt; 
&gt; &gt; Do we know of any colors that IE used to parse, that will now fail?
&gt; 
&gt; Do you mean &quot;that we used to parse&quot;, or are you actually asking about IE here?

Sorry, brain fart. Do you know of any colors that we managed to parse by copying IE that will no longer parse with the new code?

&gt; &gt; &gt; LayoutTests/fast/dom/script-tests/attribute-legacy-colors.js:3
&gt; &gt; &gt; +shouldBe(&quot;document.body.bgColor=&apos;&apos;;getComputedStyle(document.body).backgroundColor;&quot;, &quot;&apos;rgba(0, 0, 0, 0)&apos;&quot;);
&gt; &gt; 
&gt; &gt; Wedging the getComputedStyle() in there is pretty ugly. There has to be a better way to write these shouldBe()s.
&gt; 
&gt; getComputedStyle() is necessary to actually pull the used color out.  This is my first patch in a year, so I&apos;m not familiar with how these things &quot;should&quot; look.  If there&apos;s a better pattern, I&apos;d be happy to switch to it.

Not sure offhand, but I&apos;d grep for tests using shouldBe and getComputedStyle.

&gt; &gt; Would be nice to make this series of tests data driven with a loop.
&gt; 
&gt; Sounds good.  I&apos;ll switch over to that.

Cool</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424176</commentid>
    <comment_count>10</comment_count>
      <attachid>97909</attachid>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-20 18:52:21 -0700</bug_when>
    <thetext>Created attachment 97909
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424225</commentid>
    <comment_count>11</comment_count>
      <attachid>97909</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-06-20 20:28:30 -0700</bug_when>
    <thetext>Comment on attachment 97909
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=97909&amp;action=review

r- on the return after else, and you might want to do one final round.

&gt; Source/WebCore/dom/StyledElement.cpp:332
&gt; +    int colors[3] = { 0, 0, 0 };

This would be better called &apos;components&apos;.

&gt; Source/WebCore/dom/StyledElement.cpp:340
&gt; +        colors[2] = foundColor.blue();

Can&apos;t we call setProperty() here directly, rather than doing a String::format() which we have to re-parse again later?

&gt; Source/WebCore/dom/StyledElement.cpp:344
&gt; +    } else { 

We avoid &apos;else&apos; after return.

&gt; Source/WebCore/dom/StyledElement.cpp:345
&gt; +        // Otherwise, use the crazy legacy parsing rules.

Might be nice to put the legacy parsing code into its own method, then the code becomes self-documenting.

&gt; Source/WebCore/dom/StyledElement.cpp:347
&gt; +        // FIXME: Replace all non-BMP characters in color with &quot;00&quot;.

You should file a follow-up bug for this FIXME, but is this not what the isASCIIHexDigit() code below is doing?

&gt; Source/WebCore/dom/StyledElement.cpp:369
&gt; +            // Otherwise, we have at least 6 digits.

You should ASSERT this

&gt; Source/WebCore/dom/StyledElement.cpp:372
&gt; +            int componentSearchWindowSize = min(componentLength, static_cast&lt;size_t&gt;(8));

You can avoid the ugly static_cast by using min&lt;int&gt;()

&gt; Source/WebCore/dom/StyledElement.cpp:395
&gt; +    color = String::format(&quot;#%02x%02x%02x&quot;, colors[0], colors[1], colors[2]);

It&apos;s a shame to do all this work to compute the color components, and then turn around and make a String out of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424232</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-20 20:39:05 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; This behavior matches Firefox and should match IE (don&apos;t have ability to quickly test).

We don&apos;t always test IE, but color parsing is quite fundamental. Maybe you could check with &lt;http://browsershots.org/&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424614</commentid>
    <comment_count>13</comment_count>
      <attachid>98026</attachid>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-21 11:42:22 -0700</bug_when>
    <thetext>Created attachment 98026
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424617</commentid>
    <comment_count>14</comment_count>
      <attachid>98026</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-21 11:45:13 -0700</bug_when>
    <thetext>Comment on attachment 98026
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=98026&amp;action=review

This change looks OK, but the same logic could be done with no memory allocation except for the allocation of the strings for the property values. I’d prefer to see that.

&gt; Source/WebCore/dom/StyledElement.cpp:354
&gt; +            color.replace(pos, 1, &quot;0&quot;);

Calling replace on a string is an extremely inefficient way to modify a character at a time, and involves multiple allocations per call. I suggest using a UChar array on the stack instead.

&gt; Source/WebCore/dom/StyledElement.cpp:357
&gt; +        color += &quot;0&quot;;

Appending a string like this is inefficient, requiring a memory allocation each time.

&gt; Source/WebCore/dom/StyledElement.cpp:359
&gt; +        color += &quot;00&quot;;

Ditto.

&gt; Source/WebCore/dom/StyledElement.cpp:361
&gt; +        color = &quot;000&quot;;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424625</commentid>
    <comment_count>15</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-21 11:48:25 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 97909 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=97909&amp;action=review
&gt; 
&gt; r- on the return after else, and you might want to do one final round.
&gt; 
&gt; &gt; Source/WebCore/dom/StyledElement.cpp:332
&gt; &gt; +    int colors[3] = { 0, 0, 0 };
&gt; 
&gt; This would be better called &apos;components&apos;.

Good suggestion.  Done.


&gt; &gt; Source/WebCore/dom/StyledElement.cpp:340
&gt; &gt; +        colors[2] = foundColor.blue();
&gt; 
&gt; Can&apos;t we call setProperty() here directly, rather than doing a String::format() which we have to re-parse again later?

As far as I can tell, setProperty() only ever takes a string.  However, I *can* just call setProperty here with the original string, now that it&apos;s confirmed to be a valid color name.  I&apos;ve done so, and changed the other cases to also directly call setProperty and immediately return.


&gt; &gt; Source/WebCore/dom/StyledElement.cpp:344
&gt; &gt; +    } else { 
&gt; 
&gt; We avoid &apos;else&apos; after return.

Fixed as part of the above.


&gt; &gt; Source/WebCore/dom/StyledElement.cpp:345
&gt; &gt; +        // Otherwise, use the crazy legacy parsing rules.
&gt; 
&gt; Might be nice to put the legacy parsing code into its own method, then the code becomes self-documenting.

The legacy parsing is the entire point of this method, really.  The preceding stuff is just a prelude, testing for the couple of things that are acceptable in legacy colors.


&gt; &gt; Source/WebCore/dom/StyledElement.cpp:347
&gt; &gt; +        // FIXME: Replace all non-BMP characters in color with &quot;00&quot;.
&gt; 
&gt; You should file a follow-up bug for this FIXME, but is this not what the isASCIIHexDigit() code below is doing?

Nope.  Non-BMP chars get replaced with &quot;00&quot;.  Non-hex chars that are in the BMP get replaced with &quot;0&quot;.


&gt; &gt; Source/WebCore/dom/StyledElement.cpp:369
&gt; &gt; +            // Otherwise, we have at least 6 digits.
&gt; 
&gt; You should ASSERT this

Done.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:372
&gt; &gt; +            int componentSearchWindowSize = min(componentLength, static_cast&lt;size_t&gt;(8));
&gt; 
&gt; You can avoid the ugly static_cast by using min&lt;int&gt;()

Done.  (I used min&lt;size_t&gt;.)

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:395
&gt; &gt; +    color = String::format(&quot;#%02x%02x%02x&quot;, colors[0], colors[1], colors[2]);
&gt; 
&gt; It&apos;s a shame to do all this work to compute the color components, and then turn around and make a String out of them.

You&apos;re right.  I can just use the found components directly, instead of making them into a number and then back into a string.  Done.  (This part of the code was around before I started touching things.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424635</commentid>
    <comment_count>16</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-21 11:54:20 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 98026 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98026&amp;action=review
&gt; 
&gt; This change looks OK, but the same logic could be done with no memory allocation except for the allocation of the strings for the property values. I’d prefer to see that.

I don&apos;t believe I can get the allocations down quite that low, but I can definitely follow your suggestions below.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:354
&gt; &gt; +            color.replace(pos, 1, &quot;0&quot;);
&gt; 
&gt; Calling replace on a string is an extremely inefficient way to modify a character at a time, and involves multiple allocations per call. I suggest using a UChar array on the stack instead.
&gt; 
&gt; &gt; Source/WebCore/dom/StyledElement.cpp:357
&gt; &gt; +        color += &quot;0&quot;;
&gt; 
&gt; Appending a string like this is inefficient, requiring a memory allocation each time.
&gt; 
&gt; &gt; Source/WebCore/dom/StyledElement.cpp:359
&gt; &gt; +        color += &quot;00&quot;;
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/dom/StyledElement.cpp:361
&gt; &gt; +        color = &quot;000&quot;;
&gt; 
&gt; Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424658</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-21 12:21:09 -0700</bug_when>
    <thetext>&gt; I don&apos;t believe I can get the allocations down quite that low, but I can definitely follow your suggestions below.

One benefit of using Vector&lt;UChar&gt; is that you can set an inline capacity that&apos;s allocated on the stack.  In most cases, you&apos;ll stay within the inline capacity and avoid heap allocations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426305</commentid>
    <comment_count>18</comment_count>
      <attachid>98373</attachid>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-23 10:56:15 -0700</bug_when>
    <thetext>Created attachment 98373
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426311</commentid>
    <comment_count>19</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-23 11:07:56 -0700</bug_when>
    <thetext>Okay, switched to doing the fixup in a buffer.  I&apos;m down to three allocations now - one String that&apos;s just a whitespace-stripped version of the attr value (necessary so I can pass it through to the named-color function), one Vector&lt;UChar&gt; that&apos;s preallocated to the maximum size I&apos;ll need, and a final String holding the CSS value we&apos;re going to set.

I&apos;d appreciate a review of the changes to make sure what I&apos;m doing is idiomatic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426320</commentid>
    <comment_count>20</comment_count>
      <attachid>98373</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-23 11:24:26 -0700</bug_when>
    <thetext>Comment on attachment 98373
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=98373&amp;action=review

&gt; Source/WebCore/dom/StyledElement.cpp:331
&gt; +    String color = attrValue.stripWhiteSpace();

Shouldn&apos;t we strip whitespace before checking &quot;transparent&quot; or length?  (And test that?)

&gt; Source/WebCore/dom/StyledElement.cpp:346
&gt; +    // First, fixup!

I&apos;m not sure this comment is helpful.

&gt; Source/WebCore/dom/StyledElement.cpp:347
&gt; +    // Reserve 128 rounded to nearest multiple of 3

Why?  Saying why is more helpful than restating what the code does. :)

&gt; Source/WebCore/dom/StyledElement.cpp:348
&gt; +    Vector&lt;UChar, 129&gt; chars;

This could be defined as maxColorLength + 1, or maxColorLength + 3 if you wanted to avoid explaining why +1 was ok or avoid writing (maxColorLength / 3 + 1 * 3)

&gt; Source/WebCore/dom/StyledElement.cpp:354
&gt; +    for (; colorPos &lt; color.length() &amp;&amp; chars.size() &lt; 128; colorPos++) {

Then this would use maxColorLength isntead of 128.

&gt; Source/WebCore/dom/StyledElement.cpp:355
&gt; +        // FIXME: Replace all non-BMP characters in color with &quot;00&quot;.

Should be easy to do and test.  Why not just do that as part of this patch?

&gt; Source/WebCore/dom/StyledElement.cpp:379
&gt; +    // Split the digits into three components, then search the last 8 digits of each component.

Maybe this whole section should be a helper function.

&gt; Source/WebCore/dom/StyledElement.cpp:398
&gt; +    color = String::format(&quot;#%c%c%c%c%c%c&quot;, (char)chars[redIndex], (char)chars[redIndex+1], (char)chars[greenIndex], (char)chars[greenIndex+1], (char)chars[blueIndex], (char)chars[blueIndex+1]);

We don&apos;t generally use c-style casts.  Why are these char casts necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426372</commentid>
    <comment_count>21</comment_count>
      <attachid>98373</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-23 12:41:15 -0700</bug_when>
    <thetext>Comment on attachment 98373
Patch

I’m almost certain the char casts are not needed. As long as both char and UChar are smaller than int, then they are both passed as int to varargs functions like String::format.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426611</commentid>
    <comment_count>22</comment_count>
      <attachid>98432</attachid>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-23 16:41:23 -0700</bug_when>
    <thetext>Created attachment 98432
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426627</commentid>
    <comment_count>23</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-23 16:50:10 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 98373 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98373&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/StyledElement.cpp:331
&gt; &gt; +    String color = attrValue.stripWhiteSpace();
&gt; 
&gt; Shouldn&apos;t we strip whitespace before checking &quot;transparent&quot; or length?  (And test that?)

Thanks for the catch; we *should* strip before testing for &quot;transparent&quot;.  The empty string test is correct, though - a string full of whitespace gets turned into black, per the spec algorithm.

I&apos;ve added testing coverage for both of these cases.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:346
&gt; &gt; +    // First, fixup!
&gt; 
&gt; I&apos;m not sure this comment is helpful.

It wasn&apos;t.  Removed.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:347
&gt; &gt; +    // Reserve 128 rounded to nearest multiple of 3
&gt; 
&gt; Why?  Saying why is more helpful than restating what the code does. :)
&gt; 
&gt; &gt; Source/WebCore/dom/StyledElement.cpp:348
&gt; &gt; +    Vector&lt;UChar, 129&gt; chars;
&gt; 
&gt; This could be defined as maxColorLength + 1, or maxColorLength + 3 if you wanted to avoid explaining why +1 was ok or avoid writing (maxColorLength / 3 + 1 * 3)
&gt; 
&gt; &gt; Source/WebCore/dom/StyledElement.cpp:354
&gt; &gt; +    for (; colorPos &lt; color.length() &amp;&amp; chars.size() &lt; 128; colorPos++) {
&gt; 
&gt; Then this would use maxColorLength isntead of 128.

Done, thanks.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:355
&gt; &gt; +        // FIXME: Replace all non-BMP characters in color with &quot;00&quot;.
&gt; 
&gt; Should be easy to do and test.  Why not just do that as part of this patch?

Because I wasn&apos;t sure how WTF::String dealt with non-BMP chars, particularly since it was made out of UChars which are 16-bit.  After some digging and testing, turns out that WTF::String is just composed of utf16 code elements, so my &quot;replace non-hex with &apos;0&apos;&quot; part handled the non-BMP case for free, because non-BMP characters are automatically 2 &quot;characters&quot; in a WTF::String.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:379
&gt; &gt; +    // Split the digits into three components, then search the last 8 digits of each component.
&gt; 
&gt; Maybe this whole section should be a helper function.

I&apos;ve done so.  I was instructed that the common idiom is to make it a file-static function; is this correct?
 
&gt; &gt; Source/WebCore/dom/StyledElement.cpp:398
&gt; &gt; +    color = String::format(&quot;#%c%c%c%c%c%c&quot;, (char)chars[redIndex], (char)chars[redIndex+1], (char)chars[greenIndex], (char)chars[greenIndex+1], (char)chars[blueIndex], (char)chars[blueIndex+1]);
&gt; 
&gt; We don&apos;t generally use c-style casts.  Why are these char casts necessary?

They were necessary because String::format didn&apos;t like receiving UChars when using the %c directive.  However, I&apos;ve since realized I don&apos;t actually need UChars, so I replaced my Vector&lt;UChar&gt; with a Vector&lt;char&gt; and removed the casts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426635</commentid>
    <comment_count>24</comment_count>
      <attachid>98432</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-23 17:04:33 -0700</bug_when>
    <thetext>Comment on attachment 98432
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=98432&amp;action=review

review- because of the failing test in the test results in the patch

&gt; LayoutTests/fast/dom/attribute-legacy-colors-expected.txt:1
&gt; +This test ensures that legacy color attributes are parsed properly.

I don’t think there are enough tests here to test the algorithm and edge cases given my reading of the code. I don’t see any test cases that get up to 128 characters, or pass 128 characters. I don’t see tests that cover the behavior of skipping up to 8 zeroes but not 9 in the individual components.

&gt; LayoutTests/fast/dom/attribute-legacy-colors-expected.txt:8
&gt; +FAIL document.body.bgColor=&apos; transparent &apos;;getComputedStyle(document.body).backgroundColor; should be rgba(0, 0, 0, 0). Was rgb(0, 0, 0).

Failing test!?

&gt; Source/WebCore/dom/StyledElement.cpp:321
&gt; +static String parseInvalidColorAttributeValue(const String attrValue)

This should be const String&amp; attributeValue, not const String attrValue.

&gt; Source/WebCore/dom/StyledElement.cpp:323
&gt; +    const size_t maxColorLength = 128;

It would be good to say where this 128 comes from. I assume it’s from the HTML specification’s invalid color parsing rules.

&gt; Source/WebCore/dom/StyledElement.cpp:325
&gt; +    // We&apos;ll pad the buffer to a multiple of 3, so we need to reserve a little more for safety
&gt; +    Vector&lt;char, maxColorLength+3&gt; chars;

A vector will automatically start using the heap instead of the stack once you go past the inline buffer, so there&apos;s no need to have the inline buffer size be large enough for the worst case. It just needs to be big enough to cover the normal case. I suppose this is OK as is, but this pays the cost of using the vector class without getting any benefit from it.

Since this buffer holds only hex digits, I&apos;d suggest naming it digitBuffer or digits, rather than naming it characters.

Given the comment the code should say &quot;+ 2&quot; rather than &quot;+ 3&quot;. Saying &quot;a little more for safety&quot; is unnecessarily vague; I think you’re saying that because there’s no easy way to write &quot;round up to multiple of 3&quot;, so we are using &quot;+ 2&quot; to approximate the ceiling of that.

&gt; Source/WebCore/dom/StyledElement.cpp:327
&gt; +    size_t colorPos = 0;

I’d rather see this be named something like &quot;i&quot;. It’s not the position of a color, so I don’t like the name “color position” for it, and I also do not care for abbreviations like “pos”.

&gt; Source/WebCore/dom/StyledElement.cpp:333
&gt; +    // Grab the first 128 chars, replacing non-hex chars with 0
&gt; +    // Non-BMP chars are replaced with &quot;00&quot; due to them appearing as two UChars in the String

We put periods on the end of sentences or even sentence-like fragments in our comments in WebKit.

Also, I would say characters, not chars.

&gt; Source/WebCore/dom/StyledElement.cpp:340
&gt; +    // Pad the buffer to a multiple of 3

Again, period needed.

&gt; Source/WebCore/dom/StyledElement.cpp:346
&gt; +    if (chars.size() % 3 == 2)
&gt; +        chars.append(&apos;0&apos;);
&gt; +    else if (chars.size() % 3 == 1) {
&gt; +        chars.append(&apos;0&apos;);
&gt; +        chars.append(&apos;0&apos;);
&gt; +    }

No real need to check the size here. We could just unconditionally append two &quot;0&quot; characters instead after the size zero check.

&gt; Source/WebCore/dom/StyledElement.cpp:351
&gt; +    if (chars.size() == 3)

If we unconditionally added two &quot;0&quot; characters, then this would be &quot;&lt; 6&quot; rather than &quot;== 3&quot;, but otherwise the code could be the same.

&gt; Source/WebCore/dom/StyledElement.cpp:361
&gt; +    // Skip digits until one of them is non-zero, or you&apos;ve only got two left in the component.

We’d normally say “we’ve”.

&gt; Source/WebCore/dom/StyledElement.cpp:373
&gt; +    return String::format(&quot;#%c%c%c%c%c%c&quot;, chars[redIndex], chars[redIndex+1], chars[greenIndex], chars[greenIndex+1], chars[blueIndex], chars[blueIndex+1]);   

We normally would put spaces around the &quot;+ 1&quot;. in this expression.

&gt; Source/WebCore/dom/StyledElement.cpp:376
&gt; +// color parsing that matches HTML&apos;s &quot;rules for parsing a legacy color value&quot;

WebKit style would be to capitalize and put a period at the end.

&gt; Source/WebCore/dom/StyledElement.cpp:377
&gt; +void StyledElement::addCSSColor(Attribute* attr, int id, const String&amp; attrValue)

I think these should have the names attribute and value or attributeValue rather than attr and attrValue.

&gt; Source/WebCore/dom/StyledElement.cpp:383
&gt; +    const String color = attrValue.stripWhiteSpace();

Not our WebKit style to use const in a case like this, although there is at least one person debating this style point on webkit-dev for the future.

&gt; Source/WebCore/dom/StyledElement.cpp:385
&gt; +    // &quot;transparent&quot; doesn&apos;t apply a color either.

Period at the end here.

&gt; Source/WebCore/dom/StyledElement.cpp:402
&gt; +    // If the string is a 3 or 6-digit hex color, use that color.
&gt; +    if (color[0] == &apos;#&apos; &amp;&amp; (color.length() == 4 || color.length() == 7) &amp;&amp; attr-&gt;decl()-&gt;setProperty(id, color, false))
&gt; +        return;

The comment says this runs if the string is a &quot;hex color&quot;, but there is nothing here that checks if the characters are hex digits. So either the comment or the code is wrong.

&gt; Source/WebCore/dom/StyledElement.cpp:404
&gt; +    // Otherwise, use the crazy legacy parsing rules.

Not sure this comment helps. If the right name for these rules are &quot;crazy legacy parsing rules&quot; then the function should just be named that so we don’t need the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426920</commentid>
    <comment_count>25</comment_count>
      <attachid>98500</attachid>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-24 09:16:49 -0700</bug_when>
    <thetext>Created attachment 98500
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426922</commentid>
    <comment_count>26</comment_count>
      <attachid>98502</attachid>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-24 09:21:51 -0700</bug_when>
    <thetext>Created attachment 98502
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426925</commentid>
    <comment_count>27</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-24 09:28:42 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 98432 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98432&amp;action=review
&gt; 
&gt; review- because of the failing test in the test results in the patch

Argh, sorry.  All the tests passed, but I didn&apos;t rebuild DRT before rebaselining, so it baselined with an old version.


&gt; &gt; LayoutTests/fast/dom/attribute-legacy-colors-expected.txt:1
&gt; &gt; +This test ensures that legacy color attributes are parsed properly.
&gt; 
&gt; I don’t think there are enough tests here to test the algorithm and edge cases given my reading of the code. I don’t see any test cases that get up to 128 characters, or pass 128 characters. I don’t see tests that cover the behavior of skipping up to 8 zeroes but not 9 in the individual components.

I&apos;ve added two tests for the 128-characters case, one in the BMP and one outside.

I&apos;ve also increased the coverage of tests in the &quot;skipping zeros&quot; section, and added one that ensures non-BMP characters are properly handled here.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:321
&gt; &gt; +static String parseInvalidColorAttributeValue(const String attrValue)
&gt; 
&gt; This should be const String&amp; attributeValue, not const String attrValue.

Fixed.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:323
&gt; &gt; +    const size_t maxColorLength = 128;
&gt; 
&gt; It would be good to say where this 128 comes from. I assume it’s from the HTML specification’s invalid color parsing rules.

Fixed.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:325
&gt; &gt; +    // We&apos;ll pad the buffer to a multiple of 3, so we need to reserve a little more for safety
&gt; &gt; +    Vector&lt;char, maxColorLength+3&gt; chars;
&gt; 
&gt; A vector will automatically start using the heap instead of the stack once you go past the inline buffer, so there&apos;s no need to have the inline buffer size be large enough for the worst case. It just needs to be big enough to cover the normal case. I suppose this is OK as is, but this pays the cost of using the vector class without getting any benefit from it.

I chose a Vector based on Adam Barth&apos;s comments.

&gt; Since this buffer holds only hex digits, I&apos;d suggest naming it digitBuffer or digits, rather than naming it characters.

Named it digitBuffer.

&gt; Given the comment the code should say &quot;+ 2&quot; rather than &quot;+ 3&quot;. Saying &quot;a little more for safety&quot; is unnecessarily vague; I think you’re saying that because there’s no easy way to write &quot;round up to multiple of 3&quot;, so we are using &quot;+ 2&quot; to approximate the ceiling of that.

Done, and reworded that comment.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:327
&gt; &gt; +    size_t colorPos = 0;
&gt; 
&gt; I’d rather see this be named something like &quot;i&quot;. It’s not the position of a color, so I don’t like the name “color position” for it, and I also do not care for abbreviations like “pos”.

Changed to i.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:333
&gt; &gt; +    // Grab the first 128 chars, replacing non-hex chars with 0
&gt; &gt; +    // Non-BMP chars are replaced with &quot;00&quot; due to them appearing as two UChars in the String
&gt; 
&gt; We put periods on the end of sentences or even sentence-like fragments in our comments in WebKit.
&gt; 
&gt; Also, I would say characters, not chars.

Done.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:346
&gt; &gt; +    if (chars.size() % 3 == 2)
&gt; &gt; +        chars.append(&apos;0&apos;);
&gt; &gt; +    else if (chars.size() % 3 == 1) {
&gt; &gt; +        chars.append(&apos;0&apos;);
&gt; &gt; +        chars.append(&apos;0&apos;);
&gt; &gt; +    }
&gt; 
&gt; No real need to check the size here. We could just unconditionally append two &quot;0&quot; characters instead after the size zero check.

Not sure I completely agree, but done.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:351
&gt; &gt; +    if (chars.size() == 3)
&gt; 
&gt; If we unconditionally added two &quot;0&quot; characters, then this would be &quot;&lt; 6&quot; rather than &quot;== 3&quot;, but otherwise the code could be the same.

Done.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:361
&gt; &gt; +    // Skip digits until one of them is non-zero, or you&apos;ve only got two left in the component.
&gt; 
&gt; We’d normally say “we’ve”.

Thanks, I wasn&apos;t sure what pronoun to use.  Done.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:373
&gt; &gt; +    return String::format(&quot;#%c%c%c%c%c%c&quot;, chars[redIndex], chars[redIndex+1], chars[greenIndex], chars[greenIndex+1], chars[blueIndex], chars[blueIndex+1]);   
&gt; 
&gt; We normally would put spaces around the &quot;+ 1&quot;. in this expression.

Done.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:376
&gt; &gt; +// color parsing that matches HTML&apos;s &quot;rules for parsing a legacy color value&quot;
&gt; 
&gt; WebKit style would be to capitalize and put a period at the end.

Done.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:377
&gt; &gt; +void StyledElement::addCSSColor(Attribute* attr, int id, const String&amp; attrValue)
&gt; 
&gt; I think these should have the names attribute and value or attributeValue rather than attr and attrValue.

Done.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:383
&gt; &gt; +    const String color = attrValue.stripWhiteSpace();
&gt; 
&gt; Not our WebKit style to use const in a case like this, although there is at least one person debating this style point on webkit-dev for the future.

I&apos;ve removed the const for now.

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:402
&gt; &gt; +    // If the string is a 3 or 6-digit hex color, use that color.
&gt; &gt; +    if (color[0] == &apos;#&apos; &amp;&amp; (color.length() == 4 || color.length() == 7) &amp;&amp; attr-&gt;decl()-&gt;setProperty(id, color, false))
&gt; &gt; +        return;
&gt; 
&gt; The comment says this runs if the string is a &quot;hex color&quot;, but there is nothing here that checks if the characters are hex digits. So either the comment or the code is wrong.

The test is implicit, in that if it conforms to the tests I perform and successfully parses as a color, it must have been a valid hex color.  Would it be better to explicitly test the 3/6 digits with isASCIIHexDigit()?

&gt; &gt; Source/WebCore/dom/StyledElement.cpp:404
&gt; &gt; +    // Otherwise, use the crazy legacy parsing rules.
&gt; 
&gt; Not sure this comment helps. If the right name for these rules are &quot;crazy legacy parsing rules&quot; then the function should just be named that so we don’t need the comment.

Done.  Changed the helper function&apos;s name to &quot;parseColorStringWithCrazyLegacyRules&quot;.  ^_^</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429215</commentid>
    <comment_count>28</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-28 16:03:02 -0700</bug_when>
    <thetext>Bump for r+, since I submitted two patches in quick succession and the &quot;review cancelled&quot; message from the first may have confused you into thinking I didn&apos;t need a review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430546</commentid>
    <comment_count>29</comment_count>
      <attachid>98502</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-30 10:59:29 -0700</bug_when>
    <thetext>Comment on attachment 98502
Patch

Looks nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430555</commentid>
    <comment_count>30</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-06-30 11:16:03 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #2)
&gt; &gt; This behavior matches Firefox and should match IE (don&apos;t have ability to quickly test).
&gt; 
&gt; We don&apos;t always test IE, but color parsing is quite fundamental. Maybe you could check with &lt;http://browsershots.org/&gt;?

I just tested in IE9, and we *mostly* match.  Other than the expected fails (due to them return &quot;transparent&quot; when we return &quot;rgba(0, 0, 0, 0)&quot;, they fail the following tests:

1. &quot;#f00&quot;
2. &quot;#555&quot;
3. &quot; red &quot;
4. &quot; #f00 &quot;
5. &quot; #ff0000 &quot;
6. &quot; ffffff &quot;
7. &quot;f&quot;*128 + &quot;0&quot;*6
8. same as previous, but with 64 non-BMP chars instead of &quot;f&quot;.
9. &quot;rgb(255, 0, 0)&quot;

1-2 fail because these cases aren&apos;t recognized as valid colors, and are passed down into their legacy codepath instead.  3-6 fail because they don&apos;t trim whitespace.  7-8 fail because they don&apos;t truncate to 128 chars before padding to a multiple of 3.  9 fails because they recognize the rgb() function as a CSS color and respect it (you&apos;re supposed to treat it like an arbitrary string and send it through legacy parsing).

They pass the rest of the testcases, though.  Firefox passes all of the testcases (besides the expected fails, for the same reason).  Apparently the spec algorithm was based directly off of what Firefox did to reverse-engineer IE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430577</commentid>
    <comment_count>31</comment_count>
      <attachid>98502</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-30 11:41:42 -0700</bug_when>
    <thetext>Comment on attachment 98502
Patch

Clearing flags on attachment: 98502

Committed r90139: &lt;http://trac.webkit.org/changeset/90139&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430578</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-30 11:41:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585834</commentid>
    <comment_count>33</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-03-22 16:11:13 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 98502 [details])
&gt; Clearing flags on attachment: 98502
&gt; 
&gt; Committed r90139: &lt;http://trac.webkit.org/changeset/90139&gt;

This change caused text that was formerly hidden using &lt;font color=&quot;transparent&quot;&gt; to become visible on the airprint.apple.com website.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590547</commentid>
    <comment_count>34</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2012-03-28 15:53:49 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #31)
&gt; &gt; (From update of attachment 98502 [details] [details])
&gt; &gt; Clearing flags on attachment: 98502
&gt; &gt; 
&gt; &gt; Committed r90139: &lt;http://trac.webkit.org/changeset/90139&gt;
&gt; 
&gt; This change caused text that was formerly hidden using &lt;font color=&quot;transparent&quot;&gt; to become visible on the airprint.apple.com website.

...

That&apos;s possibly the *worst* way I&apos;ve ever seen to hide text.  They deserve every bad thing that happened to them for committing that kind of sin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704905</commentid>
    <comment_count>35</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-08-26 16:11:10 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 98502 [details])
&gt; Clearing flags on attachment: 98502
&gt; 
&gt; Committed r90139: &lt;http://trac.webkit.org/changeset/90139&gt;

This change appears to have caused content that was using BGCOLOR=RGB(255,300,500) with a dark text color to become unreadable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704906</commentid>
    <comment_count>36</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-08-26 16:14:14 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 98502 [details])
&gt; Clearing flags on attachment: 98502
&gt; 
&gt; Committed r90139: &lt;http://trac.webkit.org/changeset/90139&gt;

This change caused some email messages authored in Microsoft Outlook for Mac to have unexpected colors.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97893</attachid>
            <date>2011-06-20 17:17:20 -0700</date>
            <delta_ts>2011-06-20 18:36:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63029-20110620171719.patch</filename>
            <type>text/plain</type>
            <size>13829</size>
            <attacher name="Tab Atkins">tabatkins</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg5MDcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1NzExMGNmNTllN2E2YmFjYjZkYTkx
MWVjNzY1MjBkOGFjZTFkNDFjLi41NjQ0MTBlYjJhMmJmZTczYTM2MGZmYWQ1MTI0ZTQ2MWE4YjY0
NTlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDYtMjAgIFRhYiBBdGtpbnMgIDxqYWNr
YWxtYWdlQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGaXggbGVnYWN5IGNvbG9yIGF0dHJpYnV0ZSBwYXJzaW5nIHRvIG1hdGNoIEhU
TUwgc3BlYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjMwMjkKKworICAgICAgICBUZXN0cyA8Ym9keSBiZ2NvbG9yPiBwYXJzaW5nLgorCisgICAgICAg
ICogZmFzdC9kb20vYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9zY3JpcHQtdGVzdHMvYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMu
anM6IEFkZGVkLgorCiAyMDExLTA2LTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFNraXAgZWRpdGluZy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0
Lmh0bWwgYWRkZWQgYnkgcjg4ODkwIG9uIE1hYyBXZWJLaXQyCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDI2OTQyOTBlNzQ5YWZhMGIwZThhMzc5ZWRlYjc4NTkyNTllODI4YwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3Jz
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI3IEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGxl
Z2FjeSBjb2xvciBhdHRyaWJ1dGVzIGFyZSBwYXJzZWQgcHJvcGVybHkuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nJztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYmEoMCwgMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0ndHJhbnNwYXJlbnQnO2dldENvbXB1
dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiYSgwLCAwLCAw
LCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSdyZWQnO2dldENvbXB1dGVkU3R5bGUo
ZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDI1NSwgMCwgMCknCitQQVNT
IGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nI2YwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5i
b2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMjU1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQu
Ym9keS5iZ0NvbG9yPScjZmYwMDAwJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJh
Y2tncm91bmRDb2xvcjsgaXMgJ3JnYigyNTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJn
Q29sb3I9J2YwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29s
b3I7IGlzICdyZ2IoMTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2ZmMDAw
MCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdy
Z2IoMjU1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjMDAwMDAwMDAnO2dl
dENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDAs
IDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2Zvbyc7Z2V0Q29tcHV0ZWRTdHls
ZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTUsIDAsIDApJworUEFT
UyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2NoZWVzZSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVu
dC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTkyLCAyMzgsIDE0KScKK1BBU1MgZG9j
dW1lbnQuYm9keS5iZ0NvbG9yPSdyZ2IoMjU1LCAwLCAwKSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1
bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMCwgODUsIDApJworUEFTUyBkb2N1
bWVudC5ib2R5LmJnQ29sb3I9JzU1MDAwMDAwMTE1NTAwMDAwMDExNTUwMDAwMDAxMSc7Z2V0Q29t
cHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTcsIDE3
LCAxNyknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTUwMDIwMDAxMTU1MDAwMDAwMTE1
NTAwMDAwMDExJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xv
cjsgaXMgJ3JnYigzMiwgMCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIyc7Z2V0
Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNSc7Z2V0Q29tcHV0ZWRTdHlsZShk
b2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoNSwgMCwgMCknCitQQVNTIGRv
Y3VtZW50LmJvZHkuYmdDb2xvcj0nNTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSku
YmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDUsIDUsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJn
Q29sb3I9JzU1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29s
b3I7IGlzICdyZ2IoNSwgNSwgNSknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTU1NSc7
Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2Io
ODUsIDg1LCAwKScKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5
LWNvbG9ycy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vYXR0cmlidXRlLWxlZ2FjeS1jb2xv
cnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44M2EzMmU2OWExYTNhY2MzYjU0YmUzZjM5NTMxNTUzZjRlNmEy
OGUyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vYXR0cmlidXRlLWxl
Z2FjeS1jb2xvcnMuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48
L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMv
YXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LXRlc3RzL2F0dHJpYnV0ZS1s
ZWdhY3ktY29sb3JzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LXRlc3RzL2F0dHJp
YnV0ZS1sZWdhY3ktY29sb3JzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3NmZmYjE4OTIyODViZjdmNWZlYzFi
YTRjOWI3NzA4MzcxMjU1NjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9zY3JpcHQtdGVzdHMvYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMuanMKQEAgLTAsMCArMSwyMiBA
QAorZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgbGVnYWN5IGNvbG9yIGF0dHJp
YnV0ZXMgYXJlIHBhcnNlZCBwcm9wZXJseS4iKTsKKworc2hvdWxkQmUoImRvY3VtZW50LmJvZHku
YmdDb2xvcj0nJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xv
cjsiLCAiJ3JnYmEoMCwgMCwgMCwgMCknIik7CitzaG91bGRCZSgiZG9jdW1lbnQuYm9keS5iZ0Nv
bG9yPSd0cmFuc3BhcmVudCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3Jv
dW5kQ29sb3I7IiwgIidyZ2JhKDAsIDAsIDAsIDApJyIpOworc2hvdWxkQmUoImRvY3VtZW50LmJv
ZHkuYmdDb2xvcj0ncmVkJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91
bmRDb2xvcjsiLCAiJ3JnYigyNTUsIDAsIDApJyIpOworc2hvdWxkQmUoImRvY3VtZW50LmJvZHku
YmdDb2xvcj0nI2YwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IiwgIidyZ2IoMjU1LCAwLCAwKSciKTsKK3Nob3VsZEJlKCJkb2N1bWVudC5ib2R5LmJn
Q29sb3I9JyNmZjAwMDAnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3Vu
ZENvbG9yOyIsICIncmdiKDI1NSwgMCwgMCknIik7CitzaG91bGRCZSgiZG9jdW1lbnQuYm9keS5i
Z0NvbG9yPSdmMDAnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENv
bG9yOyIsICIncmdiKDE1LCAwLCAwKSciKTsKK3Nob3VsZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29s
b3I9J2ZmMDAwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29s
b3I7IiwgIidyZ2IoMjU1LCAwLCAwKSciKTsKK3Nob3VsZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29s
b3I9JyMwMDAwMDAwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IiwgIidyZ2IoMCwgMCwgMCknIik7CitzaG91bGRCZSgiZG9jdW1lbnQuYm9keS5iZ0Nv
bG9yPSdmb28nO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9y
OyIsICIncmdiKDE1LCAwLCAwKSciKTsKK3Nob3VsZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29sb3I9
J2NoZWVzZSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7
IiwgIidyZ2IoMTkyLCAyMzgsIDE0KSciKTsKK3Nob3VsZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29s
b3I9J3JnYigyNTUsIDAsIDApJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tn
cm91bmRDb2xvcjsiLCAiJ3JnYigwLCA4NSwgMCknIik7CitzaG91bGRCZSgiZG9jdW1lbnQuYm9k
eS5iZ0NvbG9yPSc1NTAwMDAwMDExNTUwMDAwMDAxMTU1MDAwMDAwMTEnO2dldENvbXB1dGVkU3R5
bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyIsICIncmdiKDE3LCAxNywgMTcpJyIp
Oworc2hvdWxkQmUoImRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTUwMDIwMDAxMTU1MDAwMDAwMTE1
NTAwMDAwMDExJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xv
cjsiLCAiJ3JnYigzMiwgMCwgMCknIik7CitzaG91bGRCZSgiZG9jdW1lbnQuYm9keS5iZ0NvbG9y
PScjJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsiLCAi
J3JnYigwLCAwLCAwKSciKTsKK3Nob3VsZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzUnO2dl
dENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyIsICIncmdiKDUs
IDAsIDApJyIpOworc2hvdWxkQmUoImRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTUnO2dldENvbXB1
dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyIsICIncmdiKDUsIDUsIDAp
JyIpOworc2hvdWxkQmUoImRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTU1JztnZXRDb21wdXRlZFN0
eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsiLCAiJ3JnYig1LCA1LCA1KSciKTsK
K3Nob3VsZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzU1NTUnO2dldENvbXB1dGVkU3R5bGUo
ZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyIsICIncmdiKDg1LCA4NSwgMCknIik7CisK
K3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDI2OTlmZDBlNTg2YTVjZDlmNTFhNGM5MmJkYzNjMDNjNDVmMmE1YWYuLjI1
NjY2ZDU1NTRkZTE3NTc5NTdlY2ZlNWFiNWRkYmFhZmY5NjhjYjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxMS0wNi0yMCAgVGFiIEF0a2lucyAgPGphY2thbG1hZ2VAZ21haWwuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBs
ZWdhY3kgY29sb3IgYXR0cmlidXRlIHBhcnNpbmcgdG8gbWF0Y2ggSFRNTCBzcGVjCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzAyOQorCisgICAgICAg
IFJlbGV2YW50IHNwZWMgbGluazogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBz
L2N1cnJlbnQtd29yay9jb21wbGV0ZS9jb21tb24tbWljcm9zeW50YXhlcy5odG1sI3J1bGVzLWZv
ci1wYXJzaW5nLWEtbGVnYWN5LWNvbG9yLXZhbHVlCisgICAgICAgIEZpeCBsZWdhY3kgY29sb3Ig
YXR0cmlidXRlIHBhcnNpbmcgKDxib2R5IGJnY29sb3I+LCA8Zm9udCBjb2xvcj4sIGV0Yy4pIHRv
IG1hdGNoIHRoZSBIVE1MIHNwZWMgYW5kIG1vcmUgY2xvc2VseSBtYXRjaCBvdGhlciBicm93c2Vy
cy4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5odG1s
CisKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZWRFbGVtZW50OjphZGRDU1NDb2xvcik6CisKIDIwMTEtMDYtMTQgIERhdmlkIEtpbHplciAg
PGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICA8aHR0cDovL3dlYmtpdC5vcmcvYi82MjY3
Nz4gUGFydCAyLzI6IFJlbW92ZSBkdXBsaWNhdGUgaGVhZGVyIGVudHJpZXMgaW4gV2ViQ29yZSBw
cm9qZWN0IGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAppbmRleCBiZDk1NDNk
YTA4ODMyZmI0MDhiNmZjZjg4ZjU4MjM2ODY4NWNjNTM0Li41Y2IzN2M1NTIxMDI4ODNhZTgxOGZm
M2M4YzIxOGZiZTM0NDZhZDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVk
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUg
IkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVk
ZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDbGFzc0xpc3QuaCIKICNpbmNsdWRlICJDb250ZW50U2Vj
dXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJET01Ub2tlbkxpc3QuaCIKQEAgLTMxNyw3NiArMzE4
LDc2IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkQ1NTTGVuZ3RoKEF0dHJpYnV0ZSogYXR0ciwg
aW50IGlkLCBjb25zdCBTdHJpbmcgJnZhbHVlKQogICAgIGF0dHItPmRlY2woKS0+c2V0TGVuZ3Ro
UHJvcGVydHkoaWQsIHZhbHVlLCBmYWxzZSk7CiB9CiAKLS8qIGNvbG9yIHBhcnNpbmcgdGhhdCB0
cmllcyB0byBtYXRjaCBhcyBjbG9zZSBhcyBwb3NzaWJsZSBJRSA2LiAqLworLyogY29sb3IgcGFy
c2luZyB0aGF0IG1hdGNoZXMgSFRNTCdzICJydWxlcyBmb3IgcGFyc2luZyBhIGxlZ2FjeSBjb2xv
ciB2YWx1ZSIgKi8KIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkQ1NTQ29sb3IoQXR0cmlidXRlKiBh
dHRyLCBpbnQgaWQsIGNvbnN0IFN0cmluZyYgYykKIHsKLSAgICAvLyB0aGlzIGlzIHRoZSBvbmx5
IGNhc2Ugbm8gY29sb3IgZ2V0cyBhcHBsaWVkIGluIElFLgotICAgIGlmICghYy5sZW5ndGgoKSkK
KyAgICAvLyBUaGVzZSB0d28gY2FzZXMgZG9uJ3QgYXBwbHkgYW55IGNvbG9yCisgICAgaWYgKCFj
Lmxlbmd0aCgpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGMsICJ0cmFuc3BhcmVudCIpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoIWF0dHItPmRlY2woKSkKICAgICAgICAgY3JlYXRlTWFwcGVk
RGVjbChhdHRyKTsKICAgICAKLSAgICBpZiAoYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwg
YywgZmFsc2UpKQotICAgICAgICByZXR1cm47Ci0gICAgCiAgICAgU3RyaW5nIGNvbG9yID0gYzsK
LSAgICAvLyBub3Qgc29tZXRoaW5nIHRoYXQgZml0cyB0aGUgc3BlY3MuCi0gICAgCi0gICAgLy8g
d2UncmUgZW11bGF0aW5nIElFcyBjb2xvciBwYXJzZXIgaGVyZS4gSXQgbWFwcyB0cmFuc3BhcmVu
dCB0byBibGFjaywgb3RoZXJ3aXNlIGl0IHRyaWVzIHRvIGJ1aWxkIGEgcmdiIHZhbHVlCi0gICAg
Ly8gb3V0IG9mIGV2ZXJ5dGhpbmcgeW91IHB1dCBpbi4gVGhlIGFsZ29yaXRobSBpcyBleHBlcmlt
ZW50YWxseSBkZXRlcm1pbmVkLCBidXQgc2VlbXMgdG8gd29yayBmb3IgYWxsIHRlc3QgY2FzZXMg
SSBoYXZlLgotICAgIAotICAgIC8vIHRoZSBsZW5ndGggb2YgdGhlIGNvbG9yIHZhbHVlIGlzIHJv
dW5kZWQgdXAgdG8gdGhlIG5leHQKLSAgICAvLyBtdWx0aXBsZSBvZiAzLiBlYWNoIHBhcnQgb2Yg
dGhlIHJnYiB0cmlwbGUgdGhlbiBnZXRzIG9uZSB0aGlyZAotICAgIC8vIG9mIHRoZSBsZW5ndGgu
Ci0gICAgLy8KLSAgICAvLyBFYWNoIHRyaXBsZXQgaXMgcGFyc2VkIGJ5dGUgYnkgYnl0ZSwgbWFw
cGluZwotICAgIC8vIGVhY2ggbnVtYmVyIHRvIGEgaGV4IHZhbHVlICgwLTlhLWZBLUYgdG8gdGhl
aXIgdmFsdWVzCi0gICAgLy8gZXZlcnl0aGluZyBlbHNlIHRvIDApLgotICAgIC8vCi0gICAgLy8g
VGhlIGhpZ2hlc3Qgbm9uIHplcm8gZGlnaXQgaW4gYWxsIHRyaXBsZXRzIGlzIHJlbWVtYmVyZWQs
IGFuZAotICAgIC8vIHVzZWQgYXMgYSBub3JtYWxpemF0aW9uIHBvaW50IHRvIG5vcm1hbGl6ZSB0
byB2YWx1ZXMgYmV0d2VlbiAwCi0gICAgLy8gYW5kIDI1NS4KLSAgICAKLSAgICBpZiAoIWVxdWFs
SWdub3JpbmdDYXNlKGNvbG9yLCAidHJhbnNwYXJlbnQiKSkgeworICAgIGNvbG9yLnN0cmlwV2hp
dGVTcGFjZSgpOworICAgIGludCBjb2xvcnNbM10gPSB7IDAsIDAsIDAgfTsKKworICAgIC8vIENo
ZWNrIGlmIHRoZSBzdHJpbmcgaXMgYSBuYW1lZCBjb2xvcgorICAgIENvbG9yIGZvdW5kQ29sb3I7
CisgICAgZm91bmRDb2xvci5zZXROYW1lZENvbG9yKGNvbG9yKTsKKyAgICBpZiAoZm91bmRDb2xv
ci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgY29sb3JzWzBdID0gZm91bmRDb2xvci5yZWQoKTsKKyAg
ICAgICAgY29sb3JzWzFdID0gZm91bmRDb2xvci5ncmVlbigpOworICAgICAgICBjb2xvcnNbMl0g
PSBmb3VuZENvbG9yLmJsdWUoKTsKKyAgICB9IGVsc2UgaWYgKGNvbG9yWzBdID09ICcjJyAmJiBh
dHRyLT5kZWNsKCktPnNldFByb3BlcnR5KGlkLCBjb2xvciwgZmFsc2UpKSB7IAorICAgICAgICAv
LyBPdGhlcndpc2UsIGNoZWNrIGlmIGl0J3MgYSBoZXggY29sb3IKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0gZWxzZSB7IAorICAgICAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgY3JhenkgbGVnYWN5
IHBhcnNpbmcgcnVsZXMuCisgICAgICAgIC8vIEZpcnN0LCBmaXh1cCEKKyAgICAgICAgLy8gRklY
TUU6IFJlcGxhY2UgYWxsIG5vbi1CTVAgY2hhcmFjdGVycyBpbiBjb2xvciB3aXRoICIwMCIKKyAg
ICAgICAgaWYgKGNvbG9yLmxlbmd0aCgpID4gMTI4KQorICAgICAgICAgICAgY29sb3IudHJ1bmNh
dGUoMTI4KTsKICAgICAgICAgaWYgKGNvbG9yWzBdID09ICcjJykKLSAgICAgICAgICAgIGNvbG9y
LnJlbW92ZSgwLCAxKTsKLSAgICAgICAgaW50IGJhc2ljTGVuZ3RoID0gKGNvbG9yLmxlbmd0aCgp
ICsgMikgLyAzOwotICAgICAgICBpZiAoYmFzaWNMZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICAv
LyBJRSBpZ25vcmVzIGNvbG9ycyB3aXRoIHRocmVlIGRpZ2l0cyBvciBsZXNzCi0gICAgICAgICAg
ICBpbnQgY29sb3JzWzNdID0geyAwLCAwLCAwIH07Ci0gICAgICAgICAgICBpbnQgY29tcG9uZW50
ID0gMDsKLSAgICAgICAgICAgIGludCBwb3MgPSAwOwotICAgICAgICAgICAgaW50IG1heERpZ2l0
ID0gYmFzaWNMZW5ndGgtMTsKLSAgICAgICAgICAgIHdoaWxlIChjb21wb25lbnQgPCAzKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gc2VhcmNoIGZvcndhcmQgZm9yIGRpZ2l0cyBpbiB0aGUgc3RyaW5n
Ci0gICAgICAgICAgICAgICAgaW50IG51bURpZ2l0cyA9IDA7Ci0gICAgICAgICAgICAgICAgd2hp
bGUgKHBvcyA8IChpbnQpY29sb3IubGVuZ3RoKCkgJiYgbnVtRGlnaXRzIDwgYmFzaWNMZW5ndGgp
IHsKLSAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NvbXBvbmVudF0gPDw9IDQ7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChpc0FTQ0lJSGV4RGlnaXQoY29sb3JbcG9zXSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbG9yc1tjb21wb25lbnRdICs9IHRvQVNDSUlIZXhWYWx1ZShjb2xv
cltwb3NdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heERpZ2l0ID0gbWluKG1heERpZ2l0
LCBudW1EaWdpdHMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IG51bURpZ2l0cysrOwotICAgICAgICAgICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgd2hpbGUgKG51bURpZ2l0cysrIDwgYmFzaWNMZW5ndGgpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjb21wb25lbnRdIDw8PSA0OwotICAgICAgICAgICAg
ICAgIGNvbXBvbmVudCsrOworICAgICAgICAgICAgY29sb3IgPSBjb2xvci5zdWJzdHJpbmcoMSk7
CisgICAgICAgIGZvciAoc2l6ZV90IHBvcyA9IDA7IHBvcyA8IGNvbG9yLmxlbmd0aCgpOyBwb3Mr
KykgeworICAgICAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoY29sb3JbcG9zXSkpCisgICAg
ICAgICAgICAgICAgY29sb3IucmVwbGFjZShwb3MsIDEsICIwIik7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGNvbG9yLmxlbmd0aCgpICUgMyA9PSAyKQorICAgICAgICAgICAgY29sb3IgKz0gIjAi
OworICAgICAgICBpZiAoY29sb3IubGVuZ3RoKCkgJSAzID09IDEpCisgICAgICAgICAgICBjb2xv
ciArPSAiMDAiOworICAgICAgICBpZiAoIWNvbG9yLmxlbmd0aCgpKQorICAgICAgICAgICAgY29s
b3IgPSAiMDAwIjsKKworICAgICAgICAvLyBIYW5kbGUgMy1kaWdpdCBjYXNlIHNwZWNpYWxseQor
ICAgICAgICBpZiAoY29sb3IubGVuZ3RoKCkgPT0gMykgeworICAgICAgICAgICAgY29sb3JzWzBd
ID0gdG9BU0NJSUhleFZhbHVlKGNvbG9yWzBdKTsKKyAgICAgICAgICAgIGNvbG9yc1sxXSA9IHRv
QVNDSUlIZXhWYWx1ZShjb2xvclsxXSk7CisgICAgICAgICAgICBjb2xvcnNbMl0gPSB0b0FTQ0lJ
SGV4VmFsdWUoY29sb3JbMl0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gT3Ro
ZXJ3aXNlLCB3ZSBoYXZlIGF0IGxlYXN0IDYgZGlnaXRzCisgICAgICAgICAgICAvLyBTcGxpdCB0
aGUgZGlnaXRzIGludG8gdGhyZWUgY29tcG9uZW50cywgdGhlbiBzZWFyY2ggdGhlIGxhc3QgOCBk
aWdpdHMgb2YgZWFjaCBjb21wb25lbnQKKyAgICAgICAgICAgIGludCBjb21wb25lbnRMZW5ndGgg
PSBjb2xvci5sZW5ndGgoKSAvIDM7CisgICAgICAgICAgICBpbnQgcmVkSW5kZXggPSBtYXgoMCwg
Y29tcG9uZW50TGVuZ3RoIC0gOCk7CisgICAgICAgICAgICBpbnQgZ3JlZW5JbmRleCA9IHJlZElu
ZGV4ICsgY29tcG9uZW50TGVuZ3RoOworICAgICAgICAgICAgaW50IGJsdWVJbmRleCA9IGdyZWVu
SW5kZXggKyBjb21wb25lbnRMZW5ndGg7CisgICAgICAgICAgICAvLyBTa2lwIGRpZ2l0cyB1bnRp
bCBvbmUgb2YgdGhlbSBpcyBub24temVybywgb3IgeW91J3ZlIG9ubHkgZ290IHR3byBsZWZ0IGlu
IHRoZSBjb21wb25lbnQKKyAgICAgICAgICAgIHdoaWxlIChjb2xvcltyZWRJbmRleF0gPT0gJzAn
ICYmIGNvbG9yW2dyZWVuSW5kZXhdID09ICcwJyAmJiBjb2xvcltibHVlSW5kZXhdID09ICcwJyAm
JiAoY29tcG9uZW50TGVuZ3RoIC0gcmVkSW5kZXgpID4gMikgeworICAgICAgICAgICAgICAgIHJl
ZEluZGV4Kys7CisgICAgICAgICAgICAgICAgZ3JlZW5JbmRleCsrOworICAgICAgICAgICAgICAg
IGJsdWVJbmRleCsrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbWF4RGlnaXQgPSBiYXNp
Y0xlbmd0aCAtIG1heERpZ2l0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBub3JtYWxp
emUgdG8gMDAtZmYuIFRoZSBoaWdoZXN0IGZpbGxlZCBkaWdpdCBjb3VudHMsIG1pbmltdW0gaXMg
MiBkaWdpdHMKLSAgICAgICAgICAgIG1heERpZ2l0IC09IDI7Ci0gICAgICAgICAgICBjb2xvcnNb
MF0gPj49IDQgKiBtYXhEaWdpdDsKLSAgICAgICAgICAgIGNvbG9yc1sxXSA+Pj0gNCAqIG1heERp
Z2l0OwotICAgICAgICAgICAgY29sb3JzWzJdID4+PSA0ICogbWF4RGlnaXQ7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNvbG9yID0gU3RyaW5nOjpmb3JtYXQoIiMlMDJ4JTAyeCUwMngiLCBj
b2xvcnNbMF0sIGNvbG9yc1sxXSwgY29sb3JzWzJdKTsKLSAgICAgICAgICAgIGlmIChhdHRyLT5k
ZWNsKCktPnNldFByb3BlcnR5KGlkLCBjb2xvciwgZmFsc2UpKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGNvbG9yc1swXSA9IHRvQVNDSUlIZXhWYWx1ZShjb2xvcltyZWRJ
bmRleF0pICogMTYgKyB0b0FTQ0lJSGV4VmFsdWUoY29sb3JbcmVkSW5kZXgrMV0pOworICAgICAg
ICAgICAgY29sb3JzWzFdID0gdG9BU0NJSUhleFZhbHVlKGNvbG9yW2dyZWVuSW5kZXhdKSAqIDE2
ICsgdG9BU0NJSUhleFZhbHVlKGNvbG9yW2dyZWVuSW5kZXgrMV0pOworICAgICAgICAgICAgY29s
b3JzWzJdID0gdG9BU0NJSUhleFZhbHVlKGNvbG9yW2JsdWVJbmRleF0pICogMTYgKyB0b0FTQ0lJ
SGV4VmFsdWUoY29sb3JbYmx1ZUluZGV4KzFdKTsKICAgICAgICAgfQogICAgIH0KKworICAgIGNv
bG9yID0gU3RyaW5nOjpmb3JtYXQoIiMlMDJ4JTAyeCUwMngiLCBjb2xvcnNbMF0sIGNvbG9yc1sx
XSwgY29sb3JzWzJdKTsKKyAgICBpZiAoYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwgY29s
b3IsIGZhbHNlKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGF0dHItPmRlY2woKS0+c2V0UHJvcGVy
dHkoaWQsIENTU1ZhbHVlQmxhY2ssIGZhbHNlKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97906</attachid>
            <date>2011-06-20 18:36:49 -0700</date>
            <delta_ts>2011-06-20 18:52:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63029-20110620183648.patch</filename>
            <type>text/plain</type>
            <size>17350</size>
            <attacher name="Tab Atkins">tabatkins</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg5MDcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1NzExMGNmNTllN2E2YmFjYjZkYTkx
MWVjNzY1MjBkOGFjZTFkNDFjLi41NjQ0MTBlYjJhMmJmZTczYTM2MGZmYWQ1MTI0ZTQ2MWE4YjY0
NTlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDYtMjAgIFRhYiBBdGtpbnMgIDxqYWNr
YWxtYWdlQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGaXggbGVnYWN5IGNvbG9yIGF0dHJpYnV0ZSBwYXJzaW5nIHRvIG1hdGNoIEhU
TUwgc3BlYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjMwMjkKKworICAgICAgICBUZXN0cyA8Ym9keSBiZ2NvbG9yPiBwYXJzaW5nLgorCisgICAgICAg
ICogZmFzdC9kb20vYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9zY3JpcHQtdGVzdHMvYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMu
anM6IEFkZGVkLgorCiAyMDExLTA2LTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFNraXAgZWRpdGluZy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0
Lmh0bWwgYWRkZWQgYnkgcjg4ODkwIG9uIE1hYyBXZWJLaXQyCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uN2YyMWE0MzYzZmExOWMxOTlhZmMwNjE0Mzk5Y2UzM2Q3MjAyN2I4NgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3Jz
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQwIEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGxl
Z2FjeSBjb2xvciBhdHRyaWJ1dGVzIGFyZSBwYXJzZWQgcHJvcGVybHkuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nJztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYmEoMCwgMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0ndHJhbnNwYXJlbnQnO2dldENvbXB1
dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiYSgwLCAwLCAw
LCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSdyZWQnO2dldENvbXB1dGVkU3R5bGUo
ZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDI1NSwgMCwgMCknCitQQVNT
IGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nI2YwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5i
b2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMjU1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQu
Ym9keS5iZ0NvbG9yPScjZmYwMDAwJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJh
Y2tncm91bmRDb2xvcjsgaXMgJ3JnYigyNTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJn
Q29sb3I9J2YwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29s
b3I7IGlzICdyZ2IoMTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2ZmMDAw
MCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdy
Z2IoMjU1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjMDAwMDAwMDAnO2dl
dENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDAs
IDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2Zvbyc7Z2V0Q29tcHV0ZWRTdHls
ZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTUsIDAsIDApJworUEFT
UyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2NoZWVzZSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVu
dC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTkyLCAyMzgsIDE0KScKK1BBU1MgZG9j
dW1lbnQuYm9keS5iZ0NvbG9yPSdyZ2IoMjU1LCAwLCAwKSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1
bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMCwgODUsIDApJworUEFTUyBkb2N1
bWVudC5ib2R5LmJnQ29sb3I9JzU1MDAwMDAwMTE1NTAwMDAwMDExNTUwMDAwMDAxMSc7Z2V0Q29t
cHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTcsIDE3
LCAxNyknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTUwMDIwMDAxMTU1MDAwMDAwMTE1
NTAwMDAwMDExJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xv
cjsgaXMgJ3JnYigzMiwgMCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIyc7Z2V0
Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzUnO2dldENvbXB1dGVkU3R5bGUo
ZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDUsIDAsIDApJworUEFTUyBk
b2N1bWVudC5ib2R5LmJnQ29sb3I9JyM1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5
KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoNSwgNSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHku
YmdDb2xvcj0nIzU1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IGlzICdyZ2IoODUsIDg1LCA4NSknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0n
IzU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBp
cyAncmdiKDg1LCA4NSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzU1NTU1Jztn
ZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4
NSwgODUsIDgwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNTU1NTU1JztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUs
IDg1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNTU1NTU1NSc7Z2V0Q29tcHV0ZWRT
dHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoODUsIDg1LCA4MCkn
CitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzU1NTU1NTU1JztnZXRDb21wdXRlZFN0eWxl
KGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDg1KScKK1BB
U1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJv
ZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9k
eS5iZ0NvbG9yPSc1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IGlzICdyZ2IoNSwgNSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTU1
JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3Jn
Yig1LCA1LCA1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTU1JztnZXRDb21wdXRl
ZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDAp
JworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzU1NTU1JztnZXRDb21wdXRlZFN0eWxlKGRv
Y3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDgwKScKK1BBU1Mg
ZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQu
Ym9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4NSwgODUpJworUEFTUyBkb2N1bWVu
dC5ib2R5LmJnQ29sb3I9JzU1NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSku
YmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4NSwgODApJworUEFTUyBkb2N1bWVudC5ib2R5
LmJnQ29sb3I9JzU1NTU1NTU1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tn
cm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDg1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0Nv
bG9yPScgZmZmZmZmICc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IGlzICdyZ2IoMjU1LCAyNTUsIDI1NSknCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2F0
dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNhMzJlNjlhMWEzYWNjM2I1
NGJlM2YzOTUzMTU1M2Y0ZTZhMjhlMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxw
IGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Njcmlw
dC10ZXN0cy9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NjcmlwdC10ZXN0cy9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYWQ3
ZTI1MzNjNmI1ZWU3YjBmNGVjZjE3ZWQwZWFhZjJmNTdiZDI5Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LXRlc3RzL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3Jz
LmpzCkBAIC0wLDAgKzEsMzYgQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyB0aGF0
IGxlZ2FjeSBjb2xvciBhdHRyaWJ1dGVzIGFyZSBwYXJzZWQgcHJvcGVybHkuIik7CisKKworc2hv
dWxkQmUoImRvY3VtZW50LmJvZHkuYmdDb2xvcj0nJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50
LmJvZHkpLmJhY2tncm91bmRDb2xvcjsiLCAiJ3JnYmEoMCwgMCwgMCwgMCknIik7CitzaG91bGRC
ZSgiZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSd0cmFuc3BhcmVudCc7Z2V0Q29tcHV0ZWRTdHlsZShk
b2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IiwgIidyZ2JhKDAsIDAsIDAsIDApJyIpOwor
c2hvdWxkQmUoImRvY3VtZW50LmJvZHkuYmdDb2xvcj0ncmVkJztnZXRDb21wdXRlZFN0eWxlKGRv
Y3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsiLCAiJ3JnYigyNTUsIDAsIDApJyIpOworc2hv
dWxkQmUoImRvY3VtZW50LmJvZHkuYmdDb2xvcj0nI2YwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1
bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IiwgIidyZ2IoMjU1LCAwLCAwKSciKTsKK3Nob3Vs
ZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29sb3I9JyNmZjAwMDAnO2dldENvbXB1dGVkU3R5bGUoZG9j
dW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyIsICIncmdiKDI1NSwgMCwgMCknIik7CitzaG91
bGRCZSgiZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSdmMDAnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1l
bnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyIsICIncmdiKDE1LCAwLCAwKSciKTsKK3Nob3VsZEJl
KCJkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2ZmMDAwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVu
dC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IiwgIidyZ2IoMjU1LCAwLCAwKSciKTsKK3Nob3VsZEJl
KCJkb2N1bWVudC5ib2R5LmJnQ29sb3I9JyMwMDAwMDAwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1
bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IiwgIidyZ2IoMCwgMCwgMCknIik7CitzaG91bGRC
ZSgiZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSdmb28nO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQu
Ym9keSkuYmFja2dyb3VuZENvbG9yOyIsICIncmdiKDE1LCAwLCAwKSciKTsKK3Nob3VsZEJlKCJk
b2N1bWVudC5ib2R5LmJnQ29sb3I9J2NoZWVzZSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5i
b2R5KS5iYWNrZ3JvdW5kQ29sb3I7IiwgIidyZ2IoMTkyLCAyMzgsIDE0KSciKTsKK3Nob3VsZEJl
KCJkb2N1bWVudC5ib2R5LmJnQ29sb3I9J3JnYigyNTUsIDAsIDApJztnZXRDb21wdXRlZFN0eWxl
KGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsiLCAiJ3JnYigwLCA4NSwgMCknIik7Citz
aG91bGRCZSgiZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTAwMDAwMDExNTUwMDAwMDAxMTU1MDAw
MDAwMTEnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyIs
ICIncmdiKDE3LCAxNywgMTcpJyIpOworc2hvdWxkQmUoImRvY3VtZW50LmJvZHkuYmdDb2xvcj0n
NTUwMDIwMDAxMTU1MDAwMDAwMTE1NTAwMDAwMDExJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50
LmJvZHkpLmJhY2tncm91bmRDb2xvcjsiLCAiJ3JnYigzMiwgMCwgMCknIik7CitzaG91bGRCZSgi
ZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkp
LmJhY2tncm91bmRDb2xvcjsiLCAiJ3JnYigwLCAwLCAwKSciKTsKK3Nob3VsZEJlKCJkb2N1bWVu
dC5ib2R5LmJnQ29sb3I9JyM1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tn
cm91bmRDb2xvcjsiLCAiJ3JnYig1LCAwLCAwKSciKTsKK3Nob3VsZEJlKCJkb2N1bWVudC5ib2R5
LmJnQ29sb3I9JyM1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IiwgIidyZ2IoNSwgNSwgMCknIik7CitzaG91bGRCZSgiZG9jdW1lbnQuYm9keS5iZ0Nv
bG9yPScjNTU1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xv
cjsiLCAiJ3JnYig4NSwgODUsIDg1KSciKTsKK3Nob3VsZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29s
b3I9JyM1NTU1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xv
cjsiLCAiJ3JnYig4NSwgODUsIDApJyIpOworc2hvdWxkQmUoImRvY3VtZW50LmJvZHkuYmdDb2xv
cj0nIzU1NTU1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xv
cjsiLCAiJ3JnYig4NSwgODUsIDgwKSciKTsKK3Nob3VsZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29s
b3I9JyM1NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENv
bG9yOyIsICIncmdiKDg1LCA4NSwgODUpJyIpOworc2hvdWxkQmUoImRvY3VtZW50LmJvZHkuYmdD
b2xvcj0nIzU1NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3Vu
ZENvbG9yOyIsICIncmdiKDg1LCA4NSwgODApJyIpOworc2hvdWxkQmUoImRvY3VtZW50LmJvZHku
YmdDb2xvcj0nIzU1NTU1NTU1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tn
cm91bmRDb2xvcjsiLCAiJ3JnYig4NSwgODUsIDg1KSciKTsKK3Nob3VsZEJlKCJkb2N1bWVudC5i
b2R5LmJnQ29sb3I9JzUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3Vu
ZENvbG9yOyIsICIncmdiKDUsIDAsIDApJyIpOworc2hvdWxkQmUoImRvY3VtZW50LmJvZHkuYmdD
b2xvcj0nNTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9y
OyIsICIncmdiKDUsIDUsIDApJyIpOworc2hvdWxkQmUoImRvY3VtZW50LmJvZHkuYmdDb2xvcj0n
NTU1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsiLCAi
J3JnYig1LCA1LCA1KSciKTsKK3Nob3VsZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzU1NTUn
O2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyIsICIncmdi
KDg1LCA4NSwgMCknIik7CitzaG91bGRCZSgiZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTU1NSc7
Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IiwgIidyZ2Io
ODUsIDg1LCA4MCknIik7CitzaG91bGRCZSgiZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTU1NTUn
O2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyIsICIncmdi
KDg1LCA4NSwgODUpJyIpOworc2hvdWxkQmUoImRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTU1NTU1
NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IiwgIidy
Z2IoODUsIDg1LCA4MCknIik7CitzaG91bGRCZSgiZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTU1
NTU1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7Iiwg
IidyZ2IoODUsIDg1LCA4NSknIik7CitzaG91bGRCZSgiZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScg
ZmZmZmZmICc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7
IiwgIidyZ2IoMjU1LCAyNTUsIDI1NSknIik7CisKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDI2OTlmZDBlNTg2YTVj
ZDlmNTFhNGM5MmJkYzNjMDNjNDVmMmE1YWYuLjI1NjY2ZDU1NTRkZTE3NTc5NTdlY2ZlNWFiNWRk
YmFhZmY5NjhjYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wNi0yMCAgVGFi
IEF0a2lucyAgPGphY2thbG1hZ2VAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBsZWdhY3kgY29sb3IgYXR0cmlidXRlIHBhcnNp
bmcgdG8gbWF0Y2ggSFRNTCBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MzAyOQorCisgICAgICAgIFJlbGV2YW50IHNwZWMgbGluazogaHR0cDov
L3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9jb21wbGV0ZS9jb21t
b24tbWljcm9zeW50YXhlcy5odG1sI3J1bGVzLWZvci1wYXJzaW5nLWEtbGVnYWN5LWNvbG9yLXZh
bHVlCisgICAgICAgIEZpeCBsZWdhY3kgY29sb3IgYXR0cmlidXRlIHBhcnNpbmcgKDxib2R5IGJn
Y29sb3I+LCA8Zm9udCBjb2xvcj4sIGV0Yy4pIHRvIG1hdGNoIHRoZSBIVE1MIHNwZWMgYW5kIG1v
cmUgY2xvc2VseSBtYXRjaCBvdGhlciBicm93c2Vycy4KKworICAgICAgICBUZXN0OiBmYXN0L2Rv
bS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5odG1sCisKKyAgICAgICAgKiBkb20vU3R5bGVkRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjphZGRDU1NDb2xvcik6
CisKIDIwMTEtMDYtMTQgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICA8aHR0cDovL3dlYmtpdC5vcmcvYi82MjY3Nz4gUGFydCAyLzI6IFJlbW92ZSBkdXBsaWNh
dGUgaGVhZGVyIGVudHJpZXMgaW4gV2ViQ29yZSBwcm9qZWN0IGZpbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
dHlsZWRFbGVtZW50LmNwcAppbmRleCBiZDk1NDNkYTA4ODMyZmI0MDhiNmZjZjg4ZjU4MjM2ODY4
NWNjNTM0Li44MzI0NmM3MTlmMTAyNTA0NzRmYTQzMGQwZDc5N2M5NzgzNTdkNWY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAi
Q1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRl
ICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDbGFz
c0xpc3QuaCIKICNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJE
T01Ub2tlbkxpc3QuaCIKQEAgLTMxNyw3NyArMzE4LDgyIEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6
YWRkQ1NTTGVuZ3RoKEF0dHJpYnV0ZSogYXR0ciwgaW50IGlkLCBjb25zdCBTdHJpbmcgJnZhbHVl
KQogICAgIGF0dHItPmRlY2woKS0+c2V0TGVuZ3RoUHJvcGVydHkoaWQsIHZhbHVlLCBmYWxzZSk7
CiB9CiAKLS8qIGNvbG9yIHBhcnNpbmcgdGhhdCB0cmllcyB0byBtYXRjaCBhcyBjbG9zZSBhcyBw
b3NzaWJsZSBJRSA2LiAqLwotdm9pZCBTdHlsZWRFbGVtZW50OjphZGRDU1NDb2xvcihBdHRyaWJ1
dGUqIGF0dHIsIGludCBpZCwgY29uc3QgU3RyaW5nJiBjKQorLy8gY29sb3IgcGFyc2luZyB0aGF0
IG1hdGNoZXMgSFRNTCdzICJydWxlcyBmb3IgcGFyc2luZyBhIGxlZ2FjeSBjb2xvciB2YWx1ZSIK
K3ZvaWQgU3R5bGVkRWxlbWVudDo6YWRkQ1NTQ29sb3IoQXR0cmlidXRlKiBhdHRyLCBpbnQgaWQs
IGNvbnN0IFN0cmluZyYgYXR0clZhbHVlKQogewotICAgIC8vIHRoaXMgaXMgdGhlIG9ubHkgY2Fz
ZSBubyBjb2xvciBnZXRzIGFwcGxpZWQgaW4gSUUuCi0gICAgaWYgKCFjLmxlbmd0aCgpKQorICAg
IC8vIFRoZXNlIHR3byBjYXNlcyBkb24ndCBhcHBseSBhbnkgY29sb3IuCisgICAgaWYgKCFhdHRy
VmFsdWUubGVuZ3RoKCkgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoYXR0clZhbHVlLCAidHJhbnNwYXJl
bnQiKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFhdHRyLT5kZWNsKCkpCiAgICAgICAg
IGNyZWF0ZU1hcHBlZERlY2woYXR0cik7CiAgICAgCi0gICAgaWYgKGF0dHItPmRlY2woKS0+c2V0
UHJvcGVydHkoaWQsIGMsIGZhbHNlKSkKKyAgICBTdHJpbmcgY29sb3IgPSBhdHRyVmFsdWUuc3Ry
aXBXaGl0ZVNwYWNlKCk7CisgICAgaW50IGNvbG9yc1szXSA9IHsgMCwgMCwgMCB9OworCisgICAg
Ly8gQ2hlY2sgaWYgdGhlIHN0cmluZyBpcyBhIG5hbWVkIGNvbG9yLgorICAgIENvbG9yIGZvdW5k
Q29sb3I7CisgICAgZm91bmRDb2xvci5zZXROYW1lZENvbG9yKGNvbG9yKTsKKyAgICBpZiAoZm91
bmRDb2xvci5pc1ZhbGlkKCkpIHsKKyAgICAgICAgY29sb3JzWzBdID0gZm91bmRDb2xvci5yZWQo
KTsKKyAgICAgICAgY29sb3JzWzFdID0gZm91bmRDb2xvci5ncmVlbigpOworICAgICAgICBjb2xv
cnNbMl0gPSBmb3VuZENvbG9yLmJsdWUoKTsKKyAgICB9IGVsc2UgaWYgKGNvbG9yWzBdID09ICcj
JyAmJiBjb2xvci5sZW5ndGgoKSA9PSA0ICYmIGF0dHItPmRlY2woKS0+c2V0UHJvcGVydHkoaWQs
IGNvbG9yLCBmYWxzZSkpIHsgCisgICAgICAgIC8vIE90aGVyd2lzZSwgY2hlY2sgaWYgaXQncyBh
IDMtZGlnaXQgaGV4IGNvbG9yLgogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgU3RyaW5nIGNv
bG9yID0gYzsKLSAgICAvLyBub3Qgc29tZXRoaW5nIHRoYXQgZml0cyB0aGUgc3BlY3MuCi0gICAg
Ci0gICAgLy8gd2UncmUgZW11bGF0aW5nIElFcyBjb2xvciBwYXJzZXIgaGVyZS4gSXQgbWFwcyB0
cmFuc3BhcmVudCB0byBibGFjaywgb3RoZXJ3aXNlIGl0IHRyaWVzIHRvIGJ1aWxkIGEgcmdiIHZh
bHVlCi0gICAgLy8gb3V0IG9mIGV2ZXJ5dGhpbmcgeW91IHB1dCBpbi4gVGhlIGFsZ29yaXRobSBp
cyBleHBlcmltZW50YWxseSBkZXRlcm1pbmVkLCBidXQgc2VlbXMgdG8gd29yayBmb3IgYWxsIHRl
c3QgY2FzZXMgSSBoYXZlLgotICAgIAotICAgIC8vIHRoZSBsZW5ndGggb2YgdGhlIGNvbG9yIHZh
bHVlIGlzIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQKLSAgICAvLyBtdWx0aXBsZSBvZiAzLiBlYWNo
IHBhcnQgb2YgdGhlIHJnYiB0cmlwbGUgdGhlbiBnZXRzIG9uZSB0aGlyZAotICAgIC8vIG9mIHRo
ZSBsZW5ndGguCi0gICAgLy8KLSAgICAvLyBFYWNoIHRyaXBsZXQgaXMgcGFyc2VkIGJ5dGUgYnkg
Ynl0ZSwgbWFwcGluZwotICAgIC8vIGVhY2ggbnVtYmVyIHRvIGEgaGV4IHZhbHVlICgwLTlhLWZB
LUYgdG8gdGhlaXIgdmFsdWVzCi0gICAgLy8gZXZlcnl0aGluZyBlbHNlIHRvIDApLgotICAgIC8v
Ci0gICAgLy8gVGhlIGhpZ2hlc3Qgbm9uIHplcm8gZGlnaXQgaW4gYWxsIHRyaXBsZXRzIGlzIHJl
bWVtYmVyZWQsIGFuZAotICAgIC8vIHVzZWQgYXMgYSBub3JtYWxpemF0aW9uIHBvaW50IHRvIG5v
cm1hbGl6ZSB0byB2YWx1ZXMgYmV0d2VlbiAwCi0gICAgLy8gYW5kIDI1NS4KLSAgICAKLSAgICBp
ZiAoIWVxdWFsSWdub3JpbmdDYXNlKGNvbG9yLCAidHJhbnNwYXJlbnQiKSkgeworICAgIH0gZWxz
ZSB7IAorICAgICAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgY3JhenkgbGVnYWN5IHBhcnNpbmcg
cnVsZXMuCisgICAgICAgIC8vIEZpcnN0LCBmaXh1cCEKKyAgICAgICAgLy8gRklYTUU6IFJlcGxh
Y2UgYWxsIG5vbi1CTVAgY2hhcmFjdGVycyBpbiBjb2xvciB3aXRoICIwMCIuCisgICAgICAgIGlm
IChjb2xvci5sZW5ndGgoKSA+IDEyOCkKKyAgICAgICAgICAgIGNvbG9yLnRydW5jYXRlKDEyOCk7
CiAgICAgICAgIGlmIChjb2xvclswXSA9PSAnIycpCi0gICAgICAgICAgICBjb2xvci5yZW1vdmUo
MCwgMSk7Ci0gICAgICAgIGludCBiYXNpY0xlbmd0aCA9IChjb2xvci5sZW5ndGgoKSArIDIpIC8g
MzsKLSAgICAgICAgaWYgKGJhc2ljTGVuZ3RoID4gMSkgewotICAgICAgICAgICAgLy8gSUUgaWdu
b3JlcyBjb2xvcnMgd2l0aCB0aHJlZSBkaWdpdHMgb3IgbGVzcwotICAgICAgICAgICAgaW50IGNv
bG9yc1szXSA9IHsgMCwgMCwgMCB9OwotICAgICAgICAgICAgaW50IGNvbXBvbmVudCA9IDA7Ci0g
ICAgICAgICAgICBpbnQgcG9zID0gMDsKLSAgICAgICAgICAgIGludCBtYXhEaWdpdCA9IGJhc2lj
TGVuZ3RoLTE7Ci0gICAgICAgICAgICB3aGlsZSAoY29tcG9uZW50IDwgMykgewotICAgICAgICAg
ICAgICAgIC8vIHNlYXJjaCBmb3J3YXJkIGZvciBkaWdpdHMgaW4gdGhlIHN0cmluZwotICAgICAg
ICAgICAgICAgIGludCBudW1EaWdpdHMgPSAwOwotICAgICAgICAgICAgICAgIHdoaWxlIChwb3Mg
PCAoaW50KWNvbG9yLmxlbmd0aCgpICYmIG51bURpZ2l0cyA8IGJhc2ljTGVuZ3RoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbG9yc1tjb21wb25lbnRdIDw8PSA0OwotICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNBU0NJSUhleERpZ2l0KGNvbG9yW3Bvc10pKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb2xvcnNbY29tcG9uZW50XSArPSB0b0FTQ0lJSGV4VmFsdWUoY29sb3JbcG9zXSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXhEaWdpdCA9IG1pbihtYXhEaWdpdCwgbnVtRGln
aXRzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBudW1EaWdp
dHMrKzsKLSAgICAgICAgICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHdoaWxlIChudW1EaWdpdHMrKyA8IGJhc2ljTGVuZ3RoKQotICAgICAgICAg
ICAgICAgICAgICBjb2xvcnNbY29tcG9uZW50XSA8PD0gNDsKLSAgICAgICAgICAgICAgICBjb21w
b25lbnQrKzsKKyAgICAgICAgICAgIGNvbG9yID0gY29sb3Iuc3Vic3RyaW5nKDEpOworICAgICAg
ICBmb3IgKHNpemVfdCBwb3MgPSAwOyBwb3MgPCBjb2xvci5sZW5ndGgoKTsgcG9zKyspIHsKKyAg
ICAgICAgICAgIGlmICghaXNBU0NJSUhleERpZ2l0KGNvbG9yW3Bvc10pKQorICAgICAgICAgICAg
ICAgIGNvbG9yLnJlcGxhY2UocG9zLCAxLCAiMCIpOworICAgICAgICB9CisgICAgICAgIGlmIChj
b2xvci5sZW5ndGgoKSAlIDMgPT0gMikKKyAgICAgICAgICAgIGNvbG9yICs9ICIwIjsKKyAgICAg
ICAgZWxzZSBpZiAoY29sb3IubGVuZ3RoKCkgJSAzID09IDEpCisgICAgICAgICAgICBjb2xvciAr
PSAiMDAiOworICAgICAgICBlbHNlIGlmICghY29sb3IubGVuZ3RoKCkpCisgICAgICAgICAgICBj
b2xvciA9ICIwMDAiOworCisgICAgICAgIC8vIEhhbmRsZSAzLWRpZ2l0IGNhc2Ugc3BlY2lhbGx5
LgorICAgICAgICBpZiAoY29sb3IubGVuZ3RoKCkgPT0gMykgeworICAgICAgICAgICAgY29sb3Jz
WzBdID0gdG9BU0NJSUhleFZhbHVlKGNvbG9yWzBdKTsKKyAgICAgICAgICAgIGNvbG9yc1sxXSA9
IHRvQVNDSUlIZXhWYWx1ZShjb2xvclsxXSk7CisgICAgICAgICAgICBjb2xvcnNbMl0gPSB0b0FT
Q0lJSGV4VmFsdWUoY29sb3JbMl0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
T3RoZXJ3aXNlLCB3ZSBoYXZlIGF0IGxlYXN0IDYgZGlnaXRzLgorICAgICAgICAgICAgLy8gU3Bs
aXQgdGhlIGRpZ2l0cyBpbnRvIHRocmVlIGNvbXBvbmVudHMsIHRoZW4gc2VhcmNoIHRoZSBsYXN0
IDggZGlnaXRzIG9mIGVhY2ggY29tcG9uZW50LgorICAgICAgICAgICAgc2l6ZV90IGNvbXBvbmVu
dExlbmd0aCA9IGNvbG9yLmxlbmd0aCgpIC8gMzsKKyAgICAgICAgICAgIGludCBjb21wb25lbnRT
ZWFyY2hXaW5kb3dTaXplID0gbWluKGNvbXBvbmVudExlbmd0aCwgc3RhdGljX2Nhc3Q8c2l6ZV90
Pig4KSk7CisgICAgICAgICAgICBzaXplX3QgcmVkSW5kZXggPSBjb21wb25lbnRMZW5ndGggLSBj
b21wb25lbnRTZWFyY2hXaW5kb3dTaXplOworICAgICAgICAgICAgc2l6ZV90IGdyZWVuSW5kZXgg
PSBjb21wb25lbnRMZW5ndGggKiAyIC0gY29tcG9uZW50U2VhcmNoV2luZG93U2l6ZTsKKyAgICAg
ICAgICAgIHNpemVfdCBibHVlSW5kZXggPSBjb2xvci5sZW5ndGgoKSAtIGNvbXBvbmVudFNlYXJj
aFdpbmRvd1NpemU7CisgICAgICAgICAgICAvLyBTa2lwIGRpZ2l0cyB1bnRpbCBvbmUgb2YgdGhl
bSBpcyBub24temVybywgb3IgeW91J3ZlIG9ubHkgZ290IHR3byBsZWZ0IGluIHRoZSBjb21wb25l
bnQuCisgICAgICAgICAgICB3aGlsZSAoY29sb3JbcmVkSW5kZXhdID09ICcwJyAmJiBjb2xvcltn
cmVlbkluZGV4XSA9PSAnMCcgJiYgY29sb3JbYmx1ZUluZGV4XSA9PSAnMCcgJiYgKGNvbXBvbmVu
dExlbmd0aCAtIHJlZEluZGV4KSA+IDIpIHsKKyAgICAgICAgICAgICAgICByZWRJbmRleCsrOwor
ICAgICAgICAgICAgICAgIGdyZWVuSW5kZXgrKzsKKyAgICAgICAgICAgICAgICBibHVlSW5kZXgr
KzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1heERpZ2l0ID0gYmFzaWNMZW5ndGggLSBt
YXhEaWdpdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gbm9ybWFsaXplIHRvIDAwLWZm
LiBUaGUgaGlnaGVzdCBmaWxsZWQgZGlnaXQgY291bnRzLCBtaW5pbXVtIGlzIDIgZGlnaXRzCi0g
ICAgICAgICAgICBtYXhEaWdpdCAtPSAyOwotICAgICAgICAgICAgY29sb3JzWzBdID4+PSA0ICog
bWF4RGlnaXQ7Ci0gICAgICAgICAgICBjb2xvcnNbMV0gPj49IDQgKiBtYXhEaWdpdDsKLSAgICAg
ICAgICAgIGNvbG9yc1syXSA+Pj0gNCAqIG1heERpZ2l0OwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjb2xvciA9IFN0cmluZzo6Zm9ybWF0KCIjJTAyeCUwMnglMDJ4IiwgY29sb3JzWzBdLCBj
b2xvcnNbMV0sIGNvbG9yc1syXSk7Ci0gICAgICAgICAgICBpZiAoYXR0ci0+ZGVjbCgpLT5zZXRQ
cm9wZXJ0eShpZCwgY29sb3IsIGZhbHNlKSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBBU1NFUlQocmVkSW5kZXggPj0gMCk7CisgICAgICAgICAgICBBU1NFUlQocmVkSW5k
ZXggKyAxIDwgY29tcG9uZW50TGVuZ3RoKTsKKyAgICAgICAgICAgIEFTU0VSVChncmVlbkluZGV4
ID49IGNvbXBvbmVudExlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQoZ3JlZW5JbmRleCArIDEg
PCBjb21wb25lbnRMZW5ndGggKiAyKTsKKyAgICAgICAgICAgIEFTU0VSVChibHVlSW5kZXggPj0g
Y29tcG9uZW50TGVuZ3RoICogMik7CisgICAgICAgICAgICBBU1NFUlQoYmx1ZUluZGV4IDwgY29s
b3IubGVuZ3RoKCkpOworCisgICAgICAgICAgICBjb2xvcnNbMF0gPSB0b0FTQ0lJSGV4VmFsdWUo
Y29sb3JbcmVkSW5kZXhdKSAqIDE2ICsgdG9BU0NJSUhleFZhbHVlKGNvbG9yW3JlZEluZGV4KzFd
KTsKKyAgICAgICAgICAgIGNvbG9yc1sxXSA9IHRvQVNDSUlIZXhWYWx1ZShjb2xvcltncmVlbklu
ZGV4XSkgKiAxNiArIHRvQVNDSUlIZXhWYWx1ZShjb2xvcltncmVlbkluZGV4KzFdKTsKKyAgICAg
ICAgICAgIGNvbG9yc1syXSA9IHRvQVNDSUlIZXhWYWx1ZShjb2xvcltibHVlSW5kZXhdKSAqIDE2
ICsgdG9BU0NJSUhleFZhbHVlKGNvbG9yW2JsdWVJbmRleCsxXSk7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwgQ1NTVmFsdWVCbGFjaywgZmFsc2Up
OworCisgICAgY29sb3IgPSBTdHJpbmc6OmZvcm1hdCgiIyUwMnglMDJ4JTAyeCIsIGNvbG9yc1sw
XSwgY29sb3JzWzFdLCBjb2xvcnNbMl0pOworICAgIGF0dHItPmRlY2woKS0+c2V0UHJvcGVydHko
aWQsIGNvbG9yLCBmYWxzZSk7CiB9CiAKIHZvaWQgU3R5bGVkRWxlbWVudDo6Y3JlYXRlTWFwcGVk
RGVjbChBdHRyaWJ1dGUqIGF0dHIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97909</attachid>
            <date>2011-06-20 18:52:21 -0700</date>
            <delta_ts>2011-06-21 11:42:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63029-20110620185220.patch</filename>
            <type>text/plain</type>
            <size>15633</size>
            <attacher name="Tab Atkins">tabatkins</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg5MDcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1NzExMGNmNTllN2E2YmFjYjZkYTkx
MWVjNzY1MjBkOGFjZTFkNDFjLi41NjQ0MTBlYjJhMmJmZTczYTM2MGZmYWQ1MTI0ZTQ2MWE4YjY0
NTlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDYtMjAgIFRhYiBBdGtpbnMgIDxqYWNr
YWxtYWdlQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGaXggbGVnYWN5IGNvbG9yIGF0dHJpYnV0ZSBwYXJzaW5nIHRvIG1hdGNoIEhU
TUwgc3BlYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjMwMjkKKworICAgICAgICBUZXN0cyA8Ym9keSBiZ2NvbG9yPiBwYXJzaW5nLgorCisgICAgICAg
ICogZmFzdC9kb20vYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9zY3JpcHQtdGVzdHMvYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMu
anM6IEFkZGVkLgorCiAyMDExLTA2LTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFNraXAgZWRpdGluZy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0
Lmh0bWwgYWRkZWQgYnkgcjg4ODkwIG9uIE1hYyBXZWJLaXQyCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uN2YyMWE0MzYzZmExOWMxOTlhZmMwNjE0Mzk5Y2UzM2Q3MjAyN2I4NgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3Jz
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQwIEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGxl
Z2FjeSBjb2xvciBhdHRyaWJ1dGVzIGFyZSBwYXJzZWQgcHJvcGVybHkuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nJztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYmEoMCwgMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0ndHJhbnNwYXJlbnQnO2dldENvbXB1
dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiYSgwLCAwLCAw
LCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSdyZWQnO2dldENvbXB1dGVkU3R5bGUo
ZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDI1NSwgMCwgMCknCitQQVNT
IGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nI2YwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5i
b2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMjU1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQu
Ym9keS5iZ0NvbG9yPScjZmYwMDAwJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJh
Y2tncm91bmRDb2xvcjsgaXMgJ3JnYigyNTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJn
Q29sb3I9J2YwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29s
b3I7IGlzICdyZ2IoMTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2ZmMDAw
MCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdy
Z2IoMjU1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjMDAwMDAwMDAnO2dl
dENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDAs
IDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2Zvbyc7Z2V0Q29tcHV0ZWRTdHls
ZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTUsIDAsIDApJworUEFT
UyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2NoZWVzZSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVu
dC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTkyLCAyMzgsIDE0KScKK1BBU1MgZG9j
dW1lbnQuYm9keS5iZ0NvbG9yPSdyZ2IoMjU1LCAwLCAwKSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1
bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMCwgODUsIDApJworUEFTUyBkb2N1
bWVudC5ib2R5LmJnQ29sb3I9JzU1MDAwMDAwMTE1NTAwMDAwMDExNTUwMDAwMDAxMSc7Z2V0Q29t
cHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTcsIDE3
LCAxNyknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTUwMDIwMDAxMTU1MDAwMDAwMTE1
NTAwMDAwMDExJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xv
cjsgaXMgJ3JnYigzMiwgMCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIyc7Z2V0
Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzUnO2dldENvbXB1dGVkU3R5bGUo
ZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDUsIDAsIDApJworUEFTUyBk
b2N1bWVudC5ib2R5LmJnQ29sb3I9JyM1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5
KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoNSwgNSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHku
YmdDb2xvcj0nIzU1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IGlzICdyZ2IoODUsIDg1LCA4NSknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0n
IzU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBp
cyAncmdiKDg1LCA4NSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzU1NTU1Jztn
ZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4
NSwgODUsIDgwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNTU1NTU1JztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUs
IDg1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNTU1NTU1NSc7Z2V0Q29tcHV0ZWRT
dHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoODUsIDg1LCA4MCkn
CitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzU1NTU1NTU1JztnZXRDb21wdXRlZFN0eWxl
KGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDg1KScKK1BB
U1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJv
ZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9k
eS5iZ0NvbG9yPSc1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IGlzICdyZ2IoNSwgNSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTU1
JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3Jn
Yig1LCA1LCA1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTU1JztnZXRDb21wdXRl
ZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDAp
JworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzU1NTU1JztnZXRDb21wdXRlZFN0eWxlKGRv
Y3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDgwKScKK1BBU1Mg
ZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQu
Ym9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4NSwgODUpJworUEFTUyBkb2N1bWVu
dC5ib2R5LmJnQ29sb3I9JzU1NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSku
YmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4NSwgODApJworUEFTUyBkb2N1bWVudC5ib2R5
LmJnQ29sb3I9JzU1NTU1NTU1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tn
cm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDg1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0Nv
bG9yPScgZmZmZmZmICc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IGlzICdyZ2IoMjU1LCAyNTUsIDI1NSknCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2F0
dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNhMzJlNjlhMWEzYWNjM2I1
NGJlM2YzOTUzMTU1M2Y0ZTZhMjhlMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxw
IGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Njcmlw
dC10ZXN0cy9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NjcmlwdC10ZXN0cy9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjA2
NDcwNGUxZTAzNDFhZjcxMzAzNjQ2Y2I1NmYwN2U0ZTAwMDE2Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LXRlc3RzL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3Jz
LmpzCkBAIC0wLDAgKzEsNDQgQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyB0aGF0
IGxlZ2FjeSBjb2xvciBhdHRyaWJ1dGVzIGFyZSBwYXJzZWQgcHJvcGVybHkuIik7CisKK3Nob3Vs
ZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29sb3I9Jyc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5i
b2R5KS5iYWNrZ3JvdW5kQ29sb3I7IiwgIidyZ2JhKDAsIDAsIDAsIDApJyIpOworc2hvdWxkQmUo
ImRvY3VtZW50LmJvZHkuYmdDb2xvcj0ndHJhbnNwYXJlbnQnO2dldENvbXB1dGVkU3R5bGUoZG9j
dW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyIsICIncmdiYSgwLCAwLCAwLCAwKSciKTsKKyhm
dW5jdGlvbigpewordmFyIHRlc3RzID0gWworCXsndGVzdCc6J3JlZCcsICdleHBlY3RlZCc6WzI1
NSwgMCwgMF19LAorCXsndGVzdCc6JyNmMDAnLCAnZXhwZWN0ZWQnOlsyNTUsIDAsIDBdfSwKKwl7
J3Rlc3QnOicjZmYwMDAwJywgJ2V4cGVjdGVkJzpbMjU1LCAwLCAwXX0sCisJeyd0ZXN0JzonZjAw
JywgJ2V4cGVjdGVkJzpbMTUsIDAsIDBdfSwKKwl7J3Rlc3QnOidmZjAwMDAnLCAnZXhwZWN0ZWQn
OlsyNTUsIDAsIDBdfSwKKwl7J3Rlc3QnOicjMDAwMDAwMDAnLCAnZXhwZWN0ZWQnOlswLCAwLCAw
XX0sCisJeyd0ZXN0JzonZm9vJywgJ2V4cGVjdGVkJzpbMTUsIDAsIDBdfSwKKwl7J3Rlc3QnOidj
aGVlc2UnLCAnZXhwZWN0ZWQnOlsxOTIsIDIzOCwgMTRdfSwKKwl7J3Rlc3QnOidyZ2IoMjU1LCAw
LCAwKScsICdleHBlY3RlZCc6WzAsIDg1LCAwXX0sCisJeyd0ZXN0JzonNTUwMDAwMDAxMTU1MDAw
MDAwMTE1NTAwMDAwMDExJywgJ2V4cGVjdGVkJzpbMTcsIDE3LCAxN119LAorCXsndGVzdCc6JzU1
MDAyMDAwMTE1NTAwMDAwMDExNTUwMDAwMDAxMScsICdleHBlY3RlZCc6WzMyLCAwLCAwXX0sCisJ
eyd0ZXN0JzonIycsICdleHBlY3RlZCc6WzAsIDAsIDBdfSwKKwl7J3Rlc3QnOicjNScsICdleHBl
Y3RlZCc6WzUsIDAsIDBdfSwKKwl7J3Rlc3QnOicjNTUnLCAnZXhwZWN0ZWQnOls1LCA1LCAwXX0s
CisJeyd0ZXN0JzonIzU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgODVdfSwKKwl7J3Rlc3QnOicj
NTU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgMF19LAorCXsndGVzdCc6JyM1NTU1NScsICdleHBl
Y3RlZCc6Wzg1LCA4NSwgODBdfSwKKwl7J3Rlc3QnOicjNTU1NTU1JywgJ2V4cGVjdGVkJzpbODUs
IDg1LCA4NV19LAorCXsndGVzdCc6JyM1NTU1NTU1JywgJ2V4cGVjdGVkJzpbODUsIDg1LCA4MF19
LAorCXsndGVzdCc6JyM1NTU1NTU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgODVdfSwKKwl7J3Rl
c3QnOic1JywgJ2V4cGVjdGVkJzpbNSwgMCwgMF19LAorCXsndGVzdCc6JzU1JywgJ2V4cGVjdGVk
JzpbNSwgNSwgMF19LAorCXsndGVzdCc6JzU1NScsICdleHBlY3RlZCc6WzUsIDUsIDVdfSwKKwl7
J3Rlc3QnOic1NTU1JywgJ2V4cGVjdGVkJzpbODUsIDg1LCAwXX0sCisJeyd0ZXN0JzonNTU1NTUn
LCAnZXhwZWN0ZWQnOls4NSwgODUsIDgwXX0sCisJeyd0ZXN0JzonNTU1NTU1JywgJ2V4cGVjdGVk
JzpbODUsIDg1LCA4NV19LAorCXsndGVzdCc6JzU1NTU1NTUnLCAnZXhwZWN0ZWQnOls4NSwgODUs
IDgwXX0sCisJeyd0ZXN0JzonNTU1NTU1NTUnLCAnZXhwZWN0ZWQnOls4NSwgODUsIDg1XX0sCisJ
eyd0ZXN0JzonIGZmZmZmZiAnLCAnZXhwZWN0ZWQnOlsyNTUsIDI1NSwgMjU1XX0KK107CisKK2Zv
cih2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgeworCXZhciB0ID0gdGVzdHNbaV0u
dGVzdDsKKwl2YXIgZSA9IHRlc3RzW2ldLmV4cGVjdGVkOworCXNob3VsZEJlKCJkb2N1bWVudC5i
b2R5LmJnQ29sb3I9JyIgKyB0ICsgIic7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5i
YWNrZ3JvdW5kQ29sb3I7IiwgIidyZ2IoIiArIGVbMF0gKyAiLCAiICsgZVsxXSArICIsICIgKyBl
WzJdICsgIiknIik7Cit9Cit9KSgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY5OWZkMGU1ODZhNWNkOWY1MWE0
YzkyYmRjM2MwM2M0NWYyYTVhZi4uMjU2NjZkNTU1NGRlMTc1Nzk1N2VjZmU1YWI1ZGRiYWFmZjk2
OGNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTA2LTIwICBUYWIgQXRraW5z
ICA8amFja2FsbWFnZUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRml4IGxlZ2FjeSBjb2xvciBhdHRyaWJ1dGUgcGFyc2luZyB0byBt
YXRjaCBIVE1MIHNwZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYzMDI5CisKKyAgICAgICAgUmVsZXZhbnQgc3BlYyBsaW5rOiBodHRwOi8vd3d3Lndo
YXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL2NvbXBsZXRlL2NvbW1vbi1taWNy
b3N5bnRheGVzLmh0bWwjcnVsZXMtZm9yLXBhcnNpbmctYS1sZWdhY3ktY29sb3ItdmFsdWUKKyAg
ICAgICAgRml4IGxlZ2FjeSBjb2xvciBhdHRyaWJ1dGUgcGFyc2luZyAoPGJvZHkgYmdjb2xvcj4s
IDxmb250IGNvbG9yPiwgZXRjLikgdG8gbWF0Y2ggdGhlIEhUTUwgc3BlYyBhbmQgbW9yZSBjbG9z
ZWx5IG1hdGNoIG90aGVyIGJyb3dzZXJzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL2F0dHJp
YnV0ZS1sZWdhY3ktY29sb3JzLmh0bWwKKworICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmFkZENTU0NvbG9yKToKKwogMjAx
MS0wNi0xNCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIDxo
dHRwOi8vd2Via2l0Lm9yZy9iLzYyNjc3PiBQYXJ0IDIvMjogUmVtb3ZlIGR1cGxpY2F0ZSBoZWFk
ZXIgZW50cmllcyBpbiBXZWJDb3JlIHByb2plY3QgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVs
ZW1lbnQuY3BwCmluZGV4IGJkOTU0M2RhMDg4MzJmYjQwOGI2ZmNmODhmNTgyMzY4Njg1Y2M1MzQu
LjgzMjQ2YzcxOWYxMDI1MDQ3NGZhNDMwZDBkNzk3Yzk3ODM1N2Q1ZjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU3R5bGVkRWxlbWVudC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDU1NTdHls
ZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNsYXNzTGlzdC5o
IgogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkRPTVRva2Vu
TGlzdC5oIgpAQCAtMzE3LDc3ICszMTgsODIgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjphZGRDU1NM
ZW5ndGgoQXR0cmlidXRlKiBhdHRyLCBpbnQgaWQsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiAgICAg
YXR0ci0+ZGVjbCgpLT5zZXRMZW5ndGhQcm9wZXJ0eShpZCwgdmFsdWUsIGZhbHNlKTsKIH0KIAot
LyogY29sb3IgcGFyc2luZyB0aGF0IHRyaWVzIHRvIG1hdGNoIGFzIGNsb3NlIGFzIHBvc3NpYmxl
IElFIDYuICovCi12b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZENTU0NvbG9yKEF0dHJpYnV0ZSogYXR0
ciwgaW50IGlkLCBjb25zdCBTdHJpbmcmIGMpCisvLyBjb2xvciBwYXJzaW5nIHRoYXQgbWF0Y2hl
cyBIVE1MJ3MgInJ1bGVzIGZvciBwYXJzaW5nIGEgbGVnYWN5IGNvbG9yIHZhbHVlIgordm9pZCBT
dHlsZWRFbGVtZW50OjphZGRDU1NDb2xvcihBdHRyaWJ1dGUqIGF0dHIsIGludCBpZCwgY29uc3Qg
U3RyaW5nJiBhdHRyVmFsdWUpCiB7Ci0gICAgLy8gdGhpcyBpcyB0aGUgb25seSBjYXNlIG5vIGNv
bG9yIGdldHMgYXBwbGllZCBpbiBJRS4KLSAgICBpZiAoIWMubGVuZ3RoKCkpCisgICAgLy8gVGhl
c2UgdHdvIGNhc2VzIGRvbid0IGFwcGx5IGFueSBjb2xvci4KKyAgICBpZiAoIWF0dHJWYWx1ZS5s
ZW5ndGgoKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShhdHRyVmFsdWUsICJ0cmFuc3BhcmVudCIpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWF0dHItPmRlY2woKSkKICAgICAgICAgY3JlYXRl
TWFwcGVkRGVjbChhdHRyKTsKICAgICAKLSAgICBpZiAoYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0
eShpZCwgYywgZmFsc2UpKQorICAgIFN0cmluZyBjb2xvciA9IGF0dHJWYWx1ZS5zdHJpcFdoaXRl
U3BhY2UoKTsKKyAgICBpbnQgY29sb3JzWzNdID0geyAwLCAwLCAwIH07CisKKyAgICAvLyBDaGVj
ayBpZiB0aGUgc3RyaW5nIGlzIGEgbmFtZWQgY29sb3IuCisgICAgQ29sb3IgZm91bmRDb2xvcjsK
KyAgICBmb3VuZENvbG9yLnNldE5hbWVkQ29sb3IoY29sb3IpOworICAgIGlmIChmb3VuZENvbG9y
LmlzVmFsaWQoKSkgeworICAgICAgICBjb2xvcnNbMF0gPSBmb3VuZENvbG9yLnJlZCgpOworICAg
ICAgICBjb2xvcnNbMV0gPSBmb3VuZENvbG9yLmdyZWVuKCk7CisgICAgICAgIGNvbG9yc1syXSA9
IGZvdW5kQ29sb3IuYmx1ZSgpOworICAgIH0gZWxzZSBpZiAoY29sb3JbMF0gPT0gJyMnICYmIGNv
bG9yLmxlbmd0aCgpID09IDQgJiYgYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwgY29sb3Is
IGZhbHNlKSkgeyAKKyAgICAgICAgLy8gT3RoZXJ3aXNlLCBjaGVjayBpZiBpdCdzIGEgMy1kaWdp
dCBoZXggY29sb3IuCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBTdHJpbmcgY29sb3IgPSBj
OwotICAgIC8vIG5vdCBzb21ldGhpbmcgdGhhdCBmaXRzIHRoZSBzcGVjcy4KLSAgICAKLSAgICAv
LyB3ZSdyZSBlbXVsYXRpbmcgSUVzIGNvbG9yIHBhcnNlciBoZXJlLiBJdCBtYXBzIHRyYW5zcGFy
ZW50IHRvIGJsYWNrLCBvdGhlcndpc2UgaXQgdHJpZXMgdG8gYnVpbGQgYSByZ2IgdmFsdWUKLSAg
ICAvLyBvdXQgb2YgZXZlcnl0aGluZyB5b3UgcHV0IGluLiBUaGUgYWxnb3JpdGhtIGlzIGV4cGVy
aW1lbnRhbGx5IGRldGVybWluZWQsIGJ1dCBzZWVtcyB0byB3b3JrIGZvciBhbGwgdGVzdCBjYXNl
cyBJIGhhdmUuCi0gICAgCi0gICAgLy8gdGhlIGxlbmd0aCBvZiB0aGUgY29sb3IgdmFsdWUgaXMg
cm91bmRlZCB1cCB0byB0aGUgbmV4dAotICAgIC8vIG11bHRpcGxlIG9mIDMuIGVhY2ggcGFydCBv
ZiB0aGUgcmdiIHRyaXBsZSB0aGVuIGdldHMgb25lIHRoaXJkCi0gICAgLy8gb2YgdGhlIGxlbmd0
aC4KLSAgICAvLwotICAgIC8vIEVhY2ggdHJpcGxldCBpcyBwYXJzZWQgYnl0ZSBieSBieXRlLCBt
YXBwaW5nCi0gICAgLy8gZWFjaCBudW1iZXIgdG8gYSBoZXggdmFsdWUgKDAtOWEtZkEtRiB0byB0
aGVpciB2YWx1ZXMKLSAgICAvLyBldmVyeXRoaW5nIGVsc2UgdG8gMCkuCi0gICAgLy8KLSAgICAv
LyBUaGUgaGlnaGVzdCBub24gemVybyBkaWdpdCBpbiBhbGwgdHJpcGxldHMgaXMgcmVtZW1iZXJl
ZCwgYW5kCi0gICAgLy8gdXNlZCBhcyBhIG5vcm1hbGl6YXRpb24gcG9pbnQgdG8gbm9ybWFsaXpl
IHRvIHZhbHVlcyBiZXR3ZWVuIDAKLSAgICAvLyBhbmQgMjU1LgotICAgIAotICAgIGlmICghZXF1
YWxJZ25vcmluZ0Nhc2UoY29sb3IsICJ0cmFuc3BhcmVudCIpKSB7CisgICAgfSBlbHNlIHsgCisg
ICAgICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBjcmF6eSBsZWdhY3kgcGFyc2luZyBydWxlcy4K
KyAgICAgICAgLy8gRmlyc3QsIGZpeHVwIQorICAgICAgICAvLyBGSVhNRTogUmVwbGFjZSBhbGwg
bm9uLUJNUCBjaGFyYWN0ZXJzIGluIGNvbG9yIHdpdGggIjAwIi4KKyAgICAgICAgaWYgKGNvbG9y
Lmxlbmd0aCgpID4gMTI4KQorICAgICAgICAgICAgY29sb3IudHJ1bmNhdGUoMTI4KTsKICAgICAg
ICAgaWYgKGNvbG9yWzBdID09ICcjJykKLSAgICAgICAgICAgIGNvbG9yLnJlbW92ZSgwLCAxKTsK
LSAgICAgICAgaW50IGJhc2ljTGVuZ3RoID0gKGNvbG9yLmxlbmd0aCgpICsgMikgLyAzOwotICAg
ICAgICBpZiAoYmFzaWNMZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICAvLyBJRSBpZ25vcmVzIGNv
bG9ycyB3aXRoIHRocmVlIGRpZ2l0cyBvciBsZXNzCi0gICAgICAgICAgICBpbnQgY29sb3JzWzNd
ID0geyAwLCAwLCAwIH07Ci0gICAgICAgICAgICBpbnQgY29tcG9uZW50ID0gMDsKLSAgICAgICAg
ICAgIGludCBwb3MgPSAwOwotICAgICAgICAgICAgaW50IG1heERpZ2l0ID0gYmFzaWNMZW5ndGgt
MTsKLSAgICAgICAgICAgIHdoaWxlIChjb21wb25lbnQgPCAzKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gc2VhcmNoIGZvcndhcmQgZm9yIGRpZ2l0cyBpbiB0aGUgc3RyaW5nCi0gICAgICAgICAgICAg
ICAgaW50IG51bURpZ2l0cyA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8IChpbnQp
Y29sb3IubGVuZ3RoKCkgJiYgbnVtRGlnaXRzIDwgYmFzaWNMZW5ndGgpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29sb3JzW2NvbXBvbmVudF0gPDw9IDQ7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChpc0FTQ0lJSGV4RGlnaXQoY29sb3JbcG9zXSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbG9yc1tjb21wb25lbnRdICs9IHRvQVNDSUlIZXhWYWx1ZShjb2xvcltwb3NdKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1heERpZ2l0ID0gbWluKG1heERpZ2l0LCBudW1EaWdpdHMpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG51bURpZ2l0cysrOwot
ICAgICAgICAgICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgd2hpbGUgKG51bURpZ2l0cysrIDwgYmFzaWNMZW5ndGgpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbG9yc1tjb21wb25lbnRdIDw8PSA0OwotICAgICAgICAgICAgICAgIGNvbXBvbmVudCsr
OworICAgICAgICAgICAgY29sb3IgPSBjb2xvci5zdWJzdHJpbmcoMSk7CisgICAgICAgIGZvciAo
c2l6ZV90IHBvcyA9IDA7IHBvcyA8IGNvbG9yLmxlbmd0aCgpOyBwb3MrKykgeworICAgICAgICAg
ICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoY29sb3JbcG9zXSkpCisgICAgICAgICAgICAgICAgY29s
b3IucmVwbGFjZShwb3MsIDEsICIwIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbG9yLmxl
bmd0aCgpICUgMyA9PSAyKQorICAgICAgICAgICAgY29sb3IgKz0gIjAiOworICAgICAgICBlbHNl
IGlmIChjb2xvci5sZW5ndGgoKSAlIDMgPT0gMSkKKyAgICAgICAgICAgIGNvbG9yICs9ICIwMCI7
CisgICAgICAgIGVsc2UgaWYgKCFjb2xvci5sZW5ndGgoKSkKKyAgICAgICAgICAgIGNvbG9yID0g
IjAwMCI7CisKKyAgICAgICAgLy8gSGFuZGxlIDMtZGlnaXQgY2FzZSBzcGVjaWFsbHkuCisgICAg
ICAgIGlmIChjb2xvci5sZW5ndGgoKSA9PSAzKSB7CisgICAgICAgICAgICBjb2xvcnNbMF0gPSB0
b0FTQ0lJSGV4VmFsdWUoY29sb3JbMF0pOworICAgICAgICAgICAgY29sb3JzWzFdID0gdG9BU0NJ
SUhleFZhbHVlKGNvbG9yWzFdKTsKKyAgICAgICAgICAgIGNvbG9yc1syXSA9IHRvQVNDSUlIZXhW
YWx1ZShjb2xvclsyXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPdGhlcndp
c2UsIHdlIGhhdmUgYXQgbGVhc3QgNiBkaWdpdHMuCisgICAgICAgICAgICAvLyBTcGxpdCB0aGUg
ZGlnaXRzIGludG8gdGhyZWUgY29tcG9uZW50cywgdGhlbiBzZWFyY2ggdGhlIGxhc3QgOCBkaWdp
dHMgb2YgZWFjaCBjb21wb25lbnQuCisgICAgICAgICAgICBzaXplX3QgY29tcG9uZW50TGVuZ3Ro
ID0gY29sb3IubGVuZ3RoKCkgLyAzOworICAgICAgICAgICAgaW50IGNvbXBvbmVudFNlYXJjaFdp
bmRvd1NpemUgPSBtaW4oY29tcG9uZW50TGVuZ3RoLCBzdGF0aWNfY2FzdDxzaXplX3Q+KDgpKTsK
KyAgICAgICAgICAgIHNpemVfdCByZWRJbmRleCA9IGNvbXBvbmVudExlbmd0aCAtIGNvbXBvbmVu
dFNlYXJjaFdpbmRvd1NpemU7CisgICAgICAgICAgICBzaXplX3QgZ3JlZW5JbmRleCA9IGNvbXBv
bmVudExlbmd0aCAqIDIgLSBjb21wb25lbnRTZWFyY2hXaW5kb3dTaXplOworICAgICAgICAgICAg
c2l6ZV90IGJsdWVJbmRleCA9IGNvbG9yLmxlbmd0aCgpIC0gY29tcG9uZW50U2VhcmNoV2luZG93
U2l6ZTsKKyAgICAgICAgICAgIC8vIFNraXAgZGlnaXRzIHVudGlsIG9uZSBvZiB0aGVtIGlzIG5v
bi16ZXJvLCBvciB5b3UndmUgb25seSBnb3QgdHdvIGxlZnQgaW4gdGhlIGNvbXBvbmVudC4KKyAg
ICAgICAgICAgIHdoaWxlIChjb2xvcltyZWRJbmRleF0gPT0gJzAnICYmIGNvbG9yW2dyZWVuSW5k
ZXhdID09ICcwJyAmJiBjb2xvcltibHVlSW5kZXhdID09ICcwJyAmJiAoY29tcG9uZW50TGVuZ3Ro
IC0gcmVkSW5kZXgpID4gMikgeworICAgICAgICAgICAgICAgIHJlZEluZGV4Kys7CisgICAgICAg
ICAgICAgICAgZ3JlZW5JbmRleCsrOworICAgICAgICAgICAgICAgIGJsdWVJbmRleCsrOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgbWF4RGlnaXQgPSBiYXNpY0xlbmd0aCAtIG1heERpZ2l0
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBub3JtYWxpemUgdG8gMDAtZmYuIFRoZSBo
aWdoZXN0IGZpbGxlZCBkaWdpdCBjb3VudHMsIG1pbmltdW0gaXMgMiBkaWdpdHMKLSAgICAgICAg
ICAgIG1heERpZ2l0IC09IDI7Ci0gICAgICAgICAgICBjb2xvcnNbMF0gPj49IDQgKiBtYXhEaWdp
dDsKLSAgICAgICAgICAgIGNvbG9yc1sxXSA+Pj0gNCAqIG1heERpZ2l0OwotICAgICAgICAgICAg
Y29sb3JzWzJdID4+PSA0ICogbWF4RGlnaXQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNv
bG9yID0gU3RyaW5nOjpmb3JtYXQoIiMlMDJ4JTAyeCUwMngiLCBjb2xvcnNbMF0sIGNvbG9yc1sx
XSwgY29sb3JzWzJdKTsKLSAgICAgICAgICAgIGlmIChhdHRyLT5kZWNsKCktPnNldFByb3BlcnR5
KGlkLCBjb2xvciwgZmFsc2UpKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IEFTU0VSVChyZWRJbmRleCA+PSAwKTsKKyAgICAgICAgICAgIEFTU0VSVChyZWRJbmRleCArIDEg
PCBjb21wb25lbnRMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKGdyZWVuSW5kZXggPj0gY29t
cG9uZW50TGVuZ3RoKTsKKyAgICAgICAgICAgIEFTU0VSVChncmVlbkluZGV4ICsgMSA8IGNvbXBv
bmVudExlbmd0aCAqIDIpOworICAgICAgICAgICAgQVNTRVJUKGJsdWVJbmRleCA+PSBjb21wb25l
bnRMZW5ndGggKiAyKTsKKyAgICAgICAgICAgIEFTU0VSVChibHVlSW5kZXggPCBjb2xvci5sZW5n
dGgoKSk7CisKKyAgICAgICAgICAgIGNvbG9yc1swXSA9IHRvQVNDSUlIZXhWYWx1ZShjb2xvclty
ZWRJbmRleF0pICogMTYgKyB0b0FTQ0lJSGV4VmFsdWUoY29sb3JbcmVkSW5kZXgrMV0pOworICAg
ICAgICAgICAgY29sb3JzWzFdID0gdG9BU0NJSUhleFZhbHVlKGNvbG9yW2dyZWVuSW5kZXhdKSAq
IDE2ICsgdG9BU0NJSUhleFZhbHVlKGNvbG9yW2dyZWVuSW5kZXgrMV0pOworICAgICAgICAgICAg
Y29sb3JzWzJdID0gdG9BU0NJSUhleFZhbHVlKGNvbG9yW2JsdWVJbmRleF0pICogMTYgKyB0b0FT
Q0lJSGV4VmFsdWUoY29sb3JbYmx1ZUluZGV4KzFdKTsKICAgICAgICAgfQogICAgIH0KLSAgICBh
dHRyLT5kZWNsKCktPnNldFByb3BlcnR5KGlkLCBDU1NWYWx1ZUJsYWNrLCBmYWxzZSk7CisKKyAg
ICBjb2xvciA9IFN0cmluZzo6Zm9ybWF0KCIjJTAyeCUwMnglMDJ4IiwgY29sb3JzWzBdLCBjb2xv
cnNbMV0sIGNvbG9yc1syXSk7CisgICAgYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwgY29s
b3IsIGZhbHNlKTsKIH0KIAogdm9pZCBTdHlsZWRFbGVtZW50OjpjcmVhdGVNYXBwZWREZWNsKEF0
dHJpYnV0ZSogYXR0cikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98026</attachid>
            <date>2011-06-21 11:42:22 -0700</date>
            <delta_ts>2011-06-23 10:56:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63029-20110621114221.patch</filename>
            <type>text/plain</type>
            <size>14997</size>
            <attacher name="Tab Atkins">tabatkins</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg5MDcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1NzExMGNmNTllN2E2YmFjYjZkYTkx
MWVjNzY1MjBkOGFjZTFkNDFjLi41NjQ0MTBlYjJhMmJmZTczYTM2MGZmYWQ1MTI0ZTQ2MWE4YjY0
NTlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDYtMjAgIFRhYiBBdGtpbnMgIDxqYWNr
YWxtYWdlQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGaXggbGVnYWN5IGNvbG9yIGF0dHJpYnV0ZSBwYXJzaW5nIHRvIG1hdGNoIEhU
TUwgc3BlYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjMwMjkKKworICAgICAgICBUZXN0cyA8Ym9keSBiZ2NvbG9yPiBwYXJzaW5nLgorCisgICAgICAg
ICogZmFzdC9kb20vYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9zY3JpcHQtdGVzdHMvYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMu
anM6IEFkZGVkLgorCiAyMDExLTA2LTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFNraXAgZWRpdGluZy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0
Lmh0bWwgYWRkZWQgYnkgcjg4ODkwIG9uIE1hYyBXZWJLaXQyCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uN2YyMWE0MzYzZmExOWMxOTlhZmMwNjE0Mzk5Y2UzM2Q3MjAyN2I4NgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3Jz
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQwIEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGxl
Z2FjeSBjb2xvciBhdHRyaWJ1dGVzIGFyZSBwYXJzZWQgcHJvcGVybHkuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nJztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYmEoMCwgMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0ndHJhbnNwYXJlbnQnO2dldENvbXB1
dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiYSgwLCAwLCAw
LCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSdyZWQnO2dldENvbXB1dGVkU3R5bGUo
ZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDI1NSwgMCwgMCknCitQQVNT
IGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nI2YwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5i
b2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMjU1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQu
Ym9keS5iZ0NvbG9yPScjZmYwMDAwJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJh
Y2tncm91bmRDb2xvcjsgaXMgJ3JnYigyNTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJn
Q29sb3I9J2YwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29s
b3I7IGlzICdyZ2IoMTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2ZmMDAw
MCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdy
Z2IoMjU1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjMDAwMDAwMDAnO2dl
dENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDAs
IDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2Zvbyc7Z2V0Q29tcHV0ZWRTdHls
ZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTUsIDAsIDApJworUEFT
UyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2NoZWVzZSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVu
dC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTkyLCAyMzgsIDE0KScKK1BBU1MgZG9j
dW1lbnQuYm9keS5iZ0NvbG9yPSdyZ2IoMjU1LCAwLCAwKSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1
bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMCwgODUsIDApJworUEFTUyBkb2N1
bWVudC5ib2R5LmJnQ29sb3I9JzU1MDAwMDAwMTE1NTAwMDAwMDExNTUwMDAwMDAxMSc7Z2V0Q29t
cHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTcsIDE3
LCAxNyknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTUwMDIwMDAxMTU1MDAwMDAwMTE1
NTAwMDAwMDExJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xv
cjsgaXMgJ3JnYigzMiwgMCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIyc7Z2V0
Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzUnO2dldENvbXB1dGVkU3R5bGUo
ZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDUsIDAsIDApJworUEFTUyBk
b2N1bWVudC5ib2R5LmJnQ29sb3I9JyM1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5
KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoNSwgNSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHku
YmdDb2xvcj0nIzU1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IGlzICdyZ2IoODUsIDg1LCA4NSknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0n
IzU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBp
cyAncmdiKDg1LCA4NSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzU1NTU1Jztn
ZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4
NSwgODUsIDgwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNTU1NTU1JztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUs
IDg1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNTU1NTU1NSc7Z2V0Q29tcHV0ZWRT
dHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoODUsIDg1LCA4MCkn
CitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzU1NTU1NTU1JztnZXRDb21wdXRlZFN0eWxl
KGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDg1KScKK1BB
U1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJv
ZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9k
eS5iZ0NvbG9yPSc1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IGlzICdyZ2IoNSwgNSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTU1
JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3Jn
Yig1LCA1LCA1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTU1JztnZXRDb21wdXRl
ZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDAp
JworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzU1NTU1JztnZXRDb21wdXRlZFN0eWxlKGRv
Y3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDgwKScKK1BBU1Mg
ZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQu
Ym9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4NSwgODUpJworUEFTUyBkb2N1bWVu
dC5ib2R5LmJnQ29sb3I9JzU1NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSku
YmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4NSwgODApJworUEFTUyBkb2N1bWVudC5ib2R5
LmJnQ29sb3I9JzU1NTU1NTU1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tn
cm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDg1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0Nv
bG9yPScgZmZmZmZmICc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IGlzICdyZ2IoMjU1LCAyNTUsIDI1NSknCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2F0
dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNhMzJlNjlhMWEzYWNjM2I1
NGJlM2YzOTUzMTU1M2Y0ZTZhMjhlMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxw
IGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Njcmlw
dC10ZXN0cy9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NjcmlwdC10ZXN0cy9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjA2
NDcwNGUxZTAzNDFhZjcxMzAzNjQ2Y2I1NmYwN2U0ZTAwMDE2Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LXRlc3RzL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3Jz
LmpzCkBAIC0wLDAgKzEsNDQgQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyB0aGF0
IGxlZ2FjeSBjb2xvciBhdHRyaWJ1dGVzIGFyZSBwYXJzZWQgcHJvcGVybHkuIik7CisKK3Nob3Vs
ZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29sb3I9Jyc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5i
b2R5KS5iYWNrZ3JvdW5kQ29sb3I7IiwgIidyZ2JhKDAsIDAsIDAsIDApJyIpOworc2hvdWxkQmUo
ImRvY3VtZW50LmJvZHkuYmdDb2xvcj0ndHJhbnNwYXJlbnQnO2dldENvbXB1dGVkU3R5bGUoZG9j
dW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyIsICIncmdiYSgwLCAwLCAwLCAwKSciKTsKKyhm
dW5jdGlvbigpewordmFyIHRlc3RzID0gWworCXsndGVzdCc6J3JlZCcsICdleHBlY3RlZCc6WzI1
NSwgMCwgMF19LAorCXsndGVzdCc6JyNmMDAnLCAnZXhwZWN0ZWQnOlsyNTUsIDAsIDBdfSwKKwl7
J3Rlc3QnOicjZmYwMDAwJywgJ2V4cGVjdGVkJzpbMjU1LCAwLCAwXX0sCisJeyd0ZXN0JzonZjAw
JywgJ2V4cGVjdGVkJzpbMTUsIDAsIDBdfSwKKwl7J3Rlc3QnOidmZjAwMDAnLCAnZXhwZWN0ZWQn
OlsyNTUsIDAsIDBdfSwKKwl7J3Rlc3QnOicjMDAwMDAwMDAnLCAnZXhwZWN0ZWQnOlswLCAwLCAw
XX0sCisJeyd0ZXN0JzonZm9vJywgJ2V4cGVjdGVkJzpbMTUsIDAsIDBdfSwKKwl7J3Rlc3QnOidj
aGVlc2UnLCAnZXhwZWN0ZWQnOlsxOTIsIDIzOCwgMTRdfSwKKwl7J3Rlc3QnOidyZ2IoMjU1LCAw
LCAwKScsICdleHBlY3RlZCc6WzAsIDg1LCAwXX0sCisJeyd0ZXN0JzonNTUwMDAwMDAxMTU1MDAw
MDAwMTE1NTAwMDAwMDExJywgJ2V4cGVjdGVkJzpbMTcsIDE3LCAxN119LAorCXsndGVzdCc6JzU1
MDAyMDAwMTE1NTAwMDAwMDExNTUwMDAwMDAxMScsICdleHBlY3RlZCc6WzMyLCAwLCAwXX0sCisJ
eyd0ZXN0JzonIycsICdleHBlY3RlZCc6WzAsIDAsIDBdfSwKKwl7J3Rlc3QnOicjNScsICdleHBl
Y3RlZCc6WzUsIDAsIDBdfSwKKwl7J3Rlc3QnOicjNTUnLCAnZXhwZWN0ZWQnOls1LCA1LCAwXX0s
CisJeyd0ZXN0JzonIzU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgODVdfSwKKwl7J3Rlc3QnOicj
NTU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgMF19LAorCXsndGVzdCc6JyM1NTU1NScsICdleHBl
Y3RlZCc6Wzg1LCA4NSwgODBdfSwKKwl7J3Rlc3QnOicjNTU1NTU1JywgJ2V4cGVjdGVkJzpbODUs
IDg1LCA4NV19LAorCXsndGVzdCc6JyM1NTU1NTU1JywgJ2V4cGVjdGVkJzpbODUsIDg1LCA4MF19
LAorCXsndGVzdCc6JyM1NTU1NTU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgODVdfSwKKwl7J3Rl
c3QnOic1JywgJ2V4cGVjdGVkJzpbNSwgMCwgMF19LAorCXsndGVzdCc6JzU1JywgJ2V4cGVjdGVk
JzpbNSwgNSwgMF19LAorCXsndGVzdCc6JzU1NScsICdleHBlY3RlZCc6WzUsIDUsIDVdfSwKKwl7
J3Rlc3QnOic1NTU1JywgJ2V4cGVjdGVkJzpbODUsIDg1LCAwXX0sCisJeyd0ZXN0JzonNTU1NTUn
LCAnZXhwZWN0ZWQnOls4NSwgODUsIDgwXX0sCisJeyd0ZXN0JzonNTU1NTU1JywgJ2V4cGVjdGVk
JzpbODUsIDg1LCA4NV19LAorCXsndGVzdCc6JzU1NTU1NTUnLCAnZXhwZWN0ZWQnOls4NSwgODUs
IDgwXX0sCisJeyd0ZXN0JzonNTU1NTU1NTUnLCAnZXhwZWN0ZWQnOls4NSwgODUsIDg1XX0sCisJ
eyd0ZXN0JzonIGZmZmZmZiAnLCAnZXhwZWN0ZWQnOlsyNTUsIDI1NSwgMjU1XX0KK107CisKK2Zv
cih2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgeworCXZhciB0ID0gdGVzdHNbaV0u
dGVzdDsKKwl2YXIgZSA9IHRlc3RzW2ldLmV4cGVjdGVkOworCXNob3VsZEJlKCJkb2N1bWVudC5i
b2R5LmJnQ29sb3I9JyIgKyB0ICsgIic7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5i
YWNrZ3JvdW5kQ29sb3I7IiwgIidyZ2IoIiArIGVbMF0gKyAiLCAiICsgZVsxXSArICIsICIgKyBl
WzJdICsgIiknIik7Cit9Cit9KSgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY5OWZkMGU1ODZhNWNkOWY1MWE0
YzkyYmRjM2MwM2M0NWYyYTVhZi4uMjU2NjZkNTU1NGRlMTc1Nzk1N2VjZmU1YWI1ZGRiYWFmZjk2
OGNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTA2LTIwICBUYWIgQXRraW5z
ICA8amFja2FsbWFnZUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRml4IGxlZ2FjeSBjb2xvciBhdHRyaWJ1dGUgcGFyc2luZyB0byBt
YXRjaCBIVE1MIHNwZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYzMDI5CisKKyAgICAgICAgUmVsZXZhbnQgc3BlYyBsaW5rOiBodHRwOi8vd3d3Lndo
YXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL2NvbXBsZXRlL2NvbW1vbi1taWNy
b3N5bnRheGVzLmh0bWwjcnVsZXMtZm9yLXBhcnNpbmctYS1sZWdhY3ktY29sb3ItdmFsdWUKKyAg
ICAgICAgRml4IGxlZ2FjeSBjb2xvciBhdHRyaWJ1dGUgcGFyc2luZyAoPGJvZHkgYmdjb2xvcj4s
IDxmb250IGNvbG9yPiwgZXRjLikgdG8gbWF0Y2ggdGhlIEhUTUwgc3BlYyBhbmQgbW9yZSBjbG9z
ZWx5IG1hdGNoIG90aGVyIGJyb3dzZXJzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL2F0dHJp
YnV0ZS1sZWdhY3ktY29sb3JzLmh0bWwKKworICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmFkZENTU0NvbG9yKToKKwogMjAx
MS0wNi0xNCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIDxo
dHRwOi8vd2Via2l0Lm9yZy9iLzYyNjc3PiBQYXJ0IDIvMjogUmVtb3ZlIGR1cGxpY2F0ZSBoZWFk
ZXIgZW50cmllcyBpbiBXZWJDb3JlIHByb2plY3QgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVs
ZW1lbnQuY3BwCmluZGV4IGJkOTU0M2RhMDg4MzJmYjQwOGI2ZmNmODhmNTgyMzY4Njg1Y2M1MzQu
LjQwYzc1NjZkNzMzZjE2ZDgxYjI2NjA3MjA4ZmEwZTQyNDNhYTZmMDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU3R5bGVkRWxlbWVudC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDU1NTdHls
ZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNsYXNzTGlzdC5o
IgogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkRPTVRva2Vu
TGlzdC5oIgpAQCAtMzE3LDc3ICszMTgsNzQgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjphZGRDU1NM
ZW5ndGgoQXR0cmlidXRlKiBhdHRyLCBpbnQgaWQsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiAgICAg
YXR0ci0+ZGVjbCgpLT5zZXRMZW5ndGhQcm9wZXJ0eShpZCwgdmFsdWUsIGZhbHNlKTsKIH0KIAot
LyogY29sb3IgcGFyc2luZyB0aGF0IHRyaWVzIHRvIG1hdGNoIGFzIGNsb3NlIGFzIHBvc3NpYmxl
IElFIDYuICovCi12b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZENTU0NvbG9yKEF0dHJpYnV0ZSogYXR0
ciwgaW50IGlkLCBjb25zdCBTdHJpbmcmIGMpCisvLyBjb2xvciBwYXJzaW5nIHRoYXQgbWF0Y2hl
cyBIVE1MJ3MgInJ1bGVzIGZvciBwYXJzaW5nIGEgbGVnYWN5IGNvbG9yIHZhbHVlIgordm9pZCBT
dHlsZWRFbGVtZW50OjphZGRDU1NDb2xvcihBdHRyaWJ1dGUqIGF0dHIsIGludCBpZCwgY29uc3Qg
U3RyaW5nJiBhdHRyVmFsdWUpCiB7Ci0gICAgLy8gdGhpcyBpcyB0aGUgb25seSBjYXNlIG5vIGNv
bG9yIGdldHMgYXBwbGllZCBpbiBJRS4KLSAgICBpZiAoIWMubGVuZ3RoKCkpCisgICAgLy8gVGhl
c2UgdHdvIGNhc2VzIGRvbid0IGFwcGx5IGFueSBjb2xvci4KKyAgICBpZiAoIWF0dHJWYWx1ZS5s
ZW5ndGgoKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShhdHRyVmFsdWUsICJ0cmFuc3BhcmVudCIpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWF0dHItPmRlY2woKSkKICAgICAgICAgY3JlYXRl
TWFwcGVkRGVjbChhdHRyKTsKICAgICAKLSAgICBpZiAoYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0
eShpZCwgYywgZmFsc2UpKQorICAgIFN0cmluZyBjb2xvciA9IGF0dHJWYWx1ZS5zdHJpcFdoaXRl
U3BhY2UoKTsKKworICAgIC8vIENoZWNrIGlmIHRoZSBzdHJpbmcgaXMgYSBuYW1lZCBjb2xvci4K
KyAgICBDb2xvciBmb3VuZENvbG9yOworICAgIGZvdW5kQ29sb3Iuc2V0TmFtZWRDb2xvcihjb2xv
cik7CisgICAgaWYgKGZvdW5kQ29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGF0dHItPmRlY2wo
KS0+c2V0UHJvcGVydHkoaWQsIGNvbG9yLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBDaGVjayBpZiB0aGUgc3RyaW5nIGlzIGEgMy1kaWdpdCBoZXggY29sb3IuCisg
ICAgaWYgKGNvbG9yWzBdID09ICcjJyAmJiBjb2xvci5sZW5ndGgoKSA9PSA0ICYmIGF0dHItPmRl
Y2woKS0+c2V0UHJvcGVydHkoaWQsIGNvbG9yLCBmYWxzZSkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBjcmF6eSBsZWdhY3kgcGFyc2luZyBydWxlcy4KKyAg
ICAvLyBGaXJzdCwgZml4dXAhCisgICAgLy8gRklYTUU6IFJlcGxhY2UgYWxsIG5vbi1CTVAgY2hh
cmFjdGVycyBpbiBjb2xvciB3aXRoICIwMCIuCisgICAgaWYgKGNvbG9yLmxlbmd0aCgpID4gMTI4
KQorICAgICAgICBjb2xvci50cnVuY2F0ZSgxMjgpOworICAgIGlmIChjb2xvclswXSA9PSAnIycp
CisgICAgICAgIGNvbG9yID0gY29sb3Iuc3Vic3RyaW5nKDEpOworICAgIGZvciAoc2l6ZV90IHBv
cyA9IDA7IHBvcyA8IGNvbG9yLmxlbmd0aCgpOyBwb3MrKykgeworICAgICAgICBpZiAoIWlzQVND
SUlIZXhEaWdpdChjb2xvcltwb3NdKSkKKyAgICAgICAgICAgIGNvbG9yLnJlcGxhY2UocG9zLCAx
LCAiMCIpOworICAgIH0KKyAgICBpZiAoY29sb3IubGVuZ3RoKCkgJSAzID09IDIpCisgICAgICAg
IGNvbG9yICs9ICIwIjsKKyAgICBlbHNlIGlmIChjb2xvci5sZW5ndGgoKSAlIDMgPT0gMSkKKyAg
ICAgICAgY29sb3IgKz0gIjAwIjsKKyAgICBlbHNlIGlmICghY29sb3IubGVuZ3RoKCkpCisgICAg
ICAgIGNvbG9yID0gIjAwMCI7CisKKyAgICAvLyBIYW5kbGUgMy1kaWdpdCBjYXNlIHNwZWNpYWxs
eS4KKyAgICBpZiAoY29sb3IubGVuZ3RoKCkgPT0gMykgeworICAgICAgICBhdHRyLT5kZWNsKCkt
PnNldFByb3BlcnR5KGlkLCAiIzAiICsgY29sb3Iuc3Vic3RyaW5nKDAsIDEpICsgIjAiICsgY29s
b3Iuc3Vic3RyaW5nKDEsIDEpICsgIjAiICsgY29sb3Iuc3Vic3RyaW5nKDIsIDEpLCBmYWxzZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCi0gICAgU3RyaW5nIGNvbG9yID0gYzsKLSAg
ICAvLyBub3Qgc29tZXRoaW5nIHRoYXQgZml0cyB0aGUgc3BlY3MuCi0gICAgCi0gICAgLy8gd2Un
cmUgZW11bGF0aW5nIElFcyBjb2xvciBwYXJzZXIgaGVyZS4gSXQgbWFwcyB0cmFuc3BhcmVudCB0
byBibGFjaywgb3RoZXJ3aXNlIGl0IHRyaWVzIHRvIGJ1aWxkIGEgcmdiIHZhbHVlCi0gICAgLy8g
b3V0IG9mIGV2ZXJ5dGhpbmcgeW91IHB1dCBpbi4gVGhlIGFsZ29yaXRobSBpcyBleHBlcmltZW50
YWxseSBkZXRlcm1pbmVkLCBidXQgc2VlbXMgdG8gd29yayBmb3IgYWxsIHRlc3QgY2FzZXMgSSBo
YXZlLgotICAgIAotICAgIC8vIHRoZSBsZW5ndGggb2YgdGhlIGNvbG9yIHZhbHVlIGlzIHJvdW5k
ZWQgdXAgdG8gdGhlIG5leHQKLSAgICAvLyBtdWx0aXBsZSBvZiAzLiBlYWNoIHBhcnQgb2YgdGhl
IHJnYiB0cmlwbGUgdGhlbiBnZXRzIG9uZSB0aGlyZAotICAgIC8vIG9mIHRoZSBsZW5ndGguCi0g
ICAgLy8KLSAgICAvLyBFYWNoIHRyaXBsZXQgaXMgcGFyc2VkIGJ5dGUgYnkgYnl0ZSwgbWFwcGlu
ZwotICAgIC8vIGVhY2ggbnVtYmVyIHRvIGEgaGV4IHZhbHVlICgwLTlhLWZBLUYgdG8gdGhlaXIg
dmFsdWVzCi0gICAgLy8gZXZlcnl0aGluZyBlbHNlIHRvIDApLgotICAgIC8vCi0gICAgLy8gVGhl
IGhpZ2hlc3Qgbm9uIHplcm8gZGlnaXQgaW4gYWxsIHRyaXBsZXRzIGlzIHJlbWVtYmVyZWQsIGFu
ZAotICAgIC8vIHVzZWQgYXMgYSBub3JtYWxpemF0aW9uIHBvaW50IHRvIG5vcm1hbGl6ZSB0byB2
YWx1ZXMgYmV0d2VlbiAwCi0gICAgLy8gYW5kIDI1NS4KLSAgICAKLSAgICBpZiAoIWVxdWFsSWdu
b3JpbmdDYXNlKGNvbG9yLCAidHJhbnNwYXJlbnQiKSkgewotICAgICAgICBpZiAoY29sb3JbMF0g
PT0gJyMnKQotICAgICAgICAgICAgY29sb3IucmVtb3ZlKDAsIDEpOwotICAgICAgICBpbnQgYmFz
aWNMZW5ndGggPSAoY29sb3IubGVuZ3RoKCkgKyAyKSAvIDM7Ci0gICAgICAgIGlmIChiYXNpY0xl
bmd0aCA+IDEpIHsKLSAgICAgICAgICAgIC8vIElFIGlnbm9yZXMgY29sb3JzIHdpdGggdGhyZWUg
ZGlnaXRzIG9yIGxlc3MKLSAgICAgICAgICAgIGludCBjb2xvcnNbM10gPSB7IDAsIDAsIDAgfTsK
LSAgICAgICAgICAgIGludCBjb21wb25lbnQgPSAwOwotICAgICAgICAgICAgaW50IHBvcyA9IDA7
Ci0gICAgICAgICAgICBpbnQgbWF4RGlnaXQgPSBiYXNpY0xlbmd0aC0xOwotICAgICAgICAgICAg
d2hpbGUgKGNvbXBvbmVudCA8IDMpIHsKLSAgICAgICAgICAgICAgICAvLyBzZWFyY2ggZm9yd2Fy
ZCBmb3IgZGlnaXRzIGluIHRoZSBzdHJpbmcKLSAgICAgICAgICAgICAgICBpbnQgbnVtRGlnaXRz
ID0gMDsKLSAgICAgICAgICAgICAgICB3aGlsZSAocG9zIDwgKGludCljb2xvci5sZW5ndGgoKSAm
JiBudW1EaWdpdHMgPCBiYXNpY0xlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBjb2xvcnNb
Y29tcG9uZW50XSA8PD0gNDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlIZXhEaWdp
dChjb2xvcltwb3NdKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NvbXBvbmVu
dF0gKz0gdG9BU0NJSUhleFZhbHVlKGNvbG9yW3Bvc10pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbWF4RGlnaXQgPSBtaW4obWF4RGlnaXQsIG51bURpZ2l0cyk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbnVtRGlnaXRzKys7Ci0gICAgICAgICAgICAgICAg
ICAgIHBvcysrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aGlsZSAobnVt
RGlnaXRzKysgPCBiYXNpY0xlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NvbXBv
bmVudF0gPDw9IDQ7Ci0gICAgICAgICAgICAgICAgY29tcG9uZW50Kys7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtYXhEaWdpdCA9IGJhc2ljTGVuZ3RoIC0gbWF4RGlnaXQ7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSB0byAwMC1mZi4gVGhlIGhpZ2hlc3QgZmls
bGVkIGRpZ2l0IGNvdW50cywgbWluaW11bSBpcyAyIGRpZ2l0cwotICAgICAgICAgICAgbWF4RGln
aXQgLT0gMjsKLSAgICAgICAgICAgIGNvbG9yc1swXSA+Pj0gNCAqIG1heERpZ2l0OwotICAgICAg
ICAgICAgY29sb3JzWzFdID4+PSA0ICogbWF4RGlnaXQ7Ci0gICAgICAgICAgICBjb2xvcnNbMl0g
Pj49IDQgKiBtYXhEaWdpdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29sb3IgPSBTdHJp
bmc6OmZvcm1hdCgiIyUwMnglMDJ4JTAyeCIsIGNvbG9yc1swXSwgY29sb3JzWzFdLCBjb2xvcnNb
Ml0pOwotICAgICAgICAgICAgaWYgKGF0dHItPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIGNvbG9y
LCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgLy8gU3Bs
aXQgdGhlIGRpZ2l0cyBpbnRvIHRocmVlIGNvbXBvbmVudHMsIHRoZW4gc2VhcmNoIHRoZSBsYXN0
IDggZGlnaXRzIG9mIGVhY2ggY29tcG9uZW50LgorICAgIEFTU0VSVChjb2xvci5sZW5ndGgoKSA+
PSA2KTsKKyAgICBzaXplX3QgY29tcG9uZW50TGVuZ3RoID0gY29sb3IubGVuZ3RoKCkgLyAzOwor
ICAgIGludCBjb21wb25lbnRTZWFyY2hXaW5kb3dTaXplID0gbWluPHNpemVfdD4oY29tcG9uZW50
TGVuZ3RoLCA4KTsKKyAgICBzaXplX3QgcmVkSW5kZXggPSBjb21wb25lbnRMZW5ndGggLSBjb21w
b25lbnRTZWFyY2hXaW5kb3dTaXplOworICAgIHNpemVfdCBncmVlbkluZGV4ID0gY29tcG9uZW50
TGVuZ3RoICogMiAtIGNvbXBvbmVudFNlYXJjaFdpbmRvd1NpemU7CisgICAgc2l6ZV90IGJsdWVJ
bmRleCA9IGNvbG9yLmxlbmd0aCgpIC0gY29tcG9uZW50U2VhcmNoV2luZG93U2l6ZTsKKyAgICAv
LyBTa2lwIGRpZ2l0cyB1bnRpbCBvbmUgb2YgdGhlbSBpcyBub24temVybywgb3IgeW91J3ZlIG9u
bHkgZ290IHR3byBsZWZ0IGluIHRoZSBjb21wb25lbnQuCisgICAgd2hpbGUgKGNvbG9yW3JlZElu
ZGV4XSA9PSAnMCcgJiYgY29sb3JbZ3JlZW5JbmRleF0gPT0gJzAnICYmIGNvbG9yW2JsdWVJbmRl
eF0gPT0gJzAnICYmIChjb21wb25lbnRMZW5ndGggLSByZWRJbmRleCkgPiAyKSB7CisgICAgICAg
IHJlZEluZGV4Kys7CisgICAgICAgIGdyZWVuSW5kZXgrKzsKKyAgICAgICAgYmx1ZUluZGV4Kys7
CiAgICAgfQotICAgIGF0dHItPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIENTU1ZhbHVlQmxhY2ss
IGZhbHNlKTsKKyAgICBBU1NFUlQocmVkSW5kZXggPj0gMCk7CisgICAgQVNTRVJUKHJlZEluZGV4
ICsgMSA8IGNvbXBvbmVudExlbmd0aCk7CisgICAgQVNTRVJUKGdyZWVuSW5kZXggPj0gY29tcG9u
ZW50TGVuZ3RoKTsKKyAgICBBU1NFUlQoZ3JlZW5JbmRleCArIDEgPCBjb21wb25lbnRMZW5ndGgg
KiAyKTsKKyAgICBBU1NFUlQoYmx1ZUluZGV4ID49IGNvbXBvbmVudExlbmd0aCAqIDIpOworICAg
IEFTU0VSVChibHVlSW5kZXggPCBjb2xvci5sZW5ndGgoKSk7CisgICAgYXR0ci0+ZGVjbCgpLT5z
ZXRQcm9wZXJ0eShpZCwgIiMiICsgY29sb3Iuc3Vic3RyaW5nKHJlZEluZGV4LCAyKSArIGNvbG9y
LnN1YnN0cmluZyhncmVlbkluZGV4LCAyKSArIGNvbG9yLnN1YnN0cmluZyhibHVlSW5kZXgsIDIp
KTsKIH0KIAogdm9pZCBTdHlsZWRFbGVtZW50OjpjcmVhdGVNYXBwZWREZWNsKEF0dHJpYnV0ZSog
YXR0cikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98373</attachid>
            <date>2011-06-23 10:56:15 -0700</date>
            <delta_ts>2011-06-23 16:41:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63029-20110623105614.patch</filename>
            <type>text/plain</type>
            <size>15388</size>
            <attacher name="Tab Atkins">tabatkins</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg5MDcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1NzExMGNmNTllN2E2YmFjYjZkYTkx
MWVjNzY1MjBkOGFjZTFkNDFjLi41NjQ0MTBlYjJhMmJmZTczYTM2MGZmYWQ1MTI0ZTQ2MWE4YjY0
NTlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDYtMjAgIFRhYiBBdGtpbnMgIDxqYWNr
YWxtYWdlQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGaXggbGVnYWN5IGNvbG9yIGF0dHJpYnV0ZSBwYXJzaW5nIHRvIG1hdGNoIEhU
TUwgc3BlYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjMwMjkKKworICAgICAgICBUZXN0cyA8Ym9keSBiZ2NvbG9yPiBwYXJzaW5nLgorCisgICAgICAg
ICogZmFzdC9kb20vYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9zY3JpcHQtdGVzdHMvYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMu
anM6IEFkZGVkLgorCiAyMDExLTA2LTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFNraXAgZWRpdGluZy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0
Lmh0bWwgYWRkZWQgYnkgcjg4ODkwIG9uIE1hYyBXZWJLaXQyCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uN2YyMWE0MzYzZmExOWMxOTlhZmMwNjE0Mzk5Y2UzM2Q3MjAyN2I4NgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3Jz
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQwIEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGxl
Z2FjeSBjb2xvciBhdHRyaWJ1dGVzIGFyZSBwYXJzZWQgcHJvcGVybHkuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nJztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYmEoMCwgMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0ndHJhbnNwYXJlbnQnO2dldENvbXB1
dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiYSgwLCAwLCAw
LCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSdyZWQnO2dldENvbXB1dGVkU3R5bGUo
ZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDI1NSwgMCwgMCknCitQQVNT
IGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nI2YwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5i
b2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMjU1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQu
Ym9keS5iZ0NvbG9yPScjZmYwMDAwJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJh
Y2tncm91bmRDb2xvcjsgaXMgJ3JnYigyNTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJn
Q29sb3I9J2YwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29s
b3I7IGlzICdyZ2IoMTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2ZmMDAw
MCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdy
Z2IoMjU1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjMDAwMDAwMDAnO2dl
dENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDAs
IDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2Zvbyc7Z2V0Q29tcHV0ZWRTdHls
ZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTUsIDAsIDApJworUEFT
UyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2NoZWVzZSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVu
dC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTkyLCAyMzgsIDE0KScKK1BBU1MgZG9j
dW1lbnQuYm9keS5iZ0NvbG9yPSdyZ2IoMjU1LCAwLCAwKSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1
bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMCwgODUsIDApJworUEFTUyBkb2N1
bWVudC5ib2R5LmJnQ29sb3I9JzU1MDAwMDAwMTE1NTAwMDAwMDExNTUwMDAwMDAxMSc7Z2V0Q29t
cHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTcsIDE3
LCAxNyknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTUwMDIwMDAxMTU1MDAwMDAwMTE1
NTAwMDAwMDExJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xv
cjsgaXMgJ3JnYigzMiwgMCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIyc7Z2V0
Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzUnO2dldENvbXB1dGVkU3R5bGUo
ZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDUsIDAsIDApJworUEFTUyBk
b2N1bWVudC5ib2R5LmJnQ29sb3I9JyM1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5
KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoNSwgNSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHku
YmdDb2xvcj0nIzU1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IGlzICdyZ2IoODUsIDg1LCA4NSknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0n
IzU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBp
cyAncmdiKDg1LCA4NSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzU1NTU1Jztn
ZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4
NSwgODUsIDgwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNTU1NTU1JztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUs
IDg1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNTU1NTU1NSc7Z2V0Q29tcHV0ZWRT
dHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoODUsIDg1LCA4MCkn
CitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzU1NTU1NTU1JztnZXRDb21wdXRlZFN0eWxl
KGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDg1KScKK1BB
U1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJv
ZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9k
eS5iZ0NvbG9yPSc1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IGlzICdyZ2IoNSwgNSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTU1
JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3Jn
Yig1LCA1LCA1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTU1JztnZXRDb21wdXRl
ZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDAp
JworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzU1NTU1JztnZXRDb21wdXRlZFN0eWxlKGRv
Y3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDgwKScKK1BBU1Mg
ZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQu
Ym9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4NSwgODUpJworUEFTUyBkb2N1bWVu
dC5ib2R5LmJnQ29sb3I9JzU1NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSku
YmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4NSwgODApJworUEFTUyBkb2N1bWVudC5ib2R5
LmJnQ29sb3I9JzU1NTU1NTU1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tn
cm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDg1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0Nv
bG9yPScgZmZmZmZmICc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IGlzICdyZ2IoMjU1LCAyNTUsIDI1NSknCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9k
b20vYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2F0
dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNhMzJlNjlhMWEzYWNjM2I1
NGJlM2YzOTUzMTU1M2Y0ZTZhMjhlMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxw
IGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3Njcmlw
dC10ZXN0cy9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NjcmlwdC10ZXN0cy9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjA2
NDcwNGUxZTAzNDFhZjcxMzAzNjQ2Y2I1NmYwN2U0ZTAwMDE2Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LXRlc3RzL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3Jz
LmpzCkBAIC0wLDAgKzEsNDQgQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyB0aGF0
IGxlZ2FjeSBjb2xvciBhdHRyaWJ1dGVzIGFyZSBwYXJzZWQgcHJvcGVybHkuIik7CisKK3Nob3Vs
ZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29sb3I9Jyc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5i
b2R5KS5iYWNrZ3JvdW5kQ29sb3I7IiwgIidyZ2JhKDAsIDAsIDAsIDApJyIpOworc2hvdWxkQmUo
ImRvY3VtZW50LmJvZHkuYmdDb2xvcj0ndHJhbnNwYXJlbnQnO2dldENvbXB1dGVkU3R5bGUoZG9j
dW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyIsICIncmdiYSgwLCAwLCAwLCAwKSciKTsKKyhm
dW5jdGlvbigpewordmFyIHRlc3RzID0gWworCXsndGVzdCc6J3JlZCcsICdleHBlY3RlZCc6WzI1
NSwgMCwgMF19LAorCXsndGVzdCc6JyNmMDAnLCAnZXhwZWN0ZWQnOlsyNTUsIDAsIDBdfSwKKwl7
J3Rlc3QnOicjZmYwMDAwJywgJ2V4cGVjdGVkJzpbMjU1LCAwLCAwXX0sCisJeyd0ZXN0JzonZjAw
JywgJ2V4cGVjdGVkJzpbMTUsIDAsIDBdfSwKKwl7J3Rlc3QnOidmZjAwMDAnLCAnZXhwZWN0ZWQn
OlsyNTUsIDAsIDBdfSwKKwl7J3Rlc3QnOicjMDAwMDAwMDAnLCAnZXhwZWN0ZWQnOlswLCAwLCAw
XX0sCisJeyd0ZXN0JzonZm9vJywgJ2V4cGVjdGVkJzpbMTUsIDAsIDBdfSwKKwl7J3Rlc3QnOidj
aGVlc2UnLCAnZXhwZWN0ZWQnOlsxOTIsIDIzOCwgMTRdfSwKKwl7J3Rlc3QnOidyZ2IoMjU1LCAw
LCAwKScsICdleHBlY3RlZCc6WzAsIDg1LCAwXX0sCisJeyd0ZXN0JzonNTUwMDAwMDAxMTU1MDAw
MDAwMTE1NTAwMDAwMDExJywgJ2V4cGVjdGVkJzpbMTcsIDE3LCAxN119LAorCXsndGVzdCc6JzU1
MDAyMDAwMTE1NTAwMDAwMDExNTUwMDAwMDAxMScsICdleHBlY3RlZCc6WzMyLCAwLCAwXX0sCisJ
eyd0ZXN0JzonIycsICdleHBlY3RlZCc6WzAsIDAsIDBdfSwKKwl7J3Rlc3QnOicjNScsICdleHBl
Y3RlZCc6WzUsIDAsIDBdfSwKKwl7J3Rlc3QnOicjNTUnLCAnZXhwZWN0ZWQnOls1LCA1LCAwXX0s
CisJeyd0ZXN0JzonIzU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgODVdfSwKKwl7J3Rlc3QnOicj
NTU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgMF19LAorCXsndGVzdCc6JyM1NTU1NScsICdleHBl
Y3RlZCc6Wzg1LCA4NSwgODBdfSwKKwl7J3Rlc3QnOicjNTU1NTU1JywgJ2V4cGVjdGVkJzpbODUs
IDg1LCA4NV19LAorCXsndGVzdCc6JyM1NTU1NTU1JywgJ2V4cGVjdGVkJzpbODUsIDg1LCA4MF19
LAorCXsndGVzdCc6JyM1NTU1NTU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgODVdfSwKKwl7J3Rl
c3QnOic1JywgJ2V4cGVjdGVkJzpbNSwgMCwgMF19LAorCXsndGVzdCc6JzU1JywgJ2V4cGVjdGVk
JzpbNSwgNSwgMF19LAorCXsndGVzdCc6JzU1NScsICdleHBlY3RlZCc6WzUsIDUsIDVdfSwKKwl7
J3Rlc3QnOic1NTU1JywgJ2V4cGVjdGVkJzpbODUsIDg1LCAwXX0sCisJeyd0ZXN0JzonNTU1NTUn
LCAnZXhwZWN0ZWQnOls4NSwgODUsIDgwXX0sCisJeyd0ZXN0JzonNTU1NTU1JywgJ2V4cGVjdGVk
JzpbODUsIDg1LCA4NV19LAorCXsndGVzdCc6JzU1NTU1NTUnLCAnZXhwZWN0ZWQnOls4NSwgODUs
IDgwXX0sCisJeyd0ZXN0JzonNTU1NTU1NTUnLCAnZXhwZWN0ZWQnOls4NSwgODUsIDg1XX0sCisJ
eyd0ZXN0JzonIGZmZmZmZiAnLCAnZXhwZWN0ZWQnOlsyNTUsIDI1NSwgMjU1XX0KK107CisKK2Zv
cih2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgeworCXZhciB0ID0gdGVzdHNbaV0u
dGVzdDsKKwl2YXIgZSA9IHRlc3RzW2ldLmV4cGVjdGVkOworCXNob3VsZEJlKCJkb2N1bWVudC5i
b2R5LmJnQ29sb3I9JyIgKyB0ICsgIic7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5i
YWNrZ3JvdW5kQ29sb3I7IiwgIidyZ2IoIiArIGVbMF0gKyAiLCAiICsgZVsxXSArICIsICIgKyBl
WzJdICsgIiknIik7Cit9Cit9KSgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY5OWZkMGU1ODZhNWNkOWY1MWE0
YzkyYmRjM2MwM2M0NWYyYTVhZi4uMjU2NjZkNTU1NGRlMTc1Nzk1N2VjZmU1YWI1ZGRiYWFmZjk2
OGNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTA2LTIwICBUYWIgQXRraW5z
ICA8amFja2FsbWFnZUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRml4IGxlZ2FjeSBjb2xvciBhdHRyaWJ1dGUgcGFyc2luZyB0byBt
YXRjaCBIVE1MIHNwZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYzMDI5CisKKyAgICAgICAgUmVsZXZhbnQgc3BlYyBsaW5rOiBodHRwOi8vd3d3Lndo
YXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL2NvbXBsZXRlL2NvbW1vbi1taWNy
b3N5bnRheGVzLmh0bWwjcnVsZXMtZm9yLXBhcnNpbmctYS1sZWdhY3ktY29sb3ItdmFsdWUKKyAg
ICAgICAgRml4IGxlZ2FjeSBjb2xvciBhdHRyaWJ1dGUgcGFyc2luZyAoPGJvZHkgYmdjb2xvcj4s
IDxmb250IGNvbG9yPiwgZXRjLikgdG8gbWF0Y2ggdGhlIEhUTUwgc3BlYyBhbmQgbW9yZSBjbG9z
ZWx5IG1hdGNoIG90aGVyIGJyb3dzZXJzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL2F0dHJp
YnV0ZS1sZWdhY3ktY29sb3JzLmh0bWwKKworICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmFkZENTU0NvbG9yKToKKwogMjAx
MS0wNi0xNCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIDxo
dHRwOi8vd2Via2l0Lm9yZy9iLzYyNjc3PiBQYXJ0IDIvMjogUmVtb3ZlIGR1cGxpY2F0ZSBoZWFk
ZXIgZW50cmllcyBpbiBXZWJDb3JlIHByb2plY3QgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVs
ZW1lbnQuY3BwCmluZGV4IGJkOTU0M2RhMDg4MzJmYjQwOGI2ZmNmODhmNTgyMzY4Njg1Y2M1MzQu
LjcwOGU5MThmODUxNjM0OGI1YzRlNGYxM2YxNWYxOGFiOTU4OWQ1NmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU3R5bGVkRWxlbWVudC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDU1NTdHls
ZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNsYXNzTGlzdC5o
IgogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkRPTVRva2Vu
TGlzdC5oIgpAQCAtMzE3LDc3ICszMTgsODUgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjphZGRDU1NM
ZW5ndGgoQXR0cmlidXRlKiBhdHRyLCBpbnQgaWQsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiAgICAg
YXR0ci0+ZGVjbCgpLT5zZXRMZW5ndGhQcm9wZXJ0eShpZCwgdmFsdWUsIGZhbHNlKTsKIH0KIAot
LyogY29sb3IgcGFyc2luZyB0aGF0IHRyaWVzIHRvIG1hdGNoIGFzIGNsb3NlIGFzIHBvc3NpYmxl
IElFIDYuICovCi12b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZENTU0NvbG9yKEF0dHJpYnV0ZSogYXR0
ciwgaW50IGlkLCBjb25zdCBTdHJpbmcmIGMpCisvLyBjb2xvciBwYXJzaW5nIHRoYXQgbWF0Y2hl
cyBIVE1MJ3MgInJ1bGVzIGZvciBwYXJzaW5nIGEgbGVnYWN5IGNvbG9yIHZhbHVlIgordm9pZCBT
dHlsZWRFbGVtZW50OjphZGRDU1NDb2xvcihBdHRyaWJ1dGUqIGF0dHIsIGludCBpZCwgY29uc3Qg
U3RyaW5nJiBhdHRyVmFsdWUpCiB7Ci0gICAgLy8gdGhpcyBpcyB0aGUgb25seSBjYXNlIG5vIGNv
bG9yIGdldHMgYXBwbGllZCBpbiBJRS4KLSAgICBpZiAoIWMubGVuZ3RoKCkpCisgICAgLy8gVGhl
c2UgdHdvIGNhc2VzIGRvbid0IGFwcGx5IGFueSBjb2xvci4KKyAgICBpZiAoIWF0dHJWYWx1ZS5s
ZW5ndGgoKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShhdHRyVmFsdWUsICJ0cmFuc3BhcmVudCIpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWF0dHItPmRlY2woKSkKICAgICAgICAgY3JlYXRl
TWFwcGVkRGVjbChhdHRyKTsKICAgICAKLSAgICBpZiAoYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0
eShpZCwgYywgZmFsc2UpKQorICAgIFN0cmluZyBjb2xvciA9IGF0dHJWYWx1ZS5zdHJpcFdoaXRl
U3BhY2UoKTsKKworICAgIC8vIENoZWNrIGlmIHRoZSBzdHJpbmcgaXMgYSBuYW1lZCBjb2xvci4K
KyAgICBDb2xvciBmb3VuZENvbG9yOworICAgIGZvdW5kQ29sb3Iuc2V0TmFtZWRDb2xvcihjb2xv
cik7CisgICAgaWYgKGZvdW5kQ29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGF0dHItPmRlY2wo
KS0+c2V0UHJvcGVydHkoaWQsIGNvbG9yLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBDaGVjayBpZiB0aGUgc3RyaW5nIGlzIGEgMy1kaWdpdCBoZXggY29sb3IuCisg
ICAgaWYgKGNvbG9yWzBdID09ICcjJyAmJiBjb2xvci5sZW5ndGgoKSA9PSA0ICYmIGF0dHItPmRl
Y2woKS0+c2V0UHJvcGVydHkoaWQsIGNvbG9yLCBmYWxzZSkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBjcmF6eSBsZWdhY3kgcGFyc2luZyBydWxlcy4KKyAg
ICAvLyBGaXJzdCwgZml4dXAhCisgICAgLy8gUmVzZXJ2ZSAxMjggcm91bmRlZCB0byBuZWFyZXN0
IG11bHRpcGxlIG9mIDMKKyAgICBWZWN0b3I8VUNoYXIsIDEyOT4gY2hhcnM7CisgICAgc2l6ZV90
IGNvbG9yUG9zID0gMDsKKyAgICAvLyBEcm9wIGEgbGVhZGluZyAjLgorICAgIGlmIChjb2xvclsw
XSA9PSAnIycpCisgICAgICAgIGNvbG9yUG9zID0gMTsKKyAgICAvLyBHcmFiIHRoZSBmaXJzdCAx
MjggY2hhcnMsIHJlcGxhY2luZyBub24taGV4IGNoYXJzIHdpdGggMAorICAgIGZvciAoOyBjb2xv
clBvcyA8IGNvbG9yLmxlbmd0aCgpICYmIGNoYXJzLnNpemUoKSA8IDEyODsgY29sb3JQb3MrKykg
eworICAgICAgICAvLyBGSVhNRTogUmVwbGFjZSBhbGwgbm9uLUJNUCBjaGFyYWN0ZXJzIGluIGNv
bG9yIHdpdGggIjAwIi4KKyAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoY29sb3JbY29sb3JQ
b3NdKSkKKyAgICAgICAgICAgIGNoYXJzLmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oJzAnKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNoYXJzLmFwcGVuZChjb2xvcltjb2xvclBvc10p
OworICAgIH0KKyAgICBpZiAoY2hhcnMuc2l6ZSgpICUgMyA9PSAyKQorICAgICAgICBjaGFycy5h
cHBlbmQoJzAnKTsKKyAgICBlbHNlIGlmIChjaGFycy5zaXplKCkgJSAzID09IDEpIHsKKyAgICAg
ICAgY2hhcnMuYXBwZW5kKCcwJyk7CisgICAgICAgIGNoYXJzLmFwcGVuZCgnMCcpOworICAgIH0K
KworICAgIGlmICghY2hhcnMuc2l6ZSgpKSB7CisgICAgICAgIGF0dHItPmRlY2woKS0+c2V0UHJv
cGVydHkoaWQsICIjMDAwMDAwIiwgZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGNoYXJzLnNpemUoKSA9PSAzKSB7CisgICAgICAgIGNvbG9yID0gU3RyaW5nOjpmb3Jt
YXQoIiMwJWMwJWMwJWMiLCAoY2hhciljaGFyc1swXSwgKGNoYXIpY2hhcnNbMV0sIChjaGFyKWNo
YXJzWzJdKTsKKyAgICAgICAgYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwgY29sb3IsIGZh
bHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKLSAgICBTdHJpbmcgY29sb3IgPSBj
OwotICAgIC8vIG5vdCBzb21ldGhpbmcgdGhhdCBmaXRzIHRoZSBzcGVjcy4KLSAgICAKLSAgICAv
LyB3ZSdyZSBlbXVsYXRpbmcgSUVzIGNvbG9yIHBhcnNlciBoZXJlLiBJdCBtYXBzIHRyYW5zcGFy
ZW50IHRvIGJsYWNrLCBvdGhlcndpc2UgaXQgdHJpZXMgdG8gYnVpbGQgYSByZ2IgdmFsdWUKLSAg
ICAvLyBvdXQgb2YgZXZlcnl0aGluZyB5b3UgcHV0IGluLiBUaGUgYWxnb3JpdGhtIGlzIGV4cGVy
aW1lbnRhbGx5IGRldGVybWluZWQsIGJ1dCBzZWVtcyB0byB3b3JrIGZvciBhbGwgdGVzdCBjYXNl
cyBJIGhhdmUuCi0gICAgCi0gICAgLy8gdGhlIGxlbmd0aCBvZiB0aGUgY29sb3IgdmFsdWUgaXMg
cm91bmRlZCB1cCB0byB0aGUgbmV4dAotICAgIC8vIG11bHRpcGxlIG9mIDMuIGVhY2ggcGFydCBv
ZiB0aGUgcmdiIHRyaXBsZSB0aGVuIGdldHMgb25lIHRoaXJkCi0gICAgLy8gb2YgdGhlIGxlbmd0
aC4KLSAgICAvLwotICAgIC8vIEVhY2ggdHJpcGxldCBpcyBwYXJzZWQgYnl0ZSBieSBieXRlLCBt
YXBwaW5nCi0gICAgLy8gZWFjaCBudW1iZXIgdG8gYSBoZXggdmFsdWUgKDAtOWEtZkEtRiB0byB0
aGVpciB2YWx1ZXMKLSAgICAvLyBldmVyeXRoaW5nIGVsc2UgdG8gMCkuCi0gICAgLy8KLSAgICAv
LyBUaGUgaGlnaGVzdCBub24gemVybyBkaWdpdCBpbiBhbGwgdHJpcGxldHMgaXMgcmVtZW1iZXJl
ZCwgYW5kCi0gICAgLy8gdXNlZCBhcyBhIG5vcm1hbGl6YXRpb24gcG9pbnQgdG8gbm9ybWFsaXpl
IHRvIHZhbHVlcyBiZXR3ZWVuIDAKLSAgICAvLyBhbmQgMjU1LgotICAgIAotICAgIGlmICghZXF1
YWxJZ25vcmluZ0Nhc2UoY29sb3IsICJ0cmFuc3BhcmVudCIpKSB7Ci0gICAgICAgIGlmIChjb2xv
clswXSA9PSAnIycpCi0gICAgICAgICAgICBjb2xvci5yZW1vdmUoMCwgMSk7Ci0gICAgICAgIGlu
dCBiYXNpY0xlbmd0aCA9IChjb2xvci5sZW5ndGgoKSArIDIpIC8gMzsKLSAgICAgICAgaWYgKGJh
c2ljTGVuZ3RoID4gMSkgewotICAgICAgICAgICAgLy8gSUUgaWdub3JlcyBjb2xvcnMgd2l0aCB0
aHJlZSBkaWdpdHMgb3IgbGVzcwotICAgICAgICAgICAgaW50IGNvbG9yc1szXSA9IHsgMCwgMCwg
MCB9OwotICAgICAgICAgICAgaW50IGNvbXBvbmVudCA9IDA7Ci0gICAgICAgICAgICBpbnQgcG9z
ID0gMDsKLSAgICAgICAgICAgIGludCBtYXhEaWdpdCA9IGJhc2ljTGVuZ3RoLTE7Ci0gICAgICAg
ICAgICB3aGlsZSAoY29tcG9uZW50IDwgMykgewotICAgICAgICAgICAgICAgIC8vIHNlYXJjaCBm
b3J3YXJkIGZvciBkaWdpdHMgaW4gdGhlIHN0cmluZwotICAgICAgICAgICAgICAgIGludCBudW1E
aWdpdHMgPSAwOwotICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCAoaW50KWNvbG9yLmxlbmd0
aCgpICYmIG51bURpZ2l0cyA8IGJhc2ljTGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bG9yc1tjb21wb25lbnRdIDw8PSA0OwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSUhl
eERpZ2l0KGNvbG9yW3Bvc10pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY29t
cG9uZW50XSArPSB0b0FTQ0lJSGV4VmFsdWUoY29sb3JbcG9zXSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtYXhEaWdpdCA9IG1pbihtYXhEaWdpdCwgbnVtRGlnaXRzKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBudW1EaWdpdHMrKzsKLSAgICAgICAgICAg
ICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdoaWxl
IChudW1EaWdpdHMrKyA8IGJhc2ljTGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBjb2xvcnNb
Y29tcG9uZW50XSA8PD0gNDsKLSAgICAgICAgICAgICAgICBjb21wb25lbnQrKzsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1heERpZ2l0ID0gYmFzaWNMZW5ndGggLSBtYXhEaWdpdDsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgLy8gbm9ybWFsaXplIHRvIDAwLWZmLiBUaGUgaGlnaGVz
dCBmaWxsZWQgZGlnaXQgY291bnRzLCBtaW5pbXVtIGlzIDIgZGlnaXRzCi0gICAgICAgICAgICBt
YXhEaWdpdCAtPSAyOwotICAgICAgICAgICAgY29sb3JzWzBdID4+PSA0ICogbWF4RGlnaXQ7Ci0g
ICAgICAgICAgICBjb2xvcnNbMV0gPj49IDQgKiBtYXhEaWdpdDsKLSAgICAgICAgICAgIGNvbG9y
c1syXSA+Pj0gNCAqIG1heERpZ2l0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb2xvciA9
IFN0cmluZzo6Zm9ybWF0KCIjJTAyeCUwMnglMDJ4IiwgY29sb3JzWzBdLCBjb2xvcnNbMV0sIGNv
bG9yc1syXSk7Ci0gICAgICAgICAgICBpZiAoYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwg
Y29sb3IsIGZhbHNlKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAv
LyBTcGxpdCB0aGUgZGlnaXRzIGludG8gdGhyZWUgY29tcG9uZW50cywgdGhlbiBzZWFyY2ggdGhl
IGxhc3QgOCBkaWdpdHMgb2YgZWFjaCBjb21wb25lbnQuCisgICAgQVNTRVJUKGNoYXJzLnNpemUo
KSA+PSA2KTsKKyAgICBzaXplX3QgY29tcG9uZW50TGVuZ3RoID0gY2hhcnMuc2l6ZSgpIC8gMzsK
KyAgICBpbnQgY29tcG9uZW50U2VhcmNoV2luZG93U2l6ZSA9IG1pbjxzaXplX3Q+KGNvbXBvbmVu
dExlbmd0aCwgOCk7CisgICAgc2l6ZV90IHJlZEluZGV4ID0gY29tcG9uZW50TGVuZ3RoIC0gY29t
cG9uZW50U2VhcmNoV2luZG93U2l6ZTsKKyAgICBzaXplX3QgZ3JlZW5JbmRleCA9IGNvbXBvbmVu
dExlbmd0aCAqIDIgLSBjb21wb25lbnRTZWFyY2hXaW5kb3dTaXplOworICAgIHNpemVfdCBibHVl
SW5kZXggPSBjaGFycy5zaXplKCkgLSBjb21wb25lbnRTZWFyY2hXaW5kb3dTaXplOworICAgIC8v
IFNraXAgZGlnaXRzIHVudGlsIG9uZSBvZiB0aGVtIGlzIG5vbi16ZXJvLCBvciB5b3UndmUgb25s
eSBnb3QgdHdvIGxlZnQgaW4gdGhlIGNvbXBvbmVudC4KKyAgICB3aGlsZSAoY29sb3JbcmVkSW5k
ZXhdID09ICcwJyAmJiBjb2xvcltncmVlbkluZGV4XSA9PSAnMCcgJiYgY29sb3JbYmx1ZUluZGV4
XSA9PSAnMCcgJiYgKGNvbXBvbmVudExlbmd0aCAtIHJlZEluZGV4KSA+IDIpIHsKKyAgICAgICAg
cmVkSW5kZXgrKzsKKyAgICAgICAgZ3JlZW5JbmRleCsrOworICAgICAgICBibHVlSW5kZXgrKzsK
ICAgICB9Ci0gICAgYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwgQ1NTVmFsdWVCbGFjaywg
ZmFsc2UpOworICAgIEFTU0VSVChyZWRJbmRleCA+PSAwKTsKKyAgICBBU1NFUlQocmVkSW5kZXgg
KyAxIDwgY29tcG9uZW50TGVuZ3RoKTsKKyAgICBBU1NFUlQoZ3JlZW5JbmRleCA+PSBjb21wb25l
bnRMZW5ndGgpOworICAgIEFTU0VSVChncmVlbkluZGV4ICsgMSA8IGNvbXBvbmVudExlbmd0aCAq
IDIpOworICAgIEFTU0VSVChibHVlSW5kZXggPj0gY29tcG9uZW50TGVuZ3RoICogMik7CisgICAg
QVNTRVJUKGJsdWVJbmRleCA8IGNoYXJzLnNpemUoKSk7CisgICAgY29sb3IgPSBTdHJpbmc6OmZv
cm1hdCgiIyVjJWMlYyVjJWMlYyIsIChjaGFyKWNoYXJzW3JlZEluZGV4XSwgKGNoYXIpY2hhcnNb
cmVkSW5kZXgrMV0sIChjaGFyKWNoYXJzW2dyZWVuSW5kZXhdLCAoY2hhciljaGFyc1tncmVlbklu
ZGV4KzFdLCAoY2hhciljaGFyc1tibHVlSW5kZXhdLCAoY2hhciljaGFyc1tibHVlSW5kZXgrMV0p
OworICAgIGF0dHItPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIGNvbG9yLCBmYWxzZSk7CiB9CiAK
IHZvaWQgU3R5bGVkRWxlbWVudDo6Y3JlYXRlTWFwcGVkRGVjbChBdHRyaWJ1dGUqIGF0dHIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98432</attachid>
            <date>2011-06-23 16:41:23 -0700</date>
            <delta_ts>2011-06-24 09:16:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63029-20110623164122.patch</filename>
            <type>text/plain</type>
            <size>16403</size>
            <attacher name="Tab Atkins">tabatkins</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg5MDcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1NzExMGNmNTllN2E2YmFjYjZkYTkx
MWVjNzY1MjBkOGFjZTFkNDFjLi41NjQ0MTBlYjJhMmJmZTczYTM2MGZmYWQ1MTI0ZTQ2MWE4YjY0
NTlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDYtMjAgIFRhYiBBdGtpbnMgIDxqYWNr
YWxtYWdlQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGaXggbGVnYWN5IGNvbG9yIGF0dHJpYnV0ZSBwYXJzaW5nIHRvIG1hdGNoIEhU
TUwgc3BlYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjMwMjkKKworICAgICAgICBUZXN0cyA8Ym9keSBiZ2NvbG9yPiBwYXJzaW5nLgorCisgICAgICAg
ICogZmFzdC9kb20vYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9zY3JpcHQtdGVzdHMvYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMu
anM6IEFkZGVkLgorCiAyMDExLTA2LTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFNraXAgZWRpdGluZy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0
Lmh0bWwgYWRkZWQgYnkgcjg4ODkwIG9uIE1hYyBXZWJLaXQyCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzllMmE4NmY1YTdmNWIwMGE1MjNjMGIzOWU4MTBhNDhmMjk1YjQxNgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3Jz
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDQ0IEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGxl
Z2FjeSBjb2xvciBhdHRyaWJ1dGVzIGFyZSBwYXJzZWQgcHJvcGVybHkuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nJztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYmEoMCwgMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0ndHJhbnNwYXJlbnQnO2dldENvbXB1
dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiYSgwLCAwLCAw
LCAwKScKK0ZBSUwgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScgdHJhbnNwYXJlbnQgJztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgc2hvdWxkIGJlIHJnYmEo
MCwgMCwgMCwgMCkuIFdhcyByZ2IoMCwgMCwgMCkuCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xv
cj0ncmVkJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsg
aXMgJ3JnYigyNTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JyNmMDAnO2dl
dENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDI1
NSwgMCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nI2ZmMDAwMCc7Z2V0Q29tcHV0
ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMjU1LCAwLCAw
KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSdmMDAnO2dldENvbXB1dGVkU3R5bGUoZG9j
dW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDE1LCAwLCAwKScKK1BBU1MgZG9j
dW1lbnQuYm9keS5iZ0NvbG9yPSdmZjAwMDAnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9k
eSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDI1NSwgMCwgMCknCitQQVNTIGRvY3VtZW50LmJv
ZHkuYmdDb2xvcj0nIzAwMDAwMDAwJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJh
Y2tncm91bmRDb2xvcjsgaXMgJ3JnYigwLCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0Nv
bG9yPSdmb28nO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9y
OyBpcyAncmdiKDE1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSdjaGVlc2Un
O2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdi
KDE5MiwgMjM4LCAxNCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nZmbygL+/ZmYnO2dl
dENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDI1
NSwgMCwgMjU1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSdm8oC/v2YnO2dldENvbXB1
dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDI0MCwgMTUs
IDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J3JnYigyNTUsIDAsIDApJztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYigwLCA4NSwg
MCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTUwMDAwMDAxMTU1MDAwMDAwMTE1NTAw
MDAwMDExJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsg
aXMgJ3JnYigxNywgMTcsIDE3KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTAwMjAw
MDExNTUwMDAwMDAxMTU1MDAwMDAwMTEnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSku
YmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDMyLCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5i
Z0NvbG9yPScjJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xv
cjsgaXMgJ3JnYigwLCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNSc7Z2V0
Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoNSwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzU1JztnZXRDb21wdXRlZFN0eWxl
KGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig1LCA1LCAwKScKK1BBU1Mg
ZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNTU1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJv
ZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDg1KScKK1BBU1MgZG9jdW1lbnQu
Ym9keS5iZ0NvbG9yPScjNTU1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNr
Z3JvdW5kQ29sb3I7IGlzICdyZ2IoODUsIDg1LCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0Nv
bG9yPScjNTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENv
bG9yOyBpcyAncmdiKDg1LCA4NSwgODApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JyM1
NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBp
cyAncmdiKDg1LCA4NSwgODUpJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JyM1NTU1NTU1
JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3Jn
Yig4NSwgODUsIDgwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNTU1NTU1NTUnO2dl
dENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1
LCA4NSwgODUpJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzUnO2dldENvbXB1dGVkU3R5
bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDUsIDAsIDApJworUEFT
UyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzU1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJv
ZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig1LCA1LCAwKScKK1BBU1MgZG9jdW1lbnQuYm9k
eS5iZ0NvbG9yPSc1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3Vu
ZENvbG9yOyBpcyAncmdiKDUsIDUsIDUpJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzU1
NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAn
cmdiKDg1LCA4NSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTU1NTUnO2dldENv
bXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4
NSwgODApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzU1NTU1NSc7Z2V0Q29tcHV0ZWRT
dHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoODUsIDg1LCA4NSkn
CitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTU1NTU1NSc7Z2V0Q29tcHV0ZWRTdHlsZShk
b2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoODUsIDg1LCA4MCknCitQQVNT
IGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTU1NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1l
bnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4NSwgODUpJworUEFTUyBkb2N1
bWVudC5ib2R5LmJnQ29sb3I9JyAnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFj
a2dyb3VuZENvbG9yOyBpcyAncmdiKDAsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29s
b3I9JyBmZmZmZmYgJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRD
b2xvcjsgaXMgJ3JnYigyNTUsIDI1NSwgMjU1KScKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vYXR0
cmlidXRlLWxlZ2FjeS1jb2xvcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NGEyYWFiNDE1Yjk1ZGE5NGJm
MGEzMDZlNzI2MmNmZjg0YjQ1YzYxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMuaHRtbApAQCAtMCwwICsxLDggQEAKKzwhRE9D
VFlQRSBIVE1MPgorPG1ldGEgY2hhcnNldD11dGY4PgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8cCBpZD0iZGVzY3JpcHRp
b24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LXRl
c3RzL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2Ny
aXB0LXRlc3RzL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwZjQxNTI1
NmJlNTY4OGRlNTA5YTQ0YzkzZGExMDJhYWY5MWI1MGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9zY3JpcHQtdGVzdHMvYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMuanMK
QEAgLTAsMCArMSw0OCBAQAorZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgbGVn
YWN5IGNvbG9yIGF0dHJpYnV0ZXMgYXJlIHBhcnNlZCBwcm9wZXJseS4iKTsKKworc2hvdWxkQmUo
ImRvY3VtZW50LmJvZHkuYmdDb2xvcj0nJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkp
LmJhY2tncm91bmRDb2xvcjsiLCAiJ3JnYmEoMCwgMCwgMCwgMCknIik7CitzaG91bGRCZSgiZG9j
dW1lbnQuYm9keS5iZ0NvbG9yPSd0cmFuc3BhcmVudCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVu
dC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IiwgIidyZ2JhKDAsIDAsIDAsIDApJyIpOworc2hvdWxk
QmUoImRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIHRyYW5zcGFyZW50ICc7Z2V0Q29tcHV0ZWRTdHls
ZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IiwgIidyZ2JhKDAsIDAsIDAsIDApJyIp
OworKGZ1bmN0aW9uKCl7Cit2YXIgdGVzdHMgPSBbCisJeyd0ZXN0JzoncmVkJywgJ2V4cGVjdGVk
JzpbMjU1LCAwLCAwXX0sCisJeyd0ZXN0JzonI2YwMCcsICdleHBlY3RlZCc6WzI1NSwgMCwgMF19
LAorCXsndGVzdCc6JyNmZjAwMDAnLCAnZXhwZWN0ZWQnOlsyNTUsIDAsIDBdfSwKKwl7J3Rlc3Qn
OidmMDAnLCAnZXhwZWN0ZWQnOlsxNSwgMCwgMF19LAorCXsndGVzdCc6J2ZmMDAwMCcsICdleHBl
Y3RlZCc6WzI1NSwgMCwgMF19LAorCXsndGVzdCc6JyMwMDAwMDAwMCcsICdleHBlY3RlZCc6WzAs
IDAsIDBdfSwKKwl7J3Rlc3QnOidmb28nLCAnZXhwZWN0ZWQnOlsxNSwgMCwgMF19LAorCXsndGVz
dCc6J2NoZWVzZScsICdleHBlY3RlZCc6WzE5MiwgMjM4LCAxNF19LAorCXsndGVzdCc6J2Zm8oC/
v2ZmJywgJ2V4cGVjdGVkJzpbMjU1LCAwLCAyNTVdfSwKKwl7J3Rlc3QnOidm8oC/v2YnLCAnZXhw
ZWN0ZWQnOlsyNDAsIDE1LCAwXX0sCisJeyd0ZXN0JzoncmdiKDI1NSwgMCwgMCknLCAnZXhwZWN0
ZWQnOlswLCA4NSwgMF19LAorCXsndGVzdCc6JzU1MDAwMDAwMTE1NTAwMDAwMDExNTUwMDAwMDAx
MScsICdleHBlY3RlZCc6WzE3LCAxNywgMTddfSwKKwl7J3Rlc3QnOic1NTAwMjAwMDExNTUwMDAw
MDAxMTU1MDAwMDAwMTEnLCAnZXhwZWN0ZWQnOlszMiwgMCwgMF19LAorCXsndGVzdCc6JyMnLCAn
ZXhwZWN0ZWQnOlswLCAwLCAwXX0sCisJeyd0ZXN0JzonIzUnLCAnZXhwZWN0ZWQnOls1LCAwLCAw
XX0sCisJeyd0ZXN0JzonIzU1JywgJ2V4cGVjdGVkJzpbNSwgNSwgMF19LAorCXsndGVzdCc6JyM1
NTUnLCAnZXhwZWN0ZWQnOls4NSwgODUsIDg1XX0sCisJeyd0ZXN0JzonIzU1NTUnLCAnZXhwZWN0
ZWQnOls4NSwgODUsIDBdfSwKKwl7J3Rlc3QnOicjNTU1NTUnLCAnZXhwZWN0ZWQnOls4NSwgODUs
IDgwXX0sCisJeyd0ZXN0JzonIzU1NTU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgODVdfSwKKwl7
J3Rlc3QnOicjNTU1NTU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgODBdfSwKKwl7J3Rlc3QnOicj
NTU1NTU1NTUnLCAnZXhwZWN0ZWQnOls4NSwgODUsIDg1XX0sCisJeyd0ZXN0JzonNScsICdleHBl
Y3RlZCc6WzUsIDAsIDBdfSwKKwl7J3Rlc3QnOic1NScsICdleHBlY3RlZCc6WzUsIDUsIDBdfSwK
Kwl7J3Rlc3QnOic1NTUnLCAnZXhwZWN0ZWQnOls1LCA1LCA1XX0sCisJeyd0ZXN0JzonNTU1NScs
ICdleHBlY3RlZCc6Wzg1LCA4NSwgMF19LAorCXsndGVzdCc6JzU1NTU1JywgJ2V4cGVjdGVkJzpb
ODUsIDg1LCA4MF19LAorCXsndGVzdCc6JzU1NTU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgODVd
fSwKKwl7J3Rlc3QnOic1NTU1NTU1JywgJ2V4cGVjdGVkJzpbODUsIDg1LCA4MF19LAorCXsndGVz
dCc6JzU1NTU1NTU1JywgJ2V4cGVjdGVkJzpbODUsIDg1LCA4NV19LAorCXsndGVzdCc6JyAnLCAn
ZXhwZWN0ZWQnOlswLCAwLCAwXX0sCisJeyd0ZXN0JzonIGZmZmZmZiAnLCAnZXhwZWN0ZWQnOlsy
NTUsIDI1NSwgMjU1XX0KK107CisKK2Zvcih2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkr
KykgeworCXZhciB0ID0gdGVzdHNbaV0udGVzdDsKKwl2YXIgZSA9IHRlc3RzW2ldLmV4cGVjdGVk
OworCXNob3VsZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29sb3I9JyIgKyB0ICsgIic7Z2V0Q29tcHV0
ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IiwgIidyZ2IoIiArIGVbMF0g
KyAiLCAiICsgZVsxXSArICIsICIgKyBlWzJdICsgIiknIik7Cit9Cit9KSgpOworc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gdHJ1ZTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggMjY5OWZkMGU1ODZhNWNkOWY1MWE0YzkyYmRjM2MwM2M0NWYyYTVhZi4uMjU2NjZkNTU1NGRl
MTc1Nzk1N2VjZmU1YWI1ZGRiYWFmZjk2OGNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBA
CisyMDExLTA2LTIwICBUYWIgQXRraW5zICA8amFja2FsbWFnZUBnbWFpbC5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGxlZ2FjeSBjb2xv
ciBhdHRyaWJ1dGUgcGFyc2luZyB0byBtYXRjaCBIVE1MIHNwZWMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMDI5CisKKyAgICAgICAgUmVsZXZhbnQg
c3BlYyBsaW5rOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13
b3JrL2NvbXBsZXRlL2NvbW1vbi1taWNyb3N5bnRheGVzLmh0bWwjcnVsZXMtZm9yLXBhcnNpbmct
YS1sZWdhY3ktY29sb3ItdmFsdWUKKyAgICAgICAgRml4IGxlZ2FjeSBjb2xvciBhdHRyaWJ1dGUg
cGFyc2luZyAoPGJvZHkgYmdjb2xvcj4sIDxmb250IGNvbG9yPiwgZXRjLikgdG8gbWF0Y2ggdGhl
IEhUTUwgc3BlYyBhbmQgbW9yZSBjbG9zZWx5IG1hdGNoIG90aGVyIGJyb3dzZXJzLgorCisgICAg
ICAgIFRlc3Q6IGZhc3QvZG9tL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmh0bWwKKworICAgICAg
ICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1l
bnQ6OmFkZENTU0NvbG9yKToKKwogMjAxMS0wNi0xNCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIDxodHRwOi8vd2Via2l0Lm9yZy9iLzYyNjc3PiBQYXJ0IDIv
MjogUmVtb3ZlIGR1cGxpY2F0ZSBoZWFkZXIgZW50cmllcyBpbiBXZWJDb3JlIHByb2plY3QgZmls
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCmluZGV4IGJkOTU0M2RhMDg4MzJmYjQw
OGI2ZmNmODhmNTgyMzY4Njg1Y2M1MzQuLjFlOTkzODc4YWE3MTExOWE0MDE2ZWY5YThhZTkwOWJi
MzcxMWU4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVT
aGVldC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDb2xvci5o
IgogI2luY2x1ZGUgIkNsYXNzTGlzdC5oIgogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGlj
eS5oIgogI2luY2x1ZGUgIkRPTVRva2VuTGlzdC5oIgpAQCAtMzE3LDc3ICszMTgsOTEgQEAgdm9p
ZCBTdHlsZWRFbGVtZW50OjphZGRDU1NMZW5ndGgoQXR0cmlidXRlKiBhdHRyLCBpbnQgaWQsIGNv
bnN0IFN0cmluZyAmdmFsdWUpCiAgICAgYXR0ci0+ZGVjbCgpLT5zZXRMZW5ndGhQcm9wZXJ0eShp
ZCwgdmFsdWUsIGZhbHNlKTsKIH0KIAotLyogY29sb3IgcGFyc2luZyB0aGF0IHRyaWVzIHRvIG1h
dGNoIGFzIGNsb3NlIGFzIHBvc3NpYmxlIElFIDYuICovCi12b2lkIFN0eWxlZEVsZW1lbnQ6OmFk
ZENTU0NvbG9yKEF0dHJpYnV0ZSogYXR0ciwgaW50IGlkLCBjb25zdCBTdHJpbmcmIGMpCitzdGF0
aWMgU3RyaW5nIHBhcnNlSW52YWxpZENvbG9yQXR0cmlidXRlVmFsdWUoY29uc3QgU3RyaW5nIGF0
dHJWYWx1ZSkKIHsKLSAgICAvLyB0aGlzIGlzIHRoZSBvbmx5IGNhc2Ugbm8gY29sb3IgZ2V0cyBh
cHBsaWVkIGluIElFLgotICAgIGlmICghYy5sZW5ndGgoKSkKKyAgICBjb25zdCBzaXplX3QgbWF4
Q29sb3JMZW5ndGggPSAxMjg7CisgICAgLy8gV2UnbGwgcGFkIHRoZSBidWZmZXIgdG8gYSBtdWx0
aXBsZSBvZiAzLCBzbyB3ZSBuZWVkIHRvIHJlc2VydmUgYSBsaXR0bGUgbW9yZSBmb3Igc2FmZXR5
CisgICAgVmVjdG9yPGNoYXIsIG1heENvbG9yTGVuZ3RoKzM+IGNoYXJzOworICAgIAorICAgIHNp
emVfdCBjb2xvclBvcyA9IDA7CisgICAgLy8gRHJvcCBhIGxlYWRpbmcgIy4KKyAgICBpZiAoYXR0
clZhbHVlWzBdID09ICcjJykKKyAgICAgICAgY29sb3JQb3MgPSAxOworICAgIAorICAgIC8vIEdy
YWIgdGhlIGZpcnN0IDEyOCBjaGFycywgcmVwbGFjaW5nIG5vbi1oZXggY2hhcnMgd2l0aCAwCisg
ICAgLy8gTm9uLUJNUCBjaGFycyBhcmUgcmVwbGFjZWQgd2l0aCAiMDAiIGR1ZSB0byB0aGVtIGFw
cGVhcmluZyBhcyB0d28gVUNoYXJzIGluIHRoZSBTdHJpbmcKKyAgICBmb3IgKDsgY29sb3JQb3Mg
PCBhdHRyVmFsdWUubGVuZ3RoKCkgJiYgY2hhcnMuc2l6ZSgpIDwgbWF4Q29sb3JMZW5ndGg7IGNv
bG9yUG9zKyspIHsKKyAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoYXR0clZhbHVlW2NvbG9y
UG9zXSkpCisgICAgICAgICAgICBjaGFycy5hcHBlbmQoJzAnKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY2hhcnMuYXBwZW5kKGF0dHJWYWx1ZVtjb2xvclBvc10pOworICAgIH0KKyAgICAv
LyBQYWQgdGhlIGJ1ZmZlciB0byBhIG11bHRpcGxlIG9mIDMKKyAgICBpZiAoY2hhcnMuc2l6ZSgp
ICUgMyA9PSAyKQorICAgICAgICBjaGFycy5hcHBlbmQoJzAnKTsKKyAgICBlbHNlIGlmIChjaGFy
cy5zaXplKCkgJSAzID09IDEpIHsKKyAgICAgICAgY2hhcnMuYXBwZW5kKCcwJyk7CisgICAgICAg
IGNoYXJzLmFwcGVuZCgnMCcpOworICAgIH0KKworICAgIGlmICghY2hhcnMuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gIiMwMDAwMDAiOworCisgICAgaWYgKGNoYXJzLnNpemUoKSA9PSAzKQorICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiMwJWMwJWMwJWMiLCBjaGFyc1swXSwgY2hhcnNb
MV0sIGNoYXJzWzJdKTsKKyAgICAKKyAgICAvLyBTcGxpdCB0aGUgZGlnaXRzIGludG8gdGhyZWUg
Y29tcG9uZW50cywgdGhlbiBzZWFyY2ggdGhlIGxhc3QgOCBkaWdpdHMgb2YgZWFjaCBjb21wb25l
bnQuCisgICAgQVNTRVJUKGNoYXJzLnNpemUoKSA+PSA2KTsKKyAgICBzaXplX3QgY29tcG9uZW50
TGVuZ3RoID0gY2hhcnMuc2l6ZSgpIC8gMzsKKyAgICBzaXplX3QgY29tcG9uZW50U2VhcmNoV2lu
ZG93U2l6ZSA9IG1pbjxzaXplX3Q+KGNvbXBvbmVudExlbmd0aCwgOCk7CisgICAgc2l6ZV90IHJl
ZEluZGV4ID0gY29tcG9uZW50TGVuZ3RoIC0gY29tcG9uZW50U2VhcmNoV2luZG93U2l6ZTsKKyAg
ICBzaXplX3QgZ3JlZW5JbmRleCA9IGNvbXBvbmVudExlbmd0aCAqIDIgLSBjb21wb25lbnRTZWFy
Y2hXaW5kb3dTaXplOworICAgIHNpemVfdCBibHVlSW5kZXggPSBjaGFycy5zaXplKCkgLSBjb21w
b25lbnRTZWFyY2hXaW5kb3dTaXplOworICAgIC8vIFNraXAgZGlnaXRzIHVudGlsIG9uZSBvZiB0
aGVtIGlzIG5vbi16ZXJvLCBvciB5b3UndmUgb25seSBnb3QgdHdvIGxlZnQgaW4gdGhlIGNvbXBv
bmVudC4KKyAgICB3aGlsZSAoY2hhcnNbcmVkSW5kZXhdID09ICcwJyAmJiBjaGFyc1tncmVlbklu
ZGV4XSA9PSAnMCcgJiYgY2hhcnNbYmx1ZUluZGV4XSA9PSAnMCcgJiYgKGNvbXBvbmVudExlbmd0
aCAtIHJlZEluZGV4KSA+IDIpIHsKKyAgICAgICAgcmVkSW5kZXgrKzsKKyAgICAgICAgZ3JlZW5J
bmRleCsrOworICAgICAgICBibHVlSW5kZXgrKzsKKyAgICB9CisgICAgQVNTRVJUKHJlZEluZGV4
ID49IDApOworICAgIEFTU0VSVChyZWRJbmRleCArIDEgPCBjb21wb25lbnRMZW5ndGgpOworICAg
IEFTU0VSVChncmVlbkluZGV4ID49IGNvbXBvbmVudExlbmd0aCk7CisgICAgQVNTRVJUKGdyZWVu
SW5kZXggKyAxIDwgY29tcG9uZW50TGVuZ3RoICogMik7CisgICAgQVNTRVJUKGJsdWVJbmRleCA+
PSBjb21wb25lbnRMZW5ndGggKiAyKTsKKyAgICBBU1NFUlQoYmx1ZUluZGV4ICsgMSA8IGNoYXJz
LnNpemUoKSk7CisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIjJWMlYyVjJWMlYyVjIiwgY2hh
cnNbcmVkSW5kZXhdLCBjaGFyc1tyZWRJbmRleCsxXSwgY2hhcnNbZ3JlZW5JbmRleF0sIGNoYXJz
W2dyZWVuSW5kZXgrMV0sIGNoYXJzW2JsdWVJbmRleF0sIGNoYXJzW2JsdWVJbmRleCsxXSk7ICAg
Cit9CisKKy8vIGNvbG9yIHBhcnNpbmcgdGhhdCBtYXRjaGVzIEhUTUwncyAicnVsZXMgZm9yIHBh
cnNpbmcgYSBsZWdhY3kgY29sb3IgdmFsdWUiCit2b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZENTU0Nv
bG9yKEF0dHJpYnV0ZSogYXR0ciwgaW50IGlkLCBjb25zdCBTdHJpbmcmIGF0dHJWYWx1ZSkKK3sK
KyAgICAvLyBUaGUgZW1wdHkgc3RyaW5nIGRvZXNuJ3QgYXBwbHkgYSBjb2xvci4gKEp1c3Qgd2hp
dGVzcGFjZSBkb2VzLCB3aGljaCBpcyB3aHkgdGhpcyBjaGVjayBvY2N1cnMgYmVmb3JlIHRyaW1t
aW5nLikKKyAgICBpZiAoIWF0dHJWYWx1ZS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGNvbnN0IFN0cmluZyBjb2xvciA9IGF0dHJWYWx1ZS5zdHJpcFdoaXRlU3BhY2UoKTsK
KworICAgIC8vICJ0cmFuc3BhcmVudCIgZG9lc24ndCBhcHBseSBhIGNvbG9yIGVpdGhlci4KKyAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoY29sb3IsICJ0cmFuc3BhcmVudCIpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIWF0dHItPmRlY2woKSkKICAgICAgICAgY3JlYXRlTWFwcGVkRGVj
bChhdHRyKTsKLSAgICAKLSAgICBpZiAoYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwgYywg
ZmFsc2UpKQorCisgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBhIG5hbWVkIENTUyBjb2xvciwgdXNl
IHRoYXQgY29sb3IuCisgICAgQ29sb3IgZm91bmRDb2xvcjsKKyAgICBmb3VuZENvbG9yLnNldE5h
bWVkQ29sb3IoY29sb3IpOworICAgIGlmIChmb3VuZENvbG9yLmlzVmFsaWQoKSkgeworICAgICAg
ICBhdHRyLT5kZWNsKCktPnNldFByb3BlcnR5KGlkLCBjb2xvciwgZmFsc2UpOwogICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgU3RyaW5nIGNvbG9yID0gYzsKLSAgICAvLyBub3Qgc29tZXRoaW5n
IHRoYXQgZml0cyB0aGUgc3BlY3MuCi0gICAgCi0gICAgLy8gd2UncmUgZW11bGF0aW5nIElFcyBj
b2xvciBwYXJzZXIgaGVyZS4gSXQgbWFwcyB0cmFuc3BhcmVudCB0byBibGFjaywgb3RoZXJ3aXNl
IGl0IHRyaWVzIHRvIGJ1aWxkIGEgcmdiIHZhbHVlCi0gICAgLy8gb3V0IG9mIGV2ZXJ5dGhpbmcg
eW91IHB1dCBpbi4gVGhlIGFsZ29yaXRobSBpcyBleHBlcmltZW50YWxseSBkZXRlcm1pbmVkLCBi
dXQgc2VlbXMgdG8gd29yayBmb3IgYWxsIHRlc3QgY2FzZXMgSSBoYXZlLgotICAgIAotICAgIC8v
IHRoZSBsZW5ndGggb2YgdGhlIGNvbG9yIHZhbHVlIGlzIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQK
LSAgICAvLyBtdWx0aXBsZSBvZiAzLiBlYWNoIHBhcnQgb2YgdGhlIHJnYiB0cmlwbGUgdGhlbiBn
ZXRzIG9uZSB0aGlyZAotICAgIC8vIG9mIHRoZSBsZW5ndGguCi0gICAgLy8KLSAgICAvLyBFYWNo
IHRyaXBsZXQgaXMgcGFyc2VkIGJ5dGUgYnkgYnl0ZSwgbWFwcGluZwotICAgIC8vIGVhY2ggbnVt
YmVyIHRvIGEgaGV4IHZhbHVlICgwLTlhLWZBLUYgdG8gdGhlaXIgdmFsdWVzCi0gICAgLy8gZXZl
cnl0aGluZyBlbHNlIHRvIDApLgotICAgIC8vCi0gICAgLy8gVGhlIGhpZ2hlc3Qgbm9uIHplcm8g
ZGlnaXQgaW4gYWxsIHRyaXBsZXRzIGlzIHJlbWVtYmVyZWQsIGFuZAotICAgIC8vIHVzZWQgYXMg
YSBub3JtYWxpemF0aW9uIHBvaW50IHRvIG5vcm1hbGl6ZSB0byB2YWx1ZXMgYmV0d2VlbiAwCi0g
ICAgLy8gYW5kIDI1NS4KLSAgICAKLSAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGNvbG9yLCAi
dHJhbnNwYXJlbnQiKSkgewotICAgICAgICBpZiAoY29sb3JbMF0gPT0gJyMnKQotICAgICAgICAg
ICAgY29sb3IucmVtb3ZlKDAsIDEpOwotICAgICAgICBpbnQgYmFzaWNMZW5ndGggPSAoY29sb3Iu
bGVuZ3RoKCkgKyAyKSAvIDM7Ci0gICAgICAgIGlmIChiYXNpY0xlbmd0aCA+IDEpIHsKLSAgICAg
ICAgICAgIC8vIElFIGlnbm9yZXMgY29sb3JzIHdpdGggdGhyZWUgZGlnaXRzIG9yIGxlc3MKLSAg
ICAgICAgICAgIGludCBjb2xvcnNbM10gPSB7IDAsIDAsIDAgfTsKLSAgICAgICAgICAgIGludCBj
b21wb25lbnQgPSAwOwotICAgICAgICAgICAgaW50IHBvcyA9IDA7Ci0gICAgICAgICAgICBpbnQg
bWF4RGlnaXQgPSBiYXNpY0xlbmd0aC0xOwotICAgICAgICAgICAgd2hpbGUgKGNvbXBvbmVudCA8
IDMpIHsKLSAgICAgICAgICAgICAgICAvLyBzZWFyY2ggZm9yd2FyZCBmb3IgZGlnaXRzIGluIHRo
ZSBzdHJpbmcKLSAgICAgICAgICAgICAgICBpbnQgbnVtRGlnaXRzID0gMDsKLSAgICAgICAgICAg
ICAgICB3aGlsZSAocG9zIDwgKGludCljb2xvci5sZW5ndGgoKSAmJiBudW1EaWdpdHMgPCBiYXNp
Y0xlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY29tcG9uZW50XSA8PD0gNDsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlIZXhEaWdpdChjb2xvcltwb3NdKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NvbXBvbmVudF0gKz0gdG9BU0NJSUhleFZh
bHVlKGNvbG9yW3Bvc10pOwotICAgICAgICAgICAgICAgICAgICAgICAgbWF4RGlnaXQgPSBtaW4o
bWF4RGlnaXQsIG51bURpZ2l0cyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgbnVtRGlnaXRzKys7Ci0gICAgICAgICAgICAgICAgICAgIHBvcysrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aGlsZSAobnVtRGlnaXRzKysgPCBiYXNpY0xl
bmd0aCkKLSAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NvbXBvbmVudF0gPDw9IDQ7Ci0gICAg
ICAgICAgICAgICAgY29tcG9uZW50Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXhE
aWdpdCA9IGJhc2ljTGVuZ3RoIC0gbWF4RGlnaXQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIG5vcm1hbGl6ZSB0byAwMC1mZi4gVGhlIGhpZ2hlc3QgZmlsbGVkIGRpZ2l0IGNvdW50cywg
bWluaW11bSBpcyAyIGRpZ2l0cwotICAgICAgICAgICAgbWF4RGlnaXQgLT0gMjsKLSAgICAgICAg
ICAgIGNvbG9yc1swXSA+Pj0gNCAqIG1heERpZ2l0OwotICAgICAgICAgICAgY29sb3JzWzFdID4+
PSA0ICogbWF4RGlnaXQ7Ci0gICAgICAgICAgICBjb2xvcnNbMl0gPj49IDQgKiBtYXhEaWdpdDsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgY29sb3IgPSBTdHJpbmc6OmZvcm1hdCgiIyUwMngl
MDJ4JTAyeCIsIGNvbG9yc1swXSwgY29sb3JzWzFdLCBjb2xvcnNbMl0pOwotICAgICAgICAgICAg
aWYgKGF0dHItPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIGNvbG9yLCBmYWxzZSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAgICAgfQotICAgIGF0dHItPmRlY2woKS0+c2V0
UHJvcGVydHkoaWQsIENTU1ZhbHVlQmxhY2ssIGZhbHNlKTsKKworICAgIC8vIElmIHRoZSBzdHJp
bmcgaXMgYSAzIG9yIDYtZGlnaXQgaGV4IGNvbG9yLCB1c2UgdGhhdCBjb2xvci4KKyAgICBpZiAo
Y29sb3JbMF0gPT0gJyMnICYmIChjb2xvci5sZW5ndGgoKSA9PSA0IHx8IGNvbG9yLmxlbmd0aCgp
ID09IDcpICYmIGF0dHItPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIGNvbG9yLCBmYWxzZSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBjcmF6eSBsZWdhY3kg
cGFyc2luZyBydWxlcy4KKyAgICBhdHRyLT5kZWNsKCktPnNldFByb3BlcnR5KGlkLCBwYXJzZUlu
dmFsaWRDb2xvckF0dHJpYnV0ZVZhbHVlKGNvbG9yKSwgZmFsc2UpOwogfQogCiB2b2lkIFN0eWxl
ZEVsZW1lbnQ6OmNyZWF0ZU1hcHBlZERlY2woQXR0cmlidXRlKiBhdHRyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98500</attachid>
            <date>2011-06-24 09:16:49 -0700</date>
            <delta_ts>2011-06-24 09:21:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63029-20110624091647.patch</filename>
            <type>text/plain</type>
            <size>18624</size>
            <attacher name="Tab Atkins">tabatkins</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg5MDcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1NzExMGNmNTllN2E2YmFjYjZkYTkx
MWVjNzY1MjBkOGFjZTFkNDFjLi41NjQ0MTBlYjJhMmJmZTczYTM2MGZmYWQ1MTI0ZTQ2MWE4YjY0
NTlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDYtMjAgIFRhYiBBdGtpbnMgIDxqYWNr
YWxtYWdlQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGaXggbGVnYWN5IGNvbG9yIGF0dHJpYnV0ZSBwYXJzaW5nIHRvIG1hdGNoIEhU
TUwgc3BlYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjMwMjkKKworICAgICAgICBUZXN0cyA8Ym9keSBiZ2NvbG9yPiBwYXJzaW5nLgorCisgICAgICAg
ICogZmFzdC9kb20vYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9zY3JpcHQtdGVzdHMvYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMu
anM6IEFkZGVkLgorCiAyMDExLTA2LTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFNraXAgZWRpdGluZy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0
Lmh0bWwgYWRkZWQgYnkgcjg4ODkwIG9uIE1hYyBXZWJLaXQyCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzZjMWVmZGQ4NGNhNjcwZGI3ZmVhYmRiMDhhY2IyOGE4YjYyMzUxOQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3Jz
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUyIEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGxl
Z2FjeSBjb2xvciBhdHRyaWJ1dGVzIGFyZSBwYXJzZWQgcHJvcGVybHkuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nJztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYmEoMCwgMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0ndHJhbnNwYXJlbnQnO2dldENvbXB1
dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiYSgwLCAwLCAw
LCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScgdHJhbnNwYXJlbnQgJztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYmEoMCwgMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0ncmVkJztnZXRDb21wdXRlZFN0eWxl
KGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYigyNTUsIDAsIDApJworUEFT
UyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JyByZWQgJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50
LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYigyNTUsIDAsIDApJworUEFTUyBkb2N1bWVu
dC5ib2R5LmJnQ29sb3I9JyNmMDAnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFj
a2dyb3VuZENvbG9yOyBpcyAncmdiKDI1NSwgMCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdD
b2xvcj0nICNmMDAgJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRD
b2xvcjsgaXMgJ3JnYigyNTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JyNm
ZjAwMDAnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBp
cyAncmdiKDI1NSwgMCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nICNmZjAwMDAg
JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3Jn
YigyNTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JyNmenonO2dldENvbXB1
dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDE1LCAwLCAw
KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjZmZ6enp6JztnZXRDb21wdXRlZFN0eWxl
KGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYigyNTUsIDAsIDApJworUEFT
UyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2YwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5i
b2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5i
b2R5LmJnQ29sb3I9J2ZmMDAwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNr
Z3JvdW5kQ29sb3I7IGlzICdyZ2IoMjU1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0Nv
bG9yPScjMDAwMDAwMDAnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3Vu
ZENvbG9yOyBpcyAncmdiKDAsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2Zv
byc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdy
Z2IoMTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2NoZWVzZSc7Z2V0Q29t
cHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTkyLCAy
MzgsIDE0KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSdmZvKAv79mZic7Z2V0Q29tcHV0
ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMjU1LCAwLCAy
NTUpJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2bygL+/Zic7Z2V0Q29tcHV0ZWRTdHls
ZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMjQwLCAxNSwgMCknCitQ
QVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0ncmdiKDI1NSwgMCwgMCknO2dldENvbXB1dGVkU3R5
bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDAsIDg1LCAwKScKK1BB
U1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTAwMDAwMDExNTUwMDAwMDAxMTU1MDAwMDAwMTEn
O2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdi
KDE3LCAxNywgMTcpJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzU1MDAyMDAwMTE1NTAw
MDAwMDExNTUwMDAwMDAxMSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3Jv
dW5kQ29sb3I7IGlzICdyZ2IoMzIsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9
JzU18oC/vzIw8oC/vzExNTXygL+/8oC/vzAwMTE1NTAw8oC/vzAwMTEnO2dldENvbXB1dGVkU3R5
bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDMyLCAwLCAwKScKK1BB
U1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJv
ZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYigwLCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9k
eS5iZ0NvbG9yPScjNSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IGlzICdyZ2IoNSwgMCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzU1
JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3Jn
Yig1LCA1LCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNTU1JztnZXRDb21wdXRl
ZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDg1
KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNTU1NSc7Z2V0Q29tcHV0ZWRTdHlsZShk
b2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoODUsIDg1LCAwKScKK1BBU1Mg
ZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQu
Ym9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4NSwgODApJworUEFTUyBkb2N1bWVu
dC5ib2R5LmJnQ29sb3I9JyM1NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSku
YmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4NSwgODUpJworUEFTUyBkb2N1bWVudC5ib2R5
LmJnQ29sb3I9JyM1NTU1NTU1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tn
cm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDgwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0Nv
bG9yPScjNTU1NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3Vu
ZENvbG9yOyBpcyAncmdiKDg1LCA4NSwgODUpJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9
JzUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAn
cmdiKDUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzU1JztnZXRDb21wdXRl
ZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig1LCA1LCAwKScK
K1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1l
bnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDUsIDUsIDUpJworUEFTUyBkb2N1bWVu
dC5ib2R5LmJnQ29sb3I9JzU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFj
a2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4NSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdD
b2xvcj0nNTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENv
bG9yOyBpcyAncmdiKDg1LCA4NSwgODApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzU1
NTU1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlz
ICdyZ2IoODUsIDg1LCA4NSknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTU1NTU1NSc7
Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2Io
ODUsIDg1LCA4MCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nNTU1NTU1NTUnO2dldENv
bXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4
NSwgODUpJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2ZmZmZmZmZmZmZmZmZmZmZmZmZm
ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm
ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmMDAwMDAw
JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3Jn
YigyNTUsIDI1NSwgMjU1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSfygL+/8oC/v/KA
v7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/
v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/
8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/y
gL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KA
v7/ygL+/8oC/v/KAv7/ygL+/ZmZmZmZmJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkp
LmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYigwLCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5i
Z0NvbG9yPScgJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xv
cjsgaXMgJ3JnYigwLCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScgZmZmZmZm
ICc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdy
Z2IoMjU1LCAyNTUsIDI1NSknCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vYXR0cmlidXRl
LWxlZ2FjeS1jb2xvcnMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2F0dHJpYnV0ZS1sZWdh
Y3ktY29sb3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzRhMmFhYjQxNWI5NWRhOTRiZjBhMzA2ZTcyNjJj
ZmY4NGI0NWM2MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2F0dHJp
YnV0ZS1sZWdhY3ktY29sb3JzLmh0bWwKQEAgLTAsMCArMSw4IEBACis8IURPQ1RZUEUgSFRNTD4K
KzxtZXRhIGNoYXJzZXQ9dXRmOD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvYXR0cmli
dXRlLWxlZ2FjeS1jb2xvcnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC10ZXN0cy9hdHRyaWJ1
dGUtbGVnYWN5LWNvbG9ycy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC10ZXN0cy9h
dHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hY2Q3NTM5YWNiY2RhZjBjZDM0
YjRkZmU5MDRiY2Y0NjhiMzIyZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vc2NyaXB0LXRlc3RzL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmpzCkBAIC0wLDAgKzEs
NTYgQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGxlZ2FjeSBjb2xvciBh
dHRyaWJ1dGVzIGFyZSBwYXJzZWQgcHJvcGVybHkuIik7CisKK3Nob3VsZEJlKCJkb2N1bWVudC5i
b2R5LmJnQ29sb3I9Jyc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5k
Q29sb3I7IiwgIidyZ2JhKDAsIDAsIDAsIDApJyIpOworc2hvdWxkQmUoImRvY3VtZW50LmJvZHku
YmdDb2xvcj0ndHJhbnNwYXJlbnQnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFj
a2dyb3VuZENvbG9yOyIsICIncmdiYSgwLCAwLCAwLCAwKSciKTsKK3Nob3VsZEJlKCJkb2N1bWVu
dC5ib2R5LmJnQ29sb3I9JyB0cmFuc3BhcmVudCAnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQu
Ym9keSkuYmFja2dyb3VuZENvbG9yOyIsICIncmdiYSgwLCAwLCAwLCAwKSciKTsKKyhmdW5jdGlv
bigpewordmFyIHRlc3RzID0gWworCXsndGVzdCc6J3JlZCcsICdleHBlY3RlZCc6WzI1NSwgMCwg
MF19LAorCXsndGVzdCc6JyByZWQgJywgJ2V4cGVjdGVkJzpbMjU1LCAwLCAwXX0sCisJeyd0ZXN0
JzonI2YwMCcsICdleHBlY3RlZCc6WzI1NSwgMCwgMF19LAorCXsndGVzdCc6JyAjZjAwICcsICdl
eHBlY3RlZCc6WzI1NSwgMCwgMF19LAorCXsndGVzdCc6JyNmZjAwMDAnLCAnZXhwZWN0ZWQnOlsy
NTUsIDAsIDBdfSwKKwl7J3Rlc3QnOicgI2ZmMDAwMCAnLCAnZXhwZWN0ZWQnOlsyNTUsIDAsIDBd
fSwKKwl7J3Rlc3QnOicjZnp6JywgJ2V4cGVjdGVkJzpbMTUsIDAsIDBdfSwKKwl7J3Rlc3QnOicj
ZmZ6enp6JywgJ2V4cGVjdGVkJzpbMjU1LCAwLCAwXX0sCisJeyd0ZXN0JzonZjAwJywgJ2V4cGVj
dGVkJzpbMTUsIDAsIDBdfSwKKwl7J3Rlc3QnOidmZjAwMDAnLCAnZXhwZWN0ZWQnOlsyNTUsIDAs
IDBdfSwKKwl7J3Rlc3QnOicjMDAwMDAwMDAnLCAnZXhwZWN0ZWQnOlswLCAwLCAwXX0sCisJeyd0
ZXN0JzonZm9vJywgJ2V4cGVjdGVkJzpbMTUsIDAsIDBdfSwKKwl7J3Rlc3QnOidjaGVlc2UnLCAn
ZXhwZWN0ZWQnOlsxOTIsIDIzOCwgMTRdfSwKKwl7J3Rlc3QnOidmZvKAv79mZicsICdleHBlY3Rl
ZCc6WzI1NSwgMCwgMjU1XX0sCisJeyd0ZXN0JzonZvKAv79mJywgJ2V4cGVjdGVkJzpbMjQwLCAx
NSwgMF19LAorCXsndGVzdCc6J3JnYigyNTUsIDAsIDApJywgJ2V4cGVjdGVkJzpbMCwgODUsIDBd
fSwKKwl7J3Rlc3QnOic1NTAwMDAwMDExNTUwMDAwMDAxMTU1MDAwMDAwMTEnLCAnZXhwZWN0ZWQn
OlsxNywgMTcsIDE3XX0sCisJeyd0ZXN0JzonNTUwMDIwMDAxMTU1MDAwMDAwMTE1NTAwMDAwMDEx
JywgJ2V4cGVjdGVkJzpbMzIsIDAsIDBdfSwKKwl7J3Rlc3QnOic1NfKAv78yMPKAv78xMTU18oC/
v/KAv78wMDExNTUwMPKAv78wMDExJywgJ2V4cGVjdGVkJzpbMzIsIDAsIDBdfSwKKwl7J3Rlc3Qn
OicjJywgJ2V4cGVjdGVkJzpbMCwgMCwgMF19LAorCXsndGVzdCc6JyM1JywgJ2V4cGVjdGVkJzpb
NSwgMCwgMF19LAorCXsndGVzdCc6JyM1NScsICdleHBlY3RlZCc6WzUsIDUsIDBdfSwKKwl7J3Rl
c3QnOicjNTU1JywgJ2V4cGVjdGVkJzpbODUsIDg1LCA4NV19LAorCXsndGVzdCc6JyM1NTU1Jywg
J2V4cGVjdGVkJzpbODUsIDg1LCAwXX0sCisJeyd0ZXN0JzonIzU1NTU1JywgJ2V4cGVjdGVkJzpb
ODUsIDg1LCA4MF19LAorCXsndGVzdCc6JyM1NTU1NTUnLCAnZXhwZWN0ZWQnOls4NSwgODUsIDg1
XX0sCisJeyd0ZXN0JzonIzU1NTU1NTUnLCAnZXhwZWN0ZWQnOls4NSwgODUsIDgwXX0sCisJeyd0
ZXN0JzonIzU1NTU1NTU1JywgJ2V4cGVjdGVkJzpbODUsIDg1LCA4NV19LAorCXsndGVzdCc6JzUn
LCAnZXhwZWN0ZWQnOls1LCAwLCAwXX0sCisJeyd0ZXN0JzonNTUnLCAnZXhwZWN0ZWQnOls1LCA1
LCAwXX0sCisJeyd0ZXN0JzonNTU1JywgJ2V4cGVjdGVkJzpbNSwgNSwgNV19LAorCXsndGVzdCc6
JzU1NTUnLCAnZXhwZWN0ZWQnOls4NSwgODUsIDBdfSwKKwl7J3Rlc3QnOic1NTU1NScsICdleHBl
Y3RlZCc6Wzg1LCA4NSwgODBdfSwKKwl7J3Rlc3QnOic1NTU1NTUnLCAnZXhwZWN0ZWQnOls4NSwg
ODUsIDg1XX0sCisJeyd0ZXN0JzonNTU1NTU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgODBdfSwK
Kwl7J3Rlc3QnOic1NTU1NTU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgODVdfSwKKwl7J3Rlc3Qn
OidmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm
ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm
ZmZmZmZmZmZmZmZmZmZmZjAwMDAwMCcsICdleHBlY3RlZCc6WzI1NSwgMjU1LCAyNTVdfSwKKwl7
J3Rlc3QnOifygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/y
gL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KA
v7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/
v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/
8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/ZmZmZmZmJywgJ2V4cGVjdGVkJzpb
MCwgMCwgMF19LAorCXsndGVzdCc6JyAnLCAnZXhwZWN0ZWQnOlswLCAwLCAwXX0sCisJeyd0ZXN0
JzonIGZmZmZmZiAnLCAnZXhwZWN0ZWQnOlsyNTUsIDI1NSwgMjU1XX0KK107CisKK2Zvcih2YXIg
aSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgeworCXZhciB0ID0gdGVzdHNbaV0udGVzdDsK
Kwl2YXIgZSA9IHRlc3RzW2ldLmV4cGVjdGVkOworCXNob3VsZEJlKCJkb2N1bWVudC5ib2R5LmJn
Q29sb3I9JyIgKyB0ICsgIic7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3Jv
dW5kQ29sb3I7IiwgIidyZ2IoIiArIGVbMF0gKyAiLCAiICsgZVsxXSArICIsICIgKyBlWzJdICsg
IiknIik7Cit9Cit9KSgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY5OWZkMGU1ODZhNWNkOWY1MWE0YzkyYmRj
M2MwM2M0NWYyYTVhZi4uMjU2NjZkNTU1NGRlMTc1Nzk1N2VjZmU1YWI1ZGRiYWFmZjk2OGNiMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTA2LTIwICBUYWIgQXRraW5zICA8amFj
a2FsbWFnZUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRml4IGxlZ2FjeSBjb2xvciBhdHRyaWJ1dGUgcGFyc2luZyB0byBtYXRjaCBI
VE1MIHNwZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYzMDI5CisKKyAgICAgICAgUmVsZXZhbnQgc3BlYyBsaW5rOiBodHRwOi8vd3d3LndoYXR3Zy5v
cmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL2NvbXBsZXRlL2NvbW1vbi1taWNyb3N5bnRh
eGVzLmh0bWwjcnVsZXMtZm9yLXBhcnNpbmctYS1sZWdhY3ktY29sb3ItdmFsdWUKKyAgICAgICAg
Rml4IGxlZ2FjeSBjb2xvciBhdHRyaWJ1dGUgcGFyc2luZyAoPGJvZHkgYmdjb2xvcj4sIDxmb250
IGNvbG9yPiwgZXRjLikgdG8gbWF0Y2ggdGhlIEhUTUwgc3BlYyBhbmQgbW9yZSBjbG9zZWx5IG1h
dGNoIG90aGVyIGJyb3dzZXJzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL2F0dHJpYnV0ZS1s
ZWdhY3ktY29sb3JzLmh0bWwKKworICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmFkZENTU0NvbG9yKToKKwogMjAxMS0wNi0x
NCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIDxodHRwOi8v
d2Via2l0Lm9yZy9iLzYyNjc3PiBQYXJ0IDIvMjogUmVtb3ZlIGR1cGxpY2F0ZSBoZWFkZXIgZW50
cmllcyBpbiBXZWJDb3JlIHByb2plY3QgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1N0eWxlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQu
Y3BwCmluZGV4IGJkOTU0M2RhMDg4MzJmYjQwOGI2ZmNmODhmNTgyMzY4Njg1Y2M1MzQuLjI0ZjM3
MTNkZmI3MTMyNWMyNzM1ODBiNDYwNDA5MWRkMzk4MTJkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5
bGVkRWxlbWVudC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5
d29yZHMuaCIKKyNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNsYXNzTGlzdC5oIgogI2lu
Y2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkRPTVRva2VuTGlzdC5o
IgpAQCAtMzE3LDc3ICszMTgsODggQEAgdm9pZCBTdHlsZWRFbGVtZW50OjphZGRDU1NMZW5ndGgo
QXR0cmlidXRlKiBhdHRyLCBpbnQgaWQsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiAgICAgYXR0ci0+
ZGVjbCgpLT5zZXRMZW5ndGhQcm9wZXJ0eShpZCwgdmFsdWUsIGZhbHNlKTsKIH0KIAotLyogY29s
b3IgcGFyc2luZyB0aGF0IHRyaWVzIHRvIG1hdGNoIGFzIGNsb3NlIGFzIHBvc3NpYmxlIElFIDYu
ICovCi12b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZENTU0NvbG9yKEF0dHJpYnV0ZSogYXR0ciwgaW50
IGlkLCBjb25zdCBTdHJpbmcmIGMpCitzdGF0aWMgU3RyaW5nIHBhcnNlQ29sb3JTdHJpbmdXaXRo
Q3JhenlMZWdhY3lSdWxlcyhjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nKQogewotICAgIC8vIHRo
aXMgaXMgdGhlIG9ubHkgY2FzZSBubyBjb2xvciBnZXRzIGFwcGxpZWQgaW4gSUUuCi0gICAgaWYg
KCFjLmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWF0dHItPmRlY2woKSkK
LSAgICAgICAgY3JlYXRlTWFwcGVkRGVjbChhdHRyKTsKKyAgICAvLyBQZXIgc3BlYywgb25seSBs
b29rIGF0IHRoZSBmaXJzdCAxMjggZGlnaXRzIG9mIHRoZSBzdHJpbmcuCisgICAgY29uc3Qgc2l6
ZV90IG1heENvbG9yTGVuZ3RoID0gMTI4OworICAgIC8vIFdlJ2xsIHBhZCB0aGUgYnVmZmVyIHdp
dGggdHdvIGV4dHJhIDBzIGxhdGVyLCBzbyByZXNlcnZlIHR3byBtb3JlIHRoYW4gdGhlIG1heC4K
KyAgICBWZWN0b3I8Y2hhciwgbWF4Q29sb3JMZW5ndGgrMj4gZGlnaXRCdWZmZXI7CiAgICAgCi0g
ICAgaWYgKGF0dHItPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIGMsIGZhbHNlKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIFN0cmluZyBjb2xvciA9IGM7Ci0gICAgLy8gbm90IHNvbWV0aGlu
ZyB0aGF0IGZpdHMgdGhlIHNwZWNzLgorICAgIHNpemVfdCBpID0gMDsKKyAgICAvLyBTa2lwIGEg
bGVhZGluZyAjLgorICAgIGlmIChjb2xvclN0cmluZ1swXSA9PSAnIycpCisgICAgICAgIGkgPSAx
OwogICAgIAotICAgIC8vIHdlJ3JlIGVtdWxhdGluZyBJRXMgY29sb3IgcGFyc2VyIGhlcmUuIEl0
IG1hcHMgdHJhbnNwYXJlbnQgdG8gYmxhY2ssIG90aGVyd2lzZSBpdCB0cmllcyB0byBidWlsZCBh
IHJnYiB2YWx1ZQotICAgIC8vIG91dCBvZiBldmVyeXRoaW5nIHlvdSBwdXQgaW4uIFRoZSBhbGdv
cml0aG0gaXMgZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZCwgYnV0IHNlZW1zIHRvIHdvcmsgZm9y
IGFsbCB0ZXN0IGNhc2VzIEkgaGF2ZS4KKyAgICAvLyBHcmFiIHRoZSBmaXJzdCAxMjggY2hhcmFj
dGVycywgcmVwbGFjaW5nIG5vbi1oZXggY2hhcmFjdGVycyB3aXRoIDAuCisgICAgLy8gTm9uLUJN
UCBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZCB3aXRoICIwMCIgZHVlIHRvIHRoZW0gYXBwZWFyaW5n
IGFzIHR3byAiY2hhcmFjdGVycyIgaW4gdGhlIFN0cmluZy4KKyAgICBmb3IgKDsgaSA8IGNvbG9y
U3RyaW5nLmxlbmd0aCgpICYmIGRpZ2l0QnVmZmVyLnNpemUoKSA8IG1heENvbG9yTGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoY29sb3JTdHJpbmdbaV0pKQorICAg
ICAgICAgICAgZGlnaXRCdWZmZXIuYXBwZW5kKCcwJyk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGRpZ2l0QnVmZmVyLmFwcGVuZChjb2xvclN0cmluZ1tpXSk7CisgICAgfQorCisgICAgaWYg
KCFkaWdpdEJ1ZmZlci5zaXplKCkpCisgICAgICAgIHJldHVybiAiIzAwMDAwMCI7CisKKyAgICAv
LyBQYWQgdGhlIGJ1ZmZlciBvdXQgdG8gYXQgbGVhc3QgdGhlIG5leHQgbXVsdGlwbGUgb2YgdGhy
ZWUgaW4gc2l6ZS4KKyAgICBkaWdpdEJ1ZmZlci5hcHBlbmQoJzAnKTsKKyAgICBkaWdpdEJ1ZmZl
ci5hcHBlbmQoJzAnKTsKKworICAgIGlmIChkaWdpdEJ1ZmZlci5zaXplKCkgPCA2KQorICAgICAg
ICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIiMwJWMwJWMwJWMiLCBkaWdpdEJ1ZmZlclswXSwgZGln
aXRCdWZmZXJbMV0sIGRpZ2l0QnVmZmVyWzJdKTsKICAgICAKLSAgICAvLyB0aGUgbGVuZ3RoIG9m
IHRoZSBjb2xvciB2YWx1ZSBpcyByb3VuZGVkIHVwIHRvIHRoZSBuZXh0Ci0gICAgLy8gbXVsdGlw
bGUgb2YgMy4gZWFjaCBwYXJ0IG9mIHRoZSByZ2IgdHJpcGxlIHRoZW4gZ2V0cyBvbmUgdGhpcmQK
LSAgICAvLyBvZiB0aGUgbGVuZ3RoLgotICAgIC8vCi0gICAgLy8gRWFjaCB0cmlwbGV0IGlzIHBh
cnNlZCBieXRlIGJ5IGJ5dGUsIG1hcHBpbmcKLSAgICAvLyBlYWNoIG51bWJlciB0byBhIGhleCB2
YWx1ZSAoMC05YS1mQS1GIHRvIHRoZWlyIHZhbHVlcwotICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSB0
byAwKS4KLSAgICAvLwotICAgIC8vIFRoZSBoaWdoZXN0IG5vbiB6ZXJvIGRpZ2l0IGluIGFsbCB0
cmlwbGV0cyBpcyByZW1lbWJlcmVkLCBhbmQKLSAgICAvLyB1c2VkIGFzIGEgbm9ybWFsaXphdGlv
biBwb2ludCB0byBub3JtYWxpemUgdG8gdmFsdWVzIGJldHdlZW4gMAotICAgIC8vIGFuZCAyNTUu
CisgICAgLy8gU3BsaXQgdGhlIGRpZ2l0cyBpbnRvIHRocmVlIGNvbXBvbmVudHMsIHRoZW4gc2Vh
cmNoIHRoZSBsYXN0IDggZGlnaXRzIG9mIGVhY2ggY29tcG9uZW50LgorICAgIEFTU0VSVChkaWdp
dEJ1ZmZlci5zaXplKCkgPj0gNik7CisgICAgc2l6ZV90IGNvbXBvbmVudExlbmd0aCA9IGRpZ2l0
QnVmZmVyLnNpemUoKSAvIDM7CisgICAgc2l6ZV90IGNvbXBvbmVudFNlYXJjaFdpbmRvd0xlbmd0
aCA9IG1pbjxzaXplX3Q+KGNvbXBvbmVudExlbmd0aCwgOCk7CisgICAgc2l6ZV90IHJlZEluZGV4
ID0gY29tcG9uZW50TGVuZ3RoIC0gY29tcG9uZW50U2VhcmNoV2luZG93TGVuZ3RoOworICAgIHNp
emVfdCBncmVlbkluZGV4ID0gY29tcG9uZW50TGVuZ3RoICogMiAtIGNvbXBvbmVudFNlYXJjaFdp
bmRvd0xlbmd0aDsKKyAgICBzaXplX3QgYmx1ZUluZGV4ID0gY29tcG9uZW50TGVuZ3RoICogMyAt
IGNvbXBvbmVudFNlYXJjaFdpbmRvd0xlbmd0aDsKKyAgICAvLyBTa2lwIGRpZ2l0cyB1bnRpbCBv
bmUgb2YgdGhlbSBpcyBub24temVybywgb3Igd2UndmUgb25seSBnb3QgdHdvIGRpZ2l0cyBsZWZ0
IGluIHRoZSBjb21wb25lbnQuCisgICAgd2hpbGUgKGRpZ2l0QnVmZmVyW3JlZEluZGV4XSA9PSAn
MCcgJiYgZGlnaXRCdWZmZXJbZ3JlZW5JbmRleF0gPT0gJzAnICYmIGRpZ2l0QnVmZmVyW2JsdWVJ
bmRleF0gPT0gJzAnICYmIChjb21wb25lbnRMZW5ndGggLSByZWRJbmRleCkgPiAyKSB7CisgICAg
ICAgIHJlZEluZGV4Kys7CisgICAgICAgIGdyZWVuSW5kZXgrKzsKKyAgICAgICAgYmx1ZUluZGV4
Kys7CisgICAgfQorICAgIEFTU0VSVChyZWRJbmRleCA+PSAwKTsKKyAgICBBU1NFUlQocmVkSW5k
ZXggKyAxIDwgY29tcG9uZW50TGVuZ3RoKTsKKyAgICBBU1NFUlQoZ3JlZW5JbmRleCA+PSBjb21w
b25lbnRMZW5ndGgpOworICAgIEFTU0VSVChncmVlbkluZGV4ICsgMSA8IGNvbXBvbmVudExlbmd0
aCAqIDIpOworICAgIEFTU0VSVChibHVlSW5kZXggPj0gY29tcG9uZW50TGVuZ3RoICogMik7Cisg
ICAgQVNTRVJUKGJsdWVJbmRleCArIDEgPCBkaWdpdEJ1ZmZlci5zaXplKCkpOworICAgIHJldHVy
biBTdHJpbmc6OmZvcm1hdCgiIyVjJWMlYyVjJWMlYyIsIGRpZ2l0QnVmZmVyW3JlZEluZGV4XSwg
ZGlnaXRCdWZmZXJbcmVkSW5kZXggKyAxXSwgZGlnaXRCdWZmZXJbZ3JlZW5JbmRleF0sIGRpZ2l0
QnVmZmVyW2dyZWVuSW5kZXggKyAxXSwgZGlnaXRCdWZmZXJbYmx1ZUluZGV4XSwgZGlnaXRCdWZm
ZXJbYmx1ZUluZGV4ICsgMV0pOyAgIAorfQorCisvLyBDb2xvciBwYXJzaW5nIHRoYXQgbWF0Y2hl
cyBIVE1MJ3MgInJ1bGVzIGZvciBwYXJzaW5nIGEgbGVnYWN5IGNvbG9yIHZhbHVlIgordm9pZCBT
dHlsZWRFbGVtZW50OjphZGRDU1NDb2xvcihBdHRyaWJ1dGUqIGF0dHJpYnV0ZSwgaW50IGlkLCBj
b25zdCBTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKQoreworICAgIC8vIFRoZSBlbXB0eSBzdHJpbmcg
ZG9lc24ndCBhcHBseSBhIGNvbG9yLiAoSnVzdCB3aGl0ZXNwYWNlIGRvZXMsIHdoaWNoIGlzIHdo
eSB0aGlzIGNoZWNrIG9jY3VycyBiZWZvcmUgdHJpbW1pbmcuKQorICAgIGlmICghYXR0cmlidXRl
VmFsdWUubGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoIWVxdWFsSWdu
b3JpbmdDYXNlKGNvbG9yLCAidHJhbnNwYXJlbnQiKSkgewotICAgICAgICBpZiAoY29sb3JbMF0g
PT0gJyMnKQotICAgICAgICAgICAgY29sb3IucmVtb3ZlKDAsIDEpOwotICAgICAgICBpbnQgYmFz
aWNMZW5ndGggPSAoY29sb3IubGVuZ3RoKCkgKyAyKSAvIDM7Ci0gICAgICAgIGlmIChiYXNpY0xl
bmd0aCA+IDEpIHsKLSAgICAgICAgICAgIC8vIElFIGlnbm9yZXMgY29sb3JzIHdpdGggdGhyZWUg
ZGlnaXRzIG9yIGxlc3MKLSAgICAgICAgICAgIGludCBjb2xvcnNbM10gPSB7IDAsIDAsIDAgfTsK
LSAgICAgICAgICAgIGludCBjb21wb25lbnQgPSAwOwotICAgICAgICAgICAgaW50IHBvcyA9IDA7
Ci0gICAgICAgICAgICBpbnQgbWF4RGlnaXQgPSBiYXNpY0xlbmd0aC0xOwotICAgICAgICAgICAg
d2hpbGUgKGNvbXBvbmVudCA8IDMpIHsKLSAgICAgICAgICAgICAgICAvLyBzZWFyY2ggZm9yd2Fy
ZCBmb3IgZGlnaXRzIGluIHRoZSBzdHJpbmcKLSAgICAgICAgICAgICAgICBpbnQgbnVtRGlnaXRz
ID0gMDsKLSAgICAgICAgICAgICAgICB3aGlsZSAocG9zIDwgKGludCljb2xvci5sZW5ndGgoKSAm
JiBudW1EaWdpdHMgPCBiYXNpY0xlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBjb2xvcnNb
Y29tcG9uZW50XSA8PD0gNDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlIZXhEaWdp
dChjb2xvcltwb3NdKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NvbXBvbmVu
dF0gKz0gdG9BU0NJSUhleFZhbHVlKGNvbG9yW3Bvc10pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbWF4RGlnaXQgPSBtaW4obWF4RGlnaXQsIG51bURpZ2l0cyk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbnVtRGlnaXRzKys7Ci0gICAgICAgICAgICAgICAg
ICAgIHBvcysrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aGlsZSAobnVt
RGlnaXRzKysgPCBiYXNpY0xlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NvbXBv
bmVudF0gPDw9IDQ7Ci0gICAgICAgICAgICAgICAgY29tcG9uZW50Kys7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtYXhEaWdpdCA9IGJhc2ljTGVuZ3RoIC0gbWF4RGlnaXQ7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSB0byAwMC1mZi4gVGhlIGhpZ2hlc3QgZmls
bGVkIGRpZ2l0IGNvdW50cywgbWluaW11bSBpcyAyIGRpZ2l0cwotICAgICAgICAgICAgbWF4RGln
aXQgLT0gMjsKLSAgICAgICAgICAgIGNvbG9yc1swXSA+Pj0gNCAqIG1heERpZ2l0OwotICAgICAg
ICAgICAgY29sb3JzWzFdID4+PSA0ICogbWF4RGlnaXQ7Ci0gICAgICAgICAgICBjb2xvcnNbMl0g
Pj49IDQgKiBtYXhEaWdpdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29sb3IgPSBTdHJp
bmc6OmZvcm1hdCgiIyUwMnglMDJ4JTAyeCIsIGNvbG9yc1swXSwgY29sb3JzWzFdLCBjb2xvcnNb
Ml0pOwotICAgICAgICAgICAgaWYgKGF0dHItPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIGNvbG9y
LCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgU3RyaW5n
IGNvbG9yID0gYXR0cmlidXRlVmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCk7CisKKyAgICAvLyAidHJh
bnNwYXJlbnQiIGRvZXNuJ3QgYXBwbHkgYSBjb2xvciBlaXRoZXIuCisgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKGNvbG9yLCAidHJhbnNwYXJlbnQiKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFhdHRyaWJ1dGUtPmRlY2woKSkKKyAgICAgICAgY3JlYXRlTWFwcGVkRGVjbChhdHRyaWJ1
dGUpOworCisgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBhIG5hbWVkIENTUyBjb2xvciwgdXNlIHRo
YXQgY29sb3IuCisgICAgQ29sb3IgZm91bmRDb2xvcjsKKyAgICBmb3VuZENvbG9yLnNldE5hbWVk
Q29sb3IoY29sb3IpOworICAgIGlmIChmb3VuZENvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBh
dHRyaWJ1dGUtPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIGNvbG9yLCBmYWxzZSk7CisgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwgQ1NTVmFs
dWVCbGFjaywgZmFsc2UpOworCisgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBhIDMgb3IgNi1kaWdp
dCBoZXggY29sb3IsIHVzZSB0aGF0IGNvbG9yLgorICAgIGlmIChjb2xvclswXSA9PSAnIycgJiYg
KGNvbG9yLmxlbmd0aCgpID09IDQgfHwgY29sb3IubGVuZ3RoKCkgPT0gNykgJiYgYXR0cmlidXRl
LT5kZWNsKCktPnNldFByb3BlcnR5KGlkLCBjb2xvciwgZmFsc2UpKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdHRyaWJ1dGUtPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIHBhcnNlQ29sb3JTdHJp
bmdXaXRoQ3JhenlMZWdhY3lSdWxlcyhjb2xvciksIGZhbHNlKTsKIH0KIAogdm9pZCBTdHlsZWRF
bGVtZW50OjpjcmVhdGVNYXBwZWREZWNsKEF0dHJpYnV0ZSogYXR0cikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98502</attachid>
            <date>2011-06-24 09:21:51 -0700</date>
            <delta_ts>2011-06-30 11:41:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63029-20110624092150.patch</filename>
            <type>text/plain</type>
            <size>19014</size>
            <attacher name="Tab Atkins">tabatkins</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg5MDcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1NzExMGNmNTllN2E2YmFjYjZkYTkx
MWVjNzY1MjBkOGFjZTFkNDFjLi41NjQ0MTBlYjJhMmJmZTczYTM2MGZmYWQ1MTI0ZTQ2MWE4YjY0
NTlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDYtMjAgIFRhYiBBdGtpbnMgIDxqYWNr
YWxtYWdlQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGaXggbGVnYWN5IGNvbG9yIGF0dHJpYnV0ZSBwYXJzaW5nIHRvIG1hdGNoIEhU
TUwgc3BlYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjMwMjkKKworICAgICAgICBUZXN0cyA8Ym9keSBiZ2NvbG9yPiBwYXJzaW5nLgorCisgICAgICAg
ICogZmFzdC9kb20vYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9zY3JpcHQtdGVzdHMvYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMu
anM6IEFkZGVkLgorCiAyMDExLTA2LTE0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFNraXAgZWRpdGluZy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0
Lmh0bWwgYWRkZWQgYnkgcjg4ODkwIG9uIE1hYyBXZWJLaXQyCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZmMxNWI5MTM1MTQ3NDFjZmZlMDk4MzFlMDUwZWM2MDA4ZmNlMTRiYQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3Jz
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDU0IEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGxl
Z2FjeSBjb2xvciBhdHRyaWJ1dGVzIGFyZSBwYXJzZWQgcHJvcGVybHkuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nJztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYmEoMCwgMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0ndHJhbnNwYXJlbnQnO2dldENvbXB1
dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiYSgwLCAwLCAw
LCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScgdHJhbnNwYXJlbnQgJztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYmEoMCwgMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0ncmVkJztnZXRDb21wdXRlZFN0eWxl
KGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYigyNTUsIDAsIDApJworUEFT
UyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JyByZWQgJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50
LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYigyNTUsIDAsIDApJworUEFTUyBkb2N1bWVu
dC5ib2R5LmJnQ29sb3I9JyNmMDAnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFj
a2dyb3VuZENvbG9yOyBpcyAncmdiKDI1NSwgMCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdD
b2xvcj0nICNmMDAgJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRD
b2xvcjsgaXMgJ3JnYigyNTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JyNm
ZjAwMDAnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBp
cyAncmdiKDI1NSwgMCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nICNmZjAwMDAg
JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3Jn
YigyNTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JyNmenonO2dldENvbXB1
dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDE1LCAwLCAw
KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjZmZ6enp6JztnZXRDb21wdXRlZFN0eWxl
KGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYigyNTUsIDAsIDApJworUEFT
UyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2YwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5i
b2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5i
b2R5LmJnQ29sb3I9J2ZmMDAwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNr
Z3JvdW5kQ29sb3I7IGlzICdyZ2IoMjU1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0Nv
bG9yPScjMDAwMDAwMDAnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3Vu
ZENvbG9yOyBpcyAncmdiKDAsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2Zv
byc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdy
Z2IoMTUsIDAsIDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2NoZWVzZSc7Z2V0Q29t
cHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMTkyLCAy
MzgsIDE0KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSdmZvKAv79mZic7Z2V0Q29tcHV0
ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMjU1LCAwLCAy
NTUpJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9J2bygL+/Zic7Z2V0Q29tcHV0ZWRTdHls
ZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMjQwLCAxNSwgMCknCitQ
QVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0ncmdiKDI1NSwgMCwgMCknO2dldENvbXB1dGVkU3R5
bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDAsIDg1LCAwKScKK1BB
U1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTAwMDAwMDExNTUwMDAwMDAxMTU1MDAwMDAwMTEn
O2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdi
KDE3LCAxNywgMTcpJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzU1MDAwMDAwMDE1NTAw
MDAwMDAxNTUwMDAwMDAwMSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3Jv
dW5kQ29sb3I7IGlzICdyZ2IoMSwgMSwgMSknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0n
NTUwMDAwMDAwMDU1MDAwMDAwMDA1NTAwMDAwMDAwJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50
LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYigwLCAwLCAwKScKK1BBU1MgZG9jdW1lbnQu
Ym9keS5iZ0NvbG9yPSc1NTAwMjAwMDExNTUwMDAwMDAxMTU1MDAwMDAwMTEnO2dldENvbXB1dGVk
U3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDMyLCAwLCAwKScK
K1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NfKAv78yMPKAv78xMTU18oC/v/KAv78wMDEx
NTUwMPKAv78wMDExJztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRD
b2xvcjsgaXMgJ3JnYigzMiwgMCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIyc7
Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2Io
MCwgMCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzUnO2dldENvbXB1dGVkU3R5
bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDUsIDAsIDApJworUEFT
UyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JyM1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5i
b2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoNSwgNSwgMCknCitQQVNTIGRvY3VtZW50LmJv
ZHkuYmdDb2xvcj0nIzU1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3Jv
dW5kQ29sb3I7IGlzICdyZ2IoODUsIDg1LCA4NSknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xv
cj0nIzU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9y
OyBpcyAncmdiKDg1LCA4NSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzU1NTU1
JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3Jn
Yig4NSwgODUsIDgwKScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNTU1NTU1JztnZXRD
b21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwg
ODUsIDg1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScjNTU1NTU1NSc7Z2V0Q29tcHV0
ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoODUsIDg1LCA4
MCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nIzU1NTU1NTU1JztnZXRDb21wdXRlZFN0
eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDg1KScK
K1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50
LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig1LCAwLCAwKScKK1BBU1MgZG9jdW1lbnQu
Ym9keS5iZ0NvbG9yPSc1NSc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3Jv
dW5kQ29sb3I7IGlzICdyZ2IoNSwgNSwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0n
NTU1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMg
J3JnYig1LCA1LCA1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTU1JztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUs
IDApJworUEFTUyBkb2N1bWVudC5ib2R5LmJnQ29sb3I9JzU1NTU1JztnZXRDb21wdXRlZFN0eWxl
KGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDgwKScKK1BB
U1MgZG9jdW1lbnQuYm9keS5iZ0NvbG9yPSc1NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1l
bnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4NSwgODUpJworUEFTUyBkb2N1
bWVudC5ib2R5LmJnQ29sb3I9JzU1NTU1NTUnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9k
eSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDg1LCA4NSwgODApJworUEFTUyBkb2N1bWVudC5i
b2R5LmJnQ29sb3I9JzU1NTU1NTU1JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJh
Y2tncm91bmRDb2xvcjsgaXMgJ3JnYig4NSwgODUsIDg1KScKK1BBU1MgZG9jdW1lbnQuYm9keS5i
Z0NvbG9yPSdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm
ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm
ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjAwMDAwMCc7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5i
b2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMjU1LCAyNTUsIDI1NSknCitQQVNTIGRvY3Vt
ZW50LmJvZHkuYmdDb2xvcj0n8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/
v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/
8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/y
gL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KA
v7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v2ZmZmZmZic7Z2V0
Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMCwg
MCwgMCknCitQQVNTIGRvY3VtZW50LmJvZHkuYmdDb2xvcj0nICc7Z2V0Q29tcHV0ZWRTdHlsZShk
b2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7IGlzICdyZ2IoMCwgMCwgMCknCitQQVNTIGRv
Y3VtZW50LmJvZHkuYmdDb2xvcj0nIGZmZmZmZiAnO2dldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQu
Ym9keSkuYmFja2dyb3VuZENvbG9yOyBpcyAncmdiKDI1NSwgMjU1LCAyNTUpJworUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0
YTJhYWI0MTViOTVkYTk0YmYwYTMwNmU3MjYyY2ZmODRiNDVjNjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9hdHRyaWJ1dGUtbGVnYWN5LWNvbG9ycy5odG1sCkBAIC0w
LDAgKzEsOCBAQAorPCFET0NUWVBFIEhUTUw+Cis8bWV0YSBjaGFyc2V0PXV0Zjg+Cis8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2Ny
aXB0IHNyYz0ic2NyaXB0LXRlc3RzL2F0dHJpYnV0ZS1sZWdhY3ktY29sb3JzLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zY3JpcHQtdGVzdHMvYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMuanMgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9zY3JpcHQtdGVzdHMvYXR0cmlidXRlLWxlZ2FjeS1jb2xvcnMuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDZmZDdkOTFkMmJkYTNmYjRhMzc2MmVjYTBlNGU2NGU2N2U5NjIyYgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC10ZXN0cy9hdHRyaWJ1dGUt
bGVnYWN5LWNvbG9ycy5qcwpAQCAtMCwwICsxLDU4IEBACitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0
IGVuc3VyZXMgdGhhdCBsZWdhY3kgY29sb3IgYXR0cmlidXRlcyBhcmUgcGFyc2VkIHByb3Blcmx5
LiIpOworCitzaG91bGRCZSgiZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScnO2dldENvbXB1dGVkU3R5
bGUoZG9jdW1lbnQuYm9keSkuYmFja2dyb3VuZENvbG9yOyIsICIncmdiYSgwLCAwLCAwLCAwKSci
KTsKK3Nob3VsZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29sb3I9J3RyYW5zcGFyZW50JztnZXRDb21w
dXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsiLCAiJ3JnYmEoMCwgMCwg
MCwgMCknIik7CitzaG91bGRCZSgiZG9jdW1lbnQuYm9keS5iZ0NvbG9yPScgdHJhbnNwYXJlbnQg
JztnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmJhY2tncm91bmRDb2xvcjsiLCAiJ3Jn
YmEoMCwgMCwgMCwgMCknIik7CisoZnVuY3Rpb24oKXsKK3ZhciB0ZXN0cyA9IFsKKwl7J3Rlc3Qn
OidyZWQnLCAnZXhwZWN0ZWQnOlsyNTUsIDAsIDBdfSwKKwl7J3Rlc3QnOicgcmVkICcsICdleHBl
Y3RlZCc6WzI1NSwgMCwgMF19LAorCXsndGVzdCc6JyNmMDAnLCAnZXhwZWN0ZWQnOlsyNTUsIDAs
IDBdfSwKKwl7J3Rlc3QnOicgI2YwMCAnLCAnZXhwZWN0ZWQnOlsyNTUsIDAsIDBdfSwKKwl7J3Rl
c3QnOicjZmYwMDAwJywgJ2V4cGVjdGVkJzpbMjU1LCAwLCAwXX0sCisJeyd0ZXN0JzonICNmZjAw
MDAgJywgJ2V4cGVjdGVkJzpbMjU1LCAwLCAwXX0sCisJeyd0ZXN0JzonI2Z6eicsICdleHBlY3Rl
ZCc6WzE1LCAwLCAwXX0sCisJeyd0ZXN0JzonI2Zmenp6eicsICdleHBlY3RlZCc6WzI1NSwgMCwg
MF19LAorCXsndGVzdCc6J2YwMCcsICdleHBlY3RlZCc6WzE1LCAwLCAwXX0sCisJeyd0ZXN0Jzon
ZmYwMDAwJywgJ2V4cGVjdGVkJzpbMjU1LCAwLCAwXX0sCisJeyd0ZXN0JzonIzAwMDAwMDAwJywg
J2V4cGVjdGVkJzpbMCwgMCwgMF19LAorCXsndGVzdCc6J2ZvbycsICdleHBlY3RlZCc6WzE1LCAw
LCAwXX0sCisJeyd0ZXN0JzonY2hlZXNlJywgJ2V4cGVjdGVkJzpbMTkyLCAyMzgsIDE0XX0sCisJ
eyd0ZXN0JzonZmbygL+/ZmYnLCAnZXhwZWN0ZWQnOlsyNTUsIDAsIDI1NV19LAorCXsndGVzdCc6
J2bygL+/ZicsICdleHBlY3RlZCc6WzI0MCwgMTUsIDBdfSwKKwl7J3Rlc3QnOidyZ2IoMjU1LCAw
LCAwKScsICdleHBlY3RlZCc6WzAsIDg1LCAwXX0sCisJeyd0ZXN0JzonNTUwMDAwMDAxMTU1MDAw
MDAwMTE1NTAwMDAwMDExJywgJ2V4cGVjdGVkJzpbMTcsIDE3LCAxN119LAorCXsndGVzdCc6JzU1
MDAwMDAwMDE1NTAwMDAwMDAxNTUwMDAwMDAwMScsICdleHBlY3RlZCc6WzEsIDEsIDFdfSwKKwl7
J3Rlc3QnOic1NTAwMDAwMDAwNTUwMDAwMDAwMDU1MDAwMDAwMDAnLCAnZXhwZWN0ZWQnOlswLCAw
LCAwXX0sCisJeyd0ZXN0JzonNTUwMDIwMDAxMTU1MDAwMDAwMTE1NTAwMDAwMDExJywgJ2V4cGVj
dGVkJzpbMzIsIDAsIDBdfSwKKwl7J3Rlc3QnOic1NfKAv78yMPKAv78xMTU18oC/v/KAv78wMDEx
NTUwMPKAv78wMDExJywgJ2V4cGVjdGVkJzpbMzIsIDAsIDBdfSwKKwl7J3Rlc3QnOicjJywgJ2V4
cGVjdGVkJzpbMCwgMCwgMF19LAorCXsndGVzdCc6JyM1JywgJ2V4cGVjdGVkJzpbNSwgMCwgMF19
LAorCXsndGVzdCc6JyM1NScsICdleHBlY3RlZCc6WzUsIDUsIDBdfSwKKwl7J3Rlc3QnOicjNTU1
JywgJ2V4cGVjdGVkJzpbODUsIDg1LCA4NV19LAorCXsndGVzdCc6JyM1NTU1JywgJ2V4cGVjdGVk
JzpbODUsIDg1LCAwXX0sCisJeyd0ZXN0JzonIzU1NTU1JywgJ2V4cGVjdGVkJzpbODUsIDg1LCA4
MF19LAorCXsndGVzdCc6JyM1NTU1NTUnLCAnZXhwZWN0ZWQnOls4NSwgODUsIDg1XX0sCisJeyd0
ZXN0JzonIzU1NTU1NTUnLCAnZXhwZWN0ZWQnOls4NSwgODUsIDgwXX0sCisJeyd0ZXN0JzonIzU1
NTU1NTU1JywgJ2V4cGVjdGVkJzpbODUsIDg1LCA4NV19LAorCXsndGVzdCc6JzUnLCAnZXhwZWN0
ZWQnOls1LCAwLCAwXX0sCisJeyd0ZXN0JzonNTUnLCAnZXhwZWN0ZWQnOls1LCA1LCAwXX0sCisJ
eyd0ZXN0JzonNTU1JywgJ2V4cGVjdGVkJzpbNSwgNSwgNV19LAorCXsndGVzdCc6JzU1NTUnLCAn
ZXhwZWN0ZWQnOls4NSwgODUsIDBdfSwKKwl7J3Rlc3QnOic1NTU1NScsICdleHBlY3RlZCc6Wzg1
LCA4NSwgODBdfSwKKwl7J3Rlc3QnOic1NTU1NTUnLCAnZXhwZWN0ZWQnOls4NSwgODUsIDg1XX0s
CisJeyd0ZXN0JzonNTU1NTU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgODBdfSwKKwl7J3Rlc3Qn
Oic1NTU1NTU1NScsICdleHBlY3RlZCc6Wzg1LCA4NSwgODVdfSwKKwl7J3Rlc3QnOidmZmZmZmZm
ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm
ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm
ZmZmZmZmZjAwMDAwMCcsICdleHBlY3RlZCc6WzI1NSwgMjU1LCAyNTVdfSwKKwl7J3Rlc3QnOify
gL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KA
v7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/
v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/
8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/y
gL+/8oC/v/KAv7/ygL+/8oC/v/KAv7/ygL+/ZmZmZmZmJywgJ2V4cGVjdGVkJzpbMCwgMCwgMF19
LAorCXsndGVzdCc6JyAnLCAnZXhwZWN0ZWQnOlswLCAwLCAwXX0sCisJeyd0ZXN0JzonIGZmZmZm
ZiAnLCAnZXhwZWN0ZWQnOlsyNTUsIDI1NSwgMjU1XX0KK107CisKK2Zvcih2YXIgaSA9IDA7IGkg
PCB0ZXN0cy5sZW5ndGg7IGkrKykgeworCXZhciB0ID0gdGVzdHNbaV0udGVzdDsKKwl2YXIgZSA9
IHRlc3RzW2ldLmV4cGVjdGVkOworCXNob3VsZEJlKCJkb2N1bWVudC5ib2R5LmJnQ29sb3I9JyIg
KyB0ICsgIic7Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5iYWNrZ3JvdW5kQ29sb3I7
IiwgIidyZ2IoIiArIGVbMF0gKyAiLCAiICsgZVsxXSArICIsICIgKyBlWzJdICsgIiknIik7Cit9
Cit9KSgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMjY5OWZkMGU1ODZhNWNkOWY1MWE0YzkyYmRjM2MwM2M0NWYy
YTVhZi4uMjU2NjZkNTU1NGRlMTc1Nzk1N2VjZmU1YWI1ZGRiYWFmZjk2OGNiMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE4IEBACisyMDExLTA2LTIwICBUYWIgQXRraW5zICA8amFja2FsbWFnZUBn
bWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRml4IGxlZ2FjeSBjb2xvciBhdHRyaWJ1dGUgcGFyc2luZyB0byBtYXRjaCBIVE1MIHNwZWMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMDI5CisK
KyAgICAgICAgUmVsZXZhbnQgc3BlYyBsaW5rOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mv
d2ViLWFwcHMvY3VycmVudC13b3JrL2NvbXBsZXRlL2NvbW1vbi1taWNyb3N5bnRheGVzLmh0bWwj
cnVsZXMtZm9yLXBhcnNpbmctYS1sZWdhY3ktY29sb3ItdmFsdWUKKyAgICAgICAgRml4IGxlZ2Fj
eSBjb2xvciBhdHRyaWJ1dGUgcGFyc2luZyAoPGJvZHkgYmdjb2xvcj4sIDxmb250IGNvbG9yPiwg
ZXRjLikgdG8gbWF0Y2ggdGhlIEhUTUwgc3BlYyBhbmQgbW9yZSBjbG9zZWx5IG1hdGNoIG90aGVy
IGJyb3dzZXJzLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL2F0dHJpYnV0ZS1sZWdhY3ktY29s
b3JzLmh0bWwKKworICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmFkZENTU0NvbG9yKToKKwogMjAxMS0wNi0xNCAgRGF2aWQg
S2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIDxodHRwOi8vd2Via2l0Lm9y
Zy9iLzYyNjc3PiBQYXJ0IDIvMjogUmVtb3ZlIGR1cGxpY2F0ZSBoZWFkZXIgZW50cmllcyBpbiBX
ZWJDb3JlIHByb2plY3QgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxl
ZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCmluZGV4
IGJkOTU0M2RhMDg4MzJmYjQwOGI2ZmNmODhmNTgyMzY4Njg1Y2M1MzQuLjI0ZjM3MTNkZmI3MTMy
NWMyNzM1ODBiNDYwNDA5MWRkMzk4MTJkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TdHlsZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVu
dC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAj
aW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIK
KyNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNsYXNzTGlzdC5oIgogI2luY2x1ZGUgIkNv
bnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkRPTVRva2VuTGlzdC5oIgpAQCAtMzE3
LDc3ICszMTgsODggQEAgdm9pZCBTdHlsZWRFbGVtZW50OjphZGRDU1NMZW5ndGgoQXR0cmlidXRl
KiBhdHRyLCBpbnQgaWQsIGNvbnN0IFN0cmluZyAmdmFsdWUpCiAgICAgYXR0ci0+ZGVjbCgpLT5z
ZXRMZW5ndGhQcm9wZXJ0eShpZCwgdmFsdWUsIGZhbHNlKTsKIH0KIAotLyogY29sb3IgcGFyc2lu
ZyB0aGF0IHRyaWVzIHRvIG1hdGNoIGFzIGNsb3NlIGFzIHBvc3NpYmxlIElFIDYuICovCi12b2lk
IFN0eWxlZEVsZW1lbnQ6OmFkZENTU0NvbG9yKEF0dHJpYnV0ZSogYXR0ciwgaW50IGlkLCBjb25z
dCBTdHJpbmcmIGMpCitzdGF0aWMgU3RyaW5nIHBhcnNlQ29sb3JTdHJpbmdXaXRoQ3JhenlMZWdh
Y3lSdWxlcyhjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nKQogewotICAgIC8vIHRoaXMgaXMgdGhl
IG9ubHkgY2FzZSBubyBjb2xvciBnZXRzIGFwcGxpZWQgaW4gSUUuCi0gICAgaWYgKCFjLmxlbmd0
aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWF0dHItPmRlY2woKSkKLSAgICAgICAg
Y3JlYXRlTWFwcGVkRGVjbChhdHRyKTsKKyAgICAvLyBQZXIgc3BlYywgb25seSBsb29rIGF0IHRo
ZSBmaXJzdCAxMjggZGlnaXRzIG9mIHRoZSBzdHJpbmcuCisgICAgY29uc3Qgc2l6ZV90IG1heENv
bG9yTGVuZ3RoID0gMTI4OworICAgIC8vIFdlJ2xsIHBhZCB0aGUgYnVmZmVyIHdpdGggdHdvIGV4
dHJhIDBzIGxhdGVyLCBzbyByZXNlcnZlIHR3byBtb3JlIHRoYW4gdGhlIG1heC4KKyAgICBWZWN0
b3I8Y2hhciwgbWF4Q29sb3JMZW5ndGgrMj4gZGlnaXRCdWZmZXI7CiAgICAgCi0gICAgaWYgKGF0
dHItPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIGMsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIFN0cmluZyBjb2xvciA9IGM7Ci0gICAgLy8gbm90IHNvbWV0aGluZyB0aGF0IGZp
dHMgdGhlIHNwZWNzLgorICAgIHNpemVfdCBpID0gMDsKKyAgICAvLyBTa2lwIGEgbGVhZGluZyAj
LgorICAgIGlmIChjb2xvclN0cmluZ1swXSA9PSAnIycpCisgICAgICAgIGkgPSAxOwogICAgIAot
ICAgIC8vIHdlJ3JlIGVtdWxhdGluZyBJRXMgY29sb3IgcGFyc2VyIGhlcmUuIEl0IG1hcHMgdHJh
bnNwYXJlbnQgdG8gYmxhY2ssIG90aGVyd2lzZSBpdCB0cmllcyB0byBidWlsZCBhIHJnYiB2YWx1
ZQotICAgIC8vIG91dCBvZiBldmVyeXRoaW5nIHlvdSBwdXQgaW4uIFRoZSBhbGdvcml0aG0gaXMg
ZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZCwgYnV0IHNlZW1zIHRvIHdvcmsgZm9yIGFsbCB0ZXN0
IGNhc2VzIEkgaGF2ZS4KKyAgICAvLyBHcmFiIHRoZSBmaXJzdCAxMjggY2hhcmFjdGVycywgcmVw
bGFjaW5nIG5vbi1oZXggY2hhcmFjdGVycyB3aXRoIDAuCisgICAgLy8gTm9uLUJNUCBjaGFyYWN0
ZXJzIGFyZSByZXBsYWNlZCB3aXRoICIwMCIgZHVlIHRvIHRoZW0gYXBwZWFyaW5nIGFzIHR3byAi
Y2hhcmFjdGVycyIgaW4gdGhlIFN0cmluZy4KKyAgICBmb3IgKDsgaSA8IGNvbG9yU3RyaW5nLmxl
bmd0aCgpICYmIGRpZ2l0QnVmZmVyLnNpemUoKSA8IG1heENvbG9yTGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQoY29sb3JTdHJpbmdbaV0pKQorICAgICAgICAgICAg
ZGlnaXRCdWZmZXIuYXBwZW5kKCcwJyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRpZ2l0
QnVmZmVyLmFwcGVuZChjb2xvclN0cmluZ1tpXSk7CisgICAgfQorCisgICAgaWYgKCFkaWdpdEJ1
ZmZlci5zaXplKCkpCisgICAgICAgIHJldHVybiAiIzAwMDAwMCI7CisKKyAgICAvLyBQYWQgdGhl
IGJ1ZmZlciBvdXQgdG8gYXQgbGVhc3QgdGhlIG5leHQgbXVsdGlwbGUgb2YgdGhyZWUgaW4gc2l6
ZS4KKyAgICBkaWdpdEJ1ZmZlci5hcHBlbmQoJzAnKTsKKyAgICBkaWdpdEJ1ZmZlci5hcHBlbmQo
JzAnKTsKKworICAgIGlmIChkaWdpdEJ1ZmZlci5zaXplKCkgPCA2KQorICAgICAgICByZXR1cm4g
U3RyaW5nOjpmb3JtYXQoIiMwJWMwJWMwJWMiLCBkaWdpdEJ1ZmZlclswXSwgZGlnaXRCdWZmZXJb
MV0sIGRpZ2l0QnVmZmVyWzJdKTsKICAgICAKLSAgICAvLyB0aGUgbGVuZ3RoIG9mIHRoZSBjb2xv
ciB2YWx1ZSBpcyByb3VuZGVkIHVwIHRvIHRoZSBuZXh0Ci0gICAgLy8gbXVsdGlwbGUgb2YgMy4g
ZWFjaCBwYXJ0IG9mIHRoZSByZ2IgdHJpcGxlIHRoZW4gZ2V0cyBvbmUgdGhpcmQKLSAgICAvLyBv
ZiB0aGUgbGVuZ3RoLgotICAgIC8vCi0gICAgLy8gRWFjaCB0cmlwbGV0IGlzIHBhcnNlZCBieXRl
IGJ5IGJ5dGUsIG1hcHBpbmcKLSAgICAvLyBlYWNoIG51bWJlciB0byBhIGhleCB2YWx1ZSAoMC05
YS1mQS1GIHRvIHRoZWlyIHZhbHVlcwotICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSB0byAwKS4KLSAg
ICAvLwotICAgIC8vIFRoZSBoaWdoZXN0IG5vbiB6ZXJvIGRpZ2l0IGluIGFsbCB0cmlwbGV0cyBp
cyByZW1lbWJlcmVkLCBhbmQKLSAgICAvLyB1c2VkIGFzIGEgbm9ybWFsaXphdGlvbiBwb2ludCB0
byBub3JtYWxpemUgdG8gdmFsdWVzIGJldHdlZW4gMAotICAgIC8vIGFuZCAyNTUuCisgICAgLy8g
U3BsaXQgdGhlIGRpZ2l0cyBpbnRvIHRocmVlIGNvbXBvbmVudHMsIHRoZW4gc2VhcmNoIHRoZSBs
YXN0IDggZGlnaXRzIG9mIGVhY2ggY29tcG9uZW50LgorICAgIEFTU0VSVChkaWdpdEJ1ZmZlci5z
aXplKCkgPj0gNik7CisgICAgc2l6ZV90IGNvbXBvbmVudExlbmd0aCA9IGRpZ2l0QnVmZmVyLnNp
emUoKSAvIDM7CisgICAgc2l6ZV90IGNvbXBvbmVudFNlYXJjaFdpbmRvd0xlbmd0aCA9IG1pbjxz
aXplX3Q+KGNvbXBvbmVudExlbmd0aCwgOCk7CisgICAgc2l6ZV90IHJlZEluZGV4ID0gY29tcG9u
ZW50TGVuZ3RoIC0gY29tcG9uZW50U2VhcmNoV2luZG93TGVuZ3RoOworICAgIHNpemVfdCBncmVl
bkluZGV4ID0gY29tcG9uZW50TGVuZ3RoICogMiAtIGNvbXBvbmVudFNlYXJjaFdpbmRvd0xlbmd0
aDsKKyAgICBzaXplX3QgYmx1ZUluZGV4ID0gY29tcG9uZW50TGVuZ3RoICogMyAtIGNvbXBvbmVu
dFNlYXJjaFdpbmRvd0xlbmd0aDsKKyAgICAvLyBTa2lwIGRpZ2l0cyB1bnRpbCBvbmUgb2YgdGhl
bSBpcyBub24temVybywgb3Igd2UndmUgb25seSBnb3QgdHdvIGRpZ2l0cyBsZWZ0IGluIHRoZSBj
b21wb25lbnQuCisgICAgd2hpbGUgKGRpZ2l0QnVmZmVyW3JlZEluZGV4XSA9PSAnMCcgJiYgZGln
aXRCdWZmZXJbZ3JlZW5JbmRleF0gPT0gJzAnICYmIGRpZ2l0QnVmZmVyW2JsdWVJbmRleF0gPT0g
JzAnICYmIChjb21wb25lbnRMZW5ndGggLSByZWRJbmRleCkgPiAyKSB7CisgICAgICAgIHJlZElu
ZGV4Kys7CisgICAgICAgIGdyZWVuSW5kZXgrKzsKKyAgICAgICAgYmx1ZUluZGV4Kys7CisgICAg
fQorICAgIEFTU0VSVChyZWRJbmRleCA+PSAwKTsKKyAgICBBU1NFUlQocmVkSW5kZXggKyAxIDwg
Y29tcG9uZW50TGVuZ3RoKTsKKyAgICBBU1NFUlQoZ3JlZW5JbmRleCA+PSBjb21wb25lbnRMZW5n
dGgpOworICAgIEFTU0VSVChncmVlbkluZGV4ICsgMSA8IGNvbXBvbmVudExlbmd0aCAqIDIpOwor
ICAgIEFTU0VSVChibHVlSW5kZXggPj0gY29tcG9uZW50TGVuZ3RoICogMik7CisgICAgQVNTRVJU
KGJsdWVJbmRleCArIDEgPCBkaWdpdEJ1ZmZlci5zaXplKCkpOworICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiIyVjJWMlYyVjJWMlYyIsIGRpZ2l0QnVmZmVyW3JlZEluZGV4XSwgZGlnaXRCdWZm
ZXJbcmVkSW5kZXggKyAxXSwgZGlnaXRCdWZmZXJbZ3JlZW5JbmRleF0sIGRpZ2l0QnVmZmVyW2dy
ZWVuSW5kZXggKyAxXSwgZGlnaXRCdWZmZXJbYmx1ZUluZGV4XSwgZGlnaXRCdWZmZXJbYmx1ZUlu
ZGV4ICsgMV0pOyAgIAorfQorCisvLyBDb2xvciBwYXJzaW5nIHRoYXQgbWF0Y2hlcyBIVE1MJ3Mg
InJ1bGVzIGZvciBwYXJzaW5nIGEgbGVnYWN5IGNvbG9yIHZhbHVlIgordm9pZCBTdHlsZWRFbGVt
ZW50OjphZGRDU1NDb2xvcihBdHRyaWJ1dGUqIGF0dHJpYnV0ZSwgaW50IGlkLCBjb25zdCBTdHJp
bmcmIGF0dHJpYnV0ZVZhbHVlKQoreworICAgIC8vIFRoZSBlbXB0eSBzdHJpbmcgZG9lc24ndCBh
cHBseSBhIGNvbG9yLiAoSnVzdCB3aGl0ZXNwYWNlIGRvZXMsIHdoaWNoIGlzIHdoeSB0aGlzIGNo
ZWNrIG9jY3VycyBiZWZvcmUgdHJpbW1pbmcuKQorICAgIGlmICghYXR0cmlidXRlVmFsdWUubGVu
Z3RoKCkpCisgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNl
KGNvbG9yLCAidHJhbnNwYXJlbnQiKSkgewotICAgICAgICBpZiAoY29sb3JbMF0gPT0gJyMnKQot
ICAgICAgICAgICAgY29sb3IucmVtb3ZlKDAsIDEpOwotICAgICAgICBpbnQgYmFzaWNMZW5ndGgg
PSAoY29sb3IubGVuZ3RoKCkgKyAyKSAvIDM7Ci0gICAgICAgIGlmIChiYXNpY0xlbmd0aCA+IDEp
IHsKLSAgICAgICAgICAgIC8vIElFIGlnbm9yZXMgY29sb3JzIHdpdGggdGhyZWUgZGlnaXRzIG9y
IGxlc3MKLSAgICAgICAgICAgIGludCBjb2xvcnNbM10gPSB7IDAsIDAsIDAgfTsKLSAgICAgICAg
ICAgIGludCBjb21wb25lbnQgPSAwOwotICAgICAgICAgICAgaW50IHBvcyA9IDA7Ci0gICAgICAg
ICAgICBpbnQgbWF4RGlnaXQgPSBiYXNpY0xlbmd0aC0xOwotICAgICAgICAgICAgd2hpbGUgKGNv
bXBvbmVudCA8IDMpIHsKLSAgICAgICAgICAgICAgICAvLyBzZWFyY2ggZm9yd2FyZCBmb3IgZGln
aXRzIGluIHRoZSBzdHJpbmcKLSAgICAgICAgICAgICAgICBpbnQgbnVtRGlnaXRzID0gMDsKLSAg
ICAgICAgICAgICAgICB3aGlsZSAocG9zIDwgKGludCljb2xvci5sZW5ndGgoKSAmJiBudW1EaWdp
dHMgPCBiYXNpY0xlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY29tcG9uZW50
XSA8PD0gNDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlIZXhEaWdpdChjb2xvcltw
b3NdKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NvbXBvbmVudF0gKz0gdG9B
U0NJSUhleFZhbHVlKGNvbG9yW3Bvc10pOwotICAgICAgICAgICAgICAgICAgICAgICAgbWF4RGln
aXQgPSBtaW4obWF4RGlnaXQsIG51bURpZ2l0cyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgbnVtRGlnaXRzKys7Ci0gICAgICAgICAgICAgICAgICAgIHBvcysr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aGlsZSAobnVtRGlnaXRzKysg
PCBiYXNpY0xlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NvbXBvbmVudF0gPDw9
IDQ7Ci0gICAgICAgICAgICAgICAgY29tcG9uZW50Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBtYXhEaWdpdCA9IGJhc2ljTGVuZ3RoIC0gbWF4RGlnaXQ7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIG5vcm1hbGl6ZSB0byAwMC1mZi4gVGhlIGhpZ2hlc3QgZmlsbGVkIGRpZ2l0
IGNvdW50cywgbWluaW11bSBpcyAyIGRpZ2l0cwotICAgICAgICAgICAgbWF4RGlnaXQgLT0gMjsK
LSAgICAgICAgICAgIGNvbG9yc1swXSA+Pj0gNCAqIG1heERpZ2l0OwotICAgICAgICAgICAgY29s
b3JzWzFdID4+PSA0ICogbWF4RGlnaXQ7Ci0gICAgICAgICAgICBjb2xvcnNbMl0gPj49IDQgKiBt
YXhEaWdpdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29sb3IgPSBTdHJpbmc6OmZvcm1h
dCgiIyUwMnglMDJ4JTAyeCIsIGNvbG9yc1swXSwgY29sb3JzWzFdLCBjb2xvcnNbMl0pOwotICAg
ICAgICAgICAgaWYgKGF0dHItPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIGNvbG9yLCBmYWxzZSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgU3RyaW5nIGNvbG9yID0g
YXR0cmlidXRlVmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCk7CisKKyAgICAvLyAidHJhbnNwYXJlbnQi
IGRvZXNuJ3QgYXBwbHkgYSBjb2xvciBlaXRoZXIuCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGNvbG9yLCAidHJhbnNwYXJlbnQiKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFhdHRy
aWJ1dGUtPmRlY2woKSkKKyAgICAgICAgY3JlYXRlTWFwcGVkRGVjbChhdHRyaWJ1dGUpOworCisg
ICAgLy8gSWYgdGhlIHN0cmluZyBpcyBhIG5hbWVkIENTUyBjb2xvciwgdXNlIHRoYXQgY29sb3Iu
CisgICAgQ29sb3IgZm91bmRDb2xvcjsKKyAgICBmb3VuZENvbG9yLnNldE5hbWVkQ29sb3IoY29s
b3IpOworICAgIGlmIChmb3VuZENvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBhdHRyaWJ1dGUt
PmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIGNvbG9yLCBmYWxzZSk7CisgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgYXR0ci0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwgQ1NTVmFsdWVCbGFjaywg
ZmFsc2UpOworCisgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBhIDMgb3IgNi1kaWdpdCBoZXggY29s
b3IsIHVzZSB0aGF0IGNvbG9yLgorICAgIGlmIChjb2xvclswXSA9PSAnIycgJiYgKGNvbG9yLmxl
bmd0aCgpID09IDQgfHwgY29sb3IubGVuZ3RoKCkgPT0gNykgJiYgYXR0cmlidXRlLT5kZWNsKCkt
PnNldFByb3BlcnR5KGlkLCBjb2xvciwgZmFsc2UpKQorICAgICAgICByZXR1cm47CisKKyAgICBh
dHRyaWJ1dGUtPmRlY2woKS0+c2V0UHJvcGVydHkoaWQsIHBhcnNlQ29sb3JTdHJpbmdXaXRoQ3Jh
enlMZWdhY3lSdWxlcyhjb2xvciksIGZhbHNlKTsKIH0KIAogdm9pZCBTdHlsZWRFbGVtZW50Ojpj
cmVhdGVNYXBwZWREZWNsKEF0dHJpYnV0ZSogYXR0cikK
</data>

          </attachment>
      

    </bug>

</bugzilla>