<?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>64493</bug_id>
          
          <creation_ts>2011-07-13 17:23:28 -0700</creation_ts>
          <short_desc>GC allocation fast path has too many operations</short_desc>
          <delta_ts>2011-07-14 18:40:44 -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="Filip Pizlo">fpizlo</assigned_to>
          <cc>darin</cc>
    
    <cc>gustavo</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>436777</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-13 17:23:28 -0700</bug_when>
    <thetext>The JSC GC allocates objects by looping starting at the current block, and the current atom in the block, and proceeds until it finds a free atom, which it then destroys.  This allocation path is both expensive and difficult to inline.  The JSC GC should have an allocation fast path that (1) is fast and simple, (2) covers the great majority of cases, and (3) is complemented by a reasonably fast slow path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436784</commentid>
    <comment_count>1</comment_count>
      <attachid>100735</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-13 17:35:29 -0700</bug_when>
    <thetext>Created attachment 100735
the patch

This patch results in the following performance wins:


[pizlo@minime PerformanceTests] ../Tools/Scripts/sunspider-compare-results --v8  v8-v4-results/sunspider-results-2011-07-13-16.43.10.js v8-v4-results/sunspider-results-2011-07-13-16.38.09.js


TEST              COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:      1.019x as fast    1205.1ms +/- 0.4%   1182.6ms +/- 0.2%     significant

=============================================================================

  v8:             1.019x as fast    1205.1ms +/- 0.4%   1182.6ms +/- 0.2%     significant
    crypto:       -                  196.3ms +/- 0.5%    195.6ms +/- 0.7% 
    deltablue:    1.026x as fast     252.7ms +/- 1.6%    246.3ms +/- 1.0%     significant
    earley-boyer: 1.028x as fast     136.6ms +/- 0.4%    132.9ms +/- 0.4%     significant
    raytrace:     1.013x as fast      75.4ms +/- 0.8%     74.4ms +/- 0.5%     significant
    regexp:       1.061x as fast     114.4ms +/- 1.0%    107.8ms +/- 0.4%     significant
    richards:     -                  227.8ms +/- 1.1%    226.2ms +/- 0.7% 
    splay:        1.013x as fast     201.9ms +/- 1.0%    199.4ms +/- 0.8%     significant


[pizlo@minime PerformanceTests] ../Tools/Scripts/sunspider-compare-results sunspider-1.0-results/sunspider-results-2011-07-13-16.42.42.js sunspider-1.0-results/sunspider-results-2011-07-13-16.39.19.js


TEST                   COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:           1.006x as fast    177.1ms +/- 0.2%   176.0ms +/- 0.2%     significant

=============================================================================

  3d:                  -                  25.3ms +/- 0.8%    25.1ms +/- 0.4% 
    cube:              -                   9.0ms +/- 0.4%     9.0ms +/- 0.8% 
    morph:             -                   7.2ms +/- 2.6%     7.1ms +/- 1.1% 
    raytrace:          -                   9.0ms +/- 0.4%     9.0ms +/- 0.0% 

  access:              -                  22.4ms +/- 0.7%    22.3ms +/- 0.6% 
    binary-trees:      -                   2.0ms +/- 2.8%     2.0ms +/- 2.0% 
    fannkuch:          ??                 11.1ms +/- 0.7%    11.2ms +/- 1.0%     not conclusive: might be *1.009x as slow*
    nbody:             -                   6.0ms +/- 0.0%     6.0ms +/- 0.0% 
    nsieve:            1.071x as fast      3.3ms +/- 4.0%     3.1ms +/- 2.8%     significant

  bitops:              ??                 15.5ms +/- 1.0%    15.6ms +/- 1.1%     not conclusive: might be *1.001x as slow*
    3bit-bits-in-byte: -                   2.0ms +/- 0.0%     2.0ms +/- 0.0% 
    bits-in-byte:      ??                  5.5ms +/- 2.6%     5.5ms +/- 2.8%     not conclusive: might be *1.004x as slow*
    bitwise-and:       -                   3.0ms +/- 1.3%     3.0ms +/- 1.3% 
    nsieve-bits:       -                   5.0ms +/- 0.0%     5.0ms +/- 0.0% 

  controlflow:         ??                  1.1ms +/- 8.7%     1.2ms +/- 9.1%     not conclusive: might be *1.018x as slow*
    recursive:         ??                  1.1ms +/- 8.7%     1.2ms +/- 9.1%     not conclusive: might be *1.018x as slow*

  crypto:              -                  11.1ms +/- 0.8%    11.1ms +/- 0.9% 
    aes:               -                   7.0ms +/- 0.6%     7.0ms +/- 0.6% 
    md5:               ??                  2.1ms +/- 3.7%     2.1ms +/- 4.1%     not conclusive: might be *1.010x as slow*
    sha1:              -                   2.0ms +/- 0.0%     2.0ms +/- 0.0% 

  date:                1.033x as fast     22.6ms +/- 0.9%    21.9ms +/- 0.7%     significant
    format-tofte:      1.019x as fast     14.0ms +/- 0.7%    13.8ms +/- 0.9%     significant
    format-xparb:      1.057x as fast      8.6ms +/- 1.7%     8.1ms +/- 1.1%     significant

  math:                ??                 16.0ms +/- 0.3%    16.0ms +/- 0.3%     not conclusive: might be *1.003x as slow*
    cordic:            ??                  6.0ms +/- 0.7%     6.0ms +/- 0.0%     not conclusive: might be *1.003x as slow*
    partial-sums:      ??                  7.0ms +/- 0.0%     7.0ms +/- 0.6%     not conclusive: might be *1.003x as slow*
    spectral-norm:     -                   3.0ms +/- 0.0%     3.0ms +/- 0.0% 

  regexp:              -                  10.0ms +/- 0.4%    10.0ms +/- 0.0% 
    dna:               -                  10.0ms +/- 0.4%    10.0ms +/- 0.0% 

  string:              -                  53.0ms +/- 0.4%    53.0ms +/- 0.5% 
    base64:            1.020x as fast      6.0ms +/- 0.0%     5.9ms +/- 1.6%     significant
    fasta:             -                   7.0ms +/- 0.6%     7.0ms +/- 0.0% 
    tagcloud:          -                  13.1ms +/- 0.5%    13.0ms +/- 0.4% 
    unpack-code:       ??                 20.6ms +/- 0.8%    20.8ms +/- 0.7%     not conclusive: might be *1.010x as slow*
    validate-input:    -                   6.4ms +/- 2.3%     6.3ms +/- 2.4% 
[pizlo@minime PerformanceTests]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436785</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-13 17:37:36 -0700</bug_when>
    <thetext>Attachment 100735 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.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/heap/NewSpace.h:131:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/heap/MarkedBlock.h:97:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 3 in 9 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>436788</commentid>
    <comment_count>3</comment_count>
      <attachid>100736</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-13 17:43:24 -0700</bug_when>
    <thetext>Created attachment 100736
the patch (fix style)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436792</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-13 17:46:35 -0700</bug_when>
    <thetext>Attachment 100736 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.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 9 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>436793</commentid>
    <comment_count>5</comment_count>
      <attachid>100739</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-13 17:48:14 -0700</bug_when>
    <thetext>Created attachment 100739
