<?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>91398</bug_id>
          
          <creation_ts>2012-07-16 09:05:32 -0700</creation_ts>
          <short_desc>Fix blend filter for autovectorizing</short_desc>
          <delta_ts>2012-07-25 04:16:15 -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>SVG</component>
          <version>420+</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="Allan Sandfeld Jensen">allan.jensen</reporter>
          <assigned_to name="Allan Sandfeld Jensen">allan.jensen</assigned_to>
          <cc>webkit.review.bot</cc>
    
    <cc>zherczeg</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>670381</commentid>
    <comment_count>0</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-16 09:05:32 -0700</bug_when>
    <thetext>The blend filter is currently written in such a way that it can not be autovectorized by the GCC auto-vectorizer, by removing conditions from the inner of the loop, GCC will be able to auto-vectorizing giving a large potential speedup on all platforms with SIMD instructions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670388</commentid>
    <comment_count>1</comment_count>
      <attachid>152547</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-16 09:12:30 -0700</bug_when>
    <thetext>Created attachment 152547
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670399</commentid>
    <comment_count>2</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-16 09:29:57 -0700</bug_when>
    <thetext>Bonus info I missed in the ChangeLog, even without auto-vectorization the improvements themselves yield a 1.5x speed-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670455</commentid>
    <comment_count>3</comment_count>
      <attachid>152547</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-07-16 10:48:10 -0700</bug_when>
    <thetext>Comment on attachment 152547
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        To support auto-vectorizing, the loop had to be unswitched, and regular arrays used that 
&gt; +        did not do boundary-checks in the inner loop. Finally the integer division by 255
&gt; +        was optimized not use integer division intrinsics.

Nice speed-up, I&apos;d like to hear Zoltans opinion on the patch as well, he&apos;s our master optimizer...

&gt; Source/WebCore/platform/graphics/filters/FEBlend.cpp:68
&gt; +    // This is an approximate algorithm for division by 255, but it gives accurate results for 16bit values.

Perfect mixture of a what &amp; why comment :-)

&gt; Source/WebCore/platform/graphics/filters/FEBlend.cpp:114
&gt; +        for (unsigned pixelOffset = 0; pixelOffset &lt; len; pixelOffset++) {
&gt; +            unsigned char alphaA = sourcePixelA[3];
&gt; +            unsigned char alphaB = sourcePixelB[3];
&gt; +            for (unsigned channel = 0; channel &lt; 3; ++channel)
&gt; +                destinationPixel[channel] = normal(sourcePixelA[channel], sourcePixelB[channel], alphaA, alphaB);
&gt; +            destinationPixel[3] = 255 - div255((255 - alphaA) * (255 - alphaB));
&gt; +            sourcePixelA += 4;
&gt; +            sourcePixelB += 4;
&gt; +            destinationPixel += 4;
&gt; +        }

