<?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>59808</bug_id>
          
          <creation_ts>2011-04-29 10:34:20 -0700</creation_ts>
          <short_desc>Add utility for converting SkCanvas to CGContext</short_desc>
          <delta_ts>2011-05-06 17:47:43 -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>Other</rep_platform>
          <op_sys>OS X 10.5</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="Cary Clark">caryclark</reporter>
          <assigned_to name="Cary Clark">caryclark</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>mark</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>395336</commentid>
    <comment_count>0</comment_count>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-04-29 10:34:20 -0700</bug_when>
    <thetext>Add utility for converting SkCanvas to CGContext</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395348</commentid>
    <comment_count>1</comment_count>
      <attachid>91699</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-04-29 10:44:44 -0700</bug_when>
    <thetext>Created attachment 91699
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395365</commentid>
    <comment_count>2</comment_count>
      <attachid>91702</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-04-29 11:01:08 -0700</bug_when>
    <thetext>Created attachment 91702
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397327</commentid>
    <comment_count>3</comment_count>
      <attachid>91702</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-03 13:40:09 -0700</bug_when>
    <thetext>Comment on attachment 91702
Patch

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

I guess I&apos;m not fully understanding what we&apos;re doing here, so my comments below are all mostly style-nits and nothing related to the actual substance of this patch.

This reminds me a little of the LocalCurrentGraphicsContext RIAA which I added to WebCore for the Mac port years ago, or the more recent GraphicsContextStateSaver RIAA which Simon Fraser added for the platform-agnostic GraphicsContext in WebCore.

&gt; Source/WebCore/platform/graphics/skia/BitLockerSkia.cpp:47
&gt; +static CGAffineTransform SkMatrixToCGAffineTransform(const SkMatrix&amp; matrix)
&gt; +{
&gt; +    // CGAffineTransforms don&apos;t support perspective transforms, so make sure
&gt; +    // we don&apos;t get those.

Normally we have automatic translation between platform types and WebCore types with implicit constructors and operators.  Don&apos;t we already have an SkMatrix constructor for AffineTransform?  AffineTransform certainly knows how to convert to a CGAffineTransform.

&gt; Source/WebCore/platform/graphics/skia/BitLockerSkia.cpp:75
&gt; +    if (!m_cgContext)
&gt; +        return;

Seems a bit odd to conditionally release.  Should this be called releaseIfNeeded()?

&gt; Source/WebCore/platform/graphics/skia/BitLockerSkia.cpp:88
&gt; +    const SkBitmap&amp; bitmap = device-&gt;accessBitmap(/* changePixels=*/true);

We don&apos;t normally document arguments like that.  Instead we use enums instead of bools to make them self-documeting. :)  I guess this is a Skia API?

&gt; Source/WebCore/platform/graphics/skia/BitLockerSkia.cpp:98
&gt; +    contentsTransform = CGAffineTransformTranslate(contentsTransform, 0,
&gt; +        -device-&gt;height());

WebKit doesn&apos;t have a 80c wrapping rule like Google does.

&gt; Source/WebCore/platform/graphics/skia/BitLockerSkia.cpp:106
&gt; +        IntRect rect = iter.rect();
&gt; +        CGPathAddRect(clipPath, 0, rect);

No real need for a local here.  I might have even just made a createClipPath() function to abstract this loop.

&gt; Source/WebCore/platform/graphics/skia/BitLockerSkia.h:41
&gt; +// Converts a SkCanvas temporarily to a CGContext
&gt; +class BitLockerSkia {

It clearly does more than that since its class name talks about locking bits (whatever that means?).

&gt; Source/WebCore/platform/graphics/skia/BitLockerSkia.h:45
&gt; +    CGContextRef cgContext();

I think most places we leave a newline before private:  But it&apos;s not documented in our style guidelines and really doesn&apos;t matter. :)  Just noticed as I was reading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397374</commentid>
    <comment_count>4</comment_count>
      <attachid>92127</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-05-03 14:08:04 -0700</bug_when>
    <thetext>Created attachment 92127
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397375</commentid>
    <comment_count>5</comment_count>
      <attachid>91702</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-05-03 14:08:22 -0700</bug_when>
    <thetext>Comment on attachment 91702
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/skia/BitLockerSkia.cpp:47
&gt;&gt; +    // we don&apos;t get those.
&gt; 
&gt; Normally we have automatic translation between platform types and WebCore types with implicit constructors and operators.  Don&apos;t we already have an SkMatrix constructor for AffineTransform?  AffineTransform certainly knows how to convert to a CGAffineTransform.

No, there is no SkMatrix constructor for AffineTransform currently. I don&apos;t recommend adding one since an arbitrary SkMatrix can&apos;t be represented as an AffineTransform.

This function is copied from skia/ext/skia_utils_mac.mm in the Chromium tree. I assume that I can&apos;t get there from here.

&gt;&gt; Source/WebCore/platform/graphics/skia/BitLockerSkia.cpp:75
&gt;&gt; +        return;
&gt; 
&gt; Seems a bit odd to conditionally release.  Should this be called releaseIfNeeded()?

Done.

&gt;&gt; Source/WebCore/platform/graphics/skia/BitLockerSkia.cpp:88
&gt;&gt; +    const SkBitmap&amp; bitmap = device-&gt;accessBitmap(/* changePixels=*/true);
&gt; 
&gt; We don&apos;t normally document arguments like that.  Instead we use enums instead of bools to make them self-documeting. :)  I guess this is a Skia API?

