<?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>58706</bug_id>
          
          <creation_ts>2011-04-15 16:03:41 -0700</creation_ts>
          <short_desc>DrawingBuffer::reset() should be faster</short_desc>
          <delta_ts>2011-04-18 11:23:05 -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>Canvas</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephen White">senorblanco</reporter>
          <assigned_to name="Stephen White">senorblanco</assigned_to>
          <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>387003</commentid>
    <comment_count>0</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-15 16:03:41 -0700</bug_when>
    <thetext>DrawingBuffer::reset() is called when canvas.width or canvas.height is assigned.  It should not be ridiculously slow, especially in the case where the size is unchanged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387004</commentid>
    <comment_count>1</comment_count>
      <attachid>89869</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-15 16:08:18 -0700</bug_when>
    <thetext>Created attachment 89869
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387013</commentid>
    <comment_count>2</comment_count>
      <attachid>89869</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-15 16:26:55 -0700</bug_when>
    <thetext>Comment on attachment 89869
Patch

I realize the current clearing code is pretty complicated but I think the intent was to leave the context&apos;s state untouched. Is this a goal? If we start using DrawingBuffer for the WebGL back buffer then no user-visible state changes can be allowed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387090</commentid>
    <comment_count>3</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-04-15 17:44:22 -0700</bug_when>
    <thetext>Actually you should check the extension of GL_CHROMIUM_resource_safe.  If it exists, that means we are running on top of command buffer, and renderbuffers/textures have already been initialized, so you don&apos;t need to do it here again.

If the extension does not exist, then do the cleaning.  Ken is right, since Chris Marrin plans to use DrawingBuffer as WebGL back buffer, you should not make user-visible state changes, i.e., leave the original code un-touched.  That path won&apos;t be excercised in chrome anyway.

Otherwise, the patch looks good.

One thing I was thinking when I was looking through the change: can we push all the drawing buffer creation as one SUPER command for command buffer?  Note that we have to checkFramebufferStatus, which requires a sync.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387258</commentid>
    <comment_count>4</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-16 09:05:41 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 89869 [details])
&gt; I realize the current clearing code is pretty complicated but I think the intent was to leave the context&apos;s state untouched. Is this a goal? If we start using DrawingBuffer for the WebGL back buffer then no user-visible state changes can be allowed.

It&apos;s not a goal for canvas2D.  To be honest, I&apos;m not even really sure it&apos;s worth having a class that&apos;s shared between Canvas and WebGL here -- the goals are divergent in a lot of ways (state management, resource safety, etc).  But I&apos;ll put it back the way it was.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387260</commentid>
    <comment_count>5</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-16 09:23:28 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Actually you should check the extension of GL_CHROMIUM_resource_safe.  If it exists, that means we are running on top of command buffer, and renderbuffers/textures have already been initialized, so you don&apos;t need to do it here again.

No, in the case that the size hasn&apos;t changed, we still need to glClear() them, even if we have GL_CHROMIUM_resource safe.  That&apos;s the main point of this change:  to skip the reallocation, and *only* do a glClear() in that case.

In the case that the size has changed, we *could* skip the glClear() if we had GL_CHROMIUM_resource_safe, but:

1)  I&apos;d like to make this code future-proof against the case where we turn off resource safety for Canvas2D (for further speedups in the &quot;size changed&quot; case).

2)  The cost of an extra glClear() is tiny compared to the cost of memset() and (especially) texture upload.  For example, on my home machine, PCIe bandwidth = 3.2GB/sec (at best), and GPU memory bandwidth = 57.6GB/sec.  So even if the glClear() is redundant (for now) in the &quot;size changed&quot; case, the overhead is minimal.

&gt; If the extension does not exist, then do the cleaning.  Ken is right, since Chris Marrin plans to use DrawingBuffer as WebGL back buffer, you should not make user-visible state changes, i.e., leave the original code un-touched.  That path won&apos;t be excercised in chrome anyway.

