<?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>43269</bug_id>
          
          <creation_ts>2010-07-30 13:58:07 -0700</creation_ts>
          <short_desc>Change the JavaScript heap to use the new PageAllocation class</short_desc>
          <delta_ts>2010-08-05 13:54:12 -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>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>43207</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nathan Lawrence">nlawrence</reporter>
          <assigned_to name="Nathan Lawrence">nlawrence</assigned_to>
          <cc>barraclough</cc>
    
    <cc>darin</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>258366</commentid>
    <comment_count>0</comment_count>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-07-30 13:58:07 -0700</bug_when>
    <thetext>The javascript heap relies on being able to allocate aligned CollectorBlocks.  Currently that functionality is split between the symbian implementation in WTF and platform specific implementations inside Heap::allocateBlock and Heap::freeBlockPtr.  The suggested solution to this is to add a PageAllocation::allocateAligned method for platforms which support it, and then add a wrapper layer with the same API as the symbian AlignedBlockAllocator with a thin implementation for platforms which support aligned allocations and a fallback implementation for platforms which don&apos;t.

Such an api could also be used for https://bugs.webkit.org/show_bug.cgi?id=43207.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258950</commentid>
    <comment_count>1</comment_count>
      <attachid>63229</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-08-02 10:17:52 -0700</bug_when>
    <thetext>Created attachment 63229
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258953</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-02 10:19:56 -0700</bug_when>
    <thetext>Attachment 63229 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/wtf/PageAllocation.h:68:  &quot;sys/mman.h&quot; already included at JavaScriptCore/wtf/PageAllocation.h:43  [build/include] [4]
JavaScriptCore/wtf/PageAllocation.h:70:  &quot;unistd.h&quot; already included at JavaScriptCore/wtf/PageAllocation.h:44  [build/include] [4]
JavaScriptCore/runtime/Collector.h:76:  BLOCK_SIZE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/runtime/Collector.h:78:  BLOCK_SIZE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 4 in 6 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>258964</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-02 10:32:51 -0700</bug_when>
    <thetext>Attachment 63229 did not build on qt:
Build output: http://queues.webkit.org/results/3560833</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258972</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-02 10:46:02 -0700</bug_when>
    <thetext>Qt failures are:

../../../JavaScriptCore/runtime/Collector.h:27:24: error: wtf/Bitmap.h: No such file or directory
../../../JavaScriptCore/runtime/Collector.h:36:37: error: wtf/TypedPageAllocation.h: No such file or directory
../../../JavaScriptCore/runtime/Collector.h:42:32: error: wtf/BlockAllocator.h: No such file or directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258977</commentid>
    <comment_count>5</comment_count>
      <attachid>63235</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-08-02 10:50:40 -0700</bug_when>
    <thetext>Created attachment 63235
Patch

forgot to add some files to previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258982</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-02 10:54:30 -0700</bug_when>
    <thetext>Attachment 63235 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/runtime/Collector.h:76:  BLOCK_SIZE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/runtime/Collector.h:78:  BLOCK_SIZE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 11 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>259245</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-02 18:45:36 -0700</bug_when>
    <thetext>Attachment 63235 did not build on win:
Build output: http://queues.webkit.org/results/3558877</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259311</commentid>
    <comment_count>8</comment_count>
      <attachid>63235</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-08-03 00:58:12 -0700</bug_when>
    <thetext>Comment on attachment 63235
Patch

Hey Nathan,

There are a lot of review comments here, but only because I think this is really worth getting right – this is an absolutely fantastic clean-up of the collector, thank you.

Looking at the allocateAligned methods, one thing is bothering me, which is the comment in the #if OS(WINCE) code path.  Reading up on the behaviour of VirtualAlloc, I haven&apos;t yet found any evidence that this is safe. :-/  That said presumably it is, or else I don&apos;t think WebKit could work on WinCE.  So, assuming that this works (if we don&apos;t assume this we should delete the WinCE implementation!), it&apos;s probably a good idea to define the interface of this method to be something we can support on all platforms we&apos;re implementing it on – which is to say that if on WinCE we can only provide allocations that are aligned to size, then we should probably change the interface to allocateAligned to remove the alignment mask parameter, and to instead require that size is a power of two [ASSERT(!(size &amp; (size - 1)));], and align to (size - 1).  Checking in allocateAligned with a faulty implementation on one platform is not a great option.  We should  also [ASSERT(!(static_cast&lt;intptr_t&gt;(result_of_VirtualAlloc) &amp; (size - 1)));].

In the !HAVE(ALIGNED_ALLOCATE) version of AlignedBlockAllocator, please switch away from creating sub-PageAllocations from the PageAllocation, and instead return your own type (say, called &apos;Allocation&apos;)to hold a base pointer (in the HAVE(ALIGNED_ALLOCATE) version Allocation could typedef to PageAllocation).  I think we are going to need to remove the ability to allocate sub-allocations, since exposing an interface which would appear to allow you to deallocate regions is a bad idea (since we won&apos;t get the right behaviour on Symbian).

In BitMap, instead of declaring the value &apos;one&apos;, I&apos;d suggest you should probably just use &apos;1u&apos;.

In AlignedBlockAllocator, I&apos;d suggest the number of #ifdefs is currently making it much less readable; I&apos;d suggest one big #if HAVE(ALIGNED_ALLOCATE) wrapping (two copies of) the whole class definition would be cleaner in this case.  Class member names must begin with m_, and the filename must match the class name.  In AlignedBlockAllocator I don&apos;t see a need for a destroy method, the contents could just move into the destructor?

&gt; 91     ASSERT(!(blockSize &amp; PageAllocation::pagesize()));
&gt; 92     ASSERT(!(reservationSize &amp; blockSize));

I think these asserts are incorrect; they check blockSize != PageAllocation::pagesize() and reservationSize != blockSize.  I think they should be:

&gt; 91     ASSERT(!(blockSize &amp; (PageAllocation::pagesize() - 1)));
&gt; 92     ASSERT(!(reservationSize &amp; (blockSize - 1)));

&gt; 109     reservation.decommit(reservation.base(), reservation.size());

On OS X I think this would be an error; I believe we need to match calls to commit/decommit for the kernel to be able to track memory usage correctly; we should not be called decommit on memory that has not been committed.  Since I&apos;m assuming this decommit is in the existing code I&apos;m not going to ask you to fix this, but a FIXME comment describing the issue would be good.

Also, I think your patch should be removing the wtf/symbian/BlockAllocatorSymbian* classes?

Finally, the use of templates.  In these cases, I don&apos;t think it works.  Templates are great where you can create a generic class that will be useful elsewhere, and as such where you can reduce code duplication - but you have to be careful not to over-engineer and end up with a solution that is more complex than necessary.

Looking at the class TypedPageAllocation, it sounds like it has potential to be useful, but looking at similar situations in other Allocators, it doesn&apos;t seem like this abstraction is a fit (in ExecutableAllocator no management structures are stored within the mapped memory, in the BumpAllocator they are, but the object representing the block is stored at the end of the allocation, and the PageAllocation handle is stored with the allocation rather than being used as the handle to the object).  Given the number of lines of code required to add this class, and the unwieldiness of the type &apos;TypedPageAllocation&lt;CollectorBlock&gt;&apos;, I&apos;d suggest instead of adding this class you could just add a method:

Collector::collectorBlock(size_t index)
{
	return static_cast&lt;CollectorBlock*&gt;(blocks[index].base());
}

And in almost all cases use of &quot;blocks[n]-&gt;&quot; could just turn to &quot;collectorBlock(n)-&gt;&quot;.  In lieu of an obvious widespread use for TypedPageAllocation I&apos;d suggest that a simpler solution like this is much more elegant.

As for AlignedBlockAllocator, given that the code was not previously parameterized on the reservationSize it doesn&apos;t seem necessary to do so now, and it&apos;s not great to have the type (specifically the template parameters) of AlignedBlockAllocator change between the HAVE(ALIGNED_ALLOCATE) &amp; non- builds, so at minimum I&apos;d remove this template parameter.  That said, personally I&apos;d go further.  We don&apos;t have any use for the aligned allocator outside of the Collector, and I&apos;m not sure that we really envisage any other uses.  Since we have no other uses, it is hard to say if this interface is appropriate for other uses.  As such it&apos;s hard to see any benefit in having a generalized class.  Again, preferring simplicity over unnecessary complexity, I&apos;d suggest it would be better to simply rename the class &apos;CollectorAllocator&apos;, move it into the runtime, and hardcode the use of BLOCK_SIZE and JSCOLLECTOR_VIRTUALMEM_RESERVATION directly.  I&apos;m not going to require this change, since the existing code has AlignedBlockAllocator generalized in wtf, but I do think it would be an improvement, and I am going to ask you to at least remove reservationSize as a template parameter so the type is the same in all builds.

Again, I know there are a a lot of review comments here, but this is a really great change Nathan.

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259611</commentid>
    <comment_count>9</comment_count>
      <attachid>63365</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-08-03 12:15:04 -0700</bug_when>
    <thetext>Created attachment 63365
Patch

(In reply to comment #8)
&gt; (From update of attachment 63235 [details])
&gt; Hey Nathan,
&gt; 
&gt; There are a lot of review comments here, but only because I think this is really worth getting right – this is an absolutely fantastic clean-up of the collector, thank you.
&gt; 
&gt; Looking at the allocateAligned methods, one thing is bothering me, which is the comment in the #if OS(WINCE) code path.  Reading up on the behaviour of VirtualAlloc, I haven&apos;t yet found any evidence that this is safe. :-/  That said presumably it is, or else I don&apos;t think WebKit could work on WinCE.  So, assuming that this works (if we don&apos;t assume this we should delete the WinCE implementation!), it&apos;s probably a good idea to define the interface of this method to be something we can support on all platforms we&apos;re implementing it on – which is to say that if on WinCE we can only provide allocations that are aligned to size, then we should probably change the interface to allocateAligned to remove the alignment mask parameter, and to instead require that size is a power of two [ASSERT(!(size &amp; (size - 1)));], and align to (size - 1).  Checking in allocateAligned with a faulty implementation on one platform is not a great option.  We should  also [ASSERT(!(static_cast&lt;intptr_t&gt;(result_of_VirtualAlloc) &amp; (size - 1)));].

See https://bugs.webkit.org/show_bug.cgi?id=29379 for aligned allocation on Windows CE.  I&apos;m removing that code path.  So what should the correct behavior there be?  There are two implementations of aligned allocate that would work.  There is the default allocateAligned in PageAllocator, and then there is the AlignedBlockAllocator implementation that reserves a large chunk of virtual memory.

&gt; 
&gt; In the !HAVE(ALIGNED_ALLOCATE) version of AlignedBlockAllocator, please switch away from creating sub-PageAllocations from the PageAllocation, and instead return your own type (say, called &apos;Allocation&apos;)to hold a base pointer (in the HAVE(ALIGNED_ALLOCATE) version Allocation could typedef to PageAllocation).  I think we are going to need to remove the ability to allocate sub-allocations, since exposing an interface which would appear to allow you to deallocate regions is a bad idea (since we won&apos;t get the right behaviour on Symbian).
&gt; 
&gt; In BitMap, instead of declaring the value &apos;one&apos;, I&apos;d suggest you should probably just use &apos;1u&apos;.

Having a variable &apos;one&apos; allows me to have the comment in a logical place and ensures that it will be of the correct type.

&gt; In AlignedBlockAllocator, I&apos;d suggest the number of #ifdefs is currently making it much less readable; I&apos;d suggest one big #if HAVE(ALIGNED_ALLOCATE) wrapping (two copies of) the whole class definition would be cleaner in this case.  Class member names must begin with m_, and the filename must match the class name.  In AlignedBlockAllocator I don&apos;t see a need for a destroy method, the contents could just move into the destructor?

I have the destroy method there because it is called from Heap::destroy.

&gt; &gt; 91     ASSERT(!(blockSize &amp; PageAllocation::pagesize()));
&gt; &gt; 92     ASSERT(!(reservationSize &amp; blockSize));
&gt; 
&gt; I think these asserts are incorrect; they check blockSize != PageAllocation::pagesize() and reservationSize != blockSize.  I think they should be:
&gt; 
&gt; &gt; 91     ASSERT(!(blockSize &amp; (PageAllocation::pagesize() - 1)));
&gt; &gt; 92     ASSERT(!(reservationSize &amp; (blockSize - 1)));

Good catch.

&gt; &gt; 109     reservation.decommit(reservation.base(), reservation.size());
&gt; 
&gt; On OS X I think this would be an error; I believe we need to match calls to commit/decommit for the kernel to be able to track memory usage correctly; we should not be called decommit on memory that has not been committed.  Since I&apos;m assuming this decommit is in the existing code I&apos;m not going to ask you to fix this, but a FIXME comment describing the issue would be good.

Fixed.

&gt; Also, I think your patch should be removing the wtf/symbian/BlockAllocatorSymbian* classes?
&gt; 
&gt; Finally, the use of templates.  In these cases, I don&apos;t think it works.  Templates are great where you can create a generic class that will be useful elsewhere, and as such where you can reduce code duplication - but you have to be careful not to over-engineer and end up with a solution that is more complex than necessary.
&gt; 
&gt; Looking at the class TypedPageAllocation, it sounds like it has potential to be useful, but looking at similar situations in other Allocators, it doesn&apos;t seem like this abstraction is a fit (in ExecutableAllocator no management structures are stored within the mapped memory, in the BumpAllocator they are, but the object representing the block is stored at the end of the allocation, and the PageAllocation handle is stored with the allocation rather than being used as the handle to the object).  Given the number of lines of code required to add this class, and the unwieldiness of the type &apos;TypedPageAllocation&lt;CollectorBlock&gt;&apos;, I&apos;d suggest instead of adding this class you could just add a method:
&gt; 
&gt; Collector::collectorBlock(size_t index)
&gt; {
&gt;     return static_cast&lt;CollectorBlock*&gt;(blocks[index].base());
&gt; }
&gt; 
&gt; And in almost all cases use of &quot;blocks[n]-&gt;&quot; could just turn to &quot;collectorBlock(n)-&gt;&quot;.  In lieu of an obvious widespread use for TypedPageAllocation I&apos;d suggest that a simpler solution like this is much more elegant.
&gt; 
&gt; As for AlignedBlockAllocator, given that the code was not previously parameterized on the reservationSize it doesn&apos;t seem necessary to do so now, and it&apos;s not great to have the type (specifically the template parameters) of AlignedBlockAllocator change between the HAVE(ALIGNED_ALLOCATE) &amp; non- builds, so at minimum I&apos;d remove this template parameter.  That said, personally I&apos;d go further.  We don&apos;t have any use for the aligned allocator outside of the Collector, and I&apos;m not sure that we really envisage any other uses.  Since we have no other uses, it is hard to say if this interface is appropriate for other uses.

I should be able to take full advantage of any of the generic classes in the same way when I submit the new patch to https://bugs.webkit.org/show_bug.cgi?id=43207.  That said, the code is simple enough where it shouldn&apos;t be too much of a problem duplicating it, and I have removed TypedPageAllocation.

&gt; As such it&apos;s hard to see any benefit in having a generalized class.  Again, preferring simplicity over unnecessary complexity, I&apos;d suggest it would be better to simply rename the class &apos;CollectorAllocator&apos;, move it into the runtime, and hardcode the use of BLOCK_SIZE and JSCOLLECTOR_VIRTUALMEM_RESERVATION directly.  I&apos;m not going to require this change, since the existing code has AlignedBlockAllocator generalized in wtf, but I do think it would be an improvement, and I am going to ask you to at least remove reservationSize as a template parameter so the type is the same in all builds.

reservationSize has been removed.

&gt; Again, I know there are a a lot of review comments here, but this is a really great change Nathan.

I really do appreciate all of the feedback.
 
&gt; cheers,
&gt; G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259616</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-03 12:19:55 -0700</bug_when>
    <thetext>Attachment 63365 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/runtime/Collector.h:59:  BLOCK_SIZE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/runtime/Collector.h:61:  BLOCK_SIZE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 15 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>259622</commentid>
    <comment_count>11</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-03 12:32:22 -0700</bug_when>
    <thetext>Attachment 63365 did not build on qt:
Build output: http://queues.webkit.org/results/3607674</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259677</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-03 14:01:41 -0700</bug_when>
    <thetext>Attachment 63365 did not build on gtk:
Build output: http://queues.webkit.org/results/3566871</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259701</commentid>
    <comment_count>13</comment_count>
      <attachid>63379</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-08-03 14:41:02 -0700</bug_when>
    <thetext>Created attachment 63379
Patch

(Hopefully) fixed build issues + moved BlockAllocator to runtime per Gavin&apos;s suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259707</commentid>
    <comment_count>14</comment_count>
      <attachid>63379</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-03 14:55:04 -0700</bug_when>
    <thetext>Comment on attachment 63379
Patch

If we are moving the block size constant to a header, I suggest naming it blockSize rather than BlockSize. Or collectorBlockSize or even CollectorBlockSize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259708</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-03 14:55:19 -0700</bug_when>
    <thetext>I mean rather than BLOCK_SIZE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259709</commentid>
    <comment_count>16</comment_count>
      <attachid>63380</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-08-03 14:57:47 -0700</bug_when>
    <thetext>Created attachment 63380
Patch (up to date)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259713</commentid>
    <comment_count>17</comment_count>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-08-03 15:01:15 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 63379 [details])
&gt; If we are moving the block size constant to a header, I suggest naming it blockSize rather than BlockSize. Or collectorBlockSize or even CollectorBlockSize.

BLOCK_SIZE is just being moved around in the header.  I intend to submit another patch that puts all of the constants into the HeapConstants struct (such that the unused ones are private) after this patch goes through.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259716</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-03 15:03:43 -0700</bug_when>
    <thetext>Attachment 63380 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/runtime/Collector.h:60:  BLOCK_SIZE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/runtime/Collector.h:62:  BLOCK_SIZE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 13 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>259730</commentid>
    <comment_count>19</comment_count>
      <attachid>63380</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-08-03 15:26:20 -0700</bug_when>
    <thetext>Comment on attachment 63380
Patch (up to date)

As discussed, please make classname &amp; filename, match, and remove reserveAligned.  This is looking awesome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259738</commentid>
    <comment_count>20</comment_count>
      <attachid>63387</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-08-03 15:44:50 -0700</bug_when>
    <thetext>Created attachment 63387
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259739</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-03 15:47:20 -0700</bug_when>
    <thetext>Attachment 63387 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/runtime/Collector.h:60:  BLOCK_SIZE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/runtime/Collector.h:62:  BLOCK_SIZE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 13 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>259748</commentid>
    <comment_count>22</comment_count>
      <attachid>63387</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-08-03 16:55:27 -0700</bug_when>
    <thetext>Comment on attachment 63387
Patch

This is now pure awesome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259782</commentid>
    <comment_count>23</comment_count>
      <attachid>63399</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-08-03 18:22:37 -0700</bug_when>
    <thetext>Created attachment 63399
Patch (up to date)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259786</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-03 18:28:55 -0700</bug_when>
    <thetext>Attachment 63399 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/runtime/Collector.h:60:  BLOCK_SIZE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/runtime/Collector.h:62:  BLOCK_SIZE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 13 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>259842</commentid>
    <comment_count>25</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-08-03 20:27:52 -0700</bug_when>
    <thetext>Fixed in r64624.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260833</commentid>
    <comment_count>26</comment_count>
      <attachid>63399</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-08-05 13:54:12 -0700</bug_when>
    <thetext>Comment on attachment 63399
Patch (up to date)

clearing review flag</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63229</attachid>
            <date>2010-08-02 10:17:52 -0700</date>
            <delta_ts>2010-08-02 10:50:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>heap-pageAlloc.patch</filename>
            <type>text/plain</type>
            <size>22050</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0NDY2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTAtMDgtMDIgIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQzMjY5CisKKyAgICAgICAgQWRkZWQgbmV3IGFsbG9jYXRlQWxpZ25lZCBtZXRob2Rz
IHRvIFBhZ2VBbGxvY2F0aW9uLiAgSW4gb3JkZXIgdG8KKyAgICAgICAgcHJldmVudCBhIHJlZ3Jl
c3MgaW4gcGVyZm9ybWFuY2UsIHRoZSBmdW5jdGlvbiBuZWVkcyB0byBiZSBpbmxpbmVkLgorCisg
ICAgICAgIEFkZGl0aW9uYWxseSwgSSBwb3J0ZWQgdGhlIHN5bWJpYW4gYmxvY2sgYWxsb2NhdG9y
IHRvIHVzZQorICAgICAgICBQYWdlQWxsb2NhdGlvbiBhbmQgYWRkZWQgYSBuZXcgV1RGOjpCaXRt
YXAgY2xhc3MgdG8gc3VwcG9ydCB0aGlzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBydW50aW1lL0NvbGxlY3Rvci5jcHA6
CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpkZXN0cm95
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdGVCbG9jayk6CisgICAgICAgIChKU0M6Okhl
YXA6OmZyZWVCbG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6OmZyZWVCbG9ja3MpOgorICAgICAg
ICAoSlNDOjpIZWFwOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtDb25zZXJ2
YXRpdmVseSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNsZWFyTWFya0JpdHMpOgorICAgICAgICAq
IHJ1bnRpbWUvQ29sbGVjdG9yLmg6CisgICAgICAgICogd3RmL0JpdG1hcC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6OjpnZXQpOgorICAgICAgICAoV1RGOjo6OnNldCk6CisgICAgICAgIChXVEY6
Ojo6Y2xlYXIpOgorICAgICAgICAoV1RGOjo6OmNsZWFyQWxsKToKKyAgICAgICAgKFdURjo6Ojph
ZHZhbmNlVG9OZXh0RnJlZUJpdCk6CisgICAgICAgIChXVEY6Ojo6Y291bnQpOgorICAgICAgICAo
V1RGOjo6OmlzRW1wdHkpOgorICAgICAgICAoV1RGOjo6OmlzRnVsbCk6CisgICAgICAgICogd3Rm
L0Jsb2NrQWxsb2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjo6OmRlc3Ryb3kpOgorICAg
ICAgICAoV1RGOjo6OmFsbG9jYXRlKToKKyAgICAgICAgKFdURjo6OjpmcmVlKToKKyAgICAgICAg
KFdURjo6OjpBbGlnbmVkQmxvY2tBbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjo6On5BbGlnbmVk
QmxvY2tBbGxvY2F0b3IpOgorICAgICAgICAqIHd0Zi9QYWdlQWxsb2NhdGlvbi5oOgorICAgICAg
ICAoV1RGOjpQYWdlQWxsb2NhdGlvbjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSk6Cisg
ICAgICAgIChXVEY6OlBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZUFsaWduZWQpOgorICAgICAgICAo
V1RGOjpQYWdlQWxsb2NhdGlvbjo6cmVzZXJ2ZUFsaWduZWQpOgorICAgICAgICAqIHd0Zi9QbGF0
Zm9ybS5oOgorCiAyMDEwLTA4LTAyICBNYWhlc2ggS3Vsa2FybmkgIDxtYWhlc2gua3Vsa2FybmlA
bm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDog
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiA2NDQ2NCkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwOCw2
ICs1MDgsOCBAQAogCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkwMEVF
QjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovOyB9OwogCQlCQ0ZEOEM5MzBFRUIyRUU3
MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87
IH07CiAJCUMwQTI3MjYzMEU1MEEwNjMwMEU5NkUxNSAvKiBOb3RGb3VuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBBMjcyM0YwRTUwOUYxRTAwRTk2
RTE1IC8qIE5vdEZvdW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJREQzNzdDQkMxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1hcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREQzNzdDQkIxMjA3MkMxODAw
NkEyNTE3IC8qIEJpdG1hcC5oICovOyB9OworCQlERDY5Q0Q5RjEyMDI0NkRFMDAwNTVBQzcgLyog
QmxvY2tBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IERENjlDRDlEMTIwMjQ2REUwMDA1NUFDNyAvKiBCbG9ja0FsbG9jYXRvci5oICovOyB9
OwogCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY1MEU1NTU3NzUw
MDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUUxMjRBOEY4MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVK
U1N0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovOyB9Owog
CQlFMTc4NjM2RDBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTc4NjM2QzBEOUJF
RUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi87IH07CkBAIC0xMDQ5LDYg
KzEwNTEsOCBAQAogCQlDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90Rm91bmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlQ29udmVyc2lv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI5MEFENDMxMEMwMEVE
NzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGF0ZUNvbnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREQzNzdD
QkIxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCaXRtYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREQ2OUNEOUQx
MjAyNDZERTAwMDU1QUM3IC8qIEJsb2NrQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJsb2NrQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxMUQ1MTc1MEIyRTc5OEQwMDU2QzE4OCAvKiBTdHJpbmdFeHRyYXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUUxMjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGFxdWVKU1N0cmluZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3Bh
cXVlSlNTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3Bh
cXVlSlNTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQwNiw2ICsx
NDEwLDggQEAKIAkJCQk2NUUyMTdCNzA4RTdFRUNDMDAyM0U1RjYgLyogQXNzZXJ0aW9ucy5oICov
LAogCQkJCUJDNUY3QkJCMTE4MjNCNTkwMDUyQzAyQyAvKiBBdG9taWNzLmggKi8sCiAJCQkJRTFB
NTk2MzcwREUzRTFDMzAwQzE3RTM3IC8qIEFWTFRyZWUuaCAqLywKKwkJCQlERDM3N0NCQjEyMDcy
QzE4MDA2QTI1MTcgLyogQml0bWFwLmggKi8sCisJCQkJREQ2OUNEOUQxMjAyNDZERTAwMDU1QUM3
IC8qIEJsb2NrQWxsb2NhdG9yLmggKi8sCiAJCQkJODY2NzZENEQxMUZFRDU1RDAwNEI2ODYzIC8q
IEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggKi8sCiAJCQkJQTdBMUY3QUEwRjI1MkIzQzAwRTE4NEUy
IC8qIEJ5dGVBcnJheS5jcHAgKi8sCiAJCQkJQTdBMUY3QUIwRjI1MkIzQzAwRTE4NEUyIC8qIEJ5
dGVBcnJheS5oICovLApAQCAtMjE5Myw2ICsyMTk5LDggQEAKIAkJCQk4NjhCRkExODExN0NGMTk5
MDBCOTA4QjEgLyogV1RGU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQwOEQ1NDExNzkz
NjEzMDA2RTVFRDAgLyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY4OENC
MTYwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
REQ2OUNEOUYxMjAyNDZERTAwMDU1QUM3IC8qIEJsb2NrQWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LywKKwkJCQlERDM3N0NCQzEyMDcyQzE4MDA2QTI1MTcgLyogQml0bWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDY0NDY0
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzUsOSArMTM1LDYgQEAgSGVhcDo6SGVhcChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
CiAgICAgLCBtX3JlZ2lzdGVyZWRUaHJlYWRzKDApCiAgICAgLCBtX2N1cnJlbnRUaHJlYWRSZWdp
c3RyYXIoMCkKICNlbmRpZgotI2lmIE9TKFNZTUJJQU4pCi0gICAgLCBtX2Jsb2NrYWxsb2NhdG9y
KEpTQ0NPTExFQ1RPUl9WSVJUVUFMTUVNX1JFU0VSVkFUSU9OLCBCTE9DS19TSVpFKQotI2VuZGlm
CiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKIHsKICAgICBBU1NFUlQoZ2xvYmFsRGF0
YSk7CkBAIC0xODMsNjMgKzE4MCwxNiBAQCB2b2lkIEhlYXA6OmRlc3Ryb3koKQogICAgICAgICB0
ID0gbmV4dDsKICAgICB9CiAjZW5kaWYKLSNpZiBPUyhTWU1CSUFOKQogICAgIG1fYmxvY2thbGxv
Y2F0b3IuZGVzdHJveSgpOwotI2VuZGlmCiAgICAgbV9nbG9iYWxEYXRhID0gMDsKIH0KIAotTkVW
RVJfSU5MSU5FIENvbGxlY3RvckJsb2NrKiBIZWFwOjphbGxvY2F0ZUJsb2NrKCkKK05FVkVSX0lO
TElORSBXVEY6OlR5cGVkUGFnZUFsbG9jYXRpb248Q29sbGVjdG9yQmxvY2s+IEhlYXA6OmFsbG9j
YXRlQmxvY2soKQogewotI2lmIE9TKERBUldJTikKLSAgICB2bV9hZGRyZXNzX3QgYWRkcmVzcyA9
IDA7Ci0gICAgdm1fbWFwKGN1cnJlbnRfdGFzaygpLCAmYWRkcmVzcywgQkxPQ0tfU0laRSwgQkxP
Q0tfT0ZGU0VUX01BU0ssIFZNX0ZMQUdTX0FOWVdIRVJFIHwgVk1fVEFHX0ZPUl9DT0xMRUNUT1Jf
TUVNT1JZLCBNRU1PUllfT0JKRUNUX05VTEwsIDAsIEZBTFNFLCBWTV9QUk9UX0RFRkFVTFQsIFZN
X1BST1RfREVGQVVMVCwgVk1fSU5IRVJJVF9ERUZBVUxUKTsKLSNlbGlmIE9TKFNZTUJJQU4pCi0g
ICAgdm9pZCogYWRkcmVzcyA9IG1fYmxvY2thbGxvY2F0b3IuYWxsb2MoKTsgIAotICAgIGlmICgh
YWRkcmVzcykKLSAgICAgICAgQ1JBU0goKTsKLSNlbGlmIE9TKFdJTkNFKQotICAgIHZvaWQqIGFk
ZHJlc3MgPSBWaXJ0dWFsQWxsb2MoTlVMTCwgQkxPQ0tfU0laRSwgTUVNX0NPTU1JVCB8IE1FTV9S
RVNFUlZFLCBQQUdFX1JFQURXUklURSk7Ci0jZWxpZiBPUyhXSU5ET1dTKQotI2lmIENPTVBJTEVS
KE1JTkdXKSAmJiAhQ09NUElMRVIoTUlOR1c2NCkKLSAgICB2b2lkKiBhZGRyZXNzID0gX19taW5n
d19hbGlnbmVkX21hbGxvYyhCTE9DS19TSVpFLCBCTE9DS19TSVpFKTsKLSNlbHNlCi0gICAgdm9p
ZCogYWRkcmVzcyA9IF9hbGlnbmVkX21hbGxvYyhCTE9DS19TSVpFLCBCTE9DS19TSVpFKTsKLSNl
bmRpZgotICAgIG1lbXNldChhZGRyZXNzLCAwLCBCTE9DS19TSVpFKTsKLSNlbGlmIEhBVkUoUE9T
SVhfTUVNQUxJR04pCi0gICAgdm9pZCogYWRkcmVzczsKLSAgICBwb3NpeF9tZW1hbGlnbigmYWRk
cmVzcywgQkxPQ0tfU0laRSwgQkxPQ0tfU0laRSk7Ci0jZWxzZQotCi0jaWYgRU5BQkxFKEpTQ19N
VUxUSVBMRV9USFJFQURTKQotI2Vycm9yIE5lZWQgdG8gaW5pdGlhbGl6ZSBwYWdlc2l6ZSBzYWZl
bHkuCi0jZW5kaWYKLSAgICBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsK
LQotICAgIHNpemVfdCBleHRyYSA9IDA7Ci0gICAgaWYgKEJMT0NLX1NJWkUgPiBwYWdlc2l6ZSkK
LSAgICAgICAgZXh0cmEgPSBCTE9DS19TSVpFIC0gcGFnZXNpemU7Ci0KLSAgICB2b2lkKiBtbWFw
UmVzdWx0ID0gbW1hcChOVUxMLCBCTE9DS19TSVpFICsgZXh0cmEsIFBST1RfUkVBRCB8IFBST1Rf
V1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKLSAgICB1aW50cHRyX3QgYWRk
cmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtbWFwUmVzdWx0KTsKLQotICAgIHNp
emVfdCBhZGp1c3QgPSAwOwotICAgIGlmICgoYWRkcmVzcyAmIEJMT0NLX09GRlNFVF9NQVNLKSAh
PSAwKQotICAgICAgICBhZGp1c3QgPSBCTE9DS19TSVpFIC0gKGFkZHJlc3MgJiBCTE9DS19PRkZT
RVRfTUFTSyk7Ci0KLSAgICBpZiAoYWRqdXN0ID4gMCkKLSAgICAgICAgbXVubWFwKHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGFkZHJlc3MpLCBhZGp1c3QpOwotCi0gICAgaWYgKGFkanVzdCA8IGV4
dHJhKQotICAgICAgICBtdW5tYXAocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYWRkcmVzcyArIGFk
anVzdCArIEJMT0NLX1NJWkUpLCBleHRyYSAtIGFkanVzdCk7Ci0KLSAgICBhZGRyZXNzICs9IGFk
anVzdDsKLSNlbmRpZgorICAgIFdURjo6VHlwZWRQYWdlQWxsb2NhdGlvbjxDb2xsZWN0b3JCbG9j
az4gYmxvY2sobV9ibG9ja2FsbG9jYXRvci5hbGxvY2F0ZSgpKTsKIAogICAgIC8vIEluaXRpYWxp
emUgYmxvY2suCiAKLSAgICBDb2xsZWN0b3JCbG9jayogYmxvY2sgPSByZWludGVycHJldF9jYXN0
PENvbGxlY3RvckJsb2NrKj4oYWRkcmVzcyk7CiAgICAgYmxvY2stPmhlYXAgPSB0aGlzOwogICAg
IGNsZWFyTWFya0JpdHMoYmxvY2spOwogCkBAIC0yNTEsMTQgKzIwMSwxNSBAQCBORVZFUl9JTkxJ
TkUgQ29sbGVjdG9yQmxvY2sqIEhlYXA6OmFsbG9jCiAKICAgICBzaXplX3QgbnVtQmxvY2tzID0g
bV9oZWFwLm51bUJsb2NrczsKICAgICBpZiAobV9oZWFwLnVzZWRCbG9ja3MgPT0gbnVtQmxvY2tz
KSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4TnVtQmxvY2tzID0gVUxPTkdfTUFY
IC8gc2l6ZW9mKENvbGxlY3RvckJsb2NrKikgLyBHUk9XVEhfRkFDVE9SOworICAgICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IG1heE51bUJsb2NrcyA9IFVMT05HX01BWCAvIHNpemVvZihXVEY6OlR5
cGVkUGFnZUFsbG9jYXRpb248Q29sbGVjdG9yQmxvY2s+KSAvIEdST1dUSF9GQUNUT1I7CiAgICAg
ICAgIGlmIChudW1CbG9ja3MgPiBtYXhOdW1CbG9ja3MpCiAgICAgICAgICAgICBDUkFTSCgpOwog
ICAgICAgICBudW1CbG9ja3MgPSBtYXgoTUlOX0FSUkFZX1NJWkUsIG51bUJsb2NrcyAqIEdST1dU
SF9GQUNUT1IpOwogICAgICAgICBtX2hlYXAubnVtQmxvY2tzID0gbnVtQmxvY2tzOwotICAgICAg
ICBtX2hlYXAuYmxvY2tzID0gc3RhdGljX2Nhc3Q8Q29sbGVjdG9yQmxvY2sqKj4oZmFzdFJlYWxs
b2MobV9oZWFwLmJsb2NrcywgbnVtQmxvY2tzICogc2l6ZW9mKENvbGxlY3RvckJsb2NrKikpKTsK
KyAgICAgICAgbV9oZWFwLmJsb2NrcyA9IHN0YXRpY19jYXN0PFdURjo6VHlwZWRQYWdlQWxsb2Nh
dGlvbjxDb2xsZWN0b3JCbG9jaz4qPihmYXN0UmVhbGxvYyhtX2hlYXAuYmxvY2tzLCBudW1CbG9j
a3MgKiBzaXplb2YoV1RGOjpUeXBlZFBhZ2VBbGxvY2F0aW9uPENvbGxlY3RvckJsb2NrPikpKTsK
ICAgICB9Ci0gICAgbV9oZWFwLmJsb2Nrc1ttX2hlYXAudXNlZEJsb2NrcysrXSA9IGJsb2NrOwor
ICAgIG1faGVhcC5ibG9ja3NbbV9oZWFwLnVzZWRCbG9ja3NdID0gYmxvY2s7CisgICAgbV9oZWFw
LnVzZWRCbG9ja3MrKzsKIAogICAgIHJldHVybiBibG9jazsKIH0KQEAgLTI3MSw3ICsyMjIsNyBA
QCBORVZFUl9JTkxJTkUgdm9pZCBIZWFwOjpmcmVlQmxvY2soc2l6ZV90CiAgICAgT2JqZWN0SXRl
cmF0b3IgZW5kKG1faGVhcCwgYmxvY2sgKyAxKTsKICAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytp
dCkKICAgICAgICAgKCppdCktPn5KU0NlbGwoKTsKLSAgICBmcmVlQmxvY2tQdHIobV9oZWFwLmJs
b2Nrc1tibG9ja10pOworICAgIG1fYmxvY2thbGxvY2F0b3IuZnJlZShtX2hlYXAuYmxvY2tzW2Js
b2NrXSk7CiAKICAgICAvLyBzd2FwIHdpdGggdGhlIGxhc3QgYmxvY2sgc28gd2UgY29tcGFjdCBh
cyB3ZSBnbwogICAgIG1faGVhcC5ibG9ja3NbYmxvY2tdID0gbV9oZWFwLmJsb2Nrc1ttX2hlYXAu
dXNlZEJsb2NrcyAtIDFdOwpAQCAtMjc5LDMxICsyMzAsMTAgQEAgTkVWRVJfSU5MSU5FIHZvaWQg
SGVhcDo6ZnJlZUJsb2NrKHNpemVfdAogCiAgICAgaWYgKG1faGVhcC5udW1CbG9ja3MgPiBNSU5f
QVJSQVlfU0laRSAmJiBtX2hlYXAudXNlZEJsb2NrcyA8IG1faGVhcC5udW1CbG9ja3MgLyBMT1df
V0FURVJfRkFDVE9SKSB7CiAgICAgICAgIG1faGVhcC5udW1CbG9ja3MgPSBtX2hlYXAubnVtQmxv
Y2tzIC8gR1JPV1RIX0ZBQ1RPUjsgCi0gICAgICAgIG1faGVhcC5ibG9ja3MgPSBzdGF0aWNfY2Fz
dDxDb2xsZWN0b3JCbG9jayoqPihmYXN0UmVhbGxvYyhtX2hlYXAuYmxvY2tzLCBtX2hlYXAubnVt
QmxvY2tzICogc2l6ZW9mKENvbGxlY3RvckJsb2NrKikpKTsKKyAgICAgICAgbV9oZWFwLmJsb2Nr
cyA9IHN0YXRpY19jYXN0PFdURjo6VHlwZWRQYWdlQWxsb2NhdGlvbjxDb2xsZWN0b3JCbG9jaz4q
PihmYXN0UmVhbGxvYyhtX2hlYXAuYmxvY2tzLCBtX2hlYXAubnVtQmxvY2tzICogc2l6ZW9mKFdU
Rjo6VHlwZWRQYWdlQWxsb2NhdGlvbjxDb2xsZWN0b3JCbG9jaz4pKSk7CiAgICAgfQogfQogCi1O
RVZFUl9JTkxJTkUgdm9pZCBIZWFwOjpmcmVlQmxvY2tQdHIoQ29sbGVjdG9yQmxvY2sqIGJsb2Nr
KQotewotI2lmIE9TKERBUldJTikgICAgCi0gICAgdm1fZGVhbGxvY2F0ZShjdXJyZW50X3Rhc2so
KSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KGJsb2NrKSwgQkxPQ0tfU0laRSk7Ci0j
ZWxpZiBPUyhTWU1CSUFOKQotICAgIG1fYmxvY2thbGxvY2F0b3IuZnJlZShyZWludGVycHJldF9j
YXN0PHZvaWQqPihibG9jaykpOwotI2VsaWYgT1MoV0lOQ0UpCi0gICAgVmlydHVhbEZyZWUoYmxv
Y2ssIDAsIE1FTV9SRUxFQVNFKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0jaWYgQ09NUElMRVIoTUlO
R1cpICYmICFDT01QSUxFUihNSU5HVzY0KQotICAgIF9fbWluZ3dfYWxpZ25lZF9mcmVlKGJsb2Nr
KTsKLSNlbHNlCi0gICAgX2FsaWduZWRfZnJlZShibG9jayk7Ci0jZW5kaWYKLSNlbGlmIEhBVkUo
UE9TSVhfTUVNQUxJR04pCi0gICAgZnJlZShibG9jayk7Ci0jZWxzZQotICAgIG11bm1hcChyZWlu
dGVycHJldF9jYXN0PGNoYXIqPihibG9jayksIEJMT0NLX1NJWkUpOwotI2VuZGlmCi19Ci0KIHZv
aWQgSGVhcDo6ZnJlZUJsb2NrcygpCiB7CiAgICAgUHJvdGVjdENvdW50U2V0IHByb3RlY3RlZFZh
bHVlc0NvcHkgPSBtX3Byb3RlY3RlZFZhbHVlczsKQEAgLTMyNyw3ICsyNTcsNyBAQCB2b2lkIEhl
YXA6OmZyZWVCbG9ja3MoKQogICAgICAgICBpdC0+Zmlyc3QtPn5KU0NlbGwoKTsKIAogICAgIGZv
ciAoc2l6ZV90IGJsb2NrID0gMDsgYmxvY2sgPCBtX2hlYXAudXNlZEJsb2NrczsgKytibG9jaykK
LSAgICAgICAgZnJlZUJsb2NrUHRyKG1faGVhcC5ibG9ja3NbYmxvY2tdKTsKKyAgICAgICAgbV9i
bG9ja2FsbG9jYXRvci5mcmVlKG1faGVhcC5ibG9ja3NbYmxvY2tdKTsKIAogICAgIGZhc3RGcmVl
KG1faGVhcC5ibG9ja3MpOwogCkBAIC0zODAsNyArMzEwLDcgQEAgYWxsb2NhdGU6CiAKICAgICBk
byB7CiAgICAgICAgIEFTU0VSVChtX2hlYXAubmV4dEJsb2NrIDwgbV9oZWFwLnVzZWRCbG9ja3Mp
OwotICAgICAgICBCbG9jayogYmxvY2sgPSByZWludGVycHJldF9jYXN0PEJsb2NrKj4obV9oZWFw
LmJsb2Nrc1ttX2hlYXAubmV4dEJsb2NrXSk7CisgICAgICAgIEJsb2NrKiBibG9jayA9IHJlaW50
ZXJwcmV0X2Nhc3Q8QmxvY2sqPihtX2hlYXAuYmxvY2tzW21faGVhcC5uZXh0QmxvY2tdLmdldCgp
KTsKICAgICAgICAgZG8gewogICAgICAgICAgICAgQVNTRVJUKG1faGVhcC5uZXh0Q2VsbCA8IEhl
YXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2spOwogICAgICAgICAgICAgaWYgKCFibG9jay0+bWFy
a2VkLmdldChtX2hlYXAubmV4dENlbGwpKSB7IC8vIEFsd2F5cyBmYWxzZSBmb3IgdGhlIGxhc3Qg
Y2VsbCBpbiB0aGUgYmxvY2sKQEAgLTc0MSw3ICs2NzEsNyBAQCB2b2lkIEhlYXA6Om1hcmtDb25z
ZXJ2YXRpdmVseShNYXJrU3RhY2smCiAgICAgY2hhcioqIHAgPSBzdGF0aWNfY2FzdDxjaGFyKio+
KHN0YXJ0KTsKICAgICBjaGFyKiogZSA9IHN0YXRpY19jYXN0PGNoYXIqKj4oZW5kKTsKIAotICAg
IENvbGxlY3RvckJsb2NrKiogYmxvY2tzID0gbV9oZWFwLmJsb2NrczsKKyAgICBXVEY6OlR5cGVk
UGFnZUFsbG9jYXRpb248Q29sbGVjdG9yQmxvY2s+KiBibG9ja3MgPSBtX2hlYXAuYmxvY2tzOwog
ICAgIHdoaWxlIChwICE9IGUpIHsKICAgICAgICAgY2hhciogeCA9ICpwKys7CiAgICAgICAgIGlm
IChpc1Bvc3NpYmxlQ2VsbCh4KSkgewpAQCAtNzU3LDcgKzY4Nyw3IEBAIHZvaWQgSGVhcDo6bWFy
a0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYKICAgICAgICAgICAgIENvbGxlY3RvckJsb2NrKiBi
bG9ja0FkZHIgPSByZWludGVycHJldF9jYXN0PENvbGxlY3RvckJsb2NrKj4oeEFzQml0cyAtIG9m
ZnNldCk7CiAgICAgICAgICAgICB1c2VkQmxvY2tzID0gbV9oZWFwLnVzZWRCbG9ja3M7CiAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBibG9jayA9IDA7IGJsb2NrIDwgdXNlZEJsb2NrczsgYmxvY2sr
KykgewotICAgICAgICAgICAgICAgIGlmIChibG9ja3NbYmxvY2tdICE9IGJsb2NrQWRkcikKKyAg
ICAgICAgICAgICAgICBpZiAoYmxvY2tzW2Jsb2NrXS5nZXQoKSAhPSBibG9ja0FkZHIpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIG1hcmtTdGFjay5hcHBl
bmQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih4QXNCaXRzKSk7CiAgICAgICAgICAgICAgICAg
bWFya1N0YWNrLmRyYWluKCk7CkBAIC0xMDA5LDcgKzkzOSw3IEBAIHZvaWQgSGVhcDo6Y2xlYXJN
YXJrQml0cygpCiAgICAgICAgIGNsZWFyTWFya0JpdHMobV9oZWFwLmJsb2Nrc1tpXSk7CiB9CiAK
LXZvaWQgSGVhcDo6Y2xlYXJNYXJrQml0cyhDb2xsZWN0b3JCbG9jayogYmxvY2spCit2b2lkIEhl
YXA6OmNsZWFyTWFya0JpdHMoV1RGOjpUeXBlZFBhZ2VBbGxvY2F0aW9uPENvbGxlY3RvckJsb2Nr
PiBibG9jaykKIHsKICAgICAvLyBhbGxvY2F0ZSBhc3N1bWVzIHRoYXQgdGhlIGxhc3QgY2VsbCBp
biBldmVyeSBibG9jayBpcyBtYXJrZWQuCiAgICAgYmxvY2stPm1hcmtlZC5jbGVhckFsbCgpOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5oCShyZXZpc2lvbiA2NDQ2NCkKKysrIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDIx
ICsyNCwyMiBAQAogCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GaXhlZEFycmF5Lmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1BhZ2VBbGxvY2F0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZWRQYWdlQWxs
b2NhdGlvbi5oPgogCiAjaWYgRU5BQkxFKEpTQ19NVUxUSVBMRV9USFJFQURTKQogI2luY2x1ZGUg
PHB0aHJlYWQuaD4KICNlbmRpZgogCi0jaWYgT1MoU1lNQklBTikKLSNpbmNsdWRlIDx3dGYvc3lt
Ymlhbi9CbG9ja0FsbG9jYXRvclN5bWJpYW4uaD4KLSNlbmRpZgorI2luY2x1ZGUgPHd0Zi9CbG9j
a0FsbG9jYXRvci5oPgogCiAjZGVmaW5lIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoY2xhc3Mp
IENPTVBJTEVfQVNTRVJUKHNpemVvZihjbGFzcykgPD0gQ0VMTF9TSVpFLCBjbGFzc19maXRzX2lu
X2NlbGwpCiAKQEAgLTU4LDcgKzU5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IENv
bGxlY3RvckhlYXAgewogICAgICAgICBzaXplX3QgbmV4dEJsb2NrOwogICAgICAgICBzaXplX3Qg
bmV4dENlbGw7Ci0gICAgICAgIENvbGxlY3RvckJsb2NrKiogYmxvY2tzOworICAgICAgICBXVEY6
OlR5cGVkUGFnZUFsbG9jYXRpb248Q29sbGVjdG9yQmxvY2s+KiBibG9ja3M7CiAgICAgICAgIAog
ICAgICAgICB2b2lkKiBuZXh0TnVtYmVyOwogCkBAIC03MSw2ICs3MiwyMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb25JblByb2dyZXNzOwog
ICAgIH07CiAKKyNpZiBPUyhXSU5DRSkgfHwgT1MoU1lNQklBTikKKyAgICBjb25zdCBzaXplX3Qg
QkxPQ0tfU0laRSA9IDY0ICogMTAyNDsgLy8gNjRrCisjZWxzZQorICAgIGNvbnN0IHNpemVfdCBC
TE9DS19TSVpFID0gNjQgKiA0MDk2OyAvLyAyNTZrCisjZW5kaWYKKworLy8gU2V0IHNhbmUgZGVm
YXVsdHMgaWYgLUQ8ZmxhZ25hbWU9dmFsdWU+IHdhc24ndCBwcm92aWRlZCB2aWEgY29tcGlsZXIg
YXJncworI2lmbmRlZiBKU0NDT0xMRUNUT1JfVklSVFVBTE1FTV9SRVNFUlZBVElPTgorI2lmIGRl
ZmluZWQoX19XSU5TX18pCisvLyBFbXVsYXRvciBoYXMgbGltaXRlZCB2aXJ0dWFsIGFkZHJlc3Mg
c3BhY2UKKyNkZWZpbmUgSlNDQ09MTEVDVE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT04gKDQqMTAy
NCoxMDI0KQorI2Vsc2UKKy8vIEhXIGhhcyBwbGVudHkgb2YgdmlydHVhbCBhZGRyZXNzZXMKKyNk
ZWZpbmUgSlNDQ09MTEVDVE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT04gKDEyOCoxMDI0KjEwMjQp
CisjZW5kaWYKKyNlbmRpZgorCiAgICAgY2xhc3MgSGVhcCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
CiAgICAgcHVibGljOgogICAgICAgICBjbGFzcyBUaHJlYWQ7CkBAIC0xMzUsMTUgKzE1MywxNCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGVhcChKU0dsb2JhbERhdGEqKTsKICAgICAgICAg
fkhlYXAoKTsKIAotICAgICAgICBORVZFUl9JTkxJTkUgQ29sbGVjdG9yQmxvY2sqIGFsbG9jYXRl
QmxvY2soKTsKKyAgICAgICAgTkVWRVJfSU5MSU5FIFdURjo6VHlwZWRQYWdlQWxsb2NhdGlvbjxD
b2xsZWN0b3JCbG9jaz4gYWxsb2NhdGVCbG9jaygpOwogICAgICAgICBORVZFUl9JTkxJTkUgdm9p
ZCBmcmVlQmxvY2soc2l6ZV90KTsKLSAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgZnJlZUJsb2Nr
UHRyKENvbGxlY3RvckJsb2NrKik7CiAgICAgICAgIHZvaWQgZnJlZUJsb2NrcygpOwogICAgICAg
ICB2b2lkIHJlc2l6ZUJsb2NrcygpOwogICAgICAgICB2b2lkIGdyb3dCbG9ja3Moc2l6ZV90IG5l
ZWRlZEJsb2Nrcyk7CiAgICAgICAgIHZvaWQgc2hyaW5rQmxvY2tzKHNpemVfdCBuZWVkZWRCbG9j
a3MpOwogICAgICAgICB2b2lkIGNsZWFyTWFya0JpdHMoKTsKLSAgICAgICAgdm9pZCBjbGVhck1h
cmtCaXRzKENvbGxlY3RvckJsb2NrKik7CisgICAgICAgIHZvaWQgY2xlYXJNYXJrQml0cyhXVEY6
OlR5cGVkUGFnZUFsbG9jYXRpb248Q29sbGVjdG9yQmxvY2s+KTsKICAgICAgICAgc2l6ZV90IG1h
cmtlZENlbGxzKHNpemVfdCBzdGFydEJsb2NrID0gMCwgc2l6ZV90IHN0YXJ0Q2VsbCA9IDApIGNv
bnN0OwogCiAgICAgICAgIHZvaWQgcmVjb3JkRXh0cmFDb3N0KHNpemVfdCk7CkBAIC0xNzYsMjEg
KzE5MywxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcHRocmVhZF9rZXlfdCBtX2N1cnJl
bnRUaHJlYWRSZWdpc3RyYXI7CiAjZW5kaWYKIAotI2lmIE9TKFNZTUJJQU4pCiAgICAgICAgIC8v
IEFsbG9jYXRlcyBjb2xsZWN0b3IgYmxvY2tzIHdpdGggY29ycmVjdCBhbGlnbm1lbnQKLSAgICAg
ICAgV1RGOjpBbGlnbmVkQmxvY2tBbGxvY2F0b3IgbV9ibG9ja2FsbG9jYXRvcjsgCisjaWYgSEFW
RShBTElHTkVEX0FMTE9DQVRFKQorICAgICAgICBXVEY6OkFsaWduZWRCbG9ja0FsbG9jYXRvcjxC
TE9DS19TSVpFPiBtX2Jsb2NrYWxsb2NhdG9yOyAKKyNlbHNlCisgICAgICAgIFdURjo6QWxpZ25l
ZEJsb2NrQWxsb2NhdG9yPEJMT0NLX1NJWkUsIEpTQ0NPTExFQ1RPUl9WSVJUVUFMTUVNX1JFU0VS
VkFUSU9OPiBtX2Jsb2NrYWxsb2NhdG9yOyAKICNlbmRpZgogICAgICAgICAKICAgICAgICAgSlNH
bG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAgICAgfTsKIAogICAgIC8vIHR1bmFibGUgcGFyYW1l
dGVycwotI2lmIE9TKFdJTkNFKSB8fCBPUyhTWU1CSUFOKQotICAgIGNvbnN0IHNpemVfdCBCTE9D
S19TSVpFID0gNjQgKiAxMDI0OyAvLyA2NGsKLSNlbHNlCi0gICAgY29uc3Qgc2l6ZV90IEJMT0NL
X1NJWkUgPSA2NCAqIDQwOTY7IC8vIDI1NmsKLSNlbmRpZgotCiAgICAgLy8gZGVyaXZlZCBjb25z
dGFudHMKICAgICBjb25zdCBzaXplX3QgQkxPQ0tfT0ZGU0VUX01BU0sgPSBCTE9DS19TSVpFIC0g
MTsKICAgICBjb25zdCBzaXplX3QgQkxPQ0tfTUFTSyA9IH5CTE9DS19PRkZTRVRfTUFTSzsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9QYWdlQWxsb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3d0Zi9QYWdlQWxsb2NhdGlvbi5oCShyZXZpc2lvbiA2NDQ2NCkKKysrIEph
dmFTY3JpcHRDb3JlL3d0Zi9QYWdlQWxsb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2
ICszOSw1NSBAQAogI2RlZmluZSBQQUdFX0FMTE9DQVRJT05fQUxMT0NBVEVfQVQgMAogI2VuZGlm
CiAKKyNpZiBIQVZFKE1NQVApCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDx1bmlz
dGQuaD4KKyNlbmRpZgorCisjaWYgT1MoREFSV0lOKQorCisjaW5jbHVkZSA8bWFjaC9tYWNoX2lu
aXQuaD4KKyNpbmNsdWRlIDxtYWNoL21hY2hfcG9ydC5oPgorI2luY2x1ZGUgPG1hY2gvdGFzay5o
PgorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2luY2x1ZGUgPG1hY2gvdm1fbWFwLmg+
CisKKyNlbGlmIE9TKFdJTkRPV1MpCisKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDx3
aW5kb3dzLmg+CisKKyNlbGlmIE9TKEhBSUtVKQorCisjaW5jbHVkZSA8T1MuaD4KKworI2VsaWYg
T1MoVU5JWCkKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmICFPUyhIQUlLVSkKKyNpbmNsdWRl
IDxzeXMvbW1hbi5oPgorI2VuZGlmCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZiBPUyhTT0xB
UklTKQorI2luY2x1ZGUgPHRocmVhZC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwdGhyZWFkLmg+Cisj
ZW5kaWYKKworI2lmIEhBVkUoUFRIUkVBRF9OUF9IKQorI2luY2x1ZGUgPHB0aHJlYWRfbnAuaD4K
KyNlbmRpZgorCisjaWYgT1MoUU5YKQorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNu
dGwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9wcm9jZnMuaD4KKyNlbmRp
ZgorCisjZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIFBhZ2VBbGxvY2F0aW9uIHsK
QEAgLTgyLDYgKzEzMSwxMiBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1f
YmFzZTsgfQorI2lmIENPTVBJTEVSKFdJTlNDVykKKyAgICBvcGVyYXRvciBib29sIGNvbnN0IHsg
cmV0dXJuIG1fYmFzZTsgfQorI2Vsc2UKKyAgICB0eXBlZGVmIHZvaWQqIFBhZ2VBbGxvY2F0aW9u
OjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9iYXNlID8gJlBhZ2VBbGxvY2F0aW9uOjptX2Jhc2UgOiAwOyB9
CisjZW5kaWYKIAogICAgIGJvb2wgY29tbWl0KHZvaWQqLCBzaXplX3QsIGJvb2wgd3JpdGFibGUg
PSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSkgY29uc3Q7CiAgICAgdm9pZCBkZWNvbW1p
dCh2b2lkKiwgc2l6ZV90KSBjb25zdDsKQEAgLTkzLDYgKzE0OCwxMiBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhZ2VBbGxvY2F0aW9uIGFsbG9jYXRlQXQodm9pZCogYWRkcmVzcywgYm9vbCBmaXhl
ZCwgc2l6ZV90LCBVc2FnZSA9IFVua25vd25Vc2FnZSwgYm9vbCB3cml0YWJsZSA9IHRydWUsIGJv
b2wgZXhlY3V0YWJsZSA9IGZhbHNlKTsKICAgICBzdGF0aWMgUGFnZUFsbG9jYXRpb24gcmVzZXJ2
ZUF0KHZvaWQqIGFkZHJlc3MsIGJvb2wgZml4ZWQsIHNpemVfdCwgVXNhZ2UgPSBVbmtub3duVXNh
Z2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7CiAjZW5k
aWYKKworI2lmIEhBVkUoQUxJR05FRF9BTExPQ0FURSkKKyAgICBzdGF0aWMgUGFnZUFsbG9jYXRp
b24gYWxsb2NhdGVBbGlnbmVkKHNpemVfdCwgc2l6ZV90LCBVc2FnZSA9IFVua25vd25Vc2FnZSwg
Ym9vbCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNlKTsKKyAgICBzdGF0
aWMgUGFnZUFsbG9jYXRpb24gcmVzZXJ2ZUFsaWduZWQoc2l6ZV90LCBzaXplX3QsIFVzYWdlID0g
VW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFs
c2UpOworI2VuZGlmCisKICAgICBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplKCk7CiAKIHByaXZhdGU6
CkBAIC0xMTgsNiArMTc5LDkzIEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKKyNpZiBIQVZFKEFM
SUdORURfQUxMT0NBVEUpCisKKyNpZiBPUyhEQVJXSU4pCisKK2lubGluZSBQYWdlQWxsb2NhdGlv
biBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVkKHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCBzaXplLCBVc2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIC8v
IGNhbiBhY3R1YWxseSBkbyBhbiBhbGxvY2F0ZUFsaWduZWRBdCBmb3IgZGFyd2luCisgICAgdm1f
YWRkcmVzc190IGFkZHJlc3MgPSAwOworICAgIHZtX3Byb3RfdCBwcm90ZWN0aW9uID0gVk1fUFJP
VF9SRUFEOworICAgIHByb3RlY3Rpb24gfD0gZXhlY3V0YWJsZSA/IFZNX1BST1RfRVhFQ1VURSA6
IDA7CisgICAgcHJvdGVjdGlvbiB8PSB3cml0YWJsZSA/IFZNX1BST1RfV1JJVEUgOiAwOworICAg
IHZtX21hcChjdXJyZW50X3Rhc2soKSwgJmFkZHJlc3MsIHNpemUsIChhbGlnbm1lbnQgLSAxKSwg
Vk1fRkxBR1NfQU5ZV0hFUkUgfCBWTV9UQUdfRk9SX0NPTExFQ1RPUl9NRU1PUlksIE1FTU9SWV9P
QkpFQ1RfTlVMTCwgMCwgRkFMU0UsIHByb3RlY3Rpb24sIHByb3RlY3Rpb24sIFZNX0lOSEVSSVRf
REVGQVVMVCk7CisgICAgcmV0dXJuIFBhZ2VBbGxvY2F0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGFkZHJlc3MpLCBzaXplKTsKK30KKworI2VsaWYgT1MoV0lOQ0UpCisKK2lubGluZSBQYWdl
QWxsb2NhdGlvbiBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVkKHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRh
YmxlKQoreworICAgIC8vIHRoaXMgaXNuJ3QgcmVhbGx5IGFsaWduZWQgdG8gYWxpZ25tZW50LCBp
dCdzIG9ubHkgYWxpZ25lZCB0byBzaXplCisgICAgcmV0dXJuIFBhZ2VBbGxvY2F0aW9uKFZpcnR1
YWxBbGxvYygwLCBzaXplLCBNRU1fQ09NTUlUIHwgTUVNX1JFU0VSVkUsIHByb3RlY3Rpb24od3Jp
dGFibGUsIGV4ZWN1dGFibGUpKSwgc2l6ZSk7Cit9CisKKyNlbGlmIE9TKFdJTkRPV1MpCisKK2lu
bGluZSBQYWdlQWxsb2NhdGlvbiBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVkKHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9v
bCBleGVjdXRhYmxlKQoreworICAgIEFTU0VSVCh3cml0YWJsZSAmJiAhZXhlY3V0YWJsZSk7Cisj
aWYgQ09NUElMRVIoTUlOR1cpICYmICFDT01QSUxFUihNSU5HVzY0KQorICAgIHZvaWQqIGFkZHJl
c3MgPSBfX21pbmd3X2FsaWduZWRfbWFsbG9jKHNpemUsIGFsaWdubWVudCk7CisjZWxzZQorICAg
IHZvaWQqIGFkZHJlc3MgPSBfYWxpZ25lZF9tYWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKKyNlbmRp
ZgorICAgIG1lbXNldChhZGRyZXNzLCAwLCBzaXplKTsKKyAgICByZXR1cm4gUGFnZUFsbG9jYXRp
b24oYWRkcmVzcywgc2l6ZSk7Cit9CisKKyNlbHNlCisKK2lubGluZSBQYWdlQWxsb2NhdGlvbiBQ
YWdlQWxsb2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVkKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBz
aXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAg
IEFTU0VSVCghKGFsaWdubWVudCAmIChhbGlnbm1lbnQgLSAxKSkpOworICAgIEFTU0VSVCh3cml0
YWJsZSAmJiAhZXhlY3V0YWJsZSk7CisgICAgc3RhdGljIHNpemVfdCBwYWdlc2l6ZSA9IGdldHBh
Z2VzaXplKCk7CisKKyAgICBzaXplX3QgZXh0cmEgPSAwOworICAgIGlmIChzaXplID4gcGFnZXNp
emUpCisgICAgICAgIGV4dHJhID0gc2l6ZSAtIHBhZ2VzaXplOworCisgICAgaW50IGZsYWdzID0g
TUFQX1BSSVZBVEUgfCBNQVBfQU5PTjsKKworICAgIGludCBwcm90ZWN0aW9uID0gUFJPVF9SRUFE
OworICAgIGlmICh3cml0YWJsZSkKKyAgICAgICAgcHJvdGVjdGlvbiB8PSBQUk9UX1dSSVRFOwor
ICAgIGlmIChleGVjdXRhYmxlKQorICAgICAgICBwcm90ZWN0aW9uIHw9IFBST1RfRVhFQzsKKwor
ICAgIHZvaWQqIG1tYXBSZXN1bHQgPSBtbWFwKDAsIHNpemUgKyBleHRyYSwgcHJvdGVjdGlvbiwg
ZmxhZ3MsIHVzYWdlLCAwKTsKKyAgICB1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihtbWFwUmVzdWx0KTsKKworICAgIHNpemVfdCBhZGp1c3QgPSAwOworICAg
IGlmICgoYWRkcmVzcyAmIChhbGlnbm1lbnQgLSAxKSkpCisgICAgICAgIGFkanVzdCA9IHNpemUg
LSAoYWRkcmVzcyAmIChhbGlnbm1lbnQgLSAxKSk7CisKKyAgICBpZiAoYWRqdXN0ID4gMCkKKyAg
ICAgICAgbXVubWFwKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFkZHJlc3MpLCBhZGp1c3QpOwor
CisgICAgaWYgKGFkanVzdCA8IGV4dHJhKQorICAgICAgICBtdW5tYXAocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oYWRkcmVzcyArIGFkanVzdCArIHNpemUpLCBleHRyYSAtIGFkanVzdCk7CisKKyAg
ICBhZGRyZXNzICs9IGFkanVzdDsKKworICAgIHJldHVybiBQYWdlQWxsb2NhdGlvbihyZWludGVy
cHJldF9jYXN0PHZvaWQqPihhZGRyZXNzKSwgc2l6ZSk7Cit9CisKKyNlbmRpZgorCitpbmxpbmUg
UGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246OnJlc2VydmVBbGlnbmVkKHNpemVfdCBhbGln
bm1lbnQsIHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVj
dXRhYmxlKQoreworICAgIFBhZ2VBbGxvY2F0aW9uIHJlc3VsdCA9IGFsbG9jYXRlQWxpZ25lZChh
bGlnbm1lbnQsIHNpemUsIHVzYWdlLCB3cml0YWJsZSwgZXhlY3V0YWJsZSk7CisgICAgaWYgKCEh
cmVzdWx0KQorICAgICAgICByZXN1bHQuZGVjb21taXQocmVzdWx0LmJhc2UoKSwgc2l6ZSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2VuZGlmCisKIH0KIAogdXNpbmcgV1RGOjpQYWdlQWxs
b2NhdGlvbjsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA2NDQ2NCkKKysrIEph
dmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MDcsNiArNzA3
LDcgQEAKICNkZWZpbmUgSEFWRV9FUlJOT19IIDEKICNkZWZpbmUgSEFWRV9MQU5HSU5GT19IIDEK
ICNkZWZpbmUgSEFWRV9NTUFQIDEKKyNkZWZpbmUgSEFWRV9BTElHTkVEX0FMTE9DQVRFIDEKICNk
ZWZpbmUgSEFWRV9NRVJHRVNPUlQgMQogI2RlZmluZSBIQVZFX1NCUksgMQogI2RlZmluZSBIQVZF
X1NUUklOR1NfSCAxCkBAIC03MzksNiArNzQwLDcgQEAKICNkZWZpbmUgSEFWRV9TWVNfVElNRUJf
SCAxCiAjZW5kaWYKICNkZWZpbmUgSEFWRV9WSVJUVUFMQUxMT0MgMQorI2RlZmluZSBIQVZFX0FM
SUdORURfQUxMT0NBVEUgMQogCiAjZWxpZiBPUyhTWU1CSUFOKQogCkBAIC03OTMsNiArNzk1LDE0
IEBACiAKICNlbmRpZgogCisjaWYgIWRlZmluZWQoSEFWRV9BTElHTkVEX0FMTE9DQVRFKQorI2lm
IEhBVkUoUE9TSVhfTUVNQUxJR04pCisjZGVmaW5lIEhBVkVfQUxJR05FRF9BTExPQ0FURSAxCisj
ZWxzZQorI2RlZmluZSBIQVZFX0FMSUdORURfQUxMT0NBVEUgMAorI2VuZGlmCisjZW5kaWYKKwog
LyogRU5BQkxFIG1hY3JvIGRlZmF1bHRzICovCiAKICNpZiBQTEFURk9STShRVCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63235</attachid>
            <date>2010-08-02 10:50:40 -0700</date>
            <delta_ts>2010-08-03 12:15:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>heap-pageAlloc.patch</filename>
            <type>text/plain</type>
            <size>35527</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0NDY0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTAtMDgtMDIgIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQzMjY5CisKKyAgICAgICAgQWRkZWQgbmV3IGFsbG9jYXRlQWxpZ25lZCBtZXRob2Rz
IHRvIFBhZ2VBbGxvY2F0aW9uLiAgSW4gb3JkZXIgdG8KKyAgICAgICAgcHJldmVudCBhIHJlZ3Jl
c3MgaW4gcGVyZm9ybWFuY2UsIHRoZSBmdW5jdGlvbiBuZWVkcyB0byBiZSBpbmxpbmVkLgorCisg
ICAgICAgIEFkZGl0aW9uYWxseSwgSSBwb3J0ZWQgdGhlIHN5bWJpYW4gYmxvY2sgYWxsb2NhdG9y
IHRvIHVzZQorICAgICAgICBQYWdlQWxsb2NhdGlvbiBhbmQgYWRkZWQgYSBuZXcgV1RGOjpCaXRt
YXAgY2xhc3MgdG8gc3VwcG9ydCB0aGlzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBydW50aW1lL0NvbGxlY3Rvci5jcHA6
CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpkZXN0cm95
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdGVCbG9jayk6CisgICAgICAgIChKU0M6Okhl
YXA6OmZyZWVCbG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6OmZyZWVCbG9ja3MpOgorICAgICAg
ICAoSlNDOjpIZWFwOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtDb25zZXJ2
YXRpdmVseSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNsZWFyTWFya0JpdHMpOgorICAgICAgICAq
IHJ1bnRpbWUvQ29sbGVjdG9yLmg6CisgICAgICAgICogd3RmL0JpdG1hcC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6OjpnZXQpOgorICAgICAgICAoV1RGOjo6OnNldCk6CisgICAgICAgIChXVEY6
Ojo6Y2xlYXIpOgorICAgICAgICAoV1RGOjo6OmNsZWFyQWxsKToKKyAgICAgICAgKFdURjo6Ojph
ZHZhbmNlVG9OZXh0RnJlZUJpdCk6CisgICAgICAgIChXVEY6Ojo6Y291bnQpOgorICAgICAgICAo
V1RGOjo6OmlzRW1wdHkpOgorICAgICAgICAoV1RGOjo6OmlzRnVsbCk6CisgICAgICAgICogd3Rm
L0Jsb2NrQWxsb2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjo6OmRlc3Ryb3kpOgorICAg
ICAgICAoV1RGOjo6OmFsbG9jYXRlKToKKyAgICAgICAgKFdURjo6OjpmcmVlKToKKyAgICAgICAg
KFdURjo6OjpBbGlnbmVkQmxvY2tBbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjo6On5BbGlnbmVk
QmxvY2tBbGxvY2F0b3IpOgorICAgICAgICAqIHd0Zi9QYWdlQWxsb2NhdGlvbi5oOgorICAgICAg
ICAoV1RGOjpQYWdlQWxsb2NhdGlvbjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSk6Cisg
ICAgICAgIChXVEY6OlBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZUFsaWduZWQpOgorICAgICAgICAo
V1RGOjpQYWdlQWxsb2NhdGlvbjo6cmVzZXJ2ZUFsaWduZWQpOgorICAgICAgICAqIHd0Zi9QbGF0
Zm9ybS5oOgorCiAyMDEwLTA4LTAyICBNYWhlc2ggS3Vsa2FybmkgIDxtYWhlc2gua3Vsa2FybmlA
bm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDog
SmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDY0NDY0KQorKysgSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQwOSw2ICs0MDksOCBAQCBqYXZhc2NyaXB0
Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvQXNzZXJ0aW9ucy5oIFwKIAlK
YXZhU2NyaXB0Q29yZS93dGYvQXRvbWljcy5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvQVZMVHJl
ZS5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYvQml0bWFwLmggXAorCUphdmFTY3JpcHRDb3JlL3d0
Zi9CbG9ja0FsbG9jYXRvci5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvQnVtcFBvaW50ZXJBbGxv
Y2F0b3IuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL0J5dGVBcnJheS5jcHAgXAogCUphdmFTY3Jp
cHRDb3JlL3d0Zi9CeXRlQXJyYXkuaCBcCkBAIC01MDMsNiArNTA1LDcgQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNw
cCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZFNhZmVTaGFyZWQuaCBcCiAJSmF2YVNjcmlw
dENvcmUvd3RmL1RocmVhZFNwZWNpZmljLmggXAorCUphdmFTY3JpcHRDb3JlL3d0Zi9UeXBlZFBh
Z2VBbGxvY2F0aW9uLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9UeXBlVHJhaXRzLmNwcCBcCiAJ
SmF2YVNjcmlwdENvcmUvd3RmL1R5cGVUcmFpdHMuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL3Vu
aWNvZGUvQ29sbGF0b3JEZWZhdWx0LmNwcCBcCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lmd5cGkJKHJldmlzaW9uIDY0NDY0KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDYgKzM0OCw4IEBACiAgICAgICAgICAgICAnd3Rm
L0Fzc2VydGlvbnMuaCcsCiAgICAgICAgICAgICAnd3RmL0F0b21pY3MuaCcsCiAgICAgICAgICAg
ICAnd3RmL0FWTFRyZWUuaCcsCisgICAgICAgICAgICAnd3RmL0JpdG1hcC5oJywKKyAgICAgICAg
ICAgICd3dGYvQmxvY2tBbGxvY2F0b3IuaCcsCiAgICAgICAgICAgICAnd3RmL0J5dGVBcnJheS5j
cHAnLAogICAgICAgICAgICAgJ3d0Zi9CeXRlQXJyYXkuaCcsCiAgICAgICAgICAgICAnd3RmL2No
cm9taXVtL0Nocm9taXVtVGhyZWFkaW5nLmgnLApAQCAtNDM0LDYgKzQzNiw3IEBACiAgICAgICAg
ICAgICAnd3RmL1RocmVhZFNhZmVTaGFyZWQuaCcsCiAgICAgICAgICAgICAnd3RmL1RocmVhZFNw
ZWNpZmljLmgnLAogICAgICAgICAgICAgJ3d0Zi9UaHJlYWRTcGVjaWZpY1dpbi5jcHAnLAorICAg
ICAgICAgICAgJ3d0Zi9UeXBlZFBhZ2VBbGxvY2F0aW9uLmgnLAogICAgICAgICAgICAgJ3d0Zi9U
eXBlVHJhaXRzLmNwcCcsCiAgICAgICAgICAgICAnd3RmL1R5cGVUcmFpdHMuaCcsCiAgICAgICAg
ICAgICAnd3RmL3RleHQvQXRvbWljU3RyaW5nLmNwcCcsCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDY0NDY0KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTA4LDYgKzUwOCwxMCBAQAogCQlC
Q0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAv
KiBKdW1wVGFibGUuY3BwICovOyB9OwogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVt
cFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IH07CiAJCUMwQTI3MjYz
MEU1MEEwNjMwMEU5NkUxNSAvKiBOb3RGb3VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzBBMjcyM0YwRTUwOUYxRTAwRTk2RTE1IC8qIE5vdEZvdW5k
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJREQz
NzdDQkMxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREQzNzdDQkIxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1h
cC5oICovOyB9OworCQlERDY5Q0Q5RjEyMDI0NkRFMDAwNTVBQzcgLyogQmxvY2tBbGxvY2F0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERENjlDRDlE
MTIwMjQ2REUwMDA1NUFDNyAvKiBCbG9ja0FsbG9jYXRvci5oICovOyB9OworCQlERDhDNjc2QzEy
MDczQzg3MDBDQjU0RDYgLyogVHlwZWRQYWdlQWxsb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREQ4QzY3NkIxMjA3M0M4NzAwQ0I1NEQ2IC8q
IFR5cGVkUGFnZUFsbG9jYXRpb24uaCAqLzsgfTsKKwkJREQ4QzY3NkQxMjA3M0M4NzAwQ0I1NEQ2
IC8qIFR5cGVkUGFnZUFsbG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEREOEM2NzZCMTIwNzNDODcwMENCNTRENiAvKiBUeXBlZFBhZ2VBbGxv
Y2F0aW9uLmggKi87IH07CiAJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0
cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEy
NEE4RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4RjgwRTU1NTc3NTAwMzA5
MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY2MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmlu
Zy5jcHAgKi87IH07CiAJCUUxNzg2MzZEMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhy
ZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLzsg
fTsKQEAgLTEwNDksNiArMTA1Myw5IEBACiAJCUMwQTI3MjNGMEU1MDlGMUUwMEU5NkUxNSAvKiBO
b3RGb3VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb3RGb3VuZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyODBBRDQzMTBDMDBFRDc5QjYgLyog
RGF0ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERhdGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAy
MjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlERDM3N0NCQjEyMDcyQzE4MDA2QTI1MTcgLyogQml0bWFwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpdG1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlERDY5Q0Q5RDEyMDI0NkRFMDAwNTVBQzcgLyogQmxvY2tBbGxvY2F0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvY2tBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJREQ4QzY3NkIxMjA3M0M4NzAwQ0I1NEQ2IC8qIFR5cGVkUGFnZUFs
bG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRQYWdlQWxs
b2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTFENTE3NTBCMkU3OThE
MDA1NkMxODggLyogU3RyaW5nRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0cmluZ0V4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTI0QThG
NTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gT3BhcXVlSlNTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wYXF1ZUpTU3RyaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MDYsNiArMTQxMyw4IEBACiAJCQkJNjVFMjE3
QjcwOEU3RUVDQzAwMjNFNUY2IC8qIEFzc2VydGlvbnMuaCAqLywKIAkJCQlCQzVGN0JCQjExODIz
QjU5MDA1MkMwMkMgLyogQXRvbWljcy5oICovLAogCQkJCUUxQTU5NjM3MERFM0UxQzMwMEMxN0Uz
NyAvKiBBVkxUcmVlLmggKi8sCisJCQkJREQzNzdDQkIxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1h
cC5oICovLAorCQkJCURENjlDRDlEMTIwMjQ2REUwMDA1NUFDNyAvKiBCbG9ja0FsbG9jYXRvci5o
ICovLAogCQkJCTg2Njc2RDREMTFGRUQ1NUQwMDRCNjg2MyAvKiBCdW1wUG9pbnRlckFsbG9jYXRv
ci5oICovLAogCQkJCUE3QTFGN0FBMEYyNTJCM0MwMEUxODRFMiAvKiBCeXRlQXJyYXkuY3BwICov
LAogCQkJCUE3QTFGN0FCMEYyNTJCM0MwMEUxODRFMiAvKiBCeXRlQXJyYXkuaCAqLywKQEAgLTE0
ODIsNiArMTQ5MSw3IEBACiAJCQkJRTFFRTc5M0MwRDZDOUI5MjAwRkVBM0JBIC8qIFRocmVhZGlu
Z1B0aHJlYWRzLmNwcCAqLywKIAkJCQlCQzVGN0JCRDExODIzQjU5MDA1MkMwMkMgLyogVGhyZWFk
U2FmZVNoYXJlZC5oICovLAogCQkJCUUxQjdDOEJEMERBM0EzMzYwMDc0QjBEQyAvKiBUaHJlYWRT
cGVjaWZpYy5oICovLAorCQkJCUREOEM2NzZCMTIwNzNDODcwMENCNTRENiAvKiBUeXBlZFBhZ2VB
bGxvY2F0aW9uLmggKi8sCiAJCQkJMEIzMzBDMjYwRjM4QzYyMzAwNjkyREUzIC8qIFR5cGVUcmFp
dHMuY3BwICovLAogCQkJCTBCNEQ3RTYyMEYzMTlBQzgwMEFEN0U1OCAvKiBUeXBlVHJhaXRzLmgg
Ki8sCiAJCQkJOTM1QUY0NkIwOUU5RDlEQjAwQUNEMUQ4IC8qIFVudXNlZFBhcmFtLmggKi8sCkBA
IC0xODk1LDYgKzE5MDUsNyBAQAogCQkJCTE0NDAwNzU3MEE1MzcwRDIwMDA1RjA2MSAvKiBKU05v
ZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQwMDVDQzBBNTMzOEY4MDAwNUYwNjEgLyog
Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MDA3NEEwQTUzNkNDMjAwMDVGMDYxIC8qIE5v
ZGVMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlERDhDNjc2QzEyMDczQzg3MDBDQjU0RDYgLyog
VHlwZWRQYWdlQWxsb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMTkzLDYgKzIyMDQsOSBA
QAogCQkJCTg2OEJGQTE4MTE3Q0YxOTkwMEI5MDhCMSAvKiBXVEZTdHJpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2RDA4RDU0MTE3OTM2MTMwMDZFNUVEMCAvKiBXVEZUaHJlYWREYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5Njg4Q0IxNjBFRDEyQjRFMDAxRDY0OUYgLyogWDg2QXNzZW1ibGVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQlERDY5Q0Q5RjEyMDI0NkRFMDAwNTVBQzcgLyogQmxvY2tB
bGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUREMzc3Q0JDMTIwNzJDMTgwMDZBMjUxNyAv
KiBCaXRtYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCUREOEM2NzZEMTIwNzNDODcwMENCNTRENiAv
KiBUeXBlZFBhZ2VBbGxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDY0NDY0KQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsOSArMTM1LDYgQEAg
SGVhcDo6SGVhcChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgLCBtX3JlZ2lzdGVyZWRU
aHJlYWRzKDApCiAgICAgLCBtX2N1cnJlbnRUaHJlYWRSZWdpc3RyYXIoMCkKICNlbmRpZgotI2lm
IE9TKFNZTUJJQU4pCi0gICAgLCBtX2Jsb2NrYWxsb2NhdG9yKEpTQ0NPTExFQ1RPUl9WSVJUVUFM
TUVNX1JFU0VSVkFUSU9OLCBCTE9DS19TSVpFKQotI2VuZGlmCiAgICAgLCBtX2dsb2JhbERhdGEo
Z2xvYmFsRGF0YSkKIHsKICAgICBBU1NFUlQoZ2xvYmFsRGF0YSk7CkBAIC0xODMsNjMgKzE4MCwx
NiBAQCB2b2lkIEhlYXA6OmRlc3Ryb3koKQogICAgICAgICB0ID0gbmV4dDsKICAgICB9CiAjZW5k
aWYKLSNpZiBPUyhTWU1CSUFOKQogICAgIG1fYmxvY2thbGxvY2F0b3IuZGVzdHJveSgpOwotI2Vu
ZGlmCiAgICAgbV9nbG9iYWxEYXRhID0gMDsKIH0KIAotTkVWRVJfSU5MSU5FIENvbGxlY3RvckJs
b2NrKiBIZWFwOjphbGxvY2F0ZUJsb2NrKCkKK05FVkVSX0lOTElORSBXVEY6OlR5cGVkUGFnZUFs
bG9jYXRpb248Q29sbGVjdG9yQmxvY2s+IEhlYXA6OmFsbG9jYXRlQmxvY2soKQogewotI2lmIE9T
KERBUldJTikKLSAgICB2bV9hZGRyZXNzX3QgYWRkcmVzcyA9IDA7Ci0gICAgdm1fbWFwKGN1cnJl
bnRfdGFzaygpLCAmYWRkcmVzcywgQkxPQ0tfU0laRSwgQkxPQ0tfT0ZGU0VUX01BU0ssIFZNX0ZM
QUdTX0FOWVdIRVJFIHwgVk1fVEFHX0ZPUl9DT0xMRUNUT1JfTUVNT1JZLCBNRU1PUllfT0JKRUNU
X05VTEwsIDAsIEZBTFNFLCBWTV9QUk9UX0RFRkFVTFQsIFZNX1BST1RfREVGQVVMVCwgVk1fSU5I
RVJJVF9ERUZBVUxUKTsKLSNlbGlmIE9TKFNZTUJJQU4pCi0gICAgdm9pZCogYWRkcmVzcyA9IG1f
YmxvY2thbGxvY2F0b3IuYWxsb2MoKTsgIAotICAgIGlmICghYWRkcmVzcykKLSAgICAgICAgQ1JB
U0goKTsKLSNlbGlmIE9TKFdJTkNFKQotICAgIHZvaWQqIGFkZHJlc3MgPSBWaXJ0dWFsQWxsb2Mo
TlVMTCwgQkxPQ0tfU0laRSwgTUVNX0NPTU1JVCB8IE1FTV9SRVNFUlZFLCBQQUdFX1JFQURXUklU
RSk7Ci0jZWxpZiBPUyhXSU5ET1dTKQotI2lmIENPTVBJTEVSKE1JTkdXKSAmJiAhQ09NUElMRVIo
TUlOR1c2NCkKLSAgICB2b2lkKiBhZGRyZXNzID0gX19taW5nd19hbGlnbmVkX21hbGxvYyhCTE9D
S19TSVpFLCBCTE9DS19TSVpFKTsKLSNlbHNlCi0gICAgdm9pZCogYWRkcmVzcyA9IF9hbGlnbmVk
X21hbGxvYyhCTE9DS19TSVpFLCBCTE9DS19TSVpFKTsKLSNlbmRpZgotICAgIG1lbXNldChhZGRy
ZXNzLCAwLCBCTE9DS19TSVpFKTsKLSNlbGlmIEhBVkUoUE9TSVhfTUVNQUxJR04pCi0gICAgdm9p
ZCogYWRkcmVzczsKLSAgICBwb3NpeF9tZW1hbGlnbigmYWRkcmVzcywgQkxPQ0tfU0laRSwgQkxP
Q0tfU0laRSk7Ci0jZWxzZQotCi0jaWYgRU5BQkxFKEpTQ19NVUxUSVBMRV9USFJFQURTKQotI2Vy
cm9yIE5lZWQgdG8gaW5pdGlhbGl6ZSBwYWdlc2l6ZSBzYWZlbHkuCi0jZW5kaWYKLSAgICBzdGF0
aWMgc2l6ZV90IHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKLQotICAgIHNpemVfdCBleHRyYSA9
IDA7Ci0gICAgaWYgKEJMT0NLX1NJWkUgPiBwYWdlc2l6ZSkKLSAgICAgICAgZXh0cmEgPSBCTE9D
S19TSVpFIC0gcGFnZXNpemU7Ci0KLSAgICB2b2lkKiBtbWFwUmVzdWx0ID0gbW1hcChOVUxMLCBC
TE9DS19TSVpFICsgZXh0cmEsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwg
TUFQX0FOT04sIC0xLCAwKTsKLSAgICB1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihtbWFwUmVzdWx0KTsKLQotICAgIHNpemVfdCBhZGp1c3QgPSAwOwotICAg
IGlmICgoYWRkcmVzcyAmIEJMT0NLX09GRlNFVF9NQVNLKSAhPSAwKQotICAgICAgICBhZGp1c3Qg
PSBCTE9DS19TSVpFIC0gKGFkZHJlc3MgJiBCTE9DS19PRkZTRVRfTUFTSyk7Ci0KLSAgICBpZiAo
YWRqdXN0ID4gMCkKLSAgICAgICAgbXVubWFwKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFkZHJl
c3MpLCBhZGp1c3QpOwotCi0gICAgaWYgKGFkanVzdCA8IGV4dHJhKQotICAgICAgICBtdW5tYXAo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYWRkcmVzcyArIGFkanVzdCArIEJMT0NLX1NJWkUpLCBl
eHRyYSAtIGFkanVzdCk7Ci0KLSAgICBhZGRyZXNzICs9IGFkanVzdDsKLSNlbmRpZgorICAgIFdU
Rjo6VHlwZWRQYWdlQWxsb2NhdGlvbjxDb2xsZWN0b3JCbG9jaz4gYmxvY2sobV9ibG9ja2FsbG9j
YXRvci5hbGxvY2F0ZSgpKTsKIAogICAgIC8vIEluaXRpYWxpemUgYmxvY2suCiAKLSAgICBDb2xs
ZWN0b3JCbG9jayogYmxvY2sgPSByZWludGVycHJldF9jYXN0PENvbGxlY3RvckJsb2NrKj4oYWRk
cmVzcyk7CiAgICAgYmxvY2stPmhlYXAgPSB0aGlzOwogICAgIGNsZWFyTWFya0JpdHMoYmxvY2sp
OwogCkBAIC0yNTEsMTQgKzIwMSwxNSBAQCBORVZFUl9JTkxJTkUgQ29sbGVjdG9yQmxvY2sqIEhl
YXA6OmFsbG9jCiAKICAgICBzaXplX3QgbnVtQmxvY2tzID0gbV9oZWFwLm51bUJsb2NrczsKICAg
ICBpZiAobV9oZWFwLnVzZWRCbG9ja3MgPT0gbnVtQmxvY2tzKSB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgbWF4TnVtQmxvY2tzID0gVUxPTkdfTUFYIC8gc2l6ZW9mKENvbGxlY3RvckJs
b2NrKikgLyBHUk9XVEhfRkFDVE9SOworICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heE51
bUJsb2NrcyA9IFVMT05HX01BWCAvIHNpemVvZihXVEY6OlR5cGVkUGFnZUFsbG9jYXRpb248Q29s
bGVjdG9yQmxvY2s+KSAvIEdST1dUSF9GQUNUT1I7CiAgICAgICAgIGlmIChudW1CbG9ja3MgPiBt
YXhOdW1CbG9ja3MpCiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICBudW1CbG9ja3MgPSBt
YXgoTUlOX0FSUkFZX1NJWkUsIG51bUJsb2NrcyAqIEdST1dUSF9GQUNUT1IpOwogICAgICAgICBt
X2hlYXAubnVtQmxvY2tzID0gbnVtQmxvY2tzOwotICAgICAgICBtX2hlYXAuYmxvY2tzID0gc3Rh
dGljX2Nhc3Q8Q29sbGVjdG9yQmxvY2sqKj4oZmFzdFJlYWxsb2MobV9oZWFwLmJsb2NrcywgbnVt
QmxvY2tzICogc2l6ZW9mKENvbGxlY3RvckJsb2NrKikpKTsKKyAgICAgICAgbV9oZWFwLmJsb2Nr
cyA9IHN0YXRpY19jYXN0PFdURjo6VHlwZWRQYWdlQWxsb2NhdGlvbjxDb2xsZWN0b3JCbG9jaz4q
PihmYXN0UmVhbGxvYyhtX2hlYXAuYmxvY2tzLCBudW1CbG9ja3MgKiBzaXplb2YoV1RGOjpUeXBl
ZFBhZ2VBbGxvY2F0aW9uPENvbGxlY3RvckJsb2NrPikpKTsKICAgICB9Ci0gICAgbV9oZWFwLmJs
b2Nrc1ttX2hlYXAudXNlZEJsb2NrcysrXSA9IGJsb2NrOworICAgIG1faGVhcC5ibG9ja3NbbV9o
ZWFwLnVzZWRCbG9ja3NdID0gYmxvY2s7CisgICAgbV9oZWFwLnVzZWRCbG9ja3MrKzsKIAogICAg
IHJldHVybiBibG9jazsKIH0KQEAgLTI3MSw3ICsyMjIsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBI
ZWFwOjpmcmVlQmxvY2soc2l6ZV90CiAgICAgT2JqZWN0SXRlcmF0b3IgZW5kKG1faGVhcCwgYmxv
Y2sgKyAxKTsKICAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgKCppdCktPn5K
U0NlbGwoKTsKLSAgICBmcmVlQmxvY2tQdHIobV9oZWFwLmJsb2Nrc1tibG9ja10pOworICAgIG1f
YmxvY2thbGxvY2F0b3IuZnJlZShtX2hlYXAuYmxvY2tzW2Jsb2NrXSk7CiAKICAgICAvLyBzd2Fw
IHdpdGggdGhlIGxhc3QgYmxvY2sgc28gd2UgY29tcGFjdCBhcyB3ZSBnbwogICAgIG1faGVhcC5i
bG9ja3NbYmxvY2tdID0gbV9oZWFwLmJsb2Nrc1ttX2hlYXAudXNlZEJsb2NrcyAtIDFdOwpAQCAt
Mjc5LDMxICsyMzAsMTAgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSGVhcDo6ZnJlZUJsb2NrKHNpemVf
dAogCiAgICAgaWYgKG1faGVhcC5udW1CbG9ja3MgPiBNSU5fQVJSQVlfU0laRSAmJiBtX2hlYXAu
dXNlZEJsb2NrcyA8IG1faGVhcC5udW1CbG9ja3MgLyBMT1dfV0FURVJfRkFDVE9SKSB7CiAgICAg
ICAgIG1faGVhcC5udW1CbG9ja3MgPSBtX2hlYXAubnVtQmxvY2tzIC8gR1JPV1RIX0ZBQ1RPUjsg
Ci0gICAgICAgIG1faGVhcC5ibG9ja3MgPSBzdGF0aWNfY2FzdDxDb2xsZWN0b3JCbG9jayoqPihm
YXN0UmVhbGxvYyhtX2hlYXAuYmxvY2tzLCBtX2hlYXAubnVtQmxvY2tzICogc2l6ZW9mKENvbGxl
Y3RvckJsb2NrKikpKTsKKyAgICAgICAgbV9oZWFwLmJsb2NrcyA9IHN0YXRpY19jYXN0PFdURjo6
VHlwZWRQYWdlQWxsb2NhdGlvbjxDb2xsZWN0b3JCbG9jaz4qPihmYXN0UmVhbGxvYyhtX2hlYXAu
YmxvY2tzLCBtX2hlYXAubnVtQmxvY2tzICogc2l6ZW9mKFdURjo6VHlwZWRQYWdlQWxsb2NhdGlv
bjxDb2xsZWN0b3JCbG9jaz4pKSk7CiAgICAgfQogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBIZWFw
OjpmcmVlQmxvY2tQdHIoQ29sbGVjdG9yQmxvY2sqIGJsb2NrKQotewotI2lmIE9TKERBUldJTikg
ICAgCi0gICAgdm1fZGVhbGxvY2F0ZShjdXJyZW50X3Rhc2soKSwgcmVpbnRlcnByZXRfY2FzdDx2
bV9hZGRyZXNzX3Q+KGJsb2NrKSwgQkxPQ0tfU0laRSk7Ci0jZWxpZiBPUyhTWU1CSUFOKQotICAg
IG1fYmxvY2thbGxvY2F0b3IuZnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihibG9jaykpOwot
I2VsaWYgT1MoV0lOQ0UpCi0gICAgVmlydHVhbEZyZWUoYmxvY2ssIDAsIE1FTV9SRUxFQVNFKTsK
LSNlbGlmIE9TKFdJTkRPV1MpCi0jaWYgQ09NUElMRVIoTUlOR1cpICYmICFDT01QSUxFUihNSU5H
VzY0KQotICAgIF9fbWluZ3dfYWxpZ25lZF9mcmVlKGJsb2NrKTsKLSNlbHNlCi0gICAgX2FsaWdu
ZWRfZnJlZShibG9jayk7Ci0jZW5kaWYKLSNlbGlmIEhBVkUoUE9TSVhfTUVNQUxJR04pCi0gICAg
ZnJlZShibG9jayk7Ci0jZWxzZQotICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PGNoYXIqPihi
bG9jayksIEJMT0NLX1NJWkUpOwotI2VuZGlmCi19Ci0KIHZvaWQgSGVhcDo6ZnJlZUJsb2Nrcygp
CiB7CiAgICAgUHJvdGVjdENvdW50U2V0IHByb3RlY3RlZFZhbHVlc0NvcHkgPSBtX3Byb3RlY3Rl
ZFZhbHVlczsKQEAgLTMyNyw3ICsyNTcsNyBAQCB2b2lkIEhlYXA6OmZyZWVCbG9ja3MoKQogICAg
ICAgICBpdC0+Zmlyc3QtPn5KU0NlbGwoKTsKIAogICAgIGZvciAoc2l6ZV90IGJsb2NrID0gMDsg
YmxvY2sgPCBtX2hlYXAudXNlZEJsb2NrczsgKytibG9jaykKLSAgICAgICAgZnJlZUJsb2NrUHRy
KG1faGVhcC5ibG9ja3NbYmxvY2tdKTsKKyAgICAgICAgbV9ibG9ja2FsbG9jYXRvci5mcmVlKG1f
aGVhcC5ibG9ja3NbYmxvY2tdKTsKIAogICAgIGZhc3RGcmVlKG1faGVhcC5ibG9ja3MpOwogCkBA
IC0zODAsNyArMzEwLDcgQEAgYWxsb2NhdGU6CiAKICAgICBkbyB7CiAgICAgICAgIEFTU0VSVCht
X2hlYXAubmV4dEJsb2NrIDwgbV9oZWFwLnVzZWRCbG9ja3MpOwotICAgICAgICBCbG9jayogYmxv
Y2sgPSByZWludGVycHJldF9jYXN0PEJsb2NrKj4obV9oZWFwLmJsb2Nrc1ttX2hlYXAubmV4dEJs
b2NrXSk7CisgICAgICAgIEJsb2NrKiBibG9jayA9IHJlaW50ZXJwcmV0X2Nhc3Q8QmxvY2sqPiht
X2hlYXAuYmxvY2tzW21faGVhcC5uZXh0QmxvY2tdLmdldCgpKTsKICAgICAgICAgZG8gewogICAg
ICAgICAgICAgQVNTRVJUKG1faGVhcC5uZXh0Q2VsbCA8IEhlYXBDb25zdGFudHM6OmNlbGxzUGVy
QmxvY2spOwogICAgICAgICAgICAgaWYgKCFibG9jay0+bWFya2VkLmdldChtX2hlYXAubmV4dENl
bGwpKSB7IC8vIEFsd2F5cyBmYWxzZSBmb3IgdGhlIGxhc3QgY2VsbCBpbiB0aGUgYmxvY2sKQEAg
LTc0MSw3ICs2NzEsNyBAQCB2b2lkIEhlYXA6Om1hcmtDb25zZXJ2YXRpdmVseShNYXJrU3RhY2sm
CiAgICAgY2hhcioqIHAgPSBzdGF0aWNfY2FzdDxjaGFyKio+KHN0YXJ0KTsKICAgICBjaGFyKiog
ZSA9IHN0YXRpY19jYXN0PGNoYXIqKj4oZW5kKTsKIAotICAgIENvbGxlY3RvckJsb2NrKiogYmxv
Y2tzID0gbV9oZWFwLmJsb2NrczsKKyAgICBXVEY6OlR5cGVkUGFnZUFsbG9jYXRpb248Q29sbGVj
dG9yQmxvY2s+KiBibG9ja3MgPSBtX2hlYXAuYmxvY2tzOwogICAgIHdoaWxlIChwICE9IGUpIHsK
ICAgICAgICAgY2hhciogeCA9ICpwKys7CiAgICAgICAgIGlmIChpc1Bvc3NpYmxlQ2VsbCh4KSkg
ewpAQCAtNzU3LDcgKzY4Nyw3IEBAIHZvaWQgSGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KE1hcmtT
dGFjayYKICAgICAgICAgICAgIENvbGxlY3RvckJsb2NrKiBibG9ja0FkZHIgPSByZWludGVycHJl
dF9jYXN0PENvbGxlY3RvckJsb2NrKj4oeEFzQml0cyAtIG9mZnNldCk7CiAgICAgICAgICAgICB1
c2VkQmxvY2tzID0gbV9oZWFwLnVzZWRCbG9ja3M7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBi
bG9jayA9IDA7IGJsb2NrIDwgdXNlZEJsb2NrczsgYmxvY2srKykgewotICAgICAgICAgICAgICAg
IGlmIChibG9ja3NbYmxvY2tdICE9IGJsb2NrQWRkcikKKyAgICAgICAgICAgICAgICBpZiAoYmxv
Y2tzW2Jsb2NrXS5nZXQoKSAhPSBibG9ja0FkZHIpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxK
U0NlbGwqPih4QXNCaXRzKSk7CiAgICAgICAgICAgICAgICAgbWFya1N0YWNrLmRyYWluKCk7CkBA
IC0xMDA5LDcgKzkzOSw3IEBAIHZvaWQgSGVhcDo6Y2xlYXJNYXJrQml0cygpCiAgICAgICAgIGNs
ZWFyTWFya0JpdHMobV9oZWFwLmJsb2Nrc1tpXSk7CiB9CiAKLXZvaWQgSGVhcDo6Y2xlYXJNYXJr
Qml0cyhDb2xsZWN0b3JCbG9jayogYmxvY2spCit2b2lkIEhlYXA6OmNsZWFyTWFya0JpdHMoV1RG
OjpUeXBlZFBhZ2VBbGxvY2F0aW9uPENvbGxlY3RvckJsb2NrPiBibG9jaykKIHsKICAgICAvLyBh
bGxvY2F0ZSBhc3N1bWVzIHRoYXQgdGhlIGxhc3QgY2VsbCBpbiBldmVyeSBibG9jayBpcyBtYXJr
ZWQuCiAgICAgYmxvY2stPm1hcmtlZC5jbGVhckFsbCgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2xsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbGxlY3Rvci5oCShyZXZpc2lvbiA2NDQ2NCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29sbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDIxICsyNCwyMiBAQAogCiAjaW5jbHVk
ZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0JpdG1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9GaXhlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVk
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1BhZ2VBbGxvY2F0
aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVHlwZWRQYWdlQWxsb2NhdGlvbi5oPgogCiAjaWYgRU5B
QkxFKEpTQ19NVUxUSVBMRV9USFJFQURTKQogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNlbmRpZgog
Ci0jaWYgT1MoU1lNQklBTikKLSNpbmNsdWRlIDx3dGYvc3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5
bWJpYW4uaD4KLSNlbmRpZgorI2luY2x1ZGUgPHd0Zi9CbG9ja0FsbG9jYXRvci5oPgogCiAjZGVm
aW5lIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoY2xhc3MpIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihjbGFzcykgPD0gQ0VMTF9TSVpFLCBjbGFzc19maXRzX2luX2NlbGwpCiAKQEAgLTU4LDcgKzU5
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IENvbGxlY3RvckhlYXAgewogICAgICAg
ICBzaXplX3QgbmV4dEJsb2NrOwogICAgICAgICBzaXplX3QgbmV4dENlbGw7Ci0gICAgICAgIENv
bGxlY3RvckJsb2NrKiogYmxvY2tzOworICAgICAgICBXVEY6OlR5cGVkUGFnZUFsbG9jYXRpb248
Q29sbGVjdG9yQmxvY2s+KiBibG9ja3M7CiAgICAgICAgIAogICAgICAgICB2b2lkKiBuZXh0TnVt
YmVyOwogCkBAIC03MSw2ICs3MiwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgT3BlcmF0
aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb25JblByb2dyZXNzOwogICAgIH07CiAKKyNpZiBPUyhXSU5D
RSkgfHwgT1MoU1lNQklBTikKKyAgICBjb25zdCBzaXplX3QgQkxPQ0tfU0laRSA9IDY0ICogMTAy
NDsgLy8gNjRrCisjZWxzZQorICAgIGNvbnN0IHNpemVfdCBCTE9DS19TSVpFID0gNjQgKiA0MDk2
OyAvLyAyNTZrCisjZW5kaWYKKworLy8gU2V0IHNhbmUgZGVmYXVsdHMgaWYgLUQ8ZmxhZ25hbWU9
dmFsdWU+IHdhc24ndCBwcm92aWRlZCB2aWEgY29tcGlsZXIgYXJncworI2lmbmRlZiBKU0NDT0xM
RUNUT1JfVklSVFVBTE1FTV9SRVNFUlZBVElPTgorI2lmIGRlZmluZWQoX19XSU5TX18pCisvLyBF
bXVsYXRvciBoYXMgbGltaXRlZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UKKyNkZWZpbmUgSlNDQ09M
TEVDVE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT04gKDQqMTAyNCoxMDI0KQorI2Vsc2UKKy8vIEhX
IGhhcyBwbGVudHkgb2YgdmlydHVhbCBhZGRyZXNzZXMKKyNkZWZpbmUgSlNDQ09MTEVDVE9SX1ZJ
UlRVQUxNRU1fUkVTRVJWQVRJT04gKDEyOCoxMDI0KjEwMjQpCisjZW5kaWYKKyNlbmRpZgorCiAg
ICAgY2xhc3MgSGVhcCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgogICAgICAg
ICBjbGFzcyBUaHJlYWQ7CkBAIC0xMzUsMTUgKzE1MywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSGVhcChKU0dsb2JhbERhdGEqKTsKICAgICAgICAgfkhlYXAoKTsKIAotICAgICAgICBO
RVZFUl9JTkxJTkUgQ29sbGVjdG9yQmxvY2sqIGFsbG9jYXRlQmxvY2soKTsKKyAgICAgICAgTkVW
RVJfSU5MSU5FIFdURjo6VHlwZWRQYWdlQWxsb2NhdGlvbjxDb2xsZWN0b3JCbG9jaz4gYWxsb2Nh
dGVCbG9jaygpOwogICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBmcmVlQmxvY2soc2l6ZV90KTsK
LSAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgZnJlZUJsb2NrUHRyKENvbGxlY3RvckJsb2NrKik7
CiAgICAgICAgIHZvaWQgZnJlZUJsb2NrcygpOwogICAgICAgICB2b2lkIHJlc2l6ZUJsb2Nrcygp
OwogICAgICAgICB2b2lkIGdyb3dCbG9ja3Moc2l6ZV90IG5lZWRlZEJsb2Nrcyk7CiAgICAgICAg
IHZvaWQgc2hyaW5rQmxvY2tzKHNpemVfdCBuZWVkZWRCbG9ja3MpOwogICAgICAgICB2b2lkIGNs
ZWFyTWFya0JpdHMoKTsKLSAgICAgICAgdm9pZCBjbGVhck1hcmtCaXRzKENvbGxlY3RvckJsb2Nr
Kik7CisgICAgICAgIHZvaWQgY2xlYXJNYXJrQml0cyhXVEY6OlR5cGVkUGFnZUFsbG9jYXRpb248
Q29sbGVjdG9yQmxvY2s+KTsKICAgICAgICAgc2l6ZV90IG1hcmtlZENlbGxzKHNpemVfdCBzdGFy
dEJsb2NrID0gMCwgc2l6ZV90IHN0YXJ0Q2VsbCA9IDApIGNvbnN0OwogCiAgICAgICAgIHZvaWQg
cmVjb3JkRXh0cmFDb3N0KHNpemVfdCk7CkBAIC0xNzYsMjEgKzE5MywxNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgcHRocmVhZF9rZXlfdCBtX2N1cnJlbnRUaHJlYWRSZWdpc3RyYXI7CiAj
ZW5kaWYKIAotI2lmIE9TKFNZTUJJQU4pCiAgICAgICAgIC8vIEFsbG9jYXRlcyBjb2xsZWN0b3Ig
YmxvY2tzIHdpdGggY29ycmVjdCBhbGlnbm1lbnQKLSAgICAgICAgV1RGOjpBbGlnbmVkQmxvY2tB
bGxvY2F0b3IgbV9ibG9ja2FsbG9jYXRvcjsgCisjaWYgSEFWRShBTElHTkVEX0FMTE9DQVRFKQor
ICAgICAgICBXVEY6OkFsaWduZWRCbG9ja0FsbG9jYXRvcjxCTE9DS19TSVpFPiBtX2Jsb2NrYWxs
b2NhdG9yOyAKKyNlbHNlCisgICAgICAgIFdURjo6QWxpZ25lZEJsb2NrQWxsb2NhdG9yPEJMT0NL
X1NJWkUsIEpTQ0NPTExFQ1RPUl9WSVJUVUFMTUVNX1JFU0VSVkFUSU9OPiBtX2Jsb2NrYWxsb2Nh
dG9yOyAKICNlbmRpZgogICAgICAgICAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERh
dGE7CiAgICAgfTsKIAogICAgIC8vIHR1bmFibGUgcGFyYW1ldGVycwotI2lmIE9TKFdJTkNFKSB8
fCBPUyhTWU1CSUFOKQotICAgIGNvbnN0IHNpemVfdCBCTE9DS19TSVpFID0gNjQgKiAxMDI0OyAv
LyA2NGsKLSNlbHNlCi0gICAgY29uc3Qgc2l6ZV90IEJMT0NLX1NJWkUgPSA2NCAqIDQwOTY7IC8v
IDI1NmsKLSNlbmRpZgotCiAgICAgLy8gZGVyaXZlZCBjb25zdGFudHMKICAgICBjb25zdCBzaXpl
X3QgQkxPQ0tfT0ZGU0VUX01BU0sgPSBCTE9DS19TSVpFIC0gMTsKICAgICBjb25zdCBzaXplX3Qg
QkxPQ0tfTUFTSyA9IH5CTE9DS19PRkZTRVRfTUFTSzsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0
Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvQml0bWFwLmgJKHJl
dmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvQml0bWFwLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTIxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKyNp
Zm5kZWYgQml0bWFwX2gKKyNkZWZpbmUgQml0bWFwX2gKKworI2luY2x1ZGUgIkZpeGVkQXJyYXku
aCIKKyNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlPHNpemVfdCBzaXplPgorY2xhc3MgQml0bWFwIHsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiB1
aW50MzJfdCBXb3JkVHlwZTsKKworcHVibGljOgorICAgIGJvb2wgZ2V0KHNpemVfdCkgY29uc3Q7
CisgICAgdm9pZCBzZXQoc2l6ZV90KTsKKyAgICB2b2lkIGNsZWFyKHNpemVfdCk7CisgICAgdm9p
ZCBjbGVhckFsbCgpOworICAgIHZvaWQgYWR2YW5jZVRvTmV4dEZyZWVCaXQoc2l6ZV90JikgY29u
c3Q7CisgICAgc2l6ZV90IGNvdW50KHNpemVfdCA9IDApIGNvbnN0OworICAgIHNpemVfdCBpc0Vt
cHR5KCkgY29uc3Q7CisgICAgc2l6ZV90IGlzRnVsbCgpIGNvbnN0OworCitwcml2YXRlOgorICAg
IHN0YXRpYyBjb25zdCBXb3JkVHlwZSB3b3JkU2l6ZSA9IHNpemVvZihXb3JkVHlwZSkgKiA4Owor
ICAgIHN0YXRpYyBjb25zdCBXb3JkVHlwZSB3b3JkcyA9IChzaXplICsgd29yZFNpemUgLSAxKSAv
IHdvcmRTaXplOworCisgICAgLy8gdGhlIGxpdGVyYWwgJzEnIGlzIG9mIHR5cGUgc2lnbmVkIGlu
dC4gIFdlIHdhbnQgdG8gdXNlIGFuIHVuc2lnbmVkCisgICAgLy8gdmVyc2lvbiBvZiB0aGUgY29y
cmVjdCBzaXplIHdoZW4gZG9pbmcgdGhlIGNhbGN1bGF0aW9ucyBiZWNhdXNlIGlmCisgICAgLy8g
V29yZFR5cGUgaXMgbGFyZ2VyIHRoYW4gaW50LCAnMSA8PCAzMScgd2lsbCBmaXJzdCBiZSBzaWdu
IGV4dGVuZGVkCisgICAgLy8gYW5kIHRoZW4gY2FzdGVkIHRvIHVuc2lnbmVkLCBtZWFuaW5nIHRo
YXQgc2V0KDMxKSB3aGVuIFdvcmRUeXBlIGlzCisgICAgLy8gYSA2NCBiaXQgdW5zaWduZWQgaW50
IHdvdWxkIGdpdmUgMHhmZmZmODAwMAorICAgIHN0YXRpYyBjb25zdCBXb3JkVHlwZSBvbmUgPSAx
OworCisgICAgRml4ZWRBcnJheTxXb3JkVHlwZSwgd29yZHM+IGJpdHM7Cit9OworCit0ZW1wbGF0
ZTxzaXplX3Qgc2l6ZT4KK2lubGluZSBib29sIEJpdG1hcDxzaXplPjo6Z2V0KHNpemVfdCBuKSBj
b25zdAoreworICAgIHJldHVybiAhIShiaXRzW24gLyB3b3JkU2l6ZV0gJiAob25lIDw8IChuICUg
d29yZFNpemUpKSk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBzaXplPgoraW5saW5lIHZvaWQgQml0
bWFwPHNpemU+OjpzZXQoc2l6ZV90IG4pCit7CisgICAgYml0c1tuIC8gd29yZFNpemVdIHw9IChv
bmUgPDwgKG4gJSB3b3JkU2l6ZSkpOworfQorCit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4KK2lubGlu
ZSB2b2lkIEJpdG1hcDxzaXplPjo6Y2xlYXIoc2l6ZV90IG4pCit7CisgICAgYml0c1tuIC8gd29y
ZFNpemVdICY9IH4ob25lIDw8IChuICUgd29yZFNpemUpKTsKK30KKwordGVtcGxhdGU8c2l6ZV90
IHNpemU+CitpbmxpbmUgdm9pZCBCaXRtYXA8c2l6ZT46OmNsZWFyQWxsKCkKK3sKKyAgICBtZW1z
ZXQoYml0cy5kYXRhKCksIDAsIHNpemVvZihiaXRzKSk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBz
aXplPgoraW5saW5lIHZvaWQgQml0bWFwPHNpemU+OjphZHZhbmNlVG9OZXh0RnJlZUJpdChzaXpl
X3QmIHN0YXJ0KSBjb25zdAoreworICAgIGlmICghfmJpdHNbc3RhcnQgLyB3b3JkU2l6ZV0pCisg
ICAgICAgIHN0YXJ0ID0gKChzdGFydCAvIHdvcmRTaXplKSArIDEpICogd29yZFNpemU7CisgICAg
ZWxzZQorICAgICAgICArK3N0YXJ0OworfQorCit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4KK2lubGlu
ZSBzaXplX3QgQml0bWFwPHNpemU+Ojpjb3VudChzaXplX3Qgc3RhcnQpIGNvbnN0Cit7CisgICAg
c2l6ZV90IHJlc3VsdCA9IDA7CisgICAgZm9yICggOyAoc3RhcnQgJSB3b3JkU2l6ZSk7ICsrc3Rh
cnQpIHsKKyAgICAgICAgaWYgKGdldChzdGFydCkpCisgICAgICAgICAgICArK3Jlc3VsdDsKKyAg
ICB9CisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0IC8gd29yZFNpemU7IGkgPCB3b3JkczsgKytp
KQorICAgICAgICByZXN1bHQgKz0gV1RGOjpiaXRDb3VudChiaXRzW2ldKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4KK2lubGluZSBzaXplX3QgQml0bWFw
PHNpemU+Ojppc0VtcHR5KCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdv
cmRzOyArK2kpCisgICAgICAgIGlmIChiaXRzW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4KK2lubGluZSBz
aXplX3QgQml0bWFwPHNpemU+Ojppc0Z1bGwoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgd29yZHM7ICsraSkKKyAgICAgICAgaWYgKH5iaXRzW2ldKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit9CisjZW5kaWYKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3d0Zi9CbG9ja0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3d0Zi9CbG9ja0FsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENv
cmUvd3RmL0Jsb2NrQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU3IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBCbG9ja0FsbG9j
YXRvcl9oCisjZGVmaW5lIEJsb2NrQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9CaXRtYXAu
aD4KKyNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb24uaD4KKworbmFtZXNwYWNlIFdURiB7CisK
KyNpZiBIQVZFKEFMSUdORURfQUxMT0NBVEUpCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPgor
I2Vsc2UKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemUsIHNpemVfdCByZXNlcnZhdGlvblNpemU+
CisjZW5kaWYKK2NsYXNzIEFsaWduZWRCbG9ja0FsbG9jYXRvciB7CitwdWJsaWM6CisjaWYgIUhB
VkUoQUxJR05FRF9BTExPQ0FURSkKKyAgICBBbGlnbmVkQmxvY2tBbGxvY2F0b3IoKTsKKyAgICB+
QWxpZ25lZEJsb2NrQWxsb2NhdG9yKCk7CisjZW5kaWYKKworICAgIC8vIGZvciB0aGUgbm9uLWFs
aWduZWQgYWxsb2NhdGUgdmVyc2lvbiB0aGlzIGRvZXMgbm90IG5lZWQgdG8KKyAgICAvLyByZXR1
cm4vdGFrZSBQYWdlQWxsb2NhdGlvbidzCisgICAgdm9pZCBkZXN0cm95KCk7CisgICAgUGFnZUFs
bG9jYXRpb24gYWxsb2NhdGUoKTsKKyAgICB2b2lkIGZyZWUoUGFnZUFsbG9jYXRpb24pOworCitw
cml2YXRlOgorI2lmICFIQVZFKEFMSUdORURfQUxMT0NBVEUpCisgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBiaXRtYXBTaXplID0gcmVzZXJ2YXRpb25TaXplIC8gYmxvY2tTaXplOworCisgICAgUGFn
ZUFsbG9jYXRpb24gcmVzZXJ2YXRpb247CisgICAgc2l6ZV90IG5leHRGcmVlOworCisgICAgdWlu
dHB0cl90IHJlc2VydmF0aW9uQmFzZTsKKworICAgIFdURjo6Qml0bWFwPGJpdG1hcFNpemU+IGJp
dG1hcDsKKyNlbmRpZgorfTsKKworI2lmIEhBVkUoQUxJR05FRF9BTExPQ0FURSkKKwordGVtcGxh
dGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2lubGluZSB2b2lkIEFsaWduZWRCbG9ja0FsbG9jYXRvcjxi
bG9ja1NpemU+OjpkZXN0cm95KCkKK3sKK30KKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4K
K2lubGluZSBQYWdlQWxsb2NhdGlvbiBBbGlnbmVkQmxvY2tBbGxvY2F0b3I8YmxvY2tTaXplPjo6
YWxsb2NhdGUoKQoreworICAgIHJldHVybiBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVk
KGJsb2NrU2l6ZSwgYmxvY2tTaXplKTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4K
K2lubGluZSB2b2lkIEFsaWduZWRCbG9ja0FsbG9jYXRvcjxibG9ja1NpemU+OjpmcmVlKFBhZ2VB
bGxvY2F0aW9uIGFsbG9jYXRpb24pCit7CisgICAgYWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7Cit9
CisKKyNlbHNlCisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemUsIHNpemVfdCByZXNlcnZhdGlv
blNpemU+CitBbGlnbmVkQmxvY2tBbGxvY2F0b3I8YmxvY2tTaXplLCByZXNlcnZhdGlvblNpemU+
OjpBbGlnbmVkQmxvY2tBbGxvY2F0b3IoKQorICAgIDogcmVzZXJ2YXRpb24oUGFnZUFsbG9jYXRp
b246OnJlc2VydmUocmVzZXJ2YXRpb25TaXplICsgYmxvY2tTaXplKSkKKyAgICAsIG5leHRGcmVl
KDApCit7CisgICAgLy8gY2hlY2sgdGhhdCBibG9ja1NpemUgYW5kIHJlc2VydmF0aW9uU2l6ZSBh
cmUgcG93ZXJzIG9mIHR3bworICAgIEFTU0VSVCghKGJsb2NrU2l6ZSAmIChibG9ja1NpemUgLSAx
KSkpOworICAgIEFTU0VSVCghKHJlc2VydmF0aW9uU2l6ZSAmIChyZXNlcnZhdGlvblNpemUgLSAx
KSkpOworCisgICAgLy8gY2hlY2sgdGhhdCBibG9ja1NpemUgaXMgYSBtdWx0aXBsZSBvZiBwYWdl
U2l6ZSBhbmQgdGhhdAorICAgIC8vIHJlc2VydmF0aW9uU2l6ZSBpcyBhIG11bHRpcGxlIG9mIGJs
b2NrU2l6ZQorICAgIEFTU0VSVCghKGJsb2NrU2l6ZSAmIFBhZ2VBbGxvY2F0aW9uOjpwYWdlc2l6
ZSgpKSk7CisgICAgQVNTRVJUKCEocmVzZXJ2YXRpb25TaXplICYgYmxvY2tTaXplKSk7CisKKyAg
ICBBU1NFUlQocmVzZXJ2YXRpb24pOworCisgICAgcmVzZXJ2YXRpb25CYXNlID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHJlc2VydmF0aW9uLmJhc2UoKSk7CisgICAgcmVzZXJ2YXRpb25C
YXNlID0gKHJlc2VydmF0aW9uQmFzZSArIGJsb2NrU2l6ZSkgJiB+KGJsb2NrU2l6ZSAtIDEpOwor
fQorCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplLCBzaXplX3QgcmVzZXJ2YXRpb25TaXplPgor
QWxpZ25lZEJsb2NrQWxsb2NhdG9yPGJsb2NrU2l6ZSwgcmVzZXJ2YXRpb25TaXplPjo6fkFsaWdu
ZWRCbG9ja0FsbG9jYXRvcigpCit7CisgICAgZGVzdHJveSgpOworfQorCit0ZW1wbGF0ZTxzaXpl
X3QgYmxvY2tTaXplLCBzaXplX3QgcmVzZXJ2YXRpb25TaXplPgordm9pZCBBbGlnbmVkQmxvY2tB
bGxvY2F0b3I8YmxvY2tTaXplLCByZXNlcnZhdGlvblNpemU+OjpkZXN0cm95KCkKK3sKKyAgICBy
ZXNlcnZhdGlvbi5kZWNvbW1pdChyZXNlcnZhdGlvbi5iYXNlKCksIHJlc2VydmF0aW9uLnNpemUo
KSk7CisgICAgcmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOworICAgIGJpdG1hcC5jbGVhckFsbCgp
OworfQorCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplLCBzaXplX3QgcmVzZXJ2YXRpb25TaXpl
PgorUGFnZUFsbG9jYXRpb24gQWxpZ25lZEJsb2NrQWxsb2NhdG9yPGJsb2NrU2l6ZSwgcmVzZXJ2
YXRpb25TaXplPjo6YWxsb2NhdGUoKQoreworICAgIHdoaWxlIChuZXh0RnJlZSA8IGJpdG1hcFNp
emUpIHsKKyAgICAgICAgaWYgKCFiaXRtYXAuZ2V0KG5leHRGcmVlKSkgeworICAgICAgICAgICAg
dm9pZCogYmxvY2tBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVzZXJ2YXRpb25C
YXNlICsgbmV4dEZyZWUgKiBibG9ja1NpemUpOworICAgICAgICAgICAgUGFnZUFsbG9jYXRpb24g
YmxvY2sgPSBQYWdlQWxsb2NhdGlvbihibG9ja0FkZHJlc3MsIGJsb2NrU2l6ZSwgcmVzZXJ2YXRp
b24pOworICAgICAgICAgICAgYmxvY2suY29tbWl0KGJsb2NrLmJhc2UoKSwgYmxvY2suc2l6ZSgp
KTsKKworICAgICAgICAgICAgYml0bWFwLnNldChuZXh0RnJlZSk7CisgICAgICAgICAgICArK25l
eHRGcmVlOworCisgICAgICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgICAgIH0KKyAgICAgICAg
Yml0bWFwLmFkdmFuY2VUb05leHRGcmVlQml0KG5leHRGcmVlKTsKKyAgICB9CisKKyAgICBpZiAo
Yml0bWFwLmlzRnVsbCgpKQorICAgICAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24oKTsKKworICAg
IG5leHRGcmVlID0gMDsKKworICAgIHJldHVybiBhbGxvY2F0ZSgpOworfQorCit0ZW1wbGF0ZTxz
aXplX3QgYmxvY2tTaXplLCBzaXplX3QgcmVzZXJ2YXRpb25TaXplPgordm9pZCBBbGlnbmVkQmxv
Y2tBbGxvY2F0b3I8YmxvY2tTaXplLCByZXNlcnZhdGlvblNpemU+OjpmcmVlKFBhZ2VBbGxvY2F0
aW9uIGFsbG9jYXRpb24pCit7CisgICAgc2l6ZV90IGRpZmYgPSAocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KGFsbG9jYXRpb24uYmFzZSgpKSAtCisgICAgICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KHJlc2VydmF0aW9uLmJhc2UoKSkpOworICAgIEFTU0VSVCgh
KGRpZmYgJiBibG9ja1NpemUpKTsKKworICAgIHNpemVfdCBpID0gZGlmZiAvIGJsb2NrU2l6ZTsK
KyAgICBBU1NFUlQoYml0bWFwLmdldChpKSk7CisKKyAgICBhbGxvY2F0aW9uLmRlY29tbWl0KGFs
bG9jYXRpb24uYmFzZSgpLCBhbGxvY2F0aW9uLnNpemUoKSk7CisgICAgYml0bWFwLmNsZWFyKGkp
OworfQorCisjZW5kaWYKKworfQorCisjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9Q
YWdlQWxsb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9QYWdlQWxs
b2NhdGlvbi5oCShyZXZpc2lvbiA2NDQ2NCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QYWdlQWxs
b2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw1MSBAQAogI2RlZmluZSBQQUdF
X0FMTE9DQVRJT05fQUxMT0NBVEVfQVQgMAogI2VuZGlmCiAKKyNpZiBIQVZFKE1NQVApCisjaW5j
bHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaWYgT1Mo
REFSV0lOKQorCisjaW5jbHVkZSA8bWFjaC9tYWNoX2luaXQuaD4KKyNpbmNsdWRlIDxtYWNoL21h
Y2hfcG9ydC5oPgorI2luY2x1ZGUgPG1hY2gvdGFzay5oPgorI2luY2x1ZGUgPG1hY2gvdGhyZWFk
X2FjdC5oPgorI2luY2x1ZGUgPG1hY2gvdm1fbWFwLmg+CisKKyNlbGlmIE9TKFdJTkRPV1MpCisK
KyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNlbGlmIE9TKEhB
SUtVKQorCisjaW5jbHVkZSA8T1MuaD4KKworI2VsaWYgT1MoVU5JWCkKKworI2luY2x1ZGUgPHN0
ZGxpYi5oPgorCisjaWYgT1MoU09MQVJJUykKKyNpbmNsdWRlIDx0aHJlYWQuaD4KKyNlbHNlCisj
aW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlmCisKKyNpZiBIQVZFKFBUSFJFQURfTlBfSCkKKyNp
bmNsdWRlIDxwdGhyZWFkX25wLmg+CisjZW5kaWYKKworI2lmIE9TKFFOWCkKKyNpbmNsdWRlIDxl
cnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRl
IDxzeXMvcHJvY2ZzLmg+CisjZW5kaWYKKworI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewogCiBj
bGFzcyBQYWdlQWxsb2NhdGlvbiB7CkBAIC04Miw2ICsxMjcsMTIgQEAgcHVibGljOgogICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKICAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuICFtX2Jhc2U7IH0KKyNpZiBDT01QSUxFUihXSU5TQ1cpCisgICAg
b3BlcmF0b3IgYm9vbCBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0KKyNlbHNlCisgICAgdHlwZWRl
ZiB2b2lkKiBQYWdlQWxsb2NhdGlvbjo6KlVuc3BlY2lmaWVkQm9vbFR5cGU7CisgICAgb3BlcmF0
b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZSA/ICZQYWdlQWxs
b2NhdGlvbjo6bV9iYXNlIDogMDsgfQorI2VuZGlmCiAKICAgICBib29sIGNvbW1pdCh2b2lkKiwg
c2l6ZV90LCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpIGNv
bnN0OwogICAgIHZvaWQgZGVjb21taXQodm9pZCosIHNpemVfdCkgY29uc3Q7CkBAIC05Myw2ICsx
NDQsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYWdlQWxsb2NhdGlvbiBhbGxvY2F0ZUF0KHZv
aWQqIGFkZHJlc3MsIGJvb2wgZml4ZWQsIHNpemVfdCwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJv
b2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7CiAgICAgc3RhdGlj
IFBhZ2VBbGxvY2F0aW9uIHJlc2VydmVBdCh2b2lkKiBhZGRyZXNzLCBib29sIGZpeGVkLCBzaXpl
X3QsIFVzYWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVj
dXRhYmxlID0gZmFsc2UpOwogI2VuZGlmCisKKyNpZiBIQVZFKEFMSUdORURfQUxMT0NBVEUpCisg
ICAgc3RhdGljIFBhZ2VBbGxvY2F0aW9uIGFsbG9jYXRlQWxpZ25lZChzaXplX3QsIHNpemVfdCwg
VXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFi
bGUgPSBmYWxzZSk7CisgICAgc3RhdGljIFBhZ2VBbGxvY2F0aW9uIHJlc2VydmVBbGlnbmVkKHNp
emVfdCwgc2l6ZV90LCBVc2FnZSA9IFVua25vd25Vc2FnZSwgYm9vbCB3cml0YWJsZSA9IHRydWUs
IGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNlKTsKKyNlbmRpZgorCiAgICAgc3RhdGljIHNpemVfdCBw
YWdlc2l6ZSgpOwogCiBwcml2YXRlOgpAQCAtMTE4LDYgKzE3NSw5MyBAQCBwcml2YXRlOgogI2Vu
ZGlmCiB9OwogCisjaWYgSEFWRShBTElHTkVEX0FMTE9DQVRFKQorCisjaWYgT1MoREFSV0lOKQor
CitpbmxpbmUgUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246OmFsbG9jYXRlQWxpZ25lZChz
aXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgVXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wg
ZXhlY3V0YWJsZSkKK3sKKyAgICAvLyBjYW4gYWN0dWFsbHkgZG8gYW4gYWxsb2NhdGVBbGlnbmVk
QXQgZm9yIGRhcndpbgorICAgIHZtX2FkZHJlc3NfdCBhZGRyZXNzID0gMDsKKyAgICB2bV9wcm90
X3QgcHJvdGVjdGlvbiA9IFZNX1BST1RfUkVBRDsKKyAgICBwcm90ZWN0aW9uIHw9IGV4ZWN1dGFi
bGUgPyBWTV9QUk9UX0VYRUNVVEUgOiAwOworICAgIHByb3RlY3Rpb24gfD0gd3JpdGFibGUgPyBW
TV9QUk9UX1dSSVRFIDogMDsKKyAgICB2bV9tYXAoY3VycmVudF90YXNrKCksICZhZGRyZXNzLCBz
aXplLCAoYWxpZ25tZW50IC0gMSksIFZNX0ZMQUdTX0FOWVdIRVJFIHwgVk1fVEFHX0ZPUl9DT0xM
RUNUT1JfTUVNT1JZLCBNRU1PUllfT0JKRUNUX05VTEwsIDAsIEZBTFNFLCBwcm90ZWN0aW9uLCBw
cm90ZWN0aW9uLCBWTV9JTkhFUklUX0RFRkFVTFQpOworICAgIHJldHVybiBQYWdlQWxsb2NhdGlv
bihyZWludGVycHJldF9jYXN0PHZvaWQqPihhZGRyZXNzKSwgc2l6ZSk7Cit9CisKKyNlbGlmIE9T
KFdJTkNFKQorCitpbmxpbmUgUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246OmFsbG9jYXRl
QWxpZ25lZChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wg
d3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKK3sKKyAgICAvLyB0aGlzIGlzbid0IHJlYWxseSBh
bGlnbmVkIHRvIGFsaWdubWVudCwgaXQncyBvbmx5IGFsaWduZWQgdG8gc2l6ZQorICAgIHJldHVy
biBQYWdlQWxsb2NhdGlvbihWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX0NPTU1JVCB8IE1FTV9S
RVNFUlZFLCBwcm90ZWN0aW9uKHdyaXRhYmxlLCBleGVjdXRhYmxlKSksIHNpemUpOworfQorCisj
ZWxpZiBPUyhXSU5ET1dTKQorCitpbmxpbmUgUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246
OmFsbG9jYXRlQWxpZ25lZChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgVXNhZ2UgdXNh
Z2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKK3sKKyAgICBBU1NFUlQod3JpdGFi
bGUgJiYgIWV4ZWN1dGFibGUpOworI2lmIENPTVBJTEVSKE1JTkdXKSAmJiAhQ09NUElMRVIoTUlO
R1c2NCkKKyAgICB2b2lkKiBhZGRyZXNzID0gX19taW5nd19hbGlnbmVkX21hbGxvYyhzaXplLCBh
bGlnbm1lbnQpOworI2Vsc2UKKyAgICB2b2lkKiBhZGRyZXNzID0gX2FsaWduZWRfbWFsbG9jKHNp
emUsIGFsaWdubWVudCk7CisjZW5kaWYKKyAgICBtZW1zZXQoYWRkcmVzcywgMCwgc2l6ZSk7Cisg
ICAgcmV0dXJuIFBhZ2VBbGxvY2F0aW9uKGFkZHJlc3MsIHNpemUpOworfQorCisjZWxzZQorCitp
bmxpbmUgUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246OmFsbG9jYXRlQWxpZ25lZChzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJv
b2wgZXhlY3V0YWJsZSkKK3sKKyAgICBBU1NFUlQoIShhbGlnbm1lbnQgJiAoYWxpZ25tZW50IC0g
MSkpKTsKKyAgICBBU1NFUlQod3JpdGFibGUgJiYgIWV4ZWN1dGFibGUpOworICAgIHN0YXRpYyBz
aXplX3QgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOworCisgICAgc2l6ZV90IGV4dHJhID0gMDsK
KyAgICBpZiAoc2l6ZSA+IHBhZ2VzaXplKQorICAgICAgICBleHRyYSA9IHNpemUgLSBwYWdlc2l6
ZTsKKworICAgIGludCBmbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT047CisKKyAgICBpbnQg
cHJvdGVjdGlvbiA9IFBST1RfUkVBRDsKKyAgICBpZiAod3JpdGFibGUpCisgICAgICAgIHByb3Rl
Y3Rpb24gfD0gUFJPVF9XUklURTsKKyAgICBpZiAoZXhlY3V0YWJsZSkKKyAgICAgICAgcHJvdGVj
dGlvbiB8PSBQUk9UX0VYRUM7CisKKyAgICB2b2lkKiBtbWFwUmVzdWx0ID0gbW1hcCgwLCBzaXpl
ICsgZXh0cmEsIHByb3RlY3Rpb24sIGZsYWdzLCB1c2FnZSwgMCk7CisgICAgdWludHB0cl90IGFk
ZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obW1hcFJlc3VsdCk7CisKKyAgICBz
aXplX3QgYWRqdXN0ID0gMDsKKyAgICBpZiAoKGFkZHJlc3MgJiAoYWxpZ25tZW50IC0gMSkpKQor
ICAgICAgICBhZGp1c3QgPSBzaXplIC0gKGFkZHJlc3MgJiAoYWxpZ25tZW50IC0gMSkpOworCisg
ICAgaWYgKGFkanVzdCA+IDApCisgICAgICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PGNoYXIq
PihhZGRyZXNzKSwgYWRqdXN0KTsKKworICAgIGlmIChhZGp1c3QgPCBleHRyYSkKKyAgICAgICAg
bXVubWFwKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFkZHJlc3MgKyBhZGp1c3QgKyBzaXplKSwg
ZXh0cmEgLSBhZGp1c3QpOworCisgICAgYWRkcmVzcyArPSBhZGp1c3Q7CisKKyAgICByZXR1cm4g
UGFnZUFsbG9jYXRpb24ocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkcmVzcyksIHNpemUpOwor
fQorCisjZW5kaWYKKworaW5saW5lIFBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjpyZXNl
cnZlQWxpZ25lZChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJv
b2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKK3sKKyAgICBQYWdlQWxsb2NhdGlvbiByZXN1
bHQgPSBhbGxvY2F0ZUFsaWduZWQoYWxpZ25tZW50LCBzaXplLCB1c2FnZSwgd3JpdGFibGUsIGV4
ZWN1dGFibGUpOworICAgIGlmICghIXJlc3VsdCkKKyAgICAgICAgcmVzdWx0LmRlY29tbWl0KHJl
c3VsdC5iYXNlKCksIHNpemUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNlbmRpZgorCiB9
CiAKIHVzaW5nIFdURjo6UGFnZUFsbG9jYXRpb247CkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYv
UGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAko
cmV2aXNpb24gNjQ0NjQpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzA3LDYgKzcwNyw3IEBACiAjZGVmaW5lIEhBVkVfRVJSTk9fSCAxCiAjZGVm
aW5lIEhBVkVfTEFOR0lORk9fSCAxCiAjZGVmaW5lIEhBVkVfTU1BUCAxCisjZGVmaW5lIEhBVkVf
QUxJR05FRF9BTExPQ0FURSAxCiAjZGVmaW5lIEhBVkVfTUVSR0VTT1JUIDEKICNkZWZpbmUgSEFW
RV9TQlJLIDEKICNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQpAQCAtNzM5LDYgKzc0MCw3IEBACiAj
ZGVmaW5lIEhBVkVfU1lTX1RJTUVCX0ggMQogI2VuZGlmCiAjZGVmaW5lIEhBVkVfVklSVFVBTEFM
TE9DIDEKKyNkZWZpbmUgSEFWRV9BTElHTkVEX0FMTE9DQVRFIDEKIAogI2VsaWYgT1MoU1lNQklB
TikKIApAQCAtNzkzLDYgKzc5NSwxNCBAQAogCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKEhBVkVf
QUxJR05FRF9BTExPQ0FURSkKKyNpZiBIQVZFKFBPU0lYX01FTUFMSUdOKQorI2RlZmluZSBIQVZF
X0FMSUdORURfQUxMT0NBVEUgMQorI2Vsc2UKKyNkZWZpbmUgSEFWRV9BTElHTkVEX0FMTE9DQVRF
IDAKKyNlbmRpZgorI2VuZGlmCisKIC8qIEVOQUJMRSBtYWNybyBkZWZhdWx0cyAqLwogCiAjaWYg
UExBVEZPUk0oUVQpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvVHlwZWRQYWdlQWxsb2NhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9UeXBlZFBhZ2VBbGxvY2F0aW9u
LmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvVHlwZWRQYWdlQWxsb2NhdGlv
bi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRQYWdlQWxsb2NhdGlvbl9oCisj
ZGVmaW5lIFR5cGVkUGFnZUFsbG9jYXRpb25faAorCisjaW5jbHVkZSAiUGFnZUFsbG9jYXRpb24u
aCIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBUeXBl
ZFBhZ2VBbGxvY2F0aW9uIDogcHVibGljIFBhZ2VBbGxvY2F0aW9uIHsKK3B1YmxpYzoKKyAgICBU
eXBlZFBhZ2VBbGxvY2F0aW9uKCkgeyB9CisKKyAgICBleHBsaWNpdCBUeXBlZFBhZ2VBbGxvY2F0
aW9uKGNvbnN0IFBhZ2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKQorICAgICAgICA6IFBhZ2VBbGxv
Y2F0aW9uKGFsbG9jYXRpb24pIHsgfQorCisgICAgVCYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8VCo+KGJhc2UoKSk7IH0KKyAgICBUKiBvcGVyYXRvci0+KCkgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oYmFzZSgpKTsgfQorCisgICAgVCogZ2V0KCkgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oYmFzZSgpKTsgfQorCisgICAgVHlwZWRQYWdlQWxsb2Nh
dGlvbjxUPiYgb3BlcmF0b3I9KFBhZ2VBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKQorICAgIHsKKyAg
ICAgICAgUGFnZUFsbG9jYXRpb246Om9wZXJhdG9yPShhbGxvY2F0aW9uKTsKKyAgICB9Cit9Owor
Cit9CisKKyNlbmRpZgorCg==
</data>
<flag name="review"
          id="51543"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63365</attachid>
            <date>2010-08-03 12:15:04 -0700</date>
            <delta_ts>2010-08-03 14:41:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>heap-pageAlloc.patch</filename>
            <type>text/plain</type>
            <size>47656</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0NTc0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTAtMDgtMDMgIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQzMjY5CisKKyAgICAgICAgQWRkZWQgbmV3IGFsbG9jYXRlQWxpZ25lZCBtZXRob2Rz
IHRvIFBhZ2VBbGxvY2F0aW9uLiAgSW4gb3JkZXIgdG8KKyAgICAgICAgcHJldmVudCBhIHJlZ3Jl
c3MgaW4gcGVyZm9ybWFuY2UsIHRoZSBmdW5jdGlvbiBuZWVkcyB0byBiZSBpbmxpbmVkLgorCisg
ICAgICAgIEFkZGl0aW9uYWxseSwgSSBwb3J0ZWQgdGhlIHN5bWJpYW4gYmxvY2sgYWxsb2NhdG9y
IHRvIHVzZQorICAgICAgICBQYWdlQWxsb2NhdGlvbiBhbmQgYWRkZWQgYSBuZXcgV1RGOjpCaXRt
YXAgY2xhc3MgdG8gc3VwcG9ydCB0aGlzLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUuZ3lwaToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmRlc3Ry
b3kpOgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6ZnJlZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZnJlZUJsb2Nrcyk6CisgICAg
ICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2hyaW5rQmxv
Y2tzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAg
KEpTQzo6SGVhcDo6Y2xlYXJNYXJrQml0cyk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtlZENl
bGxzKToKKyAgICAgICAgKiBydW50aW1lL0NvbGxlY3Rvci5oOgorICAgICAgICAoSlNDOjpDb2xs
ZWN0b3JIZWFwOjpjb2xsZWN0b3JCbG9jayk6CisgICAgICAgICogcnVudGltZS9Db2xsZWN0b3JI
ZWFwSXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Q29sbGVjdG9ySGVhcEl0ZXJhdG9yOjpvcGVy
YXRvciopOgorICAgICAgICAoSlNDOjpMaXZlT2JqZWN0SXRlcmF0b3I6Om9wZXJhdG9yKyspOgor
ICAgICAgICAoSlNDOjpEZWFkT2JqZWN0SXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAq
IHd0Zi9CaXRtYXAuaDogQWRkZWQuCisgICAgICAgIChXVEY6Ojo6Z2V0KToKKyAgICAgICAgKFdU
Rjo6OjpzZXQpOgorICAgICAgICAoV1RGOjo6OmNsZWFyKToKKyAgICAgICAgKFdURjo6OjpjbGVh
ckFsbCk6CisgICAgICAgIChXVEY6Ojo6YWR2YW5jZVRvTmV4dEZyZWVCaXQpOgorICAgICAgICAo
V1RGOjo6OmNvdW50KToKKyAgICAgICAgKFdURjo6Ojppc0VtcHR5KToKKyAgICAgICAgKFdURjo6
Ojppc0Z1bGwpOgorICAgICAgICAqIHd0Zi9CbG9ja0FsbG9jYXRvci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6OjpkZXN0cm95KToKKyAgICAgICAgKFdURjo6OjphbGxvY2F0ZSk6CisgICAgICAg
IChXVEY6Ojo6ZGVhbGxvY2F0ZSk6CisgICAgICAgIChXVEY6Ojo6YmFzZSk6CisgICAgICAgIChX
VEY6Ojo6QWxpZ25lZEJsb2NrKToKKyAgICAgICAgKFdURjo6OjpBbGlnbmVkQmxvY2tBbGxvY2F0
b3IpOgorICAgICAgICAoV1RGOjo6On5BbGlnbmVkQmxvY2tBbGxvY2F0b3IpOgorICAgICAgICAo
V1RGOjo6OmZyZWUpOgorICAgICAgICAqIHd0Zi9QYWdlQWxsb2NhdGlvbi5oOgorICAgICAgICAo
V1RGOjpQYWdlQWxsb2NhdGlvbjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSk6CisgICAg
ICAgIChXVEY6OlBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZUFsaWduZWQpOgorICAgICAgICAoV1RG
OjpQYWdlQWxsb2NhdGlvbjo6cmVzZXJ2ZUFsaWduZWQpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9y
bS5oOgorICAgICAgICAqIHd0Zi9zeW1iaWFuOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi9zeW1i
aWFuL0Jsb2NrQWxsb2NhdG9yU3ltYmlhbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3N5
bWJpYW4vQmxvY2tBbGxvY2F0b3JTeW1iaWFuLmg6IFJlbW92ZWQuCisKIDIwMTAtMDgtMDIgIEtl
dmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgW3d4XSBC
dWlsZCBmaXggYWZ0ZXIgcmVtb3ZhbCBvZiBuZWVkIHRvIGNvbXBpbGUgRXhlY3V0YWJsZUFsbG9j
YXRvclBvc2l4LmNwcApJbmRleDogSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDY0NDg3KQor
KysgSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQwOSw2
ICs0MDksOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS93
dGYvQXNzZXJ0aW9ucy5oIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvQXRvbWljcy5oIFwKIAlKYXZh
U2NyaXB0Q29yZS93dGYvQVZMVHJlZS5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYvQml0bWFwLmgg
XAorCUphdmFTY3JpcHRDb3JlL3d0Zi9CbG9ja0FsbG9jYXRvci5oIFwKIAlKYXZhU2NyaXB0Q29y
ZS93dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL0J5dGVB
cnJheS5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9CeXRlQXJyYXkuaCBcCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHJldmlzaW9uIDY0NDg3KQorKysgSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDYgKzM0OCw4IEBA
CiAgICAgICAgICAgICAnd3RmL0Fzc2VydGlvbnMuaCcsCiAgICAgICAgICAgICAnd3RmL0F0b21p
Y3MuaCcsCiAgICAgICAgICAgICAnd3RmL0FWTFRyZWUuaCcsCisgICAgICAgICAgICAnd3RmL0Jp
dG1hcC5oJywKKyAgICAgICAgICAgICd3dGYvQmxvY2tBbGxvY2F0b3IuaCcsCiAgICAgICAgICAg
ICAnd3RmL0J5dGVBcnJheS5jcHAnLAogICAgICAgICAgICAgJ3d0Zi9CeXRlQXJyYXkuaCcsCiAg
ICAgICAgICAgICAnd3RmL2Nocm9taXVtL0Nocm9taXVtVGhyZWFkaW5nLmgnLApJbmRleDogSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA2NDQ4NykKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwOCw2ICs1
MDgsOCBAQAogCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkwMEVFQjJF
RTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovOyB9OwogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAy
ODM4NDggLyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IH07
CiAJCUMwQTI3MjYzMEU1MEEwNjMwMEU5NkUxNSAvKiBOb3RGb3VuZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBBMjcyM0YwRTUwOUYxRTAwRTk2RTE1
IC8qIE5vdEZvdW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJREQzNzdDQkMxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1hcC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREQzNzdDQkIxMjA3MkMxODAwNkEy
NTE3IC8qIEJpdG1hcC5oICovOyB9OworCQlERDY5Q0Q5RjEyMDI0NkRFMDAwNTVBQzcgLyogQmxv
Y2tBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IERENjlDRDlEMTIwMjQ2REUwMDA1NUFDNyAvKiBCbG9ja0FsbG9jYXRvci5oICovOyB9Owog
CQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY1MEU1NTU3NzUwMDMw
OTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUUxMjRBOEY4MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0
cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovOyB9OwogCQlF
MTc4NjM2RDBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTc4NjM2QzBEOUJFRUMz
MDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi87IH07CkBAIC0xMDQ5LDYgKzEw
NTEsOCBAQAogCQlDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90Rm91bmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI5MEFENDMxMEMwMEVENzlC
NiAvKiBEYXRlQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGF0ZUNvbnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREQzNzdDQkIx
MjA3MkMxODAwNkEyNTE3IC8qIEJpdG1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBCaXRtYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREQ2OUNEOUQxMjAy
NDZERTAwMDU1QUM3IC8qIEJsb2NrQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEJsb2NrQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxMUQ1MTc1MEIyRTc5OEQwMDU2QzE4OCAvKiBTdHJpbmdFeHRyYXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxMjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGFxdWVKU1N0cmluZy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVl
SlNTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3BhcXVl
SlNTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQwNiw2ICsxNDEw
LDggQEAKIAkJCQk2NUUyMTdCNzA4RTdFRUNDMDAyM0U1RjYgLyogQXNzZXJ0aW9ucy5oICovLAog
CQkJCUJDNUY3QkJCMTE4MjNCNTkwMDUyQzAyQyAvKiBBdG9taWNzLmggKi8sCiAJCQkJRTFBNTk2
MzcwREUzRTFDMzAwQzE3RTM3IC8qIEFWTFRyZWUuaCAqLywKKwkJCQlERDM3N0NCQjEyMDcyQzE4
MDA2QTI1MTcgLyogQml0bWFwLmggKi8sCisJCQkJREQ2OUNEOUQxMjAyNDZERTAwMDU1QUM3IC8q
IEJsb2NrQWxsb2NhdG9yLmggKi8sCiAJCQkJODY2NzZENEQxMUZFRDU1RDAwNEI2ODYzIC8qIEJ1
bXBQb2ludGVyQWxsb2NhdG9yLmggKi8sCiAJCQkJQTdBMUY3QUEwRjI1MkIzQzAwRTE4NEUyIC8q
IEJ5dGVBcnJheS5jcHAgKi8sCiAJCQkJQTdBMUY3QUIwRjI1MkIzQzAwRTE4NEUyIC8qIEJ5dGVB
cnJheS5oICovLApAQCAtMjE5Myw2ICsyMTk5LDggQEAKIAkJCQk4NjhCRkExODExN0NGMTk5MDBC
OTA4QjEgLyogV1RGU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQwOEQ1NDExNzkzNjEz
MDA2RTVFRDAgLyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY4OENCMTYw
RUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJREQ2
OUNEOUYxMjAyNDZERTAwMDU1QUM3IC8qIEJsb2NrQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywK
KwkJCQlERDM3N0NCQzEyMDcyQzE4MDA2QTI1MTcgLyogQml0bWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDY0NDg3KQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzUsOSArMTM1LDYgQEAgSGVhcDo6SGVhcChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAg
ICAgLCBtX3JlZ2lzdGVyZWRUaHJlYWRzKDApCiAgICAgLCBtX2N1cnJlbnRUaHJlYWRSZWdpc3Ry
YXIoMCkKICNlbmRpZgotI2lmIE9TKFNZTUJJQU4pCi0gICAgLCBtX2Jsb2NrYWxsb2NhdG9yKEpT
Q0NPTExFQ1RPUl9WSVJUVUFMTUVNX1JFU0VSVkFUSU9OLCBCTE9DS19TSVpFKQotI2VuZGlmCiAg
ICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKIHsKICAgICBBU1NFUlQoZ2xvYmFsRGF0YSk7
CkBAIC0xODMsNjMgKzE4MCwxNyBAQCB2b2lkIEhlYXA6OmRlc3Ryb3koKQogICAgICAgICB0ID0g
bmV4dDsKICAgICB9CiAjZW5kaWYKLSNpZiBPUyhTWU1CSUFOKQogICAgIG1fYmxvY2thbGxvY2F0
b3IuZGVzdHJveSgpOwotI2VuZGlmCiAgICAgbV9nbG9iYWxEYXRhID0gMDsKIH0KIAogTkVWRVJf
SU5MSU5FIENvbGxlY3RvckJsb2NrKiBIZWFwOjphbGxvY2F0ZUJsb2NrKCkKIHsKLSNpZiBPUyhE
QVJXSU4pCi0gICAgdm1fYWRkcmVzc190IGFkZHJlc3MgPSAwOwotICAgIHZtX21hcChjdXJyZW50
X3Rhc2soKSwgJmFkZHJlc3MsIEJMT0NLX1NJWkUsIEJMT0NLX09GRlNFVF9NQVNLLCBWTV9GTEFH
U19BTllXSEVSRSB8IFZNX1RBR19GT1JfQ09MTEVDVE9SX01FTU9SWSwgTUVNT1JZX09CSkVDVF9O
VUxMLCAwLCBGQUxTRSwgVk1fUFJPVF9ERUZBVUxULCBWTV9QUk9UX0RFRkFVTFQsIFZNX0lOSEVS
SVRfREVGQVVMVCk7Ci0jZWxpZiBPUyhTWU1CSUFOKQotICAgIHZvaWQqIGFkZHJlc3MgPSBtX2Js
b2NrYWxsb2NhdG9yLmFsbG9jKCk7ICAKLSAgICBpZiAoIWFkZHJlc3MpCi0gICAgICAgIENSQVNI
KCk7Ci0jZWxpZiBPUyhXSU5DRSkKLSAgICB2b2lkKiBhZGRyZXNzID0gVmlydHVhbEFsbG9jKE5V
TEwsIEJMT0NLX1NJWkUsIE1FTV9DT01NSVQgfCBNRU1fUkVTRVJWRSwgUEFHRV9SRUFEV1JJVEUp
OwotI2VsaWYgT1MoV0lORE9XUykKLSNpZiBDT01QSUxFUihNSU5HVykgJiYgIUNPTVBJTEVSKE1J
TkdXNjQpCi0gICAgdm9pZCogYWRkcmVzcyA9IF9fbWluZ3dfYWxpZ25lZF9tYWxsb2MoQkxPQ0tf
U0laRSwgQkxPQ0tfU0laRSk7Ci0jZWxzZQotICAgIHZvaWQqIGFkZHJlc3MgPSBfYWxpZ25lZF9t
YWxsb2MoQkxPQ0tfU0laRSwgQkxPQ0tfU0laRSk7Ci0jZW5kaWYKLSAgICBtZW1zZXQoYWRkcmVz
cywgMCwgQkxPQ0tfU0laRSk7Ci0jZWxpZiBIQVZFKFBPU0lYX01FTUFMSUdOKQotICAgIHZvaWQq
IGFkZHJlc3M7Ci0gICAgcG9zaXhfbWVtYWxpZ24oJmFkZHJlc3MsIEJMT0NLX1NJWkUsIEJMT0NL
X1NJWkUpOwotI2Vsc2UKLQotI2lmIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFEUykKLSNlcnJv
ciBOZWVkIHRvIGluaXRpYWxpemUgcGFnZXNpemUgc2FmZWx5LgotI2VuZGlmCi0gICAgc3RhdGlj
IHNpemVfdCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0KLSAgICBzaXplX3QgZXh0cmEgPSAw
OwotICAgIGlmIChCTE9DS19TSVpFID4gcGFnZXNpemUpCi0gICAgICAgIGV4dHJhID0gQkxPQ0tf
U0laRSAtIHBhZ2VzaXplOwotCi0gICAgdm9pZCogbW1hcFJlc3VsdCA9IG1tYXAoTlVMTCwgQkxP
Q0tfU0laRSArIGV4dHJhLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1B
UF9BTk9OLCAtMSwgMCk7Ci0gICAgdWludHB0cl90IGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4obW1hcFJlc3VsdCk7Ci0KLSAgICBzaXplX3QgYWRqdXN0ID0gMDsKLSAgICBp
ZiAoKGFkZHJlc3MgJiBCTE9DS19PRkZTRVRfTUFTSykgIT0gMCkKLSAgICAgICAgYWRqdXN0ID0g
QkxPQ0tfU0laRSAtIChhZGRyZXNzICYgQkxPQ0tfT0ZGU0VUX01BU0spOwotCi0gICAgaWYgKGFk
anVzdCA+IDApCi0gICAgICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PGNoYXIqPihhZGRyZXNz
KSwgYWRqdXN0KTsKLQotICAgIGlmIChhZGp1c3QgPCBleHRyYSkKLSAgICAgICAgbXVubWFwKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFkZHJlc3MgKyBhZGp1c3QgKyBCTE9DS19TSVpFKSwgZXh0
cmEgLSBhZGp1c3QpOwotCi0gICAgYWRkcmVzcyArPSBhZGp1c3Q7Ci0jZW5kaWYKKyAgICBBbGln
bmVkQ29sbGVjdG9yQmxvY2sgYWxsb2NhdGlvbiA9IG1fYmxvY2thbGxvY2F0b3IuYWxsb2NhdGUo
KTsKKyAgICBDb2xsZWN0b3JCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxDb2xsZWN0b3JCbG9j
ayo+KGFsbG9jYXRpb24uYmFzZSgpKTsKIAogICAgIC8vIEluaXRpYWxpemUgYmxvY2suCiAKLSAg
ICBDb2xsZWN0b3JCbG9jayogYmxvY2sgPSByZWludGVycHJldF9jYXN0PENvbGxlY3RvckJsb2Nr
Kj4oYWRkcmVzcyk7CiAgICAgYmxvY2stPmhlYXAgPSB0aGlzOwogICAgIGNsZWFyTWFya0JpdHMo
YmxvY2spOwogCkBAIC0yNTEsMTQgKzIwMiwxNCBAQCBORVZFUl9JTkxJTkUgQ29sbGVjdG9yQmxv
Y2sqIEhlYXA6OmFsbG9jCiAKICAgICBzaXplX3QgbnVtQmxvY2tzID0gbV9oZWFwLm51bUJsb2Nr
czsKICAgICBpZiAobV9oZWFwLnVzZWRCbG9ja3MgPT0gbnVtQmxvY2tzKSB7Ci0gICAgICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgbWF4TnVtQmxvY2tzID0gVUxPTkdfTUFYIC8gc2l6ZW9mKENvbGxl
Y3RvckJsb2NrKikgLyBHUk9XVEhfRkFDVE9SOworICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IG1heE51bUJsb2NrcyA9IFVMT05HX01BWCAvIHNpemVvZihBbGlnbmVkQ29sbGVjdG9yQmxvY2sp
IC8gR1JPV1RIX0ZBQ1RPUjsKICAgICAgICAgaWYgKG51bUJsb2NrcyA+IG1heE51bUJsb2NrcykK
ICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIG51bUJsb2NrcyA9IG1heChNSU5fQVJSQVlf
U0laRSwgbnVtQmxvY2tzICogR1JPV1RIX0ZBQ1RPUik7CiAgICAgICAgIG1faGVhcC5udW1CbG9j
a3MgPSBudW1CbG9ja3M7Ci0gICAgICAgIG1faGVhcC5ibG9ja3MgPSBzdGF0aWNfY2FzdDxDb2xs
ZWN0b3JCbG9jayoqPihmYXN0UmVhbGxvYyhtX2hlYXAuYmxvY2tzLCBudW1CbG9ja3MgKiBzaXpl
b2YoQ29sbGVjdG9yQmxvY2sqKSkpOworICAgICAgICBtX2hlYXAuYmxvY2tzID0gc3RhdGljX2Nh
c3Q8QWxpZ25lZENvbGxlY3RvckJsb2NrKj4oZmFzdFJlYWxsb2MobV9oZWFwLmJsb2NrcywgbnVt
QmxvY2tzICogc2l6ZW9mKEFsaWduZWRDb2xsZWN0b3JCbG9jaykpKTsKICAgICB9Ci0gICAgbV9o
ZWFwLmJsb2Nrc1ttX2hlYXAudXNlZEJsb2NrcysrXSA9IGJsb2NrOworICAgIG1faGVhcC5ibG9j
a3NbbV9oZWFwLnVzZWRCbG9ja3MrK10gPSBhbGxvY2F0aW9uOwogCiAgICAgcmV0dXJuIGJsb2Nr
OwogfQpAQCAtMjcxLDcgKzIyMiw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEhlYXA6OmZyZWVCbG9j
ayhzaXplX3QKICAgICBPYmplY3RJdGVyYXRvciBlbmQobV9oZWFwLCBibG9jayArIDEpOwogICAg
IGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAoKml0KS0+fkpTQ2VsbCgpOwotICAg
IGZyZWVCbG9ja1B0cihtX2hlYXAuYmxvY2tzW2Jsb2NrXSk7CisgICAgbV9oZWFwLmJsb2Nrc1ti
bG9ja10uZGVhbGxvY2F0ZSgpOwogCiAgICAgLy8gc3dhcCB3aXRoIHRoZSBsYXN0IGJsb2NrIHNv
IHdlIGNvbXBhY3QgYXMgd2UgZ28KICAgICBtX2hlYXAuYmxvY2tzW2Jsb2NrXSA9IG1faGVhcC5i
bG9ja3NbbV9oZWFwLnVzZWRCbG9ja3MgLSAxXTsKQEAgLTI3OSwzMSArMjMwLDEwIEBAIE5FVkVS
X0lOTElORSB2b2lkIEhlYXA6OmZyZWVCbG9jayhzaXplX3QKIAogICAgIGlmIChtX2hlYXAubnVt
QmxvY2tzID4gTUlOX0FSUkFZX1NJWkUgJiYgbV9oZWFwLnVzZWRCbG9ja3MgPCBtX2hlYXAubnVt
QmxvY2tzIC8gTE9XX1dBVEVSX0ZBQ1RPUikgewogICAgICAgICBtX2hlYXAubnVtQmxvY2tzID0g
bV9oZWFwLm51bUJsb2NrcyAvIEdST1dUSF9GQUNUT1I7IAotICAgICAgICBtX2hlYXAuYmxvY2tz
ID0gc3RhdGljX2Nhc3Q8Q29sbGVjdG9yQmxvY2sqKj4oZmFzdFJlYWxsb2MobV9oZWFwLmJsb2Nr
cywgbV9oZWFwLm51bUJsb2NrcyAqIHNpemVvZihDb2xsZWN0b3JCbG9jayopKSk7CisgICAgICAg
IG1faGVhcC5ibG9ja3MgPSBzdGF0aWNfY2FzdDxBbGlnbmVkQ29sbGVjdG9yQmxvY2sqPihmYXN0
UmVhbGxvYyhtX2hlYXAuYmxvY2tzLCBtX2hlYXAubnVtQmxvY2tzICogc2l6ZW9mKEFsaWduZWRD
b2xsZWN0b3JCbG9jaykpKTsKICAgICB9CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEhlYXA6OmZy
ZWVCbG9ja1B0cihDb2xsZWN0b3JCbG9jayogYmxvY2spCi17Ci0jaWYgT1MoREFSV0lOKSAgICAK
LSAgICB2bV9kZWFsbG9jYXRlKGN1cnJlbnRfdGFzaygpLCByZWludGVycHJldF9jYXN0PHZtX2Fk
ZHJlc3NfdD4oYmxvY2spLCBCTE9DS19TSVpFKTsKLSNlbGlmIE9TKFNZTUJJQU4pCi0gICAgbV9i
bG9ja2FsbG9jYXRvci5mcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJsb2NrKSk7Ci0jZWxp
ZiBPUyhXSU5DRSkKLSAgICBWaXJ0dWFsRnJlZShibG9jaywgMCwgTUVNX1JFTEVBU0UpOwotI2Vs
aWYgT1MoV0lORE9XUykKLSNpZiBDT01QSUxFUihNSU5HVykgJiYgIUNPTVBJTEVSKE1JTkdXNjQp
Ci0gICAgX19taW5nd19hbGlnbmVkX2ZyZWUoYmxvY2spOwotI2Vsc2UKLSAgICBfYWxpZ25lZF9m
cmVlKGJsb2NrKTsKLSNlbmRpZgotI2VsaWYgSEFWRShQT1NJWF9NRU1BTElHTikKLSAgICBmcmVl
KGJsb2NrKTsKLSNlbHNlCi0gICAgbXVubWFwKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJsb2Nr
KSwgQkxPQ0tfU0laRSk7Ci0jZW5kaWYKLX0KLQogdm9pZCBIZWFwOjpmcmVlQmxvY2tzKCkKIHsK
ICAgICBQcm90ZWN0Q291bnRTZXQgcHJvdGVjdGVkVmFsdWVzQ29weSA9IG1fcHJvdGVjdGVkVmFs
dWVzOwpAQCAtMzI3LDcgKzI1Nyw3IEBAIHZvaWQgSGVhcDo6ZnJlZUJsb2NrcygpCiAgICAgICAg
IGl0LT5maXJzdC0+fkpTQ2VsbCgpOwogCiAgICAgZm9yIChzaXplX3QgYmxvY2sgPSAwOyBibG9j
ayA8IG1faGVhcC51c2VkQmxvY2tzOyArK2Jsb2NrKQotICAgICAgICBmcmVlQmxvY2tQdHIobV9o
ZWFwLmJsb2Nrc1tibG9ja10pOworICAgICAgICBtX2hlYXAuYmxvY2tzW2Jsb2NrXS5kZWFsbG9j
YXRlKCk7CiAKICAgICBmYXN0RnJlZShtX2hlYXAuYmxvY2tzKTsKIApAQCAtMzgwLDcgKzMxMCw3
IEBAIGFsbG9jYXRlOgogCiAgICAgZG8gewogICAgICAgICBBU1NFUlQobV9oZWFwLm5leHRCbG9j
ayA8IG1faGVhcC51c2VkQmxvY2tzKTsKLSAgICAgICAgQmxvY2sqIGJsb2NrID0gcmVpbnRlcnBy
ZXRfY2FzdDxCbG9jayo+KG1faGVhcC5ibG9ja3NbbV9oZWFwLm5leHRCbG9ja10pOworICAgICAg
ICBCbG9jayogYmxvY2sgPSBtX2hlYXAuY29sbGVjdG9yQmxvY2sobV9oZWFwLm5leHRCbG9jayk7
CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIEFTU0VSVChtX2hlYXAubmV4dENlbGwgPCBIZWFw
Q29uc3RhbnRzOjpjZWxsc1BlckJsb2NrKTsKICAgICAgICAgICAgIGlmICghYmxvY2stPm1hcmtl
ZC5nZXQobV9oZWFwLm5leHRDZWxsKSkgeyAvLyBBbHdheXMgZmFsc2UgZm9yIHRoZSBsYXN0IGNl
bGwgaW4gdGhlIGJsb2NrCkBAIC00MzUsMTAgKzM2NSwxMCBAQCB2b2lkIEhlYXA6OnNocmlua0Js
b2NrcyhzaXplX3QgbmVlZGVkQmxvCiAgICAgCiAgICAgLy8gQ2xlYXIgdGhlIGFsd2F5cy1vbiBs
YXN0IGJpdCwgc28gaXNFbXB0eSgpIGlzbid0IGZvb2xlZCBieSBpdC4KICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1faGVhcC51c2VkQmxvY2tzOyArK2kpCi0gICAgICAgIG1faGVhcC5ibG9j
a3NbaV0tPm1hcmtlZC5jbGVhcihIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSk7Cisg
ICAgICAgIG1faGVhcC5jb2xsZWN0b3JCbG9jayhpKS0+bWFya2VkLmNsZWFyKEhlYXBDb25zdGFu
dHM6OmNlbGxzUGVyQmxvY2sgLSAxKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IG1f
aGVhcC51c2VkQmxvY2tzICYmIG1faGVhcC51c2VkQmxvY2tzICE9IG5lZWRlZEJsb2NrczsgKSB7
Ci0gICAgICAgIGlmIChtX2hlYXAuYmxvY2tzW2ldLT5tYXJrZWQuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGlmIChtX2hlYXAuY29sbGVjdG9yQmxvY2soaSktPm1hcmtlZC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIGZyZWVCbG9jayhpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICArK2k7
CkBAIC00NDYsNyArMzc2LDcgQEAgdm9pZCBIZWFwOjpzaHJpbmtCbG9ja3Moc2l6ZV90IG5lZWRl
ZEJsbwogCiAgICAgLy8gUmVzZXQgdGhlIGFsd2F5cy1vbiBsYXN0IGJpdC4KICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1faGVhcC51c2VkQmxvY2tzOyArK2kpCi0gICAgICAgIG1faGVhcC5i
bG9ja3NbaV0tPm1hcmtlZC5zZXQoSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpOwor
ICAgICAgICBtX2hlYXAuY29sbGVjdG9yQmxvY2soaSktPm1hcmtlZC5zZXQoSGVhcENvbnN0YW50
czo6Y2VsbHNQZXJCbG9jayAtIDEpOwogfQogCiAjaWYgT1MoV0lOQ0UpCkBAIC03NDEsNyArNjcx
LDYgQEAgdm9pZCBIZWFwOjptYXJrQ29uc2VydmF0aXZlbHkoTWFya1N0YWNrJgogICAgIGNoYXIq
KiBwID0gc3RhdGljX2Nhc3Q8Y2hhcioqPihzdGFydCk7CiAgICAgY2hhcioqIGUgPSBzdGF0aWNf
Y2FzdDxjaGFyKio+KGVuZCk7CiAKLSAgICBDb2xsZWN0b3JCbG9jayoqIGJsb2NrcyA9IG1faGVh
cC5ibG9ja3M7CiAgICAgd2hpbGUgKHAgIT0gZSkgewogICAgICAgICBjaGFyKiB4ID0gKnArKzsK
ICAgICAgICAgaWYgKGlzUG9zc2libGVDZWxsKHgpKSB7CkBAIC03NTcsNyArNjg2LDcgQEAgdm9p
ZCBIZWFwOjptYXJrQ29uc2VydmF0aXZlbHkoTWFya1N0YWNrJgogICAgICAgICAgICAgQ29sbGVj
dG9yQmxvY2sqIGJsb2NrQWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29sbGVjdG9yQmxvY2sqPih4
QXNCaXRzIC0gb2Zmc2V0KTsKICAgICAgICAgICAgIHVzZWRCbG9ja3MgPSBtX2hlYXAudXNlZEJs
b2NrczsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGJsb2NrID0gMDsgYmxvY2sgPCB1c2VkQmxv
Y2tzOyBibG9jaysrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2Nrc1tibG9ja10gIT0gYmxv
Y2tBZGRyKQorICAgICAgICAgICAgICAgIGlmIChtX2hlYXAuY29sbGVjdG9yQmxvY2soYmxvY2sp
ICE9IGJsb2NrQWRkcikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgbWFya1N0YWNrLmFwcGVuZChyZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHhBc0JpdHMp
KTsKICAgICAgICAgICAgICAgICBtYXJrU3RhY2suZHJhaW4oKTsKQEAgLTEwMDYsNyArOTM1LDcg
QEAgdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhNYXJrU3RhYwogdm9pZCBIZWFwOjpj
bGVhck1hcmtCaXRzKCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faGVhcC51c2Vk
QmxvY2tzOyArK2kpCi0gICAgICAgIGNsZWFyTWFya0JpdHMobV9oZWFwLmJsb2Nrc1tpXSk7Cisg
ICAgICAgIGNsZWFyTWFya0JpdHMobV9oZWFwLmNvbGxlY3RvckJsb2NrKGkpKTsKIH0KIAogdm9p
ZCBIZWFwOjpjbGVhck1hcmtCaXRzKENvbGxlY3RvckJsb2NrKiBibG9jaykKQEAgLTEwMjUsOSAr
OTU0LDkgQEAgc2l6ZV90IEhlYXA6Om1hcmtlZENlbGxzKHNpemVfdCBzdGFydEJsbwogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIHNpemVfdCByZXN1bHQgPSAwOwotICAgIHJlc3VsdCArPSBtX2hl
YXAuYmxvY2tzW3N0YXJ0QmxvY2tdLT5tYXJrZWQuY291bnQoc3RhcnRDZWxsKTsKKyAgICByZXN1
bHQgKz0gbV9oZWFwLmNvbGxlY3RvckJsb2NrKHN0YXJ0QmxvY2spLT5tYXJrZWQuY291bnQoc3Rh
cnRDZWxsKTsKICAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRCbG9jayArIDE7IGkgPCBtX2hlYXAu
dXNlZEJsb2NrczsgKytpKQotICAgICAgICByZXN1bHQgKz0gbV9oZWFwLmJsb2Nrc1tpXS0+bWFy
a2VkLmNvdW50KCk7CisgICAgICAgIHJlc3VsdCArPSBtX2hlYXAuY29sbGVjdG9yQmxvY2soaSkt
Pm1hcmtlZC5jb3VudCgpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2xsZWN0b3IuaAkocmV2aXNpb24gNjQ0ODcpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbGxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQsMTMgQEAKIAog
I2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9C
aXRtYXAuaD4KICNpbmNsdWRlIDx3dGYvRml4ZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
Q291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYWdl
QWxsb2NhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+CiAKQEAgLTM2LDkgKzM4LDcgQEAKICNpbmNsdWRlIDxwdGhyZWFkLmg+
CiAjZW5kaWYKIAotI2lmIE9TKFNZTUJJQU4pCi0jaW5jbHVkZSA8d3RmL3N5bWJpYW4vQmxvY2tB
bGxvY2F0b3JTeW1iaWFuLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvQmxvY2tBbGxvY2F0b3Iu
aD4KIAogI2RlZmluZSBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKGNsYXNzKSBDT01QSUxFX0FT
U0VSVChzaXplb2YoY2xhc3MpIDw9IENFTExfU0laRSwgY2xhc3NfZml0c19pbl9jZWxsKQogCkBA
IC01NSwxMCArNTUsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBMaXZlT2JqZWN0
SXRlcmF0b3I7CiAKKyNpZiBPUyhXSU5DRSkgfHwgT1MoU1lNQklBTikKKyAgICBjb25zdCBzaXpl
X3QgQkxPQ0tfU0laRSA9IDY0ICogMTAyNDsgLy8gNjRrCisjZWxzZQorICAgIGNvbnN0IHNpemVf
dCBCTE9DS19TSVpFID0gNjQgKiA0MDk2OyAvLyAyNTZrCisjZW5kaWYKKworICAgIHR5cGVkZWYg
V1RGOjpBbGlnbmVkQmxvY2tBbGxvY2F0b3I8QkxPQ0tfU0laRT4gQ29sbGVjdG9yQmxvY2tBbGxv
Y2F0b3I7CisgICAgdHlwZWRlZiBXVEY6OkFsaWduZWRCbG9jazxCTE9DS19TSVpFPiBBbGlnbmVk
Q29sbGVjdG9yQmxvY2s7CisKICAgICBzdHJ1Y3QgQ29sbGVjdG9ySGVhcCB7CiAgICAgICAgIHNp
emVfdCBuZXh0QmxvY2s7CiAgICAgICAgIHNpemVfdCBuZXh0Q2VsbDsKLSAgICAgICAgQ29sbGVj
dG9yQmxvY2sqKiBibG9ja3M7CisgICAgICAgIEFsaWduZWRDb2xsZWN0b3JCbG9jayogYmxvY2tz
OwogICAgICAgICAKICAgICAgICAgdm9pZCogbmV4dE51bWJlcjsKIApAQCAtNjksNiArNzgsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgZGlkU2hyaW5rOwogCiAgICAgICAgIE9w
ZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0aW9uSW5Qcm9ncmVzczsKKworICAgICAgICBDb2xsZWN0
b3JCbG9jayogY29sbGVjdG9yQmxvY2soc2l6ZV90IGluZGV4KSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29sbGVjdG9yQmxvY2sqPihibG9ja3NbaW5k
ZXhdLmJhc2UoKSk7CisgICAgICAgIH0KICAgICB9OwogCiAgICAgY2xhc3MgSGVhcCA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CkBAIC0xMzcsNyArMTUxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgTkVWRVJfSU5MSU5FIENvbGxlY3RvckJsb2NrKiBhbGxvY2F0ZUJsb2NrKCk7CiAgICAg
ICAgIE5FVkVSX0lOTElORSB2b2lkIGZyZWVCbG9jayhzaXplX3QpOwotICAgICAgICBORVZFUl9J
TkxJTkUgdm9pZCBmcmVlQmxvY2tQdHIoQ29sbGVjdG9yQmxvY2sqKTsKICAgICAgICAgdm9pZCBm
cmVlQmxvY2tzKCk7CiAgICAgICAgIHZvaWQgcmVzaXplQmxvY2tzKCk7CiAgICAgICAgIHZvaWQg
Z3Jvd0Jsb2NrcyhzaXplX3QgbmVlZGVkQmxvY2tzKTsKQEAgLTE3NiwyMSArMTg5LDEzIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBwdGhyZWFkX2tleV90IG1fY3VycmVudFRocmVhZFJlZ2lz
dHJhcjsKICNlbmRpZgogCi0jaWYgT1MoU1lNQklBTikKICAgICAgICAgLy8gQWxsb2NhdGVzIGNv
bGxlY3RvciBibG9ja3Mgd2l0aCBjb3JyZWN0IGFsaWdubWVudAotICAgICAgICBXVEY6OkFsaWdu
ZWRCbG9ja0FsbG9jYXRvciBtX2Jsb2NrYWxsb2NhdG9yOyAKLSNlbmRpZgorICAgICAgICBDb2xs
ZWN0b3JCbG9ja0FsbG9jYXRvciBtX2Jsb2NrYWxsb2NhdG9yOyAKICAgICAgICAgCiAgICAgICAg
IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIH07CiAKICAgICAvLyB0dW5hYmxlIHBh
cmFtZXRlcnMKLSNpZiBPUyhXSU5DRSkgfHwgT1MoU1lNQklBTikKLSAgICBjb25zdCBzaXplX3Qg
QkxPQ0tfU0laRSA9IDY0ICogMTAyNDsgLy8gNjRrCi0jZWxzZQotICAgIGNvbnN0IHNpemVfdCBC
TE9DS19TSVpFID0gNjQgKiA0MDk2OyAvLyAyNTZrCi0jZW5kaWYKLQogICAgIC8vIGRlcml2ZWQg
Y29uc3RhbnRzCiAgICAgY29uc3Qgc2l6ZV90IEJMT0NLX09GRlNFVF9NQVNLID0gQkxPQ0tfU0la
RSAtIDE7CiAgICAgY29uc3Qgc2l6ZV90IEJMT0NLX01BU0sgPSB+QkxPQ0tfT0ZGU0VUX01BU0s7
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9ySGVhcEl0ZXJhdG9y
LmgJKHJldmlzaW9uIDY0NDg3KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3JI
ZWFwSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGlubGluZSBKU0NlbGwqIENvbGxlY3RvckhlYXBJdGVyYXRvcjo6b3BlcmF0
b3IqKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQ2Vs
bCo+KCZtX2hlYXAuYmxvY2tzW21fYmxvY2tdLT5jZWxsc1ttX2NlbGxdKTsKKyAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJm1faGVhcC5jb2xsZWN0b3JCbG9jayhtX2Js
b2NrKS0+Y2VsbHNbbV9jZWxsXSk7CiAgICAgfQogICAgIAogICAgIC8vIEl0ZXJhdG9ycyBhZHZh
bmNlIHVwIHRvIHRoZSBuZXh0LXRvLWxhc3QgLS0gYW5kIG5vdCB0aGUgbGFzdCAtLSBjZWxsIGlu
IGEKQEAgLTEwMyw3ICsxMDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKG1fYmxv
Y2sgPCBtX2hlYXAubmV4dEJsb2NrIHx8IChtX2Jsb2NrID09IG1faGVhcC5uZXh0QmxvY2sgJiYg
bV9jZWxsIDwgbV9oZWFwLm5leHRDZWxsKSkKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKIAot
ICAgICAgICB3aGlsZSAobV9ibG9jayA8IG1faGVhcC51c2VkQmxvY2tzICYmICFtX2hlYXAuYmxv
Y2tzW21fYmxvY2tdLT5tYXJrZWQuZ2V0KG1fY2VsbCkpCisgICAgICAgIHdoaWxlIChtX2Jsb2Nr
IDwgbV9oZWFwLnVzZWRCbG9ja3MgJiYgIW1faGVhcC5jb2xsZWN0b3JCbG9jayhtX2Jsb2NrKS0+
bWFya2VkLmdldChtX2NlbGwpKQogICAgICAgICAgICAgYWR2YW5jZShIZWFwQ29uc3RhbnRzOjpj
ZWxsc1BlckJsb2NrIC0gMSk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBAIC0xMTks
NyArMTE5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGFk
dmFuY2UoSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpOwogICAgICAgICAgICAgQVNT
RVJUKG1fYmxvY2sgPiBtX2hlYXAubmV4dEJsb2NrIHx8IChtX2Jsb2NrID09IG1faGVhcC5uZXh0
QmxvY2sgJiYgbV9jZWxsID49IG1faGVhcC5uZXh0Q2VsbCkpOwotICAgICAgICB9IHdoaWxlICht
X2Jsb2NrIDwgbV9oZWFwLnVzZWRCbG9ja3MgJiYgbV9oZWFwLmJsb2Nrc1ttX2Jsb2NrXS0+bWFy
a2VkLmdldChtX2NlbGwpKTsKKyAgICAgICAgfSB3aGlsZSAobV9ibG9jayA8IG1faGVhcC51c2Vk
QmxvY2tzICYmIG1faGVhcC5jb2xsZWN0b3JCbG9jayhtX2Jsb2NrKS0+bWFya2VkLmdldChtX2Nl
bGwpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIApJbmRleDogSmF2YVNjcmlwdENv
cmUvd3RmL0JpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9CaXRtYXAu
aAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9CaXRtYXAuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAq
LworI2lmbmRlZiBCaXRtYXBfaAorI2RlZmluZSBCaXRtYXBfaAorCisjaW5jbHVkZSAiRml4ZWRB
cnJheS5oIgorI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8c2l6ZV90IHNpemU+CitjbGFzcyBCaXRtYXAgeworcHJpdmF0ZToKKyAgICB0eXBl
ZGVmIHVpbnQzMl90IFdvcmRUeXBlOworCitwdWJsaWM6CisgICAgYm9vbCBnZXQoc2l6ZV90KSBj
b25zdDsKKyAgICB2b2lkIHNldChzaXplX3QpOworICAgIHZvaWQgY2xlYXIoc2l6ZV90KTsKKyAg
ICB2b2lkIGNsZWFyQWxsKCk7CisgICAgdm9pZCBhZHZhbmNlVG9OZXh0RnJlZUJpdChzaXplX3Qm
KSBjb25zdDsKKyAgICBzaXplX3QgY291bnQoc2l6ZV90ID0gMCkgY29uc3Q7CisgICAgc2l6ZV90
IGlzRW1wdHkoKSBjb25zdDsKKyAgICBzaXplX3QgaXNGdWxsKCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIGNvbnN0IFdvcmRUeXBlIHdvcmRTaXplID0gc2l6ZW9mKFdvcmRUeXBlKSAq
IDg7CisgICAgc3RhdGljIGNvbnN0IFdvcmRUeXBlIHdvcmRzID0gKHNpemUgKyB3b3JkU2l6ZSAt
IDEpIC8gd29yZFNpemU7CisKKyAgICAvLyB0aGUgbGl0ZXJhbCAnMScgaXMgb2YgdHlwZSBzaWdu
ZWQgaW50LiAgV2Ugd2FudCB0byB1c2UgYW4gdW5zaWduZWQKKyAgICAvLyB2ZXJzaW9uIG9mIHRo
ZSBjb3JyZWN0IHNpemUgd2hlbiBkb2luZyB0aGUgY2FsY3VsYXRpb25zIGJlY2F1c2UgaWYKKyAg
ICAvLyBXb3JkVHlwZSBpcyBsYXJnZXIgdGhhbiBpbnQsICcxIDw8IDMxJyB3aWxsIGZpcnN0IGJl
IHNpZ24gZXh0ZW5kZWQKKyAgICAvLyBhbmQgdGhlbiBjYXN0ZWQgdG8gdW5zaWduZWQsIG1lYW5p
bmcgdGhhdCBzZXQoMzEpIHdoZW4gV29yZFR5cGUgaXMKKyAgICAvLyBhIDY0IGJpdCB1bnNpZ25l
ZCBpbnQgd291bGQgZ2l2ZSAweGZmZmY4MDAwCisgICAgc3RhdGljIGNvbnN0IFdvcmRUeXBlIG9u
ZSA9IDE7CisKKyAgICBGaXhlZEFycmF5PFdvcmRUeXBlLCB3b3Jkcz4gYml0czsKK307CisKK3Rl
bXBsYXRlPHNpemVfdCBzaXplPgoraW5saW5lIGJvb2wgQml0bWFwPHNpemU+OjpnZXQoc2l6ZV90
IG4pIGNvbnN0Cit7CisgICAgcmV0dXJuICEhKGJpdHNbbiAvIHdvcmRTaXplXSAmIChvbmUgPDwg
KG4gJSB3b3JkU2l6ZSkpKTsKK30KKwordGVtcGxhdGU8c2l6ZV90IHNpemU+CitpbmxpbmUgdm9p
ZCBCaXRtYXA8c2l6ZT46OnNldChzaXplX3QgbikKK3sKKyAgICBiaXRzW24gLyB3b3JkU2l6ZV0g
fD0gKG9uZSA8PCAobiAlIHdvcmRTaXplKSk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBzaXplPgor
aW5saW5lIHZvaWQgQml0bWFwPHNpemU+OjpjbGVhcihzaXplX3QgbikKK3sKKyAgICBiaXRzW24g
LyB3b3JkU2l6ZV0gJj0gfihvbmUgPDwgKG4gJSB3b3JkU2l6ZSkpOworfQorCit0ZW1wbGF0ZTxz
aXplX3Qgc2l6ZT4KK2lubGluZSB2b2lkIEJpdG1hcDxzaXplPjo6Y2xlYXJBbGwoKQoreworICAg
IG1lbXNldChiaXRzLmRhdGEoKSwgMCwgc2l6ZW9mKGJpdHMpKTsKK30KKwordGVtcGxhdGU8c2l6
ZV90IHNpemU+CitpbmxpbmUgdm9pZCBCaXRtYXA8c2l6ZT46OmFkdmFuY2VUb05leHRGcmVlQml0
KHNpemVfdCYgc3RhcnQpIGNvbnN0Cit7CisgICAgaWYgKCF+Yml0c1tzdGFydCAvIHdvcmRTaXpl
XSkKKyAgICAgICAgc3RhcnQgPSAoKHN0YXJ0IC8gd29yZFNpemUpICsgMSkgKiB3b3JkU2l6ZTsK
KyAgICBlbHNlCisgICAgICAgICsrc3RhcnQ7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBzaXplPgor
aW5saW5lIHNpemVfdCBCaXRtYXA8c2l6ZT46OmNvdW50KHNpemVfdCBzdGFydCkgY29uc3QKK3sK
KyAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICBmb3IgKCA7IChzdGFydCAlIHdvcmRTaXplKTsg
KytzdGFydCkgeworICAgICAgICBpZiAoZ2V0KHN0YXJ0KSkKKyAgICAgICAgICAgICsrcmVzdWx0
OworICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnQgLyB3b3JkU2l6ZTsgaSA8IHdvcmRz
OyArK2kpCisgICAgICAgIHJlc3VsdCArPSBXVEY6OmJpdENvdW50KGJpdHNbaV0pOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBzaXplPgoraW5saW5lIHNpemVfdCBC
aXRtYXA8c2l6ZT46OmlzRW1wdHkoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgd29yZHM7ICsraSkKKyAgICAgICAgaWYgKGJpdHNbaV0pCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBzaXplPgoraW5s
aW5lIHNpemVfdCBCaXRtYXA8c2l6ZT46OmlzRnVsbCgpIGNvbnN0Cit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgICAgICBpZiAofmJpdHNbaV0pCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKyNlbmRpZgpJbmRl
eDogSmF2YVNjcmlwdENvcmUvd3RmL0Jsb2NrQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvd3RmL0Jsb2NrQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2Ny
aXB0Q29yZS93dGYvQmxvY2tBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNDMg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIEJsb2Nr
QWxsb2NhdG9yX2gKKyNkZWZpbmUgQmxvY2tBbGxvY2F0b3JfaAorCisjaW5jbHVkZSA8d3RmL0Jp
dG1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbi5oPgorCituYW1lc3BhY2UgV1RG
IHsKKworc3RydWN0IEFsaWduZWRCbG9ja0FsbG9jYXRvckNvbnN0YW50cyB7CisvLyBTZXQgc2Fu
ZSBkZWZhdWx0cyBpZiAtRDxmbGFnbmFtZT12YWx1ZT4gd2Fzbid0IHByb3ZpZGVkIHZpYSBjb21w
aWxlciBhcmdzCisjaWYgZGVmaW5lZChKU0NDT0xMRUNUT1JfVklSVFVBTE1FTV9SRVNFUlZBVElP
TikKKyAgICAvLyBLZWVwIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggc3ltYmlhbiBidWls
ZCBzeXN0ZW0KKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHZpcnR1YWxNZW1vcnlSZXNlcnZhdGlv
biA9IEpTQ0NPTExFQ1RPUl9WSVJUVUFMTUVNX1JFU0VSVkFUSU9OOworI2VsaWYgZGVmaW5lZChf
X1dJTlNfXykKKyAgICAvLyBFbXVsYXRvciBoYXMgbGltaXRlZCB2aXJ0dWFsIGFkZHJlc3Mgc3Bh
Y2UKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHZpcnR1YWxNZW1vcnlSZXNlcnZhdGlvbiA9IDB4
NDAwMDAwOworI2Vsc2UKKyAgICAvLyBIVyBoYXMgcGxlbnR5IG9mIHZpcnR1YWwgYWRkcmVzc2Vz
CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCB2aXJ0dWFsTWVtb3J5UmVzZXJ2YXRpb24gPSAweDgw
MDAwMDA7CisjZW5kaWYKK307CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+IGNsYXNzIEFs
aWduZWRCbG9jazsKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+IGNsYXNzIEFsaWduZWRCbG9j
a0FsbG9jYXRvcjsKKworI2lmIEhBVkUoQUxJR05FRF9BTExPQ0FURSkKKwordGVtcGxhdGU8c2l6
ZV90IGJsb2NrU2l6ZT4KK2NsYXNzIEFsaWduZWRCbG9ja0FsbG9jYXRvcjsKKwordGVtcGxhdGU8
c2l6ZV90IGJsb2NrU2l6ZT4KK2NsYXNzIEFsaWduZWRCbG9jayB7CitwdWJsaWM6CisgICAgdm9p
ZCBkZWFsbG9jYXRlKCk7CisgICAgdm9pZCogYmFzZSgpOworCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBBbGlnbmVkQmxvY2tBbGxvY2F0b3I8YmxvY2tTaXplPjsKKworICAgIEFsaWduZWRC
bG9jayhQYWdlQWxsb2NhdGlvbik7CisKKyAgICBQYWdlQWxsb2NhdGlvbiBtX2FsbG9jYXRpb247
Cit9OworCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPgorY2xhc3MgQWxpZ25lZEJsb2NrQWxs
b2NhdG9yIHsKK3B1YmxpYzoKKyAgICB2b2lkIGRlc3Ryb3koKTsKKyAgICBBbGlnbmVkQmxvY2s8
YmxvY2tTaXplPiBhbGxvY2F0ZSgpOworfTsKKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4K
K2lubGluZSB2b2lkIEFsaWduZWRCbG9ja0FsbG9jYXRvcjxibG9ja1NpemU+OjpkZXN0cm95KCkK
K3sKK30KKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2lubGluZSBBbGlnbmVkQmxvY2s8
YmxvY2tTaXplPiBBbGlnbmVkQmxvY2tBbGxvY2F0b3I8YmxvY2tTaXplPjo6YWxsb2NhdGUoKQor
eworICAgIHJldHVybiBBbGlnbmVkQmxvY2s8YmxvY2tTaXplPihQYWdlQWxsb2NhdGlvbjo6YWxs
b2NhdGVBbGlnbmVkKGJsb2NrU2l6ZSkpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXpl
PgoraW5saW5lIHZvaWQgQWxpZ25lZEJsb2NrPGJsb2NrU2l6ZT46OmRlYWxsb2NhdGUoKQorewor
ICAgIG1fYWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBibG9j
a1NpemU+CitpbmxpbmUgdm9pZCogQWxpZ25lZEJsb2NrPGJsb2NrU2l6ZT46OmJhc2UoKQorewor
ICAgIHJldHVybiBtX2FsbG9jYXRpb24uYmFzZSgpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYmxv
Y2tTaXplPgoraW5saW5lIEFsaWduZWRCbG9jazxibG9ja1NpemU+OjpBbGlnbmVkQmxvY2soUGFn
ZUFsbG9jYXRpb24gYWxsb2NhdGlvbikKKyAgICA6IG1fYWxsb2NhdGlvbihhbGxvY2F0aW9uKQor
eworfQorCisjZWxzZQorCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPgorY2xhc3MgQWxpZ25l
ZEJsb2NrIHsKK3B1YmxpYzoKKyAgICB2b2lkIGRlYWxsb2NhdGUoKTsKKyAgICB2b2lkKiBiYXNl
KCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEFsaWduZWRCbG9ja0FsbG9jYXRvcjxi
bG9ja1NpemU+OworCisgICAgQWxpZ25lZEJsb2NrKHZvaWQqIGJhc2UsIEFsaWduZWRCbG9ja0Fs
bG9jYXRvcjxibG9ja1NpemU+KiBhbGxvY2F0b3IpOworCisgICAgdm9pZCogbV9iYXNlOworICAg
IEFsaWduZWRCbG9ja0FsbG9jYXRvcjxibG9ja1NpemU+KiBtX2FsbG9jYXRvcjsKK307CisKK3Rl
bXBsYXRlPHNpemVfdCBibG9ja1NpemU+CitjbGFzcyBBbGlnbmVkQmxvY2tBbGxvY2F0b3Igewor
cHVibGljOgorICAgIEFsaWduZWRCbG9ja0FsbG9jYXRvcigpOworICAgIH5BbGlnbmVkQmxvY2tB
bGxvY2F0b3IoKTsKKworICAgIHZvaWQgZGVzdHJveSgpOworICAgIEFsaWduZWRCbG9jazxibG9j
a1NpemU+IGFsbG9jYXRlKCk7CisgICAgdm9pZCBmcmVlKEFsaWduZWRCbG9jazxibG9ja1NpemU+
KTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHJlc2VydmF0aW9uU2l6ZSA9
IEFsaWduZWRCbG9ja0FsbG9jYXRvckNvbnN0YW50czo6dmlydHVhbE1lbW9yeVJlc2VydmF0aW9u
OworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYml0bWFwU2l6ZSA9IHJlc2VydmF0aW9uU2l6ZSAv
IGJsb2NrU2l6ZTsKKworICAgIFBhZ2VBbGxvY2F0aW9uIG1fcmVzZXJ2YXRpb247CisgICAgc2l6
ZV90IG1fbmV4dEZyZWU7CisgICAgdWludHB0cl90IG1fcmVzZXJ2YXRpb25CYXNlOworICAgIFdU
Rjo6Qml0bWFwPGJpdG1hcFNpemU+IG1fYml0bWFwOworfTsKKwordGVtcGxhdGU8c2l6ZV90IGJs
b2NrU2l6ZT4KK0FsaWduZWRCbG9ja0FsbG9jYXRvcjxibG9ja1NpemU+OjpBbGlnbmVkQmxvY2tB
bGxvY2F0b3IoKQorICAgIDogbV9yZXNlcnZhdGlvbihQYWdlQWxsb2NhdGlvbjo6cmVzZXJ2ZShy
ZXNlcnZhdGlvblNpemUgKyBibG9ja1NpemUpKQorICAgICwgbV9uZXh0RnJlZSgwKQoreworICAg
IC8vIGNoZWNrIHRoYXQgYmxvY2tTaXplIGFuZCByZXNlcnZhdGlvblNpemUgYXJlIHBvd2VycyBv
ZiB0d28KKyAgICBBU1NFUlQoIShibG9ja1NpemUgJiAoYmxvY2tTaXplIC0gMSkpKTsKKyAgICBB
U1NFUlQoIShyZXNlcnZhdGlvblNpemUgJiAocmVzZXJ2YXRpb25TaXplIC0gMSkpKTsKKworICAg
IC8vIGNoZWNrIHRoYXQgYmxvY2tTaXplIGlzIGEgbXVsdGlwbGUgb2YgcGFnZVNpemUgYW5kIHRo
YXQKKyAgICAvLyByZXNlcnZhdGlvblNpemUgaXMgYSBtdWx0aXBsZSBvZiBibG9ja1NpemUKKyAg
ICBBU1NFUlQoIShibG9ja1NpemUgJiAoUGFnZUFsbG9jYXRpb246OnBhZ2VzaXplKCkgLSAxKSkp
OworICAgIEFTU0VSVCghKHJlc2VydmF0aW9uU2l6ZSAmIChibG9ja1NpemUgLSAxKSkpOworCisg
ICAgQVNTRVJUKG1fcmVzZXJ2YXRpb24pOworCisgICAgbV9yZXNlcnZhdGlvbkJhc2UgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOworICAgIG1fcmVz
ZXJ2YXRpb25CYXNlID0gKG1fcmVzZXJ2YXRpb25CYXNlICsgYmxvY2tTaXplKSAmIH4oYmxvY2tT
aXplIC0gMSk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+CitBbGlnbmVkQmxvY2tB
bGxvY2F0b3I8YmxvY2tTaXplPjo6fkFsaWduZWRCbG9ja0FsbG9jYXRvcigpCit7CisgICAgZGVz
dHJveSgpOworICAgIG1fcmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOworfQorCit0ZW1wbGF0ZTxz
aXplX3QgYmxvY2tTaXplPgoraW5saW5lIHZvaWQgQWxpZ25lZEJsb2NrQWxsb2NhdG9yPGJsb2Nr
U2l6ZT46OmRlc3Ryb3koKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiaXRtYXBT
aXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYml0bWFwLmdldChpKSkgeworICAgICAgICAgICAg
dm9pZCogYmxvY2tBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9yZXNlcnZhdGlv
bkJhc2UgKyBtX25leHRGcmVlICogYmxvY2tTaXplKTsKKyAgICAgICAgICAgIG1fcmVzZXJ2YXRp
b24uZGVjb21taXQoYmxvY2tBZGRyZXNzLCBibG9ja1NpemUpOworCisgICAgICAgICAgICBtX2Jp
dG1hcC5jbGVhcihpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGU8c2l6ZV90IGJs
b2NrU2l6ZT4KK0FsaWduZWRCbG9jazxibG9ja1NpemU+IEFsaWduZWRCbG9ja0FsbG9jYXRvcjxi
bG9ja1NpemU+OjphbGxvY2F0ZSgpCit7CisgICAgd2hpbGUgKG1fbmV4dEZyZWUgPCBiaXRtYXBT
aXplKSB7CisgICAgICAgIGlmICghbV9iaXRtYXAuZ2V0KG1fbmV4dEZyZWUpKSB7CisgICAgICAg
ICAgICB2b2lkKiBibG9ja0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihtX3Jlc2Vy
dmF0aW9uQmFzZSArIG1fbmV4dEZyZWUgKiBibG9ja1NpemUpOworICAgICAgICAgICAgbV9yZXNl
cnZhdGlvbi5jb21taXQoYmxvY2tBZGRyZXNzLCBibG9ja1NpemUpOworCisgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgImk6ICV6dVxuIiwgbV9uZXh0RnJlZSk7CisgICAgICAgICAgICBtX2Jp
dG1hcC5zZXQobV9uZXh0RnJlZSk7CisgICAgICAgICAgICArK21fbmV4dEZyZWU7CisKKyAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiYWxsb2FjdGU6ICVwXG4iLCBibG9ja0FkZHJlc3MpOwor
ICAgICAgICAgICAgcmV0dXJuIEFsaWduZWRCbG9jazxibG9ja1NpemU+KGJsb2NrQWRkcmVzcywg
dGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgbV9iaXRtYXAuYWR2YW5jZVRvTmV4dEZyZWVCaXQo
bV9uZXh0RnJlZSk7CisgICAgfQorCisgICAgaWYgKG1fYml0bWFwLmlzRnVsbCgpKQorICAgICAg
ICByZXR1cm4gQWxpZ25lZEJsb2NrPGJsb2NrU2l6ZT4oMCwgdGhpcyk7CisKKyAgICBtX25leHRG
cmVlID0gMDsKKworICAgIHJldHVybiBhbGxvY2F0ZSgpOworfQorCit0ZW1wbGF0ZTxzaXplX3Qg
YmxvY2tTaXplPgordm9pZCBBbGlnbmVkQmxvY2tBbGxvY2F0b3I8YmxvY2tTaXplPjo6ZnJlZShB
bGlnbmVkQmxvY2s8YmxvY2tTaXplPiBhbGxvY2F0aW9uKQoreworICAgIGZwcmludGYoc3RkZXJy
LCAiZnJlZTogJXBcbiIsIGFsbG9jYXRpb24uYmFzZSgpKTsKKyAgICBBU1NFUlQoYWxsb2NhdGlv
bi5iYXNlKCkpOworICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQoYWxsb2NhdGlvbi5iYXNlKCks
IGJsb2NrU2l6ZSk7CisKKyAgICBzaXplX3QgZGlmZiA9IChyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oYWxsb2NhdGlvbi5iYXNlKCkpIC0gbV9yZXNlcnZhdGlvbkJhc2UpOworICAgIEFTU0VS
VCghKGRpZmYgJiAoYmxvY2tTaXplIC0gMSkpKTsKKworICAgIHNpemVfdCBpID0gZGlmZiAvIGJs
b2NrU2l6ZTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgImk6ICV6dVxuIiwgaSk7CisgICAgQVNTRVJU
KG1fYml0bWFwLmdldChpKSk7CisKKyAgICBtX2JpdG1hcC5jbGVhcihpKTsKK30KKwordGVtcGxh
dGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2lubGluZSB2b2lkIEFsaWduZWRCbG9jazxibG9ja1NpemU+
OjpkZWFsbG9jYXRlKCkKK3sKKyAgICBtX2FsbG9jYXRvci0+ZnJlZSgqdGhpcyk7Cit9CisKK3Rl
bXBsYXRlPHNpemVfdCBibG9ja1NpemU+CitpbmxpbmUgdm9pZCogQWxpZ25lZEJsb2NrPGJsb2Nr
U2l6ZT46OmJhc2UoKQoreworICAgIHJldHVybiBtX2Jhc2U7Cit9CisKK3RlbXBsYXRlPHNpemVf
dCBibG9ja1NpemU+CitBbGlnbmVkQmxvY2s8YmxvY2tTaXplPjo6QWxpZ25lZEJsb2NrKHZvaWQq
IGJhc2UsIEFsaWduZWRCbG9ja0FsbG9jYXRvcjxibG9ja1NpemU+KiBhbGxvY2F0b3IpCisgICAg
OiBtX2Jhc2UoYmFzZSkKKyAgICAsIG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKK3sKK30KKworI2Vu
ZGlmCisKK30KKworI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvUGFnZUFsbG9jYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUGFnZUFsbG9jYXRpb24uaAko
cmV2aXNpb24gNjQ0ODcpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvUGFnZUFsbG9jYXRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNTEgQEAKICNkZWZpbmUgUEFHRV9BTExPQ0FUSU9O
X0FMTE9DQVRFX0FUIDAKICNlbmRpZgogCisjaWYgSEFWRShNTUFQKQorI2luY2x1ZGUgPHN5cy9t
bWFuLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2lmIE9TKERBUldJTikKKwor
I2luY2x1ZGUgPG1hY2gvbWFjaF9pbml0Lmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX3BvcnQuaD4K
KyNpbmNsdWRlIDxtYWNoL3Rhc2suaD4KKyNpbmNsdWRlIDxtYWNoL3RocmVhZF9hY3QuaD4KKyNp
bmNsdWRlIDxtYWNoL3ZtX21hcC5oPgorCisjZWxpZiBPUyhXSU5ET1dTKQorCisjaW5jbHVkZSA8
bWFsbG9jLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCisjZWxpZiBPUyhIQUlLVSkKKworI2lu
Y2x1ZGUgPE9TLmg+CisKKyNlbGlmIE9TKFVOSVgpCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwor
I2lmIE9TKFNPTEFSSVMpCisjaW5jbHVkZSA8dGhyZWFkLmg+CisjZWxzZQorI2luY2x1ZGUgPHB0
aHJlYWQuaD4KKyNlbmRpZgorCisjaWYgSEFWRShQVEhSRUFEX05QX0gpCisjaW5jbHVkZSA8cHRo
cmVhZF9ucC5oPgorI2VuZGlmCisKKyNpZiBPUyhRTlgpCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNp
bmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3Byb2Nm
cy5oPgorI2VuZGlmCisKKyNlbmRpZgorCiBuYW1lc3BhY2UgV1RGIHsKIAogY2xhc3MgUGFnZUFs
bG9jYXRpb24gewpAQCAtODIsNiArMTI3LDEyIEBAIHB1YmxpYzoKICAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhbV9iYXNlOyB9CisjaWYgQ09NUElMRVIoV0lOU0NXKQorICAgIG9wZXJhdG9yIGJv
b2wgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9CisjZWxzZQorICAgIHR5cGVkZWYgdm9pZCogUGFn
ZUFsbG9jYXRpb246OipVbnNwZWNpZmllZEJvb2xUeXBlOworICAgIG9wZXJhdG9yIFVuc3BlY2lm
aWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2UgPyAmUGFnZUFsbG9jYXRpb246Om1f
YmFzZSA6IDA7IH0KKyNlbmRpZgogCiAgICAgYm9vbCBjb21taXQodm9pZCosIHNpemVfdCwgYm9v
bCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNlKSBjb25zdDsKICAgICB2
b2lkIGRlY29tbWl0KHZvaWQqLCBzaXplX3QpIGNvbnN0OwpAQCAtOTMsNiArMTQ0LDEyIEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFnZUFsbG9jYXRpb24gYWxsb2NhdGVBdCh2b2lkKiBhZGRyZXNz
LCBib29sIGZpeGVkLCBzaXplX3QsIFVzYWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxl
ID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpOwogICAgIHN0YXRpYyBQYWdlQWxsb2Nh
dGlvbiByZXNlcnZlQXQodm9pZCogYWRkcmVzcywgYm9vbCBmaXhlZCwgc2l6ZV90LCBVc2FnZSA9
IFVua25vd25Vc2FnZSwgYm9vbCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZh
bHNlKTsKICNlbmRpZgorCisjaWYgSEFWRShBTElHTkVEX0FMTE9DQVRFKQorICAgIHN0YXRpYyBQ
YWdlQWxsb2NhdGlvbiBhbGxvY2F0ZUFsaWduZWQoc2l6ZV90LCBVc2FnZSA9IFVua25vd25Vc2Fn
ZSwgYm9vbCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNlKTsKKyAgICBz
dGF0aWMgUGFnZUFsbG9jYXRpb24gcmVzZXJ2ZUFsaWduZWQoc2l6ZV90LCBVc2FnZSA9IFVua25v
d25Vc2FnZSwgYm9vbCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNlKTsK
KyNlbmRpZgorCiAgICAgc3RhdGljIHNpemVfdCBwYWdlc2l6ZSgpOwogCiBwcml2YXRlOgpAQCAt
MTE4LDYgKzE3NSw5NiBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCisjaWYgSEFWRShBTElHTkVE
X0FMTE9DQVRFKQorCisjaWYgT1MoREFSV0lOKQorCitpbmxpbmUgUGFnZUFsbG9jYXRpb24gUGFn
ZUFsbG9jYXRpb246OmFsbG9jYXRlQWxpZ25lZChzaXplX3Qgc2l6ZSwgVXNhZ2UsIGJvb2wgd3Jp
dGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKK3sKKyAgICBBU1NFUlQoIShzaXplICYgKHNpemUgLSAx
KSkpOworICAgIHZtX2FkZHJlc3NfdCBhZGRyZXNzID0gMDsKKyAgICB2bV9wcm90X3QgcHJvdGVj
dGlvbiA9IFZNX1BST1RfUkVBRDsKKyAgICBwcm90ZWN0aW9uIHw9IGV4ZWN1dGFibGUgPyBWTV9Q
Uk9UX0VYRUNVVEUgOiAwOworICAgIHByb3RlY3Rpb24gfD0gd3JpdGFibGUgPyBWTV9QUk9UX1dS
SVRFIDogMDsKKyAgICB2bV9tYXAoY3VycmVudF90YXNrKCksICZhZGRyZXNzLCBzaXplLCAoc2l6
ZSAtIDEpLCBWTV9GTEFHU19BTllXSEVSRSB8IFZNX1RBR19GT1JfQ09MTEVDVE9SX01FTU9SWSwg
TUVNT1JZX09CSkVDVF9OVUxMLCAwLCBGQUxTRSwgcHJvdGVjdGlvbiwgcHJvdGVjdGlvbiwgVk1f
SU5IRVJJVF9ERUZBVUxUKTsKKyAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24ocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oYWRkcmVzcyksIHNpemUpOworfQorCisjZWxpZiBPUyhXSU5ET1dTKQorCitp
bmxpbmUgUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246OmFsbG9jYXRlQWxpZ25lZChzaXpl
X3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKK3sK
KyAgICBBU1NFUlQod3JpdGFibGUgJiYgIWV4ZWN1dGFibGUpOworI2lmIENPTVBJTEVSKE1JTkdX
KSAmJiAhQ09NUElMRVIoTUlOR1c2NCkKKyAgICB2b2lkKiBhZGRyZXNzID0gX19taW5nd19hbGln
bmVkX21hbGxvYyhzaXplLCBzaXplKTsKKyNlbHNlCisgICAgdm9pZCogYWRkcmVzcyA9IF9hbGln
bmVkX21hbGxvYyhzaXplLCBzaXplKTsKKyNlbmRpZgorICAgIG1lbXNldChhZGRyZXNzLCAwLCBz
aXplKTsKKyAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24oYWRkcmVzcywgc2l6ZSk7Cit9CisKKyNl
bGlmIEhBVkUoUE9TSVhfTUVNQUxJR04pCisKK2lubGluZSBQYWdlQWxsb2NhdGlvbiBQYWdlQWxs
b2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVkKHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3
cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIEFTU0VSVCh3cml0YWJsZSAmJiAhZXhl
Y3V0YWJsZSk7CisKKyAgICB2b2lkKiBhZGRyZXNzOworICAgIHBvc2l4X21lbWFsaWduKCZhZGRy
ZXNzLCBzaXplLCBzaXplKTsKKyAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24oYWRkcmVzcywgc2l6
ZSk7Cit9CisKKyNlbHNlCisKK2lubGluZSBQYWdlQWxsb2NhdGlvbiBQYWdlQWxsb2NhdGlvbjo6
YWxsb2NhdGVBbGlnbmVkKHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwg
Ym9vbCBleGVjdXRhYmxlKQoreworICAgIEFTU0VSVCghKHNpemUgJiAoc2l6ZSAtIDEpKSk7Cisg
ICAgQVNTRVJUKHdyaXRhYmxlICYmICFleGVjdXRhYmxlKTsKKyAgICBzdGF0aWMgc2l6ZV90IHBh
Z2VzaXplID0gZ2V0cGFnZXNpemUoKTsKKworICAgIHNpemVfdCBleHRyYSA9IDA7CisgICAgaWYg
KHNpemUgPiBwYWdlc2l6ZSkKKyAgICAgICAgZXh0cmEgPSBzaXplIC0gcGFnZXNpemU7CisKKyAg
ICBpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OOworCisgICAgaW50IHByb3RlY3Rp
b24gPSBQUk9UX1JFQUQ7CisgICAgaWYgKHdyaXRhYmxlKQorICAgICAgICBwcm90ZWN0aW9uIHw9
IFBST1RfV1JJVEU7CisgICAgaWYgKGV4ZWN1dGFibGUpCisgICAgICAgIHByb3RlY3Rpb24gfD0g
UFJPVF9FWEVDOworCisgICAgdm9pZCogbW1hcFJlc3VsdCA9IG1tYXAoMCwgc2l6ZSArIGV4dHJh
LCBwcm90ZWN0aW9uLCBmbGFncywgdXNhZ2UsIDApOworICAgIHVpbnRwdHJfdCBhZGRyZXNzID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1tYXBSZXN1bHQpOworCisgICAgc2l6ZV90IGFk
anVzdCA9IDA7CisgICAgaWYgKChhZGRyZXNzICYgKHNpemUgLSAxKSkpCisgICAgICAgIGFkanVz
dCA9IHNpemUgLSAoYWRkcmVzcyAmIChzaXplIC0gMSkpOworCisgICAgaWYgKGFkanVzdCA+IDAp
CisgICAgICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PGNoYXIqPihhZGRyZXNzKSwgYWRqdXN0
KTsKKworICAgIGlmIChhZGp1c3QgPCBleHRyYSkKKyAgICAgICAgbXVubWFwKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGFkZHJlc3MgKyBhZGp1c3QgKyBzaXplKSwgZXh0cmEgLSBhZGp1c3QpOwor
CisgICAgYWRkcmVzcyArPSBhZGp1c3Q7CisKKyAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24ocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkcmVzcyksIHNpemUpOworfQorCisjZW5kaWYKKworaW5s
aW5lIFBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjpyZXNlcnZlQWxpZ25lZChzaXplX3Qg
c2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKK3sKKyAg
ICBQYWdlQWxsb2NhdGlvbiByZXN1bHQgPSBhbGxvY2F0ZUFsaWduZWQoc2l6ZSwgdXNhZ2UsIHdy
aXRhYmxlLCBleGVjdXRhYmxlKTsKKyAgICBpZiAoISFyZXN1bHQpCisgICAgICAgIHJlc3VsdC5k
ZWNvbW1pdChyZXN1bHQuYmFzZSgpLCBzaXplKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisj
ZW5kaWYKKwogfQogCiB1c2luZyBXVEY6OlBhZ2VBbGxvY2F0aW9uOwpJbmRleDogSmF2YVNjcmlw
dENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1Bs
YXRmb3JtLmgJKHJldmlzaW9uIDY0NDg3KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3Jt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwNyw2ICs3MDcsNyBAQAogI2RlZmluZSBIQVZFX0VSUk5P
X0ggMQogI2RlZmluZSBIQVZFX0xBTkdJTkZPX0ggMQogI2RlZmluZSBIQVZFX01NQVAgMQorI2Rl
ZmluZSBIQVZFX0FMSUdORURfQUxMT0NBVEUgMQogI2RlZmluZSBIQVZFX01FUkdFU09SVCAxCiAj
ZGVmaW5lIEhBVkVfU0JSSyAxCiAjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKQEAgLTczNSw4ICs3
MzYsMTAgQEAKIAogI2lmIE9TKFdJTkNFKQogI2RlZmluZSBIQVZFX0VSUk5PX0ggMAorI2RlZmlu
ZSBIQVZFX0FMSUdORURfQUxMT0NBVEUgMAogI2Vsc2UKICNkZWZpbmUgSEFWRV9TWVNfVElNRUJf
SCAxCisjZGVmaW5lIEhBVkVfQUxJR05FRF9BTExPQ0FURSAxCiAjZW5kaWYKICNkZWZpbmUgSEFW
RV9WSVJUVUFMQUxMT0MgMQogCkBAIC03OTMsNiArNzk2LDE0IEBACiAKICNlbmRpZgogCisjaWYg
IWRlZmluZWQoSEFWRV9BTElHTkVEX0FMTE9DQVRFKQorI2lmIEhBVkUoUE9TSVhfTUVNQUxJR04p
CisjZGVmaW5lIEhBVkVfQUxJR05FRF9BTExPQ0FURSAxCisjZWxzZQorI2RlZmluZSBIQVZFX0FM
SUdORURfQUxMT0NBVEUgMAorI2VuZGlmCisjZW5kaWYKKwogLyogRU5BQkxFIG1hY3JvIGRlZmF1
bHRzICovCiAKICNpZiBQTEFURk9STShRVCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9zeW1i
aWFuL0Jsb2NrQWxsb2NhdG9yU3ltYmlhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvd3RmL3N5bWJpYW4vQmxvY2tBbGxvY2F0b3JTeW1iaWFuLmNwcAkocmV2aXNpb24gNjQ0ODcp
CisrKyBKYXZhU2NyaXB0Q29yZS93dGYvc3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5bWJpYW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIE9TKFNZTUJJQU4pCi0KLSNpbmNsdWRlICJCbG9ja0FsbG9j
YXRvclN5bWJpYW4uaCIKLQotCi1uYW1lc3BhY2UgV1RGIHsKLQotLyoqIEVmZmljaWVudGx5IGFs
bG9jYXRlcyBibG9ja3Mgb2Ygc2l6ZSBibG9ja1NpemUgd2l0aCBibG9ja1NpemUgYWxpZ25tZW50
LiAKLSAqIFByaW1hcmx5IGRlc2lnbmVkIGZvciBKU0MgQ29sbGVjdG9yJ3MgbmVlZHMuIAotICog
Tm90IHRocmVhZC1zYWZlLiAgICAKLSAqLwotQWxpZ25lZEJsb2NrQWxsb2NhdG9yOjpBbGlnbmVk
QmxvY2tBbGxvY2F0b3IoVFVpbnQzMiByZXNlcnZhdGlvblNpemUsIFRVaW50MzIgYmxvY2tTaXpl
ICkKLSAgICA6IG1fcmVzZXJ2YXRpb24ocmVzZXJ2YXRpb25TaXplKSwgCi0gICAgICBtX2Jsb2Nr
U2l6ZShibG9ja1NpemUpCi17Ci0KLSAgICAgLy8gR2V0IHN5c3RlbSdzIHBhZ2Ugc2l6ZSB2YWx1
ZS4KLSAgICAgU1lNQklBTl9QQUdFU0laRShtX3BhZ2VTaXplKTsgCi0gICAgIAotICAgICAvLyBX
ZSBvbmx5IGFjY2VwdCBtdWx0aXBsZXMgb2Ygc3lzdGVtIHBhZ2Ugc2l6ZSBmb3IgYm90aCBpbml0
aWFsIHJlc2VydmF0aW9uIGFuZCB0aGUgYWxpZ25tZW50L2Jsb2NrIHNpemUKLSAgICAgbV9yZXNl
cnZhdGlvbiA9IFNZTUJJQU5fUk9VTkRVUFRPTVVMVElQTEUobV9yZXNlcnZhdGlvbiwgbV9wYWdl
U2l6ZSk7Ci0gICAgIF9fQVNTRVJUX0FMV0FZUyhTWU1CSUFOX1JPVU5EVVBUT01VTFRJUExFKG1f
YmxvY2tTaXplLCBtX3BhZ2VTaXplKSwgVXNlcjo6UGFuaWMoX0woIkFsaWduZWRCbG9ja0FsbG9j
YXRvcjEiKSwgS0VyckFyZ3VtZW50KSk7Ci0gICAgIAotICAgICAvLyBDYWxjdWxhdGUgbWF4LiBi
aXQgZmxhZ3Mgd2UgbmVlZCB0byBjYXJ2ZSBhIHJlc2VydmF0aW9uU2l6ZSByYW5nZSBpbnRvIGJs
b2NrU2l6ZS1zaXplZCBibG9ja3MKLSAgICAgbV9tYXAubnVtQml0cyA9IG1fcmVzZXJ2YXRpb24g
LyBtX2Jsb2NrU2l6ZTsgICAKLSAgICAgY29uc3QgVFVpbnQzMiBiaXRzUGVyV29yZCA9IDgqc2l6
ZW9mKFRVaW50MzIpOyAKLSAgICAgY29uc3QgVFVpbnQzMiBudW1Xb3JkcyA9IChtX21hcC5udW1C
aXRzICsgYml0c1BlcldvcmQgLTEpIC8gYml0c1BlcldvcmQ7IAotICAgCi0gICAgIG1fbWFwLmJp
dHMgPSBuZXcgVFVpbnQzMltudW1Xb3Jkc107Ci0gICAgIF9fQVNTRVJUX0FMV0FZUyhtX21hcC5i
aXRzLCBVc2VyOjpQYW5pYyhfTCgiQWxpZ25lZEJsb2NrQWxsb2NhdG9yMiIpLCBLRXJyTm9NZW1v
cnkpKTsKLSAgICAgbV9tYXAuY2xlYXJBbGwoKTsKLSAgICAgCi0gICAgIC8vIE9wZW4gYSBTeW1i
aWFuIFJDaHVuaywgYW5kIHJlc2VydmUgcmVxdWVzdGVkIHZpcnR1YWwgYWRkcmVzcyByYW5nZSAg
IAotICAgICAvLyBBbnkgdGhyZWFkIGluIHRoaXMgcHJvY2VzcyBjYW4gb3BlcmF0ZSB0aGlzIHJj
aHVuayBkdWUgdG8gRU93bmVyUHJvY2VzcyBhY2Nlc3MgcmlnaHRzLiAKLSAgICAgVEludCByZXQg
PSBtX2NodW5rLkNyZWF0ZURpc2Nvbm5lY3RlZExvY2FsKDAgLCAwLCAoVEludCltX3Jlc2VydmF0
aW9uICwgRU93bmVyUHJvY2Vzcyk7ICAKLSAgICAgaWYgKHJldCAhPSBLRXJyTm9uZSkgCi0gICAg
ICAgICBVc2VyOjpQYW5pYyhfTCgiQWxpZ25lZEJsb2NrQWxsb2NhdG9yMyIpLCByZXQpOwotICAg
ICAgIAotICAgICAvLyBUaGlzIGlzIHRoZSBvZmZzZXQgdG8gbV9jaHVuay5CYXNlKCkgcmVxdWly
ZWQgdG8gbWFrZSBpdCBtX2Jsb2NrU2l6ZS1hbGlnbmVkCi0gICAgIG1fb2Zmc2V0ID0gU1lNQklB
Tl9ST1VORFVQVE9NVUxUSVBMRShUVWludDMyKG1fY2h1bmsuQmFzZSgpKSwgbV9ibG9ja1NpemUp
IC0gVFVpbnQobV9jaHVuay5CYXNlKCkpOyAKLQotfQotCi12b2lkKiBBbGlnbmVkQmxvY2tBbGxv
Y2F0b3I6OmFsbG9jKCkKLXsKLQotICAgIFRJbnQgIGZyZWVSYW0gPSAwOyAKLSAgICB2b2lkKiBh
ZGRyZXNzID0gMDsKLSAgICAKLSAgICAvLyBMb29rIHVwIGZpcnN0IGZyZWUgc2xvdCBpbiBiaXQg
bWFwCi0gICAgY29uc3QgVEludCBmcmVlSWR4ID0gbV9tYXAuZmluZEZyZWUoKTsKLSAgICAgICAg
Ci0gICAgLy8gUHNldWRvIE9PTTogV2UgYXRlIHVwIHRoZSBhZGRyZXNzIHNwYWNlIHdlIHJlc2Vy
dmVkLi4KLSAgICAvLyAuLmV2ZW4gdGhvdWdoIHRoZSBkZXZpY2UgbWF5IGhhdmUgZnJlZSBSQU0g
bGVmdAotICAgIGlmIChmcmVlSWR4IDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAot
ICAgIFRJbnQgcmV0ID0gbV9jaHVuay5Db21taXQobV9vZmZzZXQgKyAobV9ibG9ja1NpemUgKiBm
cmVlSWR4KSwgbV9ibG9ja1NpemUpOwotICAgIGlmIChyZXQgIT0gS0Vyck5vbmUpICAKLSAgICAg
ICAgcmV0dXJuIDA7IC8vIFRydWUgT09NOiBEZXZpY2UgZGlkbid0IGhhdmUgcGh5c2ljYWwgUkFN
IHRvIHNwYXJlCi0gICAgICAgIAotICAgIC8vIFVwZGF0ZWQgYml0IHRvIG1hcmsgcmVnaW9uIGFz
IGluIHVzZS4gCi0gICAgbV9tYXAuc2V0KGZyZWVJZHgpOyAKLSAgICAKLSAgICAvLyBDYWxjdWxh
dGUgYWRkcmVzcyBvZiBjb21taXR0ZWQgcmVnaW9uIChibG9jaykKLSAgICBhZGRyZXNzID0gKHZv
aWQqKSggKG1fY2h1bmsuQmFzZSgpICsgbV9vZmZzZXQpICsgKFRVaW50KShtX2Jsb2NrU2l6ZSAq
IGZyZWVJZHgpICk7Ci0gICAgCi0gICAgcmV0dXJuIGFkZHJlc3M7Ci19Ci0KLXZvaWQgQWxpZ25l
ZEJsb2NrQWxsb2NhdG9yOjpmcmVlKHZvaWQqIGJsb2NrKQotewotICAgIC8vIENhbGN1bGF0ZSBp
bmRleCBvZiBibG9jayB0byBiZSBmcmVlZAotICAgIFRJbnQgaWR4ID0gVFVpbnQoc3RhdGljX2Nh
c3Q8VFVpbnQ4Kj4oYmxvY2spIC0gbV9jaHVuay5CYXNlKCkgLSBtX29mZnNldCkgLyBtX2Jsb2Nr
U2l6ZTsKLSAgICAKLSAgICBfX0FTU0VSVF9ERUJVRyhpZHggPj0gMCAmJiBpZHggPCBtX21hcC5u
dW1CaXRzLCBVc2VyOjpQYW5pYyhfTCgiQWxpZ25lZEJsb2NrQWxsb2NhdG9yNCIpLCBLRXJyQ29y
cnVwdCkpOyAvLyB2YWxpZCBpbmRleCBjaGVjawotICAgIF9fQVNTRVJUX0RFQlVHKG1fbWFwLmdl
dChpZHgpLCBVc2VyOjpQYW5pYyhfTCgiQWxpZ25lZEJsb2NrQWxsb2NhdG9yNSIpLCBLRXJyQ29y
cnVwdCkpOyAvLyBpbi11c2UgZmxhZyBjaGVjayAgICAKLSAgICAKLSAgICAvLyBSZXR1cm4gY29t
bWl0dGVkIHJlZ2lvbiB0byBzeXN0ZW0gUkFNIHBvb2wgKHRoZSBwaHlzaWNhbCBSQU0gYmVjb21l
cyB1c2FibGUgYnkgb3RoZXJzKQotICAgIFRJbnQgcmV0ID0gbV9jaHVuay5EZWNvbW1pdChtX29m
ZnNldCArIG1fYmxvY2tTaXplICogaWR4LCBtX2Jsb2NrU2l6ZSk7Ci0gICAgICAgICAgICAKLSAg
ICAvLyBtYXJrIHRoaXMgYXZhaWxhYmxlIGFnYWluCi0gICAgbV9tYXAuY2xlYXIoaWR4KTsgCi19
Ci0KLXZvaWQgQWxpZ25lZEJsb2NrQWxsb2NhdG9yOjpkZXN0cm95KCkgCi17Ci0gICAgLy8gcmVs
ZWFzZSBldmVyeXRoaW5nIQotICAgIG1fY2h1bmsuRGVjb21taXQoMCwgbV9jaHVuay5NYXhTaXpl
KCkpOwotICAgIG1fbWFwLmNsZWFyQWxsKCk7Ci19Ci0KLUFsaWduZWRCbG9ja0FsbG9jYXRvcjo6
fkFsaWduZWRCbG9ja0FsbG9jYXRvcigpCi17Ci0gICAgZGVzdHJveSgpOwotICAgIG1fY2h1bmsu
Q2xvc2UoKTsKLSAgICBkZWxldGUgW10gbV9tYXAuYml0czsKLX0KLQotfSAvLyBlbmQgb2YgbmFt
ZXNwYWNlCi0KLSNlbmRpZiAvLyBTWU1CSUFOCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvc3lt
Ymlhbi9CbG9ja0FsbG9jYXRvclN5bWJpYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS93dGYvc3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5bWJpYW4uaAkocmV2aXNpb24gNjQ0ODcpCisr
KyBKYXZhU2NyaXB0Q29yZS93dGYvc3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5bWJpYW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEJs
b2NrQWxsb2NhdG9yU3ltYmlhbl9oCi0jZGVmaW5lIEJsb2NrQWxsb2NhdG9yU3ltYmlhbl9oCi0K
LSNpbmNsdWRlIDxlMzJjbW4uaD4KLSNpbmNsdWRlIDxlMzJzdGQuaD4KLSNpbmNsdWRlIDxoYWwu
aD4KLQotCi0jZGVmaW5lIFNZTUJJQU5fUEFHRVNJWkUoeCkgKEhBTDo6R2V0KEhBTERhdGE6OkVN
ZW1vcnlQYWdlU2l6ZSwgeCkpOwotI2RlZmluZSBTWU1CSUFOX0ZSRUVSQU0oeCkgIChIQUw6Okdl
dChIQUxEYXRhOjpFTWVtb3J5UkFNRnJlZSwgeCkpOwotI2RlZmluZSBTWU1CSUFOX1JPVU5EVVBU
T01VTFRJUExFKHgsIG11bHRpcGxlb2YpICAgICggKHggKyBtdWx0aXBsZW9mIC0gMSkgJiB+KG11
bHRpcGxlb2YgLSAxKSApCi0KLS8vIFNldCBzYW5lIGRlZmF1bHRzIGlmIC1EPGZsYWduYW1lPXZh
bHVlPiB3YXNuJ3QgcHJvdmlkZWQgdmlhIGNvbXBpbGVyIGFyZ3MKLSNpZm5kZWYgSlNDQ09MTEVD
VE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT04KLSNpZiBkZWZpbmVkKF9fV0lOU19fKSAKLSAgICAv
LyBFbXVsYXRvciBoYXMgbGltaXRlZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UKLSAgICAjZGVmaW5l
IEpTQ0NPTExFQ1RPUl9WSVJUVUFMTUVNX1JFU0VSVkFUSU9OICg0KjEwMjQqMTAyNCkKLSNlbHNl
Ci0gICAgLy8gSFcgaGFzIHBsZW50eSBvZiB2aXJ0dWFsIGFkZHJlc3NlcwotICAgICNkZWZpbmUg
SlNDQ09MTEVDVE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT04gKDEyOCoxMDI0KjEwMjQpCi0jZW5k
aWYKLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotLyoqIAotICogIEFsbG9jYXRlcyBjb250
aWd1b3VzIHJlZ2lvbiBvZiBzaXplIGJsb2NrU2l6ZSB3aXRoIGJsb2NrU2l6ZS1hbGlnbmVkIGFk
ZHJlc3MuIAotICogIGJsb2NrU2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2Ygc3lzdGVtIHBhZ2Ug
c2l6ZSAodHlwaWNhbGx5IDRLIG9uIFN5bWJpYW4vQVJNKQotICoKLSAqICBAcGFyYW0gcmVzZXJ2
YXRpb25TaXplIFZpcnR1YWwgYWRkcmVzcyByYW5nZSB0byBiZSByZXNlcnZlZCB1cG9uIGNyZWF0
aW9uIG9mIGNodW5rIChieXRlcykuCi0gKiAgQHBhcmFtIGJsb2NrU2l6ZSBTaXplIG9mIGEgc2lu
Z2xlIGFsbG9jYXRpb24uIFJldHVybmVkIGFkZHJlc3Mgd2lsbCBhbHNvIGJlIGJsb2NrU2l6ZS1h
bGlnbmVkLgotICovCi1jbGFzcyBBbGlnbmVkQmxvY2tBbGxvY2F0b3IgewotICAgIHB1YmxpYzoK
LSAgICAgICAgQWxpZ25lZEJsb2NrQWxsb2NhdG9yKFRVaW50MzIgcmVzZXJ2YXRpb25TaXplLCBU
VWludDMyIGJsb2NrU2l6ZSk7Ci0gICAgICAgIH5BbGlnbmVkQmxvY2tBbGxvY2F0b3IoKTsKLSAg
ICAgICAgdm9pZCBkZXN0cm95KCk7Ci0gICAgICAgIHZvaWQqIGFsbG9jKCk7Ci0gICAgICAgIHZv
aWQgZnJlZSh2b2lkKiBkYXRhKTsKLSAgICAKLSAgICBwcml2YXRlOiAKLSAgICAgICAgUkNodW5r
ICAgbV9jaHVuazsgLy8gU3ltYmlhbiBjaHVuayB0aGF0IGxldHMgdXMgcmVzZXJ2ZS9jb21taXQv
ZGVjb21taXQKLSAgICAgICAgVFVpbnQgICAgbV9vZmZzZXQ7IC8vIG9mZnNldCBvZiBmaXJzdCBj
b21taXR0ZWQgcmVnaW9uIGZyb20gYmFzZSAKLSAgICAgICAgVEludCAgICAgbV9wYWdlU2l6ZTsg
Ly8gY2FjaGVkIHZhbHVlIG9mIHN5c3RlbSBwYWdlIHNpemUsIHR5cGljYWxseSA0SyBvbiBTeW1i
aWFuCi0gICAgICAgIFRVaW50MzIgIG1fcmVzZXJ2YXRpb247Ci0gICAgICAgIFRVaW50MzIgIG1f
YmxvY2tTaXplOyAgCi0KLSAgICAgICAgLy8gVHJhY2tzIGNvbWl0dGVkL2RlY29tbWl0dGVkIHN0
YXRlIG9mIGEgYmxvY2tTaXplIHJlZ2lvbgotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBUVWludDMyICpiaXRzOyAvLyBhcnJheSBvZiBiaXQgZmxhZ3MgCi0gICAg
ICAgICAgICBUVWludDMyICBudW1CaXRzOyAvLyBudW1iZXIgb2YgcmVnaW9ucyB0byBrZWVwIHRy
YWNrIG9mCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJvb2wgZ2V0KFRVaW50MzIgbikgY29u
c3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gISEoYml0c1tuID4+IDVd
ICYgKDEgPDwgKG4gJiAweDFGKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICB2b2lkIHNldChUVWludDMyIG4pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYml0c1tuID4+IDVdIHw9ICgxIDw8IChuICYgMHgxRikpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICB2b2lkIGNsZWFyKFRVaW50MzIgbikKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBiaXRzW24gPj4gNV0gJj0gfigxIDw8IChuICYgMHgxRikpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICB2b2lkIGNsZWFyQWxsKCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGZvciAoVFVpbnQzMiBpID0gMDsgaSA8IG51
bUJpdHM7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgY2xlYXIoaSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFRJbnQgZmluZEZyZWUoKSBjb25zdAotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoVFVpbnQzMiBpID0gMDsgaSA8IG51bUJpdHM7
IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWdldChpKSkgCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIH0gbV9tYXA7
ICAKLQotfTsKLSAKLX0KLQotI2VuZGlmIC8vIGVuZCBvZiBCbG9ja0FsbG9jYXRvclN5bWJpYW5f
aAotCi0KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9CaXRtYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvQml0
bWFwLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93
dGYvQml0bWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9CaXRtYXAuaD4KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJz
L3d0Zi9CbG9ja0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0Zvcndh
cmRpbmdIZWFkZXJzL3d0Zi9CbG9ja0FsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNj
cmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0Jsb2NrQWxsb2NhdG9yLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CbG9ja0FsbG9jYXRv
ci5oPgpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvQml0bWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvQml0bWFwLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9CaXRtYXAuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0JpdG1hcF9oCisjZGVmaW5l
IFdlYkNvcmVfRldEX0JpdG1hcF9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQml0bWFwLmg+
CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0Jsb2NrQWxsb2Nh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvQmxvY2tB
bGxvY2F0b3IuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3Rm
L0Jsb2NrQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBX
ZWJDb3JlX0ZXRF9CbG9ja0FsbG9jYXRvcl9oCisjZGVmaW5lIFdlYkNvcmVfRldEX0Jsb2NrQWxs
b2NhdG9yX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9CbG9ja0FsbG9jYXRvci5oPgorI2Vu
ZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63379</attachid>
            <date>2010-08-03 14:41:02 -0700</date>
            <delta_ts>2010-08-03 14:57:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>heap-pageAlloc.patch</filename>
            <type>text/plain</type>
            <size>47229</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0NTc0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTAtMDgtMDMgIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQzMjY5CisKKyAgICAgICAgQWRkZWQgbmV3IGFsbG9jYXRlQWxpZ25lZCBtZXRob2Rz
IHRvIFBhZ2VBbGxvY2F0aW9uLiAgSW4gb3JkZXIgdG8KKyAgICAgICAgcHJldmVudCBhIHJlZ3Jl
c3MgaW4gcGVyZm9ybWFuY2UsIHRoZSBmdW5jdGlvbiBuZWVkcyB0byBiZSBpbmxpbmVkLgorCisg
ICAgICAgIEFkZGl0aW9uYWxseSwgSSBwb3J0ZWQgdGhlIHN5bWJpYW4gYmxvY2sgYWxsb2NhdG9y
IHRvIHVzZQorICAgICAgICBQYWdlQWxsb2NhdGlvbiBhbmQgYWRkZWQgYSBuZXcgV1RGOjpCaXRt
YXAgY2xhc3MgdG8gc3VwcG9ydCB0aGlzLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUuZ3lwaToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJ1bnRpbWUvQmxvY2tBbGxvY2F0
b3IuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6Ojo6
YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjo6OmRlYWxsb2NhdGUpOgorICAgICAgICAoSlNDOjo6
OmJhc2UpOgorICAgICAgICAoSlNDOjo6OkFsaWduZWRCbG9jayk6CisgICAgICAgIChKU0M6Ojo6
QWxpZ25lZEJsb2NrQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6Ojp+QWxpZ25lZEJsb2NrQWxs
b2NhdG9yKToKKyAgICAgICAgKEpTQzo6OjpmcmVlKToKKyAgICAgICAgKiBydW50aW1lL0NvbGxl
Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFw
OjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdGVCbG9jayk6CisgICAgICAg
IChKU0M6OkhlYXA6OmZyZWVCbG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6OmZyZWVCbG9ja3Mp
OgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnNo
cmlua0Jsb2Nrcyk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtDb25zZXJ2YXRpdmVseSk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmNsZWFyTWFya0JpdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpt
YXJrZWRDZWxscyk6CisgICAgICAgICogcnVudGltZS9Db2xsZWN0b3IuaDoKKyAgICAgICAgKEpT
Qzo6Q29sbGVjdG9ySGVhcDo6Y29sbGVjdG9yQmxvY2spOgorICAgICAgICAqIHJ1bnRpbWUvQ29s
bGVjdG9ySGVhcEl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkNvbGxlY3RvckhlYXBJdGVyYXRv
cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6TGl2ZU9iamVjdEl0ZXJhdG9yOjpvcGVyYXRv
cisrKToKKyAgICAgICAgKEpTQzo6RGVhZE9iamVjdEl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAg
ICAgICAgKiB3dGYvQml0bWFwLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjo6OmdldCk6CisgICAg
ICAgIChXVEY6Ojo6c2V0KToKKyAgICAgICAgKFdURjo6OjpjbGVhcik6CisgICAgICAgIChXVEY6
Ojo6Y2xlYXJBbGwpOgorICAgICAgICAoV1RGOjo6OmFkdmFuY2VUb05leHRGcmVlQml0KToKKyAg
ICAgICAgKFdURjo6Ojpjb3VudCk6CisgICAgICAgIChXVEY6Ojo6aXNFbXB0eSk6CisgICAgICAg
IChXVEY6Ojo6aXNGdWxsKToKKyAgICAgICAgKiB3dGYvUGFnZUFsbG9jYXRpb24uaDoKKyAgICAg
ICAgKFdURjo6UGFnZUFsbG9jYXRpb246Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUpOgor
ICAgICAgICAoV1RGOjpQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVkKToKKyAgICAgICAg
KFdURjo6UGFnZUFsbG9jYXRpb246OnJlc2VydmVBbGlnbmVkKToKKyAgICAgICAgKiB3dGYvUGxh
dGZvcm0uaDoKKyAgICAgICAgKiB3dGYvc3ltYmlhbjogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYv
c3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5bWJpYW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHd0
Zi9zeW1iaWFuL0Jsb2NrQWxsb2NhdG9yU3ltYmlhbi5oOiBSZW1vdmVkLgorCiAyMDEwLTA4LTAy
ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIFt3
eF0gQnVpbGQgZml4IGFmdGVyIHJlbW92YWwgb2YgbmVlZCB0byBjb21waWxlIEV4ZWN1dGFibGVB
bGxvY2F0b3JQb3NpeC5jcHAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2NDQ4
NykKKysrIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC00
MDksNiArNDA5LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENv
cmUvd3RmL0Fzc2VydGlvbnMuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL0F0b21pY3MuaCBcCiAJ
SmF2YVNjcmlwdENvcmUvd3RmL0FWTFRyZWUuaCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL0JpdG1h
cC5oIFwKKwlKYXZhU2NyaXB0Q29yZS93dGYvQmxvY2tBbGxvY2F0b3IuaCBcCiAJSmF2YVNjcmlw
dENvcmUvd3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9C
eXRlQXJyYXkuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvQnl0ZUFycmF5LmggXApJbmRleDog
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiA2NDQ4NykKKysrIEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw2ICszNDgs
OCBAQAogICAgICAgICAgICAgJ3d0Zi9Bc3NlcnRpb25zLmgnLAogICAgICAgICAgICAgJ3d0Zi9B
dG9taWNzLmgnLAogICAgICAgICAgICAgJ3d0Zi9BVkxUcmVlLmgnLAorICAgICAgICAgICAgJ3d0
Zi9CaXRtYXAuaCcsCisgICAgICAgICAgICAnd3RmL0Jsb2NrQWxsb2NhdG9yLmgnLAogICAgICAg
ICAgICAgJ3d0Zi9CeXRlQXJyYXkuY3BwJywKICAgICAgICAgICAgICd3dGYvQnl0ZUFycmF5Lmgn
LAogICAgICAgICAgICAgJ3d0Zi9jaHJvbWl1bS9DaHJvbWl1bVRocmVhZGluZy5oJywKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHJldmlzaW9uIDY0NDg3KQorKysgSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNyArMjE1LDYg
QEAgU09VUkNFUyArPSBcCiAgICAgd3RmL1BhZ2VBbGxvY2F0aW9uLmNwcCBcCiAgICAgd3RmL1Jh
bmRvbU51bWJlci5jcHAgXAogICAgIHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIFwKLSAg
ICB3dGYvc3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5bWJpYW4uY3BwIFwKICAgICB3dGYvVGhyZWFk
aW5nTm9uZS5jcHAgXAogICAgIHd0Zi9UaHJlYWRpbmcuY3BwIFwKICAgICB3dGYvVHlwZVRyYWl0
cy5jcHAgXApJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2NDQ4NykKKysrIEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTUwOCw2ICs1MDgsOCBAQAogCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyog
SnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovOyB9OwogCQlC
Q0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyog
SnVtcFRhYmxlLmggKi87IH07CiAJCUMwQTI3MjYzMEU1MEEwNjMwMEU5NkUxNSAvKiBOb3RGb3Vu
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBBMjcy
M0YwRTUwOUYxRTAwRTk2RTE1IC8qIE5vdEZvdW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJREQzNzdDQkMxMjA3MkMxODAwNkEyNTE3IC8qIEJp
dG1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREQz
NzdDQkIxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1hcC5oICovOyB9OworCQlERDY5Q0Q5RjEyMDI0
NkRFMDAwNTVBQzcgLyogQmxvY2tBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERENjlDRDlEMTIwMjQ2REUwMDA1NUFDNyAvKiBCbG9ja0Fs
bG9jYXRvci5oICovOyB9OwogCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNT
dHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
MjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxMjRBOEY4MEU1NTU3NzUwMDMw
OTFGMSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJp
bmcuY3BwICovOyB9OwogCQlFMTc4NjM2RDBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRo
cmVhZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi87
IH07CkBAIC0xMDQ5LDYgKzEwNTEsOCBAQAogCQlDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUgLyog
Tm90Rm91bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90Rm91bmQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8q
IERhdGVDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEYXRlQ29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIw
MjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJREQzNzdDQkIxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1hcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBCaXRtYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJREQ2OUNEOUQxMjAyNDZERTAwMDU1QUM3IC8qIEJsb2NrQWxsb2NhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2NrQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxMUQ1MTc1MEIyRTc5OEQwMDU2QzE4OCAvKiBTdHJpbmdFeHRy
YXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nRXh0cmFzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBP
cGFxdWVKU1N0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGFxdWVK
U1N0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTI0QThGNjBFNTU1Nzc1
MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT3BhcXVlSlNTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTQwNiw2ICsxNDEwLDggQEAKIAkJCQk2NUUyMTdCNzA4RTdFRUNDMDAyM0U1RjYgLyog
QXNzZXJ0aW9ucy5oICovLAogCQkJCUJDNUY3QkJCMTE4MjNCNTkwMDUyQzAyQyAvKiBBdG9taWNz
LmggKi8sCiAJCQkJRTFBNTk2MzcwREUzRTFDMzAwQzE3RTM3IC8qIEFWTFRyZWUuaCAqLywKKwkJ
CQlERDM3N0NCQjEyMDcyQzE4MDA2QTI1MTcgLyogQml0bWFwLmggKi8sCisJCQkJREQ2OUNEOUQx
MjAyNDZERTAwMDU1QUM3IC8qIEJsb2NrQWxsb2NhdG9yLmggKi8sCiAJCQkJODY2NzZENEQxMUZF
RDU1RDAwNEI2ODYzIC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggKi8sCiAJCQkJQTdBMUY3QUEw
RjI1MkIzQzAwRTE4NEUyIC8qIEJ5dGVBcnJheS5jcHAgKi8sCiAJCQkJQTdBMUY3QUIwRjI1MkIz
QzAwRTE4NEUyIC8qIEJ5dGVBcnJheS5oICovLApAQCAtMjE5Myw2ICsyMTk5LDggQEAKIAkJCQk4
NjhCRkExODExN0NGMTk5MDBCOTA4QjEgLyogV1RGU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkQwOEQ1NDExNzkzNjEzMDA2RTVFRDAgLyogV1RGVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTY4OENCMTYwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJREQ2OUNEOUYxMjAyNDZERTAwMDU1QUM3IC8qIEJsb2NrQWxsb2NhdG9y
LmggaW4gSGVhZGVycyAqLywKKwkJCQlERDM3N0NCQzEyMDcyQzE4MDA2QTI1MTcgLyogQml0bWFw
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmxvY2tBbGxv
Y2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jsb2NrQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jsb2NrQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBCbG9ja0FsbG9jYXRvcl9oCisjZGVmaW5lIEJs
b2NrQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKyNpbmNsdWRlIDx3dGYv
UGFnZUFsbG9jYXRpb24uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBBbGlnbmVkQmxv
Y2tBbGxvY2F0b3JDb25zdGFudHMgeworLy8gU2V0IHNhbmUgZGVmYXVsdHMgaWYgLUQ8ZmxhZ25h
bWU9dmFsdWU+IHdhc24ndCBwcm92aWRlZCB2aWEgY29tcGlsZXIgYXJncworI2lmIGRlZmluZWQo
SlNDQ09MTEVDVE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT04pCisgICAgLy8gS2VlcCBiYWNrd2Fy
ZHMgY29tcGF0aWJpbGl0eSB3aXRoIHN5bWJpYW4gYnVpbGQgc3lzdGVtCisgICAgc3RhdGljIGNv
bnN0IHNpemVfdCB2aXJ0dWFsTWVtb3J5UmVzZXJ2YXRpb24gPSBKU0NDT0xMRUNUT1JfVklSVFVB
TE1FTV9SRVNFUlZBVElPTjsKKyNlbGlmIGRlZmluZWQoX19XSU5TX18pCisgICAgLy8gRW11bGF0
b3IgaGFzIGxpbWl0ZWQgdmlydHVhbCBhZGRyZXNzIHNwYWNlCisgICAgc3RhdGljIGNvbnN0IHNp
emVfdCB2aXJ0dWFsTWVtb3J5UmVzZXJ2YXRpb24gPSAweDQwMDAwMDsKKyNlbHNlCisgICAgLy8g
SFcgaGFzIHBsZW50eSBvZiB2aXJ0dWFsIGFkZHJlc3NlcworICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgdmlydHVhbE1lbW9yeVJlc2VydmF0aW9uID0gMHg4MDAwMDAwOworI2VuZGlmCit9OworCit0
ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPiBjbGFzcyBBbGlnbmVkQmxvY2s7Cit0ZW1wbGF0ZTxz
aXplX3QgYmxvY2tTaXplPiBjbGFzcyBBbGlnbmVkQmxvY2tBbGxvY2F0b3I7CisKKyNpZiBIQVZF
KEFMSUdORURfQUxMT0NBVEUpCisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+CitjbGFzcyBB
bGlnbmVkQmxvY2tBbGxvY2F0b3I7CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+CitjbGFz
cyBBbGlnbmVkQmxvY2sgeworcHVibGljOgorICAgIHZvaWQgZGVhbGxvY2F0ZSgpOworICAgIHZv
aWQqIGJhc2UoKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQWxpZ25lZEJsb2NrQWxs
b2NhdG9yPGJsb2NrU2l6ZT47CisKKyAgICBBbGlnbmVkQmxvY2soUGFnZUFsbG9jYXRpb24pOwor
CisgICAgUGFnZUFsbG9jYXRpb24gbV9hbGxvY2F0aW9uOworfTsKKwordGVtcGxhdGU8c2l6ZV90
IGJsb2NrU2l6ZT4KK2NsYXNzIEFsaWduZWRCbG9ja0FsbG9jYXRvciB7CitwdWJsaWM6CisgICAg
dm9pZCBkZXN0cm95KCk7CisgICAgQWxpZ25lZEJsb2NrPGJsb2NrU2l6ZT4gYWxsb2NhdGUoKTsK
K307CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+CitpbmxpbmUgdm9pZCBBbGlnbmVkQmxv
Y2tBbGxvY2F0b3I8YmxvY2tTaXplPjo6ZGVzdHJveSgpCit7Cit9CisKK3RlbXBsYXRlPHNpemVf
dCBibG9ja1NpemU+CitpbmxpbmUgQWxpZ25lZEJsb2NrPGJsb2NrU2l6ZT4gQWxpZ25lZEJsb2Nr
QWxsb2NhdG9yPGJsb2NrU2l6ZT46OmFsbG9jYXRlKCkKK3sKKyAgICByZXR1cm4gQWxpZ25lZEJs
b2NrPGJsb2NrU2l6ZT4oUGFnZUFsbG9jYXRpb246OmFsbG9jYXRlQWxpZ25lZChibG9ja1NpemUp
KTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2lubGluZSB2b2lkIEFsaWduZWRC
bG9jazxibG9ja1NpemU+OjpkZWFsbG9jYXRlKCkKK3sKKyAgICBtX2FsbG9jYXRpb24uZGVhbGxv
Y2F0ZSgpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPgoraW5saW5lIHZvaWQqIEFs
aWduZWRCbG9jazxibG9ja1NpemU+OjpiYXNlKCkKK3sKKyAgICByZXR1cm4gbV9hbGxvY2F0aW9u
LmJhc2UoKTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2lubGluZSBBbGlnbmVk
QmxvY2s8YmxvY2tTaXplPjo6QWxpZ25lZEJsb2NrKFBhZ2VBbGxvY2F0aW9uIGFsbG9jYXRpb24p
CisgICAgOiBtX2FsbG9jYXRpb24oYWxsb2NhdGlvbikKK3sKK30KKworI2Vsc2UKKwordGVtcGxh
dGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2NsYXNzIEFsaWduZWRCbG9jayB7CitwdWJsaWM6CisgICAg
dm9pZCBkZWFsbG9jYXRlKCk7CisgICAgdm9pZCogYmFzZSgpOworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBBbGlnbmVkQmxvY2tBbGxvY2F0b3I8YmxvY2tTaXplPjsKKworICAgIEFsaWdu
ZWRCbG9jayh2b2lkKiBiYXNlLCBBbGlnbmVkQmxvY2tBbGxvY2F0b3I8YmxvY2tTaXplPiogYWxs
b2NhdG9yKTsKKworICAgIHZvaWQqIG1fYmFzZTsKKyAgICBBbGlnbmVkQmxvY2tBbGxvY2F0b3I8
YmxvY2tTaXplPiogbV9hbGxvY2F0b3I7Cit9OworCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXpl
PgorY2xhc3MgQWxpZ25lZEJsb2NrQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBBbGlnbmVkQmxv
Y2tBbGxvY2F0b3IoKTsKKyAgICB+QWxpZ25lZEJsb2NrQWxsb2NhdG9yKCk7CisKKyAgICB2b2lk
IGRlc3Ryb3koKTsKKyAgICBBbGlnbmVkQmxvY2s8YmxvY2tTaXplPiBhbGxvY2F0ZSgpOworICAg
IHZvaWQgZnJlZShBbGlnbmVkQmxvY2s8YmxvY2tTaXplPik7CisKK3ByaXZhdGU6CisgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCByZXNlcnZhdGlvblNpemUgPSBBbGlnbmVkQmxvY2tBbGxvY2F0b3JD
b25zdGFudHM6OnZpcnR1YWxNZW1vcnlSZXNlcnZhdGlvbjsKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGJpdG1hcFNpemUgPSByZXNlcnZhdGlvblNpemUgLyBibG9ja1NpemU7CisKKyAgICBQYWdl
QWxsb2NhdGlvbiBtX3Jlc2VydmF0aW9uOworICAgIHNpemVfdCBtX25leHRGcmVlOworICAgIHVp
bnRwdHJfdCBtX3Jlc2VydmF0aW9uQmFzZTsKKyAgICBXVEY6OkJpdG1hcDxiaXRtYXBTaXplPiBt
X2JpdG1hcDsKK307CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+CitBbGlnbmVkQmxvY2tB
bGxvY2F0b3I8YmxvY2tTaXplPjo6QWxpZ25lZEJsb2NrQWxsb2NhdG9yKCkKKyAgICA6IG1fcmVz
ZXJ2YXRpb24oUGFnZUFsbG9jYXRpb246OnJlc2VydmUocmVzZXJ2YXRpb25TaXplICsgYmxvY2tT
aXplKSkKKyAgICAsIG1fbmV4dEZyZWUoMCkKK3sKKyAgICAvLyBjaGVjayB0aGF0IGJsb2NrU2l6
ZSBhbmQgcmVzZXJ2YXRpb25TaXplIGFyZSBwb3dlcnMgb2YgdHdvCisgICAgQVNTRVJUKCEoYmxv
Y2tTaXplICYgKGJsb2NrU2l6ZSAtIDEpKSk7CisgICAgQVNTRVJUKCEocmVzZXJ2YXRpb25TaXpl
ICYgKHJlc2VydmF0aW9uU2l6ZSAtIDEpKSk7CisKKyAgICAvLyBjaGVjayB0aGF0IGJsb2NrU2l6
ZSBpcyBhIG11bHRpcGxlIG9mIHBhZ2VTaXplIGFuZCB0aGF0CisgICAgLy8gcmVzZXJ2YXRpb25T
aXplIGlzIGEgbXVsdGlwbGUgb2YgYmxvY2tTaXplCisgICAgQVNTRVJUKCEoYmxvY2tTaXplICYg
KFBhZ2VBbGxvY2F0aW9uOjpwYWdlc2l6ZSgpIC0gMSkpKTsKKyAgICBBU1NFUlQoIShyZXNlcnZh
dGlvblNpemUgJiAoYmxvY2tTaXplIC0gMSkpKTsKKworICAgIEFTU0VSVChtX3Jlc2VydmF0aW9u
KTsKKworICAgIG1fcmVzZXJ2YXRpb25CYXNlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsKKyAgICBtX3Jlc2VydmF0aW9uQmFzZSA9IChtX3Jlc2Vy
dmF0aW9uQmFzZSArIGJsb2NrU2l6ZSkgJiB+KGJsb2NrU2l6ZSAtIDEpOworfQorCit0ZW1wbGF0
ZTxzaXplX3QgYmxvY2tTaXplPgorQWxpZ25lZEJsb2NrQWxsb2NhdG9yPGJsb2NrU2l6ZT46On5B
bGlnbmVkQmxvY2tBbGxvY2F0b3IoKQoreworICAgIGRlc3Ryb3koKTsKKyAgICBtX3Jlc2VydmF0
aW9uLmRlYWxsb2NhdGUoKTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2lubGlu
ZSB2b2lkIEFsaWduZWRCbG9ja0FsbG9jYXRvcjxibG9ja1NpemU+OjpkZXN0cm95KCkKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYml0bWFwU2l6ZTsgKytpKSB7CisgICAgICAgIGlm
IChtX2JpdG1hcC5nZXQoaSkpIHsKKyAgICAgICAgICAgIHZvaWQqIGJsb2NrQWRkcmVzcyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fcmVzZXJ2YXRpb25CYXNlICsgbV9uZXh0RnJlZSAqIGJs
b2NrU2l6ZSk7CisgICAgICAgICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KGJsb2NrQWRkcmVz
cywgYmxvY2tTaXplKTsKKworICAgICAgICAgICAgbV9iaXRtYXAuY2xlYXIoaSk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+CitBbGlnbmVkQmxvY2s8
YmxvY2tTaXplPiBBbGlnbmVkQmxvY2tBbGxvY2F0b3I8YmxvY2tTaXplPjo6YWxsb2NhdGUoKQor
eworICAgIHdoaWxlIChtX25leHRGcmVlIDwgYml0bWFwU2l6ZSkgeworICAgICAgICBpZiAoIW1f
Yml0bWFwLmdldChtX25leHRGcmVlKSkgeworICAgICAgICAgICAgdm9pZCogYmxvY2tBZGRyZXNz
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9yZXNlcnZhdGlvbkJhc2UgKyBtX25leHRGcmVl
ICogYmxvY2tTaXplKTsKKyAgICAgICAgICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KGJsb2NrQWRk
cmVzcywgYmxvY2tTaXplKTsKKworICAgICAgICAgICAgbV9iaXRtYXAuc2V0KG1fbmV4dEZyZWUp
OworICAgICAgICAgICAgKyttX25leHRGcmVlOworCisgICAgICAgICAgICByZXR1cm4gQWxpZ25l
ZEJsb2NrPGJsb2NrU2l6ZT4oYmxvY2tBZGRyZXNzLCB0aGlzKTsKKyAgICAgICAgfQorICAgICAg
ICBtX2JpdG1hcC5hZHZhbmNlVG9OZXh0RnJlZUJpdChtX25leHRGcmVlKTsKKyAgICB9CisKKyAg
ICBpZiAobV9iaXRtYXAuaXNGdWxsKCkpCisgICAgICAgIHJldHVybiBBbGlnbmVkQmxvY2s8Ymxv
Y2tTaXplPigwLCB0aGlzKTsKKworICAgIG1fbmV4dEZyZWUgPSAwOworCisgICAgcmV0dXJuIGFs
bG9jYXRlKCk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+Cit2b2lkIEFsaWduZWRC
bG9ja0FsbG9jYXRvcjxibG9ja1NpemU+OjpmcmVlKEFsaWduZWRCbG9jazxibG9ja1NpemU+IGFs
bG9jYXRpb24pCit7CisgICAgQVNTRVJUKGFsbG9jYXRpb24uYmFzZSgpKTsKKyAgICBtX3Jlc2Vy
dmF0aW9uLmRlY29tbWl0KGFsbG9jYXRpb24uYmFzZSgpLCBibG9ja1NpemUpOworCisgICAgc2l6
ZV90IGRpZmYgPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGFsbG9jYXRpb24uYmFzZSgp
KSAtIG1fcmVzZXJ2YXRpb25CYXNlKTsKKyAgICBBU1NFUlQoIShkaWZmICYgKGJsb2NrU2l6ZSAt
IDEpKSk7CisKKyAgICBzaXplX3QgaSA9IGRpZmYgLyBibG9ja1NpemU7CisgICAgQVNTRVJUKG1f
Yml0bWFwLmdldChpKSk7CisKKyAgICBtX2JpdG1hcC5jbGVhcihpKTsKK30KKwordGVtcGxhdGU8
c2l6ZV90IGJsb2NrU2l6ZT4KK2lubGluZSB2b2lkIEFsaWduZWRCbG9jazxibG9ja1NpemU+Ojpk
ZWFsbG9jYXRlKCkKK3sKKyAgICBtX2FsbG9jYXRvci0+ZnJlZSgqdGhpcyk7Cit9CisKK3RlbXBs
YXRlPHNpemVfdCBibG9ja1NpemU+CitpbmxpbmUgdm9pZCogQWxpZ25lZEJsb2NrPGJsb2NrU2l6
ZT46OmJhc2UoKQoreworICAgIHJldHVybiBtX2Jhc2U7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBi
bG9ja1NpemU+CitBbGlnbmVkQmxvY2s8YmxvY2tTaXplPjo6QWxpZ25lZEJsb2NrKHZvaWQqIGJh
c2UsIEFsaWduZWRCbG9ja0FsbG9jYXRvcjxibG9ja1NpemU+KiBhbGxvY2F0b3IpCisgICAgOiBt
X2Jhc2UoYmFzZSkKKyAgICAsIG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKK3sKK30KKworI2VuZGlm
CisKK30KKworI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCShy
ZXZpc2lvbiA2NDQ4NykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM1LDkgKzEzNSw2IEBAIEhlYXA6OkhlYXAoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQogICAgICwgbV9yZWdpc3RlcmVkVGhyZWFkcygwKQogICAgICwgbV9jdXJy
ZW50VGhyZWFkUmVnaXN0cmFyKDApCiAjZW5kaWYKLSNpZiBPUyhTWU1CSUFOKQotICAgICwgbV9i
bG9ja2FsbG9jYXRvcihKU0NDT0xMRUNUT1JfVklSVFVBTE1FTV9SRVNFUlZBVElPTiwgQkxPQ0tf
U0laRSkKLSNlbmRpZgogICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiB7CiAgICAgQVNT
RVJUKGdsb2JhbERhdGEpOwpAQCAtMTgzLDYzICsxODAsMTcgQEAgdm9pZCBIZWFwOjpkZXN0cm95
KCkKICAgICAgICAgdCA9IG5leHQ7CiAgICAgfQogI2VuZGlmCi0jaWYgT1MoU1lNQklBTikKICAg
ICBtX2Jsb2NrYWxsb2NhdG9yLmRlc3Ryb3koKTsKLSNlbmRpZgogICAgIG1fZ2xvYmFsRGF0YSA9
IDA7CiB9CiAKIE5FVkVSX0lOTElORSBDb2xsZWN0b3JCbG9jayogSGVhcDo6YWxsb2NhdGVCbG9j
aygpCiB7Ci0jaWYgT1MoREFSV0lOKQotICAgIHZtX2FkZHJlc3NfdCBhZGRyZXNzID0gMDsKLSAg
ICB2bV9tYXAoY3VycmVudF90YXNrKCksICZhZGRyZXNzLCBCTE9DS19TSVpFLCBCTE9DS19PRkZT
RVRfTUFTSywgVk1fRkxBR1NfQU5ZV0hFUkUgfCBWTV9UQUdfRk9SX0NPTExFQ1RPUl9NRU1PUlks
IE1FTU9SWV9PQkpFQ1RfTlVMTCwgMCwgRkFMU0UsIFZNX1BST1RfREVGQVVMVCwgVk1fUFJPVF9E
RUZBVUxULCBWTV9JTkhFUklUX0RFRkFVTFQpOwotI2VsaWYgT1MoU1lNQklBTikKLSAgICB2b2lk
KiBhZGRyZXNzID0gbV9ibG9ja2FsbG9jYXRvci5hbGxvYygpOyAgCi0gICAgaWYgKCFhZGRyZXNz
KQotICAgICAgICBDUkFTSCgpOwotI2VsaWYgT1MoV0lOQ0UpCi0gICAgdm9pZCogYWRkcmVzcyA9
IFZpcnR1YWxBbGxvYyhOVUxMLCBCTE9DS19TSVpFLCBNRU1fQ09NTUlUIHwgTUVNX1JFU0VSVkUs
IFBBR0VfUkVBRFdSSVRFKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0jaWYgQ09NUElMRVIoTUlOR1cp
ICYmICFDT01QSUxFUihNSU5HVzY0KQotICAgIHZvaWQqIGFkZHJlc3MgPSBfX21pbmd3X2FsaWdu
ZWRfbWFsbG9jKEJMT0NLX1NJWkUsIEJMT0NLX1NJWkUpOwotI2Vsc2UKLSAgICB2b2lkKiBhZGRy
ZXNzID0gX2FsaWduZWRfbWFsbG9jKEJMT0NLX1NJWkUsIEJMT0NLX1NJWkUpOwotI2VuZGlmCi0g
ICAgbWVtc2V0KGFkZHJlc3MsIDAsIEJMT0NLX1NJWkUpOwotI2VsaWYgSEFWRShQT1NJWF9NRU1B
TElHTikKLSAgICB2b2lkKiBhZGRyZXNzOwotICAgIHBvc2l4X21lbWFsaWduKCZhZGRyZXNzLCBC
TE9DS19TSVpFLCBCTE9DS19TSVpFKTsKLSNlbHNlCi0KLSNpZiBFTkFCTEUoSlNDX01VTFRJUExF
X1RIUkVBRFMpCi0jZXJyb3IgTmVlZCB0byBpbml0aWFsaXplIHBhZ2VzaXplIHNhZmVseS4KLSNl
bmRpZgotICAgIHN0YXRpYyBzaXplX3QgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOwotCi0gICAg
c2l6ZV90IGV4dHJhID0gMDsKLSAgICBpZiAoQkxPQ0tfU0laRSA+IHBhZ2VzaXplKQotICAgICAg
ICBleHRyYSA9IEJMT0NLX1NJWkUgLSBwYWdlc2l6ZTsKLQotICAgIHZvaWQqIG1tYXBSZXN1bHQg
PSBtbWFwKE5VTEwsIEJMT0NLX1NJWkUgKyBleHRyYSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwg
TUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwotICAgIHVpbnRwdHJfdCBhZGRyZXNzID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1tYXBSZXN1bHQpOwotCi0gICAgc2l6ZV90IGFk
anVzdCA9IDA7Ci0gICAgaWYgKChhZGRyZXNzICYgQkxPQ0tfT0ZGU0VUX01BU0spICE9IDApCi0g
ICAgICAgIGFkanVzdCA9IEJMT0NLX1NJWkUgLSAoYWRkcmVzcyAmIEJMT0NLX09GRlNFVF9NQVNL
KTsKLQotICAgIGlmIChhZGp1c3QgPiAwKQotICAgICAgICBtdW5tYXAocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oYWRkcmVzcyksIGFkanVzdCk7Ci0KLSAgICBpZiAoYWRqdXN0IDwgZXh0cmEpCi0g
ICAgICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PGNoYXIqPihhZGRyZXNzICsgYWRqdXN0ICsg
QkxPQ0tfU0laRSksIGV4dHJhIC0gYWRqdXN0KTsKLQotICAgIGFkZHJlc3MgKz0gYWRqdXN0Owot
I2VuZGlmCisgICAgQWxpZ25lZENvbGxlY3RvckJsb2NrIGFsbG9jYXRpb24gPSBtX2Jsb2NrYWxs
b2NhdG9yLmFsbG9jYXRlKCk7CisgICAgQ29sbGVjdG9yQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nh
c3Q8Q29sbGVjdG9yQmxvY2sqPihhbGxvY2F0aW9uLmJhc2UoKSk7CiAKICAgICAvLyBJbml0aWFs
aXplIGJsb2NrLgogCi0gICAgQ29sbGVjdG9yQmxvY2sqIGJsb2NrID0gcmVpbnRlcnByZXRfY2Fz
dDxDb2xsZWN0b3JCbG9jayo+KGFkZHJlc3MpOwogICAgIGJsb2NrLT5oZWFwID0gdGhpczsKICAg
ICBjbGVhck1hcmtCaXRzKGJsb2NrKTsKIApAQCAtMjUxLDE0ICsyMDIsMTQgQEAgTkVWRVJfSU5M
SU5FIENvbGxlY3RvckJsb2NrKiBIZWFwOjphbGxvYwogCiAgICAgc2l6ZV90IG51bUJsb2NrcyA9
IG1faGVhcC5udW1CbG9ja3M7CiAgICAgaWYgKG1faGVhcC51c2VkQmxvY2tzID09IG51bUJsb2Nr
cykgewotICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heE51bUJsb2NrcyA9IFVMT05HX01B
WCAvIHNpemVvZihDb2xsZWN0b3JCbG9jayopIC8gR1JPV1RIX0ZBQ1RPUjsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBtYXhOdW1CbG9ja3MgPSBVTE9OR19NQVggLyBzaXplb2YoQWxpZ25l
ZENvbGxlY3RvckJsb2NrKSAvIEdST1dUSF9GQUNUT1I7CiAgICAgICAgIGlmIChudW1CbG9ja3Mg
PiBtYXhOdW1CbG9ja3MpCiAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICBudW1CbG9ja3Mg
PSBtYXgoTUlOX0FSUkFZX1NJWkUsIG51bUJsb2NrcyAqIEdST1dUSF9GQUNUT1IpOwogICAgICAg
ICBtX2hlYXAubnVtQmxvY2tzID0gbnVtQmxvY2tzOwotICAgICAgICBtX2hlYXAuYmxvY2tzID0g
c3RhdGljX2Nhc3Q8Q29sbGVjdG9yQmxvY2sqKj4oZmFzdFJlYWxsb2MobV9oZWFwLmJsb2Nrcywg
bnVtQmxvY2tzICogc2l6ZW9mKENvbGxlY3RvckJsb2NrKikpKTsKKyAgICAgICAgbV9oZWFwLmJs
b2NrcyA9IHN0YXRpY19jYXN0PEFsaWduZWRDb2xsZWN0b3JCbG9jayo+KGZhc3RSZWFsbG9jKG1f
aGVhcC5ibG9ja3MsIG51bUJsb2NrcyAqIHNpemVvZihBbGlnbmVkQ29sbGVjdG9yQmxvY2spKSk7
CiAgICAgfQotICAgIG1faGVhcC5ibG9ja3NbbV9oZWFwLnVzZWRCbG9ja3MrK10gPSBibG9jazsK
KyAgICBtX2hlYXAuYmxvY2tzW21faGVhcC51c2VkQmxvY2tzKytdID0gYWxsb2NhdGlvbjsKIAog
ICAgIHJldHVybiBibG9jazsKIH0KQEAgLTI3MSw3ICsyMjIsNyBAQCBORVZFUl9JTkxJTkUgdm9p
ZCBIZWFwOjpmcmVlQmxvY2soc2l6ZV90CiAgICAgT2JqZWN0SXRlcmF0b3IgZW5kKG1faGVhcCwg
YmxvY2sgKyAxKTsKICAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgKCppdCkt
Pn5KU0NlbGwoKTsKLSAgICBmcmVlQmxvY2tQdHIobV9oZWFwLmJsb2Nrc1tibG9ja10pOworICAg
IG1faGVhcC5ibG9ja3NbYmxvY2tdLmRlYWxsb2NhdGUoKTsKIAogICAgIC8vIHN3YXAgd2l0aCB0
aGUgbGFzdCBibG9jayBzbyB3ZSBjb21wYWN0IGFzIHdlIGdvCiAgICAgbV9oZWFwLmJsb2Nrc1ti
bG9ja10gPSBtX2hlYXAuYmxvY2tzW21faGVhcC51c2VkQmxvY2tzIC0gMV07CkBAIC0yNzksMzEg
KzIzMCwxMCBAQCBORVZFUl9JTkxJTkUgdm9pZCBIZWFwOjpmcmVlQmxvY2soc2l6ZV90CiAKICAg
ICBpZiAobV9oZWFwLm51bUJsb2NrcyA+IE1JTl9BUlJBWV9TSVpFICYmIG1faGVhcC51c2VkQmxv
Y2tzIDwgbV9oZWFwLm51bUJsb2NrcyAvIExPV19XQVRFUl9GQUNUT1IpIHsKICAgICAgICAgbV9o
ZWFwLm51bUJsb2NrcyA9IG1faGVhcC5udW1CbG9ja3MgLyBHUk9XVEhfRkFDVE9SOyAKLSAgICAg
ICAgbV9oZWFwLmJsb2NrcyA9IHN0YXRpY19jYXN0PENvbGxlY3RvckJsb2NrKio+KGZhc3RSZWFs
bG9jKG1faGVhcC5ibG9ja3MsIG1faGVhcC5udW1CbG9ja3MgKiBzaXplb2YoQ29sbGVjdG9yQmxv
Y2sqKSkpOworICAgICAgICBtX2hlYXAuYmxvY2tzID0gc3RhdGljX2Nhc3Q8QWxpZ25lZENvbGxl
Y3RvckJsb2NrKj4oZmFzdFJlYWxsb2MobV9oZWFwLmJsb2NrcywgbV9oZWFwLm51bUJsb2NrcyAq
IHNpemVvZihBbGlnbmVkQ29sbGVjdG9yQmxvY2spKSk7CiAgICAgfQogfQogCi1ORVZFUl9JTkxJ
TkUgdm9pZCBIZWFwOjpmcmVlQmxvY2tQdHIoQ29sbGVjdG9yQmxvY2sqIGJsb2NrKQotewotI2lm
IE9TKERBUldJTikgICAgCi0gICAgdm1fZGVhbGxvY2F0ZShjdXJyZW50X3Rhc2soKSwgcmVpbnRl
cnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KGJsb2NrKSwgQkxPQ0tfU0laRSk7Ci0jZWxpZiBPUyhT
WU1CSUFOKQotICAgIG1fYmxvY2thbGxvY2F0b3IuZnJlZShyZWludGVycHJldF9jYXN0PHZvaWQq
PihibG9jaykpOwotI2VsaWYgT1MoV0lOQ0UpCi0gICAgVmlydHVhbEZyZWUoYmxvY2ssIDAsIE1F
TV9SRUxFQVNFKTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0jaWYgQ09NUElMRVIoTUlOR1cpICYmICFD
T01QSUxFUihNSU5HVzY0KQotICAgIF9fbWluZ3dfYWxpZ25lZF9mcmVlKGJsb2NrKTsKLSNlbHNl
Ci0gICAgX2FsaWduZWRfZnJlZShibG9jayk7Ci0jZW5kaWYKLSNlbGlmIEhBVkUoUE9TSVhfTUVN
QUxJR04pCi0gICAgZnJlZShibG9jayk7Ci0jZWxzZQotICAgIG11bm1hcChyZWludGVycHJldF9j
YXN0PGNoYXIqPihibG9jayksIEJMT0NLX1NJWkUpOwotI2VuZGlmCi19Ci0KIHZvaWQgSGVhcDo6
ZnJlZUJsb2NrcygpCiB7CiAgICAgUHJvdGVjdENvdW50U2V0IHByb3RlY3RlZFZhbHVlc0NvcHkg
PSBtX3Byb3RlY3RlZFZhbHVlczsKQEAgLTMyNyw3ICsyNTcsNyBAQCB2b2lkIEhlYXA6OmZyZWVC
bG9ja3MoKQogICAgICAgICBpdC0+Zmlyc3QtPn5KU0NlbGwoKTsKIAogICAgIGZvciAoc2l6ZV90
IGJsb2NrID0gMDsgYmxvY2sgPCBtX2hlYXAudXNlZEJsb2NrczsgKytibG9jaykKLSAgICAgICAg
ZnJlZUJsb2NrUHRyKG1faGVhcC5ibG9ja3NbYmxvY2tdKTsKKyAgICAgICAgbV9oZWFwLmJsb2Nr
c1tibG9ja10uZGVhbGxvY2F0ZSgpOwogCiAgICAgZmFzdEZyZWUobV9oZWFwLmJsb2Nrcyk7CiAK
QEAgLTM4MCw3ICszMTAsNyBAQCBhbGxvY2F0ZToKIAogICAgIGRvIHsKICAgICAgICAgQVNTRVJU
KG1faGVhcC5uZXh0QmxvY2sgPCBtX2hlYXAudXNlZEJsb2Nrcyk7Ci0gICAgICAgIEJsb2NrKiBi
bG9jayA9IHJlaW50ZXJwcmV0X2Nhc3Q8QmxvY2sqPihtX2hlYXAuYmxvY2tzW21faGVhcC5uZXh0
QmxvY2tdKTsKKyAgICAgICAgQmxvY2sqIGJsb2NrID0gbV9oZWFwLmNvbGxlY3RvckJsb2NrKG1f
aGVhcC5uZXh0QmxvY2spOwogICAgICAgICBkbyB7CiAgICAgICAgICAgICBBU1NFUlQobV9oZWFw
Lm5leHRDZWxsIDwgSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayk7CiAgICAgICAgICAgICBp
ZiAoIWJsb2NrLT5tYXJrZWQuZ2V0KG1faGVhcC5uZXh0Q2VsbCkpIHsgLy8gQWx3YXlzIGZhbHNl
IGZvciB0aGUgbGFzdCBjZWxsIGluIHRoZSBibG9jawpAQCAtNDM1LDEwICszNjUsMTAgQEAgdm9p
ZCBIZWFwOjpzaHJpbmtCbG9ja3Moc2l6ZV90IG5lZWRlZEJsbwogICAgIAogICAgIC8vIENsZWFy
IHRoZSBhbHdheXMtb24gbGFzdCBiaXQsIHNvIGlzRW1wdHkoKSBpc24ndCBmb29sZWQgYnkgaXQu
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2hlYXAudXNlZEJsb2NrczsgKytpKQotICAg
ICAgICBtX2hlYXAuYmxvY2tzW2ldLT5tYXJrZWQuY2xlYXIoSGVhcENvbnN0YW50czo6Y2VsbHNQ
ZXJCbG9jayAtIDEpOworICAgICAgICBtX2hlYXAuY29sbGVjdG9yQmxvY2soaSktPm1hcmtlZC5j
bGVhcihIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSk7CiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSAhPSBtX2hlYXAudXNlZEJsb2NrcyAmJiBtX2hlYXAudXNlZEJsb2NrcyAhPSBu
ZWVkZWRCbG9ja3M7ICkgewotICAgICAgICBpZiAobV9oZWFwLmJsb2Nrc1tpXS0+bWFya2VkLmlz
RW1wdHkoKSkgeworICAgICAgICBpZiAobV9oZWFwLmNvbGxlY3RvckJsb2NrKGkpLT5tYXJrZWQu
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBmcmVlQmxvY2soaSk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgKytpOwpAQCAtNDQ2LDcgKzM3Niw3IEBAIHZvaWQgSGVhcDo6c2hyaW5rQmxv
Y2tzKHNpemVfdCBuZWVkZWRCbG8KIAogICAgIC8vIFJlc2V0IHRoZSBhbHdheXMtb24gbGFzdCBi
aXQuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2hlYXAudXNlZEJsb2NrczsgKytpKQot
ICAgICAgICBtX2hlYXAuYmxvY2tzW2ldLT5tYXJrZWQuc2V0KEhlYXBDb25zdGFudHM6OmNlbGxz
UGVyQmxvY2sgLSAxKTsKKyAgICAgICAgbV9oZWFwLmNvbGxlY3RvckJsb2NrKGkpLT5tYXJrZWQu
c2V0KEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2sgLSAxKTsKIH0KIAogI2lmIE9TKFdJTkNF
KQpAQCAtNzQxLDcgKzY3MSw2IEBAIHZvaWQgSGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KE1hcmtT
dGFjayYKICAgICBjaGFyKiogcCA9IHN0YXRpY19jYXN0PGNoYXIqKj4oc3RhcnQpOwogICAgIGNo
YXIqKiBlID0gc3RhdGljX2Nhc3Q8Y2hhcioqPihlbmQpOwogCi0gICAgQ29sbGVjdG9yQmxvY2sq
KiBibG9ja3MgPSBtX2hlYXAuYmxvY2tzOwogICAgIHdoaWxlIChwICE9IGUpIHsKICAgICAgICAg
Y2hhciogeCA9ICpwKys7CiAgICAgICAgIGlmIChpc1Bvc3NpYmxlQ2VsbCh4KSkgewpAQCAtNzU3
LDcgKzY4Niw3IEBAIHZvaWQgSGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYKICAg
ICAgICAgICAgIENvbGxlY3RvckJsb2NrKiBibG9ja0FkZHIgPSByZWludGVycHJldF9jYXN0PENv
bGxlY3RvckJsb2NrKj4oeEFzQml0cyAtIG9mZnNldCk7CiAgICAgICAgICAgICB1c2VkQmxvY2tz
ID0gbV9oZWFwLnVzZWRCbG9ja3M7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBibG9jayA9IDA7
IGJsb2NrIDwgdXNlZEJsb2NrczsgYmxvY2srKykgewotICAgICAgICAgICAgICAgIGlmIChibG9j
a3NbYmxvY2tdICE9IGJsb2NrQWRkcikKKyAgICAgICAgICAgICAgICBpZiAobV9oZWFwLmNvbGxl
Y3RvckJsb2NrKGJsb2NrKSAhPSBibG9ja0FkZHIpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxK
U0NlbGwqPih4QXNCaXRzKSk7CiAgICAgICAgICAgICAgICAgbWFya1N0YWNrLmRyYWluKCk7CkBA
IC0xMDA2LDcgKzkzNSw3IEBAIHZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMoTWFya1N0
YWMKIHZvaWQgSGVhcDo6Y2xlYXJNYXJrQml0cygpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2hlYXAudXNlZEJsb2NrczsgKytpKQotICAgICAgICBjbGVhck1hcmtCaXRzKG1faGVh
cC5ibG9ja3NbaV0pOworICAgICAgICBjbGVhck1hcmtCaXRzKG1faGVhcC5jb2xsZWN0b3JCbG9j
ayhpKSk7CiB9CiAKIHZvaWQgSGVhcDo6Y2xlYXJNYXJrQml0cyhDb2xsZWN0b3JCbG9jayogYmxv
Y2spCkBAIC0xMDI1LDkgKzk1NCw5IEBAIHNpemVfdCBIZWFwOjptYXJrZWRDZWxscyhzaXplX3Qg
c3RhcnRCbG8KICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAg
ICByZXN1bHQgKz0gbV9oZWFwLmJsb2Nrc1tzdGFydEJsb2NrXS0+bWFya2VkLmNvdW50KHN0YXJ0
Q2VsbCk7CisgICAgcmVzdWx0ICs9IG1faGVhcC5jb2xsZWN0b3JCbG9jayhzdGFydEJsb2NrKS0+
bWFya2VkLmNvdW50KHN0YXJ0Q2VsbCk7CiAgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0QmxvY2sg
KyAxOyBpIDwgbV9oZWFwLnVzZWRCbG9ja3M7ICsraSkKLSAgICAgICAgcmVzdWx0ICs9IG1faGVh
cC5ibG9ja3NbaV0tPm1hcmtlZC5jb3VudCgpOworICAgICAgICByZXN1bHQgKz0gbV9oZWFwLmNv
bGxlY3RvckJsb2NrKGkpLT5tYXJrZWQuY291bnQoKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmgJKHJldmlzaW9uIDY0NDg3KQorKysg
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjQs
MTEgKzI0LDEzIEBACiAKICNpbmNsdWRlIDxzdGRkZWYuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CiAjaW5jbHVkZSA8d3RmL0ZpeGVkQXJyYXkuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb24uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCkBAIC0zNiw5ICszOCw3IEBACiAjaW5j
bHVkZSA8cHRocmVhZC5oPgogI2VuZGlmCiAKLSNpZiBPUyhTWU1CSUFOKQotI2luY2x1ZGUgPHd0
Zi9zeW1iaWFuL0Jsb2NrQWxsb2NhdG9yU3ltYmlhbi5oPgotI2VuZGlmCisjaW5jbHVkZSA8d3Rm
L0Jsb2NrQWxsb2NhdG9yLmg+CiAKICNkZWZpbmUgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChj
bGFzcykgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKGNsYXNzKSA8PSBDRUxMX1NJWkUsIGNsYXNzX2Zp
dHNfaW5fY2VsbCkKIApAQCAtNTUsMTAgKzU1LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
Y2xhc3MgTGl2ZU9iamVjdEl0ZXJhdG9yOwogCisjaWYgT1MoV0lOQ0UpIHx8IE9TKFNZTUJJQU4p
CisgICAgY29uc3Qgc2l6ZV90IEJMT0NLX1NJWkUgPSA2NCAqIDEwMjQ7IC8vIDY0aworI2Vsc2UK
KyAgICBjb25zdCBzaXplX3QgQkxPQ0tfU0laRSA9IDY0ICogNDA5NjsgLy8gMjU2aworI2VuZGlm
CisKKyAgICB0eXBlZGVmIEFsaWduZWRCbG9ja0FsbG9jYXRvcjxCTE9DS19TSVpFPiBDb2xsZWN0
b3JCbG9ja0FsbG9jYXRvcjsKKyAgICB0eXBlZGVmIEFsaWduZWRCbG9jazxCTE9DS19TSVpFPiBB
bGlnbmVkQ29sbGVjdG9yQmxvY2s7CisKICAgICBzdHJ1Y3QgQ29sbGVjdG9ySGVhcCB7CiAgICAg
ICAgIHNpemVfdCBuZXh0QmxvY2s7CiAgICAgICAgIHNpemVfdCBuZXh0Q2VsbDsKLSAgICAgICAg
Q29sbGVjdG9yQmxvY2sqKiBibG9ja3M7CisgICAgICAgIEFsaWduZWRDb2xsZWN0b3JCbG9jayog
YmxvY2tzOwogICAgICAgICAKICAgICAgICAgdm9pZCogbmV4dE51bWJlcjsKIApAQCAtNjksNiAr
NzgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgZGlkU2hyaW5rOwogCiAgICAg
ICAgIE9wZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0aW9uSW5Qcm9ncmVzczsKKworICAgICAgICBD
b2xsZWN0b3JCbG9jayogY29sbGVjdG9yQmxvY2soc2l6ZV90IGluZGV4KSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29sbGVjdG9yQmxvY2sqPihibG9j
a3NbaW5kZXhdLmJhc2UoKSk7CisgICAgICAgIH0KICAgICB9OwogCiAgICAgY2xhc3MgSGVhcCA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CkBAIC0xMzcsNyArMTUxLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgTkVWRVJfSU5MSU5FIENvbGxlY3RvckJsb2NrKiBhbGxvY2F0ZUJsb2NrKCk7
CiAgICAgICAgIE5FVkVSX0lOTElORSB2b2lkIGZyZWVCbG9jayhzaXplX3QpOwotICAgICAgICBO
RVZFUl9JTkxJTkUgdm9pZCBmcmVlQmxvY2tQdHIoQ29sbGVjdG9yQmxvY2sqKTsKICAgICAgICAg
dm9pZCBmcmVlQmxvY2tzKCk7CiAgICAgICAgIHZvaWQgcmVzaXplQmxvY2tzKCk7CiAgICAgICAg
IHZvaWQgZ3Jvd0Jsb2NrcyhzaXplX3QgbmVlZGVkQmxvY2tzKTsKQEAgLTE3NiwyMSArMTg5LDEz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBwdGhyZWFkX2tleV90IG1fY3VycmVudFRocmVh
ZFJlZ2lzdHJhcjsKICNlbmRpZgogCi0jaWYgT1MoU1lNQklBTikKICAgICAgICAgLy8gQWxsb2Nh
dGVzIGNvbGxlY3RvciBibG9ja3Mgd2l0aCBjb3JyZWN0IGFsaWdubWVudAotICAgICAgICBXVEY6
OkFsaWduZWRCbG9ja0FsbG9jYXRvciBtX2Jsb2NrYWxsb2NhdG9yOyAKLSNlbmRpZgorICAgICAg
ICBDb2xsZWN0b3JCbG9ja0FsbG9jYXRvciBtX2Jsb2NrYWxsb2NhdG9yOyAKICAgICAgICAgCiAg
ICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgIH07CiAKICAgICAvLyB0dW5h
YmxlIHBhcmFtZXRlcnMKLSNpZiBPUyhXSU5DRSkgfHwgT1MoU1lNQklBTikKLSAgICBjb25zdCBz
aXplX3QgQkxPQ0tfU0laRSA9IDY0ICogMTAyNDsgLy8gNjRrCi0jZWxzZQotICAgIGNvbnN0IHNp
emVfdCBCTE9DS19TSVpFID0gNjQgKiA0MDk2OyAvLyAyNTZrCi0jZW5kaWYKLQogICAgIC8vIGRl
cml2ZWQgY29uc3RhbnRzCiAgICAgY29uc3Qgc2l6ZV90IEJMT0NLX09GRlNFVF9NQVNLID0gQkxP
Q0tfU0laRSAtIDE7CiAgICAgY29uc3Qgc2l6ZV90IEJMT0NLX01BU0sgPSB+QkxPQ0tfT0ZGU0VU
X01BU0s7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9ySGVhcEl0
ZXJhdG9yLmgJKHJldmlzaW9uIDY0NDg3KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xs
ZWN0b3JIZWFwSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgIGlubGluZSBKU0NlbGwqIENvbGxlY3RvckhlYXBJdGVyYXRvcjo6
b3BlcmF0b3IqKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PEpTQ2VsbCo+KCZtX2hlYXAuYmxvY2tzW21fYmxvY2tdLT5jZWxsc1ttX2NlbGxdKTsKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJm1faGVhcC5jb2xsZWN0b3JCbG9j
ayhtX2Jsb2NrKS0+Y2VsbHNbbV9jZWxsXSk7CiAgICAgfQogICAgIAogICAgIC8vIEl0ZXJhdG9y
cyBhZHZhbmNlIHVwIHRvIHRoZSBuZXh0LXRvLWxhc3QgLS0gYW5kIG5vdCB0aGUgbGFzdCAtLSBj
ZWxsIGluIGEKQEAgLTEwMyw3ICsxMDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYg
KG1fYmxvY2sgPCBtX2hlYXAubmV4dEJsb2NrIHx8IChtX2Jsb2NrID09IG1faGVhcC5uZXh0Qmxv
Y2sgJiYgbV9jZWxsIDwgbV9oZWFwLm5leHRDZWxsKSkKICAgICAgICAgICAgIHJldHVybiAqdGhp
czsKIAotICAgICAgICB3aGlsZSAobV9ibG9jayA8IG1faGVhcC51c2VkQmxvY2tzICYmICFtX2hl
YXAuYmxvY2tzW21fYmxvY2tdLT5tYXJrZWQuZ2V0KG1fY2VsbCkpCisgICAgICAgIHdoaWxlICht
X2Jsb2NrIDwgbV9oZWFwLnVzZWRCbG9ja3MgJiYgIW1faGVhcC5jb2xsZWN0b3JCbG9jayhtX2Js
b2NrKS0+bWFya2VkLmdldChtX2NlbGwpKQogICAgICAgICAgICAgYWR2YW5jZShIZWFwQ29uc3Rh
bnRzOjpjZWxsc1BlckJsb2NrIC0gMSk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CkBA
IC0xMTksNyArMTE5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGRvIHsKICAgICAgICAg
ICAgIGFkdmFuY2UoSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpOwogICAgICAgICAg
ICAgQVNTRVJUKG1fYmxvY2sgPiBtX2hlYXAubmV4dEJsb2NrIHx8IChtX2Jsb2NrID09IG1faGVh
cC5uZXh0QmxvY2sgJiYgbV9jZWxsID49IG1faGVhcC5uZXh0Q2VsbCkpOwotICAgICAgICB9IHdo
aWxlIChtX2Jsb2NrIDwgbV9oZWFwLnVzZWRCbG9ja3MgJiYgbV9oZWFwLmJsb2Nrc1ttX2Jsb2Nr
XS0+bWFya2VkLmdldChtX2NlbGwpKTsKKyAgICAgICAgfSB3aGlsZSAobV9ibG9jayA8IG1faGVh
cC51c2VkQmxvY2tzICYmIG1faGVhcC5jb2xsZWN0b3JCbG9jayhtX2Jsb2NrKS0+bWFya2VkLmdl
dChtX2NlbGwpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIApJbmRleDogSmF2YVNj
cmlwdENvcmUvd3RmL0JpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9C
aXRtYXAuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9CaXRtYXAuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICoKKyAqLworI2lmbmRlZiBCaXRtYXBfaAorI2RlZmluZSBCaXRtYXBfaAorCisjaW5jbHVkZSAi
Rml4ZWRBcnJheS5oIgorI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgorCituYW1lc3BhY2UgV1RG
IHsKKwordGVtcGxhdGU8c2l6ZV90IHNpemU+CitjbGFzcyBCaXRtYXAgeworcHJpdmF0ZToKKyAg
ICB0eXBlZGVmIHVpbnQzMl90IFdvcmRUeXBlOworCitwdWJsaWM6CisgICAgYm9vbCBnZXQoc2l6
ZV90KSBjb25zdDsKKyAgICB2b2lkIHNldChzaXplX3QpOworICAgIHZvaWQgY2xlYXIoc2l6ZV90
KTsKKyAgICB2b2lkIGNsZWFyQWxsKCk7CisgICAgdm9pZCBhZHZhbmNlVG9OZXh0RnJlZUJpdChz
aXplX3QmKSBjb25zdDsKKyAgICBzaXplX3QgY291bnQoc2l6ZV90ID0gMCkgY29uc3Q7CisgICAg
c2l6ZV90IGlzRW1wdHkoKSBjb25zdDsKKyAgICBzaXplX3QgaXNGdWxsKCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgc3RhdGljIGNvbnN0IFdvcmRUeXBlIHdvcmRTaXplID0gc2l6ZW9mKFdvcmRU
eXBlKSAqIDg7CisgICAgc3RhdGljIGNvbnN0IFdvcmRUeXBlIHdvcmRzID0gKHNpemUgKyB3b3Jk
U2l6ZSAtIDEpIC8gd29yZFNpemU7CisKKyAgICAvLyB0aGUgbGl0ZXJhbCAnMScgaXMgb2YgdHlw
ZSBzaWduZWQgaW50LiAgV2Ugd2FudCB0byB1c2UgYW4gdW5zaWduZWQKKyAgICAvLyB2ZXJzaW9u
IG9mIHRoZSBjb3JyZWN0IHNpemUgd2hlbiBkb2luZyB0aGUgY2FsY3VsYXRpb25zIGJlY2F1c2Ug
aWYKKyAgICAvLyBXb3JkVHlwZSBpcyBsYXJnZXIgdGhhbiBpbnQsICcxIDw8IDMxJyB3aWxsIGZp
cnN0IGJlIHNpZ24gZXh0ZW5kZWQKKyAgICAvLyBhbmQgdGhlbiBjYXN0ZWQgdG8gdW5zaWduZWQs
IG1lYW5pbmcgdGhhdCBzZXQoMzEpIHdoZW4gV29yZFR5cGUgaXMKKyAgICAvLyBhIDY0IGJpdCB1
bnNpZ25lZCBpbnQgd291bGQgZ2l2ZSAweGZmZmY4MDAwCisgICAgc3RhdGljIGNvbnN0IFdvcmRU
eXBlIG9uZSA9IDE7CisKKyAgICBGaXhlZEFycmF5PFdvcmRUeXBlLCB3b3Jkcz4gYml0czsKK307
CisKK3RlbXBsYXRlPHNpemVfdCBzaXplPgoraW5saW5lIGJvb2wgQml0bWFwPHNpemU+OjpnZXQo
c2l6ZV90IG4pIGNvbnN0Cit7CisgICAgcmV0dXJuICEhKGJpdHNbbiAvIHdvcmRTaXplXSAmIChv
bmUgPDwgKG4gJSB3b3JkU2l6ZSkpKTsKK30KKwordGVtcGxhdGU8c2l6ZV90IHNpemU+Citpbmxp
bmUgdm9pZCBCaXRtYXA8c2l6ZT46OnNldChzaXplX3QgbikKK3sKKyAgICBiaXRzW24gLyB3b3Jk
U2l6ZV0gfD0gKG9uZSA8PCAobiAlIHdvcmRTaXplKSk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBz
aXplPgoraW5saW5lIHZvaWQgQml0bWFwPHNpemU+OjpjbGVhcihzaXplX3QgbikKK3sKKyAgICBi
aXRzW24gLyB3b3JkU2l6ZV0gJj0gfihvbmUgPDwgKG4gJSB3b3JkU2l6ZSkpOworfQorCit0ZW1w
bGF0ZTxzaXplX3Qgc2l6ZT4KK2lubGluZSB2b2lkIEJpdG1hcDxzaXplPjo6Y2xlYXJBbGwoKQor
eworICAgIG1lbXNldChiaXRzLmRhdGEoKSwgMCwgc2l6ZW9mKGJpdHMpKTsKK30KKwordGVtcGxh
dGU8c2l6ZV90IHNpemU+CitpbmxpbmUgdm9pZCBCaXRtYXA8c2l6ZT46OmFkdmFuY2VUb05leHRG
cmVlQml0KHNpemVfdCYgc3RhcnQpIGNvbnN0Cit7CisgICAgaWYgKCF+Yml0c1tzdGFydCAvIHdv
cmRTaXplXSkKKyAgICAgICAgc3RhcnQgPSAoKHN0YXJ0IC8gd29yZFNpemUpICsgMSkgKiB3b3Jk
U2l6ZTsKKyAgICBlbHNlCisgICAgICAgICsrc3RhcnQ7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBz
aXplPgoraW5saW5lIHNpemVfdCBCaXRtYXA8c2l6ZT46OmNvdW50KHNpemVfdCBzdGFydCkgY29u
c3QKK3sKKyAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICBmb3IgKCA7IChzdGFydCAlIHdvcmRT
aXplKTsgKytzdGFydCkgeworICAgICAgICBpZiAoZ2V0KHN0YXJ0KSkKKyAgICAgICAgICAgICsr
cmVzdWx0OworICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnQgLyB3b3JkU2l6ZTsgaSA8
IHdvcmRzOyArK2kpCisgICAgICAgIHJlc3VsdCArPSBXVEY6OmJpdENvdW50KGJpdHNbaV0pOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBzaXplPgoraW5saW5lIHNp
emVfdCBCaXRtYXA8c2l6ZT46OmlzRW1wdHkoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgd29yZHM7ICsraSkKKyAgICAgICAgaWYgKGJpdHNbaV0pCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBzaXpl
PgoraW5saW5lIHNpemVfdCBCaXRtYXA8c2l6ZT46OmlzRnVsbCgpIGNvbnN0Cit7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQorICAgICAgICBpZiAofmJpdHNbaV0pCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKyNlbmRp
ZgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmgJKHJldmlzaW9uIDY0NDg3KQor
KysgSmF2YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDYgKzM5LDUxIEBACiAjZGVmaW5lIFBBR0VfQUxMT0NBVElPTl9BTExPQ0FURV9BVCAwCiAj
ZW5kaWYKIAorI2lmIEhBVkUoTU1BUCkKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUg
PHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpZiBPUyhEQVJXSU4pCisKKyNpbmNsdWRlIDxtYWNoL21h
Y2hfaW5pdC5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF9wb3J0Lmg+CisjaW5jbHVkZSA8bWFjaC90
YXNrLmg+CisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjaW5jbHVkZSA8bWFjaC92bV9t
YXAuaD4KKworI2VsaWYgT1MoV0lORE9XUykKKworI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1
ZGUgPHdpbmRvd3MuaD4KKworI2VsaWYgT1MoSEFJS1UpCisKKyNpbmNsdWRlIDxPUy5oPgorCisj
ZWxpZiBPUyhVTklYKQorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpZiBPUyhTT0xBUklTKQor
I2luY2x1ZGUgPHRocmVhZC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjZW5kaWYK
KworI2lmIEhBVkUoUFRIUkVBRF9OUF9IKQorI2luY2x1ZGUgPHB0aHJlYWRfbnAuaD4KKyNlbmRp
ZgorCisjaWYgT1MoUU5YKQorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4K
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9wcm9jZnMuaD4KKyNlbmRpZgorCisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIFBhZ2VBbGxvY2F0aW9uIHsKQEAgLTgy
LDYgKzEyNywxMiBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fYmFzZTsg
fQorI2lmIENPTVBJTEVSKFdJTlNDVykKKyAgICBvcGVyYXRvciBib29sIGNvbnN0IHsgcmV0dXJu
IG1fYmFzZTsgfQorI2Vsc2UKKyAgICB0eXBlZGVmIHZvaWQqIFBhZ2VBbGxvY2F0aW9uOjoqVW5z
cGVjaWZpZWRCb29sVHlwZTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9iYXNlID8gJlBhZ2VBbGxvY2F0aW9uOjptX2Jhc2UgOiAwOyB9CisjZW5k
aWYKIAogICAgIGJvb2wgY29tbWl0KHZvaWQqLCBzaXplX3QsIGJvb2wgd3JpdGFibGUgPSB0cnVl
LCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSkgY29uc3Q7CiAgICAgdm9pZCBkZWNvbW1pdCh2b2lk
Kiwgc2l6ZV90KSBjb25zdDsKQEAgLTkzLDYgKzE0NCwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhZ2VBbGxvY2F0aW9uIGFsbG9jYXRlQXQodm9pZCogYWRkcmVzcywgYm9vbCBmaXhlZCwgc2l6
ZV90LCBVc2FnZSA9IFVua25vd25Vc2FnZSwgYm9vbCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhl
Y3V0YWJsZSA9IGZhbHNlKTsKICAgICBzdGF0aWMgUGFnZUFsbG9jYXRpb24gcmVzZXJ2ZUF0KHZv
aWQqIGFkZHJlc3MsIGJvb2wgZml4ZWQsIHNpemVfdCwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJv
b2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7CiAjZW5kaWYKKwor
I2lmIEhBVkUoQUxJR05FRF9BTExPQ0FURSkKKyAgICBzdGF0aWMgUGFnZUFsbG9jYXRpb24gYWxs
b2NhdGVBbGlnbmVkKHNpemVfdCwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUg
PSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7CisgICAgc3RhdGljIFBhZ2VBbGxvY2F0
aW9uIHJlc2VydmVBbGlnbmVkKHNpemVfdCwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3Jp
dGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7CisjZW5kaWYKKwogICAgIHN0
YXRpYyBzaXplX3QgcGFnZXNpemUoKTsKIAogcHJpdmF0ZToKQEAgLTExOCw2ICsxNzUsOTcgQEAg
cHJpdmF0ZToKICNlbmRpZgogfTsKIAorI2lmIEhBVkUoQUxJR05FRF9BTExPQ0FURSkKKworI2lm
IE9TKERBUldJTikKKworaW5saW5lIFBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjphbGxv
Y2F0ZUFsaWduZWQoc2l6ZV90IHNpemUsIFVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1
dGFibGUpCit7CisgICAgQVNTRVJUKCEoc2l6ZSAmIChzaXplIC0gMSkpKTsKKyAgICB2bV9hZGRy
ZXNzX3QgYWRkcmVzcyA9IDA7CisgICAgdm1fcHJvdF90IHByb3RlY3Rpb24gPSBWTV9QUk9UX1JF
QUQ7CisgICAgcHJvdGVjdGlvbiB8PSBleGVjdXRhYmxlID8gVk1fUFJPVF9FWEVDVVRFIDogMDsK
KyAgICBwcm90ZWN0aW9uIHw9IHdyaXRhYmxlID8gVk1fUFJPVF9XUklURSA6IDA7CisgICAgdm1f
bWFwKGN1cnJlbnRfdGFzaygpLCAmYWRkcmVzcywgc2l6ZSwgKHNpemUgLSAxKSwgVk1fRkxBR1Nf
QU5ZV0hFUkUgfCBWTV9UQUdfRk9SX0NPTExFQ1RPUl9NRU1PUlksIE1FTU9SWV9PQkpFQ1RfTlVM
TCwgMCwgRkFMU0UsIHByb3RlY3Rpb24sIHByb3RlY3Rpb24sIFZNX0lOSEVSSVRfREVGQVVMVCk7
CisgICAgcmV0dXJuIFBhZ2VBbGxvY2F0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFkZHJl
c3MpLCBzaXplKTsKK30KKworI2VsaWYgT1MoV0lORE9XUykKKworaW5saW5lIFBhZ2VBbGxvY2F0
aW9uIFBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZUFsaWduZWQoc2l6ZV90IHNpemUsIFVzYWdlIHVz
YWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCit7CisgICAgQVNTRVJUKHdyaXRh
YmxlICYmICFleGVjdXRhYmxlKTsKKyNpZiBDT01QSUxFUihNSU5HVykgJiYgIUNPTVBJTEVSKE1J
TkdXNjQpCisgICAgdm9pZCogYWRkcmVzcyA9IF9fbWluZ3dfYWxpZ25lZF9tYWxsb2Moc2l6ZSwg
c2l6ZSk7CisjZWxzZQorICAgIHZvaWQqIGFkZHJlc3MgPSBfYWxpZ25lZF9tYWxsb2Moc2l6ZSwg
c2l6ZSk7CisjZW5kaWYKKyAgICBtZW1zZXQoYWRkcmVzcywgMCwgc2l6ZSk7CisgICAgcmV0dXJu
IFBhZ2VBbGxvY2F0aW9uKGFkZHJlc3MsIHNpemUpOworfQorCisjZWxpZiBIQVZFKFBPU0lYX01F
TUFMSUdOKQorCitpbmxpbmUgUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246OmFsbG9jYXRl
QWxpZ25lZChzaXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhl
Y3V0YWJsZSkKK3sKKyAgICBBU1NFUlQod3JpdGFibGUgJiYgIWV4ZWN1dGFibGUpOworCisgICAg
dm9pZCogYWRkcmVzczsKKyAgICBwb3NpeF9tZW1hbGlnbigmYWRkcmVzcywgc2l6ZSwgc2l6ZSk7
CisgICAgcmV0dXJuIFBhZ2VBbGxvY2F0aW9uKGFkZHJlc3MsIHNpemUpOworfQorCisjZWxzZQor
CitpbmxpbmUgUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246OmFsbG9jYXRlQWxpZ25lZChz
aXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkK
K3sKKyAgICBBU1NFUlQoIShzaXplICYgKHNpemUgLSAxKSkpOworICAgIEFTU0VSVCh3cml0YWJs
ZSAmJiAhZXhlY3V0YWJsZSk7CisgICAgc3RhdGljIHNpemVfdCBwYWdlc2l6ZSA9IGdldHBhZ2Vz
aXplKCk7CisKKyAgICBzaXplX3QgZXh0cmEgPSAwOworICAgIGlmIChzaXplID4gcGFnZXNpemUp
CisgICAgICAgIGV4dHJhID0gc2l6ZSAtIHBhZ2VzaXplOworCisgICAgaW50IGZsYWdzID0gTUFQ
X1BSSVZBVEUgfCBNQVBfQU5PTjsKKworICAgIGludCBwcm90ZWN0aW9uID0gUFJPVF9SRUFEOwor
ICAgIGlmICh3cml0YWJsZSkKKyAgICAgICAgcHJvdGVjdGlvbiB8PSBQUk9UX1dSSVRFOworICAg
IGlmIChleGVjdXRhYmxlKQorICAgICAgICBwcm90ZWN0aW9uIHw9IFBST1RfRVhFQzsKKworICAg
IC8vIHVzZSBwYWdlIGFsbG9jYXRpb24KKyAgICB2b2lkKiBtbWFwUmVzdWx0ID0gbW1hcCgwLCBz
aXplICsgZXh0cmEsIHByb3RlY3Rpb24sIGZsYWdzLCB1c2FnZSwgMCk7CisgICAgdWludHB0cl90
IGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obW1hcFJlc3VsdCk7CisKKyAg
ICBzaXplX3QgYWRqdXN0ID0gMDsKKyAgICBpZiAoKGFkZHJlc3MgJiAoc2l6ZSAtIDEpKSkKKyAg
ICAgICAgYWRqdXN0ID0gc2l6ZSAtIChhZGRyZXNzICYgKHNpemUgLSAxKSk7CisKKyAgICBpZiAo
YWRqdXN0ID4gMCkKKyAgICAgICAgbXVubWFwKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFkZHJl
c3MpLCBhZGp1c3QpOworCisgICAgaWYgKGFkanVzdCA8IGV4dHJhKQorICAgICAgICBtdW5tYXAo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYWRkcmVzcyArIGFkanVzdCArIHNpemUpLCBleHRyYSAt
IGFkanVzdCk7CisKKyAgICBhZGRyZXNzICs9IGFkanVzdDsKKworICAgIHJldHVybiBQYWdlQWxs
b2NhdGlvbihyZWludGVycHJldF9jYXN0PHZvaWQqPihhZGRyZXNzKSwgc2l6ZSk7Cit9CisKKyNl
bmRpZgorCitpbmxpbmUgUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246OnJlc2VydmVBbGln
bmVkKHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRh
YmxlKQoreworICAgIFBhZ2VBbGxvY2F0aW9uIHJlc3VsdCA9IGFsbG9jYXRlQWxpZ25lZChzaXpl
LCB1c2FnZSwgd3JpdGFibGUsIGV4ZWN1dGFibGUpOworICAgIGlmICghIXJlc3VsdCkKKyAgICAg
ICAgcmVzdWx0LmRlY29tbWl0KHJlc3VsdC5iYXNlKCksIHNpemUpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKKyNlbmRpZgorCiB9CiAKIHVzaW5nIFdURjo6UGFnZUFsbG9jYXRpb247CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gNjQ0ODcpCisrKyBKYXZhU2NyaXB0Q29yZS93
dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNzA3LDYgKzcwNyw3IEBACiAjZGVmaW5l
IEhBVkVfRVJSTk9fSCAxCiAjZGVmaW5lIEhBVkVfTEFOR0lORk9fSCAxCiAjZGVmaW5lIEhBVkVf
TU1BUCAxCisjZGVmaW5lIEhBVkVfQUxJR05FRF9BTExPQ0FURSAxCiAjZGVmaW5lIEhBVkVfTUVS
R0VTT1JUIDEKICNkZWZpbmUgSEFWRV9TQlJLIDEKICNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQpA
QCAtNzM1LDggKzczNiwxMCBAQAogCiAjaWYgT1MoV0lOQ0UpCiAjZGVmaW5lIEhBVkVfRVJSTk9f
SCAwCisjZGVmaW5lIEhBVkVfQUxJR05FRF9BTExPQ0FURSAwCiAjZWxzZQogI2RlZmluZSBIQVZF
X1NZU19USU1FQl9IIDEKKyNkZWZpbmUgSEFWRV9BTElHTkVEX0FMTE9DQVRFIDEKICNlbmRpZgog
I2RlZmluZSBIQVZFX1ZJUlRVQUxBTExPQyAxCiAKQEAgLTc5Myw2ICs3OTYsMTQgQEAKIAogI2Vu
ZGlmCiAKKyNpZiAhZGVmaW5lZChIQVZFX0FMSUdORURfQUxMT0NBVEUpCisjaWYgSEFWRShQT1NJ
WF9NRU1BTElHTikKKyNkZWZpbmUgSEFWRV9BTElHTkVEX0FMTE9DQVRFIDEKKyNlbHNlCisjZGVm
aW5lIEhBVkVfQUxJR05FRF9BTExPQ0FURSAwCisjZW5kaWYKKyNlbmRpZgorCiAvKiBFTkFCTEUg
bWFjcm8gZGVmYXVsdHMgKi8KIAogI2lmIFBMQVRGT1JNKFFUKQpJbmRleDogSmF2YVNjcmlwdENv
cmUvd3RmL3N5bWJpYW4vQmxvY2tBbGxvY2F0b3JTeW1iaWFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS93dGYvc3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5bWJpYW4uY3BwCShyZXZp
c2lvbiA2NDQ4NykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9zeW1iaWFuL0Jsb2NrQWxsb2NhdG9y
U3ltYmlhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgT1MoU1lNQklBTikKLQotI2luY2x1ZGUg
IkJsb2NrQWxsb2NhdG9yU3ltYmlhbi5oIgotCi0KLW5hbWVzcGFjZSBXVEYgewotCi0vKiogRWZm
aWNpZW50bHkgYWxsb2NhdGVzIGJsb2NrcyBvZiBzaXplIGJsb2NrU2l6ZSB3aXRoIGJsb2NrU2l6
ZSBhbGlnbm1lbnQuIAotICogUHJpbWFybHkgZGVzaWduZWQgZm9yIEpTQyBDb2xsZWN0b3IncyBu
ZWVkcy4gCi0gKiBOb3QgdGhyZWFkLXNhZmUuICAgIAotICovCi1BbGlnbmVkQmxvY2tBbGxvY2F0
b3I6OkFsaWduZWRCbG9ja0FsbG9jYXRvcihUVWludDMyIHJlc2VydmF0aW9uU2l6ZSwgVFVpbnQz
MiBibG9ja1NpemUgKQotICAgIDogbV9yZXNlcnZhdGlvbihyZXNlcnZhdGlvblNpemUpLCAKLSAg
ICAgIG1fYmxvY2tTaXplKGJsb2NrU2l6ZSkKLXsKLQotICAgICAvLyBHZXQgc3lzdGVtJ3MgcGFn
ZSBzaXplIHZhbHVlLgotICAgICBTWU1CSUFOX1BBR0VTSVpFKG1fcGFnZVNpemUpOyAKLSAgICAg
Ci0gICAgIC8vIFdlIG9ubHkgYWNjZXB0IG11bHRpcGxlcyBvZiBzeXN0ZW0gcGFnZSBzaXplIGZv
ciBib3RoIGluaXRpYWwgcmVzZXJ2YXRpb24gYW5kIHRoZSBhbGlnbm1lbnQvYmxvY2sgc2l6ZQot
ICAgICBtX3Jlc2VydmF0aW9uID0gU1lNQklBTl9ST1VORFVQVE9NVUxUSVBMRShtX3Jlc2VydmF0
aW9uLCBtX3BhZ2VTaXplKTsKLSAgICAgX19BU1NFUlRfQUxXQVlTKFNZTUJJQU5fUk9VTkRVUFRP
TVVMVElQTEUobV9ibG9ja1NpemUsIG1fcGFnZVNpemUpLCBVc2VyOjpQYW5pYyhfTCgiQWxpZ25l
ZEJsb2NrQWxsb2NhdG9yMSIpLCBLRXJyQXJndW1lbnQpKTsKLSAgICAgCi0gICAgIC8vIENhbGN1
bGF0ZSBtYXguIGJpdCBmbGFncyB3ZSBuZWVkIHRvIGNhcnZlIGEgcmVzZXJ2YXRpb25TaXplIHJh
bmdlIGludG8gYmxvY2tTaXplLXNpemVkIGJsb2NrcwotICAgICBtX21hcC5udW1CaXRzID0gbV9y
ZXNlcnZhdGlvbiAvIG1fYmxvY2tTaXplOyAgIAotICAgICBjb25zdCBUVWludDMyIGJpdHNQZXJX
b3JkID0gOCpzaXplb2YoVFVpbnQzMik7IAotICAgICBjb25zdCBUVWludDMyIG51bVdvcmRzID0g
KG1fbWFwLm51bUJpdHMgKyBiaXRzUGVyV29yZCAtMSkgLyBiaXRzUGVyV29yZDsgCi0gICAKLSAg
ICAgbV9tYXAuYml0cyA9IG5ldyBUVWludDMyW251bVdvcmRzXTsKLSAgICAgX19BU1NFUlRfQUxX
QVlTKG1fbWFwLmJpdHMsIFVzZXI6OlBhbmljKF9MKCJBbGlnbmVkQmxvY2tBbGxvY2F0b3IyIiks
IEtFcnJOb01lbW9yeSkpOwotICAgICBtX21hcC5jbGVhckFsbCgpOwotICAgICAKLSAgICAgLy8g
T3BlbiBhIFN5bWJpYW4gUkNodW5rLCBhbmQgcmVzZXJ2ZSByZXF1ZXN0ZWQgdmlydHVhbCBhZGRy
ZXNzIHJhbmdlICAgCi0gICAgIC8vIEFueSB0aHJlYWQgaW4gdGhpcyBwcm9jZXNzIGNhbiBvcGVy
YXRlIHRoaXMgcmNodW5rIGR1ZSB0byBFT3duZXJQcm9jZXNzIGFjY2VzcyByaWdodHMuIAotICAg
ICBUSW50IHJldCA9IG1fY2h1bmsuQ3JlYXRlRGlzY29ubmVjdGVkTG9jYWwoMCAsIDAsIChUSW50
KW1fcmVzZXJ2YXRpb24gLCBFT3duZXJQcm9jZXNzKTsgIAotICAgICBpZiAocmV0ICE9IEtFcnJO
b25lKSAKLSAgICAgICAgIFVzZXI6OlBhbmljKF9MKCJBbGlnbmVkQmxvY2tBbGxvY2F0b3IzIiks
IHJldCk7Ci0gICAgICAgCi0gICAgIC8vIFRoaXMgaXMgdGhlIG9mZnNldCB0byBtX2NodW5rLkJh
c2UoKSByZXF1aXJlZCB0byBtYWtlIGl0IG1fYmxvY2tTaXplLWFsaWduZWQKLSAgICAgbV9vZmZz
ZXQgPSBTWU1CSUFOX1JPVU5EVVBUT01VTFRJUExFKFRVaW50MzIobV9jaHVuay5CYXNlKCkpLCBt
X2Jsb2NrU2l6ZSkgLSBUVWludChtX2NodW5rLkJhc2UoKSk7IAotCi19Ci0KLXZvaWQqIEFsaWdu
ZWRCbG9ja0FsbG9jYXRvcjo6YWxsb2MoKQotewotCi0gICAgVEludCAgZnJlZVJhbSA9IDA7IAot
ICAgIHZvaWQqIGFkZHJlc3MgPSAwOwotICAgIAotICAgIC8vIExvb2sgdXAgZmlyc3QgZnJlZSBz
bG90IGluIGJpdCBtYXAKLSAgICBjb25zdCBUSW50IGZyZWVJZHggPSBtX21hcC5maW5kRnJlZSgp
OwotICAgICAgICAKLSAgICAvLyBQc2V1ZG8gT09NOiBXZSBhdGUgdXAgdGhlIGFkZHJlc3Mgc3Bh
Y2Ugd2UgcmVzZXJ2ZWQuLgotICAgIC8vIC4uZXZlbiB0aG91Z2ggdGhlIGRldmljZSBtYXkgaGF2
ZSBmcmVlIFJBTSBsZWZ0Ci0gICAgaWYgKGZyZWVJZHggPCAwKQotICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgCi0gICAgVEludCByZXQgPSBtX2NodW5rLkNvbW1pdChtX29mZnNldCArIChtX2Js
b2NrU2l6ZSAqIGZyZWVJZHgpLCBtX2Jsb2NrU2l6ZSk7Ci0gICAgaWYgKHJldCAhPSBLRXJyTm9u
ZSkgIAotICAgICAgICByZXR1cm4gMDsgLy8gVHJ1ZSBPT006IERldmljZSBkaWRuJ3QgaGF2ZSBw
aHlzaWNhbCBSQU0gdG8gc3BhcmUKLSAgICAgICAgCi0gICAgLy8gVXBkYXRlZCBiaXQgdG8gbWFy
ayByZWdpb24gYXMgaW4gdXNlLiAKLSAgICBtX21hcC5zZXQoZnJlZUlkeCk7IAotICAgIAotICAg
IC8vIENhbGN1bGF0ZSBhZGRyZXNzIG9mIGNvbW1pdHRlZCByZWdpb24gKGJsb2NrKQotICAgIGFk
ZHJlc3MgPSAodm9pZCopKCAobV9jaHVuay5CYXNlKCkgKyBtX29mZnNldCkgKyAoVFVpbnQpKG1f
YmxvY2tTaXplICogZnJlZUlkeCkgKTsKLSAgICAKLSAgICByZXR1cm4gYWRkcmVzczsKLX0KLQot
dm9pZCBBbGlnbmVkQmxvY2tBbGxvY2F0b3I6OmZyZWUodm9pZCogYmxvY2spCi17Ci0gICAgLy8g
Q2FsY3VsYXRlIGluZGV4IG9mIGJsb2NrIHRvIGJlIGZyZWVkCi0gICAgVEludCBpZHggPSBUVWlu
dChzdGF0aWNfY2FzdDxUVWludDgqPihibG9jaykgLSBtX2NodW5rLkJhc2UoKSAtIG1fb2Zmc2V0
KSAvIG1fYmxvY2tTaXplOwotICAgIAotICAgIF9fQVNTRVJUX0RFQlVHKGlkeCA+PSAwICYmIGlk
eCA8IG1fbWFwLm51bUJpdHMsIFVzZXI6OlBhbmljKF9MKCJBbGlnbmVkQmxvY2tBbGxvY2F0b3I0
IiksIEtFcnJDb3JydXB0KSk7IC8vIHZhbGlkIGluZGV4IGNoZWNrCi0gICAgX19BU1NFUlRfREVC
VUcobV9tYXAuZ2V0KGlkeCksIFVzZXI6OlBhbmljKF9MKCJBbGlnbmVkQmxvY2tBbGxvY2F0b3I1
IiksIEtFcnJDb3JydXB0KSk7IC8vIGluLXVzZSBmbGFnIGNoZWNrICAgIAotICAgIAotICAgIC8v
IFJldHVybiBjb21taXR0ZWQgcmVnaW9uIHRvIHN5c3RlbSBSQU0gcG9vbCAodGhlIHBoeXNpY2Fs
IFJBTSBiZWNvbWVzIHVzYWJsZSBieSBvdGhlcnMpCi0gICAgVEludCByZXQgPSBtX2NodW5rLkRl
Y29tbWl0KG1fb2Zmc2V0ICsgbV9ibG9ja1NpemUgKiBpZHgsIG1fYmxvY2tTaXplKTsKLSAgICAg
ICAgICAgIAotICAgIC8vIG1hcmsgdGhpcyBhdmFpbGFibGUgYWdhaW4KLSAgICBtX21hcC5jbGVh
cihpZHgpOyAKLX0KLQotdm9pZCBBbGlnbmVkQmxvY2tBbGxvY2F0b3I6OmRlc3Ryb3koKSAKLXsK
LSAgICAvLyByZWxlYXNlIGV2ZXJ5dGhpbmchCi0gICAgbV9jaHVuay5EZWNvbW1pdCgwLCBtX2No
dW5rLk1heFNpemUoKSk7Ci0gICAgbV9tYXAuY2xlYXJBbGwoKTsKLX0KLQotQWxpZ25lZEJsb2Nr
QWxsb2NhdG9yOjp+QWxpZ25lZEJsb2NrQWxsb2NhdG9yKCkKLXsKLSAgICBkZXN0cm95KCk7Ci0g
ICAgbV9jaHVuay5DbG9zZSgpOwotICAgIGRlbGV0ZSBbXSBtX21hcC5iaXRzOwotfQotCi19IC8v
IGVuZCBvZiBuYW1lc3BhY2UKLQotI2VuZGlmIC8vIFNZTUJJQU4KSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3d0Zi9zeW1iaWFuL0Jsb2NrQWxsb2NhdG9yU3ltYmlhbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3d0Zi9zeW1iaWFuL0Jsb2NrQWxsb2NhdG9yU3ltYmlhbi5oCShyZXZpc2lv
biA2NDQ4NykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9zeW1iaWFuL0Jsb2NrQWxsb2NhdG9yU3lt
Ymlhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgQmxvY2tBbGxvY2F0b3JTeW1iaWFuX2gKLSNkZWZpbmUgQmxvY2tBbGxvY2F0b3JT
eW1iaWFuX2gKLQotI2luY2x1ZGUgPGUzMmNtbi5oPgotI2luY2x1ZGUgPGUzMnN0ZC5oPgotI2lu
Y2x1ZGUgPGhhbC5oPgotCi0KLSNkZWZpbmUgU1lNQklBTl9QQUdFU0laRSh4KSAoSEFMOjpHZXQo
SEFMRGF0YTo6RU1lbW9yeVBhZ2VTaXplLCB4KSk7Ci0jZGVmaW5lIFNZTUJJQU5fRlJFRVJBTSh4
KSAgKEhBTDo6R2V0KEhBTERhdGE6OkVNZW1vcnlSQU1GcmVlLCB4KSk7Ci0jZGVmaW5lIFNZTUJJ
QU5fUk9VTkRVUFRPTVVMVElQTEUoeCwgbXVsdGlwbGVvZikgICAgKCAoeCArIG11bHRpcGxlb2Yg
LSAxKSAmIH4obXVsdGlwbGVvZiAtIDEpICkKLQotLy8gU2V0IHNhbmUgZGVmYXVsdHMgaWYgLUQ8
ZmxhZ25hbWU9dmFsdWU+IHdhc24ndCBwcm92aWRlZCB2aWEgY29tcGlsZXIgYXJncwotI2lmbmRl
ZiBKU0NDT0xMRUNUT1JfVklSVFVBTE1FTV9SRVNFUlZBVElPTgotI2lmIGRlZmluZWQoX19XSU5T
X18pIAotICAgIC8vIEVtdWxhdG9yIGhhcyBsaW1pdGVkIHZpcnR1YWwgYWRkcmVzcyBzcGFjZQot
ICAgICNkZWZpbmUgSlNDQ09MTEVDVE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT04gKDQqMTAyNCox
MDI0KQotI2Vsc2UKLSAgICAvLyBIVyBoYXMgcGxlbnR5IG9mIHZpcnR1YWwgYWRkcmVzc2VzCi0g
ICAgI2RlZmluZSBKU0NDT0xMRUNUT1JfVklSVFVBTE1FTV9SRVNFUlZBVElPTiAoMTI4KjEwMjQq
MTAyNCkKLSNlbmRpZgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXVEYgewotCi0vKiogCi0gKiAgQWxs
b2NhdGVzIGNvbnRpZ3VvdXMgcmVnaW9uIG9mIHNpemUgYmxvY2tTaXplIHdpdGggYmxvY2tTaXpl
LWFsaWduZWQgYWRkcmVzcy4gCi0gKiAgYmxvY2tTaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBz
eXN0ZW0gcGFnZSBzaXplICh0eXBpY2FsbHkgNEsgb24gU3ltYmlhbi9BUk0pCi0gKgotICogIEBw
YXJhbSByZXNlcnZhdGlvblNpemUgVmlydHVhbCBhZGRyZXNzIHJhbmdlIHRvIGJlIHJlc2VydmVk
IHVwb24gY3JlYXRpb24gb2YgY2h1bmsgKGJ5dGVzKS4KLSAqICBAcGFyYW0gYmxvY2tTaXplIFNp
emUgb2YgYSBzaW5nbGUgYWxsb2NhdGlvbi4gUmV0dXJuZWQgYWRkcmVzcyB3aWxsIGFsc28gYmUg
YmxvY2tTaXplLWFsaWduZWQuCi0gKi8KLWNsYXNzIEFsaWduZWRCbG9ja0FsbG9jYXRvciB7Ci0g
ICAgcHVibGljOgotICAgICAgICBBbGlnbmVkQmxvY2tBbGxvY2F0b3IoVFVpbnQzMiByZXNlcnZh
dGlvblNpemUsIFRVaW50MzIgYmxvY2tTaXplKTsKLSAgICAgICAgfkFsaWduZWRCbG9ja0FsbG9j
YXRvcigpOwotICAgICAgICB2b2lkIGRlc3Ryb3koKTsKLSAgICAgICAgdm9pZCogYWxsb2MoKTsK
LSAgICAgICAgdm9pZCBmcmVlKHZvaWQqIGRhdGEpOwotICAgIAotICAgIHByaXZhdGU6IAotICAg
ICAgICBSQ2h1bmsgICBtX2NodW5rOyAvLyBTeW1iaWFuIGNodW5rIHRoYXQgbGV0cyB1cyByZXNl
cnZlL2NvbW1pdC9kZWNvbW1pdAotICAgICAgICBUVWludCAgICBtX29mZnNldDsgLy8gb2Zmc2V0
IG9mIGZpcnN0IGNvbW1pdHRlZCByZWdpb24gZnJvbSBiYXNlIAotICAgICAgICBUSW50ICAgICBt
X3BhZ2VTaXplOyAvLyBjYWNoZWQgdmFsdWUgb2Ygc3lzdGVtIHBhZ2Ugc2l6ZSwgdHlwaWNhbGx5
IDRLIG9uIFN5bWJpYW4KLSAgICAgICAgVFVpbnQzMiAgbV9yZXNlcnZhdGlvbjsKLSAgICAgICAg
VFVpbnQzMiAgbV9ibG9ja1NpemU7ICAKLQotICAgICAgICAvLyBUcmFja3MgY29taXR0ZWQvZGVj
b21taXR0ZWQgc3RhdGUgb2YgYSBibG9ja1NpemUgcmVnaW9uCi0gICAgICAgIHN0cnVjdCB7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIFRVaW50MzIgKmJpdHM7IC8vIGFycmF5IG9mIGJpdCBm
bGFncyAKLSAgICAgICAgICAgIFRVaW50MzIgIG51bUJpdHM7IC8vIG51bWJlciBvZiByZWdpb25z
IHRvIGtlZXAgdHJhY2sgb2YKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYm9vbCBnZXQoVFVp
bnQzMiBuKSBjb25zdAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAhIShi
aXRzW24gPj4gNV0gJiAoMSA8PCAobiAmIDB4MUYpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHZvaWQgc2V0KFRVaW50MzIgbikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBiaXRzW24gPj4gNV0gfD0gKDEgPDwgKG4gJiAweDFGKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZvaWQgY2xlYXIoVFVpbnQzMiBuKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJpdHNbbiA+PiA1XSAmPSB+KDEgPDwgKG4g
JiAweDFGKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZvaWQg
Y2xlYXJBbGwoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgZm9yIChUVWludDMyIGkg
PSAwOyBpIDwgbnVtQml0czsgaSsrKQotICAgICAgICAgICAgICAgICAgICBjbGVhcihpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgVEludCBmaW5kRnJlZSgpIGNv
bnN0Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChUVWludDMyIGkgPSAwOyBp
IDwgbnVtQml0czsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZ2V0KGkpKSAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgfSBtX21hcDsgIAotCi19OwotIAotfQotCi0jZW5kaWYgLy8gZW5kIG9mIEJsb2NrQWxsb2Nh
dG9yU3ltYmlhbl9oCi0KLQpJbmRleDogSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMv
d3RmL0JpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9CaXRtYXAuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRHbHVlL0ZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9CaXRtYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0JpdG1hcC5oPgpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy93dGYvQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy93dGYvQml0bWFwLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3d0Zi9CaXRtYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNv
cmVfRldEX0JpdG1hcF9oCisjZGVmaW5lIFdlYkNvcmVfRldEX0JpdG1hcF9oCisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvQml0bWFwLmg+CisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63380</attachid>
            <date>2010-08-03 14:57:47 -0700</date>
            <delta_ts>2010-08-03 15:44:50 -0700</delta_ts>
            <desc>Patch (up to date)</desc>
            <filename>heap-pageAlloc.patch</filename>
            <type>text/plain</type>
            <size>47341</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0NTg5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTAtMDgtMDMgIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQzMjY5CisKKyAgICAgICAgQWRkZWQgbmV3IGFsbG9jYXRlQWxpZ25lZCBtZXRob2Rz
IHRvIFBhZ2VBbGxvY2F0aW9uLiAgSW4gb3JkZXIgdG8KKyAgICAgICAgcHJldmVudCBhIHJlZ3Jl
c3MgaW4gcGVyZm9ybWFuY2UsIHRoZSBmdW5jdGlvbiBuZWVkcyB0byBiZSBpbmxpbmVkLgorCisg
ICAgICAgIEFkZGl0aW9uYWxseSwgSSBwb3J0ZWQgdGhlIHN5bWJpYW4gYmxvY2sgYWxsb2NhdG9y
IHRvIHVzZQorICAgICAgICBQYWdlQWxsb2NhdGlvbiBhbmQgYWRkZWQgYSBuZXcgV1RGOjpCaXRt
YXAgY2xhc3MgdG8gc3VwcG9ydCB0aGlzLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUuZ3lwaToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJ1bnRpbWUvQmxvY2tBbGxvY2F0
b3IuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6Ojo6
YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjo6OmRlYWxsb2NhdGUpOgorICAgICAgICAoSlNDOjo6
OmJhc2UpOgorICAgICAgICAoSlNDOjo6OkFsaWduZWRCbG9jayk6CisgICAgICAgIChKU0M6Ojo6
QWxpZ25lZEJsb2NrQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6Ojp+QWxpZ25lZEJsb2NrQWxs
b2NhdG9yKToKKyAgICAgICAgKEpTQzo6OjpmcmVlKToKKyAgICAgICAgKiBydW50aW1lL0NvbGxl
Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFw
OjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWxsb2NhdGVCbG9jayk6CisgICAgICAg
IChKU0M6OkhlYXA6OmZyZWVCbG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6OmZyZWVCbG9ja3Mp
OgorICAgICAgICAoSlNDOjpIZWFwOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnNo
cmlua0Jsb2Nrcyk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtDb25zZXJ2YXRpdmVseSk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmNsZWFyTWFya0JpdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpt
YXJrZWRDZWxscyk6CisgICAgICAgICogcnVudGltZS9Db2xsZWN0b3IuaDoKKyAgICAgICAgKEpT
Qzo6Q29sbGVjdG9ySGVhcDo6Y29sbGVjdG9yQmxvY2spOgorICAgICAgICAqIHJ1bnRpbWUvQ29s
bGVjdG9ySGVhcEl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkNvbGxlY3RvckhlYXBJdGVyYXRv
cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6TGl2ZU9iamVjdEl0ZXJhdG9yOjpvcGVyYXRv
cisrKToKKyAgICAgICAgKEpTQzo6RGVhZE9iamVjdEl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAg
ICAgICAgKiB3dGYvQml0bWFwLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjo6OmdldCk6CisgICAg
ICAgIChXVEY6Ojo6c2V0KToKKyAgICAgICAgKFdURjo6OjpjbGVhcik6CisgICAgICAgIChXVEY6
Ojo6Y2xlYXJBbGwpOgorICAgICAgICAoV1RGOjo6OmFkdmFuY2VUb05leHRGcmVlQml0KToKKyAg
ICAgICAgKFdURjo6Ojpjb3VudCk6CisgICAgICAgIChXVEY6Ojo6aXNFbXB0eSk6CisgICAgICAg
IChXVEY6Ojo6aXNGdWxsKToKKyAgICAgICAgKiB3dGYvUGFnZUFsbG9jYXRpb24uaDoKKyAgICAg
ICAgKFdURjo6UGFnZUFsbG9jYXRpb246Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUpOgor
ICAgICAgICAoV1RGOjpQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVkKToKKyAgICAgICAg
KFdURjo6UGFnZUFsbG9jYXRpb246OnJlc2VydmVBbGlnbmVkKToKKyAgICAgICAgKiB3dGYvUGxh
dGZvcm0uaDoKKyAgICAgICAgKiB3dGYvc3ltYmlhbjogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYv
c3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5bWJpYW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHd0
Zi9zeW1iaWFuL0Jsb2NrQWxsb2NhdG9yU3ltYmlhbi5oOiBSZW1vdmVkLgorCiAyMDEwLTA4LTAz
ICBBbGV4IE1pbG93c2tpICA8YWxleEBtaWxvd3NraS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQmV0aCBEYWtpbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA2NDU4OSkK
KysrIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC00MTEs
NiArNDExLDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUv
d3RmL0Fzc2VydGlvbnMuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3RmL0F0b21pY3MuaCBcCiAJSmF2
YVNjcmlwdENvcmUvd3RmL0FWTFRyZWUuaCBcCisJSmF2YVNjcmlwdENvcmUvd3RmL0JpdG1hcC5o
IFwKKwlKYXZhU2NyaXB0Q29yZS93dGYvQmxvY2tBbGxvY2F0b3IuaCBcCiAJSmF2YVNjcmlwdENv
cmUvd3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9CeXRl
QXJyYXkuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvQnl0ZUFycmF5LmggXApJbmRleDogSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiA2NDU4OSkKKysrIEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTM1MCw2ICszNTAsOCBA
QAogICAgICAgICAgICAgJ3d0Zi9Bc3NlcnRpb25zLmgnLAogICAgICAgICAgICAgJ3d0Zi9BdG9t
aWNzLmgnLAogICAgICAgICAgICAgJ3d0Zi9BVkxUcmVlLmgnLAorICAgICAgICAgICAgJ3d0Zi9C
aXRtYXAuaCcsCisgICAgICAgICAgICAnd3RmL0Jsb2NrQWxsb2NhdG9yLmgnLAogICAgICAgICAg
ICAgJ3d0Zi9CeXRlQXJyYXkuY3BwJywKICAgICAgICAgICAgICd3dGYvQnl0ZUFycmF5LmgnLAog
ICAgICAgICAgICAgJ3d0Zi9jaHJvbWl1bS9DaHJvbWl1bVRocmVhZGluZy5oJywKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHJldmlzaW9uIDY0NTg5KQorKysgSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2LDYgQEAg
U09VUkNFUyArPSBcCiAgICAgd3RmL1BhZ2VBbGxvY2F0aW9uLmNwcCBcCiAgICAgd3RmL1JhbmRv
bU51bWJlci5jcHAgXAogICAgIHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIFwKLSAgICB3
dGYvc3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5bWJpYW4uY3BwIFwKICAgICB3dGYvVGhyZWFkaW5n
Tm9uZS5jcHAgXAogICAgIHd0Zi9UaHJlYWRpbmcuY3BwIFwKICAgICB3dGYvVHlwZVRyYWl0cy5j
cHAgXApJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2NDU4OSkKKysrIEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTUwOCw2ICs1MDgsOCBAQAogCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVt
cFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovOyB9OwogCQlCQ0ZE
OEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVt
cFRhYmxlLmggKi87IH07CiAJCUMwQTI3MjYzMEU1MEEwNjMwMEU5NkUxNSAvKiBOb3RGb3VuZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBBMjcyM0Yw
RTUwOUYxRTAwRTk2RTE1IC8qIE5vdEZvdW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJREQzNzdDQkMxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1h
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREQzNzdD
QkIxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1hcC5oICovOyB9OworCQlERDY5Q0Q5RjEyMDI0NkRF
MDAwNTVBQzcgLyogQmxvY2tBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IERENjlDRDlEMTIwMjQ2REUwMDA1NUFDNyAvKiBCbG9ja0FsbG9j
YXRvci5oICovOyB9OwogCQlEREY3QUJENDExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
REY3QUJEMjExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi87IH07CiAJ
CURERjdBQkQ1MTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2tDRi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEREY3QUJEMzExRjYw
RUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrQ0YuY3BwICovOyB9OwogCQlFMTI0QThG
NzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBP
cGFxdWVKU1N0cmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xMDUxLDYgKzEwNTMsOCBAQAogCQlDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUg
LyogTm90Rm91bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90Rm91bmQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3OUI2
IC8qIERhdGVDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBEYXRlQ29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQy
MTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJREQzNzdDQkIxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1hcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaXRtYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJREQ2OUNEOUQxMjAyNDZERTAwMDU1QUM3IC8qIEJsb2NrQWxsb2NhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2NrQWxsb2NhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCURERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2
aXR5Q2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NBY3Rpdml0
eUNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURERjdBQkQzMTFGNjBF
RDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2tDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBHQ0FjdGl2aXR5Q2FsbGJhY2tDRi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxMUQ1MTc1MEIyRTc5OEQwMDU2QzE4OCAvKiBTdHJpbmdFeHRy
YXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nRXh0cmFzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDEwLDYgKzE0MTQsOCBAQAogCQkJCTY1RTIx
N0I3MDhFN0VFQ0MwMDIzRTVGNiAvKiBBc3NlcnRpb25zLmggKi8sCiAJCQkJQkM1RjdCQkIxMTgy
M0I1OTAwNTJDMDJDIC8qIEF0b21pY3MuaCAqLywKIAkJCQlFMUE1OTYzNzBERTNFMUMzMDBDMTdF
MzcgLyogQVZMVHJlZS5oICovLAorCQkJCUREMzc3Q0JCMTIwNzJDMTgwMDZBMjUxNyAvKiBCaXRt
YXAuaCAqLywKKwkJCQlERDY5Q0Q5RDEyMDI0NkRFMDAwNTVBQzcgLyogQmxvY2tBbGxvY2F0b3Iu
aCAqLywKIAkJCQk4NjY3NkQ0RDExRkVENTVEMDA0QjY4NjMgLyogQnVtcFBvaW50ZXJBbGxvY2F0
b3IuaCAqLywKIAkJCQlBN0ExRjdBQTBGMjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmNwcCAq
LywKIAkJCQlBN0ExRjdBQjBGMjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmggKi8sCkBAIC0y
MTk5LDYgKzIyMDUsOCBAQAogCQkJCTg2OEJGQTE4MTE3Q0YxOTkwMEI5MDhCMSAvKiBXVEZTdHJp
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDA4RDU0MTE3OTM2MTMwMDZFNUVEMCAvKiBXVEZU
aHJlYWREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Njg4Q0IxNjBFRDEyQjRFMDAxRDY0OUYg
LyogWDg2QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlERDY5Q0Q5RjEyMDI0NkRFMDAw
NTVBQzcgLyogQmxvY2tBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUREMzc3Q0JDMTIw
NzJDMTgwMDZBMjUxNyAvKiBCaXRtYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCURERjdBQkQ0MTFG
NjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9CbG9ja0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQmxvY2tBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQmxvY2tBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyMzkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVm
IEJsb2NrQWxsb2NhdG9yX2gKKyNkZWZpbmUgQmxvY2tBbGxvY2F0b3JfaAorCisjaW5jbHVkZSA8
d3RmL0JpdG1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbi5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworc3RydWN0IEFsaWduZWRCbG9ja0FsbG9jYXRvckNvbnN0YW50cyB7CisvLyBT
ZXQgc2FuZSBkZWZhdWx0cyBpZiAtRDxmbGFnbmFtZT12YWx1ZT4gd2Fzbid0IHByb3ZpZGVkIHZp
YSBjb21waWxlciBhcmdzCisjaWYgZGVmaW5lZChKU0NDT0xMRUNUT1JfVklSVFVBTE1FTV9SRVNF
UlZBVElPTikKKyAgICAvLyBLZWVwIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggc3ltYmlh
biBidWlsZCBzeXN0ZW0KKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHZpcnR1YWxNZW1vcnlSZXNl
cnZhdGlvbiA9IEpTQ0NPTExFQ1RPUl9WSVJUVUFMTUVNX1JFU0VSVkFUSU9OOworI2VsaWYgZGVm
aW5lZChfX1dJTlNfXykKKyAgICAvLyBFbXVsYXRvciBoYXMgbGltaXRlZCB2aXJ0dWFsIGFkZHJl
c3Mgc3BhY2UKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHZpcnR1YWxNZW1vcnlSZXNlcnZhdGlv
biA9IDB4NDAwMDAwOworI2Vsc2UKKyAgICAvLyBIVyBoYXMgcGxlbnR5IG9mIHZpcnR1YWwgYWRk
cmVzc2VzCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCB2aXJ0dWFsTWVtb3J5UmVzZXJ2YXRpb24g
PSAweDgwMDAwMDA7CisjZW5kaWYKK307CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+IGNs
YXNzIEFsaWduZWRCbG9jazsKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+IGNsYXNzIEFsaWdu
ZWRCbG9ja0FsbG9jYXRvcjsKKworI2lmIEhBVkUoQUxJR05FRF9BTExPQ0FURSkKKwordGVtcGxh
dGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2NsYXNzIEFsaWduZWRCbG9ja0FsbG9jYXRvcjsKKwordGVt
cGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2NsYXNzIEFsaWduZWRCbG9jayB7CitwdWJsaWM6Cisg
ICAgdm9pZCBkZWFsbG9jYXRlKCk7CisgICAgdm9pZCogYmFzZSgpOworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBBbGlnbmVkQmxvY2tBbGxvY2F0b3I8YmxvY2tTaXplPjsKKworICAgIEFs
aWduZWRCbG9jayhQYWdlQWxsb2NhdGlvbik7CisKKyAgICBQYWdlQWxsb2NhdGlvbiBtX2FsbG9j
YXRpb247Cit9OworCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPgorY2xhc3MgQWxpZ25lZEJs
b2NrQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICB2b2lkIGRlc3Ryb3koKTsKKyAgICBBbGlnbmVk
QmxvY2s8YmxvY2tTaXplPiBhbGxvY2F0ZSgpOworfTsKKwordGVtcGxhdGU8c2l6ZV90IGJsb2Nr
U2l6ZT4KK2lubGluZSB2b2lkIEFsaWduZWRCbG9ja0FsbG9jYXRvcjxibG9ja1NpemU+OjpkZXN0
cm95KCkKK3sKK30KKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2lubGluZSBBbGlnbmVk
QmxvY2s8YmxvY2tTaXplPiBBbGlnbmVkQmxvY2tBbGxvY2F0b3I8YmxvY2tTaXplPjo6YWxsb2Nh
dGUoKQoreworICAgIHJldHVybiBBbGlnbmVkQmxvY2s8YmxvY2tTaXplPihQYWdlQWxsb2NhdGlv
bjo6YWxsb2NhdGVBbGlnbmVkKGJsb2NrU2l6ZSkpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYmxv
Y2tTaXplPgoraW5saW5lIHZvaWQgQWxpZ25lZEJsb2NrPGJsb2NrU2l6ZT46OmRlYWxsb2NhdGUo
KQoreworICAgIG1fYWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7Cit9CisKK3RlbXBsYXRlPHNpemVf
dCBibG9ja1NpemU+CitpbmxpbmUgdm9pZCogQWxpZ25lZEJsb2NrPGJsb2NrU2l6ZT46OmJhc2Uo
KQoreworICAgIHJldHVybiBtX2FsbG9jYXRpb24uYmFzZSgpOworfQorCit0ZW1wbGF0ZTxzaXpl
X3QgYmxvY2tTaXplPgoraW5saW5lIEFsaWduZWRCbG9jazxibG9ja1NpemU+OjpBbGlnbmVkQmxv
Y2soUGFnZUFsbG9jYXRpb24gYWxsb2NhdGlvbikKKyAgICA6IG1fYWxsb2NhdGlvbihhbGxvY2F0
aW9uKQoreworfQorCisjZWxzZQorCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPgorY2xhc3Mg
QWxpZ25lZEJsb2NrIHsKK3B1YmxpYzoKKyAgICB2b2lkIGRlYWxsb2NhdGUoKTsKKyAgICB2b2lk
KiBiYXNlKCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEFsaWduZWRCbG9ja0FsbG9j
YXRvcjxibG9ja1NpemU+OworCisgICAgQWxpZ25lZEJsb2NrKHZvaWQqIGJhc2UsIEFsaWduZWRC
bG9ja0FsbG9jYXRvcjxibG9ja1NpemU+KiBhbGxvY2F0b3IpOworCisgICAgdm9pZCogbV9iYXNl
OworICAgIEFsaWduZWRCbG9ja0FsbG9jYXRvcjxibG9ja1NpemU+KiBtX2FsbG9jYXRvcjsKK307
CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+CitjbGFzcyBBbGlnbmVkQmxvY2tBbGxvY2F0
b3IgeworcHVibGljOgorICAgIEFsaWduZWRCbG9ja0FsbG9jYXRvcigpOworICAgIH5BbGlnbmVk
QmxvY2tBbGxvY2F0b3IoKTsKKworICAgIHZvaWQgZGVzdHJveSgpOworICAgIEFsaWduZWRCbG9j
azxibG9ja1NpemU+IGFsbG9jYXRlKCk7CisgICAgdm9pZCBmcmVlKEFsaWduZWRCbG9jazxibG9j
a1NpemU+KTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHJlc2VydmF0aW9u
U2l6ZSA9IEFsaWduZWRCbG9ja0FsbG9jYXRvckNvbnN0YW50czo6dmlydHVhbE1lbW9yeVJlc2Vy
dmF0aW9uOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYml0bWFwU2l6ZSA9IHJlc2VydmF0aW9u
U2l6ZSAvIGJsb2NrU2l6ZTsKKworICAgIFBhZ2VBbGxvY2F0aW9uIG1fcmVzZXJ2YXRpb247Cisg
ICAgc2l6ZV90IG1fbmV4dEZyZWU7CisgICAgdWludHB0cl90IG1fcmVzZXJ2YXRpb25CYXNlOwor
ICAgIFdURjo6Qml0bWFwPGJpdG1hcFNpemU+IG1fYml0bWFwOworfTsKKwordGVtcGxhdGU8c2l6
ZV90IGJsb2NrU2l6ZT4KK0FsaWduZWRCbG9ja0FsbG9jYXRvcjxibG9ja1NpemU+OjpBbGlnbmVk
QmxvY2tBbGxvY2F0b3IoKQorICAgIDogbV9yZXNlcnZhdGlvbihQYWdlQWxsb2NhdGlvbjo6cmVz
ZXJ2ZShyZXNlcnZhdGlvblNpemUgKyBibG9ja1NpemUpKQorICAgICwgbV9uZXh0RnJlZSgwKQor
eworICAgIC8vIGNoZWNrIHRoYXQgYmxvY2tTaXplIGFuZCByZXNlcnZhdGlvblNpemUgYXJlIHBv
d2VycyBvZiB0d28KKyAgICBBU1NFUlQoIShibG9ja1NpemUgJiAoYmxvY2tTaXplIC0gMSkpKTsK
KyAgICBBU1NFUlQoIShyZXNlcnZhdGlvblNpemUgJiAocmVzZXJ2YXRpb25TaXplIC0gMSkpKTsK
KworICAgIC8vIGNoZWNrIHRoYXQgYmxvY2tTaXplIGlzIGEgbXVsdGlwbGUgb2YgcGFnZVNpemUg
YW5kIHRoYXQKKyAgICAvLyByZXNlcnZhdGlvblNpemUgaXMgYSBtdWx0aXBsZSBvZiBibG9ja1Np
emUKKyAgICBBU1NFUlQoIShibG9ja1NpemUgJiAoUGFnZUFsbG9jYXRpb246OnBhZ2VzaXplKCkg
LSAxKSkpOworICAgIEFTU0VSVCghKHJlc2VydmF0aW9uU2l6ZSAmIChibG9ja1NpemUgLSAxKSkp
OworCisgICAgQVNTRVJUKG1fcmVzZXJ2YXRpb24pOworCisgICAgbV9yZXNlcnZhdGlvbkJhc2Ug
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOworICAg
IG1fcmVzZXJ2YXRpb25CYXNlID0gKG1fcmVzZXJ2YXRpb25CYXNlICsgYmxvY2tTaXplKSAmIH4o
YmxvY2tTaXplIC0gMSk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+CitBbGlnbmVk
QmxvY2tBbGxvY2F0b3I8YmxvY2tTaXplPjo6fkFsaWduZWRCbG9ja0FsbG9jYXRvcigpCit7Cisg
ICAgZGVzdHJveSgpOworICAgIG1fcmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOworfQorCit0ZW1w
bGF0ZTxzaXplX3QgYmxvY2tTaXplPgoraW5saW5lIHZvaWQgQWxpZ25lZEJsb2NrQWxsb2NhdG9y
PGJsb2NrU2l6ZT46OmRlc3Ryb3koKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
aXRtYXBTaXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYml0bWFwLmdldChpKSkgeworICAgICAg
ICAgICAgdm9pZCogYmxvY2tBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9yZXNl
cnZhdGlvbkJhc2UgKyBtX25leHRGcmVlICogYmxvY2tTaXplKTsKKyAgICAgICAgICAgIG1fcmVz
ZXJ2YXRpb24uZGVjb21taXQoYmxvY2tBZGRyZXNzLCBibG9ja1NpemUpOworCisgICAgICAgICAg
ICBtX2JpdG1hcC5jbGVhcihpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGU8c2l6
ZV90IGJsb2NrU2l6ZT4KK0FsaWduZWRCbG9jazxibG9ja1NpemU+IEFsaWduZWRCbG9ja0FsbG9j
YXRvcjxibG9ja1NpemU+OjphbGxvY2F0ZSgpCit7CisgICAgd2hpbGUgKG1fbmV4dEZyZWUgPCBi
aXRtYXBTaXplKSB7CisgICAgICAgIGlmICghbV9iaXRtYXAuZ2V0KG1fbmV4dEZyZWUpKSB7Cisg
ICAgICAgICAgICB2b2lkKiBibG9ja0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHZvaWQqPiht
X3Jlc2VydmF0aW9uQmFzZSArIG1fbmV4dEZyZWUgKiBibG9ja1NpemUpOworICAgICAgICAgICAg
bV9yZXNlcnZhdGlvbi5jb21taXQoYmxvY2tBZGRyZXNzLCBibG9ja1NpemUpOworCisgICAgICAg
ICAgICBtX2JpdG1hcC5zZXQobV9uZXh0RnJlZSk7CisgICAgICAgICAgICArK21fbmV4dEZyZWU7
CisKKyAgICAgICAgICAgIHJldHVybiBBbGlnbmVkQmxvY2s8YmxvY2tTaXplPihibG9ja0FkZHJl
c3MsIHRoaXMpOworICAgICAgICB9CisgICAgICAgIG1fYml0bWFwLmFkdmFuY2VUb05leHRGcmVl
Qml0KG1fbmV4dEZyZWUpOworICAgIH0KKworICAgIGlmIChtX2JpdG1hcC5pc0Z1bGwoKSkKKyAg
ICAgICAgcmV0dXJuIEFsaWduZWRCbG9jazxibG9ja1NpemU+KDAsIHRoaXMpOworCisgICAgbV9u
ZXh0RnJlZSA9IDA7CisKKyAgICByZXR1cm4gYWxsb2NhdGUoKTsKK30KKwordGVtcGxhdGU8c2l6
ZV90IGJsb2NrU2l6ZT4KK3ZvaWQgQWxpZ25lZEJsb2NrQWxsb2NhdG9yPGJsb2NrU2l6ZT46OmZy
ZWUoQWxpZ25lZEJsb2NrPGJsb2NrU2l6ZT4gYWxsb2NhdGlvbikKK3sKKyAgICBBU1NFUlQoYWxs
b2NhdGlvbi5iYXNlKCkpOworICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQoYWxsb2NhdGlvbi5i
YXNlKCksIGJsb2NrU2l6ZSk7CisKKyAgICBzaXplX3QgZGlmZiA9IChyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oYWxsb2NhdGlvbi5iYXNlKCkpIC0gbV9yZXNlcnZhdGlvbkJhc2UpOworICAg
IEFTU0VSVCghKGRpZmYgJiAoYmxvY2tTaXplIC0gMSkpKTsKKworICAgIHNpemVfdCBpID0gZGlm
ZiAvIGJsb2NrU2l6ZTsKKyAgICBBU1NFUlQobV9iaXRtYXAuZ2V0KGkpKTsKKworICAgIG1fYml0
bWFwLmNsZWFyKGkpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPgoraW5saW5lIHZv
aWQgQWxpZ25lZEJsb2NrPGJsb2NrU2l6ZT46OmRlYWxsb2NhdGUoKQoreworICAgIG1fYWxsb2Nh
dG9yLT5mcmVlKCp0aGlzKTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2lubGlu
ZSB2b2lkKiBBbGlnbmVkQmxvY2s8YmxvY2tTaXplPjo6YmFzZSgpCit7CisgICAgcmV0dXJuIG1f
YmFzZTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK0FsaWduZWRCbG9jazxibG9j
a1NpemU+OjpBbGlnbmVkQmxvY2sodm9pZCogYmFzZSwgQWxpZ25lZEJsb2NrQWxsb2NhdG9yPGJs
b2NrU2l6ZT4qIGFsbG9jYXRvcikKKyAgICA6IG1fYmFzZShiYXNlKQorICAgICwgbV9hbGxvY2F0
b3IoYWxsb2NhdG9yKQoreworfQorCisjZW5kaWYKKworfQorCisjZW5kaWYKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDY0NTg5KQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsOSArMTM2
LDYgQEAgSGVhcDo6SGVhcChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgLCBtX3JlZ2lz
dGVyZWRUaHJlYWRzKDApCiAgICAgLCBtX2N1cnJlbnRUaHJlYWRSZWdpc3RyYXIoMCkKICNlbmRp
ZgotI2lmIE9TKFNZTUJJQU4pCi0gICAgLCBtX2Jsb2NrYWxsb2NhdG9yKEpTQ0NPTExFQ1RPUl9W
SVJUVUFMTUVNX1JFU0VSVkFUSU9OLCBCTE9DS19TSVpFKQotI2VuZGlmCiAgICAgLCBtX2dsb2Jh
bERhdGEoZ2xvYmFsRGF0YSkKIHsKICAgICBBU1NFUlQoZ2xvYmFsRGF0YSk7CkBAIC0xODYsNjMg
KzE4MywxNyBAQCB2b2lkIEhlYXA6OmRlc3Ryb3koKQogICAgICAgICB0ID0gbmV4dDsKICAgICB9
CiAjZW5kaWYKLSNpZiBPUyhTWU1CSUFOKQogICAgIG1fYmxvY2thbGxvY2F0b3IuZGVzdHJveSgp
OwotI2VuZGlmCiAgICAgbV9nbG9iYWxEYXRhID0gMDsKIH0KIAogTkVWRVJfSU5MSU5FIENvbGxl
Y3RvckJsb2NrKiBIZWFwOjphbGxvY2F0ZUJsb2NrKCkKIHsKLSNpZiBPUyhEQVJXSU4pCi0gICAg
dm1fYWRkcmVzc190IGFkZHJlc3MgPSAwOwotICAgIHZtX21hcChjdXJyZW50X3Rhc2soKSwgJmFk
ZHJlc3MsIEJMT0NLX1NJWkUsIEJMT0NLX09GRlNFVF9NQVNLLCBWTV9GTEFHU19BTllXSEVSRSB8
IFZNX1RBR19GT1JfQ09MTEVDVE9SX01FTU9SWSwgTUVNT1JZX09CSkVDVF9OVUxMLCAwLCBGQUxT
RSwgVk1fUFJPVF9ERUZBVUxULCBWTV9QUk9UX0RFRkFVTFQsIFZNX0lOSEVSSVRfREVGQVVMVCk7
Ci0jZWxpZiBPUyhTWU1CSUFOKQotICAgIHZvaWQqIGFkZHJlc3MgPSBtX2Jsb2NrYWxsb2NhdG9y
LmFsbG9jKCk7ICAKLSAgICBpZiAoIWFkZHJlc3MpCi0gICAgICAgIENSQVNIKCk7Ci0jZWxpZiBP
UyhXSU5DRSkKLSAgICB2b2lkKiBhZGRyZXNzID0gVmlydHVhbEFsbG9jKE5VTEwsIEJMT0NLX1NJ
WkUsIE1FTV9DT01NSVQgfCBNRU1fUkVTRVJWRSwgUEFHRV9SRUFEV1JJVEUpOwotI2VsaWYgT1Mo
V0lORE9XUykKLSNpZiBDT01QSUxFUihNSU5HVykgJiYgIUNPTVBJTEVSKE1JTkdXNjQpCi0gICAg
dm9pZCogYWRkcmVzcyA9IF9fbWluZ3dfYWxpZ25lZF9tYWxsb2MoQkxPQ0tfU0laRSwgQkxPQ0tf
U0laRSk7Ci0jZWxzZQotICAgIHZvaWQqIGFkZHJlc3MgPSBfYWxpZ25lZF9tYWxsb2MoQkxPQ0tf
U0laRSwgQkxPQ0tfU0laRSk7Ci0jZW5kaWYKLSAgICBtZW1zZXQoYWRkcmVzcywgMCwgQkxPQ0tf
U0laRSk7Ci0jZWxpZiBIQVZFKFBPU0lYX01FTUFMSUdOKQotICAgIHZvaWQqIGFkZHJlc3M7Ci0g
ICAgcG9zaXhfbWVtYWxpZ24oJmFkZHJlc3MsIEJMT0NLX1NJWkUsIEJMT0NLX1NJWkUpOwotI2Vs
c2UKLQotI2lmIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFEUykKLSNlcnJvciBOZWVkIHRvIGlu
aXRpYWxpemUgcGFnZXNpemUgc2FmZWx5LgotI2VuZGlmCi0gICAgc3RhdGljIHNpemVfdCBwYWdl
c2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0KLSAgICBzaXplX3QgZXh0cmEgPSAwOwotICAgIGlmIChC
TE9DS19TSVpFID4gcGFnZXNpemUpCi0gICAgICAgIGV4dHJhID0gQkxPQ0tfU0laRSAtIHBhZ2Vz
aXplOwotCi0gICAgdm9pZCogbW1hcFJlc3VsdCA9IG1tYXAoTlVMTCwgQkxPQ0tfU0laRSArIGV4
dHJhLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwg
MCk7Ci0gICAgdWludHB0cl90IGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
bW1hcFJlc3VsdCk7Ci0KLSAgICBzaXplX3QgYWRqdXN0ID0gMDsKLSAgICBpZiAoKGFkZHJlc3Mg
JiBCTE9DS19PRkZTRVRfTUFTSykgIT0gMCkKLSAgICAgICAgYWRqdXN0ID0gQkxPQ0tfU0laRSAt
IChhZGRyZXNzICYgQkxPQ0tfT0ZGU0VUX01BU0spOwotCi0gICAgaWYgKGFkanVzdCA+IDApCi0g
ICAgICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PGNoYXIqPihhZGRyZXNzKSwgYWRqdXN0KTsK
LQotICAgIGlmIChhZGp1c3QgPCBleHRyYSkKLSAgICAgICAgbXVubWFwKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGFkZHJlc3MgKyBhZGp1c3QgKyBCTE9DS19TSVpFKSwgZXh0cmEgLSBhZGp1c3Qp
OwotCi0gICAgYWRkcmVzcyArPSBhZGp1c3Q7Ci0jZW5kaWYKKyAgICBBbGlnbmVkQ29sbGVjdG9y
QmxvY2sgYWxsb2NhdGlvbiA9IG1fYmxvY2thbGxvY2F0b3IuYWxsb2NhdGUoKTsKKyAgICBDb2xs
ZWN0b3JCbG9jayogYmxvY2sgPSBzdGF0aWNfY2FzdDxDb2xsZWN0b3JCbG9jayo+KGFsbG9jYXRp
b24uYmFzZSgpKTsKIAogICAgIC8vIEluaXRpYWxpemUgYmxvY2suCiAKLSAgICBDb2xsZWN0b3JC
bG9jayogYmxvY2sgPSByZWludGVycHJldF9jYXN0PENvbGxlY3RvckJsb2NrKj4oYWRkcmVzcyk7
CiAgICAgYmxvY2stPmhlYXAgPSB0aGlzOwogICAgIGNsZWFyTWFya0JpdHMoYmxvY2spOwogCkBA
IC0yNTQsMTQgKzIwNSwxNCBAQCBORVZFUl9JTkxJTkUgQ29sbGVjdG9yQmxvY2sqIEhlYXA6OmFs
bG9jCiAKICAgICBzaXplX3QgbnVtQmxvY2tzID0gbV9oZWFwLm51bUJsb2NrczsKICAgICBpZiAo
bV9oZWFwLnVzZWRCbG9ja3MgPT0gbnVtQmxvY2tzKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgbWF4TnVtQmxvY2tzID0gVUxPTkdfTUFYIC8gc2l6ZW9mKENvbGxlY3RvckJsb2NrKikg
LyBHUk9XVEhfRkFDVE9SOworICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heE51bUJsb2Nr
cyA9IFVMT05HX01BWCAvIHNpemVvZihBbGlnbmVkQ29sbGVjdG9yQmxvY2spIC8gR1JPV1RIX0ZB
Q1RPUjsKICAgICAgICAgaWYgKG51bUJsb2NrcyA+IG1heE51bUJsb2NrcykKICAgICAgICAgICAg
IENSQVNIKCk7CiAgICAgICAgIG51bUJsb2NrcyA9IG1heChNSU5fQVJSQVlfU0laRSwgbnVtQmxv
Y2tzICogR1JPV1RIX0ZBQ1RPUik7CiAgICAgICAgIG1faGVhcC5udW1CbG9ja3MgPSBudW1CbG9j
a3M7Ci0gICAgICAgIG1faGVhcC5ibG9ja3MgPSBzdGF0aWNfY2FzdDxDb2xsZWN0b3JCbG9jayoq
PihmYXN0UmVhbGxvYyhtX2hlYXAuYmxvY2tzLCBudW1CbG9ja3MgKiBzaXplb2YoQ29sbGVjdG9y
QmxvY2sqKSkpOworICAgICAgICBtX2hlYXAuYmxvY2tzID0gc3RhdGljX2Nhc3Q8QWxpZ25lZENv
bGxlY3RvckJsb2NrKj4oZmFzdFJlYWxsb2MobV9oZWFwLmJsb2NrcywgbnVtQmxvY2tzICogc2l6
ZW9mKEFsaWduZWRDb2xsZWN0b3JCbG9jaykpKTsKICAgICB9Ci0gICAgbV9oZWFwLmJsb2Nrc1tt
X2hlYXAudXNlZEJsb2NrcysrXSA9IGJsb2NrOworICAgIG1faGVhcC5ibG9ja3NbbV9oZWFwLnVz
ZWRCbG9ja3MrK10gPSBhbGxvY2F0aW9uOwogCiAgICAgcmV0dXJuIGJsb2NrOwogfQpAQCAtMjc0
LDcgKzIyNSw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEhlYXA6OmZyZWVCbG9jayhzaXplX3QKICAg
ICBPYmplY3RJdGVyYXRvciBlbmQobV9oZWFwLCBibG9jayArIDEpOwogICAgIGZvciAoIDsgaXQg
IT0gZW5kOyArK2l0KQogICAgICAgICAoKml0KS0+fkpTQ2VsbCgpOwotICAgIGZyZWVCbG9ja1B0
cihtX2hlYXAuYmxvY2tzW2Jsb2NrXSk7CisgICAgbV9oZWFwLmJsb2Nrc1tibG9ja10uZGVhbGxv
Y2F0ZSgpOwogCiAgICAgLy8gc3dhcCB3aXRoIHRoZSBsYXN0IGJsb2NrIHNvIHdlIGNvbXBhY3Qg
YXMgd2UgZ28KICAgICBtX2hlYXAuYmxvY2tzW2Jsb2NrXSA9IG1faGVhcC5ibG9ja3NbbV9oZWFw
LnVzZWRCbG9ja3MgLSAxXTsKQEAgLTI4MiwzMSArMjMzLDEwIEBAIE5FVkVSX0lOTElORSB2b2lk
IEhlYXA6OmZyZWVCbG9jayhzaXplX3QKIAogICAgIGlmIChtX2hlYXAubnVtQmxvY2tzID4gTUlO
X0FSUkFZX1NJWkUgJiYgbV9oZWFwLnVzZWRCbG9ja3MgPCBtX2hlYXAubnVtQmxvY2tzIC8gTE9X
X1dBVEVSX0ZBQ1RPUikgewogICAgICAgICBtX2hlYXAubnVtQmxvY2tzID0gbV9oZWFwLm51bUJs
b2NrcyAvIEdST1dUSF9GQUNUT1I7IAotICAgICAgICBtX2hlYXAuYmxvY2tzID0gc3RhdGljX2Nh
c3Q8Q29sbGVjdG9yQmxvY2sqKj4oZmFzdFJlYWxsb2MobV9oZWFwLmJsb2NrcywgbV9oZWFwLm51
bUJsb2NrcyAqIHNpemVvZihDb2xsZWN0b3JCbG9jayopKSk7CisgICAgICAgIG1faGVhcC5ibG9j
a3MgPSBzdGF0aWNfY2FzdDxBbGlnbmVkQ29sbGVjdG9yQmxvY2sqPihmYXN0UmVhbGxvYyhtX2hl
YXAuYmxvY2tzLCBtX2hlYXAubnVtQmxvY2tzICogc2l6ZW9mKEFsaWduZWRDb2xsZWN0b3JCbG9j
aykpKTsKICAgICB9CiB9CiAKLU5FVkVSX0lOTElORSB2b2lkIEhlYXA6OmZyZWVCbG9ja1B0cihD
b2xsZWN0b3JCbG9jayogYmxvY2spCi17Ci0jaWYgT1MoREFSV0lOKSAgICAKLSAgICB2bV9kZWFs
bG9jYXRlKGN1cnJlbnRfdGFzaygpLCByZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4oYmxv
Y2spLCBCTE9DS19TSVpFKTsKLSNlbGlmIE9TKFNZTUJJQU4pCi0gICAgbV9ibG9ja2FsbG9jYXRv
ci5mcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJsb2NrKSk7Ci0jZWxpZiBPUyhXSU5DRSkK
LSAgICBWaXJ0dWFsRnJlZShibG9jaywgMCwgTUVNX1JFTEVBU0UpOwotI2VsaWYgT1MoV0lORE9X
UykKLSNpZiBDT01QSUxFUihNSU5HVykgJiYgIUNPTVBJTEVSKE1JTkdXNjQpCi0gICAgX19taW5n
d19hbGlnbmVkX2ZyZWUoYmxvY2spOwotI2Vsc2UKLSAgICBfYWxpZ25lZF9mcmVlKGJsb2NrKTsK
LSNlbmRpZgotI2VsaWYgSEFWRShQT1NJWF9NRU1BTElHTikKLSAgICBmcmVlKGJsb2NrKTsKLSNl
bHNlCi0gICAgbXVubWFwKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJsb2NrKSwgQkxPQ0tfU0la
RSk7Ci0jZW5kaWYKLX0KLQogdm9pZCBIZWFwOjpmcmVlQmxvY2tzKCkKIHsKICAgICBQcm90ZWN0
Q291bnRTZXQgcHJvdGVjdGVkVmFsdWVzQ29weSA9IG1fcHJvdGVjdGVkVmFsdWVzOwpAQCAtMzMw
LDcgKzI2MCw3IEBAIHZvaWQgSGVhcDo6ZnJlZUJsb2NrcygpCiAgICAgICAgIGl0LT5maXJzdC0+
fkpTQ2VsbCgpOwogCiAgICAgZm9yIChzaXplX3QgYmxvY2sgPSAwOyBibG9jayA8IG1faGVhcC51
c2VkQmxvY2tzOyArK2Jsb2NrKQotICAgICAgICBmcmVlQmxvY2tQdHIobV9oZWFwLmJsb2Nrc1ti
bG9ja10pOworICAgICAgICBtX2hlYXAuYmxvY2tzW2Jsb2NrXS5kZWFsbG9jYXRlKCk7CiAKICAg
ICBmYXN0RnJlZShtX2hlYXAuYmxvY2tzKTsKIApAQCAtMzgzLDcgKzMxMyw3IEBAIGFsbG9jYXRl
OgogCiAgICAgZG8gewogICAgICAgICBBU1NFUlQobV9oZWFwLm5leHRCbG9jayA8IG1faGVhcC51
c2VkQmxvY2tzKTsKLSAgICAgICAgQmxvY2sqIGJsb2NrID0gcmVpbnRlcnByZXRfY2FzdDxCbG9j
ayo+KG1faGVhcC5ibG9ja3NbbV9oZWFwLm5leHRCbG9ja10pOworICAgICAgICBCbG9jayogYmxv
Y2sgPSBtX2hlYXAuY29sbGVjdG9yQmxvY2sobV9oZWFwLm5leHRCbG9jayk7CiAgICAgICAgIGRv
IHsKICAgICAgICAgICAgIEFTU0VSVChtX2hlYXAubmV4dENlbGwgPCBIZWFwQ29uc3RhbnRzOjpj
ZWxsc1BlckJsb2NrKTsKICAgICAgICAgICAgIGlmICghYmxvY2stPm1hcmtlZC5nZXQobV9oZWFw
Lm5leHRDZWxsKSkgeyAvLyBBbHdheXMgZmFsc2UgZm9yIHRoZSBsYXN0IGNlbGwgaW4gdGhlIGJs
b2NrCkBAIC00MzgsMTAgKzM2OCwxMCBAQCB2b2lkIEhlYXA6OnNocmlua0Jsb2NrcyhzaXplX3Qg
bmVlZGVkQmxvCiAgICAgCiAgICAgLy8gQ2xlYXIgdGhlIGFsd2F5cy1vbiBsYXN0IGJpdCwgc28g
aXNFbXB0eSgpIGlzbid0IGZvb2xlZCBieSBpdC4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1faGVhcC51c2VkQmxvY2tzOyArK2kpCi0gICAgICAgIG1faGVhcC5ibG9ja3NbaV0tPm1hcmtl
ZC5jbGVhcihIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSk7CisgICAgICAgIG1faGVh
cC5jb2xsZWN0b3JCbG9jayhpKS0+bWFya2VkLmNsZWFyKEhlYXBDb25zdGFudHM6OmNlbGxzUGVy
QmxvY2sgLSAxKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IG1faGVhcC51c2VkQmxv
Y2tzICYmIG1faGVhcC51c2VkQmxvY2tzICE9IG5lZWRlZEJsb2NrczsgKSB7Ci0gICAgICAgIGlm
IChtX2hlYXAuYmxvY2tzW2ldLT5tYXJrZWQuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX2hl
YXAuY29sbGVjdG9yQmxvY2soaSktPm1hcmtlZC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGZy
ZWVCbG9jayhpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICArK2k7CkBAIC00NDksNyAr
Mzc5LDcgQEAgdm9pZCBIZWFwOjpzaHJpbmtCbG9ja3Moc2l6ZV90IG5lZWRlZEJsbwogCiAgICAg
Ly8gUmVzZXQgdGhlIGFsd2F5cy1vbiBsYXN0IGJpdC4KICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1faGVhcC51c2VkQmxvY2tzOyArK2kpCi0gICAgICAgIG1faGVhcC5ibG9ja3NbaV0tPm1h
cmtlZC5zZXQoSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEpOworICAgICAgICBtX2hl
YXAuY29sbGVjdG9yQmxvY2soaSktPm1hcmtlZC5zZXQoSGVhcENvbnN0YW50czo6Y2VsbHNQZXJC
bG9jayAtIDEpOwogfQogCiAjaWYgT1MoV0lOQ0UpCkBAIC03NDQsNyArNjc0LDYgQEAgdm9pZCBI
ZWFwOjptYXJrQ29uc2VydmF0aXZlbHkoTWFya1N0YWNrJgogICAgIGNoYXIqKiBwID0gc3RhdGlj
X2Nhc3Q8Y2hhcioqPihzdGFydCk7CiAgICAgY2hhcioqIGUgPSBzdGF0aWNfY2FzdDxjaGFyKio+
KGVuZCk7CiAKLSAgICBDb2xsZWN0b3JCbG9jayoqIGJsb2NrcyA9IG1faGVhcC5ibG9ja3M7CiAg
ICAgd2hpbGUgKHAgIT0gZSkgewogICAgICAgICBjaGFyKiB4ID0gKnArKzsKICAgICAgICAgaWYg
KGlzUG9zc2libGVDZWxsKHgpKSB7CkBAIC03NjAsNyArNjg5LDcgQEAgdm9pZCBIZWFwOjptYXJr
Q29uc2VydmF0aXZlbHkoTWFya1N0YWNrJgogICAgICAgICAgICAgQ29sbGVjdG9yQmxvY2sqIGJs
b2NrQWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29sbGVjdG9yQmxvY2sqPih4QXNCaXRzIC0gb2Zm
c2V0KTsKICAgICAgICAgICAgIHVzZWRCbG9ja3MgPSBtX2hlYXAudXNlZEJsb2NrczsKICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGJsb2NrID0gMDsgYmxvY2sgPCB1c2VkQmxvY2tzOyBibG9jaysr
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2Nrc1tibG9ja10gIT0gYmxvY2tBZGRyKQorICAg
ICAgICAgICAgICAgIGlmIChtX2hlYXAuY29sbGVjdG9yQmxvY2soYmxvY2spICE9IGJsb2NrQWRk
cikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgbWFya1N0
YWNrLmFwcGVuZChyZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHhBc0JpdHMpKTsKICAgICAgICAg
ICAgICAgICBtYXJrU3RhY2suZHJhaW4oKTsKQEAgLTEwMDksNyArOTM4LDcgQEAgdm9pZCBIZWFw
OjptYXJrUHJvdGVjdGVkT2JqZWN0cyhNYXJrU3RhYwogdm9pZCBIZWFwOjpjbGVhck1hcmtCaXRz
KCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faGVhcC51c2VkQmxvY2tzOyArK2kp
Ci0gICAgICAgIGNsZWFyTWFya0JpdHMobV9oZWFwLmJsb2Nrc1tpXSk7CisgICAgICAgIGNsZWFy
TWFya0JpdHMobV9oZWFwLmNvbGxlY3RvckJsb2NrKGkpKTsKIH0KIAogdm9pZCBIZWFwOjpjbGVh
ck1hcmtCaXRzKENvbGxlY3RvckJsb2NrKiBibG9jaykKQEAgLTEwMjgsOSArOTU3LDkgQEAgc2l6
ZV90IEhlYXA6Om1hcmtlZENlbGxzKHNpemVfdCBzdGFydEJsbwogICAgICAgICByZXR1cm4gMDsK
IAogICAgIHNpemVfdCByZXN1bHQgPSAwOwotICAgIHJlc3VsdCArPSBtX2hlYXAuYmxvY2tzW3N0
YXJ0QmxvY2tdLT5tYXJrZWQuY291bnQoc3RhcnRDZWxsKTsKKyAgICByZXN1bHQgKz0gbV9oZWFw
LmNvbGxlY3RvckJsb2NrKHN0YXJ0QmxvY2spLT5tYXJrZWQuY291bnQoc3RhcnRDZWxsKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gc3RhcnRCbG9jayArIDE7IGkgPCBtX2hlYXAudXNlZEJsb2Nrczsg
KytpKQotICAgICAgICByZXN1bHQgKz0gbV9oZWFwLmJsb2Nrc1tpXS0+bWFya2VkLmNvdW50KCk7
CisgICAgICAgIHJlc3VsdCArPSBtX2hlYXAuY29sbGVjdG9yQmxvY2soaSktPm1hcmtlZC5jb3Vu
dCgpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29sbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xs
ZWN0b3IuaAkocmV2aXNpb24gNjQ1ODkpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxl
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwxMyArMjIsMTYgQEAKICNpZm5kZWYgQ29sbGVj
dG9yX2gKICNkZWZpbmUgQ29sbGVjdG9yX2gKIAorI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgi
CiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GaXhlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bh
Z2VBbGxvY2F0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAtMzcsMTAg
KzQwLDYgQEAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAjZW5kaWYKIAotI2lmIE9TKFNZTUJJQU4p
Ci0jaW5jbHVkZSA8d3RmL3N5bWJpYW4vQmxvY2tBbGxvY2F0b3JTeW1iaWFuLmg+Ci0jZW5kaWYK
LQogI2RlZmluZSBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKGNsYXNzKSBDT01QSUxFX0FTU0VS
VChzaXplb2YoY2xhc3MpIDw9IENFTExfU0laRSwgY2xhc3NfZml0c19pbl9jZWxsKQogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTU3LDEwICs1NiwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIExpdmVPYmplY3RJdGVyYXRvcjsKIAorI2lmIE9TKFdJTkNFKSB8fCBPUyhTWU1CSUFOKQor
ICAgIGNvbnN0IHNpemVfdCBCTE9DS19TSVpFID0gNjQgKiAxMDI0OyAvLyA2NGsKKyNlbHNlCisg
ICAgY29uc3Qgc2l6ZV90IEJMT0NLX1NJWkUgPSA2NCAqIDQwOTY7IC8vIDI1NmsKKyNlbmRpZgor
CisgICAgdHlwZWRlZiBBbGlnbmVkQmxvY2tBbGxvY2F0b3I8QkxPQ0tfU0laRT4gQ29sbGVjdG9y
QmxvY2tBbGxvY2F0b3I7CisgICAgdHlwZWRlZiBBbGlnbmVkQmxvY2s8QkxPQ0tfU0laRT4gQWxp
Z25lZENvbGxlY3RvckJsb2NrOworCiAgICAgc3RydWN0IENvbGxlY3RvckhlYXAgewogICAgICAg
ICBzaXplX3QgbmV4dEJsb2NrOwogICAgICAgICBzaXplX3QgbmV4dENlbGw7Ci0gICAgICAgIENv
bGxlY3RvckJsb2NrKiogYmxvY2tzOworICAgICAgICBBbGlnbmVkQ29sbGVjdG9yQmxvY2sqIGJs
b2NrczsKICAgICAgICAgCiAgICAgICAgIHZvaWQqIG5leHROdW1iZXI7CiAKQEAgLTcxLDYgKzc5
LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGRpZFNocmluazsKIAogICAgICAg
ICBPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbkluUHJvZ3Jlc3M7CisKKyAgICAgICAgQ29s
bGVjdG9yQmxvY2sqIGNvbGxlY3RvckJsb2NrKHNpemVfdCBpbmRleCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbGxlY3RvckJsb2NrKj4oYmxvY2tz
W2luZGV4XS5iYXNlKCkpOworICAgICAgICB9CiAgICAgfTsKIAogICAgIGNsYXNzIEhlYXAgOiBw
dWJsaWMgTm9uY29weWFibGUgewpAQCAtMTQwLDcgKzE1Myw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIE5FVkVSX0lOTElORSBDb2xsZWN0b3JCbG9jayogYWxsb2NhdGVCbG9jaygpOwog
ICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCBmcmVlQmxvY2soc2l6ZV90KTsKLSAgICAgICAgTkVW
RVJfSU5MSU5FIHZvaWQgZnJlZUJsb2NrUHRyKENvbGxlY3RvckJsb2NrKik7CiAgICAgICAgIHZv
aWQgZnJlZUJsb2NrcygpOwogICAgICAgICB2b2lkIHJlc2l6ZUJsb2NrcygpOwogICAgICAgICB2
b2lkIGdyb3dCbG9ja3Moc2l6ZV90IG5lZWRlZEJsb2Nrcyk7CkBAIC0xODEsMjEgKzE5MywxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcHRocmVhZF9rZXlfdCBtX2N1cnJlbnRUaHJlYWRS
ZWdpc3RyYXI7CiAjZW5kaWYKIAotI2lmIE9TKFNZTUJJQU4pCiAgICAgICAgIC8vIEFsbG9jYXRl
cyBjb2xsZWN0b3IgYmxvY2tzIHdpdGggY29ycmVjdCBhbGlnbm1lbnQKLSAgICAgICAgV1RGOjpB
bGlnbmVkQmxvY2tBbGxvY2F0b3IgbV9ibG9ja2FsbG9jYXRvcjsgCi0jZW5kaWYKKyAgICAgICAg
Q29sbGVjdG9yQmxvY2tBbGxvY2F0b3IgbV9ibG9ja2FsbG9jYXRvcjsgCiAgICAgICAgIAogICAg
ICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKICAgICB9OwogCiAgICAgLy8gdHVuYWJs
ZSBwYXJhbWV0ZXJzCi0jaWYgT1MoV0lOQ0UpIHx8IE9TKFNZTUJJQU4pCi0gICAgY29uc3Qgc2l6
ZV90IEJMT0NLX1NJWkUgPSA2NCAqIDEwMjQ7IC8vIDY0awotI2Vsc2UKLSAgICBjb25zdCBzaXpl
X3QgQkxPQ0tfU0laRSA9IDY0ICogNDA5NjsgLy8gMjU2awotI2VuZGlmCi0KICAgICAvLyBkZXJp
dmVkIGNvbnN0YW50cwogICAgIGNvbnN0IHNpemVfdCBCTE9DS19PRkZTRVRfTUFTSyA9IEJMT0NL
X1NJWkUgLSAxOwogICAgIGNvbnN0IHNpemVfdCBCTE9DS19NQVNLID0gfkJMT0NLX09GRlNFVF9N
QVNLOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3JIZWFwSXRlcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3RvckhlYXBJdGVy
YXRvci5oCShyZXZpc2lvbiA2NDU4OSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVj
dG9ySGVhcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICBpbmxpbmUgSlNDZWxsKiBDb2xsZWN0b3JIZWFwSXRlcmF0b3I6Om9w
ZXJhdG9yKigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxK
U0NlbGwqPigmbV9oZWFwLmJsb2Nrc1ttX2Jsb2NrXS0+Y2VsbHNbbV9jZWxsXSk7CisgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KCZtX2hlYXAuY29sbGVjdG9yQmxvY2so
bV9ibG9jayktPmNlbGxzW21fY2VsbF0pOwogICAgIH0KICAgICAKICAgICAvLyBJdGVyYXRvcnMg
YWR2YW5jZSB1cCB0byB0aGUgbmV4dC10by1sYXN0IC0tIGFuZCBub3QgdGhlIGxhc3QgLS0gY2Vs
bCBpbiBhCkBAIC0xMDMsNyArMTAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmICht
X2Jsb2NrIDwgbV9oZWFwLm5leHRCbG9jayB8fCAobV9ibG9jayA9PSBtX2hlYXAubmV4dEJsb2Nr
ICYmIG1fY2VsbCA8IG1faGVhcC5uZXh0Q2VsbCkpCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CiAKLSAgICAgICAgd2hpbGUgKG1fYmxvY2sgPCBtX2hlYXAudXNlZEJsb2NrcyAmJiAhbV9oZWFw
LmJsb2Nrc1ttX2Jsb2NrXS0+bWFya2VkLmdldChtX2NlbGwpKQorICAgICAgICB3aGlsZSAobV9i
bG9jayA8IG1faGVhcC51c2VkQmxvY2tzICYmICFtX2hlYXAuY29sbGVjdG9yQmxvY2sobV9ibG9j
ayktPm1hcmtlZC5nZXQobV9jZWxsKSkKICAgICAgICAgICAgIGFkdmFuY2UoSGVhcENvbnN0YW50
czo6Y2VsbHNQZXJCbG9jayAtIDEpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAt
MTE5LDcgKzExOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBkbyB7CiAgICAgICAgICAg
ICBhZHZhbmNlKEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2sgLSAxKTsKICAgICAgICAgICAg
IEFTU0VSVChtX2Jsb2NrID4gbV9oZWFwLm5leHRCbG9jayB8fCAobV9ibG9jayA9PSBtX2hlYXAu
bmV4dEJsb2NrICYmIG1fY2VsbCA+PSBtX2hlYXAubmV4dENlbGwpKTsKLSAgICAgICAgfSB3aGls
ZSAobV9ibG9jayA8IG1faGVhcC51c2VkQmxvY2tzICYmIG1faGVhcC5ibG9ja3NbbV9ibG9ja10t
Pm1hcmtlZC5nZXQobV9jZWxsKSk7CisgICAgICAgIH0gd2hpbGUgKG1fYmxvY2sgPCBtX2hlYXAu
dXNlZEJsb2NrcyAmJiBtX2hlYXAuY29sbGVjdG9yQmxvY2sobV9ibG9jayktPm1hcmtlZC5nZXQo
bV9jZWxsKSk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvQml0
bWFwLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvQml0bWFwLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
CisgKi8KKyNpZm5kZWYgQml0bWFwX2gKKyNkZWZpbmUgQml0bWFwX2gKKworI2luY2x1ZGUgIkZp
eGVkQXJyYXkuaCIKKyNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKKworbmFtZXNwYWNlIFdURiB7
CisKK3RlbXBsYXRlPHNpemVfdCBzaXplPgorY2xhc3MgQml0bWFwIHsKK3ByaXZhdGU6CisgICAg
dHlwZWRlZiB1aW50MzJfdCBXb3JkVHlwZTsKKworcHVibGljOgorICAgIGJvb2wgZ2V0KHNpemVf
dCkgY29uc3Q7CisgICAgdm9pZCBzZXQoc2l6ZV90KTsKKyAgICB2b2lkIGNsZWFyKHNpemVfdCk7
CisgICAgdm9pZCBjbGVhckFsbCgpOworICAgIHZvaWQgYWR2YW5jZVRvTmV4dEZyZWVCaXQoc2l6
ZV90JikgY29uc3Q7CisgICAgc2l6ZV90IGNvdW50KHNpemVfdCA9IDApIGNvbnN0OworICAgIHNp
emVfdCBpc0VtcHR5KCkgY29uc3Q7CisgICAgc2l6ZV90IGlzRnVsbCgpIGNvbnN0OworCitwcml2
YXRlOgorICAgIHN0YXRpYyBjb25zdCBXb3JkVHlwZSB3b3JkU2l6ZSA9IHNpemVvZihXb3JkVHlw
ZSkgKiA4OworICAgIHN0YXRpYyBjb25zdCBXb3JkVHlwZSB3b3JkcyA9IChzaXplICsgd29yZFNp
emUgLSAxKSAvIHdvcmRTaXplOworCisgICAgLy8gdGhlIGxpdGVyYWwgJzEnIGlzIG9mIHR5cGUg
c2lnbmVkIGludC4gIFdlIHdhbnQgdG8gdXNlIGFuIHVuc2lnbmVkCisgICAgLy8gdmVyc2lvbiBv
ZiB0aGUgY29ycmVjdCBzaXplIHdoZW4gZG9pbmcgdGhlIGNhbGN1bGF0aW9ucyBiZWNhdXNlIGlm
CisgICAgLy8gV29yZFR5cGUgaXMgbGFyZ2VyIHRoYW4gaW50LCAnMSA8PCAzMScgd2lsbCBmaXJz
dCBiZSBzaWduIGV4dGVuZGVkCisgICAgLy8gYW5kIHRoZW4gY2FzdGVkIHRvIHVuc2lnbmVkLCBt
ZWFuaW5nIHRoYXQgc2V0KDMxKSB3aGVuIFdvcmRUeXBlIGlzCisgICAgLy8gYSA2NCBiaXQgdW5z
aWduZWQgaW50IHdvdWxkIGdpdmUgMHhmZmZmODAwMAorICAgIHN0YXRpYyBjb25zdCBXb3JkVHlw
ZSBvbmUgPSAxOworCisgICAgRml4ZWRBcnJheTxXb3JkVHlwZSwgd29yZHM+IGJpdHM7Cit9Owor
Cit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4KK2lubGluZSBib29sIEJpdG1hcDxzaXplPjo6Z2V0KHNp
emVfdCBuKSBjb25zdAoreworICAgIHJldHVybiAhIShiaXRzW24gLyB3b3JkU2l6ZV0gJiAob25l
IDw8IChuICUgd29yZFNpemUpKSk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBzaXplPgoraW5saW5l
IHZvaWQgQml0bWFwPHNpemU+OjpzZXQoc2l6ZV90IG4pCit7CisgICAgYml0c1tuIC8gd29yZFNp
emVdIHw9IChvbmUgPDwgKG4gJSB3b3JkU2l6ZSkpOworfQorCit0ZW1wbGF0ZTxzaXplX3Qgc2l6
ZT4KK2lubGluZSB2b2lkIEJpdG1hcDxzaXplPjo6Y2xlYXIoc2l6ZV90IG4pCit7CisgICAgYml0
c1tuIC8gd29yZFNpemVdICY9IH4ob25lIDw8IChuICUgd29yZFNpemUpKTsKK30KKwordGVtcGxh
dGU8c2l6ZV90IHNpemU+CitpbmxpbmUgdm9pZCBCaXRtYXA8c2l6ZT46OmNsZWFyQWxsKCkKK3sK
KyAgICBtZW1zZXQoYml0cy5kYXRhKCksIDAsIHNpemVvZihiaXRzKSk7Cit9CisKK3RlbXBsYXRl
PHNpemVfdCBzaXplPgoraW5saW5lIHZvaWQgQml0bWFwPHNpemU+OjphZHZhbmNlVG9OZXh0RnJl
ZUJpdChzaXplX3QmIHN0YXJ0KSBjb25zdAoreworICAgIGlmICghfmJpdHNbc3RhcnQgLyB3b3Jk
U2l6ZV0pCisgICAgICAgIHN0YXJ0ID0gKChzdGFydCAvIHdvcmRTaXplKSArIDEpICogd29yZFNp
emU7CisgICAgZWxzZQorICAgICAgICArK3N0YXJ0OworfQorCit0ZW1wbGF0ZTxzaXplX3Qgc2l6
ZT4KK2lubGluZSBzaXplX3QgQml0bWFwPHNpemU+Ojpjb3VudChzaXplX3Qgc3RhcnQpIGNvbnN0
Cit7CisgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgZm9yICggOyAoc3RhcnQgJSB3b3JkU2l6
ZSk7ICsrc3RhcnQpIHsKKyAgICAgICAgaWYgKGdldChzdGFydCkpCisgICAgICAgICAgICArK3Jl
c3VsdDsKKyAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0IC8gd29yZFNpemU7IGkgPCB3
b3JkczsgKytpKQorICAgICAgICByZXN1bHQgKz0gV1RGOjpiaXRDb3VudChiaXRzW2ldKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4KK2lubGluZSBzaXpl
X3QgQml0bWFwPHNpemU+Ojppc0VtcHR5KCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHdvcmRzOyArK2kpCisgICAgICAgIGlmIChiaXRzW2ldKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4K
K2lubGluZSBzaXplX3QgQml0bWFwPHNpemU+Ojppc0Z1bGwoKSBjb25zdAoreworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgd29yZHM7ICsraSkKKyAgICAgICAgaWYgKH5iaXRzW2ldKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit9CisjZW5kaWYK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9QYWdlQWxsb2NhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3d0Zi9QYWdlQWxsb2NhdGlvbi5oCShyZXZpc2lvbiA2NDU4OSkKKysr
IEphdmFTY3JpcHRDb3JlL3d0Zi9QYWdlQWxsb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw2ICszOSw1MSBAQAogI2RlZmluZSBQQUdFX0FMTE9DQVRJT05fQUxMT0NBVEVfQVQgMAogI2Vu
ZGlmCiAKKyNpZiBIQVZFKE1NQVApCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDx1
bmlzdGQuaD4KKyNlbmRpZgorCisjaWYgT1MoREFSV0lOKQorCisjaW5jbHVkZSA8bWFjaC9tYWNo
X2luaXQuaD4KKyNpbmNsdWRlIDxtYWNoL21hY2hfcG9ydC5oPgorI2luY2x1ZGUgPG1hY2gvdGFz
ay5oPgorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2luY2x1ZGUgPG1hY2gvdm1fbWFw
Lmg+CisKKyNlbGlmIE9TKFdJTkRPV1MpCisKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRl
IDx3aW5kb3dzLmg+CisKKyNlbGlmIE9TKEhBSUtVKQorCisjaW5jbHVkZSA8T1MuaD4KKworI2Vs
aWYgT1MoVU5JWCkKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaWYgT1MoU09MQVJJUykKKyNp
bmNsdWRlIDx0aHJlYWQuaD4KKyNlbHNlCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlmCisK
KyNpZiBIQVZFKFBUSFJFQURfTlBfSCkKKyNpbmNsdWRlIDxwdGhyZWFkX25wLmg+CisjZW5kaWYK
KworI2lmIE9TKFFOWCkKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+Cisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvcHJvY2ZzLmg+CisjZW5kaWYKKworI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBQYWdlQWxsb2NhdGlvbiB7CkBAIC04Miw2
ICsxMjcsMTIgQEAgcHVibGljOgogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9CiAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2Jhc2U7IH0K
KyNpZiBDT01QSUxFUihXSU5TQ1cpCisgICAgb3BlcmF0b3IgYm9vbCBjb25zdCB7IHJldHVybiBt
X2Jhc2U7IH0KKyNlbHNlCisgICAgdHlwZWRlZiB2b2lkKiBQYWdlQWxsb2NhdGlvbjo6KlVuc3Bl
Y2lmaWVkQm9vbFR5cGU7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFzZSA/ICZQYWdlQWxsb2NhdGlvbjo6bV9iYXNlIDogMDsgfQorI2VuZGlm
CiAKICAgICBib29sIGNvbW1pdCh2b2lkKiwgc2l6ZV90LCBib29sIHdyaXRhYmxlID0gdHJ1ZSwg
Ym9vbCBleGVjdXRhYmxlID0gZmFsc2UpIGNvbnN0OwogICAgIHZvaWQgZGVjb21taXQodm9pZCos
IHNpemVfdCkgY29uc3Q7CkBAIC05Myw2ICsxNDQsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBQ
YWdlQWxsb2NhdGlvbiBhbGxvY2F0ZUF0KHZvaWQqIGFkZHJlc3MsIGJvb2wgZml4ZWQsIHNpemVf
dCwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1
dGFibGUgPSBmYWxzZSk7CiAgICAgc3RhdGljIFBhZ2VBbGxvY2F0aW9uIHJlc2VydmVBdCh2b2lk
KiBhZGRyZXNzLCBib29sIGZpeGVkLCBzaXplX3QsIFVzYWdlID0gVW5rbm93blVzYWdlLCBib29s
IHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpOwogI2VuZGlmCisKKyNp
ZiBIQVZFKEFMSUdORURfQUxMT0NBVEUpCisgICAgc3RhdGljIFBhZ2VBbGxvY2F0aW9uIGFsbG9j
YXRlQWxpZ25lZChzaXplX3QsIFVzYWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxlID0g
dHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpOworICAgIHN0YXRpYyBQYWdlQWxsb2NhdGlv
biByZXNlcnZlQWxpZ25lZChzaXplX3QsIFVzYWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRh
YmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpOworI2VuZGlmCisKICAgICBzdGF0
aWMgc2l6ZV90IHBhZ2VzaXplKCk7CiAKIHByaXZhdGU6CkBAIC0xMTgsNiArMTc1LDk3IEBAIHBy
aXZhdGU6CiAjZW5kaWYKIH07CiAKKyNpZiBIQVZFKEFMSUdORURfQUxMT0NBVEUpCisKKyNpZiBP
UyhEQVJXSU4pCisKK2lubGluZSBQYWdlQWxsb2NhdGlvbiBQYWdlQWxsb2NhdGlvbjo6YWxsb2Nh
dGVBbGlnbmVkKHNpemVfdCBzaXplLCBVc2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRh
YmxlKQoreworICAgIEFTU0VSVCghKHNpemUgJiAoc2l6ZSAtIDEpKSk7CisgICAgdm1fYWRkcmVz
c190IGFkZHJlc3MgPSAwOworICAgIHZtX3Byb3RfdCBwcm90ZWN0aW9uID0gVk1fUFJPVF9SRUFE
OworICAgIHByb3RlY3Rpb24gfD0gZXhlY3V0YWJsZSA/IFZNX1BST1RfRVhFQ1VURSA6IDA7Cisg
ICAgcHJvdGVjdGlvbiB8PSB3cml0YWJsZSA/IFZNX1BST1RfV1JJVEUgOiAwOworICAgIHZtX21h
cChjdXJyZW50X3Rhc2soKSwgJmFkZHJlc3MsIHNpemUsIChzaXplIC0gMSksIFZNX0ZMQUdTX0FO
WVdIRVJFIHwgVk1fVEFHX0ZPUl9DT0xMRUNUT1JfTUVNT1JZLCBNRU1PUllfT0JKRUNUX05VTEws
IDAsIEZBTFNFLCBwcm90ZWN0aW9uLCBwcm90ZWN0aW9uLCBWTV9JTkhFUklUX0RFRkFVTFQpOwor
ICAgIHJldHVybiBQYWdlQWxsb2NhdGlvbihyZWludGVycHJldF9jYXN0PHZvaWQqPihhZGRyZXNz
KSwgc2l6ZSk7Cit9CisKKyNlbGlmIE9TKFdJTkRPV1MpCisKK2lubGluZSBQYWdlQWxsb2NhdGlv
biBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVkKHNpemVfdCBzaXplLCBVc2FnZSB1c2Fn
ZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIEFTU0VSVCh3cml0YWJs
ZSAmJiAhZXhlY3V0YWJsZSk7CisjaWYgQ09NUElMRVIoTUlOR1cpICYmICFDT01QSUxFUihNSU5H
VzY0KQorICAgIHZvaWQqIGFkZHJlc3MgPSBfX21pbmd3X2FsaWduZWRfbWFsbG9jKHNpemUsIHNp
emUpOworI2Vsc2UKKyAgICB2b2lkKiBhZGRyZXNzID0gX2FsaWduZWRfbWFsbG9jKHNpemUsIHNp
emUpOworI2VuZGlmCisgICAgbWVtc2V0KGFkZHJlc3MsIDAsIHNpemUpOworICAgIHJldHVybiBQ
YWdlQWxsb2NhdGlvbihhZGRyZXNzLCBzaXplKTsKK30KKworI2VsaWYgSEFWRShQT1NJWF9NRU1B
TElHTikKKworaW5saW5lIFBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZUFs
aWduZWQoc2l6ZV90IHNpemUsIFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1
dGFibGUpCit7CisgICAgQVNTRVJUKHdyaXRhYmxlICYmICFleGVjdXRhYmxlKTsKKworICAgIHZv
aWQqIGFkZHJlc3M7CisgICAgcG9zaXhfbWVtYWxpZ24oJmFkZHJlc3MsIHNpemUsIHNpemUpOwor
ICAgIHJldHVybiBQYWdlQWxsb2NhdGlvbihhZGRyZXNzLCBzaXplKTsKK30KKworI2Vsc2UKKwor
aW5saW5lIFBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZUFsaWduZWQoc2l6
ZV90IHNpemUsIFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCit7
CisgICAgQVNTRVJUKCEoc2l6ZSAmIChzaXplIC0gMSkpKTsKKyAgICBBU1NFUlQod3JpdGFibGUg
JiYgIWV4ZWN1dGFibGUpOworICAgIHN0YXRpYyBzaXplX3QgcGFnZXNpemUgPSBnZXRwYWdlc2l6
ZSgpOworCisgICAgc2l6ZV90IGV4dHJhID0gMDsKKyAgICBpZiAoc2l6ZSA+IHBhZ2VzaXplKQor
ICAgICAgICBleHRyYSA9IHNpemUgLSBwYWdlc2l6ZTsKKworICAgIGludCBmbGFncyA9IE1BUF9Q
UklWQVRFIHwgTUFQX0FOT047CisKKyAgICBpbnQgcHJvdGVjdGlvbiA9IFBST1RfUkVBRDsKKyAg
ICBpZiAod3JpdGFibGUpCisgICAgICAgIHByb3RlY3Rpb24gfD0gUFJPVF9XUklURTsKKyAgICBp
ZiAoZXhlY3V0YWJsZSkKKyAgICAgICAgcHJvdGVjdGlvbiB8PSBQUk9UX0VYRUM7CisKKyAgICAv
LyB1c2UgcGFnZSBhbGxvY2F0aW9uCisgICAgdm9pZCogbW1hcFJlc3VsdCA9IG1tYXAoMCwgc2l6
ZSArIGV4dHJhLCBwcm90ZWN0aW9uLCBmbGFncywgdXNhZ2UsIDApOworICAgIHVpbnRwdHJfdCBh
ZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1tYXBSZXN1bHQpOworCisgICAg
c2l6ZV90IGFkanVzdCA9IDA7CisgICAgaWYgKChhZGRyZXNzICYgKHNpemUgLSAxKSkpCisgICAg
ICAgIGFkanVzdCA9IHNpemUgLSAoYWRkcmVzcyAmIChzaXplIC0gMSkpOworCisgICAgaWYgKGFk
anVzdCA+IDApCisgICAgICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PGNoYXIqPihhZGRyZXNz
KSwgYWRqdXN0KTsKKworICAgIGlmIChhZGp1c3QgPCBleHRyYSkKKyAgICAgICAgbXVubWFwKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFkZHJlc3MgKyBhZGp1c3QgKyBzaXplKSwgZXh0cmEgLSBh
ZGp1c3QpOworCisgICAgYWRkcmVzcyArPSBhZGp1c3Q7CisKKyAgICByZXR1cm4gUGFnZUFsbG9j
YXRpb24ocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkcmVzcyksIHNpemUpOworfQorCisjZW5k
aWYKKworaW5saW5lIFBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjpyZXNlcnZlQWxpZ25l
ZChzaXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJs
ZSkKK3sKKyAgICBQYWdlQWxsb2NhdGlvbiByZXN1bHQgPSBhbGxvY2F0ZUFsaWduZWQoc2l6ZSwg
dXNhZ2UsIHdyaXRhYmxlLCBleGVjdXRhYmxlKTsKKyAgICBpZiAoISFyZXN1bHQpCisgICAgICAg
IHJlc3VsdC5kZWNvbW1pdChyZXN1bHQuYmFzZSgpLCBzaXplKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCisjZW5kaWYKKwogfQogCiB1c2luZyBXVEY6OlBhZ2VBbGxvY2F0aW9uOwpJbmRleDog
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDY0NTg5KQorKysgSmF2YVNjcmlwdENvcmUvd3Rm
L1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwNyw2ICs3MDcsNyBAQAogI2RlZmluZSBI
QVZFX0VSUk5PX0ggMQogI2RlZmluZSBIQVZFX0xBTkdJTkZPX0ggMQogI2RlZmluZSBIQVZFX01N
QVAgMQorI2RlZmluZSBIQVZFX0FMSUdORURfQUxMT0NBVEUgMQogI2RlZmluZSBIQVZFX01FUkdF
U09SVCAxCiAjZGVmaW5lIEhBVkVfU0JSSyAxCiAjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKQEAg
LTczNSw4ICs3MzYsMTAgQEAKIAogI2lmIE9TKFdJTkNFKQogI2RlZmluZSBIQVZFX0VSUk5PX0gg
MAorI2RlZmluZSBIQVZFX0FMSUdORURfQUxMT0NBVEUgMAogI2Vsc2UKICNkZWZpbmUgSEFWRV9T
WVNfVElNRUJfSCAxCisjZGVmaW5lIEhBVkVfQUxJR05FRF9BTExPQ0FURSAxCiAjZW5kaWYKICNk
ZWZpbmUgSEFWRV9WSVJUVUFMQUxMT0MgMQogCkBAIC03OTMsNiArNzk2LDE0IEBACiAKICNlbmRp
ZgogCisjaWYgIWRlZmluZWQoSEFWRV9BTElHTkVEX0FMTE9DQVRFKQorI2lmIEhBVkUoUE9TSVhf
TUVNQUxJR04pCisjZGVmaW5lIEhBVkVfQUxJR05FRF9BTExPQ0FURSAxCisjZWxzZQorI2RlZmlu
ZSBIQVZFX0FMSUdORURfQUxMT0NBVEUgMAorI2VuZGlmCisjZW5kaWYKKwogLyogRU5BQkxFIG1h
Y3JvIGRlZmF1bHRzICovCiAKICNpZiBQTEFURk9STShRVCkKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3d0Zi9zeW1iaWFuL0Jsb2NrQWxsb2NhdG9yU3ltYmlhbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvd3RmL3N5bWJpYW4vQmxvY2tBbGxvY2F0b3JTeW1iaWFuLmNwcAkocmV2aXNp
b24gNjQ1ODkpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvc3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5
bWJpYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzMiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIE9TKFNZTUJJQU4pCi0KLSNpbmNsdWRlICJC
bG9ja0FsbG9jYXRvclN5bWJpYW4uaCIKLQotCi1uYW1lc3BhY2UgV1RGIHsKLQotLyoqIEVmZmlj
aWVudGx5IGFsbG9jYXRlcyBibG9ja3Mgb2Ygc2l6ZSBibG9ja1NpemUgd2l0aCBibG9ja1NpemUg
YWxpZ25tZW50LiAKLSAqIFByaW1hcmx5IGRlc2lnbmVkIGZvciBKU0MgQ29sbGVjdG9yJ3MgbmVl
ZHMuIAotICogTm90IHRocmVhZC1zYWZlLiAgICAKLSAqLwotQWxpZ25lZEJsb2NrQWxsb2NhdG9y
OjpBbGlnbmVkQmxvY2tBbGxvY2F0b3IoVFVpbnQzMiByZXNlcnZhdGlvblNpemUsIFRVaW50MzIg
YmxvY2tTaXplICkKLSAgICA6IG1fcmVzZXJ2YXRpb24ocmVzZXJ2YXRpb25TaXplKSwgCi0gICAg
ICBtX2Jsb2NrU2l6ZShibG9ja1NpemUpCi17Ci0KLSAgICAgLy8gR2V0IHN5c3RlbSdzIHBhZ2Ug
c2l6ZSB2YWx1ZS4KLSAgICAgU1lNQklBTl9QQUdFU0laRShtX3BhZ2VTaXplKTsgCi0gICAgIAot
ICAgICAvLyBXZSBvbmx5IGFjY2VwdCBtdWx0aXBsZXMgb2Ygc3lzdGVtIHBhZ2Ugc2l6ZSBmb3Ig
Ym90aCBpbml0aWFsIHJlc2VydmF0aW9uIGFuZCB0aGUgYWxpZ25tZW50L2Jsb2NrIHNpemUKLSAg
ICAgbV9yZXNlcnZhdGlvbiA9IFNZTUJJQU5fUk9VTkRVUFRPTVVMVElQTEUobV9yZXNlcnZhdGlv
biwgbV9wYWdlU2l6ZSk7Ci0gICAgIF9fQVNTRVJUX0FMV0FZUyhTWU1CSUFOX1JPVU5EVVBUT01V
TFRJUExFKG1fYmxvY2tTaXplLCBtX3BhZ2VTaXplKSwgVXNlcjo6UGFuaWMoX0woIkFsaWduZWRC
bG9ja0FsbG9jYXRvcjEiKSwgS0VyckFyZ3VtZW50KSk7Ci0gICAgIAotICAgICAvLyBDYWxjdWxh
dGUgbWF4LiBiaXQgZmxhZ3Mgd2UgbmVlZCB0byBjYXJ2ZSBhIHJlc2VydmF0aW9uU2l6ZSByYW5n
ZSBpbnRvIGJsb2NrU2l6ZS1zaXplZCBibG9ja3MKLSAgICAgbV9tYXAubnVtQml0cyA9IG1fcmVz
ZXJ2YXRpb24gLyBtX2Jsb2NrU2l6ZTsgICAKLSAgICAgY29uc3QgVFVpbnQzMiBiaXRzUGVyV29y
ZCA9IDgqc2l6ZW9mKFRVaW50MzIpOyAKLSAgICAgY29uc3QgVFVpbnQzMiBudW1Xb3JkcyA9ICht
X21hcC5udW1CaXRzICsgYml0c1BlcldvcmQgLTEpIC8gYml0c1BlcldvcmQ7IAotICAgCi0gICAg
IG1fbWFwLmJpdHMgPSBuZXcgVFVpbnQzMltudW1Xb3Jkc107Ci0gICAgIF9fQVNTRVJUX0FMV0FZ
UyhtX21hcC5iaXRzLCBVc2VyOjpQYW5pYyhfTCgiQWxpZ25lZEJsb2NrQWxsb2NhdG9yMiIpLCBL
RXJyTm9NZW1vcnkpKTsKLSAgICAgbV9tYXAuY2xlYXJBbGwoKTsKLSAgICAgCi0gICAgIC8vIE9w
ZW4gYSBTeW1iaWFuIFJDaHVuaywgYW5kIHJlc2VydmUgcmVxdWVzdGVkIHZpcnR1YWwgYWRkcmVz
cyByYW5nZSAgIAotICAgICAvLyBBbnkgdGhyZWFkIGluIHRoaXMgcHJvY2VzcyBjYW4gb3BlcmF0
ZSB0aGlzIHJjaHVuayBkdWUgdG8gRU93bmVyUHJvY2VzcyBhY2Nlc3MgcmlnaHRzLiAKLSAgICAg
VEludCByZXQgPSBtX2NodW5rLkNyZWF0ZURpc2Nvbm5lY3RlZExvY2FsKDAgLCAwLCAoVEludClt
X3Jlc2VydmF0aW9uICwgRU93bmVyUHJvY2Vzcyk7ICAKLSAgICAgaWYgKHJldCAhPSBLRXJyTm9u
ZSkgCi0gICAgICAgICBVc2VyOjpQYW5pYyhfTCgiQWxpZ25lZEJsb2NrQWxsb2NhdG9yMyIpLCBy
ZXQpOwotICAgICAgIAotICAgICAvLyBUaGlzIGlzIHRoZSBvZmZzZXQgdG8gbV9jaHVuay5CYXNl
KCkgcmVxdWlyZWQgdG8gbWFrZSBpdCBtX2Jsb2NrU2l6ZS1hbGlnbmVkCi0gICAgIG1fb2Zmc2V0
ID0gU1lNQklBTl9ST1VORFVQVE9NVUxUSVBMRShUVWludDMyKG1fY2h1bmsuQmFzZSgpKSwgbV9i
bG9ja1NpemUpIC0gVFVpbnQobV9jaHVuay5CYXNlKCkpOyAKLQotfQotCi12b2lkKiBBbGlnbmVk
QmxvY2tBbGxvY2F0b3I6OmFsbG9jKCkKLXsKLQotICAgIFRJbnQgIGZyZWVSYW0gPSAwOyAKLSAg
ICB2b2lkKiBhZGRyZXNzID0gMDsKLSAgICAKLSAgICAvLyBMb29rIHVwIGZpcnN0IGZyZWUgc2xv
dCBpbiBiaXQgbWFwCi0gICAgY29uc3QgVEludCBmcmVlSWR4ID0gbV9tYXAuZmluZEZyZWUoKTsK
LSAgICAgICAgCi0gICAgLy8gUHNldWRvIE9PTTogV2UgYXRlIHVwIHRoZSBhZGRyZXNzIHNwYWNl
IHdlIHJlc2VydmVkLi4KLSAgICAvLyAuLmV2ZW4gdGhvdWdoIHRoZSBkZXZpY2UgbWF5IGhhdmUg
ZnJlZSBSQU0gbGVmdAotICAgIGlmIChmcmVlSWR4IDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIAotICAgIFRJbnQgcmV0ID0gbV9jaHVuay5Db21taXQobV9vZmZzZXQgKyAobV9ibG9j
a1NpemUgKiBmcmVlSWR4KSwgbV9ibG9ja1NpemUpOwotICAgIGlmIChyZXQgIT0gS0Vyck5vbmUp
ICAKLSAgICAgICAgcmV0dXJuIDA7IC8vIFRydWUgT09NOiBEZXZpY2UgZGlkbid0IGhhdmUgcGh5
c2ljYWwgUkFNIHRvIHNwYXJlCi0gICAgICAgIAotICAgIC8vIFVwZGF0ZWQgYml0IHRvIG1hcmsg
cmVnaW9uIGFzIGluIHVzZS4gCi0gICAgbV9tYXAuc2V0KGZyZWVJZHgpOyAKLSAgICAKLSAgICAv
LyBDYWxjdWxhdGUgYWRkcmVzcyBvZiBjb21taXR0ZWQgcmVnaW9uIChibG9jaykKLSAgICBhZGRy
ZXNzID0gKHZvaWQqKSggKG1fY2h1bmsuQmFzZSgpICsgbV9vZmZzZXQpICsgKFRVaW50KShtX2Js
b2NrU2l6ZSAqIGZyZWVJZHgpICk7Ci0gICAgCi0gICAgcmV0dXJuIGFkZHJlc3M7Ci19Ci0KLXZv
aWQgQWxpZ25lZEJsb2NrQWxsb2NhdG9yOjpmcmVlKHZvaWQqIGJsb2NrKQotewotICAgIC8vIENh
bGN1bGF0ZSBpbmRleCBvZiBibG9jayB0byBiZSBmcmVlZAotICAgIFRJbnQgaWR4ID0gVFVpbnQo
c3RhdGljX2Nhc3Q8VFVpbnQ4Kj4oYmxvY2spIC0gbV9jaHVuay5CYXNlKCkgLSBtX29mZnNldCkg
LyBtX2Jsb2NrU2l6ZTsKLSAgICAKLSAgICBfX0FTU0VSVF9ERUJVRyhpZHggPj0gMCAmJiBpZHgg
PCBtX21hcC5udW1CaXRzLCBVc2VyOjpQYW5pYyhfTCgiQWxpZ25lZEJsb2NrQWxsb2NhdG9yNCIp
LCBLRXJyQ29ycnVwdCkpOyAvLyB2YWxpZCBpbmRleCBjaGVjawotICAgIF9fQVNTRVJUX0RFQlVH
KG1fbWFwLmdldChpZHgpLCBVc2VyOjpQYW5pYyhfTCgiQWxpZ25lZEJsb2NrQWxsb2NhdG9yNSIp
LCBLRXJyQ29ycnVwdCkpOyAvLyBpbi11c2UgZmxhZyBjaGVjayAgICAKLSAgICAKLSAgICAvLyBS
ZXR1cm4gY29tbWl0dGVkIHJlZ2lvbiB0byBzeXN0ZW0gUkFNIHBvb2wgKHRoZSBwaHlzaWNhbCBS
QU0gYmVjb21lcyB1c2FibGUgYnkgb3RoZXJzKQotICAgIFRJbnQgcmV0ID0gbV9jaHVuay5EZWNv
bW1pdChtX29mZnNldCArIG1fYmxvY2tTaXplICogaWR4LCBtX2Jsb2NrU2l6ZSk7Ci0gICAgICAg
ICAgICAKLSAgICAvLyBtYXJrIHRoaXMgYXZhaWxhYmxlIGFnYWluCi0gICAgbV9tYXAuY2xlYXIo
aWR4KTsgCi19Ci0KLXZvaWQgQWxpZ25lZEJsb2NrQWxsb2NhdG9yOjpkZXN0cm95KCkgCi17Ci0g
ICAgLy8gcmVsZWFzZSBldmVyeXRoaW5nIQotICAgIG1fY2h1bmsuRGVjb21taXQoMCwgbV9jaHVu
ay5NYXhTaXplKCkpOwotICAgIG1fbWFwLmNsZWFyQWxsKCk7Ci19Ci0KLUFsaWduZWRCbG9ja0Fs
bG9jYXRvcjo6fkFsaWduZWRCbG9ja0FsbG9jYXRvcigpCi17Ci0gICAgZGVzdHJveSgpOwotICAg
IG1fY2h1bmsuQ2xvc2UoKTsKLSAgICBkZWxldGUgW10gbV9tYXAuYml0czsKLX0KLQotfSAvLyBl
bmQgb2YgbmFtZXNwYWNlCi0KLSNlbmRpZiAvLyBTWU1CSUFOCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS93dGYvc3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5bWJpYW4uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS93dGYvc3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5bWJpYW4uaAkocmV2aXNpb24g
NjQ1ODkpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvc3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5bWJp
YW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIEJsb2NrQWxsb2NhdG9yU3ltYmlhbl9oCi0jZGVmaW5lIEJsb2NrQWxsb2NhdG9yU3lt
Ymlhbl9oCi0KLSNpbmNsdWRlIDxlMzJjbW4uaD4KLSNpbmNsdWRlIDxlMzJzdGQuaD4KLSNpbmNs
dWRlIDxoYWwuaD4KLQotCi0jZGVmaW5lIFNZTUJJQU5fUEFHRVNJWkUoeCkgKEhBTDo6R2V0KEhB
TERhdGE6OkVNZW1vcnlQYWdlU2l6ZSwgeCkpOwotI2RlZmluZSBTWU1CSUFOX0ZSRUVSQU0oeCkg
IChIQUw6OkdldChIQUxEYXRhOjpFTWVtb3J5UkFNRnJlZSwgeCkpOwotI2RlZmluZSBTWU1CSUFO
X1JPVU5EVVBUT01VTFRJUExFKHgsIG11bHRpcGxlb2YpICAgICggKHggKyBtdWx0aXBsZW9mIC0g
MSkgJiB+KG11bHRpcGxlb2YgLSAxKSApCi0KLS8vIFNldCBzYW5lIGRlZmF1bHRzIGlmIC1EPGZs
YWduYW1lPXZhbHVlPiB3YXNuJ3QgcHJvdmlkZWQgdmlhIGNvbXBpbGVyIGFyZ3MKLSNpZm5kZWYg
SlNDQ09MTEVDVE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT04KLSNpZiBkZWZpbmVkKF9fV0lOU19f
KSAKLSAgICAvLyBFbXVsYXRvciBoYXMgbGltaXRlZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UKLSAg
ICAjZGVmaW5lIEpTQ0NPTExFQ1RPUl9WSVJUVUFMTUVNX1JFU0VSVkFUSU9OICg0KjEwMjQqMTAy
NCkKLSNlbHNlCi0gICAgLy8gSFcgaGFzIHBsZW50eSBvZiB2aXJ0dWFsIGFkZHJlc3NlcwotICAg
ICNkZWZpbmUgSlNDQ09MTEVDVE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT04gKDEyOCoxMDI0KjEw
MjQpCi0jZW5kaWYKLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotLyoqIAotICogIEFsbG9j
YXRlcyBjb250aWd1b3VzIHJlZ2lvbiBvZiBzaXplIGJsb2NrU2l6ZSB3aXRoIGJsb2NrU2l6ZS1h
bGlnbmVkIGFkZHJlc3MuIAotICogIGJsb2NrU2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2Ygc3lz
dGVtIHBhZ2Ugc2l6ZSAodHlwaWNhbGx5IDRLIG9uIFN5bWJpYW4vQVJNKQotICoKLSAqICBAcGFy
YW0gcmVzZXJ2YXRpb25TaXplIFZpcnR1YWwgYWRkcmVzcyByYW5nZSB0byBiZSByZXNlcnZlZCB1
cG9uIGNyZWF0aW9uIG9mIGNodW5rIChieXRlcykuCi0gKiAgQHBhcmFtIGJsb2NrU2l6ZSBTaXpl
IG9mIGEgc2luZ2xlIGFsbG9jYXRpb24uIFJldHVybmVkIGFkZHJlc3Mgd2lsbCBhbHNvIGJlIGJs
b2NrU2l6ZS1hbGlnbmVkLgotICovCi1jbGFzcyBBbGlnbmVkQmxvY2tBbGxvY2F0b3IgewotICAg
IHB1YmxpYzoKLSAgICAgICAgQWxpZ25lZEJsb2NrQWxsb2NhdG9yKFRVaW50MzIgcmVzZXJ2YXRp
b25TaXplLCBUVWludDMyIGJsb2NrU2l6ZSk7Ci0gICAgICAgIH5BbGlnbmVkQmxvY2tBbGxvY2F0
b3IoKTsKLSAgICAgICAgdm9pZCBkZXN0cm95KCk7Ci0gICAgICAgIHZvaWQqIGFsbG9jKCk7Ci0g
ICAgICAgIHZvaWQgZnJlZSh2b2lkKiBkYXRhKTsKLSAgICAKLSAgICBwcml2YXRlOiAKLSAgICAg
ICAgUkNodW5rICAgbV9jaHVuazsgLy8gU3ltYmlhbiBjaHVuayB0aGF0IGxldHMgdXMgcmVzZXJ2
ZS9jb21taXQvZGVjb21taXQKLSAgICAgICAgVFVpbnQgICAgbV9vZmZzZXQ7IC8vIG9mZnNldCBv
ZiBmaXJzdCBjb21taXR0ZWQgcmVnaW9uIGZyb20gYmFzZSAKLSAgICAgICAgVEludCAgICAgbV9w
YWdlU2l6ZTsgLy8gY2FjaGVkIHZhbHVlIG9mIHN5c3RlbSBwYWdlIHNpemUsIHR5cGljYWxseSA0
SyBvbiBTeW1iaWFuCi0gICAgICAgIFRVaW50MzIgIG1fcmVzZXJ2YXRpb247Ci0gICAgICAgIFRV
aW50MzIgIG1fYmxvY2tTaXplOyAgCi0KLSAgICAgICAgLy8gVHJhY2tzIGNvbWl0dGVkL2RlY29t
bWl0dGVkIHN0YXRlIG9mIGEgYmxvY2tTaXplIHJlZ2lvbgotICAgICAgICBzdHJ1Y3QgewotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBUVWludDMyICpiaXRzOyAvLyBhcnJheSBvZiBiaXQgZmxh
Z3MgCi0gICAgICAgICAgICBUVWludDMyICBudW1CaXRzOyAvLyBudW1iZXIgb2YgcmVnaW9ucyB0
byBrZWVwIHRyYWNrIG9mCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJvb2wgZ2V0KFRVaW50
MzIgbikgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gISEoYml0
c1tuID4+IDVdICYgKDEgPDwgKG4gJiAweDFGKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICB2b2lkIHNldChUVWludDMyIG4pCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgYml0c1tuID4+IDVdIHw9ICgxIDw8IChuICYgMHgxRikpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICB2b2lkIGNsZWFyKFRVaW50MzIgbikKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBiaXRzW24gPj4gNV0gJj0gfigxIDw8IChuICYg
MHgxRikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICB2b2lkIGNs
ZWFyQWxsKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGZvciAoVFVpbnQzMiBpID0g
MDsgaSA8IG51bUJpdHM7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgY2xlYXIoaSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFRJbnQgZmluZEZyZWUoKSBjb25z
dAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoVFVpbnQzMiBpID0gMDsgaSA8
IG51bUJpdHM7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWdldChpKSkgCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
IH0gbV9tYXA7ICAKLQotfTsKLSAKLX0KLQotI2VuZGlmIC8vIGVuZCBvZiBCbG9ja0FsbG9jYXRv
clN5bWJpYW5faAotCi0KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0
Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVy
cy93dGYvQml0bWFwLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5n
SGVhZGVycy93dGYvQml0bWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9CaXRtYXAuaD4KSW5kZXg6IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvd3RmL0JpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
d3RmL0JpdG1hcC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93
dGYvQml0bWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3Jl
X0ZXRF9CaXRtYXBfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9CaXRtYXBfaAorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0JpdG1hcC5oPgorI2VuZGlmCg==
</data>
<flag name="review"
          id="51724"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63387</attachid>
            <date>2010-08-03 15:44:50 -0700</date>
            <delta_ts>2010-08-03 18:22:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>heap-pageAlloc.patch</filename>
            <type>text/plain</type>
            <size>48877</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0NTk1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTAtMDgtMDMgIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQzMjY5CisKKyAgICAgICAgQWRkZWQgbmV3IGFsbG9jYXRlQWxpZ25lZCBtZXRob2Rz
IHRvIFBhZ2VBbGxvY2F0aW9uLiAgSW4gb3JkZXIgdG8KKyAgICAgICAgcHJldmVudCBhIHJlZ3Jl
c3MgaW4gcGVyZm9ybWFuY2UsIHRoZSBmdW5jdGlvbiBuZWVkcyB0byBiZSBpbmxpbmVkLgorCisg
ICAgICAgIEFkZGl0aW9uYWxseSwgSSBwb3J0ZWQgdGhlIHN5bWJpYW4gYmxvY2sgYWxsb2NhdG9y
IHRvIHVzZQorICAgICAgICBQYWdlQWxsb2NhdGlvbiBhbmQgYWRkZWQgYSBuZXcgV1RGOjpCaXRt
YXAgY2xhc3MgdG8gc3VwcG9ydCB0aGlzLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUuZ3lwaToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJ1bnRpbWUvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QWxpZ25lZE1lbW9yeTo6ZGVhbGxv
Y2F0ZSk6CisgICAgICAgIChKU0M6OkFsaWduZWRNZW1vcnk6OmJhc2UpOgorICAgICAgICAoSlND
OjpBbGlnbmVkTWVtb3J5OjpBbGlnbmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6QWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6On5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6QWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjo6ZnJlZSk6CisgICAgICAgICogcnVudGltZS9Db2xsZWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVzdHJveSk6
CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlQmxvY2spOgorICAgICAgICAoSlNDOjpIZWFw
OjpmcmVlQmxvY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpmcmVlQmxvY2tzKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpzaHJpbmtCbG9ja3Mp
OgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrQ29uc2VydmF0aXZlbHkpOgorICAgICAgICAoSlND
OjpIZWFwOjpjbGVhck1hcmtCaXRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya2VkQ2VsbHMp
OgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmg6CisgICAgICAgIChKU0M6OkNvbGxlY3Rv
ckhlYXA6OmNvbGxlY3RvckJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NvbGxlY3RvckhlYXBJ
dGVyYXRvci5oOgorICAgICAgICAoSlNDOjpDb2xsZWN0b3JIZWFwSXRlcmF0b3I6Om9wZXJhdG9y
Kik6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAg
ICAgIChKU0M6OkRlYWRPYmplY3RJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgICogd3Rm
L0JpdG1hcC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Qml0bWFwOjpnZXQpOgorICAgICAgICAo
V1RGOjpCaXRtYXA6OnNldCk6CisgICAgICAgIChXVEY6OkJpdG1hcDo6Y2xlYXIpOgorICAgICAg
ICAoV1RGOjpCaXRtYXA6OmNsZWFyQWxsKToKKyAgICAgICAgKFdURjo6Qml0bWFwOjphZHZhbmNl
VG9OZXh0RnJlZUJpdCk6CisgICAgICAgIChXVEY6OkJpdG1hcDo6Y291bnQpOgorICAgICAgICAo
V1RGOjpCaXRtYXA6OmlzRW1wdHkpOgorICAgICAgICAoV1RGOjpCaXRtYXA6OmlzRnVsbCk6Cisg
ICAgICAgICogd3RmL1BhZ2VBbGxvY2F0aW9uLmg6CisgICAgICAgIChXVEY6OlBhZ2VBbGxvY2F0
aW9uOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKToKKyAgICAgICAgKFdURjo6UGFnZUFs
bG9jYXRpb246OmFsbG9jYXRlQWxpZ25lZCk6CisgICAgICAgIChXVEY6OlBhZ2VBbGxvY2F0aW9u
OjpyZXNlcnZlQWxpZ25lZCk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisgICAgICAgICog
d3RmL3N5bWJpYW46IFJlbW92ZWQuCisgICAgICAgICogd3RmL3N5bWJpYW4vQmxvY2tBbGxvY2F0
b3JTeW1iaWFuLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvc3ltYmlhbi9CbG9ja0FsbG9j
YXRvclN5bWJpYW4uaDogUmVtb3ZlZC4KKwogMjAxMC0wOC0wMyAgQWxleCBNaWxvd3NraSAgPGFs
ZXhAbWlsb3dza2kuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEJldGggRGFraW4uCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjQ1OTUpCisrKyBKYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjEyLDYgKzIxMiw3IEBAIGphdmFzY3Jp
cHRjb3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2Rl
LmggXAogCUphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcCBcCiAJSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuaCBcCisJSmF2YVNjcmlwdENvcmUvcnVudGltZS9BbGln
bmVkTWVtb3J5QWxsb2NhdG9yLmggXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5j
cHAgXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oIFwKIAlKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAgXApAQCAtNDExLDYgKzQxMiw3IEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9Bc3NlcnRpb25zLmggXAogCUph
dmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9BVkxUcmVl
LmggXAorCUphdmFTY3JpcHRDb3JlL3d0Zi9CaXRtYXAuaCBcCiAJSmF2YVNjcmlwdENvcmUvd3Rm
L0J1bXBQb2ludGVyQWxsb2NhdG9yLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9CeXRlQXJyYXku
Y3BwIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvQnl0ZUFycmF5LmggXApJbmRleDogSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiA2NDU5NSkKKysrIEphdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2ICsxNjQsNyBAQAogICAg
ICAgICAgICAgJ3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcCcsCiAgICAgICAgICAgICAncHJvZmlsZXIv
UHJvZmlsZXIuaCcsCiAgICAgICAgICAgICAncHJvZmlsZXIvUHJvZmlsZXJTZXJ2ZXIuaCcsCisg
ICAgICAgICAgICAncnVudGltZS9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgnLAogICAgICAgICAg
ICAgJ3J1bnRpbWUvQXJnTGlzdC5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvQXJnTGlzdC5o
JywKICAgICAgICAgICAgICdydW50aW1lL0FyZ3VtZW50cy5jcHAnLApAQCAtMzUwLDYgKzM1MSw3
IEBACiAgICAgICAgICAgICAnd3RmL0Fzc2VydGlvbnMuaCcsCiAgICAgICAgICAgICAnd3RmL0F0
b21pY3MuaCcsCiAgICAgICAgICAgICAnd3RmL0FWTFRyZWUuaCcsCisgICAgICAgICAgICAnd3Rm
L0JpdG1hcC5oJywKICAgICAgICAgICAgICd3dGYvQnl0ZUFycmF5LmNwcCcsCiAgICAgICAgICAg
ICAnd3RmL0J5dGVBcnJheS5oJywKICAgICAgICAgICAgICd3dGYvY2hyb21pdW0vQ2hyb21pdW1U
aHJlYWRpbmcuaCcsCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA2
NDU5NSkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwkod29ya2luZyBjb3B5
KQpAQCAtMjE2LDcgKzIxNiw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHd0Zi9QYWdlQWxsb2NhdGlv
bi5jcHAgXAogICAgIHd0Zi9SYW5kb21OdW1iZXIuY3BwIFwKICAgICB3dGYvUmVmQ291bnRlZExl
YWtDb3VudGVyLmNwcCBcCi0gICAgd3RmL3N5bWJpYW4vQmxvY2tBbGxvY2F0b3JTeW1iaWFuLmNw
cCBcCiAgICAgd3RmL1RocmVhZGluZ05vbmUuY3BwIFwKICAgICB3dGYvVGhyZWFkaW5nLmNwcCBc
CiAgICAgd3RmL1R5cGVUcmFpdHMuY3BwIFwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
NjQ1OTUpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MDgsNiArNTA4LDkgQEAKIAkJQkNGRDhDOTIw
RUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MDBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRh
YmxlLmNwcCAqLzsgfTsKIAkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGRDhDOTEw
RUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oICovOyB9OwogCQlDMEEyNzI2MzBFNTBBMDYz
MDBFOTZFMTUgLyogTm90Rm91bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEMwQTI3MjNGMEU1MDlGMUUwMEU5NkUxNSAvKiBOb3RGb3VuZC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUREMjcyNDY4MTIw
OEQxRkYwMEY5QUJFNyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERDI3MjQ2NzEyMDhEMUZGMDBGOUFCRTcg
LyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovOyB9OworCQlERDI3MjQ2OTEyMDhEMUZGMDBG
OUFCRTcgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREQyNzI0NjcxMjA4RDFGRjAwRjlBQkU3IC8qIEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlERDM3N0NCQzEyMDcyQzE4MDA2QTI1MTcgLyogQml0bWFwLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERDM3N0NCQjEyMDcyQzE4
MDA2QTI1MTcgLyogQml0bWFwLmggKi87IH07CiAJCURERjdBQkQ0MTFGNjBFRDIwMDEwOEUzNiAv
KiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IERERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJh
Y2suaCAqLzsgfTsKIAkJRERGN0FCRDUxMUY2MEVEMjAwMTA4RTM2IC8qIEdDQWN0aXZpdHlDYWxs
YmFja0NGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IERERjdBQkQzMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2tDRi5jcHAgKi87
IH07CiAJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjUwRTU1NTc3
NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwNTEsNiArMTA1NCw4IEBACiAJCUMwQTI3MjNGMEU1
MDlGMUUwMEU5NkUxNSAvKiBOb3RGb3VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBOb3RGb3VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyODBB
RDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERDI3MjQ2NzEyMDhEMUZGMDBGOUFCRTcgLyogQWxp
Z25lZE1lbW9yeUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURE
Mzc3Q0JCMTIwNzJDMTgwMDZBMjUxNyAvKiBCaXRtYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQml0bWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURERjdB
QkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR0NBY3Rpdml0eUNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCURERjdBQkQzMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2Fs
bGJhY2tDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0FjdGl2
aXR5Q2FsbGJhY2tDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMUQ1MTc1
MEIyRTc5OEQwMDU2QzE4OCAvKiBTdHJpbmdFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RyaW5nRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNDEwLDYgKzE0MTUsNyBAQAogCQkJCTY1RTIxN0I3MDhFN0VFQ0MwMDIzRTVGNiAvKiBBc3Nl
cnRpb25zLmggKi8sCiAJCQkJQkM1RjdCQkIxMTgyM0I1OTAwNTJDMDJDIC8qIEF0b21pY3MuaCAq
LywKIAkJCQlFMUE1OTYzNzBERTNFMUMzMDBDMTdFMzcgLyogQVZMVHJlZS5oICovLAorCQkJCURE
Mzc3Q0JCMTIwNzJDMTgwMDZBMjUxNyAvKiBCaXRtYXAuaCAqLywKIAkJCQk4NjY3NkQ0RDExRkVE
NTVEMDA0QjY4NjMgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQlBN0ExRjdBQTBG
MjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmNwcCAqLywKIAkJCQlBN0ExRjdBQjBGMjUyQjND
MDBFMTg0RTIgLyogQnl0ZUFycmF5LmggKi8sCkBAIC0xNTU5LDYgKzE1NjUsNyBAQAogCQk3RUY2
RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJREQyNzI0NjcxMjA4RDFGRjAwRjlBQkU3IC8qIEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQlEREY3QUJEMjExRjYwRUQyMDAxMDhFMzYgLyog
R0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJCQkJRERGN0FCRDMxMUY2MEVEMjAwMTA4RTM2IC8q
IEdDQWN0aXZpdHlDYWxsYmFja0NGLmNwcCAqLywKIAkJCQlCQ0Y2MDUxMTBFMjAzRUY4MDBCOUE2
NEQgLyogQXJnTGlzdC5jcHAgKi8sCkBAIC0xOTAxLDYgKzE5MDgsNyBAQAogCQkJCTE0NDAwNzU3
MEE1MzcwRDIwMDA1RjA2MSAvKiBKU05vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQw
MDVDQzBBNTMzOEY4MDAwNUYwNjEgLyogTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MDA3
NEEwQTUzNkNDMjAwMDVGMDYxIC8qIE5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlERDI3
MjQ2ODEyMDhEMUZGMDBGOUFCRTcgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0yMTk5LDcgKzIyMDcsOSBAQAogCQkJCTg2OEJGQTE4MTE3Q0YxOTkwMEI5MDhC
MSAvKiBXVEZTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDA4RDU0MTE3OTM2MTMwMDZF
NUVEMCAvKiBXVEZUaHJlYWREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Njg4Q0IxNjBFRDEy
QjRFMDAxRDY0OUYgLyogWDg2QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlERDM3N0NC
QzEyMDcyQzE4MDA2QTI1MTcgLyogQml0bWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlEREY3QUJE
NDExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywK
KwkJCQlERDI3MjQ2OTEyMDhEMUZGMDBGOUFCRTcgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0yMjkzLDcgKzIzMDMsNiBAQAogCQkJaXNhID0gUEJYUHJvamVj
dDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjc3MTA4OTAyQUZFMDA4QTlFRkMg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJKYXZhU2NyaXB0Q29y
ZSIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxv
cG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJ
CQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8K
KworI2lmbmRlZiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yX2gKKyNkZWZpbmUgQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcl9oCisKKyNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bh
Z2VBbGxvY2F0aW9uLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQWxpZ25lZE1lbW9y
eUFsbG9jYXRvckNvbnN0YW50cyB7CisvLyBTZXQgc2FuZSBkZWZhdWx0cyBpZiAtRDxmbGFnbmFt
ZT12YWx1ZT4gd2Fzbid0IHByb3ZpZGVkIHZpYSBjb21waWxlciBhcmdzCisjaWYgZGVmaW5lZChK
U0NDT0xMRUNUT1JfVklSVFVBTE1FTV9SRVNFUlZBVElPTikKKyAgICAvLyBLZWVwIGJhY2t3YXJk
cyBjb21wYXRpYmlsaXR5IHdpdGggc3ltYmlhbiBidWlsZCBzeXN0ZW0KKyAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IHZpcnR1YWxNZW1vcnlSZXNlcnZhdGlvbiA9IEpTQ0NPTExFQ1RPUl9WSVJUVUFM
TUVNX1JFU0VSVkFUSU9OOworI2VsaWYgZGVmaW5lZChfX1dJTlNfXykKKyAgICAvLyBFbXVsYXRv
ciBoYXMgbGltaXRlZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IHZpcnR1YWxNZW1vcnlSZXNlcnZhdGlvbiA9IDB4NDAwMDAwOworI2Vsc2UKKyAgICAvLyBI
VyBoYXMgcGxlbnR5IG9mIHZpcnR1YWwgYWRkcmVzc2VzCisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCB2aXJ0dWFsTWVtb3J5UmVzZXJ2YXRpb24gPSAweDgwMDAwMDA7CisjZW5kaWYKK307CisKK3Rl
bXBsYXRlPHNpemVfdCBibG9ja1NpemU+IGNsYXNzIEFsaWduZWRNZW1vcnk7Cit0ZW1wbGF0ZTxz
aXplX3QgYmxvY2tTaXplPiBjbGFzcyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOworCisjaWYgSEFW
RShBTElHTkVEX0FMTE9DQVRFKQorCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPgorY2xhc3Mg
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2Ns
YXNzIEFsaWduZWRNZW1vcnkgeworcHVibGljOgorICAgIHZvaWQgZGVhbGxvY2F0ZSgpOworICAg
IHZvaWQqIGJhc2UoKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcjxibG9ja1NpemU+OworCisgICAgQWxpZ25lZE1lbW9yeShQYWdlQWxsb2NhdGlv
bik7CisKKyAgICBQYWdlQWxsb2NhdGlvbiBtX2FsbG9jYXRpb247Cit9OworCit0ZW1wbGF0ZTxz
aXplX3QgYmxvY2tTaXplPgorY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7CitwdWJsaWM6
CisgICAgdm9pZCBkZXN0cm95KCk7CisgICAgQWxpZ25lZE1lbW9yeTxibG9ja1NpemU+IGFsbG9j
YXRlKCk7Cit9OworCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPgoraW5saW5lIHZvaWQgQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjxibG9ja1NpemU+OjpkZXN0cm95KCkKK3sKK30KKwordGVtcGxh
dGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2lubGluZSBBbGlnbmVkTWVtb3J5PGJsb2NrU2l6ZT4gQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjxibG9ja1NpemU+OjphbGxvY2F0ZSgpCit7CisgICAgcmV0dXJu
IEFsaWduZWRNZW1vcnk8YmxvY2tTaXplPihQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVk
KGJsb2NrU2l6ZSkpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPgoraW5saW5lIHZv
aWQgQWxpZ25lZE1lbW9yeTxibG9ja1NpemU+OjpkZWFsbG9jYXRlKCkKK3sKKyAgICBtX2FsbG9j
YXRpb24uZGVhbGxvY2F0ZSgpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPgoraW5s
aW5lIHZvaWQqIEFsaWduZWRNZW1vcnk8YmxvY2tTaXplPjo6YmFzZSgpCit7CisgICAgcmV0dXJu
IG1fYWxsb2NhdGlvbi5iYXNlKCk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+Citp
bmxpbmUgQWxpZ25lZE1lbW9yeTxibG9ja1NpemU+OjpBbGlnbmVkTWVtb3J5KFBhZ2VBbGxvY2F0
aW9uIGFsbG9jYXRpb24pCisgICAgOiBtX2FsbG9jYXRpb24oYWxsb2NhdGlvbikKK3sKK30KKwor
I2Vsc2UKKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2NsYXNzIEFsaWduZWRNZW1vcnkg
eworcHVibGljOgorICAgIHZvaWQgZGVhbGxvY2F0ZSgpOworICAgIHZvaWQqIGJhc2UoKTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjxibG9ja1Np
emU+OworCisgICAgQWxpZ25lZE1lbW9yeSh2b2lkKiBiYXNlLCBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yPGJsb2NrU2l6ZT4qIGFsbG9jYXRvcik7CisKKyAgICB2b2lkKiBtX2Jhc2U7CisgICAgQWxp
Z25lZE1lbW9yeUFsbG9jYXRvcjxibG9ja1NpemU+KiBtX2FsbG9jYXRvcjsKK307CisKK3RlbXBs
YXRlPHNpemVfdCBibG9ja1NpemU+CitjbGFzcyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsKK3B1
YmxpYzoKKyAgICBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCk7CisgICAgfkFsaWduZWRNZW1vcnlB
bGxvY2F0b3IoKTsKKworICAgIHZvaWQgZGVzdHJveSgpOworICAgIEFsaWduZWRNZW1vcnk8Ymxv
Y2tTaXplPiBhbGxvY2F0ZSgpOworICAgIHZvaWQgZnJlZShBbGlnbmVkTWVtb3J5PGJsb2NrU2l6
ZT4pOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcmVzZXJ2YXRpb25TaXpl
ID0gQWxpZ25lZE1lbW9yeUFsbG9jYXRvckNvbnN0YW50czo6dmlydHVhbE1lbW9yeVJlc2VydmF0
aW9uOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYml0bWFwU2l6ZSA9IHJlc2VydmF0aW9uU2l6
ZSAvIGJsb2NrU2l6ZTsKKworICAgIFBhZ2VBbGxvY2F0aW9uIG1fcmVzZXJ2YXRpb247CisgICAg
c2l6ZV90IG1fbmV4dEZyZWU7CisgICAgdWludHB0cl90IG1fcmVzZXJ2YXRpb25CYXNlOworICAg
IFdURjo6Qml0bWFwPGJpdG1hcFNpemU+IG1fYml0bWFwOworfTsKKwordGVtcGxhdGU8c2l6ZV90
IGJsb2NrU2l6ZT4KK0FsaWduZWRNZW1vcnlBbGxvY2F0b3I8YmxvY2tTaXplPjo6QWxpZ25lZE1l
bW9yeUFsbG9jYXRvcigpCisgICAgOiBtX3Jlc2VydmF0aW9uKFBhZ2VBbGxvY2F0aW9uOjpyZXNl
cnZlKHJlc2VydmF0aW9uU2l6ZSArIGJsb2NrU2l6ZSkpCisgICAgLCBtX25leHRGcmVlKDApCit7
CisgICAgLy8gY2hlY2sgdGhhdCBibG9ja1NpemUgYW5kIHJlc2VydmF0aW9uU2l6ZSBhcmUgcG93
ZXJzIG9mIHR3bworICAgIEFTU0VSVCghKGJsb2NrU2l6ZSAmIChibG9ja1NpemUgLSAxKSkpOwor
ICAgIEFTU0VSVCghKHJlc2VydmF0aW9uU2l6ZSAmIChyZXNlcnZhdGlvblNpemUgLSAxKSkpOwor
CisgICAgLy8gY2hlY2sgdGhhdCBibG9ja1NpemUgaXMgYSBtdWx0aXBsZSBvZiBwYWdlU2l6ZSBh
bmQgdGhhdAorICAgIC8vIHJlc2VydmF0aW9uU2l6ZSBpcyBhIG11bHRpcGxlIG9mIGJsb2NrU2l6
ZQorICAgIEFTU0VSVCghKGJsb2NrU2l6ZSAmIChQYWdlQWxsb2NhdGlvbjo6cGFnZXNpemUoKSAt
IDEpKSk7CisgICAgQVNTRVJUKCEocmVzZXJ2YXRpb25TaXplICYgKGJsb2NrU2l6ZSAtIDEpKSk7
CisKKyAgICBBU1NFUlQobV9yZXNlcnZhdGlvbik7CisKKyAgICBtX3Jlc2VydmF0aW9uQmFzZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7CisgICAg
bV9yZXNlcnZhdGlvbkJhc2UgPSAobV9yZXNlcnZhdGlvbkJhc2UgKyBibG9ja1NpemUpICYgfihi
bG9ja1NpemUgLSAxKTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK0FsaWduZWRN
ZW1vcnlBbGxvY2F0b3I8YmxvY2tTaXplPjo6fkFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKQorewor
ICAgIGRlc3Ryb3koKTsKKyAgICBtX3Jlc2VydmF0aW9uLmRlYWxsb2NhdGUoKTsKK30KKwordGVt
cGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2lubGluZSB2b2lkIEFsaWduZWRNZW1vcnlBbGxvY2F0
b3I8YmxvY2tTaXplPjo6ZGVzdHJveSgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJpdG1hcFNpemU7ICsraSkgeworICAgICAgICBpZiAobV9iaXRtYXAuZ2V0KGkpKSB7CisgICAg
ICAgICAgICB2b2lkKiBibG9ja0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihtX3Jl
c2VydmF0aW9uQmFzZSArIG1fbmV4dEZyZWUgKiBibG9ja1NpemUpOworICAgICAgICAgICAgbV9y
ZXNlcnZhdGlvbi5kZWNvbW1pdChibG9ja0FkZHJlc3MsIGJsb2NrU2l6ZSk7CisKKyAgICAgICAg
ICAgIG1fYml0bWFwLmNsZWFyKGkpOworICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZTxz
aXplX3QgYmxvY2tTaXplPgorQWxpZ25lZE1lbW9yeTxibG9ja1NpemU+IEFsaWduZWRNZW1vcnlB
bGxvY2F0b3I8YmxvY2tTaXplPjo6YWxsb2NhdGUoKQoreworICAgIHdoaWxlIChtX25leHRGcmVl
IDwgYml0bWFwU2l6ZSkgeworICAgICAgICBpZiAoIW1fYml0bWFwLmdldChtX25leHRGcmVlKSkg
eworICAgICAgICAgICAgdm9pZCogYmxvY2tBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4obV9yZXNlcnZhdGlvbkJhc2UgKyBtX25leHRGcmVlICogYmxvY2tTaXplKTsKKyAgICAgICAg
ICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KGJsb2NrQWRkcmVzcywgYmxvY2tTaXplKTsKKworICAg
ICAgICAgICAgbV9iaXRtYXAuc2V0KG1fbmV4dEZyZWUpOworICAgICAgICAgICAgKyttX25leHRG
cmVlOworCisgICAgICAgICAgICByZXR1cm4gQWxpZ25lZE1lbW9yeTxibG9ja1NpemU+KGJsb2Nr
QWRkcmVzcywgdGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgbV9iaXRtYXAuYWR2YW5jZVRvTmV4
dEZyZWVCaXQobV9uZXh0RnJlZSk7CisgICAgfQorCisgICAgaWYgKG1fYml0bWFwLmlzRnVsbCgp
KQorICAgICAgICByZXR1cm4gQWxpZ25lZE1lbW9yeTxibG9ja1NpemU+KDAsIHRoaXMpOworCisg
ICAgbV9uZXh0RnJlZSA9IDA7CisKKyAgICByZXR1cm4gYWxsb2NhdGUoKTsKK30KKwordGVtcGxh
dGU8c2l6ZV90IGJsb2NrU2l6ZT4KK3ZvaWQgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjxibG9ja1Np
emU+OjpmcmVlKEFsaWduZWRNZW1vcnk8YmxvY2tTaXplPiBhbGxvY2F0aW9uKQoreworICAgIEFT
U0VSVChhbGxvY2F0aW9uLmJhc2UoKSk7CisgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChhbGxv
Y2F0aW9uLmJhc2UoKSwgYmxvY2tTaXplKTsKKworICAgIHNpemVfdCBkaWZmID0gKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihhbGxvY2F0aW9uLmJhc2UoKSkgLSBtX3Jlc2VydmF0aW9uQmFz
ZSk7CisgICAgQVNTRVJUKCEoZGlmZiAmIChibG9ja1NpemUgLSAxKSkpOworCisgICAgc2l6ZV90
IGkgPSBkaWZmIC8gYmxvY2tTaXplOworICAgIEFTU0VSVChtX2JpdG1hcC5nZXQoaSkpOworCisg
ICAgbV9iaXRtYXAuY2xlYXIoaSk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+Citp
bmxpbmUgdm9pZCBBbGlnbmVkTWVtb3J5PGJsb2NrU2l6ZT46OmRlYWxsb2NhdGUoKQoreworICAg
IG1fYWxsb2NhdG9yLT5mcmVlKCp0aGlzKTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6
ZT4KK2lubGluZSB2b2lkKiBBbGlnbmVkTWVtb3J5PGJsb2NrU2l6ZT46OmJhc2UoKQoreworICAg
IHJldHVybiBtX2Jhc2U7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+CitBbGlnbmVk
TWVtb3J5PGJsb2NrU2l6ZT46OkFsaWduZWRNZW1vcnkodm9pZCogYmFzZSwgQWxpZ25lZE1lbW9y
eUFsbG9jYXRvcjxibG9ja1NpemU+KiBhbGxvY2F0b3IpCisgICAgOiBtX2Jhc2UoYmFzZSkKKyAg
ICAsIG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKK3sKK30KKworI2VuZGlmCisKK30KKworI2VuZGlm
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCShyZXZpc2lvbiA2NDU5NSkK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM2LDkgKzEzNiw2IEBAIEhlYXA6OkhlYXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQog
ICAgICwgbV9yZWdpc3RlcmVkVGhyZWFkcygwKQogICAgICwgbV9jdXJyZW50VGhyZWFkUmVnaXN0
cmFyKDApCiAjZW5kaWYKLSNpZiBPUyhTWU1CSUFOKQotICAgICwgbV9ibG9ja2FsbG9jYXRvcihK
U0NDT0xMRUNUT1JfVklSVFVBTE1FTV9SRVNFUlZBVElPTiwgQkxPQ0tfU0laRSkKLSNlbmRpZgog
ICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiB7CiAgICAgQVNTRVJUKGdsb2JhbERhdGEp
OwpAQCAtMTg2LDYzICsxODMsMTcgQEAgdm9pZCBIZWFwOjpkZXN0cm95KCkKICAgICAgICAgdCA9
IG5leHQ7CiAgICAgfQogI2VuZGlmCi0jaWYgT1MoU1lNQklBTikKICAgICBtX2Jsb2NrYWxsb2Nh
dG9yLmRlc3Ryb3koKTsKLSNlbmRpZgogICAgIG1fZ2xvYmFsRGF0YSA9IDA7CiB9CiAKIE5FVkVS
X0lOTElORSBDb2xsZWN0b3JCbG9jayogSGVhcDo6YWxsb2NhdGVCbG9jaygpCiB7Ci0jaWYgT1Mo
REFSV0lOKQotICAgIHZtX2FkZHJlc3NfdCBhZGRyZXNzID0gMDsKLSAgICB2bV9tYXAoY3VycmVu
dF90YXNrKCksICZhZGRyZXNzLCBCTE9DS19TSVpFLCBCTE9DS19PRkZTRVRfTUFTSywgVk1fRkxB
R1NfQU5ZV0hFUkUgfCBWTV9UQUdfRk9SX0NPTExFQ1RPUl9NRU1PUlksIE1FTU9SWV9PQkpFQ1Rf
TlVMTCwgMCwgRkFMU0UsIFZNX1BST1RfREVGQVVMVCwgVk1fUFJPVF9ERUZBVUxULCBWTV9JTkhF
UklUX0RFRkFVTFQpOwotI2VsaWYgT1MoU1lNQklBTikKLSAgICB2b2lkKiBhZGRyZXNzID0gbV9i
bG9ja2FsbG9jYXRvci5hbGxvYygpOyAgCi0gICAgaWYgKCFhZGRyZXNzKQotICAgICAgICBDUkFT
SCgpOwotI2VsaWYgT1MoV0lOQ0UpCi0gICAgdm9pZCogYWRkcmVzcyA9IFZpcnR1YWxBbGxvYyhO
VUxMLCBCTE9DS19TSVpFLCBNRU1fQ09NTUlUIHwgTUVNX1JFU0VSVkUsIFBBR0VfUkVBRFdSSVRF
KTsKLSNlbGlmIE9TKFdJTkRPV1MpCi0jaWYgQ09NUElMRVIoTUlOR1cpICYmICFDT01QSUxFUihN
SU5HVzY0KQotICAgIHZvaWQqIGFkZHJlc3MgPSBfX21pbmd3X2FsaWduZWRfbWFsbG9jKEJMT0NL
X1NJWkUsIEJMT0NLX1NJWkUpOwotI2Vsc2UKLSAgICB2b2lkKiBhZGRyZXNzID0gX2FsaWduZWRf
bWFsbG9jKEJMT0NLX1NJWkUsIEJMT0NLX1NJWkUpOwotI2VuZGlmCi0gICAgbWVtc2V0KGFkZHJl
c3MsIDAsIEJMT0NLX1NJWkUpOwotI2VsaWYgSEFWRShQT1NJWF9NRU1BTElHTikKLSAgICB2b2lk
KiBhZGRyZXNzOwotICAgIHBvc2l4X21lbWFsaWduKCZhZGRyZXNzLCBCTE9DS19TSVpFLCBCTE9D
S19TSVpFKTsKLSNlbHNlCi0KLSNpZiBFTkFCTEUoSlNDX01VTFRJUExFX1RIUkVBRFMpCi0jZXJy
b3IgTmVlZCB0byBpbml0aWFsaXplIHBhZ2VzaXplIHNhZmVseS4KLSNlbmRpZgotICAgIHN0YXRp
YyBzaXplX3QgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOwotCi0gICAgc2l6ZV90IGV4dHJhID0g
MDsKLSAgICBpZiAoQkxPQ0tfU0laRSA+IHBhZ2VzaXplKQotICAgICAgICBleHRyYSA9IEJMT0NL
X1NJWkUgLSBwYWdlc2l6ZTsKLQotICAgIHZvaWQqIG1tYXBSZXN1bHQgPSBtbWFwKE5VTEwsIEJM
T0NLX1NJWkUgKyBleHRyYSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBN
QVBfQU5PTiwgLTEsIDApOwotICAgIHVpbnRwdHJfdCBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KG1tYXBSZXN1bHQpOwotCi0gICAgc2l6ZV90IGFkanVzdCA9IDA7Ci0gICAg
aWYgKChhZGRyZXNzICYgQkxPQ0tfT0ZGU0VUX01BU0spICE9IDApCi0gICAgICAgIGFkanVzdCA9
IEJMT0NLX1NJWkUgLSAoYWRkcmVzcyAmIEJMT0NLX09GRlNFVF9NQVNLKTsKLQotICAgIGlmIChh
ZGp1c3QgPiAwKQotICAgICAgICBtdW5tYXAocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYWRkcmVz
cyksIGFkanVzdCk7Ci0KLSAgICBpZiAoYWRqdXN0IDwgZXh0cmEpCi0gICAgICAgIG11bm1hcChy
ZWludGVycHJldF9jYXN0PGNoYXIqPihhZGRyZXNzICsgYWRqdXN0ICsgQkxPQ0tfU0laRSksIGV4
dHJhIC0gYWRqdXN0KTsKLQotICAgIGFkZHJlc3MgKz0gYWRqdXN0OwotI2VuZGlmCisgICAgQWxp
Z25lZEJsb2NrIGFsbG9jYXRpb24gPSBtX2Jsb2NrYWxsb2NhdG9yLmFsbG9jYXRlKCk7CisgICAg
Q29sbGVjdG9yQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8Q29sbGVjdG9yQmxvY2sqPihhbGxv
Y2F0aW9uLmJhc2UoKSk7CiAKICAgICAvLyBJbml0aWFsaXplIGJsb2NrLgogCi0gICAgQ29sbGVj
dG9yQmxvY2sqIGJsb2NrID0gcmVpbnRlcnByZXRfY2FzdDxDb2xsZWN0b3JCbG9jayo+KGFkZHJl
c3MpOwogICAgIGJsb2NrLT5oZWFwID0gdGhpczsKICAgICBjbGVhck1hcmtCaXRzKGJsb2NrKTsK
IApAQCAtMjU0LDE0ICsyMDUsMTQgQEAgTkVWRVJfSU5MSU5FIENvbGxlY3RvckJsb2NrKiBIZWFw
OjphbGxvYwogCiAgICAgc2l6ZV90IG51bUJsb2NrcyA9IG1faGVhcC5udW1CbG9ja3M7CiAgICAg
aWYgKG1faGVhcC51c2VkQmxvY2tzID09IG51bUJsb2NrcykgewotICAgICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IG1heE51bUJsb2NrcyA9IFVMT05HX01BWCAvIHNpemVvZihDb2xsZWN0b3JCbG9j
ayopIC8gR1JPV1RIX0ZBQ1RPUjsKKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhOdW1C
bG9ja3MgPSBVTE9OR19NQVggLyBzaXplb2YoQWxpZ25lZEJsb2NrKSAvIEdST1dUSF9GQUNUT1I7
CiAgICAgICAgIGlmIChudW1CbG9ja3MgPiBtYXhOdW1CbG9ja3MpCiAgICAgICAgICAgICBDUkFT
SCgpOwogICAgICAgICBudW1CbG9ja3MgPSBtYXgoTUlOX0FSUkFZX1NJWkUsIG51bUJsb2NrcyAq
IEdST1dUSF9GQUNUT1IpOwogICAgICAgICBtX2hlYXAubnVtQmxvY2tzID0gbnVtQmxvY2tzOwot
ICAgICAgICBtX2hlYXAuYmxvY2tzID0gc3RhdGljX2Nhc3Q8Q29sbGVjdG9yQmxvY2sqKj4oZmFz
dFJlYWxsb2MobV9oZWFwLmJsb2NrcywgbnVtQmxvY2tzICogc2l6ZW9mKENvbGxlY3RvckJsb2Nr
KikpKTsKKyAgICAgICAgbV9oZWFwLmJsb2NrcyA9IHN0YXRpY19jYXN0PEFsaWduZWRCbG9jayo+
KGZhc3RSZWFsbG9jKG1faGVhcC5ibG9ja3MsIG51bUJsb2NrcyAqIHNpemVvZihBbGlnbmVkQmxv
Y2spKSk7CiAgICAgfQotICAgIG1faGVhcC5ibG9ja3NbbV9oZWFwLnVzZWRCbG9ja3MrK10gPSBi
bG9jazsKKyAgICBtX2hlYXAuYmxvY2tzW21faGVhcC51c2VkQmxvY2tzKytdID0gYWxsb2NhdGlv
bjsKIAogICAgIHJldHVybiBibG9jazsKIH0KQEAgLTI3NCw3ICsyMjUsNyBAQCBORVZFUl9JTkxJ
TkUgdm9pZCBIZWFwOjpmcmVlQmxvY2soc2l6ZV90CiAgICAgT2JqZWN0SXRlcmF0b3IgZW5kKG1f
aGVhcCwgYmxvY2sgKyAxKTsKICAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAg
KCppdCktPn5KU0NlbGwoKTsKLSAgICBmcmVlQmxvY2tQdHIobV9oZWFwLmJsb2Nrc1tibG9ja10p
OworICAgIG1faGVhcC5ibG9ja3NbYmxvY2tdLmRlYWxsb2NhdGUoKTsKIAogICAgIC8vIHN3YXAg
d2l0aCB0aGUgbGFzdCBibG9jayBzbyB3ZSBjb21wYWN0IGFzIHdlIGdvCiAgICAgbV9oZWFwLmJs
b2Nrc1tibG9ja10gPSBtX2hlYXAuYmxvY2tzW21faGVhcC51c2VkQmxvY2tzIC0gMV07CkBAIC0y
ODIsMzEgKzIzMywxMCBAQCBORVZFUl9JTkxJTkUgdm9pZCBIZWFwOjpmcmVlQmxvY2soc2l6ZV90
CiAKICAgICBpZiAobV9oZWFwLm51bUJsb2NrcyA+IE1JTl9BUlJBWV9TSVpFICYmIG1faGVhcC51
c2VkQmxvY2tzIDwgbV9oZWFwLm51bUJsb2NrcyAvIExPV19XQVRFUl9GQUNUT1IpIHsKICAgICAg
ICAgbV9oZWFwLm51bUJsb2NrcyA9IG1faGVhcC5udW1CbG9ja3MgLyBHUk9XVEhfRkFDVE9SOyAK
LSAgICAgICAgbV9oZWFwLmJsb2NrcyA9IHN0YXRpY19jYXN0PENvbGxlY3RvckJsb2NrKio+KGZh
c3RSZWFsbG9jKG1faGVhcC5ibG9ja3MsIG1faGVhcC5udW1CbG9ja3MgKiBzaXplb2YoQ29sbGVj
dG9yQmxvY2sqKSkpOworICAgICAgICBtX2hlYXAuYmxvY2tzID0gc3RhdGljX2Nhc3Q8QWxpZ25l
ZEJsb2NrKj4oZmFzdFJlYWxsb2MobV9oZWFwLmJsb2NrcywgbV9oZWFwLm51bUJsb2NrcyAqIHNp
emVvZihBbGlnbmVkQmxvY2spKSk7CiAgICAgfQogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBIZWFw
OjpmcmVlQmxvY2tQdHIoQ29sbGVjdG9yQmxvY2sqIGJsb2NrKQotewotI2lmIE9TKERBUldJTikg
ICAgCi0gICAgdm1fZGVhbGxvY2F0ZShjdXJyZW50X3Rhc2soKSwgcmVpbnRlcnByZXRfY2FzdDx2
bV9hZGRyZXNzX3Q+KGJsb2NrKSwgQkxPQ0tfU0laRSk7Ci0jZWxpZiBPUyhTWU1CSUFOKQotICAg
IG1fYmxvY2thbGxvY2F0b3IuZnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihibG9jaykpOwot
I2VsaWYgT1MoV0lOQ0UpCi0gICAgVmlydHVhbEZyZWUoYmxvY2ssIDAsIE1FTV9SRUxFQVNFKTsK
LSNlbGlmIE9TKFdJTkRPV1MpCi0jaWYgQ09NUElMRVIoTUlOR1cpICYmICFDT01QSUxFUihNSU5H
VzY0KQotICAgIF9fbWluZ3dfYWxpZ25lZF9mcmVlKGJsb2NrKTsKLSNlbHNlCi0gICAgX2FsaWdu
ZWRfZnJlZShibG9jayk7Ci0jZW5kaWYKLSNlbGlmIEhBVkUoUE9TSVhfTUVNQUxJR04pCi0gICAg
ZnJlZShibG9jayk7Ci0jZWxzZQotICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PGNoYXIqPihi
bG9jayksIEJMT0NLX1NJWkUpOwotI2VuZGlmCi19Ci0KIHZvaWQgSGVhcDo6ZnJlZUJsb2Nrcygp
CiB7CiAgICAgUHJvdGVjdENvdW50U2V0IHByb3RlY3RlZFZhbHVlc0NvcHkgPSBtX3Byb3RlY3Rl
ZFZhbHVlczsKQEAgLTMzMCw3ICsyNjAsNyBAQCB2b2lkIEhlYXA6OmZyZWVCbG9ja3MoKQogICAg
ICAgICBpdC0+Zmlyc3QtPn5KU0NlbGwoKTsKIAogICAgIGZvciAoc2l6ZV90IGJsb2NrID0gMDsg
YmxvY2sgPCBtX2hlYXAudXNlZEJsb2NrczsgKytibG9jaykKLSAgICAgICAgZnJlZUJsb2NrUHRy
KG1faGVhcC5ibG9ja3NbYmxvY2tdKTsKKyAgICAgICAgbV9oZWFwLmJsb2Nrc1tibG9ja10uZGVh
bGxvY2F0ZSgpOwogCiAgICAgZmFzdEZyZWUobV9oZWFwLmJsb2Nrcyk7CiAKQEAgLTM4Myw3ICsz
MTMsNyBAQCBhbGxvY2F0ZToKIAogICAgIGRvIHsKICAgICAgICAgQVNTRVJUKG1faGVhcC5uZXh0
QmxvY2sgPCBtX2hlYXAudXNlZEJsb2Nrcyk7Ci0gICAgICAgIEJsb2NrKiBibG9jayA9IHJlaW50
ZXJwcmV0X2Nhc3Q8QmxvY2sqPihtX2hlYXAuYmxvY2tzW21faGVhcC5uZXh0QmxvY2tdKTsKKyAg
ICAgICAgQmxvY2sqIGJsb2NrID0gbV9oZWFwLmNvbGxlY3RvckJsb2NrKG1faGVhcC5uZXh0Qmxv
Y2spOwogICAgICAgICBkbyB7CiAgICAgICAgICAgICBBU1NFUlQobV9oZWFwLm5leHRDZWxsIDwg
SGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrLT5t
YXJrZWQuZ2V0KG1faGVhcC5uZXh0Q2VsbCkpIHsgLy8gQWx3YXlzIGZhbHNlIGZvciB0aGUgbGFz
dCBjZWxsIGluIHRoZSBibG9jawpAQCAtNDM4LDEwICszNjgsMTAgQEAgdm9pZCBIZWFwOjpzaHJp
bmtCbG9ja3Moc2l6ZV90IG5lZWRlZEJsbwogICAgIAogICAgIC8vIENsZWFyIHRoZSBhbHdheXMt
b24gbGFzdCBiaXQsIHNvIGlzRW1wdHkoKSBpc24ndCBmb29sZWQgYnkgaXQuCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2hlYXAudXNlZEJsb2NrczsgKytpKQotICAgICAgICBtX2hlYXAu
YmxvY2tzW2ldLT5tYXJrZWQuY2xlYXIoSGVhcENvbnN0YW50czo6Y2VsbHNQZXJCbG9jayAtIDEp
OworICAgICAgICBtX2hlYXAuY29sbGVjdG9yQmxvY2soaSktPm1hcmtlZC5jbGVhcihIZWFwQ29u
c3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAh
PSBtX2hlYXAudXNlZEJsb2NrcyAmJiBtX2hlYXAudXNlZEJsb2NrcyAhPSBuZWVkZWRCbG9ja3M7
ICkgewotICAgICAgICBpZiAobV9oZWFwLmJsb2Nrc1tpXS0+bWFya2VkLmlzRW1wdHkoKSkgewor
ICAgICAgICBpZiAobV9oZWFwLmNvbGxlY3RvckJsb2NrKGkpLT5tYXJrZWQuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICBmcmVlQmxvY2soaSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
KytpOwpAQCAtNDQ5LDcgKzM3OSw3IEBAIHZvaWQgSGVhcDo6c2hyaW5rQmxvY2tzKHNpemVfdCBu
ZWVkZWRCbG8KIAogICAgIC8vIFJlc2V0IHRoZSBhbHdheXMtb24gbGFzdCBiaXQuCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2hlYXAudXNlZEJsb2NrczsgKytpKQotICAgICAgICBtX2hl
YXAuYmxvY2tzW2ldLT5tYXJrZWQuc2V0KEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2sgLSAx
KTsKKyAgICAgICAgbV9oZWFwLmNvbGxlY3RvckJsb2NrKGkpLT5tYXJrZWQuc2V0KEhlYXBDb25z
dGFudHM6OmNlbGxzUGVyQmxvY2sgLSAxKTsKIH0KIAogI2lmIE9TKFdJTkNFKQpAQCAtNzQ0LDcg
KzY3NCw2IEBAIHZvaWQgSGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYKICAgICBj
aGFyKiogcCA9IHN0YXRpY19jYXN0PGNoYXIqKj4oc3RhcnQpOwogICAgIGNoYXIqKiBlID0gc3Rh
dGljX2Nhc3Q8Y2hhcioqPihlbmQpOwogCi0gICAgQ29sbGVjdG9yQmxvY2sqKiBibG9ja3MgPSBt
X2hlYXAuYmxvY2tzOwogICAgIHdoaWxlIChwICE9IGUpIHsKICAgICAgICAgY2hhciogeCA9ICpw
Kys7CiAgICAgICAgIGlmIChpc1Bvc3NpYmxlQ2VsbCh4KSkgewpAQCAtNzYwLDcgKzY4OSw3IEBA
IHZvaWQgSGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYKICAgICAgICAgICAgIENv
bGxlY3RvckJsb2NrKiBibG9ja0FkZHIgPSByZWludGVycHJldF9jYXN0PENvbGxlY3RvckJsb2Nr
Kj4oeEFzQml0cyAtIG9mZnNldCk7CiAgICAgICAgICAgICB1c2VkQmxvY2tzID0gbV9oZWFwLnVz
ZWRCbG9ja3M7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBibG9jayA9IDA7IGJsb2NrIDwgdXNl
ZEJsb2NrczsgYmxvY2srKykgewotICAgICAgICAgICAgICAgIGlmIChibG9ja3NbYmxvY2tdICE9
IGJsb2NrQWRkcikKKyAgICAgICAgICAgICAgICBpZiAobV9oZWFwLmNvbGxlY3RvckJsb2NrKGJs
b2NrKSAhPSBibG9ja0FkZHIpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih4QXNC
aXRzKSk7CiAgICAgICAgICAgICAgICAgbWFya1N0YWNrLmRyYWluKCk7CkBAIC0xMDA5LDcgKzkz
OCw3IEBAIHZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMoTWFya1N0YWMKIHZvaWQgSGVh
cDo6Y2xlYXJNYXJrQml0cygpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2hlYXAu
dXNlZEJsb2NrczsgKytpKQotICAgICAgICBjbGVhck1hcmtCaXRzKG1faGVhcC5ibG9ja3NbaV0p
OworICAgICAgICBjbGVhck1hcmtCaXRzKG1faGVhcC5jb2xsZWN0b3JCbG9jayhpKSk7CiB9CiAK
IHZvaWQgSGVhcDo6Y2xlYXJNYXJrQml0cyhDb2xsZWN0b3JCbG9jayogYmxvY2spCkBAIC0xMDI4
LDkgKzk1Nyw5IEBAIHNpemVfdCBIZWFwOjptYXJrZWRDZWxscyhzaXplX3Qgc3RhcnRCbG8KICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgICByZXN1bHQgKz0g
bV9oZWFwLmJsb2Nrc1tzdGFydEJsb2NrXS0+bWFya2VkLmNvdW50KHN0YXJ0Q2VsbCk7CisgICAg
cmVzdWx0ICs9IG1faGVhcC5jb2xsZWN0b3JCbG9jayhzdGFydEJsb2NrKS0+bWFya2VkLmNvdW50
KHN0YXJ0Q2VsbCk7CiAgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0QmxvY2sgKyAxOyBpIDwgbV9o
ZWFwLnVzZWRCbG9ja3M7ICsraSkKLSAgICAgICAgcmVzdWx0ICs9IG1faGVhcC5ibG9ja3NbaV0t
Pm1hcmtlZC5jb3VudCgpOworICAgICAgICByZXN1bHQgKz0gbV9oZWFwLmNvbGxlY3RvckJsb2Nr
KGkpLT5tYXJrZWQuY291bnQoKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29sbGVjdG9yLmgJKHJldmlzaW9uIDY0NTk1KQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db2xsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTMgKzIyLDE2IEBA
CiAjaWZuZGVmIENvbGxlY3Rvcl9oCiAjZGVmaW5lIENvbGxlY3Rvcl9oCiAKKyNpbmNsdWRlICJB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgiCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8
c3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgogI2luY2x1ZGUgPHd0Zi9GaXhlZEFy
cmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1BhZ2VBbGxvY2F0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgpAQCAtMzcsMTAgKzQwLDYgQEAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAj
ZW5kaWYKIAotI2lmIE9TKFNZTUJJQU4pCi0jaW5jbHVkZSA8d3RmL3N5bWJpYW4vQmxvY2tBbGxv
Y2F0b3JTeW1iaWFuLmg+Ci0jZW5kaWYKLQogI2RlZmluZSBBU1NFUlRfQ0xBU1NfRklUU19JTl9D
RUxMKGNsYXNzKSBDT01QSUxFX0FTU0VSVChzaXplb2YoY2xhc3MpIDw9IENFTExfU0laRSwgY2xh
c3NfZml0c19pbl9jZWxsKQogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTU3LDEwICs1NiwxOSBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIExpdmVPYmplY3RJdGVyYXRvcjsKIAorI2lmIE9T
KFdJTkNFKSB8fCBPUyhTWU1CSUFOKQorICAgIGNvbnN0IHNpemVfdCBCTE9DS19TSVpFID0gNjQg
KiAxMDI0OyAvLyA2NGsKKyNlbHNlCisgICAgY29uc3Qgc2l6ZV90IEJMT0NLX1NJWkUgPSA2NCAq
IDQwOTY7IC8vIDI1NmsKKyNlbmRpZgorCisgICAgdHlwZWRlZiBBbGlnbmVkTWVtb3J5QWxsb2Nh
dG9yPEJMT0NLX1NJWkU+IEFsaWduZWRBbGxvY2F0b3I7CisgICAgdHlwZWRlZiBBbGlnbmVkTWVt
b3J5PEJMT0NLX1NJWkU+IEFsaWduZWRCbG9jazsKKwogICAgIHN0cnVjdCBDb2xsZWN0b3JIZWFw
IHsKICAgICAgICAgc2l6ZV90IG5leHRCbG9jazsKICAgICAgICAgc2l6ZV90IG5leHRDZWxsOwot
ICAgICAgICBDb2xsZWN0b3JCbG9jayoqIGJsb2NrczsKKyAgICAgICAgQWxpZ25lZEJsb2NrKiBi
bG9ja3M7CiAgICAgICAgIAogICAgICAgICB2b2lkKiBuZXh0TnVtYmVyOwogCkBAIC03MSw2ICs3
OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBkaWRTaHJpbms7CiAKICAgICAg
ICAgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb25JblByb2dyZXNzOworCisgICAgICAgIENv
bGxlY3RvckJsb2NrKiBjb2xsZWN0b3JCbG9jayhzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb2xsZWN0b3JCbG9jayo+KGJsb2Nr
c1tpbmRleF0uYmFzZSgpKTsKKyAgICAgICAgfQogICAgIH07CiAKICAgICBjbGFzcyBIZWFwIDog
cHVibGljIE5vbmNvcHlhYmxlIHsKQEAgLTE0MCw3ICsxNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBORVZFUl9JTkxJTkUgQ29sbGVjdG9yQmxvY2sqIGFsbG9jYXRlQmxvY2soKTsK
ICAgICAgICAgTkVWRVJfSU5MSU5FIHZvaWQgZnJlZUJsb2NrKHNpemVfdCk7Ci0gICAgICAgIE5F
VkVSX0lOTElORSB2b2lkIGZyZWVCbG9ja1B0cihDb2xsZWN0b3JCbG9jayopOwogICAgICAgICB2
b2lkIGZyZWVCbG9ja3MoKTsKICAgICAgICAgdm9pZCByZXNpemVCbG9ja3MoKTsKICAgICAgICAg
dm9pZCBncm93QmxvY2tzKHNpemVfdCBuZWVkZWRCbG9ja3MpOwpAQCAtMTgxLDIxICsxOTMsMTMg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHB0aHJlYWRfa2V5X3QgbV9jdXJyZW50VGhyZWFk
UmVnaXN0cmFyOwogI2VuZGlmCiAKLSNpZiBPUyhTWU1CSUFOKQogICAgICAgICAvLyBBbGxvY2F0
ZXMgY29sbGVjdG9yIGJsb2NrcyB3aXRoIGNvcnJlY3QgYWxpZ25tZW50Ci0gICAgICAgIFdURjo6
QWxpZ25lZEJsb2NrQWxsb2NhdG9yIG1fYmxvY2thbGxvY2F0b3I7IAotI2VuZGlmCisgICAgICAg
IEFsaWduZWRBbGxvY2F0b3IgbV9ibG9ja2FsbG9jYXRvcjsgCiAgICAgICAgIAogICAgICAgICBK
U0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKICAgICB9OwogCiAgICAgLy8gdHVuYWJsZSBwYXJh
bWV0ZXJzCi0jaWYgT1MoV0lOQ0UpIHx8IE9TKFNZTUJJQU4pCi0gICAgY29uc3Qgc2l6ZV90IEJM
T0NLX1NJWkUgPSA2NCAqIDEwMjQ7IC8vIDY0awotI2Vsc2UKLSAgICBjb25zdCBzaXplX3QgQkxP
Q0tfU0laRSA9IDY0ICogNDA5NjsgLy8gMjU2awotI2VuZGlmCi0KICAgICAvLyBkZXJpdmVkIGNv
bnN0YW50cwogICAgIGNvbnN0IHNpemVfdCBCTE9DS19PRkZTRVRfTUFTSyA9IEJMT0NLX1NJWkUg
LSAxOwogICAgIGNvbnN0IHNpemVfdCBCTE9DS19NQVNLID0gfkJMT0NLX09GRlNFVF9NQVNLOwpJ
bmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3JIZWFwSXRlcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRvci5o
CShyZXZpc2lvbiA2NDU5NSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9ySGVh
cEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBpbmxpbmUgSlNDZWxsKiBDb2xsZWN0b3JIZWFwSXRlcmF0b3I6Om9wZXJhdG9y
KigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwq
PigmbV9oZWFwLmJsb2Nrc1ttX2Jsb2NrXS0+Y2VsbHNbbV9jZWxsXSk7CisgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KCZtX2hlYXAuY29sbGVjdG9yQmxvY2sobV9ibG9j
ayktPmNlbGxzW21fY2VsbF0pOwogICAgIH0KICAgICAKICAgICAvLyBJdGVyYXRvcnMgYWR2YW5j
ZSB1cCB0byB0aGUgbmV4dC10by1sYXN0IC0tIGFuZCBub3QgdGhlIGxhc3QgLS0gY2VsbCBpbiBh
CkBAIC0xMDMsNyArMTAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmIChtX2Jsb2Nr
IDwgbV9oZWFwLm5leHRCbG9jayB8fCAobV9ibG9jayA9PSBtX2hlYXAubmV4dEJsb2NrICYmIG1f
Y2VsbCA8IG1faGVhcC5uZXh0Q2VsbCkpCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAg
ICAgICAgd2hpbGUgKG1fYmxvY2sgPCBtX2hlYXAudXNlZEJsb2NrcyAmJiAhbV9oZWFwLmJsb2Nr
c1ttX2Jsb2NrXS0+bWFya2VkLmdldChtX2NlbGwpKQorICAgICAgICB3aGlsZSAobV9ibG9jayA8
IG1faGVhcC51c2VkQmxvY2tzICYmICFtX2hlYXAuY29sbGVjdG9yQmxvY2sobV9ibG9jayktPm1h
cmtlZC5nZXQobV9jZWxsKSkKICAgICAgICAgICAgIGFkdmFuY2UoSGVhcENvbnN0YW50czo6Y2Vs
bHNQZXJCbG9jayAtIDEpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMTE5LDcg
KzExOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBkbyB7CiAgICAgICAgICAgICBhZHZh
bmNlKEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2sgLSAxKTsKICAgICAgICAgICAgIEFTU0VS
VChtX2Jsb2NrID4gbV9oZWFwLm5leHRCbG9jayB8fCAobV9ibG9jayA9PSBtX2hlYXAubmV4dEJs
b2NrICYmIG1fY2VsbCA+PSBtX2hlYXAubmV4dENlbGwpKTsKLSAgICAgICAgfSB3aGlsZSAobV9i
bG9jayA8IG1faGVhcC51c2VkQmxvY2tzICYmIG1faGVhcC5ibG9ja3NbbV9ibG9ja10tPm1hcmtl
ZC5nZXQobV9jZWxsKSk7CisgICAgICAgIH0gd2hpbGUgKG1fYmxvY2sgPCBtX2hlYXAudXNlZEJs
b2NrcyAmJiBtX2hlYXAuY29sbGVjdG9yQmxvY2sobV9ibG9jayktPm1hcmtlZC5nZXQobV9jZWxs
KSk7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3d0Zi9CaXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvQml0bWFwLmgJ
KHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvQml0bWFwLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8K
KyNpZm5kZWYgQml0bWFwX2gKKyNkZWZpbmUgQml0bWFwX2gKKworI2luY2x1ZGUgIkZpeGVkQXJy
YXkuaCIKKyNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK3Rl
bXBsYXRlPHNpemVfdCBzaXplPgorY2xhc3MgQml0bWFwIHsKK3ByaXZhdGU6CisgICAgdHlwZWRl
ZiB1aW50MzJfdCBXb3JkVHlwZTsKKworcHVibGljOgorICAgIGJvb2wgZ2V0KHNpemVfdCkgY29u
c3Q7CisgICAgdm9pZCBzZXQoc2l6ZV90KTsKKyAgICB2b2lkIGNsZWFyKHNpemVfdCk7CisgICAg
dm9pZCBjbGVhckFsbCgpOworICAgIHZvaWQgYWR2YW5jZVRvTmV4dEZyZWVCaXQoc2l6ZV90Jikg
Y29uc3Q7CisgICAgc2l6ZV90IGNvdW50KHNpemVfdCA9IDApIGNvbnN0OworICAgIHNpemVfdCBp
c0VtcHR5KCkgY29uc3Q7CisgICAgc2l6ZV90IGlzRnVsbCgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIHN0YXRpYyBjb25zdCBXb3JkVHlwZSB3b3JkU2l6ZSA9IHNpemVvZihXb3JkVHlwZSkgKiA4
OworICAgIHN0YXRpYyBjb25zdCBXb3JkVHlwZSB3b3JkcyA9IChzaXplICsgd29yZFNpemUgLSAx
KSAvIHdvcmRTaXplOworCisgICAgLy8gdGhlIGxpdGVyYWwgJzEnIGlzIG9mIHR5cGUgc2lnbmVk
IGludC4gIFdlIHdhbnQgdG8gdXNlIGFuIHVuc2lnbmVkCisgICAgLy8gdmVyc2lvbiBvZiB0aGUg
Y29ycmVjdCBzaXplIHdoZW4gZG9pbmcgdGhlIGNhbGN1bGF0aW9ucyBiZWNhdXNlIGlmCisgICAg
Ly8gV29yZFR5cGUgaXMgbGFyZ2VyIHRoYW4gaW50LCAnMSA8PCAzMScgd2lsbCBmaXJzdCBiZSBz
aWduIGV4dGVuZGVkCisgICAgLy8gYW5kIHRoZW4gY2FzdGVkIHRvIHVuc2lnbmVkLCBtZWFuaW5n
IHRoYXQgc2V0KDMxKSB3aGVuIFdvcmRUeXBlIGlzCisgICAgLy8gYSA2NCBiaXQgdW5zaWduZWQg
aW50IHdvdWxkIGdpdmUgMHhmZmZmODAwMAorICAgIHN0YXRpYyBjb25zdCBXb3JkVHlwZSBvbmUg
PSAxOworCisgICAgRml4ZWRBcnJheTxXb3JkVHlwZSwgd29yZHM+IGJpdHM7Cit9OworCit0ZW1w
bGF0ZTxzaXplX3Qgc2l6ZT4KK2lubGluZSBib29sIEJpdG1hcDxzaXplPjo6Z2V0KHNpemVfdCBu
KSBjb25zdAoreworICAgIHJldHVybiAhIShiaXRzW24gLyB3b3JkU2l6ZV0gJiAob25lIDw8IChu
ICUgd29yZFNpemUpKSk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBzaXplPgoraW5saW5lIHZvaWQg
Qml0bWFwPHNpemU+OjpzZXQoc2l6ZV90IG4pCit7CisgICAgYml0c1tuIC8gd29yZFNpemVdIHw9
IChvbmUgPDwgKG4gJSB3b3JkU2l6ZSkpOworfQorCit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4KK2lu
bGluZSB2b2lkIEJpdG1hcDxzaXplPjo6Y2xlYXIoc2l6ZV90IG4pCit7CisgICAgYml0c1tuIC8g
d29yZFNpemVdICY9IH4ob25lIDw8IChuICUgd29yZFNpemUpKTsKK30KKwordGVtcGxhdGU8c2l6
ZV90IHNpemU+CitpbmxpbmUgdm9pZCBCaXRtYXA8c2l6ZT46OmNsZWFyQWxsKCkKK3sKKyAgICBt
ZW1zZXQoYml0cy5kYXRhKCksIDAsIHNpemVvZihiaXRzKSk7Cit9CisKK3RlbXBsYXRlPHNpemVf
dCBzaXplPgoraW5saW5lIHZvaWQgQml0bWFwPHNpemU+OjphZHZhbmNlVG9OZXh0RnJlZUJpdChz
aXplX3QmIHN0YXJ0KSBjb25zdAoreworICAgIGlmICghfmJpdHNbc3RhcnQgLyB3b3JkU2l6ZV0p
CisgICAgICAgIHN0YXJ0ID0gKChzdGFydCAvIHdvcmRTaXplKSArIDEpICogd29yZFNpemU7Cisg
ICAgZWxzZQorICAgICAgICArK3N0YXJ0OworfQorCit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4KK2lu
bGluZSBzaXplX3QgQml0bWFwPHNpemU+Ojpjb3VudChzaXplX3Qgc3RhcnQpIGNvbnN0Cit7Cisg
ICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgZm9yICggOyAoc3RhcnQgJSB3b3JkU2l6ZSk7ICsr
c3RhcnQpIHsKKyAgICAgICAgaWYgKGdldChzdGFydCkpCisgICAgICAgICAgICArK3Jlc3VsdDsK
KyAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0IC8gd29yZFNpemU7IGkgPCB3b3Jkczsg
KytpKQorICAgICAgICByZXN1bHQgKz0gV1RGOjpiaXRDb3VudChiaXRzW2ldKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4KK2lubGluZSBzaXplX3QgQml0
bWFwPHNpemU+Ojppc0VtcHR5KCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHdvcmRzOyArK2kpCisgICAgICAgIGlmIChiaXRzW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4KK2lubGlu
ZSBzaXplX3QgQml0bWFwPHNpemU+Ojppc0Z1bGwoKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgd29yZHM7ICsraSkKKyAgICAgICAgaWYgKH5iaXRzW2ldKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit9CisjZW5kaWYKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3d0Zi9QYWdlQWxsb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3d0Zi9QYWdlQWxsb2NhdGlvbi5oCShyZXZpc2lvbiA2NDU5NSkKKysrIEphdmFT
Y3JpcHRDb3JlL3d0Zi9QYWdlQWxsb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw1MSBAQAogI2RlZmluZSBQQUdFX0FMTE9DQVRJT05fQUxMT0NBVEVfQVQgMAogI2VuZGlmCiAK
KyNpZiBIQVZFKE1NQVApCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQu
aD4KKyNlbmRpZgorCisjaWYgT1MoREFSV0lOKQorCisjaW5jbHVkZSA8bWFjaC9tYWNoX2luaXQu
aD4KKyNpbmNsdWRlIDxtYWNoL21hY2hfcG9ydC5oPgorI2luY2x1ZGUgPG1hY2gvdGFzay5oPgor
I2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2luY2x1ZGUgPG1hY2gvdm1fbWFwLmg+CisK
KyNlbGlmIE9TKFdJTkRPV1MpCisKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDx3aW5k
b3dzLmg+CisKKyNlbGlmIE9TKEhBSUtVKQorCisjaW5jbHVkZSA8T1MuaD4KKworI2VsaWYgT1Mo
VU5JWCkKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaWYgT1MoU09MQVJJUykKKyNpbmNsdWRl
IDx0aHJlYWQuaD4KKyNlbHNlCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlmCisKKyNpZiBI
QVZFKFBUSFJFQURfTlBfSCkKKyNpbmNsdWRlIDxwdGhyZWFkX25wLmg+CisjZW5kaWYKKworI2lm
IE9TKFFOWCkKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVk
ZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvcHJvY2ZzLmg+CisjZW5kaWYKKworI2VuZGlmCisK
IG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBQYWdlQWxsb2NhdGlvbiB7CkBAIC04Miw2ICsxMjcs
MTIgQEAgcHVibGljOgogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CiAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2Jhc2U7IH0KKyNpZiBD
T01QSUxFUihXSU5TQ1cpCisgICAgb3BlcmF0b3IgYm9vbCBjb25zdCB7IHJldHVybiBtX2Jhc2U7
IH0KKyNlbHNlCisgICAgdHlwZWRlZiB2b2lkKiBQYWdlQWxsb2NhdGlvbjo6KlVuc3BlY2lmaWVk
Qm9vbFR5cGU7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYmFzZSA/ICZQYWdlQWxsb2NhdGlvbjo6bV9iYXNlIDogMDsgfQorI2VuZGlmCiAKICAg
ICBib29sIGNvbW1pdCh2b2lkKiwgc2l6ZV90LCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBl
eGVjdXRhYmxlID0gZmFsc2UpIGNvbnN0OwogICAgIHZvaWQgZGVjb21taXQodm9pZCosIHNpemVf
dCkgY29uc3Q7CkBAIC05Myw2ICsxNDQsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYWdlQWxs
b2NhdGlvbiBhbGxvY2F0ZUF0KHZvaWQqIGFkZHJlc3MsIGJvb2wgZml4ZWQsIHNpemVfdCwgVXNh
Z2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUg
PSBmYWxzZSk7CiAgICAgc3RhdGljIFBhZ2VBbGxvY2F0aW9uIHJlc2VydmVBdCh2b2lkKiBhZGRy
ZXNzLCBib29sIGZpeGVkLCBzaXplX3QsIFVzYWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRh
YmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpOwogI2VuZGlmCisKKyNpZiBIQVZF
KEFMSUdORURfQUxMT0NBVEUpCisgICAgc3RhdGljIFBhZ2VBbGxvY2F0aW9uIGFsbG9jYXRlQWxp
Z25lZChzaXplX3QsIFVzYWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwg
Ym9vbCBleGVjdXRhYmxlID0gZmFsc2UpOworI2VuZGlmCisKICAgICBzdGF0aWMgc2l6ZV90IHBh
Z2VzaXplKCk7CiAKIHByaXZhdGU6CkBAIC0xMTgsNiArMTc0LDg5IEBAIHByaXZhdGU6CiAjZW5k
aWYKIH07CiAKKyNpZiBIQVZFKEFMSUdORURfQUxMT0NBVEUpCisKKyNpZiBPUyhEQVJXSU4pCisK
K2lubGluZSBQYWdlQWxsb2NhdGlvbiBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVkKHNp
emVfdCBzaXplLCBVc2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAg
IEFTU0VSVCghKHNpemUgJiAoc2l6ZSAtIDEpKSk7CisgICAgdm1fYWRkcmVzc190IGFkZHJlc3Mg
PSAwOworICAgIHZtX3Byb3RfdCBwcm90ZWN0aW9uID0gVk1fUFJPVF9SRUFEOworICAgIHByb3Rl
Y3Rpb24gfD0gZXhlY3V0YWJsZSA/IFZNX1BST1RfRVhFQ1VURSA6IDA7CisgICAgcHJvdGVjdGlv
biB8PSB3cml0YWJsZSA/IFZNX1BST1RfV1JJVEUgOiAwOworICAgIHZtX21hcChjdXJyZW50X3Rh
c2soKSwgJmFkZHJlc3MsIHNpemUsIChzaXplIC0gMSksIFZNX0ZMQUdTX0FOWVdIRVJFIHwgVk1f
VEFHX0ZPUl9DT0xMRUNUT1JfTUVNT1JZLCBNRU1PUllfT0JKRUNUX05VTEwsIDAsIEZBTFNFLCBw
cm90ZWN0aW9uLCBwcm90ZWN0aW9uLCBWTV9JTkhFUklUX0RFRkFVTFQpOworICAgIHJldHVybiBQ
YWdlQWxsb2NhdGlvbihyZWludGVycHJldF9jYXN0PHZvaWQqPihhZGRyZXNzKSwgc2l6ZSk7Cit9
CisKKyNlbGlmIE9TKFdJTkRPV1MpCisKK2lubGluZSBQYWdlQWxsb2NhdGlvbiBQYWdlQWxsb2Nh
dGlvbjo6YWxsb2NhdGVBbGlnbmVkKHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0
YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIEFTU0VSVCh3cml0YWJsZSAmJiAhZXhlY3V0
YWJsZSk7CisjaWYgQ09NUElMRVIoTUlOR1cpICYmICFDT01QSUxFUihNSU5HVzY0KQorICAgIHZv
aWQqIGFkZHJlc3MgPSBfX21pbmd3X2FsaWduZWRfbWFsbG9jKHNpemUsIHNpemUpOworI2Vsc2UK
KyAgICB2b2lkKiBhZGRyZXNzID0gX2FsaWduZWRfbWFsbG9jKHNpemUsIHNpemUpOworI2VuZGlm
CisgICAgbWVtc2V0KGFkZHJlc3MsIDAsIHNpemUpOworICAgIHJldHVybiBQYWdlQWxsb2NhdGlv
bihhZGRyZXNzLCBzaXplKTsKK30KKworI2VsaWYgSEFWRShQT1NJWF9NRU1BTElHTikKKworaW5s
aW5lIFBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZUFsaWduZWQoc2l6ZV90
IHNpemUsIFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCit7Cisg
ICAgQVNTRVJUKHdyaXRhYmxlICYmICFleGVjdXRhYmxlKTsKKworICAgIHZvaWQqIGFkZHJlc3M7
CisgICAgcG9zaXhfbWVtYWxpZ24oJmFkZHJlc3MsIHNpemUsIHNpemUpOworICAgIHJldHVybiBQ
YWdlQWxsb2NhdGlvbihhZGRyZXNzLCBzaXplKTsKK30KKworI2VsaWYgSEFWRShNTUFQKQorCitp
bmxpbmUgUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246OmFsbG9jYXRlQWxpZ25lZChzaXpl
X3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKK3sK
KyAgICBBU1NFUlQoIShzaXplICYgKHNpemUgLSAxKSkpOworICAgIEFTU0VSVCh3cml0YWJsZSAm
JiAhZXhlY3V0YWJsZSk7CisgICAgc3RhdGljIHNpemVfdCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXpl
KCk7CisKKyAgICBzaXplX3QgZXh0cmEgPSAwOworICAgIGlmIChzaXplID4gcGFnZXNpemUpCisg
ICAgICAgIGV4dHJhID0gc2l6ZSAtIHBhZ2VzaXplOworCisgICAgaW50IGZsYWdzID0gTUFQX1BS
SVZBVEUgfCBNQVBfQU5PTjsKKworICAgIGludCBwcm90ZWN0aW9uID0gUFJPVF9SRUFEOworICAg
IGlmICh3cml0YWJsZSkKKyAgICAgICAgcHJvdGVjdGlvbiB8PSBQUk9UX1dSSVRFOworICAgIGlm
IChleGVjdXRhYmxlKQorICAgICAgICBwcm90ZWN0aW9uIHw9IFBST1RfRVhFQzsKKworICAgIC8v
IHVzZSBwYWdlIGFsbG9jYXRpb24KKyAgICB2b2lkKiBtbWFwUmVzdWx0ID0gbW1hcCgwLCBzaXpl
ICsgZXh0cmEsIHByb3RlY3Rpb24sIGZsYWdzLCB1c2FnZSwgMCk7CisgICAgdWludHB0cl90IGFk
ZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obW1hcFJlc3VsdCk7CisKKyAgICBz
aXplX3QgYWRqdXN0ID0gMDsKKyAgICBpZiAoKGFkZHJlc3MgJiAoc2l6ZSAtIDEpKSkKKyAgICAg
ICAgYWRqdXN0ID0gc2l6ZSAtIChhZGRyZXNzICYgKHNpemUgLSAxKSk7CisKKyAgICBpZiAoYWRq
dXN0ID4gMCkKKyAgICAgICAgbXVubWFwKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFkZHJlc3Mp
LCBhZGp1c3QpOworCisgICAgaWYgKGFkanVzdCA8IGV4dHJhKQorICAgICAgICBtdW5tYXAocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oYWRkcmVzcyArIGFkanVzdCArIHNpemUpLCBleHRyYSAtIGFk
anVzdCk7CisKKyAgICBhZGRyZXNzICs9IGFkanVzdDsKKworICAgIHJldHVybiBQYWdlQWxsb2Nh
dGlvbihyZWludGVycHJldF9jYXN0PHZvaWQqPihhZGRyZXNzKSwgc2l6ZSk7Cit9CisKKyNlbmRp
ZgorCisjZW5kaWYKKwogfQogCiB1c2luZyBXVEY6OlBhZ2VBbGxvY2F0aW9uOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
d3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDY0NTk1KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1Bs
YXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwOCw2ICs3MDgsNyBAQAogI2RlZmluZSBIQVZF
X0VSUk5PX0ggMQogI2RlZmluZSBIQVZFX0xBTkdJTkZPX0ggMQogI2RlZmluZSBIQVZFX01NQVAg
MQorI2RlZmluZSBIQVZFX0FMSUdORURfQUxMT0NBVEUgMQogI2RlZmluZSBIQVZFX01FUkdFU09S
VCAxCiAjZGVmaW5lIEhBVkVfU0JSSyAxCiAjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKQEAgLTcz
Niw4ICs3MzcsMTAgQEAKIAogI2lmIE9TKFdJTkNFKQogI2RlZmluZSBIQVZFX0VSUk5PX0ggMAor
I2RlZmluZSBIQVZFX0FMSUdORURfQUxMT0NBVEUgMAogI2Vsc2UKICNkZWZpbmUgSEFWRV9TWVNf
VElNRUJfSCAxCisjZGVmaW5lIEhBVkVfQUxJR05FRF9BTExPQ0FURSAxCiAjZW5kaWYKICNkZWZp
bmUgSEFWRV9WSVJUVUFMQUxMT0MgMQogCkBAIC03OTQsNiArNzk3LDE0IEBACiAKICNlbmRpZgog
CisjaWYgIWRlZmluZWQoSEFWRV9BTElHTkVEX0FMTE9DQVRFKQorI2lmIEhBVkUoUE9TSVhfTUVN
QUxJR04pCisjZGVmaW5lIEhBVkVfQUxJR05FRF9BTExPQ0FURSAxCisjZWxzZQorI2RlZmluZSBI
QVZFX0FMSUdORURfQUxMT0NBVEUgMAorI2VuZGlmCisjZW5kaWYKKwogLyogRU5BQkxFIG1hY3Jv
IGRlZmF1bHRzICovCiAKICNpZiBQTEFURk9STShRVCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0
Zi9zeW1iaWFuL0Jsb2NrQWxsb2NhdG9yU3ltYmlhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvd3RmL3N5bWJpYW4vQmxvY2tBbGxvY2F0b3JTeW1iaWFuLmNwcAkocmV2aXNpb24g
NjQ1OTUpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvc3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5bWJp
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIE9TKFNZTUJJQU4pCi0KLSNpbmNsdWRlICJCbG9j
a0FsbG9jYXRvclN5bWJpYW4uaCIKLQotCi1uYW1lc3BhY2UgV1RGIHsKLQotLyoqIEVmZmljaWVu
dGx5IGFsbG9jYXRlcyBibG9ja3Mgb2Ygc2l6ZSBibG9ja1NpemUgd2l0aCBibG9ja1NpemUgYWxp
Z25tZW50LiAKLSAqIFByaW1hcmx5IGRlc2lnbmVkIGZvciBKU0MgQ29sbGVjdG9yJ3MgbmVlZHMu
IAotICogTm90IHRocmVhZC1zYWZlLiAgICAKLSAqLwotQWxpZ25lZEJsb2NrQWxsb2NhdG9yOjpB
bGlnbmVkQmxvY2tBbGxvY2F0b3IoVFVpbnQzMiByZXNlcnZhdGlvblNpemUsIFRVaW50MzIgYmxv
Y2tTaXplICkKLSAgICA6IG1fcmVzZXJ2YXRpb24ocmVzZXJ2YXRpb25TaXplKSwgCi0gICAgICBt
X2Jsb2NrU2l6ZShibG9ja1NpemUpCi17Ci0KLSAgICAgLy8gR2V0IHN5c3RlbSdzIHBhZ2Ugc2l6
ZSB2YWx1ZS4KLSAgICAgU1lNQklBTl9QQUdFU0laRShtX3BhZ2VTaXplKTsgCi0gICAgIAotICAg
ICAvLyBXZSBvbmx5IGFjY2VwdCBtdWx0aXBsZXMgb2Ygc3lzdGVtIHBhZ2Ugc2l6ZSBmb3IgYm90
aCBpbml0aWFsIHJlc2VydmF0aW9uIGFuZCB0aGUgYWxpZ25tZW50L2Jsb2NrIHNpemUKLSAgICAg
bV9yZXNlcnZhdGlvbiA9IFNZTUJJQU5fUk9VTkRVUFRPTVVMVElQTEUobV9yZXNlcnZhdGlvbiwg
bV9wYWdlU2l6ZSk7Ci0gICAgIF9fQVNTRVJUX0FMV0FZUyhTWU1CSUFOX1JPVU5EVVBUT01VTFRJ
UExFKG1fYmxvY2tTaXplLCBtX3BhZ2VTaXplKSwgVXNlcjo6UGFuaWMoX0woIkFsaWduZWRCbG9j
a0FsbG9jYXRvcjEiKSwgS0VyckFyZ3VtZW50KSk7Ci0gICAgIAotICAgICAvLyBDYWxjdWxhdGUg
bWF4LiBiaXQgZmxhZ3Mgd2UgbmVlZCB0byBjYXJ2ZSBhIHJlc2VydmF0aW9uU2l6ZSByYW5nZSBp
bnRvIGJsb2NrU2l6ZS1zaXplZCBibG9ja3MKLSAgICAgbV9tYXAubnVtQml0cyA9IG1fcmVzZXJ2
YXRpb24gLyBtX2Jsb2NrU2l6ZTsgICAKLSAgICAgY29uc3QgVFVpbnQzMiBiaXRzUGVyV29yZCA9
IDgqc2l6ZW9mKFRVaW50MzIpOyAKLSAgICAgY29uc3QgVFVpbnQzMiBudW1Xb3JkcyA9IChtX21h
cC5udW1CaXRzICsgYml0c1BlcldvcmQgLTEpIC8gYml0c1BlcldvcmQ7IAotICAgCi0gICAgIG1f
bWFwLmJpdHMgPSBuZXcgVFVpbnQzMltudW1Xb3Jkc107Ci0gICAgIF9fQVNTRVJUX0FMV0FZUyht
X21hcC5iaXRzLCBVc2VyOjpQYW5pYyhfTCgiQWxpZ25lZEJsb2NrQWxsb2NhdG9yMiIpLCBLRXJy
Tm9NZW1vcnkpKTsKLSAgICAgbV9tYXAuY2xlYXJBbGwoKTsKLSAgICAgCi0gICAgIC8vIE9wZW4g
YSBTeW1iaWFuIFJDaHVuaywgYW5kIHJlc2VydmUgcmVxdWVzdGVkIHZpcnR1YWwgYWRkcmVzcyBy
YW5nZSAgIAotICAgICAvLyBBbnkgdGhyZWFkIGluIHRoaXMgcHJvY2VzcyBjYW4gb3BlcmF0ZSB0
aGlzIHJjaHVuayBkdWUgdG8gRU93bmVyUHJvY2VzcyBhY2Nlc3MgcmlnaHRzLiAKLSAgICAgVElu
dCByZXQgPSBtX2NodW5rLkNyZWF0ZURpc2Nvbm5lY3RlZExvY2FsKDAgLCAwLCAoVEludCltX3Jl
c2VydmF0aW9uICwgRU93bmVyUHJvY2Vzcyk7ICAKLSAgICAgaWYgKHJldCAhPSBLRXJyTm9uZSkg
Ci0gICAgICAgICBVc2VyOjpQYW5pYyhfTCgiQWxpZ25lZEJsb2NrQWxsb2NhdG9yMyIpLCByZXQp
OwotICAgICAgIAotICAgICAvLyBUaGlzIGlzIHRoZSBvZmZzZXQgdG8gbV9jaHVuay5CYXNlKCkg
cmVxdWlyZWQgdG8gbWFrZSBpdCBtX2Jsb2NrU2l6ZS1hbGlnbmVkCi0gICAgIG1fb2Zmc2V0ID0g
U1lNQklBTl9ST1VORFVQVE9NVUxUSVBMRShUVWludDMyKG1fY2h1bmsuQmFzZSgpKSwgbV9ibG9j
a1NpemUpIC0gVFVpbnQobV9jaHVuay5CYXNlKCkpOyAKLQotfQotCi12b2lkKiBBbGlnbmVkQmxv
Y2tBbGxvY2F0b3I6OmFsbG9jKCkKLXsKLQotICAgIFRJbnQgIGZyZWVSYW0gPSAwOyAKLSAgICB2
b2lkKiBhZGRyZXNzID0gMDsKLSAgICAKLSAgICAvLyBMb29rIHVwIGZpcnN0IGZyZWUgc2xvdCBp
biBiaXQgbWFwCi0gICAgY29uc3QgVEludCBmcmVlSWR4ID0gbV9tYXAuZmluZEZyZWUoKTsKLSAg
ICAgICAgCi0gICAgLy8gUHNldWRvIE9PTTogV2UgYXRlIHVwIHRoZSBhZGRyZXNzIHNwYWNlIHdl
IHJlc2VydmVkLi4KLSAgICAvLyAuLmV2ZW4gdGhvdWdoIHRoZSBkZXZpY2UgbWF5IGhhdmUgZnJl
ZSBSQU0gbGVmdAotICAgIGlmIChmcmVlSWR4IDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIAotICAgIFRJbnQgcmV0ID0gbV9jaHVuay5Db21taXQobV9vZmZzZXQgKyAobV9ibG9ja1Np
emUgKiBmcmVlSWR4KSwgbV9ibG9ja1NpemUpOwotICAgIGlmIChyZXQgIT0gS0Vyck5vbmUpICAK
LSAgICAgICAgcmV0dXJuIDA7IC8vIFRydWUgT09NOiBEZXZpY2UgZGlkbid0IGhhdmUgcGh5c2lj
YWwgUkFNIHRvIHNwYXJlCi0gICAgICAgIAotICAgIC8vIFVwZGF0ZWQgYml0IHRvIG1hcmsgcmVn
aW9uIGFzIGluIHVzZS4gCi0gICAgbV9tYXAuc2V0KGZyZWVJZHgpOyAKLSAgICAKLSAgICAvLyBD
YWxjdWxhdGUgYWRkcmVzcyBvZiBjb21taXR0ZWQgcmVnaW9uIChibG9jaykKLSAgICBhZGRyZXNz
ID0gKHZvaWQqKSggKG1fY2h1bmsuQmFzZSgpICsgbV9vZmZzZXQpICsgKFRVaW50KShtX2Jsb2Nr
U2l6ZSAqIGZyZWVJZHgpICk7Ci0gICAgCi0gICAgcmV0dXJuIGFkZHJlc3M7Ci19Ci0KLXZvaWQg
QWxpZ25lZEJsb2NrQWxsb2NhdG9yOjpmcmVlKHZvaWQqIGJsb2NrKQotewotICAgIC8vIENhbGN1
bGF0ZSBpbmRleCBvZiBibG9jayB0byBiZSBmcmVlZAotICAgIFRJbnQgaWR4ID0gVFVpbnQoc3Rh
dGljX2Nhc3Q8VFVpbnQ4Kj4oYmxvY2spIC0gbV9jaHVuay5CYXNlKCkgLSBtX29mZnNldCkgLyBt
X2Jsb2NrU2l6ZTsKLSAgICAKLSAgICBfX0FTU0VSVF9ERUJVRyhpZHggPj0gMCAmJiBpZHggPCBt
X21hcC5udW1CaXRzLCBVc2VyOjpQYW5pYyhfTCgiQWxpZ25lZEJsb2NrQWxsb2NhdG9yNCIpLCBL
RXJyQ29ycnVwdCkpOyAvLyB2YWxpZCBpbmRleCBjaGVjawotICAgIF9fQVNTRVJUX0RFQlVHKG1f
bWFwLmdldChpZHgpLCBVc2VyOjpQYW5pYyhfTCgiQWxpZ25lZEJsb2NrQWxsb2NhdG9yNSIpLCBL
RXJyQ29ycnVwdCkpOyAvLyBpbi11c2UgZmxhZyBjaGVjayAgICAKLSAgICAKLSAgICAvLyBSZXR1
cm4gY29tbWl0dGVkIHJlZ2lvbiB0byBzeXN0ZW0gUkFNIHBvb2wgKHRoZSBwaHlzaWNhbCBSQU0g
YmVjb21lcyB1c2FibGUgYnkgb3RoZXJzKQotICAgIFRJbnQgcmV0ID0gbV9jaHVuay5EZWNvbW1p
dChtX29mZnNldCArIG1fYmxvY2tTaXplICogaWR4LCBtX2Jsb2NrU2l6ZSk7Ci0gICAgICAgICAg
ICAKLSAgICAvLyBtYXJrIHRoaXMgYXZhaWxhYmxlIGFnYWluCi0gICAgbV9tYXAuY2xlYXIoaWR4
KTsgCi19Ci0KLXZvaWQgQWxpZ25lZEJsb2NrQWxsb2NhdG9yOjpkZXN0cm95KCkgCi17Ci0gICAg
Ly8gcmVsZWFzZSBldmVyeXRoaW5nIQotICAgIG1fY2h1bmsuRGVjb21taXQoMCwgbV9jaHVuay5N
YXhTaXplKCkpOwotICAgIG1fbWFwLmNsZWFyQWxsKCk7Ci19Ci0KLUFsaWduZWRCbG9ja0FsbG9j
YXRvcjo6fkFsaWduZWRCbG9ja0FsbG9jYXRvcigpCi17Ci0gICAgZGVzdHJveSgpOwotICAgIG1f
Y2h1bmsuQ2xvc2UoKTsKLSAgICBkZWxldGUgW10gbV9tYXAuYml0czsKLX0KLQotfSAvLyBlbmQg
b2YgbmFtZXNwYWNlCi0KLSNlbmRpZiAvLyBTWU1CSUFOCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93
dGYvc3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5bWJpYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS93dGYvc3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5bWJpYW4uaAkocmV2aXNpb24gNjQ1
OTUpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvc3ltYmlhbi9CbG9ja0FsbG9jYXRvclN5bWJpYW4u
aAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIEJsb2NrQWxsb2NhdG9yU3ltYmlhbl9oCi0jZGVmaW5lIEJsb2NrQWxsb2NhdG9yU3ltYmlh
bl9oCi0KLSNpbmNsdWRlIDxlMzJjbW4uaD4KLSNpbmNsdWRlIDxlMzJzdGQuaD4KLSNpbmNsdWRl
IDxoYWwuaD4KLQotCi0jZGVmaW5lIFNZTUJJQU5fUEFHRVNJWkUoeCkgKEhBTDo6R2V0KEhBTERh
dGE6OkVNZW1vcnlQYWdlU2l6ZSwgeCkpOwotI2RlZmluZSBTWU1CSUFOX0ZSRUVSQU0oeCkgIChI
QUw6OkdldChIQUxEYXRhOjpFTWVtb3J5UkFNRnJlZSwgeCkpOwotI2RlZmluZSBTWU1CSUFOX1JP
VU5EVVBUT01VTFRJUExFKHgsIG11bHRpcGxlb2YpICAgICggKHggKyBtdWx0aXBsZW9mIC0gMSkg
JiB+KG11bHRpcGxlb2YgLSAxKSApCi0KLS8vIFNldCBzYW5lIGRlZmF1bHRzIGlmIC1EPGZsYWdu
YW1lPXZhbHVlPiB3YXNuJ3QgcHJvdmlkZWQgdmlhIGNvbXBpbGVyIGFyZ3MKLSNpZm5kZWYgSlND
Q09MTEVDVE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT04KLSNpZiBkZWZpbmVkKF9fV0lOU19fKSAK
LSAgICAvLyBFbXVsYXRvciBoYXMgbGltaXRlZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UKLSAgICAj
ZGVmaW5lIEpTQ0NPTExFQ1RPUl9WSVJUVUFMTUVNX1JFU0VSVkFUSU9OICg0KjEwMjQqMTAyNCkK
LSNlbHNlCi0gICAgLy8gSFcgaGFzIHBsZW50eSBvZiB2aXJ0dWFsIGFkZHJlc3NlcwotICAgICNk
ZWZpbmUgSlNDQ09MTEVDVE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT04gKDEyOCoxMDI0KjEwMjQp
Ci0jZW5kaWYKLSNlbmRpZgotCi1uYW1lc3BhY2UgV1RGIHsKLQotLyoqIAotICogIEFsbG9jYXRl
cyBjb250aWd1b3VzIHJlZ2lvbiBvZiBzaXplIGJsb2NrU2l6ZSB3aXRoIGJsb2NrU2l6ZS1hbGln
bmVkIGFkZHJlc3MuIAotICogIGJsb2NrU2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2Ygc3lzdGVt
IHBhZ2Ugc2l6ZSAodHlwaWNhbGx5IDRLIG9uIFN5bWJpYW4vQVJNKQotICoKLSAqICBAcGFyYW0g
cmVzZXJ2YXRpb25TaXplIFZpcnR1YWwgYWRkcmVzcyByYW5nZSB0byBiZSByZXNlcnZlZCB1cG9u
IGNyZWF0aW9uIG9mIGNodW5rIChieXRlcykuCi0gKiAgQHBhcmFtIGJsb2NrU2l6ZSBTaXplIG9m
IGEgc2luZ2xlIGFsbG9jYXRpb24uIFJldHVybmVkIGFkZHJlc3Mgd2lsbCBhbHNvIGJlIGJsb2Nr
U2l6ZS1hbGlnbmVkLgotICovCi1jbGFzcyBBbGlnbmVkQmxvY2tBbGxvY2F0b3IgewotICAgIHB1
YmxpYzoKLSAgICAgICAgQWxpZ25lZEJsb2NrQWxsb2NhdG9yKFRVaW50MzIgcmVzZXJ2YXRpb25T
aXplLCBUVWludDMyIGJsb2NrU2l6ZSk7Ci0gICAgICAgIH5BbGlnbmVkQmxvY2tBbGxvY2F0b3Io
KTsKLSAgICAgICAgdm9pZCBkZXN0cm95KCk7Ci0gICAgICAgIHZvaWQqIGFsbG9jKCk7Ci0gICAg
ICAgIHZvaWQgZnJlZSh2b2lkKiBkYXRhKTsKLSAgICAKLSAgICBwcml2YXRlOiAKLSAgICAgICAg
UkNodW5rICAgbV9jaHVuazsgLy8gU3ltYmlhbiBjaHVuayB0aGF0IGxldHMgdXMgcmVzZXJ2ZS9j
b21taXQvZGVjb21taXQKLSAgICAgICAgVFVpbnQgICAgbV9vZmZzZXQ7IC8vIG9mZnNldCBvZiBm
aXJzdCBjb21taXR0ZWQgcmVnaW9uIGZyb20gYmFzZSAKLSAgICAgICAgVEludCAgICAgbV9wYWdl
U2l6ZTsgLy8gY2FjaGVkIHZhbHVlIG9mIHN5c3RlbSBwYWdlIHNpemUsIHR5cGljYWxseSA0SyBv
biBTeW1iaWFuCi0gICAgICAgIFRVaW50MzIgIG1fcmVzZXJ2YXRpb247Ci0gICAgICAgIFRVaW50
MzIgIG1fYmxvY2tTaXplOyAgCi0KLSAgICAgICAgLy8gVHJhY2tzIGNvbWl0dGVkL2RlY29tbWl0
dGVkIHN0YXRlIG9mIGEgYmxvY2tTaXplIHJlZ2lvbgotICAgICAgICBzdHJ1Y3QgewotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBUVWludDMyICpiaXRzOyAvLyBhcnJheSBvZiBiaXQgZmxhZ3Mg
Ci0gICAgICAgICAgICBUVWludDMyICBudW1CaXRzOyAvLyBudW1iZXIgb2YgcmVnaW9ucyB0byBr
ZWVwIHRyYWNrIG9mCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJvb2wgZ2V0KFRVaW50MzIg
bikgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gISEoYml0c1tu
ID4+IDVdICYgKDEgPDwgKG4gJiAweDFGKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICB2b2lkIHNldChUVWludDMyIG4pCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYml0c1tuID4+IDVdIHw9ICgxIDw8IChuICYgMHgxRikpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICB2b2lkIGNsZWFyKFRVaW50MzIgbikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBiaXRzW24gPj4gNV0gJj0gfigxIDw8IChuICYgMHgx
RikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICB2b2lkIGNsZWFy
QWxsKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGZvciAoVFVpbnQzMiBpID0gMDsg
aSA8IG51bUJpdHM7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgY2xlYXIoaSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFRJbnQgZmluZEZyZWUoKSBjb25zdAot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoVFVpbnQzMiBpID0gMDsgaSA8IG51
bUJpdHM7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWdldChpKSkgCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIH0g
bV9tYXA7ICAKLQotfTsKLSAKLX0KLQotI2VuZGlmIC8vIGVuZCBvZiBCbG9ja0FsbG9jYXRvclN5
bWJpYW5faAotCi0KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9C
aXRtYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93
dGYvQml0bWFwLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVh
ZGVycy93dGYvQml0bWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9CaXRtYXAuaD4KSW5kZXg6IFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
d3RmL0JpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3Rm
L0JpdG1hcC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYv
Qml0bWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZX
RF9CaXRtYXBfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9CaXRtYXBfaAorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0JpdG1hcC5oPgorI2VuZGlmCg==
</data>
<flag name="review"
          id="51732"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63399</attachid>
            <date>2010-08-03 18:22:37 -0700</date>
            <delta_ts>2010-08-05 13:54:12 -0700</delta_ts>
            <desc>Patch (up to date)</desc>
            <filename>heap-pageAlloc.patch</filename>
            <type>text/plain</type>
            <size>48584</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0NjA5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTAtMDgtMDMgIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQzMjY5CisKKyAgICAgICAgQWRkZWQgbmV3IGFsbG9jYXRlQWxpZ25lZCBtZXRob2Rz
IHRvIFBhZ2VBbGxvY2F0aW9uLiAgSW4gb3JkZXIgdG8KKyAgICAgICAgcHJldmVudCBhIHJlZ3Jl
c3MgaW4gcGVyZm9ybWFuY2UsIHRoZSBmdW5jdGlvbiBuZWVkcyB0byBiZSBpbmxpbmVkLgorCisg
ICAgICAgIEFkZGl0aW9uYWxseSwgSSBwb3J0ZWQgdGhlIHN5bWJpYW4gYmxvY2sgYWxsb2NhdG9y
IHRvIHVzZQorICAgICAgICBQYWdlQWxsb2NhdGlvbiBhbmQgYWRkZWQgYSBuZXcgV1RGOjpCaXRt
YXAgY2xhc3MgdG8gc3VwcG9ydCB0aGlzLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUuZ3lwaToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJ1bnRpbWUvQWxpZ25lZE1lbW9y
eUFsbG9jYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QWxpZ25lZE1lbW9yeTo6ZGVhbGxv
Y2F0ZSk6CisgICAgICAgIChKU0M6OkFsaWduZWRNZW1vcnk6OmJhc2UpOgorICAgICAgICAoSlND
OjpBbGlnbmVkTWVtb3J5OjpBbGlnbmVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6QWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6QWxpZ25lZE1lbW9yeUFsbG9jYXRvcjo6
QWxpZ25lZE1lbW9yeUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I6On5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6QWxpZ25lZE1l
bW9yeUFsbG9jYXRvcjo6ZnJlZSk6CisgICAgICAgICogcnVudGltZS9Db2xsZWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVzdHJveSk6
CisgICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlQmxvY2spOgorICAgICAgICAoSlNDOjpIZWFw
OjpmcmVlQmxvY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpmcmVlQmxvY2tzKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpzaHJpbmtCbG9ja3Mp
OgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrQ29uc2VydmF0aXZlbHkpOgorICAgICAgICAoSlND
OjpIZWFwOjpjbGVhck1hcmtCaXRzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya2VkQ2VsbHMp
OgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmg6CisgICAgICAgIChKU0M6OkNvbGxlY3Rv
ckhlYXA6OmNvbGxlY3RvckJsb2NrKToKKyAgICAgICAgKiBydW50aW1lL0NvbGxlY3RvckhlYXBJ
dGVyYXRvci5oOgorICAgICAgICAoSlNDOjpDb2xsZWN0b3JIZWFwSXRlcmF0b3I6Om9wZXJhdG9y
Kik6CisgICAgICAgIChKU0M6OkxpdmVPYmplY3RJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAg
ICAgIChKU0M6OkRlYWRPYmplY3RJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgICogd3Rm
L0JpdG1hcC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Qml0bWFwOjpnZXQpOgorICAgICAgICAo
V1RGOjpCaXRtYXA6OnNldCk6CisgICAgICAgIChXVEY6OkJpdG1hcDo6Y2xlYXIpOgorICAgICAg
ICAoV1RGOjpCaXRtYXA6OmNsZWFyQWxsKToKKyAgICAgICAgKFdURjo6Qml0bWFwOjphZHZhbmNl
VG9OZXh0RnJlZUJpdCk6CisgICAgICAgIChXVEY6OkJpdG1hcDo6Y291bnQpOgorICAgICAgICAo
V1RGOjpCaXRtYXA6OmlzRW1wdHkpOgorICAgICAgICAoV1RGOjpCaXRtYXA6OmlzRnVsbCk6Cisg
ICAgICAgICogd3RmL1BhZ2VBbGxvY2F0aW9uLmg6CisgICAgICAgIChXVEY6OlBhZ2VBbGxvY2F0
aW9uOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKToKKyAgICAgICAgKFdURjo6UGFnZUFs
bG9jYXRpb246OmFsbG9jYXRlQWxpZ25lZCk6CisgICAgICAgIChXVEY6OlBhZ2VBbGxvY2F0aW9u
OjpyZXNlcnZlQWxpZ25lZCk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisgICAgICAgICog
d3RmL3N5bWJpYW46IFJlbW92ZWQuCisgICAgICAgICogd3RmL3N5bWJpYW4vQmxvY2tBbGxvY2F0
b3JTeW1iaWFuLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvc3ltYmlhbi9CbG9ja0FsbG9j
YXRvclN5bWJpYW4uaDogUmVtb3ZlZC4KKwogMjAxMC0wOC0wMiAgR2F2aW4gQmFycmFjbG91Z2gg
IDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1
bnQuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjQ2MDkpCisrKyBKYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjEyLDYgKzIxMiw3IEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVOb2RlLmggXAogCUphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcCBcCiAJ
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuaCBcCisJSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJnTGlzdC5jcHAgXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJnTGlzdC5oIFwKIAlKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAgXApAQCAtNDExLDYgKzQxMiw3IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9Bc3NlcnRpb25z
LmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNzLmggXAogCUphdmFTY3JpcHRDb3JlL3d0
Zi9BVkxUcmVlLmggXAorCUphdmFTY3JpcHRDb3JlL3d0Zi9CaXRtYXAuaCBcCiAJSmF2YVNjcmlw
dENvcmUvd3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmggXAogCUphdmFTY3JpcHRDb3JlL3d0Zi9C
eXRlQXJyYXkuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS93dGYvQnl0ZUFycmF5LmggXApJbmRleDog
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiA2NDYwOSkKKysrIEphdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2ICsxNjQs
NyBAQAogICAgICAgICAgICAgJ3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcCcsCiAgICAgICAgICAgICAn
cHJvZmlsZXIvUHJvZmlsZXIuaCcsCiAgICAgICAgICAgICAncHJvZmlsZXIvUHJvZmlsZXJTZXJ2
ZXIuaCcsCisgICAgICAgICAgICAncnVudGltZS9BbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmgnLAog
ICAgICAgICAgICAgJ3J1bnRpbWUvQXJnTGlzdC5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUv
QXJnTGlzdC5oJywKICAgICAgICAgICAgICdydW50aW1lL0FyZ3VtZW50cy5jcHAnLApAQCAtMzUw
LDYgKzM1MSw3IEBACiAgICAgICAgICAgICAnd3RmL0Fzc2VydGlvbnMuaCcsCiAgICAgICAgICAg
ICAnd3RmL0F0b21pY3MuaCcsCiAgICAgICAgICAgICAnd3RmL0FWTFRyZWUuaCcsCisgICAgICAg
ICAgICAnd3RmL0JpdG1hcC5oJywKICAgICAgICAgICAgICd3dGYvQnl0ZUFycmF5LmNwcCcsCiAg
ICAgICAgICAgICAnd3RmL0J5dGVBcnJheS5oJywKICAgICAgICAgICAgICd3dGYvY2hyb21pdW0v
Q2hyb21pdW1UaHJlYWRpbmcuaCcsCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShy
ZXZpc2lvbiA2NDYwOSkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwkod29y
a2luZyBjb3B5KQpAQCAtMjE2LDcgKzIxNiw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHd0Zi9QYWdl
QWxsb2NhdGlvbi5jcHAgXAogICAgIHd0Zi9SYW5kb21OdW1iZXIuY3BwIFwKICAgICB3dGYvUmVm
Q291bnRlZExlYWtDb3VudGVyLmNwcCBcCi0gICAgd3RmL3N5bWJpYW4vQmxvY2tBbGxvY2F0b3JT
eW1iaWFuLmNwcCBcCiAgICAgd3RmL1RocmVhZGluZ05vbmUuY3BwIFwKICAgICB3dGYvVGhyZWFk
aW5nLmNwcCBcCiAgICAgd3RmL1R5cGVUcmFpdHMuY3BwIFwKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNjQ2MDkpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MDgsNiArNTA4LDkgQEAKIAkJ
QkNGRDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MDBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmNwcCAqLzsgfTsKIAkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1
bXBUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oICovOyB9OwogCQlDMEEyNzI2
MzBFNTBBMDYzMDBFOTZFMTUgLyogTm90Rm91bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwQTI3MjNGMEU1MDlGMUUwMEU5NkUxNSAvKiBOb3RGb3Vu
ZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCURE
MjcyNDY4MTIwOEQxRkYwMEY5QUJFNyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERDI3MjQ2NzEyMDhEMUZG
MDBGOUFCRTcgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovOyB9OworCQlERDI3MjQ2OTEy
MDhEMUZGMDBGOUFCRTcgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREQyNzI0NjcxMjA4RDFGRjAwRjlBQkU3
IC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlERDM3N0NCQzEyMDcyQzE4MDA2QTI1MTcgLyogQml0bWFw
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERDM3N0NC
QjEyMDcyQzE4MDA2QTI1MTcgLyogQml0bWFwLmggKi87IH07CiAJCURERjdBQkQ0MTFGNjBFRDIw
MDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2
aXR5Q2FsbGJhY2suaCAqLzsgfTsKIAkJRERGN0FCRDUxMUY2MEVEMjAwMTA4RTM2IC8qIEdDQWN0
aXZpdHlDYWxsYmFja0NGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IERERjdBQkQzMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2tD
Ri5jcHAgKi87IH07CiAJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmlu
Zy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4
RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwNTEsNiArMTA1NCw4IEBACiAJCUMw
QTI3MjNGMEU1MDlGMUUwMEU5NkUxNSAvKiBOb3RGb3VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOb3RGb3VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
MjEyMDIyODBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252
ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRlQ29udmVyc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERDI3MjQ2NzEyMDhEMUZGMDBGOUFC
RTcgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUREMzc3Q0JCMTIwNzJDMTgwMDZBMjUxNyAvKiBCaXRtYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQml0bWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCURERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NBY3Rpdml0eUNhbGxiYWNrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURERjdBQkQzMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0Fj
dGl2aXR5Q2FsbGJhY2tDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHQ0FjdGl2aXR5Q2FsbGJhY2tDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxMUQ1MTc1MEIyRTc5OEQwMDU2QzE4OCAvKiBTdHJpbmdFeHRyYXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNDEwLDYgKzE0MTUsNyBAQAogCQkJCTY1RTIxN0I3MDhFN0VFQ0MwMDIzRTVG
NiAvKiBBc3NlcnRpb25zLmggKi8sCiAJCQkJQkM1RjdCQkIxMTgyM0I1OTAwNTJDMDJDIC8qIEF0
b21pY3MuaCAqLywKIAkJCQlFMUE1OTYzNzBERTNFMUMzMDBDMTdFMzcgLyogQVZMVHJlZS5oICov
LAorCQkJCUREMzc3Q0JCMTIwNzJDMTgwMDZBMjUxNyAvKiBCaXRtYXAuaCAqLywKIAkJCQk4NjY3
NkQ0RDExRkVENTVEMDA0QjY4NjMgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQlB
N0ExRjdBQTBGMjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmNwcCAqLywKIAkJCQlBN0ExRjdB
QjBGMjUyQjNDMDBFMTg0RTIgLyogQnl0ZUFycmF5LmggKi8sCkBAIC0xNTU5LDYgKzE1NjUsNyBA
QAogCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJREQyNzI0NjcxMjA4RDFGRjAwRjlBQkU3
IC8qIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCAqLywKIAkJCQlEREY3QUJEMjExRjYwRUQyMDAx
MDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJCQkJRERGN0FCRDMxMUY2MEVEMjAw
MTA4RTM2IC8qIEdDQWN0aXZpdHlDYWxsYmFja0NGLmNwcCAqLywKIAkJCQlCQ0Y2MDUxMTBFMjAz
RUY4MDBCOUE2NEQgLyogQXJnTGlzdC5jcHAgKi8sCkBAIC0xOTAxLDYgKzE5MDgsNyBAQAogCQkJ
CTE0NDAwNzU3MEE1MzcwRDIwMDA1RjA2MSAvKiBKU05vZGVMaXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDQwMDVDQzBBNTMzOEY4MDAwNUYwNjEgLyogTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ0MDA3NEEwQTUzNkNDMjAwMDVGMDYxIC8qIE5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywK
KwkJCQlERDI3MjQ2ODEyMDhEMUZGMDBGOUFCRTcgLyogQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0yMTk5LDcgKzIyMDcsOSBAQAogCQkJCTg2OEJGQTE4MTE3Q0Yx
OTkwMEI5MDhCMSAvKiBXVEZTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDA4RDU0MTE3
OTM2MTMwMDZFNUVEMCAvKiBXVEZUaHJlYWREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Njg4
Q0IxNjBFRDEyQjRFMDAxRDY0OUYgLyogWDg2QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlERDM3N0NCQzEyMDcyQzE4MDA2QTI1MTcgLyogQml0bWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlEREY3QUJENDExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlERDI3MjQ2OTEyMDhEMUZGMDBGOUFCRTcgLyogQWxpZ25lZE1lbW9yeUFs
bG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fs
aWduZWRNZW1vcnlBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDIzOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5k
ZWYgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcl9oCisjZGVmaW5lIEFsaWduZWRNZW1vcnlBbGxvY2F0
b3JfaAorCisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2Nh
dGlvbi5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IEFsaWduZWRNZW1vcnlBbGxvY2F0
b3JDb25zdGFudHMgeworLy8gU2V0IHNhbmUgZGVmYXVsdHMgaWYgLUQ8ZmxhZ25hbWU9dmFsdWU+
IHdhc24ndCBwcm92aWRlZCB2aWEgY29tcGlsZXIgYXJncworI2lmIGRlZmluZWQoSlNDQ09MTEVD
VE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT04pCisgICAgLy8gS2VlcCBiYWNrd2FyZHMgY29tcGF0
aWJpbGl0eSB3aXRoIHN5bWJpYW4gYnVpbGQgc3lzdGVtCisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCB2aXJ0dWFsTWVtb3J5UmVzZXJ2YXRpb24gPSBKU0NDT0xMRUNUT1JfVklSVFVBTE1FTV9SRVNF
UlZBVElPTjsKKyNlbGlmIGRlZmluZWQoX19XSU5TX18pCisgICAgLy8gRW11bGF0b3IgaGFzIGxp
bWl0ZWQgdmlydHVhbCBhZGRyZXNzIHNwYWNlCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCB2aXJ0
dWFsTWVtb3J5UmVzZXJ2YXRpb24gPSAweDQwMDAwMDsKKyNlbHNlCisgICAgLy8gSFcgaGFzIHBs
ZW50eSBvZiB2aXJ0dWFsIGFkZHJlc3NlcworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgdmlydHVh
bE1lbW9yeVJlc2VydmF0aW9uID0gMHg4MDAwMDAwOworI2VuZGlmCit9OworCit0ZW1wbGF0ZTxz
aXplX3QgYmxvY2tTaXplPiBjbGFzcyBBbGlnbmVkTWVtb3J5OwordGVtcGxhdGU8c2l6ZV90IGJs
b2NrU2l6ZT4gY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKKworI2lmIEhBVkUoQUxJR05F
RF9BTExPQ0FURSkKKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2NsYXNzIEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3I7CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+CitjbGFzcyBBbGln
bmVkTWVtb3J5IHsKK3B1YmxpYzoKKyAgICB2b2lkIGRlYWxsb2NhdGUoKTsKKyAgICB2b2lkKiBi
YXNlKCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0
b3I8YmxvY2tTaXplPjsKKworICAgIEFsaWduZWRNZW1vcnkoUGFnZUFsbG9jYXRpb24pOworCisg
ICAgUGFnZUFsbG9jYXRpb24gbV9hbGxvY2F0aW9uOworfTsKKwordGVtcGxhdGU8c2l6ZV90IGJs
b2NrU2l6ZT4KK2NsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IgeworcHVibGljOgorICAgIHZv
aWQgZGVzdHJveSgpOworICAgIEFsaWduZWRNZW1vcnk8YmxvY2tTaXplPiBhbGxvY2F0ZSgpOwor
fTsKKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2lubGluZSB2b2lkIEFsaWduZWRNZW1v
cnlBbGxvY2F0b3I8YmxvY2tTaXplPjo6ZGVzdHJveSgpCit7Cit9CisKK3RlbXBsYXRlPHNpemVf
dCBibG9ja1NpemU+CitpbmxpbmUgQWxpZ25lZE1lbW9yeTxibG9ja1NpemU+IEFsaWduZWRNZW1v
cnlBbGxvY2F0b3I8YmxvY2tTaXplPjo6YWxsb2NhdGUoKQoreworICAgIHJldHVybiBBbGlnbmVk
TWVtb3J5PGJsb2NrU2l6ZT4oUGFnZUFsbG9jYXRpb246OmFsbG9jYXRlQWxpZ25lZChibG9ja1Np
emUpKTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2lubGluZSB2b2lkIEFsaWdu
ZWRNZW1vcnk8YmxvY2tTaXplPjo6ZGVhbGxvY2F0ZSgpCit7CisgICAgbV9hbGxvY2F0aW9uLmRl
YWxsb2NhdGUoKTsKK30KKwordGVtcGxhdGU8c2l6ZV90IGJsb2NrU2l6ZT4KK2lubGluZSB2b2lk
KiBBbGlnbmVkTWVtb3J5PGJsb2NrU2l6ZT46OmJhc2UoKQoreworICAgIHJldHVybiBtX2FsbG9j
YXRpb24uYmFzZSgpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPgoraW5saW5lIEFs
aWduZWRNZW1vcnk8YmxvY2tTaXplPjo6QWxpZ25lZE1lbW9yeShQYWdlQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uKQorICAgIDogbV9hbGxvY2F0aW9uKGFsbG9jYXRpb24pCit7Cit9CisKKyNlbHNlCisK
K3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+CitjbGFzcyBBbGlnbmVkTWVtb3J5IHsKK3B1Ymxp
YzoKKyAgICB2b2lkIGRlYWxsb2NhdGUoKTsKKyAgICB2b2lkKiBiYXNlKCk7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I8YmxvY2tTaXplPjsKKwor
ICAgIEFsaWduZWRNZW1vcnkodm9pZCogYmFzZSwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjxibG9j
a1NpemU+KiBhbGxvY2F0b3IpOworCisgICAgdm9pZCogbV9iYXNlOworICAgIEFsaWduZWRNZW1v
cnlBbGxvY2F0b3I8YmxvY2tTaXplPiogbV9hbGxvY2F0b3I7Cit9OworCit0ZW1wbGF0ZTxzaXpl
X3QgYmxvY2tTaXplPgorY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciB7CitwdWJsaWM6Cisg
ICAgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcigpOworICAgIH5BbGlnbmVkTWVtb3J5QWxsb2NhdG9y
KCk7CisKKyAgICB2b2lkIGRlc3Ryb3koKTsKKyAgICBBbGlnbmVkTWVtb3J5PGJsb2NrU2l6ZT4g
YWxsb2NhdGUoKTsKKyAgICB2b2lkIGZyZWUoQWxpZ25lZE1lbW9yeTxibG9ja1NpemU+KTsKKwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHJlc2VydmF0aW9uU2l6ZSA9IEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3JDb25zdGFudHM6OnZpcnR1YWxNZW1vcnlSZXNlcnZhdGlvbjsKKyAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJpdG1hcFNpemUgPSByZXNlcnZhdGlvblNpemUgLyBibG9j
a1NpemU7CisKKyAgICBQYWdlQWxsb2NhdGlvbiBtX3Jlc2VydmF0aW9uOworICAgIHNpemVfdCBt
X25leHRGcmVlOworICAgIHVpbnRwdHJfdCBtX3Jlc2VydmF0aW9uQmFzZTsKKyAgICBXVEY6OkJp
dG1hcDxiaXRtYXBTaXplPiBtX2JpdG1hcDsKK307CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1Np
emU+CitBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPGJsb2NrU2l6ZT46OkFsaWduZWRNZW1vcnlBbGxv
Y2F0b3IoKQorICAgIDogbV9yZXNlcnZhdGlvbihQYWdlQWxsb2NhdGlvbjo6cmVzZXJ2ZShyZXNl
cnZhdGlvblNpemUgKyBibG9ja1NpemUpKQorICAgICwgbV9uZXh0RnJlZSgwKQoreworICAgIC8v
IGNoZWNrIHRoYXQgYmxvY2tTaXplIGFuZCByZXNlcnZhdGlvblNpemUgYXJlIHBvd2VycyBvZiB0
d28KKyAgICBBU1NFUlQoIShibG9ja1NpemUgJiAoYmxvY2tTaXplIC0gMSkpKTsKKyAgICBBU1NF
UlQoIShyZXNlcnZhdGlvblNpemUgJiAocmVzZXJ2YXRpb25TaXplIC0gMSkpKTsKKworICAgIC8v
IGNoZWNrIHRoYXQgYmxvY2tTaXplIGlzIGEgbXVsdGlwbGUgb2YgcGFnZVNpemUgYW5kIHRoYXQK
KyAgICAvLyByZXNlcnZhdGlvblNpemUgaXMgYSBtdWx0aXBsZSBvZiBibG9ja1NpemUKKyAgICBB
U1NFUlQoIShibG9ja1NpemUgJiAoUGFnZUFsbG9jYXRpb246OnBhZ2VzaXplKCkgLSAxKSkpOwor
ICAgIEFTU0VSVCghKHJlc2VydmF0aW9uU2l6ZSAmIChibG9ja1NpemUgLSAxKSkpOworCisgICAg
QVNTRVJUKG1fcmVzZXJ2YXRpb24pOworCisgICAgbV9yZXNlcnZhdGlvbkJhc2UgPSByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOworICAgIG1fcmVzZXJ2
YXRpb25CYXNlID0gKG1fcmVzZXJ2YXRpb25CYXNlICsgYmxvY2tTaXplKSAmIH4oYmxvY2tTaXpl
IC0gMSk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+CitBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yPGJsb2NrU2l6ZT46On5BbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkKK3sKKyAgICBkZXN0
cm95KCk7CisgICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7Cit9CisKK3RlbXBsYXRlPHNp
emVfdCBibG9ja1NpemU+CitpbmxpbmUgdm9pZCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPGJsb2Nr
U2l6ZT46OmRlc3Ryb3koKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiaXRtYXBT
aXplOyArK2kpIHsKKyAgICAgICAgaWYgKG1fYml0bWFwLmdldChpKSkgeworICAgICAgICAgICAg
dm9pZCogYmxvY2tBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9yZXNlcnZhdGlv
bkJhc2UgKyBtX25leHRGcmVlICogYmxvY2tTaXplKTsKKyAgICAgICAgICAgIG1fcmVzZXJ2YXRp
b24uZGVjb21taXQoYmxvY2tBZGRyZXNzLCBibG9ja1NpemUpOworCisgICAgICAgICAgICBtX2Jp
dG1hcC5jbGVhcihpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGU8c2l6ZV90IGJs
b2NrU2l6ZT4KK0FsaWduZWRNZW1vcnk8YmxvY2tTaXplPiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9y
PGJsb2NrU2l6ZT46OmFsbG9jYXRlKCkKK3sKKyAgICB3aGlsZSAobV9uZXh0RnJlZSA8IGJpdG1h
cFNpemUpIHsKKyAgICAgICAgaWYgKCFtX2JpdG1hcC5nZXQobV9uZXh0RnJlZSkpIHsKKyAgICAg
ICAgICAgIHZvaWQqIGJsb2NrQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fcmVz
ZXJ2YXRpb25CYXNlICsgbV9uZXh0RnJlZSAqIGJsb2NrU2l6ZSk7CisgICAgICAgICAgICBtX3Jl
c2VydmF0aW9uLmNvbW1pdChibG9ja0FkZHJlc3MsIGJsb2NrU2l6ZSk7CisKKyAgICAgICAgICAg
IG1fYml0bWFwLnNldChtX25leHRGcmVlKTsKKyAgICAgICAgICAgICsrbV9uZXh0RnJlZTsKKwor
ICAgICAgICAgICAgcmV0dXJuIEFsaWduZWRNZW1vcnk8YmxvY2tTaXplPihibG9ja0FkZHJlc3Ms
IHRoaXMpOworICAgICAgICB9CisgICAgICAgIG1fYml0bWFwLmFkdmFuY2VUb05leHRGcmVlQml0
KG1fbmV4dEZyZWUpOworICAgIH0KKworICAgIGlmIChtX2JpdG1hcC5pc0Z1bGwoKSkKKyAgICAg
ICAgcmV0dXJuIEFsaWduZWRNZW1vcnk8YmxvY2tTaXplPigwLCB0aGlzKTsKKworICAgIG1fbmV4
dEZyZWUgPSAwOworCisgICAgcmV0dXJuIGFsbG9jYXRlKCk7Cit9CisKK3RlbXBsYXRlPHNpemVf
dCBibG9ja1NpemU+Cit2b2lkIEFsaWduZWRNZW1vcnlBbGxvY2F0b3I8YmxvY2tTaXplPjo6ZnJl
ZShBbGlnbmVkTWVtb3J5PGJsb2NrU2l6ZT4gYWxsb2NhdGlvbikKK3sKKyAgICBBU1NFUlQoYWxs
b2NhdGlvbi5iYXNlKCkpOworICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQoYWxsb2NhdGlvbi5i
YXNlKCksIGJsb2NrU2l6ZSk7CisKKyAgICBzaXplX3QgZGlmZiA9IChyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oYWxsb2NhdGlvbi5iYXNlKCkpIC0gbV9yZXNlcnZhdGlvbkJhc2UpOworICAg
IEFTU0VSVCghKGRpZmYgJiAoYmxvY2tTaXplIC0gMSkpKTsKKworICAgIHNpemVfdCBpID0gZGlm
ZiAvIGJsb2NrU2l6ZTsKKyAgICBBU1NFUlQobV9iaXRtYXAuZ2V0KGkpKTsKKworICAgIG1fYml0
bWFwLmNsZWFyKGkpOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPgoraW5saW5lIHZv
aWQgQWxpZ25lZE1lbW9yeTxibG9ja1NpemU+OjpkZWFsbG9jYXRlKCkKK3sKKyAgICBtX2FsbG9j
YXRvci0+ZnJlZSgqdGhpcyk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+Citpbmxp
bmUgdm9pZCogQWxpZ25lZE1lbW9yeTxibG9ja1NpemU+OjpiYXNlKCkKK3sKKyAgICByZXR1cm4g
bV9iYXNlOworfQorCit0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPgorQWxpZ25lZE1lbW9yeTxi
bG9ja1NpemU+OjpBbGlnbmVkTWVtb3J5KHZvaWQqIGJhc2UsIEFsaWduZWRNZW1vcnlBbGxvY2F0
b3I8YmxvY2tTaXplPiogYWxsb2NhdG9yKQorICAgIDogbV9iYXNlKGJhc2UpCisgICAgLCBtX2Fs
bG9jYXRvcihhbGxvY2F0b3IpCit7Cit9CisKKyNlbmRpZgorCit9CisKKyNlbmRpZgpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAkocmV2aXNpb24gNjQ2MDkpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw5
ICsxMzYsNiBAQCBIZWFwOjpIZWFwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICAsIG1f
cmVnaXN0ZXJlZFRocmVhZHMoMCkKICAgICAsIG1fY3VycmVudFRocmVhZFJlZ2lzdHJhcigwKQog
I2VuZGlmCi0jaWYgT1MoU1lNQklBTikKLSAgICAsIG1fYmxvY2thbGxvY2F0b3IoSlNDQ09MTEVD
VE9SX1ZJUlRVQUxNRU1fUkVTRVJWQVRJT04sIEJMT0NLX1NJWkUpCi0jZW5kaWYKICAgICAsIG1f
Z2xvYmFsRGF0YShnbG9iYWxEYXRhKQogewogICAgIEFTU0VSVChnbG9iYWxEYXRhKTsKQEAgLTE4
Niw2MyArMTgzLDE3IEBAIHZvaWQgSGVhcDo6ZGVzdHJveSgpCiAgICAgICAgIHQgPSBuZXh0Owog
ICAgIH0KICNlbmRpZgotI2lmIE9TKFNZTUJJQU4pCiAgICAgbV9ibG9ja2FsbG9jYXRvci5kZXN0
cm95KCk7Ci0jZW5kaWYKICAgICBtX2dsb2JhbERhdGEgPSAwOwogfQogCiBORVZFUl9JTkxJTkUg
Q29sbGVjdG9yQmxvY2sqIEhlYXA6OmFsbG9jYXRlQmxvY2soKQogewotI2lmIE9TKERBUldJTikK
LSAgICB2bV9hZGRyZXNzX3QgYWRkcmVzcyA9IDA7Ci0gICAgdm1fbWFwKGN1cnJlbnRfdGFzaygp
LCAmYWRkcmVzcywgQkxPQ0tfU0laRSwgQkxPQ0tfT0ZGU0VUX01BU0ssIFZNX0ZMQUdTX0FOWVdI
RVJFIHwgVk1fVEFHX0ZPUl9DT0xMRUNUT1JfTUVNT1JZLCBNRU1PUllfT0JKRUNUX05VTEwsIDAs
IEZBTFNFLCBWTV9QUk9UX0RFRkFVTFQsIFZNX1BST1RfREVGQVVMVCwgVk1fSU5IRVJJVF9ERUZB
VUxUKTsKLSNlbGlmIE9TKFNZTUJJQU4pCi0gICAgdm9pZCogYWRkcmVzcyA9IG1fYmxvY2thbGxv
Y2F0b3IuYWxsb2MoKTsgIAotICAgIGlmICghYWRkcmVzcykKLSAgICAgICAgQ1JBU0goKTsKLSNl
bGlmIE9TKFdJTkNFKQotICAgIHZvaWQqIGFkZHJlc3MgPSBWaXJ0dWFsQWxsb2MoTlVMTCwgQkxP
Q0tfU0laRSwgTUVNX0NPTU1JVCB8IE1FTV9SRVNFUlZFLCBQQUdFX1JFQURXUklURSk7Ci0jZWxp
ZiBPUyhXSU5ET1dTKQotI2lmIENPTVBJTEVSKE1JTkdXKSAmJiAhQ09NUElMRVIoTUlOR1c2NCkK
LSAgICB2b2lkKiBhZGRyZXNzID0gX19taW5nd19hbGlnbmVkX21hbGxvYyhCTE9DS19TSVpFLCBC
TE9DS19TSVpFKTsKLSNlbHNlCi0gICAgdm9pZCogYWRkcmVzcyA9IF9hbGlnbmVkX21hbGxvYyhC
TE9DS19TSVpFLCBCTE9DS19TSVpFKTsKLSNlbmRpZgotICAgIG1lbXNldChhZGRyZXNzLCAwLCBC
TE9DS19TSVpFKTsKLSNlbGlmIEhBVkUoUE9TSVhfTUVNQUxJR04pCi0gICAgdm9pZCogYWRkcmVz
czsKLSAgICBwb3NpeF9tZW1hbGlnbigmYWRkcmVzcywgQkxPQ0tfU0laRSwgQkxPQ0tfU0laRSk7
Ci0jZWxzZQotCi0jaWYgRU5BQkxFKEpTQ19NVUxUSVBMRV9USFJFQURTKQotI2Vycm9yIE5lZWQg
dG8gaW5pdGlhbGl6ZSBwYWdlc2l6ZSBzYWZlbHkuCi0jZW5kaWYKLSAgICBzdGF0aWMgc2l6ZV90
IHBhZ2VzaXplID0gZ2V0cGFnZXNpemUoKTsKLQotICAgIHNpemVfdCBleHRyYSA9IDA7Ci0gICAg
aWYgKEJMT0NLX1NJWkUgPiBwYWdlc2l6ZSkKLSAgICAgICAgZXh0cmEgPSBCTE9DS19TSVpFIC0g
cGFnZXNpemU7Ci0KLSAgICB2b2lkKiBtbWFwUmVzdWx0ID0gbW1hcChOVUxMLCBCTE9DS19TSVpF
ICsgZXh0cmEsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04s
IC0xLCAwKTsKLSAgICB1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihtbWFwUmVzdWx0KTsKLQotICAgIHNpemVfdCBhZGp1c3QgPSAwOwotICAgIGlmICgoYWRk
cmVzcyAmIEJMT0NLX09GRlNFVF9NQVNLKSAhPSAwKQotICAgICAgICBhZGp1c3QgPSBCTE9DS19T
SVpFIC0gKGFkZHJlc3MgJiBCTE9DS19PRkZTRVRfTUFTSyk7Ci0KLSAgICBpZiAoYWRqdXN0ID4g
MCkKLSAgICAgICAgbXVubWFwKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFkZHJlc3MpLCBhZGp1
c3QpOwotCi0gICAgaWYgKGFkanVzdCA8IGV4dHJhKQotICAgICAgICBtdW5tYXAocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oYWRkcmVzcyArIGFkanVzdCArIEJMT0NLX1NJWkUpLCBleHRyYSAtIGFk
anVzdCk7Ci0KLSAgICBhZGRyZXNzICs9IGFkanVzdDsKLSNlbmRpZgorICAgIEFsaWduZWRCbG9j
ayBhbGxvY2F0aW9uID0gbV9ibG9ja2FsbG9jYXRvci5hbGxvY2F0ZSgpOworICAgIENvbGxlY3Rv
ckJsb2NrKiBibG9jayA9IHN0YXRpY19jYXN0PENvbGxlY3RvckJsb2NrKj4oYWxsb2NhdGlvbi5i
YXNlKCkpOwogCiAgICAgLy8gSW5pdGlhbGl6ZSBibG9jay4KIAotICAgIENvbGxlY3RvckJsb2Nr
KiBibG9jayA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29sbGVjdG9yQmxvY2sqPihhZGRyZXNzKTsKICAg
ICBibG9jay0+aGVhcCA9IHRoaXM7CiAgICAgY2xlYXJNYXJrQml0cyhibG9jayk7CiAKQEAgLTI1
NCwxNCArMjA1LDE0IEBAIE5FVkVSX0lOTElORSBDb2xsZWN0b3JCbG9jayogSGVhcDo6YWxsb2MK
IAogICAgIHNpemVfdCBudW1CbG9ja3MgPSBtX2hlYXAubnVtQmxvY2tzOwogICAgIGlmIChtX2hl
YXAudXNlZEJsb2NrcyA9PSBudW1CbG9ja3MpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBtYXhOdW1CbG9ja3MgPSBVTE9OR19NQVggLyBzaXplb2YoQ29sbGVjdG9yQmxvY2sqKSAvIEdS
T1dUSF9GQUNUT1I7CisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4TnVtQmxvY2tzID0g
VUxPTkdfTUFYIC8gc2l6ZW9mKEFsaWduZWRCbG9jaykgLyBHUk9XVEhfRkFDVE9SOwogICAgICAg
ICBpZiAobnVtQmxvY2tzID4gbWF4TnVtQmxvY2tzKQogICAgICAgICAgICAgQ1JBU0goKTsKICAg
ICAgICAgbnVtQmxvY2tzID0gbWF4KE1JTl9BUlJBWV9TSVpFLCBudW1CbG9ja3MgKiBHUk9XVEhf
RkFDVE9SKTsKICAgICAgICAgbV9oZWFwLm51bUJsb2NrcyA9IG51bUJsb2NrczsKLSAgICAgICAg
bV9oZWFwLmJsb2NrcyA9IHN0YXRpY19jYXN0PENvbGxlY3RvckJsb2NrKio+KGZhc3RSZWFsbG9j
KG1faGVhcC5ibG9ja3MsIG51bUJsb2NrcyAqIHNpemVvZihDb2xsZWN0b3JCbG9jayopKSk7Cisg
ICAgICAgIG1faGVhcC5ibG9ja3MgPSBzdGF0aWNfY2FzdDxBbGlnbmVkQmxvY2sqPihmYXN0UmVh
bGxvYyhtX2hlYXAuYmxvY2tzLCBudW1CbG9ja3MgKiBzaXplb2YoQWxpZ25lZEJsb2NrKSkpOwog
ICAgIH0KLSAgICBtX2hlYXAuYmxvY2tzW21faGVhcC51c2VkQmxvY2tzKytdID0gYmxvY2s7Cisg
ICAgbV9oZWFwLmJsb2Nrc1ttX2hlYXAudXNlZEJsb2NrcysrXSA9IGFsbG9jYXRpb247CiAKICAg
ICByZXR1cm4gYmxvY2s7CiB9CkBAIC0yNzQsNyArMjI1LDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQg
SGVhcDo6ZnJlZUJsb2NrKHNpemVfdAogICAgIE9iamVjdEl0ZXJhdG9yIGVuZChtX2hlYXAsIGJs
b2NrICsgMSk7CiAgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICgqaXQpLT5+
SlNDZWxsKCk7Ci0gICAgZnJlZUJsb2NrUHRyKG1faGVhcC5ibG9ja3NbYmxvY2tdKTsKKyAgICBt
X2hlYXAuYmxvY2tzW2Jsb2NrXS5kZWFsbG9jYXRlKCk7CiAKICAgICAvLyBzd2FwIHdpdGggdGhl
IGxhc3QgYmxvY2sgc28gd2UgY29tcGFjdCBhcyB3ZSBnbwogICAgIG1faGVhcC5ibG9ja3NbYmxv
Y2tdID0gbV9oZWFwLmJsb2Nrc1ttX2hlYXAudXNlZEJsb2NrcyAtIDFdOwpAQCAtMjgyLDMxICsy
MzMsMTAgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSGVhcDo6ZnJlZUJsb2NrKHNpemVfdAogCiAgICAg
aWYgKG1faGVhcC5udW1CbG9ja3MgPiBNSU5fQVJSQVlfU0laRSAmJiBtX2hlYXAudXNlZEJsb2Nr
cyA8IG1faGVhcC5udW1CbG9ja3MgLyBMT1dfV0FURVJfRkFDVE9SKSB7CiAgICAgICAgIG1faGVh
cC5udW1CbG9ja3MgPSBtX2hlYXAubnVtQmxvY2tzIC8gR1JPV1RIX0ZBQ1RPUjsgCi0gICAgICAg
IG1faGVhcC5ibG9ja3MgPSBzdGF0aWNfY2FzdDxDb2xsZWN0b3JCbG9jayoqPihmYXN0UmVhbGxv
YyhtX2hlYXAuYmxvY2tzLCBtX2hlYXAubnVtQmxvY2tzICogc2l6ZW9mKENvbGxlY3RvckJsb2Nr
KikpKTsKKyAgICAgICAgbV9oZWFwLmJsb2NrcyA9IHN0YXRpY19jYXN0PEFsaWduZWRCbG9jayo+
KGZhc3RSZWFsbG9jKG1faGVhcC5ibG9ja3MsIG1faGVhcC5udW1CbG9ja3MgKiBzaXplb2YoQWxp
Z25lZEJsb2NrKSkpOwogICAgIH0KIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSGVhcDo6ZnJlZUJs
b2NrUHRyKENvbGxlY3RvckJsb2NrKiBibG9jaykKLXsKLSNpZiBPUyhEQVJXSU4pICAgIAotICAg
IHZtX2RlYWxsb2NhdGUoY3VycmVudF90YXNrKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVz
c190PihibG9jayksIEJMT0NLX1NJWkUpOwotI2VsaWYgT1MoU1lNQklBTikKLSAgICBtX2Jsb2Nr
YWxsb2NhdG9yLmZyZWUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmxvY2spKTsKLSNlbGlmIE9T
KFdJTkNFKQotICAgIFZpcnR1YWxGcmVlKGJsb2NrLCAwLCBNRU1fUkVMRUFTRSk7Ci0jZWxpZiBP
UyhXSU5ET1dTKQotI2lmIENPTVBJTEVSKE1JTkdXKSAmJiAhQ09NUElMRVIoTUlOR1c2NCkKLSAg
ICBfX21pbmd3X2FsaWduZWRfZnJlZShibG9jayk7Ci0jZWxzZQotICAgIF9hbGlnbmVkX2ZyZWUo
YmxvY2spOwotI2VuZGlmCi0jZWxpZiBIQVZFKFBPU0lYX01FTUFMSUdOKQotICAgIGZyZWUoYmxv
Y2spOwotI2Vsc2UKLSAgICBtdW5tYXAocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYmxvY2spLCBC
TE9DS19TSVpFKTsKLSNlbmRpZgotfQotCiB2b2lkIEhlYXA6OmZyZWVCbG9ja3MoKQogewogICAg
IFByb3RlY3RDb3VudFNldCBwcm90ZWN0ZWRWYWx1ZXNDb3B5ID0gbV9wcm90ZWN0ZWRWYWx1ZXM7
CkBAIC0zMzAsNyArMjYwLDcgQEAgdm9pZCBIZWFwOjpmcmVlQmxvY2tzKCkKICAgICAgICAgaXQt
PmZpcnN0LT5+SlNDZWxsKCk7CiAKICAgICBmb3IgKHNpemVfdCBibG9jayA9IDA7IGJsb2NrIDwg
bV9oZWFwLnVzZWRCbG9ja3M7ICsrYmxvY2spCi0gICAgICAgIGZyZWVCbG9ja1B0cihtX2hlYXAu
YmxvY2tzW2Jsb2NrXSk7CisgICAgICAgIG1faGVhcC5ibG9ja3NbYmxvY2tdLmRlYWxsb2NhdGUo
KTsKIAogICAgIGZhc3RGcmVlKG1faGVhcC5ibG9ja3MpOwogCkBAIC0zODMsNyArMzEzLDcgQEAg
YWxsb2NhdGU6CiAKICAgICBkbyB7CiAgICAgICAgIEFTU0VSVChtX2hlYXAubmV4dEJsb2NrIDwg
bV9oZWFwLnVzZWRCbG9ja3MpOwotICAgICAgICBCbG9jayogYmxvY2sgPSByZWludGVycHJldF9j
YXN0PEJsb2NrKj4obV9oZWFwLmJsb2Nrc1ttX2hlYXAubmV4dEJsb2NrXSk7CisgICAgICAgIEJs
b2NrKiBibG9jayA9IG1faGVhcC5jb2xsZWN0b3JCbG9jayhtX2hlYXAubmV4dEJsb2NrKTsKICAg
ICAgICAgZG8gewogICAgICAgICAgICAgQVNTRVJUKG1faGVhcC5uZXh0Q2VsbCA8IEhlYXBDb25z
dGFudHM6OmNlbGxzUGVyQmxvY2spOwogICAgICAgICAgICAgaWYgKCFibG9jay0+bWFya2VkLmdl
dChtX2hlYXAubmV4dENlbGwpKSB7IC8vIEFsd2F5cyBmYWxzZSBmb3IgdGhlIGxhc3QgY2VsbCBp
biB0aGUgYmxvY2sKQEAgLTQzOCwxMCArMzY4LDEwIEBAIHZvaWQgSGVhcDo6c2hyaW5rQmxvY2tz
KHNpemVfdCBuZWVkZWRCbG8KICAgICAKICAgICAvLyBDbGVhciB0aGUgYWx3YXlzLW9uIGxhc3Qg
Yml0LCBzbyBpc0VtcHR5KCkgaXNuJ3QgZm9vbGVkIGJ5IGl0LgogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9oZWFwLnVzZWRCbG9ja3M7ICsraSkKLSAgICAgICAgbV9oZWFwLmJsb2Nrc1tp
XS0+bWFya2VkLmNsZWFyKEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxvY2sgLSAxKTsKKyAgICAg
ICAgbV9oZWFwLmNvbGxlY3RvckJsb2NrKGkpLT5tYXJrZWQuY2xlYXIoSGVhcENvbnN0YW50czo6
Y2VsbHNQZXJCbG9jayAtIDEpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gbV9oZWFw
LnVzZWRCbG9ja3MgJiYgbV9oZWFwLnVzZWRCbG9ja3MgIT0gbmVlZGVkQmxvY2tzOyApIHsKLSAg
ICAgICAgaWYgKG1faGVhcC5ibG9ja3NbaV0tPm1hcmtlZC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
aWYgKG1faGVhcC5jb2xsZWN0b3JCbG9jayhpKS0+bWFya2VkLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgZnJlZUJsb2NrKGkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICsraTsKQEAg
LTQ0OSw3ICszNzksNyBAQCB2b2lkIEhlYXA6OnNocmlua0Jsb2NrcyhzaXplX3QgbmVlZGVkQmxv
CiAKICAgICAvLyBSZXNldCB0aGUgYWx3YXlzLW9uIGxhc3QgYml0LgogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9oZWFwLnVzZWRCbG9ja3M7ICsraSkKLSAgICAgICAgbV9oZWFwLmJsb2Nr
c1tpXS0+bWFya2VkLnNldChIZWFwQ29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSk7CisgICAg
ICAgIG1faGVhcC5jb2xsZWN0b3JCbG9jayhpKS0+bWFya2VkLnNldChIZWFwQ29uc3RhbnRzOjpj
ZWxsc1BlckJsb2NrIC0gMSk7CiB9CiAKICNpZiBPUyhXSU5DRSkKQEAgLTc0NCw3ICs2NzQsNiBA
QCB2b2lkIEhlYXA6Om1hcmtDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smCiAgICAgY2hhcioqIHAg
PSBzdGF0aWNfY2FzdDxjaGFyKio+KHN0YXJ0KTsKICAgICBjaGFyKiogZSA9IHN0YXRpY19jYXN0
PGNoYXIqKj4oZW5kKTsKIAotICAgIENvbGxlY3RvckJsb2NrKiogYmxvY2tzID0gbV9oZWFwLmJs
b2NrczsKICAgICB3aGlsZSAocCAhPSBlKSB7CiAgICAgICAgIGNoYXIqIHggPSAqcCsrOwogICAg
ICAgICBpZiAoaXNQb3NzaWJsZUNlbGwoeCkpIHsKQEAgLTc2MCw3ICs2ODksNyBAQCB2b2lkIEhl
YXA6Om1hcmtDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smCiAgICAgICAgICAgICBDb2xsZWN0b3JC
bG9jayogYmxvY2tBZGRyID0gcmVpbnRlcnByZXRfY2FzdDxDb2xsZWN0b3JCbG9jayo+KHhBc0Jp
dHMgLSBvZmZzZXQpOwogICAgICAgICAgICAgdXNlZEJsb2NrcyA9IG1faGVhcC51c2VkQmxvY2tz
OwogICAgICAgICAgICAgZm9yIChzaXplX3QgYmxvY2sgPSAwOyBibG9jayA8IHVzZWRCbG9ja3M7
IGJsb2NrKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2tzW2Jsb2NrXSAhPSBibG9ja0Fk
ZHIpCisgICAgICAgICAgICAgICAgaWYgKG1faGVhcC5jb2xsZWN0b3JCbG9jayhibG9jaykgIT0g
YmxvY2tBZGRyKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICBtYXJrU3RhY2suYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oeEFzQml0cykpOwog
ICAgICAgICAgICAgICAgIG1hcmtTdGFjay5kcmFpbigpOwpAQCAtMTAwOSw3ICs5MzgsNyBAQCB2
b2lkIEhlYXA6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKE1hcmtTdGFjCiB2b2lkIEhlYXA6OmNsZWFy
TWFya0JpdHMoKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9oZWFwLnVzZWRCbG9j
a3M7ICsraSkKLSAgICAgICAgY2xlYXJNYXJrQml0cyhtX2hlYXAuYmxvY2tzW2ldKTsKKyAgICAg
ICAgY2xlYXJNYXJrQml0cyhtX2hlYXAuY29sbGVjdG9yQmxvY2soaSkpOwogfQogCiB2b2lkIEhl
YXA6OmNsZWFyTWFya0JpdHMoQ29sbGVjdG9yQmxvY2sqIGJsb2NrKQpAQCAtMTAyOCw5ICs5NTcs
OSBAQCBzaXplX3QgSGVhcDo6bWFya2VkQ2VsbHMoc2l6ZV90IHN0YXJ0QmxvCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gICAgcmVzdWx0ICs9IG1faGVhcC5i
bG9ja3Nbc3RhcnRCbG9ja10tPm1hcmtlZC5jb3VudChzdGFydENlbGwpOworICAgIHJlc3VsdCAr
PSBtX2hlYXAuY29sbGVjdG9yQmxvY2soc3RhcnRCbG9jayktPm1hcmtlZC5jb3VudChzdGFydENl
bGwpOwogICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEJsb2NrICsgMTsgaSA8IG1faGVhcC51c2Vk
QmxvY2tzOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSBtX2hlYXAuYmxvY2tzW2ldLT5tYXJrZWQu
Y291bnQoKTsKKyAgICAgICAgcmVzdWx0ICs9IG1faGVhcC5jb2xsZWN0b3JCbG9jayhpKS0+bWFy
a2VkLmNvdW50KCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db2xsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbGxlY3Rvci5oCShyZXZpc2lvbiA2NDYwOSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29sbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEzICsyMiwxNiBAQAogI2lmbmRl
ZiBDb2xsZWN0b3JfaAogI2RlZmluZSBDb2xsZWN0b3JfaAogCisjaW5jbHVkZSAiQWxpZ25lZE1l
bW9yeUFsbG9jYXRvci5oIgogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPHN0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRlIDx3dGYvRml4ZWRBcnJheS5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KQEAgLTM3LDEwICs0MCw2IEBACiAjaW5jbHVkZSA8cHRocmVhZC5oPgogI2VuZGlmCiAK
LSNpZiBPUyhTWU1CSUFOKQotI2luY2x1ZGUgPHd0Zi9zeW1iaWFuL0Jsb2NrQWxsb2NhdG9yU3lt
Ymlhbi5oPgotI2VuZGlmCi0KICNkZWZpbmUgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChjbGFz
cykgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKGNsYXNzKSA8PSBDRUxMX1NJWkUsIGNsYXNzX2ZpdHNf
aW5fY2VsbCkKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01NywxMCArNTYsMTkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBMaXZlT2JqZWN0SXRlcmF0b3I7CiAKKyNpZiBPUyhXSU5DRSkg
fHwgT1MoU1lNQklBTikKKyAgICBjb25zdCBzaXplX3QgQkxPQ0tfU0laRSA9IDY0ICogMTAyNDsg
Ly8gNjRrCisjZWxzZQorICAgIGNvbnN0IHNpemVfdCBCTE9DS19TSVpFID0gNjQgKiA0MDk2OyAv
LyAyNTZrCisjZW5kaWYKKworICAgIHR5cGVkZWYgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjxCTE9D
S19TSVpFPiBBbGlnbmVkQWxsb2NhdG9yOworICAgIHR5cGVkZWYgQWxpZ25lZE1lbW9yeTxCTE9D
S19TSVpFPiBBbGlnbmVkQmxvY2s7CisKICAgICBzdHJ1Y3QgQ29sbGVjdG9ySGVhcCB7CiAgICAg
ICAgIHNpemVfdCBuZXh0QmxvY2s7CiAgICAgICAgIHNpemVfdCBuZXh0Q2VsbDsKLSAgICAgICAg
Q29sbGVjdG9yQmxvY2sqKiBibG9ja3M7CisgICAgICAgIEFsaWduZWRCbG9jayogYmxvY2tzOwog
ICAgICAgICAKICAgICAgICAgdm9pZCogbmV4dE51bWJlcjsKIApAQCAtNzEsNiArNzksMTEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgZGlkU2hyaW5rOwogCiAgICAgICAgIE9wZXJh
dGlvbkluUHJvZ3Jlc3Mgb3BlcmF0aW9uSW5Qcm9ncmVzczsKKworICAgICAgICBDb2xsZWN0b3JC
bG9jayogY29sbGVjdG9yQmxvY2soc2l6ZV90IGluZGV4KSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29sbGVjdG9yQmxvY2sqPihibG9ja3NbaW5kZXhd
LmJhc2UoKSk7CisgICAgICAgIH0KICAgICB9OwogCiAgICAgY2xhc3MgSGVhcCA6IHB1YmxpYyBO
b25jb3B5YWJsZSB7CkBAIC0xNDAsNyArMTUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgTkVWRVJfSU5MSU5FIENvbGxlY3RvckJsb2NrKiBhbGxvY2F0ZUJsb2NrKCk7CiAgICAgICAg
IE5FVkVSX0lOTElORSB2b2lkIGZyZWVCbG9jayhzaXplX3QpOwotICAgICAgICBORVZFUl9JTkxJ
TkUgdm9pZCBmcmVlQmxvY2tQdHIoQ29sbGVjdG9yQmxvY2sqKTsKICAgICAgICAgdm9pZCBmcmVl
QmxvY2tzKCk7CiAgICAgICAgIHZvaWQgcmVzaXplQmxvY2tzKCk7CiAgICAgICAgIHZvaWQgZ3Jv
d0Jsb2NrcyhzaXplX3QgbmVlZGVkQmxvY2tzKTsKQEAgLTE4MSwyMSArMTkzLDEzIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBwdGhyZWFkX2tleV90IG1fY3VycmVudFRocmVhZFJlZ2lzdHJh
cjsKICNlbmRpZgogCi0jaWYgT1MoU1lNQklBTikKICAgICAgICAgLy8gQWxsb2NhdGVzIGNvbGxl
Y3RvciBibG9ja3Mgd2l0aCBjb3JyZWN0IGFsaWdubWVudAotICAgICAgICBXVEY6OkFsaWduZWRC
bG9ja0FsbG9jYXRvciBtX2Jsb2NrYWxsb2NhdG9yOyAKLSNlbmRpZgorICAgICAgICBBbGlnbmVk
QWxsb2NhdG9yIG1fYmxvY2thbGxvY2F0b3I7IAogICAgICAgICAKICAgICAgICAgSlNHbG9iYWxE
YXRhKiBtX2dsb2JhbERhdGE7CiAgICAgfTsKIAogICAgIC8vIHR1bmFibGUgcGFyYW1ldGVycwot
I2lmIE9TKFdJTkNFKSB8fCBPUyhTWU1CSUFOKQotICAgIGNvbnN0IHNpemVfdCBCTE9DS19TSVpF
ID0gNjQgKiAxMDI0OyAvLyA2NGsKLSNlbHNlCi0gICAgY29uc3Qgc2l6ZV90IEJMT0NLX1NJWkUg
PSA2NCAqIDQwOTY7IC8vIDI1NmsKLSNlbmRpZgotCiAgICAgLy8gZGVyaXZlZCBjb25zdGFudHMK
ICAgICBjb25zdCBzaXplX3QgQkxPQ0tfT0ZGU0VUX01BU0sgPSBCTE9DS19TSVpFIC0gMTsKICAg
ICBjb25zdCBzaXplX3QgQkxPQ0tfTUFTSyA9IH5CTE9DS19PRkZTRVRfTUFTSzsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3JIZWFwSXRlcmF0b3IuaAkocmV2aXNp
b24gNjQ2MDkpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgaW5saW5lIEpTQ2VsbCogQ29sbGVjdG9ySGVhcEl0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJm1faGVh
cC5ibG9ja3NbbV9ibG9ja10tPmNlbGxzW21fY2VsbF0pOworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxKU0NlbGwqPigmbV9oZWFwLmNvbGxlY3RvckJsb2NrKG1fYmxvY2spLT5jZWxs
c1ttX2NlbGxdKTsKICAgICB9CiAgICAgCiAgICAgLy8gSXRlcmF0b3JzIGFkdmFuY2UgdXAgdG8g
dGhlIG5leHQtdG8tbGFzdCAtLSBhbmQgbm90IHRoZSBsYXN0IC0tIGNlbGwgaW4gYQpAQCAtMTAz
LDcgKzEwMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpZiAobV9ibG9jayA8IG1faGVh
cC5uZXh0QmxvY2sgfHwgKG1fYmxvY2sgPT0gbV9oZWFwLm5leHRCbG9jayAmJiBtX2NlbGwgPCBt
X2hlYXAubmV4dENlbGwpKQogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgICAgIHdo
aWxlIChtX2Jsb2NrIDwgbV9oZWFwLnVzZWRCbG9ja3MgJiYgIW1faGVhcC5ibG9ja3NbbV9ibG9j
a10tPm1hcmtlZC5nZXQobV9jZWxsKSkKKyAgICAgICAgd2hpbGUgKG1fYmxvY2sgPCBtX2hlYXAu
dXNlZEJsb2NrcyAmJiAhbV9oZWFwLmNvbGxlY3RvckJsb2NrKG1fYmxvY2spLT5tYXJrZWQuZ2V0
KG1fY2VsbCkpCiAgICAgICAgICAgICBhZHZhbmNlKEhlYXBDb25zdGFudHM6OmNlbGxzUGVyQmxv
Y2sgLSAxKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KQEAgLTExOSw3ICsxMTksNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZG8gewogICAgICAgICAgICAgYWR2YW5jZShIZWFw
Q29uc3RhbnRzOjpjZWxsc1BlckJsb2NrIC0gMSk7CiAgICAgICAgICAgICBBU1NFUlQobV9ibG9j
ayA+IG1faGVhcC5uZXh0QmxvY2sgfHwgKG1fYmxvY2sgPT0gbV9oZWFwLm5leHRCbG9jayAmJiBt
X2NlbGwgPj0gbV9oZWFwLm5leHRDZWxsKSk7Ci0gICAgICAgIH0gd2hpbGUgKG1fYmxvY2sgPCBt
X2hlYXAudXNlZEJsb2NrcyAmJiBtX2hlYXAuYmxvY2tzW21fYmxvY2tdLT5tYXJrZWQuZ2V0KG1f
Y2VsbCkpOworICAgICAgICB9IHdoaWxlIChtX2Jsb2NrIDwgbV9oZWFwLnVzZWRCbG9ja3MgJiYg
bV9oZWFwLmNvbGxlY3RvckJsb2NrKG1fYmxvY2spLT5tYXJrZWQuZ2V0KG1fY2VsbCkpOwogICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvQml0
bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL0JpdG1hcC5oCShyZXZpc2lv
biAwKQorKysgSmF2YVNjcmlwdENvcmUvd3RmL0JpdG1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEyMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisjaWZuZGVm
IEJpdG1hcF9oCisjZGVmaW5lIEJpdG1hcF9oCisKKyNpbmNsdWRlICJGaXhlZEFycmF5LmgiCisj
aW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTxz
aXplX3Qgc2l6ZT4KK2NsYXNzIEJpdG1hcCB7Citwcml2YXRlOgorICAgIHR5cGVkZWYgdWludDMy
X3QgV29yZFR5cGU7CisKK3B1YmxpYzoKKyAgICBib29sIGdldChzaXplX3QpIGNvbnN0OworICAg
IHZvaWQgc2V0KHNpemVfdCk7CisgICAgdm9pZCBjbGVhcihzaXplX3QpOworICAgIHZvaWQgY2xl
YXJBbGwoKTsKKyAgICB2b2lkIGFkdmFuY2VUb05leHRGcmVlQml0KHNpemVfdCYpIGNvbnN0Owor
ICAgIHNpemVfdCBjb3VudChzaXplX3QgPSAwKSBjb25zdDsKKyAgICBzaXplX3QgaXNFbXB0eSgp
IGNvbnN0OworICAgIHNpemVfdCBpc0Z1bGwoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGF0
aWMgY29uc3QgV29yZFR5cGUgd29yZFNpemUgPSBzaXplb2YoV29yZFR5cGUpICogODsKKyAgICBz
dGF0aWMgY29uc3QgV29yZFR5cGUgd29yZHMgPSAoc2l6ZSArIHdvcmRTaXplIC0gMSkgLyB3b3Jk
U2l6ZTsKKworICAgIC8vIHRoZSBsaXRlcmFsICcxJyBpcyBvZiB0eXBlIHNpZ25lZCBpbnQuICBX
ZSB3YW50IHRvIHVzZSBhbiB1bnNpZ25lZAorICAgIC8vIHZlcnNpb24gb2YgdGhlIGNvcnJlY3Qg
c2l6ZSB3aGVuIGRvaW5nIHRoZSBjYWxjdWxhdGlvbnMgYmVjYXVzZSBpZgorICAgIC8vIFdvcmRU
eXBlIGlzIGxhcmdlciB0aGFuIGludCwgJzEgPDwgMzEnIHdpbGwgZmlyc3QgYmUgc2lnbiBleHRl
bmRlZAorICAgIC8vIGFuZCB0aGVuIGNhc3RlZCB0byB1bnNpZ25lZCwgbWVhbmluZyB0aGF0IHNl
dCgzMSkgd2hlbiBXb3JkVHlwZSBpcworICAgIC8vIGEgNjQgYml0IHVuc2lnbmVkIGludCB3b3Vs
ZCBnaXZlIDB4ZmZmZjgwMDAKKyAgICBzdGF0aWMgY29uc3QgV29yZFR5cGUgb25lID0gMTsKKwor
ICAgIEZpeGVkQXJyYXk8V29yZFR5cGUsIHdvcmRzPiBiaXRzOworfTsKKwordGVtcGxhdGU8c2l6
ZV90IHNpemU+CitpbmxpbmUgYm9vbCBCaXRtYXA8c2l6ZT46OmdldChzaXplX3QgbikgY29uc3QK
K3sKKyAgICByZXR1cm4gISEoYml0c1tuIC8gd29yZFNpemVdICYgKG9uZSA8PCAobiAlIHdvcmRT
aXplKSkpOworfQorCit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4KK2lubGluZSB2b2lkIEJpdG1hcDxz
aXplPjo6c2V0KHNpemVfdCBuKQoreworICAgIGJpdHNbbiAvIHdvcmRTaXplXSB8PSAob25lIDw8
IChuICUgd29yZFNpemUpKTsKK30KKwordGVtcGxhdGU8c2l6ZV90IHNpemU+CitpbmxpbmUgdm9p
ZCBCaXRtYXA8c2l6ZT46OmNsZWFyKHNpemVfdCBuKQoreworICAgIGJpdHNbbiAvIHdvcmRTaXpl
XSAmPSB+KG9uZSA8PCAobiAlIHdvcmRTaXplKSk7Cit9CisKK3RlbXBsYXRlPHNpemVfdCBzaXpl
PgoraW5saW5lIHZvaWQgQml0bWFwPHNpemU+OjpjbGVhckFsbCgpCit7CisgICAgbWVtc2V0KGJp
dHMuZGF0YSgpLCAwLCBzaXplb2YoYml0cykpOworfQorCit0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4K
K2lubGluZSB2b2lkIEJpdG1hcDxzaXplPjo6YWR2YW5jZVRvTmV4dEZyZWVCaXQoc2l6ZV90JiBz
dGFydCkgY29uc3QKK3sKKyAgICBpZiAoIX5iaXRzW3N0YXJ0IC8gd29yZFNpemVdKQorICAgICAg
ICBzdGFydCA9ICgoc3RhcnQgLyB3b3JkU2l6ZSkgKyAxKSAqIHdvcmRTaXplOworICAgIGVsc2UK
KyAgICAgICAgKytzdGFydDsKK30KKwordGVtcGxhdGU8c2l6ZV90IHNpemU+CitpbmxpbmUgc2l6
ZV90IEJpdG1hcDxzaXplPjo6Y291bnQoc2l6ZV90IHN0YXJ0KSBjb25zdAoreworICAgIHNpemVf
dCByZXN1bHQgPSAwOworICAgIGZvciAoIDsgKHN0YXJ0ICUgd29yZFNpemUpOyArK3N0YXJ0KSB7
CisgICAgICAgIGlmIChnZXQoc3RhcnQpKQorICAgICAgICAgICAgKytyZXN1bHQ7CisgICAgfQor
ICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydCAvIHdvcmRTaXplOyBpIDwgd29yZHM7ICsraSkKKyAg
ICAgICAgcmVzdWx0ICs9IFdURjo6Yml0Q291bnQoYml0c1tpXSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordGVtcGxhdGU8c2l6ZV90IHNpemU+CitpbmxpbmUgc2l6ZV90IEJpdG1hcDxzaXpl
Pjo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3Jkczsg
KytpKQorICAgICAgICBpZiAoYml0c1tpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8c2l6ZV90IHNpemU+CitpbmxpbmUgc2l6ZV90
IEJpdG1hcDxzaXplPjo6aXNGdWxsKCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHdvcmRzOyArK2kpCisgICAgICAgIGlmICh+Yml0c1tpXSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorI2VuZGlmCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS93dGYvUGFnZUFsbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS93dGYvUGFnZUFsbG9jYXRpb24uaAkocmV2aXNpb24gNjQ2MDkpCisrKyBKYXZhU2NyaXB0Q29y
ZS93dGYvUGFnZUFsbG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNTEgQEAK
ICNkZWZpbmUgUEFHRV9BTExPQ0FUSU9OX0FMTE9DQVRFX0FUIDAKICNlbmRpZgogCisjaWYgSEFW
RShNTUFQKQorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5k
aWYKKworI2lmIE9TKERBUldJTikKKworI2luY2x1ZGUgPG1hY2gvbWFjaF9pbml0Lmg+CisjaW5j
bHVkZSA8bWFjaC9tYWNoX3BvcnQuaD4KKyNpbmNsdWRlIDxtYWNoL3Rhc2suaD4KKyNpbmNsdWRl
IDxtYWNoL3RocmVhZF9hY3QuaD4KKyNpbmNsdWRlIDxtYWNoL3ZtX21hcC5oPgorCisjZWxpZiBP
UyhXSU5ET1dTKQorCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgor
CisjZWxpZiBPUyhIQUlLVSkKKworI2luY2x1ZGUgPE9TLmg+CisKKyNlbGlmIE9TKFVOSVgpCisK
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2lmIE9TKFNPTEFSSVMpCisjaW5jbHVkZSA8dGhyZWFk
Lmg+CisjZWxzZQorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZgorCisjaWYgSEFWRShQVEhS
RUFEX05QX0gpCisjaW5jbHVkZSA8cHRocmVhZF9ucC5oPgorI2VuZGlmCisKKyNpZiBPUyhRTlgp
CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlv
Lmg+CisjaW5jbHVkZSA8c3lzL3Byb2Nmcy5oPgorI2VuZGlmCisKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV1RGIHsKIAogY2xhc3MgUGFnZUFsbG9jYXRpb24gewpAQCAtODIsNiArMTI3LDEyIEBAIHB1
YmxpYzoKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9iYXNlOyB9CisjaWYgQ09NUElMRVIo
V0lOU0NXKQorICAgIG9wZXJhdG9yIGJvb2wgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9CisjZWxz
ZQorICAgIHR5cGVkZWYgdm9pZCogUGFnZUFsbG9jYXRpb246OipVbnNwZWNpZmllZEJvb2xUeXBl
OworICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jh
c2UgPyAmUGFnZUFsbG9jYXRpb246Om1fYmFzZSA6IDA7IH0KKyNlbmRpZgogCiAgICAgYm9vbCBj
b21taXQodm9pZCosIHNpemVfdCwgYm9vbCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhlY3V0YWJs
ZSA9IGZhbHNlKSBjb25zdDsKICAgICB2b2lkIGRlY29tbWl0KHZvaWQqLCBzaXplX3QpIGNvbnN0
OwpAQCAtOTMsNiArMTQ0LDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFnZUFsbG9jYXRpb24g
YWxsb2NhdGVBdCh2b2lkKiBhZGRyZXNzLCBib29sIGZpeGVkLCBzaXplX3QsIFVzYWdlID0gVW5r
bm93blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2Up
OwogICAgIHN0YXRpYyBQYWdlQWxsb2NhdGlvbiByZXNlcnZlQXQodm9pZCogYWRkcmVzcywgYm9v
bCBmaXhlZCwgc2l6ZV90LCBVc2FnZSA9IFVua25vd25Vc2FnZSwgYm9vbCB3cml0YWJsZSA9IHRy
dWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNlKTsKICNlbmRpZgorCisjaWYgSEFWRShBTElHTkVE
X0FMTE9DQVRFKQorICAgIHN0YXRpYyBQYWdlQWxsb2NhdGlvbiBhbGxvY2F0ZUFsaWduZWQoc2l6
ZV90LCBVc2FnZSA9IFVua25vd25Vc2FnZSwgYm9vbCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhl
Y3V0YWJsZSA9IGZhbHNlKTsKKyNlbmRpZgorCiAgICAgc3RhdGljIHNpemVfdCBwYWdlc2l6ZSgp
OwogCiBwcml2YXRlOgpAQCAtMTE4LDYgKzE3NCw4OSBAQCBwcml2YXRlOgogI2VuZGlmCiB9Owog
CisjaWYgSEFWRShBTElHTkVEX0FMTE9DQVRFKQorCisjaWYgT1MoREFSV0lOKQorCitpbmxpbmUg
UGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246OmFsbG9jYXRlQWxpZ25lZChzaXplX3Qgc2l6
ZSwgVXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKK3sKKyAgICBBU1NFUlQo
IShzaXplICYgKHNpemUgLSAxKSkpOworICAgIHZtX2FkZHJlc3NfdCBhZGRyZXNzID0gMDsKKyAg
ICB2bV9wcm90X3QgcHJvdGVjdGlvbiA9IFZNX1BST1RfUkVBRDsKKyAgICBwcm90ZWN0aW9uIHw9
IGV4ZWN1dGFibGUgPyBWTV9QUk9UX0VYRUNVVEUgOiAwOworICAgIHByb3RlY3Rpb24gfD0gd3Jp
dGFibGUgPyBWTV9QUk9UX1dSSVRFIDogMDsKKyAgICB2bV9tYXAoY3VycmVudF90YXNrKCksICZh
ZGRyZXNzLCBzaXplLCAoc2l6ZSAtIDEpLCBWTV9GTEFHU19BTllXSEVSRSB8IFZNX1RBR19GT1Jf
Q09MTEVDVE9SX01FTU9SWSwgTUVNT1JZX09CSkVDVF9OVUxMLCAwLCBGQUxTRSwgcHJvdGVjdGlv
biwgcHJvdGVjdGlvbiwgVk1fSU5IRVJJVF9ERUZBVUxUKTsKKyAgICByZXR1cm4gUGFnZUFsbG9j
YXRpb24ocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkcmVzcyksIHNpemUpOworfQorCisjZWxp
ZiBPUyhXSU5ET1dTKQorCitpbmxpbmUgUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246OmFs
bG9jYXRlQWxpZ25lZChzaXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJv
b2wgZXhlY3V0YWJsZSkKK3sKKyAgICBBU1NFUlQod3JpdGFibGUgJiYgIWV4ZWN1dGFibGUpOwor
I2lmIENPTVBJTEVSKE1JTkdXKSAmJiAhQ09NUElMRVIoTUlOR1c2NCkKKyAgICB2b2lkKiBhZGRy
ZXNzID0gX19taW5nd19hbGlnbmVkX21hbGxvYyhzaXplLCBzaXplKTsKKyNlbHNlCisgICAgdm9p
ZCogYWRkcmVzcyA9IF9hbGlnbmVkX21hbGxvYyhzaXplLCBzaXplKTsKKyNlbmRpZgorICAgIG1l
bXNldChhZGRyZXNzLCAwLCBzaXplKTsKKyAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24oYWRkcmVz
cywgc2l6ZSk7Cit9CisKKyNlbGlmIEhBVkUoUE9TSVhfTUVNQUxJR04pCisKK2lubGluZSBQYWdl
QWxsb2NhdGlvbiBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVkKHNpemVfdCBzaXplLCBV
c2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIEFTU0VS
VCh3cml0YWJsZSAmJiAhZXhlY3V0YWJsZSk7CisKKyAgICB2b2lkKiBhZGRyZXNzOworICAgIHBv
c2l4X21lbWFsaWduKCZhZGRyZXNzLCBzaXplLCBzaXplKTsKKyAgICByZXR1cm4gUGFnZUFsbG9j
YXRpb24oYWRkcmVzcywgc2l6ZSk7Cit9CisKKyNlbGlmIEhBVkUoTU1BUCkKKworaW5saW5lIFBh
Z2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZUFsaWduZWQoc2l6ZV90IHNpemUs
IFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCit7CisgICAgQVNT
RVJUKCEoc2l6ZSAmIChzaXplIC0gMSkpKTsKKyAgICBBU1NFUlQod3JpdGFibGUgJiYgIWV4ZWN1
dGFibGUpOworICAgIHN0YXRpYyBzaXplX3QgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOworCisg
ICAgc2l6ZV90IGV4dHJhID0gMDsKKyAgICBpZiAoc2l6ZSA+IHBhZ2VzaXplKQorICAgICAgICBl
eHRyYSA9IHNpemUgLSBwYWdlc2l6ZTsKKworICAgIGludCBmbGFncyA9IE1BUF9QUklWQVRFIHwg
TUFQX0FOT047CisKKyAgICBpbnQgcHJvdGVjdGlvbiA9IFBST1RfUkVBRDsKKyAgICBpZiAod3Jp
dGFibGUpCisgICAgICAgIHByb3RlY3Rpb24gfD0gUFJPVF9XUklURTsKKyAgICBpZiAoZXhlY3V0
YWJsZSkKKyAgICAgICAgcHJvdGVjdGlvbiB8PSBQUk9UX0VYRUM7CisKKyAgICAvLyB1c2UgcGFn
ZSBhbGxvY2F0aW9uCisgICAgdm9pZCogbW1hcFJlc3VsdCA9IG1tYXAoMCwgc2l6ZSArIGV4dHJh
LCBwcm90ZWN0aW9uLCBmbGFncywgdXNhZ2UsIDApOworICAgIHVpbnRwdHJfdCBhZGRyZXNzID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1tYXBSZXN1bHQpOworCisgICAgc2l6ZV90IGFk
anVzdCA9IDA7CisgICAgaWYgKChhZGRyZXNzICYgKHNpemUgLSAxKSkpCisgICAgICAgIGFkanVz
dCA9IHNpemUgLSAoYWRkcmVzcyAmIChzaXplIC0gMSkpOworCisgICAgaWYgKGFkanVzdCA+IDAp
CisgICAgICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PGNoYXIqPihhZGRyZXNzKSwgYWRqdXN0
KTsKKworICAgIGlmIChhZGp1c3QgPCBleHRyYSkKKyAgICAgICAgbXVubWFwKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGFkZHJlc3MgKyBhZGp1c3QgKyBzaXplKSwgZXh0cmEgLSBhZGp1c3QpOwor
CisgICAgYWRkcmVzcyArPSBhZGp1c3Q7CisKKyAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24ocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkcmVzcyksIHNpemUpOworfQorCisjZW5kaWYKKworI2Vu
ZGlmCisKIH0KIAogdXNpbmcgV1RGOjpQYWdlQWxsb2NhdGlvbjsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0
Zm9ybS5oCShyZXZpc2lvbiA2NDYwOSkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MDgsNiArNzA4LDcgQEAKICNkZWZpbmUgSEFWRV9FUlJOT19I
IDEKICNkZWZpbmUgSEFWRV9MQU5HSU5GT19IIDEKICNkZWZpbmUgSEFWRV9NTUFQIDEKKyNkZWZp
bmUgSEFWRV9BTElHTkVEX0FMTE9DQVRFIDEKICNkZWZpbmUgSEFWRV9NRVJHRVNPUlQgMQogI2Rl
ZmluZSBIQVZFX1NCUksgMQogI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCkBAIC03MzYsOCArNzM3
LDEwIEBACiAKICNpZiBPUyhXSU5DRSkKICNkZWZpbmUgSEFWRV9FUlJOT19IIDAKKyNkZWZpbmUg
SEFWRV9BTElHTkVEX0FMTE9DQVRFIDAKICNlbHNlCiAjZGVmaW5lIEhBVkVfU1lTX1RJTUVCX0gg
MQorI2RlZmluZSBIQVZFX0FMSUdORURfQUxMT0NBVEUgMQogI2VuZGlmCiAjZGVmaW5lIEhBVkVf
VklSVFVBTEFMTE9DIDEKIApAQCAtNzk0LDYgKzc5NywxNCBAQAogCiAjZW5kaWYKIAorI2lmICFk
ZWZpbmVkKEhBVkVfQUxJR05FRF9BTExPQ0FURSkKKyNpZiBIQVZFKFBPU0lYX01FTUFMSUdOKQor
I2RlZmluZSBIQVZFX0FMSUdORURfQUxMT0NBVEUgMQorI2Vsc2UKKyNkZWZpbmUgSEFWRV9BTElH
TkVEX0FMTE9DQVRFIDAKKyNlbmRpZgorI2VuZGlmCisKIC8qIEVOQUJMRSBtYWNybyBkZWZhdWx0
cyAqLwogCiAjaWYgUExBVEZPUk0oUVQpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvc3ltYmlh
bi9CbG9ja0FsbG9jYXRvclN5bWJpYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3d0Zi9zeW1iaWFuL0Jsb2NrQWxsb2NhdG9yU3ltYmlhbi5jcHAJKHJldmlzaW9uIDY0NjA5KQor
KysgSmF2YVNjcmlwdENvcmUvd3RmL3N5bWJpYW4vQmxvY2tBbGxvY2F0b3JTeW1iaWFuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBPUyhTWU1CSUFOKQotCi0jaW5jbHVkZSAiQmxvY2tBbGxvY2F0
b3JTeW1iaWFuLmgiCi0KLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8qKiBFZmZpY2llbnRseSBhbGxv
Y2F0ZXMgYmxvY2tzIG9mIHNpemUgYmxvY2tTaXplIHdpdGggYmxvY2tTaXplIGFsaWdubWVudC4g
Ci0gKiBQcmltYXJseSBkZXNpZ25lZCBmb3IgSlNDIENvbGxlY3RvcidzIG5lZWRzLiAKLSAqIE5v
dCB0aHJlYWQtc2FmZS4gICAgCi0gKi8KLUFsaWduZWRCbG9ja0FsbG9jYXRvcjo6QWxpZ25lZEJs
b2NrQWxsb2NhdG9yKFRVaW50MzIgcmVzZXJ2YXRpb25TaXplLCBUVWludDMyIGJsb2NrU2l6ZSAp
Ci0gICAgOiBtX3Jlc2VydmF0aW9uKHJlc2VydmF0aW9uU2l6ZSksIAotICAgICAgbV9ibG9ja1Np
emUoYmxvY2tTaXplKQotewotCi0gICAgIC8vIEdldCBzeXN0ZW0ncyBwYWdlIHNpemUgdmFsdWUu
Ci0gICAgIFNZTUJJQU5fUEFHRVNJWkUobV9wYWdlU2l6ZSk7IAotICAgICAKLSAgICAgLy8gV2Ug
b25seSBhY2NlcHQgbXVsdGlwbGVzIG9mIHN5c3RlbSBwYWdlIHNpemUgZm9yIGJvdGggaW5pdGlh
bCByZXNlcnZhdGlvbiBhbmQgdGhlIGFsaWdubWVudC9ibG9jayBzaXplCi0gICAgIG1fcmVzZXJ2
YXRpb24gPSBTWU1CSUFOX1JPVU5EVVBUT01VTFRJUExFKG1fcmVzZXJ2YXRpb24sIG1fcGFnZVNp
emUpOwotICAgICBfX0FTU0VSVF9BTFdBWVMoU1lNQklBTl9ST1VORFVQVE9NVUxUSVBMRShtX2Js
b2NrU2l6ZSwgbV9wYWdlU2l6ZSksIFVzZXI6OlBhbmljKF9MKCJBbGlnbmVkQmxvY2tBbGxvY2F0
b3IxIiksIEtFcnJBcmd1bWVudCkpOwotICAgICAKLSAgICAgLy8gQ2FsY3VsYXRlIG1heC4gYml0
IGZsYWdzIHdlIG5lZWQgdG8gY2FydmUgYSByZXNlcnZhdGlvblNpemUgcmFuZ2UgaW50byBibG9j
a1NpemUtc2l6ZWQgYmxvY2tzCi0gICAgIG1fbWFwLm51bUJpdHMgPSBtX3Jlc2VydmF0aW9uIC8g
bV9ibG9ja1NpemU7ICAgCi0gICAgIGNvbnN0IFRVaW50MzIgYml0c1BlcldvcmQgPSA4KnNpemVv
ZihUVWludDMyKTsgCi0gICAgIGNvbnN0IFRVaW50MzIgbnVtV29yZHMgPSAobV9tYXAubnVtQml0
cyArIGJpdHNQZXJXb3JkIC0xKSAvIGJpdHNQZXJXb3JkOyAKLSAgIAotICAgICBtX21hcC5iaXRz
ID0gbmV3IFRVaW50MzJbbnVtV29yZHNdOwotICAgICBfX0FTU0VSVF9BTFdBWVMobV9tYXAuYml0
cywgVXNlcjo6UGFuaWMoX0woIkFsaWduZWRCbG9ja0FsbG9jYXRvcjIiKSwgS0Vyck5vTWVtb3J5
KSk7Ci0gICAgIG1fbWFwLmNsZWFyQWxsKCk7Ci0gICAgIAotICAgICAvLyBPcGVuIGEgU3ltYmlh
biBSQ2h1bmssIGFuZCByZXNlcnZlIHJlcXVlc3RlZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgICAK
LSAgICAgLy8gQW55IHRocmVhZCBpbiB0aGlzIHByb2Nlc3MgY2FuIG9wZXJhdGUgdGhpcyByY2h1
bmsgZHVlIHRvIEVPd25lclByb2Nlc3MgYWNjZXNzIHJpZ2h0cy4gCi0gICAgIFRJbnQgcmV0ID0g
bV9jaHVuay5DcmVhdGVEaXNjb25uZWN0ZWRMb2NhbCgwICwgMCwgKFRJbnQpbV9yZXNlcnZhdGlv
biAsIEVPd25lclByb2Nlc3MpOyAgCi0gICAgIGlmIChyZXQgIT0gS0Vyck5vbmUpIAotICAgICAg
ICAgVXNlcjo6UGFuaWMoX0woIkFsaWduZWRCbG9ja0FsbG9jYXRvcjMiKSwgcmV0KTsKLSAgICAg
ICAKLSAgICAgLy8gVGhpcyBpcyB0aGUgb2Zmc2V0IHRvIG1fY2h1bmsuQmFzZSgpIHJlcXVpcmVk
IHRvIG1ha2UgaXQgbV9ibG9ja1NpemUtYWxpZ25lZAotICAgICBtX29mZnNldCA9IFNZTUJJQU5f
Uk9VTkRVUFRPTVVMVElQTEUoVFVpbnQzMihtX2NodW5rLkJhc2UoKSksIG1fYmxvY2tTaXplKSAt
IFRVaW50KG1fY2h1bmsuQmFzZSgpKTsgCi0KLX0KLQotdm9pZCogQWxpZ25lZEJsb2NrQWxsb2Nh
dG9yOjphbGxvYygpCi17Ci0KLSAgICBUSW50ICBmcmVlUmFtID0gMDsgCi0gICAgdm9pZCogYWRk
cmVzcyA9IDA7Ci0gICAgCi0gICAgLy8gTG9vayB1cCBmaXJzdCBmcmVlIHNsb3QgaW4gYml0IG1h
cAotICAgIGNvbnN0IFRJbnQgZnJlZUlkeCA9IG1fbWFwLmZpbmRGcmVlKCk7Ci0gICAgICAgIAot
ICAgIC8vIFBzZXVkbyBPT006IFdlIGF0ZSB1cCB0aGUgYWRkcmVzcyBzcGFjZSB3ZSByZXNlcnZl
ZC4uCi0gICAgLy8gLi5ldmVuIHRob3VnaCB0aGUgZGV2aWNlIG1heSBoYXZlIGZyZWUgUkFNIGxl
ZnQKLSAgICBpZiAoZnJlZUlkeCA8IDApCi0gICAgICAgIHJldHVybiAwOwotICAgICAgICAKLSAg
ICBUSW50IHJldCA9IG1fY2h1bmsuQ29tbWl0KG1fb2Zmc2V0ICsgKG1fYmxvY2tTaXplICogZnJl
ZUlkeCksIG1fYmxvY2tTaXplKTsKLSAgICBpZiAocmV0ICE9IEtFcnJOb25lKSAgCi0gICAgICAg
IHJldHVybiAwOyAvLyBUcnVlIE9PTTogRGV2aWNlIGRpZG4ndCBoYXZlIHBoeXNpY2FsIFJBTSB0
byBzcGFyZQotICAgICAgICAKLSAgICAvLyBVcGRhdGVkIGJpdCB0byBtYXJrIHJlZ2lvbiBhcyBp
biB1c2UuIAotICAgIG1fbWFwLnNldChmcmVlSWR4KTsgCi0gICAgCi0gICAgLy8gQ2FsY3VsYXRl
IGFkZHJlc3Mgb2YgY29tbWl0dGVkIHJlZ2lvbiAoYmxvY2spCi0gICAgYWRkcmVzcyA9ICh2b2lk
KikoIChtX2NodW5rLkJhc2UoKSArIG1fb2Zmc2V0KSArIChUVWludCkobV9ibG9ja1NpemUgKiBm
cmVlSWR4KSApOwotICAgIAotICAgIHJldHVybiBhZGRyZXNzOwotfQotCi12b2lkIEFsaWduZWRC
bG9ja0FsbG9jYXRvcjo6ZnJlZSh2b2lkKiBibG9jaykKLXsKLSAgICAvLyBDYWxjdWxhdGUgaW5k
ZXggb2YgYmxvY2sgdG8gYmUgZnJlZWQKLSAgICBUSW50IGlkeCA9IFRVaW50KHN0YXRpY19jYXN0
PFRVaW50OCo+KGJsb2NrKSAtIG1fY2h1bmsuQmFzZSgpIC0gbV9vZmZzZXQpIC8gbV9ibG9ja1Np
emU7Ci0gICAgCi0gICAgX19BU1NFUlRfREVCVUcoaWR4ID49IDAgJiYgaWR4IDwgbV9tYXAubnVt
Qml0cywgVXNlcjo6UGFuaWMoX0woIkFsaWduZWRCbG9ja0FsbG9jYXRvcjQiKSwgS0VyckNvcnJ1
cHQpKTsgLy8gdmFsaWQgaW5kZXggY2hlY2sKLSAgICBfX0FTU0VSVF9ERUJVRyhtX21hcC5nZXQo
aWR4KSwgVXNlcjo6UGFuaWMoX0woIkFsaWduZWRCbG9ja0FsbG9jYXRvcjUiKSwgS0VyckNvcnJ1
cHQpKTsgLy8gaW4tdXNlIGZsYWcgY2hlY2sgICAgCi0gICAgCi0gICAgLy8gUmV0dXJuIGNvbW1p
dHRlZCByZWdpb24gdG8gc3lzdGVtIFJBTSBwb29sICh0aGUgcGh5c2ljYWwgUkFNIGJlY29tZXMg
dXNhYmxlIGJ5IG90aGVycykKLSAgICBUSW50IHJldCA9IG1fY2h1bmsuRGVjb21taXQobV9vZmZz
ZXQgKyBtX2Jsb2NrU2l6ZSAqIGlkeCwgbV9ibG9ja1NpemUpOwotICAgICAgICAgICAgCi0gICAg
Ly8gbWFyayB0aGlzIGF2YWlsYWJsZSBhZ2FpbgotICAgIG1fbWFwLmNsZWFyKGlkeCk7IAotfQot
Ci12b2lkIEFsaWduZWRCbG9ja0FsbG9jYXRvcjo6ZGVzdHJveSgpIAotewotICAgIC8vIHJlbGVh
c2UgZXZlcnl0aGluZyEKLSAgICBtX2NodW5rLkRlY29tbWl0KDAsIG1fY2h1bmsuTWF4U2l6ZSgp
KTsKLSAgICBtX21hcC5jbGVhckFsbCgpOwotfQotCi1BbGlnbmVkQmxvY2tBbGxvY2F0b3I6On5B
bGlnbmVkQmxvY2tBbGxvY2F0b3IoKQotewotICAgIGRlc3Ryb3koKTsKLSAgICBtX2NodW5rLkNs
b3NlKCk7Ci0gICAgZGVsZXRlIFtdIG1fbWFwLmJpdHM7Ci19Ci0KLX0gLy8gZW5kIG9mIG5hbWVz
cGFjZQotCi0jZW5kaWYgLy8gU1lNQklBTgpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL3N5bWJp
YW4vQmxvY2tBbGxvY2F0b3JTeW1iaWFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
d3RmL3N5bWJpYW4vQmxvY2tBbGxvY2F0b3JTeW1iaWFuLmgJKHJldmlzaW9uIDY0NjA5KQorKysg
SmF2YVNjcmlwdENvcmUvd3RmL3N5bWJpYW4vQmxvY2tBbGxvY2F0b3JTeW1iaWFuLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBCbG9j
a0FsbG9jYXRvclN5bWJpYW5faAotI2RlZmluZSBCbG9ja0FsbG9jYXRvclN5bWJpYW5faAotCi0j
aW5jbHVkZSA8ZTMyY21uLmg+Ci0jaW5jbHVkZSA8ZTMyc3RkLmg+Ci0jaW5jbHVkZSA8aGFsLmg+
Ci0KLQotI2RlZmluZSBTWU1CSUFOX1BBR0VTSVpFKHgpIChIQUw6OkdldChIQUxEYXRhOjpFTWVt
b3J5UGFnZVNpemUsIHgpKTsKLSNkZWZpbmUgU1lNQklBTl9GUkVFUkFNKHgpICAoSEFMOjpHZXQo
SEFMRGF0YTo6RU1lbW9yeVJBTUZyZWUsIHgpKTsKLSNkZWZpbmUgU1lNQklBTl9ST1VORFVQVE9N
VUxUSVBMRSh4LCBtdWx0aXBsZW9mKSAgICAoICh4ICsgbXVsdGlwbGVvZiAtIDEpICYgfihtdWx0
aXBsZW9mIC0gMSkgKQotCi0vLyBTZXQgc2FuZSBkZWZhdWx0cyBpZiAtRDxmbGFnbmFtZT12YWx1
ZT4gd2Fzbid0IHByb3ZpZGVkIHZpYSBjb21waWxlciBhcmdzCi0jaWZuZGVmIEpTQ0NPTExFQ1RP
Ul9WSVJUVUFMTUVNX1JFU0VSVkFUSU9OCi0jaWYgZGVmaW5lZChfX1dJTlNfXykgCi0gICAgLy8g
RW11bGF0b3IgaGFzIGxpbWl0ZWQgdmlydHVhbCBhZGRyZXNzIHNwYWNlCi0gICAgI2RlZmluZSBK
U0NDT0xMRUNUT1JfVklSVFVBTE1FTV9SRVNFUlZBVElPTiAoNCoxMDI0KjEwMjQpCi0jZWxzZQot
ICAgIC8vIEhXIGhhcyBwbGVudHkgb2YgdmlydHVhbCBhZGRyZXNzZXMKLSAgICAjZGVmaW5lIEpT
Q0NPTExFQ1RPUl9WSVJUVUFMTUVNX1JFU0VSVkFUSU9OICgxMjgqMTAyNCoxMDI0KQotI2VuZGlm
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdURiB7Ci0KLS8qKiAKLSAqICBBbGxvY2F0ZXMgY29udGln
dW91cyByZWdpb24gb2Ygc2l6ZSBibG9ja1NpemUgd2l0aCBibG9ja1NpemUtYWxpZ25lZCBhZGRy
ZXNzLiAKLSAqICBibG9ja1NpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHN5c3RlbSBwYWdlIHNp
emUgKHR5cGljYWxseSA0SyBvbiBTeW1iaWFuL0FSTSkKLSAqCi0gKiAgQHBhcmFtIHJlc2VydmF0
aW9uU2l6ZSBWaXJ0dWFsIGFkZHJlc3MgcmFuZ2UgdG8gYmUgcmVzZXJ2ZWQgdXBvbiBjcmVhdGlv
biBvZiBjaHVuayAoYnl0ZXMpLgotICogIEBwYXJhbSBibG9ja1NpemUgU2l6ZSBvZiBhIHNpbmds
ZSBhbGxvY2F0aW9uLiBSZXR1cm5lZCBhZGRyZXNzIHdpbGwgYWxzbyBiZSBibG9ja1NpemUtYWxp
Z25lZC4KLSAqLwotY2xhc3MgQWxpZ25lZEJsb2NrQWxsb2NhdG9yIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIEFsaWduZWRCbG9ja0FsbG9jYXRvcihUVWludDMyIHJlc2VydmF0aW9uU2l6ZSwgVFVp
bnQzMiBibG9ja1NpemUpOwotICAgICAgICB+QWxpZ25lZEJsb2NrQWxsb2NhdG9yKCk7Ci0gICAg
ICAgIHZvaWQgZGVzdHJveSgpOwotICAgICAgICB2b2lkKiBhbGxvYygpOwotICAgICAgICB2b2lk
IGZyZWUodm9pZCogZGF0YSk7Ci0gICAgCi0gICAgcHJpdmF0ZTogCi0gICAgICAgIFJDaHVuayAg
IG1fY2h1bms7IC8vIFN5bWJpYW4gY2h1bmsgdGhhdCBsZXRzIHVzIHJlc2VydmUvY29tbWl0L2Rl
Y29tbWl0Ci0gICAgICAgIFRVaW50ICAgIG1fb2Zmc2V0OyAvLyBvZmZzZXQgb2YgZmlyc3QgY29t
bWl0dGVkIHJlZ2lvbiBmcm9tIGJhc2UgCi0gICAgICAgIFRJbnQgICAgIG1fcGFnZVNpemU7IC8v
IGNhY2hlZCB2YWx1ZSBvZiBzeXN0ZW0gcGFnZSBzaXplLCB0eXBpY2FsbHkgNEsgb24gU3ltYmlh
bgotICAgICAgICBUVWludDMyICBtX3Jlc2VydmF0aW9uOwotICAgICAgICBUVWludDMyICBtX2Js
b2NrU2l6ZTsgIAotCi0gICAgICAgIC8vIFRyYWNrcyBjb21pdHRlZC9kZWNvbW1pdHRlZCBzdGF0
ZSBvZiBhIGJsb2NrU2l6ZSByZWdpb24KLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgVFVpbnQzMiAqYml0czsgLy8gYXJyYXkgb2YgYml0IGZsYWdzIAotICAgICAg
ICAgICAgVFVpbnQzMiAgbnVtQml0czsgLy8gbnVtYmVyIG9mIHJlZ2lvbnMgdG8ga2VlcCB0cmFj
ayBvZgotICAgICAgICAgICAgCi0gICAgICAgICAgICBib29sIGdldChUVWludDMyIG4pIGNvbnN0
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICEhKGJpdHNbbiA+PiA1XSAm
ICgxIDw8IChuICYgMHgxRikpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgdm9pZCBzZXQoVFVpbnQzMiBuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGJpdHNbbiA+PiA1XSB8PSAoMSA8PCAobiAmIDB4MUYpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgdm9pZCBjbGVhcihUVWludDMyIG4pCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgYml0c1tuID4+IDVdICY9IH4oMSA8PCAobiAmIDB4MUYpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgdm9pZCBjbGVhckFsbCgpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICBmb3IgKFRVaW50MzIgaSA9IDA7IGkgPCBudW1C
aXRzOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIGNsZWFyKGkpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBUSW50IGZpbmRGcmVlKCkgY29uc3QKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKFRVaW50MzIgaSA9IDA7IGkgPCBudW1CaXRzOyBp
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFnZXQoaSkpIAotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICB9IG1fbWFwOyAg
Ci0KLX07Ci0gCi19Ci0KLSNlbmRpZiAvLyBlbmQgb2YgQmxvY2tBbGxvY2F0b3JTeW1iaWFuX2gK
LQotCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvQml0bWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0JpdG1h
cC5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3Rm
L0JpdG1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQml0bWFwLmg+CkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9CaXRt
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9CaXRtYXAu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0JpdG1hcC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfQml0bWFw
X2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfQml0bWFwX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9CaXRtYXAuaD4KKyNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>