Correct, this is a Skia API. I copied this from ext/skia again, but I can remove the comment if you prefer. (Done.)

&gt;&gt; Source/WebCore/platform/graphics/skia/BitLockerSkia.cpp:98
&gt;&gt; +        -device-&gt;height());
&gt; 
&gt; WebKit doesn&apos;t have a 80c wrapping rule like Google does.

Understood. Does that mean that long lines must be unwrapped? I didn&apos;t see that in the style guide. (Done.)

&gt;&gt; Source/WebCore/platform/graphics/skia/BitLockerSkia.cpp:106
&gt;&gt; +        CGPathAddRect(clipPath, 0, rect);
&gt; 
&gt; No real need for a local here.  I might have even just made a createClipPath() function to abstract this loop.

The local is required. The result of iter.rect() is a SkIRect. There is no conversion from SkIRect to CGRect, but there is from SkIRect to IntRect, and from IntRect to CGRect.

&gt;&gt; Source/WebCore/platform/graphics/skia/BitLockerSkia.h:41
&gt;&gt; +class BitLockerSkia {
&gt; 
&gt; It clearly does more than that since its class name talks about locking bits (whatever that means?).

Locking bits means that the pixels underneath the bitmap are locked, and made available to the CGContext to modify. When the bit locker goes out of scope, the bits are unlocked, and the calling SkCanvas is once again the owner.

&gt;&gt; Source/WebCore/platform/graphics/skia/BitLockerSkia.h:45
&gt;&gt; +    CGContextRef cgContext();
&gt; 
&gt; I think most places we leave a newline before private:  But it&apos;s not documented in our style guidelines and really doesn&apos;t matter. :)  Just noticed as I was reading.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397388</commentid>
    <comment_count>6</comment_count>
      <attachid>92127</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-03 14:19:39 -0700</bug_when>
    <thetext>Comment on attachment 92127
Patch

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

&gt; Source/WebCore/ChangeLog:19
&gt; +        Each time the CGContext is retrieved, it is rebuilt. 
&gt; +        This permits the caller to modify the same canvas 
&gt; +        between calls. 

So this is a feature?  It seems easy to mis-use this.  I wouldn&apos;t expect context() to do any work.  But I guess this allows us to interlace CG and Skia calls?  I thought part of the point of this class was to say that CG was in charge until the class goes out of scope?

Do Skia Canvases have any sort of generation number we could use to avoid the rebuild in the common case?  I&apos;m not sure how much it matters, but it looks like context() does a few mallocs at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397822</commentid>
    <comment_count>7</comment_count>
      <attachid>92127</attachid>
    <who name="Cary Clark">caryclark</who>
    <bug_when>2011-05-04 05:07:22 -0700</bug_when>
    <thetext>Comment on attachment 92127
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:19
&gt;&gt; +        between calls. 
&gt; 
&gt; So this is a feature?  It seems easy to mis-use this.  I wouldn&apos;t expect context() to do any work.  But I guess this allows us to interlace CG and Skia calls?  I thought part of the point of this class was to say that CG was in charge until the class goes out of scope?
&gt; 
&gt; Do Skia Canvases have any sort of generation number we could use to avoid the rebuild in the common case?  I&apos;m not sure how much it matters, but it looks like context() does a few mallocs at least.

Correct, this allows interlacing CG and Skia calls, or more specifically, interlacing CG-specific calls and abstract graphics calls that map to Skia. CG does own the bits behind the bitmap until this goes out of scope, but generic calls may modify the Skia matrix or clip, which needs to be reapplied to CoreGraphics state.

While it could be mis-used, the number of call sites is small. BitLockerSkia has five call sites in WebKit and four more in the rest of Chrome.

At present, BitLockerSkia::context() does not show up on any performance profile. When it does, I will optimize it. Compared to the Skia and CG calls around it, the few mallocs in BitLockerSkia is very unlikely to ever matter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399909</commentid>
    <comment_count>8</comment_count>
      <attachid>92127</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-06 16:46:05 -0700</bug_when>
    <thetext>Comment on attachment 92127
Patch

I&apos;m not sure I have any more suggstions.  This code doesn&apos;t feel quite right to me, but it&apos;s probably best to land it and iterate from there.  Glad to see you&apos;re making progress getting Skia up on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399963</commentid>
    <comment_count>9</comment_count>
      <attachid>92127</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-06 17:47:37 -0700</bug_when>
    <thetext>Comment on attachment 92127
Patch

Clearing flags on attachment: 92127

