<?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>121007</bug_id>
          
          <creation_ts>2013-09-08 09:25:58 -0700</creation_ts>
          <short_desc>Clearing MarkedBlock::m_newlyAllocated should be separate from MarkedBlock::clearMarks</short_desc>
          <delta_ts>2013-09-12 10:57:54 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>121074</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>926445</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-08 09:25:58 -0700</bug_when>
    <thetext>We call clearMarks on every MarkedBlock in the Heap, whereas we only need to clear m_newlyAllocated for the m_currentBlock at the time of the last canonicalizeCellLiveness() for each MarkedAllocator. We also need to call it on every block in the largeAllocators because each one of their blocks is canonicalized as it is used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926446</commentid>
    <comment_count>1</comment_count>
      <attachid>210981</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-08 09:27:09 -0700</bug_when>
    <thetext>Created attachment 210981
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926449</commentid>
    <comment_count>2</comment_count>
      <attachid>210981</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-08 10:34:16 -0700</bug_when>
    <thetext>Comment on attachment 210981
Patch

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

&gt; Source/JavaScriptCore/heap/Heap.cpp:471
&gt; +        m_objectSpace.clearNewlyAllocated();

I think it would be a little clearer to do this after the mark phase, in Heap::collect(). The newly allocated bits are the inverse of the mark phase: you need them in order to mark (for the conservative phase), and immediately after marking, they&apos;re null by definition. So, I think it&apos;s clearer to set them before marking (which we do), and then unset them right after marking.

&gt; Source/JavaScriptCore/heap/MarkedAllocator.h:30
&gt; +    MarkedBlock* getAndClearCanonicalizedBlock()

We usually call &quot;getAndClear&quot; &quot;take&quot;: takeCanonicalizedBlock.

Also, let&apos;s name this accessor the same as its data member. So, either takeCanonicalizedBlock, and rename the data member to m_canonicalizedBlock, or takeCurrentBlockAtLastCanonicalize. My preference is to rename the data member. It&apos;s a mouthful.

&gt; Source/JavaScriptCore/heap/MarkedSpace.cpp:253
&gt; +    // We have to iterate all of the blocks in the large allocators because they are
&gt; +    // canonicalized as they are used up (see MarkedAllocator::tryAllocateHelper)
&gt; +    // which creates the m_newlyAllocated bitmap.

Why do we do that? I think it would be a bit clearer just to canonicalize all large blocks at the start of GC, with the rest of our blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926473</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-08 12:22:04 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 210981 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=210981&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:471
&gt; &gt; +        m_objectSpace.clearNewlyAllocated();
&gt; 
&gt; I think it would be a little clearer to do this after the mark phase, in Heap::collect(). The newly allocated bits are the inverse of the mark phase: you need them in order to mark (for the conservative phase), and immediately after marking, they&apos;re null by definition. So, I think it&apos;s clearer to set them before marking (which we do), and then unset them right after marking.
The main reason I do it before clearMarks() is so that clearMarks() can ASSERT for every block that m_newlyAllocated == null. I expect clearMarks() to be the only time where iterate all blocks in the Heap. I suppose I could write a debug-only Heap walk for this purpose.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkedAllocator.h:30
&gt; &gt; +    MarkedBlock* getAndClearCanonicalizedBlock()
&gt; 
&gt; We usually call &quot;getAndClear&quot; &quot;take&quot;: takeCanonicalizedBlock.
&gt; 
&gt; Also, let&apos;s name this accessor the same as its data member. So, either takeCanonicalizedBlock, and rename the data member to m_canonicalizedBlock, or takeCurrentBlockAtLastCanonicalize. My preference is to rename the data member. It&apos;s a mouthful.
&gt; 
Sounds good.

&gt; &gt; Source/JavaScriptCore/heap/MarkedSpace.cpp:253
&gt; &gt; +    // We have to iterate all of the blocks in the large allocators because they are
&gt; &gt; +    // canonicalized as they are used up (see MarkedAllocator::tryAllocateHelper)
&gt; &gt; +    // which creates the m_newlyAllocated bitmap.
&gt; 
&gt; Why do we do that? I think it would be a bit clearer just to canonicalize all large blocks at the start of GC, with the rest of our blocks.
I think the reason we eagerly canonicalize is because MarkedBlocks don&apos;t maintain their own free list after they&apos;re swept. Instead, the MarkedAllocator holds the reference to the FreeList for its m_currentBlock. Since we need the FreeList for a block while canonicalizing it, we&apos;re forced to do it eagerly when we advance to a new block in the largeAllocator. As it stands now, if we were to wait until collection to canonicalize all blocks in largeAllocators, we&apos;d have to re-sweep each block to build the FreeList. 