It should still be possible to share this in a static inline helper function w/o loss of performance, if you pass in the operation as function pointer (&amp;normal, &amp;multiply, etc.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670473</commentid>
    <comment_count>4</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-16 11:08:04 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; Source/WebCore/platform/graphics/filters/FEBlend.cpp:114
&gt; &gt; +        for (unsigned pixelOffset = 0; pixelOffset &lt; len; pixelOffset++) {
&gt; &gt; +            unsigned char alphaA = sourcePixelA[3];
&gt; &gt; +            unsigned char alphaB = sourcePixelB[3];
&gt; &gt; +            for (unsigned channel = 0; channel &lt; 3; ++channel)
&gt; &gt; +                destinationPixel[channel] = normal(sourcePixelA[channel], sourcePixelB[channel], alphaA, alphaB);
&gt; &gt; +            destinationPixel[3] = 255 - div255((255 - alphaA) * (255 - alphaB));
&gt; &gt; +            sourcePixelA += 4;
&gt; &gt; +            sourcePixelB += 4;
&gt; &gt; +            destinationPixel += 4;
&gt; &gt; +        }
&gt; 
&gt; It should still be possible to share this in a static inline helper function w/o loss of performance, if you pass in the operation as function pointer (&amp;normal, &amp;multiply, etc.)

Maybe, I thought it would result in a call by function-pointer which would make vectorization impossible, but if the functions is fully inlined first it might work. Too bad we can not instantiate templates with functions (without by using wrapper classes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670483</commentid>
    <comment_count>5</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-07-16 11:13:07 -0700</bug_when>
    <thetext>Nice speedup. I agree with Niko&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676575</commentid>
    <comment_count>6</comment_count>
      <attachid>153999</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-24 02:44:56 -0700</bug_when>
    <thetext>Created attachment 153999
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676613</commentid>
    <comment_count>7</comment_count>
      <attachid>153999</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-07-24 03:37:19 -0700</bug_when>
    <thetext>Comment on attachment 153999
Patch

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

Looks better, I still have some suggestions though:

&gt; Source/WebCore/platform/graphics/filters/FEBlend.cpp:66
&gt; +static inline unsigned char div255(uint16_t value)

nitpick: fastDivideBy255, to avoid abbreviations.

&gt; Source/WebCore/platform/graphics/filters/FEBlend.cpp:124
&gt; +template&lt;typename BlendFunctor&gt;
&gt; +static void platformApply(unsigned char* sourcePixelA, unsigned char* sourcePixelB,
&gt; +                          unsigned char* destinationPixel, unsigned pixelArrayLength)

I&apos;m not sure why you need a templatified solution. I would have defined:
typedef void (*BlendModefunction)(uchar colorA, uchar colorB, uchar alphaA, uchar alphaB)
for the use in
static void platformApply(uchar* sourcePixelA, uchar* sourcePixelB, uchar* destPixel, unsigned pixelArrayLength, BlendModeFunction blendModeFunction)
{
...
destinationPixel[0] = (*blendModeFunction)(sourcePixelA....
}

This way you don&apos;t need to wrap the existing darken/lighten/.. methods in dummy classes.
Please elaborate if I&apos;m overlooking something which makes this impossible.

&gt; Source/WebCore/platform/graphics/filters/FEBlend.cpp:160
&gt; +        platformApply&lt;BlendUnknown&gt;(sourcePixelA, sourcePixelB, destinationPixel, pixelArrayLength);

If you go with my proposed solution above, you can pass 0 as function-pointer here for the unknown case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676635</commentid>
    <comment_count>8</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-24 04:18:25 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 153999 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=153999&amp;action=review
&gt; 
&gt; Looks better, I still have some suggestions though:
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FEBlend.cpp:66
&gt; &gt; +static inline unsigned char div255(uint16_t value)
&gt; 
&gt; nitpick: fastDivideBy255, to avoid abbreviations.
&gt; 
Will do.

&gt; I&apos;m not sure why you need a templatified solution. 

Because I want the functions to be inlined, if they are not inlined the loop that calls them can not be vectorized, and a function-pointer is a run-time parameter, while template parameters are compile-time parameters. We need the function to be fully defined at compile time for the compiler to be able to take advantage of every possible optimization.

&gt; &gt; Source/WebCore/platform/graphics/filters/FEBlend.cpp:160
&gt; &gt; +        platformApply&lt;BlendUnknown&gt;(sourcePixelA, sourcePixelB, destinationPixel, pixelArrayLength);
&gt; 
&gt; If you go with my proposed solution above, you can pass 0 as function-pointer here for the unknown case.

I don&apos;t see what that would gain. We would need to special case the null-pointer  function anyway or it would segfault when called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676647</commentid>
    <comment_count>9</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-07-24 04:27:45 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Because I want the functions to be inlined, if they are not inlined the loop that calls them can not be vectorized, and a function-pointer is a run-time parameter, while template parameters are compile-time parameters. We need the function to be fully defined at compile time for the compiler to be able to take advantage of every possible optimization.
Ouch, you&apos;re right, I take back the criticism. If you upload a new patch I&apos;ll r+ it.

&gt; I don&apos;t see what that would gain. We would need to special case the null-pointer  function anyway or it would segfault when called.
I thought of special casing, but it&apos;s really not worth it, especially if you can&apos;t use it anyways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676667</commentid>
    <comment_count>10</comment_count>
      <attachid>154021</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-24 04:56:22 -0700</bug_when>
    <thetext>Created attachment 154021
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676691</commentid>
    <comment_count>11</comment_count>
      <attachid>154021</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-07-24 05:33:14 -0700</bug_when>
    <thetext>Comment on attachment 154021
Patch

Thanks Allan, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676755</commentid>
    <comment_count>12</comment_count>
      <attachid>154021</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-24 06:38:05 -0700</bug_when>
    <thetext>Comment on attachment 154021
Patch

Clearing flags on attachment: 154021

Committed r123467: &lt;http://trac.webkit.org/changeset/123467&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676756</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-24 06:38:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677720</commentid>
    <comment_count>14</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-07-25 00:15:58 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Because I want the functions to be inlined, if they are not inlined the loop that calls them can not be vectorized, and a function-pointer is a run-time parameter, while template parameters are compile-time parameters. We need the function to be fully defined at compile time for the compiler to be able to take advantage of every possible optimization.
&gt; Ouch, you&apos;re right, I take back the criticism. If you upload a new patch I&apos;ll r+ it.

Hm, I slept a night over this. What you could have done is:

template&lt;void myFunction()&gt;
void doSomething() { myFunction(); }

This still allows the compile-time optimizations, but avoids the classes wrapping apply() functions.
What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677744</commentid>
    <comment_count>15</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-25 00:43:41 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; Because I want the functions to be inlined, if they are not inlined the loop that calls them can not be vectorized, and a function-pointer is a run-time parameter, while template parameters are compile-time parameters. We need the function to be fully defined at compile time for the compiler to be able to take advantage of every possible optimization.
&gt; &gt; Ouch, you&apos;re right, I take back the criticism. If you upload a new patch I&apos;ll r+ it.
&gt; 
&gt; Hm, I slept a night over this. What you could have done is:
&gt; 
&gt; template&lt;void myFunction()&gt;
&gt; void doSomething() { myFunction(); }
&gt; 
&gt; This still allows the compile-time optimizations, but avoids the classes wrapping apply() functions.
&gt; What do you think?

This is what I wanted to do, but I have tried the same approach before in other contexts, and it appears functions are not allowed as template argument for some reason. Maybe it would work in C++11 though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677752</commentid>
    <comment_count>16</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-07-25 00:51:33 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; This is what I wanted to do, but I have tried the same approach before in other contexts, and it appears functions are not allowed as template argument for some reason. Maybe it would work in C++11 though.

I&apos;m quite sure that is a valid c++ construct, even before c++11. A quick grep shows this is actually used in our HTML5 parser:

class HTMLTreeBuilder::ExternalCharacterTokenBuffer {
    WTF_MAKE_NONCOPYABLE(ExternalCharacterTokenBuffer);
public:
...

    String takeLeadingWhitespace()
    {
        return takeLeading&lt;isHTMLSpace&gt;();
    }

..

    template&lt;bool characterPredicate(UChar)&gt;
    void skipLeading()
    {
        ASSERT(!isEmpty());
        while (characterPredicate(*m_current)) {
            if (++m_current == m_end)
                return;
        }
    }

    template&lt;bool characterPredicate(UChar)&gt;
    String takeLeading()
    {
        ASSERT(!isEmpty());
        const UChar* start = m_current;
        skipLeading&lt;characterPredicate&gt;();
        if (start == m_current)
            return String();
        return String(start, m_current - start);
    }
...

Can you give it another try?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677796</commentid>
    <comment_count>17</comment_count>
      <attachid>154292</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-25 01:48:46 -0700</bug_when>
    <thetext>Created attachment 154292
Patch

You are right, this actually works. I wonder what has changed, or what I did wrong last time I tried this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677797</commentid>
    <comment_count>18</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-25 01:50:29 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Created an attachment (id=154292) [details]
&gt; Patch
&gt; 
&gt; You are right, this actually works. I wonder what has changed, or what I did wrong last time I tried this.

Well, static functions are not allowed. So I had to removed the static argument from the functions. This might could cause trouble with all-in-one compilations, if it does we need to add an extra namespace to these functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677821</commentid>
    <comment_count>19</comment_count>
      <attachid>154292</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-07-25 02:22:52 -0700</bug_when>
    <thetext>Comment on attachment 154292
Patch

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

I&apos;d r+ this as-is, though it doesn&apos;t apply on the bots. Still r=me, please watch the bots to make sure it builds everywhere.
Thanks Allan, I&apos;m now fully satisfied with your solution!

&gt; Source/WebCore/platform/graphics/filters/FEBlend.cpp:74
&gt; +inline unsigned char normal(unsigned char colorA, unsigned char colorB, unsigned char alphaA, unsigned char)

You could just rename this to &quot;feBlendNormal&quot;, this will reduce the likelihood of clashes in all-in-one builds a lot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677822</commentid>
    <comment_count>20</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-07-25 02:23:27 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Created an attachment (id=154292) [details]
&gt; Patch
&gt; 
&gt; You are right, this actually works. I wonder what has changed, or what I did wrong last time I tried this.
Your patch is 6.66k, evil, but works ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677845</commentid>
    <comment_count>21</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-25 02:49:50 -0700</bug_when>
    <thetext>Reopen to get the EWS to check the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677848</commentid>
    <comment_count>22</comment_count>
      <attachid>154307</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-25 02:53:48 -0700</bug_when>
    <thetext>Created attachment 154307
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677882</commentid>
    <comment_count>23</comment_count>
      <attachid>154307</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-07-25 04:01:05 -0700</bug_when>
    <thetext>Comment on attachment 154307
Patch

Builds on all platforms, so please land it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677901</commentid>
    <comment_count>24</comment_count>
      <attachid>154307</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-25 04:16:10 -0700</bug_when>
    <thetext>Comment on attachment 154307
Patch

Clearing flags on attachment: 154307

Committed r123602: &lt;http://trac.webkit.org/changeset/123602&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677902</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-25 04:16:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152547</attachid>
            <date>2012-07-16 09:12:30 -0700</date>
            <delta_ts>2012-07-24 02:44:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91398-20120716181232.patch</filename>
            <type>text/plain</type>
            <size>10993</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyNzE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjFkNGY4ZTZjMDJhZDNh
OTg3ZTU1NGZlNzk2NmZiOTllZTU5Y2FkNy4uYzU3ODFiZWIzNmY4YWE3NTk1NGExNmFkZWVlZDc1
YmRmZDg2NzdiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA3LTE2ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIEZp
eCBibGVuZCBmaWx0ZXIgZm9yIGF1dG92ZWN0b3JpemluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEzOTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUbyBzdXBwb3J0IGF1dG8tdmVjdG9yaXppbmcsIHRo
ZSBsb29wIGhhZCB0byBiZSB1bnN3aXRjaGVkLCBhbmQgcmVndWxhciBhcnJheXMgdXNlZCB0aGF0
IAorICAgICAgICBkaWQgbm90IGRvIGJvdW5kYXJ5LWNoZWNrcyBpbiB0aGUgaW5uZXIgbG9vcC4g
RmluYWxseSB0aGUgaW50ZWdlciBkaXZpc2lvbiBieSAyNTUKKyAgICAgICAgd2FzIG9wdGltaXpl
ZCBub3QgdXNlIGludGVnZXIgZGl2aXNpb24gaW50cmluc2ljcy4KKworICAgICAgICBPbiBhIFg4
Ni02NCBhcmNoaXRlY2h0dXJlIHVzaW5nIEdDQyAtTzMgb24gdGhlIGZpbGUsIHRoaXMgZ2l2ZXMg
YSBzcGVlZC11cCBvZiAyLjl4LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpdjI1NSk6CisgICAgICAgIChXZWJD
b3JlOjpub3JtYWwpOgorICAgICAgICAoV2ViQ29yZTo6bXVsdGlwbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6c2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OmRhcmtlbik6CisgICAgICAgIChXZWJD
b3JlOjpsaWdodGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlH
ZW5lcmljKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmg6CisgICAg
ICAgIChGRUJsZW5kKToKKwogMjAxMi0wNy0xNiAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogbW92aW5nIGZvcndhcmQgdG8g
dGhlIGJldHRlciBtZW1vcnkgaW5zdHJ1bWVudGF0aW9uIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKaW5kZXggMzYzYTc1
YjdmODdmMjcwZTcxNTEwYTczNmIzYmZmZGZiMGNjNmYyOS4uMDEwNDY4YjM4MDdiMjQ4NzQ3MmMx
YjhmMTQ1ZDMwOTdkZGJjZGJjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtNjIsNzEgKzYzLDExNiBAQCBib29sIEZFQmxlbmQ6OnNldEJsZW5kTW9k
ZShCbGVuZE1vZGVUeXBlIG1vZGUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBpbmxp
bmUgdW5zaWduZWQgY2hhciBkaXYyNTUodWludDE2X3QgdmFsdWUpCit7CisgICAgLy8gVGhpcyBp
cyBhbiBhcHByb3hpbWF0ZSBhbGdvcml0aG0gZm9yIGRpdmlzaW9uIGJ5IDI1NSwgYnV0IGl0IGdp
dmVzIGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2Yml0IHZhbHVlcy4KKyAgICB1aW50MTZfdCBxdW90
aWVudCA9IHZhbHVlID4+IDg7CisgICAgdWludDE2X3QgcmVtYWluZGVyID0gdmFsdWUgLSAocXVv
dGllbnQgKiAyNTUpICsgMTsKKyAgICByZXR1cm4gcXVvdGllbnQgKyAocmVtYWluZGVyID4+IDgp
OworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgbm9ybWFsKHVuc2lnbmVkIGNoYXIg
Y29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEsIHVuc2ln
bmVkIGNoYXIpCiB7Ci0gICAgcmV0dXJuICgoKDI1NSAtIGFscGhhQSkgKiBjb2xvckIgKyBjb2xv
ckEgKiAyNTUpIC8gMjU1KTsKKyAgICByZXR1cm4gZGl2MjU1KCgyNTUgLSBhbHBoYUEpICogY29s
b3JCICsgY29sb3JBICogMjU1KTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIG11
bHRpcGx5KHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWdu
ZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNoYXIgYWxwaGFCKQogewotICAgIHJldHVybiAoKCgy
NTUgLSBhbHBoYUEpICogY29sb3JCICsgKDI1NSAtIGFscGhhQiArIGNvbG9yQikgKiBjb2xvckEp
IC8gMjU1KTsKKyAgICByZXR1cm4gZGl2MjU1KCgyNTUgLSBhbHBoYUEpICogY29sb3JCICsgKDI1
NSAtIGFscGhhQiArIGNvbG9yQikgKiBjb2xvckEpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIGNoYXIgc2NyZWVuKHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9y
QiwgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcikKIHsKLSAgICByZXR1cm4gKCgoY29sb3JC
ICsgY29sb3JBKSAqIDI1NSAtIGNvbG9yQSAqIGNvbG9yQikgLyAyNTUpOworICAgIHJldHVybiBk
aXYyNTUoKGNvbG9yQiArIGNvbG9yQSkgKiAyNTUgLSBjb2xvckEgKiBjb2xvckIpOwogfQogCiBz
dGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgZGFya2VuKHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1
bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNoYXIg
YWxwaGFCKQogewotICAgIHJldHVybiAoKHN0ZDo6bWluKCgyNTUgLSBhbHBoYUEpICogY29sb3JC
ICsgY29sb3JBICogMjU1LCAoMjU1IC0gYWxwaGFCKSAqIGNvbG9yQSArIGNvbG9yQiAqIDI1NSkp
IC8gMjU1KTsKKyAgICByZXR1cm4gZGl2MjU1KHN0ZDo6bWluKCgyNTUgLSBhbHBoYUEpICogY29s
b3JCICsgY29sb3JBICogMjU1LCAoMjU1IC0gYWxwaGFCKSAqIGNvbG9yQSArIGNvbG9yQiAqIDI1
NSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgbGlnaHRlbih1bnNpZ25lZCBj
aGFyIGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xvckIsIHVuc2lnbmVkIGNoYXIgYWxwaGFBLCB1
bnNpZ25lZCBjaGFyIGFscGhhQikKIHsKLSAgICByZXR1cm4gKChzdGQ6Om1heCgoMjU1IC0gYWxw
aGFBKSAqIGNvbG9yQiArIGNvbG9yQSAqIDI1NSwgKDI1NSAtIGFscGhhQikgKiBjb2xvckEgKyBj
b2xvckIgKiAyNTUpKSAvIDI1NSk7CisgICAgcmV0dXJuIGRpdjI1NShzdGQ6Om1heCgoMjU1IC0g
YWxwaGFBKSAqIGNvbG9yQiArIGNvbG9yQSAqIDI1NSwgKDI1NSAtIGFscGhhQikgKiBjb2xvckEg
KyBjb2xvckIgKiAyNTUpKTsKIH0KIAotdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5R2VuZXJp
YyhQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhlbEFycmF5QSwgUGFzc1JlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheUIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBwaXhl
bEFycmF5TGVuZ3RoKQordm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyh1bnNpZ25l
ZCBjaGFyKiBzb3VyY2VQaXhlbEEsIHVuc2lnbmVkIGNoYXIqIHNvdXJjZVBpeGVsQiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogZGVzdGluYXRpb25Q
aXhlbCwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCkKIHsKLSAgICBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IHNyY1BpeGVsQXJyYXlBID0gcGl4ZWxBcnJheUE7Ci0gICAgUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBzcmNQaXhlbEFycmF5QiA9IHBpeGVsQXJyYXlCOwotCi0gICAgZm9yICh1
bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsg
cGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhhQSA9IHNyY1Bp
eGVsQXJyYXlBLT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIg
YWxwaGFCID0gc3JjUGl4ZWxBcnJheUItPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDM7ICsrY2hhbm5lbCkgewotICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciBjb2xvckEgPSBzcmNQaXhlbEFycmF5QS0+aXRlbShwaXhl
bE9mZnNldCArIGNoYW5uZWwpOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjb2xvckIgPSBz
cmNQaXhlbEFycmF5Qi0+aXRlbShwaXhlbE9mZnNldCArIGNoYW5uZWwpOwotICAgICAgICAgICAg
dW5zaWduZWQgY2hhciByZXN1bHQ7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7Ci0g
ICAgICAgICAgICBjYXNlIEZFQkxFTkRfTU9ERV9OT1JNQUw6Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gbm9ybWFsKGNvbG9yQSwgY29sb3JCLCBhbHBoYUEsIGFscGhhQik7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZFQkxFTkRfTU9ERV9NVUxUSVBMWToKLSAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtdWx0aXBseShjb2xvckEsIGNvbG9yQiwgYWxwaGFBLCBh
bHBoYUIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGRUJMRU5E
X01PREVfU0NSRUVOOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNjcmVlbihjb2xvckEsIGNv
bG9yQiwgYWxwaGFBLCBhbHBoYUIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBGRUJMRU5EX01PREVfREFSS0VOOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRh
cmtlbihjb2xvckEsIGNvbG9yQiwgYWxwaGFBLCBhbHBoYUIpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBGRUJMRU5EX01PREVfTElHSFRFTjoKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBsaWdodGVuKGNvbG9yQSwgY29sb3JCLCBhbHBoYUEsIGFscGhhQik7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZFQkxFTkRfTU9ERV9VTktO
T1dOOgotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAwOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkc3RQ
aXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyBjaGFubmVsLCByZXN1bHQpOworICAgIHVuc2ln
bmVkIGxlbiA9IHBpeGVsQXJyYXlMZW5ndGggLyA0OworICAgIHN3aXRjaCAobV9tb2RlKSB7Cisg
ICAgY2FzZSBGRUJMRU5EX01PREVfTk9STUFMOgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVs
T2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBsZW47IHBpeGVsT2Zmc2V0KyspIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgYWxwaGFBID0gc291cmNlUGl4ZWxBWzNdOworICAgICAgICAgICAg
dW5zaWduZWQgY2hhciBhbHBoYUIgPSBzb3VyY2VQaXhlbEJbM107CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgMzsgKytjaGFubmVsKQorICAgICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbY2hhbm5lbF0gPSBub3JtYWwoc291cmNlUGl4ZWxBW2No
YW5uZWxdLCBzb3VyY2VQaXhlbEJbY2hhbm5lbF0sIGFscGhhQSwgYWxwaGFCKTsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uUGl4ZWxbM10gPSAyNTUgLSBkaXYyNTUoKDI1NSAtIGFscGhhQSkgKiAo
MjU1IC0gYWxwaGFCKSk7CisgICAgICAgICAgICBzb3VyY2VQaXhlbEEgKz0gNDsKKyAgICAgICAg
ICAgIHNvdXJjZVBpeGVsQiArPSA0OworICAgICAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSA0
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVCTEVORF9NT0RFX01VTFRJ
UExZOgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQg
PCBsZW47IHBpeGVsT2Zmc2V0KyspIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGFB
ID0gc291cmNlUGl4ZWxBWzNdOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYUIgPSBz
b3VyY2VQaXhlbEJbM107CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBj
aGFubmVsIDwgMzsgKytjaGFubmVsKQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxb
Y2hhbm5lbF0gPSBtdWx0aXBseShzb3VyY2VQaXhlbEFbY2hhbm5lbF0sIHNvdXJjZVBpeGVsQltj
aGFubmVsXSwgYWxwaGFBLCBhbHBoYUIpOworICAgICAgICAgICAgZGVzdGluYXRpb25QaXhlbFsz
XSA9IDI1NSAtIGRpdjI1NSgoMjU1IC0gYWxwaGFBKSAqICgyNTUgLSBhbHBoYUIpKTsKKyAgICAg
ICAgICAgIHNvdXJjZVBpeGVsQSArPSA0OworICAgICAgICAgICAgc291cmNlUGl4ZWxCICs9IDQ7
CisgICAgICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGRUJMRU5EX01PREVfU0NSRUVOOgorICAgICAgICBmb3IgKHVuc2ln
bmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBsZW47IHBpeGVsT2Zmc2V0KyspIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGFBID0gc291cmNlUGl4ZWxBWzNdOworICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYUIgPSBzb3VyY2VQaXhlbEJbM107CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgMzsgKytjaGFubmVsKQor
ICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbY2hhbm5lbF0gPSBzY3JlZW4oc291cmNl
UGl4ZWxBW2NoYW5uZWxdLCBzb3VyY2VQaXhlbEJbY2hhbm5lbF0sIGFscGhhQSwgYWxwaGFCKTsK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbM10gPSAyNTUgLSBkaXYyNTUoKDI1NSAtIGFs
cGhhQSkgKiAoMjU1IC0gYWxwaGFCKSk7CisgICAgICAgICAgICBzb3VyY2VQaXhlbEEgKz0gNDsK
KyAgICAgICAgICAgIHNvdXJjZVBpeGVsQiArPSA0OworICAgICAgICAgICAgZGVzdGluYXRpb25Q
aXhlbCArPSA0OwogICAgICAgICB9Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGFSID0gMjU1
IC0gKCgyNTUgLSBhbHBoYUEpICogKDI1NSAtIGFscGhhQikpIC8gMjU1OwotICAgICAgICBkc3RQ
aXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBhbHBoYVIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZFQkxFTkRfTU9ERV9EQVJLRU46CisgICAgICAgIGZvciAodW5zaWduZWQgcGl4
ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IGxlbjsgcGl4ZWxPZmZzZXQrKykgeworICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciBhbHBoYUEgPSBzb3VyY2VQaXhlbEFbM107CisgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyIGFscGhhQiA9IHNvdXJjZVBpeGVsQlszXTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCAzOyArK2NoYW5uZWwpCisgICAgICAg
ICAgICAgICAgZGVzdGluYXRpb25QaXhlbFtjaGFubmVsXSA9IGRhcmtlbihzb3VyY2VQaXhlbEFb
Y2hhbm5lbF0sIHNvdXJjZVBpeGVsQltjaGFubmVsXSwgYWxwaGFBLCBhbHBoYUIpOworICAgICAg
ICAgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IDI1NSAtIGRpdjI1NSgoMjU1IC0gYWxwaGFBKSAq
ICgyNTUgLSBhbHBoYUIpKTsKKyAgICAgICAgICAgIHNvdXJjZVBpeGVsQSArPSA0OworICAgICAg
ICAgICAgc291cmNlUGl4ZWxCICs9IDQ7CisgICAgICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9
IDQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUJMRU5EX01PREVfTElH
SFRFTjoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0
IDwgbGVuOyBwaXhlbE9mZnNldCsrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhh
QSA9IHNvdXJjZVBpeGVsQVszXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGFCID0g
c291cmNlUGl4ZWxCWzNdOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsID0gMDsg
Y2hhbm5lbCA8IDM7ICsrY2hhbm5lbCkKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblBpeGVs
W2NoYW5uZWxdID0gbGlnaHRlbihzb3VyY2VQaXhlbEFbY2hhbm5lbF0sIHNvdXJjZVBpeGVsQltj
aGFubmVsXSwgYWxwaGFBLCBhbHBoYUIpOworICAgICAgICAgICAgZGVzdGluYXRpb25QaXhlbFsz
XSA9IDI1NSAtIGRpdjI1NSgoMjU1IC0gYWxwaGFBKSAqICgyNTUgLSBhbHBoYUIpKTsKKyAgICAg
ICAgICAgIHNvdXJjZVBpeGVsQSArPSA0OworICAgICAgICAgICAgc291cmNlUGl4ZWxCICs9IDQ7
CisgICAgICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGRUJMRU5EX01PREVfVU5LTk9XTjoKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgbGVuOyBwaXhlbE9mZnNldCsrKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhhQSA9IHNvdXJjZVBpeGVsQVszXTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGFCID0gc291cmNlUGl4ZWxCWzNdOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IDM7ICsrY2hhbm5lbCkK
KyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblBpeGVsW2NoYW5uZWxdID0gMDsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uUGl4ZWxbM10gPSAyNTUgLSBkaXYyNTUoKDI1NSAtIGFscGhhQSkgKiAo
MjU1IC0gYWxwaGFCKSk7CisgICAgICAgICAgICBzb3VyY2VQaXhlbEEgKz0gNDsKKyAgICAgICAg
ICAgIHNvdXJjZVBpeGVsQiArPSA0OworICAgICAgICAgICAgZGVzdGluYXRpb25QaXhlbCArPSA0
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMTY1LDcgKzIxMSw3
IEBAIHZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KGRzdFBpeGVsQXJyYXktPmRhdGEoKSlbMF0gPSBzb3VyY2VC
QW5kRGVzdFswXTsKICAgICB9CiAjZWxzZQotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKHNyY1Bp
eGVsQXJyYXlBLCBzcmNQaXhlbEFycmF5QiwgZHN0UGl4ZWxBcnJheSwgcGl4ZWxBcnJheUxlbmd0
aCk7CisgICAgcGxhdGZvcm1BcHBseUdlbmVyaWMoc3JjUGl4ZWxBcnJheUEtPmRhdGEoKSwgc3Jj
UGl4ZWxBcnJheUItPmRhdGEoKSwgZHN0UGl4ZWxBcnJheS0+ZGF0YSgpLCBwaXhlbEFycmF5TGVu
Z3RoKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5oCmluZGV4IGNjNzJlNGFjYWQxOTFkMjFiNmQyZDhjNzliMjRm
MTA4NTM2ZmZkZWUuLmZlNTAxN2MzZTMwZTM1ODVlMTgwMDk2MmQzY2NiNDRlYWVjNDlkMWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5oCkBAIC00NSw4ICs0NSw4IEBAIHB1YmxpYzoKICAgICBCbGVuZE1vZGVUeXBlIGJsZW5kTW9k
ZSgpIGNvbnN0OwogICAgIGJvb2wgc2V0QmxlbmRNb2RlKEJsZW5kTW9kZVR5cGUpOwogCi0gICAg
dm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBw
aXhlbEFycmF5QSwgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheUIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxB
cnJheSwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCk7CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5
R2VuZXJpYyh1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3Jj
UGl4ZWxBcnJheUIsIHVuc2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKTsKICAgICB2b2lkIHBsYXRm
b3JtQXBwbHlORU9OKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFy
KiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153999</attachid>
            <date>2012-07-24 02:44:56 -0700</date>
            <delta_ts>2012-07-24 04:56:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91398-20120724114449.patch</filename>
            <type>text/plain</type>
            <size>10465</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNDQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjFmYThmYWJkY2RjMDI2
NjFmZDMzMDgyZDIxYTYyODI4YzZmYzU5Yy4uY2E1MDdjODIwM2JmM2FkMDEyZjkyZTVkNjFmOTZh
M2JmNzk3MGM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTA3LTI0ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIEZp
eCBibGVuZCBmaWx0ZXIgZm9yIGF1dG92ZWN0b3JpemluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEzOTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUbyBzdXBwb3J0IGF1dG8tdmVjdG9yaXppbmcsIHRo
ZSBsb29wIGhhZCB0byBiZSB1bnN3aXRjaGVkLCBhbmQgcmVndWxhciBhcnJheXMgdXNlZCB0aGF0
IAorICAgICAgICBkaWQgbm90IGRvIGJvdW5kYXJ5LWNoZWNrcyBpbiB0aGUgaW5uZXIgbG9vcC4g
RmluYWxseSB0aGUgaW50ZWdlciBkaXZpc2lvbiBieSAyNTUKKyAgICAgICAgd2FzIG9wdGltaXpl
ZCBub3QgdXNlIGludGVnZXIgZGl2aXNpb24gaW50cmluc2ljcy4KKworICAgICAgICBPbiBhIFg4
Ni02NCBhcmNoaXRlY2h0dXJlIHVzaW5nIEdDQyAtTzMgb24gdGhlIGZpbGUsIHRoaXMgZ2l2ZXMg
YSBzcGVlZC11cCBvZiAyLjl4LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpdjI1NSk6CisgICAgICAgIChCbGVu
ZE5vcm1hbCk6CisgICAgICAgIChXZWJDb3JlOjpCbGVuZE5vcm1hbDo6YXBwbHkpOgorICAgICAg
ICAoQmxlbmRNdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpCbGVuZE11bHRpcGx5OjphcHBs
eSk6CisgICAgICAgIChCbGVuZFNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpCbGVuZFNjcmVl
bjo6YXBwbHkpOgorICAgICAgICAoQmxlbmREYXJrZW4pOgorICAgICAgICAoV2ViQ29yZTo6Qmxl
bmREYXJrZW46OmFwcGx5KToKKyAgICAgICAgKEJsZW5kTGlnaHRlbik6CisgICAgICAgIChXZWJD
b3JlOjpCbGVuZExpZ2h0ZW46OmFwcGx5KToKKyAgICAgICAgKEJsZW5kVW5rbm93bik6CisgICAg
ICAgIChXZWJDb3JlOjpCbGVuZFVua25vd246OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OnBs
YXRmb3JtQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseUdl
bmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaDoKKyAgICAg
ICAgKEZFQmxlbmQpOgorCiAyMDEyLTA3LTI0ICBQZXRlciBCZXZlcmxvbyAgPHBldGVyQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEJ1aWxkIGZpeCBmb3IgQW5kcm9pZCBhZnRl
ciByMTIzNDI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmNwcAppbmRleCAzNjNhNzViN2Y4N2YyNzBlNzE1MTBhNzM2YjNiZmZkZmIw
Y2M2ZjI5Li45ZGU4MzFkNTUwNGNkZmFiMzcxNTM1YzZmNDYxNmEzOTI2NzEwMGI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5j
cHAKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNSBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02Miw3MSArNjMsMTAy
IEBAIGJvb2wgRkVCbGVuZDo6c2V0QmxlbmRNb2RlKEJsZW5kTW9kZVR5cGUgbW9kZSkKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIG5vcm1hbCh1bnNp
Z25lZCBjaGFyIGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xvckIsIHVuc2lnbmVkIGNoYXIgYWxw
aGFBLCB1bnNpZ25lZCBjaGFyKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGRpdjI1NSh1
aW50MTZfdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gKCgoMjU1IC0gYWxwaGFBKSAqIGNvbG9yQiAr
IGNvbG9yQSAqIDI1NSkgLyAyNTUpOworICAgIC8vIFRoaXMgaXMgYW4gYXBwcm94aW1hdGUgYWxn
b3JpdGhtIGZvciBkaXZpc2lvbiBieSAyNTUsIGJ1dCBpdCBnaXZlcyBhY2N1cmF0ZSByZXN1bHRz
IGZvciAxNmJpdCB2YWx1ZXMuCisgICAgdWludDE2X3QgcXVvdGllbnQgPSB2YWx1ZSA+PiA4Owor
ICAgIHVpbnQxNl90IHJlbWFpbmRlciA9IHZhbHVlIC0gKHF1b3RpZW50ICogMjU1KSArIDE7Cisg
ICAgcmV0dXJuIHF1b3RpZW50ICsgKHJlbWFpbmRlciA+PiA4KTsKIH0KIAotc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCBjaGFyIG11bHRpcGx5KHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBj
aGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNoYXIgYWxwaGFCKQot
ewotICAgIHJldHVybiAoKCgyNTUgLSBhbHBoYUEpICogY29sb3JCICsgKDI1NSAtIGFscGhhQiAr
IGNvbG9yQikgKiBjb2xvckEpIC8gMjU1KTsKLX0KK2NsYXNzIEJsZW5kTm9ybWFsIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBhcHBseSh1bnNpZ25lZCBjaGFyIGNvbG9yQSwg
dW5zaWduZWQgY2hhciBjb2xvckIsIHVuc2lnbmVkIGNoYXIgYWxwaGFBLCB1bnNpZ25lZCBjaGFy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRpdjI1NSgoMjU1IC0gYWxwaGFBKSAqIGNvbG9yQiAr
IGNvbG9yQSAqIDI1NSk7CisgICAgfQorfTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFy
IHNjcmVlbih1bnNpZ25lZCBjaGFyIGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xvckIsIHVuc2ln
bmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIpCi17Ci0gICAgcmV0dXJuICgoKGNvbG9yQiArIGNvbG9y
QSkgKiAyNTUgLSBjb2xvckEgKiBjb2xvckIpIC8gMjU1KTsKLX0KK2NsYXNzIEJsZW5kTXVsdGlw
bHkgeworcHVibGljOgorICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGFwcGx5KHVuc2lnbmVkIGNo
YXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEsIHVu
c2lnbmVkIGNoYXIgYWxwaGFCKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRpdjI1NSgoMjU1IC0g
YWxwaGFBKSAqIGNvbG9yQiArICgyNTUgLSBhbHBoYUIgKyBjb2xvckIpICogY29sb3JBKTsKKyAg
ICB9Cit9OwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgZGFya2VuKHVuc2lnbmVkIGNo
YXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEsIHVu
c2lnbmVkIGNoYXIgYWxwaGFCKQotewotICAgIHJldHVybiAoKHN0ZDo6bWluKCgyNTUgLSBhbHBo
YUEpICogY29sb3JCICsgY29sb3JBICogMjU1LCAoMjU1IC0gYWxwaGFCKSAqIGNvbG9yQSArIGNv
bG9yQiAqIDI1NSkpIC8gMjU1KTsKLX0KK2NsYXNzIEJsZW5kU2NyZWVuIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgdW5zaWduZWQgY2hhciBhcHBseSh1bnNpZ25lZCBjaGFyIGNvbG9yQSwgdW5zaWdu
ZWQgY2hhciBjb2xvckIsIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIpCisgICAgeworICAg
ICAgICByZXR1cm4gZGl2MjU1KChjb2xvckIgKyBjb2xvckEpICogMjU1IC0gY29sb3JBICogY29s
b3JCKTsKKyAgICB9Cit9OworCitjbGFzcyBCbGVuZERhcmtlbiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIHVuc2lnbmVkIGNoYXIgYXBwbHkodW5zaWduZWQgY2hhciBjb2xvckEsIHVuc2lnbmVkIGNo
YXIgY29sb3JCLCB1bnNpZ25lZCBjaGFyIGFscGhhQSwgdW5zaWduZWQgY2hhciBhbHBoYUIpCisg
ICAgeworICAgICAgICByZXR1cm4gZGl2MjU1KHN0ZDo6bWluKCgyNTUgLSBhbHBoYUEpICogY29s
b3JCICsgY29sb3JBICogMjU1LCAoMjU1IC0gYWxwaGFCKSAqIGNvbG9yQSArIGNvbG9yQiAqIDI1
NSkpOworICAgIH0KK307CisKK2NsYXNzIEJsZW5kTGlnaHRlbiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIHVuc2lnbmVkIGNoYXIgYXBwbHkodW5zaWduZWQgY2hhciBjb2xvckEsIHVuc2lnbmVkIGNo
YXIgY29sb3JCLCB1bnNpZ25lZCBjaGFyIGFscGhhQSwgdW5zaWduZWQgY2hhciBhbHBoYUIpCisg
ICAgeworICAgICAgICByZXR1cm4gZGl2MjU1KHN0ZDo6bWF4KCgyNTUgLSBhbHBoYUEpICogY29s
b3JCICsgY29sb3JBICogMjU1LCAoMjU1IC0gYWxwaGFCKSAqIGNvbG9yQSArIGNvbG9yQiAqIDI1
NSkpOworICAgIH0KK307CisKK2NsYXNzIEJsZW5kVW5rbm93biB7CitwdWJsaWM6CisgICAgc3Rh
dGljIHVuc2lnbmVkIGNoYXIgYXBwbHkodW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhciwgdW5z
aWduZWQgY2hhciwgdW5zaWduZWQgY2hhcikKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KK307CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBsaWdodGVuKHVuc2lnbmVkIGNo
YXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEsIHVu
c2lnbmVkIGNoYXIgYWxwaGFCKQordGVtcGxhdGU8dHlwZW5hbWUgQmxlbmRGdW5jdG9yPgorc3Rh
dGljIHZvaWQgcGxhdGZvcm1BcHBseSh1bnNpZ25lZCBjaGFyKiBzb3VyY2VQaXhlbEEsIHVuc2ln
bmVkIGNoYXIqIHNvdXJjZVBpeGVsQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciogZGVzdGluYXRpb25QaXhlbCwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCkKIHsK
LSAgICByZXR1cm4gKChzdGQ6Om1heCgoMjU1IC0gYWxwaGFBKSAqIGNvbG9yQiArIGNvbG9yQSAq
IDI1NSwgKDI1NSAtIGFscGhhQikgKiBjb2xvckEgKyBjb2xvckIgKiAyNTUpKSAvIDI1NSk7Cisg
ICAgdW5zaWduZWQgbGVuID0gcGl4ZWxBcnJheUxlbmd0aCAvIDQ7CisgICAgZm9yICh1bnNpZ25l
ZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgbGVuOyBwaXhlbE9mZnNldCsrKSB7Cisg
ICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGFBID0gc291cmNlUGl4ZWxBWzNdOworICAgICAgICB1
bnNpZ25lZCBjaGFyIGFscGhhQiA9IHNvdXJjZVBpeGVsQlszXTsKKyAgICAgICAgZGVzdGluYXRp
b25QaXhlbFswXSA9IEJsZW5kRnVuY3Rvcjo6YXBwbHkoc291cmNlUGl4ZWxBWzBdLCBzb3VyY2VQ
aXhlbEJbMF0sIGFscGhhQSwgYWxwaGFCKTsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbFsxXSA9
IEJsZW5kRnVuY3Rvcjo6YXBwbHkoc291cmNlUGl4ZWxBWzFdLCBzb3VyY2VQaXhlbEJbMV0sIGFs
cGhhQSwgYWxwaGFCKTsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbFsyXSA9IEJsZW5kRnVuY3Rv
cjo6YXBwbHkoc291cmNlUGl4ZWxBWzJdLCBzb3VyY2VQaXhlbEJbMl0sIGFscGhhQSwgYWxwaGFC
KTsKKyAgICAgICAgZGVzdGluYXRpb25QaXhlbFszXSA9IDI1NSAtIGRpdjI1NSgoMjU1IC0gYWxw
aGFBKSAqICgyNTUgLSBhbHBoYUIpKTsKKyAgICAgICAgc291cmNlUGl4ZWxBICs9IDQ7CisgICAg
ICAgIHNvdXJjZVBpeGVsQiArPSA0OworICAgICAgICBkZXN0aW5hdGlvblBpeGVsICs9IDQ7Cisg
ICAgfQogfQogCi12b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlHZW5lcmljKFBhc3NSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXlBLCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBwaXhlbEFycmF5QiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVWlu
dDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXksIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgp
Cit2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlHZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNvdXJj
ZVBpeGVsQSwgdW5zaWduZWQgY2hhciogc291cmNlUGl4ZWxCLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvblBpeGVsLCB1bnNpZ25l
ZCBwaXhlbEFycmF5TGVuZ3RoKQogewotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3Jj
UGl4ZWxBcnJheUEgPSBwaXhlbEFycmF5QTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IHNyY1BpeGVsQXJyYXlCID0gcGl4ZWxBcnJheUI7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVs
T2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCAr
PSA0KSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGFBID0gc3JjUGl4ZWxBcnJheUEtPml0
ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKLSAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYUIgPSBzcmNQ
aXhlbEFycmF5Qi0+aXRlbShwaXhlbE9mZnNldCArIDMpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgMzsgKytjaGFubmVsKSB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGNvbG9yQSA9IHNyY1BpeGVsQXJyYXlBLT5pdGVtKHBpeGVsT2Zmc2V0ICsgY2hh
bm5lbCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNvbG9yQiA9IHNyY1BpeGVsQXJyYXlC
LT5pdGVtKHBpeGVsT2Zmc2V0ICsgY2hhbm5lbCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFy
IHJlc3VsdDsKLQotICAgICAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKLSAgICAgICAgICAgIGNh
c2UgRkVCTEVORF9NT0RFX05PUk1BTDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBub3JtYWwo
Y29sb3JBLCBjb2xvckIsIGFscGhhQSwgYWxwaGFCKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgRkVCTEVORF9NT0RFX01VTFRJUExZOgotICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG11bHRpcGx5KGNvbG9yQSwgY29sb3JCLCBhbHBoYUEsIGFscGhhQik7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZFQkxFTkRfTU9ERV9TQ1JFRU46
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc2NyZWVuKGNvbG9yQSwgY29sb3JCLCBhbHBoYUEs
IGFscGhhQik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZFQkxF
TkRfTU9ERV9EQVJLRU46Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZGFya2VuKGNvbG9yQSwg
Y29sb3JCLCBhbHBoYUEsIGFscGhhQik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIEZFQkxFTkRfTU9ERV9MSUdIVEVOOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGxpZ2h0ZW4oY29sb3JBLCBjb2xvckIsIGFscGhhQSwgYWxwaGFCKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRkVCTEVORF9NT0RFX1VOS05PV046Ci0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRzdFBpeGVsQXJyYXktPnNl
dChwaXhlbE9mZnNldCArIGNoYW5uZWwsIHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgdW5z
aWduZWQgY2hhciBhbHBoYVIgPSAyNTUgLSAoKDI1NSAtIGFscGhhQSkgKiAoMjU1IC0gYWxwaGFC
KSkgLyAyNTU7Ci0gICAgICAgIGRzdFBpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGFs
cGhhUik7CisgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICBjYXNlIEZFQkxFTkRfTU9ERV9OT1JN
QUw6CisgICAgICAgIHBsYXRmb3JtQXBwbHk8QmxlbmROb3JtYWw+KHNvdXJjZVBpeGVsQSwgc291
cmNlUGl4ZWxCLCBkZXN0aW5hdGlvblBpeGVsLCBwaXhlbEFycmF5TGVuZ3RoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGRUJMRU5EX01PREVfTVVMVElQTFk6CisgICAgICAgIHBsYXRmb3Jt
QXBwbHk8QmxlbmRNdWx0aXBseT4oc291cmNlUGl4ZWxBLCBzb3VyY2VQaXhlbEIsIGRlc3RpbmF0
aW9uUGl4ZWwsIHBpeGVsQXJyYXlMZW5ndGgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZF
QkxFTkRfTU9ERV9TQ1JFRU46CisgICAgICAgIHBsYXRmb3JtQXBwbHk8QmxlbmRTY3JlZW4+KHNv
dXJjZVBpeGVsQSwgc291cmNlUGl4ZWxCLCBkZXN0aW5hdGlvblBpeGVsLCBwaXhlbEFycmF5TGVu
Z3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUJMRU5EX01PREVfREFSS0VOOgorICAg
ICAgICBwbGF0Zm9ybUFwcGx5PEJsZW5kRGFya2VuPihzb3VyY2VQaXhlbEEsIHNvdXJjZVBpeGVs
QiwgZGVzdGluYXRpb25QaXhlbCwgcGl4ZWxBcnJheUxlbmd0aCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRkVCTEVORF9NT0RFX0xJR0hURU46CisgICAgICAgIHBsYXRmb3JtQXBwbHk8Qmxl
bmRMaWdodGVuPihzb3VyY2VQaXhlbEEsIHNvdXJjZVBpeGVsQiwgZGVzdGluYXRpb25QaXhlbCwg
cGl4ZWxBcnJheUxlbmd0aCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVCTEVORF9NT0RF
X1VOS05PV046CisgICAgICAgIHBsYXRmb3JtQXBwbHk8QmxlbmRVbmtub3duPihzb3VyY2VQaXhl
bEEsIHNvdXJjZVBpeGVsQiwgZGVzdGluYXRpb25QaXhlbCwgcGl4ZWxBcnJheUxlbmd0aCk7Cisg
ICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMTY1LDcgKzE5Nyw3IEBAIHZvaWQgRkVCbGVu
ZDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KGRzdFBpeGVsQXJyYXktPmRhdGEoKSlbMF0gPSBzb3VyY2VCQW5kRGVzdFswXTsKICAg
ICB9CiAjZWxzZQotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKHNyY1BpeGVsQXJyYXlBLCBzcmNQ
aXhlbEFycmF5QiwgZHN0UGl4ZWxBcnJheSwgcGl4ZWxBcnJheUxlbmd0aCk7CisgICAgcGxhdGZv
cm1BcHBseUdlbmVyaWMoc3JjUGl4ZWxBcnJheUEtPmRhdGEoKSwgc3JjUGl4ZWxBcnJheUItPmRh
dGEoKSwgZHN0UGl4ZWxBcnJheS0+ZGF0YSgpLCBwaXhlbEFycmF5TGVuZ3RoKTsKICNlbmRpZgog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQmxlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVC
bGVuZC5oCmluZGV4IGNjNzJlNGFjYWQxOTFkMjFiNmQyZDhjNzliMjRmMTA4NTM2ZmZkZWUuLmZl
NTAxN2MzZTMwZTM1ODVlMTgwMDk2MmQzY2NiNDRlYWVjNDlkMWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oCkBAIC00NSw4ICs0
NSw4IEBAIHB1YmxpYzoKICAgICBCbGVuZE1vZGVUeXBlIGJsZW5kTW9kZSgpIGNvbnN0OwogICAg
IGJvb2wgc2V0QmxlbmRNb2RlKEJsZW5kTW9kZVR5cGUpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUFw
cGx5R2VuZXJpYyhQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhlbEFycmF5QSwgUGFz
c1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheUIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheSwgdW5zaWduZWQg
cGl4ZWxBcnJheUxlbmd0aCk7CisgICAgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYyh1bnNpZ25l
ZCBjaGFyKiBzcmNQaXhlbEFycmF5QSwgdW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUIsIHVu
c2lnbmVkIGNoYXIqIGRzdFBpeGVsQXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjb2xvckFycmF5TGVuZ3RoKTsKICAgICB2b2lkIHBsYXRmb3JtQXBwbHlORU9OKHVu
c2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25lZCBjaGFyKiBzcmNQaXhlbEFycmF5
QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154021</attachid>
            <date>2012-07-24 04:56:22 -0700</date>
            <delta_ts>2012-07-25 02:53:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91398-20120724135615.patch</filename>
            <type>text/plain</type>
            <size>10548</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNDU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTA1YzcyN2EwMDY5Yzk1
MzMyYjgyODdiMWUwODg0YzFiYTYzMGFiYi4uNjRiYjRmZDljN2MzNmFmZmIxMWY3M2JlOWExMDBj
YjNmYWY3MmE0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTA3LTI0ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIEZp
eCBibGVuZCBmaWx0ZXIgZm9yIGF1dG92ZWN0b3JpemluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEzOTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUbyBzdXBwb3J0IGF1dG8tdmVjdG9yaXppbmcsIHRo
ZSBsb29wIGhhZCB0byBiZSB1bnN3aXRjaGVkLCBhbmQgcmVndWxhciBhcnJheXMgdXNlZCB0aGF0
IAorICAgICAgICBkaWQgbm90IGRvIGJvdW5kYXJ5LWNoZWNrcyBpbiB0aGUgaW5uZXIgbG9vcC4g
RmluYWxseSB0aGUgaW50ZWdlciBkaXZpc2lvbiBieSAyNTUKKyAgICAgICAgd2FzIG9wdGltaXpl
ZCBub3QgdXNlIGludGVnZXIgZGl2aXNpb24gaW50cmluc2ljcy4KKworICAgICAgICBPbiBhIFg4
Ni02NCBhcmNoaXRlY2h0dXJlIHVzaW5nIEdDQyAtTzMgb24gdGhlIGZpbGUsIHRoaXMgZ2l2ZXMg
YSBzcGVlZC11cCBvZiAyLjl4LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZhc3REaXZpZGVCeTI1NSk6CisgICAg
ICAgIChCbGVuZE5vcm1hbCk6CisgICAgICAgIChXZWJDb3JlOjpCbGVuZE5vcm1hbDo6YXBwbHkp
OgorICAgICAgICAoQmxlbmRNdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpCbGVuZE11bHRp
cGx5OjphcHBseSk6CisgICAgICAgIChCbGVuZFNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpC
bGVuZFNjcmVlbjo6YXBwbHkpOgorICAgICAgICAoQmxlbmREYXJrZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6QmxlbmREYXJrZW46OmFwcGx5KToKKyAgICAgICAgKEJsZW5kTGlnaHRlbik6CisgICAg
ICAgIChXZWJDb3JlOjpCbGVuZExpZ2h0ZW46OmFwcGx5KToKKyAgICAgICAgKEJsZW5kVW5rbm93
bik6CisgICAgICAgIChXZWJDb3JlOjpCbGVuZFVua25vd246OmFwcGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OnBsYXRmb3JtQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZv
cm1BcHBseUdlbmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQu
aDoKKyAgICAgICAgKEZFQmxlbmQpOgorCiAyMDEyLTA3LTI0ICBBbnRob255IFNjaWFuICA8YXNj
aWFuQHJpbS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvciBbSlNDXTogRW5hYmxlIGluaXRp
YXRvciBjb2x1bW4gaW4gbmV0d29yayBwYW5lbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCmluZGV4IDM2M2E3NWI3Zjg3ZjI3
MGU3MTUxMGE3MzZiM2JmZmRmYjBjYzZmMjkuLmY2ZGNmNjM5NjFkMzNmMzFiNzk0YzBjMGE1MTIw
ODgzNmU0NjViNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVCbGVuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUJsZW5kLmNwcApAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA1
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTYyLDcxICs2MywxMDIgQEAgYm9vbCBGRUJsZW5kOjpzZXRCbGVuZE1vZGUoQmxlbmRN
b2RlVHlwZSBtb2RlKQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2ln
bmVkIGNoYXIgbm9ybWFsKHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9y
QiwgdW5zaWduZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNoYXIpCitzdGF0aWMgaW5saW5lIHVu
c2lnbmVkIGNoYXIgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogewotICAgIHJldHVy
biAoKCgyNTUgLSBhbHBoYUEpICogY29sb3JCICsgY29sb3JBICogMjU1KSAvIDI1NSk7CisgICAg
Ly8gVGhpcyBpcyBhbiBhcHByb3hpbWF0ZSBhbGdvcml0aG0gZm9yIGRpdmlzaW9uIGJ5IDI1NSwg
YnV0IGl0IGdpdmVzIGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2Yml0IHZhbHVlcy4KKyAgICB1aW50
MTZfdCBxdW90aWVudCA9IHZhbHVlID4+IDg7CisgICAgdWludDE2X3QgcmVtYWluZGVyID0gdmFs
dWUgLSAocXVvdGllbnQgKiAyNTUpICsgMTsKKyAgICByZXR1cm4gcXVvdGllbnQgKyAocmVtYWlu
ZGVyID4+IDgpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgbXVsdGlwbHkodW5z
aWduZWQgY2hhciBjb2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNpZ25lZCBjaGFyIGFs
cGhhQSwgdW5zaWduZWQgY2hhciBhbHBoYUIpCi17Ci0gICAgcmV0dXJuICgoKDI1NSAtIGFscGhh
QSkgKiBjb2xvckIgKyAoMjU1IC0gYWxwaGFCICsgY29sb3JCKSAqIGNvbG9yQSkgLyAyNTUpOwot
fQorY2xhc3MgQmxlbmROb3JtYWwgeworcHVibGljOgorICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy
IGFwcGx5KHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWdu
ZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNoYXIpCisgICAgeworICAgICAgICByZXR1cm4gZmFz
dERpdmlkZUJ5MjU1KCgyNTUgLSBhbHBoYUEpICogY29sb3JCICsgY29sb3JBICogMjU1KTsKKyAg
ICB9Cit9OwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgc2NyZWVuKHVuc2lnbmVkIGNo
YXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciwgdW5zaWduZWQg
Y2hhcikKLXsKLSAgICByZXR1cm4gKCgoY29sb3JCICsgY29sb3JBKSAqIDI1NSAtIGNvbG9yQSAq
IGNvbG9yQikgLyAyNTUpOwotfQorY2xhc3MgQmxlbmRNdWx0aXBseSB7CitwdWJsaWM6CisgICAg
c3RhdGljIHVuc2lnbmVkIGNoYXIgYXBwbHkodW5zaWduZWQgY2hhciBjb2xvckEsIHVuc2lnbmVk
IGNoYXIgY29sb3JCLCB1bnNpZ25lZCBjaGFyIGFscGhhQSwgdW5zaWduZWQgY2hhciBhbHBoYUIp
CisgICAgeworICAgICAgICByZXR1cm4gZmFzdERpdmlkZUJ5MjU1KCgyNTUgLSBhbHBoYUEpICog
Y29sb3JCICsgKDI1NSAtIGFscGhhQiArIGNvbG9yQikgKiBjb2xvckEpOworICAgIH0KK307CiAK
LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBkYXJrZW4odW5zaWduZWQgY2hhciBjb2xvckEs
IHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNpZ25lZCBjaGFyIGFscGhhQSwgdW5zaWduZWQgY2hh
ciBhbHBoYUIpCi17Ci0gICAgcmV0dXJuICgoc3RkOjptaW4oKDI1NSAtIGFscGhhQSkgKiBjb2xv
ckIgKyBjb2xvckEgKiAyNTUsICgyNTUgLSBhbHBoYUIpICogY29sb3JBICsgY29sb3JCICogMjU1
KSkgLyAyNTUpOwotfQorY2xhc3MgQmxlbmRTY3JlZW4geworcHVibGljOgorICAgIHN0YXRpYyB1
bnNpZ25lZCBjaGFyIGFwcGx5KHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNv
bG9yQiwgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcikKKyAgICB7CisgICAgICAgIHJldHVy
biBmYXN0RGl2aWRlQnkyNTUoKGNvbG9yQiArIGNvbG9yQSkgKiAyNTUgLSBjb2xvckEgKiBjb2xv
ckIpOworICAgIH0KK307CisKK2NsYXNzIEJsZW5kRGFya2VuIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgdW5zaWduZWQgY2hhciBhcHBseSh1bnNpZ25lZCBjaGFyIGNvbG9yQSwgdW5zaWduZWQgY2hh
ciBjb2xvckIsIHVuc2lnbmVkIGNoYXIgYWxwaGFBLCB1bnNpZ25lZCBjaGFyIGFscGhhQikKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYXN0RGl2aWRlQnkyNTUoc3RkOjptaW4oKDI1NSAtIGFscGhh
QSkgKiBjb2xvckIgKyBjb2xvckEgKiAyNTUsICgyNTUgLSBhbHBoYUIpICogY29sb3JBICsgY29s
b3JCICogMjU1KSk7CisgICAgfQorfTsKKworY2xhc3MgQmxlbmRMaWdodGVuIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBhcHBseSh1bnNpZ25lZCBjaGFyIGNvbG9yQSwgdW5z
aWduZWQgY2hhciBjb2xvckIsIHVuc2lnbmVkIGNoYXIgYWxwaGFBLCB1bnNpZ25lZCBjaGFyIGFs
cGhhQikKKyAgICB7CisgICAgICAgIHJldHVybiBmYXN0RGl2aWRlQnkyNTUoc3RkOjptYXgoKDI1
NSAtIGFscGhhQSkgKiBjb2xvckIgKyBjb2xvckEgKiAyNTUsICgyNTUgLSBhbHBoYUIpICogY29s
b3JBICsgY29sb3JCICogMjU1KSk7CisgICAgfQorfTsKKworY2xhc3MgQmxlbmRVbmtub3duIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBhcHBseSh1bnNpZ25lZCBjaGFyLCB1
bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorfTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGxp
Z2h0ZW4odW5zaWduZWQgY2hhciBjb2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNpZ25l
ZCBjaGFyIGFscGhhQSwgdW5zaWduZWQgY2hhciBhbHBoYUIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBC
bGVuZEZ1bmN0b3I+CitzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5KHVuc2lnbmVkIGNoYXIqIHNv
dXJjZVBpeGVsQSwgdW5zaWduZWQgY2hhciogc291cmNlUGl4ZWxCLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0aW5hdGlvblBpeGVsLCB1bnNpZ25lZCBwaXhl
bEFycmF5TGVuZ3RoKQogewotICAgIHJldHVybiAoKHN0ZDo6bWF4KCgyNTUgLSBhbHBoYUEpICog
Y29sb3JCICsgY29sb3JBICogMjU1LCAoMjU1IC0gYWxwaGFCKSAqIGNvbG9yQSArIGNvbG9yQiAq
IDI1NSkpIC8gMjU1KTsKKyAgICB1bnNpZ25lZCBsZW4gPSBwaXhlbEFycmF5TGVuZ3RoIC8gNDsK
KyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBsZW47IHBp
eGVsT2Zmc2V0KyspIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYUEgPSBzb3VyY2VQaXhl
bEFbM107CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGFCID0gc291cmNlUGl4ZWxCWzNdOwor
ICAgICAgICBkZXN0aW5hdGlvblBpeGVsWzBdID0gQmxlbmRGdW5jdG9yOjphcHBseShzb3VyY2VQ
aXhlbEFbMF0sIHNvdXJjZVBpeGVsQlswXSwgYWxwaGFBLCBhbHBoYUIpOworICAgICAgICBkZXN0
aW5hdGlvblBpeGVsWzFdID0gQmxlbmRGdW5jdG9yOjphcHBseShzb3VyY2VQaXhlbEFbMV0sIHNv
dXJjZVBpeGVsQlsxXSwgYWxwaGFBLCBhbHBoYUIpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVs
WzJdID0gQmxlbmRGdW5jdG9yOjphcHBseShzb3VyY2VQaXhlbEFbMl0sIHNvdXJjZVBpeGVsQlsy
XSwgYWxwaGFBLCBhbHBoYUIpOworICAgICAgICBkZXN0aW5hdGlvblBpeGVsWzNdID0gMjU1IC0g
ZmFzdERpdmlkZUJ5MjU1KCgyNTUgLSBhbHBoYUEpICogKDI1NSAtIGFscGhhQikpOworICAgICAg
ICBzb3VyY2VQaXhlbEEgKz0gNDsKKyAgICAgICAgc291cmNlUGl4ZWxCICs9IDQ7CisgICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWwgKz0gNDsKKyAgICB9CiB9CiAKLXZvaWQgRkVCbGVuZDo6cGxhdGZv
cm1BcHBseUdlbmVyaWMoUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheUEs
IFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXlCLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheSwg
dW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCkKK3ZvaWQgRkVCbGVuZDo6cGxhdGZvcm1BcHBseUdl
bmVyaWModW5zaWduZWQgY2hhciogc291cmNlUGl4ZWxBLCB1bnNpZ25lZCBjaGFyKiBzb3VyY2VQ
aXhlbEIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIq
IGRlc3RpbmF0aW9uUGl4ZWwsIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgpCiB7Ci0gICAgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzcmNQaXhlbEFycmF5QSA9IHBpeGVsQXJyYXlBOwotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3JjUGl4ZWxBcnJheUIgPSBwaXhlbEFycmF5QjsK
LQotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVs
QXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBh
bHBoYUEgPSBzcmNQaXhlbEFycmF5QS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwotICAgICAgICB1
bnNpZ25lZCBjaGFyIGFscGhhQiA9IHNyY1BpeGVsQXJyYXlCLT5pdGVtKHBpeGVsT2Zmc2V0ICsg
Myk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCAzOyArK2No
YW5uZWwpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY29sb3JBID0gc3JjUGl4ZWxBcnJh
eUEtPml0ZW0ocGl4ZWxPZmZzZXQgKyBjaGFubmVsKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgY29sb3JCID0gc3JjUGl4ZWxBcnJheUItPml0ZW0ocGl4ZWxPZmZzZXQgKyBjaGFubmVsKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0OwotCi0gICAgICAgICAgICBzd2l0Y2gg
KG1fbW9kZSkgewotICAgICAgICAgICAgY2FzZSBGRUJMRU5EX01PREVfTk9STUFMOgotICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG5vcm1hbChjb2xvckEsIGNvbG9yQiwgYWxwaGFBLCBhbHBoYUIp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGRUJMRU5EX01PREVf
TVVMVElQTFk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbXVsdGlwbHkoY29sb3JBLCBjb2xv
ckIsIGFscGhhQSwgYWxwaGFCKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgRkVCTEVORF9NT0RFX1NDUkVFTjoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzY3Jl
ZW4oY29sb3JBLCBjb2xvckIsIGFscGhhQSwgYWxwaGFCKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgRkVCTEVORF9NT0RFX0RBUktFTjoKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBkYXJrZW4oY29sb3JBLCBjb2xvckIsIGFscGhhQSwgYWxwaGFCKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRkVCTEVORF9NT0RFX0xJR0hURU46
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbGlnaHRlbihjb2xvckEsIGNvbG9yQiwgYWxwaGFB
LCBhbHBoYUIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGRUJM
RU5EX01PREVfVU5LTk9XTjoKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZHN0UGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgY2hhbm5lbCwgcmVzdWx0
KTsKLSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhhUiA9IDI1NSAtICgoMjU1
IC0gYWxwaGFBKSAqICgyNTUgLSBhbHBoYUIpKSAvIDI1NTsKLSAgICAgICAgZHN0UGl4ZWxBcnJh
eS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgYWxwaGFSKTsKKyAgICBzd2l0Y2ggKG1fbW9kZSkgewor
ICAgIGNhc2UgRkVCTEVORF9NT0RFX05PUk1BTDoKKyAgICAgICAgcGxhdGZvcm1BcHBseTxCbGVu
ZE5vcm1hbD4oc291cmNlUGl4ZWxBLCBzb3VyY2VQaXhlbEIsIGRlc3RpbmF0aW9uUGl4ZWwsIHBp
eGVsQXJyYXlMZW5ndGgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZFQkxFTkRfTU9ERV9N
VUxUSVBMWToKKyAgICAgICAgcGxhdGZvcm1BcHBseTxCbGVuZE11bHRpcGx5Pihzb3VyY2VQaXhl
bEEsIHNvdXJjZVBpeGVsQiwgZGVzdGluYXRpb25QaXhlbCwgcGl4ZWxBcnJheUxlbmd0aCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRkVCTEVORF9NT0RFX1NDUkVFTjoKKyAgICAgICAgcGxh
dGZvcm1BcHBseTxCbGVuZFNjcmVlbj4oc291cmNlUGl4ZWxBLCBzb3VyY2VQaXhlbEIsIGRlc3Rp
bmF0aW9uUGl4ZWwsIHBpeGVsQXJyYXlMZW5ndGgpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZFQkxFTkRfTU9ERV9EQVJLRU46CisgICAgICAgIHBsYXRmb3JtQXBwbHk8QmxlbmREYXJrZW4+
KHNvdXJjZVBpeGVsQSwgc291cmNlUGl4ZWxCLCBkZXN0aW5hdGlvblBpeGVsLCBwaXhlbEFycmF5
TGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRUJMRU5EX01PREVfTElHSFRFTjoK
KyAgICAgICAgcGxhdGZvcm1BcHBseTxCbGVuZExpZ2h0ZW4+KHNvdXJjZVBpeGVsQSwgc291cmNl
UGl4ZWxCLCBkZXN0aW5hdGlvblBpeGVsLCBwaXhlbEFycmF5TGVuZ3RoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGRUJMRU5EX01PREVfVU5LTk9XTjoKKyAgICAgICAgcGxhdGZvcm1BcHBs
eTxCbGVuZFVua25vd24+KHNvdXJjZVBpeGVsQSwgc291cmNlUGl4ZWxCLCBkZXN0aW5hdGlvblBp
eGVsLCBwaXhlbEFycmF5TGVuZ3RoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkBAIC0x
NjUsNyArMTk3LDcgQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAg
ICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZHN0UGl4ZWxBcnJheS0+ZGF0YSgpKVsw
XSA9IHNvdXJjZUJBbmREZXN0WzBdOwogICAgIH0KICNlbHNlCi0gICAgcGxhdGZvcm1BcHBseUdl
bmVyaWMoc3JjUGl4ZWxBcnJheUEsIHNyY1BpeGVsQXJyYXlCLCBkc3RQaXhlbEFycmF5LCBwaXhl
bEFycmF5TGVuZ3RoKTsKKyAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYyhzcmNQaXhlbEFycmF5QS0+
ZGF0YSgpLCBzcmNQaXhlbEFycmF5Qi0+ZGF0YSgpLCBkc3RQaXhlbEFycmF5LT5kYXRhKCksIHBp
eGVsQXJyYXlMZW5ndGgpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKaW5kZXggY2M3MmU0YWNhZDE5MWQyMWI2
ZDJkOGM3OWIyNGYxMDg1MzZmZmRlZS4uZmU1MDE3YzNlMzBlMzU4NWUxODAwOTYyZDNjY2I0NGVh
ZWM0OWQxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUJsZW5kLmgKQEAgLTQ1LDggKzQ1LDggQEAgcHVibGljOgogICAgIEJsZW5kTW9kZVR5
cGUgYmxlbmRNb2RlKCkgY29uc3Q7CiAgICAgYm9vbCBzZXRCbGVuZE1vZGUoQmxlbmRNb2RlVHlw
ZSk7CiAKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKFBhc3NSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IHBpeGVsQXJyYXlBLCBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhl
bEFycmF5QiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5
KiBkc3RQaXhlbEFycmF5LCB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoKTsKKyAgICB2b2lkIHBs
YXRmb3JtQXBwbHlHZW5lcmljKHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlBLCB1bnNpZ25l
ZCBjaGFyKiBzcmNQaXhlbEFycmF5QiwgdW5zaWduZWQgY2hhciogZHN0UGl4ZWxBcnJheSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yQXJyYXlMZW5ndGgpOwogICAg
IHZvaWQgcGxhdGZvcm1BcHBseU5FT04odW5zaWduZWQgY2hhciogc3JjUGl4ZWxBcnJheUEsIHVu
c2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXlCLCB1bnNpZ25lZCBjaGFyKiBkc3RQaXhlbEFycmF5
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29sb3JBcnJheUxlbmd0aCk7
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154292</attachid>
            <date>2012-07-25 01:48:46 -0700</date>
            <delta_ts>2012-07-25 02:53:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>6823</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4NWQxYmJkLi5jNmNkYjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIg
QEAKKzIwMTItMDctMjUgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tp
YS5jb20+CisKKyAgICAgICAgRml4IGJsZW5kIGZpbHRlciBmb3IgYXV0b3ZlY3Rvcml6aW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTM5OAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdldCByaWQgb2Yg
d3JhcHBlciBjbGFzc2VzLCBhbmQgdXNlIGZ1bmN0aW9ucyBkaXJlY3RseSBhcyB0ZW1wbGF0ZSBh
cmd1bWVudC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWwpOgorICAgICAgICAoV2ViQ29yZTo6bXVsdGlw
bHkpOgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OmRhcmtl
bik6CisgICAgICAgIChXZWJDb3JlOjpsaWdodGVuKToKKyAgICAgICAgKFdlYkNvcmU6OnVua25v
d24pOgorICAgICAgICAoV2ViQ29yZTo6cGxhdGZvcm1BcHBseSk6CisgICAgICAgIChXZWJDb3Jl
OjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisKIDIwMTItMDctMjQgIEFsbGFuIFNh
bmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CiAKICAgICAgICAgRml4IGFy
aXRobWV0aWMgY29tcG9zaXRlIGZpbHRlciBmb3IgYXV0by12ZWN0b3JpemF0aW9uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcApp
bmRleCBmNmRjZjYzLi41ZmI1Y2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKQEAgLTcxLDU1ICs3MSwzNyBAQCBzdGF0
aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90IHZhbHVlKQog
ICAgIHJldHVybiBxdW90aWVudCArIChyZW1haW5kZXIgPj4gOCk7CiB9CiAKLWNsYXNzIEJsZW5k
Tm9ybWFsIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBhcHBseSh1bnNpZ25l
ZCBjaGFyIGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xvckIsIHVuc2lnbmVkIGNoYXIgYWxwaGFB
LCB1bnNpZ25lZCBjaGFyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhc3REaXZpZGVCeTI1NSgo
MjU1IC0gYWxwaGFBKSAqIGNvbG9yQiArIGNvbG9yQSAqIDI1NSk7Ci0gICAgfQotfTsKK2lubGlu
ZSB1bnNpZ25lZCBjaGFyIG5vcm1hbCh1bnNpZ25lZCBjaGFyIGNvbG9yQSwgdW5zaWduZWQgY2hh
ciBjb2xvckIsIHVuc2lnbmVkIGNoYXIgYWxwaGFBLCB1bnNpZ25lZCBjaGFyKQoreworICAgIHJl
dHVybiBmYXN0RGl2aWRlQnkyNTUoKDI1NSAtIGFscGhhQSkgKiBjb2xvckIgKyBjb2xvckEgKiAy
NTUpOworfQogCi1jbGFzcyBCbGVuZE11bHRpcGx5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdW5z
aWduZWQgY2hhciBhcHBseSh1bnNpZ25lZCBjaGFyIGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xv
ckIsIHVuc2lnbmVkIGNoYXIgYWxwaGFBLCB1bnNpZ25lZCBjaGFyIGFscGhhQikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYXN0RGl2aWRlQnkyNTUoKDI1NSAtIGFscGhhQSkgKiBjb2xvckIgKyAo
MjU1IC0gYWxwaGFCICsgY29sb3JCKSAqIGNvbG9yQSk7Ci0gICAgfQotfTsKK2lubGluZSB1bnNp
Z25lZCBjaGFyIG11bHRpcGx5KHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNv
bG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNoYXIgYWxwaGFCKQoreworICAg
IHJldHVybiBmYXN0RGl2aWRlQnkyNTUoKDI1NSAtIGFscGhhQSkgKiBjb2xvckIgKyAoMjU1IC0g
YWxwaGFCICsgY29sb3JCKSAqIGNvbG9yQSk7Cit9CiAKLWNsYXNzIEJsZW5kU2NyZWVuIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBhcHBseSh1bnNpZ25lZCBjaGFyIGNvbG9y
QSwgdW5zaWduZWQgY2hhciBjb2xvckIsIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIpCi0g
ICAgewotICAgICAgICByZXR1cm4gZmFzdERpdmlkZUJ5MjU1KChjb2xvckIgKyBjb2xvckEpICog
MjU1IC0gY29sb3JBICogY29sb3JCKTsKLSAgICB9Ci19OworaW5saW5lIHVuc2lnbmVkIGNoYXIg
c2NyZWVuKHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWdu
ZWQgY2hhciwgdW5zaWduZWQgY2hhcikKK3sKKyAgICByZXR1cm4gZmFzdERpdmlkZUJ5MjU1KChj
b2xvckIgKyBjb2xvckEpICogMjU1IC0gY29sb3JBICogY29sb3JCKTsKK30KIAotY2xhc3MgQmxl
bmREYXJrZW4gewotcHVibGljOgotICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGFwcGx5KHVuc2ln
bmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciBhbHBo
YUEsIHVuc2lnbmVkIGNoYXIgYWxwaGFCKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhc3REaXZp
ZGVCeTI1NShzdGQ6Om1pbigoMjU1IC0gYWxwaGFBKSAqIGNvbG9yQiArIGNvbG9yQSAqIDI1NSwg
KDI1NSAtIGFscGhhQikgKiBjb2xvckEgKyBjb2xvckIgKiAyNTUpKTsKLSAgICB9Ci19OworaW5s
aW5lIHVuc2lnbmVkIGNoYXIgZGFya2VuKHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBj
aGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNoYXIgYWxwaGFCKQor
eworICAgIHJldHVybiBmYXN0RGl2aWRlQnkyNTUoc3RkOjptaW4oKDI1NSAtIGFscGhhQSkgKiBj
b2xvckIgKyBjb2xvckEgKiAyNTUsICgyNTUgLSBhbHBoYUIpICogY29sb3JBICsgY29sb3JCICog
MjU1KSk7Cit9CiAKLWNsYXNzIEJsZW5kTGlnaHRlbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHVu
c2lnbmVkIGNoYXIgYXBwbHkodW5zaWduZWQgY2hhciBjb2xvckEsIHVuc2lnbmVkIGNoYXIgY29s
b3JCLCB1bnNpZ25lZCBjaGFyIGFscGhhQSwgdW5zaWduZWQgY2hhciBhbHBoYUIpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFzdERpdmlkZUJ5MjU1KHN0ZDo6bWF4KCgyNTUgLSBhbHBoYUEpICog
Y29sb3JCICsgY29sb3JBICogMjU1LCAoMjU1IC0gYWxwaGFCKSAqIGNvbG9yQSArIGNvbG9yQiAq
IDI1NSkpOwotICAgIH0KLX07CitpbmxpbmUgdW5zaWduZWQgY2hhciBsaWdodGVuKHVuc2lnbmVk
IGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEs
IHVuc2lnbmVkIGNoYXIgYWxwaGFCKQoreworICAgIHJldHVybiBmYXN0RGl2aWRlQnkyNTUoc3Rk
OjptYXgoKDI1NSAtIGFscGhhQSkgKiBjb2xvckIgKyBjb2xvckEgKiAyNTUsICgyNTUgLSBhbHBo
YUIpICogY29sb3JBICsgY29sb3JCICogMjU1KSk7Cit9CiAKLWNsYXNzIEJsZW5kVW5rbm93biB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYXBwbHkodW5zaWduZWQgY2hhciwg
dW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLX07CitpbmxpbmUgdW5zaWduZWQgY2hhciB1bmtub3duKHVu
c2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIp
Cit7CisgICAgcmV0dXJuIDA7Cit9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEJsZW5kRnVuY3Rvcj4K
K3RlbXBsYXRlPEJsZW5kVHlwZSBCbGVuZEZ1bmN0aW9uPgogc3RhdGljIHZvaWQgcGxhdGZvcm1B
cHBseSh1bnNpZ25lZCBjaGFyKiBzb3VyY2VQaXhlbEEsIHVuc2lnbmVkIGNoYXIqIHNvdXJjZVBp
eGVsQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogZGVzdGluYXRp
b25QaXhlbCwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCkKIHsKQEAgLTEyNyw5ICsxMDksOSBA
QCBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5KHVuc2lnbmVkIGNoYXIqIHNvdXJjZVBpeGVsQSwg
dW5zaWduZWQgY2hhciogc291cmNlUGl4ZQogICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQg
PSAwOyBwaXhlbE9mZnNldCA8IGxlbjsgcGl4ZWxPZmZzZXQrKykgewogICAgICAgICB1bnNpZ25l
ZCBjaGFyIGFscGhhQSA9IHNvdXJjZVBpeGVsQVszXTsKICAgICAgICAgdW5zaWduZWQgY2hhciBh
bHBoYUIgPSBzb3VyY2VQaXhlbEJbM107Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0gPSBC
bGVuZEZ1bmN0b3I6OmFwcGx5KHNvdXJjZVBpeGVsQVswXSwgc291cmNlUGl4ZWxCWzBdLCBhbHBo
YUEsIGFscGhhQik7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSBCbGVuZEZ1bmN0b3I6
OmFwcGx5KHNvdXJjZVBpeGVsQVsxXSwgc291cmNlUGl4ZWxCWzFdLCBhbHBoYUEsIGFscGhhQik7
Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMl0gPSBCbGVuZEZ1bmN0b3I6OmFwcGx5KHNvdXJj
ZVBpeGVsQVsyXSwgc291cmNlUGl4ZWxCWzJdLCBhbHBoYUEsIGFscGhhQik7CisgICAgICAgIGRl
c3RpbmF0aW9uUGl4ZWxbMF0gPSBCbGVuZEZ1bmN0aW9uKHNvdXJjZVBpeGVsQVswXSwgc291cmNl
UGl4ZWxCWzBdLCBhbHBoYUEsIGFscGhhQik7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0g
PSBCbGVuZEZ1bmN0aW9uKHNvdXJjZVBpeGVsQVsxXSwgc291cmNlUGl4ZWxCWzFdLCBhbHBoYUEs
IGFscGhhQik7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMl0gPSBCbGVuZEZ1bmN0aW9uKHNv
dXJjZVBpeGVsQVsyXSwgc291cmNlUGl4ZWxCWzJdLCBhbHBoYUEsIGFscGhhQik7CiAgICAgICAg
IGRlc3RpbmF0aW9uUGl4ZWxbM10gPSAyNTUgLSBmYXN0RGl2aWRlQnkyNTUoKDI1NSAtIGFscGhh
QSkgKiAoMjU1IC0gYWxwaGFCKSk7CiAgICAgICAgIHNvdXJjZVBpeGVsQSArPSA0OwogICAgICAg
ICBzb3VyY2VQaXhlbEIgKz0gNDsKQEAgLTE0MiwyMiArMTI0LDIyIEBAIHZvaWQgRkVCbGVuZDo6
cGxhdGZvcm1BcHBseUdlbmVyaWModW5zaWduZWQgY2hhciogc291cmNlUGl4ZWxBLCB1bnNpZ25l
ZCBjaGFyKiBzCiB7CiAgICAgc3dpdGNoIChtX21vZGUpIHsKICAgICBjYXNlIEZFQkxFTkRfTU9E
RV9OT1JNQUw6Ci0gICAgICAgIHBsYXRmb3JtQXBwbHk8QmxlbmROb3JtYWw+KHNvdXJjZVBpeGVs
QSwgc291cmNlUGl4ZWxCLCBkZXN0aW5hdGlvblBpeGVsLCBwaXhlbEFycmF5TGVuZ3RoKTsKKyAg
ICAgICAgcGxhdGZvcm1BcHBseTxub3JtYWw+KHNvdXJjZVBpeGVsQSwgc291cmNlUGl4ZWxCLCBk
ZXN0aW5hdGlvblBpeGVsLCBwaXhlbEFycmF5TGVuZ3RoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBGRUJMRU5EX01PREVfTVVMVElQTFk6Ci0gICAgICAgIHBsYXRmb3JtQXBwbHk8QmxlbmRN
dWx0aXBseT4oc291cmNlUGl4ZWxBLCBzb3VyY2VQaXhlbEIsIGRlc3RpbmF0aW9uUGl4ZWwsIHBp
eGVsQXJyYXlMZW5ndGgpOworICAgICAgICBwbGF0Zm9ybUFwcGx5PG11bHRpcGx5Pihzb3VyY2VQ
aXhlbEEsIHNvdXJjZVBpeGVsQiwgZGVzdGluYXRpb25QaXhlbCwgcGl4ZWxBcnJheUxlbmd0aCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVCTEVORF9NT0RFX1NDUkVFTjoKLSAgICAgICAg
cGxhdGZvcm1BcHBseTxCbGVuZFNjcmVlbj4oc291cmNlUGl4ZWxBLCBzb3VyY2VQaXhlbEIsIGRl
c3RpbmF0aW9uUGl4ZWwsIHBpeGVsQXJyYXlMZW5ndGgpOworICAgICAgICBwbGF0Zm9ybUFwcGx5
PHNjcmVlbj4oc291cmNlUGl4ZWxBLCBzb3VyY2VQaXhlbEIsIGRlc3RpbmF0aW9uUGl4ZWwsIHBp
eGVsQXJyYXlMZW5ndGgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQkxFTkRfTU9ERV9E
QVJLRU46Ci0gICAgICAgIHBsYXRmb3JtQXBwbHk8QmxlbmREYXJrZW4+KHNvdXJjZVBpeGVsQSwg
c291cmNlUGl4ZWxCLCBkZXN0aW5hdGlvblBpeGVsLCBwaXhlbEFycmF5TGVuZ3RoKTsKKyAgICAg
ICAgcGxhdGZvcm1BcHBseTxkYXJrZW4+KHNvdXJjZVBpeGVsQSwgc291cmNlUGl4ZWxCLCBkZXN0
aW5hdGlvblBpeGVsLCBwaXhlbEFycmF5TGVuZ3RoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBGRUJMRU5EX01PREVfTElHSFRFTjoKLSAgICAgICAgcGxhdGZvcm1BcHBseTxCbGVuZExpZ2h0
ZW4+KHNvdXJjZVBpeGVsQSwgc291cmNlUGl4ZWxCLCBkZXN0aW5hdGlvblBpeGVsLCBwaXhlbEFy
cmF5TGVuZ3RoKTsKKyAgICAgICAgcGxhdGZvcm1BcHBseTxsaWdodGVuPihzb3VyY2VQaXhlbEEs
IHNvdXJjZVBpeGVsQiwgZGVzdGluYXRpb25QaXhlbCwgcGl4ZWxBcnJheUxlbmd0aCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgRkVCTEVORF9NT0RFX1VOS05PV046Ci0gICAgICAgIHBsYXRm
b3JtQXBwbHk8QmxlbmRVbmtub3duPihzb3VyY2VQaXhlbEEsIHNvdXJjZVBpeGVsQiwgZGVzdGlu
YXRpb25QaXhlbCwgcGl4ZWxBcnJheUxlbmd0aCk7CisgICAgICAgIHBsYXRmb3JtQXBwbHk8dW5r
bm93bj4oc291cmNlUGl4ZWxBLCBzb3VyY2VQaXhlbEIsIGRlc3RpbmF0aW9uUGl4ZWwsIHBpeGVs
QXJyYXlMZW5ndGgpOwogICAgICAgICBicmVhazsKICAgICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154307</attachid>
            <date>2012-07-25 02:53:48 -0700</date>
            <delta_ts>2012-07-25 04:16:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91398-20120725115340.patch</filename>
            <type>text/plain</type>
            <size>7099</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2Y3NDRhZjQzYWRkNDQ2
ZjkyYzViNDcxNzIxMmQ5ZDAzYmFlYjQxZC4uNmZkNzYwMjZiMDU1YmUzMTJmZDgxOWIxMmE2NjZh
OTRkNTk2ODViNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA3LTI1ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIEZp
eCBibGVuZCBmaWx0ZXIgZm9yIGF1dG92ZWN0b3JpemluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEzOTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
aWtvbGFzIFppbW1lcm1hbm4uCisKKyAgICAgICAgR2V0IHJpZCBvZiB3cmFwcGVyIGNsYXNzZXMs
IGFuZCB1c2UgZnVuY3Rpb25zIGRpcmVjdGx5IGFzIHRlbXBsYXRlIGFyZ3VtZW50LgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmZlQmxlbmROb3JtYWwpOgorICAgICAgICAoV2ViQ29yZTo6ZmVCbGVuZE11bHRpcGx5
KToKKyAgICAgICAgKFdlYkNvcmU6OmZlQmxlbmRTY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6
ZmVCbGVuZERhcmtlbik6CisgICAgICAgIChXZWJDb3JlOjpmZUJsZW5kTGlnaHRlbik6CisgICAg
ICAgIChXZWJDb3JlOjpmZUJsZW5kVW5rbm93bik6CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9y
bUFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlHZW5lcmlj
KToKKwogMjAxMi0wNy0yNSAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBbUXRdW1dLMl0gRGlzYWJsZSBDb3B5VG9UZXh0dXJlIGZvciBHcmFwaGljc1N1cmZhY2VN
YWMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUJsZW5kLmNwcAppbmRleCBmNmRjZjYzOTYxZDMzZjMxYjc5NGMwYzBhNTEyMDg4MzZlNDY1YjUw
Li5kNTg5N2MzOTJiYjdlOTY2NGUwYzJjMGU0ZWZjNTA1MjlkNWNlZTQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKQEAg
LTcxLDU1ICs3MSwzNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgZmFzdERpdmlkZUJ5
MjU1KHVpbnQxNl90IHZhbHVlKQogICAgIHJldHVybiBxdW90aWVudCArIChyZW1haW5kZXIgPj4g
OCk7CiB9CiAKLWNsYXNzIEJsZW5kTm9ybWFsIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdW5zaWdu
ZWQgY2hhciBhcHBseSh1bnNpZ25lZCBjaGFyIGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xvckIs
IHVuc2lnbmVkIGNoYXIgYWxwaGFBLCB1bnNpZ25lZCBjaGFyKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhc3REaXZpZGVCeTI1NSgoMjU1IC0gYWxwaGFBKSAqIGNvbG9yQiArIGNvbG9yQSAqIDI1
NSk7Ci0gICAgfQotfTsKK2lubGluZSB1bnNpZ25lZCBjaGFyIGZlQmxlbmROb3JtYWwodW5zaWdu
ZWQgY2hhciBjb2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNpZ25lZCBjaGFyIGFscGhh
QSwgdW5zaWduZWQgY2hhcikKK3sKKyAgICByZXR1cm4gZmFzdERpdmlkZUJ5MjU1KCgyNTUgLSBh
bHBoYUEpICogY29sb3JCICsgY29sb3JBICogMjU1KTsKK30KIAotY2xhc3MgQmxlbmRNdWx0aXBs
eSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYXBwbHkodW5zaWduZWQgY2hh
ciBjb2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNpZ25lZCBjaGFyIGFscGhhQSwgdW5z
aWduZWQgY2hhciBhbHBoYUIpCi0gICAgewotICAgICAgICByZXR1cm4gZmFzdERpdmlkZUJ5MjU1
KCgyNTUgLSBhbHBoYUEpICogY29sb3JCICsgKDI1NSAtIGFscGhhQiArIGNvbG9yQikgKiBjb2xv
ckEpOwotICAgIH0KLX07CitpbmxpbmUgdW5zaWduZWQgY2hhciBmZUJsZW5kTXVsdGlwbHkodW5z
aWduZWQgY2hhciBjb2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNpZ25lZCBjaGFyIGFs
cGhhQSwgdW5zaWduZWQgY2hhciBhbHBoYUIpCit7CisgICAgcmV0dXJuIGZhc3REaXZpZGVCeTI1
NSgoMjU1IC0gYWxwaGFBKSAqIGNvbG9yQiArICgyNTUgLSBhbHBoYUIgKyBjb2xvckIpICogY29s
b3JBKTsKK30KIAotY2xhc3MgQmxlbmRTY3JlZW4gewotcHVibGljOgotICAgIHN0YXRpYyB1bnNp
Z25lZCBjaGFyIGFwcGx5KHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9y
QiwgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YXN0RGl2aWRlQnkyNTUoKGNvbG9yQiArIGNvbG9yQSkgKiAyNTUgLSBjb2xvckEgKiBjb2xvckIp
OwotICAgIH0KLX07CitpbmxpbmUgdW5zaWduZWQgY2hhciBmZUJsZW5kU2NyZWVuKHVuc2lnbmVk
IGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciwgdW5zaWdu
ZWQgY2hhcikKK3sKKyAgICByZXR1cm4gZmFzdERpdmlkZUJ5MjU1KChjb2xvckIgKyBjb2xvckEp
ICogMjU1IC0gY29sb3JBICogY29sb3JCKTsKK30KIAotY2xhc3MgQmxlbmREYXJrZW4gewotcHVi
bGljOgotICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGFwcGx5KHVuc2lnbmVkIGNoYXIgY29sb3JB
LCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5zaWduZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNo
YXIgYWxwaGFCKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhc3REaXZpZGVCeTI1NShzdGQ6Om1p
bigoMjU1IC0gYWxwaGFBKSAqIGNvbG9yQiArIGNvbG9yQSAqIDI1NSwgKDI1NSAtIGFscGhhQikg
KiBjb2xvckEgKyBjb2xvckIgKiAyNTUpKTsKLSAgICB9Ci19OworaW5saW5lIHVuc2lnbmVkIGNo
YXIgZmVCbGVuZERhcmtlbih1bnNpZ25lZCBjaGFyIGNvbG9yQSwgdW5zaWduZWQgY2hhciBjb2xv
ckIsIHVuc2lnbmVkIGNoYXIgYWxwaGFBLCB1bnNpZ25lZCBjaGFyIGFscGhhQikKK3sKKyAgICBy
ZXR1cm4gZmFzdERpdmlkZUJ5MjU1KHN0ZDo6bWluKCgyNTUgLSBhbHBoYUEpICogY29sb3JCICsg
Y29sb3JBICogMjU1LCAoMjU1IC0gYWxwaGFCKSAqIGNvbG9yQSArIGNvbG9yQiAqIDI1NSkpOwor
fQogCi1jbGFzcyBCbGVuZExpZ2h0ZW4gewotcHVibGljOgotICAgIHN0YXRpYyB1bnNpZ25lZCBj
aGFyIGFwcGx5KHVuc2lnbmVkIGNoYXIgY29sb3JBLCB1bnNpZ25lZCBjaGFyIGNvbG9yQiwgdW5z
aWduZWQgY2hhciBhbHBoYUEsIHVuc2lnbmVkIGNoYXIgYWxwaGFCKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhc3REaXZpZGVCeTI1NShzdGQ6Om1heCgoMjU1IC0gYWxwaGFBKSAqIGNvbG9yQiAr
IGNvbG9yQSAqIDI1NSwgKDI1NSAtIGFscGhhQikgKiBjb2xvckEgKyBjb2xvckIgKiAyNTUpKTsK
LSAgICB9Ci19OworaW5saW5lIHVuc2lnbmVkIGNoYXIgZmVCbGVuZExpZ2h0ZW4odW5zaWduZWQg
Y2hhciBjb2xvckEsIHVuc2lnbmVkIGNoYXIgY29sb3JCLCB1bnNpZ25lZCBjaGFyIGFscGhhQSwg
dW5zaWduZWQgY2hhciBhbHBoYUIpCit7CisgICAgcmV0dXJuIGZhc3REaXZpZGVCeTI1NShzdGQ6
Om1heCgoMjU1IC0gYWxwaGFBKSAqIGNvbG9yQiArIGNvbG9yQSAqIDI1NSwgKDI1NSAtIGFscGhh
QikgKiBjb2xvckEgKyBjb2xvckIgKiAyNTUpKTsKK30KIAotY2xhc3MgQmxlbmRVbmtub3duIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBhcHBseSh1bnNpZ25lZCBjaGFyLCB1
bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotfTsKK2lubGluZSB1bnNpZ25lZCBjaGFyIGZlQmxlbmRVbmtu
b3duKHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVk
IGNoYXIpCit7CisgICAgcmV0dXJuIDA7Cit9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEJsZW5kRnVu
Y3Rvcj4KK3RlbXBsYXRlPEJsZW5kVHlwZSBCbGVuZEZ1bmN0aW9uPgogc3RhdGljIHZvaWQgcGxh
dGZvcm1BcHBseSh1bnNpZ25lZCBjaGFyKiBzb3VyY2VQaXhlbEEsIHVuc2lnbmVkIGNoYXIqIHNv
dXJjZVBpeGVsQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogZGVz
dGluYXRpb25QaXhlbCwgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCkKIHsKQEAgLTEyNyw5ICsx
MDksOSBAQCBzdGF0aWMgdm9pZCBwbGF0Zm9ybUFwcGx5KHVuc2lnbmVkIGNoYXIqIHNvdXJjZVBp
eGVsQSwgdW5zaWduZWQgY2hhciogc291cmNlUGl4ZQogICAgIGZvciAodW5zaWduZWQgcGl4ZWxP
ZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IGxlbjsgcGl4ZWxPZmZzZXQrKykgewogICAgICAgICB1
bnNpZ25lZCBjaGFyIGFscGhhQSA9IHNvdXJjZVBpeGVsQVszXTsKICAgICAgICAgdW5zaWduZWQg
Y2hhciBhbHBoYUIgPSBzb3VyY2VQaXhlbEJbM107Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxb
MF0gPSBCbGVuZEZ1bmN0b3I6OmFwcGx5KHNvdXJjZVBpeGVsQVswXSwgc291cmNlUGl4ZWxCWzBd
LCBhbHBoYUEsIGFscGhhQik7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMV0gPSBCbGVuZEZ1
bmN0b3I6OmFwcGx5KHNvdXJjZVBpeGVsQVsxXSwgc291cmNlUGl4ZWxCWzFdLCBhbHBoYUEsIGFs
cGhhQik7Ci0gICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMl0gPSBCbGVuZEZ1bmN0b3I6OmFwcGx5
KHNvdXJjZVBpeGVsQVsyXSwgc291cmNlUGl4ZWxCWzJdLCBhbHBoYUEsIGFscGhhQik7CisgICAg
ICAgIGRlc3RpbmF0aW9uUGl4ZWxbMF0gPSBCbGVuZEZ1bmN0aW9uKHNvdXJjZVBpeGVsQVswXSwg
c291cmNlUGl4ZWxCWzBdLCBhbHBoYUEsIGFscGhhQik7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4
ZWxbMV0gPSBCbGVuZEZ1bmN0aW9uKHNvdXJjZVBpeGVsQVsxXSwgc291cmNlUGl4ZWxCWzFdLCBh
bHBoYUEsIGFscGhhQik7CisgICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbMl0gPSBCbGVuZEZ1bmN0
aW9uKHNvdXJjZVBpeGVsQVsyXSwgc291cmNlUGl4ZWxCWzJdLCBhbHBoYUEsIGFscGhhQik7CiAg
ICAgICAgIGRlc3RpbmF0aW9uUGl4ZWxbM10gPSAyNTUgLSBmYXN0RGl2aWRlQnkyNTUoKDI1NSAt
IGFscGhhQSkgKiAoMjU1IC0gYWxwaGFCKSk7CiAgICAgICAgIHNvdXJjZVBpeGVsQSArPSA0Owog
ICAgICAgICBzb3VyY2VQaXhlbEIgKz0gNDsKQEAgLTE0MiwyMiArMTI0LDIyIEBAIHZvaWQgRkVC
bGVuZDo6cGxhdGZvcm1BcHBseUdlbmVyaWModW5zaWduZWQgY2hhciogc291cmNlUGl4ZWxBLCB1
bnNpZ25lZCBjaGFyKiBzCiB7CiAgICAgc3dpdGNoIChtX21vZGUpIHsKICAgICBjYXNlIEZFQkxF
TkRfTU9ERV9OT1JNQUw6Ci0gICAgICAgIHBsYXRmb3JtQXBwbHk8QmxlbmROb3JtYWw+KHNvdXJj
ZVBpeGVsQSwgc291cmNlUGl4ZWxCLCBkZXN0aW5hdGlvblBpeGVsLCBwaXhlbEFycmF5TGVuZ3Ro
KTsKKyAgICAgICAgcGxhdGZvcm1BcHBseTxmZUJsZW5kTm9ybWFsPihzb3VyY2VQaXhlbEEsIHNv
dXJjZVBpeGVsQiwgZGVzdGluYXRpb25QaXhlbCwgcGl4ZWxBcnJheUxlbmd0aCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgRkVCTEVORF9NT0RFX01VTFRJUExZOgotICAgICAgICBwbGF0Zm9y
bUFwcGx5PEJsZW5kTXVsdGlwbHk+KHNvdXJjZVBpeGVsQSwgc291cmNlUGl4ZWxCLCBkZXN0aW5h
dGlvblBpeGVsLCBwaXhlbEFycmF5TGVuZ3RoKTsKKyAgICAgICAgcGxhdGZvcm1BcHBseTxmZUJs
ZW5kTXVsdGlwbHk+KHNvdXJjZVBpeGVsQSwgc291cmNlUGl4ZWxCLCBkZXN0aW5hdGlvblBpeGVs
LCBwaXhlbEFycmF5TGVuZ3RoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGRUJMRU5EX01P
REVfU0NSRUVOOgotICAgICAgICBwbGF0Zm9ybUFwcGx5PEJsZW5kU2NyZWVuPihzb3VyY2VQaXhl
bEEsIHNvdXJjZVBpeGVsQiwgZGVzdGluYXRpb25QaXhlbCwgcGl4ZWxBcnJheUxlbmd0aCk7Cisg
ICAgICAgIHBsYXRmb3JtQXBwbHk8ZmVCbGVuZFNjcmVlbj4oc291cmNlUGl4ZWxBLCBzb3VyY2VQ
aXhlbEIsIGRlc3RpbmF0aW9uUGl4ZWwsIHBpeGVsQXJyYXlMZW5ndGgpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEZFQkxFTkRfTU9ERV9EQVJLRU46Ci0gICAgICAgIHBsYXRmb3JtQXBwbHk8
QmxlbmREYXJrZW4+KHNvdXJjZVBpeGVsQSwgc291cmNlUGl4ZWxCLCBkZXN0aW5hdGlvblBpeGVs
LCBwaXhlbEFycmF5TGVuZ3RoKTsKKyAgICAgICAgcGxhdGZvcm1BcHBseTxmZUJsZW5kRGFya2Vu
Pihzb3VyY2VQaXhlbEEsIHNvdXJjZVBpeGVsQiwgZGVzdGluYXRpb25QaXhlbCwgcGl4ZWxBcnJh
eUxlbmd0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkVCTEVORF9NT0RFX0xJR0hURU46
Ci0gICAgICAgIHBsYXRmb3JtQXBwbHk8QmxlbmRMaWdodGVuPihzb3VyY2VQaXhlbEEsIHNvdXJj
ZVBpeGVsQiwgZGVzdGluYXRpb25QaXhlbCwgcGl4ZWxBcnJheUxlbmd0aCk7CisgICAgICAgIHBs
YXRmb3JtQXBwbHk8ZmVCbGVuZExpZ2h0ZW4+KHNvdXJjZVBpeGVsQSwgc291cmNlUGl4ZWxCLCBk
ZXN0aW5hdGlvblBpeGVsLCBwaXhlbEFycmF5TGVuZ3RoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBGRUJMRU5EX01PREVfVU5LTk9XTjoKLSAgICAgICAgcGxhdGZvcm1BcHBseTxCbGVuZFVu
a25vd24+KHNvdXJjZVBpeGVsQSwgc291cmNlUGl4ZWxCLCBkZXN0aW5hdGlvblBpeGVsLCBwaXhl
bEFycmF5TGVuZ3RoKTsKKyAgICAgICAgcGxhdGZvcm1BcHBseTxmZUJsZW5kVW5rbm93bj4oc291
cmNlUGl4ZWxBLCBzb3VyY2VQaXhlbEIsIGRlc3RpbmF0aW9uUGl4ZWwsIHBpeGVsQXJyYXlMZW5n
dGgpOwogICAgICAgICBicmVhazsKICAgICB9CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>