No, you miss the point.  I *want* it to be exercised for chrome (see above).  For example, this change gives a ~10X speedup on http://masterofthewebgame.com/.

&gt; 
&gt; Otherwise, the patch looks good.
&gt; 
&gt; One thing I was thinking when I was looking through the change: can we push all the drawing buffer creation as one SUPER command for command buffer?  Note that we have to checkFramebufferStatus, which requires a sync.

I suppose we could, but honestly, the cost of reallocating a texture (and that texture upload) likely dwarfs the cost of the sync.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387261</commentid>
    <comment_count>6</comment_count>
      <attachid>89925</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-16 09:49:24 -0700</bug_when>
    <thetext>Created attachment 89925
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387825</commentid>
    <comment_count>7</comment_count>
      <attachid>89925</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-18 10:06:02 -0700</bug_when>
    <thetext>Comment on attachment 89925
Patch

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

&gt; Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp:219
&gt; +    // Initialize renderbuffers (depth/stencil).

This seems like a good sign that the block which follows should be its own helper method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387868</commentid>
    <comment_count>8</comment_count>
      <attachid>89925</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-18 11:01:01 -0700</bug_when>
    <thetext>Comment on attachment 89925
Patch

Looks good to me. Thanks for your re-consideration of state changes in the context during the resize operation. I think it will be useful to be able to potentially reuse this class for all of the layer types which present GraphicsContext3D-rendered output to the compositor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387883</commentid>
    <comment_count>9</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-18 11:21:54 -0700</bug_when>
    <thetext>Committed r84163: &lt;http://trac.webkit.org/changeset/84163&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387886</commentid>
    <comment_count>10</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-04-18 11:23:05 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 89925 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=89925&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp:219
&gt; &gt; +    // Initialize renderbuffers (depth/stencil).
&gt; 
&gt; This seems like a good sign that the block which follows should be its own helper method.

Good point.  Will clean that up in a followup CL.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89869</attachid>
            <date>2011-04-15 16:08:18 -0700</date>
            <delta_ts>2011-04-16 09:49:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58706-20110415190817.patch</filename>
            <type>text/plain</type>
            <size>10455</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0MDQ0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDQtMTUgIFN0ZXBoZW4g