Of course, that doesn&apos;t prevent us from storing the FreeList in MarkedBlocks, which is what we should do in the long run so incremental sweeping could also build free lists in addition to running destructors/finalizers. There&apos;s a bug from a while back assigned to me to support this: https://bugs.webkit.org/show_bug.cgi?id=87918.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926505</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-08 14:31:33 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 210981 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=210981&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:471
&gt; &gt; &gt; +        m_objectSpace.clearNewlyAllocated();
&gt; &gt; 
&gt; &gt; I think it would be a little clearer to do this after the mark phase, in Heap::collect(). The newly allocated bits are the inverse of the mark phase: you need them in order to mark (for the conservative phase), and immediately after marking, they&apos;re null by definition. So, I think it&apos;s clearer to set them before marking (which we do), and then unset them right after marking.
&gt; The main reason I do it before clearMarks() is so that clearMarks() can ASSERT for every block that m_newlyAllocated == null. I expect clearMarks() to be the only time where iterate all blocks in the Heap. I suppose I could write a debug-only Heap walk for this purpose.
I ran into an issue with this. We use the newly allocated bits to indicate liveness, and we use liveness during the marking phase for determining whether weak references are live and need to be visited. Thus, either we need to invent a new form of &quot;liveness&quot; that only consults the mark bit and ignores the newly allocated bit, or we could just clear all liveness-related data at once prior to the beginning of the mark phase. I&apos;m kind of leaning toward just clearing all liveness data (i.e. mark bits and newly allocated bits) together prior to marking. Inventing a subtly different definition of liveness just so we can clear some bits later on during collection seems a bit odd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926507</commentid>
    <comment_count>5</comment_count>
      <attachid>210995</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-08 14:47:21 -0700</bug_when>
    <thetext>Created attachment 210995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926519</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-08 16:17:23 -0700</bug_when>
    <thetext>&gt; We use the newly allocated bits to indicate liveness, and we use liveness during the marking phase for determining whether weak references are live and need to be visited.

I&apos;m happy with the patch Ollie r+ed, but I wanted to get more clarity on this.

At the end of GC, when visiting weak references, why do we want to visit pointers that are newly allocated but not marked? Those pointers are garbage, so we shouldn&apos;t visit them -- otherwise, we&apos;re artificially keeping new garbage alive for one GC cycle, right?

My understanding is that we only need the newly allocated bits for the sake of the conservative scan, to tell it whether a pointer is valid memory or not. After the conservative scan, the mark bit is &quot;the truth&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926521</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-08 16:26:32 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; We use the newly allocated bits to indicate liveness, and we use liveness during the marking phase for determining whether weak references are live and need to be visited.
&gt; 
&gt; I&apos;m happy with the patch Ollie r+ed, but I wanted to get more clarity on this.
&gt; 
&gt; At the end of GC, when visiting weak references, why do we want to visit pointers that are newly allocated but not marked? Those pointers are garbage, so we shouldn&apos;t visit them -- otherwise, we&apos;re artificially keeping new garbage alive for one GC cycle, right?

We don&apos;t want to visit pointers that are newly allocated, which is why we want to clear the newly allocated bits before we visit weak references.

&gt; 
&gt; My understanding is that we only need the newly allocated bits for the sake of the conservative scan, to tell it whether a pointer is valid memory or not. After the conservative scan, the mark bit is &quot;the truth&quot;.

This is correct, which is why we should clear the newly allocated bits after the conservative scan but before visiting weak references. An alternative would be to have a different version of MarkedBlock::isLive that ignored newly allocated bits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926522</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-08 16:35:42 -0700</bug_when>
    <thetext>Committed r155316: &lt;http://trac.webkit.org/changeset/155316&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210981</attachid>
            <date>2013-09-08 09:27:09 -0700</date>
            <delta_ts>2013-09-08 14:47:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121007-20130908092707.patch</filename>
            <type>text/plain</type>
            <size>7423</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU1MzA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDEzLTA5LTA4ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQ2xlYXJpbmcgTWFya2VkQmxvY2s6Om1fbmV3bHlBbGxvY2F0ZWQgc2hvdWxkIGJl
