<?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>65382</bug_id>
          
          <creation_ts>2011-07-29 12:48:20 -0700</creation_ts>
          <short_desc>The JSC garbage collector returns memory to the operating system too eagerly</short_desc>
          <delta_ts>2012-07-03 09:41:32 -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>All</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="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aroben</cc>
    
    <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>oliver</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>444045</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-29 12:48:20 -0700</bug_when>
    <thetext>The JSC garbage collector will, in full-sweep mode, return every free block to the operating system.  Subsequent memory requests will have a high probability of having to go back to the OS to re-request that same memory.  This is not efficient.  The GC should instead hold on to free memory for a little while, in case that memory will immediately be re-requested by the application code.  If it does not get requested by application code after a few seconds, it should be returned to the OS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444049</commentid>
    <comment_count>1</comment_count>
      <attachid>102383</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-29 12:55:16 -0700</bug_when>
    <thetext>Created attachment 102383
the patch

This is a work-in-progress patch.  It still needs a bit more testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444051</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-29 12:58:54 -0700</bug_when>
    <thetext>Attachment 102383 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/heap/Heap.cpp:316:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/heap/Heap.cpp:332:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/heap/Heap.cpp:338:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/heap/Heap.cpp:339:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 4 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444054</commentid>
    <comment_count>3</comment_count>
      <attachid>102385</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-29 13:04:00 -0700</bug_when>
    <thetext>Created attachment 102385
the patch (fix style)

Layout tests are now passing. This patch appears to be a 3-6% speed-up on SunSpider, depending on hardware, and about a 9-11% speed-up overall on V8, depending on how you run it (the V8 harness versus my harness).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444140</commentid>
    <comment_count>4</comment_count>
      <attachid>102406</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-29 15:18:10 -0700</bug_when>
    <thetext>Created attachment 102406
the patch (fix annoying, though benign, bug)

This patch improves on the previous one by fixing a nasty, but benign, bug.  When returning a block to the system, the scavenger thread calls MarkedBlock::destroy().  This method first calls MarkedBlock::reset() and then frees the memory.  But MarkedBlock::reset() would have already been called from the main thread during the GC sweep.  Calling it again is risky, since reset() invokes destructors on cells in the block.  It just so happens that in all cases where blocks are placed on the free list, the block would have been swept and and the cells within it would be blank JSCells - so invoking the destructor twice would be asymptomatic.  But, fixing this issue makes the logic more consistent and decreases the likelihood of problems in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444338</commentid>
    <comment_count>5</comment_count>
      <attachid>102406</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-30 17:19:30 -0700</bug_when>
    <thetext>Comment on attachment 102406
the patch (fix annoying, though benign, bug)

Rejecting attachment 102406 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-02&apos;, &apos;--port...&quot; exit_code: 2

Last 500 characters of output:
ceeded at 678 (offset -6 lines).
1 out of 5 hunks FAILED -- saving rejects to file Source/JavaScriptCore/heap/Heap.cpp.rej
patching file Source/JavaScriptCore/heap/Heap.h
patching file Source/JavaScriptCore/heap/MarkedBlock.cpp
Hunk #1 succeeded at 42 (offset -1 lines).
Hunk #2 succeeded at 50 (offset -1 lines).
patching file Source/JavaScriptCore/heap/MarkedBlock.h

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Oliver Hunt&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/9286011</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444339</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-07-30 17:20:16 -0700</bug_when>
    <thetext>Looks like this may need to be updated to ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444347</commentid>
    <comment_count>7</comment_count>
      <attachid>102448</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-30 18:03:53 -0700</bug_when>
    <thetext>Created attachment 102448
the patch (fix conflicts)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444354</commentid>
    <comment_count>8</comment_count>
      <attachid>102448</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-07-30 19:18:26 -0700</bug_when>
    <thetext>Comment on attachment 102448
the patch (fix conflicts)

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

Not r+/r- because i don&apos;t understand why this doesn&apos;t lead to the main thread blocking on the release-thread

&gt; Source/JavaScriptCore/heap/Heap.cpp:319
&gt; +    MutexLocker locker(m_freeBlockLock);

Do we really want to wait while holding the freeBlock lock?  It looks like that would lead to allocateBlock blocking for up to a second on this secondary thread?

&gt; Source/JavaScriptCore/heap/Heap.h:39
&gt; +#if ENABLE(SINGLE_THREADED)
&gt; +#define HEAP_FREE_BLOCKS_EAGERLY 1
&gt; +#else
&gt; +#define HEAP_FREE_BLOCKS_EAGERLY 0
&gt; +#endif

I think this would read better in general if this became WTF_ENABLE_EAGER_BLOCK_FREEING, and then the call sites work can be guarded with ENABLE(EAGER_BLOCK_FREEING) which is our more typical approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444361</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-30 19:34:47 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 102448 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102448&amp;action=review
&gt; 
&gt; Not r+/r- because i don&apos;t understand why this doesn&apos;t lead to the main thread blocking on the release-thread
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:319
&gt; &gt; +    MutexLocker locker(m_freeBlockLock);
&gt; 
&gt; Do we really want to wait while holding the freeBlock lock?  It looks like that would lead to allocateBlock blocking for up to a second on this secondary thread?

ThreadCondition::timedWait(Mutex, double) should atomically release the Mutex and engage the wait.  So allocateBlock() may wait for the handful of microseconds that it takes to acquire the Mutex and commence waiting, but never a full second (well unless the scavenger thread page faults or something, and the page fault is super-expensive, or something).

The reason why I use ThreadCondition::timedWait() is that it makes heap destruction nicely atomic.  The reason why I use one Mutex, instead of multiple Mutexes, is because I like using one lock for everything unless there is a performance argument to be made.  This makes it easier to reason about the code being race-free, at least to me.  The scavenger thread acquiring the allocation mutex for a few microseconds once a second does not lead to a performance problem, as it means that there is only a 1/1,000,000 chance that the allocator would ever attempt to allocate the mutex at a time when it is held by the scavenger.

I&apos;m more worried that if the scavenger starts scavenging and there are a lot of free blocks, and the allocator is allocating blocks, then they&apos;ll thrash on each other a bit, I guess.  But I&apos;ve not seen this happen in benchmarks.  The right fix would be to have the allocator estimate its current allocation rate.  If the scavenger detects that the allocator will deplete free pages in under a second given its current allocation rate, then it probably shouldn&apos;t scavenge anything.  I&apos;ll save that for a future patch.  And I&apos;ll probably only do it if we have evidence that it&apos;s necessary.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.h:39
&gt; &gt; +#if ENABLE(SINGLE_THREADED)
&gt; &gt; +#define HEAP_FREE_BLOCKS_EAGERLY 1
&gt; &gt; +#else
&gt; &gt; +#define HEAP_FREE_BLOCKS_EAGERLY 0
&gt; &gt; +#endif
&gt; 
&gt; I think this would read better in general if this became WTF_ENABLE_EAGER_BLOCK_FREEING, and then the call sites work can be guarded with ENABLE(EAGER_BLOCK_FREEING) which is our more typical approach.

I presume you would recommend putting this in wtf/Platform?  Or is it better to keep it in Heap.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444369</commentid>
    <comment_count>10</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-07-30 20:37:30 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 102448 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102448&amp;action=review
&gt; &gt; 
&gt; &gt; Not r+/r- because i don&apos;t understand why this doesn&apos;t lead to the main thread blocking on the release-thread
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:319
&gt; &gt; &gt; +    MutexLocker locker(m_freeBlockLock);
&gt; &gt; 
&gt; &gt; Do we really want to wait while holding the freeBlock lock?  It looks like that would lead to allocateBlock blocking for up to a second on this secondary thread?
&gt; 
&gt; ThreadCondition::timedWait(Mutex, double) should atomically release the Mutex and engage the wait.  So allocateBlock() may wait for the handful of microseconds that it takes to acquire the Mutex and commence waiting, but never a full second (well unless the scavenger thread page faults or something, and the page fault is super-expensive, or something).

righto

&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/Heap.h:39
&gt; &gt; &gt; +#if ENABLE(SINGLE_THREADED)
&gt; &gt; &gt; +#define HEAP_FREE_BLOCKS_EAGERLY 1
&gt; &gt; &gt; +#else
&gt; &gt; &gt; +#define HEAP_FREE_BLOCKS_EAGERLY 0
&gt; &gt; &gt; +#endif
&gt; &gt; 
&gt; &gt; I think this would read better in general if this became WTF_ENABLE_EAGER_BLOCK_FREEING, and then the call sites work can be guarded with ENABLE(EAGER_BLOCK_FREEING) which is our more typical approach.
&gt; 
&gt; I presume you would recommend putting this in wtf/Platform?  Or is it better to keep it in Heap.h?

I initially thought putting it in Platform.h would be better, but i&apos;m not sure we really need to have this setting trigger a world rebuild, so i decided not to suggest it :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444380</commentid>
    <comment_count>11</comment_count>
      <attachid>102453</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-30 22:48:58 -0700</bug_when>
    <thetext>Created attachment 102453
the patch (use the ENABLE() thingy)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444381</commentid>
    <comment_count>12</comment_count>
      <attachid>102454</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-30 22:50:57 -0700</bug_when>
    <thetext>Created attachment 102454
the patch (fix change log)

Realized that I forgot to change the ChangeLog to say that I changed Platform.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444425</commentid>
    <comment_count>13</comment_count>
      <attachid>102454</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-31 12:04:07 -0700</bug_when>
    <thetext>Comment on attachment 102454
the patch (fix change log)

Clearing flags on attachment: 102454

Committed r92084: &lt;http://trac.webkit.org/changeset/92084&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444426</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-31 12:04:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445373</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-08-02 11:26:37 -0700</bug_when>
    <thetext>Have you considered using libdispatch or similar to avoid having a dedicated thread for this periodic work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445448</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-02 12:51:10 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Have you considered using libdispatch or similar to avoid having a dedicated thread for this periodic work?

This is a good point!  dispatch_after() would be great here.  One thing that I&apos;m not sure about is how easy it is to cancel a dispatch_after(); the Heap destructor will want to ensure that it can immediately prevent the scavenger from running again, unless it is currently running, in which case it should wait for it to finish.  This is very easy to do with threading primitives.

Can we rely on libdispatch being available on all of the platforms that WebKit runs on?  If it is, then awesome; if not, then I&apos;m dubious about the risk/reward: the risk is that we have two different implementations of the logic for starting, stopping, and scheduling scavenging.  The benefit is that we have one fewer thread.  It&apos;s not clear to me that the benefit outweighs the risk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445459</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-08-02 12:59:53 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; Have you considered using libdispatch or similar to avoid having a dedicated thread for this periodic work?
&gt; 
&gt; This is a good point!  dispatch_after() would be great here.  One thing that I&apos;m not sure about is how easy it is to cancel a dispatch_after(); the Heap destructor will want to ensure that it can immediately prevent the scavenger from running again, unless it is currently running, in which case it should wait for it to finish.  This is very easy to do with threading primitives.

You could use dispatch_suspend to suspend the queue on which the scavenger will run, and use a standard mutex to block until the scavenger finishes running.

&gt; Can we rely on libdispatch being available on all of the platforms that WebKit runs on?

We cannot.

&gt; If it is, then awesome; if not, then I&apos;m dubious about the risk/reward: the risk is that we have two different implementations of the logic for starting, stopping, and scheduling scavenging.  The benefit is that we have one fewer thread.  It&apos;s not clear to me that the benefit outweighs the risk.

Ideally we&apos;d have an abstraction that provides the same functionality as libdispatch but with a cross-platform interface. WebKit2&apos;s WorkQueue abstraction might be a good starting point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662286</commentid>
    <comment_count>18</comment_count>
      <attachid>102454</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-07-03 09:10:41 -0700</bug_when>
    <thetext>Comment on attachment 102454
the patch (fix change log)

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

&gt; Source/JavaScriptCore/heap/Heap.cpp:334
&gt; +        // Generally wait for one second before scavenging free blocks. This
&gt; +        // may return early, particularly when we&apos;re being asked to quit.
&gt; +        waitForRelativeTime(1.0);

Filip, is there any special reason for this one second timeout? Can it be 10 seconds for example? Or infinite?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662304</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-03 09:41:32 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 102454 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102454&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:334
&gt; &gt; +        // Generally wait for one second before scavenging free blocks. This
&gt; &gt; +        // may return early, particularly when we&apos;re being asked to quit.
&gt; &gt; +        waitForRelativeTime(1.0);
&gt; 
&gt; Filip, is there any special reason for this one second timeout? Can it be 10 seconds for example? Or infinite?

Not really.  It&apos;s the answer to the question: &quot;how long after I stop doing stuff in my browser do I expect my browser to return memory to the OS?&quot;

Shortening this timeout will slow things down because the block freeing thread would then contend on the allocation mutex more frequently.

Lengthening the timeout may cause other applications to experience longer periods of memory starvation while the browser hoards memory.

One second feels like the right compromise.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102383</attachid>
            <date>2011-07-29 12:55:16 -0700</date>
            <delta_ts>2011-07-29 13:04:00 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>lazymemreuse_patch_1.diff</filename>
            <type>text/plain</type>
            <size>10777</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTIwMDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAK
KzIwMTEtMDctMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBU
aGUgSlNDIGdhcmJhZ2UgY29sbGVjdG9yIHJldHVybnMgbWVtb3J5IHRvIHRoZSBvcGVyYXRpbmcg
c3lzdGVtIHRvbworICAgICAgICBlYWdlcmx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIG1lbW9yeSByZXVz
ZSBtb2RlbCBzaW1pbGFyIHRvIHRoZSBvbmUgaW4gRmFzdE1hbGxvYy4KKyAgICAgICAgQSBwZXJp
b2RpYyBzY2F2ZW5nZXIgdGhyZWFkIHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgYW5kIHJldHVybnMg
aGFsZiB0aGUKKyAgICAgICAgZnJlZSBtZW1vcnkgdG8gdGhlIE9TIG9uIGVhY2ggdGltZXIgZmly
ZS4gIE5ldyBibG9jayBhbGxvY2F0aW9ucyBmaXJzdAorICAgICAgICBhdHRlbXB0IHRvIGdldCB0
aGUgbWVtb3J5IGZyb20gdGhlIGNvbGxlY3RvcidzIGludGVybmFsIHBvb2wsIHJldmVydGluZwor
ICAgICAgICB0byBPUyBhbGxvY2F0aW9uIG9ubHkgd2hlbiB0aGlzIHBvb2wgaXMgZW1wdHkuCisK
KyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6fkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpkZXN0cm95KToK
KyAgICAgICAgKEpTQzo6SGVhcDo6d2FpdEZvclJlbGF0aXZlVGltZVdoaWxlSG9sZGluZ0xvY2sp
OgorICAgICAgICAoSlNDOjpIZWFwOjp3YWl0Rm9yUmVsYXRpdmVUaW1lKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YmxvY2tGcmVlaW5nVGhyZWFkU3RhcnRGdW5jKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6YmxvY2tGcmVlaW5nVGhyZWFkTWFpbik6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRl
QmxvY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpmcmVlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6cmVsZWFzZUZyZWVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6ZGVz
dHJveSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjppbml0Rm9yQ2VsbFNpemUpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6cmVzZXQpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKwogMjAxMS0w
Ny0yOCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgICpfbGlzdCBp
bnN0cnVjdGlvbnMgYXJlIG9ubHkgdXNlZCBpbiBvbmUgcGxhY2UsIHdoZXJlIHRoZSBjb2RlIGlz
IHdyb25nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDkx
OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0NCwxMCArMjQ0LDI1IEBAIEhlYXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQogewogICAgIG1fbmV3U3BhY2Uuc2V0SGlnaFdhdGVyTWFyayhtaW5CeXRlc1BlckN5Y2xl
KTsKICAgICAoKm1fYWN0aXZpdHlDYWxsYmFjaykoKTsKKyNpZiAhSEVBUF9GUkVFX0JMT0NLU19F
QUdFUkxZCisgICAgbV9udW1iZXJPZkZyZWVCbG9ja3MgPSAwOworICAgIG1fYmxvY2tGcmVlaW5n
VGhyZWFkID0gY3JlYXRlVGhyZWFkKGJsb2NrRnJlZWluZ1RocmVhZFN0YXJ0RnVuYywgdGhpcywg
IkphdmFTY3JpcHRDb3JlOjpCbG9ja0ZyZWUiKTsKKyAgICBBU1NFUlQobV9ibG9ja0ZyZWVpbmdU
aHJlYWQpOworI2VuZGlmCiB9CiAKIEhlYXA6On5IZWFwKCkKIHsKKyNpZiAhSEVBUF9GUkVFX0JM
T0NLU19FQUdFUkxZCisgICAgLy8gZGVzdHJveSBvdXIgdGhyZWFkCisgICAgeworICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIobV9mcmVlQmxvY2tMb2NrKTsKKyAgICAgICAgbV9ibG9ja0ZyZWVp
bmdUaHJlYWRTaG91bGRRdWl0ID0gdHJ1ZTsKKyAgICAgICAgbV9mcmVlQmxvY2tDb25kaXRpb24u
YnJvYWRjYXN0KCk7CisgICAgfQorICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fYmxvY2tG
cmVlaW5nVGhyZWFkLCAwKTsKKyNlbmRpZgorICAgIAogICAgIC8vIFRoZSBkZXN0cm95IGZ1bmN0
aW9uIG11c3QgYWxyZWFkeSBoYXZlIGJlZW4gY2FsbGVkLCBzbyBhc3NlcnQgdGhpcy4KICAgICBB
U1NFUlQoIW1fZ2xvYmFsRGF0YSk7CiB9CkBAIC0yODEsMTAgKzI5Niw3NiBAQCB2b2lkIEhlYXA6
OmRlc3Ryb3koKQogICAgIHNocmluaygpOwogICAgIEFTU0VSVCghc2l6ZSgpKTsKICNlbmRpZgor
ICAgIAorICAgIHJlbGVhc2VGcmVlQmxvY2tzKCk7CiAKICAgICBtX2dsb2JhbERhdGEgPSAwOwog
fQogCisjaWYgIUhFQVBfRlJFRV9CTE9DS1NfRUFHRVJMWQordm9pZCBIZWFwOjp3YWl0Rm9yUmVs
YXRpdmVUaW1lV2hpbGVIb2xkaW5nTG9jayhkb3VibGUgcmVsYXRpdmUpCit7CisgICAgaWYgKG1f
YmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxkUXVpdCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZnJl
ZUJsb2NrQ29uZGl0aW9uLnRpbWVkV2FpdChtX2ZyZWVCbG9ja0xvY2ssIGN1cnJlbnRUaW1lKCkg
KyByZWxhdGl2ZSk7Cit9CisKK3ZvaWQgSGVhcDo6d2FpdEZvclJlbGF0aXZlVGltZShkb3VibGUg
cmVsYXRpdmUpCit7CisgICAgLy8gSWYgdGhpcyByZXR1cm5zIGVhcmx5LCB0aGF0J3MgZmluZSwg
c28gbG9uZyBhcyBpdCBkb2Vzbid0IGRvIGl0IHRvbworICAgIC8vIGZyZXF1ZW50bHkuICBJdCB3
b3VsZCBvbmx5IGJlIGEgYnVnIGlmIHRoaXMgZnVuY3Rpb24gZmFpbGVkIHRvIHJldHVybgorICAg
IC8vIHdoZW4gaXQgd2FzIGFza2VkIHRvIGRvIHNvLgorICAgIAorICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX2ZyZWVCbG9ja0xvY2spOworICAgIHdhaXRGb3JSZWxhdGl2ZVRpbWVXaGlsZUhvbGRp
bmdMb2NrKHJlbGF0aXZlKTsKK30KKwordm9pZCogSGVhcDo6YmxvY2tGcmVlaW5nVGhyZWFkU3Rh
cnRGdW5jKHZvaWQqIGhlYXApCit7CisgICAgc3RhdGljX2Nhc3Q8SGVhcCo+KGhlYXApLT5ibG9j
a0ZyZWVpbmdUaHJlYWRNYWluKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSGVhcDo6Ymxv
Y2tGcmVlaW5nVGhyZWFkTWFpbigpCit7CisgICAgd2hpbGUgKCFtX2Jsb2NrRnJlZWluZ1RocmVh
ZFNob3VsZFF1aXQpIHsKKyAgICAgICAgLy8gR2VuZXJhbGx5IHdhaXQgZm9yIG9uZSBzZWNvbmQg
YmVmb3JlIHNjYXZlbmdpbmcgZnJlZSBibG9ja3MuICBUaGlzCisgICAgICAgIC8vIG1heSByZXR1
cm4gZWFybHksIHBhcnRpY3VsYXJseSB3aGVuIHdlJ3JlIGJlaW5nIGFza2VkIHRvIHF1aXQuCisg
ICAgICAgIHdhaXRGb3JSZWxhdGl2ZVRpbWUoMS4wKTsKKyAgICAgICAgaWYgKG1fYmxvY2tGcmVl
aW5nVGhyZWFkU2hvdWxkUXVpdCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAg
ICAgLy8gTm93IHByb2Nlc3MgdGhlIGxpc3Qgb2YgZnJlZSBibG9ja3MuICBLZWVwIGZyZWVpbmcg
dW50aWwgaGFsZiBvZiB0aGUKKyAgICAgICAgLy8gYmxvY2tzIHRoYXQgYXJlIGN1cnJlbnRseSBv
biB0aGUgbGlzdCBhcmUgZ29uZS4gIEFzc3VtZSB0aGF0IGEgc2l6ZV90CisgICAgICAgIC8vIGZp
ZWxkIGNhbiBiZSBhY2Nlc3NlZCBhdG9taWNhbGx5LgorICAgICAgICBzaXplX3QgY3VycmVudE51
bWJlck9mRnJlZUJsb2NrcyA9IG1fbnVtYmVyT2ZGcmVlQmxvY2tzOworICAgICAgICBpZiAoIWN1
cnJlbnROdW1iZXJPZkZyZWVCbG9ja3MpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
CisgICAgICAgIHNpemVfdCBkZXNpcmVkTnVtYmVyT2ZGcmVlQmxvY2tzID0gY3VycmVudE51bWJl
ck9mRnJlZUJsb2NrcyAvIDI7CisgICAgICAgIAorICAgICAgICB3aGlsZSAoIW1fYmxvY2tGcmVl
aW5nVGhyZWFkU2hvdWxkUXVpdCkgeworICAgICAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrOwor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2ZyZWVC
bG9ja0xvY2spOworICAgICAgICAgICAgICAgIGlmIChtX251bWJlck9mRnJlZUJsb2NrcyA8PSBk
ZXNpcmVkTnVtYmVyT2ZGcmVlQmxvY2tzKQorICAgICAgICAgICAgICAgICAgICBibG9jayA9IDA7
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gbV9m
cmVlQmxvY2tzLnJlbW92ZUhlYWQoKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2Nr
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9udW1iZXJPZkZyZWVCbG9ja3MtLTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgh
YmxvY2spCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IE1hcmtlZEJsb2NrOjpkZXN0cm95KGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRp
ZiAvLyAhSEVBUF9GUkVFX0JMT0NLU19FQUdFUkxZCisKIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFN
ZW1vcnlDb3N0U2xvd0Nhc2Uoc2l6ZV90IGNvc3QpCiB7CiAgICAgLy8gT3VyIGZyZXF1ZW5jeSBv
ZiBnYXJiYWdlIGNvbGxlY3Rpb24gdHJpZXMgdG8gYmFsYW5jZSBtZW1vcnkgdXNlIGFnYWluc3Qg
c3BlZWQKQEAgLTYxOSw3ICs3MDAsMjYgQEAgYm9vbCBIZWFwOjppc1ZhbGlkQWxsb2NhdGlvbihz
aXplX3QgYnl0ZQogCiBNYXJrZWRCbG9jayogSGVhcDo6YWxsb2NhdGVCbG9jayhzaXplX3QgY2Vs
bFNpemUpCiB7Ci0gICAgTWFya2VkQmxvY2sqIGJsb2NrID0gTWFya2VkQmxvY2s6OmNyZWF0ZSh0
aGlzLCBjZWxsU2l6ZSk7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrOworICAgIAorI2lmIEhFQVBf
RlJFRV9CTE9DS1NfRUFHRVJMWQorICAgIGJsb2NrID0gTWFya2VkQmxvY2s6OmNyZWF0ZSh0aGlz
LCBjZWxsU2l6ZSk7CisjZWxzZQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
ZnJlZUJsb2NrTG9jayk7CisgICAgICAgIGlmIChtX251bWJlck9mRnJlZUJsb2NrcykgeworICAg
ICAgICAgICAgYmxvY2sgPSBtX2ZyZWVCbG9ja3MucmVtb3ZlSGVhZCgpOworICAgICAgICAgICAg
QVNTRVJUKGJsb2NrKTsKKyAgICAgICAgICAgIG1fbnVtYmVyT2ZGcmVlQmxvY2tzLS07CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgYmxvY2sgPSAwOworICAgIH0KKyAgICBpZiAoYmxvY2sp
CisgICAgICAgIGJsb2NrLT5pbml0Rm9yQ2VsbFNpemUoY2VsbFNpemUpOworICAgIGVsc2UKKyAg
ICAgICAgYmxvY2sgPSBNYXJrZWRCbG9jazo6Y3JlYXRlKHRoaXMsIGNlbGxTaXplKTsKKyNlbmRp
ZgorICAgIAogICAgIG1fYmxvY2tzLmFkZChibG9jayk7CiAKICAgICByZXR1cm4gYmxvY2s7CkBA
IC02MzIsNyArNzMyLDE0IEBAIHZvaWQgSGVhcDo6ZnJlZUJsb2NrcyhNYXJrZWRCbG9jayogaGVh
ZCkKICAgICAgICAgbmV4dCA9IGJsb2NrLT5uZXh0KCk7CiAKICAgICAgICAgbV9ibG9ja3MucmVt
b3ZlKGJsb2NrKTsKKyNpZiBIRUFQX0ZSRUVfQkxPQ0tTX0VBR0VSTFkKICAgICAgICAgTWFya2Vk
QmxvY2s6OmRlc3Ryb3koYmxvY2spOworI2Vsc2UKKyAgICAgICAgYmxvY2stPnJlc2V0KCk7Cisg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2ZyZWVCbG9ja0xvY2spOworICAgICAgICBtX2Zy
ZWVCbG9ja3MuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgbV9udW1iZXJPZkZyZWVCbG9ja3MrKzsK
KyNlbmRpZgogICAgIH0KIH0KIApAQCAtNjQzLDYgKzc1MCwyOCBAQCB2b2lkIEhlYXA6OnNocmlu
aygpCiAgICAgZnJlZUJsb2Nrcyhmb3JFYWNoQmxvY2sodGFrZUlmRW1wdHkpKTsKIH0KIAordm9p
ZCBIZWFwOjpyZWxlYXNlRnJlZUJsb2NrcygpCit7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgTWFya2VkQmxvY2sqIGJsb2NrOworICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9mcmVlQmxvY2tMb2NrKTsKKyAgICAgICAgICAgIGlmICghbV9udW1iZXJPZkZy
ZWVCbG9ja3MpCisgICAgICAgICAgICAgICAgYmxvY2sgPSAwOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgYmxvY2sgPSBtX2ZyZWVCbG9ja3MucmVtb3ZlSGVhZCgpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChibG9jayk7CisgICAgICAgICAgICAgICAgbV9udW1iZXJPZkZy
ZWVCbG9ja3MtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgTWFya2Vk
QmxvY2s6OmRlc3Ryb3koYmxvY2spOworICAgIH0KK30KKwogI2lmIEVOQUJMRShHR0MpCiB2b2lk
IEhlYXA6OndyaXRlQmFycmllclNsb3dDYXNlKGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTQ2VsbCog
Y2VsbCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDkxOTc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiwxMiBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKKyNpZiBFTkFCTEUoU0lOR0xFX1RIUkVBREVEKQorI2RlZmlu
ZSBIRUFQX0ZSRUVfQkxPQ0tTX0VBR0VSTFkgMQorI2Vsc2UKKyNkZWZpbmUgSEVBUF9GUkVFX0JM
T0NLU19FQUdFUkxZIDAKKyNlbmRpZgorCiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEdD
QWN0aXZpdHlDYWxsYmFjazsKQEAgLTUyLDcgKzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
dHlwZWRlZiBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj4gVHlwZUNvdW50U2V0OwogCiAgICAg
ZW51bSBPcGVyYXRpb25JblByb2dyZXNzIHsgTm9PcGVyYXRpb24sIEFsbG9jYXRpb24sIENvbGxl
Y3Rpb24gfTsKLQorICAgIAogICAgIGNsYXNzIEhlYXAgewogICAgICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShIZWFwKTsKICAgICBwdWJsaWM6CkBAIC0xNDQsMTYgKzE1MCwzNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgZW51bSBTd2VlcFRvZ2dsZSB7IERvTm90U3dlZXAsIERvU3dlZXAg
fTsKICAgICAgICAgdm9pZCBjb2xsZWN0KFN3ZWVwVG9nZ2xlKTsKICAgICAgICAgdm9pZCBzaHJp
bmsoKTsKKyAgICAgICAgdm9pZCByZWxlYXNlRnJlZUJsb2NrcygpOwogICAgICAgICB2b2lkIHN3
ZWVwKCk7CiAKICAgICAgICAgUmVnaXN0ZXJGaWxlJiByZWdpc3RlckZpbGUoKTsKIAogICAgICAg
ICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXJTbG93Q2FzZShjb25zdCBKU0NlbGwqLCBKU0NlbGwq
KTsKKyAgICAgICAgCisjaWYgIUhFQVBfRlJFRV9CTE9DS1NfRUFHRVJMWQorICAgICAgICB2b2lk
IHdhaXRGb3JSZWxhdGl2ZVRpbWVXaGlsZUhvbGRpbmdMb2NrKGRvdWJsZSByZWxhdGl2ZSk7Cisg
ICAgICAgIHZvaWQgd2FpdEZvclJlbGF0aXZlVGltZShkb3VibGUgcmVsYXRpdmUpOworICAgICAg
ICB2b2lkIGJsb2NrRnJlZWluZ1RocmVhZE1haW4oKTsKKyAgICAgICAgc3RhdGljIHZvaWQqIGJs
b2NrRnJlZWluZ1RocmVhZFN0YXJ0RnVuYyh2b2lkKiBoZWFwKTsKKyNlbmRpZgogCiAgICAgICAg
IE9wZXJhdGlvbkluUHJvZ3Jlc3MgbV9vcGVyYXRpb25JblByb2dyZXNzOwogICAgICAgICBOZXdT
cGFjZSBtX25ld1NwYWNlOwogICAgICAgICBNYXJrZWRCbG9ja1NldCBtX2Jsb2NrczsKIAorI2lm
ICFIRUFQX0ZSRUVfQkxPQ0tTX0VBR0VSTFkKKyAgICAgICAgRG91Ymx5TGlua2VkTGlzdDxNYXJr
ZWRCbG9jaz4gbV9mcmVlQmxvY2tzOworICAgICAgICBzaXplX3QgbV9udW1iZXJPZkZyZWVCbG9j
a3M7CisgICAgICAgIAorICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1fYmxvY2tGcmVlaW5nVGhy
ZWFkOworICAgICAgICBNdXRleCBtX2ZyZWVCbG9ja0xvY2s7CisgICAgICAgIFRocmVhZENvbmRp
dGlvbiBtX2ZyZWVCbG9ja0NvbmRpdGlvbjsKKyAgICAgICAgYm9vbCBtX2Jsb2NrRnJlZWluZ1Ro
cmVhZFNob3VsZFF1aXQ7CisjZW5kaWYKKwogICAgICAgICBzaXplX3QgbV9leHRyYUNvc3Q7CiAK
ICAgICAgICAgUHJvdGVjdENvdW50U2V0IG1fcHJvdGVjdGVkVmFsdWVzOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gOTE5NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDggKzQzLDcgQEAgTWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpjcmVhdGUoSGVh
cCogaAogCiB2b2lkIE1hcmtlZEJsb2NrOjpkZXN0cm95KE1hcmtlZEJsb2NrKiBibG9jaykKIHsK
LSAgICBmb3IgKHNpemVfdCBpID0gYmxvY2stPmZpcnN0QXRvbSgpOyBpIDwgYmxvY2stPm1fZW5k
QXRvbTsgaSArPSBibG9jay0+bV9hdG9tc1BlckNlbGwpCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8SlNDZWxsKj4oJmJsb2NrLT5hdG9tcygpW2ldKS0+fkpTQ2VsbCgpOworICAgIGJsb2NrLT5y
ZXNldCgpOwogICAgIGJsb2NrLT5tX2FsbG9jYXRpb24uZGVhbGxvY2F0ZSgpOwogfQogCkBAIC01
MywxMCArNTIsMjEgQEAgTWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKGNvbnN0IFBhZ2VBbGxvYwog
ICAgICwgbV9hbGxvY2F0aW9uKGFsbG9jYXRpb24pCiAgICAgLCBtX2hlYXAoaGVhcCkKIHsKKyAg
ICBpbml0Rm9yQ2VsbFNpemUoY2VsbFNpemUpOworfQorCit2b2lkIE1hcmtlZEJsb2NrOjppbml0
Rm9yQ2VsbFNpemUoc2l6ZV90IGNlbGxTaXplKQorewogICAgIG1fYXRvbXNQZXJDZWxsID0gKGNl
bGxTaXplICsgYXRvbVNpemUgLSAxKSAvIGF0b21TaXplOwogICAgIG1fZW5kQXRvbSA9IGF0b21z
UGVyQmxvY2sgLSBtX2F0b21zUGVyQ2VsbCArIDE7CiB9CiAKK3ZvaWQgTWFya2VkQmxvY2s6OnJl
c2V0KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207
IGkgKz0gbV9hdG9tc1BlckNlbGwpCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4o
JmF0b21zKClbaV0pLT5+SlNDZWxsKCk7Cit9CisKIHZvaWQgTWFya2VkQmxvY2s6OnN3ZWVwKCkK
IHsKICAgICBTdHJ1Y3R1cmUqIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlID0gbV9oZWFwLT5n
bG9iYWxEYXRhKCktPmR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLmdldCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiA5MTk3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTk0LDEyICs5NCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gdGhlbSwgYW5k
IHJldHVybnMgYSBsaW5rZWQgbGlzdCBvZiB0aG9zZSBjZWxscy4KICAgICAgICAgRnJlZUNlbGwq
IGxhenlTd2VlcCgpOwogICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0Rm9yQ2VsbFNpemUoc2l6
ZV90IGNlbGxTaXplKTsKKyAgICAgICAgCiAgICAgICAgIC8vIFRoZXNlIHNob3VsZCBiZSBjYWxs
ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBibG9jayBpcyBjcmVhdGVkLgogICAgICAgICAvLyBCbGVz
c2luZyBmb3IgZmFzdCBwYXRoIGNyZWF0ZXMgYSBsaW5rZWQgbGlzdCwgd2hpbGUgYmxlc3Npbmcg
Zm9yCiAgICAgICAgIC8vIHNsb3cgcGF0aCBjcmVhdGVzIGR1bW15IGNlbGxzLgogICAgICAgICBG
cmVlQ2VsbCogYmxlc3NOZXdCbG9ja0ZvckZhc3RQYXRoKCk7CiAgICAgICAgIHZvaWQgYmxlc3NO
ZXdCbG9ja0ZvclNsb3dQYXRoKCk7CiAgICAgICAgIAorICAgICAgICB2b2lkIHJlc2V0KCk7Cisg
ICAgICAgIAogICAgICAgICAvLyBUaGlzIHVubWFya3MgYWxsIGNlbGxzIG9uIHRoZSBmcmVlIGxp
c3QsIGFuZCBhbGxvY2F0ZXMgZHVtbXkgSlNDZWxscwogICAgICAgICAvLyBpbiB0aGVpciBwbGFj
ZS4KICAgICAgICAgdm9pZCBjYW5vbmljYWxpemVCbG9jayhGcmVlQ2VsbCogZmlyc3RGcmVlQ2Vs
bCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102385</attachid>
            <date>2011-07-29 13:04:00 -0700</date>
            <delta_ts>2011-07-29 15:18:10 -0700</delta_ts>
            <desc>the patch (fix style)</desc>
            <filename>lazymemreuse_patch_2.diff</filename>
            <type>text/plain</type>
            <size>10773</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTIwMDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAK
KzIwMTEtMDctMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBU
aGUgSlNDIGdhcmJhZ2UgY29sbGVjdG9yIHJldHVybnMgbWVtb3J5IHRvIHRoZSBvcGVyYXRpbmcg
c3lzdGVtIHRvbworICAgICAgICBlYWdlcmx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIG1lbW9yeSByZXVz
ZSBtb2RlbCBzaW1pbGFyIHRvIHRoZSBvbmUgaW4gRmFzdE1hbGxvYy4KKyAgICAgICAgQSBwZXJp
b2RpYyBzY2F2ZW5nZXIgdGhyZWFkIHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgYW5kIHJldHVybnMg
aGFsZiB0aGUKKyAgICAgICAgZnJlZSBtZW1vcnkgdG8gdGhlIE9TIG9uIGVhY2ggdGltZXIgZmly
ZS4gIE5ldyBibG9jayBhbGxvY2F0aW9ucyBmaXJzdAorICAgICAgICBhdHRlbXB0IHRvIGdldCB0
aGUgbWVtb3J5IGZyb20gdGhlIGNvbGxlY3RvcidzIGludGVybmFsIHBvb2wsIHJldmVydGluZwor
ICAgICAgICB0byBPUyBhbGxvY2F0aW9uIG9ubHkgd2hlbiB0aGlzIHBvb2wgaXMgZW1wdHkuCisK
KyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6fkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpkZXN0cm95KToK
KyAgICAgICAgKEpTQzo6SGVhcDo6d2FpdEZvclJlbGF0aXZlVGltZVdoaWxlSG9sZGluZ0xvY2sp
OgorICAgICAgICAoSlNDOjpIZWFwOjp3YWl0Rm9yUmVsYXRpdmVUaW1lKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YmxvY2tGcmVlaW5nVGhyZWFkU3RhcnRGdW5jKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6YmxvY2tGcmVlaW5nVGhyZWFkTWFpbik6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRl
QmxvY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpmcmVlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6cmVsZWFzZUZyZWVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6ZGVz
dHJveSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjppbml0Rm9yQ2VsbFNpemUpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6cmVzZXQpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKwogMjAxMS0w
Ny0yOCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgICpfbGlzdCBp
bnN0cnVjdGlvbnMgYXJlIG9ubHkgdXNlZCBpbiBvbmUgcGxhY2UsIHdoZXJlIHRoZSBjb2RlIGlz
IHdyb25nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDkx
OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0NCwxMCArMjQ0LDI1IEBAIEhlYXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQogewogICAgIG1fbmV3U3BhY2Uuc2V0SGlnaFdhdGVyTWFyayhtaW5CeXRlc1BlckN5Y2xl
KTsKICAgICAoKm1fYWN0aXZpdHlDYWxsYmFjaykoKTsKKyNpZiAhSEVBUF9GUkVFX0JMT0NLU19F
QUdFUkxZCisgICAgbV9udW1iZXJPZkZyZWVCbG9ja3MgPSAwOworICAgIG1fYmxvY2tGcmVlaW5n
VGhyZWFkID0gY3JlYXRlVGhyZWFkKGJsb2NrRnJlZWluZ1RocmVhZFN0YXJ0RnVuYywgdGhpcywg
IkphdmFTY3JpcHRDb3JlOjpCbG9ja0ZyZWUiKTsKKyAgICBBU1NFUlQobV9ibG9ja0ZyZWVpbmdU
aHJlYWQpOworI2VuZGlmCiB9CiAKIEhlYXA6On5IZWFwKCkKIHsKKyNpZiAhSEVBUF9GUkVFX0JM
T0NLU19FQUdFUkxZCisgICAgLy8gZGVzdHJveSBvdXIgdGhyZWFkCisgICAgeworICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIobV9mcmVlQmxvY2tMb2NrKTsKKyAgICAgICAgbV9ibG9ja0ZyZWVp
bmdUaHJlYWRTaG91bGRRdWl0ID0gdHJ1ZTsKKyAgICAgICAgbV9mcmVlQmxvY2tDb25kaXRpb24u
YnJvYWRjYXN0KCk7CisgICAgfQorICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fYmxvY2tG
cmVlaW5nVGhyZWFkLCAwKTsKKyNlbmRpZgorICAgIAogICAgIC8vIFRoZSBkZXN0cm95IGZ1bmN0
aW9uIG11c3QgYWxyZWFkeSBoYXZlIGJlZW4gY2FsbGVkLCBzbyBhc3NlcnQgdGhpcy4KICAgICBB
U1NFUlQoIW1fZ2xvYmFsRGF0YSk7CiB9CkBAIC0yODEsMTAgKzI5Niw3NiBAQCB2b2lkIEhlYXA6
OmRlc3Ryb3koKQogICAgIHNocmluaygpOwogICAgIEFTU0VSVCghc2l6ZSgpKTsKICNlbmRpZgor
ICAgIAorICAgIHJlbGVhc2VGcmVlQmxvY2tzKCk7CiAKICAgICBtX2dsb2JhbERhdGEgPSAwOwog
fQogCisjaWYgIUhFQVBfRlJFRV9CTE9DS1NfRUFHRVJMWQordm9pZCBIZWFwOjp3YWl0Rm9yUmVs
YXRpdmVUaW1lV2hpbGVIb2xkaW5nTG9jayhkb3VibGUgcmVsYXRpdmUpCit7CisgICAgaWYgKG1f
YmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxkUXVpdCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZnJl
ZUJsb2NrQ29uZGl0aW9uLnRpbWVkV2FpdChtX2ZyZWVCbG9ja0xvY2ssIGN1cnJlbnRUaW1lKCkg
KyByZWxhdGl2ZSk7Cit9CisKK3ZvaWQgSGVhcDo6d2FpdEZvclJlbGF0aXZlVGltZShkb3VibGUg
cmVsYXRpdmUpCit7CisgICAgLy8gSWYgdGhpcyByZXR1cm5zIGVhcmx5LCB0aGF0J3MgZmluZSwg
c28gbG9uZyBhcyBpdCBkb2Vzbid0IGRvIGl0IHRvbworICAgIC8vIGZyZXF1ZW50bHkuIEl0IHdv
dWxkIG9ubHkgYmUgYSBidWcgaWYgdGhpcyBmdW5jdGlvbiBmYWlsZWQgdG8gcmV0dXJuCisgICAg
Ly8gd2hlbiBpdCB3YXMgYXNrZWQgdG8gZG8gc28uCisgICAgCisgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fZnJlZUJsb2NrTG9jayk7CisgICAgd2FpdEZvclJlbGF0aXZlVGltZVdoaWxlSG9sZGlu
Z0xvY2socmVsYXRpdmUpOworfQorCit2b2lkKiBIZWFwOjpibG9ja0ZyZWVpbmdUaHJlYWRTdGFy
dEZ1bmModm9pZCogaGVhcCkKK3sKKyAgICBzdGF0aWNfY2FzdDxIZWFwKj4oaGVhcCktPmJsb2Nr
RnJlZWluZ1RocmVhZE1haW4oKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBIZWFwOjpibG9j
a0ZyZWVpbmdUaHJlYWRNYWluKCkKK3sKKyAgICB3aGlsZSAoIW1fYmxvY2tGcmVlaW5nVGhyZWFk
U2hvdWxkUXVpdCkgeworICAgICAgICAvLyBHZW5lcmFsbHkgd2FpdCBmb3Igb25lIHNlY29uZCBi
ZWZvcmUgc2NhdmVuZ2luZyBmcmVlIGJsb2Nrcy4gVGhpcworICAgICAgICAvLyBtYXkgcmV0dXJu
IGVhcmx5LCBwYXJ0aWN1bGFybHkgd2hlbiB3ZSdyZSBiZWluZyBhc2tlZCB0byBxdWl0LgorICAg
ICAgICB3YWl0Rm9yUmVsYXRpdmVUaW1lKDEuMCk7CisgICAgICAgIGlmIChtX2Jsb2NrRnJlZWlu
Z1RocmVhZFNob3VsZFF1aXQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAg
IC8vIE5vdyBwcm9jZXNzIHRoZSBsaXN0IG9mIGZyZWUgYmxvY2tzLiBLZWVwIGZyZWVpbmcgdW50
aWwgaGFsZiBvZiB0aGUKKyAgICAgICAgLy8gYmxvY2tzIHRoYXQgYXJlIGN1cnJlbnRseSBvbiB0
aGUgbGlzdCBhcmUgZ29uZS4gQXNzdW1lIHRoYXQgYSBzaXplX3QKKyAgICAgICAgLy8gZmllbGQg
Y2FuIGJlIGFjY2Vzc2VkIGF0b21pY2FsbHkuCisgICAgICAgIHNpemVfdCBjdXJyZW50TnVtYmVy
T2ZGcmVlQmxvY2tzID0gbV9udW1iZXJPZkZyZWVCbG9ja3M7CisgICAgICAgIGlmICghY3VycmVu
dE51bWJlck9mRnJlZUJsb2NrcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAg
ICAgICAgc2l6ZV90IGRlc2lyZWROdW1iZXJPZkZyZWVCbG9ja3MgPSBjdXJyZW50TnVtYmVyT2ZG
cmVlQmxvY2tzIC8gMjsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICghbV9ibG9ja0ZyZWVpbmdU
aHJlYWRTaG91bGRRdWl0KSB7CisgICAgICAgICAgICBNYXJrZWRCbG9jayogYmxvY2s7CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnJlZUJsb2Nr
TG9jayk7CisgICAgICAgICAgICAgICAgaWYgKG1fbnVtYmVyT2ZGcmVlQmxvY2tzIDw9IGRlc2ly
ZWROdW1iZXJPZkZyZWVCbG9ja3MpCisgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gMDsKKyAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSBtX2ZyZWVC
bG9ja3MucmVtb3ZlSGVhZCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2spOwor
ICAgICAgICAgICAgICAgICAgICBtX251bWJlck9mRnJlZUJsb2Nrcy0tOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFibG9j
aykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFy
a2VkQmxvY2s6OmRlc3Ryb3koYmxvY2spOworICAgICAgICB9CisgICAgfQorfQorI2VuZGlmIC8v
ICFIRUFQX0ZSRUVfQkxPQ0tTX0VBR0VSTFkKKwogdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9y
eUNvc3RTbG93Q2FzZShzaXplX3QgY29zdCkKIHsKICAgICAvLyBPdXIgZnJlcXVlbmN5IG9mIGdh
cmJhZ2UgY29sbGVjdGlvbiB0cmllcyB0byBiYWxhbmNlIG1lbW9yeSB1c2UgYWdhaW5zdCBzcGVl
ZApAQCAtNjE5LDcgKzcwMCwyNiBAQCBib29sIEhlYXA6OmlzVmFsaWRBbGxvY2F0aW9uKHNpemVf
dCBieXRlCiAKIE1hcmtlZEJsb2NrKiBIZWFwOjphbGxvY2F0ZUJsb2NrKHNpemVfdCBjZWxsU2l6
ZSkKIHsKLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBNYXJrZWRCbG9jazo6Y3JlYXRlKHRoaXMs
IGNlbGxTaXplKTsKKyAgICBNYXJrZWRCbG9jayogYmxvY2s7CisgICAgCisjaWYgSEVBUF9GUkVF
X0JMT0NLU19FQUdFUkxZCisgICAgYmxvY2sgPSBNYXJrZWRCbG9jazo6Y3JlYXRlKHRoaXMsIGNl
bGxTaXplKTsKKyNlbHNlCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9mcmVl
QmxvY2tMb2NrKTsKKyAgICAgICAgaWYgKG1fbnVtYmVyT2ZGcmVlQmxvY2tzKSB7CisgICAgICAg
ICAgICBibG9jayA9IG1fZnJlZUJsb2Nrcy5yZW1vdmVIZWFkKCk7CisgICAgICAgICAgICBBU1NF
UlQoYmxvY2spOworICAgICAgICAgICAgbV9udW1iZXJPZkZyZWVCbG9ja3MtLTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBibG9jayA9IDA7CisgICAgfQorICAgIGlmIChibG9jaykKKyAg
ICAgICAgYmxvY2stPmluaXRGb3JDZWxsU2l6ZShjZWxsU2l6ZSk7CisgICAgZWxzZQorICAgICAg
ICBibG9jayA9IE1hcmtlZEJsb2NrOjpjcmVhdGUodGhpcywgY2VsbFNpemUpOworI2VuZGlmCisg
ICAgCiAgICAgbV9ibG9ja3MuYWRkKGJsb2NrKTsKIAogICAgIHJldHVybiBibG9jazsKQEAgLTYz
Miw3ICs3MzIsMTQgQEAgdm9pZCBIZWFwOjpmcmVlQmxvY2tzKE1hcmtlZEJsb2NrKiBoZWFkKQog
ICAgICAgICBuZXh0ID0gYmxvY2stPm5leHQoKTsKIAogICAgICAgICBtX2Jsb2Nrcy5yZW1vdmUo
YmxvY2spOworI2lmIEhFQVBfRlJFRV9CTE9DS1NfRUFHRVJMWQogICAgICAgICBNYXJrZWRCbG9j
azo6ZGVzdHJveShibG9jayk7CisjZWxzZQorICAgICAgICBibG9jay0+cmVzZXQoKTsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnJlZUJsb2NrTG9jayk7CisgICAgICAgIG1fZnJlZUJs
b2Nrcy5hcHBlbmQoYmxvY2spOworICAgICAgICBtX251bWJlck9mRnJlZUJsb2NrcysrOworI2Vu
ZGlmCiAgICAgfQogfQogCkBAIC02NDMsNiArNzUwLDI4IEBAIHZvaWQgSGVhcDo6c2hyaW5rKCkK
ICAgICBmcmVlQmxvY2tzKGZvckVhY2hCbG9jayh0YWtlSWZFbXB0eSkpOwogfQogCit2b2lkIEhl
YXA6OnJlbGVhc2VGcmVlQmxvY2tzKCkKK3sKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBN
YXJrZWRCbG9jayogYmxvY2s7CisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX2ZyZWVCbG9ja0xvY2spOworICAgICAgICAgICAgaWYgKCFtX251bWJlck9mRnJlZUJs
b2NrcykKKyAgICAgICAgICAgICAgICBibG9jayA9IDA7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBibG9jayA9IG1fZnJlZUJsb2Nrcy5yZW1vdmVIZWFkKCk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGJsb2NrKTsKKyAgICAgICAgICAgICAgICBtX251bWJlck9mRnJlZUJs
b2Nrcy0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBNYXJrZWRCbG9j
azo6ZGVzdHJveShibG9jayk7CisgICAgfQorfQorCiAjaWYgRU5BQkxFKEdHQykKIHZvaWQgSGVh
cDo6d3JpdGVCYXJyaWVyU2xvd0Nhc2UoY29uc3QgSlNDZWxsKiBvd25lciwgSlNDZWxsKiBjZWxs
KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gOTE5NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDEyIEBACiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KIAorI2lmIEVOQUJMRShTSU5HTEVfVEhSRUFERUQpCisjZGVmaW5lIEhF
QVBfRlJFRV9CTE9DS1NfRUFHRVJMWSAxCisjZWxzZQorI2RlZmluZSBIRUFQX0ZSRUVfQkxPQ0tT
X0VBR0VSTFkgMAorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgR0NBY3Rp
dml0eUNhbGxiYWNrOwpAQCAtNTIsNyArNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB0eXBl
ZGVmIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiBUeXBlQ291bnRTZXQ7CiAKICAgICBlbnVt
IE9wZXJhdGlvbkluUHJvZ3Jlc3MgeyBOb09wZXJhdGlvbiwgQWxsb2NhdGlvbiwgQ29sbGVjdGlv
biB9OwotCisgICAgCiAgICAgY2xhc3MgSGVhcCB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEhlYXApOwogICAgIHB1YmxpYzoKQEAgLTE0NCwxNiArMTUwLDM0IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBlbnVtIFN3ZWVwVG9nZ2xlIHsgRG9Ob3RTd2VlcCwgRG9Td2VlcCB9Owog
ICAgICAgICB2b2lkIGNvbGxlY3QoU3dlZXBUb2dnbGUpOwogICAgICAgICB2b2lkIHNocmluaygp
OworICAgICAgICB2b2lkIHJlbGVhc2VGcmVlQmxvY2tzKCk7CiAgICAgICAgIHZvaWQgc3dlZXAo
KTsKIAogICAgICAgICBSZWdpc3RlckZpbGUmIHJlZ2lzdGVyRmlsZSgpOwogCiAgICAgICAgIHN0
YXRpYyB2b2lkIHdyaXRlQmFycmllclNsb3dDYXNlKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopOwor
ICAgICAgICAKKyNpZiAhSEVBUF9GUkVFX0JMT0NLU19FQUdFUkxZCisgICAgICAgIHZvaWQgd2Fp
dEZvclJlbGF0aXZlVGltZVdoaWxlSG9sZGluZ0xvY2soZG91YmxlIHJlbGF0aXZlKTsKKyAgICAg
ICAgdm9pZCB3YWl0Rm9yUmVsYXRpdmVUaW1lKGRvdWJsZSByZWxhdGl2ZSk7CisgICAgICAgIHZv
aWQgYmxvY2tGcmVlaW5nVGhyZWFkTWFpbigpOworICAgICAgICBzdGF0aWMgdm9pZCogYmxvY2tG
cmVlaW5nVGhyZWFkU3RhcnRGdW5jKHZvaWQqIGhlYXApOworI2VuZGlmCiAKICAgICAgICAgT3Bl
cmF0aW9uSW5Qcm9ncmVzcyBtX29wZXJhdGlvbkluUHJvZ3Jlc3M7CiAgICAgICAgIE5ld1NwYWNl
IG1fbmV3U3BhY2U7CiAgICAgICAgIE1hcmtlZEJsb2NrU2V0IG1fYmxvY2tzOwogCisjaWYgIUhF
QVBfRlJFRV9CTE9DS1NfRUFHRVJMWQorICAgICAgICBEb3VibHlMaW5rZWRMaXN0PE1hcmtlZEJs
b2NrPiBtX2ZyZWVCbG9ja3M7CisgICAgICAgIHNpemVfdCBtX251bWJlck9mRnJlZUJsb2NrczsK
KyAgICAgICAgCisgICAgICAgIFRocmVhZElkZW50aWZpZXIgbV9ibG9ja0ZyZWVpbmdUaHJlYWQ7
CisgICAgICAgIE11dGV4IG1fZnJlZUJsb2NrTG9jazsKKyAgICAgICAgVGhyZWFkQ29uZGl0aW9u
IG1fZnJlZUJsb2NrQ29uZGl0aW9uOworICAgICAgICBib29sIG1fYmxvY2tGcmVlaW5nVGhyZWFk
U2hvdWxkUXVpdDsKKyNlbmRpZgorCiAgICAgICAgIHNpemVfdCBtX2V4dHJhQ29zdDsKIAogICAg
ICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0ZWRWYWx1ZXM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiA5MTk3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsOCArNDMsNyBAQCBNYXJrZWRCbG9jayogTWFya2VkQmxvY2s6OmNyZWF0ZShIZWFwKiBo
CiAKIHZvaWQgTWFya2VkQmxvY2s6OmRlc3Ryb3koTWFya2VkQmxvY2sqIGJsb2NrKQogewotICAg
IGZvciAoc2l6ZV90IGkgPSBibG9jay0+Zmlyc3RBdG9tKCk7IGkgPCBibG9jay0+bV9lbmRBdG9t
OyBpICs9IGJsb2NrLT5tX2F0b21zUGVyQ2VsbCkKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxK
U0NlbGwqPigmYmxvY2stPmF0b21zKClbaV0pLT5+SlNDZWxsKCk7CisgICAgYmxvY2stPnJlc2V0
KCk7CiAgICAgYmxvY2stPm1fYWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7CiB9CiAKQEAgLTUzLDEw
ICs1MiwyMSBAQCBNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soY29uc3QgUGFnZUFsbG9jCiAgICAg
LCBtX2FsbG9jYXRpb24oYWxsb2NhdGlvbikKICAgICAsIG1faGVhcChoZWFwKQogeworICAgIGlu
aXRGb3JDZWxsU2l6ZShjZWxsU2l6ZSk7Cit9CisKK3ZvaWQgTWFya2VkQmxvY2s6OmluaXRGb3JD
ZWxsU2l6ZShzaXplX3QgY2VsbFNpemUpCit7CiAgICAgbV9hdG9tc1BlckNlbGwgPSAoY2VsbFNp
emUgKyBhdG9tU2l6ZSAtIDEpIC8gYXRvbVNpemU7CiAgICAgbV9lbmRBdG9tID0gYXRvbXNQZXJC
bG9jayAtIG1fYXRvbXNQZXJDZWxsICsgMTsKIH0KIAordm9pZCBNYXJrZWRCbG9jazo6cmVzZXQo
KQoreworICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSAr
PSBtX2F0b21zUGVyQ2VsbCkKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPigmYXRv
bXMoKVtpXSktPn5KU0NlbGwoKTsKK30KKwogdm9pZCBNYXJrZWRCbG9jazo6c3dlZXAoKQogewog
ICAgIFN0cnVjdHVyZSogZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUgPSBtX2hlYXAtPmdsb2Jh
bERhdGEoKS0+ZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUuZ2V0KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDkxOTc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
OTQsMTIgKzk0LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyB0aGVtLCBhbmQgcmV0
dXJucyBhIGxpbmtlZCBsaXN0IG9mIHRob3NlIGNlbGxzLgogICAgICAgICBGcmVlQ2VsbCogbGF6
eVN3ZWVwKCk7CiAgICAgICAgIAorICAgICAgICB2b2lkIGluaXRGb3JDZWxsU2l6ZShzaXplX3Qg
Y2VsbFNpemUpOworICAgICAgICAKICAgICAgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIGNhbGxlZCBp
bW1lZGlhdGVseSBhZnRlciBhIGJsb2NrIGlzIGNyZWF0ZWQuCiAgICAgICAgIC8vIEJsZXNzaW5n
IGZvciBmYXN0IHBhdGggY3JlYXRlcyBhIGxpbmtlZCBsaXN0LCB3aGlsZSBibGVzc2luZyBmb3IK
ICAgICAgICAgLy8gc2xvdyBwYXRoIGNyZWF0ZXMgZHVtbXkgY2VsbHMuCiAgICAgICAgIEZyZWVD
ZWxsKiBibGVzc05ld0Jsb2NrRm9yRmFzdFBhdGgoKTsKICAgICAgICAgdm9pZCBibGVzc05ld0Js
b2NrRm9yU2xvd1BhdGgoKTsKICAgICAgICAgCisgICAgICAgIHZvaWQgcmVzZXQoKTsKKyAgICAg
ICAgCiAgICAgICAgIC8vIFRoaXMgdW5tYXJrcyBhbGwgY2VsbHMgb24gdGhlIGZyZWUgbGlzdCwg
YW5kIGFsbG9jYXRlcyBkdW1teSBKU0NlbGxzCiAgICAgICAgIC8vIGluIHRoZWlyIHBsYWNlLgog
ICAgICAgICB2b2lkIGNhbm9uaWNhbGl6ZUJsb2NrKEZyZWVDZWxsKiBmaXJzdEZyZWVDZWxsKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102406</attachid>
            <date>2011-07-29 15:18:10 -0700</date>
            <delta_ts>2011-07-30 18:03:53 -0700</delta_ts>
            <desc>the patch (fix annoying, though benign, bug)</desc>
            <filename>lazymemreuse_patch_3.diff</filename>
            <type>text/plain</type>
            <size>10830</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTIwMDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAK
KzIwMTEtMDctMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBU
aGUgSlNDIGdhcmJhZ2UgY29sbGVjdG9yIHJldHVybnMgbWVtb3J5IHRvIHRoZSBvcGVyYXRpbmcg
c3lzdGVtIHRvbworICAgICAgICBlYWdlcmx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIG1lbW9yeSByZXVz
ZSBtb2RlbCBzaW1pbGFyIHRvIHRoZSBvbmUgaW4gRmFzdE1hbGxvYy4KKyAgICAgICAgQSBwZXJp
b2RpYyBzY2F2ZW5nZXIgdGhyZWFkIHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgYW5kIHJldHVybnMg
aGFsZiB0aGUKKyAgICAgICAgZnJlZSBtZW1vcnkgdG8gdGhlIE9TIG9uIGVhY2ggdGltZXIgZmly
ZS4gIE5ldyBibG9jayBhbGxvY2F0aW9ucyBmaXJzdAorICAgICAgICBhdHRlbXB0IHRvIGdldCB0
aGUgbWVtb3J5IGZyb20gdGhlIGNvbGxlY3RvcidzIGludGVybmFsIHBvb2wsIHJldmVydGluZwor
ICAgICAgICB0byBPUyBhbGxvY2F0aW9uIG9ubHkgd2hlbiB0aGlzIHBvb2wgaXMgZW1wdHkuCisK
KyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6fkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpkZXN0cm95KToK
KyAgICAgICAgKEpTQzo6SGVhcDo6d2FpdEZvclJlbGF0aXZlVGltZVdoaWxlSG9sZGluZ0xvY2sp
OgorICAgICAgICAoSlNDOjpIZWFwOjp3YWl0Rm9yUmVsYXRpdmVUaW1lKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YmxvY2tGcmVlaW5nVGhyZWFkU3RhcnRGdW5jKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6YmxvY2tGcmVlaW5nVGhyZWFkTWFpbik6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRl
QmxvY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpmcmVlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6cmVsZWFzZUZyZWVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6ZGVz
dHJveSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjppbml0Rm9yQ2VsbFNpemUpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6cmVzZXQpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKwogMjAxMS0w
Ny0yOCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgICpfbGlzdCBp
bnN0cnVjdGlvbnMgYXJlIG9ubHkgdXNlZCBpbiBvbmUgcGxhY2UsIHdoZXJlIHRoZSBjb2RlIGlz
IHdyb25nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDkx
OTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0NCwxMCArMjQ0LDI1IEBAIEhlYXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQogewogICAgIG1fbmV3U3BhY2Uuc2V0SGlnaFdhdGVyTWFyayhtaW5CeXRlc1BlckN5Y2xl
KTsKICAgICAoKm1fYWN0aXZpdHlDYWxsYmFjaykoKTsKKyNpZiAhSEVBUF9GUkVFX0JMT0NLU19F
QUdFUkxZCisgICAgbV9udW1iZXJPZkZyZWVCbG9ja3MgPSAwOworICAgIG1fYmxvY2tGcmVlaW5n
VGhyZWFkID0gY3JlYXRlVGhyZWFkKGJsb2NrRnJlZWluZ1RocmVhZFN0YXJ0RnVuYywgdGhpcywg
IkphdmFTY3JpcHRDb3JlOjpCbG9ja0ZyZWUiKTsKKyAgICBBU1NFUlQobV9ibG9ja0ZyZWVpbmdU
aHJlYWQpOworI2VuZGlmCiB9CiAKIEhlYXA6On5IZWFwKCkKIHsKKyNpZiAhSEVBUF9GUkVFX0JM
T0NLU19FQUdFUkxZCisgICAgLy8gZGVzdHJveSBvdXIgdGhyZWFkCisgICAgeworICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIobV9mcmVlQmxvY2tMb2NrKTsKKyAgICAgICAgbV9ibG9ja0ZyZWVp
bmdUaHJlYWRTaG91bGRRdWl0ID0gdHJ1ZTsKKyAgICAgICAgbV9mcmVlQmxvY2tDb25kaXRpb24u
YnJvYWRjYXN0KCk7CisgICAgfQorICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fYmxvY2tG
cmVlaW5nVGhyZWFkLCAwKTsKKyNlbmRpZgorICAgIAogICAgIC8vIFRoZSBkZXN0cm95IGZ1bmN0
aW9uIG11c3QgYWxyZWFkeSBoYXZlIGJlZW4gY2FsbGVkLCBzbyBhc3NlcnQgdGhpcy4KICAgICBB
U1NFUlQoIW1fZ2xvYmFsRGF0YSk7CiB9CkBAIC0yODEsMTAgKzI5Niw3OCBAQCB2b2lkIEhlYXA6
OmRlc3Ryb3koKQogICAgIHNocmluaygpOwogICAgIEFTU0VSVCghc2l6ZSgpKTsKICNlbmRpZgor
ICAgIAorI2lmICFIRUFQX0ZSRUVfQkxPQ0tTX0VBR0VSTFkKKyAgICByZWxlYXNlRnJlZUJsb2Nr
cygpOworI2VuZGlmCiAKICAgICBtX2dsb2JhbERhdGEgPSAwOwogfQogCisjaWYgIUhFQVBfRlJF
RV9CTE9DS1NfRUFHRVJMWQordm9pZCBIZWFwOjp3YWl0Rm9yUmVsYXRpdmVUaW1lV2hpbGVIb2xk
aW5nTG9jayhkb3VibGUgcmVsYXRpdmUpCit7CisgICAgaWYgKG1fYmxvY2tGcmVlaW5nVGhyZWFk
U2hvdWxkUXVpdCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZnJlZUJsb2NrQ29uZGl0aW9uLnRp
bWVkV2FpdChtX2ZyZWVCbG9ja0xvY2ssIGN1cnJlbnRUaW1lKCkgKyByZWxhdGl2ZSk7Cit9CisK
K3ZvaWQgSGVhcDo6d2FpdEZvclJlbGF0aXZlVGltZShkb3VibGUgcmVsYXRpdmUpCit7CisgICAg
Ly8gSWYgdGhpcyByZXR1cm5zIGVhcmx5LCB0aGF0J3MgZmluZSwgc28gbG9uZyBhcyBpdCBkb2Vz
bid0IGRvIGl0IHRvbworICAgIC8vIGZyZXF1ZW50bHkuIEl0IHdvdWxkIG9ubHkgYmUgYSBidWcg
aWYgdGhpcyBmdW5jdGlvbiBmYWlsZWQgdG8gcmV0dXJuCisgICAgLy8gd2hlbiBpdCB3YXMgYXNr
ZWQgdG8gZG8gc28uCisgICAgCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnJlZUJsb2NrTG9j
ayk7CisgICAgd2FpdEZvclJlbGF0aXZlVGltZVdoaWxlSG9sZGluZ0xvY2socmVsYXRpdmUpOwor
fQorCit2b2lkKiBIZWFwOjpibG9ja0ZyZWVpbmdUaHJlYWRTdGFydEZ1bmModm9pZCogaGVhcCkK
K3sKKyAgICBzdGF0aWNfY2FzdDxIZWFwKj4oaGVhcCktPmJsb2NrRnJlZWluZ1RocmVhZE1haW4o
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBIZWFwOjpibG9ja0ZyZWVpbmdUaHJlYWRNYWlu
KCkKK3sKKyAgICB3aGlsZSAoIW1fYmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxkUXVpdCkgeworICAg
ICAgICAvLyBHZW5lcmFsbHkgd2FpdCBmb3Igb25lIHNlY29uZCBiZWZvcmUgc2NhdmVuZ2luZyBm
cmVlIGJsb2Nrcy4gVGhpcworICAgICAgICAvLyBtYXkgcmV0dXJuIGVhcmx5LCBwYXJ0aWN1bGFy
bHkgd2hlbiB3ZSdyZSBiZWluZyBhc2tlZCB0byBxdWl0LgorICAgICAgICB3YWl0Rm9yUmVsYXRp
dmVUaW1lKDEuMCk7CisgICAgICAgIGlmIChtX2Jsb2NrRnJlZWluZ1RocmVhZFNob3VsZFF1aXQp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBwcm9jZXNzIHRo
ZSBsaXN0IG9mIGZyZWUgYmxvY2tzLiBLZWVwIGZyZWVpbmcgdW50aWwgaGFsZiBvZiB0aGUKKyAg
ICAgICAgLy8gYmxvY2tzIHRoYXQgYXJlIGN1cnJlbnRseSBvbiB0aGUgbGlzdCBhcmUgZ29uZS4g
QXNzdW1lIHRoYXQgYSBzaXplX3QKKyAgICAgICAgLy8gZmllbGQgY2FuIGJlIGFjY2Vzc2VkIGF0
b21pY2FsbHkuCisgICAgICAgIHNpemVfdCBjdXJyZW50TnVtYmVyT2ZGcmVlQmxvY2tzID0gbV9u
dW1iZXJPZkZyZWVCbG9ja3M7CisgICAgICAgIGlmICghY3VycmVudE51bWJlck9mRnJlZUJsb2Nr
cykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGRlc2ly
ZWROdW1iZXJPZkZyZWVCbG9ja3MgPSBjdXJyZW50TnVtYmVyT2ZGcmVlQmxvY2tzIC8gMjsKKyAg
ICAgICAgCisgICAgICAgIHdoaWxlICghbV9ibG9ja0ZyZWVpbmdUaHJlYWRTaG91bGRRdWl0KSB7
CisgICAgICAgICAgICBNYXJrZWRCbG9jayogYmxvY2s7CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnJlZUJsb2NrTG9jayk7CisgICAgICAgICAg
ICAgICAgaWYgKG1fbnVtYmVyT2ZGcmVlQmxvY2tzIDw9IGRlc2lyZWROdW1iZXJPZkZyZWVCbG9j
a3MpCisgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gMDsKKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSBtX2ZyZWVCbG9ja3MucmVtb3ZlSGVhZCgp
OworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2spOworICAgICAgICAgICAgICAgICAg
ICBtX251bWJlck9mRnJlZUJsb2Nrcy0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFya2VkQmxvY2s6OmRlc3Ryb3ko
YmxvY2spOworICAgICAgICB9CisgICAgfQorfQorI2VuZGlmIC8vICFIRUFQX0ZSRUVfQkxPQ0tT
X0VBR0VSTFkKKwogdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZShzaXpl
X3QgY29zdCkKIHsKICAgICAvLyBPdXIgZnJlcXVlbmN5IG9mIGdhcmJhZ2UgY29sbGVjdGlvbiB0
cmllcyB0byBiYWxhbmNlIG1lbW9yeSB1c2UgYWdhaW5zdCBzcGVlZApAQCAtNjE5LDcgKzcwMiwy
NiBAQCBib29sIEhlYXA6OmlzVmFsaWRBbGxvY2F0aW9uKHNpemVfdCBieXRlCiAKIE1hcmtlZEJs
b2NrKiBIZWFwOjphbGxvY2F0ZUJsb2NrKHNpemVfdCBjZWxsU2l6ZSkKIHsKLSAgICBNYXJrZWRC
bG9jayogYmxvY2sgPSBNYXJrZWRCbG9jazo6Y3JlYXRlKHRoaXMsIGNlbGxTaXplKTsKKyAgICBN
YXJrZWRCbG9jayogYmxvY2s7CisgICAgCisjaWYgSEVBUF9GUkVFX0JMT0NLU19FQUdFUkxZCisg
ICAgYmxvY2sgPSBNYXJrZWRCbG9jazo6Y3JlYXRlKHRoaXMsIGNlbGxTaXplKTsKKyNlbHNlCisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9mcmVlQmxvY2tMb2NrKTsKKyAgICAg
ICAgaWYgKG1fbnVtYmVyT2ZGcmVlQmxvY2tzKSB7CisgICAgICAgICAgICBibG9jayA9IG1fZnJl
ZUJsb2Nrcy5yZW1vdmVIZWFkKCk7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2spOworICAgICAg
ICAgICAgbV9udW1iZXJPZkZyZWVCbG9ja3MtLTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBibG9jayA9IDA7CisgICAgfQorICAgIGlmIChibG9jaykKKyAgICAgICAgYmxvY2stPmluaXRG
b3JDZWxsU2l6ZShjZWxsU2l6ZSk7CisgICAgZWxzZQorICAgICAgICBibG9jayA9IE1hcmtlZEJs
b2NrOjpjcmVhdGUodGhpcywgY2VsbFNpemUpOworI2VuZGlmCisgICAgCiAgICAgbV9ibG9ja3Mu
YWRkKGJsb2NrKTsKIAogICAgIHJldHVybiBibG9jazsKQEAgLTYzMiw3ICs3MzQsMTQgQEAgdm9p
ZCBIZWFwOjpmcmVlQmxvY2tzKE1hcmtlZEJsb2NrKiBoZWFkKQogICAgICAgICBuZXh0ID0gYmxv
Y2stPm5leHQoKTsKIAogICAgICAgICBtX2Jsb2Nrcy5yZW1vdmUoYmxvY2spOworICAgICAgICBi
bG9jay0+cmVzZXQoKTsKKyNpZiBIRUFQX0ZSRUVfQkxPQ0tTX0VBR0VSTFkKICAgICAgICAgTWFy
a2VkQmxvY2s6OmRlc3Ryb3koYmxvY2spOworI2Vsc2UKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fZnJlZUJsb2NrTG9jayk7CisgICAgICAgIG1fZnJlZUJsb2Nrcy5hcHBlbmQoYmxvY2sp
OworICAgICAgICBtX251bWJlck9mRnJlZUJsb2NrcysrOworI2VuZGlmCiAgICAgfQogfQogCkBA
IC02NDMsNiArNzUyLDMwIEBAIHZvaWQgSGVhcDo6c2hyaW5rKCkKICAgICBmcmVlQmxvY2tzKGZv
ckVhY2hCbG9jayh0YWtlSWZFbXB0eSkpOwogfQogCisjaWYgIUhFQVBfRlJFRV9CTE9DS1NfRUFH
RVJMWQordm9pZCBIZWFwOjpyZWxlYXNlRnJlZUJsb2NrcygpCit7CisgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrOworICAgICAgICB7CisgICAgICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIobV9mcmVlQmxvY2tMb2NrKTsKKyAgICAgICAgICAgIGlmICghbV9u
dW1iZXJPZkZyZWVCbG9ja3MpCisgICAgICAgICAgICAgICAgYmxvY2sgPSAwOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYmxvY2sgPSBtX2ZyZWVCbG9ja3MucmVtb3ZlSGVh
ZCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChibG9jayk7CisgICAgICAgICAgICAgICAgbV9u
dW1iZXJPZkZyZWVCbG9ja3MtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAg
ICAgTWFya2VkQmxvY2s6OmRlc3Ryb3koYmxvY2spOworICAgIH0KK30KKyNlbmRpZgorCiAjaWYg
RU5BQkxFKEdHQykKIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyU2xvd0Nhc2UoY29uc3QgSlNDZWxs
KiBvd25lciwgSlNDZWxsKiBjZWxsKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkocmV2aXNpb24gOTE5NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDEyIEBACiAjaW5jbHVkZSA8d3RmL0hhc2hDb3Vu
dGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIAorI2lmIEVOQUJMRShTSU5HTEVf
VEhSRUFERUQpCisjZGVmaW5lIEhFQVBfRlJFRV9CTE9DS1NfRUFHRVJMWSAxCisjZWxzZQorI2Rl
ZmluZSBIRUFQX0ZSRUVfQkxPQ0tTX0VBR0VSTFkgMAorI2VuZGlmCisKIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgR0NBY3Rpdml0eUNhbGxiYWNrOwpAQCAtNTIsNyArNTgsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiBUeXBl
Q291bnRTZXQ7CiAKICAgICBlbnVtIE9wZXJhdGlvbkluUHJvZ3Jlc3MgeyBOb09wZXJhdGlvbiwg
QWxsb2NhdGlvbiwgQ29sbGVjdGlvbiB9OwotCisgICAgCiAgICAgY2xhc3MgSGVhcCB7CiAgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhlYXApOwogICAgIHB1YmxpYzoKQEAgLTE0NCwxNiAr
MTUwLDM0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBlbnVtIFN3ZWVwVG9nZ2xlIHsgRG9O
b3RTd2VlcCwgRG9Td2VlcCB9OwogICAgICAgICB2b2lkIGNvbGxlY3QoU3dlZXBUb2dnbGUpOwog
ICAgICAgICB2b2lkIHNocmluaygpOworICAgICAgICB2b2lkIHJlbGVhc2VGcmVlQmxvY2tzKCk7
CiAgICAgICAgIHZvaWQgc3dlZXAoKTsKIAogICAgICAgICBSZWdpc3RlckZpbGUmIHJlZ2lzdGVy
RmlsZSgpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllclNsb3dDYXNlKGNvbnN0
IEpTQ2VsbCosIEpTQ2VsbCopOworICAgICAgICAKKyNpZiAhSEVBUF9GUkVFX0JMT0NLU19FQUdF
UkxZCisgICAgICAgIHZvaWQgd2FpdEZvclJlbGF0aXZlVGltZVdoaWxlSG9sZGluZ0xvY2soZG91
YmxlIHJlbGF0aXZlKTsKKyAgICAgICAgdm9pZCB3YWl0Rm9yUmVsYXRpdmVUaW1lKGRvdWJsZSBy
ZWxhdGl2ZSk7CisgICAgICAgIHZvaWQgYmxvY2tGcmVlaW5nVGhyZWFkTWFpbigpOworICAgICAg
ICBzdGF0aWMgdm9pZCogYmxvY2tGcmVlaW5nVGhyZWFkU3RhcnRGdW5jKHZvaWQqIGhlYXApOwor
I2VuZGlmCiAKICAgICAgICAgT3BlcmF0aW9uSW5Qcm9ncmVzcyBtX29wZXJhdGlvbkluUHJvZ3Jl
c3M7CiAgICAgICAgIE5ld1NwYWNlIG1fbmV3U3BhY2U7CiAgICAgICAgIE1hcmtlZEJsb2NrU2V0
IG1fYmxvY2tzOwogCisjaWYgIUhFQVBfRlJFRV9CTE9DS1NfRUFHRVJMWQorICAgICAgICBEb3Vi
bHlMaW5rZWRMaXN0PE1hcmtlZEJsb2NrPiBtX2ZyZWVCbG9ja3M7CisgICAgICAgIHNpemVfdCBt
X251bWJlck9mRnJlZUJsb2NrczsKKyAgICAgICAgCisgICAgICAgIFRocmVhZElkZW50aWZpZXIg
bV9ibG9ja0ZyZWVpbmdUaHJlYWQ7CisgICAgICAgIE11dGV4IG1fZnJlZUJsb2NrTG9jazsKKyAg
ICAgICAgVGhyZWFkQ29uZGl0aW9uIG1fZnJlZUJsb2NrQ29uZGl0aW9uOworICAgICAgICBib29s
IG1fYmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxkUXVpdDsKKyNlbmRpZgorCiAgICAgICAgIHNpemVf
dCBtX2V4dHJhQ29zdDsKIAogICAgICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0ZWRWYWx1
ZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShy
ZXZpc2lvbiA5MTk3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsNiBAQCBNYXJrZWRCbG9jayogTWFya2Vk
QmxvY2s6OmNyZWF0ZShIZWFwKiBoCiAKIHZvaWQgTWFya2VkQmxvY2s6OmRlc3Ryb3koTWFya2Vk
QmxvY2sqIGJsb2NrKQogewotICAgIGZvciAoc2l6ZV90IGkgPSBibG9jay0+Zmlyc3RBdG9tKCk7
IGkgPCBibG9jay0+bV9lbmRBdG9tOyBpICs9IGJsb2NrLT5tX2F0b21zUGVyQ2VsbCkKLSAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPigmYmxvY2stPmF0b21zKClbaV0pLT5+SlNDZWxs
KCk7CiAgICAgYmxvY2stPm1fYWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7CiB9CiAKQEAgLTUzLDEw
ICs1MSwyMSBAQCBNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soY29uc3QgUGFnZUFsbG9jCiAgICAg
LCBtX2FsbG9jYXRpb24oYWxsb2NhdGlvbikKICAgICAsIG1faGVhcChoZWFwKQogeworICAgIGlu
aXRGb3JDZWxsU2l6ZShjZWxsU2l6ZSk7Cit9CisKK3ZvaWQgTWFya2VkQmxvY2s6OmluaXRGb3JD
ZWxsU2l6ZShzaXplX3QgY2VsbFNpemUpCit7CiAgICAgbV9hdG9tc1BlckNlbGwgPSAoY2VsbFNp
emUgKyBhdG9tU2l6ZSAtIDEpIC8gYXRvbVNpemU7CiAgICAgbV9lbmRBdG9tID0gYXRvbXNQZXJC
bG9jayAtIG1fYXRvbXNQZXJDZWxsICsgMTsKIH0KIAordm9pZCBNYXJrZWRCbG9jazo6cmVzZXQo
KQoreworICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSAr
PSBtX2F0b21zUGVyQ2VsbCkKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPigmYXRv
bXMoKVtpXSktPn5KU0NlbGwoKTsKK30KKwogdm9pZCBNYXJrZWRCbG9jazo6c3dlZXAoKQogewog
ICAgIFN0cnVjdHVyZSogZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUgPSBtX2hlYXAtPmdsb2Jh
bERhdGEoKS0+ZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUuZ2V0KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDkxOTc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
OTQsMTIgKzk0LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyB0aGVtLCBhbmQgcmV0
dXJucyBhIGxpbmtlZCBsaXN0IG9mIHRob3NlIGNlbGxzLgogICAgICAgICBGcmVlQ2VsbCogbGF6
eVN3ZWVwKCk7CiAgICAgICAgIAorICAgICAgICB2b2lkIGluaXRGb3JDZWxsU2l6ZShzaXplX3Qg
Y2VsbFNpemUpOworICAgICAgICAKICAgICAgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIGNhbGxlZCBp
bW1lZGlhdGVseSBhZnRlciBhIGJsb2NrIGlzIGNyZWF0ZWQuCiAgICAgICAgIC8vIEJsZXNzaW5n
IGZvciBmYXN0IHBhdGggY3JlYXRlcyBhIGxpbmtlZCBsaXN0LCB3aGlsZSBibGVzc2luZyBmb3IK
ICAgICAgICAgLy8gc2xvdyBwYXRoIGNyZWF0ZXMgZHVtbXkgY2VsbHMuCiAgICAgICAgIEZyZWVD
ZWxsKiBibGVzc05ld0Jsb2NrRm9yRmFzdFBhdGgoKTsKICAgICAgICAgdm9pZCBibGVzc05ld0Js
b2NrRm9yU2xvd1BhdGgoKTsKICAgICAgICAgCisgICAgICAgIHZvaWQgcmVzZXQoKTsKKyAgICAg
ICAgCiAgICAgICAgIC8vIFRoaXMgdW5tYXJrcyBhbGwgY2VsbHMgb24gdGhlIGZyZWUgbGlzdCwg
YW5kIGFsbG9jYXRlcyBkdW1teSBKU0NlbGxzCiAgICAgICAgIC8vIGluIHRoZWlyIHBsYWNlLgog
ICAgICAgICB2b2lkIGNhbm9uaWNhbGl6ZUJsb2NrKEZyZWVDZWxsKiBmaXJzdEZyZWVDZWxsKTsK
</data>
<flag name="review"
          id="97665"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="97666"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102448</attachid>
            <date>2011-07-30 18:03:53 -0700</date>
            <delta_ts>2011-07-30 22:48:58 -0700</delta_ts>
            <desc>the patch (fix conflicts)</desc>
            <filename>lazymemreuse_patch_4.diff</filename>
            <type>text/plain</type>
            <size>10794</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTIwNjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAK
KzIwMTEtMDctMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBU
aGUgSlNDIGdhcmJhZ2UgY29sbGVjdG9yIHJldHVybnMgbWVtb3J5IHRvIHRoZSBvcGVyYXRpbmcg
c3lzdGVtIHRvbworICAgICAgICBlYWdlcmx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIG1lbW9yeSByZXVz
ZSBtb2RlbCBzaW1pbGFyIHRvIHRoZSBvbmUgaW4gRmFzdE1hbGxvYy4KKyAgICAgICAgQSBwZXJp
b2RpYyBzY2F2ZW5nZXIgdGhyZWFkIHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgYW5kIHJldHVybnMg
aGFsZiB0aGUKKyAgICAgICAgZnJlZSBtZW1vcnkgdG8gdGhlIE9TIG9uIGVhY2ggdGltZXIgZmly
ZS4gIE5ldyBibG9jayBhbGxvY2F0aW9ucyBmaXJzdAorICAgICAgICBhdHRlbXB0IHRvIGdldCB0
aGUgbWVtb3J5IGZyb20gdGhlIGNvbGxlY3RvcidzIGludGVybmFsIHBvb2wsIHJldmVydGluZwor
ICAgICAgICB0byBPUyBhbGxvY2F0aW9uIG9ubHkgd2hlbiB0aGlzIHBvb2wgaXMgZW1wdHkuCisK
KyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6fkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpkZXN0cm95KToK
KyAgICAgICAgKEpTQzo6SGVhcDo6d2FpdEZvclJlbGF0aXZlVGltZVdoaWxlSG9sZGluZ0xvY2sp
OgorICAgICAgICAoSlNDOjpIZWFwOjp3YWl0Rm9yUmVsYXRpdmVUaW1lKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YmxvY2tGcmVlaW5nVGhyZWFkU3RhcnRGdW5jKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6YmxvY2tGcmVlaW5nVGhyZWFkTWFpbik6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRl
QmxvY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpmcmVlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6cmVsZWFzZUZyZWVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6ZGVz
dHJveSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjppbml0Rm9yQ2VsbFNpemUpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6cmVzZXQpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKwogMjAxMS0w
Ny0zMCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSB0
aGUgc2l6ZSBvZiBKU0dsb2JhbE9iamVjdCBzbGlnaHRseQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDkyMDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NCwxMCArMjQ0LDI1IEBAIEhlYXA6
OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAgIG1fbmV3U3BhY2Uuc2V0SGln
aFdhdGVyTWFyayhtaW5CeXRlc1BlckN5Y2xlKTsKICAgICAoKm1fYWN0aXZpdHlDYWxsYmFjayko
KTsKKyNpZiAhSEVBUF9GUkVFX0JMT0NLU19FQUdFUkxZCisgICAgbV9udW1iZXJPZkZyZWVCbG9j
a3MgPSAwOworICAgIG1fYmxvY2tGcmVlaW5nVGhyZWFkID0gY3JlYXRlVGhyZWFkKGJsb2NrRnJl
ZWluZ1RocmVhZFN0YXJ0RnVuYywgdGhpcywgIkphdmFTY3JpcHRDb3JlOjpCbG9ja0ZyZWUiKTsK
KyAgICBBU1NFUlQobV9ibG9ja0ZyZWVpbmdUaHJlYWQpOworI2VuZGlmCiB9CiAKIEhlYXA6On5I
ZWFwKCkKIHsKKyNpZiAhSEVBUF9GUkVFX0JMT0NLU19FQUdFUkxZCisgICAgLy8gZGVzdHJveSBv
dXIgdGhyZWFkCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9mcmVlQmxvY2tM
b2NrKTsKKyAgICAgICAgbV9ibG9ja0ZyZWVpbmdUaHJlYWRTaG91bGRRdWl0ID0gdHJ1ZTsKKyAg
ICAgICAgbV9mcmVlQmxvY2tDb25kaXRpb24uYnJvYWRjYXN0KCk7CisgICAgfQorICAgIHdhaXRG
b3JUaHJlYWRDb21wbGV0aW9uKG1fYmxvY2tGcmVlaW5nVGhyZWFkLCAwKTsKKyNlbmRpZgorICAg
IAogICAgIC8vIFRoZSBkZXN0cm95IGZ1bmN0aW9uIG11c3QgYWxyZWFkeSBoYXZlIGJlZW4gY2Fs
bGVkLCBzbyBhc3NlcnQgdGhpcy4KICAgICBBU1NFUlQoIW1fZ2xvYmFsRGF0YSk7CiB9CkBAIC0y
NzksMTAgKzI5NCw3OCBAQCB2b2lkIEhlYXA6OmRlc3Ryb3koKQogCiAgICAgc2hyaW5rKCk7CiAg
ICAgQVNTRVJUKCFzaXplKCkpOworICAgIAorI2lmICFIRUFQX0ZSRUVfQkxPQ0tTX0VBR0VSTFkK
KyAgICByZWxlYXNlRnJlZUJsb2NrcygpOworI2VuZGlmCiAKICAgICBtX2dsb2JhbERhdGEgPSAw
OwogfQogCisjaWYgIUhFQVBfRlJFRV9CTE9DS1NfRUFHRVJMWQordm9pZCBIZWFwOjp3YWl0Rm9y
UmVsYXRpdmVUaW1lV2hpbGVIb2xkaW5nTG9jayhkb3VibGUgcmVsYXRpdmUpCit7CisgICAgaWYg
KG1fYmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxkUXVpdCkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
ZnJlZUJsb2NrQ29uZGl0aW9uLnRpbWVkV2FpdChtX2ZyZWVCbG9ja0xvY2ssIGN1cnJlbnRUaW1l
KCkgKyByZWxhdGl2ZSk7Cit9CisKK3ZvaWQgSGVhcDo6d2FpdEZvclJlbGF0aXZlVGltZShkb3Vi
bGUgcmVsYXRpdmUpCit7CisgICAgLy8gSWYgdGhpcyByZXR1cm5zIGVhcmx5LCB0aGF0J3MgZmlu
ZSwgc28gbG9uZyBhcyBpdCBkb2Vzbid0IGRvIGl0IHRvbworICAgIC8vIGZyZXF1ZW50bHkuIEl0
IHdvdWxkIG9ubHkgYmUgYSBidWcgaWYgdGhpcyBmdW5jdGlvbiBmYWlsZWQgdG8gcmV0dXJuCisg
ICAgLy8gd2hlbiBpdCB3YXMgYXNrZWQgdG8gZG8gc28uCisgICAgCisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fZnJlZUJsb2NrTG9jayk7CisgICAgd2FpdEZvclJlbGF0aXZlVGltZVdoaWxlSG9s
ZGluZ0xvY2socmVsYXRpdmUpOworfQorCit2b2lkKiBIZWFwOjpibG9ja0ZyZWVpbmdUaHJlYWRT
dGFydEZ1bmModm9pZCogaGVhcCkKK3sKKyAgICBzdGF0aWNfY2FzdDxIZWFwKj4oaGVhcCktPmJs
b2NrRnJlZWluZ1RocmVhZE1haW4oKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBIZWFwOjpi
bG9ja0ZyZWVpbmdUaHJlYWRNYWluKCkKK3sKKyAgICB3aGlsZSAoIW1fYmxvY2tGcmVlaW5nVGhy
ZWFkU2hvdWxkUXVpdCkgeworICAgICAgICAvLyBHZW5lcmFsbHkgd2FpdCBmb3Igb25lIHNlY29u
ZCBiZWZvcmUgc2NhdmVuZ2luZyBmcmVlIGJsb2Nrcy4gVGhpcworICAgICAgICAvLyBtYXkgcmV0
dXJuIGVhcmx5LCBwYXJ0aWN1bGFybHkgd2hlbiB3ZSdyZSBiZWluZyBhc2tlZCB0byBxdWl0Lgor
ICAgICAgICB3YWl0Rm9yUmVsYXRpdmVUaW1lKDEuMCk7CisgICAgICAgIGlmIChtX2Jsb2NrRnJl
ZWluZ1RocmVhZFNob3VsZFF1aXQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
ICAgIC8vIE5vdyBwcm9jZXNzIHRoZSBsaXN0IG9mIGZyZWUgYmxvY2tzLiBLZWVwIGZyZWVpbmcg
dW50aWwgaGFsZiBvZiB0aGUKKyAgICAgICAgLy8gYmxvY2tzIHRoYXQgYXJlIGN1cnJlbnRseSBv
biB0aGUgbGlzdCBhcmUgZ29uZS4gQXNzdW1lIHRoYXQgYSBzaXplX3QKKyAgICAgICAgLy8gZmll
bGQgY2FuIGJlIGFjY2Vzc2VkIGF0b21pY2FsbHkuCisgICAgICAgIHNpemVfdCBjdXJyZW50TnVt
YmVyT2ZGcmVlQmxvY2tzID0gbV9udW1iZXJPZkZyZWVCbG9ja3M7CisgICAgICAgIGlmICghY3Vy
cmVudE51bWJlck9mRnJlZUJsb2NrcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAK
KyAgICAgICAgc2l6ZV90IGRlc2lyZWROdW1iZXJPZkZyZWVCbG9ja3MgPSBjdXJyZW50TnVtYmVy
T2ZGcmVlQmxvY2tzIC8gMjsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICghbV9ibG9ja0ZyZWVp
bmdUaHJlYWRTaG91bGRRdWl0KSB7CisgICAgICAgICAgICBNYXJrZWRCbG9jayogYmxvY2s7Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnJlZUJs
b2NrTG9jayk7CisgICAgICAgICAgICAgICAgaWYgKG1fbnVtYmVyT2ZGcmVlQmxvY2tzIDw9IGRl
c2lyZWROdW1iZXJPZkZyZWVCbG9ja3MpCisgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gMDsK
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSBtX2Zy
ZWVCbG9ja3MucmVtb3ZlSGVhZCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2sp
OworICAgICAgICAgICAgICAgICAgICBtX251bWJlck9mRnJlZUJsb2Nrcy0tOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
TWFya2VkQmxvY2s6OmRlc3Ryb3koYmxvY2spOworICAgICAgICB9CisgICAgfQorfQorI2VuZGlm
IC8vICFIRUFQX0ZSRUVfQkxPQ0tTX0VBR0VSTFkKKwogdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1l
bW9yeUNvc3RTbG93Q2FzZShzaXplX3QgY29zdCkKIHsKICAgICAvLyBPdXIgZnJlcXVlbmN5IG9m
IGdhcmJhZ2UgY29sbGVjdGlvbiB0cmllcyB0byBiYWxhbmNlIG1lbW9yeSB1c2UgYWdhaW5zdCBz
cGVlZApAQCAtNjEzLDcgKzY5NiwyNiBAQCBib29sIEhlYXA6OmlzVmFsaWRBbGxvY2F0aW9uKHNp
emVfdCBieXRlCiAKIE1hcmtlZEJsb2NrKiBIZWFwOjphbGxvY2F0ZUJsb2NrKHNpemVfdCBjZWxs
U2l6ZSkKIHsKLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBNYXJrZWRCbG9jazo6Y3JlYXRlKHRo
aXMsIGNlbGxTaXplKTsKKyAgICBNYXJrZWRCbG9jayogYmxvY2s7CisgICAgCisjaWYgSEVBUF9G
UkVFX0JMT0NLU19FQUdFUkxZCisgICAgYmxvY2sgPSBNYXJrZWRCbG9jazo6Y3JlYXRlKHRoaXMs
IGNlbGxTaXplKTsKKyNlbHNlCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9m
cmVlQmxvY2tMb2NrKTsKKyAgICAgICAgaWYgKG1fbnVtYmVyT2ZGcmVlQmxvY2tzKSB7CisgICAg
ICAgICAgICBibG9jayA9IG1fZnJlZUJsb2Nrcy5yZW1vdmVIZWFkKCk7CisgICAgICAgICAgICBB
U1NFUlQoYmxvY2spOworICAgICAgICAgICAgbV9udW1iZXJPZkZyZWVCbG9ja3MtLTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBibG9jayA9IDA7CisgICAgfQorICAgIGlmIChibG9jaykK
KyAgICAgICAgYmxvY2stPmluaXRGb3JDZWxsU2l6ZShjZWxsU2l6ZSk7CisgICAgZWxzZQorICAg
ICAgICBibG9jayA9IE1hcmtlZEJsb2NrOjpjcmVhdGUodGhpcywgY2VsbFNpemUpOworI2VuZGlm
CisgICAgCiAgICAgbV9ibG9ja3MuYWRkKGJsb2NrKTsKIAogICAgIHJldHVybiBibG9jazsKQEAg
LTYyNiw3ICs3MjgsMTQgQEAgdm9pZCBIZWFwOjpmcmVlQmxvY2tzKE1hcmtlZEJsb2NrKiBoZWFk
KQogICAgICAgICBuZXh0ID0gYmxvY2stPm5leHQoKTsKIAogICAgICAgICBtX2Jsb2Nrcy5yZW1v
dmUoYmxvY2spOworICAgICAgICBibG9jay0+cmVzZXQoKTsKKyNpZiBIRUFQX0ZSRUVfQkxPQ0tT
X0VBR0VSTFkKICAgICAgICAgTWFya2VkQmxvY2s6OmRlc3Ryb3koYmxvY2spOworI2Vsc2UKKyAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnJlZUJsb2NrTG9jayk7CisgICAgICAgIG1fZnJl
ZUJsb2Nrcy5hcHBlbmQoYmxvY2spOworICAgICAgICBtX251bWJlck9mRnJlZUJsb2NrcysrOwor
I2VuZGlmCiAgICAgfQogfQogCkBAIC02MzcsNiArNzQ2LDMwIEBAIHZvaWQgSGVhcDo6c2hyaW5r
KCkKICAgICBmcmVlQmxvY2tzKGZvckVhY2hCbG9jayh0YWtlSWZFbXB0eSkpOwogfQogCisjaWYg
IUhFQVBfRlJFRV9CTE9DS1NfRUFHRVJMWQordm9pZCBIZWFwOjpyZWxlYXNlRnJlZUJsb2Nrcygp
Cit7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgTWFya2VkQmxvY2sqIGJsb2NrOworICAg
ICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9mcmVlQmxvY2tMb2NrKTsK
KyAgICAgICAgICAgIGlmICghbV9udW1iZXJPZkZyZWVCbG9ja3MpCisgICAgICAgICAgICAgICAg
YmxvY2sgPSAwOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYmxvY2sgPSBt
X2ZyZWVCbG9ja3MucmVtb3ZlSGVhZCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChibG9jayk7
CisgICAgICAgICAgICAgICAgbV9udW1iZXJPZkZyZWVCbG9ja3MtLTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICAgICAgTWFya2VkQmxvY2s6OmRlc3Ryb3koYmxvY2spOworICAg
IH0KK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKEdHQykKIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVy
U2xvd0Nhc2UoY29uc3QgSlNDZWxsKiBvd25lciwgSlNDZWxsKiBjZWxsKQogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gOTIwNjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDEyIEBACiAj
aW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
IAorI2lmIEVOQUJMRShTSU5HTEVfVEhSRUFERUQpCisjZGVmaW5lIEhFQVBfRlJFRV9CTE9DS1Nf
RUFHRVJMWSAxCisjZWxzZQorI2RlZmluZSBIRUFQX0ZSRUVfQkxPQ0tTX0VBR0VSTFkgMAorI2Vu
ZGlmCisKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgR0NBY3Rpdml0eUNhbGxiYWNrOwpA
QCAtNTIsNyArNTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB0eXBlZGVmIEhhc2hDb3VudGVk
U2V0PGNvbnN0IGNoYXIqPiBUeXBlQ291bnRTZXQ7CiAKICAgICBlbnVtIE9wZXJhdGlvbkluUHJv
Z3Jlc3MgeyBOb09wZXJhdGlvbiwgQWxsb2NhdGlvbiwgQ29sbGVjdGlvbiB9OwotCisgICAgCiAg
ICAgY2xhc3MgSGVhcCB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhlYXApOwogICAg
IHB1YmxpYzoKQEAgLTE0NCwxNiArMTUwLDM0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBl
bnVtIFN3ZWVwVG9nZ2xlIHsgRG9Ob3RTd2VlcCwgRG9Td2VlcCB9OwogICAgICAgICB2b2lkIGNv
bGxlY3QoU3dlZXBUb2dnbGUpOwogICAgICAgICB2b2lkIHNocmluaygpOworICAgICAgICB2b2lk
IHJlbGVhc2VGcmVlQmxvY2tzKCk7CiAgICAgICAgIHZvaWQgc3dlZXAoKTsKIAogICAgICAgICBS
ZWdpc3RlckZpbGUmIHJlZ2lzdGVyRmlsZSgpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRl
QmFycmllclNsb3dDYXNlKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopOworICAgICAgICAKKyNpZiAh
SEVBUF9GUkVFX0JMT0NLU19FQUdFUkxZCisgICAgICAgIHZvaWQgd2FpdEZvclJlbGF0aXZlVGlt
ZVdoaWxlSG9sZGluZ0xvY2soZG91YmxlIHJlbGF0aXZlKTsKKyAgICAgICAgdm9pZCB3YWl0Rm9y
UmVsYXRpdmVUaW1lKGRvdWJsZSByZWxhdGl2ZSk7CisgICAgICAgIHZvaWQgYmxvY2tGcmVlaW5n
VGhyZWFkTWFpbigpOworICAgICAgICBzdGF0aWMgdm9pZCogYmxvY2tGcmVlaW5nVGhyZWFkU3Rh
cnRGdW5jKHZvaWQqIGhlYXApOworI2VuZGlmCiAKICAgICAgICAgT3BlcmF0aW9uSW5Qcm9ncmVz
cyBtX29wZXJhdGlvbkluUHJvZ3Jlc3M7CiAgICAgICAgIE5ld1NwYWNlIG1fbmV3U3BhY2U7CiAg
ICAgICAgIE1hcmtlZEJsb2NrU2V0IG1fYmxvY2tzOwogCisjaWYgIUhFQVBfRlJFRV9CTE9DS1Nf
RUFHRVJMWQorICAgICAgICBEb3VibHlMaW5rZWRMaXN0PE1hcmtlZEJsb2NrPiBtX2ZyZWVCbG9j
a3M7CisgICAgICAgIHNpemVfdCBtX251bWJlck9mRnJlZUJsb2NrczsKKyAgICAgICAgCisgICAg
ICAgIFRocmVhZElkZW50aWZpZXIgbV9ibG9ja0ZyZWVpbmdUaHJlYWQ7CisgICAgICAgIE11dGV4
IG1fZnJlZUJsb2NrTG9jazsKKyAgICAgICAgVGhyZWFkQ29uZGl0aW9uIG1fZnJlZUJsb2NrQ29u
ZGl0aW9uOworICAgICAgICBib29sIG1fYmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxkUXVpdDsKKyNl
bmRpZgorCiAgICAgICAgIHNpemVfdCBtX2V4dHJhQ29zdDsKIAogICAgICAgICBQcm90ZWN0Q291
bnRTZXQgbV9wcm90ZWN0ZWRWYWx1ZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiA5MjA2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsNiBA
QCBNYXJrZWRCbG9jayogTWFya2VkQmxvY2s6OmNyZWF0ZShIZWFwKiBoCiAKIHZvaWQgTWFya2Vk
QmxvY2s6OmRlc3Ryb3koTWFya2VkQmxvY2sqIGJsb2NrKQogewotICAgIGZvciAoc2l6ZV90IGkg
PSBibG9jay0+Zmlyc3RBdG9tKCk7IGkgPCBibG9jay0+bV9lbmRBdG9tOyBpICs9IGJsb2NrLT5t
X2F0b21zUGVyQ2VsbCkKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPigmYmxvY2st
PmF0b21zKClbaV0pLT5+SlNDZWxsKCk7CiAgICAgYmxvY2stPm1fYWxsb2NhdGlvbi5kZWFsbG9j
YXRlKCk7CiB9CiAKQEAgLTUyLDEwICs1MCwyMSBAQCBNYXJrZWRCbG9jazo6TWFya2VkQmxvY2so
Y29uc3QgUGFnZUFsbG9jCiAgICAgLCBtX2FsbG9jYXRpb24oYWxsb2NhdGlvbikKICAgICAsIG1f
aGVhcChoZWFwKQogeworICAgIGluaXRGb3JDZWxsU2l6ZShjZWxsU2l6ZSk7Cit9CisKK3ZvaWQg
TWFya2VkQmxvY2s6OmluaXRGb3JDZWxsU2l6ZShzaXplX3QgY2VsbFNpemUpCit7CiAgICAgbV9h
dG9tc1BlckNlbGwgPSAoY2VsbFNpemUgKyBhdG9tU2l6ZSAtIDEpIC8gYXRvbVNpemU7CiAgICAg
bV9lbmRBdG9tID0gYXRvbXNQZXJCbG9jayAtIG1fYXRvbXNQZXJDZWxsICsgMTsKIH0KIAordm9p
ZCBNYXJrZWRCbG9jazo6cmVzZXQoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20o
KTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkKKyAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxKU0NlbGwqPigmYXRvbXMoKVtpXSktPn5KU0NlbGwoKTsKK30KKwogdm9pZCBNYXJr
ZWRCbG9jazo6c3dlZXAoKQogewogICAgIFN0cnVjdHVyZSogZHVtbXlNYXJrYWJsZUNlbGxTdHJ1
Y3R1cmUgPSBtX2hlYXAtPmdsb2JhbERhdGEoKS0+ZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUu
Z2V0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJl
dmlzaW9uIDkyMDYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTIgKzk0LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAvLyB0aGVtLCBhbmQgcmV0dXJucyBhIGxpbmtlZCBsaXN0IG9mIHRob3NlIGNlbGxzLgog
ICAgICAgICBGcmVlQ2VsbCogbGF6eVN3ZWVwKCk7CiAgICAgICAgIAorICAgICAgICB2b2lkIGlu
aXRGb3JDZWxsU2l6ZShzaXplX3QgY2VsbFNpemUpOworICAgICAgICAKICAgICAgICAgLy8gVGhl
c2Ugc2hvdWxkIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBhIGJsb2NrIGlzIGNyZWF0ZWQu
CiAgICAgICAgIC8vIEJsZXNzaW5nIGZvciBmYXN0IHBhdGggY3JlYXRlcyBhIGxpbmtlZCBsaXN0
LCB3aGlsZSBibGVzc2luZyBmb3IKICAgICAgICAgLy8gc2xvdyBwYXRoIGNyZWF0ZXMgZHVtbXkg
Y2VsbHMuCiAgICAgICAgIEZyZWVDZWxsKiBibGVzc05ld0Jsb2NrRm9yRmFzdFBhdGgoKTsKICAg
ICAgICAgdm9pZCBibGVzc05ld0Jsb2NrRm9yU2xvd1BhdGgoKTsKICAgICAgICAgCisgICAgICAg
IHZvaWQgcmVzZXQoKTsKKyAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgdW5tYXJrcyBhbGwgY2Vs
bHMgb24gdGhlIGZyZWUgbGlzdCwgYW5kIGFsbG9jYXRlcyBkdW1teSBKU0NlbGxzCiAgICAgICAg
IC8vIGluIHRoZWlyIHBsYWNlLgogICAgICAgICB2b2lkIGNhbm9uaWNhbGl6ZUJsb2NrKEZyZWVD
ZWxsKiBmaXJzdEZyZWVDZWxsKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102453</attachid>
            <date>2011-07-30 22:48:58 -0700</date>
            <delta_ts>2011-07-30 22:50:57 -0700</delta_ts>
            <desc>the patch (use the ENABLE() thingy)</desc>
            <filename>lazymemreuse_patch_5.diff</filename>
            <type>text/plain</type>
            <size>11086</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTIwNjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAK
KzIwMTEtMDctMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBU
aGUgSlNDIGdhcmJhZ2UgY29sbGVjdG9yIHJldHVybnMgbWVtb3J5IHRvIHRoZSBvcGVyYXRpbmcg
c3lzdGVtIHRvbworICAgICAgICBlYWdlcmx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIG1lbW9yeSByZXVz
ZSBtb2RlbCBzaW1pbGFyIHRvIHRoZSBvbmUgaW4gRmFzdE1hbGxvYy4KKyAgICAgICAgQSBwZXJp
b2RpYyBzY2F2ZW5nZXIgdGhyZWFkIHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgYW5kIHJldHVybnMg
aGFsZiB0aGUKKyAgICAgICAgZnJlZSBtZW1vcnkgdG8gdGhlIE9TIG9uIGVhY2ggdGltZXIgZmly
ZS4gIE5ldyBibG9jayBhbGxvY2F0aW9ucyBmaXJzdAorICAgICAgICBhdHRlbXB0IHRvIGdldCB0
aGUgbWVtb3J5IGZyb20gdGhlIGNvbGxlY3RvcidzIGludGVybmFsIHBvb2wsIHJldmVydGluZwor
ICAgICAgICB0byBPUyBhbGxvY2F0aW9uIG9ubHkgd2hlbiB0aGlzIHBvb2wgaXMgZW1wdHkuCisK
KyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6fkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpkZXN0cm95KToK
KyAgICAgICAgKEpTQzo6SGVhcDo6d2FpdEZvclJlbGF0aXZlVGltZVdoaWxlSG9sZGluZ0xvY2sp
OgorICAgICAgICAoSlNDOjpIZWFwOjp3YWl0Rm9yUmVsYXRpdmVUaW1lKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YmxvY2tGcmVlaW5nVGhyZWFkU3RhcnRGdW5jKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6YmxvY2tGcmVlaW5nVGhyZWFkTWFpbik6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRl
QmxvY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpmcmVlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6cmVsZWFzZUZyZWVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6ZGVz
dHJveSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjppbml0Rm9yQ2VsbFNpemUpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6cmVzZXQpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKwogMjAxMS0w
Ny0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZW1vdmUgaW5jbHVzaW9uIG9mIE1haW5UaHJlYWQuaCBmcm9tIFRocmVhZGluZy5oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gOTIwNjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDEwICsy
NDQsMjUgQEAgSGVhcDo6SGVhcChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgbV9u
ZXdTcGFjZS5zZXRIaWdoV2F0ZXJNYXJrKG1pbkJ5dGVzUGVyQ3ljbGUpOwogICAgICgqbV9hY3Rp
dml0eUNhbGxiYWNrKSgpOworI2lmIEVOQUJMRShMQVpZX0JMT0NLX0ZSRUVJTkcpCisgICAgbV9u
dW1iZXJPZkZyZWVCbG9ja3MgPSAwOworICAgIG1fYmxvY2tGcmVlaW5nVGhyZWFkID0gY3JlYXRl
VGhyZWFkKGJsb2NrRnJlZWluZ1RocmVhZFN0YXJ0RnVuYywgdGhpcywgIkphdmFTY3JpcHRDb3Jl
OjpCbG9ja0ZyZWUiKTsKKyAgICBBU1NFUlQobV9ibG9ja0ZyZWVpbmdUaHJlYWQpOworI2VuZGlm
CiB9CiAKIEhlYXA6On5IZWFwKCkKIHsKKyNpZiBFTkFCTEUoTEFaWV9CTE9DS19GUkVFSU5HKQor
ICAgIC8vIGRlc3Ryb3kgb3VyIHRocmVhZAorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fZnJlZUJsb2NrTG9jayk7CisgICAgICAgIG1fYmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxk
UXVpdCA9IHRydWU7CisgICAgICAgIG1fZnJlZUJsb2NrQ29uZGl0aW9uLmJyb2FkY2FzdCgpOwor
ICAgIH0KKyAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX2Jsb2NrRnJlZWluZ1RocmVhZCwg
MCk7CisjZW5kaWYKKyAgICAKICAgICAvLyBUaGUgZGVzdHJveSBmdW5jdGlvbiBtdXN0IGFscmVh
ZHkgaGF2ZSBiZWVuIGNhbGxlZCwgc28gYXNzZXJ0IHRoaXMuCiAgICAgQVNTRVJUKCFtX2dsb2Jh
bERhdGEpOwogfQpAQCAtMjc5LDEwICsyOTQsNzggQEAgdm9pZCBIZWFwOjpkZXN0cm95KCkKIAog
ICAgIHNocmluaygpOwogICAgIEFTU0VSVCghc2l6ZSgpKTsKKyAgICAKKyNpZiBFTkFCTEUoTEFa
WV9CTE9DS19GUkVFSU5HKQorICAgIHJlbGVhc2VGcmVlQmxvY2tzKCk7CisjZW5kaWYKIAogICAg
IG1fZ2xvYmFsRGF0YSA9IDA7CiB9CiAKKyNpZiBFTkFCTEUoTEFaWV9CTE9DS19GUkVFSU5HKQor
dm9pZCBIZWFwOjp3YWl0Rm9yUmVsYXRpdmVUaW1lV2hpbGVIb2xkaW5nTG9jayhkb3VibGUgcmVs
YXRpdmUpCit7CisgICAgaWYgKG1fYmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxkUXVpdCkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fZnJlZUJsb2NrQ29uZGl0aW9uLnRpbWVkV2FpdChtX2ZyZWVCbG9j
a0xvY2ssIGN1cnJlbnRUaW1lKCkgKyByZWxhdGl2ZSk7Cit9CisKK3ZvaWQgSGVhcDo6d2FpdEZv
clJlbGF0aXZlVGltZShkb3VibGUgcmVsYXRpdmUpCit7CisgICAgLy8gSWYgdGhpcyByZXR1cm5z
IGVhcmx5LCB0aGF0J3MgZmluZSwgc28gbG9uZyBhcyBpdCBkb2Vzbid0IGRvIGl0IHRvbworICAg
IC8vIGZyZXF1ZW50bHkuIEl0IHdvdWxkIG9ubHkgYmUgYSBidWcgaWYgdGhpcyBmdW5jdGlvbiBm
YWlsZWQgdG8gcmV0dXJuCisgICAgLy8gd2hlbiBpdCB3YXMgYXNrZWQgdG8gZG8gc28uCisgICAg
CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnJlZUJsb2NrTG9jayk7CisgICAgd2FpdEZvclJl
bGF0aXZlVGltZVdoaWxlSG9sZGluZ0xvY2socmVsYXRpdmUpOworfQorCit2b2lkKiBIZWFwOjpi
bG9ja0ZyZWVpbmdUaHJlYWRTdGFydEZ1bmModm9pZCogaGVhcCkKK3sKKyAgICBzdGF0aWNfY2Fz
dDxIZWFwKj4oaGVhcCktPmJsb2NrRnJlZWluZ1RocmVhZE1haW4oKTsKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBIZWFwOjpibG9ja0ZyZWVpbmdUaHJlYWRNYWluKCkKK3sKKyAgICB3aGlsZSAo
IW1fYmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxkUXVpdCkgeworICAgICAgICAvLyBHZW5lcmFsbHkg
d2FpdCBmb3Igb25lIHNlY29uZCBiZWZvcmUgc2NhdmVuZ2luZyBmcmVlIGJsb2Nrcy4gVGhpcwor
ICAgICAgICAvLyBtYXkgcmV0dXJuIGVhcmx5LCBwYXJ0aWN1bGFybHkgd2hlbiB3ZSdyZSBiZWlu
ZyBhc2tlZCB0byBxdWl0LgorICAgICAgICB3YWl0Rm9yUmVsYXRpdmVUaW1lKDEuMCk7CisgICAg
ICAgIGlmIChtX2Jsb2NrRnJlZWluZ1RocmVhZFNob3VsZFF1aXQpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBwcm9jZXNzIHRoZSBsaXN0IG9mIGZyZWUgYmxv
Y2tzLiBLZWVwIGZyZWVpbmcgdW50aWwgaGFsZiBvZiB0aGUKKyAgICAgICAgLy8gYmxvY2tzIHRo
YXQgYXJlIGN1cnJlbnRseSBvbiB0aGUgbGlzdCBhcmUgZ29uZS4gQXNzdW1lIHRoYXQgYSBzaXpl
X3QKKyAgICAgICAgLy8gZmllbGQgY2FuIGJlIGFjY2Vzc2VkIGF0b21pY2FsbHkuCisgICAgICAg
IHNpemVfdCBjdXJyZW50TnVtYmVyT2ZGcmVlQmxvY2tzID0gbV9udW1iZXJPZkZyZWVCbG9ja3M7
CisgICAgICAgIGlmICghY3VycmVudE51bWJlck9mRnJlZUJsb2NrcykKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGRlc2lyZWROdW1iZXJPZkZyZWVCbG9j
a3MgPSBjdXJyZW50TnVtYmVyT2ZGcmVlQmxvY2tzIC8gMjsKKyAgICAgICAgCisgICAgICAgIHdo
aWxlICghbV9ibG9ja0ZyZWVpbmdUaHJlYWRTaG91bGRRdWl0KSB7CisgICAgICAgICAgICBNYXJr
ZWRCbG9jayogYmxvY2s7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fZnJlZUJsb2NrTG9jayk7CisgICAgICAgICAgICAgICAgaWYgKG1fbnVtYmVy
T2ZGcmVlQmxvY2tzIDw9IGRlc2lyZWROdW1iZXJPZkZyZWVCbG9ja3MpCisgICAgICAgICAgICAg
ICAgICAgIGJsb2NrID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgYmxvY2sgPSBtX2ZyZWVCbG9ja3MucmVtb3ZlSGVhZCgpOworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoYmxvY2spOworICAgICAgICAgICAgICAgICAgICBtX251bWJlck9mRnJlZUJs
b2Nrcy0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTWFya2VkQmxvY2s6OmRlc3Ryb3koYmxvY2spOworICAgICAgICB9
CisgICAgfQorfQorI2VuZGlmIC8vIEVOQUJMRShMQVpZX0JMT0NLX0ZSRUVJTkcpCisKIHZvaWQg
SGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0U2xvd0Nhc2Uoc2l6ZV90IGNvc3QpCiB7CiAgICAg
Ly8gT3VyIGZyZXF1ZW5jeSBvZiBnYXJiYWdlIGNvbGxlY3Rpb24gdHJpZXMgdG8gYmFsYW5jZSBt
ZW1vcnkgdXNlIGFnYWluc3Qgc3BlZWQKQEAgLTYxMyw3ICs2OTYsMjYgQEAgYm9vbCBIZWFwOjpp
c1ZhbGlkQWxsb2NhdGlvbihzaXplX3QgYnl0ZQogCiBNYXJrZWRCbG9jayogSGVhcDo6YWxsb2Nh
dGVCbG9jayhzaXplX3QgY2VsbFNpemUpCiB7Ci0gICAgTWFya2VkQmxvY2sqIGJsb2NrID0gTWFy
a2VkQmxvY2s6OmNyZWF0ZSh0aGlzLCBjZWxsU2l6ZSk7CisgICAgTWFya2VkQmxvY2sqIGJsb2Nr
OworICAgIAorI2lmICFFTkFCTEUoTEFaWV9CTE9DS19GUkVFSU5HKQorICAgIGJsb2NrID0gTWFy
a2VkQmxvY2s6OmNyZWF0ZSh0aGlzLCBjZWxsU2l6ZSk7CisjZWxzZQorICAgIHsKKyAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnJlZUJsb2NrTG9jayk7CisgICAgICAgIGlmIChtX251bWJl
ck9mRnJlZUJsb2NrcykgeworICAgICAgICAgICAgYmxvY2sgPSBtX2ZyZWVCbG9ja3MucmVtb3Zl
SGVhZCgpOworICAgICAgICAgICAgQVNTRVJUKGJsb2NrKTsKKyAgICAgICAgICAgIG1fbnVtYmVy
T2ZGcmVlQmxvY2tzLS07CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYmxvY2sgPSAwOwor
ICAgIH0KKyAgICBpZiAoYmxvY2spCisgICAgICAgIGJsb2NrLT5pbml0Rm9yQ2VsbFNpemUoY2Vs
bFNpemUpOworICAgIGVsc2UKKyAgICAgICAgYmxvY2sgPSBNYXJrZWRCbG9jazo6Y3JlYXRlKHRo
aXMsIGNlbGxTaXplKTsKKyNlbmRpZgorICAgIAogICAgIG1fYmxvY2tzLmFkZChibG9jayk7CiAK
ICAgICByZXR1cm4gYmxvY2s7CkBAIC02MjYsNyArNzI4LDE0IEBAIHZvaWQgSGVhcDo6ZnJlZUJs
b2NrcyhNYXJrZWRCbG9jayogaGVhZCkKICAgICAgICAgbmV4dCA9IGJsb2NrLT5uZXh0KCk7CiAK
ICAgICAgICAgbV9ibG9ja3MucmVtb3ZlKGJsb2NrKTsKKyAgICAgICAgYmxvY2stPnJlc2V0KCk7
CisjaWYgIUVOQUJMRShMQVpZX0JMT0NLX0ZSRUVJTkcpCiAgICAgICAgIE1hcmtlZEJsb2NrOjpk
ZXN0cm95KGJsb2NrKTsKKyNlbHNlCisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2ZyZWVC
bG9ja0xvY2spOworICAgICAgICBtX2ZyZWVCbG9ja3MuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAg
bV9udW1iZXJPZkZyZWVCbG9ja3MrKzsKKyNlbmRpZgogICAgIH0KIH0KIApAQCAtNjM3LDYgKzc0
NiwzMCBAQCB2b2lkIEhlYXA6OnNocmluaygpCiAgICAgZnJlZUJsb2Nrcyhmb3JFYWNoQmxvY2so
dGFrZUlmRW1wdHkpKTsKIH0KIAorI2lmIEVOQUJMRShMQVpZX0JMT0NLX0ZSRUVJTkcpCit2b2lk
IEhlYXA6OnJlbGVhc2VGcmVlQmxvY2tzKCkKK3sKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICBNYXJrZWRCbG9jayogYmxvY2s7CisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX2ZyZWVCbG9ja0xvY2spOworICAgICAgICAgICAgaWYgKCFtX251bWJlck9mRnJl
ZUJsb2NrcykKKyAgICAgICAgICAgICAgICBibG9jayA9IDA7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBibG9jayA9IG1fZnJlZUJsb2Nrcy5yZW1vdmVIZWFkKCk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGJsb2NrKTsKKyAgICAgICAgICAgICAgICBtX251bWJlck9mRnJl
ZUJsb2Nrcy0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBNYXJrZWRC
bG9jazo6ZGVzdHJveShibG9jayk7CisgICAgfQorfQorI2VuZGlmCisKICNpZiBFTkFCTEUoR0dD
KQogdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJTbG93Q2FzZShjb25zdCBKU0NlbGwqIG93bmVyLCBK
U0NlbGwqIGNlbGwpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lv
biA5MjA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB0eXBlZGVmIEhhc2hD
b3VudGVkU2V0PGNvbnN0IGNoYXIqPiBUeXBlQ291bnRTZXQ7CiAKICAgICBlbnVtIE9wZXJhdGlv
bkluUHJvZ3Jlc3MgeyBOb09wZXJhdGlvbiwgQWxsb2NhdGlvbiwgQ29sbGVjdGlvbiB9OwotCisg
ICAgCiAgICAgY2xhc3MgSGVhcCB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhlYXAp
OwogICAgIHB1YmxpYzoKQEAgLTE0NCwxNiArMTQ0LDM0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBlbnVtIFN3ZWVwVG9nZ2xlIHsgRG9Ob3RTd2VlcCwgRG9Td2VlcCB9OwogICAgICAgICB2
b2lkIGNvbGxlY3QoU3dlZXBUb2dnbGUpOwogICAgICAgICB2b2lkIHNocmluaygpOworICAgICAg
ICB2b2lkIHJlbGVhc2VGcmVlQmxvY2tzKCk7CiAgICAgICAgIHZvaWQgc3dlZXAoKTsKIAogICAg
ICAgICBSZWdpc3RlckZpbGUmIHJlZ2lzdGVyRmlsZSgpOwogCiAgICAgICAgIHN0YXRpYyB2b2lk
IHdyaXRlQmFycmllclNsb3dDYXNlKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopOworICAgICAgICAK
KyNpZiBFTkFCTEUoTEFaWV9CTE9DS19GUkVFSU5HKQorICAgICAgICB2b2lkIHdhaXRGb3JSZWxh
dGl2ZVRpbWVXaGlsZUhvbGRpbmdMb2NrKGRvdWJsZSByZWxhdGl2ZSk7CisgICAgICAgIHZvaWQg
d2FpdEZvclJlbGF0aXZlVGltZShkb3VibGUgcmVsYXRpdmUpOworICAgICAgICB2b2lkIGJsb2Nr
RnJlZWluZ1RocmVhZE1haW4oKTsKKyAgICAgICAgc3RhdGljIHZvaWQqIGJsb2NrRnJlZWluZ1Ro
cmVhZFN0YXJ0RnVuYyh2b2lkKiBoZWFwKTsKKyNlbmRpZgogCiAgICAgICAgIE9wZXJhdGlvbklu
UHJvZ3Jlc3MgbV9vcGVyYXRpb25JblByb2dyZXNzOwogICAgICAgICBOZXdTcGFjZSBtX25ld1Nw
YWNlOwogICAgICAgICBNYXJrZWRCbG9ja1NldCBtX2Jsb2NrczsKIAorI2lmIEVOQUJMRShMQVpZ
X0JMT0NLX0ZSRUVJTkcpCisgICAgICAgIERvdWJseUxpbmtlZExpc3Q8TWFya2VkQmxvY2s+IG1f
ZnJlZUJsb2NrczsKKyAgICAgICAgc2l6ZV90IG1fbnVtYmVyT2ZGcmVlQmxvY2tzOworICAgICAg
ICAKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX2Jsb2NrRnJlZWluZ1RocmVhZDsKKyAgICAg
ICAgTXV0ZXggbV9mcmVlQmxvY2tMb2NrOworICAgICAgICBUaHJlYWRDb25kaXRpb24gbV9mcmVl
QmxvY2tDb25kaXRpb247CisgICAgICAgIGJvb2wgbV9ibG9ja0ZyZWVpbmdUaHJlYWRTaG91bGRR
dWl0OworI2VuZGlmCisKICAgICAgICAgc2l6ZV90IG1fZXh0cmFDb3N0OwogCiAgICAgICAgIFBy
b3RlY3RDb3VudFNldCBtX3Byb3RlY3RlZFZhbHVlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDkyMDY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4
ICs0Miw2IEBAIE1hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6Y3JlYXRlKEhlYXAqIGgKIAogdm9p
ZCBNYXJrZWRCbG9jazo6ZGVzdHJveShNYXJrZWRCbG9jayogYmxvY2spCiB7Ci0gICAgZm9yIChz
aXplX3QgaSA9IGJsb2NrLT5maXJzdEF0b20oKTsgaSA8IGJsb2NrLT5tX2VuZEF0b207IGkgKz0g
YmxvY2stPm1fYXRvbXNQZXJDZWxsKQotICAgICAgICByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+
KCZibG9jay0+YXRvbXMoKVtpXSktPn5KU0NlbGwoKTsKICAgICBibG9jay0+bV9hbGxvY2F0aW9u
LmRlYWxsb2NhdGUoKTsKIH0KIApAQCAtNTIsMTAgKzUwLDIxIEBAIE1hcmtlZEJsb2NrOjpNYXJr
ZWRCbG9jayhjb25zdCBQYWdlQWxsb2MKICAgICAsIG1fYWxsb2NhdGlvbihhbGxvY2F0aW9uKQog
ICAgICwgbV9oZWFwKGhlYXApCiB7CisgICAgaW5pdEZvckNlbGxTaXplKGNlbGxTaXplKTsKK30K
Kwordm9pZCBNYXJrZWRCbG9jazo6aW5pdEZvckNlbGxTaXplKHNpemVfdCBjZWxsU2l6ZSkKK3sK
ICAgICBtX2F0b21zUGVyQ2VsbCA9IChjZWxsU2l6ZSArIGF0b21TaXplIC0gMSkgLyBhdG9tU2l6
ZTsKICAgICBtX2VuZEF0b20gPSBhdG9tc1BlckJsb2NrIC0gbV9hdG9tc1BlckNlbGwgKyAxOwog
fQogCit2b2lkIE1hcmtlZEJsb2NrOjpyZXNldCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IGZp
cnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKQorICAgICAgICBy
ZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KCZhdG9tcygpW2ldKS0+fkpTQ2VsbCgpOworfQorCiB2
b2lkIE1hcmtlZEJsb2NrOjpzd2VlcCgpCiB7CiAgICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxl
Q2VsbFN0cnVjdHVyZSA9IG1faGVhcC0+Z2xvYmFsRGF0YSgpLT5kdW1teU1hcmthYmxlQ2VsbFN0
cnVjdHVyZS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suaAkocmV2aXNpb24gOTIwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMiArOTQsMTYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIC8vIHRoZW0sIGFuZCByZXR1cm5zIGEgbGlua2VkIGxpc3Qgb2YgdGhvc2Ug
Y2VsbHMuCiAgICAgICAgIEZyZWVDZWxsKiBsYXp5U3dlZXAoKTsKICAgICAgICAgCisgICAgICAg
IHZvaWQgaW5pdEZvckNlbGxTaXplKHNpemVfdCBjZWxsU2l6ZSk7CisgICAgICAgIAogICAgICAg
ICAvLyBUaGVzZSBzaG91bGQgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgYmxvY2sgaXMg
Y3JlYXRlZC4KICAgICAgICAgLy8gQmxlc3NpbmcgZm9yIGZhc3QgcGF0aCBjcmVhdGVzIGEgbGlu
a2VkIGxpc3QsIHdoaWxlIGJsZXNzaW5nIGZvcgogICAgICAgICAvLyBzbG93IHBhdGggY3JlYXRl
cyBkdW1teSBjZWxscy4KICAgICAgICAgRnJlZUNlbGwqIGJsZXNzTmV3QmxvY2tGb3JGYXN0UGF0
aCgpOwogICAgICAgICB2b2lkIGJsZXNzTmV3QmxvY2tGb3JTbG93UGF0aCgpOwogICAgICAgICAK
KyAgICAgICAgdm9pZCByZXNldCgpOworICAgICAgICAKICAgICAgICAgLy8gVGhpcyB1bm1hcmtz
IGFsbCBjZWxscyBvbiB0aGUgZnJlZSBsaXN0LCBhbmQgYWxsb2NhdGVzIGR1bW15IEpTQ2VsbHMK
ICAgICAgICAgLy8gaW4gdGhlaXIgcGxhY2UuCiAgICAgICAgIHZvaWQgY2Fub25pY2FsaXplQmxv
Y2soRnJlZUNlbGwqIGZpcnN0RnJlZUNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
UGxhdGZvcm0uaAkocmV2aXNpb24gOTIwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMDUsNiArMTEwNSwxMyBAQAogI2VuZGlm
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTSU5HTEVfVEhSRUFERUQpCisjdW5kZWYgRU5BQkxFX0xB
WllfQkxPQ0tfRlJFRUlORworI2RlZmluZSBFTkFCTEVfTEFaWV9CTE9DS19GUkVFSU5HIDAKKyNl
bHNlCisjZGVmaW5lIEVOQUJMRV9MQVpZX0JMT0NLX0ZSRUVJTkcgMQorI2VuZGlmCisKICNpZiAh
ZGVmaW5lZChFTkFCTEVfUEFOX1NDUk9MTElORykgJiYgT1MoV0lORE9XUykKICNkZWZpbmUgRU5B
QkxFX1BBTl9TQ1JPTExJTkcgMQogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102454</attachid>
            <date>2011-07-30 22:50:57 -0700</date>
            <delta_ts>2012-07-03 09:10:41 -0700</delta_ts>
            <desc>the patch (fix change log)</desc>
            <filename>lazymemreuse_patch_6.diff</filename>
            <type>text/plain</type>
            <size>11113</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTIwNjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAK
KzIwMTEtMDctMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBU
aGUgSlNDIGdhcmJhZ2UgY29sbGVjdG9yIHJldHVybnMgbWVtb3J5IHRvIHRoZSBvcGVyYXRpbmcg
c3lzdGVtIHRvbworICAgICAgICBlYWdlcmx5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW50cm9kdWNlcyBhIG1lbW9yeSByZXVz
ZSBtb2RlbCBzaW1pbGFyIHRvIHRoZSBvbmUgaW4gRmFzdE1hbGxvYy4KKyAgICAgICAgQSBwZXJp
b2RpYyBzY2F2ZW5nZXIgdGhyZWFkIHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgYW5kIHJldHVybnMg
aGFsZiB0aGUKKyAgICAgICAgZnJlZSBtZW1vcnkgdG8gdGhlIE9TIG9uIGVhY2ggdGltZXIgZmly
ZS4gIE5ldyBibG9jayBhbGxvY2F0aW9ucyBmaXJzdAorICAgICAgICBhdHRlbXB0IHRvIGdldCB0
aGUgbWVtb3J5IGZyb20gdGhlIGNvbGxlY3RvcidzIGludGVybmFsIHBvb2wsIHJldmVydGluZwor
ICAgICAgICB0byBPUyBhbGxvY2F0aW9uIG9ubHkgd2hlbiB0aGlzIHBvb2wgaXMgZW1wdHkuCisK
KyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6fkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpkZXN0cm95KToK
KyAgICAgICAgKEpTQzo6SGVhcDo6d2FpdEZvclJlbGF0aXZlVGltZVdoaWxlSG9sZGluZ0xvY2sp
OgorICAgICAgICAoSlNDOjpIZWFwOjp3YWl0Rm9yUmVsYXRpdmVUaW1lKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6YmxvY2tGcmVlaW5nVGhyZWFkU3RhcnRGdW5jKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6YmxvY2tGcmVlaW5nVGhyZWFkTWFpbik6CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRl
QmxvY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpmcmVlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6cmVsZWFzZUZyZWVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6ZGVz
dHJveSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjppbml0Rm9yQ2VsbFNpemUpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6cmVzZXQpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAg
KiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxMS0wNy0zMCAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJv
Z2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgaW5jbHVzaW9uIG9mIE1haW5UaHJlYWQu
aCBmcm9tIFRocmVhZGluZy5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
cmV2aXNpb24gOTIwNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQ0LDEwICsyNDQsMjUgQEAgSGVhcDo6SGVhcChKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCiB7CiAgICAgbV9uZXdTcGFjZS5zZXRIaWdoV2F0ZXJNYXJrKG1pbkJ5
dGVzUGVyQ3ljbGUpOwogICAgICgqbV9hY3Rpdml0eUNhbGxiYWNrKSgpOworI2lmIEVOQUJMRShM
QVpZX0JMT0NLX0ZSRUVJTkcpCisgICAgbV9udW1iZXJPZkZyZWVCbG9ja3MgPSAwOworICAgIG1f
YmxvY2tGcmVlaW5nVGhyZWFkID0gY3JlYXRlVGhyZWFkKGJsb2NrRnJlZWluZ1RocmVhZFN0YXJ0
RnVuYywgdGhpcywgIkphdmFTY3JpcHRDb3JlOjpCbG9ja0ZyZWUiKTsKKyAgICBBU1NFUlQobV9i
bG9ja0ZyZWVpbmdUaHJlYWQpOworI2VuZGlmCiB9CiAKIEhlYXA6On5IZWFwKCkKIHsKKyNpZiBF
TkFCTEUoTEFaWV9CTE9DS19GUkVFSU5HKQorICAgIC8vIGRlc3Ryb3kgb3VyIHRocmVhZAorICAg
IHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnJlZUJsb2NrTG9jayk7CisgICAgICAg
IG1fYmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxkUXVpdCA9IHRydWU7CisgICAgICAgIG1fZnJlZUJs
b2NrQ29uZGl0aW9uLmJyb2FkY2FzdCgpOworICAgIH0KKyAgICB3YWl0Rm9yVGhyZWFkQ29tcGxl
dGlvbihtX2Jsb2NrRnJlZWluZ1RocmVhZCwgMCk7CisjZW5kaWYKKyAgICAKICAgICAvLyBUaGUg
ZGVzdHJveSBmdW5jdGlvbiBtdXN0IGFscmVhZHkgaGF2ZSBiZWVuIGNhbGxlZCwgc28gYXNzZXJ0
IHRoaXMuCiAgICAgQVNTRVJUKCFtX2dsb2JhbERhdGEpOwogfQpAQCAtMjc5LDEwICsyOTQsNzgg
QEAgdm9pZCBIZWFwOjpkZXN0cm95KCkKIAogICAgIHNocmluaygpOwogICAgIEFTU0VSVCghc2l6
ZSgpKTsKKyAgICAKKyNpZiBFTkFCTEUoTEFaWV9CTE9DS19GUkVFSU5HKQorICAgIHJlbGVhc2VG
cmVlQmxvY2tzKCk7CisjZW5kaWYKIAogICAgIG1fZ2xvYmFsRGF0YSA9IDA7CiB9CiAKKyNpZiBF
TkFCTEUoTEFaWV9CTE9DS19GUkVFSU5HKQordm9pZCBIZWFwOjp3YWl0Rm9yUmVsYXRpdmVUaW1l
V2hpbGVIb2xkaW5nTG9jayhkb3VibGUgcmVsYXRpdmUpCit7CisgICAgaWYgKG1fYmxvY2tGcmVl
aW5nVGhyZWFkU2hvdWxkUXVpdCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZnJlZUJsb2NrQ29u
ZGl0aW9uLnRpbWVkV2FpdChtX2ZyZWVCbG9ja0xvY2ssIGN1cnJlbnRUaW1lKCkgKyByZWxhdGl2
ZSk7Cit9CisKK3ZvaWQgSGVhcDo6d2FpdEZvclJlbGF0aXZlVGltZShkb3VibGUgcmVsYXRpdmUp
Cit7CisgICAgLy8gSWYgdGhpcyByZXR1cm5zIGVhcmx5LCB0aGF0J3MgZmluZSwgc28gbG9uZyBh
cyBpdCBkb2Vzbid0IGRvIGl0IHRvbworICAgIC8vIGZyZXF1ZW50bHkuIEl0IHdvdWxkIG9ubHkg
YmUgYSBidWcgaWYgdGhpcyBmdW5jdGlvbiBmYWlsZWQgdG8gcmV0dXJuCisgICAgLy8gd2hlbiBp
dCB3YXMgYXNrZWQgdG8gZG8gc28uCisgICAgCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnJl
ZUJsb2NrTG9jayk7CisgICAgd2FpdEZvclJlbGF0aXZlVGltZVdoaWxlSG9sZGluZ0xvY2socmVs
YXRpdmUpOworfQorCit2b2lkKiBIZWFwOjpibG9ja0ZyZWVpbmdUaHJlYWRTdGFydEZ1bmModm9p
ZCogaGVhcCkKK3sKKyAgICBzdGF0aWNfY2FzdDxIZWFwKj4oaGVhcCktPmJsb2NrRnJlZWluZ1Ro
cmVhZE1haW4oKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBIZWFwOjpibG9ja0ZyZWVpbmdU
aHJlYWRNYWluKCkKK3sKKyAgICB3aGlsZSAoIW1fYmxvY2tGcmVlaW5nVGhyZWFkU2hvdWxkUXVp
dCkgeworICAgICAgICAvLyBHZW5lcmFsbHkgd2FpdCBmb3Igb25lIHNlY29uZCBiZWZvcmUgc2Nh
dmVuZ2luZyBmcmVlIGJsb2Nrcy4gVGhpcworICAgICAgICAvLyBtYXkgcmV0dXJuIGVhcmx5LCBw
YXJ0aWN1bGFybHkgd2hlbiB3ZSdyZSBiZWluZyBhc2tlZCB0byBxdWl0LgorICAgICAgICB3YWl0
Rm9yUmVsYXRpdmVUaW1lKDEuMCk7CisgICAgICAgIGlmIChtX2Jsb2NrRnJlZWluZ1RocmVhZFNo
b3VsZFF1aXQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBw
cm9jZXNzIHRoZSBsaXN0IG9mIGZyZWUgYmxvY2tzLiBLZWVwIGZyZWVpbmcgdW50aWwgaGFsZiBv
ZiB0aGUKKyAgICAgICAgLy8gYmxvY2tzIHRoYXQgYXJlIGN1cnJlbnRseSBvbiB0aGUgbGlzdCBh
cmUgZ29uZS4gQXNzdW1lIHRoYXQgYSBzaXplX3QKKyAgICAgICAgLy8gZmllbGQgY2FuIGJlIGFj
Y2Vzc2VkIGF0b21pY2FsbHkuCisgICAgICAgIHNpemVfdCBjdXJyZW50TnVtYmVyT2ZGcmVlQmxv
Y2tzID0gbV9udW1iZXJPZkZyZWVCbG9ja3M7CisgICAgICAgIGlmICghY3VycmVudE51bWJlck9m
RnJlZUJsb2NrcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgc2l6
ZV90IGRlc2lyZWROdW1iZXJPZkZyZWVCbG9ja3MgPSBjdXJyZW50TnVtYmVyT2ZGcmVlQmxvY2tz
IC8gMjsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICghbV9ibG9ja0ZyZWVpbmdUaHJlYWRTaG91
bGRRdWl0KSB7CisgICAgICAgICAgICBNYXJrZWRCbG9jayogYmxvY2s7CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnJlZUJsb2NrTG9jayk7Cisg
ICAgICAgICAgICAgICAgaWYgKG1fbnVtYmVyT2ZGcmVlQmxvY2tzIDw9IGRlc2lyZWROdW1iZXJP
ZkZyZWVCbG9ja3MpCisgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gMDsKKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSBtX2ZyZWVCbG9ja3MucmVt
b3ZlSGVhZCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmxvY2spOworICAgICAgICAg
ICAgICAgICAgICBtX251bWJlck9mRnJlZUJsb2Nrcy0tOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWFya2VkQmxvY2s6
OmRlc3Ryb3koYmxvY2spOworICAgICAgICB9CisgICAgfQorfQorI2VuZGlmIC8vIEVOQUJMRShM
QVpZX0JMT0NLX0ZSRUVJTkcpCisKIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0U2xv
d0Nhc2Uoc2l6ZV90IGNvc3QpCiB7CiAgICAgLy8gT3VyIGZyZXF1ZW5jeSBvZiBnYXJiYWdlIGNv
bGxlY3Rpb24gdHJpZXMgdG8gYmFsYW5jZSBtZW1vcnkgdXNlIGFnYWluc3Qgc3BlZWQKQEAgLTYx
Myw3ICs2OTYsMjYgQEAgYm9vbCBIZWFwOjppc1ZhbGlkQWxsb2NhdGlvbihzaXplX3QgYnl0ZQog
CiBNYXJrZWRCbG9jayogSGVhcDo6YWxsb2NhdGVCbG9jayhzaXplX3QgY2VsbFNpemUpCiB7Ci0g
ICAgTWFya2VkQmxvY2sqIGJsb2NrID0gTWFya2VkQmxvY2s6OmNyZWF0ZSh0aGlzLCBjZWxsU2l6
ZSk7CisgICAgTWFya2VkQmxvY2sqIGJsb2NrOworICAgIAorI2lmICFFTkFCTEUoTEFaWV9CTE9D
S19GUkVFSU5HKQorICAgIGJsb2NrID0gTWFya2VkQmxvY2s6OmNyZWF0ZSh0aGlzLCBjZWxsU2l6
ZSk7CisjZWxzZQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZnJlZUJsb2Nr
TG9jayk7CisgICAgICAgIGlmIChtX251bWJlck9mRnJlZUJsb2NrcykgeworICAgICAgICAgICAg
YmxvY2sgPSBtX2ZyZWVCbG9ja3MucmVtb3ZlSGVhZCgpOworICAgICAgICAgICAgQVNTRVJUKGJs
b2NrKTsKKyAgICAgICAgICAgIG1fbnVtYmVyT2ZGcmVlQmxvY2tzLS07CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgYmxvY2sgPSAwOworICAgIH0KKyAgICBpZiAoYmxvY2spCisgICAgICAg
IGJsb2NrLT5pbml0Rm9yQ2VsbFNpemUoY2VsbFNpemUpOworICAgIGVsc2UKKyAgICAgICAgYmxv
Y2sgPSBNYXJrZWRCbG9jazo6Y3JlYXRlKHRoaXMsIGNlbGxTaXplKTsKKyNlbmRpZgorICAgIAog
ICAgIG1fYmxvY2tzLmFkZChibG9jayk7CiAKICAgICByZXR1cm4gYmxvY2s7CkBAIC02MjYsNyAr
NzI4LDE0IEBAIHZvaWQgSGVhcDo6ZnJlZUJsb2NrcyhNYXJrZWRCbG9jayogaGVhZCkKICAgICAg
ICAgbmV4dCA9IGJsb2NrLT5uZXh0KCk7CiAKICAgICAgICAgbV9ibG9ja3MucmVtb3ZlKGJsb2Nr
KTsKKyAgICAgICAgYmxvY2stPnJlc2V0KCk7CisjaWYgIUVOQUJMRShMQVpZX0JMT0NLX0ZSRUVJ
TkcpCiAgICAgICAgIE1hcmtlZEJsb2NrOjpkZXN0cm95KGJsb2NrKTsKKyNlbHNlCisgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX2ZyZWVCbG9ja0xvY2spOworICAgICAgICBtX2ZyZWVCbG9j
a3MuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgbV9udW1iZXJPZkZyZWVCbG9ja3MrKzsKKyNlbmRp
ZgogICAgIH0KIH0KIApAQCAtNjM3LDYgKzc0NiwzMCBAQCB2b2lkIEhlYXA6OnNocmluaygpCiAg
ICAgZnJlZUJsb2Nrcyhmb3JFYWNoQmxvY2sodGFrZUlmRW1wdHkpKTsKIH0KIAorI2lmIEVOQUJM
RShMQVpZX0JMT0NLX0ZSRUVJTkcpCit2b2lkIEhlYXA6OnJlbGVhc2VGcmVlQmxvY2tzKCkKK3sK
KyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBNYXJrZWRCbG9jayogYmxvY2s7CisgICAgICAg
IHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2ZyZWVCbG9ja0xvY2spOworICAg
ICAgICAgICAgaWYgKCFtX251bWJlck9mRnJlZUJsb2NrcykKKyAgICAgICAgICAgICAgICBibG9j
ayA9IDA7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBibG9jayA9IG1fZnJl
ZUJsb2Nrcy5yZW1vdmVIZWFkKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrKTsKKyAg
ICAgICAgICAgICAgICBtX251bWJlck9mRnJlZUJsb2Nrcy0tOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgICAgICBNYXJrZWRCbG9jazo6ZGVzdHJveShibG9jayk7CisgICAgfQor
fQorI2VuZGlmCisKICNpZiBFTkFCTEUoR0dDKQogdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJTbG93
Q2FzZShjb25zdCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIGNlbGwpCiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiA5MjA2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB0eXBlZGVmIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiBUeXBlQ291
bnRTZXQ7CiAKICAgICBlbnVtIE9wZXJhdGlvbkluUHJvZ3Jlc3MgeyBOb09wZXJhdGlvbiwgQWxs
b2NhdGlvbiwgQ29sbGVjdGlvbiB9OwotCisgICAgCiAgICAgY2xhc3MgSGVhcCB7CiAgICAgICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEhlYXApOwogICAgIHB1YmxpYzoKQEAgLTE0NCwxNiArMTQ0
LDM0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBlbnVtIFN3ZWVwVG9nZ2xlIHsgRG9Ob3RT
d2VlcCwgRG9Td2VlcCB9OwogICAgICAgICB2b2lkIGNvbGxlY3QoU3dlZXBUb2dnbGUpOwogICAg
ICAgICB2b2lkIHNocmluaygpOworICAgICAgICB2b2lkIHJlbGVhc2VGcmVlQmxvY2tzKCk7CiAg
ICAgICAgIHZvaWQgc3dlZXAoKTsKIAogICAgICAgICBSZWdpc3RlckZpbGUmIHJlZ2lzdGVyRmls
ZSgpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllclNsb3dDYXNlKGNvbnN0IEpT
Q2VsbCosIEpTQ2VsbCopOworICAgICAgICAKKyNpZiBFTkFCTEUoTEFaWV9CTE9DS19GUkVFSU5H
KQorICAgICAgICB2b2lkIHdhaXRGb3JSZWxhdGl2ZVRpbWVXaGlsZUhvbGRpbmdMb2NrKGRvdWJs
ZSByZWxhdGl2ZSk7CisgICAgICAgIHZvaWQgd2FpdEZvclJlbGF0aXZlVGltZShkb3VibGUgcmVs
YXRpdmUpOworICAgICAgICB2b2lkIGJsb2NrRnJlZWluZ1RocmVhZE1haW4oKTsKKyAgICAgICAg
c3RhdGljIHZvaWQqIGJsb2NrRnJlZWluZ1RocmVhZFN0YXJ0RnVuYyh2b2lkKiBoZWFwKTsKKyNl
bmRpZgogCiAgICAgICAgIE9wZXJhdGlvbkluUHJvZ3Jlc3MgbV9vcGVyYXRpb25JblByb2dyZXNz
OwogICAgICAgICBOZXdTcGFjZSBtX25ld1NwYWNlOwogICAgICAgICBNYXJrZWRCbG9ja1NldCBt
X2Jsb2NrczsKIAorI2lmIEVOQUJMRShMQVpZX0JMT0NLX0ZSRUVJTkcpCisgICAgICAgIERvdWJs
eUxpbmtlZExpc3Q8TWFya2VkQmxvY2s+IG1fZnJlZUJsb2NrczsKKyAgICAgICAgc2l6ZV90IG1f
bnVtYmVyT2ZGcmVlQmxvY2tzOworICAgICAgICAKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciBt
X2Jsb2NrRnJlZWluZ1RocmVhZDsKKyAgICAgICAgTXV0ZXggbV9mcmVlQmxvY2tMb2NrOworICAg
ICAgICBUaHJlYWRDb25kaXRpb24gbV9mcmVlQmxvY2tDb25kaXRpb247CisgICAgICAgIGJvb2wg
bV9ibG9ja0ZyZWVpbmdUaHJlYWRTaG91bGRRdWl0OworI2VuZGlmCisKICAgICAgICAgc2l6ZV90
IG1fZXh0cmFDb3N0OwogCiAgICAgICAgIFByb3RlY3RDb3VudFNldCBtX3Byb3RlY3RlZFZhbHVl
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJl
dmlzaW9uIDkyMDY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw2IEBAIE1hcmtlZEJsb2NrKiBNYXJrZWRC
bG9jazo6Y3JlYXRlKEhlYXAqIGgKIAogdm9pZCBNYXJrZWRCbG9jazo6ZGVzdHJveShNYXJrZWRC
bG9jayogYmxvY2spCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IGJsb2NrLT5maXJzdEF0b20oKTsg
aSA8IGJsb2NrLT5tX2VuZEF0b207IGkgKz0gYmxvY2stPm1fYXRvbXNQZXJDZWxsKQotICAgICAg
ICByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KCZibG9jay0+YXRvbXMoKVtpXSktPn5KU0NlbGwo
KTsKICAgICBibG9jay0+bV9hbGxvY2F0aW9uLmRlYWxsb2NhdGUoKTsKIH0KIApAQCAtNTIsMTAg
KzUwLDIxIEBAIE1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayhjb25zdCBQYWdlQWxsb2MKICAgICAs
IG1fYWxsb2NhdGlvbihhbGxvY2F0aW9uKQogICAgICwgbV9oZWFwKGhlYXApCiB7CisgICAgaW5p
dEZvckNlbGxTaXplKGNlbGxTaXplKTsKK30KKwordm9pZCBNYXJrZWRCbG9jazo6aW5pdEZvckNl
bGxTaXplKHNpemVfdCBjZWxsU2l6ZSkKK3sKICAgICBtX2F0b21zUGVyQ2VsbCA9IChjZWxsU2l6
ZSArIGF0b21TaXplIC0gMSkgLyBhdG9tU2l6ZTsKICAgICBtX2VuZEF0b20gPSBhdG9tc1BlckJs
b2NrIC0gbV9hdG9tc1BlckNlbGwgKyAxOwogfQogCit2b2lkIE1hcmtlZEJsb2NrOjpyZXNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9
IG1fYXRvbXNQZXJDZWxsKQorICAgICAgICByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KCZhdG9t
cygpW2ldKS0+fkpTQ2VsbCgpOworfQorCiB2b2lkIE1hcmtlZEJsb2NrOjpzd2VlcCgpCiB7CiAg
ICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSA9IG1faGVhcC0+Z2xvYmFs
RGF0YSgpLT5kdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gOTIwNjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05
NCwxMiArOTQsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHRoZW0sIGFuZCByZXR1
cm5zIGEgbGlua2VkIGxpc3Qgb2YgdGhvc2UgY2VsbHMuCiAgICAgICAgIEZyZWVDZWxsKiBsYXp5
U3dlZXAoKTsKICAgICAgICAgCisgICAgICAgIHZvaWQgaW5pdEZvckNlbGxTaXplKHNpemVfdCBj
ZWxsU2l6ZSk7CisgICAgICAgIAogICAgICAgICAvLyBUaGVzZSBzaG91bGQgYmUgY2FsbGVkIGlt
bWVkaWF0ZWx5IGFmdGVyIGEgYmxvY2sgaXMgY3JlYXRlZC4KICAgICAgICAgLy8gQmxlc3Npbmcg
Zm9yIGZhc3QgcGF0aCBjcmVhdGVzIGEgbGlua2VkIGxpc3QsIHdoaWxlIGJsZXNzaW5nIGZvcgog
ICAgICAgICAvLyBzbG93IHBhdGggY3JlYXRlcyBkdW1teSBjZWxscy4KICAgICAgICAgRnJlZUNl
bGwqIGJsZXNzTmV3QmxvY2tGb3JGYXN0UGF0aCgpOwogICAgICAgICB2b2lkIGJsZXNzTmV3Qmxv
Y2tGb3JTbG93UGF0aCgpOwogICAgICAgICAKKyAgICAgICAgdm9pZCByZXNldCgpOworICAgICAg
ICAKICAgICAgICAgLy8gVGhpcyB1bm1hcmtzIGFsbCBjZWxscyBvbiB0aGUgZnJlZSBsaXN0LCBh
bmQgYWxsb2NhdGVzIGR1bW15IEpTQ2VsbHMKICAgICAgICAgLy8gaW4gdGhlaXIgcGxhY2UuCiAg
ICAgICAgIHZvaWQgY2Fub25pY2FsaXplQmxvY2soRnJlZUNlbGwqIGZpcnN0RnJlZUNlbGwpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gOTIwNjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExMDUsNiArMTEwNSwxMyBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIEVOQUJMRShTSU5HTEVf
VEhSRUFERUQpCisjdW5kZWYgRU5BQkxFX0xBWllfQkxPQ0tfRlJFRUlORworI2RlZmluZSBFTkFC
TEVfTEFaWV9CTE9DS19GUkVFSU5HIDAKKyNlbHNlCisjZGVmaW5lIEVOQUJMRV9MQVpZX0JMT0NL
X0ZSRUVJTkcgMQorI2VuZGlmCisKICNpZiAhZGVmaW5lZChFTkFCTEVfUEFOX1NDUk9MTElORykg
JiYgT1MoV0lORE9XUykKICNkZWZpbmUgRU5BQkxFX1BBTl9TQ1JPTExJTkcgMQogI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>