Committed r85989: &lt;http://trac.webkit.org/changeset/85989&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399964</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-06 17:47:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91699</attachid>
            <date>2011-04-29 10:44:44 -0700</date>
            <delta_ts>2011-04-29 11:01:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59808-20110429134443.patch</filename>
            <type>text/plain</type>
            <size>6798</size>
            <attacher name="Cary Clark">caryclark</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0TG9ja2VyU2tp
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9CaXRMb2NrZXJTa2lhLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvQml0TG9ja2VyU2tpYS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKyAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCaXRMb2NrZXJTa2lh
LmgiCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgorI2lu
Y2x1ZGUgIlNrRGV2aWNlLmgiCisjaW5jbHVkZSAiU2tSZWdpb24uaCIKKworI2luY2x1ZGUgPENv
cmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgQ0dBZmZpbmVUcmFuc2Zvcm0gU2tNYXRyaXhUb0NHQWZmaW5lVHJhbnNmb3JtKGNvbnN0IFNr
TWF0cml4JiBtYXRyaXgpCit7CisgICAgLy8gQ0dBZmZpbmVUcmFuc2Zvcm1zIGRvbid0IHN1cHBv
cnQgcGVyc3BlY3RpdmUgdHJhbnNmb3Jtcywgc28gbWFrZSBzdXJlCisgICAgLy8gd2UgZG9uJ3Qg
Z2V0IHRob3NlLgorICAgIEFTU0VSVCghbWF0cml4W1NrTWF0cml4OjprTVBlcnNwMF0pOworICAg
IEFTU0VSVCghbWF0cml4W1NrTWF0cml4OjprTVBlcnNwMV0pOworICAgIEFTU0VSVChtYXRyaXhb
U2tNYXRyaXg6OmtNUGVyc3AyXSA9PSAxLjBmKTsKKworICAgIHJldHVybiBDR0FmZmluZVRyYW5z
Zm9ybU1ha2UoCisgICAgICAgIG1hdHJpeFtTa01hdHJpeDo6a01TY2FsZVhdLAorICAgICAgICBt
YXRyaXhbU2tNYXRyaXg6OmtNU2tld1ldLAorICAgICAgICBtYXRyaXhbU2tNYXRyaXg6OmtNU2tl
d1hdLAorICAgICAgICBtYXRyaXhbU2tNYXRyaXg6OmtNU2NhbGVZXSwKKyAgICAgICAgbWF0cml4
W1NrTWF0cml4OjprTVRyYW5zWF0sCisgICAgICAgIG1hdHJpeFtTa01hdHJpeDo6a01UcmFuc1ld
KTsKK30KKworQml0TG9ja2VyU2tpYTo6Qml0TG9ja2VyU2tpYShTa0NhbnZhcyogY2FudmFzKQor
ICAgIDogbV9jYW52YXMoY2FudmFzKQorICAgICwgbV9jZ0NvbnRleHQoMCkKK3sKK30KKworQml0
TG9ja2VyU2tpYTo6fkJpdExvY2tlclNraWEoKQoreworICAgIHJlbGVhc2UoKTsKK30KKwordm9p
ZCBCaXRMb2NrZXJTa2lhOjpyZWxlYXNlKCkKK3sKKyAgICBpZiAoIW1fY2dDb250ZXh0KQorICAg
ICAgICByZXR1cm47CisgICAgbV9jYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAodHJ1
ZSkudW5sb2NrUGl4ZWxzKCk7CisgICAgQ0dDb250ZXh0UmVsZWFzZShtX2NnQ29udGV4dCk7Cisg
ICAgbV9jZ0NvbnRleHQgPSAwOworfQorCitDR0NvbnRleHRSZWYgQml0TG9ja2VyU2tpYTo6Y2dD
b250ZXh0KCkKK3sKKyAgICBTa0RldmljZSogZGV2aWNlID0gbV9jYW52YXMtPmdldERldmljZSgp
OworICAgIEFTU0VSVChkZXZpY2UpOworICAgIGlmICghZGV2aWNlKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZWxlYXNlKCk7CisgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IGRldmljZS0+
YWNjZXNzQml0bWFwKC8qIGNoYW5nZVBpeGVscz0qL3RydWUpOworICAgIGJpdG1hcC5sb2NrUGl4
ZWxzKCk7CisgICAgdm9pZCogcGl4ZWxzID0gYml0bWFwLmdldFBpeGVscygpOworICAgIG1fY2dD
b250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHBpeGVscywgZGV2aWNlLT53aWR0aCgpLAor
ICAgICAgICBkZXZpY2UtPmhlaWdodCgpLCA4LCBiaXRtYXAucm93Qnl0ZXMoKSwgQ0dDb2xvclNw
YWNlQ3JlYXRlRGV2aWNlUkdCKCksIAorICAgICAgICBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Qg
fCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0KTsKKworICAgIC8vIEFwcGx5IGRldmlj
ZSBtYXRyaXguCisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY29udGVudHNUcmFuc2Zvcm0gPSBDR0Fm
ZmluZVRyYW5zZm9ybU1ha2VTY2FsZSgxLCAtMSk7CisgICAgY29udGVudHNUcmFuc2Zvcm0gPSBD
R0FmZmluZVRyYW5zZm9ybVRyYW5zbGF0ZShjb250ZW50c1RyYW5zZm9ybSwgMCwKKyAgICAgICAg
LWRldmljZS0+aGVpZ2h0KCkpOworICAgIENHQ29udGV4dENvbmNhdENUTShtX2NnQ29udGV4dCwg
Y29udGVudHNUcmFuc2Zvcm0pOworCisgICAgLy8gQXBwbHkgY2xpcCBpbiBkZXZpY2UgY29vcmRp
bmF0ZXMuCisgICAgQ0dNdXRhYmxlUGF0aFJlZiBjbGlwUGF0aCA9IENHUGF0aENyZWF0ZU11dGFi
bGUoKTsKKyAgICBTa1JlZ2lvbjo6SXRlcmF0b3IgaXRlcihtX2NhbnZhcy0+Z2V0VG90YWxDbGlw
KCkpOworICAgIGZvciAoOyAhaXRlci5kb25lKCk7IGl0ZXIubmV4dCgpKSB7CisgICAgICAgIElu
dFJlY3QgcmVjdCA9IGl0ZXIucmVjdCgpOworICAgICAgICBDR1BhdGhBZGRSZWN0KGNsaXBQYXRo
LCAwLCByZWN0KTsKKyAgICB9CisgICAgQ0dDb250ZXh0QWRkUGF0aChtX2NnQ29udGV4dCwgY2xp
cFBhdGgpOworICAgIENHQ29udGV4dENsaXAobV9jZ0NvbnRleHQpOworICAgIENHUGF0aFJlbGVh
c2UoY2xpcFBhdGgpOworCisgICAgLy8gQXBwbHkgY29udGVudCBtYXRyaXguCisgICAgY29uc3Qg
U2tNYXRyaXgmIHNrTWF0cml4ID0gbV9jYW52YXMtPmdldFRvdGFsTWF0cml4KCk7CisgICAgQ0dB
ZmZpbmVUcmFuc2Zvcm0gYWZmaW5lID0gU2tNYXRyaXhUb0NHQWZmaW5lVHJhbnNmb3JtKHNrTWF0
cml4KTsKKyAgICBDR0NvbnRleHRDb25jYXRDVE0obV9jZ0NvbnRleHQsIGFmZmluZSk7CisKKyAg
ICByZXR1cm4gbV9jZ0NvbnRleHQ7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvQml0TG9ja2VyU2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0TG9ja2VyU2tpYS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRMb2NrZXJTa2lh
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJpdExvY2tlclNraWFf
aAorI2RlZmluZSBCaXRMb2NrZXJTa2lhX2gKKwordHlwZWRlZiBzdHJ1Y3QgQ0dDb250ZXh0KiBD
R0NvbnRleHRSZWY7CisKK2NsYXNzIFNrQ2FudmFzOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIENvbnZlcnRzIGEgU2tDYW52YXMgdGVtcG9yYXJpbHkgdG8gYSBDR0NvbnRleHQKK2NsYXNz
IEJpdExvY2tlclNraWEgeworcHVibGljOgorICAgIGV4cGxpY2l0IEJpdExvY2tlclNraWEoU2tD
YW52YXMqKTsKKyAgICB+Qml0TG9ja2VyU2tpYSgpOworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRl
eHQoKTsKK3ByaXZhdGU6CisgICAgdm9pZCByZWxlYXNlKCk7CisgICAgU2tDYW52YXMqIG1fY2Fu
dmFzOworICAgIENHQ29udGV4dFJlZiBtX2NnQ29udGV4dDsKK307CisKK30KKyNlbmRpZiAvLyBC
aXRMb2NrZXJTa2lhX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91702</attachid>
            <date>2011-04-29 11:01:08 -0700</date>
            <delta_ts>2011-05-03 14:08:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59808-20110429140106.patch</filename>
            <type>text/plain</type>
            <size>8525</size>
            <attacher name="Cary Clark">caryclark</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1MzM2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDQtMjkgIENhcnkgQ2xh
cmsgIDxjYXJ5Y2xhcmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgdXRpbGl0eSBmb3IgY29udmVydGluZyBTa0NhbnZhcyB0
byBDR0NvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU5ODA4CisKKyAgICAgICAgU2tpYSBvbiBNYWMgdXNlcyBTa2lhIHRvIHJlbmRlciBXZWJL
aXQsIGFuZCBDRyAKKyAgICAgICAgdG8gcmVuZGVyIFVJIGVsZW1lbnRzLiBUaGUgQ0cgZWxlbWVu
dHMgbmVlZCBhIAorICAgICAgICB0cmFuc2NyaWJlZCBncmFwaGljcyBjb250ZXh0IHRoYXQgcHJl
c2VydmVzIHRoZSAKKyAgICAgICAgY2FudmFzIG1hdHJpeCwgYW5kIHRoZSBjYW52YXMgY2xpcC4g
CisKKyAgICAgICAgVGhlIEJpdExvY2tlclNraWEgdXRpbGl0eSBjbGFzcyBzZXRzIHVwIGEgQ0dD
b250ZXh0IAorICAgICAgICBmcm9tIHRoZSBTa0NhbnZhcywgbG9ja3MgdGhlIGJpdG1hcCdzIGJp
dHMsIGFuZCAKKyAgICAgICAgcmVsZWFzZXMgdGhlIGxvY2sgd2hlbiB0aGUgY2xhc3MgZ29lcyBv
dXQgb2Ygc2NvcGUuIAorCisgICAgICAgIEVhY2ggdGltZSB0aGUgQ0dDb250ZXh0IGlzIHJldHJp
ZXZlZCwgaXQgaXMgcmVidWlsdC4gCisgICAgICAgIFRoaXMgcGVybWl0cyB0aGUgY2FsbGVyIHRv
IG1vZGlmeSB0aGUgc2FtZSBjYW52YXMgCisgICAgICAgIGJldHdlZW4gY2FsbHMuIAorCisgICAg
ICAgIFRoaXMgY2hhbmdlIGFkZHMgdXRpbGl0aWVzIGJ1dCBkb2VzIG5vdCBtb2RpZnkgYW55IAor
ICAgICAgICBleGlzdGluZyBjb2RlLiBGb3Igbm93LCB0aGVyZSBhcmUgbm8gY2FsbGVycyB0byB0
aGVzZSAKKyAgICAgICAgdXRpbGl0aWVzLCBzbyB0aGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5n
ZS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0JpdExvY2tlclNraWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNrTWF0
cml4VG9DR0FmZmluZVRyYW5zZm9ybSk6IENvbnZlcnNpb24gdXRpbGl0eS4KKyAgICAgICAgKFdl
YkNvcmU6OkJpdExvY2tlclNraWE6OkJpdExvY2tlclNraWEpOiBUYWtlcyBTa0NhbnZhcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdExvY2tlclNraWE6On5CaXRMb2NrZXJTa2lhKTogVW5sb2Nrcywg
Y2xlYW5zIHVwLgorICAgICAgICAoV2ViQ29yZTo6Qml0TG9ja2VyU2tpYTo6cmVsZWFzZSk6IElu
dGVybmFsIHByaXZhdGUgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6Qml0TG9ja2VyU2tpYTo6
Y2dDb250ZXh0KTogUmV0dXJucyBDR0NvbnRleHRSZWYuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9CaXRMb2NrZXJTa2lhLmg6IEFkZGVkLgorCiAyMDExLTA0LTI5ICBBYmhpc2hl
ayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlr
b2xhcyBaaW1tZXJtYW5uLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9CaXRMb2NrZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0JpdExvY2tlclNraWEuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRMb2NrZXJTa2lhLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkJpdExvY2tlclNraWEuaCIKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKworI2luY2x1ZGUg
IlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiU2tEZXZpY2UuaCIKKyNpbmNsdWRlICJTa1JlZ2lvbi5o
IgorCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBDR0FmZmluZVRyYW5zZm9ybSBTa01hdHJpeFRvQ0dBZmZpbmVU
cmFuc2Zvcm0oY29uc3QgU2tNYXRyaXgmIG1hdHJpeCkKK3sKKyAgICAvLyBDR0FmZmluZVRyYW5z
Zm9ybXMgZG9uJ3Qgc3VwcG9ydCBwZXJzcGVjdGl2ZSB0cmFuc2Zvcm1zLCBzbyBtYWtlIHN1cmUK
KyAgICAvLyB3ZSBkb24ndCBnZXQgdGhvc2UuCisgICAgQVNTRVJUKCFtYXRyaXhbU2tNYXRyaXg6
OmtNUGVyc3AwXSk7CisgICAgQVNTRVJUKCFtYXRyaXhbU2tNYXRyaXg6OmtNUGVyc3AxXSk7Cisg
ICAgQVNTRVJUKG1hdHJpeFtTa01hdHJpeDo6a01QZXJzcDJdID09IDEuMGYpOworCisgICAgcmV0
dXJuIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgKKyAgICAgICAgbWF0cml4W1NrTWF0cml4OjprTVNj
YWxlWF0sCisgICAgICAgIG1hdHJpeFtTa01hdHJpeDo6a01Ta2V3WV0sCisgICAgICAgIG1hdHJp
eFtTa01hdHJpeDo6a01Ta2V3WF0sCisgICAgICAgIG1hdHJpeFtTa01hdHJpeDo6a01TY2FsZVld
LAorICAgICAgICBtYXRyaXhbU2tNYXRyaXg6OmtNVHJhbnNYXSwKKyAgICAgICAgbWF0cml4W1Nr
TWF0cml4OjprTVRyYW5zWV0pOworfQorCitCaXRMb2NrZXJTa2lhOjpCaXRMb2NrZXJTa2lhKFNr
Q2FudmFzKiBjYW52YXMpCisgICAgOiBtX2NhbnZhcyhjYW52YXMpCisgICAgLCBtX2NnQ29udGV4
dCgwKQoreworfQorCitCaXRMb2NrZXJTa2lhOjp+Qml0TG9ja2VyU2tpYSgpCit7CisgICAgcmVs
ZWFzZSgpOworfQorCit2b2lkIEJpdExvY2tlclNraWE6OnJlbGVhc2UoKQoreworICAgIGlmICgh
bV9jZ0NvbnRleHQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NhbnZhcy0+Z2V0RGV2aWNlKCkt
PmFjY2Vzc0JpdG1hcCh0cnVlKS51bmxvY2tQaXhlbHMoKTsKKyAgICBDR0NvbnRleHRSZWxlYXNl
KG1fY2dDb250ZXh0KTsKKyAgICBtX2NnQ29udGV4dCA9IDA7Cit9CisKK0NHQ29udGV4dFJlZiBC
aXRMb2NrZXJTa2lhOjpjZ0NvbnRleHQoKQoreworICAgIFNrRGV2aWNlKiBkZXZpY2UgPSBtX2Nh
bnZhcy0+Z2V0RGV2aWNlKCk7CisgICAgQVNTRVJUKGRldmljZSk7CisgICAgaWYgKCFkZXZpY2Up
CisgICAgICAgIHJldHVybiAwOworICAgIHJlbGVhc2UoKTsKKyAgICBjb25zdCBTa0JpdG1hcCYg
Yml0bWFwID0gZGV2aWNlLT5hY2Nlc3NCaXRtYXAoLyogY2hhbmdlUGl4ZWxzPSovdHJ1ZSk7Cisg
ICAgYml0bWFwLmxvY2tQaXhlbHMoKTsKKyAgICB2b2lkKiBwaXhlbHMgPSBiaXRtYXAuZ2V0UGl4
ZWxzKCk7CisgICAgbV9jZ0NvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUocGl4ZWxzLCBk
ZXZpY2UtPndpZHRoKCksCisgICAgICAgIGRldmljZS0+aGVpZ2h0KCksIDgsIGJpdG1hcC5yb3dC
eXRlcygpLCBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSwgCisgICAgICAgIGtDR0JpdG1h
cEJ5dGVPcmRlcjMySG9zdCB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpOworCisg
ICAgLy8gQXBwbHkgZGV2aWNlIG1hdHJpeC4KKyAgICBDR0FmZmluZVRyYW5zZm9ybSBjb250ZW50
c1RyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKDEsIC0xKTsKKyAgICBjb250
ZW50c1RyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtVHJhbnNsYXRlKGNvbnRlbnRzVHJhbnNm
b3JtLCAwLAorICAgICAgICAtZGV2aWNlLT5oZWlnaHQoKSk7CisgICAgQ0dDb250ZXh0Q29uY2F0
Q1RNKG1fY2dDb250ZXh0LCBjb250ZW50c1RyYW5zZm9ybSk7CisKKyAgICAvLyBBcHBseSBjbGlw
IGluIGRldmljZSBjb29yZGluYXRlcy4KKyAgICBDR011dGFibGVQYXRoUmVmIGNsaXBQYXRoID0g
Q0dQYXRoQ3JlYXRlTXV0YWJsZSgpOworICAgIFNrUmVnaW9uOjpJdGVyYXRvciBpdGVyKG1fY2Fu
dmFzLT5nZXRUb3RhbENsaXAoKSk7CisgICAgZm9yICg7ICFpdGVyLmRvbmUoKTsgaXRlci5uZXh0
KCkpIHsKKyAgICAgICAgSW50UmVjdCByZWN0ID0gaXRlci5yZWN0KCk7CisgICAgICAgIENHUGF0
aEFkZFJlY3QoY2xpcFBhdGgsIDAsIHJlY3QpOworICAgIH0KKyAgICBDR0NvbnRleHRBZGRQYXRo
KG1fY2dDb250ZXh0LCBjbGlwUGF0aCk7CisgICAgQ0dDb250ZXh0Q2xpcChtX2NnQ29udGV4dCk7
CisgICAgQ0dQYXRoUmVsZWFzZShjbGlwUGF0aCk7CisKKyAgICAvLyBBcHBseSBjb250ZW50IG1h
dHJpeC4KKyAgICBjb25zdCBTa01hdHJpeCYgc2tNYXRyaXggPSBtX2NhbnZhcy0+Z2V0VG90YWxN
YXRyaXgoKTsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBhZmZpbmUgPSBTa01hdHJpeFRvQ0dBZmZp
bmVUcmFuc2Zvcm0oc2tNYXRyaXgpOworICAgIENHQ29udGV4dENvbmNhdENUTShtX2NnQ29udGV4
dCwgYWZmaW5lKTsKKworICAgIHJldHVybiBtX2NnQ29udGV4dDsKK30KKworfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRMb2NrZXJTa2lhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRMb2NrZXJT
a2lhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0JpdExvY2tlclNraWEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQml0TG9ja2VyU2tpYV9oCisjZGVmaW5lIEJpdExvY2tlclNraWFfaAorCit0eXBlZGVmIHN0
cnVjdCBDR0NvbnRleHQqIENHQ29udGV4dFJlZjsKKworY2xhc3MgU2tDYW52YXM7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gQ29udmVydHMgYSBTa0NhbnZhcyB0ZW1wb3JhcmlseSB0byBh
IENHQ29udGV4dAorY2xhc3MgQml0TG9ja2VyU2tpYSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
Qml0TG9ja2VyU2tpYShTa0NhbnZhcyopOworICAgIH5CaXRMb2NrZXJTa2lhKCk7CisgICAgQ0dD
b250ZXh0UmVmIGNnQ29udGV4dCgpOworcHJpdmF0ZToKKyAgICB2b2lkIHJlbGVhc2UoKTsKKyAg
ICBTa0NhbnZhcyogbV9jYW52YXM7CisgICAgQ0dDb250ZXh0UmVmIG1fY2dDb250ZXh0OworfTsK
KworfQorI2VuZGlmIC8vIEJpdExvY2tlclNraWFfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92127</attachid>
            <date>2011-05-03 14:08:04 -0700</date>
            <delta_ts>2011-05-06 17:47:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59808-20110503170802.patch</filename>
            <type>text/plain</type>
            <size>8532</size>
            <attacher name="Cary Clark">caryclark</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1MzM2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDQtMjkgIENhcnkgQ2xh
cmsgIDxjYXJ5Y2xhcmtAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgdXRpbGl0eSBmb3IgY29udmVydGluZyBTa0NhbnZhcyB0
byBDR0NvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU5ODA4CisKKyAgICAgICAgU2tpYSBvbiBNYWMgdXNlcyBTa2lhIHRvIHJlbmRlciBXZWJL
aXQsIGFuZCBDRyAKKyAgICAgICAgdG8gcmVuZGVyIFVJIGVsZW1lbnRzLiBUaGUgQ0cgZWxlbWVu
dHMgbmVlZCBhIAorICAgICAgICB0cmFuc2NyaWJlZCBncmFwaGljcyBjb250ZXh0IHRoYXQgcHJl
c2VydmVzIHRoZSAKKyAgICAgICAgY2FudmFzIG1hdHJpeCwgYW5kIHRoZSBjYW52YXMgY2xpcC4g
CisKKyAgICAgICAgVGhlIEJpdExvY2tlclNraWEgdXRpbGl0eSBjbGFzcyBzZXRzIHVwIGEgQ0dD
b250ZXh0IAorICAgICAgICBmcm9tIHRoZSBTa0NhbnZhcywgbG9ja3MgdGhlIGJpdG1hcCdzIGJp
dHMsIGFuZCAKKyAgICAgICAgcmVsZWFzZXMgdGhlIGxvY2sgd2hlbiB0aGUgY2xhc3MgZ29lcyBv
dXQgb2Ygc2NvcGUuIAorCisgICAgICAgIEVhY2ggdGltZSB0aGUgQ0dDb250ZXh0IGlzIHJldHJp
ZXZlZCwgaXQgaXMgcmVidWlsdC4gCisgICAgICAgIFRoaXMgcGVybWl0cyB0aGUgY2FsbGVyIHRv
IG1vZGlmeSB0aGUgc2FtZSBjYW52YXMgCisgICAgICAgIGJldHdlZW4gY2FsbHMuIAorCisgICAg
ICAgIFRoaXMgY2hhbmdlIGFkZHMgdXRpbGl0aWVzIGJ1dCBkb2VzIG5vdCBtb2RpZnkgYW55IAor
ICAgICAgICBleGlzdGluZyBjb2RlLiBGb3Igbm93LCB0aGVyZSBhcmUgbm8gY2FsbGVycyB0byB0
aGVzZSAKKyAgICAgICAgdXRpbGl0aWVzLCBzbyB0aGVyZSBpcyBubyBmdW5jdGlvbmFsIGNoYW5n
ZS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0JpdExvY2tlclNraWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNrTWF0
cml4VG9DR0FmZmluZVRyYW5zZm9ybSk6IENvbnZlcnNpb24gdXRpbGl0eS4KKyAgICAgICAgKFdl
YkNvcmU6OkJpdExvY2tlclNraWE6OkJpdExvY2tlclNraWEpOiBUYWtlcyBTa0NhbnZhcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdExvY2tlclNraWE6On5CaXRMb2NrZXJTa2lhKTogVW5sb2Nrcywg
Y2xlYW5zIHVwLgorICAgICAgICAoV2ViQ29yZTo6Qml0TG9ja2VyU2tpYTo6cmVsZWFzZSk6IElu
dGVybmFsIHByaXZhdGUgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6Qml0TG9ja2VyU2tpYTo6
Y2dDb250ZXh0KTogUmV0dXJucyBDR0NvbnRleHRSZWYuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9CaXRMb2NrZXJTa2lhLmg6IEFkZGVkLgorCiAyMDExLTA0LTI5ICBBYmhpc2hl
ayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlr
b2xhcyBaaW1tZXJtYW5uLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9CaXRMb2NrZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0JpdExvY2tlclNraWEuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRMb2NrZXJTa2lhLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkJpdExvY2tlclNraWEuaCIKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKworI2luY2x1ZGUg
IlNrQ2FudmFzLmgiCisjaW5jbHVkZSAiU2tEZXZpY2UuaCIKKyNpbmNsdWRlICJTa1JlZ2lvbi5o
IgorCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBDR0FmZmluZVRyYW5zZm9ybSBTa01hdHJpeFRvQ0dBZmZpbmVU
cmFuc2Zvcm0oY29uc3QgU2tNYXRyaXgmIG1hdHJpeCkKK3sKKyAgICAvLyBDR0FmZmluZVRyYW5z
Zm9ybXMgZG9uJ3Qgc3VwcG9ydCBwZXJzcGVjdGl2ZSB0cmFuc2Zvcm1zLCBzbyBtYWtlIHN1cmUK
KyAgICAvLyB3ZSBkb24ndCBnZXQgdGhvc2UuCisgICAgQVNTRVJUKCFtYXRyaXhbU2tNYXRyaXg6
OmtNUGVyc3AwXSk7CisgICAgQVNTRVJUKCFtYXRyaXhbU2tNYXRyaXg6OmtNUGVyc3AxXSk7Cisg
ICAgQVNTRVJUKG1hdHJpeFtTa01hdHJpeDo6a01QZXJzcDJdID09IDEuMGYpOworCisgICAgcmV0
dXJuIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgKKyAgICAgICAgbWF0cml4W1NrTWF0cml4OjprTVNj
YWxlWF0sCisgICAgICAgIG1hdHJpeFtTa01hdHJpeDo6a01Ta2V3WV0sCisgICAgICAgIG1hdHJp
eFtTa01hdHJpeDo6a01Ta2V3WF0sCisgICAgICAgIG1hdHJpeFtTa01hdHJpeDo6a01TY2FsZVld
LAorICAgICAgICBtYXRyaXhbU2tNYXRyaXg6OmtNVHJhbnNYXSwKKyAgICAgICAgbWF0cml4W1Nr
TWF0cml4OjprTVRyYW5zWV0pOworfQorCitCaXRMb2NrZXJTa2lhOjpCaXRMb2NrZXJTa2lhKFNr
Q2FudmFzKiBjYW52YXMpCisgICAgOiBtX2NhbnZhcyhjYW52YXMpCisgICAgLCBtX2NnQ29udGV4
dCgwKQoreworfQorCitCaXRMb2NrZXJTa2lhOjp+Qml0TG9ja2VyU2tpYSgpCit7CisgICAgcmVs
ZWFzZUlmTmVlZGVkKCk7Cit9CisKK3ZvaWQgQml0TG9ja2VyU2tpYTo6cmVsZWFzZUlmTmVlZGVk
KCkKK3sKKyAgICBpZiAoIW1fY2dDb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgbV9jYW52
YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAodHJ1ZSkudW5sb2NrUGl4ZWxzKCk7CisgICAg
Q0dDb250ZXh0UmVsZWFzZShtX2NnQ29udGV4dCk7CisgICAgbV9jZ0NvbnRleHQgPSAwOworfQor
CitDR0NvbnRleHRSZWYgQml0TG9ja2VyU2tpYTo6Y2dDb250ZXh0KCkKK3sKKyAgICBTa0Rldmlj
ZSogZGV2aWNlID0gbV9jYW52YXMtPmdldERldmljZSgpOworICAgIEFTU0VSVChkZXZpY2UpOwor
ICAgIGlmICghZGV2aWNlKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZWxlYXNlSWZOZWVkZWQo
KTsKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gZGV2aWNlLT5hY2Nlc3NCaXRtYXAodHJ1
ZSk7CisgICAgYml0bWFwLmxvY2tQaXhlbHMoKTsKKyAgICB2b2lkKiBwaXhlbHMgPSBiaXRtYXAu
Z2V0UGl4ZWxzKCk7CisgICAgbV9jZ0NvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUocGl4
ZWxzLCBkZXZpY2UtPndpZHRoKCksCisgICAgICAgIGRldmljZS0+aGVpZ2h0KCksIDgsIGJpdG1h
cC5yb3dCeXRlcygpLCBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSwgCisgICAgICAgIGtD
R0JpdG1hcEJ5dGVPcmRlcjMySG9zdCB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3Qp
OworCisgICAgLy8gQXBwbHkgZGV2aWNlIG1hdHJpeC4KKyAgICBDR0FmZmluZVRyYW5zZm9ybSBj
b250ZW50c1RyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKDEsIC0xKTsKKyAg
ICBjb250ZW50c1RyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtVHJhbnNsYXRlKGNvbnRlbnRz
VHJhbnNmb3JtLCAwLCAtZGV2aWNlLT5oZWlnaHQoKSk7CisgICAgQ0dDb250ZXh0Q29uY2F0Q1RN
KG1fY2dDb250ZXh0LCBjb250ZW50c1RyYW5zZm9ybSk7CisKKyAgICAvLyBBcHBseSBjbGlwIGlu
IGRldmljZSBjb29yZGluYXRlcy4KKyAgICBDR011dGFibGVQYXRoUmVmIGNsaXBQYXRoID0gQ0dQ
YXRoQ3JlYXRlTXV0YWJsZSgpOworICAgIFNrUmVnaW9uOjpJdGVyYXRvciBpdGVyKG1fY2FudmFz
LT5nZXRUb3RhbENsaXAoKSk7CisgICAgZm9yICg7ICFpdGVyLmRvbmUoKTsgaXRlci5uZXh0KCkp
IHsKKyAgICAgICAgSW50UmVjdCByZWN0ID0gaXRlci5yZWN0KCk7CisgICAgICAgIENHUGF0aEFk
ZFJlY3QoY2xpcFBhdGgsIDAsIHJlY3QpOworICAgIH0KKyAgICBDR0NvbnRleHRBZGRQYXRoKG1f
Y2dDb250ZXh0LCBjbGlwUGF0aCk7CisgICAgQ0dDb250ZXh0Q2xpcChtX2NnQ29udGV4dCk7Cisg
ICAgQ0dQYXRoUmVsZWFzZShjbGlwUGF0aCk7CisKKyAgICAvLyBBcHBseSBjb250ZW50IG1hdHJp
eC4KKyAgICBjb25zdCBTa01hdHJpeCYgc2tNYXRyaXggPSBtX2NhbnZhcy0+Z2V0VG90YWxNYXRy
aXgoKTsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBhZmZpbmUgPSBTa01hdHJpeFRvQ0dBZmZpbmVU
cmFuc2Zvcm0oc2tNYXRyaXgpOworICAgIENHQ29udGV4dENvbmNhdENUTShtX2NnQ29udGV4dCwg
YWZmaW5lKTsKKworICAgIHJldHVybiBtX2NnQ29udGV4dDsKK30KKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRMb2NrZXJTa2lhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRMb2NrZXJTa2lh
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0JpdExvY2tlclNraWEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Qml0TG9ja2VyU2tpYV9oCisjZGVmaW5lIEJpdExvY2tlclNraWFfaAorCit0eXBlZGVmIHN0cnVj
dCBDR0NvbnRleHQqIENHQ29udGV4dFJlZjsKKworY2xhc3MgU2tDYW52YXM7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gQ29udmVydHMgYSBTa0NhbnZhcyB0ZW1wb3JhcmlseSB0byBhIENH
Q29udGV4dAorY2xhc3MgQml0TG9ja2VyU2tpYSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQml0
TG9ja2VyU2tpYShTa0NhbnZhcyopOworICAgIH5CaXRMb2NrZXJTa2lhKCk7CisgICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCgpOworCitwcml2YXRlOgorICAgIHZvaWQgcmVsZWFzZUlmTmVlZGVk
KCk7CisgICAgU2tDYW52YXMqIG1fY2FudmFzOworICAgIENHQ29udGV4dFJlZiBtX2NnQ29udGV4
dDsKK307CisKK30KKyNlbmRpZiAvLyBCaXRMb2NrZXJTa2lhX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>