IHNlcGFyYXRlIGZyb20gTWFya2VkQmxvY2s6OmNsZWFyTWFya3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTAwNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGNhbGwgY2xlYXJNYXJrcyBvbiBldmVy
eSBNYXJrZWRCbG9jayBpbiB0aGUgSGVhcCwgd2hlcmVhcyB3ZSBvbmx5IG5lZWQgdG8gY2xlYXIg
CisgICAgICAgIG1fbmV3bHlBbGxvY2F0ZWQgZm9yIHRoZSBtX2N1cnJlbnRCbG9jayBhdCB0aGUg
dGltZSBvZiB0aGUgbGFzdCBjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3MoKSAKKyAgICAgICAgZm9y
IGVhY2ggTWFya2VkQWxsb2NhdG9yLiBXZSBhbHNvIG5lZWQgdG8gY2FsbCBpdCBvbiBldmVyeSBi
bG9jayBpbiB0aGUgbGFyZ2VBbGxvY2F0b3JzIAorICAgICAgICBiZWNhdXNlIGVhY2ggb25lIG9m
IHRoZWlyIGJsb2NrcyBpcyBjYW5vbmljYWxpemVkIGFzIGl0IGlzIHVzZWQuCisKKyAgICAgICAg
KiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRv
cjo6Z2V0QW5kQ2xlYXJDYW5vbmljYWxpemVkQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJrZWRB
bGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRv
cjo6Y2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSk6CisgICAgICAgICogaGVhcC9NYXJrZWRC
bG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6bGFzdENoYW5jZVRvRmluYWxpemUp
OgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Y2xlYXJNYXJrcyk6CisgICAgICAgIChKU0M6
Ok1hcmtlZEJsb2NrOjpjbGVhck5ld2x5QWxsb2NhdGVkKToKKyAgICAgICAgKiBoZWFwL01hcmtl
ZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6Y2xlYXJOZXdseUFsbG9jYXRlZEluQmxvY2spOgor
ICAgICAgICAoSlNDOjpDbGVhck5ld2x5QWxsb2NhdGVkOjpvcGVyYXRvcigpKToKKyAgICAgICAg
KEpTQzo6TWFya2VkU3BhY2U6OmNsZWFyTmV3bHlBbGxvY2F0ZWQpOgorICAgICAgICAqIGhlYXAv
TWFya2VkU3BhY2UuaDoKKwogMjAxMy0wOS0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZUTCBzaG91bGQgc3VwcG9ydCB0eXBlZCBhcnJheSBQdXRCeVZhbApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1NTMwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NjgsNiArNDY4LDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogCiAgICAgewogICAgICAgICBH
Q1BIQVNFKGNsZWFyTWFya3MpOworICAgICAgICBtX29iamVjdFNwYWNlLmNsZWFyTmV3bHlBbGxv
Y2F0ZWQoKTsKICAgICAgICAgbV9vYmplY3RTcGFjZS5jbGVhck1hcmtzKCk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2
aXNpb24gMTU1MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDEyIEBAIHB1YmxpYzoKICAgICBNYXJr
ZWRCbG9jazo6RGVzdHJ1Y3RvclR5cGUgZGVzdHJ1Y3RvclR5cGUoKSB7IHJldHVybiBtX2Rlc3Ry
dWN0b3JUeXBlOyB9CiAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKICAgICBIZWFwKiBoZWFw
KCkgeyByZXR1cm4gbV9oZWFwOyB9CisgICAgTWFya2VkQmxvY2sqIGdldEFuZENsZWFyQ2Fub25p
Y2FsaXplZEJsb2NrKCkKKyAgICB7CisgICAgICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IG1fY3Vy
cmVudEJsb2NrQXRMYXN0Q2Fub25pY2FsaXplOworICAgICAgICBtX2N1cnJlbnRCbG9ja0F0TGFz
dENhbm9uaWNhbGl6ZSA9IDA7CisgICAgICAgIHJldHVybiBibG9jazsKKyAgICB9CiAgICAgCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQmxvY2soRnVuY3RvciYp
OwogICAgIApAQCAtNDQsNiArNTAsNyBAQCBwcml2YXRlOgogICAgIAogICAgIE1hcmtlZEJsb2Nr
OjpGcmVlTGlzdCBtX2ZyZWVMaXN0OwogICAgIE1hcmtlZEJsb2NrKiBtX2N1cnJlbnRCbG9jazsK
KyAgICBNYXJrZWRCbG9jayogbV9jdXJyZW50QmxvY2tBdExhc3RDYW5vbmljYWxpemU7CiAgICAg
TWFya2VkQmxvY2sqIG1fYmxvY2tzVG9Td2VlcDsKICAgICBEb3VibHlMaW5rZWRMaXN0PE1hcmtl
ZEJsb2NrPiBtX2Jsb2NrTGlzdDsKICAgICBzaXplX3QgbV9jZWxsU2l6ZTsKQEAgLTU5LDYgKzY2
LDcgQEAgaW5saW5lIHB0cmRpZmZfdCBNYXJrZWRBbGxvY2F0b3I6Om9mZnNldAogCiBpbmxpbmUg
TWFya2VkQWxsb2NhdG9yOjpNYXJrZWRBbGxvY2F0b3IoKQogICAgIDogbV9jdXJyZW50QmxvY2so
MCkKKyAgICAsIG1fY3VycmVudEJsb2NrQXRMYXN0Q2Fub25pY2FsaXplKDApCiAgICAgLCBtX2Js
b2Nrc1RvU3dlZXAoMCkKICAgICAsIG1fY2VsbFNpemUoMCkKICAgICAsIG1fZGVzdHJ1Y3RvclR5
cGUoTWFya2VkQmxvY2s6Ok5vbmUpCkBAIC0xMDgsNiArMTE2LDcgQEAgaW5saW5lIHZvaWQgTWFy
a2VkQWxsb2NhdG9yOjpjYW5vbmljYWxpegogICAgIH0KICAgICAKICAgICBtX2N1cnJlbnRCbG9j
ay0+Y2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YShtX2ZyZWVMaXN0KTsKKyAgICBtX2N1cnJl
bnRCbG9ja0F0TGFzdENhbm9uaWNhbGl6ZSA9IG1fY3VycmVudEJsb2NrOwogICAgIG1fY3VycmVu
dEJsb2NrID0gMDsKICAgICBtX2ZyZWVMaXN0ID0gTWFya2VkQmxvY2s6OkZyZWVMaXN0KCk7CiB9
CkBAIC0xMjAsNyArMTI5LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2
b2lkIAogICAgICAgICBmdW5jdG9yKGJsb2NrKTsKICAgICB9CiB9Ci0gICAgCisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2suaAkocmV2aXNpb24gMTU1MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdCgpOyAvLyBDYWxsIHRo
aXMgb25jZSB5b3UndmUgYWxsb2NhdGVkIGFsbCB0aGUgaXRlbXMgaW4gdGhlIGZyZWUgbGlzdC4K
ICAgICAgICAgdm9pZCBjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3NEYXRhKGNvbnN0IEZyZWVMaXN0
Jik7CiAKKyAgICAgICAgdm9pZCBjbGVhck5ld2x5QWxsb2NhdGVkKCk7CiAgICAgICAgIHZvaWQg
Y2xlYXJNYXJrcygpOwogICAgICAgICBzaXplX3QgbWFya0NvdW50KCk7CiAgICAgICAgIGJvb2wg
aXNFbXB0eSgpOwpAQCAtMjI2LDYgKzIyNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAg
ICAgICAgbV93ZWFrU2V0Lmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAKKyAgICAgICAgY2xlYXJO
ZXdseUFsbG9jYXRlZCgpOwogICAgICAgICBjbGVhck1hcmtzKCk7CiAgICAgICAgIHN3ZWVwKCk7
CiAgICAgfQpAQCAtMjc4LDggKzI4MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIRUFQ
X0xPR19CTE9DS19TVEFURV9UUkFOU0lUSU9OKHRoaXMpOwogCiAgICAgICAgIEFTU0VSVChtX3N0
YXRlICE9IE5ldyAmJiBtX3N0YXRlICE9IEZyZWVMaXN0ZWQpOworICAgICAgICBBU1NFUlQoIW1f
bmV3bHlBbGxvY2F0ZWQpOwogICAgICAgICBtX21hcmtzLmNsZWFyQWxsKCk7Ci0gICAgICAgIG1f
bmV3bHlBbGxvY2F0ZWQuY2xlYXIoKTsKIAogICAgICAgICAvLyBUaGlzIHdpbGwgYmVjb21lIHRy
dWUgYXQgdGhlIGVuZCBvZiB0aGUgbWFyayBwaGFzZS4gV2Ugc2V0IGl0IG5vdyB0bwogICAgICAg
ICAvLyBhdm9pZCBhbiBleHRyYSBwYXNzIHRvIGRvIHNvIGxhdGVyLgpAQCAtMzU3LDYgKzM1OSwx
MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbV9uZXdseUFsbG9jYXRlZC0+Y2xlYXIoYXRv
bU51bWJlcihwKSk7CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OmNsZWFy
TmV3bHlBbGxvY2F0ZWQoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbmV3bHlBbGxvY2F0ZWQpCisg
ICAgICAgICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyKCk7CisgICAgfQorCiAgICAgaW5saW5l
IGJvb2wgTWFya2VkQmxvY2s6OmlzTGl2ZShjb25zdCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDE1NTMwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDQgKzIyMywz
OCBAQCB2b2lkIE1hcmtlZFNwYWNlOjpzaHJpbmsoKQogICAgIGZvckVhY2hCbG9jayhmcmVlT3JT
aHJpbmspOwogfQogCitzdGF0aWMgdm9pZCBjbGVhck5ld2x5QWxsb2NhdGVkSW5CbG9jayhNYXJr
ZWRCbG9jayogYmxvY2spCit7CisgICAgaWYgKCFibG9jaykKKyAgICAgICAgcmV0dXJuOworICAg
IGJsb2NrLT5jbGVhck5ld2x5QWxsb2NhdGVkKCk7Cit9CisKK3N0cnVjdCBDbGVhck5ld2x5QWxs
b2NhdGVkIDogTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKKyAgICB2b2lkIG9wZXJhdG9yKCko
TWFya2VkQmxvY2sqIGJsb2NrKSB7IGJsb2NrLT5jbGVhck5ld2x5QWxsb2NhdGVkKCk7IH0KK307
CisKK3ZvaWQgTWFya2VkU3BhY2U6OmNsZWFyTmV3bHlBbGxvY2F0ZWQoKQoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcHJlY2lzZUNvdW50OyArK2kpIHsKKyAgICAgICAgY2xlYXJOZXds
eUFsbG9jYXRlZEluQmxvY2sobV9ub3JtYWxTcGFjZS5wcmVjaXNlQWxsb2NhdG9yc1tpXS5nZXRB
bmRDbGVhckNhbm9uaWNhbGl6ZWRCbG9jaygpKTsKKyAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRl
ZEluQmxvY2sobV9ub3JtYWxEZXN0cnVjdG9yU3BhY2UucHJlY2lzZUFsbG9jYXRvcnNbaV0uZ2V0
QW5kQ2xlYXJDYW5vbmljYWxpemVkQmxvY2soKSk7CisgICAgICAgIGNsZWFyTmV3bHlBbGxvY2F0
ZWRJbkJsb2NrKG1faW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yU3BhY2UucHJlY2lzZUFsbG9j
YXRvcnNbaV0uZ2V0QW5kQ2xlYXJDYW5vbmljYWxpemVkQmxvY2soKSk7CisgICAgfQorCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbXByZWNpc2VDb3VudDsgKytpKSB7CisgICAgICAgIGNs
ZWFyTmV3bHlBbGxvY2F0ZWRJbkJsb2NrKG1fbm9ybWFsU3BhY2UuaW1wcmVjaXNlQWxsb2NhdG9y
c1tpXS5nZXRBbmRDbGVhckNhbm9uaWNhbGl6ZWRCbG9jaygpKTsKKyAgICAgICAgY2xlYXJOZXds
eUFsbG9jYXRlZEluQmxvY2sobV9ub3JtYWxEZXN0cnVjdG9yU3BhY2UuaW1wcmVjaXNlQWxsb2Nh
dG9yc1tpXS5nZXRBbmRDbGVhckNhbm9uaWNhbGl6ZWRCbG9jaygpKTsKKyAgICAgICAgY2xlYXJO
ZXdseUFsbG9jYXRlZEluQmxvY2sobV9pbW1vcnRhbFN0cnVjdHVyZURlc3RydWN0b3JTcGFjZS5p
bXByZWNpc2VBbGxvY2F0b3JzW2ldLmdldEFuZENsZWFyQ2Fub25pY2FsaXplZEJsb2NrKCkpOwor
ICAgIH0KKworICAgIC8vIFdlIGhhdmUgdG8gaXRlcmF0ZSBhbGwgb2YgdGhlIGJsb2NrcyBpbiB0
aGUgbGFyZ2UgYWxsb2NhdG9ycyBiZWNhdXNlIHRoZXkgYXJlCisgICAgLy8gY2Fub25pY2FsaXpl
ZCBhcyB0aGV5IGFyZSB1c2VkIHVwIChzZWUgTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhl
bHBlcikKKyAgICAvLyB3aGljaCBjcmVhdGVzIHRoZSBtX25ld2x5QWxsb2NhdGVkIGJpdG1hcC4K
KyAgICBDbGVhck5ld2x5QWxsb2NhdGVkIGZ1bmN0b3I7CisgICAgbV9ub3JtYWxTcGFjZS5sYXJn
ZUFsbG9jYXRvci5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CisgICAgbV9ub3JtYWxEZXN0cnVjdG9y
U3BhY2UubGFyZ2VBbGxvY2F0b3IuZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgIG1faW1tb3J0
YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yU3BhY2UubGFyZ2VBbGxvY2F0b3IuZm9yRWFjaEJsb2NrKGZ1
bmN0b3IpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMTU1MzA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEw
NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdChNYXJrZWRCbG9jayop
OwogCiAgICAgdm9pZCBjbGVhck1hcmtzKCk7CisgICAgdm9pZCBjbGVhck5ld2x5QWxsb2NhdGVk
KCk7CiAgICAgdm9pZCBzd2VlcCgpOwogICAgIHNpemVfdCBvYmplY3RDb3VudCgpOwogICAgIHNp
emVfdCBzaXplKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210995</attachid>
            <date>2013-09-08 14:47:21 -0700</date>
            <delta_ts>2013-09-08 15:03:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121007-20130908144717.patch</filename>
            <type>text/plain</type>
            <size>7743</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU1MzA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDEzLTA5LTA4ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQ2xlYXJpbmcgTWFya2VkQmxvY2s6Om1fbmV3bHlBbGxvY2F0ZWQgc2hvdWxkIGJl