V2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BlZWQgdXAgRHJhd2luZ0J1ZmZlcjo6cmVzZXQo
KS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4NzA2
CisKKyAgICAgICAgV2hlbiBEcmF3aW5nQnVmZmVyOjpyZXNldCgpIGlzIGNhbGxlZCwgaXQgc2hv
dWxkIG5vdCByZWFsbG9jYXRlCisgICAgICAgIHRoZSBGQk9zIGlmIHRoZSBzaXplIGhhcyBub3Qg
Y2hhbmdlZC4gIEl0IHNob3VsZCBqdXN0IGRvIGEgZ2xDbGVhcigpLgorCisgICAgICAgIENvdmVy
ZWQgYnkgdGVzdHMgaW4gZmFzdC9jYW52YXMgYW5kIGNhbnZhcy9waGlsaXAuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6CisgICAgICAg
IEluaXRpYWxpemUgdGhlIHNpemUgdG8gLTEsIC0xLCBzbyB0aGUgc2l6ZSBjaGFuZ2UgY2hlY2sg
d2lsbCB3b3JrIG9uCisgICAgICAgIGZpcnN0IHJlc2V0LgorICAgICAgICAoV2ViQ29yZTo6RHJh
d2luZ0J1ZmZlcjo6ZGlkUmVzZXQpOgorICAgICAgICBSZXNldCB0aGUgR2FuZXNoIGNvbnRleHQg
aW4gY2FzZSBvZiBhbnkgc3RhdGUgY2hhbmdlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvRHJhd2luZ0J1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVy
OjpyZXNldCk6CisgICAgICAgIElmIHRoZSBzaXplIGhhc24ndCBjaGFuZ2VkLCBkb24ndCByZXNp
emUgdGhlIEZCT3MuICBKdXN0IGNsZWFyIHRoZQorICAgICAgICByZWxldmFudCBidWZmZXJzLiAg
QWxzbyBkb24ndCBkbyBnbEdldCgpczsgR0xFUzJDYW52YXMgZG9lc24ndAorICAgICAgICBjYXJl
IGFib3V0IHN0YXRlIGNoYW5nZXMgYW5kIEdhbmVzaCB3aWxsIGJlIG5vdGlmaWVkIGFzIGFib3Zl
LgorCiAyMDExLTA0LTE1ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGNoYW5nZSBhZnRlciByODM5NDUuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21p
dW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDg0MDQyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9t
aXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBEcmF3aW5nQnVmZmVyOjpE
cmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgIDog
bV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fc2l6ZSgtMSwg
LTEpCiAgICAgLCBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0
ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBw
b3J0ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9mYm8o
MCkKQEAgLTE1MCw2ICsxNTAsMTAgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpkaWRSZXNldCgpCiAg
ICAgaWYgKG1faW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXIpCiAgICAgICAgIG1faW50ZXJuYWwtPnBs
YXRmb3JtTGF5ZXItPnNldFRleHR1cmVDaGFuZ2VkKCk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoU0tJ
QV9HUFUpCisgICAgaWYgKG1fZ3JDb250ZXh0KQorICAgICAgICBtX2dyQ29udGV4dC0+cmVzZXRD
b250ZXh0KCk7CisjZW5kaWYKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
RHJhd2luZ0J1ZmZlci5jcHAJKHJldmlzaW9uIDg0MDQyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTgsMzQgKzE1OCw1NSBAQCBib29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUm
CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgbV9zaXplID0gbmV3U2l6ZTsKLQog
ICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzID0gbV9j
b250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpOwotICAgIHVuc2lnbmVkIGxvbmcgaW50ZXJu
YWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsUmVuZGVyYnVmZmVyRm9ybWF0Owot
ICAgIGlmIChhdHRyaWJ1dGVzLmFscGhhKSB7Ci0gICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQTsKLSAgICAgICAgaW50ZXJuYWxSZW5kZXJidWZmZXJGb3JtYXQgPSBF
eHRlbnNpb25zM0Q6OlJHQkE4X09FUzsKLSAgICB9IGVsc2UgewotICAgICAgICBpbnRlcm5hbENv
bG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKLSAgICAgICAgY29sb3JGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOwotICAgICAgICBpbnRlcm5hbFJlbmRlcmJ1ZmZlckZv
cm1hdCA9IEV4dGVuc2lvbnMzRDo6UkdCOF9PRVM7Ci0gICAgfQogCisgICAgaWYgKG5ld1NpemUg
IT0gbV9zaXplKSB7CisgICAgICAgIG1fc2l6ZSA9IG5ld1NpemU7CisKKyAgICAgICAgdW5zaWdu
ZWQgbG9uZyBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxSZW5kZXJi
dWZmZXJGb3JtYXQ7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLmFscGhhKSB7CisgICAgICAgICAg
ICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgICAg
ICAgICBjb2xvckZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOworICAgICAgICAgICAg
aW50ZXJuYWxSZW5kZXJidWZmZXJGb3JtYXQgPSBFeHRlbnNpb25zM0Q6OlJHQkE4X09FUzsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCOworICAgICAgICAgICAgY29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCOworICAgICAgICAgICAgaW50ZXJuYWxSZW5kZXJidWZmZXJGb3JtYXQgPSBFeHRl
bnNpb25zM0Q6OlJHQjhfT0VTOworICAgICAgICB9CisKKworICAgICAgICAvLyByZXNpemUgbXVs
dGlzYW1wbGUgRkJPCisgICAgICAgIGlmIChtdWx0aXNhbXBsZSgpKSB7CisgICAgICAgICAgICBp
bnQgbWF4U2FtcGxlQ291bnQgPSAwOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX1NBTVBMRVMsICZtYXhTYW1wbGVDb3Vu
dCk7CisgICAgICAgICAgICBpbnQgc2FtcGxlQ291bnQgPSBzdGQ6Om1pbig4LCBtYXhTYW1wbGVD
b3VudCk7CisKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisKKyAgICAgICAgICAg
IG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxSZW5kZXJidWZmZXJG
b3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAg
ICAgIHJlc2l6ZURlcHRoU3RlbmNpbChzYW1wbGVDb3VudCk7CisgICAgICAgICAgICBpZiAobV9j
b250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAg
ICAgICAgICAgICAgLy8gQ2xlYW51cAorICAgICAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gcmVzaXplIHJlZ3VsYXIgRkJPCisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogCi0gICAgLy8gcmVz
aXplIG11bHRpc2FtcGxlIEZCTwotICAgIGlmIChtdWx0aXNhbXBsZSgpKSB7Ci0gICAgICAgIGlu
dCBtYXhTYW1wbGVDb3VudCA9IDA7CisgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIpOwogICAgICAgICAKLSAg
ICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9TQU1QTEVTLCAm
bWF4U2FtcGxlQ291bnQpOwotICAgICAgICBpbnQgc2FtcGxlQ291bnQgPSBzdGQ6Om1pbig4LCBt
YXhTYW1wbGVDb3VudCk7CisgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2Fm
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKIAotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8p
OworICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlciwgMCk7CisgICAgICAg
IG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAp
OwogCi0gICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBpbnRlcm5hbFJlbmRl
cmJ1ZmZlckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAg
IG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAg
ICAgIHJlc2l6ZURlcHRoU3RlbmNpbChzYW1wbGVDb3VudCk7CisgICAgICAgIGlmICghbXVsdGlz
YW1wbGUoKSkKKyAgICAgICAgICAgIHJlc2l6ZURlcHRoU3RlbmNpbCgwKTsKICAgICAgICAgaWYg
KG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewog
ICAgICAgICAgICAgLy8gQ2xlYW51cAogICAgICAgICAgICAgY2xlYXIoKTsKQEAgLTE5Myw3MiAr
MjE0LDI1IEBAIGJvb2wgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICAg
ICAgfQogICAgIH0KIAotICAgIC8vIHJlc2l6ZSByZWd1bGFyIEZCTwotICAgIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwot
Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbV9jb2xvckJ1ZmZlcik7Ci0gICAgCi0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3Vy
Y2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9y
bWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotCi0gICAgbV9jb250ZXh0LT5mcmFtZWJ1
ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IG1fY29sb3JCdWZmZXIsIDApOwotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwotCi0gICAgaWYgKCFtdWx0aXNhbXBsZSgpKQotICAg
ICAgICByZXNpemVEZXB0aFN0ZW5jaWwoMCk7Ci0gICAgaWYgKG1fY29udGV4dC0+Y2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICAvLyBDbGVhbnVwCi0g
ICAgICAgIGNsZWFyKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAo
bXVsdGlzYW1wbGUoKSkKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICBtX2NvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVs
dGlzYW1wbGVGQk8gPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOwogCi0gICAgaWYgKCFtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX3Jlc291cmNlX3Nh
ZmUiKSkgewotICAgICAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgKGRlcHRoL3N0ZW5j
aWwpLgotICAgICAgICBmbG9hdCBjbGVhckRlcHRoID0gMDsKLSAgICAgICAgaW50IGNsZWFyU3Rl
bmNpbCA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgZGVwdGhNYXNrID0gdHJ1ZTsKLSAgICAg
ICAgdW5zaWduZWQgaW50IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZmZjsKLSAgICAgICAgdW5zaWdu
ZWQgY2hhciBpc1NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcg
Y2xlYXJNYXNrID0gMDsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVBUl9W
QUxVRSwgJmNsZWFyRGVwdGgpOwotICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEp
OwotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+ZGVw
dGhNYXNrKHRydWUpOwotICAgICAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9CVUZGRVJfQklUOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0
ZW5jaWwpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5jaWwpOwotICAgICAgICAgICAg
bV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRf
Y2FzdDxpbnQqPigmc3RlbmNpbE1hc2spKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3RlbmNp
bE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIDB4ZmZmZmZmZmYpOwotICAg
ICAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9C
SVQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyTWFzaykgewotICAgICAgICAgICAgaXNT
Y2lzc29yRW5hYmxlZCA9IG1fY29udGV4dC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1QpOwotICAgICAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotCi0gICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyKGNs
ZWFyTWFzayk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7Ci0gICAgICAg
ICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKGNsZWFyRGVwdGgpOwotICAgICAgICAgICAg
ICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKGRlcHRoTWFzayk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7Ci0gICAgICAgICAgICAgICAgbV9jb250
ZXh0LT5jbGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgICAgICAgICBtX2NvbnRl
eHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCBzdGVuY2ls
TWFzayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNTY2lzc29yRW5hYmxlZCkK
LSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJ
U1NPUl9URVNUKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQt
PmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci0gICAgICAgIH0KLSAg
ICB9CisgICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIChkZXB0aC9zdGVuY2lsKS4KKyAg
ICB1bnNpZ25lZCBsb25nIGNsZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZG
RVJfQklUOworICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgIG1fY29udGV4dC0+
Y2xlYXJEZXB0aCgxKTsKKyAgICAgICAgbV9jb250ZXh0LT5kZXB0aE1hc2sodHJ1ZSk7CisgICAg
ICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVDsKKyAg
ICB9CisgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkgeworICAgICAgICBtX2NvbnRleHQtPmNs
ZWFyU3RlbmNpbCgwKTsKKyAgICAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdy
YXBoaWNzQ29udGV4dDNEOjpGUk9OVCwgMHhmZmZmZmZmZik7CisgICAgICAgIGNsZWFyTWFzayB8
PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAgIH0KKworICAgIG1f
Y29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICBt
X2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgbV9jb250ZXh0LT5jbGVhcihj
bGVhck1hc2spOwogCi0gICAgbV9jb250ZXh0LT5mbHVzaCgpOwotICAgIAogICAgIGRpZFJlc2V0
KCk7CiAKICAgICByZXR1cm4gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89925</attachid>
            <date>2011-04-16 09:49:24 -0700</date>
            <delta_ts>2011-04-18 11:01:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58706-20110416124923.patch</filename>
            <type>text/plain</type>
            <size>11196</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0MDg5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDQtMTUgIFN0ZXBoZW4g