the patch (more style fixes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436817</commentid>
    <comment_count>6</comment_count>
      <attachid>100739</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-07-13 18:12:47 -0700</bug_when>
    <thetext>Comment on attachment 100739
the patch (more style fixes)

Attachment 100739 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9021763</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436820</commentid>
    <comment_count>7</comment_count>
      <attachid>100747</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-13 18:14:29 -0700</bug_when>
    <thetext>Created attachment 100747
the patch (fix build)

Reordering #include&apos;s to satisfy the style resulted in build failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436825</commentid>
    <comment_count>8</comment_count>
      <attachid>100739</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-07-13 18:24:41 -0700</bug_when>
    <thetext>Comment on attachment 100739
the patch (more style fixes)

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

r- due to the comments above, but also because the exports changes will no doubt break the $%#&amp; windows build.

&gt; Source/JavaScriptCore/heap/Heap.h:264
&gt; +        clearAllocCache();

These functions are used for things other than GC -- clearAllocCache has the effect of clearing mark bits so this seems like it could cause badness, what am i missing?

&gt; Source/JavaScriptCore/heap/Heap.h:279
&gt; +        clearAllocCache();

ditto

&gt; Source/JavaScriptCore/heap/MarkedBlock.h:101
&gt; +        // These should be called immediately after a block is created.
&gt; +        // Blessing for fast path creates a linked list, while blessing for
&gt; +        // slow path creates dummy cells.
&gt; +        FreeCell* blessNewBlockForFastPath();
&gt; +        void blessNewBlockForSlowPath();

I think this is most easily guarantee by making the MarkBlock constructor handle that itself, add an enum along the lines of
enum MarkBlockAllocationPath { AllocationPathSlow, AllocationPathFast };
make the MarkBlock constructor take a MarkBlockAllocationPath parameter in its constructor, and decide which version of bless should be used in the constructor.

&gt; Source/JavaScriptCore/heap/MarkedBlock.h:105
&gt; +        void clearAllocCache(FreeCell* firstFree);

I don&apos;t like this name, i find it confusing -- it says it is clearing a cache, when in reality it&apos;s also clearing all the mark bits as we would for a GC pass

&gt; Source/JavaScriptCore/heap/NewSpace.h:159
&gt; +        MarkedBlock::FreeCell* firstFree = sizeClass.firstFree;
&gt; +        if (!firstFree) {
&gt; +            // There are two possibilities for why we got here:
&gt; +            // 1) We&apos;ve exhausted the allocation cache for curBlock, in which case
&gt; +            //    curBlock == nextBlock, and we know that there is no reason to
&gt; +            //    repeat a lazy sweep of nextBlock because we won&apos;t find anything.
&gt; +            // 2) Allocation caches have been cleared, in which case nextBlock may
&gt; +            //    have (and most likely does have) free cells, so we almost certainly
&gt; +            //    should do a lazySweep for nextBlock. This also implies that
&gt; +            //    curBlock == 0.
&gt; +            
&gt; +            if (sizeClass.curBlock) {
&gt; +                ASSERT(sizeClass.curBlock == sizeClass.nextBlock);
&gt; +                m_waterMark += sizeClass.nextBlock-&gt;capacity();
&gt; +                sizeClass.nextBlock = sizeClass.nextBlock-&gt;next();
&gt; +                sizeClass.curBlock = 0;
&gt; +            }
&gt; +            
&gt; +            for (MarkedBlock*&amp; block = sizeClass.nextBlock ; block; block = block-&gt;next()) {
&gt; +                firstFree = block-&gt;lazySweep();
&gt; +                if (firstFree) {
&gt; +                    sizeClass.firstFree = firstFree;
&gt; +                    sizeClass.curBlock = block;
&gt; +                    break;
&gt; +                }
&gt; +                
&gt; +                m_waterMark += block-&gt;capacity();
&gt; +            }
&gt; +            
&gt; +            if (!firstFree)
&gt; +                return 0;
&gt;          }
&gt; -
&gt; -        return 0;
&gt; +        
&gt; +        ASSERT(firstFree);
&gt; +        
&gt; +        sizeClass.firstFree = firstFree-&gt;next;
&gt; +        return static_cast&lt;void*&gt;(firstFree);

This would be nicer as an early return:
if (MarkedBlock::FreeCell* firstFree = sizeClass.firstFree) {
     sizeClass.firstFree = firstFree-&gt;next;
     return firstFree;
}
....

I think that makes the fast path much clearer and more obvious</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436836</commentid>
    <comment_count>9</comment_count>
      <attachid>100747</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-07-13 18:43:36 -0700</bug_when>
    <thetext>Comment on attachment 100747
the patch (fix build)

r- for the reasons listed in the prior comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436844</commentid>
    <comment_count>10</comment_count>
      <attachid>100747</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-13 18:48:26 -0700</bug_when>
    <thetext>Comment on attachment 100747
the patch (fix build)

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

&gt; Source/JavaScriptCore/heap/Heap.h:129
&gt; +        void clearAllocCache();

We normally prefer not to abbreviate, so this would be named allocation cache rather than alloc cache.

&gt; Source/JavaScriptCore/heap/Heap.h:297
&gt; +        MarkedBlock::FreeCell* firstFree = sizeClass.firstFree;
&gt; +        if (!firstFree)
&gt; +            return allocateSlowCase(sizeClass);

I wonder if this branch is properly predicted. We might want to see if using UNLIKELY() speeds this up still-more.

&gt; Source/JavaScriptCore/heap/Heap.h:300
&gt; +        return static_cast&lt;void*&gt;(firstFree);

This cast should not be needed. Any pointer to a non-const non-volatile type should convert to void* without a cast.

&gt; Source/JavaScriptCore/heap/MarkedBlock.cpp:93
&gt; +            result = freeCell;

Is the “loop through all cells, but return the last freed one” policy here intentional? I think this is something that deserves a comment, because it’s not obvious to me at least.

&gt; Source/JavaScriptCore/heap/MarkedBlock.cpp:107
&gt; +        result = freeCell;

I have a similar question here.

&gt; Source/JavaScriptCore/heap/NewSpace.h:55
&gt; +            MarkedBlock::FreeCell* firstFree;

We normally use nouns for data members, so we would call this firstFreeCell rather than firstFree.

&gt; Source/JavaScriptCore/heap/NewSpace.h:56
&gt; +            MarkedBlock* curBlock;

We normally don’t abbreviate words like current to cur.

&gt; Source/JavaScriptCore/heap/NewSpace.h:159
&gt; +        return static_cast&lt;void*&gt;(firstFree);

This cast should not be needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436868</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-13 19:18:38 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 100739 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=100739&amp;action=review
&gt; 
&gt; r- due to the comments above, but also because the exports changes will no doubt break the $%#&amp; windows build.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.h:264
&gt; &gt; +        clearAllocCache();
&gt; 
&gt; These functions are used for things other than GC -- clearAllocCache has the effect of clearing mark bits so this seems like it could cause badness, what am i missing?

It&apos;s almost always safe to call this function, in the sense that it just undoes free-lists in SizeClasses that had them.  It brings the heap back into a canonical form, where each MarkedBlock consists of a bunch of fully initialized JSCells, with mark bits indicating whether these JSCells are actually live.

In particular, this method only clears mark bits for those objects that are on the free list.  An object is placed on the free list only if it is not marked, and as it&apos;s placed, it also has its mark bit set to ensure that the allocator fast path doesn&apos;t have to do it.  That means that every object still on a free list has the mark bit set, and should have its mark bit cleared if the free list is destroyed.

Another implication of placing objects on the free list is that they no longer have a valid JSCell in them, so anyone iterating over JSCells will get massively confused.  Hence the need to call clearAllocCache() before doing most anything that iterates over all cells or all blocks - this brings the block back into a &quot;canonical&quot; state where (1) mark bits are only set for things that are actually allocated and (2) all cells contains a valid JSCell.

This brings up a possible idea for a better name for this method: canonicalizeBlocks()?

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.h:279
&gt; &gt; +        clearAllocCache();
&gt; 
&gt; ditto
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkedBlock.h:101
&gt; &gt; +        // These should be called immediately after a block is created.
&gt; &gt; +        // Blessing for fast path creates a linked list, while blessing for
&gt; &gt; +        // slow path creates dummy cells.
&gt; &gt; +        FreeCell* blessNewBlockForFastPath();
&gt; &gt; +        void blessNewBlockForSlowPath();
&gt; 
&gt; I think this is most easily guarantee by making the MarkBlock constructor handle that itself, add an enum along the lines of
&gt; enum MarkBlockAllocationPath { AllocationPathSlow, AllocationPathFast };
&gt; make the MarkBlock constructor take a MarkBlockAllocationPath parameter in its constructor, and decide which version of bless should be used in the constructor.

The reason why I didn&apos;t do it this way is that blessNewBlockForFastPath() returns a FreeCell*, which is not stored anywhere in MarkedBlock.  It&apos;s only stored in SizeClass, because it&apos;s only relevant for the block that is currently used for allocation.

I&apos;m happy to change the code to do construction in one go, and have MarkedBlock::create() also return a FreeCell* (via a reference parameter) and then thread that through the relevant methods in Heap and NewSpace.

&gt; &gt; Source/JavaScriptCore/heap/NewSpace.h:159
&gt; &gt; +        MarkedBlock::FreeCell* firstFree = sizeClass.firstFree;
&gt; &gt; +        if (!firstFree) {
&gt; &gt; +            // There are two possibilities for why we got here:
&gt; &gt; +            // 1) We&apos;ve exhausted the allocation cache for curBlock, in which case
&gt; &gt; +            //    curBlock == nextBlock, and we know that there is no reason to
&gt; &gt; +            //    repeat a lazy sweep of nextBlock because we won&apos;t find anything.
&gt; &gt; +            // 2) Allocation caches have been cleared, in which case nextBlock may
&gt; &gt; +            //    have (and most likely does have) free cells, so we almost certainly
&gt; &gt; +            //    should do a lazySweep for nextBlock. This also implies that
&gt; &gt; +            //    curBlock == 0.
&gt; &gt; +            
&gt; &gt; +            if (sizeClass.curBlock) {
&gt; &gt; +                ASSERT(sizeClass.curBlock == sizeClass.nextBlock);
&gt; &gt; +                m_waterMark += sizeClass.nextBlock-&gt;capacity();
&gt; &gt; +                sizeClass.nextBlock = sizeClass.nextBlock-&gt;next();
&gt; &gt; +                sizeClass.curBlock = 0;
&gt; &gt; +            }
&gt; &gt; +            
&gt; &gt; +            for (MarkedBlock*&amp; block = sizeClass.nextBlock ; block; block = block-&gt;next()) {
&gt; &gt; +                firstFree = block-&gt;lazySweep();
&gt; &gt; +                if (firstFree) {
&gt; &gt; +                    sizeClass.firstFree = firstFree;
&gt; &gt; +                    sizeClass.curBlock = block;
&gt; &gt; +                    break;
&gt; &gt; +                }
&gt; &gt; +                
&gt; &gt; +                m_waterMark += block-&gt;capacity();
&gt; &gt; +            }
&gt; &gt; +            
&gt; &gt; +            if (!firstFree)
&gt; &gt; +                return 0;
&gt; &gt;          }
&gt; &gt; -
&gt; &gt; -        return 0;
&gt; &gt; +        
&gt; &gt; +        ASSERT(firstFree);
&gt; &gt; +        
&gt; &gt; +        sizeClass.firstFree = firstFree-&gt;next;
&gt; &gt; +        return static_cast&lt;void*&gt;(firstFree);
&gt; 
&gt; This would be nicer as an early return:
&gt; if (MarkedBlock::FreeCell* firstFree = sizeClass.firstFree) {
&gt;      sizeClass.firstFree = firstFree-&gt;next;
&gt;      return firstFree;
&gt; }
&gt; ....
&gt; 
&gt; I think that makes the fast path much clearer and more obvious

I made it a late return because this covers both the I-already-have-a-free-cell case and the I-need-to-scavenge-for-a-free-cell case.  This way the NewSpace::allocate() method has two clear phases: phase one ensures that it&apos;s possible to allocate in the given SizeClass, and the second phase (the &quot;fast path&quot;) performs the allocation.

And anyway, the real fast path is in Heap::allocate().  NewSpace::allocate() is typically called with SizeClass.firstFree == 0.  The only exceptions are if NewSpace::allocate() returns 0, and the Heap::allocate() decides to deal with it by allocating a new block, and then calls NewSpace::allocate() again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436871</commentid>
    <comment_count>12</comment_count>
      <attachid>100739</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-07-13 19:21:03 -0700</bug_when>
    <thetext>Comment on attachment 100739
the patch (more style fixes)

Attachment 100739 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9023818</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436873</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-13 19:21:30 -0700</bug_when>
    <thetext>(In reply to comment #10)

Darin - thanks for catching those issues!  To answer your point about the free list construction policy:

&gt; &gt; Source/JavaScriptCore/heap/MarkedBlock.cpp:93
&gt; &gt; +            result = freeCell;
&gt; 
&gt; Is the “loop through all cells, but return the last freed one” policy here intentional? I think this is something that deserves a comment, because it’s not obvious to me at least.

It&apos;s not intentional; as far as I can tell it makes no difference if the free list is constructed in a way that makes it travel forward through the block, or backward; and I just chose the latter.  I can add a comment that explains this, or I&apos;d be happy to construct a list that is in-order if that is more intuitive.

-Filip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436920</commentid>
    <comment_count>14</comment_count>
      <attachid>100739</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-07-13 21:23:31 -0700</bug_when>
    <thetext>Comment on attachment 100739
the patch (more style fixes)

Attachment 100739 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9023842</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437345</commentid>
    <comment_count>15</comment_count>
      <attachid>100868</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-14 15:01:09 -0700</bug_when>
    <thetext>Created attachment 100868
the patch (fix review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437347</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-14 15:04:37 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #10)
&gt; &gt; &gt; Source/JavaScriptCore/heap/MarkedBlock.cpp:93
&gt; &gt; &gt; +            result = freeCell;
&gt; &gt; 
&gt; &gt; Is the “loop through all cells, but return the last freed one” policy here intentional? I think this is something that deserves a comment, because it’s not obvious to me at least.
&gt; 
&gt; It&apos;s not intentional; as far as I can tell it makes no difference if the free list is constructed in a way that makes it travel forward through the block, or backward; and I just chose the latter.  I can add a comment that explains this, or I&apos;d be happy to construct a list that is in-order if that is more intuitive.

But regardless of direction, wouldn’t it be faster to return when you find a free cell instead of finishing the loop?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437351</commentid>
    <comment_count>17</comment_count>
      <attachid>100870</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-14 15:08:51 -0700</bug_when>
    <thetext>Created attachment 100870
the patch (fix review)

Fixed a part of Darin&apos;s review (unnecessary static_cast&apos;s) that I missed in the last patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437357</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-14 15:15:19 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; Source/JavaScriptCore/heap/MarkedBlock.cpp:93
&gt; &gt; &gt; &gt; +            result = freeCell;
&gt; &gt; &gt; 
&gt; &gt; &gt; Is the “loop through all cells, but return the last freed one” policy here intentional? I think this is something that deserves a comment, because it’s not obvious to me at least.
&gt; &gt; 
&gt; &gt; It&apos;s not intentional; as far as I can tell it makes no difference if the free list is constructed in a way that makes it travel forward through the block, or backward; and I just chose the latter.  I can add a comment that explains this, or I&apos;d be happy to construct a list that is in-order if that is more intuitive.
&gt; 
&gt; But regardless of direction, wouldn’t it be faster to return when you find a free cell instead of finishing the loop?

I believe returning early would be slower, since that would mean that every allocation would take slow path.  The point of the lazySweep() method is to build an as-long-as-reasonably-possible linked list of free cells that the fast path can chomp on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437378</commentid>
    <comment_count>19</comment_count>
      <attachid>100880</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-07-14 15:51:04 -0700</bug_when>
    <thetext>Created attachment 100880
the patch (fix windows)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437389</commentid>
    <comment_count>20</comment_count>
      <attachid>100880</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-14 16:12:05 -0700</bug_when>
    <thetext>Comment on attachment 100880
the patch (fix windows)

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

&gt; Source/JavaScriptCore/heap/Heap.h:296
&gt; +        if (UNLIKELY(!firstFreeCell))

Did this have a performance effect?

&gt; Source/JavaScriptCore/heap/MarkedBlock.cpp:135
&gt; +        new (static_cast&lt;void*&gt;(current)) JSCell(*m_heap-&gt;globalData(), dummyMarkableCellStructure, JSCell::CreatingEarlyCell);

Is this static_cast needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437430</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-14 17:33:22 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; I believe returning early would be slower

Yes, I totally overlooked the fact that these functions both do two things. Oops.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437461</commentid>
    <comment_count>22</comment_count>
      <attachid>100880</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-14 18:40:38 -0700</bug_when>
    <thetext>Comment on attachment 100880
the patch (fix windows)

Clearing flags on attachment: 100880

Committed r91039: &lt;http://trac.webkit.org/changeset/91039&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437462</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-14 18:40:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100735</attachid>
            <date>2011-07-13 17:35:29 -0700</date>
            <delta_ts>2011-07-13 17:43:24 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>fastalloc_patch_1.diff</filename>
            <type>text/plain</type>
            <size>18335</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA5NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTMgQEAK
KzIwMTEtMDctMTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBH
QyBhbGxvY2F0aW9uIGZhc3QgcGF0aCBoYXMgdG9vIG1hbnkgb3BlcmF0aW9ucy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDkzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBDaGFuZ2VkIHRo
ZSB0aW1pbmcgb2YgdGhlIGxhenkgc3dlZXAgc28gdGhhdCBpdCBvY2N1cnMgd2hlbiB3ZSBsYW5k
IG9uCisgICAgICAgIGEgcHJldmlvdXNseS11bnN3ZWVwZWQgYmxvY2ssIHJhdGhlciB0aGFuIHdo
ZW5ldmVyIHdlIGxhbmQgb24gYW4gdW5zd2VlcGVkCisgICAgICAgIGNlbGwuICBBZnRlciB0aGUg
cGVyLWJsb2NrIGxhenkgc3dlZXAgb2NjdXJzLCB0aGUgYmxvY2sgaXMgdHVybmVkIGludG8gYQor
ICAgICAgICBzaW5nbHkgbGlua2VkIGxpc3Qgb2YgZnJlZSBjZWxscy4gIFRoZSBhbGxvY2F0aW9u
IGZhc3QgcGF0aCBpcyBub3cganVzdCBhCisgICAgICAgIGxvYWQtYnJhbmNoLXN0b3JlIHRvIHJl
bW92ZSBhIGNlbGwgZnJvbSB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KKyAgICAgICAgCisgICAgICAg
IEFkZGl0aW9uYWxseSwgdGhpcyBjaGFuZ2VzIHRoZSB3YXkgbmV3IGJsb2NrcyBhcmUgYWxsb2Nh
dGVkLiAgUHJldmlvdXNseSwKKyAgICAgICAgdGhleSB3b3VsZCBiZSBwb3B1bGF0ZWQgd2l0aCBk
dW1teSBjZWxscy4gIFdpdGggdGhpcyBwYXRjaCwgdGhleSBhcmUKKyAgICAgICAgdHVybmVkIGlu
dG8gYSBmcmVlIGxpc3QsIHdoaWNoIG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBuZXZlciBiZSBkZXN0
cnVjdG9yCisgICAgICAgIGNhbGxzIGZvciBhbGxvY2F0aW9ucyBpbiBmcmVzaCBibG9ja3MuCisg
ICAgICAgIAorICAgICAgICBUaGVzZSBjaGFuZ2VzIHJlc3VsdCBpbiBhIDEuOSUgc3BlZWQtdXAg
b24gVjgsIGFuZCBhIDAuNiUgc3BlZWQtdXAgb24KKyAgICAgICAgU3VuU3BpZGVyLiAgVGhlcmUg
YXJlIG5vIG9ic2VydmVkIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgc2xvdy1kb3ducworICAg
ICAgICBvbiBhbnkgaW5kaXZpZHVhbCBiZW5jaG1hcmsuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS5leHA6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjbGVhckFsbG9jQ2FjaGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXNl
dEFsbG9jYXRvcik6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6
OmZvckVhY2hQcm90ZWN0ZWRDZWxsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaENlbGwp
OgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoQmxvY2spOgorICAgICAgICAoSlNDOjpIZWFw
OjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
OjpsYXp5U3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Ymxlc3NOZXdCbG9ja0Zv
ckZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tGb3JT
bG93UGF0aCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjbGVhckFsbG9jQ2FjaGUpOgor
ICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKiBoZWFwL05ld1NwYWNlLmNw
cDoKKyAgICAgICAgKEpTQzo6TmV3U3BhY2U6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6TmV3
U3BhY2U6OmNsZWFyQWxsb2NDYWNoZSk6CisgICAgICAgICogaGVhcC9OZXdTcGFjZS5oOgorICAg
ICAgICAoSlNDOjpOZXdTcGFjZTo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpOZXdTcGFjZTo6
U2l6ZUNsYXNzOjpTaXplQ2xhc3MpOgorICAgICAgICAoSlNDOjpOZXdTcGFjZTo6U2l6ZUNsYXNz
OjpjbGVhckFsbG9jQ2FjaGUpOgorICAgICAgICAqIGhlYXAvT2xkU3BhY2UuY3BwOgorICAgICAg
ICAoSlNDOjpPbGRTcGFjZTo6YWRkQmxvY2spOgorCiAyMDExLTA3LTEzICBNaWNoYWVsIFNhYm9m
ZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NDIwMgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCShyZXZpc2lvbiA5MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw2ICsyMjQsNyBAQCBfX1pO
M0pTQzM1Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlCiBfX1pOM0pTQzQxY29uc3RydWN0
RnVuY3Rpb25Ta2lwcGluZ0V2YWxFbmFibGVkQ2hlY2tFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNH
bG9iYWxPYmplY3RFUktOU183QXJnTGlzdEVSS05TXzEwSWRlbnRpZmllckVSS05TXzdVU3RyaW5n
RWkKIF9fWk4zSlNDNEhlYXAxMW9iamVjdENvdW50RXYKIF9fWk4zSlNDNEhlYXAxNmFjdGl2aXR5
Q2FsbGJhY2tFdgorX19aTjNKU0M0SGVhcDE2YWxsb2NhdGVTbG93Q2FzZUVSTlNfOE5ld1NwYWNl
OVNpemVDbGFzc0UKIF9fWk4zSlNDNEhlYXAxNm9iamVjdFR5cGVDb3VudHNFdgogX19aTjNKU0M0
SGVhcDE3Y29sbGVjdEFsbEdhcmJhZ2VFdgogX19aTjNKU0M0SGVhcDE3Z2xvYmFsT2JqZWN0Q291
bnRFdgpAQCAtMjM3LDcgKzIzOCw2IEBAIF9fWk4zSlNDNEhlYXAyOXJlcG9ydEV4dHJhTWVtb3J5
Q29zdFNsb3cKIF9fWk4zSlNDNEhlYXA0c2l6ZUV2CiBfX1pOM0pTQzRIZWFwN2Rlc3Ryb3lFdgog
X19aTjNKU0M0SGVhcDdwcm90ZWN0RU5TXzdKU1ZhbHVlRQotX19aTjNKU0M0SGVhcDhhbGxvY2F0
ZUVSTlNfOE5ld1NwYWNlOVNpemVDbGFzc0UKIF9fWk4zSlNDNEhlYXA4Y2FwYWNpdHlFdgogX19a
TjNKU0M0SGVhcDl1bnByb3RlY3RFTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzRZYXJyMTFZYXJyUGF0
dGVybkMxRVJLTlNfN1VTdHJpbmdFYmJQUEtjCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkocmV2aXNpb24gOTA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDE1ICsxMDIsNiBAQCBpbmxpbmUgdm9pZCBD
bGVhck1hcmtzOjpvcGVyYXRvcigpKE1hcmtlCiAgICAgYmxvY2stPmNsZWFyTWFya3MoKTsKIH0K
IAotc3RydWN0IFJlc2V0QWxsb2NhdG9yIDogTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKLSAg
ICB2b2lkIG9wZXJhdG9yKCkoTWFya2VkQmxvY2sqKTsKLX07Ci0KLWlubGluZSB2b2lkIFJlc2V0
QWxsb2NhdG9yOjpvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykKLXsKLSAgICBibG9jay0+
cmVzZXRBbGxvY2F0b3IoKTsKLX0KLQogc3RydWN0IFN3ZWVwIDogTWFya2VkQmxvY2s6OlZvaWRG
dW5jdG9yIHsKICAgICB2b2lkIG9wZXJhdG9yKCkoTWFya2VkQmxvY2sqKTsKIH07CkBAIC0zMjAs
NyArMzExLDcgQEAgaW5saW5lIHZvaWQqIEhlYXA6OnRyeUFsbG9jYXRlKE5ld1NwYWNlOgogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQqIEhlYXA6OmFsbG9jYXRlKE5ld1NwYWNlOjpTaXpl
Q2xhc3MmIHNpemVDbGFzcykKK3ZvaWQqIEhlYXA6OmFsbG9jYXRlU2xvd0Nhc2UoTmV3U3BhY2U6
OlNpemVDbGFzcyYgc2l6ZUNsYXNzKQogewogI2lmIENPTExFQ1RfT05fRVZFUllfQUxMT0NBVElP
TgogICAgIGNvbGxlY3RBbGxHYXJiYWdlKCk7CkBAIC01NTgsNyArNTQ5LDkgQEAgdm9pZCBIZWFw
Ojpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIEFTU0VSVChnbG9iYWxEYXRhKCkt
PmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJs
ZSgpKTsKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwogICAgIEpBVkFTQ1JJUFRDT1JF
X0dDX0JFR0lOKCk7Ci0KKyAgICAKKyAgICBjbGVhckFsbG9jQ2FjaGUoKTsKKyAgICAKICAgICBt
YXJrUm9vdHMoKTsKICAgICBtX2hhbmRsZUhlYXAuZmluYWxpemVXZWFrSGFuZGxlcygpOwogICAg
IG1fZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmZpbmFsaXplU21hbGxTdHJpbmdzKCk7CkBAIC01
ODgsMTEgKzU4MSwxNSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dn
CiAgICAgKCptX2FjdGl2aXR5Q2FsbGJhY2spKCk7CiB9CiAKK3ZvaWQgSGVhcDo6Y2xlYXJBbGxv
Y0NhY2hlKCkKK3sKKyAgICBtX25ld1NwYWNlLmNsZWFyQWxsb2NDYWNoZSgpOworfQorCiB2b2lk
IEhlYXA6OnJlc2V0QWxsb2NhdG9yKCkKIHsKICAgICBtX2V4dHJhQ29zdCA9IDA7CiAgICAgbV9u
ZXdTcGFjZS5yZXNldEFsbG9jYXRvcigpOwotICAgIGZvckVhY2hCbG9jazxSZXNldEFsbG9jYXRv
cj4oKTsKIH0KIAogdm9pZCBIZWFwOjpzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NB
Y3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxiYWNrKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAkocmV2aXNpb24gOTA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJIYW5k
bGVIZWFwLmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKICNpbmNsdWRlICJTbG90VmlzaXRv
ci5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tTZXQu
aCIKICNpbmNsdWRlICJOZXdTcGFjZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0x
MjQsOCArMTI1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgbWF4RXh0cmFDb3N0ID0gMTAyNCAqIDEwMjQ7CiAKICAgICAgICAgYm9vbCBpc1ZhbGlkQWxs
b2NhdGlvbihzaXplX3QpOwotICAgICAgICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7
CiAgICAgICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlDb3N0U2xvd0Nhc2Uoc2l6ZV90KTsKKyAg
ICAgICAgdm9pZCBjbGVhckFsbG9jQ2FjaGUoKTsKICAgICAgICAgdm9pZCByZXNldEFsbG9jYXRv
cigpOwogCiAgICAgICAgIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2NrKHNpemVfdCBjZWxsU2l6
ZSk7CkBAIC0xMzcsNiArMTM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgbWFy
a1RlbXBTb3J0VmVjdG9ycyhIZWFwUm9vdFZpc2l0b3ImKTsKIAogICAgICAgICB2b2lkKiB0cnlB
bGxvY2F0ZShOZXdTcGFjZTo6U2l6ZUNsYXNzJik7CisgICAgICAgIHZvaWQqIGFsbG9jYXRlU2xv
d0Nhc2UoTmV3U3BhY2U6OlNpemVDbGFzcyYpOwogICAgICAgICAKICAgICAgICAgZW51bSBTd2Vl
cFRvZ2dsZSB7IERvTm90U3dlZXAsIERvU3dlZXAgfTsKICAgICAgICAgdm9pZCBjb2xsZWN0KFN3
ZWVwVG9nZ2xlKTsKQEAgLTI0Miw2ICsyNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5U
eXBlIEhlYXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxsKEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewor
ICAgICAgICBjbGVhckFsbG9jQ2FjaGUoKTsKICAgICAgICAgUHJvdGVjdENvdW50U2V0OjppdGVy
YXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVlcy5lbmQoKTsKICAgICAgICAgZm9yIChQcm90ZWN0
Q291bnRTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9wcm90ZWN0ZWRWYWx1ZXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQogICAgICAgICAgICAgZnVuY3RvcihpdC0+Zmlyc3QpOwpAQCAtMjU4LDYgKzI2
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
aW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgSGVhcDo6Zm9yRWFjaENlbGwoRnVu
Y3RvciYgZnVuY3RvcikKICAgICB7CisgICAgICAgIGNsZWFyQWxsb2NDYWNoZSgpOwogICAgICAg
ICBCbG9ja0l0ZXJhdG9yIGVuZCA9IG1fYmxvY2tzLnNldCgpLmVuZCgpOwogICAgICAgICBmb3Ig
KEJsb2NrSXRlcmF0b3IgaXQgPSBtX2Jsb2Nrcy5zZXQoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCiAgICAgICAgICAgICAoKml0KS0+Zm9yRWFjaENlbGwoZnVuY3Rvcik7CkBAIC0yNzIsNiAr
Mjc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PiBpbmxpbmUgdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBIZWFwOjpmb3JFYWNoQmxvY2so
RnVuY3RvciYgZnVuY3RvcikKICAgICB7CisgICAgICAgIGNsZWFyQWxsb2NDYWNoZSgpOwogICAg
ICAgICBCbG9ja0l0ZXJhdG9yIGVuZCA9IG1fYmxvY2tzLnNldCgpLmVuZCgpOwogICAgICAgICBm
b3IgKEJsb2NrSXRlcmF0b3IgaXQgPSBtX2Jsb2Nrcy5zZXQoKS5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCiAgICAgICAgICAgICBmdW5jdG9yKCppdCk7CkBAIC0yODMsNiArMjg4LDE3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBGdW5jdG9yIGZ1bmN0b3I7CiAgICAgICAgIHJldHVybiBm
b3JFYWNoQmxvY2soZnVuY3Rvcik7CiAgICAgfQorICAgIAorICAgIGlubGluZSB2b2lkKiBIZWFw
OjphbGxvY2F0ZShOZXdTcGFjZTo6U2l6ZUNsYXNzJiBzaXplQ2xhc3MpCisgICAgeworICAgICAg
ICAvLyBUaGlzIGlzIGEgbGlnaHQtd2VpZ2h0IGZhc3QgcGF0aCB0byBjb3ZlciB0aGUgbW9zdCBj
b21tb24gY2FzZS4KKyAgICAgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBmaXJzdEZyZWUgPSBz
aXplQ2xhc3MuZmlyc3RGcmVlOworICAgICAgICBpZiAoIWZpcnN0RnJlZSkKKyAgICAgICAgICAg
IHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlKHNpemVDbGFzcyk7CisgICAgICAgIAorICAgICAgICBz
aXplQ2xhc3MuZmlyc3RGcmVlID0gZmlyc3RGcmVlLT5uZXh0OworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dm9pZCo+KGZpcnN0RnJlZSk7CisgICAgfQogCiAgICAgaW5saW5lIHZvaWQqIEhl
YXA6OmFsbG9jYXRlKHNpemVfdCBieXRlcykKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiA5MDg3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDks
MTcgKzQ5LDEyIEBAIHZvaWQgTWFya2VkQmxvY2s6OmRlc3Ryb3koTWFya2VkQmxvY2sqIGIKIH0K
IAogTWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKGNvbnN0IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYg
YWxsb2NhdGlvbiwgSGVhcCogaGVhcCwgc2l6ZV90IGNlbGxTaXplKQotICAgIDogbV9uZXh0QXRv
bShmaXJzdEF0b20oKSkKLSAgICAsIG1faW5OZXdTcGFjZShmYWxzZSkKKyAgICA6IG1faW5OZXdT
cGFjZShmYWxzZSkKICAgICAsIG1fYWxsb2NhdGlvbihhbGxvY2F0aW9uKQogICAgICwgbV9oZWFw
KGhlYXApCiB7CiAgICAgbV9hdG9tc1BlckNlbGwgPSAoY2VsbFNpemUgKyBhdG9tU2l6ZSAtIDEp
IC8gYXRvbVNpemU7CiAgICAgbV9lbmRBdG9tID0gYXRvbXNQZXJCbG9jayAtIG1fYXRvbXNQZXJD
ZWxsICsgMTsKLQotICAgIFN0cnVjdHVyZSogZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUgPSBo
ZWFwLT5nbG9iYWxEYXRhKCktPmR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLmdldCgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21z
UGVyQ2VsbCkKLSAgICAgICAgbmV3ICgmYXRvbXMoKVtpXSkgSlNDZWxsKCpoZWFwLT5nbG9iYWxE
YXRhKCksIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLCBKU0NlbGw6OkNyZWF0aW5nRWFybHlD
ZWxsKTsKIH0KIAogdm9pZCBNYXJrZWRCbG9jazo6c3dlZXAoKQpAQCAtODUsNiArODAsNTcgQEAg
dm9pZCBNYXJrZWRCbG9jazo6c3dlZXAoKQogICAgIH0KIH0KIAorTWFya2VkQmxvY2s6OkZyZWVD
ZWxsKiBNYXJrZWRCbG9jazo6bGF6eVN3ZWVwKCkKK3sKKyAgICBGcmVlQ2VsbCogcmVzdWx0ID0g
MDsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207
IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKKyAgICAgICAgaWYgKCFtX21hcmtzLnRlc3RBbmRTZXQo
aSkpIHsKKyAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxs
Kj4oJmF0b21zKClbaV0pOworICAgICAgICAgICAgY2VsbC0+fkpTQ2VsbCgpOworICAgICAgICAg
ICAgRnJlZUNlbGwqIGZyZWVDZWxsID0gcmVpbnRlcnByZXRfY2FzdDxGcmVlQ2VsbCo+KGNlbGwp
OworICAgICAgICAgICAgZnJlZUNlbGwtPm5leHQgPSByZXN1bHQ7CisgICAgICAgICAgICByZXN1
bHQgPSBmcmVlQ2VsbDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitNYXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpibGVzc05ld0Jsb2Nr
Rm9yRmFzdFBhdGgoKQoreworICAgIEZyZWVDZWxsKiByZXN1bHQgPSAwOworICAgIGZvciAoc2l6
ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkg
eworICAgICAgICBtX21hcmtzLnNldChpKTsKKyAgICAgICAgRnJlZUNlbGwqIGZyZWVDZWxsID0g
cmVpbnRlcnByZXRfY2FzdDxGcmVlQ2VsbCo+KCZhdG9tcygpW2ldKTsKKyAgICAgICAgZnJlZUNl
bGwtPm5leHQgPSByZXN1bHQ7CisgICAgICAgIHJlc3VsdCA9IGZyZWVDZWxsOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIE1hcmtlZEJsb2NrOjpibGVzc05ld0Jsb2NrRm9y
U2xvd1BhdGgoKQoreworICAgIFN0cnVjdHVyZSogZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUg
PSBtX2hlYXAtPmdsb2JhbERhdGEoKS0+ZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUuZ2V0KCk7
CisgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1f
YXRvbXNQZXJDZWxsKQorICAgICAgICBuZXcgKCZhdG9tcygpW2ldKSBKU0NlbGwoKm1faGVhcC0+
Z2xvYmFsRGF0YSgpLCBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSwgSlNDZWxsOjpDcmVhdGlu
Z0Vhcmx5Q2VsbCk7Cit9CisKK3ZvaWQgTWFya2VkQmxvY2s6OmNsZWFyQWxsb2NDYWNoZShGcmVl
Q2VsbCogZmlyc3RGcmVlKQoreworICAgIFN0cnVjdHVyZSogZHVtbXlNYXJrYWJsZUNlbGxTdHJ1
Y3R1cmUgPSBtX2hlYXAtPmdsb2JhbERhdGEoKS0+ZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUu
Z2V0KCk7CisgICAgCisgICAgZm9yIChGcmVlQ2VsbCogY3VycmVudCA9IGZpcnN0RnJlZTsgY3Vy
cmVudDspIHsKKyAgICAgICAgRnJlZUNlbGwqIG5leHQgPSBjdXJyZW50LT5uZXh0OworICAgICAg
ICBzaXplX3QgaSA9IGF0b21OdW1iZXIoY3VycmVudCk7CisgICAgICAgIAorICAgICAgICBtX21h
cmtzLmNsZWFyKGkpOworICAgICAgICBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihjdXJyZW50KSkg
SlNDZWxsKCptX2hlYXAtPmdsb2JhbERhdGEoKSwgZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUs
IEpTQ2VsbDo6Q3JlYXRpbmdFYXJseUNlbGwpOworCisgICAgICAgIGN1cnJlbnQgPSBuZXh0Owor
ICAgIH0KK30KKwogI2lmIEVOQUJMRShKU0NfWk9NQklFUykKIHZvaWQgTWFya2VkQmxvY2s6OmNs
ZWFyTWFya3MoKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5oCShyZXZpc2lvbiA5MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21zUGVyQmxvY2sgPSBibG9ja1NpemUg
LyBhdG9tU2l6ZTsgLy8gfjEuNSUgb3ZlcmhlYWQKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBvd25lclNldHNQZXJCbG9jayA9IDg7IC8vIH4yJSBvdmVyaGVhZC4KIAorICAgICAgICBzdHJ1
Y3QgRnJlZUNlbGwgeworICAgICAgICAgICAgRnJlZUNlbGwqIG5leHQ7CisgICAgICAgIH07Cisg
ICAgICAgIAogICAgICAgICBzdHJ1Y3QgVm9pZEZ1bmN0b3IgewogICAgICAgICAgICAgdHlwZWRl
ZiB2b2lkIFJldHVyblR5cGU7CiAgICAgICAgICAgICB2b2lkIHJldHVyblZhbHVlKCkgeyB9CkBA
IC04NCw5ICs4OCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRJbk5ld1Nw
YWNlKGJvb2wpOwogCiAgICAgICAgIHZvaWQqIGFsbG9jYXRlKCk7Ci0gICAgICAgIHZvaWQgcmVz
ZXRBbGxvY2F0b3IoKTsKICAgICAgICAgdm9pZCBzd2VlcCgpOwogICAgICAgICAKKyAgICAgICAg
Ly8gVGhpcyBpbnZva2VzIGRlc3RydWN0b3JzIG9uIGFsbCBjZWxscyB0aGF0IGFyZSBub3QgbWFy
a2VkLCBtYXJrcworICAgICAgICAvLyB0aGVtLCBhbmQgcmV0dXJucyBhIGxpbmtlZCBsaXN0IG9m
IHRob3NlIGNlbGxzLgorICAgICAgICBGcmVlQ2VsbCogbGF6eVN3ZWVwKCk7CisgICAgICAgIAor
ICAgICAgICAvLyBUaGlzIGNyZWF0ZXMgYSBsaW5rZWQgbGlzdCBmb3IgYSBicmFuZCBuZXcgYmxv
Y2suICBObyBibG9jayBzaG91bGQKKyAgICAgICAgLy8gYmUgdXNlZCB1bmxlc3MgdGhpcyBpcyBj
YWxsZWQuCisgICAgICAgIEZyZWVDZWxsKiBibGVzc05ld0Jsb2NrRm9yRmFzdFBhdGgoKTsKKyAg
ICAgICAgdm9pZCBibGVzc05ld0Jsb2NrRm9yU2xvd1BhdGgoKTsKKyAgICAgICAgCisgICAgICAg
IC8vIFRoaXMgdW5tYXJrcyBhbGwgY2VsbHMgb24gdGhlIGZyZWUgbGlzdCwgYW5kIGFsbG9jYXRl
cyBkdW1teSBKU0NlbGxzCisgICAgICAgIC8vIGluIHRoZWlyIHBsYWNlLgorICAgICAgICB2b2lk
IGNsZWFyQWxsb2NDYWNoZShGcmVlQ2VsbCogZmlyc3RGcmVlKTsKKyAgICAgICAgCiAgICAgICAg
IGJvb2wgaXNFbXB0eSgpOwogCiAgICAgICAgIHZvaWQgY2xlYXJNYXJrcygpOwpAQCAtMTE4LDcg
KzEzNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3QgYXRvbU51bWJlcihjb25z
dCB2b2lkKik7CiAgICAgICAgIHNpemVfdCBvd25lclNldE51bWJlcihjb25zdCBKU0NlbGwqKTsK
IAotICAgICAgICBzaXplX3QgbV9uZXh0QXRvbTsKICAgICAgICAgc2l6ZV90IG1fZW5kQXRvbTsg
Ly8gVGhpcyBpcyBhIGZ1enp5IGVuZC4gQWx3YXlzIHRlc3QgZm9yIDwgbV9lbmRBdG9tLgogICAg
ICAgICBzaXplX3QgbV9hdG9tc1BlckNlbGw7CiAgICAgICAgIFdURjo6Qml0bWFwPGJsb2NrU2l6
ZSAvIGF0b21TaXplPiBtX21hcmtzOwpAQCAtMTY1LDExICsxODAsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgbV9pbk5ld1NwYWNlID0gaW5OZXdTcGFjZTsKICAgICB9CiAKLSAgICBpbmxp
bmUgdm9pZCBNYXJrZWRCbG9jazo6cmVzZXRBbGxvY2F0b3IoKQotICAgIHsKLSAgICAgICAgbV9u
ZXh0QXRvbSA9IGZpcnN0QXRvbSgpOwotICAgIH0KLQogICAgIGlubGluZSBib29sIE1hcmtlZEJs
b2NrOjppc0VtcHR5KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX21hcmtzLmlzRW1wdHkoKTsK
QEAgLTIzNSwyMiArMjQ1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBmdW5jdG9y
KHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmF0b21zKClbaV0pKTsKICAgICAgICAgfQogICAg
IH0KLQotICAgIGlubGluZSB2b2lkKiBNYXJrZWRCbG9jazo6YWxsb2NhdGUoKQotICAgIHsKLSAg
ICAgICAgd2hpbGUgKG1fbmV4dEF0b20gPCBtX2VuZEF0b20pIHsKLSAgICAgICAgICAgIGlmICgh
bV9tYXJrcy50ZXN0QW5kU2V0KG1fbmV4dEF0b20pKSB7Ci0gICAgICAgICAgICAgICAgSlNDZWxs
KiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPigmYXRvbXMoKVttX25leHRBdG9tXSk7
Ci0gICAgICAgICAgICAgICAgbV9uZXh0QXRvbSArPSBtX2F0b21zUGVyQ2VsbDsKLSAgICAgICAg
ICAgICAgICBkZXN0cnVjdG9yKGNlbGwpOwotICAgICAgICAgICAgICAgIHJldHVybiBjZWxsOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9uZXh0QXRvbSArPSBtX2F0b21zUGVyQ2VsbDsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQorICAgIAogICAgIGlubGlu
ZSBzaXplX3QgTWFya2VkQmxvY2s6Om93bmVyU2V0TnVtYmVyKGNvbnN0IEpTQ2VsbCogY2VsbCkK
ICAgICB7CiAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxCaXRzPihjZWxsKSAtIHJl
aW50ZXJwcmV0X2Nhc3Q8Qml0cz4odGhpcykpICogb3duZXJTZXRzUGVyQmxvY2sgLyBibG9ja1Np
emU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9OZXdTcGFjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTmV3U3BhY2UuY3BwCShyZXZpc2lv
biA5MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL05ld1NwYWNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNiArNDgsMTAgQEAgdm9pZCBOZXdTcGFjZTo6YWRkQmxvY2soU2l6
ZUNsYXNzJiBzaXplQwogICAgIGJsb2NrLT5zZXRJbk5ld1NwYWNlKHRydWUpOwogICAgIHNpemVD
bGFzcy5uZXh0QmxvY2sgPSBibG9jazsKICAgICBzaXplQ2xhc3MuYmxvY2tMaXN0LmFwcGVuZChi
bG9jayk7CisgICAgQVNTRVJUKCFzaXplQ2xhc3MuY3VyQmxvY2spOworICAgIEFTU0VSVCghc2l6
ZUNsYXNzLmZpcnN0RnJlZSk7CisgICAgc2l6ZUNsYXNzLmN1ckJsb2NrID0gYmxvY2s7CisgICAg
c2l6ZUNsYXNzLmZpcnN0RnJlZSA9IGJsb2NrLT5ibGVzc05ld0Jsb2NrRm9yRmFzdFBhdGgoKTsK
IH0KIAogdm9pZCBOZXdTcGFjZTo6cmVtb3ZlQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpAQCAt
NjksNCArNzMsMTMgQEAgdm9pZCBOZXdTcGFjZTo6cmVzZXRBbGxvY2F0b3IoKQogICAgICAgICBz
aXplQ2xhc3NGb3IoY2VsbFNpemUpLnJlc2V0QWxsb2NhdG9yKCk7CiB9CiAKK3ZvaWQgTmV3U3Bh
Y2U6OmNsZWFyQWxsb2NDYWNoZSgpCit7CisgICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBwcmVj
aXNlU3RlcDsgY2VsbFNpemUgPCBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3Rl
cCkKKyAgICAgICAgc2l6ZUNsYXNzRm9yKGNlbGxTaXplKS5jbGVhckFsbG9jQ2FjaGUoKTsKKwor
ICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gaW1wcmVjaXNlU3RlcDsgY2VsbFNpemUgPCBpbXBy
ZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXApCisgICAgICAgIHNpemVDbGFz
c0ZvcihjZWxsU2l6ZSkuY2xlYXJBbGxvY0NhY2hlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTmV3U3BhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9OZXdTcGFjZS5oCShyZXZpc2lvbiA5MDg3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL05ld1NwYWNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDcgKzUwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdHJ1Y3QgU2l6
ZUNsYXNzIHsKICAgICAgICAgICAgIFNpemVDbGFzcygpOwogICAgICAgICAgICAgdm9pZCByZXNl
dEFsbG9jYXRvcigpOworICAgICAgICAgICAgdm9pZCBjbGVhckFsbG9jQ2FjaGUoKTsKIAorICAg
ICAgICAgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBmaXJzdEZyZWU7CisgICAgICAgICAgICBN
YXJrZWRCbG9jayogY3VyQmxvY2s7CiAgICAgICAgICAgICBNYXJrZWRCbG9jayogbmV4dEJsb2Nr
OwogICAgICAgICAgICAgRG91Ymx5TGlua2VkTGlzdDxNYXJrZWRCbG9jaz4gYmxvY2tMaXN0Owog
ICAgICAgICAgICAgc2l6ZV90IGNlbGxTaXplOwpAQCAtNjQsNiArNjcsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIGFkZEJsb2NrKFNpemVDbGFzcyYsIE1hcmtlZEJsb2NrKik7
CiAgICAgICAgIHZvaWQgcmVtb3ZlQmxvY2soTWFya2VkQmxvY2sqKTsKKyAgICAgICAgCisgICAg
ICAgIHZvaWQgY2xlYXJBbGxvY0NhY2hlKCk7CiAKICAgICAgICAgc2l6ZV90IHdhdGVyTWFyaygp
OwogICAgICAgICBzaXplX3QgaGlnaFdhdGVyTWFyaygpOwpAQCAtMTE1LDE0ICsxMjAsNDMgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgdm9pZCogTmV3U3BhY2U6OmFsbG9jYXRlKFNp
emVDbGFzcyYgc2l6ZUNsYXNzKQogICAgIHsKLSAgICAgICAgZm9yIChNYXJrZWRCbG9jayomIGJs
b2NrID0gc2l6ZUNsYXNzLm5leHRCbG9jayA7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkp
IHsKLSAgICAgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSBibG9jay0+YWxsb2NhdGUoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgICAgICBtX3dhdGVyTWFyayAr
PSBibG9jay0+Y2FwYWNpdHkoKTsKKyAgICAgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBmaXJz
dEZyZWUgPSBzaXplQ2xhc3MuZmlyc3RGcmVlOworICAgICAgICBpZiAoIWZpcnN0RnJlZSkgewor
ICAgICAgICAgICAgLy8gVGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzIGZvciB3aHkgd2UgZ290
IGhlcmU6CisgICAgICAgICAgICAvLyAxKSBXZSd2ZSBleGhhdXN0ZWQgdGhlIGFsbG9jYXRpb24g
Y2FjaGUgZm9yIGN1ckJsb2NrLCBpbiB3aGljaCBjYXNlCisgICAgICAgICAgICAvLyAgICBjdXJC
bG9jayA9PSBuZXh0QmxvY2ssIGFuZCB3ZSBrbm93IHRoYXQgdGhlcmUgaXMgbm8gcmVhc29uIHRv
CisgICAgICAgICAgICAvLyAgICByZXBlYXQgYSBsYXp5IHN3ZWVwIG9mIG5leHRCbG9jayBiZWNh
dXNlIHdlIHdvbid0IGZpbmQgYW55dGhpbmcuCisgICAgICAgICAgICAvLyAyKSBBbGxvY2F0aW9u
IGNhY2hlcyBoYXZlIGJlZW4gY2xlYXJlZCwgaW4gd2hpY2ggY2FzZSBuZXh0QmxvY2sgbWF5Cisg
ICAgICAgICAgICAvLyAgICBoYXZlIChhbmQgbW9zdCBsaWtlbHkgZG9lcyBoYXZlKSBmcmVlIGNl
bGxzLCBzbyB3ZSBhbG1vc3QgY2VydGFpbmx5CisgICAgICAgICAgICAvLyAgICBzaG91bGQgZG8g
YSBsYXp5U3dlZXAgZm9yIG5leHRCbG9jay4gIFRoaXMgYWxzbyBpbXBsaWVzIHRoYXQKKyAgICAg
ICAgICAgIC8vICAgIGN1ckJsb2NrID09IDAuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChzaXplQ2xhc3MuY3VyQmxvY2spIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2l6ZUNsYXNz
LmN1ckJsb2NrID09IHNpemVDbGFzcy5uZXh0QmxvY2spOworICAgICAgICAgICAgICAgIG1fd2F0
ZXJNYXJrICs9IHNpemVDbGFzcy5uZXh0QmxvY2stPmNhcGFjaXR5KCk7CisgICAgICAgICAgICAg
ICAgc2l6ZUNsYXNzLm5leHRCbG9jayA9IHNpemVDbGFzcy5uZXh0QmxvY2stPm5leHQoKTsKKyAg
ICAgICAgICAgICAgICBzaXplQ2xhc3MuY3VyQmxvY2sgPSAwOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKE1hcmtlZEJsb2NrKiYgYmxvY2sgPSBzaXplQ2xh
c3MubmV4dEJsb2NrIDsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkgeworICAgICAgICAg
ICAgICAgIGZpcnN0RnJlZSA9IGJsb2NrLT5sYXp5U3dlZXAoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZmlyc3RGcmVlKSB7CisgICAgICAgICAgICAgICAgICAgIHNpemVDbGFzcy5maXJzdEZyZWUg
PSBmaXJzdEZyZWU7CisgICAgICAgICAgICAgICAgICAgIHNpemVDbGFzcy5jdXJCbG9jayA9IGJs
b2NrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV93YXRlck1hcmsgKz0gYmxvY2stPmNhcGFj
aXR5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghZmly
c3RGcmVlKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZmlyc3RGcmVlKTsKKyAgICAgICAg
CisgICAgICAgIHNpemVDbGFzcy5maXJzdEZyZWUgPSBmaXJzdEZyZWUtPm5leHQ7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDx2b2lkKj4oZmlyc3RGcmVlKTsKICAgICB9CiAKICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5
cGUgTmV3U3BhY2U6OmZvckVhY2hCbG9jayhGdW5jdG9yJiBmdW5jdG9yKQpAQCAtMTU1LDcgKzE4
OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KIAogICAgIGlubGluZSBOZXdTcGFjZTo6U2l6
ZUNsYXNzOjpTaXplQ2xhc3MoKQotICAgICAgICA6IG5leHRCbG9jaygwKQorICAgICAgICA6IGZp
cnN0RnJlZSgwKQorICAgICAgICAsIGN1ckJsb2NrKDApCisgICAgICAgICwgbmV4dEJsb2NrKDAp
CiAgICAgICAgICwgY2VsbFNpemUoMCkKICAgICB7CiAgICAgfQpAQCAtMTY0LDYgKzIwMCwxOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIG5leHRCbG9jayA9IGJsb2NrTGlzdC5o
ZWFkKCk7CiAgICAgfQorICAgIAorICAgIGlubGluZSB2b2lkIE5ld1NwYWNlOjpTaXplQ2xhc3M6
OmNsZWFyQWxsb2NDYWNoZSgpCisgICAgeworICAgICAgICBpZiAoY3VyQmxvY2spIHsKKyAgICAg
ICAgICAgIGN1ckJsb2NrLT5jbGVhckFsbG9jQ2FjaGUoZmlyc3RGcmVlKTsKKyAgICAgICAgICAg
IGZpcnN0RnJlZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghZmly
c3RGcmVlKTsKKyAgICAgICAgCisgICAgICAgIGN1ckJsb2NrID0gMDsKKyAgICAgICAgZmlyc3RG
cmVlID0gMDsKKyAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9PbGRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvT2xkU3BhY2UuY3BwCShyZXZpc2lvbiA5MDg3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL09sZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsNyBAQCBPbGRTcGFjZTo6T2xkU3BhY2UoSGVhcCogaGVhcCkKIHZvaWQgT2xkU3BhY2U6OmFk
ZEJsb2NrKE1hcmtlZEJsb2NrKiBibG9jaykKIHsKICAgICBtX2Jsb2Nrcy5hcHBlbmQoYmxvY2sp
OworICAgIGJsb2NrLT5ibGVzc05ld0Jsb2NrRm9yU2xvd1BhdGgoKTsKIH0KIAogdm9pZCBPbGRT
cGFjZTo6cmVtb3ZlQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100736</attachid>
            <date>2011-07-13 17:43:24 -0700</date>
            <delta_ts>2011-07-13 17:48:14 -0700</delta_ts>
            <desc>the patch (fix style)</desc>
            <filename>fastalloc_patch_2.diff</filename>
            <type>text/plain</type>
            <size>18413</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA5NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTMgQEAK
KzIwMTEtMDctMTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBH
QyBhbGxvY2F0aW9uIGZhc3QgcGF0aCBoYXMgdG9vIG1hbnkgb3BlcmF0aW9ucy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDkzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBDaGFuZ2VkIHRo
ZSB0aW1pbmcgb2YgdGhlIGxhenkgc3dlZXAgc28gdGhhdCBpdCBvY2N1cnMgd2hlbiB3ZSBsYW5k
IG9uCisgICAgICAgIGEgcHJldmlvdXNseS11bnN3ZWVwZWQgYmxvY2ssIHJhdGhlciB0aGFuIHdo
ZW5ldmVyIHdlIGxhbmQgb24gYW4gdW5zd2VlcGVkCisgICAgICAgIGNlbGwuICBBZnRlciB0aGUg
cGVyLWJsb2NrIGxhenkgc3dlZXAgb2NjdXJzLCB0aGUgYmxvY2sgaXMgdHVybmVkIGludG8gYQor
ICAgICAgICBzaW5nbHkgbGlua2VkIGxpc3Qgb2YgZnJlZSBjZWxscy4gIFRoZSBhbGxvY2F0aW9u
IGZhc3QgcGF0aCBpcyBub3cganVzdCBhCisgICAgICAgIGxvYWQtYnJhbmNoLXN0b3JlIHRvIHJl
bW92ZSBhIGNlbGwgZnJvbSB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KKyAgICAgICAgCisgICAgICAg
IEFkZGl0aW9uYWxseSwgdGhpcyBjaGFuZ2VzIHRoZSB3YXkgbmV3IGJsb2NrcyBhcmUgYWxsb2Nh
dGVkLiAgUHJldmlvdXNseSwKKyAgICAgICAgdGhleSB3b3VsZCBiZSBwb3B1bGF0ZWQgd2l0aCBk
dW1teSBjZWxscy4gIFdpdGggdGhpcyBwYXRjaCwgdGhleSBhcmUKKyAgICAgICAgdHVybmVkIGlu
dG8gYSBmcmVlIGxpc3QsIHdoaWNoIG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBuZXZlciBiZSBkZXN0
cnVjdG9yCisgICAgICAgIGNhbGxzIGZvciBhbGxvY2F0aW9ucyBpbiBmcmVzaCBibG9ja3MuCisg
ICAgICAgIAorICAgICAgICBUaGVzZSBjaGFuZ2VzIHJlc3VsdCBpbiBhIDEuOSUgc3BlZWQtdXAg
b24gVjgsIGFuZCBhIDAuNiUgc3BlZWQtdXAgb24KKyAgICAgICAgU3VuU3BpZGVyLiAgVGhlcmUg
YXJlIG5vIG9ic2VydmVkIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgc2xvdy1kb3ducworICAg
ICAgICBvbiBhbnkgaW5kaXZpZHVhbCBiZW5jaG1hcmsuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS5leHA6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjbGVhckFsbG9jQ2FjaGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXNl
dEFsbG9jYXRvcik6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6
OmZvckVhY2hQcm90ZWN0ZWRDZWxsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaENlbGwp
OgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoQmxvY2spOgorICAgICAgICAoSlNDOjpIZWFw
OjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
OjpsYXp5U3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Ymxlc3NOZXdCbG9ja0Zv
ckZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tGb3JT
bG93UGF0aCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjbGVhckFsbG9jQ2FjaGUpOgor
ICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKiBoZWFwL05ld1NwYWNlLmNw
cDoKKyAgICAgICAgKEpTQzo6TmV3U3BhY2U6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6TmV3
U3BhY2U6OmNsZWFyQWxsb2NDYWNoZSk6CisgICAgICAgICogaGVhcC9OZXdTcGFjZS5oOgorICAg
ICAgICAoSlNDOjpOZXdTcGFjZTo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpOZXdTcGFjZTo6
U2l6ZUNsYXNzOjpTaXplQ2xhc3MpOgorICAgICAgICAoSlNDOjpOZXdTcGFjZTo6U2l6ZUNsYXNz
OjpjbGVhckFsbG9jQ2FjaGUpOgorICAgICAgICAqIGhlYXAvT2xkU3BhY2UuY3BwOgorICAgICAg
ICAoSlNDOjpPbGRTcGFjZTo6YWRkQmxvY2spOgorCiAyMDExLTA3LTEzICBNaWNoYWVsIFNhYm9m
ZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NDIwMgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCShyZXZpc2lvbiA5MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw2ICsyMjQsNyBAQCBfX1pO
M0pTQzM1Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlCiBfX1pOM0pTQzQxY29uc3RydWN0
RnVuY3Rpb25Ta2lwcGluZ0V2YWxFbmFibGVkQ2hlY2tFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNH
bG9iYWxPYmplY3RFUktOU183QXJnTGlzdEVSS05TXzEwSWRlbnRpZmllckVSS05TXzdVU3RyaW5n
RWkKIF9fWk4zSlNDNEhlYXAxMW9iamVjdENvdW50RXYKIF9fWk4zSlNDNEhlYXAxNmFjdGl2aXR5
Q2FsbGJhY2tFdgorX19aTjNKU0M0SGVhcDE2YWxsb2NhdGVTbG93Q2FzZUVSTlNfOE5ld1NwYWNl
OVNpemVDbGFzc0UKIF9fWk4zSlNDNEhlYXAxNm9iamVjdFR5cGVDb3VudHNFdgogX19aTjNKU0M0
SGVhcDE3Y29sbGVjdEFsbEdhcmJhZ2VFdgogX19aTjNKU0M0SGVhcDE3Z2xvYmFsT2JqZWN0Q291
bnRFdgpAQCAtMjM3LDcgKzIzOCw2IEBAIF9fWk4zSlNDNEhlYXAyOXJlcG9ydEV4dHJhTWVtb3J5
Q29zdFNsb3cKIF9fWk4zSlNDNEhlYXA0c2l6ZUV2CiBfX1pOM0pTQzRIZWFwN2Rlc3Ryb3lFdgog
X19aTjNKU0M0SGVhcDdwcm90ZWN0RU5TXzdKU1ZhbHVlRQotX19aTjNKU0M0SGVhcDhhbGxvY2F0
ZUVSTlNfOE5ld1NwYWNlOVNpemVDbGFzc0UKIF9fWk4zSlNDNEhlYXA4Y2FwYWNpdHlFdgogX19a
TjNKU0M0SGVhcDl1bnByb3RlY3RFTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzRZYXJyMTFZYXJyUGF0
dGVybkMxRVJLTlNfN1VTdHJpbmdFYmJQUEtjCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkocmV2aXNpb24gOTA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDE1ICsxMDIsNiBAQCBpbmxpbmUgdm9pZCBD
bGVhck1hcmtzOjpvcGVyYXRvcigpKE1hcmtlCiAgICAgYmxvY2stPmNsZWFyTWFya3MoKTsKIH0K
IAotc3RydWN0IFJlc2V0QWxsb2NhdG9yIDogTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKLSAg
ICB2b2lkIG9wZXJhdG9yKCkoTWFya2VkQmxvY2sqKTsKLX07Ci0KLWlubGluZSB2b2lkIFJlc2V0
QWxsb2NhdG9yOjpvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykKLXsKLSAgICBibG9jay0+
cmVzZXRBbGxvY2F0b3IoKTsKLX0KLQogc3RydWN0IFN3ZWVwIDogTWFya2VkQmxvY2s6OlZvaWRG
dW5jdG9yIHsKICAgICB2b2lkIG9wZXJhdG9yKCkoTWFya2VkQmxvY2sqKTsKIH07CkBAIC0zMjAs
NyArMzExLDcgQEAgaW5saW5lIHZvaWQqIEhlYXA6OnRyeUFsbG9jYXRlKE5ld1NwYWNlOgogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQqIEhlYXA6OmFsbG9jYXRlKE5ld1NwYWNlOjpTaXpl
Q2xhc3MmIHNpemVDbGFzcykKK3ZvaWQqIEhlYXA6OmFsbG9jYXRlU2xvd0Nhc2UoTmV3U3BhY2U6
OlNpemVDbGFzcyYgc2l6ZUNsYXNzKQogewogI2lmIENPTExFQ1RfT05fRVZFUllfQUxMT0NBVElP
TgogICAgIGNvbGxlY3RBbGxHYXJiYWdlKCk7CkBAIC01NTgsNyArNTQ5LDkgQEAgdm9pZCBIZWFw
Ojpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIEFTU0VSVChnbG9iYWxEYXRhKCkt
PmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJs
ZSgpKTsKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwogICAgIEpBVkFTQ1JJUFRDT1JF
X0dDX0JFR0lOKCk7Ci0KKyAgICAKKyAgICBjbGVhckFsbG9jQ2FjaGUoKTsKKyAgICAKICAgICBt
YXJrUm9vdHMoKTsKICAgICBtX2hhbmRsZUhlYXAuZmluYWxpemVXZWFrSGFuZGxlcygpOwogICAg
IG1fZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmZpbmFsaXplU21hbGxTdHJpbmdzKCk7CkBAIC01
ODgsMTEgKzU4MSwxNSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dn
CiAgICAgKCptX2FjdGl2aXR5Q2FsbGJhY2spKCk7CiB9CiAKK3ZvaWQgSGVhcDo6Y2xlYXJBbGxv
Y0NhY2hlKCkKK3sKKyAgICBtX25ld1NwYWNlLmNsZWFyQWxsb2NDYWNoZSgpOworfQorCiB2b2lk
IEhlYXA6OnJlc2V0QWxsb2NhdG9yKCkKIHsKICAgICBtX2V4dHJhQ29zdCA9IDA7CiAgICAgbV9u
ZXdTcGFjZS5yZXNldEFsbG9jYXRvcigpOwotICAgIGZvckVhY2hCbG9jazxSZXNldEFsbG9jYXRv
cj4oKTsKIH0KIAogdm9pZCBIZWFwOjpzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NB
Y3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxiYWNrKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAkocmV2aXNpb24gOTA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJIYW5k
bGVTdGFjay5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxv
Y2tTZXQuaCIKKyNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk5ld1NwYWNlLmgi
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQu
aD4KQEAgLTEyNCw4ICsxMjUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBtYXhFeHRyYUNvc3QgPSAxMDI0ICogMTAyNDsKIAogICAgICAgICBib29sIGlz
VmFsaWRBbGxvY2F0aW9uKHNpemVfdCk7Ci0gICAgICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2Uo
c2l6ZV90KTsKICAgICAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUNvc3RTbG93Q2FzZShzaXpl
X3QpOworICAgICAgICB2b2lkIGNsZWFyQWxsb2NDYWNoZSgpOwogICAgICAgICB2b2lkIHJlc2V0
QWxsb2NhdG9yKCk7CiAKICAgICAgICAgTWFya2VkQmxvY2sqIGFsbG9jYXRlQmxvY2soc2l6ZV90
IGNlbGxTaXplKTsKQEAgLTEzNyw2ICsxMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBtYXJrVGVtcFNvcnRWZWN0b3JzKEhlYXBSb290VmlzaXRvciYpOwogCiAgICAgICAgIHZv
aWQqIHRyeUFsbG9jYXRlKE5ld1NwYWNlOjpTaXplQ2xhc3MmKTsKKyAgICAgICAgdm9pZCogYWxs
b2NhdGVTbG93Q2FzZShOZXdTcGFjZTo6U2l6ZUNsYXNzJik7CiAgICAgICAgIAogICAgICAgICBl
bnVtIFN3ZWVwVG9nZ2xlIHsgRG9Ob3RTd2VlcCwgRG9Td2VlcCB9OwogICAgICAgICB2b2lkIGNv
bGxlY3QoU3dlZXBUb2dnbGUpOwpAQCAtMjQyLDYgKzI0NCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6
OlJldHVyblR5cGUgSGVhcDo6Zm9yRWFjaFByb3RlY3RlZENlbGwoRnVuY3RvciYgZnVuY3RvcikK
ICAgICB7CisgICAgICAgIGNsZWFyQWxsb2NDYWNoZSgpOwogICAgICAgICBQcm90ZWN0Q291bnRT
ZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOwogICAgICAgICBmb3Ig
KFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBtX3Byb3RlY3RlZFZhbHVlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICBmdW5jdG9yKGl0LT5maXJzdCk7CkBAIC0y
NTgsNiArMjYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiBpbmxpbmUgdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBIZWFwOjpmb3JFYWNo
Q2VsbChGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKKyAgICAgICAgY2xlYXJBbGxvY0NhY2hlKCk7
CiAgICAgICAgIEJsb2NrSXRlcmF0b3IgZW5kID0gbV9ibG9ja3Muc2V0KCkuZW5kKCk7CiAgICAg
ICAgIGZvciAoQmxvY2tJdGVyYXRvciBpdCA9IG1fYmxvY2tzLnNldCgpLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKICAgICAgICAgICAgICgqaXQpLT5mb3JFYWNoQ2VsbChmdW5jdG9yKTsKQEAg
LTI3Miw2ICsyNzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+IGlubGluZSB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIEhlYXA6OmZvckVh
Y2hCbG9jayhGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKKyAgICAgICAgY2xlYXJBbGxvY0NhY2hl
KCk7CiAgICAgICAgIEJsb2NrSXRlcmF0b3IgZW5kID0gbV9ibG9ja3Muc2V0KCkuZW5kKCk7CiAg
ICAgICAgIGZvciAoQmxvY2tJdGVyYXRvciBpdCA9IG1fYmxvY2tzLnNldCgpLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgIGZ1bmN0b3IoKml0KTsKQEAgLTI4Myw2ICsyODgs
MTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEZ1bmN0b3IgZnVuY3RvcjsKICAgICAgICAg
cmV0dXJuIGZvckVhY2hCbG9jayhmdW5jdG9yKTsKICAgICB9CisgICAgCisgICAgaW5saW5lIHZv
aWQqIEhlYXA6OmFsbG9jYXRlKE5ld1NwYWNlOjpTaXplQ2xhc3MmIHNpemVDbGFzcykKKyAgICB7
CisgICAgICAgIC8vIFRoaXMgaXMgYSBsaWdodC13ZWlnaHQgZmFzdCBwYXRoIHRvIGNvdmVyIHRo
ZSBtb3N0IGNvbW1vbiBjYXNlLgorICAgICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGZpcnN0
RnJlZSA9IHNpemVDbGFzcy5maXJzdEZyZWU7CisgICAgICAgIGlmICghZmlyc3RGcmVlKQorICAg
ICAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZUNsYXNzKTsKKyAgICAgICAgCisg
ICAgICAgIHNpemVDbGFzcy5maXJzdEZyZWUgPSBmaXJzdEZyZWUtPm5leHQ7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx2b2lkKj4oZmlyc3RGcmVlKTsKKyAgICB9CiAKICAgICBpbmxpbmUg
dm9pZCogSGVhcDo6YWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQogICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDkwODc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OSwxNyArNDksMTIgQEAgdm9pZCBNYXJrZWRCbG9jazo6ZGVzdHJveShNYXJrZWRCbG9j
ayogYgogfQogCiBNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soY29uc3QgUGFnZUFsbG9jYXRpb25B
bGlnbmVkJiBhbGxvY2F0aW9uLCBIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUpCi0gICAgOiBt
X25leHRBdG9tKGZpcnN0QXRvbSgpKQotICAgICwgbV9pbk5ld1NwYWNlKGZhbHNlKQorICAgIDog
bV9pbk5ld1NwYWNlKGZhbHNlKQogICAgICwgbV9hbGxvY2F0aW9uKGFsbG9jYXRpb24pCiAgICAg
LCBtX2hlYXAoaGVhcCkKIHsKICAgICBtX2F0b21zUGVyQ2VsbCA9IChjZWxsU2l6ZSArIGF0b21T
aXplIC0gMSkgLyBhdG9tU2l6ZTsKICAgICBtX2VuZEF0b20gPSBhdG9tc1BlckJsb2NrIC0gbV9h
dG9tc1BlckNlbGwgKyAxOwotCi0gICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxlQ2VsbFN0cnVj
dHVyZSA9IGhlYXAtPmdsb2JhbERhdGEoKS0+ZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUuZ2V0
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9
IG1fYXRvbXNQZXJDZWxsKQotICAgICAgICBuZXcgKCZhdG9tcygpW2ldKSBKU0NlbGwoKmhlYXAt
Pmdsb2JhbERhdGEoKSwgZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUsIEpTQ2VsbDo6Q3JlYXRp
bmdFYXJseUNlbGwpOwogfQogCiB2b2lkIE1hcmtlZEJsb2NrOjpzd2VlcCgpCkBAIC04NSw2ICs4
MCw1NyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpzd2VlcCgpCiAgICAgfQogfQogCitNYXJrZWRCbG9j
azo6RnJlZUNlbGwqIE1hcmtlZEJsb2NrOjpsYXp5U3dlZXAoKQoreworICAgIEZyZWVDZWxsKiBy
ZXN1bHQgPSAwOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1f
ZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgeworICAgICAgICBpZiAoIW1fbWFya3MudGVz
dEFuZFNldChpKSkgeworICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2Fz
dDxKU0NlbGwqPigmYXRvbXMoKVtpXSk7CisgICAgICAgICAgICBjZWxsLT5+SlNDZWxsKCk7Cisg
ICAgICAgICAgICBGcmVlQ2VsbCogZnJlZUNlbGwgPSByZWludGVycHJldF9jYXN0PEZyZWVDZWxs
Kj4oY2VsbCk7CisgICAgICAgICAgICBmcmVlQ2VsbC0+bmV4dCA9IHJlc3VsdDsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IGZyZWVDZWxsOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK01hcmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OmJsZXNz
TmV3QmxvY2tGb3JGYXN0UGF0aCgpCit7CisgICAgRnJlZUNlbGwqIHJlc3VsdCA9IDA7CisgICAg
Zm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQ
ZXJDZWxsKSB7CisgICAgICAgIG1fbWFya3Muc2V0KGkpOworICAgICAgICBGcmVlQ2VsbCogZnJl
ZUNlbGwgPSByZWludGVycHJldF9jYXN0PEZyZWVDZWxsKj4oJmF0b21zKClbaV0pOworICAgICAg
ICBmcmVlQ2VsbC0+bmV4dCA9IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0ID0gZnJlZUNlbGw7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTWFya2VkQmxvY2s6OmJsZXNzTmV3
QmxvY2tGb3JTbG93UGF0aCgpCit7CisgICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxlQ2VsbFN0
cnVjdHVyZSA9IG1faGVhcC0+Z2xvYmFsRGF0YSgpLT5kdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVy
ZS5nZXQoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207
IGkgKz0gbV9hdG9tc1BlckNlbGwpCisgICAgICAgIG5ldyAoJmF0b21zKClbaV0pIEpTQ2VsbCgq
bV9oZWFwLT5nbG9iYWxEYXRhKCksIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLCBKU0NlbGw6
OkNyZWF0aW5nRWFybHlDZWxsKTsKK30KKwordm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJBbGxvY0Nh
Y2hlKEZyZWVDZWxsKiBmaXJzdEZyZWUpCit7CisgICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxl
Q2VsbFN0cnVjdHVyZSA9IG1faGVhcC0+Z2xvYmFsRGF0YSgpLT5kdW1teU1hcmthYmxlQ2VsbFN0
cnVjdHVyZS5nZXQoKTsKKyAgICAKKyAgICBmb3IgKEZyZWVDZWxsKiBjdXJyZW50ID0gZmlyc3RG
cmVlOyBjdXJyZW50OykgeworICAgICAgICBGcmVlQ2VsbCogbmV4dCA9IGN1cnJlbnQtPm5leHQ7
CisgICAgICAgIHNpemVfdCBpID0gYXRvbU51bWJlcihjdXJyZW50KTsKKyAgICAgICAgCisgICAg
ICAgIG1fbWFya3MuY2xlYXIoaSk7CisgICAgICAgIG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KGN1
cnJlbnQpKSBKU0NlbGwoKm1faGVhcC0+Z2xvYmFsRGF0YSgpLCBkdW1teU1hcmthYmxlQ2VsbFN0
cnVjdHVyZSwgSlNDZWxsOjpDcmVhdGluZ0Vhcmx5Q2VsbCk7CisKKyAgICAgICAgY3VycmVudCA9
IG5leHQ7CisgICAgfQorfQorCiAjaWYgRU5BQkxFKEpTQ19aT01CSUVTKQogdm9pZCBNYXJrZWRC
bG9jazo6Y2xlYXJNYXJrcygpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgJKHJldmlzaW9uIDkwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsMTAgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXRvbXNQZXJCbG9jayA9IGJs
b2NrU2l6ZSAvIGF0b21TaXplOyAvLyB+MS41JSBvdmVyaGVhZAogICAgICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IG93bmVyU2V0c1BlckJsb2NrID0gODsgLy8gfjIlIG92ZXJoZWFkLgogCisgICAg
ICAgIHN0cnVjdCBGcmVlQ2VsbCB7CisgICAgICAgICAgICBGcmVlQ2VsbCogbmV4dDsKKyAgICAg
ICAgfTsKKyAgICAgICAgCiAgICAgICAgIHN0cnVjdCBWb2lkRnVuY3RvciB7CiAgICAgICAgICAg
ICB0eXBlZGVmIHZvaWQgUmV0dXJuVHlwZTsKICAgICAgICAgICAgIHZvaWQgcmV0dXJuVmFsdWUo
KSB7IH0KQEAgLTg0LDkgKzg4LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNl
dEluTmV3U3BhY2UoYm9vbCk7CiAKICAgICAgICAgdm9pZCogYWxsb2NhdGUoKTsKLSAgICAgICAg
dm9pZCByZXNldEFsbG9jYXRvcigpOwogICAgICAgICB2b2lkIHN3ZWVwKCk7CiAgICAgICAgIAor
ICAgICAgICAvLyBUaGlzIGludm9rZXMgZGVzdHJ1Y3RvcnMgb24gYWxsIGNlbGxzIHRoYXQgYXJl
IG5vdCBtYXJrZWQsIG1hcmtzCisgICAgICAgIC8vIHRoZW0sIGFuZCByZXR1cm5zIGEgbGlua2Vk
IGxpc3Qgb2YgdGhvc2UgY2VsbHMuCisgICAgICAgIEZyZWVDZWxsKiBsYXp5U3dlZXAoKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFRoZXNlIHNob3VsZCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0
ZXIgYSBibG9jayBpcyBjcmVhdGVkLgorICAgICAgICAvLyBCbGVzc2luZyBmb3IgZmFzdCBwYXRo
IGNyZWF0ZXMgYSBsaW5rZWQgbGlzdCwgd2hpbGUgYmxlc3NpbmcgZm9yCisgICAgICAgIC8vIHNs
b3cgcGF0aCBjcmVhdGVzIGR1bW15IGNlbGxzLgorICAgICAgICBGcmVlQ2VsbCogYmxlc3NOZXdC
bG9ja0ZvckZhc3RQYXRoKCk7CisgICAgICAgIHZvaWQgYmxlc3NOZXdCbG9ja0ZvclNsb3dQYXRo
KCk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIHVubWFya3MgYWxsIGNlbGxzIG9uIHRoZSBm
cmVlIGxpc3QsIGFuZCBhbGxvY2F0ZXMgZHVtbXkgSlNDZWxscworICAgICAgICAvLyBpbiB0aGVp
ciBwbGFjZS4KKyAgICAgICAgdm9pZCBjbGVhckFsbG9jQ2FjaGUoRnJlZUNlbGwqIGZpcnN0RnJl
ZSk7CisgICAgICAgIAogICAgICAgICBib29sIGlzRW1wdHkoKTsKIAogICAgICAgICB2b2lkIGNs
ZWFyTWFya3MoKTsKQEAgLTExOCw3ICsxMzUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c2l6ZV90IGF0b21OdW1iZXIoY29uc3Qgdm9pZCopOwogICAgICAgICBzaXplX3Qgb3duZXJTZXRO
dW1iZXIoY29uc3QgSlNDZWxsKik7CiAKLSAgICAgICAgc2l6ZV90IG1fbmV4dEF0b207CiAgICAg
ICAgIHNpemVfdCBtX2VuZEF0b207IC8vIFRoaXMgaXMgYSBmdXp6eSBlbmQuIEFsd2F5cyB0ZXN0
IGZvciA8IG1fZW5kQXRvbS4KICAgICAgICAgc2l6ZV90IG1fYXRvbXNQZXJDZWxsOwogICAgICAg
ICBXVEY6OkJpdG1hcDxibG9ja1NpemUgLyBhdG9tU2l6ZT4gbV9tYXJrczsKQEAgLTE2NSwxMSAr
MTgxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIG1faW5OZXdTcGFjZSA9IGluTmV3U3Bh
Y2U7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OnJlc2V0QWxsb2NhdG9y
KCkKLSAgICB7Ci0gICAgICAgIG1fbmV4dEF0b20gPSBmaXJzdEF0b20oKTsKLSAgICB9Ci0KICAg
ICBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNFbXB0eSgpCiAgICAgewogICAgICAgICByZXR1
cm4gbV9tYXJrcy5pc0VtcHR5KCk7CkBAIC0yMzUsMjIgKzI0Niw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgZnVuY3RvcihyZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KCZhdG9tcygp
W2ldKSk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBpbmxpbmUgdm9pZCogTWFya2VkQmxvY2s6
OmFsbG9jYXRlKCkKLSAgICB7Ci0gICAgICAgIHdoaWxlIChtX25leHRBdG9tIDwgbV9lbmRBdG9t
KSB7Ci0gICAgICAgICAgICBpZiAoIW1fbWFya3MudGVzdEFuZFNldChtX25leHRBdG9tKSkgewot
ICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4o
JmF0b21zKClbbV9uZXh0QXRvbV0pOwotICAgICAgICAgICAgICAgIG1fbmV4dEF0b20gKz0gbV9h
dG9tc1BlckNlbGw7Ci0gICAgICAgICAgICAgICAgZGVzdHJ1Y3RvcihjZWxsKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY2VsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fbmV4dEF0
b20gKz0gbV9hdG9tc1BlckNlbGw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KKyAgICAKICAgICBpbmxpbmUgc2l6ZV90IE1hcmtlZEJsb2NrOjpvd25lclNldE51bWJl
cihjb25zdCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0
X2Nhc3Q8Qml0cz4oY2VsbCkgLSByZWludGVycHJldF9jYXN0PEJpdHM+KHRoaXMpKSAqIG93bmVy
U2V0c1BlckJsb2NrIC8gYmxvY2tTaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTmV3U3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L05ld1NwYWNlLmNwcAkocmV2aXNpb24gOTA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9OZXdTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEwIEBAIHZvaWQg
TmV3U3BhY2U6OmFkZEJsb2NrKFNpemVDbGFzcyYgc2l6ZUMKICAgICBibG9jay0+c2V0SW5OZXdT
cGFjZSh0cnVlKTsKICAgICBzaXplQ2xhc3MubmV4dEJsb2NrID0gYmxvY2s7CiAgICAgc2l6ZUNs
YXNzLmJsb2NrTGlzdC5hcHBlbmQoYmxvY2spOworICAgIEFTU0VSVCghc2l6ZUNsYXNzLmN1ckJs
b2NrKTsKKyAgICBBU1NFUlQoIXNpemVDbGFzcy5maXJzdEZyZWUpOworICAgIHNpemVDbGFzcy5j
dXJCbG9jayA9IGJsb2NrOworICAgIHNpemVDbGFzcy5maXJzdEZyZWUgPSBibG9jay0+Ymxlc3NO
ZXdCbG9ja0ZvckZhc3RQYXRoKCk7CiB9CiAKIHZvaWQgTmV3U3BhY2U6OnJlbW92ZUJsb2NrKE1h
cmtlZEJsb2NrKiBibG9jaykKQEAgLTY5LDQgKzczLDEzIEBAIHZvaWQgTmV3U3BhY2U6OnJlc2V0
QWxsb2NhdG9yKCkKICAgICAgICAgc2l6ZUNsYXNzRm9yKGNlbGxTaXplKS5yZXNldEFsbG9jYXRv
cigpOwogfQogCit2b2lkIE5ld1NwYWNlOjpjbGVhckFsbG9jQ2FjaGUoKQoreworICAgIGZvciAo
c2l6ZV90IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDwgcHJlY2lzZUN1dG9mZjsg
Y2VsbFNpemUgKz0gcHJlY2lzZVN0ZXApCisgICAgICAgIHNpemVDbGFzc0ZvcihjZWxsU2l6ZSku
Y2xlYXJBbGxvY0NhY2hlKCk7CisKKyAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IGltcHJlY2lz
ZVN0ZXA7IGNlbGxTaXplIDwgaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNpc2VT
dGVwKQorICAgICAgICBzaXplQ2xhc3NGb3IoY2VsbFNpemUpLmNsZWFyQWxsb2NDYWNoZSgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L05ld1NwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTmV3
U3BhY2UuaAkocmV2aXNpb24gOTA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9O
ZXdTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCwxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgc3RydWN0IFNpemVDbGFzcyB7CiAgICAgICAgICAgICBTaXplQ2xhc3MoKTsK
ICAgICAgICAgICAgIHZvaWQgcmVzZXRBbGxvY2F0b3IoKTsKKyAgICAgICAgICAgIHZvaWQgY2xl
YXJBbGxvY0NhY2hlKCk7CiAKKyAgICAgICAgICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogZmly
c3RGcmVlOworICAgICAgICAgICAgTWFya2VkQmxvY2sqIGN1ckJsb2NrOwogICAgICAgICAgICAg
TWFya2VkQmxvY2sqIG5leHRCbG9jazsKICAgICAgICAgICAgIERvdWJseUxpbmtlZExpc3Q8TWFy
a2VkQmxvY2s+IGJsb2NrTGlzdDsKICAgICAgICAgICAgIHNpemVfdCBjZWxsU2l6ZTsKQEAgLTY0
LDYgKzY3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBhZGRCbG9jayhTaXpl
Q2xhc3MmLCBNYXJrZWRCbG9jayopOwogICAgICAgICB2b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJs
b2NrKik7CisgICAgICAgIAorICAgICAgICB2b2lkIGNsZWFyQWxsb2NDYWNoZSgpOwogCiAgICAg
ICAgIHNpemVfdCB3YXRlck1hcmsoKTsKICAgICAgICAgc2l6ZV90IGhpZ2hXYXRlck1hcmsoKTsK
QEAgLTExNSwxNCArMTIwLDQzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIHZvaWQq
IE5ld1NwYWNlOjphbGxvY2F0ZShTaXplQ2xhc3MmIHNpemVDbGFzcykKICAgICB7Ci0gICAgICAg
IGZvciAoTWFya2VkQmxvY2sqJiBibG9jayA9IHNpemVDbGFzcy5uZXh0QmxvY2sgOyBibG9jazsg
YmxvY2sgPSBibG9jay0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAodm9pZCogcmVzdWx0ID0g
YmxvY2stPmFsbG9jYXRlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAg
ICAgICAgICAgbV93YXRlck1hcmsgKz0gYmxvY2stPmNhcGFjaXR5KCk7CisgICAgICAgIE1hcmtl
ZEJsb2NrOjpGcmVlQ2VsbCogZmlyc3RGcmVlID0gc2l6ZUNsYXNzLmZpcnN0RnJlZTsKKyAgICAg
ICAgaWYgKCFmaXJzdEZyZWUpIHsKKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcG9zc2li
aWxpdGllcyBmb3Igd2h5IHdlIGdvdCBoZXJlOgorICAgICAgICAgICAgLy8gMSkgV2UndmUgZXho
YXVzdGVkIHRoZSBhbGxvY2F0aW9uIGNhY2hlIGZvciBjdXJCbG9jaywgaW4gd2hpY2ggY2FzZQor
ICAgICAgICAgICAgLy8gICAgY3VyQmxvY2sgPT0gbmV4dEJsb2NrLCBhbmQgd2Uga25vdyB0aGF0
IHRoZXJlIGlzIG5vIHJlYXNvbiB0bworICAgICAgICAgICAgLy8gICAgcmVwZWF0IGEgbGF6eSBz
d2VlcCBvZiBuZXh0QmxvY2sgYmVjYXVzZSB3ZSB3b24ndCBmaW5kIGFueXRoaW5nLgorICAgICAg
ICAgICAgLy8gMikgQWxsb2NhdGlvbiBjYWNoZXMgaGF2ZSBiZWVuIGNsZWFyZWQsIGluIHdoaWNo
IGNhc2UgbmV4dEJsb2NrIG1heQorICAgICAgICAgICAgLy8gICAgaGF2ZSAoYW5kIG1vc3QgbGlr
ZWx5IGRvZXMgaGF2ZSkgZnJlZSBjZWxscywgc28gd2UgYWxtb3N0IGNlcnRhaW5seQorICAgICAg
ICAgICAgLy8gICAgc2hvdWxkIGRvIGEgbGF6eVN3ZWVwIGZvciBuZXh0QmxvY2suIFRoaXMgYWxz
byBpbXBsaWVzIHRoYXQKKyAgICAgICAgICAgIC8vICAgIGN1ckJsb2NrID09IDAuCisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChzaXplQ2xhc3MuY3VyQmxvY2spIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoc2l6ZUNsYXNzLmN1ckJsb2NrID09IHNpemVDbGFzcy5uZXh0QmxvY2spOwor
ICAgICAgICAgICAgICAgIG1fd2F0ZXJNYXJrICs9IHNpemVDbGFzcy5uZXh0QmxvY2stPmNhcGFj
aXR5KCk7CisgICAgICAgICAgICAgICAgc2l6ZUNsYXNzLm5leHRCbG9jayA9IHNpemVDbGFzcy5u
ZXh0QmxvY2stPm5leHQoKTsKKyAgICAgICAgICAgICAgICBzaXplQ2xhc3MuY3VyQmxvY2sgPSAw
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKE1hcmtlZEJs
b2NrKiYgYmxvY2sgPSBzaXplQ2xhc3MubmV4dEJsb2NrIDsgYmxvY2s7IGJsb2NrID0gYmxvY2st
Pm5leHQoKSkgeworICAgICAgICAgICAgICAgIGZpcnN0RnJlZSA9IGJsb2NrLT5sYXp5U3dlZXAo
KTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RGcmVlKSB7CisgICAgICAgICAgICAgICAgICAg
IHNpemVDbGFzcy5maXJzdEZyZWUgPSBmaXJzdEZyZWU7CisgICAgICAgICAgICAgICAgICAgIHNp
emVDbGFzcy5jdXJCbG9jayA9IGJsb2NrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV93YXRl
ck1hcmsgKz0gYmxvY2stPmNhcGFjaXR5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICghZmlyc3RGcmVlKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICBBU1NFUlQo
Zmlyc3RGcmVlKTsKKyAgICAgICAgCisgICAgICAgIHNpemVDbGFzcy5maXJzdEZyZWUgPSBmaXJz
dEZyZWUtPm5leHQ7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx2b2lkKj4oZmlyc3RGcmVl
KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVu
YW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgTmV3U3BhY2U6OmZvckVhY2hCbG9jayhGdW5jdG9yJiBm
dW5jdG9yKQpAQCAtMTU1LDcgKzE4OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KIAogICAg
IGlubGluZSBOZXdTcGFjZTo6U2l6ZUNsYXNzOjpTaXplQ2xhc3MoKQotICAgICAgICA6IG5leHRC
bG9jaygwKQorICAgICAgICA6IGZpcnN0RnJlZSgwKQorICAgICAgICAsIGN1ckJsb2NrKDApCisg
ICAgICAgICwgbmV4dEJsb2NrKDApCiAgICAgICAgICwgY2VsbFNpemUoMCkKICAgICB7CiAgICAg
fQpAQCAtMTY0LDYgKzIwMCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIG5l
eHRCbG9jayA9IGJsb2NrTGlzdC5oZWFkKCk7CiAgICAgfQorICAgIAorICAgIGlubGluZSB2b2lk
IE5ld1NwYWNlOjpTaXplQ2xhc3M6OmNsZWFyQWxsb2NDYWNoZSgpCisgICAgeworICAgICAgICBp
ZiAoY3VyQmxvY2spIHsKKyAgICAgICAgICAgIGN1ckJsb2NrLT5jbGVhckFsbG9jQ2FjaGUoZmly
c3RGcmVlKTsKKyAgICAgICAgICAgIGZpcnN0RnJlZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEFTU0VSVCghZmlyc3RGcmVlKTsKKyAgICAgICAgCisgICAgICAgIGN1ckJsb2Nr
ID0gMDsKKyAgICAgICAgZmlyc3RGcmVlID0gMDsKKyAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PbGRTcGFjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT2xkU3BhY2UuY3BwCShyZXZpc2lv
biA5MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09sZFNwYWNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBPbGRTcGFjZTo6T2xkU3BhY2UoSGVhcCogaGVh
cCkKIHZvaWQgT2xkU3BhY2U6OmFkZEJsb2NrKE1hcmtlZEJsb2NrKiBibG9jaykKIHsKICAgICBt
X2Jsb2Nrcy5hcHBlbmQoYmxvY2spOworICAgIGJsb2NrLT5ibGVzc05ld0Jsb2NrRm9yU2xvd1Bh
dGgoKTsKIH0KIAogdm9pZCBPbGRTcGFjZTo6cmVtb3ZlQmxvY2soTWFya2VkQmxvY2sqIGJsb2Nr
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100739</attachid>
            <date>2011-07-13 17:48:14 -0700</date>
            <delta_ts>2011-07-14 15:01:09 -0700</delta_ts>
            <desc>the patch (more style fixes)</desc>
            <filename>fastalloc_patch_3.diff</filename>
            <type>text/plain</type>
            <size>18493</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA5NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTMgQEAK
KzIwMTEtMDctMTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBH
QyBhbGxvY2F0aW9uIGZhc3QgcGF0aCBoYXMgdG9vIG1hbnkgb3BlcmF0aW9ucy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDkzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBDaGFuZ2VkIHRo
ZSB0aW1pbmcgb2YgdGhlIGxhenkgc3dlZXAgc28gdGhhdCBpdCBvY2N1cnMgd2hlbiB3ZSBsYW5k
IG9uCisgICAgICAgIGEgcHJldmlvdXNseS11bnN3ZWVwZWQgYmxvY2ssIHJhdGhlciB0aGFuIHdo
ZW5ldmVyIHdlIGxhbmQgb24gYW4gdW5zd2VlcGVkCisgICAgICAgIGNlbGwuICBBZnRlciB0aGUg
cGVyLWJsb2NrIGxhenkgc3dlZXAgb2NjdXJzLCB0aGUgYmxvY2sgaXMgdHVybmVkIGludG8gYQor
ICAgICAgICBzaW5nbHkgbGlua2VkIGxpc3Qgb2YgZnJlZSBjZWxscy4gIFRoZSBhbGxvY2F0aW9u
IGZhc3QgcGF0aCBpcyBub3cganVzdCBhCisgICAgICAgIGxvYWQtYnJhbmNoLXN0b3JlIHRvIHJl
bW92ZSBhIGNlbGwgZnJvbSB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KKyAgICAgICAgCisgICAgICAg
IEFkZGl0aW9uYWxseSwgdGhpcyBjaGFuZ2VzIHRoZSB3YXkgbmV3IGJsb2NrcyBhcmUgYWxsb2Nh
dGVkLiAgUHJldmlvdXNseSwKKyAgICAgICAgdGhleSB3b3VsZCBiZSBwb3B1bGF0ZWQgd2l0aCBk
dW1teSBjZWxscy4gIFdpdGggdGhpcyBwYXRjaCwgdGhleSBhcmUKKyAgICAgICAgdHVybmVkIGlu
dG8gYSBmcmVlIGxpc3QsIHdoaWNoIG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBuZXZlciBiZSBkZXN0
cnVjdG9yCisgICAgICAgIGNhbGxzIGZvciBhbGxvY2F0aW9ucyBpbiBmcmVzaCBibG9ja3MuCisg
ICAgICAgIAorICAgICAgICBUaGVzZSBjaGFuZ2VzIHJlc3VsdCBpbiBhIDEuOSUgc3BlZWQtdXAg
b24gVjgsIGFuZCBhIDAuNiUgc3BlZWQtdXAgb24KKyAgICAgICAgU3VuU3BpZGVyLiAgVGhlcmUg
YXJlIG5vIG9ic2VydmVkIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgc2xvdy1kb3ducworICAg
ICAgICBvbiBhbnkgaW5kaXZpZHVhbCBiZW5jaG1hcmsuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS5leHA6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjbGVhckFsbG9jQ2FjaGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXNl
dEFsbG9jYXRvcik6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6
OmZvckVhY2hQcm90ZWN0ZWRDZWxsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaENlbGwp
OgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoQmxvY2spOgorICAgICAgICAoSlNDOjpIZWFw
OjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
OjpsYXp5U3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Ymxlc3NOZXdCbG9ja0Zv
ckZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tGb3JT
bG93UGF0aCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjbGVhckFsbG9jQ2FjaGUpOgor
ICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKiBoZWFwL05ld1NwYWNlLmNw
cDoKKyAgICAgICAgKEpTQzo6TmV3U3BhY2U6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6TmV3
U3BhY2U6OmNsZWFyQWxsb2NDYWNoZSk6CisgICAgICAgICogaGVhcC9OZXdTcGFjZS5oOgorICAg
ICAgICAoSlNDOjpOZXdTcGFjZTo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpOZXdTcGFjZTo6
U2l6ZUNsYXNzOjpTaXplQ2xhc3MpOgorICAgICAgICAoSlNDOjpOZXdTcGFjZTo6U2l6ZUNsYXNz
OjpjbGVhckFsbG9jQ2FjaGUpOgorICAgICAgICAqIGhlYXAvT2xkU3BhY2UuY3BwOgorICAgICAg
ICAoSlNDOjpPbGRTcGFjZTo6YWRkQmxvY2spOgorCiAyMDExLTA3LTEzICBNaWNoYWVsIFNhYm9m
ZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NDIwMgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCShyZXZpc2lvbiA5MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw2ICsyMjQsNyBAQCBfX1pO
M0pTQzM1Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlCiBfX1pOM0pTQzQxY29uc3RydWN0
RnVuY3Rpb25Ta2lwcGluZ0V2YWxFbmFibGVkQ2hlY2tFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNH
bG9iYWxPYmplY3RFUktOU183QXJnTGlzdEVSS05TXzEwSWRlbnRpZmllckVSS05TXzdVU3RyaW5n
RWkKIF9fWk4zSlNDNEhlYXAxMW9iamVjdENvdW50RXYKIF9fWk4zSlNDNEhlYXAxNmFjdGl2aXR5
Q2FsbGJhY2tFdgorX19aTjNKU0M0SGVhcDE2YWxsb2NhdGVTbG93Q2FzZUVSTlNfOE5ld1NwYWNl
OVNpemVDbGFzc0UKIF9fWk4zSlNDNEhlYXAxNm9iamVjdFR5cGVDb3VudHNFdgogX19aTjNKU0M0
SGVhcDE3Y29sbGVjdEFsbEdhcmJhZ2VFdgogX19aTjNKU0M0SGVhcDE3Z2xvYmFsT2JqZWN0Q291
bnRFdgpAQCAtMjM3LDcgKzIzOCw2IEBAIF9fWk4zSlNDNEhlYXAyOXJlcG9ydEV4dHJhTWVtb3J5
Q29zdFNsb3cKIF9fWk4zSlNDNEhlYXA0c2l6ZUV2CiBfX1pOM0pTQzRIZWFwN2Rlc3Ryb3lFdgog
X19aTjNKU0M0SGVhcDdwcm90ZWN0RU5TXzdKU1ZhbHVlRQotX19aTjNKU0M0SGVhcDhhbGxvY2F0
ZUVSTlNfOE5ld1NwYWNlOVNpemVDbGFzc0UKIF9fWk4zSlNDNEhlYXA4Y2FwYWNpdHlFdgogX19a
TjNKU0M0SGVhcDl1bnByb3RlY3RFTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzRZYXJyMTFZYXJyUGF0
dGVybkMxRVJLTlNfN1VTdHJpbmdFYmJQUEtjCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkocmV2aXNpb24gOTA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDE1ICsxMDIsNiBAQCBpbmxpbmUgdm9pZCBD
bGVhck1hcmtzOjpvcGVyYXRvcigpKE1hcmtlCiAgICAgYmxvY2stPmNsZWFyTWFya3MoKTsKIH0K
IAotc3RydWN0IFJlc2V0QWxsb2NhdG9yIDogTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKLSAg
ICB2b2lkIG9wZXJhdG9yKCkoTWFya2VkQmxvY2sqKTsKLX07Ci0KLWlubGluZSB2b2lkIFJlc2V0
QWxsb2NhdG9yOjpvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykKLXsKLSAgICBibG9jay0+
cmVzZXRBbGxvY2F0b3IoKTsKLX0KLQogc3RydWN0IFN3ZWVwIDogTWFya2VkQmxvY2s6OlZvaWRG
dW5jdG9yIHsKICAgICB2b2lkIG9wZXJhdG9yKCkoTWFya2VkQmxvY2sqKTsKIH07CkBAIC0zMjAs
NyArMzExLDcgQEAgaW5saW5lIHZvaWQqIEhlYXA6OnRyeUFsbG9jYXRlKE5ld1NwYWNlOgogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQqIEhlYXA6OmFsbG9jYXRlKE5ld1NwYWNlOjpTaXpl
Q2xhc3MmIHNpemVDbGFzcykKK3ZvaWQqIEhlYXA6OmFsbG9jYXRlU2xvd0Nhc2UoTmV3U3BhY2U6
OlNpemVDbGFzcyYgc2l6ZUNsYXNzKQogewogI2lmIENPTExFQ1RfT05fRVZFUllfQUxMT0NBVElP
TgogICAgIGNvbGxlY3RBbGxHYXJiYWdlKCk7CkBAIC01NTgsNyArNTQ5LDkgQEAgdm9pZCBIZWFw
Ojpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIEFTU0VSVChnbG9iYWxEYXRhKCkt
PmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJs
ZSgpKTsKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwogICAgIEpBVkFTQ1JJUFRDT1JF
X0dDX0JFR0lOKCk7Ci0KKyAgICAKKyAgICBjbGVhckFsbG9jQ2FjaGUoKTsKKyAgICAKICAgICBt
YXJrUm9vdHMoKTsKICAgICBtX2hhbmRsZUhlYXAuZmluYWxpemVXZWFrSGFuZGxlcygpOwogICAg
IG1fZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmZpbmFsaXplU21hbGxTdHJpbmdzKCk7CkBAIC01
ODgsMTEgKzU4MSwxNSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dn
CiAgICAgKCptX2FjdGl2aXR5Q2FsbGJhY2spKCk7CiB9CiAKK3ZvaWQgSGVhcDo6Y2xlYXJBbGxv
Y0NhY2hlKCkKK3sKKyAgICBtX25ld1NwYWNlLmNsZWFyQWxsb2NDYWNoZSgpOworfQorCiB2b2lk
IEhlYXA6OnJlc2V0QWxsb2NhdG9yKCkKIHsKICAgICBtX2V4dHJhQ29zdCA9IDA7CiAgICAgbV9u
ZXdTcGFjZS5yZXNldEFsbG9jYXRvcigpOwotICAgIGZvckVhY2hCbG9jazxSZXNldEFsbG9jYXRv
cj4oKTsKIH0KIAogdm9pZCBIZWFwOjpzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NB
Y3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxiYWNrKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAkocmV2aXNpb24gOTA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDkgKzI0LDEwIEBACiAKICNpbmNsdWRlICJI
YW5kbGVIZWFwLmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKLSNpbmNsdWRlICJTbG90Vmlz
aXRvci5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tT
ZXQuaCIKICNpbmNsdWRlICJOZXdTcGFjZS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtMTI0LDggKzEyNSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEV4dHJhQ29zdCA9IDEwMjQgKiAx
MDI0OwogCiAgICAgICAgIGJvb2wgaXNWYWxpZEFsbG9jYXRpb24oc2l6ZV90KTsKLSAgICAgICAg
dm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwogICAgICAgICB2b2lkIHJlcG9ydEV4dHJh
TWVtb3J5Q29zdFNsb3dDYXNlKHNpemVfdCk7CisgICAgICAgIHZvaWQgY2xlYXJBbGxvY0NhY2hl
KCk7CiAgICAgICAgIHZvaWQgcmVzZXRBbGxvY2F0b3IoKTsKIAogICAgICAgICBNYXJrZWRCbG9j
ayogYWxsb2NhdGVCbG9jayhzaXplX3QgY2VsbFNpemUpOwpAQCAtMTM3LDYgKzEzOCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIG1hcmtUZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RW
aXNpdG9yJik7CiAKICAgICAgICAgdm9pZCogdHJ5QWxsb2NhdGUoTmV3U3BhY2U6OlNpemVDbGFz
cyYpOworICAgICAgICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKE5ld1NwYWNlOjpTaXplQ2xhc3Mm
KTsKICAgICAgICAgCiAgICAgICAgIGVudW0gU3dlZXBUb2dnbGUgeyBEb05vdFN3ZWVwLCBEb1N3
ZWVwIH07CiAgICAgICAgIHZvaWQgY29sbGVjdChTd2VlcFRvZ2dsZSk7CkBAIC0yNDIsNiArMjQ0
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBp
bmxpbmUgdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBIZWFwOjpmb3JFYWNoUHJvdGVjdGVk
Q2VsbChGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKKyAgICAgICAgY2xlYXJBbGxvY0NhY2hlKCk7
CiAgICAgICAgIFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1
ZXMuZW5kKCk7CiAgICAgICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IG1f
cHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgIGZ1
bmN0b3IoaXQtPmZpcnN0KTsKQEAgLTI1OCw2ICsyNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB0eXBlbmFtZSBGdW5jdG9yOjpS
ZXR1cm5UeXBlIEhlYXA6OmZvckVhY2hDZWxsKEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgeworICAg
ICAgICBjbGVhckFsbG9jQ2FjaGUoKTsKICAgICAgICAgQmxvY2tJdGVyYXRvciBlbmQgPSBtX2Js
b2Nrcy5zZXQoKS5lbmQoKTsKICAgICAgICAgZm9yIChCbG9ja0l0ZXJhdG9yIGl0ID0gbV9ibG9j
a3Muc2V0KCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgKCppdCktPmZv
ckVhY2hDZWxsKGZ1bmN0b3IpOwpAQCAtMjcyLDYgKzI3Niw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6
OlJldHVyblR5cGUgSGVhcDo6Zm9yRWFjaEJsb2NrKEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewor
ICAgICAgICBjbGVhckFsbG9jQ2FjaGUoKTsKICAgICAgICAgQmxvY2tJdGVyYXRvciBlbmQgPSBt
X2Jsb2Nrcy5zZXQoKS5lbmQoKTsKICAgICAgICAgZm9yIChCbG9ja0l0ZXJhdG9yIGl0ID0gbV9i
bG9ja3Muc2V0KCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgZnVuY3Rv
cigqaXQpOwpAQCAtMjgzLDYgKzI4OCwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRnVu
Y3RvciBmdW5jdG9yOwogICAgICAgICByZXR1cm4gZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOwogICAg
IH0KKyAgICAKKyAgICBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGUoTmV3U3BhY2U6OlNpemVD
bGFzcyYgc2l6ZUNsYXNzKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyBhIGxpZ2h0LXdlaWdo
dCBmYXN0IHBhdGggdG8gY292ZXIgdGhlIG1vc3QgY29tbW9uIGNhc2UuCisgICAgICAgIE1hcmtl
ZEJsb2NrOjpGcmVlQ2VsbCogZmlyc3RGcmVlID0gc2l6ZUNsYXNzLmZpcnN0RnJlZTsKKyAgICAg
ICAgaWYgKCFmaXJzdEZyZWUpCisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZShz
aXplQ2xhc3MpOworICAgICAgICAKKyAgICAgICAgc2l6ZUNsYXNzLmZpcnN0RnJlZSA9IGZpcnN0
RnJlZS0+bmV4dDsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHZvaWQqPihmaXJzdEZyZWUp
OworICAgIH0KIAogICAgIGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZShzaXplX3QgYnl0ZXMp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNw
cAkocmV2aXNpb24gOTA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE3ICs0OSwxMiBAQCB2b2lkIE1hcmtlZEJs
b2NrOjpkZXN0cm95KE1hcmtlZEJsb2NrKiBiCiB9CiAKIE1hcmtlZEJsb2NrOjpNYXJrZWRCbG9j
ayhjb25zdCBQYWdlQWxsb2NhdGlvbkFsaWduZWQmIGFsbG9jYXRpb24sIEhlYXAqIGhlYXAsIHNp
emVfdCBjZWxsU2l6ZSkKLSAgICA6IG1fbmV4dEF0b20oZmlyc3RBdG9tKCkpCi0gICAgLCBtX2lu
TmV3U3BhY2UoZmFsc2UpCisgICAgOiBtX2luTmV3U3BhY2UoZmFsc2UpCiAgICAgLCBtX2FsbG9j
YXRpb24oYWxsb2NhdGlvbikKICAgICAsIG1faGVhcChoZWFwKQogewogICAgIG1fYXRvbXNQZXJD
ZWxsID0gKGNlbGxTaXplICsgYXRvbVNpemUgLSAxKSAvIGF0b21TaXplOwogICAgIG1fZW5kQXRv
bSA9IGF0b21zUGVyQmxvY2sgLSBtX2F0b21zUGVyQ2VsbCArIDE7Ci0KLSAgICBTdHJ1Y3R1cmUq
IGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlID0gaGVhcC0+Z2xvYmFsRGF0YSgpLT5kdW1teU1h
cmthYmxlQ2VsbFN0cnVjdHVyZS5nZXQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9t
KCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpCi0gICAgICAgIG5ldyAoJmF0
b21zKClbaV0pIEpTQ2VsbCgqaGVhcC0+Z2xvYmFsRGF0YSgpLCBkdW1teU1hcmthYmxlQ2VsbFN0
cnVjdHVyZSwgSlNDZWxsOjpDcmVhdGluZ0Vhcmx5Q2VsbCk7CiB9CiAKIHZvaWQgTWFya2VkQmxv
Y2s6OnN3ZWVwKCkKQEAgLTg1LDYgKzgwLDU3IEBAIHZvaWQgTWFya2VkQmxvY2s6OnN3ZWVwKCkK
ICAgICB9CiB9CiAKK01hcmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OmxhenlTd2Vl
cCgpCit7CisgICAgRnJlZUNlbGwqIHJlc3VsdCA9IDA7CisgICAgCisgICAgZm9yIChzaXplX3Qg
aSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7Cisg
ICAgICAgIGlmICghbV9tYXJrcy50ZXN0QW5kU2V0KGkpKSB7CisgICAgICAgICAgICBKU0NlbGwq
IGNlbGwgPSByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KCZhdG9tcygpW2ldKTsKKyAgICAgICAg
ICAgIGNlbGwtPn5KU0NlbGwoKTsKKyAgICAgICAgICAgIEZyZWVDZWxsKiBmcmVlQ2VsbCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RnJlZUNlbGwqPihjZWxsKTsKKyAgICAgICAgICAgIGZyZWVDZWxsLT5u
ZXh0ID0gcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0ID0gZnJlZUNlbGw7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTWFya2VkQmxvY2s6OkZyZWVD
ZWxsKiBNYXJrZWRCbG9jazo6Ymxlc3NOZXdCbG9ja0ZvckZhc3RQYXRoKCkKK3sKKyAgICBGcmVl
Q2VsbCogcmVzdWx0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBt
X2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKKyAgICAgICAgbV9tYXJrcy5zZXQoaSk7
CisgICAgICAgIEZyZWVDZWxsKiBmcmVlQ2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnJlZUNlbGwq
PigmYXRvbXMoKVtpXSk7CisgICAgICAgIGZyZWVDZWxsLT5uZXh0ID0gcmVzdWx0OworICAgICAg
ICByZXN1bHQgPSBmcmVlQ2VsbDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBNYXJrZWRCbG9jazo6Ymxlc3NOZXdCbG9ja0ZvclNsb3dQYXRoKCkKK3sKKyAgICBTdHJ1Y3R1
cmUqIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlID0gbV9oZWFwLT5nbG9iYWxEYXRhKCktPmR1
bW15TWFya2FibGVDZWxsU3RydWN0dXJlLmdldCgpOworICAgIGZvciAoc2l6ZV90IGkgPSBmaXJz
dEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkKKyAgICAgICAgbmV3
ICgmYXRvbXMoKVtpXSkgSlNDZWxsKCptX2hlYXAtPmdsb2JhbERhdGEoKSwgZHVtbXlNYXJrYWJs
ZUNlbGxTdHJ1Y3R1cmUsIEpTQ2VsbDo6Q3JlYXRpbmdFYXJseUNlbGwpOworfQorCit2b2lkIE1h
cmtlZEJsb2NrOjpjbGVhckFsbG9jQ2FjaGUoRnJlZUNlbGwqIGZpcnN0RnJlZSkKK3sKKyAgICBT
dHJ1Y3R1cmUqIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlID0gbV9oZWFwLT5nbG9iYWxEYXRh
KCktPmR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLmdldCgpOworICAgIAorICAgIGZvciAoRnJl
ZUNlbGwqIGN1cnJlbnQgPSBmaXJzdEZyZWU7IGN1cnJlbnQ7KSB7CisgICAgICAgIEZyZWVDZWxs
KiBuZXh0ID0gY3VycmVudC0+bmV4dDsKKyAgICAgICAgc2l6ZV90IGkgPSBhdG9tTnVtYmVyKGN1
cnJlbnQpOworICAgICAgICAKKyAgICAgICAgbV9tYXJrcy5jbGVhcihpKTsKKyAgICAgICAgbmV3
IChzdGF0aWNfY2FzdDx2b2lkKj4oY3VycmVudCkpIEpTQ2VsbCgqbV9oZWFwLT5nbG9iYWxEYXRh
KCksIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLCBKU0NlbGw6OkNyZWF0aW5nRWFybHlDZWxs
KTsKKworICAgICAgICBjdXJyZW50ID0gbmV4dDsKKyAgICB9Cit9CisKICNpZiBFTkFCTEUoSlND
X1pPTUJJRVMpCiB2b2lkIE1hcmtlZEJsb2NrOjpjbGVhck1hcmtzKCkKIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gOTA4NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw2ICs0OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBhdG9tc1BlckJsb2NrID0gYmxvY2tTaXplIC8gYXRvbVNpemU7IC8vIH4xLjUlIG92ZXJo
ZWFkCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgb3duZXJTZXRzUGVyQmxvY2sgPSA4OyAv
LyB+MiUgb3ZlcmhlYWQuCiAKKyAgICAgICAgc3RydWN0IEZyZWVDZWxsIHsKKyAgICAgICAgICAg
IEZyZWVDZWxsKiBuZXh0OworICAgICAgICB9OworICAgICAgICAKICAgICAgICAgc3RydWN0IFZv
aWRGdW5jdG9yIHsKICAgICAgICAgICAgIHR5cGVkZWYgdm9pZCBSZXR1cm5UeXBlOwogICAgICAg
ICAgICAgdm9pZCByZXR1cm5WYWx1ZSgpIHsgfQpAQCAtODQsOSArODgsMjIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgc2V0SW5OZXdTcGFjZShib29sKTsKIAogICAgICAgICB2b2lk
KiBhbGxvY2F0ZSgpOwotICAgICAgICB2b2lkIHJlc2V0QWxsb2NhdG9yKCk7CiAgICAgICAgIHZv
aWQgc3dlZXAoKTsKICAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaW52b2tlcyBkZXN0cnVjdG9y
cyBvbiBhbGwgY2VsbHMgdGhhdCBhcmUgbm90IG1hcmtlZCwgbWFya3MKKyAgICAgICAgLy8gdGhl
bSwgYW5kIHJldHVybnMgYSBsaW5rZWQgbGlzdCBvZiB0aG9zZSBjZWxscy4KKyAgICAgICAgRnJl
ZUNlbGwqIGxhenlTd2VlcCgpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlc2Ugc2hvdWxkIGJl
IGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBhIGJsb2NrIGlzIGNyZWF0ZWQuCisgICAgICAgIC8v
IEJsZXNzaW5nIGZvciBmYXN0IHBhdGggY3JlYXRlcyBhIGxpbmtlZCBsaXN0LCB3aGlsZSBibGVz
c2luZyBmb3IKKyAgICAgICAgLy8gc2xvdyBwYXRoIGNyZWF0ZXMgZHVtbXkgY2VsbHMuCisgICAg
ICAgIEZyZWVDZWxsKiBibGVzc05ld0Jsb2NrRm9yRmFzdFBhdGgoKTsKKyAgICAgICAgdm9pZCBi
bGVzc05ld0Jsb2NrRm9yU2xvd1BhdGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgdW5t
YXJrcyBhbGwgY2VsbHMgb24gdGhlIGZyZWUgbGlzdCwgYW5kIGFsbG9jYXRlcyBkdW1teSBKU0Nl
bGxzCisgICAgICAgIC8vIGluIHRoZWlyIHBsYWNlLgorICAgICAgICB2b2lkIGNsZWFyQWxsb2ND
YWNoZShGcmVlQ2VsbCogZmlyc3RGcmVlKTsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNFbXB0
eSgpOwogCiAgICAgICAgIHZvaWQgY2xlYXJNYXJrcygpOwpAQCAtMTE4LDcgKzEzNSw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3QgYXRvbU51bWJlcihjb25zdCB2b2lkKik7CiAg
ICAgICAgIHNpemVfdCBvd25lclNldE51bWJlcihjb25zdCBKU0NlbGwqKTsKIAotICAgICAgICBz
aXplX3QgbV9uZXh0QXRvbTsKICAgICAgICAgc2l6ZV90IG1fZW5kQXRvbTsgLy8gVGhpcyBpcyBh
IGZ1enp5IGVuZC4gQWx3YXlzIHRlc3QgZm9yIDwgbV9lbmRBdG9tLgogICAgICAgICBzaXplX3Qg
bV9hdG9tc1BlckNlbGw7CiAgICAgICAgIFdURjo6Qml0bWFwPGJsb2NrU2l6ZSAvIGF0b21TaXpl
PiBtX21hcmtzOwpAQCAtMTY1LDExICsxODEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
bV9pbk5ld1NwYWNlID0gaW5OZXdTcGFjZTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBNYXJr
ZWRCbG9jazo6cmVzZXRBbGxvY2F0b3IoKQotICAgIHsKLSAgICAgICAgbV9uZXh0QXRvbSA9IGZp
cnN0QXRvbSgpOwotICAgIH0KLQogICAgIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc0VtcHR5
KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX21hcmtzLmlzRW1wdHkoKTsKQEAgLTIzNSwyMiAr
MjQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBmdW5jdG9yKHJlaW50ZXJwcmV0
X2Nhc3Q8SlNDZWxsKj4oJmF0b21zKClbaV0pKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIGlu
bGluZSB2b2lkKiBNYXJrZWRCbG9jazo6YWxsb2NhdGUoKQotICAgIHsKLSAgICAgICAgd2hpbGUg
KG1fbmV4dEF0b20gPCBtX2VuZEF0b20pIHsKLSAgICAgICAgICAgIGlmICghbV9tYXJrcy50ZXN0
QW5kU2V0KG1fbmV4dEF0b20pKSB7Ci0gICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gcmVp
bnRlcnByZXRfY2FzdDxKU0NlbGwqPigmYXRvbXMoKVttX25leHRBdG9tXSk7Ci0gICAgICAgICAg
ICAgICAgbV9uZXh0QXRvbSArPSBtX2F0b21zUGVyQ2VsbDsKLSAgICAgICAgICAgICAgICBkZXN0
cnVjdG9yKGNlbGwpOwotICAgICAgICAgICAgICAgIHJldHVybiBjZWxsOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgbV9uZXh0QXRvbSArPSBtX2F0b21zUGVyQ2VsbDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQorICAgIAogICAgIGlubGluZSBzaXplX3QgTWFy
a2VkQmxvY2s6Om93bmVyU2V0TnVtYmVyKGNvbnN0IEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAg
ICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxCaXRzPihjZWxsKSAtIHJlaW50ZXJwcmV0X2Nh
c3Q8Qml0cz4odGhpcykpICogb3duZXJTZXRzUGVyQmxvY2sgLyBibG9ja1NpemU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9OZXdTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTmV3U3BhY2UuY3BwCShyZXZpc2lvbiA5MDg3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL05ld1NwYWNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDgsNiArNDgsMTAgQEAgdm9pZCBOZXdTcGFjZTo6YWRkQmxvY2soU2l6ZUNsYXNzJiBzaXpl
QwogICAgIGJsb2NrLT5zZXRJbk5ld1NwYWNlKHRydWUpOwogICAgIHNpemVDbGFzcy5uZXh0Qmxv
Y2sgPSBibG9jazsKICAgICBzaXplQ2xhc3MuYmxvY2tMaXN0LmFwcGVuZChibG9jayk7CisgICAg
QVNTRVJUKCFzaXplQ2xhc3MuY3VyQmxvY2spOworICAgIEFTU0VSVCghc2l6ZUNsYXNzLmZpcnN0
RnJlZSk7CisgICAgc2l6ZUNsYXNzLmN1ckJsb2NrID0gYmxvY2s7CisgICAgc2l6ZUNsYXNzLmZp
cnN0RnJlZSA9IGJsb2NrLT5ibGVzc05ld0Jsb2NrRm9yRmFzdFBhdGgoKTsKIH0KIAogdm9pZCBO
ZXdTcGFjZTo6cmVtb3ZlQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpAQCAtNjksNCArNzMsMTMg
QEAgdm9pZCBOZXdTcGFjZTo6cmVzZXRBbGxvY2F0b3IoKQogICAgICAgICBzaXplQ2xhc3NGb3Io
Y2VsbFNpemUpLnJlc2V0QWxsb2NhdG9yKCk7CiB9CiAKK3ZvaWQgTmV3U3BhY2U6OmNsZWFyQWxs
b2NDYWNoZSgpCit7CisgICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBwcmVjaXNlU3RlcDsgY2Vs
bFNpemUgPCBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkKKyAgICAgICAg
c2l6ZUNsYXNzRm9yKGNlbGxTaXplKS5jbGVhckFsbG9jQ2FjaGUoKTsKKworICAgIGZvciAoc2l6
ZV90IGNlbGxTaXplID0gaW1wcmVjaXNlU3RlcDsgY2VsbFNpemUgPCBpbXByZWNpc2VDdXRvZmY7
IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXApCisgICAgICAgIHNpemVDbGFzc0ZvcihjZWxsU2l6
ZSkuY2xlYXJBbGxvY0NhY2hlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTmV3U3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9OZXdTcGFjZS5oCShyZXZpc2lvbiA5MDg3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL05ld1NwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcg
KzUwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdHJ1Y3QgU2l6ZUNsYXNzIHsKICAg
ICAgICAgICAgIFNpemVDbGFzcygpOwogICAgICAgICAgICAgdm9pZCByZXNldEFsbG9jYXRvcigp
OworICAgICAgICAgICAgdm9pZCBjbGVhckFsbG9jQ2FjaGUoKTsKIAorICAgICAgICAgICAgTWFy
a2VkQmxvY2s6OkZyZWVDZWxsKiBmaXJzdEZyZWU7CisgICAgICAgICAgICBNYXJrZWRCbG9jayog
Y3VyQmxvY2s7CiAgICAgICAgICAgICBNYXJrZWRCbG9jayogbmV4dEJsb2NrOwogICAgICAgICAg
ICAgRG91Ymx5TGlua2VkTGlzdDxNYXJrZWRCbG9jaz4gYmxvY2tMaXN0OwogICAgICAgICAgICAg
c2l6ZV90IGNlbGxTaXplOwpAQCAtNjQsNiArNjcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICB2b2lkIGFkZEJsb2NrKFNpemVDbGFzcyYsIE1hcmtlZEJsb2NrKik7CiAgICAgICAgIHZv
aWQgcmVtb3ZlQmxvY2soTWFya2VkQmxvY2sqKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgY2xl
YXJBbGxvY0NhY2hlKCk7CiAKICAgICAgICAgc2l6ZV90IHdhdGVyTWFyaygpOwogICAgICAgICBz
aXplX3QgaGlnaFdhdGVyTWFyaygpOwpAQCAtMTE1LDE0ICsxMjAsNDMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBpbmxpbmUgdm9pZCogTmV3U3BhY2U6OmFsbG9jYXRlKFNpemVDbGFzcyYgc2l6
ZUNsYXNzKQogICAgIHsKLSAgICAgICAgZm9yIChNYXJrZWRCbG9jayomIGJsb2NrID0gc2l6ZUNs
YXNzLm5leHRCbG9jayA7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpIHsKLSAgICAgICAg
ICAgIGlmICh2b2lkKiByZXN1bHQgPSBibG9jay0+YWxsb2NhdGUoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgICAgICBtX3dhdGVyTWFyayArPSBibG9jay0+Y2Fw
YWNpdHkoKTsKKyAgICAgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBmaXJzdEZyZWUgPSBzaXpl
Q2xhc3MuZmlyc3RGcmVlOworICAgICAgICBpZiAoIWZpcnN0RnJlZSkgeworICAgICAgICAgICAg
Ly8gVGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzIGZvciB3aHkgd2UgZ290IGhlcmU6CisgICAg
ICAgICAgICAvLyAxKSBXZSd2ZSBleGhhdXN0ZWQgdGhlIGFsbG9jYXRpb24gY2FjaGUgZm9yIGN1
ckJsb2NrLCBpbiB3aGljaCBjYXNlCisgICAgICAgICAgICAvLyAgICBjdXJCbG9jayA9PSBuZXh0
QmxvY2ssIGFuZCB3ZSBrbm93IHRoYXQgdGhlcmUgaXMgbm8gcmVhc29uIHRvCisgICAgICAgICAg
ICAvLyAgICByZXBlYXQgYSBsYXp5IHN3ZWVwIG9mIG5leHRCbG9jayBiZWNhdXNlIHdlIHdvbid0
IGZpbmQgYW55dGhpbmcuCisgICAgICAgICAgICAvLyAyKSBBbGxvY2F0aW9uIGNhY2hlcyBoYXZl
IGJlZW4gY2xlYXJlZCwgaW4gd2hpY2ggY2FzZSBuZXh0QmxvY2sgbWF5CisgICAgICAgICAgICAv
LyAgICBoYXZlIChhbmQgbW9zdCBsaWtlbHkgZG9lcyBoYXZlKSBmcmVlIGNlbGxzLCBzbyB3ZSBh
bG1vc3QgY2VydGFpbmx5CisgICAgICAgICAgICAvLyAgICBzaG91bGQgZG8gYSBsYXp5U3dlZXAg
Zm9yIG5leHRCbG9jay4gVGhpcyBhbHNvIGltcGxpZXMgdGhhdAorICAgICAgICAgICAgLy8gICAg
Y3VyQmxvY2sgPT0gMC4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNpemVDbGFzcy5j
dXJCbG9jaykgeworICAgICAgICAgICAgICAgIEFTU0VSVChzaXplQ2xhc3MuY3VyQmxvY2sgPT0g
c2l6ZUNsYXNzLm5leHRCbG9jayk7CisgICAgICAgICAgICAgICAgbV93YXRlck1hcmsgKz0gc2l6
ZUNsYXNzLm5leHRCbG9jay0+Y2FwYWNpdHkoKTsKKyAgICAgICAgICAgICAgICBzaXplQ2xhc3Mu
bmV4dEJsb2NrID0gc2l6ZUNsYXNzLm5leHRCbG9jay0+bmV4dCgpOworICAgICAgICAgICAgICAg
IHNpemVDbGFzcy5jdXJCbG9jayA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAoTWFya2VkQmxvY2sqJiBibG9jayA9IHNpemVDbGFzcy5uZXh0QmxvY2sg
OyBibG9jazsgYmxvY2sgPSBibG9jay0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgZmlyc3RG
cmVlID0gYmxvY2stPmxhenlTd2VlcCgpOworICAgICAgICAgICAgICAgIGlmIChmaXJzdEZyZWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZUNsYXNzLmZpcnN0RnJlZSA9IGZpcnN0RnJlZTsK
KyAgICAgICAgICAgICAgICAgICAgc2l6ZUNsYXNzLmN1ckJsb2NrID0gYmxvY2s7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBtX3dhdGVyTWFyayArPSBibG9jay0+Y2FwYWNpdHkoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFmaXJzdEZyZWUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgCisgICAgICAgIEFTU0VSVChmaXJzdEZyZWUpOworICAgICAgICAKKyAgICAgICAgc2l6
ZUNsYXNzLmZpcnN0RnJlZSA9IGZpcnN0RnJlZS0+bmV4dDsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHZvaWQqPihmaXJzdEZyZWUpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBOZXdTcGFjZTo6
Zm9yRWFjaEJsb2NrKEZ1bmN0b3ImIGZ1bmN0b3IpCkBAIC0xNTUsNyArMTg5LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgfQogCiAgICAgaW5saW5lIE5ld1NwYWNlOjpTaXplQ2xhc3M6OlNpemVD
bGFzcygpCi0gICAgICAgIDogbmV4dEJsb2NrKDApCisgICAgICAgIDogZmlyc3RGcmVlKDApCisg
ICAgICAgICwgY3VyQmxvY2soMCkKKyAgICAgICAgLCBuZXh0QmxvY2soMCkKICAgICAgICAgLCBj
ZWxsU2l6ZSgwKQogICAgIHsKICAgICB9CkBAIC0xNjQsNiArMjAwLDE5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIHsKICAgICAgICAgbmV4dEJsb2NrID0gYmxvY2tMaXN0LmhlYWQoKTsKICAgICB9
CisgICAgCisgICAgaW5saW5lIHZvaWQgTmV3U3BhY2U6OlNpemVDbGFzczo6Y2xlYXJBbGxvY0Nh
Y2hlKCkKKyAgICB7CisgICAgICAgIGlmIChjdXJCbG9jaykgeworICAgICAgICAgICAgY3VyQmxv
Y2stPmNsZWFyQWxsb2NDYWNoZShmaXJzdEZyZWUpOworICAgICAgICAgICAgZmlyc3RGcmVlID0g
MDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKCFmaXJzdEZyZWUpOworICAg
ICAgICAKKyAgICAgICAgY3VyQmxvY2sgPSAwOworICAgICAgICBmaXJzdEZyZWUgPSAwOworICAg
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL09sZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9PbGRTcGFjZS5jcHAJKHJldmlzaW9uIDkwODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvT2xkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIE9sZFNw
YWNlOjpPbGRTcGFjZShIZWFwKiBoZWFwKQogdm9pZCBPbGRTcGFjZTo6YWRkQmxvY2soTWFya2Vk
QmxvY2sqIGJsb2NrKQogewogICAgIG1fYmxvY2tzLmFwcGVuZChibG9jayk7CisgICAgYmxvY2st
PmJsZXNzTmV3QmxvY2tGb3JTbG93UGF0aCgpOwogfQogCiB2b2lkIE9sZFNwYWNlOjpyZW1vdmVC
bG9jayhNYXJrZWRCbG9jayogYmxvY2spCg==
</data>
<flag name="commit-queue"
          id="95468"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100747</attachid>
            <date>2011-07-13 18:14:29 -0700</date>
            <delta_ts>2011-07-14 15:01:09 -0700</delta_ts>
            <desc>the patch (fix build)</desc>
            <filename>fastalloc_patch_4.diff</filename>
            <type>text/plain</type>
            <size>18863</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTA5NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTMgQEAK
KzIwMTEtMDctMTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBH
QyBhbGxvY2F0aW9uIGZhc3QgcGF0aCBoYXMgdG9vIG1hbnkgb3BlcmF0aW9ucy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDkzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBDaGFuZ2VkIHRo
ZSB0aW1pbmcgb2YgdGhlIGxhenkgc3dlZXAgc28gdGhhdCBpdCBvY2N1cnMgd2hlbiB3ZSBsYW5k
IG9uCisgICAgICAgIGEgcHJldmlvdXNseS11bnN3ZWVwZWQgYmxvY2ssIHJhdGhlciB0aGFuIHdo
ZW5ldmVyIHdlIGxhbmQgb24gYW4gdW5zd2VlcGVkCisgICAgICAgIGNlbGwuICBBZnRlciB0aGUg
cGVyLWJsb2NrIGxhenkgc3dlZXAgb2NjdXJzLCB0aGUgYmxvY2sgaXMgdHVybmVkIGludG8gYQor
ICAgICAgICBzaW5nbHkgbGlua2VkIGxpc3Qgb2YgZnJlZSBjZWxscy4gIFRoZSBhbGxvY2F0aW9u
IGZhc3QgcGF0aCBpcyBub3cganVzdCBhCisgICAgICAgIGxvYWQtYnJhbmNoLXN0b3JlIHRvIHJl
bW92ZSBhIGNlbGwgZnJvbSB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KKyAgICAgICAgCisgICAgICAg
IEFkZGl0aW9uYWxseSwgdGhpcyBjaGFuZ2VzIHRoZSB3YXkgbmV3IGJsb2NrcyBhcmUgYWxsb2Nh
dGVkLiAgUHJldmlvdXNseSwKKyAgICAgICAgdGhleSB3b3VsZCBiZSBwb3B1bGF0ZWQgd2l0aCBk
dW1teSBjZWxscy4gIFdpdGggdGhpcyBwYXRjaCwgdGhleSBhcmUKKyAgICAgICAgdHVybmVkIGlu
dG8gYSBmcmVlIGxpc3QsIHdoaWNoIG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBuZXZlciBiZSBkZXN0
cnVjdG9yCisgICAgICAgIGNhbGxzIGZvciBhbGxvY2F0aW9ucyBpbiBmcmVzaCBibG9ja3MuCisg
ICAgICAgIAorICAgICAgICBUaGVzZSBjaGFuZ2VzIHJlc3VsdCBpbiBhIDEuOSUgc3BlZWQtdXAg
b24gVjgsIGFuZCBhIDAuNiUgc3BlZWQtdXAgb24KKyAgICAgICAgU3VuU3BpZGVyLiAgVGhlcmUg
YXJlIG5vIG9ic2VydmVkIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgc2xvdy1kb3ducworICAg
ICAgICBvbiBhbnkgaW5kaXZpZHVhbCBiZW5jaG1hcmsuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS5leHA6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjbGVhckFsbG9jQ2FjaGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXNl
dEFsbG9jYXRvcik6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6
OmZvckVhY2hQcm90ZWN0ZWRDZWxsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaENlbGwp
OgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoQmxvY2spOgorICAgICAgICAoSlNDOjpIZWFw
OjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
OjpsYXp5U3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Ymxlc3NOZXdCbG9ja0Zv
ckZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tGb3JT
bG93UGF0aCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjbGVhckFsbG9jQ2FjaGUpOgor
ICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKiBoZWFwL05ld1NwYWNlLmNw
cDoKKyAgICAgICAgKEpTQzo6TmV3U3BhY2U6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6TmV3
U3BhY2U6OmNsZWFyQWxsb2NDYWNoZSk6CisgICAgICAgICogaGVhcC9OZXdTcGFjZS5oOgorICAg
ICAgICAoSlNDOjpOZXdTcGFjZTo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpOZXdTcGFjZTo6
U2l6ZUNsYXNzOjpTaXplQ2xhc3MpOgorICAgICAgICAoSlNDOjpOZXdTcGFjZTo6U2l6ZUNsYXNz
OjpjbGVhckFsbG9jQ2FjaGUpOgorICAgICAgICAqIGhlYXAvT2xkU3BhY2UuY3BwOgorICAgICAg
ICAoSlNDOjpPbGRTcGFjZTo6YWRkQmxvY2spOgorCiAyMDExLTA3LTEzICBNaWNoYWVsIFNhYm9m
ZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02NDIwMgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCShyZXZpc2lvbiA5MDg3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw2ICsyMjQsNyBAQCBfX1pO
M0pTQzM1Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlCiBfX1pOM0pTQzQxY29uc3RydWN0
RnVuY3Rpb25Ta2lwcGluZ0V2YWxFbmFibGVkQ2hlY2tFUE5TXzlFeGVjU3RhdGVFUE5TXzE0SlNH
bG9iYWxPYmplY3RFUktOU183QXJnTGlzdEVSS05TXzEwSWRlbnRpZmllckVSS05TXzdVU3RyaW5n
RWkKIF9fWk4zSlNDNEhlYXAxMW9iamVjdENvdW50RXYKIF9fWk4zSlNDNEhlYXAxNmFjdGl2aXR5
Q2FsbGJhY2tFdgorX19aTjNKU0M0SGVhcDE2YWxsb2NhdGVTbG93Q2FzZUVSTlNfOE5ld1NwYWNl
OVNpemVDbGFzc0UKIF9fWk4zSlNDNEhlYXAxNm9iamVjdFR5cGVDb3VudHNFdgogX19aTjNKU0M0
SGVhcDE3Y29sbGVjdEFsbEdhcmJhZ2VFdgogX19aTjNKU0M0SGVhcDE3Z2xvYmFsT2JqZWN0Q291
bnRFdgpAQCAtMjM3LDcgKzIzOCw2IEBAIF9fWk4zSlNDNEhlYXAyOXJlcG9ydEV4dHJhTWVtb3J5
Q29zdFNsb3cKIF9fWk4zSlNDNEhlYXA0c2l6ZUV2CiBfX1pOM0pTQzRIZWFwN2Rlc3Ryb3lFdgog
X19aTjNKU0M0SGVhcDdwcm90ZWN0RU5TXzdKU1ZhbHVlRQotX19aTjNKU0M0SGVhcDhhbGxvY2F0
ZUVSTlNfOE5ld1NwYWNlOVNpemVDbGFzc0UKIF9fWk4zSlNDNEhlYXA4Y2FwYWNpdHlFdgogX19a
TjNKU0M0SGVhcDl1bnByb3RlY3RFTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzRZYXJyMTFZYXJyUGF0
dGVybkMxRVJLTlNfN1VTdHJpbmdFYmJQUEtjCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkocmV2aXNpb24gOTA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDE1ICsxMDIsNiBAQCBpbmxpbmUgdm9pZCBD
bGVhck1hcmtzOjpvcGVyYXRvcigpKE1hcmtlCiAgICAgYmxvY2stPmNsZWFyTWFya3MoKTsKIH0K
IAotc3RydWN0IFJlc2V0QWxsb2NhdG9yIDogTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKLSAg
ICB2b2lkIG9wZXJhdG9yKCkoTWFya2VkQmxvY2sqKTsKLX07Ci0KLWlubGluZSB2b2lkIFJlc2V0
QWxsb2NhdG9yOjpvcGVyYXRvcigpKE1hcmtlZEJsb2NrKiBibG9jaykKLXsKLSAgICBibG9jay0+
cmVzZXRBbGxvY2F0b3IoKTsKLX0KLQogc3RydWN0IFN3ZWVwIDogTWFya2VkQmxvY2s6OlZvaWRG
dW5jdG9yIHsKICAgICB2b2lkIG9wZXJhdG9yKCkoTWFya2VkQmxvY2sqKTsKIH07CkBAIC0zMjAs
NyArMzExLDcgQEAgaW5saW5lIHZvaWQqIEhlYXA6OnRyeUFsbG9jYXRlKE5ld1NwYWNlOgogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQqIEhlYXA6OmFsbG9jYXRlKE5ld1NwYWNlOjpTaXpl
Q2xhc3MmIHNpemVDbGFzcykKK3ZvaWQqIEhlYXA6OmFsbG9jYXRlU2xvd0Nhc2UoTmV3U3BhY2U6
OlNpemVDbGFzcyYgc2l6ZUNsYXNzKQogewogI2lmIENPTExFQ1RfT05fRVZFUllfQUxMT0NBVElP
TgogICAgIGNvbGxlY3RBbGxHYXJiYWdlKCk7CkBAIC01NTgsNyArNTQ5LDkgQEAgdm9pZCBIZWFw
Ojpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIEFTU0VSVChnbG9iYWxEYXRhKCkt
PmlkZW50aWZpZXJUYWJsZSA9PSB3dGZUaHJlYWREYXRhKCkuY3VycmVudElkZW50aWZpZXJUYWJs
ZSgpKTsKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwogICAgIEpBVkFTQ1JJUFRDT1JF
X0dDX0JFR0lOKCk7Ci0KKyAgICAKKyAgICBjbGVhckFsbG9jQ2FjaGUoKTsKKyAgICAKICAgICBt
YXJrUm9vdHMoKTsKICAgICBtX2hhbmRsZUhlYXAuZmluYWxpemVXZWFrSGFuZGxlcygpOwogICAg
IG1fZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmZpbmFsaXplU21hbGxTdHJpbmdzKCk7CkBAIC01
ODgsMTEgKzU4MSwxNSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dn
CiAgICAgKCptX2FjdGl2aXR5Q2FsbGJhY2spKCk7CiB9CiAKK3ZvaWQgSGVhcDo6Y2xlYXJBbGxv
Y0NhY2hlKCkKK3sKKyAgICBtX25ld1NwYWNlLmNsZWFyQWxsb2NDYWNoZSgpOworfQorCiB2b2lk
IEhlYXA6OnJlc2V0QWxsb2NhdG9yKCkKIHsKICAgICBtX2V4dHJhQ29zdCA9IDA7CiAgICAgbV9u
ZXdTcGFjZS5yZXNldEFsbG9jYXRvcigpOwotICAgIGZvckVhY2hCbG9jazxSZXNldEFsbG9jYXRv
cj4oKTsKIH0KIAogdm9pZCBIZWFwOjpzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NB
Y3Rpdml0eUNhbGxiYWNrPiBhY3Rpdml0eUNhbGxiYWNrKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAkocmV2aXNpb24gOTA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDkgKzI0LDEwIEBACiAKICNpbmNsdWRlICJI
YW5kbGVIZWFwLmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKLSNpbmNsdWRlICJTbG90Vmlz
aXRvci5oIgorI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tT
ZXQuaCIKICNpbmNsdWRlICJOZXdTcGFjZS5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtMTI0LDggKzEyNSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEV4dHJhQ29zdCA9IDEwMjQgKiAx
MDI0OwogCiAgICAgICAgIGJvb2wgaXNWYWxpZEFsbG9jYXRpb24oc2l6ZV90KTsKLSAgICAgICAg
dm9pZCogYWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOwogICAgICAgICB2b2lkIHJlcG9ydEV4dHJh
TWVtb3J5Q29zdFNsb3dDYXNlKHNpemVfdCk7CisgICAgICAgIHZvaWQgY2xlYXJBbGxvY0NhY2hl
KCk7CiAgICAgICAgIHZvaWQgcmVzZXRBbGxvY2F0b3IoKTsKIAogICAgICAgICBNYXJrZWRCbG9j
ayogYWxsb2NhdGVCbG9jayhzaXplX3QgY2VsbFNpemUpOwpAQCAtMTM3LDYgKzEzOCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIG1hcmtUZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RW
aXNpdG9yJik7CiAKICAgICAgICAgdm9pZCogdHJ5QWxsb2NhdGUoTmV3U3BhY2U6OlNpemVDbGFz
cyYpOworICAgICAgICB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKE5ld1NwYWNlOjpTaXplQ2xhc3Mm
KTsKICAgICAgICAgCiAgICAgICAgIGVudW0gU3dlZXBUb2dnbGUgeyBEb05vdFN3ZWVwLCBEb1N3
ZWVwIH07CiAgICAgICAgIHZvaWQgY29sbGVjdChTd2VlcFRvZ2dsZSk7CkBAIC0yNDIsNiArMjQ0
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBp
bmxpbmUgdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBIZWFwOjpmb3JFYWNoUHJvdGVjdGVk
Q2VsbChGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKKyAgICAgICAgY2xlYXJBbGxvY0NhY2hlKCk7
CiAgICAgICAgIFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1
ZXMuZW5kKCk7CiAgICAgICAgIGZvciAoUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IG1f
cHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgIGZ1
bmN0b3IoaXQtPmZpcnN0KTsKQEAgLTI1OCw2ICsyNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB0eXBlbmFtZSBGdW5jdG9yOjpS
ZXR1cm5UeXBlIEhlYXA6OmZvckVhY2hDZWxsKEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgeworICAg
ICAgICBjbGVhckFsbG9jQ2FjaGUoKTsKICAgICAgICAgQmxvY2tJdGVyYXRvciBlbmQgPSBtX2Js
b2Nrcy5zZXQoKS5lbmQoKTsKICAgICAgICAgZm9yIChCbG9ja0l0ZXJhdG9yIGl0ID0gbV9ibG9j
a3Muc2V0KCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgKCppdCktPmZv
ckVhY2hDZWxsKGZ1bmN0b3IpOwpAQCAtMjcyLDYgKzI3Niw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6
OlJldHVyblR5cGUgSGVhcDo6Zm9yRWFjaEJsb2NrKEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewor
ICAgICAgICBjbGVhckFsbG9jQ2FjaGUoKTsKICAgICAgICAgQmxvY2tJdGVyYXRvciBlbmQgPSBt
X2Jsb2Nrcy5zZXQoKS5lbmQoKTsKICAgICAgICAgZm9yIChCbG9ja0l0ZXJhdG9yIGl0ID0gbV9i
bG9ja3Muc2V0KCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgZnVuY3Rv
cigqaXQpOwpAQCAtMjgzLDYgKzI4OCwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRnVu
Y3RvciBmdW5jdG9yOwogICAgICAgICByZXR1cm4gZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOwogICAg
IH0KKyAgICAKKyAgICBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGUoTmV3U3BhY2U6OlNpemVD
bGFzcyYgc2l6ZUNsYXNzKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyBhIGxpZ2h0LXdlaWdo
dCBmYXN0IHBhdGggdG8gY292ZXIgdGhlIG1vc3QgY29tbW9uIGNhc2UuCisgICAgICAgIE1hcmtl
ZEJsb2NrOjpGcmVlQ2VsbCogZmlyc3RGcmVlID0gc2l6ZUNsYXNzLmZpcnN0RnJlZTsKKyAgICAg
ICAgaWYgKCFmaXJzdEZyZWUpCisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZShz
aXplQ2xhc3MpOworICAgICAgICAKKyAgICAgICAgc2l6ZUNsYXNzLmZpcnN0RnJlZSA9IGZpcnN0
RnJlZS0+bmV4dDsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHZvaWQqPihmaXJzdEZyZWUp
OworICAgIH0KIAogICAgIGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZShzaXplX3QgYnl0ZXMp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNw
cAkocmV2aXNpb24gOTA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE3ICs0OSwxMiBAQCB2b2lkIE1hcmtlZEJs
b2NrOjpkZXN0cm95KE1hcmtlZEJsb2NrKiBiCiB9CiAKIE1hcmtlZEJsb2NrOjpNYXJrZWRCbG9j
ayhjb25zdCBQYWdlQWxsb2NhdGlvbkFsaWduZWQmIGFsbG9jYXRpb24sIEhlYXAqIGhlYXAsIHNp
emVfdCBjZWxsU2l6ZSkKLSAgICA6IG1fbmV4dEF0b20oZmlyc3RBdG9tKCkpCi0gICAgLCBtX2lu
TmV3U3BhY2UoZmFsc2UpCisgICAgOiBtX2luTmV3U3BhY2UoZmFsc2UpCiAgICAgLCBtX2FsbG9j
YXRpb24oYWxsb2NhdGlvbikKICAgICAsIG1faGVhcChoZWFwKQogewogICAgIG1fYXRvbXNQZXJD
ZWxsID0gKGNlbGxTaXplICsgYXRvbVNpemUgLSAxKSAvIGF0b21TaXplOwogICAgIG1fZW5kQXRv
bSA9IGF0b21zUGVyQmxvY2sgLSBtX2F0b21zUGVyQ2VsbCArIDE7Ci0KLSAgICBTdHJ1Y3R1cmUq
IGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlID0gaGVhcC0+Z2xvYmFsRGF0YSgpLT5kdW1teU1h
cmthYmxlQ2VsbFN0cnVjdHVyZS5nZXQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9t
KCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpCi0gICAgICAgIG5ldyAoJmF0
b21zKClbaV0pIEpTQ2VsbCgqaGVhcC0+Z2xvYmFsRGF0YSgpLCBkdW1teU1hcmthYmxlQ2VsbFN0
cnVjdHVyZSwgSlNDZWxsOjpDcmVhdGluZ0Vhcmx5Q2VsbCk7CiB9CiAKIHZvaWQgTWFya2VkQmxv
Y2s6OnN3ZWVwKCkKQEAgLTg1LDYgKzgwLDU3IEBAIHZvaWQgTWFya2VkQmxvY2s6OnN3ZWVwKCkK
ICAgICB9CiB9CiAKK01hcmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OmxhenlTd2Vl
cCgpCit7CisgICAgRnJlZUNlbGwqIHJlc3VsdCA9IDA7CisgICAgCisgICAgZm9yIChzaXplX3Qg
aSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7Cisg
ICAgICAgIGlmICghbV9tYXJrcy50ZXN0QW5kU2V0KGkpKSB7CisgICAgICAgICAgICBKU0NlbGwq
IGNlbGwgPSByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KCZhdG9tcygpW2ldKTsKKyAgICAgICAg
ICAgIGNlbGwtPn5KU0NlbGwoKTsKKyAgICAgICAgICAgIEZyZWVDZWxsKiBmcmVlQ2VsbCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RnJlZUNlbGwqPihjZWxsKTsKKyAgICAgICAgICAgIGZyZWVDZWxsLT5u
ZXh0ID0gcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0ID0gZnJlZUNlbGw7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTWFya2VkQmxvY2s6OkZyZWVD
ZWxsKiBNYXJrZWRCbG9jazo6Ymxlc3NOZXdCbG9ja0ZvckZhc3RQYXRoKCkKK3sKKyAgICBGcmVl
Q2VsbCogcmVzdWx0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBt
X2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKKyAgICAgICAgbV9tYXJrcy5zZXQoaSk7
CisgICAgICAgIEZyZWVDZWxsKiBmcmVlQ2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnJlZUNlbGwq
PigmYXRvbXMoKVtpXSk7CisgICAgICAgIGZyZWVDZWxsLT5uZXh0ID0gcmVzdWx0OworICAgICAg
ICByZXN1bHQgPSBmcmVlQ2VsbDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBNYXJrZWRCbG9jazo6Ymxlc3NOZXdCbG9ja0ZvclNsb3dQYXRoKCkKK3sKKyAgICBTdHJ1Y3R1
cmUqIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlID0gbV9oZWFwLT5nbG9iYWxEYXRhKCktPmR1
bW15TWFya2FibGVDZWxsU3RydWN0dXJlLmdldCgpOworICAgIGZvciAoc2l6ZV90IGkgPSBmaXJz
dEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkKKyAgICAgICAgbmV3
ICgmYXRvbXMoKVtpXSkgSlNDZWxsKCptX2hlYXAtPmdsb2JhbERhdGEoKSwgZHVtbXlNYXJrYWJs
ZUNlbGxTdHJ1Y3R1cmUsIEpTQ2VsbDo6Q3JlYXRpbmdFYXJseUNlbGwpOworfQorCit2b2lkIE1h
cmtlZEJsb2NrOjpjbGVhckFsbG9jQ2FjaGUoRnJlZUNlbGwqIGZpcnN0RnJlZSkKK3sKKyAgICBT
dHJ1Y3R1cmUqIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlID0gbV9oZWFwLT5nbG9iYWxEYXRh
KCktPmR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLmdldCgpOworICAgIAorICAgIGZvciAoRnJl
ZUNlbGwqIGN1cnJlbnQgPSBmaXJzdEZyZWU7IGN1cnJlbnQ7KSB7CisgICAgICAgIEZyZWVDZWxs
KiBuZXh0ID0gY3VycmVudC0+bmV4dDsKKyAgICAgICAgc2l6ZV90IGkgPSBhdG9tTnVtYmVyKGN1
cnJlbnQpOworICAgICAgICAKKyAgICAgICAgbV9tYXJrcy5jbGVhcihpKTsKKyAgICAgICAgbmV3
IChzdGF0aWNfY2FzdDx2b2lkKj4oY3VycmVudCkpIEpTQ2VsbCgqbV9oZWFwLT5nbG9iYWxEYXRh
KCksIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLCBKU0NlbGw6OkNyZWF0aW5nRWFybHlDZWxs
KTsKKworICAgICAgICBjdXJyZW50ID0gbmV4dDsKKyAgICB9Cit9CisKICNpZiBFTkFCTEUoSlND
X1pPTUJJRVMpCiB2b2lkIE1hcmtlZEJsb2NrOjpjbGVhck1hcmtzKCkKIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gOTA4NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw2ICs0OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBhdG9tc1BlckJsb2NrID0gYmxvY2tTaXplIC8gYXRvbVNpemU7IC8vIH4xLjUlIG92ZXJo
ZWFkCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgb3duZXJTZXRzUGVyQmxvY2sgPSA4OyAv
LyB+MiUgb3ZlcmhlYWQuCiAKKyAgICAgICAgc3RydWN0IEZyZWVDZWxsIHsKKyAgICAgICAgICAg
IEZyZWVDZWxsKiBuZXh0OworICAgICAgICB9OworICAgICAgICAKICAgICAgICAgc3RydWN0IFZv
aWRGdW5jdG9yIHsKICAgICAgICAgICAgIHR5cGVkZWYgdm9pZCBSZXR1cm5UeXBlOwogICAgICAg
ICAgICAgdm9pZCByZXR1cm5WYWx1ZSgpIHsgfQpAQCAtODQsOSArODgsMjIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgc2V0SW5OZXdTcGFjZShib29sKTsKIAogICAgICAgICB2b2lk
KiBhbGxvY2F0ZSgpOwotICAgICAgICB2b2lkIHJlc2V0QWxsb2NhdG9yKCk7CiAgICAgICAgIHZv
aWQgc3dlZXAoKTsKICAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaW52b2tlcyBkZXN0cnVjdG9y
cyBvbiBhbGwgY2VsbHMgdGhhdCBhcmUgbm90IG1hcmtlZCwgbWFya3MKKyAgICAgICAgLy8gdGhl
bSwgYW5kIHJldHVybnMgYSBsaW5rZWQgbGlzdCBvZiB0aG9zZSBjZWxscy4KKyAgICAgICAgRnJl
ZUNlbGwqIGxhenlTd2VlcCgpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlc2Ugc2hvdWxkIGJl
IGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBhIGJsb2NrIGlzIGNyZWF0ZWQuCisgICAgICAgIC8v
IEJsZXNzaW5nIGZvciBmYXN0IHBhdGggY3JlYXRlcyBhIGxpbmtlZCBsaXN0LCB3aGlsZSBibGVz
c2luZyBmb3IKKyAgICAgICAgLy8gc2xvdyBwYXRoIGNyZWF0ZXMgZHVtbXkgY2VsbHMuCisgICAg
ICAgIEZyZWVDZWxsKiBibGVzc05ld0Jsb2NrRm9yRmFzdFBhdGgoKTsKKyAgICAgICAgdm9pZCBi
bGVzc05ld0Jsb2NrRm9yU2xvd1BhdGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgdW5t
YXJrcyBhbGwgY2VsbHMgb24gdGhlIGZyZWUgbGlzdCwgYW5kIGFsbG9jYXRlcyBkdW1teSBKU0Nl
bGxzCisgICAgICAgIC8vIGluIHRoZWlyIHBsYWNlLgorICAgICAgICB2b2lkIGNsZWFyQWxsb2ND
YWNoZShGcmVlQ2VsbCogZmlyc3RGcmVlKTsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNFbXB0
eSgpOwogCiAgICAgICAgIHZvaWQgY2xlYXJNYXJrcygpOwpAQCAtMTE4LDcgKzEzNSw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3QgYXRvbU51bWJlcihjb25zdCB2b2lkKik7CiAg
ICAgICAgIHNpemVfdCBvd25lclNldE51bWJlcihjb25zdCBKU0NlbGwqKTsKIAotICAgICAgICBz
aXplX3QgbV9uZXh0QXRvbTsKICAgICAgICAgc2l6ZV90IG1fZW5kQXRvbTsgLy8gVGhpcyBpcyBh
IGZ1enp5IGVuZC4gQWx3YXlzIHRlc3QgZm9yIDwgbV9lbmRBdG9tLgogICAgICAgICBzaXplX3Qg
bV9hdG9tc1BlckNlbGw7CiAgICAgICAgIFdURjo6Qml0bWFwPGJsb2NrU2l6ZSAvIGF0b21TaXpl
PiBtX21hcmtzOwpAQCAtMTY1LDExICsxODEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
bV9pbk5ld1NwYWNlID0gaW5OZXdTcGFjZTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBNYXJr
ZWRCbG9jazo6cmVzZXRBbGxvY2F0b3IoKQotICAgIHsKLSAgICAgICAgbV9uZXh0QXRvbSA9IGZp
cnN0QXRvbSgpOwotICAgIH0KLQogICAgIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc0VtcHR5
KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX21hcmtzLmlzRW1wdHkoKTsKQEAgLTIzNSwyMiAr
MjQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBmdW5jdG9yKHJlaW50ZXJwcmV0
X2Nhc3Q8SlNDZWxsKj4oJmF0b21zKClbaV0pKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIGlu
bGluZSB2b2lkKiBNYXJrZWRCbG9jazo6YWxsb2NhdGUoKQotICAgIHsKLSAgICAgICAgd2hpbGUg
KG1fbmV4dEF0b20gPCBtX2VuZEF0b20pIHsKLSAgICAgICAgICAgIGlmICghbV9tYXJrcy50ZXN0
QW5kU2V0KG1fbmV4dEF0b20pKSB7Ci0gICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gcmVp
bnRlcnByZXRfY2FzdDxKU0NlbGwqPigmYXRvbXMoKVttX25leHRBdG9tXSk7Ci0gICAgICAgICAg
ICAgICAgbV9uZXh0QXRvbSArPSBtX2F0b21zUGVyQ2VsbDsKLSAgICAgICAgICAgICAgICBkZXN0
cnVjdG9yKGNlbGwpOwotICAgICAgICAgICAgICAgIHJldHVybiBjZWxsOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgbV9uZXh0QXRvbSArPSBtX2F0b21zUGVyQ2VsbDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQorICAgIAogICAgIGlubGluZSBzaXplX3QgTWFy
a2VkQmxvY2s6Om93bmVyU2V0TnVtYmVyKGNvbnN0IEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAg
ICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxCaXRzPihjZWxsKSAtIHJlaW50ZXJwcmV0X2Nh
c3Q8Qml0cz4odGhpcykpICogb3duZXJTZXRzUGVyQmxvY2sgLyBibG9ja1NpemU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja1NldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrU2V0LmgJKHJldmlzaW9uIDkw
ODc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIK
ICNpbmNsdWRlICJUaW55Qmxvb21GaWx0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTmV3
U3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL05ld1Nw
YWNlLmNwcAkocmV2aXNpb24gOTA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9O
ZXdTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEwIEBAIHZvaWQgTmV3U3Bh
Y2U6OmFkZEJsb2NrKFNpemVDbGFzcyYgc2l6ZUMKICAgICBibG9jay0+c2V0SW5OZXdTcGFjZSh0
cnVlKTsKICAgICBzaXplQ2xhc3MubmV4dEJsb2NrID0gYmxvY2s7CiAgICAgc2l6ZUNsYXNzLmJs
b2NrTGlzdC5hcHBlbmQoYmxvY2spOworICAgIEFTU0VSVCghc2l6ZUNsYXNzLmN1ckJsb2NrKTsK
KyAgICBBU1NFUlQoIXNpemVDbGFzcy5maXJzdEZyZWUpOworICAgIHNpemVDbGFzcy5jdXJCbG9j
ayA9IGJsb2NrOworICAgIHNpemVDbGFzcy5maXJzdEZyZWUgPSBibG9jay0+Ymxlc3NOZXdCbG9j
a0ZvckZhc3RQYXRoKCk7CiB9CiAKIHZvaWQgTmV3U3BhY2U6OnJlbW92ZUJsb2NrKE1hcmtlZEJs
b2NrKiBibG9jaykKQEAgLTY5LDQgKzczLDEzIEBAIHZvaWQgTmV3U3BhY2U6OnJlc2V0QWxsb2Nh
dG9yKCkKICAgICAgICAgc2l6ZUNsYXNzRm9yKGNlbGxTaXplKS5yZXNldEFsbG9jYXRvcigpOwog
fQogCit2b2lkIE5ld1NwYWNlOjpjbGVhckFsbG9jQ2FjaGUoKQoreworICAgIGZvciAoc2l6ZV90
IGNlbGxTaXplID0gcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDwgcHJlY2lzZUN1dG9mZjsgY2VsbFNp
emUgKz0gcHJlY2lzZVN0ZXApCisgICAgICAgIHNpemVDbGFzc0ZvcihjZWxsU2l6ZSkuY2xlYXJB
bGxvY0NhY2hlKCk7CisKKyAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IGltcHJlY2lzZVN0ZXA7
IGNlbGxTaXplIDwgaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNpc2VTdGVwKQor
ICAgICAgICBzaXplQ2xhc3NGb3IoY2VsbFNpemUpLmNsZWFyQWxsb2NDYWNoZSgpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL05ld1Nw
YWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTmV3U3BhY2Uu
aAkocmV2aXNpb24gOTA4NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9OZXdTcGFj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RydWN0IFNpemVDbGFzcyB7CiAgICAgICAgICAgICBTaXplQ2xhc3MoKTsKICAgICAg
ICAgICAgIHZvaWQgcmVzZXRBbGxvY2F0b3IoKTsKKyAgICAgICAgICAgIHZvaWQgY2xlYXJBbGxv
Y0NhY2hlKCk7CiAKKyAgICAgICAgICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogZmlyc3RGcmVl
OworICAgICAgICAgICAgTWFya2VkQmxvY2sqIGN1ckJsb2NrOwogICAgICAgICAgICAgTWFya2Vk
QmxvY2sqIG5leHRCbG9jazsKICAgICAgICAgICAgIERvdWJseUxpbmtlZExpc3Q8TWFya2VkQmxv
Y2s+IGJsb2NrTGlzdDsKICAgICAgICAgICAgIHNpemVfdCBjZWxsU2l6ZTsKQEAgLTY0LDYgKzY3
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBhZGRCbG9jayhTaXplQ2xhc3Mm
LCBNYXJrZWRCbG9jayopOwogICAgICAgICB2b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJsb2NrKik7
CisgICAgICAgIAorICAgICAgICB2b2lkIGNsZWFyQWxsb2NDYWNoZSgpOwogCiAgICAgICAgIHNp
emVfdCB3YXRlck1hcmsoKTsKICAgICAgICAgc2l6ZV90IGhpZ2hXYXRlck1hcmsoKTsKQEAgLTEx
NSwxNCArMTIwLDQzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIHZvaWQqIE5ld1Nw
YWNlOjphbGxvY2F0ZShTaXplQ2xhc3MmIHNpemVDbGFzcykKICAgICB7Ci0gICAgICAgIGZvciAo
TWFya2VkQmxvY2sqJiBibG9jayA9IHNpemVDbGFzcy5uZXh0QmxvY2sgOyBibG9jazsgYmxvY2sg
PSBibG9jay0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAodm9pZCogcmVzdWx0ID0gYmxvY2st
PmFsbG9jYXRlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICAg
ICAgbV93YXRlck1hcmsgKz0gYmxvY2stPmNhcGFjaXR5KCk7CisgICAgICAgIE1hcmtlZEJsb2Nr
OjpGcmVlQ2VsbCogZmlyc3RGcmVlID0gc2l6ZUNsYXNzLmZpcnN0RnJlZTsKKyAgICAgICAgaWYg
KCFmaXJzdEZyZWUpIHsKKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcG9zc2liaWxpdGll
cyBmb3Igd2h5IHdlIGdvdCBoZXJlOgorICAgICAgICAgICAgLy8gMSkgV2UndmUgZXhoYXVzdGVk
IHRoZSBhbGxvY2F0aW9uIGNhY2hlIGZvciBjdXJCbG9jaywgaW4gd2hpY2ggY2FzZQorICAgICAg
ICAgICAgLy8gICAgY3VyQmxvY2sgPT0gbmV4dEJsb2NrLCBhbmQgd2Uga25vdyB0aGF0IHRoZXJl
IGlzIG5vIHJlYXNvbiB0bworICAgICAgICAgICAgLy8gICAgcmVwZWF0IGEgbGF6eSBzd2VlcCBv
ZiBuZXh0QmxvY2sgYmVjYXVzZSB3ZSB3b24ndCBmaW5kIGFueXRoaW5nLgorICAgICAgICAgICAg
Ly8gMikgQWxsb2NhdGlvbiBjYWNoZXMgaGF2ZSBiZWVuIGNsZWFyZWQsIGluIHdoaWNoIGNhc2Ug
bmV4dEJsb2NrIG1heQorICAgICAgICAgICAgLy8gICAgaGF2ZSAoYW5kIG1vc3QgbGlrZWx5IGRv
ZXMgaGF2ZSkgZnJlZSBjZWxscywgc28gd2UgYWxtb3N0IGNlcnRhaW5seQorICAgICAgICAgICAg
Ly8gICAgc2hvdWxkIGRvIGEgbGF6eVN3ZWVwIGZvciBuZXh0QmxvY2suIFRoaXMgYWxzbyBpbXBs
aWVzIHRoYXQKKyAgICAgICAgICAgIC8vICAgIGN1ckJsb2NrID09IDAuCisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChzaXplQ2xhc3MuY3VyQmxvY2spIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoc2l6ZUNsYXNzLmN1ckJsb2NrID09IHNpemVDbGFzcy5uZXh0QmxvY2spOworICAgICAg
ICAgICAgICAgIG1fd2F0ZXJNYXJrICs9IHNpemVDbGFzcy5uZXh0QmxvY2stPmNhcGFjaXR5KCk7
CisgICAgICAgICAgICAgICAgc2l6ZUNsYXNzLm5leHRCbG9jayA9IHNpemVDbGFzcy5uZXh0Qmxv
Y2stPm5leHQoKTsKKyAgICAgICAgICAgICAgICBzaXplQ2xhc3MuY3VyQmxvY2sgPSAwOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKE1hcmtlZEJsb2NrKiYg
YmxvY2sgPSBzaXplQ2xhc3MubmV4dEJsb2NrIDsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQo
KSkgeworICAgICAgICAgICAgICAgIGZpcnN0RnJlZSA9IGJsb2NrLT5sYXp5U3dlZXAoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoZmlyc3RGcmVlKSB7CisgICAgICAgICAgICAgICAgICAgIHNpemVD
bGFzcy5maXJzdEZyZWUgPSBmaXJzdEZyZWU7CisgICAgICAgICAgICAgICAgICAgIHNpemVDbGFz
cy5jdXJCbG9jayA9IGJsb2NrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV93YXRlck1hcmsg
Kz0gYmxvY2stPmNhcGFjaXR5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmICghZmlyc3RGcmVlKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZmlyc3RG
cmVlKTsKKyAgICAgICAgCisgICAgICAgIHNpemVDbGFzcy5maXJzdEZyZWUgPSBmaXJzdEZyZWUt
Pm5leHQ7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx2b2lkKj4oZmlyc3RGcmVlKTsKICAg
ICB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1
bmN0b3I6OlJldHVyblR5cGUgTmV3U3BhY2U6OmZvckVhY2hCbG9jayhGdW5jdG9yJiBmdW5jdG9y
KQpAQCAtMTU1LDcgKzE4OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KIAogICAgIGlubGlu
ZSBOZXdTcGFjZTo6U2l6ZUNsYXNzOjpTaXplQ2xhc3MoKQotICAgICAgICA6IG5leHRCbG9jaygw
KQorICAgICAgICA6IGZpcnN0RnJlZSgwKQorICAgICAgICAsIGN1ckJsb2NrKDApCisgICAgICAg
ICwgbmV4dEJsb2NrKDApCiAgICAgICAgICwgY2VsbFNpemUoMCkKICAgICB7CiAgICAgfQpAQCAt
MTY0LDYgKzIwMCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIG5leHRCbG9j
ayA9IGJsb2NrTGlzdC5oZWFkKCk7CiAgICAgfQorICAgIAorICAgIGlubGluZSB2b2lkIE5ld1Nw
YWNlOjpTaXplQ2xhc3M6OmNsZWFyQWxsb2NDYWNoZSgpCisgICAgeworICAgICAgICBpZiAoY3Vy
QmxvY2spIHsKKyAgICAgICAgICAgIGN1ckJsb2NrLT5jbGVhckFsbG9jQ2FjaGUoZmlyc3RGcmVl
KTsKKyAgICAgICAgICAgIGZpcnN0RnJlZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIEFTU0VSVCghZmlyc3RGcmVlKTsKKyAgICAgICAgCisgICAgICAgIGN1ckJsb2NrID0gMDsK
KyAgICAgICAgZmlyc3RGcmVlID0gMDsKKyAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PbGRTcGFjZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT2xkU3BhY2UuY3BwCShyZXZpc2lvbiA5MDg3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09sZFNwYWNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNiArMzYsNyBAQCBPbGRTcGFjZTo6T2xkU3BhY2UoSGVhcCogaGVhcCkKIHZv
aWQgT2xkU3BhY2U6OmFkZEJsb2NrKE1hcmtlZEJsb2NrKiBibG9jaykKIHsKICAgICBtX2Jsb2Nr
cy5hcHBlbmQoYmxvY2spOworICAgIGJsb2NrLT5ibGVzc05ld0Jsb2NrRm9yU2xvd1BhdGgoKTsK
IH0KIAogdm9pZCBPbGRTcGFjZTo6cmVtb3ZlQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQo=
</data>
<flag name="review"
          id="95479"
          type_id="1"
          status="-"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="95480"
          type_id="3"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100868</attachid>
            <date>2011-07-14 15:01:09 -0700</date>
            <delta_ts>2011-07-14 15:08:51 -0700</delta_ts>
            <desc>the patch (fix review)</desc>
            <filename>fastalloc_patch_5.diff</filename>
            <type>text/plain</type>
            <size>19444</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTMgQEAK
KzIwMTEtMDctMTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBH
QyBhbGxvY2F0aW9uIGZhc3QgcGF0aCBoYXMgdG9vIG1hbnkgb3BlcmF0aW9ucy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDkzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBDaGFuZ2VkIHRo
ZSB0aW1pbmcgb2YgdGhlIGxhenkgc3dlZXAgc28gdGhhdCBpdCBvY2N1cnMgd2hlbiB3ZSBsYW5k
IG9uCisgICAgICAgIGEgcHJldmlvdXNseS11bnN3ZWVwZWQgYmxvY2ssIHJhdGhlciB0aGFuIHdo
ZW5ldmVyIHdlIGxhbmQgb24gYW4gdW5zd2VlcGVkCisgICAgICAgIGNlbGwuICBBZnRlciB0aGUg
cGVyLWJsb2NrIGxhenkgc3dlZXAgb2NjdXJzLCB0aGUgYmxvY2sgaXMgdHVybmVkIGludG8gYQor
ICAgICAgICBzaW5nbHkgbGlua2VkIGxpc3Qgb2YgZnJlZSBjZWxscy4gIFRoZSBhbGxvY2F0aW9u
IGZhc3QgcGF0aCBpcyBub3cganVzdCBhCisgICAgICAgIGxvYWQtYnJhbmNoLXN0b3JlIHRvIHJl
bW92ZSBhIGNlbGwgZnJvbSB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KKyAgICAgICAgCisgICAgICAg
IEFkZGl0aW9uYWxseSwgdGhpcyBjaGFuZ2VzIHRoZSB3YXkgbmV3IGJsb2NrcyBhcmUgYWxsb2Nh
dGVkLiAgUHJldmlvdXNseSwKKyAgICAgICAgdGhleSB3b3VsZCBiZSBwb3B1bGF0ZWQgd2l0aCBk
dW1teSBjZWxscy4gIFdpdGggdGhpcyBwYXRjaCwgdGhleSBhcmUKKyAgICAgICAgdHVybmVkIGlu
dG8gYSBmcmVlIGxpc3QsIHdoaWNoIG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBuZXZlciBiZSBkZXN0
cnVjdG9yCisgICAgICAgIGNhbGxzIGZvciBhbGxvY2F0aW9ucyBpbiBmcmVzaCBibG9ja3MuCisg
ICAgICAgIAorICAgICAgICBUaGVzZSBjaGFuZ2VzIHJlc3VsdCBpbiBhIDEuOSUgc3BlZWQtdXAg
b24gVjgsIGFuZCBhIDAuNiUgc3BlZWQtdXAgb24KKyAgICAgICAgU3VuU3BpZGVyLiAgVGhlcmUg
YXJlIG5vIG9ic2VydmVkIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgc2xvdy1kb3ducworICAg
ICAgICBvbiBhbnkgaW5kaXZpZHVhbCBiZW5jaG1hcmsuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS5leHA6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjYW5vbmljYWxpemVCbG9ja3MpOgorICAgICAgICAoSlNDOjpIZWFwOjpy
ZXNldEFsbG9jYXRvcik6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6Okhl
YXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaENl
bGwpOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoQmxvY2spOgorICAgICAgICAoSlNDOjpI
ZWFwOjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJs
b2NrOjpsYXp5U3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Ymxlc3NOZXdCbG9j
a0ZvckZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tG
b3JTbG93UGF0aCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjYW5vbmljYWxpemVCbG9j
ayk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAqIGhlYXAvTmV3U3Bh
Y2UuY3BwOgorICAgICAgICAoSlNDOjpOZXdTcGFjZTo6YWRkQmxvY2spOgorICAgICAgICAoSlND
OjpOZXdTcGFjZTo6Y2Fub25pY2FsaXplQmxvY2tzKToKKyAgICAgICAgKiBoZWFwL05ld1NwYWNl
Lmg6CisgICAgICAgIChKU0M6Ok5ld1NwYWNlOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok5l
d1NwYWNlOjpTaXplQ2xhc3M6OlNpemVDbGFzcyk6CisgICAgICAgIChKU0M6Ok5ld1NwYWNlOjpT
aXplQ2xhc3M6OmNhbm9uaWNhbGl6ZUJsb2NrKToKKyAgICAgICAgKiBoZWFwL09sZFNwYWNlLmNw
cDoKKyAgICAgICAgKEpTQzo6T2xkU3BhY2U6OmFkZEJsb2NrKToKKwogMjAxMS0wNy0xNCAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzcGVjdWxhdGl2ZSBK
SVQgY29udGFpbnMgYSBGSVhNRSBmb3IgcmV3aW5kaW5nIHNwZWN1bGF0aXZlIGNvZGUgZ2VuZXJh
dGlvbiB0aGF0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJ
KHJldmlzaW9uIDkxMDMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDYgKzIyNCw3IEBAIF9fWk4zSlNDMzVjcmVhdGVJ
bnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2UKIF9fWk4zSlNDNDFjb25zdHJ1Y3RGdW5jdGlvblNraXBw
aW5nRXZhbEVuYWJsZWRDaGVja0VQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVS
S05TXzdBcmdMaXN0RVJLTlNfMTBJZGVudGlmaWVyRVJLTlNfN1VTdHJpbmdFaQogX19aTjNKU0M0
SGVhcDExb2JqZWN0Q291bnRFdgogX19aTjNKU0M0SGVhcDE2YWN0aXZpdHlDYWxsYmFja0V2Citf
X1pOM0pTQzRIZWFwMTZhbGxvY2F0ZVNsb3dDYXNlRVJOU184TmV3U3BhY2U5U2l6ZUNsYXNzRQog
X19aTjNKU0M0SGVhcDE2b2JqZWN0VHlwZUNvdW50c0V2CiBfX1pOM0pTQzRIZWFwMTdjb2xsZWN0
QWxsR2FyYmFnZUV2CiBfX1pOM0pTQzRIZWFwMTdnbG9iYWxPYmplY3RDb3VudEV2CkBAIC0yMzcs
NyArMjM4LDYgQEAgX19aTjNKU0M0SGVhcDI5cmVwb3J0RXh0cmFNZW1vcnlDb3N0U2xvdwogX19a
TjNKU0M0SGVhcDRzaXplRXYKIF9fWk4zSlNDNEhlYXA3ZGVzdHJveUV2CiBfX1pOM0pTQzRIZWFw
N3Byb3RlY3RFTlNfN0pTVmFsdWVFCi1fX1pOM0pTQzRIZWFwOGFsbG9jYXRlRVJOU184TmV3U3Bh
Y2U5U2l6ZUNsYXNzRQogX19aTjNKU0M0SGVhcDhjYXBhY2l0eUV2CiBfX1pOM0pTQzRIZWFwOXVu
cHJvdGVjdEVOU183SlNWYWx1ZUUKIF9fWk4zSlNDNFlhcnIxMVlhcnJQYXR0ZXJuQzFFUktOU183
VVN0cmluZ0ViYlBQS2MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZp
c2lvbiA5MTAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDIsMTUgKzEwMiw2IEBAIGlubGluZSB2b2lkIENsZWFyTWFya3M6Om9w
ZXJhdG9yKCkoTWFya2UKICAgICBibG9jay0+Y2xlYXJNYXJrcygpOwogfQogCi1zdHJ1Y3QgUmVz
ZXRBbGxvY2F0b3IgOiBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotICAgIHZvaWQgb3BlcmF0
b3IoKShNYXJrZWRCbG9jayopOwotfTsKLQotaW5saW5lIHZvaWQgUmVzZXRBbGxvY2F0b3I6Om9w
ZXJhdG9yKCkoTWFya2VkQmxvY2sqIGJsb2NrKQotewotICAgIGJsb2NrLT5yZXNldEFsbG9jYXRv
cigpOwotfQotCiBzdHJ1Y3QgU3dlZXAgOiBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewogICAg
IHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayopOwogfTsKQEAgLTMyMCw3ICszMTEsNyBAQCBp
bmxpbmUgdm9pZCogSGVhcDo6dHJ5QWxsb2NhdGUoTmV3U3BhY2U6CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCogSGVhcDo6YWxsb2NhdGUoTmV3U3BhY2U6OlNpemVDbGFzcyYgc2l6ZUNs
YXNzKQordm9pZCogSGVhcDo6YWxsb2NhdGVTbG93Q2FzZShOZXdTcGFjZTo6U2l6ZUNsYXNzJiBz
aXplQ2xhc3MpCiB7CiAjaWYgQ09MTEVDVF9PTl9FVkVSWV9BTExPQ0FUSU9OCiAgICAgY29sbGVj
dEFsbEdhcmJhZ2UoKTsKQEAgLTU1OCw3ICs1NDksOSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dl
ZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgQVNTRVJUKGdsb2JhbERhdGEoKS0+aWRlbnRpZmllclRh
YmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwogICAgIEFT
U0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAgICAgSkFWQVNDUklQVENPUkVfR0NfQkVHSU4oKTsK
LQorICAgIAorICAgIGNhbm9uaWNhbGl6ZUJsb2NrcygpOworICAgIAogICAgIG1hcmtSb290cygp
OwogICAgIG1faGFuZGxlSGVhcC5maW5hbGl6ZVdlYWtIYW5kbGVzKCk7CiAgICAgbV9nbG9iYWxE
YXRhLT5zbWFsbFN0cmluZ3MuZmluYWxpemVTbWFsbFN0cmluZ3MoKTsKQEAgLTU4OCwxMSArNTgx
LDE1IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICAoKm1f
YWN0aXZpdHlDYWxsYmFjaykoKTsKIH0KIAordm9pZCBIZWFwOjpjYW5vbmljYWxpemVCbG9ja3Mo
KQoreworICAgIG1fbmV3U3BhY2UuY2Fub25pY2FsaXplQmxvY2tzKCk7Cit9CisKIHZvaWQgSGVh
cDo6cmVzZXRBbGxvY2F0b3IoKQogewogICAgIG1fZXh0cmFDb3N0ID0gMDsKICAgICBtX25ld1Nw
YWNlLnJlc2V0QWxsb2NhdG9yKCk7Ci0gICAgZm9yRWFjaEJsb2NrPFJlc2V0QWxsb2NhdG9yPigp
OwogfQogCiB2b2lkIEhlYXA6OnNldEFjdGl2aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2
aXR5Q2FsbGJhY2s+IGFjdGl2aXR5Q2FsbGJhY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCShyZXZpc2lvbiA5MTAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsOSArMjQsMTAgQEAKIAogI2luY2x1ZGUgIkhhbmRs
ZUhlYXAuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9y
LmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5o
IgogI2luY2x1ZGUgIk5ld1NwYWNlLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC0xMjQsOCArMTI1LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4RXh0cmFDb3N0ID0gMTAyNCAqIDEwMjQ7
CiAKICAgICAgICAgYm9vbCBpc1ZhbGlkQWxsb2NhdGlvbihzaXplX3QpOwotICAgICAgICB2b2lk
KiBhbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7CiAgICAgICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1v
cnlDb3N0U2xvd0Nhc2Uoc2l6ZV90KTsKKyAgICAgICAgdm9pZCBjYW5vbmljYWxpemVCbG9ja3Mo
KTsKICAgICAgICAgdm9pZCByZXNldEFsbG9jYXRvcigpOwogCiAgICAgICAgIE1hcmtlZEJsb2Nr
KiBhbGxvY2F0ZUJsb2NrKHNpemVfdCBjZWxsU2l6ZSk7CkBAIC0xMzcsNiArMTM4LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgbWFya1RlbXBTb3J0VmVjdG9ycyhIZWFwUm9vdFZp
c2l0b3ImKTsKIAogICAgICAgICB2b2lkKiB0cnlBbGxvY2F0ZShOZXdTcGFjZTo6U2l6ZUNsYXNz
Jik7CisgICAgICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoTmV3U3BhY2U6OlNpemVDbGFzcyYp
OwogICAgICAgICAKICAgICAgICAgZW51bSBTd2VlcFRvZ2dsZSB7IERvTm90U3dlZXAsIERvU3dl
ZXAgfTsKICAgICAgICAgdm9pZCBjb2xsZWN0KFN3ZWVwVG9nZ2xlKTsKQEAgLTI0Miw2ICsyNDQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlu
bGluZSB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIEhlYXA6OmZvckVhY2hQcm90ZWN0ZWRD
ZWxsKEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgeworICAgICAgICBjYW5vbmljYWxpemVCbG9ja3Mo
KTsKICAgICAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZh
bHVlcy5lbmQoKTsKICAgICAgICAgZm9yIChQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGl0ID0g
bV9wcm90ZWN0ZWRWYWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAg
ZnVuY3RvcihpdC0+Zmlyc3QpOwpAQCAtMjU4LDYgKzI2MSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6
OlJldHVyblR5cGUgSGVhcDo6Zm9yRWFjaENlbGwoRnVuY3RvciYgZnVuY3RvcikKICAgICB7Cisg
ICAgICAgIGNhbm9uaWNhbGl6ZUJsb2NrcygpOwogICAgICAgICBCbG9ja0l0ZXJhdG9yIGVuZCA9
IG1fYmxvY2tzLnNldCgpLmVuZCgpOwogICAgICAgICBmb3IgKEJsb2NrSXRlcmF0b3IgaXQgPSBt
X2Jsb2Nrcy5zZXQoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICAoKml0
KS0+Zm9yRWFjaENlbGwoZnVuY3Rvcik7CkBAIC0yNzIsNiArMjc2LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hbWUgRnVu
Y3Rvcjo6UmV0dXJuVHlwZSBIZWFwOjpmb3JFYWNoQmxvY2soRnVuY3RvciYgZnVuY3RvcikKICAg
ICB7CisgICAgICAgIGNhbm9uaWNhbGl6ZUJsb2NrcygpOwogICAgICAgICBCbG9ja0l0ZXJhdG9y
IGVuZCA9IG1fYmxvY2tzLnNldCgpLmVuZCgpOwogICAgICAgICBmb3IgKEJsb2NrSXRlcmF0b3Ig
aXQgPSBtX2Jsb2Nrcy5zZXQoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAg
ICBmdW5jdG9yKCppdCk7CkBAIC0yODMsNiArMjg4LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBGdW5jdG9yIGZ1bmN0b3I7CiAgICAgICAgIHJldHVybiBmb3JFYWNoQmxvY2soZnVuY3Rv
cik7CiAgICAgfQorICAgIAorICAgIGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZShOZXdTcGFj
ZTo6U2l6ZUNsYXNzJiBzaXplQ2xhc3MpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGEgbGln
aHQtd2VpZ2h0IGZhc3QgcGF0aCB0byBjb3ZlciB0aGUgbW9zdCBjb21tb24gY2FzZS4KKyAgICAg
ICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBmaXJzdEZyZWVDZWxsID0gc2l6ZUNsYXNzLmZpcnN0
RnJlZUNlbGw7CisgICAgICAgIGlmIChVTkxJS0VMWSghZmlyc3RGcmVlQ2VsbCkpCisgICAgICAg
ICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZShzaXplQ2xhc3MpOworICAgICAgICAKKyAgICAg
ICAgc2l6ZUNsYXNzLmZpcnN0RnJlZUNlbGwgPSBmaXJzdEZyZWVDZWxsLT5uZXh0OworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dm9pZCo+KGZpcnN0RnJlZUNlbGwpOworICAgIH0KIAogICAg
IGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZShzaXplX3QgYnl0ZXMpCiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gOTEw
MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDE3ICs0OSwxMiBAQCB2b2lkIE1hcmtlZEJsb2NrOjpkZXN0cm95KE1h
cmtlZEJsb2NrKiBiCiB9CiAKIE1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayhjb25zdCBQYWdlQWxs
b2NhdGlvbkFsaWduZWQmIGFsbG9jYXRpb24sIEhlYXAqIGhlYXAsIHNpemVfdCBjZWxsU2l6ZSkK
LSAgICA6IG1fbmV4dEF0b20oZmlyc3RBdG9tKCkpCi0gICAgLCBtX2luTmV3U3BhY2UoZmFsc2Up
CisgICAgOiBtX2luTmV3U3BhY2UoZmFsc2UpCiAgICAgLCBtX2FsbG9jYXRpb24oYWxsb2NhdGlv
bikKICAgICAsIG1faGVhcChoZWFwKQogewogICAgIG1fYXRvbXNQZXJDZWxsID0gKGNlbGxTaXpl
ICsgYXRvbVNpemUgLSAxKSAvIGF0b21TaXplOwogICAgIG1fZW5kQXRvbSA9IGF0b21zUGVyQmxv
Y2sgLSBtX2F0b21zUGVyQ2VsbCArIDE7Ci0KLSAgICBTdHJ1Y3R1cmUqIGR1bW15TWFya2FibGVD
ZWxsU3RydWN0dXJlID0gaGVhcC0+Z2xvYmFsRGF0YSgpLT5kdW1teU1hcmthYmxlQ2VsbFN0cnVj
dHVyZS5nZXQoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0
b207IGkgKz0gbV9hdG9tc1BlckNlbGwpCi0gICAgICAgIG5ldyAoJmF0b21zKClbaV0pIEpTQ2Vs
bCgqaGVhcC0+Z2xvYmFsRGF0YSgpLCBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSwgSlNDZWxs
OjpDcmVhdGluZ0Vhcmx5Q2VsbCk7CiB9CiAKIHZvaWQgTWFya2VkQmxvY2s6OnN3ZWVwKCkKQEAg
LTg1LDYgKzgwLDY0IEBAIHZvaWQgTWFya2VkQmxvY2s6OnN3ZWVwKCkKICAgICB9CiB9CiAKK01h
cmtlZEJsb2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OmxhenlTd2VlcCgpCit7CisgICAgLy8g
VGhpcyByZXR1cm5zIGEgZnJlZSBsaXN0IHRoYXQgaXMgb3JkZXJlZCBpbiByZXZlcnNlIHRocm91
Z2ggdGhlIGJsb2NrLgorICAgIC8vIFRoaXMgaXMgZmluZSwgc2luY2UgdGhlIGFsbG9jYXRpb24g
Y29kZSBtYWtlcyBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUKKyAgICAvLyBvcmRlciBvZiB0aGUg
ZnJlZSBsaXN0LgorICAgIAorICAgIEZyZWVDZWxsKiByZXN1bHQgPSAwOworICAgIAorICAgIGZv
ciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVy
Q2VsbCkgeworICAgICAgICBpZiAoIW1fbWFya3MudGVzdEFuZFNldChpKSkgeworICAgICAgICAg
ICAgSlNDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPigmYXRvbXMoKVtpXSk7
CisgICAgICAgICAgICBjZWxsLT5+SlNDZWxsKCk7CisgICAgICAgICAgICBGcmVlQ2VsbCogZnJl
ZUNlbGwgPSByZWludGVycHJldF9jYXN0PEZyZWVDZWxsKj4oY2VsbCk7CisgICAgICAgICAgICBm
cmVlQ2VsbC0+bmV4dCA9IHJlc3VsdDsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZyZWVDZWxsOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK01hcmtlZEJs
b2NrOjpGcmVlQ2VsbCogTWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tGb3JGYXN0UGF0aCgpCit7
CisgICAgLy8gVGhpcyByZXR1cm5zIGEgZnJlZSBsaXN0IHRoYXQgaXMgb3JkZXJlZCBpbiByZXZl
cnNlIHRocm91Z2ggdGhlIGJsb2NrLAorICAgIC8vIGFzIGluIGxhenlTd2VlcCgpIGFib3ZlLgor
ICAgIAorICAgIEZyZWVDZWxsKiByZXN1bHQgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSBmaXJz
dEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgeworICAgICAgICBt
X21hcmtzLnNldChpKTsKKyAgICAgICAgRnJlZUNlbGwqIGZyZWVDZWxsID0gcmVpbnRlcnByZXRf
Y2FzdDxGcmVlQ2VsbCo+KCZhdG9tcygpW2ldKTsKKyAgICAgICAgZnJlZUNlbGwtPm5leHQgPSBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdCA9IGZyZWVDZWxsOworICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIE1hcmtlZEJsb2NrOjpibGVzc05ld0Jsb2NrRm9yU2xvd1BhdGgoKQor
eworICAgIFN0cnVjdHVyZSogZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUgPSBtX2hlYXAtPmds
b2JhbERhdGEoKS0+ZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgZm9yIChz
aXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxs
KQorICAgICAgICBuZXcgKCZhdG9tcygpW2ldKSBKU0NlbGwoKm1faGVhcC0+Z2xvYmFsRGF0YSgp
LCBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSwgSlNDZWxsOjpDcmVhdGluZ0Vhcmx5Q2VsbCk7
Cit9CisKK3ZvaWQgTWFya2VkQmxvY2s6OmNhbm9uaWNhbGl6ZUJsb2NrKEZyZWVDZWxsKiBmaXJz
dEZyZWVDZWxsKQoreworICAgIFN0cnVjdHVyZSogZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUg
PSBtX2hlYXAtPmdsb2JhbERhdGEoKS0+ZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUuZ2V0KCk7
CisgICAgCisgICAgZm9yIChGcmVlQ2VsbCogY3VycmVudCA9IGZpcnN0RnJlZUNlbGw7IGN1cnJl
bnQ7KSB7CisgICAgICAgIEZyZWVDZWxsKiBuZXh0ID0gY3VycmVudC0+bmV4dDsKKyAgICAgICAg
c2l6ZV90IGkgPSBhdG9tTnVtYmVyKGN1cnJlbnQpOworICAgICAgICAKKyAgICAgICAgbV9tYXJr
cy5jbGVhcihpKTsKKyAgICAgICAgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oY3VycmVudCkpIEpT
Q2VsbCgqbV9oZWFwLT5nbG9iYWxEYXRhKCksIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLCBK
U0NlbGw6OkNyZWF0aW5nRWFybHlDZWxsKTsKKworICAgICAgICBjdXJyZW50ID0gbmV4dDsKKyAg
ICB9Cit9CisKICNpZiBFTkFCTEUoSlNDX1pPTUJJRVMpCiB2b2lkIE1hcmtlZEJsb2NrOjpjbGVh
ck1hcmtzKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
aAkocmV2aXNpb24gOTEwMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tc1BlckJsb2NrID0gYmxvY2tTaXplIC8g
YXRvbVNpemU7IC8vIH4xLjUlIG92ZXJoZWFkCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
b3duZXJTZXRzUGVyQmxvY2sgPSA4OyAvLyB+MiUgb3ZlcmhlYWQuCiAKKyAgICAgICAgc3RydWN0
IEZyZWVDZWxsIHsKKyAgICAgICAgICAgIEZyZWVDZWxsKiBuZXh0OworICAgICAgICB9OworICAg
ICAgICAKICAgICAgICAgc3RydWN0IFZvaWRGdW5jdG9yIHsKICAgICAgICAgICAgIHR5cGVkZWYg
dm9pZCBSZXR1cm5UeXBlOwogICAgICAgICAgICAgdm9pZCByZXR1cm5WYWx1ZSgpIHsgfQpAQCAt
ODQsOSArODgsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0SW5OZXdTcGFj
ZShib29sKTsKIAogICAgICAgICB2b2lkKiBhbGxvY2F0ZSgpOwotICAgICAgICB2b2lkIHJlc2V0
QWxsb2NhdG9yKCk7CiAgICAgICAgIHZvaWQgc3dlZXAoKTsKICAgICAgICAgCisgICAgICAgIC8v
IFRoaXMgaW52b2tlcyBkZXN0cnVjdG9ycyBvbiBhbGwgY2VsbHMgdGhhdCBhcmUgbm90IG1hcmtl
ZCwgbWFya3MKKyAgICAgICAgLy8gdGhlbSwgYW5kIHJldHVybnMgYSBsaW5rZWQgbGlzdCBvZiB0
aG9zZSBjZWxscy4KKyAgICAgICAgRnJlZUNlbGwqIGxhenlTd2VlcCgpOworICAgICAgICAKKyAg
ICAgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBhIGJsb2Nr
IGlzIGNyZWF0ZWQuCisgICAgICAgIC8vIEJsZXNzaW5nIGZvciBmYXN0IHBhdGggY3JlYXRlcyBh
IGxpbmtlZCBsaXN0LCB3aGlsZSBibGVzc2luZyBmb3IKKyAgICAgICAgLy8gc2xvdyBwYXRoIGNy
ZWF0ZXMgZHVtbXkgY2VsbHMuCisgICAgICAgIEZyZWVDZWxsKiBibGVzc05ld0Jsb2NrRm9yRmFz
dFBhdGgoKTsKKyAgICAgICAgdm9pZCBibGVzc05ld0Jsb2NrRm9yU2xvd1BhdGgoKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFRoaXMgdW5tYXJrcyBhbGwgY2VsbHMgb24gdGhlIGZyZWUgbGlzdCwg
YW5kIGFsbG9jYXRlcyBkdW1teSBKU0NlbGxzCisgICAgICAgIC8vIGluIHRoZWlyIHBsYWNlLgor
ICAgICAgICB2b2lkIGNhbm9uaWNhbGl6ZUJsb2NrKEZyZWVDZWxsKiBmaXJzdEZyZWVDZWxsKTsK
KyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNFbXB0eSgpOwogCiAgICAgICAgIHZvaWQgY2xlYXJN
YXJrcygpOwpAQCAtMTE4LDcgKzEzNSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXpl
X3QgYXRvbU51bWJlcihjb25zdCB2b2lkKik7CiAgICAgICAgIHNpemVfdCBvd25lclNldE51bWJl
cihjb25zdCBKU0NlbGwqKTsKIAotICAgICAgICBzaXplX3QgbV9uZXh0QXRvbTsKICAgICAgICAg
c2l6ZV90IG1fZW5kQXRvbTsgLy8gVGhpcyBpcyBhIGZ1enp5IGVuZC4gQWx3YXlzIHRlc3QgZm9y
IDwgbV9lbmRBdG9tLgogICAgICAgICBzaXplX3QgbV9hdG9tc1BlckNlbGw7CiAgICAgICAgIFdU
Rjo6Qml0bWFwPGJsb2NrU2l6ZSAvIGF0b21TaXplPiBtX21hcmtzOwpAQCAtMTY1LDExICsxODEs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbV9pbk5ld1NwYWNlID0gaW5OZXdTcGFjZTsK
ICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6cmVzZXRBbGxvY2F0b3IoKQot
ICAgIHsKLSAgICAgICAgbV9uZXh0QXRvbSA9IGZpcnN0QXRvbSgpOwotICAgIH0KLQogICAgIGlu
bGluZSBib29sIE1hcmtlZEJsb2NrOjppc0VtcHR5KCkKICAgICB7CiAgICAgICAgIHJldHVybiBt
X21hcmtzLmlzRW1wdHkoKTsKQEAgLTIzNSwyMiArMjQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBmdW5jdG9yKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmF0b21zKClbaV0p
KTsKICAgICAgICAgfQogICAgIH0KLQotICAgIGlubGluZSB2b2lkKiBNYXJrZWRCbG9jazo6YWxs
b2NhdGUoKQotICAgIHsKLSAgICAgICAgd2hpbGUgKG1fbmV4dEF0b20gPCBtX2VuZEF0b20pIHsK
LSAgICAgICAgICAgIGlmICghbV9tYXJrcy50ZXN0QW5kU2V0KG1fbmV4dEF0b20pKSB7Ci0gICAg
ICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPigmYXRv
bXMoKVttX25leHRBdG9tXSk7Ci0gICAgICAgICAgICAgICAgbV9uZXh0QXRvbSArPSBtX2F0b21z
UGVyQ2VsbDsKLSAgICAgICAgICAgICAgICBkZXN0cnVjdG9yKGNlbGwpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBjZWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9uZXh0QXRvbSAr
PSBtX2F0b21zUGVyQ2VsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQorICAgIAogICAgIGlubGluZSBzaXplX3QgTWFya2VkQmxvY2s6Om93bmVyU2V0TnVtYmVyKGNv
bnN0IEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2Fz
dDxCaXRzPihjZWxsKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4odGhpcykpICogb3duZXJTZXRz
UGVyQmxvY2sgLyBibG9ja1NpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9ja1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrU2V0LmgJKHJldmlzaW9uIDkxMDMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQmxvY2tTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogCiAjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJUaW55Qmxvb21GaWx0ZXIu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTmV3U3BhY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL05ld1NwYWNlLmNwcAkocmV2aXNpb24gOTEwMzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9OZXdTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDYgKzQ4LDEwIEBAIHZvaWQgTmV3U3BhY2U6OmFkZEJsb2NrKFNpemVDbGFzcyYgc2l6
ZUMKICAgICBibG9jay0+c2V0SW5OZXdTcGFjZSh0cnVlKTsKICAgICBzaXplQ2xhc3MubmV4dEJs
b2NrID0gYmxvY2s7CiAgICAgc2l6ZUNsYXNzLmJsb2NrTGlzdC5hcHBlbmQoYmxvY2spOworICAg
IEFTU0VSVCghc2l6ZUNsYXNzLmN1cnJlbnRCbG9jayk7CisgICAgQVNTRVJUKCFzaXplQ2xhc3Mu
Zmlyc3RGcmVlQ2VsbCk7CisgICAgc2l6ZUNsYXNzLmN1cnJlbnRCbG9jayA9IGJsb2NrOworICAg
IHNpemVDbGFzcy5maXJzdEZyZWVDZWxsID0gYmxvY2stPmJsZXNzTmV3QmxvY2tGb3JGYXN0UGF0
aCgpOwogfQogCiB2b2lkIE5ld1NwYWNlOjpyZW1vdmVCbG9jayhNYXJrZWRCbG9jayogYmxvY2sp
CkBAIC02OSw0ICs3MywxMyBAQCB2b2lkIE5ld1NwYWNlOjpyZXNldEFsbG9jYXRvcigpCiAgICAg
ICAgIHNpemVDbGFzc0ZvcihjZWxsU2l6ZSkucmVzZXRBbGxvY2F0b3IoKTsKIH0KIAordm9pZCBO
ZXdTcGFjZTo6Y2Fub25pY2FsaXplQmxvY2tzKCkKK3sKKyAgICBmb3IgKHNpemVfdCBjZWxsU2l6
ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8IHByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IHBy
ZWNpc2VTdGVwKQorICAgICAgICBzaXplQ2xhc3NGb3IoY2VsbFNpemUpLmNhbm9uaWNhbGl6ZUJs
b2NrKCk7CisKKyAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IGltcHJlY2lzZVN0ZXA7IGNlbGxT
aXplIDwgaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNpc2VTdGVwKQorICAgICAg
ICBzaXplQ2xhc3NGb3IoY2VsbFNpemUpLmNhbm9uaWNhbGl6ZUJsb2NrKCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTmV3U3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9OZXdTcGFjZS5oCShy
ZXZpc2lvbiA5MTAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL05ld1NwYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBzdHJ1Y3QgU2l6ZUNsYXNzIHsKICAgICAgICAgICAgIFNpemVDbGFzcygpOwogICAgICAgICAg
ICAgdm9pZCByZXNldEFsbG9jYXRvcigpOworICAgICAgICAgICAgdm9pZCBjYW5vbmljYWxpemVC
bG9jaygpOwogCisgICAgICAgICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGZpcnN0RnJlZUNl
bGw7CisgICAgICAgICAgICBNYXJrZWRCbG9jayogY3VycmVudEJsb2NrOwogICAgICAgICAgICAg
TWFya2VkQmxvY2sqIG5leHRCbG9jazsKICAgICAgICAgICAgIERvdWJseUxpbmtlZExpc3Q8TWFy
a2VkQmxvY2s+IGJsb2NrTGlzdDsKICAgICAgICAgICAgIHNpemVfdCBjZWxsU2l6ZTsKQEAgLTY0
LDYgKzY3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBhZGRCbG9jayhTaXpl
Q2xhc3MmLCBNYXJrZWRCbG9jayopOwogICAgICAgICB2b2lkIHJlbW92ZUJsb2NrKE1hcmtlZEJs
b2NrKik7CisgICAgICAgIAorICAgICAgICB2b2lkIGNhbm9uaWNhbGl6ZUJsb2NrcygpOwogCiAg
ICAgICAgIHNpemVfdCB3YXRlck1hcmsoKTsKICAgICAgICAgc2l6ZV90IGhpZ2hXYXRlck1hcmso
KTsKQEAgLTExNSwxNCArMTIwLDQzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgaW5saW5lIHZv
aWQqIE5ld1NwYWNlOjphbGxvY2F0ZShTaXplQ2xhc3MmIHNpemVDbGFzcykKICAgICB7Ci0gICAg
ICAgIGZvciAoTWFya2VkQmxvY2sqJiBibG9jayA9IHNpemVDbGFzcy5uZXh0QmxvY2sgOyBibG9j
azsgYmxvY2sgPSBibG9jay0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAodm9pZCogcmVzdWx0
ID0gYmxvY2stPmFsbG9jYXRlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQot
ICAgICAgICAgICAgbV93YXRlck1hcmsgKz0gYmxvY2stPmNhcGFjaXR5KCk7CisgICAgICAgIE1h
cmtlZEJsb2NrOjpGcmVlQ2VsbCogZmlyc3RGcmVlQ2VsbCA9IHNpemVDbGFzcy5maXJzdEZyZWVD
ZWxsOworICAgICAgICBpZiAoIWZpcnN0RnJlZUNlbGwpIHsKKyAgICAgICAgICAgIC8vIFRoZXJl
IGFyZSB0d28gcG9zc2liaWxpdGllcyBmb3Igd2h5IHdlIGdvdCBoZXJlOgorICAgICAgICAgICAg
Ly8gMSkgV2UndmUgZXhoYXVzdGVkIHRoZSBhbGxvY2F0aW9uIGNhY2hlIGZvciBjdXJyZW50Qmxv
Y2ssIGluIHdoaWNoIGNhc2UKKyAgICAgICAgICAgIC8vICAgIGN1cnJlbnRCbG9jayA9PSBuZXh0
QmxvY2ssIGFuZCB3ZSBrbm93IHRoYXQgdGhlcmUgaXMgbm8gcmVhc29uIHRvCisgICAgICAgICAg
ICAvLyAgICByZXBlYXQgYSBsYXp5IHN3ZWVwIG9mIG5leHRCbG9jayBiZWNhdXNlIHdlIHdvbid0
IGZpbmQgYW55dGhpbmcuCisgICAgICAgICAgICAvLyAyKSBBbGxvY2F0aW9uIGNhY2hlcyBoYXZl
IGJlZW4gY2xlYXJlZCwgaW4gd2hpY2ggY2FzZSBuZXh0QmxvY2sgbWF5CisgICAgICAgICAgICAv
LyAgICBoYXZlIChhbmQgbW9zdCBsaWtlbHkgZG9lcyBoYXZlKSBmcmVlIGNlbGxzLCBzbyB3ZSBh
bG1vc3QgY2VydGFpbmx5CisgICAgICAgICAgICAvLyAgICBzaG91bGQgZG8gYSBsYXp5U3dlZXAg
Zm9yIG5leHRCbG9jay4gVGhpcyBhbHNvIGltcGxpZXMgdGhhdAorICAgICAgICAgICAgLy8gICAg
Y3VycmVudEJsb2NrID09IDAuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzaXplQ2xh
c3MuY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNpemVDbGFzcy5jdXJy
ZW50QmxvY2sgPT0gc2l6ZUNsYXNzLm5leHRCbG9jayk7CisgICAgICAgICAgICAgICAgbV93YXRl
ck1hcmsgKz0gc2l6ZUNsYXNzLm5leHRCbG9jay0+Y2FwYWNpdHkoKTsKKyAgICAgICAgICAgICAg
ICBzaXplQ2xhc3MubmV4dEJsb2NrID0gc2l6ZUNsYXNzLm5leHRCbG9jay0+bmV4dCgpOworICAg
ICAgICAgICAgICAgIHNpemVDbGFzcy5jdXJyZW50QmxvY2sgPSAwOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKE1hcmtlZEJsb2NrKiYgYmxvY2sgPSBzaXpl
Q2xhc3MubmV4dEJsb2NrIDsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkgeworICAgICAg
ICAgICAgICAgIGZpcnN0RnJlZUNlbGwgPSBibG9jay0+bGF6eVN3ZWVwKCk7CisgICAgICAgICAg
ICAgICAgaWYgKGZpcnN0RnJlZUNlbGwpIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZUNsYXNz
LmZpcnN0RnJlZUNlbGwgPSBmaXJzdEZyZWVDZWxsOworICAgICAgICAgICAgICAgICAgICBzaXpl
Q2xhc3MuY3VycmVudEJsb2NrID0gYmxvY2s7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3dh
dGVyTWFyayArPSBibG9jay0+Y2FwYWNpdHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKCFmaXJzdEZyZWVDZWxsKQorICAgICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICBB
U1NFUlQoZmlyc3RGcmVlQ2VsbCk7CisgICAgICAgIAorICAgICAgICBzaXplQ2xhc3MuZmlyc3RG
cmVlQ2VsbCA9IGZpcnN0RnJlZUNlbGwtPm5leHQ7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx2b2lkKj4oZmlyc3RGcmVlQ2VsbCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0b3I+IGlubGluZSB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIE5ld1NwYWNlOjpm
b3JFYWNoQmxvY2soRnVuY3RvciYgZnVuY3RvcikKQEAgLTE1NSw3ICsxODksOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB9CiAKICAgICBpbmxpbmUgTmV3U3BhY2U6OlNpemVDbGFzczo6U2l6ZUNs
YXNzKCkKLSAgICAgICAgOiBuZXh0QmxvY2soMCkKKyAgICAgICAgOiBmaXJzdEZyZWVDZWxsKDAp
CisgICAgICAgICwgY3VycmVudEJsb2NrKDApCisgICAgICAgICwgbmV4dEJsb2NrKDApCiAgICAg
ICAgICwgY2VsbFNpemUoMCkKICAgICB7CiAgICAgfQpAQCAtMTY0LDYgKzIwMCwxOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIG5leHRCbG9jayA9IGJsb2NrTGlzdC5oZWFkKCk7
CiAgICAgfQorICAgIAorICAgIGlubGluZSB2b2lkIE5ld1NwYWNlOjpTaXplQ2xhc3M6OmNhbm9u
aWNhbGl6ZUJsb2NrKCkKKyAgICB7CisgICAgICAgIGlmIChjdXJyZW50QmxvY2spIHsKKyAgICAg
ICAgICAgIGN1cnJlbnRCbG9jay0+Y2Fub25pY2FsaXplQmxvY2soZmlyc3RGcmVlQ2VsbCk7Cisg
ICAgICAgICAgICBmaXJzdEZyZWVDZWxsID0gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKCFmaXJzdEZyZWVDZWxsKTsKKyAgICAgICAgCisgICAgICAgIGN1cnJlbnRCbG9j
ayA9IDA7CisgICAgICAgIGZpcnN0RnJlZUNlbGwgPSAwOworICAgIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09sZFNwYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9PbGRTcGFjZS5jcHAJKHJl
dmlzaW9uIDkxMDMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT2xkU3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIE9sZFNwYWNlOjpPbGRTcGFjZShIZWFw
KiBoZWFwKQogdm9pZCBPbGRTcGFjZTo6YWRkQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQogewog
ICAgIG1fYmxvY2tzLmFwcGVuZChibG9jayk7CisgICAgYmxvY2stPmJsZXNzTmV3QmxvY2tGb3JT
bG93UGF0aCgpOwogfQogCiB2b2lkIE9sZFNwYWNlOjpyZW1vdmVCbG9jayhNYXJrZWRCbG9jayog
YmxvY2spCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100870</attachid>
            <date>2011-07-14 15:08:51 -0700</date>
            <delta_ts>2011-07-14 15:51:04 -0700</delta_ts>
            <desc>the patch (fix review)</desc>
            <filename>fastalloc_patch_6.diff</filename>
            <type>text/plain</type>
            <size>19404</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTMgQEAK
KzIwMTEtMDctMTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBH
QyBhbGxvY2F0aW9uIGZhc3QgcGF0aCBoYXMgdG9vIG1hbnkgb3BlcmF0aW9ucy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDkzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBDaGFuZ2VkIHRo
ZSB0aW1pbmcgb2YgdGhlIGxhenkgc3dlZXAgc28gdGhhdCBpdCBvY2N1cnMgd2hlbiB3ZSBsYW5k
IG9uCisgICAgICAgIGEgcHJldmlvdXNseS11bnN3ZWVwZWQgYmxvY2ssIHJhdGhlciB0aGFuIHdo
ZW5ldmVyIHdlIGxhbmQgb24gYW4gdW5zd2VlcGVkCisgICAgICAgIGNlbGwuICBBZnRlciB0aGUg
cGVyLWJsb2NrIGxhenkgc3dlZXAgb2NjdXJzLCB0aGUgYmxvY2sgaXMgdHVybmVkIGludG8gYQor
ICAgICAgICBzaW5nbHkgbGlua2VkIGxpc3Qgb2YgZnJlZSBjZWxscy4gIFRoZSBhbGxvY2F0aW9u
IGZhc3QgcGF0aCBpcyBub3cganVzdCBhCisgICAgICAgIGxvYWQtYnJhbmNoLXN0b3JlIHRvIHJl
bW92ZSBhIGNlbGwgZnJvbSB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KKyAgICAgICAgCisgICAgICAg
IEFkZGl0aW9uYWxseSwgdGhpcyBjaGFuZ2VzIHRoZSB3YXkgbmV3IGJsb2NrcyBhcmUgYWxsb2Nh
dGVkLiAgUHJldmlvdXNseSwKKyAgICAgICAgdGhleSB3b3VsZCBiZSBwb3B1bGF0ZWQgd2l0aCBk
dW1teSBjZWxscy4gIFdpdGggdGhpcyBwYXRjaCwgdGhleSBhcmUKKyAgICAgICAgdHVybmVkIGlu
dG8gYSBmcmVlIGxpc3QsIHdoaWNoIG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBuZXZlciBiZSBkZXN0
cnVjdG9yCisgICAgICAgIGNhbGxzIGZvciBhbGxvY2F0aW9ucyBpbiBmcmVzaCBibG9ja3MuCisg
ICAgICAgIAorICAgICAgICBUaGVzZSBjaGFuZ2VzIHJlc3VsdCBpbiBhIDEuOSUgc3BlZWQtdXAg
b24gVjgsIGFuZCBhIDAuNiUgc3BlZWQtdXAgb24KKyAgICAgICAgU3VuU3BpZGVyLiAgVGhlcmUg
YXJlIG5vIG9ic2VydmVkIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgc2xvdy1kb3ducworICAg
ICAgICBvbiBhbnkgaW5kaXZpZHVhbCBiZW5jaG1hcmsuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS5leHA6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjYW5vbmljYWxpemVCbG9ja3MpOgorICAgICAgICAoSlNDOjpIZWFwOjpy
ZXNldEFsbG9jYXRvcik6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6Okhl
YXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaENl
bGwpOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoQmxvY2spOgorICAgICAgICAoSlNDOjpI
ZWFwOjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJs
b2NrOjpsYXp5U3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Ymxlc3NOZXdCbG9j
a0ZvckZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tG
b3JTbG93UGF0aCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjYW5vbmljYWxpemVCbG9j
ayk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAqIGhlYXAvTmV3U3Bh
Y2UuY3BwOgorICAgICAgICAoSlNDOjpOZXdTcGFjZTo6YWRkQmxvY2spOgorICAgICAgICAoSlND
OjpOZXdTcGFjZTo6Y2Fub25pY2FsaXplQmxvY2tzKToKKyAgICAgICAgKiBoZWFwL05ld1NwYWNl
Lmg6CisgICAgICAgIChKU0M6Ok5ld1NwYWNlOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok5l
d1NwYWNlOjpTaXplQ2xhc3M6OlNpemVDbGFzcyk6CisgICAgICAgIChKU0M6Ok5ld1NwYWNlOjpT
aXplQ2xhc3M6OmNhbm9uaWNhbGl6ZUJsb2NrKToKKyAgICAgICAgKiBoZWFwL09sZFNwYWNlLmNw
cDoKKyAgICAgICAgKEpTQzo6T2xkU3BhY2U6OmFkZEJsb2NrKToKKwogMjAxMS0wNy0xNCAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzcGVjdWxhdGl2ZSBK
SVQgY29udGFpbnMgYSBGSVhNRSBmb3IgcmV3aW5kaW5nIHNwZWN1bGF0aXZlIGNvZGUgZ2VuZXJh
dGlvbiB0aGF0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJ
KHJldmlzaW9uIDkxMDMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDYgKzIyNCw3IEBAIF9fWk4zSlNDMzVjcmVhdGVJ
bnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2UKIF9fWk4zSlNDNDFjb25zdHJ1Y3RGdW5jdGlvblNraXBw
aW5nRXZhbEVuYWJsZWRDaGVja0VQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVS
S05TXzdBcmdMaXN0RVJLTlNfMTBJZGVudGlmaWVyRVJLTlNfN1VTdHJpbmdFaQogX19aTjNKU0M0
SGVhcDExb2JqZWN0Q291bnRFdgogX19aTjNKU0M0SGVhcDE2YWN0aXZpdHlDYWxsYmFja0V2Citf
X1pOM0pTQzRIZWFwMTZhbGxvY2F0ZVNsb3dDYXNlRVJOU184TmV3U3BhY2U5U2l6ZUNsYXNzRQog
X19aTjNKU0M0SGVhcDE2b2JqZWN0VHlwZUNvdW50c0V2CiBfX1pOM0pTQzRIZWFwMTdjb2xsZWN0
QWxsR2FyYmFnZUV2CiBfX1pOM0pTQzRIZWFwMTdnbG9iYWxPYmplY3RDb3VudEV2CkBAIC0yMzcs
NyArMjM4LDYgQEAgX19aTjNKU0M0SGVhcDI5cmVwb3J0RXh0cmFNZW1vcnlDb3N0U2xvdwogX19a
TjNKU0M0SGVhcDRzaXplRXYKIF9fWk4zSlNDNEhlYXA3ZGVzdHJveUV2CiBfX1pOM0pTQzRIZWFw
N3Byb3RlY3RFTlNfN0pTVmFsdWVFCi1fX1pOM0pTQzRIZWFwOGFsbG9jYXRlRVJOU184TmV3U3Bh
Y2U5U2l6ZUNsYXNzRQogX19aTjNKU0M0SGVhcDhjYXBhY2l0eUV2CiBfX1pOM0pTQzRIZWFwOXVu
cHJvdGVjdEVOU183SlNWYWx1ZUUKIF9fWk4zSlNDNFlhcnIxMVlhcnJQYXR0ZXJuQzFFUktOU183
VVN0cmluZ0ViYlBQS2MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZp
c2lvbiA5MTAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDIsMTUgKzEwMiw2IEBAIGlubGluZSB2b2lkIENsZWFyTWFya3M6Om9w
ZXJhdG9yKCkoTWFya2UKICAgICBibG9jay0+Y2xlYXJNYXJrcygpOwogfQogCi1zdHJ1Y3QgUmVz
ZXRBbGxvY2F0b3IgOiBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotICAgIHZvaWQgb3BlcmF0
b3IoKShNYXJrZWRCbG9jayopOwotfTsKLQotaW5saW5lIHZvaWQgUmVzZXRBbGxvY2F0b3I6Om9w
ZXJhdG9yKCkoTWFya2VkQmxvY2sqIGJsb2NrKQotewotICAgIGJsb2NrLT5yZXNldEFsbG9jYXRv
cigpOwotfQotCiBzdHJ1Y3QgU3dlZXAgOiBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewogICAg
IHZvaWQgb3BlcmF0b3IoKShNYXJrZWRCbG9jayopOwogfTsKQEAgLTMyMCw3ICszMTEsNyBAQCBp
bmxpbmUgdm9pZCogSGVhcDo6dHJ5QWxsb2NhdGUoTmV3U3BhY2U6CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCogSGVhcDo6YWxsb2NhdGUoTmV3U3BhY2U6OlNpemVDbGFzcyYgc2l6ZUNs
YXNzKQordm9pZCogSGVhcDo6YWxsb2NhdGVTbG93Q2FzZShOZXdTcGFjZTo6U2l6ZUNsYXNzJiBz
aXplQ2xhc3MpCiB7CiAjaWYgQ09MTEVDVF9PTl9FVkVSWV9BTExPQ0FUSU9OCiAgICAgY29sbGVj
dEFsbEdhcmJhZ2UoKTsKQEAgLTU1OCw3ICs1NDksOSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dl
ZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgQVNTRVJUKGdsb2JhbERhdGEoKS0+aWRlbnRpZmllclRh
YmxlID09IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwogICAgIEFT
U0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAgICAgSkFWQVNDUklQVENPUkVfR0NfQkVHSU4oKTsK
LQorICAgIAorICAgIGNhbm9uaWNhbGl6ZUJsb2NrcygpOworICAgIAogICAgIG1hcmtSb290cygp
OwogICAgIG1faGFuZGxlSGVhcC5maW5hbGl6ZVdlYWtIYW5kbGVzKCk7CiAgICAgbV9nbG9iYWxE
YXRhLT5zbWFsbFN0cmluZ3MuZmluYWxpemVTbWFsbFN0cmluZ3MoKTsKQEAgLTU4OCwxMSArNTgx
LDE1IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICAoKm1f
YWN0aXZpdHlDYWxsYmFjaykoKTsKIH0KIAordm9pZCBIZWFwOjpjYW5vbmljYWxpemVCbG9ja3Mo
KQoreworICAgIG1fbmV3U3BhY2UuY2Fub25pY2FsaXplQmxvY2tzKCk7Cit9CisKIHZvaWQgSGVh
cDo6cmVzZXRBbGxvY2F0b3IoKQogewogICAgIG1fZXh0cmFDb3N0ID0gMDsKICAgICBtX25ld1Nw
YWNlLnJlc2V0QWxsb2NhdG9yKCk7Ci0gICAgZm9yRWFjaEJsb2NrPFJlc2V0QWxsb2NhdG9yPigp
OwogfQogCiB2b2lkIEhlYXA6OnNldEFjdGl2aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2
aXR5Q2FsbGJhY2s+IGFjdGl2aXR5Q2FsbGJhY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCShyZXZpc2lvbiA5MTAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsOSArMjQsMTAgQEAKIAogI2luY2x1ZGUgIkhhbmRs
ZUhlYXAuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9y
LmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5o
IgogI2luY2x1ZGUgIk5ld1NwYWNlLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC0xMjQsOCArMTI1LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4RXh0cmFDb3N0ID0gMTAyNCAqIDEwMjQ7
CiAKICAgICAgICAgYm9vbCBpc1ZhbGlkQWxsb2NhdGlvbihzaXplX3QpOwotICAgICAgICB2b2lk
KiBhbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCk7CiAgICAgICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1v
cnlDb3N0U2xvd0Nhc2Uoc2l6ZV90KTsKKyAgICAgICAgdm9pZCBjYW5vbmljYWxpemVCbG9ja3Mo
KTsKICAgICAgICAgdm9pZCByZXNldEFsbG9jYXRvcigpOwogCiAgICAgICAgIE1hcmtlZEJsb2Nr
KiBhbGxvY2F0ZUJsb2NrKHNpemVfdCBjZWxsU2l6ZSk7CkBAIC0xMzcsNiArMTM4LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgbWFya1RlbXBTb3J0VmVjdG9ycyhIZWFwUm9vdFZp
c2l0b3ImKTsKIAogICAgICAgICB2b2lkKiB0cnlBbGxvY2F0ZShOZXdTcGFjZTo6U2l6ZUNsYXNz
Jik7CisgICAgICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoTmV3U3BhY2U6OlNpemVDbGFzcyYp
OwogICAgICAgICAKICAgICAgICAgZW51bSBTd2VlcFRvZ2dsZSB7IERvTm90U3dlZXAsIERvU3dl
ZXAgfTsKICAgICAgICAgdm9pZCBjb2xsZWN0KFN3ZWVwVG9nZ2xlKTsKQEAgLTI0Miw2ICsyNDQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlu
bGluZSB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIEhlYXA6OmZvckVhY2hQcm90ZWN0ZWRD
ZWxsKEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgeworICAgICAgICBjYW5vbmljYWxpemVCbG9ja3Mo
KTsKICAgICAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZh
bHVlcy5lbmQoKTsKICAgICAgICAgZm9yIChQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGl0ID0g
bV9wcm90ZWN0ZWRWYWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAg
ZnVuY3RvcihpdC0+Zmlyc3QpOwpAQCAtMjU4LDYgKzI2MSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6
OlJldHVyblR5cGUgSGVhcDo6Zm9yRWFjaENlbGwoRnVuY3RvciYgZnVuY3RvcikKICAgICB7Cisg
ICAgICAgIGNhbm9uaWNhbGl6ZUJsb2NrcygpOwogICAgICAgICBCbG9ja0l0ZXJhdG9yIGVuZCA9
IG1fYmxvY2tzLnNldCgpLmVuZCgpOwogICAgICAgICBmb3IgKEJsb2NrSXRlcmF0b3IgaXQgPSBt
X2Jsb2Nrcy5zZXQoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICAoKml0
KS0+Zm9yRWFjaENlbGwoZnVuY3Rvcik7CkBAIC0yNzIsNiArMjc2LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hbWUgRnVu
Y3Rvcjo6UmV0dXJuVHlwZSBIZWFwOjpmb3JFYWNoQmxvY2soRnVuY3RvciYgZnVuY3RvcikKICAg
ICB7CisgICAgICAgIGNhbm9uaWNhbGl6ZUJsb2NrcygpOwogICAgICAgICBCbG9ja0l0ZXJhdG9y
IGVuZCA9IG1fYmxvY2tzLnNldCgpLmVuZCgpOwogICAgICAgICBmb3IgKEJsb2NrSXRlcmF0b3Ig
aXQgPSBtX2Jsb2Nrcy5zZXQoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAg
ICBmdW5jdG9yKCppdCk7CkBAIC0yODMsNiArMjg4LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBGdW5jdG9yIGZ1bmN0b3I7CiAgICAgICAgIHJldHVybiBmb3JFYWNoQmxvY2soZnVuY3Rv
cik7CiAgICAgfQorICAgIAorICAgIGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZShOZXdTcGFj
ZTo6U2l6ZUNsYXNzJiBzaXplQ2xhc3MpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGEgbGln
aHQtd2VpZ2h0IGZhc3QgcGF0aCB0byBjb3ZlciB0aGUgbW9zdCBjb21tb24gY2FzZS4KKyAgICAg
ICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBmaXJzdEZyZWVDZWxsID0gc2l6ZUNsYXNzLmZpcnN0
RnJlZUNlbGw7CisgICAgICAgIGlmIChVTkxJS0VMWSghZmlyc3RGcmVlQ2VsbCkpCisgICAgICAg
ICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZShzaXplQ2xhc3MpOworICAgICAgICAKKyAgICAg
ICAgc2l6ZUNsYXNzLmZpcnN0RnJlZUNlbGwgPSBmaXJzdEZyZWVDZWxsLT5uZXh0OworICAgICAg
ICByZXR1cm4gZmlyc3RGcmVlQ2VsbDsKKyAgICB9CiAKICAgICBpbmxpbmUgdm9pZCogSGVhcDo6
YWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDkxMDMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNyAr
NDksMTIgQEAgdm9pZCBNYXJrZWRCbG9jazo6ZGVzdHJveShNYXJrZWRCbG9jayogYgogfQogCiBN
YXJrZWRCbG9jazo6TWFya2VkQmxvY2soY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJiBhbGxv
Y2F0aW9uLCBIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUpCi0gICAgOiBtX25leHRBdG9tKGZp
cnN0QXRvbSgpKQotICAgICwgbV9pbk5ld1NwYWNlKGZhbHNlKQorICAgIDogbV9pbk5ld1NwYWNl
KGZhbHNlKQogICAgICwgbV9hbGxvY2F0aW9uKGFsbG9jYXRpb24pCiAgICAgLCBtX2hlYXAoaGVh
cCkKIHsKICAgICBtX2F0b21zUGVyQ2VsbCA9IChjZWxsU2l6ZSArIGF0b21TaXplIC0gMSkgLyBh
dG9tU2l6ZTsKICAgICBtX2VuZEF0b20gPSBhdG9tc1BlckJsb2NrIC0gbV9hdG9tc1BlckNlbGwg
KyAxOwotCi0gICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSA9IGhlYXAt
Pmdsb2JhbERhdGEoKS0+ZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJD
ZWxsKQotICAgICAgICBuZXcgKCZhdG9tcygpW2ldKSBKU0NlbGwoKmhlYXAtPmdsb2JhbERhdGEo
KSwgZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUsIEpTQ2VsbDo6Q3JlYXRpbmdFYXJseUNlbGwp
OwogfQogCiB2b2lkIE1hcmtlZEJsb2NrOjpzd2VlcCgpCkBAIC04NSw2ICs4MCw2NCBAQCB2b2lk
IE1hcmtlZEJsb2NrOjpzd2VlcCgpCiAgICAgfQogfQogCitNYXJrZWRCbG9jazo6RnJlZUNlbGwq
IE1hcmtlZEJsb2NrOjpsYXp5U3dlZXAoKQoreworICAgIC8vIFRoaXMgcmV0dXJucyBhIGZyZWUg
bGlzdCB0aGF0IGlzIG9yZGVyZWQgaW4gcmV2ZXJzZSB0aHJvdWdoIHRoZSBibG9jay4KKyAgICAv
LyBUaGlzIGlzIGZpbmUsIHNpbmNlIHRoZSBhbGxvY2F0aW9uIGNvZGUgbWFrZXMgbm8gYXNzdW1w
dGlvbnMgYWJvdXQgdGhlCisgICAgLy8gb3JkZXIgb2YgdGhlIGZyZWUgbGlzdC4KKyAgICAKKyAg
ICBGcmVlQ2VsbCogcmVzdWx0ID0gMDsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RB
dG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKKyAgICAgICAgaWYg
KCFtX21hcmtzLnRlc3RBbmRTZXQoaSkpIHsKKyAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmF0b21zKClbaV0pOworICAgICAgICAgICAgY2VsbC0+
fkpTQ2VsbCgpOworICAgICAgICAgICAgRnJlZUNlbGwqIGZyZWVDZWxsID0gcmVpbnRlcnByZXRf
Y2FzdDxGcmVlQ2VsbCo+KGNlbGwpOworICAgICAgICAgICAgZnJlZUNlbGwtPm5leHQgPSByZXN1
bHQ7CisgICAgICAgICAgICByZXN1bHQgPSBmcmVlQ2VsbDsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitNYXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtl
ZEJsb2NrOjpibGVzc05ld0Jsb2NrRm9yRmFzdFBhdGgoKQoreworICAgIC8vIFRoaXMgcmV0dXJu
cyBhIGZyZWUgbGlzdCB0aGF0IGlzIG9yZGVyZWQgaW4gcmV2ZXJzZSB0aHJvdWdoIHRoZSBibG9j
aywKKyAgICAvLyBhcyBpbiBsYXp5U3dlZXAoKSBhYm92ZS4KKyAgICAKKyAgICBGcmVlQ2VsbCog
cmVzdWx0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0
b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKKyAgICAgICAgbV9tYXJrcy5zZXQoaSk7CisgICAg
ICAgIEZyZWVDZWxsKiBmcmVlQ2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnJlZUNlbGwqPigmYXRv
bXMoKVtpXSk7CisgICAgICAgIGZyZWVDZWxsLT5uZXh0ID0gcmVzdWx0OworICAgICAgICByZXN1
bHQgPSBmcmVlQ2VsbDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBNYXJr
ZWRCbG9jazo6Ymxlc3NOZXdCbG9ja0ZvclNsb3dQYXRoKCkKK3sKKyAgICBTdHJ1Y3R1cmUqIGR1
bW15TWFya2FibGVDZWxsU3RydWN0dXJlID0gbV9oZWFwLT5nbG9iYWxEYXRhKCktPmR1bW15TWFy
a2FibGVDZWxsU3RydWN0dXJlLmdldCgpOworICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20o
KTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkKKyAgICAgICAgbmV3ICgmYXRv
bXMoKVtpXSkgSlNDZWxsKCptX2hlYXAtPmdsb2JhbERhdGEoKSwgZHVtbXlNYXJrYWJsZUNlbGxT
dHJ1Y3R1cmUsIEpTQ2VsbDo6Q3JlYXRpbmdFYXJseUNlbGwpOworfQorCit2b2lkIE1hcmtlZEJs
b2NrOjpjYW5vbmljYWxpemVCbG9jayhGcmVlQ2VsbCogZmlyc3RGcmVlQ2VsbCkKK3sKKyAgICBT
dHJ1Y3R1cmUqIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlID0gbV9oZWFwLT5nbG9iYWxEYXRh
KCktPmR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlLmdldCgpOworICAgIAorICAgIGZvciAoRnJl
ZUNlbGwqIGN1cnJlbnQgPSBmaXJzdEZyZWVDZWxsOyBjdXJyZW50OykgeworICAgICAgICBGcmVl
Q2VsbCogbmV4dCA9IGN1cnJlbnQtPm5leHQ7CisgICAgICAgIHNpemVfdCBpID0gYXRvbU51bWJl
cihjdXJyZW50KTsKKyAgICAgICAgCisgICAgICAgIG1fbWFya3MuY2xlYXIoaSk7CisgICAgICAg
IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KGN1cnJlbnQpKSBKU0NlbGwoKm1faGVhcC0+Z2xvYmFs
RGF0YSgpLCBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSwgSlNDZWxsOjpDcmVhdGluZ0Vhcmx5
Q2VsbCk7CisKKyAgICAgICAgY3VycmVudCA9IG5leHQ7CisgICAgfQorfQorCiAjaWYgRU5BQkxF
KEpTQ19aT01CSUVTKQogdm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJNYXJrcygpCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDkxMDMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNiArNDgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgYXRvbXNQZXJCbG9jayA9IGJsb2NrU2l6ZSAvIGF0b21TaXplOyAvLyB+MS41JSBv
dmVyaGVhZAogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG93bmVyU2V0c1BlckJsb2NrID0g
ODsgLy8gfjIlIG92ZXJoZWFkLgogCisgICAgICAgIHN0cnVjdCBGcmVlQ2VsbCB7CisgICAgICAg
ICAgICBGcmVlQ2VsbCogbmV4dDsKKyAgICAgICAgfTsKKyAgICAgICAgCiAgICAgICAgIHN0cnVj
dCBWb2lkRnVuY3RvciB7CiAgICAgICAgICAgICB0eXBlZGVmIHZvaWQgUmV0dXJuVHlwZTsKICAg
ICAgICAgICAgIHZvaWQgcmV0dXJuVmFsdWUoKSB7IH0KQEAgLTg0LDkgKzg4LDIyIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldEluTmV3U3BhY2UoYm9vbCk7CiAKICAgICAgICAg
dm9pZCogYWxsb2NhdGUoKTsKLSAgICAgICAgdm9pZCByZXNldEFsbG9jYXRvcigpOwogICAgICAg
ICB2b2lkIHN3ZWVwKCk7CiAgICAgICAgIAorICAgICAgICAvLyBUaGlzIGludm9rZXMgZGVzdHJ1
Y3RvcnMgb24gYWxsIGNlbGxzIHRoYXQgYXJlIG5vdCBtYXJrZWQsIG1hcmtzCisgICAgICAgIC8v
IHRoZW0sIGFuZCByZXR1cm5zIGEgbGlua2VkIGxpc3Qgb2YgdGhvc2UgY2VsbHMuCisgICAgICAg
IEZyZWVDZWxsKiBsYXp5U3dlZXAoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZXNlIHNob3Vs
ZCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBibG9jayBpcyBjcmVhdGVkLgorICAgICAg
ICAvLyBCbGVzc2luZyBmb3IgZmFzdCBwYXRoIGNyZWF0ZXMgYSBsaW5rZWQgbGlzdCwgd2hpbGUg
Ymxlc3NpbmcgZm9yCisgICAgICAgIC8vIHNsb3cgcGF0aCBjcmVhdGVzIGR1bW15IGNlbGxzLgor
ICAgICAgICBGcmVlQ2VsbCogYmxlc3NOZXdCbG9ja0ZvckZhc3RQYXRoKCk7CisgICAgICAgIHZv
aWQgYmxlc3NOZXdCbG9ja0ZvclNsb3dQYXRoKCk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlz
IHVubWFya3MgYWxsIGNlbGxzIG9uIHRoZSBmcmVlIGxpc3QsIGFuZCBhbGxvY2F0ZXMgZHVtbXkg
SlNDZWxscworICAgICAgICAvLyBpbiB0aGVpciBwbGFjZS4KKyAgICAgICAgdm9pZCBjYW5vbmlj
YWxpemVCbG9jayhGcmVlQ2VsbCogZmlyc3RGcmVlQ2VsbCk7CisgICAgICAgIAogICAgICAgICBi
b29sIGlzRW1wdHkoKTsKIAogICAgICAgICB2b2lkIGNsZWFyTWFya3MoKTsKQEAgLTExOCw3ICsx
MzUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IGF0b21OdW1iZXIoY29uc3Qg
dm9pZCopOwogICAgICAgICBzaXplX3Qgb3duZXJTZXROdW1iZXIoY29uc3QgSlNDZWxsKik7CiAK
LSAgICAgICAgc2l6ZV90IG1fbmV4dEF0b207CiAgICAgICAgIHNpemVfdCBtX2VuZEF0b207IC8v
IFRoaXMgaXMgYSBmdXp6eSBlbmQuIEFsd2F5cyB0ZXN0IGZvciA8IG1fZW5kQXRvbS4KICAgICAg
ICAgc2l6ZV90IG1fYXRvbXNQZXJDZWxsOwogICAgICAgICBXVEY6OkJpdG1hcDxibG9ja1NpemUg
LyBhdG9tU2l6ZT4gbV9tYXJrczsKQEAgLTE2NSwxMSArMTgxLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIG1faW5OZXdTcGFjZSA9IGluTmV3U3BhY2U7CiAgICAgfQogCi0gICAgaW5saW5l
IHZvaWQgTWFya2VkQmxvY2s6OnJlc2V0QWxsb2NhdG9yKCkKLSAgICB7Ci0gICAgICAgIG1fbmV4
dEF0b20gPSBmaXJzdEF0b20oKTsKLSAgICB9Ci0KICAgICBpbmxpbmUgYm9vbCBNYXJrZWRCbG9j
azo6aXNFbXB0eSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9tYXJrcy5pc0VtcHR5KCk7CkBA
IC0yMzUsMjIgKzI0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgZnVuY3Rvcihy
ZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KCZhdG9tcygpW2ldKSk7CiAgICAgICAgIH0KICAgICB9
Ci0KLSAgICBpbmxpbmUgdm9pZCogTWFya2VkQmxvY2s6OmFsbG9jYXRlKCkKLSAgICB7Ci0gICAg
ICAgIHdoaWxlIChtX25leHRBdG9tIDwgbV9lbmRBdG9tKSB7Ci0gICAgICAgICAgICBpZiAoIW1f
bWFya3MudGVzdEFuZFNldChtX25leHRBdG9tKSkgewotICAgICAgICAgICAgICAgIEpTQ2VsbCog
Y2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmF0b21zKClbbV9uZXh0QXRvbV0pOwot
ICAgICAgICAgICAgICAgIG1fbmV4dEF0b20gKz0gbV9hdG9tc1BlckNlbGw7Ci0gICAgICAgICAg
ICAgICAgZGVzdHJ1Y3RvcihjZWxsKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY2VsbDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fbmV4dEF0b20gKz0gbV9hdG9tc1BlckNlbGw7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KKyAgICAKICAgICBpbmxpbmUg
c2l6ZV90IE1hcmtlZEJsb2NrOjpvd25lclNldE51bWJlcihjb25zdCBKU0NlbGwqIGNlbGwpCiAg
ICAgewogICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oY2VsbCkgLSByZWlu
dGVycHJldF9jYXN0PEJpdHM+KHRoaXMpKSAqIG93bmVyU2V0c1BlckJsb2NrIC8gYmxvY2tTaXpl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja1NldC5oCShy
ZXZpc2lvbiA5MTAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIk1hcmtl
ZEJsb2NrLmgiCiAjaW5jbHVkZSAiVGlueUJsb29tRmlsdGVyLmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL05ld1NwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9OZXdTcGFjZS5jcHAJKHJldmlzaW9uIDkxMDMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTmV3U3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCwxMCBAQCB2
b2lkIE5ld1NwYWNlOjphZGRCbG9jayhTaXplQ2xhc3MmIHNpemVDCiAgICAgYmxvY2stPnNldElu
TmV3U3BhY2UodHJ1ZSk7CiAgICAgc2l6ZUNsYXNzLm5leHRCbG9jayA9IGJsb2NrOwogICAgIHNp
emVDbGFzcy5ibG9ja0xpc3QuYXBwZW5kKGJsb2NrKTsKKyAgICBBU1NFUlQoIXNpemVDbGFzcy5j
dXJyZW50QmxvY2spOworICAgIEFTU0VSVCghc2l6ZUNsYXNzLmZpcnN0RnJlZUNlbGwpOworICAg
IHNpemVDbGFzcy5jdXJyZW50QmxvY2sgPSBibG9jazsKKyAgICBzaXplQ2xhc3MuZmlyc3RGcmVl
Q2VsbCA9IGJsb2NrLT5ibGVzc05ld0Jsb2NrRm9yRmFzdFBhdGgoKTsKIH0KIAogdm9pZCBOZXdT
cGFjZTo6cmVtb3ZlQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpAQCAtNjksNCArNzMsMTMgQEAg
dm9pZCBOZXdTcGFjZTo6cmVzZXRBbGxvY2F0b3IoKQogICAgICAgICBzaXplQ2xhc3NGb3IoY2Vs
bFNpemUpLnJlc2V0QWxsb2NhdG9yKCk7CiB9CiAKK3ZvaWQgTmV3U3BhY2U6OmNhbm9uaWNhbGl6
ZUJsb2NrcygpCit7CisgICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBwcmVjaXNlU3RlcDsgY2Vs
bFNpemUgPCBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkKKyAgICAgICAg
c2l6ZUNsYXNzRm9yKGNlbGxTaXplKS5jYW5vbmljYWxpemVCbG9jaygpOworCisgICAgZm9yIChz
aXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8IGltcHJlY2lzZUN1dG9m
ZjsgY2VsbFNpemUgKz0gaW1wcmVjaXNlU3RlcCkKKyAgICAgICAgc2l6ZUNsYXNzRm9yKGNlbGxT
aXplKS5jYW5vbmljYWxpemVCbG9jaygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL05ld1NwYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTmV3U3BhY2UuaAkocmV2aXNpb24gOTEwMzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9OZXdTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw3ICs1MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RydWN0IFNpemVDbGFzcyB7
CiAgICAgICAgICAgICBTaXplQ2xhc3MoKTsKICAgICAgICAgICAgIHZvaWQgcmVzZXRBbGxvY2F0
b3IoKTsKKyAgICAgICAgICAgIHZvaWQgY2Fub25pY2FsaXplQmxvY2soKTsKIAorICAgICAgICAg
ICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBmaXJzdEZyZWVDZWxsOworICAgICAgICAgICAgTWFy
a2VkQmxvY2sqIGN1cnJlbnRCbG9jazsKICAgICAgICAgICAgIE1hcmtlZEJsb2NrKiBuZXh0Qmxv
Y2s7CiAgICAgICAgICAgICBEb3VibHlMaW5rZWRMaXN0PE1hcmtlZEJsb2NrPiBibG9ja0xpc3Q7
CiAgICAgICAgICAgICBzaXplX3QgY2VsbFNpemU7CkBAIC02NCw2ICs2Nyw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHZvaWQgYWRkQmxvY2soU2l6ZUNsYXNzJiwgTWFya2VkQmxvY2sq
KTsKICAgICAgICAgdm9pZCByZW1vdmVCbG9jayhNYXJrZWRCbG9jayopOworICAgICAgICAKKyAg
ICAgICAgdm9pZCBjYW5vbmljYWxpemVCbG9ja3MoKTsKIAogICAgICAgICBzaXplX3Qgd2F0ZXJN
YXJrKCk7CiAgICAgICAgIHNpemVfdCBoaWdoV2F0ZXJNYXJrKCk7CkBAIC0xMTUsMTQgKzEyMCw0
MyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSB2b2lkKiBOZXdTcGFjZTo6YWxsb2Nh
dGUoU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCiAgICAgewotICAgICAgICBmb3IgKE1hcmtlZEJsb2Nr
KiYgYmxvY2sgPSBzaXplQ2xhc3MubmV4dEJsb2NrIDsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5l
eHQoKSkgewotICAgICAgICAgICAgaWYgKHZvaWQqIHJlc3VsdCA9IGJsb2NrLT5hbGxvY2F0ZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgICAgIG1fd2F0ZXJN
YXJrICs9IGJsb2NrLT5jYXBhY2l0eSgpOworICAgICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwq
IGZpcnN0RnJlZUNlbGwgPSBzaXplQ2xhc3MuZmlyc3RGcmVlQ2VsbDsKKyAgICAgICAgaWYgKCFm
aXJzdEZyZWVDZWxsKSB7CisgICAgICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHBvc3NpYmlsaXRp
ZXMgZm9yIHdoeSB3ZSBnb3QgaGVyZToKKyAgICAgICAgICAgIC8vIDEpIFdlJ3ZlIGV4aGF1c3Rl
ZCB0aGUgYWxsb2NhdGlvbiBjYWNoZSBmb3IgY3VycmVudEJsb2NrLCBpbiB3aGljaCBjYXNlCisg
ICAgICAgICAgICAvLyAgICBjdXJyZW50QmxvY2sgPT0gbmV4dEJsb2NrLCBhbmQgd2Uga25vdyB0
aGF0IHRoZXJlIGlzIG5vIHJlYXNvbiB0bworICAgICAgICAgICAgLy8gICAgcmVwZWF0IGEgbGF6
eSBzd2VlcCBvZiBuZXh0QmxvY2sgYmVjYXVzZSB3ZSB3b24ndCBmaW5kIGFueXRoaW5nLgorICAg
ICAgICAgICAgLy8gMikgQWxsb2NhdGlvbiBjYWNoZXMgaGF2ZSBiZWVuIGNsZWFyZWQsIGluIHdo
aWNoIGNhc2UgbmV4dEJsb2NrIG1heQorICAgICAgICAgICAgLy8gICAgaGF2ZSAoYW5kIG1vc3Qg
bGlrZWx5IGRvZXMgaGF2ZSkgZnJlZSBjZWxscywgc28gd2UgYWxtb3N0IGNlcnRhaW5seQorICAg
ICAgICAgICAgLy8gICAgc2hvdWxkIGRvIGEgbGF6eVN3ZWVwIGZvciBuZXh0QmxvY2suIFRoaXMg
YWxzbyBpbXBsaWVzIHRoYXQKKyAgICAgICAgICAgIC8vICAgIGN1cnJlbnRCbG9jayA9PSAwLgor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc2l6ZUNsYXNzLmN1cnJlbnRCbG9jaykgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChzaXplQ2xhc3MuY3VycmVudEJsb2NrID09IHNpemVDbGFz
cy5uZXh0QmxvY2spOworICAgICAgICAgICAgICAgIG1fd2F0ZXJNYXJrICs9IHNpemVDbGFzcy5u
ZXh0QmxvY2stPmNhcGFjaXR5KCk7CisgICAgICAgICAgICAgICAgc2l6ZUNsYXNzLm5leHRCbG9j
ayA9IHNpemVDbGFzcy5uZXh0QmxvY2stPm5leHQoKTsKKyAgICAgICAgICAgICAgICBzaXplQ2xh
c3MuY3VycmVudEJsb2NrID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZm9yIChNYXJrZWRCbG9jayomIGJsb2NrID0gc2l6ZUNsYXNzLm5leHRCbG9jayA7IGJs
b2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBmaXJzdEZyZWVD
ZWxsID0gYmxvY2stPmxhenlTd2VlcCgpOworICAgICAgICAgICAgICAgIGlmIChmaXJzdEZyZWVD
ZWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHNpemVDbGFzcy5maXJzdEZyZWVDZWxsID0gZmly
c3RGcmVlQ2VsbDsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZUNsYXNzLmN1cnJlbnRCbG9jayA9
IGJsb2NrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV93YXRlck1hcmsgKz0gYmxvY2stPmNh
cGFjaXR5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgh
Zmlyc3RGcmVlQ2VsbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGZpcnN0RnJlZUNlbGwp
OworICAgICAgICAKKyAgICAgICAgc2l6ZUNsYXNzLmZpcnN0RnJlZUNlbGwgPSBmaXJzdEZyZWVD
ZWxsLT5uZXh0OworICAgICAgICByZXR1cm4gZmlyc3RGcmVlQ2VsbDsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVy
blR5cGUgTmV3U3BhY2U6OmZvckVhY2hCbG9jayhGdW5jdG9yJiBmdW5jdG9yKQpAQCAtMTU1LDcg
KzE4OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KIAogICAgIGlubGluZSBOZXdTcGFjZTo6
U2l6ZUNsYXNzOjpTaXplQ2xhc3MoKQotICAgICAgICA6IG5leHRCbG9jaygwKQorICAgICAgICA6
IGZpcnN0RnJlZUNlbGwoMCkKKyAgICAgICAgLCBjdXJyZW50QmxvY2soMCkKKyAgICAgICAgLCBu
ZXh0QmxvY2soMCkKICAgICAgICAgLCBjZWxsU2l6ZSgwKQogICAgIHsKICAgICB9CkBAIC0xNjQs
NiArMjAwLDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAgICAgbmV4dEJsb2NrID0g
YmxvY2tMaXN0LmhlYWQoKTsKICAgICB9CisgICAgCisgICAgaW5saW5lIHZvaWQgTmV3U3BhY2U6
OlNpemVDbGFzczo6Y2Fub25pY2FsaXplQmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKGN1cnJl
bnRCbG9jaykgeworICAgICAgICAgICAgY3VycmVudEJsb2NrLT5jYW5vbmljYWxpemVCbG9jayhm
aXJzdEZyZWVDZWxsKTsKKyAgICAgICAgICAgIGZpcnN0RnJlZUNlbGwgPSAwOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIWZpcnN0RnJlZUNlbGwpOworICAgICAgICAKKyAg
ICAgICAgY3VycmVudEJsb2NrID0gMDsKKyAgICAgICAgZmlyc3RGcmVlQ2VsbCA9IDA7CisgICAg
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvT2xkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L09sZFNwYWNlLmNwcAkocmV2aXNpb24gOTEwMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9PbGRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAgT2xkU3Bh
Y2U6Ok9sZFNwYWNlKEhlYXAqIGhlYXApCiB2b2lkIE9sZFNwYWNlOjphZGRCbG9jayhNYXJrZWRC
bG9jayogYmxvY2spCiB7CiAgICAgbV9ibG9ja3MuYXBwZW5kKGJsb2NrKTsKKyAgICBibG9jay0+
Ymxlc3NOZXdCbG9ja0ZvclNsb3dQYXRoKCk7CiB9CiAKIHZvaWQgT2xkU3BhY2U6OnJlbW92ZUJs
b2NrKE1hcmtlZEJsb2NrKiBibG9jaykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100880</attachid>
            <date>2011-07-14 15:51:04 -0700</date>
            <delta_ts>2011-07-14 18:40:38 -0700</delta_ts>
            <desc>the patch (fix windows)</desc>
            <filename>fastalloc_patch_7.diff</filename>
            <type>text/plain</type>
            <size>20310</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTEwMzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTMgQEAK
KzIwMTEtMDctMTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBH
QyBhbGxvY2F0aW9uIGZhc3QgcGF0aCBoYXMgdG9vIG1hbnkgb3BlcmF0aW9ucy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDkzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBDaGFuZ2VkIHRo
ZSB0aW1pbmcgb2YgdGhlIGxhenkgc3dlZXAgc28gdGhhdCBpdCBvY2N1cnMgd2hlbiB3ZSBsYW5k
IG9uCisgICAgICAgIGEgcHJldmlvdXNseS11bnN3ZWVwZWQgYmxvY2ssIHJhdGhlciB0aGFuIHdo
ZW5ldmVyIHdlIGxhbmQgb24gYW4gdW5zd2VlcGVkCisgICAgICAgIGNlbGwuICBBZnRlciB0aGUg
cGVyLWJsb2NrIGxhenkgc3dlZXAgb2NjdXJzLCB0aGUgYmxvY2sgaXMgdHVybmVkIGludG8gYQor
ICAgICAgICBzaW5nbHkgbGlua2VkIGxpc3Qgb2YgZnJlZSBjZWxscy4gIFRoZSBhbGxvY2F0aW9u
IGZhc3QgcGF0aCBpcyBub3cganVzdCBhCisgICAgICAgIGxvYWQtYnJhbmNoLXN0b3JlIHRvIHJl
bW92ZSBhIGNlbGwgZnJvbSB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KKyAgICAgICAgCisgICAgICAg
IEFkZGl0aW9uYWxseSwgdGhpcyBjaGFuZ2VzIHRoZSB3YXkgbmV3IGJsb2NrcyBhcmUgYWxsb2Nh
dGVkLiAgUHJldmlvdXNseSwKKyAgICAgICAgdGhleSB3b3VsZCBiZSBwb3B1bGF0ZWQgd2l0aCBk
dW1teSBjZWxscy4gIFdpdGggdGhpcyBwYXRjaCwgdGhleSBhcmUKKyAgICAgICAgdHVybmVkIGlu
dG8gYSBmcmVlIGxpc3QsIHdoaWNoIG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBuZXZlciBiZSBkZXN0
cnVjdG9yCisgICAgICAgIGNhbGxzIGZvciBhbGxvY2F0aW9ucyBpbiBmcmVzaCBibG9ja3MuCisg
ICAgICAgIAorICAgICAgICBUaGVzZSBjaGFuZ2VzIHJlc3VsdCBpbiBhIDEuOSUgc3BlZWQtdXAg
b24gVjgsIGFuZCBhIDAuNiUgc3BlZWQtdXAgb24KKyAgICAgICAgU3VuU3BpZGVyLiAgVGhlcmUg
YXJlIG5vIG9ic2VydmVkIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgc2xvdy1kb3ducworICAg
ICAgICBvbiBhbnkgaW5kaXZpZHVhbCBiZW5jaG1hcmsuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS5leHA6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjYW5vbmljYWxpemVCbG9ja3MpOgorICAgICAgICAoSlNDOjpIZWFwOjpy
ZXNldEFsbG9jYXRvcik6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6Okhl
YXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxsKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaENl
bGwpOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoQmxvY2spOgorICAgICAgICAoSlNDOjpI
ZWFwOjphbGxvY2F0ZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJs
b2NrOjpsYXp5U3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Ymxlc3NOZXdCbG9j
a0ZvckZhc3RQYXRoKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmJsZXNzTmV3QmxvY2tG
b3JTbG93UGF0aCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjYW5vbmljYWxpemVCbG9j
ayk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAqIGhlYXAvTmV3U3Bh
Y2UuY3BwOgorICAgICAgICAoSlNDOjpOZXdTcGFjZTo6YWRkQmxvY2spOgorICAgICAgICAoSlND
OjpOZXdTcGFjZTo6Y2Fub25pY2FsaXplQmxvY2tzKToKKyAgICAgICAgKiBoZWFwL05ld1NwYWNl
Lmg6CisgICAgICAgIChKU0M6Ok5ld1NwYWNlOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok5l
d1NwYWNlOjpTaXplQ2xhc3M6OlNpemVDbGFzcyk6CisgICAgICAgIChKU0M6Ok5ld1NwYWNlOjpT
aXplQ2xhc3M6OmNhbm9uaWNhbGl6ZUJsb2NrKToKKyAgICAgICAgKiBoZWFwL09sZFNwYWNlLmNw
cDoKKyAgICAgICAgKEpTQzo6T2xkU3BhY2U6OmFkZEJsb2NrKToKKwogMjAxMS0wNy0xNCAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzcGVjdWxhdGl2ZSBK
SVQgY29udGFpbnMgYSBGSVhNRSBmb3IgcmV3aW5kaW5nIHNwZWN1bGF0aXZlIGNvZGUgZ2VuZXJh
dGlvbiB0aGF0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJ
KHJldmlzaW9uIDkxMDMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDYgKzIyNCw3IEBAIF9fWk4zSlNDMzVjcmVhdGVJ
bnRlcnJ1cHRlZEV4ZWN1dGlvbkV4Y2UKIF9fWk4zSlNDNDFjb25zdHJ1Y3RGdW5jdGlvblNraXBw
aW5nRXZhbEVuYWJsZWRDaGVja0VQTlNfOUV4ZWNTdGF0ZUVQTlNfMTRKU0dsb2JhbE9iamVjdEVS
S05TXzdBcmdMaXN0RVJLTlNfMTBJZGVudGlmaWVyRVJLTlNfN1VTdHJpbmdFaQogX19aTjNKU0M0
SGVhcDExb2JqZWN0Q291bnRFdgogX19aTjNKU0M0SGVhcDE2YWN0aXZpdHlDYWxsYmFja0V2Citf
X1pOM0pTQzRIZWFwMTZhbGxvY2F0ZVNsb3dDYXNlRVJOU184TmV3U3BhY2U5U2l6ZUNsYXNzRQog
X19aTjNKU0M0SGVhcDE2b2JqZWN0VHlwZUNvdW50c0V2CiBfX1pOM0pTQzRIZWFwMTdjb2xsZWN0
QWxsR2FyYmFnZUV2CiBfX1pOM0pTQzRIZWFwMTdnbG9iYWxPYmplY3RDb3VudEV2CkBAIC0yMzcs
NyArMjM4LDYgQEAgX19aTjNKU0M0SGVhcDI5cmVwb3J0RXh0cmFNZW1vcnlDb3N0U2xvdwogX19a
TjNKU0M0SGVhcDRzaXplRXYKIF9fWk4zSlNDNEhlYXA3ZGVzdHJveUV2CiBfX1pOM0pTQzRIZWFw
N3Byb3RlY3RFTlNfN0pTVmFsdWVFCi1fX1pOM0pTQzRIZWFwOGFsbG9jYXRlRVJOU184TmV3U3Bh
Y2U5U2l6ZUNsYXNzRQogX19aTjNKU0M0SGVhcDhjYXBhY2l0eUV2CiBfX1pOM0pTQzRIZWFwOXVu
cHJvdGVjdEVOU183SlNWYWx1ZUUKIF9fWk4zSlNDNFlhcnIxMVlhcnJQYXR0ZXJuQzFFUktOU183
VVN0cmluZ0ViYlBQS2MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZGVmCShyZXZpc2lvbiA5MTAzMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC01Niw4ICs1Niw4IEBAIEVYUE9SVFMKICAgICA/YWRk
U2xvd0Nhc2VASWRlbnRpZmllckBKU0NAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdU
RkBAQFdURkBAUEFWRXhlY1N0YXRlQDJAUEFWU3RyaW5nSW1wbEA0QEBaCiAgICAgP2FkZFN0YXRp
Y0dsb2JhbHNASlNHbG9iYWxPYmplY3RASlNDQEBJQUVYUEFVR2xvYmFsUHJvcGVydHlJbmZvQDEy
QEhAWgogICAgID9hbGxvY2F0ZUBIZWFwQEpTQ0BAUUFFUEFYQUFVU2l6ZUNsYXNzQE5ld1NwYWNl
QDJAQFoKLSAgICA/YWxsb2NhdGVASGVhcEBKU0NAQFFBRVBBWElAWgogICAgID9hbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZUBKU09iamVjdEBKU0NAQFFBRVhJSUBaCisgICAgP2FsbG9jYXRlU2xvd0Nh
c2VASGVhcEBKU0NAQEFBRVBBWEFBVVNpemVDbGFzc0BOZXdTcGFjZUAyQEBaCiAgICAgP2FwcGVu
ZEBTdHJpbmdCdWlsZGVyQFdURkBAUUFFWFBCRElAWgogICAgID9hcHBlbmRAU3RyaW5nQnVpbGRl
ckBXVEZAQFFBRVhQQl9XSUBaCiAgICAgP2FzY2lpQFVTdHJpbmdASlNDQEBRQkU/QVZDU3RyaW5n
QFdURkBAWFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiA5
MTAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDIsMTUgKzEwMiw2IEBAIGlubGluZSB2b2lkIENsZWFyTWFya3M6Om9wZXJhdG9y
KCkoTWFya2UKICAgICBibG9jay0+Y2xlYXJNYXJrcygpOwogfQogCi1zdHJ1Y3QgUmVzZXRBbGxv
Y2F0b3IgOiBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotICAgIHZvaWQgb3BlcmF0b3IoKShN
YXJrZWRCbG9jayopOwotfTsKLQotaW5saW5lIHZvaWQgUmVzZXRBbGxvY2F0b3I6Om9wZXJhdG9y
KCkoTWFya2VkQmxvY2sqIGJsb2NrKQotewotICAgIGJsb2NrLT5yZXNldEFsbG9jYXRvcigpOwot
fQotCiBzdHJ1Y3QgU3dlZXAgOiBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewogICAgIHZvaWQg
b3BlcmF0b3IoKShNYXJrZWRCbG9jayopOwogfTsKQEAgLTMyMCw3ICszMTEsNyBAQCBpbmxpbmUg
dm9pZCogSGVhcDo6dHJ5QWxsb2NhdGUoTmV3U3BhY2U6CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdm9pZCogSGVhcDo6YWxsb2NhdGUoTmV3U3BhY2U6OlNpemVDbGFzcyYgc2l6ZUNsYXNzKQor
dm9pZCogSGVhcDo6YWxsb2NhdGVTbG93Q2FzZShOZXdTcGFjZTo6U2l6ZUNsYXNzJiBzaXplQ2xh
c3MpCiB7CiAjaWYgQ09MTEVDVF9PTl9FVkVSWV9BTExPQ0FUSU9OCiAgICAgY29sbGVjdEFsbEdh
cmJhZ2UoKTsKQEAgLTU1OCw3ICs1NDksOSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dn
bGUgc3dlZXBUb2dnCiAgICAgQVNTRVJUKGdsb2JhbERhdGEoKS0+aWRlbnRpZmllclRhYmxlID09
IHd0ZlRocmVhZERhdGEoKS5jdXJyZW50SWRlbnRpZmllclRhYmxlKCkpOwogICAgIEFTU0VSVCht
X2lzU2FmZVRvQ29sbGVjdCk7CiAgICAgSkFWQVNDUklQVENPUkVfR0NfQkVHSU4oKTsKLQorICAg
IAorICAgIGNhbm9uaWNhbGl6ZUJsb2NrcygpOworICAgIAogICAgIG1hcmtSb290cygpOwogICAg
IG1faGFuZGxlSGVhcC5maW5hbGl6ZVdlYWtIYW5kbGVzKCk7CiAgICAgbV9nbG9iYWxEYXRhLT5z
bWFsbFN0cmluZ3MuZmluYWxpemVTbWFsbFN0cmluZ3MoKTsKQEAgLTU4OCwxMSArNTgxLDE1IEBA
IHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICAoKm1fYWN0aXZp
dHlDYWxsYmFjaykoKTsKIH0KIAordm9pZCBIZWFwOjpjYW5vbmljYWxpemVCbG9ja3MoKQorewor
ICAgIG1fbmV3U3BhY2UuY2Fub25pY2FsaXplQmxvY2tzKCk7Cit9CisKIHZvaWQgSGVhcDo6cmVz
ZXRBbGxvY2F0b3IoKQogewogICAgIG1fZXh0cmFDb3N0ID0gMDsKICAgICBtX25ld1NwYWNlLnJl
c2V0QWxsb2NhdG9yKCk7Ci0gICAgZm9yRWFjaEJsb2NrPFJlc2V0QWxsb2NhdG9yPigpOwogfQog
CiB2b2lkIEhlYXA6OnNldEFjdGl2aXR5Q2FsbGJhY2soUGFzc093blB0cjxHQ0FjdGl2aXR5Q2Fs
bGJhY2s+IGFjdGl2aXR5Q2FsbGJhY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CShyZXZpc2lvbiA5MTAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMjQsOSArMjQsMTAgQEAKIAogI2luY2x1ZGUgIkhhbmRsZUhlYXAu
aCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisj
aW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgogI2lu
Y2x1ZGUgIk5ld1NwYWNlLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CkBAIC0xMjQsOCArMTI1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4RXh0cmFDb3N0ID0gMTAyNCAqIDEwMjQ7CiAKICAg
ICAgICAgYm9vbCBpc1ZhbGlkQWxsb2NhdGlvbihzaXplX3QpOwotICAgICAgICB2b2lkKiBhbGxv
Y2F0ZVNsb3dDYXNlKHNpemVfdCk7CiAgICAgICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlDb3N0
U2xvd0Nhc2Uoc2l6ZV90KTsKKyAgICAgICAgdm9pZCBjYW5vbmljYWxpemVCbG9ja3MoKTsKICAg
ICAgICAgdm9pZCByZXNldEFsbG9jYXRvcigpOwogCiAgICAgICAgIE1hcmtlZEJsb2NrKiBhbGxv
Y2F0ZUJsb2NrKHNpemVfdCBjZWxsU2l6ZSk7CkBAIC0xMzcsNiArMTM4LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgbWFya1RlbXBTb3J0VmVjdG9ycyhIZWFwUm9vdFZpc2l0b3Im
KTsKIAogICAgICAgICB2b2lkKiB0cnlBbGxvY2F0ZShOZXdTcGFjZTo6U2l6ZUNsYXNzJik7Cisg
ICAgICAgIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoTmV3U3BhY2U6OlNpemVDbGFzcyYpOwogICAg
ICAgICAKICAgICAgICAgZW51bSBTd2VlcFRvZ2dsZSB7IERvTm90U3dlZXAsIERvU3dlZXAgfTsK
ICAgICAgICAgdm9pZCBjb2xsZWN0KFN3ZWVwVG9nZ2xlKTsKQEAgLTI0Miw2ICsyNDQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB0
eXBlbmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIEhlYXA6OmZvckVhY2hQcm90ZWN0ZWRDZWxsKEZ1
bmN0b3ImIGZ1bmN0b3IpCiAgICAgeworICAgICAgICBjYW5vbmljYWxpemVCbG9ja3MoKTsKICAg
ICAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVlcy5l
bmQoKTsKICAgICAgICAgZm9yIChQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9wcm90
ZWN0ZWRWYWx1ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgZnVuY3Rv
cihpdC0+Zmlyc3QpOwpAQCAtMjU4LDYgKzI2MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVy
blR5cGUgSGVhcDo6Zm9yRWFjaENlbGwoRnVuY3RvciYgZnVuY3RvcikKICAgICB7CisgICAgICAg
IGNhbm9uaWNhbGl6ZUJsb2NrcygpOwogICAgICAgICBCbG9ja0l0ZXJhdG9yIGVuZCA9IG1fYmxv
Y2tzLnNldCgpLmVuZCgpOwogICAgICAgICBmb3IgKEJsb2NrSXRlcmF0b3IgaXQgPSBtX2Jsb2Nr
cy5zZXQoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICAoKml0KS0+Zm9y
RWFjaENlbGwoZnVuY3Rvcik7CkBAIC0yNzIsNiArMjc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hbWUgRnVuY3Rvcjo6
UmV0dXJuVHlwZSBIZWFwOjpmb3JFYWNoQmxvY2soRnVuY3RvciYgZnVuY3RvcikKICAgICB7Cisg
ICAgICAgIGNhbm9uaWNhbGl6ZUJsb2NrcygpOwogICAgICAgICBCbG9ja0l0ZXJhdG9yIGVuZCA9
IG1fYmxvY2tzLnNldCgpLmVuZCgpOwogICAgICAgICBmb3IgKEJsb2NrSXRlcmF0b3IgaXQgPSBt
X2Jsb2Nrcy5zZXQoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICBmdW5j
dG9yKCppdCk7CkBAIC0yODMsNiArMjg4LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBG
dW5jdG9yIGZ1bmN0b3I7CiAgICAgICAgIHJldHVybiBmb3JFYWNoQmxvY2soZnVuY3Rvcik7CiAg
ICAgfQorICAgIAorICAgIGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZShOZXdTcGFjZTo6U2l6
ZUNsYXNzJiBzaXplQ2xhc3MpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGEgbGlnaHQtd2Vp
Z2h0IGZhc3QgcGF0aCB0byBjb3ZlciB0aGUgbW9zdCBjb21tb24gY2FzZS4KKyAgICAgICAgTWFy
a2VkQmxvY2s6OkZyZWVDZWxsKiBmaXJzdEZyZWVDZWxsID0gc2l6ZUNsYXNzLmZpcnN0RnJlZUNl
bGw7CisgICAgICAgIGlmIChVTkxJS0VMWSghZmlyc3RGcmVlQ2VsbCkpCisgICAgICAgICAgICBy
ZXR1cm4gYWxsb2NhdGVTbG93Q2FzZShzaXplQ2xhc3MpOworICAgICAgICAKKyAgICAgICAgc2l6
ZUNsYXNzLmZpcnN0RnJlZUNlbGwgPSBmaXJzdEZyZWVDZWxsLT5uZXh0OworICAgICAgICByZXR1
cm4gZmlyc3RGcmVlQ2VsbDsKKyAgICB9CiAKICAgICBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2Nh
dGUoc2l6ZV90IGJ5dGVzKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDkxMDMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNyArNDksMTIg
QEAgdm9pZCBNYXJrZWRCbG9jazo6ZGVzdHJveShNYXJrZWRCbG9jayogYgogfQogCiBNYXJrZWRC
bG9jazo6TWFya2VkQmxvY2soY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJiBhbGxvY2F0aW9u
LCBIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUpCi0gICAgOiBtX25leHRBdG9tKGZpcnN0QXRv
bSgpKQotICAgICwgbV9pbk5ld1NwYWNlKGZhbHNlKQorICAgIDogbV9pbk5ld1NwYWNlKGZhbHNl
KQogICAgICwgbV9hbGxvY2F0aW9uKGFsbG9jYXRpb24pCiAgICAgLCBtX2hlYXAoaGVhcCkKIHsK
ICAgICBtX2F0b21zUGVyQ2VsbCA9IChjZWxsU2l6ZSArIGF0b21TaXplIC0gMSkgLyBhdG9tU2l6
ZTsKICAgICBtX2VuZEF0b20gPSBhdG9tc1BlckJsb2NrIC0gbV9hdG9tc1BlckNlbGwgKyAxOwot
Ci0gICAgU3RydWN0dXJlKiBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSA9IGhlYXAtPmdsb2Jh
bERhdGEoKS0+ZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKQot
ICAgICAgICBuZXcgKCZhdG9tcygpW2ldKSBKU0NlbGwoKmhlYXAtPmdsb2JhbERhdGEoKSwgZHVt
bXlNYXJrYWJsZUNlbGxTdHJ1Y3R1cmUsIEpTQ2VsbDo6Q3JlYXRpbmdFYXJseUNlbGwpOwogfQog
CiB2b2lkIE1hcmtlZEJsb2NrOjpzd2VlcCgpCkBAIC04NSw2ICs4MCw2NCBAQCB2b2lkIE1hcmtl
ZEJsb2NrOjpzd2VlcCgpCiAgICAgfQogfQogCitNYXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtl
ZEJsb2NrOjpsYXp5U3dlZXAoKQoreworICAgIC8vIFRoaXMgcmV0dXJucyBhIGZyZWUgbGlzdCB0
aGF0IGlzIG9yZGVyZWQgaW4gcmV2ZXJzZSB0aHJvdWdoIHRoZSBibG9jay4KKyAgICAvLyBUaGlz
IGlzIGZpbmUsIHNpbmNlIHRoZSBhbGxvY2F0aW9uIGNvZGUgbWFrZXMgbm8gYXNzdW1wdGlvbnMg
YWJvdXQgdGhlCisgICAgLy8gb3JkZXIgb2YgdGhlIGZyZWUgbGlzdC4KKyAgICAKKyAgICBGcmVl
Q2VsbCogcmVzdWx0ID0gMDsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7
IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKKyAgICAgICAgaWYgKCFtX21h
cmtzLnRlc3RBbmRTZXQoaSkpIHsKKyAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8SlNDZWxsKj4oJmF0b21zKClbaV0pOworICAgICAgICAgICAgY2VsbC0+fkpTQ2Vs
bCgpOworICAgICAgICAgICAgRnJlZUNlbGwqIGZyZWVDZWxsID0gcmVpbnRlcnByZXRfY2FzdDxG
cmVlQ2VsbCo+KGNlbGwpOworICAgICAgICAgICAgZnJlZUNlbGwtPm5leHQgPSByZXN1bHQ7Cisg
ICAgICAgICAgICByZXN1bHQgPSBmcmVlQ2VsbDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitNYXJrZWRCbG9jazo6RnJlZUNlbGwqIE1hcmtlZEJsb2Nr
OjpibGVzc05ld0Jsb2NrRm9yRmFzdFBhdGgoKQoreworICAgIC8vIFRoaXMgcmV0dXJucyBhIGZy
ZWUgbGlzdCB0aGF0IGlzIG9yZGVyZWQgaW4gcmV2ZXJzZSB0aHJvdWdoIHRoZSBibG9jaywKKyAg
ICAvLyBhcyBpbiBsYXp5U3dlZXAoKSBhYm92ZS4KKyAgICAKKyAgICBGcmVlQ2VsbCogcmVzdWx0
ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkg
Kz0gbV9hdG9tc1BlckNlbGwpIHsKKyAgICAgICAgbV9tYXJrcy5zZXQoaSk7CisgICAgICAgIEZy
ZWVDZWxsKiBmcmVlQ2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnJlZUNlbGwqPigmYXRvbXMoKVtp
XSk7CisgICAgICAgIGZyZWVDZWxsLT5uZXh0ID0gcmVzdWx0OworICAgICAgICByZXN1bHQgPSBm
cmVlQ2VsbDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBNYXJrZWRCbG9j
azo6Ymxlc3NOZXdCbG9ja0ZvclNsb3dQYXRoKCkKK3sKKyAgICBTdHJ1Y3R1cmUqIGR1bW15TWFy
a2FibGVDZWxsU3RydWN0dXJlID0gbV9oZWFwLT5nbG9iYWxEYXRhKCktPmR1bW15TWFya2FibGVD
ZWxsU3RydWN0dXJlLmdldCgpOworICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8
IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkKKyAgICAgICAgbmV3ICgmYXRvbXMoKVtp
XSkgSlNDZWxsKCptX2hlYXAtPmdsb2JhbERhdGEoKSwgZHVtbXlNYXJrYWJsZUNlbGxTdHJ1Y3R1
cmUsIEpTQ2VsbDo6Q3JlYXRpbmdFYXJseUNlbGwpOworfQorCit2b2lkIE1hcmtlZEJsb2NrOjpj
YW5vbmljYWxpemVCbG9jayhGcmVlQ2VsbCogZmlyc3RGcmVlQ2VsbCkKK3sKKyAgICBTdHJ1Y3R1
cmUqIGR1bW15TWFya2FibGVDZWxsU3RydWN0dXJlID0gbV9oZWFwLT5nbG9iYWxEYXRhKCktPmR1
bW15TWFya2FibGVDZWxsU3RydWN0dXJlLmdldCgpOworICAgIAorICAgIGZvciAoRnJlZUNlbGwq
IGN1cnJlbnQgPSBmaXJzdEZyZWVDZWxsOyBjdXJyZW50OykgeworICAgICAgICBGcmVlQ2VsbCog
bmV4dCA9IGN1cnJlbnQtPm5leHQ7CisgICAgICAgIHNpemVfdCBpID0gYXRvbU51bWJlcihjdXJy
ZW50KTsKKyAgICAgICAgCisgICAgICAgIG1fbWFya3MuY2xlYXIoaSk7CisgICAgICAgIG5ldyAo
c3RhdGljX2Nhc3Q8dm9pZCo+KGN1cnJlbnQpKSBKU0NlbGwoKm1faGVhcC0+Z2xvYmFsRGF0YSgp
LCBkdW1teU1hcmthYmxlQ2VsbFN0cnVjdHVyZSwgSlNDZWxsOjpDcmVhdGluZ0Vhcmx5Q2VsbCk7
CisKKyAgICAgICAgY3VycmVudCA9IG5leHQ7CisgICAgfQorfQorCiAjaWYgRU5BQkxFKEpTQ19a
T01CSUVTKQogdm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJNYXJrcygpCiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDkxMDMwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNiArNDgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgYXRvbXNQZXJCbG9jayA9IGJsb2NrU2l6ZSAvIGF0b21TaXplOyAvLyB+MS41JSBvdmVyaGVh
ZAogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG93bmVyU2V0c1BlckJsb2NrID0gODsgLy8g
fjIlIG92ZXJoZWFkLgogCisgICAgICAgIHN0cnVjdCBGcmVlQ2VsbCB7CisgICAgICAgICAgICBG
cmVlQ2VsbCogbmV4dDsKKyAgICAgICAgfTsKKyAgICAgICAgCiAgICAgICAgIHN0cnVjdCBWb2lk
RnVuY3RvciB7CiAgICAgICAgICAgICB0eXBlZGVmIHZvaWQgUmV0dXJuVHlwZTsKICAgICAgICAg
ICAgIHZvaWQgcmV0dXJuVmFsdWUoKSB7IH0KQEAgLTg0LDkgKzg4LDIyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIHNldEluTmV3U3BhY2UoYm9vbCk7CiAKICAgICAgICAgdm9pZCog
YWxsb2NhdGUoKTsKLSAgICAgICAgdm9pZCByZXNldEFsbG9jYXRvcigpOwogICAgICAgICB2b2lk
IHN3ZWVwKCk7CiAgICAgICAgIAorICAgICAgICAvLyBUaGlzIGludm9rZXMgZGVzdHJ1Y3RvcnMg
b24gYWxsIGNlbGxzIHRoYXQgYXJlIG5vdCBtYXJrZWQsIG1hcmtzCisgICAgICAgIC8vIHRoZW0s
IGFuZCByZXR1cm5zIGEgbGlua2VkIGxpc3Qgb2YgdGhvc2UgY2VsbHMuCisgICAgICAgIEZyZWVD
ZWxsKiBsYXp5U3dlZXAoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZXNlIHNob3VsZCBiZSBj
YWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBibG9jayBpcyBjcmVhdGVkLgorICAgICAgICAvLyBC
bGVzc2luZyBmb3IgZmFzdCBwYXRoIGNyZWF0ZXMgYSBsaW5rZWQgbGlzdCwgd2hpbGUgYmxlc3Np
bmcgZm9yCisgICAgICAgIC8vIHNsb3cgcGF0aCBjcmVhdGVzIGR1bW15IGNlbGxzLgorICAgICAg
ICBGcmVlQ2VsbCogYmxlc3NOZXdCbG9ja0ZvckZhc3RQYXRoKCk7CisgICAgICAgIHZvaWQgYmxl
c3NOZXdCbG9ja0ZvclNsb3dQYXRoKCk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIHVubWFy
a3MgYWxsIGNlbGxzIG9uIHRoZSBmcmVlIGxpc3QsIGFuZCBhbGxvY2F0ZXMgZHVtbXkgSlNDZWxs
cworICAgICAgICAvLyBpbiB0aGVpciBwbGFjZS4KKyAgICAgICAgdm9pZCBjYW5vbmljYWxpemVC
bG9jayhGcmVlQ2VsbCogZmlyc3RGcmVlQ2VsbCk7CisgICAgICAgIAogICAgICAgICBib29sIGlz
RW1wdHkoKTsKIAogICAgICAgICB2b2lkIGNsZWFyTWFya3MoKTsKQEAgLTExOCw3ICsxMzUsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc2l6ZV90IGF0b21OdW1iZXIoY29uc3Qgdm9pZCop
OwogICAgICAgICBzaXplX3Qgb3duZXJTZXROdW1iZXIoY29uc3QgSlNDZWxsKik7CiAKLSAgICAg
ICAgc2l6ZV90IG1fbmV4dEF0b207CiAgICAgICAgIHNpemVfdCBtX2VuZEF0b207IC8vIFRoaXMg
aXMgYSBmdXp6eSBlbmQuIEFsd2F5cyB0ZXN0IGZvciA8IG1fZW5kQXRvbS4KICAgICAgICAgc2l6
ZV90IG1fYXRvbXNQZXJDZWxsOwogICAgICAgICBXVEY6OkJpdG1hcDxibG9ja1NpemUgLyBhdG9t
U2l6ZT4gbV9tYXJrczsKQEAgLTE2NSwxMSArMTgxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIG1faW5OZXdTcGFjZSA9IGluTmV3U3BhY2U7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQg
TWFya2VkQmxvY2s6OnJlc2V0QWxsb2NhdG9yKCkKLSAgICB7Ci0gICAgICAgIG1fbmV4dEF0b20g
PSBmaXJzdEF0b20oKTsKLSAgICB9Ci0KICAgICBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNF
bXB0eSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9tYXJrcy5pc0VtcHR5KCk7CkBAIC0yMzUs
MjIgKzI0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgZnVuY3RvcihyZWludGVy
cHJldF9jYXN0PEpTQ2VsbCo+KCZhdG9tcygpW2ldKSk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAg
ICBpbmxpbmUgdm9pZCogTWFya2VkQmxvY2s6OmFsbG9jYXRlKCkKLSAgICB7Ci0gICAgICAgIHdo
aWxlIChtX25leHRBdG9tIDwgbV9lbmRBdG9tKSB7Ci0gICAgICAgICAgICBpZiAoIW1fbWFya3Mu
dGVzdEFuZFNldChtX25leHRBdG9tKSkgewotICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmF0b21zKClbbV9uZXh0QXRvbV0pOwotICAgICAg
ICAgICAgICAgIG1fbmV4dEF0b20gKz0gbV9hdG9tc1BlckNlbGw7Ci0gICAgICAgICAgICAgICAg
ZGVzdHJ1Y3RvcihjZWxsKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY2VsbDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1fbmV4dEF0b20gKz0gbV9hdG9tc1BlckNlbGw7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KKyAgICAKICAgICBpbmxpbmUgc2l6ZV90
IE1hcmtlZEJsb2NrOjpvd25lclNldE51bWJlcihjb25zdCBKU0NlbGwqIGNlbGwpCiAgICAgewog
ICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oY2VsbCkgLSByZWludGVycHJl
dF9jYXN0PEJpdHM+KHRoaXMpKSAqIG93bmVyU2V0c1BlckJsb2NrIC8gYmxvY2tTaXplOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja1NldC5oCShyZXZpc2lv
biA5MTAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIk1hcmtlZEJsb2Nr
LmgiCiAjaW5jbHVkZSAiVGlueUJsb29tRmlsdGVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L05ld1NwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9O
ZXdTcGFjZS5jcHAJKHJldmlzaW9uIDkxMDMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTmV3U3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCwxMCBAQCB2b2lkIE5l
d1NwYWNlOjphZGRCbG9jayhTaXplQ2xhc3MmIHNpemVDCiAgICAgYmxvY2stPnNldEluTmV3U3Bh
Y2UodHJ1ZSk7CiAgICAgc2l6ZUNsYXNzLm5leHRCbG9jayA9IGJsb2NrOwogICAgIHNpemVDbGFz
cy5ibG9ja0xpc3QuYXBwZW5kKGJsb2NrKTsKKyAgICBBU1NFUlQoIXNpemVDbGFzcy5jdXJyZW50
QmxvY2spOworICAgIEFTU0VSVCghc2l6ZUNsYXNzLmZpcnN0RnJlZUNlbGwpOworICAgIHNpemVD
bGFzcy5jdXJyZW50QmxvY2sgPSBibG9jazsKKyAgICBzaXplQ2xhc3MuZmlyc3RGcmVlQ2VsbCA9
IGJsb2NrLT5ibGVzc05ld0Jsb2NrRm9yRmFzdFBhdGgoKTsKIH0KIAogdm9pZCBOZXdTcGFjZTo6
cmVtb3ZlQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpAQCAtNjksNCArNzMsMTMgQEAgdm9pZCBO
ZXdTcGFjZTo6cmVzZXRBbGxvY2F0b3IoKQogICAgICAgICBzaXplQ2xhc3NGb3IoY2VsbFNpemUp
LnJlc2V0QWxsb2NhdG9yKCk7CiB9CiAKK3ZvaWQgTmV3U3BhY2U6OmNhbm9uaWNhbGl6ZUJsb2Nr
cygpCit7CisgICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBwcmVjaXNlU3RlcDsgY2VsbFNpemUg
PCBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkKKyAgICAgICAgc2l6ZUNs
YXNzRm9yKGNlbGxTaXplKS5jYW5vbmljYWxpemVCbG9jaygpOworCisgICAgZm9yIChzaXplX3Qg
Y2VsbFNpemUgPSBpbXByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8IGltcHJlY2lzZUN1dG9mZjsgY2Vs
bFNpemUgKz0gaW1wcmVjaXNlU3RlcCkKKyAgICAgICAgc2l6ZUNsYXNzRm9yKGNlbGxTaXplKS5j
YW5vbmljYWxpemVCbG9jaygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL05ld1NwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTmV3U3BhY2UuaAkocmV2aXNpb24gOTEwMzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9OZXdTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1
MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RydWN0IFNpemVDbGFzcyB7CiAgICAg
ICAgICAgICBTaXplQ2xhc3MoKTsKICAgICAgICAgICAgIHZvaWQgcmVzZXRBbGxvY2F0b3IoKTsK
KyAgICAgICAgICAgIHZvaWQgY2Fub25pY2FsaXplQmxvY2soKTsKIAorICAgICAgICAgICAgTWFy
a2VkQmxvY2s6OkZyZWVDZWxsKiBmaXJzdEZyZWVDZWxsOworICAgICAgICAgICAgTWFya2VkQmxv
Y2sqIGN1cnJlbnRCbG9jazsKICAgICAgICAgICAgIE1hcmtlZEJsb2NrKiBuZXh0QmxvY2s7CiAg
ICAgICAgICAgICBEb3VibHlMaW5rZWRMaXN0PE1hcmtlZEJsb2NrPiBibG9ja0xpc3Q7CiAgICAg
ICAgICAgICBzaXplX3QgY2VsbFNpemU7CkBAIC02NCw2ICs2Nyw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHZvaWQgYWRkQmxvY2soU2l6ZUNsYXNzJiwgTWFya2VkQmxvY2sqKTsKICAg
ICAgICAgdm9pZCByZW1vdmVCbG9jayhNYXJrZWRCbG9jayopOworICAgICAgICAKKyAgICAgICAg
dm9pZCBjYW5vbmljYWxpemVCbG9ja3MoKTsKIAogICAgICAgICBzaXplX3Qgd2F0ZXJNYXJrKCk7
CiAgICAgICAgIHNpemVfdCBoaWdoV2F0ZXJNYXJrKCk7CkBAIC0xMTUsMTQgKzEyMCw0MyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGlubGluZSB2b2lkKiBOZXdTcGFjZTo6YWxsb2NhdGUoU2l6
ZUNsYXNzJiBzaXplQ2xhc3MpCiAgICAgewotICAgICAgICBmb3IgKE1hcmtlZEJsb2NrKiYgYmxv
Y2sgPSBzaXplQ2xhc3MubmV4dEJsb2NrIDsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkg
ewotICAgICAgICAgICAgaWYgKHZvaWQqIHJlc3VsdCA9IGJsb2NrLT5hbGxvY2F0ZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgICAgIG1fd2F0ZXJNYXJrICs9
IGJsb2NrLT5jYXBhY2l0eSgpOworICAgICAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGZpcnN0
RnJlZUNlbGwgPSBzaXplQ2xhc3MuZmlyc3RGcmVlQ2VsbDsKKyAgICAgICAgaWYgKCFmaXJzdEZy
ZWVDZWxsKSB7CisgICAgICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHBvc3NpYmlsaXRpZXMgZm9y
IHdoeSB3ZSBnb3QgaGVyZToKKyAgICAgICAgICAgIC8vIDEpIFdlJ3ZlIGV4aGF1c3RlZCB0aGUg
YWxsb2NhdGlvbiBjYWNoZSBmb3IgY3VycmVudEJsb2NrLCBpbiB3aGljaCBjYXNlCisgICAgICAg
ICAgICAvLyAgICBjdXJyZW50QmxvY2sgPT0gbmV4dEJsb2NrLCBhbmQgd2Uga25vdyB0aGF0IHRo
ZXJlIGlzIG5vIHJlYXNvbiB0bworICAgICAgICAgICAgLy8gICAgcmVwZWF0IGEgbGF6eSBzd2Vl
cCBvZiBuZXh0QmxvY2sgYmVjYXVzZSB3ZSB3b24ndCBmaW5kIGFueXRoaW5nLgorICAgICAgICAg
ICAgLy8gMikgQWxsb2NhdGlvbiBjYWNoZXMgaGF2ZSBiZWVuIGNsZWFyZWQsIGluIHdoaWNoIGNh
c2UgbmV4dEJsb2NrIG1heQorICAgICAgICAgICAgLy8gICAgaGF2ZSAoYW5kIG1vc3QgbGlrZWx5
IGRvZXMgaGF2ZSkgZnJlZSBjZWxscywgc28gd2UgYWxtb3N0IGNlcnRhaW5seQorICAgICAgICAg
ICAgLy8gICAgc2hvdWxkIGRvIGEgbGF6eVN3ZWVwIGZvciBuZXh0QmxvY2suIFRoaXMgYWxzbyBp
bXBsaWVzIHRoYXQKKyAgICAgICAgICAgIC8vICAgIGN1cnJlbnRCbG9jayA9PSAwLgorICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoc2l6ZUNsYXNzLmN1cnJlbnRCbG9jaykgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChzaXplQ2xhc3MuY3VycmVudEJsb2NrID09IHNpemVDbGFzcy5uZXh0
QmxvY2spOworICAgICAgICAgICAgICAgIG1fd2F0ZXJNYXJrICs9IHNpemVDbGFzcy5uZXh0Qmxv
Y2stPmNhcGFjaXR5KCk7CisgICAgICAgICAgICAgICAgc2l6ZUNsYXNzLm5leHRCbG9jayA9IHNp
emVDbGFzcy5uZXh0QmxvY2stPm5leHQoKTsKKyAgICAgICAgICAgICAgICBzaXplQ2xhc3MuY3Vy
cmVudEJsb2NrID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Zm9yIChNYXJrZWRCbG9jayomIGJsb2NrID0gc2l6ZUNsYXNzLm5leHRCbG9jayA7IGJsb2NrOyBi
bG9jayA9IGJsb2NrLT5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBmaXJzdEZyZWVDZWxsID0g
YmxvY2stPmxhenlTd2VlcCgpOworICAgICAgICAgICAgICAgIGlmIChmaXJzdEZyZWVDZWxsKSB7
CisgICAgICAgICAgICAgICAgICAgIHNpemVDbGFzcy5maXJzdEZyZWVDZWxsID0gZmlyc3RGcmVl
Q2VsbDsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZUNsYXNzLmN1cnJlbnRCbG9jayA9IGJsb2Nr
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgbV93YXRlck1hcmsgKz0gYmxvY2stPmNhcGFjaXR5
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghZmlyc3RG
cmVlQ2VsbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiAwOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGZpcnN0RnJlZUNlbGwpOworICAg
ICAgICAKKyAgICAgICAgc2l6ZUNsYXNzLmZpcnN0RnJlZUNlbGwgPSBmaXJzdEZyZWVDZWxsLT5u
ZXh0OworICAgICAgICByZXR1cm4gZmlyc3RGcmVlQ2VsbDsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUg
TmV3U3BhY2U6OmZvckVhY2hCbG9jayhGdW5jdG9yJiBmdW5jdG9yKQpAQCAtMTU1LDcgKzE4OSw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KIAogICAgIGlubGluZSBOZXdTcGFjZTo6U2l6ZUNs
YXNzOjpTaXplQ2xhc3MoKQotICAgICAgICA6IG5leHRCbG9jaygwKQorICAgICAgICA6IGZpcnN0
RnJlZUNlbGwoMCkKKyAgICAgICAgLCBjdXJyZW50QmxvY2soMCkKKyAgICAgICAgLCBuZXh0Qmxv
Y2soMCkKICAgICAgICAgLCBjZWxsU2l6ZSgwKQogICAgIHsKICAgICB9CkBAIC0xNjQsNiArMjAw
LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAgICAgbmV4dEJsb2NrID0gYmxvY2tM
aXN0LmhlYWQoKTsKICAgICB9CisgICAgCisgICAgaW5saW5lIHZvaWQgTmV3U3BhY2U6OlNpemVD
bGFzczo6Y2Fub25pY2FsaXplQmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKGN1cnJlbnRCbG9j
aykgeworICAgICAgICAgICAgY3VycmVudEJsb2NrLT5jYW5vbmljYWxpemVCbG9jayhmaXJzdEZy
ZWVDZWxsKTsKKyAgICAgICAgICAgIGZpcnN0RnJlZUNlbGwgPSAwOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBBU1NFUlQoIWZpcnN0RnJlZUNlbGwpOworICAgICAgICAKKyAgICAgICAg
Y3VycmVudEJsb2NrID0gMDsKKyAgICAgICAgZmlyc3RGcmVlQ2VsbCA9IDA7CisgICAgfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvT2xk
U3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL09sZFNw
YWNlLmNwcAkocmV2aXNpb24gOTEwMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9P
bGRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAgT2xkU3BhY2U6Ok9s
ZFNwYWNlKEhlYXAqIGhlYXApCiB2b2lkIE9sZFNwYWNlOjphZGRCbG9jayhNYXJrZWRCbG9jayog
YmxvY2spCiB7CiAgICAgbV9ibG9ja3MuYXBwZW5kKGJsb2NrKTsKKyAgICBibG9jay0+Ymxlc3NO
ZXdCbG9ja0ZvclNsb3dQYXRoKCk7CiB9CiAKIHZvaWQgT2xkU3BhY2U6OnJlbW92ZUJsb2NrKE1h
cmtlZEJsb2NrKiBibG9jaykK
</data>

          </attachment>
      

    </bug>

</bugzilla>