IHNlcGFyYXRlIGZyb20gTWFya2VkQmxvY2s6OmNsZWFyTWFya3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTAwNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGNhbGwgY2xlYXJNYXJrcyBvbiBldmVy
eSBNYXJrZWRCbG9jayBpbiB0aGUgSGVhcCwgd2hlcmVhcyB3ZSBvbmx5IG5lZWQgdG8gY2xlYXIg
CisgICAgICAgIG1fbmV3bHlBbGxvY2F0ZWQgZm9yIHRoZSBtX2N1cnJlbnRCbG9jayBhdCB0aGUg
dGltZSBvZiB0aGUgbGFzdCBjYW5vbmljYWxpemVDZWxsTGl2ZW5lc3MoKSAKKyAgICAgICAgZm9y
IGVhY2ggTWFya2VkQWxsb2NhdG9yLiBXZSBhbHNvIG5lZWQgdG8gY2FsbCBpdCBvbiBldmVyeSBi
bG9jayBpbiB0aGUgbGFyZ2VBbGxvY2F0b3JzIAorICAgICAgICBiZWNhdXNlIGVhY2ggb25lIG9m
IHRoZWlyIGJsb2NrcyBpcyBjYW5vbmljYWxpemVkIGFzIGl0IGlzIHVzZWQuCisKKyAgICAgICAg
KiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRv
cjo6Z2V0QW5kQ2xlYXJDYW5vbmljYWxpemVkQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJrZWRB
bGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcik6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRv
cjo6Y2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSk6CisgICAgICAgICogaGVhcC9NYXJrZWRC
bG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6bGFzdENoYW5jZVRvRmluYWxpemUp
OgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Y2xlYXJNYXJrcyk6CisgICAgICAgIChKU0M6
Ok1hcmtlZEJsb2NrOjpjbGVhck5ld2x5QWxsb2NhdGVkKToKKyAgICAgICAgKiBoZWFwL01hcmtl
ZFNwYWNlLmNwcDoKKyAgICAgICAgKEpTQzo6Y2xlYXJOZXdseUFsbG9jYXRlZEluQmxvY2spOgor
ICAgICAgICAoSlNDOjpDbGVhck5ld2x5QWxsb2NhdGVkOjpvcGVyYXRvcigpKToKKyAgICAgICAg
KEpTQzo6TWFya2VkU3BhY2U6OmNsZWFyTmV3bHlBbGxvY2F0ZWQpOgorICAgICAgICAqIGhlYXAv
TWFya2VkU3BhY2UuaDoKKwogMjAxMy0wOS0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZUTCBzaG91bGQgc3VwcG9ydCB0eXBlZCBhcnJheSBQdXRCeVZhbApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1NTMwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NjcsNyArNDY3LDggQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogI2VuZGlmCiAKICAgICB7Ci0g
ICAgICAgIEdDUEhBU0UoY2xlYXJNYXJrcyk7CisgICAgICAgIEdDUEhBU0UoQ2xlYXJMaXZlbmVz
c0RhdGEpOworICAgICAgICBtX29iamVjdFNwYWNlLmNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKICAg
ICAgICAgbV9vYmplY3RTcGFjZS5jbGVhck1hcmtzKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkocmV2aXNpb24gMTU1MzA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDEyIEBAIHB1YmxpYzoKICAgICBNYXJrZWRCbG9jazo6RGVz
dHJ1Y3RvclR5cGUgZGVzdHJ1Y3RvclR5cGUoKSB7IHJldHVybiBtX2Rlc3RydWN0b3JUeXBlOyB9
CiAgICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4g
bV9oZWFwOyB9CisgICAgTWFya2VkQmxvY2sqIHRha2VDYW5vbmljYWxpemVkQmxvY2soKQorICAg
IHsKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrID0gbV9jYW5vbmljYWxpemVkQmxvY2s7Cisg
ICAgICAgIG1fY2Fub25pY2FsaXplZEJsb2NrID0gMDsKKyAgICAgICAgcmV0dXJuIGJsb2NrOwor
ICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hC
bG9jayhGdW5jdG9yJik7CiAgICAgCkBAIC00NCw2ICs1MCw3IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgTWFya2VkQmxvY2s6OkZyZWVMaXN0IG1fZnJlZUxpc3Q7CiAgICAgTWFya2VkQmxvY2sqIG1f
Y3VycmVudEJsb2NrOworICAgIE1hcmtlZEJsb2NrKiBtX2Nhbm9uaWNhbGl6ZWRCbG9jazsKICAg
ICBNYXJrZWRCbG9jayogbV9ibG9ja3NUb1N3ZWVwOwogICAgIERvdWJseUxpbmtlZExpc3Q8TWFy
a2VkQmxvY2s+IG1fYmxvY2tMaXN0OwogICAgIHNpemVfdCBtX2NlbGxTaXplOwpAQCAtNTksNiAr
NjYsNyBAQCBpbmxpbmUgcHRyZGlmZl90IE1hcmtlZEFsbG9jYXRvcjo6b2Zmc2V0CiAKIGlubGlu
ZSBNYXJrZWRBbGxvY2F0b3I6Ok1hcmtlZEFsbG9jYXRvcigpCiAgICAgOiBtX2N1cnJlbnRCbG9j
aygwKQorICAgICwgbV9jYW5vbmljYWxpemVkQmxvY2soMCkKICAgICAsIG1fYmxvY2tzVG9Td2Vl
cCgwKQogICAgICwgbV9jZWxsU2l6ZSgwKQogICAgICwgbV9kZXN0cnVjdG9yVHlwZShNYXJrZWRC
bG9jazo6Tm9uZSkKQEAgLTEwOCw2ICsxMTYsNyBAQCBpbmxpbmUgdm9pZCBNYXJrZWRBbGxvY2F0
b3I6OmNhbm9uaWNhbGl6CiAgICAgfQogICAgIAogICAgIG1fY3VycmVudEJsb2NrLT5jYW5vbmlj
YWxpemVDZWxsTGl2ZW5lc3NEYXRhKG1fZnJlZUxpc3QpOworICAgIG1fY2Fub25pY2FsaXplZEJs
b2NrID0gbV9jdXJyZW50QmxvY2s7CiAgICAgbV9jdXJyZW50QmxvY2sgPSAwOwogICAgIG1fZnJl
ZUxpc3QgPSBNYXJrZWRCbG9jazo6RnJlZUxpc3QoKTsKIH0KQEAgLTEyMCw3ICsxMjksNyBAQCB0
ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgCiAgICAgICAgIGZ1bmN0b3Io
YmxvY2spOwogICAgIH0KIH0KLSAgICAKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAx
NTUzMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZGlkQ29uc3VtZUZyZWVMaXN0KCk7IC8vIENhbGwgdGhpcyBvbmNlIHlvdSd2ZSBhbGxvY2F0
ZWQgYWxsIHRoZSBpdGVtcyBpbiB0aGUgZnJlZSBsaXN0LgogICAgICAgICB2b2lkIGNhbm9uaWNh
bGl6ZUNlbGxMaXZlbmVzc0RhdGEoY29uc3QgRnJlZUxpc3QmKTsKIAorICAgICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlICJuZXdseSBhbGxvY2F0ZWQiIGJpdG1hcCB3YXMgbm9uLW51bGwgCisg
ICAgICAgIC8vIGFuZCB3YXMgc3VjY2Vzc2Z1bGx5IGNsZWFyZWQgYW5kIGZhbHNlIG90aGVyd2lz
ZS4KKyAgICAgICAgYm9vbCBjbGVhck5ld2x5QWxsb2NhdGVkKCk7CiAgICAgICAgIHZvaWQgY2xl
YXJNYXJrcygpOwogICAgICAgICBzaXplX3QgbWFya0NvdW50KCk7CiAgICAgICAgIGJvb2wgaXNF
bXB0eSgpOwpAQCAtMjI2LDYgKzIyOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAg
ICAgbV93ZWFrU2V0Lmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAKKyAgICAgICAgY2xlYXJOZXds
eUFsbG9jYXRlZCgpOwogICAgICAgICBjbGVhck1hcmtzKCk7CiAgICAgICAgIHN3ZWVwKCk7CiAg
ICAgfQpAQCAtMjc5LDcgKzI4Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEFTU0VS
VChtX3N0YXRlICE9IE5ldyAmJiBtX3N0YXRlICE9IEZyZWVMaXN0ZWQpOwogICAgICAgICBtX21h
cmtzLmNsZWFyQWxsKCk7Ci0gICAgICAgIG1fbmV3bHlBbGxvY2F0ZWQuY2xlYXIoKTsKIAogICAg
ICAgICAvLyBUaGlzIHdpbGwgYmVjb21lIHRydWUgYXQgdGhlIGVuZCBvZiB0aGUgbWFyayBwaGFz
ZS4gV2Ugc2V0IGl0IG5vdyB0bwogICAgICAgICAvLyBhdm9pZCBhbiBleHRyYSBwYXNzIHRvIGRv
IHNvIGxhdGVyLgpAQCAtMzU3LDYgKzM2MCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
bV9uZXdseUFsbG9jYXRlZC0+Y2xlYXIoYXRvbU51bWJlcihwKSk7CiAgICAgfQogCisgICAgaW5s
aW5lIGJvb2wgTWFya2VkQmxvY2s6OmNsZWFyTmV3bHlBbGxvY2F0ZWQoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fbmV3bHlBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIG1fbmV3bHlBbGxvY2F0ZWQu
Y2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKICAgICBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNMaXZl
KGNvbnN0IEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNp
b24gMTU1MzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNCArMjIzLDQ5IEBAIHZvaWQgTWFya2VkU3BhY2U6OnNo
cmluaygpCiAgICAgZm9yRWFjaEJsb2NrKGZyZWVPclNocmluayk7CiB9CiAKK3N0YXRpYyB2b2lk
IGNsZWFyTmV3bHlBbGxvY2F0ZWRJbkJsb2NrKE1hcmtlZEJsb2NrKiBibG9jaykKK3sKKyAgICBp
ZiAoIWJsb2NrKQorICAgICAgICByZXR1cm47CisgICAgYmxvY2stPmNsZWFyTmV3bHlBbGxvY2F0
ZWQoKTsKK30KKworc3RydWN0IENsZWFyTmV3bHlBbGxvY2F0ZWQgOiBNYXJrZWRCbG9jazo6Vm9p
ZEZ1bmN0b3IgeworICAgIHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayogYmxvY2spIHsgYmxv
Y2stPmNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsgfQorfTsKKworI2lmbmRlZiBOREVCVUcKK3N0cnVj
dCBWZXJpZnlOZXdseUFsbG9jYXRlZCA6IE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CisgICAg
dm9pZCBvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykgeyBBU1NFUlQoIWJsb2NrLT5jbGVh
ck5ld2x5QWxsb2NhdGVkKCkpOyB9Cit9OworI2VuZGlmCisKK3ZvaWQgTWFya2VkU3BhY2U6OmNs
ZWFyTmV3bHlBbGxvY2F0ZWQoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlY2lz
ZUNvdW50OyArK2kpIHsKKyAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRlZEluQmxvY2sobV9ub3Jt
YWxTcGFjZS5wcmVjaXNlQWxsb2NhdG9yc1tpXS50YWtlQ2Fub25pY2FsaXplZEJsb2NrKCkpOwor
ICAgICAgICBjbGVhck5ld2x5QWxsb2NhdGVkSW5CbG9jayhtX25vcm1hbERlc3RydWN0b3JTcGFj
ZS5wcmVjaXNlQWxsb2NhdG9yc1tpXS50YWtlQ2Fub25pY2FsaXplZEJsb2NrKCkpOworICAgICAg
ICBjbGVhck5ld2x5QWxsb2NhdGVkSW5CbG9jayhtX2ltbW9ydGFsU3RydWN0dXJlRGVzdHJ1Y3Rv
clNwYWNlLnByZWNpc2VBbGxvY2F0b3JzW2ldLnRha2VDYW5vbmljYWxpemVkQmxvY2soKSk7Cisg
ICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbXByZWNpc2VDb3VudDsgKytpKSB7
CisgICAgICAgIGNsZWFyTmV3bHlBbGxvY2F0ZWRJbkJsb2NrKG1fbm9ybWFsU3BhY2UuaW1wcmVj
aXNlQWxsb2NhdG9yc1tpXS50YWtlQ2Fub25pY2FsaXplZEJsb2NrKCkpOworICAgICAgICBjbGVh
ck5ld2x5QWxsb2NhdGVkSW5CbG9jayhtX25vcm1hbERlc3RydWN0b3JTcGFjZS5pbXByZWNpc2VB
bGxvY2F0b3JzW2ldLnRha2VDYW5vbmljYWxpemVkQmxvY2soKSk7CisgICAgICAgIGNsZWFyTmV3
bHlBbGxvY2F0ZWRJbkJsb2NrKG1faW1tb3J0YWxTdHJ1Y3R1cmVEZXN0cnVjdG9yU3BhY2UuaW1w
cmVjaXNlQWxsb2NhdG9yc1tpXS50YWtlQ2Fub25pY2FsaXplZEJsb2NrKCkpOworICAgIH0KKwor
ICAgIC8vIFdlIGhhdmUgdG8gaXRlcmF0ZSBhbGwgb2YgdGhlIGJsb2NrcyBpbiB0aGUgbGFyZ2Ug
YWxsb2NhdG9ycyBiZWNhdXNlIHRoZXkgYXJlCisgICAgLy8gY2Fub25pY2FsaXplZCBhcyB0aGV5
IGFyZSB1c2VkIHVwIChzZWUgTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcikKKyAg
ICAvLyB3aGljaCBjcmVhdGVzIHRoZSBtX25ld2x5QWxsb2NhdGVkIGJpdG1hcC4KKyAgICBDbGVh
ck5ld2x5QWxsb2NhdGVkIGZ1bmN0b3I7CisgICAgbV9ub3JtYWxTcGFjZS5sYXJnZUFsbG9jYXRv
ci5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CisgICAgbV9ub3JtYWxEZXN0cnVjdG9yU3BhY2UubGFy
Z2VBbGxvY2F0b3IuZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgIG1faW1tb3J0YWxTdHJ1Y3R1
cmVEZXN0cnVjdG9yU3BhY2UubGFyZ2VBbGxvY2F0b3IuZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOwor
CisjaWZuZGVmIE5ERUJVRworICAgIFZlcmlmeU5ld2x5QWxsb2NhdGVkIHZlcmlmeUZ1bmN0b3I7
CisgICAgZm9yRWFjaEJsb2NrKHZlcmlmeUZ1bmN0b3IpOworI2VuZGlmCit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5o
CShyZXZpc2lvbiAxNTUzMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRT
cGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDcgQEAgcHVibGljOgogICAgIHZv
aWQgZGlkQ29uc3VtZUZyZWVMaXN0KE1hcmtlZEJsb2NrKik7CiAKICAgICB2b2lkIGNsZWFyTWFy
a3MoKTsKKyAgICB2b2lkIGNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKICAgICB2b2lkIHN3ZWVwKCk7
CiAgICAgc2l6ZV90IG9iamVjdENvdW50KCk7CiAgICAgc2l6ZV90IHNpemUoKTsK
</data>
<flag name="review"
          id="233030"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>