V2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BlZWQgdXAgRHJhd2luZ0J1ZmZlcjo6cmVzZXQo
KS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4NzA2
CisKKyAgICAgICAgV2hlbiBEcmF3aW5nQnVmZmVyOjpyZXNldCgpIGlzIGNhbGxlZCwgaXQgc2hv
dWxkIG5vdCByZWFsbG9jYXRlCisgICAgICAgIHRoZSBGQk9zIGlmIHRoZSBzaXplIGhhcyBub3Qg
Y2hhbmdlZC4gIEl0IHNob3VsZCBqdXN0IGRvIGEgZ2xDbGVhcigpLgorCisgICAgICAgIENvdmVy
ZWQgYnkgdGVzdHMgaW4gZmFzdC9jYW52YXMgYW5kIGNhbnZhcy9waGlsaXAuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6CisgICAgICAg
IEluaXRpYWxpemUgdGhlIHNpemUgdG8gLTEsIC0xLCBzbyB0aGUgc2l6ZSBjaGFuZ2UgY2hlY2sg
d2lsbCB3b3JrIG9uCisgICAgICAgIGZpcnN0IHJlc2V0LgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdC
dWZmZXI6OnJlc2V0KToKKyAgICAgICAgSWYgdGhlIHNpemUgaGFzbid0IGNoYW5nZWQsIGRvbid0
IHJlc2l6ZSB0aGUgRkJPcy4gIEp1c3QgY2xlYXIgdGhlCisgICAgICAgIHJlbGV2YW50IGJ1ZmZl
cnMuCisKIDIwMTEtMDQtMTYgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Ry
YXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDg0MDg5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVm
ZmVyKEdyYXBoaWNzQ29uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlz
YW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgIDogbV9jb250ZXh0
KGNvbnRleHQpCi0gICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fc2l6ZSgtMSwgLTEpCiAgICAg
LCBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9uU3Vw
cG9ydGVkKQogICAgICwgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQocGFj
a2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9mYm8oMCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2lu
Z0J1ZmZlci5jcHAJKHJldmlzaW9uIDg0MDg5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsMzQg
KzE1OCw1NSBAQCBib29sIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmCiAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgbV9zaXplID0gbmV3U2l6ZTsKLQogICAgIGNv
bnN0IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzID0gbV9jb250ZXh0
LT5nZXRDb250ZXh0QXR0cmlidXRlcygpOwotICAgIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxDb2xv
ckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsUmVuZGVyYnVmZmVyRm9ybWF0OwotICAgIGlm
IChhdHRyaWJ1dGVzLmFscGhhKSB7Ci0gICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTsKLSAgICAgICAgaW50ZXJuYWxSZW5kZXJidWZmZXJGb3JtYXQgPSBFeHRlbnNp
b25zM0Q6OlJHQkE4X09FUzsKLSAgICB9IGVsc2UgewotICAgICAgICBpbnRlcm5hbENvbG9yRm9y
bWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCOwotICAgICAgICBpbnRlcm5hbFJlbmRlcmJ1ZmZlckZvcm1hdCA9
IEV4dGVuc2lvbnMzRDo6UkdCOF9PRVM7Ci0gICAgfQorCisgICAgaWYgKG5ld1NpemUgIT0gbV9z
aXplKSB7CisgICAgICAgIG1fc2l6ZSA9IG5ld1NpemU7CisKKyAgICAgICAgdW5zaWduZWQgbG9u
ZyBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxSZW5kZXJidWZmZXJG
b3JtYXQ7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLmFscGhhKSB7CisgICAgICAgICAgICBpbnRl
cm5hbENvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgICAgICAgICBj
b2xvckZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOworICAgICAgICAgICAgaW50ZXJu
YWxSZW5kZXJidWZmZXJGb3JtYXQgPSBFeHRlbnNpb25zM0Q6OlJHQkE4X09FUzsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCOworICAgICAgICAgICAgY29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCOworICAgICAgICAgICAgaW50ZXJuYWxSZW5kZXJidWZmZXJGb3JtYXQgPSBFeHRlbnNpb25z
M0Q6OlJHQjhfT0VTOworICAgICAgICB9CiAKIAotICAgIC8vIHJlc2l6ZSBtdWx0aXNhbXBsZSBG
Qk8KLSAgICBpZiAobXVsdGlzYW1wbGUoKSkgewotICAgICAgICBpbnQgbWF4U2FtcGxlQ291bnQg
PSAwOworICAgICAgICAvLyByZXNpemUgbXVsdGlzYW1wbGUgRkJPCisgICAgICAgIGlmIChtdWx0
aXNhbXBsZSgpKSB7CisgICAgICAgICAgICBpbnQgbWF4U2FtcGxlQ291bnQgPSAwOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6
TUFYX1NBTVBMRVMsICZtYXhTYW1wbGVDb3VudCk7CisgICAgICAgICAgICBpbnQgc2FtcGxlQ291
bnQgPSBzdGQ6Om1pbig4LCBtYXhTYW1wbGVDb3VudCk7CisKKyAgICAgICAgICAgIG1fY29udGV4
dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0
aXNhbXBsZUZCTyk7CisKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIp
OworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBzYW1wbGVD
b3VudCwgaW50ZXJuYWxSZW5kZXJidWZmZXJGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUu
aGVpZ2h0KCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNh
bXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgICAgIHJlc2l6ZURlcHRoU3RlbmNpbChzYW1wbGVD
b3VudCk7CisgICAgICAgICAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAgICAgICAgICAgLy8gQ2xlYW51cAorICAgICAg
ICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gcmVzaXplIHJlZ3VsYXIgRkJPCisgICAg
ICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgbV9mYm8pOworCisgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIpOwogICAgICAgICAKLSAgICAgICAg
bV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9TQU1QTEVTLCAmbWF4U2Ft
cGxlQ291bnQpOwotICAgICAgICBpbnQgc2FtcGxlQ291bnQgPSBzdGQ6Om1pbig4LCBtYXhTYW1w
bGVDb3VudCk7CisgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKTsKIAotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAg
ICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlciwgMCk7CisgICAgICAgIG1fY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwogCi0g
ICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBpbnRlcm5hbFJlbmRlcmJ1ZmZl
ckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIG1fY29u
dGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIHJl
c2l6ZURlcHRoU3RlbmNpbChzYW1wbGVDb3VudCk7CisgICAgICAgIGlmICghbXVsdGlzYW1wbGUo
KSkKKyAgICAgICAgICAgIHJlc2l6ZURlcHRoU3RlbmNpbCgwKTsKICAgICAgICAgaWYgKG1fY29u
dGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewogICAgICAg
ICAgICAgLy8gQ2xlYW51cAogICAgICAgICAgICAgY2xlYXIoKTsKQEAgLTE5Myw3MiArMjE0LDUx
IEBAIGJvb2wgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICAgICAgfQog
ICAgIH0KIAotICAgIC8vIHJlc2l6ZSByZWd1bGFyIEZCTwotICAgIG1fY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotCi0gICAg
bV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9j
b2xvckJ1ZmZlcik7Ci0gICAgCi0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBt
X3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotCi0gICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRl
eHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29s
b3JCdWZmZXIsIDApOwotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIDApOworICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyA/IG1fbXVsdGlzYW1w
bGVGQk8gOiBtX2Zibyk7CiAKLSAgICBpZiAoIW11bHRpc2FtcGxlKCkpCi0gICAgICAgIHJlc2l6
ZURlcHRoU3RlbmNpbCgwKTsKLSAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIC8vIENsZWFudXAKLSAgICAgICAgY2xl
YXIoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChtdWx0aXNhbXBs
ZSgpKQotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwotCi0gICAgaWYgKCFtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX3Jlc291cmNlX3NhZmUiKSkg
ewotICAgICAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgKGRlcHRoL3N0ZW5jaWwpLgot
ICAgICAgICBmbG9hdCBjbGVhckRlcHRoID0gMDsKLSAgICAgICAgaW50IGNsZWFyU3RlbmNpbCA9
IDA7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgZGVwdGhNYXNrID0gdHJ1ZTsKLSAgICAgICAgdW5z
aWduZWQgaW50IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZmZjsKLSAgICAgICAgdW5zaWduZWQgY2hh
ciBpc1NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgY2xlYXJN
YXNrID0gMDsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVBUl9WQUxVRSwg
JmNsZWFyRGVwdGgpOwotICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEpOwotICAg
ICAgICAgICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
V1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+ZGVwdGhNYXNr
KHRydWUpOwotICAgICAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9CVUZGRVJfQklUOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwp
IHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5jaWwpOwotICAgICAgICAgICAgbV9jb250
ZXh0LT5jbGVhclN0ZW5jaWwoMCk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2
KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxp
bnQqPigmc3RlbmNpbE1hc2spKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tT
ZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIDB4ZmZmZmZmZmYpOwotICAgICAgICAg
ICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyTWFzaykgewotICAgICAgICAgICAgaXNTY2lzc29y
RW5hYmxlZCA9IG1fY29udGV4dC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09S
X1RFU1QpOwotICAgICAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpOwotCi0gICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFz
ayk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7Ci0gICAgICAgICAgICAg
ICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKGNsZWFyRGVwdGgpOwotICAgICAgICAgICAgICAgIG1f
Y29udGV4dC0+ZGVwdGhNYXNrKGRlcHRoTWFzayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5j
bGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnN0
ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCBzdGVuY2lsTWFzayk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNTY2lzc29yRW5hYmxlZCkKLSAgICAg
ICAgICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmRpc2Fi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci0gICAgICAgIH0KLSAgICB9Cisg
ICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIChkZXB0aC9zdGVuY2lsKS4KKyAgICBmbG9h
dCBjbGVhckRlcHRoID0gMDsKKyAgICBpbnQgY2xlYXJTdGVuY2lsID0gMDsKKyAgICB1bnNpZ25l
ZCBjaGFyIGRlcHRoTWFzayA9IHRydWU7CisgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxNYXNrID0g
MHhmZmZmZmZmZjsKKyAgICB1bnNpZ25lZCBjaGFyIGlzU2Npc3NvckVuYWJsZWQgPSBmYWxzZTsK
KyAgICB1bnNpZ25lZCBsb25nIGNsZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9C
VUZGRVJfQklUOworICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgIG1fY29udGV4
dC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFy
RGVwdGgpOworICAgICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoMSk7CisgICAgICAgIG1fY29u
dGV4dC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1dSSVRFTUFTSywgJmRl
cHRoTWFzayk7CisgICAgICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKHRydWUpOworICAgICAgICBj
bGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7CisgICAgfQor
ICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpIHsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNp
bCk7CisgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOworICAgICAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1dSSVRFTUFTSywgcmVp
bnRlcnByZXRfY2FzdDxpbnQqPigmc3RlbmNpbE1hc2spKTsKKyAgICAgICAgbV9jb250ZXh0LT5z
dGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVCwgMHhmZmZmZmZmZik7
CisgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJf
QklUOworICAgIH0KKyAgICBpc1NjaXNzb3JFbmFibGVkID0gbV9jb250ZXh0LT5pc0VuYWJsZWQo
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgbV9jb250ZXh0LT5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworCisgICAgZmxvYXQgY2xlYXJDb2xv
cls0XTsKKyAgICBtX2NvbnRleHQtPmdldEZsb2F0dihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
Q0xFQVJfVkFMVUUsIGNsZWFyQ29sb3IpOworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAw
LCAwLCAwKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7CisgICAgbV9jb250ZXh0
LT5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0s
IGNsZWFyQ29sb3JbM10pOworCisgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAg
bV9jb250ZXh0LT5jbGVhckRlcHRoKGNsZWFyRGVwdGgpOworICAgICAgICBtX2NvbnRleHQtPmRl
cHRoTWFzayhkZXB0aE1hc2spOworICAgIH0KKyAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7
CisgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7CisgICAgICAg
IG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQs
IHN0ZW5jaWxNYXNrKTsKKyAgICB9CisgICAgaWYgKGlzU2Npc3NvckVuYWJsZWQpCisgICAgICAg
IG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAg
IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lT
U09SX1RFU1QpOwogCi0gICAgbV9jb250ZXh0LT5mbHVzaCgpOwotICAgIAogICAgIGRpZFJlc2V0
KCk7CiAKICAgICByZXR1cm4gdHJ1ZTsK
</data>
<flag name="review"
          id="82641"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>