<?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>226237</bug_id>
          
          <creation_ts>2021-05-25 13:00:06 -0700</creation_ts>
          <short_desc>[bmalloc] Make adaptive scavenging more precise</short_desc>
          <delta_ts>2021-07-06 14:20:57 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>macOS 11</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>203987</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1763639</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-05-25 13:00:06 -0700</bug_when>
    <thetext>The adaptive scavenger introduced many more madvise() calls.  Some of those calls are expensive since the scavenger uses a conservative approach to madvise()&apos;ing.

Instead, we should minimize the range of the address space we madvise().  We can do this by keeping track of the allocated extent of large regions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763640</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-05-25 13:00:35 -0700</bug_when>
    <thetext>&lt;rdar://78188389&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763645</commentid>
    <comment_count>2</comment_count>
      <attachid>429685</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-05-25 13:13:02 -0700</bug_when>
    <thetext>Created attachment 429685
Work in progress patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763680</commentid>
    <comment_count>3</comment_count>
      <attachid>429685</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-05-25 14:12:54 -0700</bug_when>
    <thetext>Comment on attachment 429685
Work in progress patch

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

&gt; Source/bmalloc/ChangeLog:9
&gt; +        It also tries to be more precise when calling madvise() by keeping track

You can probably be less coy and say that it measured as 1000X more precise in practice -- due to the specific pathology of Gigacage.

&gt; Source/bmalloc/bmalloc/Heap.cpp:111
&gt; +#if 0
&gt; +    static unsigned initNoPhys = 0;
&gt; +#endif

revert

&gt; Source/bmalloc/bmalloc/Heap.cpp:253
&gt; -    m_largeFree.add(LargeRange(chunk, size, startPhysicalSize, totalPhysicalSize));
&gt; +    physicalExtent = totalPhysicalSize == size ? chunk-&gt;bytes() + totalPhysicalSize : physicalExtent;
&gt; +    m_largeFree.add(LargeRange(chunk, size, startPhysicalSize, totalPhysicalSize, physicalExtent));

I think it&apos;s always correct just to use physicalExtent, so let&apos;s do that to simplify.

Relatedly, I think there&apos;s a maybe-pre-existing bug here that&apos;s maybe worse now. When we first allocate a Chunk, there&apos;s code in allocateSmallChunk() that decommits any unused space at the beginning and end of the Chunk. But here we&apos;re telling the large free set that the whole Chunk is physical pages. That&apos;s wrong. We either need to stop decommitting those two pieces of the Chunk (I&apos;m not sure if that code accomplishes anything in practice or not), or change the physical pages reported here.

&gt; Source/bmalloc/bmalloc/LargeRange.h:90
&gt; +    // This the last address of physical memory in this range.

This the =&gt; This is the

&gt; Source/bmalloc/bmalloc/LargeRange.h:92
&gt; +    char* physicalExtent() const { return m_physicalExtent; }

Maybe call this physicalEnd? &apos;end&apos; is the word c++ usually uses for a pointer just past the end.

&gt; Source/bmalloc/bmalloc/LargeRange.h:94
&gt; +    void resetPhysicalExtent() { m_physicalExtent = begin(); }

reset =&gt; clear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763809</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-05-25 20:09:45 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #3)
&gt; Comment on attachment 429685 [details]
&gt; Work in progress patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=429685&amp;action=review
&gt; 
&gt; &gt; Source/bmalloc/ChangeLog:9
&gt; &gt; +        It also tries to be more precise when calling madvise() by keeping track
&gt; 
&gt; You can probably be less coy and say that it measured as 1000X more precise
&gt; in practice -- due to the specific pathology of Gigacage.
&gt; 
&gt; &gt; Source/bmalloc/bmalloc/Heap.cpp:111
&gt; &gt; +#if 0
&gt; &gt; +    static unsigned initNoPhys = 0;
&gt; &gt; +#endif
&gt; 
&gt; revert

Will do.  Was used for debugging.

&gt; &gt; Source/bmalloc/bmalloc/Heap.cpp:253
&gt; &gt; -    m_largeFree.add(LargeRange(chunk, size, startPhysicalSize, totalPhysicalSize));
&gt; &gt; +    physicalExtent = totalPhysicalSize == size ? chunk-&gt;bytes() + totalPhysicalSize : physicalExtent;
&gt; &gt; +    m_largeFree.add(LargeRange(chunk, size, startPhysicalSize, totalPhysicalSize, physicalExtent));
&gt; 
&gt; I think it&apos;s always correct just to use physicalExtent, so let&apos;s do that to
&gt; simplify.

Actually, the rounding up to totalPhysicalSize is needed.  Took me a little to find this bug.  Consider that the small chunk we are deallocating has a page class that doesn&apos;t work out to an even number of pages.  I found this with 12K page class size.  The calculated physical extent of the last page was 4K less (one page on x86) than totalPhysicalSize.  I think it is only an issue for the last page in the chunk.  This is the unused space at the end of the chunk in your next comment.

&gt; Relatedly, I think there&apos;s a maybe-pre-existing bug here that&apos;s maybe worse
&gt; now. When we first allocate a Chunk, there&apos;s code in allocateSmallChunk()
&gt; that decommits any unused space at the beginning and end of the Chunk. But
&gt; here we&apos;re telling the large free set that the whole Chunk is physical
&gt; pages. That&apos;s wrong. We either need to stop decommitting those two pieces of
&gt; the Chunk (I&apos;m not sure if that code accomplishes anything in practice or
&gt; not), or change the physical pages reported here.

So I think my change above takes care of the unused space at the end.  I&apos;ll look into the unused space at the beginning.  Maybe we need to rethink the handling of unused space on both sides of the chunk.

I think there is another bug here that I was going to address separately.  We calculate startPhysicalSize based on hasPhysicalPages.  The code above sets hasPhysicalPages to false for any page that doesn&apos;t have physical pages.  Seems to me that some page(s) at the end of the chunk could have been recommitted and will result in startPhysicalSize being set to 0.  I think the startPhysicalSize needs to be calculated based on how many pages at the front of the chunk still have physical memory.

&gt; &gt; Source/bmalloc/bmalloc/LargeRange.h:90
&gt; &gt; +    // This the last address of physical memory in this range.
&gt; 
&gt; This the =&gt; This is the

Fixed

&gt; &gt; Source/bmalloc/bmalloc/LargeRange.h:92
&gt; &gt; +    char* physicalExtent() const { return m_physicalExtent; }
&gt; 
&gt; Maybe call this physicalEnd? &apos;end&apos; is the word c++ usually uses for a
&gt; pointer just past the end.

Agree that physicalEnd is a better name.

&gt; &gt; Source/bmalloc/bmalloc/LargeRange.h:94
&gt; &gt; +    void resetPhysicalExtent() { m_physicalExtent = begin(); }
&gt; 
&gt; reset =&gt; clear

Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763815</commentid>
    <comment_count>5</comment_count>
      <attachid>429685</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-05-25 20:43:14 -0700</bug_when>
    <thetext>Comment on attachment 429685
Work in progress patch

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

&gt;&gt;&gt; Source/bmalloc/bmalloc/Heap.cpp:253
&gt;&gt;&gt; +    m_largeFree.add(LargeRange(chunk, size, startPhysicalSize, totalPhysicalSize, physicalExtent));
&gt;&gt; 
&gt;&gt; I think it&apos;s always correct just to use physicalExtent, so let&apos;s do that to simplify.
&gt;&gt; 
&gt;&gt; Relatedly, I think there&apos;s a maybe-pre-existing bug here that&apos;s maybe worse now. When we first allocate a Chunk, there&apos;s code in allocateSmallChunk() that decommits any unused space at the beginning and end of the Chunk. But here we&apos;re telling the large free set that the whole Chunk is physical pages. That&apos;s wrong. We either need to stop decommitting those two pieces of the Chunk (I&apos;m not sure if that code accomplishes anything in practice or not), or change the physical pages reported here.
&gt; 
&gt; Actually, the rounding up to totalPhysicalSize is needed.  Took me a little to find this bug.  Consider that the small chunk we are deallocating has a page class that doesn&apos;t work out to an even number of pages.  I found this with 12K page class size.  The calculated physical extent of the last page was 4K less (one page on x86) than totalPhysicalSize.  I think it is only an issue for the last page in the chunk.  This is the unused space at the end of the chunk in your next comment.

I don&apos;t understand. In the 12kB page size case, forEachPage should iterate all 12kB ranges, and then stop. If there&apos;s an 8kB range at the end of the Chunk, forEachPage should not iterate it. Can you explain more about what caused a 12kB page to look like an 8kB page in this code? Seems like it might be a bug we should fix some other way.

Here&apos;s another bug: physicalExtent is initialized to &apos;chunk&apos;, but a Chunk has physical pages at its head that contain metadata, so the minimum physicalExtent should actually be chunk + Chunk::metadataSize(pageSize). Getting this wrong will prevent us from decommitting Chunk metadata. This bug will trigger in the case where all pages are already decommitted, because physicalExtent will remain at its initial value.

Put another way, I think we need to make sure that physicalExtent is always correct; otherwise it is a liability. So, if there is a case where physicalExtent is calculated incorrectly, and then we fix it up by checking totalPhysicalSize, I&apos;d like to know more about that case, and I&apos;d like us to just calculate physicalExtent correctly instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763841</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-05-26 00:27:08 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #5)
&gt; Comment on attachment 429685 [details]
&gt; Work in progress patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=429685&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/bmalloc/bmalloc/Heap.cpp:253
&gt; &gt;&gt;&gt; +    m_largeFree.add(LargeRange(chunk, size, startPhysicalSize, totalPhysicalSize, physicalExtent));
&gt; &gt;&gt; 
&gt; &gt;&gt; I think it&apos;s always correct just to use physicalExtent, so let&apos;s do that to simplify.
&gt; &gt;&gt; 
&gt; &gt;&gt; Relatedly, I think there&apos;s a maybe-pre-existing bug here that&apos;s maybe worse now. When we first allocate a Chunk, there&apos;s code in allocateSmallChunk() that decommits any unused space at the beginning and end of the Chunk. But here we&apos;re telling the large free set that the whole Chunk is physical pages. That&apos;s wrong. We either need to stop decommitting those two pieces of the Chunk (I&apos;m not sure if that code accomplishes anything in practice or not), or change the physical pages reported here.
&gt; &gt; 
&gt; &gt; Actually, the rounding up to totalPhysicalSize is needed.  Took me a little to find this bug.  Consider that the small chunk we are deallocating has a page class that doesn&apos;t work out to an even number of pages.  I found this with 12K page class size.  The calculated physical extent of the last page was 4K less (one page on x86) than totalPhysicalSize.  I think it is only an issue for the last page in the chunk.  This is the unused space at the end of the chunk in your next comment.
&gt; 
&gt; I don&apos;t understand. In the 12kB page size case, forEachPage should iterate
&gt; all 12kB ranges, and then stop. If there&apos;s an 8kB range at the end of the
&gt; Chunk, forEachPage should not iterate it. Can you explain more about what
&gt; caused a 12kB page to look like an 8kB page in this code? Seems like it
&gt; might be a bug we should fix some other way.

In the 12Kb page size case, forEachPage does iterate through all 12Kb ranges.  There is 4Kb that wasn&apos;t allocated to any page at the end of the chunk.  In allocateSmallChunk, we calculate that unused extra in the line:
    auto decommitSize = chunkSize - metadataSize - accountedInFreeable;
And then we decommit that amount at the end of the chunk.  Here in deallocateSmallChunk, we want to &quot;recover&quot; that unused part of the chunk.

&gt; Here&apos;s another bug: physicalExtent is initialized to &apos;chunk&apos;, but a Chunk
&gt; has physical pages at its head that contain metadata, so the minimum
&gt; physicalExtent should actually be chunk + Chunk::metadataSize(pageSize).
&gt; Getting this wrong will prevent us from decommitting Chunk metadata. This
&gt; bug will trigger in the case where all pages are already decommitted,
&gt; because physicalExtent will remain at its initial value.

In the patch I&apos;ll post shortly, I no longer decommit the metadata at the front of the chunk and the unused space at the end in allocateSmallChunk.  In deallocateSmallChunk, I also start physicalEnd (nee physicalExtent) as chunk + Chunk::metadataSize(pageSize).  I&apos;m open to suggestions on how to add back the unused region at the end of the chunk.

&gt; Put another way, I think we need to make sure that physicalExtent is always
&gt; correct; otherwise it is a liability. So, if there is a case where
&gt; physicalExtent is calculated incorrectly, and then we fix it up by checking
&gt; totalPhysicalSize, I&apos;d like to know more about that case, and I&apos;d like us to
&gt; just calculate physicalExtent correctly instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763842</commentid>
    <comment_count>7</comment_count>
      <attachid>429734</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-05-26 00:27:47 -0700</bug_when>
    <thetext>Created attachment 429734
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764441</commentid>
    <comment_count>8</comment_count>
      <attachid>429734</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-05-27 11:53:20 -0700</bug_when>
    <thetext>Comment on attachment 429734
Updated patch

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

r=me

&gt; Source/bmalloc/ChangeLog:20
&gt; +        There is the possible future optimization where we also keep track of the
&gt; +        first address of physically mapped memory in a LargeRange.  Since bmalloc
&gt; +        allocates memory from lower addresses first, it is thought that the change
&gt; +        in this patch is sufficient to reduce not only the number of madvise calls,
&gt; +        but the time it takes to make those calls.

Might be worth mentioning that you tested this thought, and what the results were.

&gt; Source/bmalloc/bmalloc/Heap.cpp:-239
&gt; -        auto metadataSize = Chunk::metadataSize(pageSize);
&gt; -        vmDeallocatePhysicalPagesSloppy(chunk-&gt;address(sizeof(Chunk)), metadataSize - sizeof(Chunk));
&gt; -
&gt; -        auto decommitSize = chunkSize - metadataSize - accountedInFreeable;
&gt; -        if (decommitSize &gt; 0)
&gt; -            vmDeallocatePhysicalPagesSloppy(chunk-&gt;address(chunkSize - decommitSize), decommitSize);

I thought about this for a while and did not come up with a better idea than removing these VM deallocations. But I think this change means we need to A/B test Membuster and PLUM before we land.

&gt; Source/bmalloc/bmalloc/Heap.cpp:231
&gt; +            if (calculatingStartPhysicalSize) {

I think this would be clearer if we had a local variable &apos;SmallPage* firstPageWithoutPhysicalPages = nullptr&apos;.

Then here we can have:

if (!firstPageWithoutPhysicalPages)
    firstPageWithoutPhysicalPages = page;

And below we can have:

size_t startPhysicalSize = firstPageWithoutPhysicalPages ? firstPageWithoutPhysicalPages-&gt;begin()-&gt;begin() - chunk-&gt;bytes() : size;

That way, it&apos;s more explicit what the loop is searching for, and there&apos;s never a time when startPhysicalSize holds an invalid value.

&gt; Source/bmalloc/bmalloc/LargeRange.h:90
&gt; +    // This is the last address of physical memory in this range.

last =&gt; past the end</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764584</commentid>
    <comment_count>9</comment_count>
      <attachid>429956</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-05-27 16:54:05 -0700</bug_when>
    <thetext>Created attachment 429956
Patch for Landing.

Will run some A-B perf tests locally before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765413</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-05-31 07:58:20 -0700</bug_when>
    <thetext>PLUM results run on three iPhone variants and an iPad are neutral.

Membuster results run on two Mac variants show a progression of between 0.8-1.0%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765416</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-05-31 08:04:29 -0700</bug_when>
    <thetext>Committed r278278 (238315@main): &lt;https://commits.webkit.org/238315@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766654</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-06-03 20:47:22 -0700</bug_when>
    <thetext>Rolled out in https://trac.webkit.org/changeset/278447/webkit.

It made some JSC mini mode and other tests flakey.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768246</commentid>
    <comment_count>13</comment_count>
      <attachid>430982</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-06-09 11:26:40 -0700</bug_when>
    <thetext>Created attachment 430982
Patch with mini-mode fix.

The mini mode issue was fixed by addressing the FIXME bug https://bugs.webkit.org/show_bug.cgi?id=203987 - &quot;[bmalloc] Mini-mode should also adjust scavenger interval&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769625</commentid>
    <comment_count>14</comment_count>
      <attachid>430982</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-06-14 16:56:01 -0700</bug_when>
    <thetext>Comment on attachment 430982
Patch with mini-mode fix.

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

&gt; Source/bmalloc/ChangeLog:10
&gt; +        Reland the adaptive scavenger change for macOS with a fix to mini mode.

A policy to always use the min interval in mini mode seems sensible. But why did the
previous interval make correctness tests flaky? And why do we want a below-minimum initial value to trigger the scavenger right after startup?

Those are the things we need to know in order to evaluate whether this approach is sensible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769628</commentid>
    <comment_count>15</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-06-14 16:59:01 -0700</bug_when>
    <thetext>mac-as-debug-wk2 claims to have found some crashes that only happen with this patch applied. Is it right about that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769657</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-06-14 18:20:30 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #15)
&gt; mac-as-debug-wk2 claims to have found some crashes that only happen with
&gt; this patch applied. Is it right about that?

I should have put a comment in.

I kern the mac-AS-debug-wk2 tests.  There are indeed a few crashes with the patch.  The testing without the patch seems to have died.  The total time running WK tests without the patch was 23 seconds, while the two runs with the patch ran for 1:03 (1 hour and 3 minutes).  The first time the mac-AS-debug-wk2 tests ran was the same, 21sec w/o the patch and 1:03 with the patch.

Therefore that bot is unless in my mind.  I built and ran Mac-AS Release WK2 tests on my system.  I&apos;ll run the Debug version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769659</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-06-14 18:47:30 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #14)
&gt; Comment on attachment 430982 [details]
&gt; Patch with mini-mode fix.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=430982&amp;action=review
&gt; 
&gt; &gt; Source/bmalloc/ChangeLog:10
&gt; &gt; +        Reland the adaptive scavenger change for macOS with a fix to mini mode.
&gt; 
&gt; A policy to always use the min interval in mini mode seems sensible. But why
&gt; did the
&gt; previous interval make correctness tests flaky? And why do we want a
&gt; below-minimum initial value to trigger the scavenger right after startup?

I was only able to catch the crash with a release build in the debugger, never with a debug build.  When I caught the crash, it was in a &quot;tryAllocate...()&quot; path that bubbled up to a butterfly allocation that didn&apos;t expect an allocation failure.  See ButterflyInlines.h Butterfly::create() where it calls Butterfly::tryCreate().  So that crash isn&apos;t necessarily a correctness issue.  I filed https://bugs.webkit.org/show_bug.cgi?id=227003 - &quot;Butterfly::create() does not handle allocation failures.&quot;.

As far as the initial scavenging value, it has always been that way as far as I can remember.  My belief is that it was done that way to effectively scavenge immediately but asynchronously via the timer.
 
&gt; Those are the things we need to know in order to evaluate whether this
&gt; approach is sensible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769889</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-06-15 11:49:01 -0700</bug_when>
    <thetext>(In reply to Michael Saboff from comment #16)
&gt; (In reply to Geoffrey Garen from comment #15)
&gt; &gt; mac-as-debug-wk2 claims to have found some crashes that only happen with
&gt; &gt; this patch applied. Is it right about that?
&gt; 
&gt; I should have put a comment in.
&gt; 
&gt; I kern the mac-AS-debug-wk2 tests.  There are indeed a few crashes with the
&gt; patch.  The testing without the patch seems to have died.  The total time
&gt; running WK tests without the patch was 23 seconds, while the two runs with
&gt; the patch ran for 1:03 (1 hour and 3 minutes).  The first time the
&gt; mac-AS-debug-wk2 tests ran was the same, 21sec w/o the patch and 1:03 with
&gt; the patch.
&gt; 
&gt; Therefore that bot is unless in my mind.  I built and ran Mac-AS Release WK2
&gt; tests on my system.  I&apos;ll run the Debug version.

Debug WebKit2 tests on local AS device both with and without the patch had numerous crashes.  A combination mostly of crashes in LaunchServices trying to launch a service worker (including in IndexDB tests) and the rest were ASSERTion failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770361</commentid>
    <comment_count>19</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-06-16 13:37:05 -0700</bug_when>
    <thetext>So.... the previous patch didn&apos;t actually regress mini mode, and this patch doesn&apos;t actually fix anything about mini mode?

If so, at a minimum you should fix the patch title and ChangeLog to say that.

But also: Why did the patch change at all? Why not re-land the original?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770779</commentid>
    <comment_count>20</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-06-17 12:58:28 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #19)
&gt; So.... the previous patch didn&apos;t actually regress mini mode, and this patch
&gt; doesn&apos;t actually fix anything about mini mode?

I believe the previous patch did regress mini mode on macOS, because it eliminated the partial scavenging code.  From my reading of the partial scavenging code, we&apos;d partial scavenge every 12 seconds (x86) or 8 seconds (AS), irrespective of mini mode.  I recall from the testing I did when working on the adaptive code, I rarely saw full scavenges.  We were almost always doing partial scavenges.

The previous patch eliminated the partial scavenging path and introduced the 10msec between full scavenges for mini mode.  This patch changes the minimum time between full scavenges for mini mode to match what we do when not in mini mode.

&gt; If so, at a minimum you should fix the patch title and ChangeLog to say that.
&gt; 
&gt; But also: Why did the patch change at all? Why not re-land the original?

Because there appears to be an issue in mini mode doing full scavenges every 10 msec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770854</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-06-17 15:37:38 -0700</bug_when>
    <thetext>(In reply to Michael Saboff from comment #20)
&gt; (In reply to Geoffrey Garen from comment #19)
&gt; &gt; So.... the previous patch didn&apos;t actually regress mini mode, and this patch
&gt; &gt; doesn&apos;t actually fix anything about mini mode?
&gt; 
&gt; I believe the previous patch did regress mini mode on macOS, because it
&gt; eliminated the partial scavenging code.  From my reading of the partial
&gt; scavenging code, we&apos;d partial scavenge every 12 seconds (x86) or 8 seconds
&gt; (AS), irrespective of mini mode.  I recall from the testing I did when
&gt; working on the adaptive code, I rarely saw full scavenges.  We were almost
&gt; always doing partial scavenges.
&gt; 
&gt; The previous patch eliminated the partial scavenging path and introduced the
&gt; 10msec between full scavenges for mini mode.  This patch changes the minimum
&gt; time between full scavenges for mini mode to match what we do when not in
&gt; mini mode.
&gt; 
&gt; &gt; If so, at a minimum you should fix the patch title and ChangeLog to say that.
&gt; &gt; 
&gt; &gt; But also: Why did the patch change at all? Why not re-land the original?
&gt; 
&gt; Because there appears to be an issue in mini mode doing full scavenges every
&gt; 10 msec.

What&apos;s the issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771833</commentid>
    <comment_count>22</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-06-22 17:27:24 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #21)
&gt; (In reply to Michael Saboff from comment #20)
&gt; &gt; (In reply to Geoffrey Garen from comment #19)
&gt; &gt; &gt; So.... the previous patch didn&apos;t actually regress mini mode, and this patch
&gt; &gt; &gt; doesn&apos;t actually fix anything about mini mode?
&gt; &gt; 
&gt; &gt; I believe the previous patch did regress mini mode on macOS, because it
&gt; &gt; eliminated the partial scavenging code.  From my reading of the partial
&gt; &gt; scavenging code, we&apos;d partial scavenge every 12 seconds (x86) or 8 seconds
&gt; &gt; (AS), irrespective of mini mode.  I recall from the testing I did when
&gt; &gt; working on the adaptive code, I rarely saw full scavenges.  We were almost
&gt; &gt; always doing partial scavenges.
&gt; &gt; 
&gt; &gt; The previous patch eliminated the partial scavenging path and introduced the
&gt; &gt; 10msec between full scavenges for mini mode.  This patch changes the minimum
&gt; &gt; time between full scavenges for mini mode to match what we do when not in
&gt; &gt; mini mode.
&gt; &gt; 
&gt; &gt; &gt; If so, at a minimum you should fix the patch title and ChangeLog to say that.
&gt; &gt; &gt; 
&gt; &gt; &gt; But also: Why did the patch change at all? Why not re-land the original?
&gt; &gt; 
&gt; &gt; Because there appears to be an issue in mini mode doing full scavenges every
&gt; &gt; 10 msec.
&gt; 
&gt; What&apos;s the issue?

Found the issue where we clear the &quot;can merge&quot; flag during scavenging, but it doesn&apos;t get set later.  This is due to an if that avoids unnecessary deallocation of physical pages. The code that deallocates physical pages also sets the can merge flag to true.

I will post a fix shortly after some more testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772084</commentid>
    <comment_count>23</comment_count>
      <attachid>432096</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-06-23 15:20:59 -0700</bug_when>
    <thetext>Created attachment 432096
Updated patch with fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774532</commentid>
    <comment_count>24</comment_count>
      <attachid>432096</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-07-02 13:03:09 -0700</bug_when>
    <thetext>Comment on attachment 432096
Updated patch with fix

r=me

Glad we found the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1775086</commentid>
    <comment_count>25</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2021-07-06 14:20:57 -0700</bug_when>
    <thetext>Committed r279621 (239439@main): &lt;https://commits.webkit.org/239439@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429685</attachid>
            <date>2021-05-25 13:13:02 -0700</date>
            <delta_ts>2021-05-26 00:27:47 -0700</delta_ts>
            <desc>Work in progress patch</desc>
            <filename>226237-wip1.patch</filename>
            <type>text/plain</type>
            <size>33339</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODAzNikKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDIxLTA1LTI1ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNj
cmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcgVVJMIChPT1BTISkuCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBy
ZS1lbmFibGVzIHRoZSBhZGFwdGl2ZSBzY2F2ZW5nZXIgZm9yIG1hY09TLgorICAgICAgICBJdCBh
bHNvIHRyaWVzIHRvIGJlIG1vcmUgcHJlY2lzZSB3aGVuIGNhbGxpbmcgbWFkdmlzZSgpIGJ5IGtl
ZXBpbmcgdHJhY2sKKyAgICAgICAgb2YgdGhlIG1heGltdW0gZXh0ZW50IG9mIHBoeXNpY2FsbHkg
bWFwcGVkIG1lbW9yeSBpbiBhIExhcmdlUmFuZ2UuCisKKyAgICAgICAgVGhlcmUgaXMgdGhlIHBv
c3NpYmxlIGZ1dHVyZSBvcHRpbWl6YXRpb24gd2hlcmUgd2UgYWxzbyBrZWVwIHRyYWNrIG9mIHRo
ZQorICAgICAgICBmaXJzdCBhZGRyZXNzIG9mIHBoeXNpY2FsbHkgbWFwcGVkIG1lbW9yeSBpbiBh
IExhcmdlUmFuZ2UuICBTaW5jZSBibWFsbG9jCisgICAgICAgIGFsbG9jYXRlcyBtZW1vcnkgZnJv
bSBsb3dlciBhZGRyZXNzZXMgZmlyc3QsIGl0IGlzIHRob3VnaHQgdGhhdCB0aGlzCisgICAgICAg
IGNoYW5nZSBpcyBzdWZmaWNpZW50IHRvIHJlZHVjZSBub3Qgb25seSB0aGUgbnVtYmVyIG9mIG1h
ZHZpc2UgY2FsbHMsCisgICAgICAgIGJ1dCB0aGUgdGltZSBpdCB0YWtlcyB0byBtYWtlIHRob3Nl
IGNhbGxzLgorCisgICAgICAgICogYm1hbGxvYy9CUGxhdGZvcm0uaDoKKyAgICAgICAgKiBibWFs
bG9jL0hlYXAuY3BwOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVjb21taXRMYXJnZVJhbmdl
KToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNjYXZlbmdlKToKKyAgICAgICAgKGJtYWxsb2M6
OkhlYXA6OmFsbG9jYXRlU21hbGxDaHVuayk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFs
bG9jYXRlU21hbGxDaHVuayk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxs
UGFnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKToKKyAgICAg
ICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlTGFyZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6dHJ5QWxsb2NhdGVMYXJnZUNodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlu
a0xhcmdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVMYXJnZSk6CisgICAg
ICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZVRvSGlnaFdhdGVybWFyayk6IERlbGV0ZWQuCisg
ICAgICAgICogYm1hbGxvYy9IZWFwLmg6CisgICAgICAgICogYm1hbGxvYy9Jc29EaXJlY3Rvcnku
aDoKKyAgICAgICAgKiBibWFsbG9jL0lzb0RpcmVjdG9yeUlubGluZXMuaDoKKyAgICAgICAgKGJt
YWxsb2M6OnBhc3NlZE51bVBhZ2VzPjo6dGFrZUZpcnN0RWxpZ2libGUpOgorICAgICAgICAoYm1h
bGxvYzo6cGFzc2VkTnVtUGFnZXM+OjpzY2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpwYXNz
ZWROdW1QYWdlcz46OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKTogRGVsZXRlZC4KKyAgICAgICAg
KiBibWFsbG9jL0lzb0hlYXBJbXBsLmg6CisgICAgICAgICogYm1hbGxvYy9Jc29IZWFwSW1wbElu
bGluZXMuaDoKKyAgICAgICAgKGJtYWxsb2M6Oklzb0hlYXBJbXBsPENvbmZpZz46OnNjYXZlbmdl
VG9IaWdoV2F0ZXJtYXJrKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL0xhcmdlTWFwLmNw
cDoKKyAgICAgICAgKGJtYWxsb2M6OkxhcmdlTWFwOjphZGQpOgorICAgICAgICAqIGJtYWxsb2Mv
TGFyZ2VSYW5nZS5oOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VSYW5nZTo6TGFyZ2VSYW5nZSk6
CisgICAgICAgIChibWFsbG9jOjpMYXJnZVJhbmdlOjpwaHlzaWNhbEV4dGVudCBjb25zdCk6Cisg
ICAgICAgIChibWFsbG9jOjpMYXJnZVJhbmdlOjpzZXRQaHlzaWNhbEV4dGVudCk6CisgICAgICAg
IChibWFsbG9jOjpMYXJnZVJhbmdlOjpyZXNldFBoeXNpY2FsRXh0ZW50KToKKyAgICAgICAgKGJt
YWxsb2M6OkxhcmdlUmFuZ2U6OnNldFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSk6CisgICAgICAgIChi
bWFsbG9jOjptZXJnZSk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZVJhbmdlOjpzcGxpdCBjb25z
dCk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIGJtYWxsb2MvU2NhdmVuZ2VyLmNw
cDoKKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6U2NhdmVuZ2VyKToKKyAgICAgICAgKGJt
YWxsb2M6OlNjYXZlbmdlcjo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6U2NhdmVuZ2Vy
Ojp0aHJlYWRSdW5Mb29wKToKKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6dGltZVNpbmNl
TGFzdFBhcnRpYWxTY2F2ZW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5n
ZXI6OnBhcnRpYWxTY2F2ZW5nZSk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9TY2F2ZW5n
ZXIuaDoKKyAgICAgICAgKiBibWFsbG9jL1NtYWxsUGFnZS5oOgorICAgICAgICAoYm1hbGxvYzo6
U21hbGxQYWdlOjpzZXRVc2VkU2luY2VMYXN0U2NhdmVuZ2UpOgorCiAyMDIxLTA1LTIxICBNaWNo
YWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFtibWFsbG9jXSBSb2xs
b3V0IHIyNzYyNjYgYmVjYXVzZSBXZWJLaXQgcHJvY2Vzc2VzIGFyZSBzcGVuZGluZyBtdWNoIG1v
cmUgdGltZSBpbiBtYWR2aXNlCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JQbGF0Zm9y
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQlBsYXRmb3JtLmgJKHJl
dmlzaW9uIDI3Nzk2MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQlBsYXRmb3JtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwOSwxMiArMzA5LDYgQEAKIC8qIFRoaXMgaXMgdXNlZCBmb3IgZGVi
dWdnaW5nIHdoZW4gaGFja2luZyBvbiBob3cgYm1hbGxvYyBjYWxjdWxhdGVzIGl0cyBwaHlzaWNh
bCBmb290cHJpbnQuICovCiAjZGVmaW5lIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUCAwCiAKLSNp
ZiBCUExBVEZPUk0oTUFDKQotI2RlZmluZSBCVVNFX1BBUlRJQUxfU0NBVkVOR0UgMQotI2Vsc2UK
LSNkZWZpbmUgQlVTRV9QQVJUSUFMX1NDQVZFTkdFIDAKLSNlbmRpZgotCiAjaWYgIWRlZmluZWQo
QlVTRV9QUkVDT01QVVRFRF9DT05TVEFOVFNfVk1QQUdFNEspCiAjZGVmaW5lIEJVU0VfUFJFQ09N
UFVURURfQ09OU1RBTlRTX1ZNUEFHRTRLIDEKICNlbmRpZgpJbmRleDogU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hl
YXAuY3BwCShyZXZpc2lvbiAyNzc5NjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIEhlYXA6OkhlYXAoSGVhcEtpbmQg
a2luZCwgTG9ja0hvbGRlciYpCiAgICAgICAgIG1fZ2lnYWNhZ2VTaXplID0gc2l6ZTsKICAgICAg
ICAgcHRyZGlmZl90IG9mZnNldCA9IHJvdW5kRG93blRvTXVsdGlwbGVPZih2bVBhZ2VTaXplKCks
IHJhbmRvbVsxXSAlIChnaWdhY2FnZVNpemUgLSBzaXplKSk7CiAgICAgICAgIHZvaWQqIGJhc2Ug
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihnaWdhY2FnZUJhc2VQdHIpICsgb2Zm
c2V0OwotICAgICAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShiYXNlLCBzaXplLCAwLCAw
KSk7CisgICAgICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJhbmdlKGJhc2UsIHNpemUsIDAsIDAs
IGJhc2UpKTsKICAgICB9CiAjZW5kaWYKICAgICAKQEAgLTEwNiwxMiArMTA2LDE4IEBAIHZvaWQg
SGVhcDo6bWFya0FsbExhcmdlQXNFbGlnaWJpbGUoY29uc3QKIAogdm9pZCBIZWFwOjpkZWNvbW1p
dExhcmdlUmFuZ2UoVW5pcXVlTG9ja0hvbGRlciYsIExhcmdlUmFuZ2UmIHJhbmdlLCBCdWxrRGVj
b21taXQmIGRlY29tbWl0dGVyKQogeworI2lmIDAKKyAgICBzdGF0aWMgdW5zaWduZWQgaW5pdE5v
UGh5cyA9IDA7AQorI2VuZGlmCiAgICAgbV9mb290cHJpbnQgLT0gcmFuZ2UudG90YWxQaHlzaWNh
bFNpemUoKTsKICAgICBtX2ZyZWVhYmxlTWVtb3J5IC09IHJhbmdlLnRvdGFsUGh5c2ljYWxTaXpl
KCk7Ci0gICAgZGVjb21taXR0ZXIuYWRkTGF6eShyYW5nZS5iZWdpbigpLCByYW5nZS5zaXplKCkp
OwotICAgIG1faGFzUGVuZGluZ0RlY29tbWl0cyA9IHRydWU7CisgICAgaWYgKHJhbmdlLnRvdGFs
UGh5c2ljYWxTaXplKCkpIHsKKyAgICAgICAgZGVjb21taXR0ZXIuYWRkTGF6eShyYW5nZS5iZWdp
bigpLCByYW5nZS5waHlzaWNhbEV4dGVudCgpIC0gcmFuZ2UuYmVnaW4oKSk7CisgICAgICAgIG1f
aGFzUGVuZGluZ0RlY29tbWl0cyA9IHRydWU7CisgICAgfQogICAgIHJhbmdlLnNldFN0YXJ0UGh5
c2ljYWxTaXplKDApOwogICAgIHJhbmdlLnNldFRvdGFsUGh5c2ljYWxTaXplKDApOworICAgIHJh
bmdlLnJlc2V0UGh5c2ljYWxFeHRlbnQoKTsKICAgICBCQVNTRVJUKHJhbmdlLmlzRWxpZ2liaWxl
KCkpOwogICAgIHJhbmdlLnNldEVsaWdpYmxlKGZhbHNlKTsKICNpZiBFTkFCTEVfUEhZU0lDQUxf
UEFHRV9NQVAgCkBAIC0xMTksMjQgKzEyNSwxOCBAQCB2b2lkIEhlYXA6OmRlY29tbWl0TGFyZ2VS
YW5nZShVbmlxdWVMb2NrCiAjZW5kaWYKIH0KIAotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkK
LXZvaWQgSGVhcDo6c2NhdmVuZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgQnVsa0RlY29tbWl0
JiBkZWNvbW1pdHRlcikKLSNlbHNlCiB2b2lkIEhlYXA6OnNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xk
ZXImIGxvY2ssIEJ1bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIsIHNpemVfdCYgZGVmZXJyZWREZWNv
bW1pdHMpCi0jZW5kaWYKIHsKICAgICBmb3IgKGF1dG8mIGxpc3QgOiBtX2ZyZWVQYWdlcykgewog
ICAgICAgICBmb3IgKGF1dG8qIGNodW5rIDogbGlzdCkgewogICAgICAgICAgICAgZm9yIChhdXRv
KiBwYWdlIDogY2h1bmstPmZyZWVQYWdlcygpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFwYWdl
LT5oYXNQaHlzaWNhbFBhZ2VzKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotI2lm
ICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgICAgICAgICAgICAgaWYgKHBhZ2UtPnVzZWRT
aW5jZUxhc3RTY2F2ZW5nZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHBhZ2UtPmNsZWFyVXNl
ZFNpbmNlTGFzdFNjYXZlbmdlKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkRGVjb21t
aXRzKys7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0K
LSNlbmRpZgogCiAgICAgICAgICAgICAgICAgc2l6ZV90IHBhZ2VTaXplID0gYm1hbGxvYzo6cGFn
ZVNpemUoJmxpc3QgLSAmbV9mcmVlUGFnZXNbMF0pOwogICAgICAgICAgICAgICAgIHNpemVfdCBk
ZWNvbW1pdFNpemUgPSBwaHlzaWNhbFBhZ2VTaXplU2xvcHB5KHBhZ2UtPmJlZ2luKCktPmJlZ2lu
KCksIHBhZ2VTaXplKTsKQEAgLTE1NywzNiArMTU3LDE0IEBAIHZvaWQgSGVhcDo6c2NhdmVuZ2Uo
VW5pcXVlTG9ja0hvbGRlciYgbG8KICAgICB9CiAKICAgICBmb3IgKExhcmdlUmFuZ2UmIHJhbmdl
IDogbV9sYXJnZUZyZWUpIHsKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi0gICAgICAgIG1f
aGlnaFdhdGVybWFyayA9IHN0ZDo6bWluKG1faGlnaFdhdGVybWFyaywgc3RhdGljX2Nhc3Q8dm9p
ZCo+KHJhbmdlLmJlZ2luKCkpKTsKLSNlbHNlCiAgICAgICAgIGlmIChyYW5nZS51c2VkU2luY2VM
YXN0U2NhdmVuZ2UoKSkgewogICAgICAgICAgICAgcmFuZ2UuY2xlYXJVc2VkU2luY2VMYXN0U2Nh
dmVuZ2UoKTsKICAgICAgICAgICAgIGRlZmVycmVkRGVjb21taXRzKys7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIGRlY29tbWl0TGFyZ2VSYW5nZShs
b2NrLCByYW5nZSwgZGVjb21taXR0ZXIpOwogICAgIH0KLQotI2lmIEJVU0UoUEFSVElBTF9TQ0FW
RU5HRSkKLSAgICBtX2ZyZWVhYmxlTWVtb3J5ID0gMDsKLSNlbmRpZgotfQotCi0jaWYgQlVTRShQ
QVJUSUFMX1NDQVZFTkdFKQotdm9pZCBIZWFwOjpzY2F2ZW5nZVRvSGlnaFdhdGVybWFyayhVbmlx
dWVMb2NrSG9sZGVyJiBsb2NrLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyKQotewotICAgIHZv
aWQqIG5ld0hpZ2hXYXRlck1hcmsgPSBudWxscHRyOwotICAgIGZvciAoTGFyZ2VSYW5nZSYgcmFu
Z2UgOiBtX2xhcmdlRnJlZSkgewotICAgICAgICBpZiAocmFuZ2UuYmVnaW4oKSA8PSBtX2hpZ2hX
YXRlcm1hcmspCi0gICAgICAgICAgICBuZXdIaWdoV2F0ZXJNYXJrID0gc3RkOjptaW4obmV3SGln
aFdhdGVyTWFyaywgc3RhdGljX2Nhc3Q8dm9pZCo+KHJhbmdlLmJlZ2luKCkpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgZGVjb21taXRMYXJnZVJhbmdlKGxvY2ssIHJhbmdlLCBkZWNvbW1p
dHRlcik7Ci0gICAgfQotICAgIG1faGlnaFdhdGVybWFyayA9IG5ld0hpZ2hXYXRlck1hcms7CiB9
Ci0jZW5kaWYKIAogdm9pZCBIZWFwOjpkZWFsbG9jYXRlTGluZUNhY2hlKFVuaXF1ZUxvY2tIb2xk
ZXImLCBMaW5lQ2FjaGUmIGxpbmVDYWNoZSkKIHsKQEAgLTIyMSw5ICsxOTksNyBAQCB2b2lkIEhl
YXA6OmFsbG9jYXRlU21hbGxDaHVuayhVbmlxdWVMb2NrCiAgICAgICAgIHNpemVfdCBhY2NvdW50
ZWRJbkZyZWVhYmxlID0gMDsKICAgICAgICAgZm9yRWFjaFBhZ2UoY2h1bmssIHBhZ2VTaXplLCBb
Jl0oU21hbGxQYWdlKiBwYWdlKSB7CiAgICAgICAgICAgICBwYWdlLT5zZXRIYXNQaHlzaWNhbFBh
Z2VzKHRydWUpOwotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgICAgICAgICBwYWdl
LT5zZXRVc2VkU2luY2VMYXN0U2NhdmVuZ2UoKTsKLSNlbmRpZgogICAgICAgICAgICAgcGFnZS0+
c2V0SGFzRnJlZUxpbmVzKGxvY2ssIHRydWUpOwogICAgICAgICAgICAgY2h1bmstPmZyZWVQYWdl
cygpLnB1c2gocGFnZSk7CiAgICAgICAgICAgICBhY2NvdW50ZWRJbkZyZWVhYmxlICs9IHBhZ2VT
aXplOwpAQCAtMjU3LDIwICsyMzMsMjQgQEAgdm9pZCBIZWFwOjpkZWFsbG9jYXRlU21hbGxDaHVu
ayhVbmlxdWVMbwogICAgIHNpemVfdCBhY2NvdW50ZWRJbkZyZWVhYmxlID0gMDsKIAogICAgIGJv
b2wgaGFzUGh5c2ljYWxQYWdlcyA9IHRydWU7CisgICAgdm9pZCogcGh5c2ljYWxFeHRlbnQgPSBj
aHVuazsKICAgICBmb3JFYWNoUGFnZShjaHVuaywgcGFnZVNpemUocGFnZUNsYXNzKSwgWyZdKFNt
YWxsUGFnZSogcGFnZSkgewogICAgICAgICBzaXplX3QgcGh5c2ljYWxTaXplID0gcGh5c2ljYWxQ
YWdlU2l6ZVNsb3BweShwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZShwYWdlQ2xhc3Mp
KTsKICAgICAgICAgaWYgKCFwYWdlLT5oYXNQaHlzaWNhbFBhZ2VzKCkpIHsKICAgICAgICAgICAg
IHRvdGFsUGh5c2ljYWxTaXplIC09IHBoeXNpY2FsU2l6ZTsKICAgICAgICAgICAgIGhhc1BoeXNp
Y2FsUGFnZXMgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBwaHlzaWNhbEV4dGVudCA9IHBhZ2UtPmJlZ2luKCktPmJlZ2luKCkgKyBwaHlzaWNh
bFNpemU7CiAgICAgICAgICAgICBhY2NvdW50ZWRJbkZyZWVhYmxlICs9IHBoeXNpY2FsU2l6ZTsK
KyAgICAgICAgfQogICAgIH0pOwogCiAgICAgbV9mcmVlYWJsZU1lbW9yeSAtPSBhY2NvdW50ZWRJ
bkZyZWVhYmxlOwogICAgIG1fZnJlZWFibGVNZW1vcnkgKz0gdG90YWxQaHlzaWNhbFNpemU7CiAK
ICAgICBzaXplX3Qgc3RhcnRQaHlzaWNhbFNpemUgPSBoYXNQaHlzaWNhbFBhZ2VzID8gc2l6ZSA6
IDA7Ci0gICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFuZ2UoY2h1bmssIHNpemUsIHN0YXJ0UGh5
c2ljYWxTaXplLCB0b3RhbFBoeXNpY2FsU2l6ZSkpOworICAgIHBoeXNpY2FsRXh0ZW50ID0gdG90
YWxQaHlzaWNhbFNpemUgPT0gc2l6ZSA/IGNodW5rLT5ieXRlcygpICsgdG90YWxQaHlzaWNhbFNp
emUgOiBwaHlzaWNhbEV4dGVudDsKKyAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShjaHVu
aywgc2l6ZSwgc3RhcnRQaHlzaWNhbFNpemUsIHRvdGFsUGh5c2ljYWxTaXplLCBwaHlzaWNhbEV4
dGVudCkpOwogfQogCiBTbWFsbFBhZ2UqIEhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKFVuaXF1ZUxv
Y2tIb2xkZXImIGxvY2ssIHNpemVfdCBzaXplQ2xhc3MsIExpbmVDYWNoZSYgbGluZUNhY2hlLCBG
YWlsdXJlQWN0aW9uIGFjdGlvbikKQEAgLTMxNCw5ICsyOTQsNyBAQCBTbWFsbFBhZ2UqIEhlYXA6
OmFsbG9jYXRlU21hbGxQYWdlKFVuaXF1CiAgICAgICAgICAgICBtX3BoeXNpY2FsUGFnZU1hcC5j
b21taXQocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUpOwogI2VuZGlmCiAgICAgICAg
IH0KLSNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQogICAgICAgICBwYWdlLT5zZXRVc2VkU2lu
Y2VMYXN0U2NhdmVuZ2UoKTsKLSNlbmRpZgogCiAgICAgICAgIHJldHVybiBwYWdlOwogICAgIH0o
KTsKQEAgLTUyNSw2ICs1MDMsNyBAQCBMYXJnZVJhbmdlIEhlYXA6OnNwbGl0QW5kQWxsb2NhdGUo
VW5pcXVlCiAgICAgICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KHJhbmdlLmJlZ2lu
KCkgKyByYW5nZS5zdGFydFBoeXNpY2FsU2l6ZSgpLCByYW5nZS5zaXplKCkgLSByYW5nZS5zdGFy
dFBoeXNpY2FsU2l6ZSgpKTsKICAgICAgICAgcmFuZ2Uuc2V0U3RhcnRQaHlzaWNhbFNpemUocmFu
Z2Uuc2l6ZSgpKTsKICAgICAgICAgcmFuZ2Uuc2V0VG90YWxQaHlzaWNhbFNpemUocmFuZ2Uuc2l6
ZSgpKTsKKyAgICAgICAgcmFuZ2Uuc2V0UGh5c2ljYWxFeHRlbnQocmFuZ2UuYmVnaW4oKSArIHJh
bmdlLnNpemUoKSk7CiAjaWYgRU5BQkxFX1BIWVNJQ0FMX1BBR0VfTUFQIAogICAgICAgICBtX3Bo
eXNpY2FsUGFnZU1hcC5jb21taXQocmFuZ2UuYmVnaW4oKSwgcmFuZ2Uuc2l6ZSgpKTsKICNlbmRp
ZgpAQCAtNTkwLDkgKzU2OSw2IEBAIHZvaWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2UoVW5pcXVlTG9j
a0hvbGQKICAgICBtX2ZyZWVhYmxlTWVtb3J5IC09IHJhbmdlLnRvdGFsUGh5c2ljYWxTaXplKCk7
CiAKICAgICB2b2lkKiByZXN1bHQgPSBzcGxpdEFuZEFsbG9jYXRlKGxvY2ssIHJhbmdlLCBhbGln
bm1lbnQsIHNpemUpLmJlZ2luKCk7Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAgIG1f
aGlnaFdhdGVybWFyayA9IHN0ZDo6bWF4KG1faGlnaFdhdGVybWFyaywgcmVzdWx0KTsKLSNlbmRp
ZgogICAgIEFTU0VSVF9PUl9SRVRVUk5fT05fRkFJTFVSRShyZXN1bHQpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiAKQEAgLTYyMSw3ICs1OTcsNyBAQCBMYXJnZVJhbmdlIEhlYXA6OnRyeUFsbG9jYXRl
TGFyZ2VDaHVuayhzCiAgICAgUGVyUHJvY2Vzczxab25lPjo6Z2V0KCktPmFkZFJhbmdlKFJhbmdl
KG1lbW9yeSwgc2l6ZSkpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gTGFyZ2VSYW5nZShtZW1vcnks
IHNpemUsIDAsIDApOworICAgIHJldHVybiBMYXJnZVJhbmdlKG1lbW9yeSwgc2l6ZSwgMCwgMCwg
bWVtb3J5KTsKIH0KIAogc2l6ZV90IEhlYXA6OmxhcmdlU2l6ZShVbmlxdWVMb2NrSG9sZGVyJiwg
dm9pZCogb2JqZWN0KQpAQCAtNjM0LDcgKzYxMCw3IEBAIHZvaWQgSGVhcDo6c2hyaW5rTGFyZ2Uo
VW5pcXVlTG9ja0hvbGRlciYKICAgICBCQVNTRVJUKG9iamVjdC5zaXplKCkgPiBuZXdTaXplKTsK
IAogICAgIHNpemVfdCBzaXplID0gbV9sYXJnZUFsbG9jYXRlZC5yZW1vdmUob2JqZWN0LmJlZ2lu
KCkpOwotICAgIExhcmdlUmFuZ2UgcmFuZ2UgPSBMYXJnZVJhbmdlKG9iamVjdCwgc2l6ZSwgc2l6
ZSk7CisgICAgTGFyZ2VSYW5nZSByYW5nZSA9IExhcmdlUmFuZ2Uob2JqZWN0LCBzaXplLCBzaXpl
LCBvYmplY3QuYmVnaW4oKSArIHNpemUpOwogICAgIHNwbGl0QW5kQWxsb2NhdGUobG9jaywgcmFu
Z2UsIGFsaWdubWVudCwgbmV3U2l6ZSk7CiAKICAgICBtX3NjYXZlbmdlci0+c2NoZWR1bGUoc2l6
ZSk7CkBAIC02NDMsNyArNjE5LDcgQEAgdm9pZCBIZWFwOjpzaHJpbmtMYXJnZShVbmlxdWVMb2Nr
SG9sZGVyJgogdm9pZCBIZWFwOjpkZWFsbG9jYXRlTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYsIHZv
aWQqIG9iamVjdCkKIHsKICAgICBzaXplX3Qgc2l6ZSA9IG1fbGFyZ2VBbGxvY2F0ZWQucmVtb3Zl
KG9iamVjdCk7Ci0gICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFuZ2Uob2JqZWN0LCBzaXplLCBz
aXplLCBzaXplKSk7CisgICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFuZ2Uob2JqZWN0LCBzaXpl
LCBzaXplLCBzaXplLCBzdGF0aWNfY2FzdDxjaGFyKj4ob2JqZWN0KSArIHNpemUpKTsKICAgICBt
X2ZyZWVhYmxlTWVtb3J5ICs9IHNpemU7CiAgICAgbV9zY2F2ZW5nZXItPnNjaGVkdWxlKHNpemUp
OwogfQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHJldmlzaW9uIDI3Nzk2MykKKysrIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMiArNzQsNyBA
QCBwdWJsaWM6CiAgICAgc2l6ZV90IGxhcmdlU2l6ZShVbmlxdWVMb2NrSG9sZGVyJiwgdm9pZCop
OwogICAgIHZvaWQgc2hyaW5rTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYsIGNvbnN0IFJhbmdlJiwg
c2l6ZV90KTsKIAotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICB2b2lkIHNjYXZlbmdl
VG9IaWdoV2F0ZXJtYXJrKFVuaXF1ZUxvY2tIb2xkZXImLCBCdWxrRGVjb21taXQmKTsKLSAgICB2
b2lkIHNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImLCBCdWxrRGVjb21taXQmKTsKLSNlbHNlCiAg
ICAgdm9pZCBzY2F2ZW5nZShVbmlxdWVMb2NrSG9sZGVyJiwgQnVsa0RlY29tbWl0Jiwgc2l6ZV90
JiBkZWZlcnJlZERlY29tbWl0cyk7Ci0jZW5kaWYKICAgICB2b2lkIHNjYXZlbmdlKFVuaXF1ZUxv
Y2tIb2xkZXImLCBCdWxrRGVjb21taXQmLCBzaXplX3QmIGZyZWVkLCBzaXplX3QgZ29hbCk7CiAK
ICAgICBzaXplX3QgZnJlZWFibGVNZW1vcnkoVW5pcXVlTG9ja0hvbGRlciYpOwpAQCAtMTQ3LDEw
ICsxNDIsNiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUCAKICAgICBQ
aHlzaWNhbFBhZ2VNYXAgbV9waHlzaWNhbFBhZ2VNYXA7CiAjZW5kaWYKLSAgICAKLSNpZiBCVVNF
KFBBUlRJQUxfU0NBVkVOR0UpCi0gICAgdm9pZCogbV9oaWdoV2F0ZXJtYXJrIHsgbnVsbHB0ciB9
OwotI2VuZGlmCiB9OwogCiBpbmxpbmUgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdl
cygKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvRGlyZWN0b3J5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29EaXJlY3RvcnkuaAkocmV2aXNpb24gMjc3
OTYzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29EaXJlY3RvcnkuaAkod29ya2luZyBj
b3B5KQpAQCAtNzYsOSArNzYsNiBAQCBwdWJsaWM6CiAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBl
bXB0eSBhbmQgY29tbWl0dGVkIHBhZ2VzLCBhbmQgcHV0IHRoZW0gaW50byB0aGUgdmVjdG9yLiBU
aGlzIGFsc28gcmVjb3JkcyB0aGUKICAgICAvLyBwYWdlcyBhcyBiZWluZyBkZWNvbW1pdHRlZC4g
SXQncyB0aGUgY2FsbGVyJ3Mgam9iIHRvIGRvIHRoZSBhY3R1YWwgZGVjb21taXR0aW5nLgogICAg
IHZvaWQgc2NhdmVuZ2UoY29uc3QgTG9ja0hvbGRlciYsIFZlY3RvcjxEZWZlcnJlZERlY29tbWl0
PiYpOwotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICB2b2lkIHNjYXZlbmdlVG9IaWdo
V2F0ZXJtYXJrKGNvbnN0IExvY2tIb2xkZXImLCBWZWN0b3I8RGVmZXJyZWREZWNvbW1pdD4mKTsK
LSNlbmRpZgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hD
b21taXR0ZWRQYWdlKGNvbnN0IExvY2tIb2xkZXImLCBjb25zdCBGdW5jJik7CkBAIC05Myw5ICs5
MCw2IEBAIHByaXZhdGU6CiAgICAgQml0czxudW1QYWdlcz4gbV9lbXB0eTsKICAgICBCaXRzPG51
bVBhZ2VzPiBtX2NvbW1pdHRlZDsKICAgICB1bnNpZ25lZCBtX2ZpcnN0RWxpZ2libGVPckRlY29t
bWl0dGVkIHsgMCB9OwotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICB1bnNpZ25lZCBt
X2hpZ2hXYXRlcm1hcmsgeyAwIH07Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxs
b2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvRGlyZWN0b3J5SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvRGlyZWN0b3J5SW5saW5lcy5o
CShyZXZpc2lvbiAyNzc5NjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0RpcmVjdG9y
eUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTAgKzUwLDYgQEAgRWxpZ2liaWxpdHlS
ZXN1bHQ8Q29uZmlnPiBJc29EaXJlY3Rvcnk8QwogICAgIGlmIChwYWdlSW5kZXggPj0gbnVtUGFn
ZXMpCiAgICAgICAgIHJldHVybiBFbGlnaWJpbGl0eUtpbmQ6OkZ1bGw7CiAKLSNpZiBCVVNFKFBB
UlRJQUxfU0NBVkVOR0UpCi0gICAgbV9oaWdoV2F0ZXJtYXJrID0gc3RkOjptYXgocGFnZUluZGV4
LCBtX2hpZ2hXYXRlcm1hcmspOwotI2VuZGlmCi0KICAgICBTY2F2ZW5nZXImIHNjYXZlbmdlciA9
ICpTY2F2ZW5nZXI6OmdldCgpOwogICAgIHNjYXZlbmdlci5kaWRTdGFydEdyb3dpbmcoKTsKICAg
ICAKQEAgLTE0NiwyMyArMTQyLDcgQEAgdm9pZCBJc29EaXJlY3Rvcnk8Q29uZmlnLCBwYXNzZWRO
dW1QYWdlcwogICAgICAgICBbJl0gKHNpemVfdCBpbmRleCkgewogICAgICAgICAgICAgc2NhdmVu
Z2VQYWdlKGxvY2tlciwgaW5kZXgsIGRlY29tbWl0cyk7CiAgICAgICAgIH0pOwotI2lmIEJVU0Uo
UEFSVElBTF9TQ0FWRU5HRSkKLSAgICBtX2hpZ2hXYXRlcm1hcmsgPSAwOwotI2VuZGlmCi19Ci0K
LSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWcsIHVu
c2lnbmVkIHBhc3NlZE51bVBhZ2VzPgotdm9pZCBJc29EaXJlY3Rvcnk8Q29uZmlnLCBwYXNzZWRO
dW1QYWdlcz46OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKGNvbnN0IExvY2tIb2xkZXImIGxvY2tl
ciwgVmVjdG9yPERlZmVycmVkRGVjb21taXQ+JiBkZWNvbW1pdHMpCi17Ci0gICAgKG1fZW1wdHkg
JiBtX2NvbW1pdHRlZCkuZm9yRWFjaFNldEJpdCgKLSAgICAgICAgWyZdIChzaXplX3QgaW5kZXgp
IHsKLSAgICAgICAgICAgIGlmIChpbmRleCA+IG1faGlnaFdhdGVybWFyaykKLSAgICAgICAgICAg
ICAgICBzY2F2ZW5nZVBhZ2UobG9ja2VyLCBpbmRleCwgZGVjb21taXRzKTsKLSAgICAgICAgfSk7
Ci0gICAgbV9oaWdoV2F0ZXJtYXJrID0gMDsKIH0KLSNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDb25maWcsIHVuc2lnbmVkIHBhc3NlZE51bVBhZ2VzPgogdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvSGVhcEltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0hlYXBJbXBsLmgJKHJldmlzaW9uIDI3Nzk2
MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvSGVhcEltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksOSArNDksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SXNvSGVhcEltcGxCYXNl
KCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHNjYXZlbmdlKFZlY3RvcjxEZWZlcnJlZERlY29t
bWl0PiYpID0gMDsKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi0gICAgdmlydHVhbCB2b2lk
IHNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKFZlY3RvcjxEZWZlcnJlZERlY29tbWl0PiYpID0gMDsK
LSNlbmRpZgogICAgIAogICAgIHZvaWQgc2NhdmVuZ2VOb3coKTsKICAgICBzdGF0aWMgdm9pZCBm
aW5pc2hTY2F2ZW5naW5nKFZlY3RvcjxEZWZlcnJlZERlY29tbWl0PiYpOwpAQCAtMTEyLDkgKzEw
OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEJlY29tZUVsaWdpYmxlT3JEZWNvbW1pdGVkKGNv
bnN0IExvY2tIb2xkZXImLCBJc29EaXJlY3Rvcnk8Q29uZmlnLCBJc29EaXJlY3RvcnlQYWdlPENv
bmZpZz46Om51bVBhZ2VzPiopOwogICAgIAogICAgIHZvaWQgc2NhdmVuZ2UoVmVjdG9yPERlZmVy
cmVkRGVjb21taXQ+Jikgb3ZlcnJpZGU7Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAg
IHZvaWQgc2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsoVmVjdG9yPERlZmVycmVkRGVjb21taXQ+Jikg
b3ZlcnJpZGU7Ci0jZW5kaWYKIAogICAgIHVuc2lnbmVkIGFsbG9jYXRvck9mZnNldCgpOwogICAg
IHVuc2lnbmVkIGRlYWxsb2NhdG9yT2Zmc2V0KCk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0lzb0hlYXBJbXBsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSXNvSGVhcEltcGxJbmxpbmVzLmgJKHJldmlzaW9uIDI3Nzk2MykKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvSXNvSGVhcEltcGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
MSwyMSArMTIxLDYgQEAgdm9pZCBJc29IZWFwSW1wbDxDb25maWc+OjpzY2F2ZW5nZShWZWN0bwog
ICAgIG1fZGlyZWN0b3J5SGlnaFdhdGVybWFyayA9IDA7CiB9CiAKLSNpZiBCVVNFKFBBUlRJQUxf
U0NBVkVOR0UpCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWc+Ci12b2lkIElzb0hlYXBJbXBsPENv
bmZpZz46OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKFZlY3RvcjxEZWZlcnJlZERlY29tbWl0PiYg
ZGVjb21taXRzKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKHRoaXMtPmxvY2spOwotICAgIGlm
ICghbV9kaXJlY3RvcnlIaWdoV2F0ZXJtYXJrKQotICAgICAgICBtX2lubGluZURpcmVjdG9yeS5z
Y2F2ZW5nZVRvSGlnaFdhdGVybWFyayhsb2NrZXIsIGRlY29tbWl0cyk7Ci0gICAgZm9yIChJc29E
aXJlY3RvcnlQYWdlPENvbmZpZz4qIHBhZ2UgPSBtX2hlYWREaXJlY3RvcnkuZ2V0KCk7IHBhZ2U7
IHBhZ2UgPSBwYWdlLT5uZXh0KSB7Ci0gICAgICAgIGlmIChwYWdlLT5pbmRleCgpID49IG1fZGly
ZWN0b3J5SGlnaFdhdGVybWFyaykKLSAgICAgICAgICAgIHBhZ2UtPnBheWxvYWQuc2NhdmVuZ2VU
b0hpZ2hXYXRlcm1hcmsobG9ja2VyLCBkZWNvbW1pdHMpOwotICAgIH0KLSAgICBtX2RpcmVjdG9y
eUhpZ2hXYXRlcm1hcmsgPSAwOwotfQotI2VuZGlmCi0KIGlubGluZSBzaXplX3QgSXNvSGVhcElt
cGxCYXNlOjpmcmVlYWJsZU1lbW9yeSgpCiB7CiAgICAgcmV0dXJuIG1fZnJlZWFibGVNZW1vcnk7
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlTWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlTWFwLmNwcAkocmV2aXNpb24gMjc3OTYzKQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc2LDkgKzc2LDcgQEAgdm9pZCBMYXJnZU1hcDo6YWRkKGNvbnN0IExhcmdlUmFuZ2UmIHJhbgog
ICAgICAgICBtZXJnZWQgPSBtZXJnZShtZXJnZWQsIG1fZnJlZS5wb3AoaS0tKSk7CiAgICAgfQog
Ci0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKICAgICBtZXJnZWQuc2V0VXNlZFNpbmNlTGFz
dFNjYXZlbmdlKCk7Ci0jZW5kaWYKICAgICBtX2ZyZWUucHVzaChtZXJnZWQpOwogfQogCkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlUmFuZ2UuaAkocmV2aXNpb24gMjc3OTYzKQorKysgU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZVJhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDQ3
ICszNywzNSBAQCBwdWJsaWM6CiAgICAgICAgIDogUmFuZ2UoKQogICAgICAgICAsIG1fc3RhcnRQ
aHlzaWNhbFNpemUoMCkKICAgICAgICAgLCBtX3RvdGFsUGh5c2ljYWxTaXplKDApCi0jaWYgIUJV
U0UoUEFSVElBTF9TQ0FWRU5HRSkKKyAgICAgICAgLCBtX3BoeXNpY2FsRXh0ZW50KGJlZ2luKCkp
CiAgICAgICAgICwgbV9pc0VsaWdpYmxlKHRydWUpCiAgICAgICAgICwgbV91c2VkU2luY2VMYXN0
U2NhdmVuZ2UoZmFsc2UpCi0jZW5kaWYKICAgICB7CiAgICAgfQogCi0gICAgTGFyZ2VSYW5nZShj
b25zdCBSYW5nZSYgb3RoZXIsIHNpemVfdCBzdGFydFBoeXNpY2FsU2l6ZSwgc2l6ZV90IHRvdGFs
UGh5c2ljYWxTaXplKQorICAgIExhcmdlUmFuZ2UoY29uc3QgUmFuZ2UmIG90aGVyLCBzaXplX3Qg
c3RhcnRQaHlzaWNhbFNpemUsIHNpemVfdCB0b3RhbFBoeXNpY2FsU2l6ZSwgdm9pZCogcGh5c2lj
YWxFeHRlbnQpCiAgICAgICAgIDogUmFuZ2Uob3RoZXIpCiAgICAgICAgICwgbV9zdGFydFBoeXNp
Y2FsU2l6ZShzdGFydFBoeXNpY2FsU2l6ZSkKICAgICAgICAgLCBtX3RvdGFsUGh5c2ljYWxTaXpl
KHRvdGFsUGh5c2ljYWxTaXplKQotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCisgICAgICAg
ICwgbV9waHlzaWNhbEV4dGVudChzdGF0aWNfY2FzdDxjaGFyKj4ocGh5c2ljYWxFeHRlbnQpKQog
ICAgICAgICAsIG1faXNFbGlnaWJsZSh0cnVlKQogICAgICAgICAsIG1fdXNlZFNpbmNlTGFzdFNj
YXZlbmdlKGZhbHNlKQotI2VuZGlmCiAgICAgewogICAgICAgICBCQVNTRVJUKHRoaXMtPnNpemUo
KSA+PSB0aGlzLT50b3RhbFBoeXNpY2FsU2l6ZSgpKTsKICAgICAgICAgQkFTU0VSVCh0aGlzLT50
b3RhbFBoeXNpY2FsU2l6ZSgpID49IHRoaXMtPnN0YXJ0UGh5c2ljYWxTaXplKCkpOwogICAgIH0K
IAotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICBMYXJnZVJhbmdlKHZvaWQqIGJlZ2lu
LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHN0YXJ0UGh5c2ljYWxTaXplLCBzaXplX3QgdG90YWxQaHlz
aWNhbFNpemUpCi0gICAgICAgIDogUmFuZ2UoYmVnaW4sIHNpemUpCi0gICAgICAgICwgbV9zdGFy
dFBoeXNpY2FsU2l6ZShzdGFydFBoeXNpY2FsU2l6ZSkKLSAgICAgICAgLCBtX3RvdGFsUGh5c2lj
YWxTaXplKHRvdGFsUGh5c2ljYWxTaXplKQotICAgIHsKLSAgICAgICAgQkFTU0VSVCh0aGlzLT5z
aXplKCkgPj0gdGhpcy0+dG90YWxQaHlzaWNhbFNpemUoKSk7Ci0gICAgICAgIEJBU1NFUlQodGhp
cy0+dG90YWxQaHlzaWNhbFNpemUoKSA+PSB0aGlzLT5zdGFydFBoeXNpY2FsU2l6ZSgpKTsKLSAg
ICB9Ci0jZWxzZQotICAgIExhcmdlUmFuZ2Uodm9pZCogYmVnaW4sIHNpemVfdCBzaXplLCBzaXpl
X3Qgc3RhcnRQaHlzaWNhbFNpemUsIHNpemVfdCB0b3RhbFBoeXNpY2FsU2l6ZSwgYm9vbCB1c2Vk
U2luY2VMYXN0U2NhdmVuZ2UgPSBmYWxzZSkKKyAgICBMYXJnZVJhbmdlKHZvaWQqIGJlZ2luLCBz
aXplX3Qgc2l6ZSwgc2l6ZV90IHN0YXJ0UGh5c2ljYWxTaXplLCBzaXplX3QgdG90YWxQaHlzaWNh
bFNpemUsIHZvaWQqIHBoeXNpY2FsRXh0ZW50LCBib29sIHVzZWRTaW5jZUxhc3RTY2F2ZW5nZSA9
IGZhbHNlKQogICAgICAgICA6IFJhbmdlKGJlZ2luLCBzaXplKQogICAgICAgICAsIG1fc3RhcnRQ
aHlzaWNhbFNpemUoc3RhcnRQaHlzaWNhbFNpemUpCiAgICAgICAgICwgbV90b3RhbFBoeXNpY2Fs
U2l6ZSh0b3RhbFBoeXNpY2FsU2l6ZSkKKyAgICAgICAgLCBtX3BoeXNpY2FsRXh0ZW50KHN0YXRp
Y19jYXN0PGNoYXIqPihwaHlzaWNhbEV4dGVudCkpCiAgICAgICAgICwgbV9pc0VsaWdpYmxlKHRy
dWUpCiAgICAgICAgICwgbV91c2VkU2luY2VMYXN0U2NhdmVuZ2UodXNlZFNpbmNlTGFzdFNjYXZl
bmdlKQogICAgIHsKICAgICAgICAgQkFTU0VSVCh0aGlzLT5zaXplKCkgPj0gdGhpcy0+dG90YWxQ
aHlzaWNhbFNpemUoKSk7CiAgICAgICAgIEJBU1NFUlQodGhpcy0+dG90YWxQaHlzaWNhbFNpemUo
KSA+PSB0aGlzLT5zdGFydFBoeXNpY2FsU2l6ZSgpKTsKICAgICB9Ci0jZW5kaWYKIAogICAgIC8v
IFJldHVybnMgYSBsb3dlciBib3VuZCBvbiBwaHlzaWNhbCBzaXplIGF0IHRoZSBzdGFydCBvZiB0
aGUgcmFuZ2UuIFJhbmdlcyB0aGF0CiAgICAgLy8gc3BhbiBub24tcGh5c2ljYWwgZnJhZ21lbnRz
IHVzZSB0aGlzIG51bWJlciB0byByZW1lbWJlciB0aGUgcGh5c2ljYWwgc2l6ZSBvZgpAQCAtOTgs
MTcgKzg2LDIxIEBAIHB1YmxpYzoKICAgICAvLyBkb2Vzbid0IHJlYWxseSBhZmZlY3QgYWNjdXJh
Y3kuCiAgICAgc2l6ZV90IHRvdGFsUGh5c2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV90b3Rh
bFBoeXNpY2FsU2l6ZTsgfQogICAgIHZvaWQgc2V0VG90YWxQaHlzaWNhbFNpemUoc2l6ZV90IHRv
dGFsUGh5c2ljYWxTaXplKSB7IG1fdG90YWxQaHlzaWNhbFNpemUgPSB0b3RhbFBoeXNpY2FsU2l6
ZTsgfQorICAgIAorICAgIC8vIFRoaXMgdGhlIGxhc3QgYWRkcmVzcyBvZiBwaHlzaWNhbCBtZW1v
cnkgaW4gdGhpcyByYW5nZS4KKyAgICAvLyBXaGVuIGRlY29taXR0aW5nIHRoaXMgcmFuZ2UsIHdl
IGRlY29tbWl0dCBbYmVnaW4oKSwgcGh5c2ljYWxFeHRlbnQpLgorICAgIGNoYXIqIHBoeXNpY2Fs
RXh0ZW50KCkgY29uc3QgeyByZXR1cm4gbV9waHlzaWNhbEV4dGVudDsgfQorICAgIHZvaWQgc2V0
UGh5c2ljYWxFeHRlbnQodm9pZCogcGh5c2ljYWxFeHRlbnQpIHsgbV9waHlzaWNhbEV4dGVudCA9
IHN0YXRpY19jYXN0PGNoYXIqPihwaHlzaWNhbEV4dGVudCk7IH0KKyAgICB2b2lkIHJlc2V0UGh5
c2ljYWxFeHRlbnQoKSB7IG1fcGh5c2ljYWxFeHRlbnQgPSBiZWdpbigpOyB9CiAKICAgICBzdGQ6
OnBhaXI8TGFyZ2VSYW5nZSwgTGFyZ2VSYW5nZT4gc3BsaXQoc2l6ZV90KSBjb25zdDsKIAogICAg
IHZvaWQgc2V0RWxpZ2libGUoYm9vbCBlbGlnaWJsZSkgeyBtX2lzRWxpZ2libGUgPSBlbGlnaWJs
ZTsgfQogICAgIGJvb2wgaXNFbGlnaWJpbGUoKSBjb25zdCB7IHJldHVybiBtX2lzRWxpZ2libGU7
IH0KIAotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgYm9vbCB1c2VkU2luY2VMYXN0
U2NhdmVuZ2UoKSBjb25zdCB7IHJldHVybiBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5nZTsgfQogICAg
IHZvaWQgY2xlYXJVc2VkU2luY2VMYXN0U2NhdmVuZ2UoKSB7IG1fdXNlZFNpbmNlTGFzdFNjYXZl
bmdlID0gZmFsc2U7IH0KICAgICB2b2lkIHNldFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpIHsgbV91
c2VkU2luY2VMYXN0U2NhdmVuZ2UgPSB0cnVlOyB9Ci0jZW5kaWYKIAogICAgIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IHZvaWQqIG90aGVyKSBjb25zdCB7IHJldHVybiBiZWdpbigpIDwgb3RoZXI7IH0K
ICAgICBib29sIG9wZXJhdG9yPChjb25zdCBMYXJnZVJhbmdlJiBvdGhlcikgY29uc3QgeyByZXR1
cm4gYmVnaW4oKSA8IG90aGVyLmJlZ2luKCk7IH0KQEAgLTExNiwxMiArMTA4LDkgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBzaXplX3QgbV9zdGFydFBoeXNpY2FsU2l6ZTsKICAgICBzaXplX3Qg
bV90b3RhbFBoeXNpY2FsU2l6ZTsKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi0gICAgYm9v
bCBtX2lzRWxpZ2libGUgeyB0cnVlIH07Ci0jZWxzZQorICAgIGNoYXIqIG1fcGh5c2ljYWxFeHRl
bnQ7CiAgICAgdW5zaWduZWQgbV9pc0VsaWdpYmxlOiAxOwogICAgIHVuc2lnbmVkIG1fdXNlZFNp
bmNlTGFzdFNjYXZlbmdlOiAxOwotI2VuZGlmCiB9OwogCiBpbmxpbmUgYm9vbCBjYW5NZXJnZShj
b25zdCBMYXJnZVJhbmdlJiBhLCBjb25zdCBMYXJnZVJhbmdlJiBiKQpAQCAtMTQ0LDE4ICsxMzMs
MTcgQEAgaW5saW5lIGJvb2wgY2FuTWVyZ2UoY29uc3QgTGFyZ2VSYW5nZSYgYQogaW5saW5lIExh
cmdlUmFuZ2UgbWVyZ2UoY29uc3QgTGFyZ2VSYW5nZSYgYSwgY29uc3QgTGFyZ2VSYW5nZSYgYikK
IHsKICAgICBjb25zdCBMYXJnZVJhbmdlJiBsZWZ0ID0gc3RkOjptaW4oYSwgYik7Ci0jaWYgIUJV
U0UoUEFSVElBTF9TQ0FWRU5HRSkKKyAgICBjb25zdCBMYXJnZVJhbmdlJiByaWdodCA9IHN0ZDo6
bWF4KGEsIGIpOworICAgIHZvaWQqIHBoeXNpY2FsRXh0ZW50ID0gcmlnaHQudG90YWxQaHlzaWNh
bFNpemUoKSA/IHJpZ2h0LnBoeXNpY2FsRXh0ZW50KCkgOiBsZWZ0LnBoeXNpY2FsRXh0ZW50KCk7
CiAgICAgYm9vbCBtZXJnZWRVc2VkU2luY2VMYXN0U2NhdmVuZ2UgPSBhLnVzZWRTaW5jZUxhc3RT
Y2F2ZW5nZSgpIHx8IGIudXNlZFNpbmNlTGFzdFNjYXZlbmdlKCk7Ci0jZW5kaWYKICAgICBpZiAo
bGVmdC5zaXplKCkgPT0gbGVmdC5zdGFydFBoeXNpY2FsU2l6ZSgpKSB7CiAgICAgICAgIHJldHVy
biBMYXJnZVJhbmdlKAogICAgICAgICAgICAgbGVmdC5iZWdpbigpLAogICAgICAgICAgICAgYS5z
aXplKCkgKyBiLnNpemUoKSwKICAgICAgICAgICAgIGEuc3RhcnRQaHlzaWNhbFNpemUoKSArIGIu
c3RhcnRQaHlzaWNhbFNpemUoKSwKLSAgICAgICAgICAgIGEudG90YWxQaHlzaWNhbFNpemUoKSAr
IGIudG90YWxQaHlzaWNhbFNpemUoKQotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCisgICAg
ICAgICAgICBhLnRvdGFsUGh5c2ljYWxTaXplKCkgKyBiLnRvdGFsUGh5c2ljYWxTaXplKCksCisg
ICAgICAgICAgICBwaHlzaWNhbEV4dGVudAogICAgICAgICAgICAgLCBtZXJnZWRVc2VkU2luY2VM
YXN0U2NhdmVuZ2UKLSNlbmRpZgogICAgICAgICApOwogICAgICAgICAKICAgICB9CkBAIC0xNjQs
MTAgKzE1Miw5IEBAIGlubGluZSBMYXJnZVJhbmdlIG1lcmdlKGNvbnN0IExhcmdlUmFuZ2UKICAg
ICAgICAgbGVmdC5iZWdpbigpLAogICAgICAgICBhLnNpemUoKSArIGIuc2l6ZSgpLAogICAgICAg
ICBsZWZ0LnN0YXJ0UGh5c2ljYWxTaXplKCksCi0gICAgICAgIGEudG90YWxQaHlzaWNhbFNpemUo
KSArIGIudG90YWxQaHlzaWNhbFNpemUoKQotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCisg
ICAgICAgIGEudG90YWxQaHlzaWNhbFNpemUoKSArIGIudG90YWxQaHlzaWNhbFNpemUoKSwKKyAg
ICAgICAgcGh5c2ljYWxFeHRlbnQKICAgICAgICAgLCBtZXJnZWRVc2VkU2luY2VMYXN0U2NhdmVu
Z2UKLSNlbmRpZgogICAgICk7CiB9CiAKQEAgLTE3NSwxMSArMTYyLDEyIEBAIGlubGluZSBzdGQ6
OnBhaXI8TGFyZ2VSYW5nZSwgTGFyZ2VSYW5nZT4KIHsKICAgICBCQVNTRVJUKGxlZnRTaXplIDw9
IHRoaXMtPnNpemUoKSk7CiAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHRoaXMtPnNpemUoKSAtIGxl
ZnRTaXplOworICAgIGNoYXIqIHBoeXNpY2FsRXh0ZW50ID0gdGhpcy0+cGh5c2ljYWxFeHRlbnQo
KTsKIAogICAgIGlmIChsZWZ0U2l6ZSA8PSBzdGFydFBoeXNpY2FsU2l6ZSgpKSB7CiAgICAgICAg
IEJBU1NFUlQodG90YWxQaHlzaWNhbFNpemUoKSA+PSBsZWZ0U2l6ZSk7Ci0gICAgICAgIExhcmdl
UmFuZ2UgbGVmdChiZWdpbigpLCBsZWZ0U2l6ZSwgbGVmdFNpemUsIGxlZnRTaXplKTsKLSAgICAg
ICAgTGFyZ2VSYW5nZSByaWdodChsZWZ0LmVuZCgpLCByaWdodFNpemUsIHN0YXJ0UGh5c2ljYWxT
aXplKCkgLSBsZWZ0U2l6ZSwgdG90YWxQaHlzaWNhbFNpemUoKSAtIGxlZnRTaXplKTsKKyAgICAg
ICAgTGFyZ2VSYW5nZSBsZWZ0KGJlZ2luKCksIGxlZnRTaXplLCBsZWZ0U2l6ZSwgbGVmdFNpemUs
IHN0ZDo6bWluKHBoeXNpY2FsRXh0ZW50LCBiZWdpbigpICsgbGVmdFNpemUpKTsKKyAgICAgICAg
TGFyZ2VSYW5nZSByaWdodChsZWZ0LmVuZCgpLCByaWdodFNpemUsIHN0YXJ0UGh5c2ljYWxTaXpl
KCkgLSBsZWZ0U2l6ZSwgdG90YWxQaHlzaWNhbFNpemUoKSAtIGxlZnRTaXplLCBzdGQ6Om1heChw
aHlzaWNhbEV4dGVudCwgbGVmdC5lbmQoKSkpOwogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIobGVmdCwgcmlnaHQpOwogICAgIH0KIApAQCAtMTk0LDggKzE4Miw4IEBAIGlubGluZSBzdGQ6
OnBhaXI8TGFyZ2VSYW5nZSwgTGFyZ2VSYW5nZT4KICAgICAgICAgcmlnaHRUb3RhbFBoeXNpY2Fs
U2l6ZSA9IHJpZ2h0U2l6ZTsKICAgICB9CiAKLSAgICBMYXJnZVJhbmdlIGxlZnQoYmVnaW4oKSwg
bGVmdFNpemUsIHN0YXJ0UGh5c2ljYWxTaXplKCksIGxlZnRUb3RhbFBoeXNpY2FsU2l6ZSk7Ci0g
ICAgTGFyZ2VSYW5nZSByaWdodChsZWZ0LmVuZCgpLCByaWdodFNpemUsIDAsIHJpZ2h0VG90YWxQ
aHlzaWNhbFNpemUpOworICAgIExhcmdlUmFuZ2UgbGVmdChiZWdpbigpLCBsZWZ0U2l6ZSwgc3Rh
cnRQaHlzaWNhbFNpemUoKSwgbGVmdFRvdGFsUGh5c2ljYWxTaXplLCBzdGQ6Om1pbihwaHlzaWNh
bEV4dGVudCwgYmVnaW4oKSArIGxlZnRTaXplKSk7CisgICAgTGFyZ2VSYW5nZSByaWdodChsZWZ0
LmVuZCgpLCByaWdodFNpemUsIDAsIHJpZ2h0VG90YWxQaHlzaWNhbFNpemUsIHN0ZDo6bWF4KHBo
eXNpY2FsRXh0ZW50LCBsZWZ0LmVuZCgpKSk7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGxl
ZnQsIHJpZ2h0KTsKIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmNwcAko
cmV2aXNpb24gMjc3OTYzKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NSwxMSArODUsNyBAQCBTY2F2ZW5nZXI6OlNjYXZlbmdlcihj
b25zdCBMb2NrSG9sZGVyJikKICAgICBkaXNwYXRjaF9yZXN1bWUobV9wcmVzc3VyZUhhbmRsZXJE
aXNwYXRjaFNvdXJjZSk7CiAgICAgZGlzcGF0Y2hfcmVsZWFzZShxdWV1ZSk7CiAjZW5kaWYKLSNp
ZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi0gICAgbV93YWl0VGltZSA9IHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHMobV9pc0luTWluaU1vZGUgPyAyMDAgOiAyMDAwKTsKLSNlbHNlCiAgICAgbV93
YWl0VGltZSA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTApOwotI2VuZGlmCiAKICAgICBt
X3RocmVhZCA9IHN0ZDo6dGhyZWFkKCZ0aHJlYWRFbnRyeVBvaW50LCB0aGlzKTsKIH0KQEAgLTE4
NywxNCArMTgzLDYgQEAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBTY2F2ZW5nZXI6OnRpbQog
ICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzPihzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSAtIG1fbGFzdEZ1bGxTY2F2
ZW5nZVRpbWUpOwogfQogCi0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcyBTY2F2ZW5nZXI6OnRpbWVTaW5jZUxhc3RQYXJ0aWFsU2NhdmVuZ2UoKQot
ewotICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhtdXRleCgpKTsKLSAgICByZXR1cm4gc3RkOjpj
aHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJv
bm86OnN0ZWFkeV9jbG9jazo6bm93KCkgLSBtX2xhc3RQYXJ0aWFsU2NhdmVuZ2VUaW1lKTsKLX0K
LSNlbmRpZgotCiB2b2lkIFNjYXZlbmdlcjo6ZW5hYmxlTWluaU1vZGUoKQogewogICAgIG1faXNJ
bk1pbmlNb2RlID0gdHJ1ZTsgLy8gV2UganVzdCBzdG9yZSB0byB0aGlzIHJhY2lseS4gVGhlIHNj
YXZlbmdlciB0aHJlYWQgd2lsbCBldmVudHVhbGx5IHBpY2sgdXAgdGhlIHJpZ2h0IHZhbHVlLgpA
QCAtMjIwLDI1ICsyMDgsMTcgQEAgdm9pZCBTY2F2ZW5nZXI6OnNjYXZlbmdlKCkKIAogICAgICAg
ICB7CiAgICAgICAgICAgICBQcmludFRpbWUgcHJpbnRUaW1lKCJcbmZ1bGwgc2NhdmVuZ2UgdW5k
ZXIgbG9jayB0aW1lIik7Ci0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKICAgICAgICAgICAg
IHNpemVfdCBkZWZlcnJlZERlY29tbWl0cyA9IDA7Ci0jZW5kaWYKICAgICAgICAgICAgIFVuaXF1
ZUxvY2tIb2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bUhlYXBzOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0FjdGl2ZUhl
YXBLaW5kKHN0YXRpY19jYXN0PEhlYXBLaW5kPihpKSkpCiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICAgICAgICAgICAgICBQZXJQ
cm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGkpLnNjYXZlbmdlKGxvY2ssIGRl
Y29tbWl0dGVyKTsKLSNlbHNlCiAgICAgICAgICAgICAgICAgUGVyUHJvY2VzczxQZXJIZWFwS2lu
ZDxIZWFwPj46OmdldCgpLT5hdChpKS5zY2F2ZW5nZShsb2NrLCBkZWNvbW1pdHRlciwgZGVmZXJy
ZWREZWNvbW1pdHMpOwotI2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWNvbW1p
dHRlci5wcm9jZXNzRWFnZXIoKTsKIAotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAg
ICAgICAgICBpZiAoZGVmZXJyZWREZWNvbW1pdHMpCiAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9
IFN0YXRlOjpSdW5Tb29uOwotI2VuZGlmCiAgICAgICAgIH0KIAogICAgICAgICB7CkBAIC0yNzks
NzggKzI1OSw2IEBAIHZvaWQgU2NhdmVuZ2VyOjpzY2F2ZW5nZSgpCiAgICAgfQogfQogCi0jaWYg
QlVTRShQQVJUSUFMX1NDQVZFTkdFKQotdm9pZCBTY2F2ZW5nZXI6OnBhcnRpYWxTY2F2ZW5nZSgp
Ci17Ci0gICAgaWYgKCFtX2lzRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVW5pcXVl
TG9ja0hvbGRlciBsb2NrKG1fc2NhdmVuZ2luZ011dGV4KTsKLQotICAgIGlmICh2ZXJib3NlKSB7
Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS1cbiIpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi0tYmVmb3JlIHBhcnRpYWwgc2NhdmVu
Z2luZy0tXG4iKTsKLSAgICAgICAgZHVtcFN0YXRzKCk7Ci0gICAgfQotCi0gICAgewotICAgICAg
ICBCdWxrRGVjb21taXQgZGVjb21taXR0ZXI7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFByaW50
VGltZSBwcmludFRpbWUoIlxucGFydGlhbFNjYXZlbmdlIHVuZGVyIGxvY2sgdGltZSIpOwotICAg
ICAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSGVhcHM7IGktLTspIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIWlzQWN0aXZlSGVhcEtpbmQoc3RhdGljX2Nhc3Q8SGVhcEtpbmQ+KGkpKSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgSGVhcCYgaGVhcCA9IFBlclBy
b2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoaSk7Ci0gICAgICAgICAgICAgICAg
c2l6ZV90IGZyZWVhYmxlTWVtb3J5ID0gaGVhcC5mcmVlYWJsZU1lbW9yeShsb2NrKTsKLSAgICAg
ICAgICAgICAgICBpZiAoZnJlZWFibGVNZW1vcnkgPCA0ICogTUIpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGhlYXAuc2NhdmVuZ2VUb0hpZ2hXYXRlcm1h
cmsobG9jaywgZGVjb21taXR0ZXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWNv
bW1pdHRlci5wcm9jZXNzRWFnZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIFByaW50VGltZSBwcmludFRpbWUoInBhcnRpYWxTY2F2ZW5nZSBsYXp5IGRlY29tbWl0IHRp
bWUiKTsKLSAgICAgICAgICAgIGRlY29tbWl0dGVyLnByb2Nlc3NMYXp5KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICB7Ci0gICAgICAgICAgICBQcmludFRpbWUgcHJpbnRUaW1lKCJwYXJ0aWFsU2Nh
dmVuZ2UgbWFyayBhbGwgYXMgZWxpZ2libGUgdGltZSIpOwotICAgICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVt
SGVhcHM7IGktLTspIHsKLSAgICAgICAgICAgICAgICBpZiAoIWlzQWN0aXZlSGVhcEtpbmQoc3Rh
dGljX2Nhc3Q8SGVhcEtpbmQ+KGkpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgSGVhcCYgaGVhcCA9IFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+
OjpnZXQoKS0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgaGVhcC5tYXJrQWxsTGFyZ2VBc0VsaWdp
YmlsZShsb2NrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHsKLSAg
ICAgICAgUkVMRUFTRV9CQVNTRVJUKCFtX2RlZmVycmVkRGVjb21taXRzLnNpemUoKSk7Ci0gICAg
ICAgIEFsbElzb0hlYXBzOjpnZXQoKS0+Zm9yRWFjaCgKLSAgICAgICAgICAgIFsmXSAoSXNvSGVh
cEltcGxCYXNlJiBoZWFwKSB7Ci0gICAgICAgICAgICAgICAgaGVhcC5zY2F2ZW5nZVRvSGlnaFdh
dGVybWFyayhtX2RlZmVycmVkRGVjb21taXRzKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICBJ
c29IZWFwSW1wbEJhc2U6OmZpbmlzaFNjYXZlbmdpbmcobV9kZWZlcnJlZERlY29tbWl0cyk7Ci0g
ICAgICAgIG1fZGVmZXJyZWREZWNvbW1pdHMuc2hyaW5rKDApOwotICAgIH0KLQotICAgIGlmICh2
ZXJib3NlKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiLS1hZnRlciBwYXJ0aWFsIHNjYXZl
bmdpbmctLVxuIik7Ci0gICAgICAgIGR1bXBTdGF0cygpOwotICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgICB9Ci0KLSAgICB7
Ci0gICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhtdXRleCgpKTsKLSAgICAgICAgbV9sYXN0
UGFydGlhbFNjYXZlbmdlVGltZSA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwot
ICAgIH0KLX0KLSNlbmRpZgotCiBzaXplX3QgU2NhdmVuZ2VyOjpmcmVlYWJsZU1lbW9yeSgpCiB7
CiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CkBAIC00MzIsNjkgKzM0MCw2IEBAIHZvaWQgU2NhdmVu
Z2VyOjp0aHJlYWRSdW5Mb29wKCkKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogICAgICAgICB9CiAKLSNpZiBCVVNFKFBB
UlRJQUxfU0NBVkVOR0UpCi0gICAgICAgIGVudW0gY2xhc3MgU2NhdmVuZ2VNb2RlIHsKLSAgICAg
ICAgICAgIE5vbmUsCi0gICAgICAgICAgICBQYXJ0aWFsLAotICAgICAgICAgICAgRnVsbAotICAg
ICAgICB9OwotCi0gICAgICAgIHNpemVfdCBmcmVlYWJsZU1lbW9yeSA9IHRoaXMtPmZyZWVhYmxl
TWVtb3J5KCk7Ci0KLSAgICAgICAgU2NhdmVuZ2VNb2RlIHNjYXZlbmdlTW9kZSA9IFsmXSB7Ci0g
ICAgICAgICAgICBhdXRvIHRpbWVTaW5jZUxhc3RGdWxsU2NhdmVuZ2UgPSB0aGlzLT50aW1lU2lu
Y2VMYXN0RnVsbFNjYXZlbmdlKCk7Ci0gICAgICAgICAgICBhdXRvIHRpbWVTaW5jZUxhc3RQYXJ0
aWFsU2NhdmVuZ2UgPSB0aGlzLT50aW1lU2luY2VMYXN0UGFydGlhbFNjYXZlbmdlKCk7Ci0gICAg
ICAgICAgICBhdXRvIHRpbWVTaW5jZUxhc3RTY2F2ZW5nZSA9IHN0ZDo6bWluKHRpbWVTaW5jZUxh
c3RQYXJ0aWFsU2NhdmVuZ2UsIHRpbWVTaW5jZUxhc3RGdWxsU2NhdmVuZ2UpOwotCi0gICAgICAg
ICAgICBpZiAoaXNVbmRlck1lbW9yeVByZXNzdXJlKCkgJiYgZnJlZWFibGVNZW1vcnkgPiAxICog
TUIgJiYgdGltZVNpbmNlTGFzdFNjYXZlbmdlID4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyg1
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NhdmVuZ2VNb2RlOjpGdWxsOwotCi0gICAgICAg
ICAgICBpZiAoIW1faXNQcm9iYWJseUdyb3dpbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAodGlt
ZVNpbmNlTGFzdEZ1bGxTY2F2ZW5nZSA8IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTAwMCkg
JiYgIW1faXNJbk1pbmlNb2RlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2NhdmVuZ2VN
b2RlOjpQYXJ0aWFsOwotICAgICAgICAgICAgICAgIHJldHVybiBTY2F2ZW5nZU1vZGU6OkZ1bGw7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX2lzSW5NaW5pTW9kZSkgewotICAg
ICAgICAgICAgICAgIGlmICh0aW1lU2luY2VMYXN0RnVsbFNjYXZlbmdlIDwgc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcygyMDApKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2NhdmVuZ2VN
b2RlOjpQYXJ0aWFsOwotICAgICAgICAgICAgICAgIHJldHVybiBTY2F2ZW5nZU1vZGU6OkZ1bGw7
Ci0gICAgICAgICAgICB9Ci0KLSNpZiBCQ1BVKFg4Nl82NCkKLSAgICAgICAgICAgIGF1dG8gcGFy
dGlhbFNjYXZlbmdlSW50ZXJ2YWwgPSBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEyMDAwKTsK
LSNlbHNlCi0gICAgICAgICAgICBhdXRvIHBhcnRpYWxTY2F2ZW5nZUludGVydmFsID0gc3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcyg4MDAwKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKHRpbWVT
aW5jZUxhc3RTY2F2ZW5nZSA8IHBhcnRpYWxTY2F2ZW5nZUludGVydmFsKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gUmF0ZSBsaW1pdCBwYXJ0aWFsIHNjYXZlbmdlcy4KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gU2NhdmVuZ2VNb2RlOjpOb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGZyZWVhYmxlTWVtb3J5IDwgMjUgKiBNQikKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NhdmVu
Z2VNb2RlOjpOb25lOwotICAgICAgICAgICAgaWYgKDUgKiBmcmVlYWJsZU1lbW9yeSA8IGZvb3Rw
cmludCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBTY2F2ZW5nZU1vZGU6Ok5vbmU7Ci0gICAg
ICAgICAgICByZXR1cm4gU2NhdmVuZ2VNb2RlOjpQYXJ0aWFsOwotICAgICAgICB9KCk7Ci0KLSAg
ICAgICAgbV9pc1Byb2JhYmx5R3Jvd2luZyA9IGZhbHNlOwotCi0gICAgICAgIHN3aXRjaCAoc2Nh
dmVuZ2VNb2RlKSB7Ci0gICAgICAgIGNhc2UgU2NhdmVuZ2VNb2RlOjpOb25lOiB7Ci0gICAgICAg
ICAgICBydW5Tb29uKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIFNjYXZlbmdlTW9kZTo6UGFydGlhbDogewotICAgICAgICAgICAgcGFydGlhbFNjYXZlbmdl
KCk7Ci0gICAgICAgICAgICBydW5Tb29uKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIFNjYXZlbmdlTW9kZTo6RnVsbDogewotICAgICAgICAgICAgc2NhdmVu
Z2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIH0KLSNlbHNlCiAg
ICAgICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgc3RhcnQgeyBzdGQ6
OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSB9OwogICAgICAgICAKICAgICAgICAgc2NhdmVu
Z2UoKTsKQEAgLTUwOSwxNCArMzU0LDEzIEBAIHZvaWQgU2NhdmVuZ2VyOjp0aHJlYWRSdW5Mb29w
KCkKICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gaW52ZXN0aWdhdGUgbWluaS1tb2RlJ3Mg
YWRqdXN0bWVudC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMzk4NwogICAgICAgICBpZiAoIW1faXNJbk1pbmlNb2RlKSB7Ci0gICAgICAgICAg
ICB0aW1lU3BlbnRTY2F2ZW5naW5nICo9IDE1MDsKKyAgICAgICAgICAgIHRpbWVTcGVudFNjYXZl
bmdpbmcgKj0gc19uZXdXYWl0TXVsdGlwbGllcjsKICAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHMgbmV3V2FpdFRpbWUgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzPih0aW1lU3BlbnRTY2F2ZW5naW5nKTsKLSAgICAgICAgICAg
IG1fd2FpdFRpbWUgPSBzdGQ6Om1pbihzdGQ6Om1heChuZXdXYWl0VGltZSwgc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcygxMDApKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygxMDAwMCkpOwor
ICAgICAgICAgICAgbV93YWl0VGltZSA9IHN0ZDo6bWluKHN0ZDo6bWF4KG5ld1dhaXRUaW1lLCBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKHNfbWluV2FpdFRpbWVNaWxsaXNlY29uZHMpKSwgc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcyhzX21heFdhaXRUaW1lTWlsbGlzZWNvbmRzKSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAibmV3IHdhaXQgdGltZSAlbGxkbXNcbiIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZyBpbnQ+KG1f
d2FpdFRpbWUuY291bnQoKSkpOwotI2VuZGlmCiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1NjYXZlbmdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvU2NhdmVuZ2VyLmgJKHJldmlzaW9uIDI3Nzk2MykKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvU2NhdmVuZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDEwICs5Miw2IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzZXRUaHJlYWROYW1lKGNvbnN0IGNoYXIqKTsKIAogICAgIHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMgdGltZVNpbmNlTGFzdEZ1bGxTY2F2ZW5nZSgpOwotI2lmIEJVU0Uo
UEFSVElBTF9TQ0FWRU5HRSkKLSAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVTaW5j
ZUxhc3RQYXJ0aWFsU2NhdmVuZ2UoKTsKLSAgICB2b2lkIHBhcnRpYWxTY2F2ZW5nZSgpOwotI2Vu
ZGlmCiAKICAgICBzdGQ6OmF0b21pYzxTdGF0ZT4gbV9zdGF0ZSB7IFN0YXRlOjpTbGVlcCB9Owog
ICAgIHNpemVfdCBtX3NjYXZlbmdlckJ5dGVzIHsgMCB9OwpAQCAtMTA4LDE1ICsxMDQsMjIgQEAg
cHJpdmF0ZToKIAogICAgIHN0ZDo6dGhyZWFkIG1fdGhyZWFkOwogICAgIHN0ZDo6Y2hyb25vOjpz
dGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9sYXN0RnVsbFNjYXZlbmdlVGltZSB7IHN0ZDo6Y2hy
b25vOjpzdGVhZHlfY2xvY2s6Om5vdygpIH07Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQot
ICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9sYXN0UGFydGlhbFNj
YXZlbmdlVGltZSB7IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpIH07Ci0jZW5kaWYK
IAogI2lmIEJPUyhEQVJXSU4pCiAgICAgZGlzcGF0Y2hfc291cmNlX3QgbV9wcmVzc3VyZUhhbmRs
ZXJEaXNwYXRjaFNvdXJjZTsKICAgICBxb3NfY2xhc3NfdCBtX3JlcXVlc3RlZFNjYXZlbmdlclRo
cmVhZFFPU0NsYXNzIHsgUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEIH07CiAjZW5kaWYKICAgICAK
KyNpZiBCUExBVEZPUk0oTUFDKQorICAgIGNvbnN0IHVuc2lnbmVkIHNfbmV3V2FpdE11bHRpcGxp
ZXIgPSAzMDA7CisgICAgY29uc3QgdW5zaWduZWQgc19taW5XYWl0VGltZU1pbGxpc2Vjb25kcyA9
IDc1MDsKKyAgICBjb25zdCB1bnNpZ25lZCBzX21heFdhaXRUaW1lTWlsbGlzZWNvbmRzID0gMjAw
MDA7CisjZWxzZQorICAgIGNvbnN0IHVuc2lnbmVkIHNfbmV3V2FpdE11bHRpcGxpZXIgPSAxNTA7
CisgICAgY29uc3QgdW5zaWduZWQgc19taW5XYWl0VGltZU1pbGxpc2Vjb25kcyA9IDEwMDsKKyAg
ICBjb25zdCB1bnNpZ25lZCBzX21heFdhaXRUaW1lTWlsbGlzZWNvbmRzID0gMTAwMDA7CisjZW5k
aWYKKwogICAgIFZlY3RvcjxEZWZlcnJlZERlY29tbWl0PiBtX2RlZmVycmVkRGVjb21taXRzOwog
ICAgIGJvb2wgbV9pc0VuYWJsZWQgeyB0cnVlIH07CiB9OwpJbmRleDogU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9TbWFsbFBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1NtYWxsUGFnZS5oCShyZXZpc2lvbiAyNzc5NjMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1NtYWxsUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSArNTEsOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNQaHlzaWNhbFBhZ2VzKCkgeyByZXR1cm4gbV9oYXNQaHlzaWNhbFBhZ2VzOyB9
CiAgICAgdm9pZCBzZXRIYXNQaHlzaWNhbFBhZ2VzKGJvb2wgaGFzUGh5c2ljYWxQYWdlcykgeyBt
X2hhc1BoeXNpY2FsUGFnZXMgPSBoYXNQaHlzaWNhbFBhZ2VzOyB9CiAKLSNpZiAhQlVTRShQQVJU
SUFMX1NDQVZFTkdFKQogICAgIGJvb2wgdXNlZFNpbmNlTGFzdFNjYXZlbmdlKCkgeyByZXR1cm4g
bV91c2VkU2luY2VMYXN0U2NhdmVuZ2U7IH0KICAgICB2b2lkIGNsZWFyVXNlZFNpbmNlTGFzdFNj
YXZlbmdlKCkgeyBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5nZSA9IGZhbHNlOyB9CiAgICAgdm9pZCBz
ZXRVc2VkU2luY2VMYXN0U2NhdmVuZ2UoKSB7IG1fdXNlZFNpbmNlTGFzdFNjYXZlbmdlID0gdHJ1
ZTsgfQotI2VuZGlmCiAKICAgICBTbWFsbExpbmUqIGJlZ2luKCk7CiAKQEAgLTY1LDkgKzYzLDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBjaGFyIG1faGFzRnJlZUxpbmVzOiAx
OwogICAgIHVuc2lnbmVkIGNoYXIgbV9oYXNQaHlzaWNhbFBhZ2VzOiAxOwotI2lmICFCVVNFKFBB
UlRJQUxfU0NBVkVOR0UpCiAgICAgdW5zaWduZWQgY2hhciBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5n
ZTogMTsKLSNlbmRpZgogICAgIHVuc2lnbmVkIGNoYXIgbV9yZWZDb3VudDogNzsKICAgICB1bnNp
Z25lZCBjaGFyIG1fc2l6ZUNsYXNzOwogICAgIHVuc2lnbmVkIGNoYXIgbV9zbGlkZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429734</attachid>
            <date>2021-05-26 00:27:47 -0700</date>
            <delta_ts>2021-05-27 16:54:05 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>226237-wip2.patch</filename>
            <type>text/plain</type>
            <size>34520</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODA3MikKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDIxLTA1LTI1ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIFtibWFsbG9jXSBNYWtlIGFk
YXB0aXZlIHNjYXZlbmdpbmcgbW9yZSBwcmVjaXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYyMzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlLWVuYWJsZXMgdGhlIGFkYXB0aXZl
IHNjYXZlbmdlciBmb3IgbWFjT1MuCisgICAgICAgIEl0IGlzIG11Y2ggbW9yZSBwcmVjaXNlIHdo
ZW4gY2FsbGluZyBtYWR2aXNlKCkgYnkga2VlcGluZyB0cmFjayBvZiB0aGUKKyAgICAgICAgbWF4
aW11bSBleHRlbnQgb2YgcGh5c2ljYWxseSBtYXBwZWQgbWVtb3J5IGluIGEgTGFyZ2VSYW5nZS4g
IEZvciBleGFtcGxlLAorICAgICAgICBpbiB0aGUgcHJpb3IgY29kZSwgd2UnZCByZXR1cm4gYSBz
bWFsbCByYW5nZSBiYWNrIHRvIGEgR2lnYWNhZ2UgTGFyZ2VSYW5nZQorICAgICAgICB3aGl0aG91
dCBhbnkgcGh5c2ljYWwgcGFnZXMuICBXaGVuIHdlIHNjYXZlbmdlIHRoYXQgTGFyZ2VSYW5nZSwg
d2UgbWFkdmlzZSgpCisgICAgICAgIHRoZSB3aG9sZSBHaWdhY2FnZSByYW5nZS4gIEFsdGhvdWdo
IHRoaXMgZGlkbid0IGNhdXNlIGNvcnJlY3RuZXNzIGlzc3VlcywKKyAgICAgICAgaXQgd2FzIHF1
aXRlIHdhc3RlZnVsLgorCisgICAgICAgIFRoZXJlIGlzIHRoZSBwb3NzaWJsZSBmdXR1cmUgb3B0
aW1pemF0aW9uIHdoZXJlIHdlIGFsc28ga2VlcCB0cmFjayBvZiB0aGUKKyAgICAgICAgZmlyc3Qg
YWRkcmVzcyBvZiBwaHlzaWNhbGx5IG1hcHBlZCBtZW1vcnkgaW4gYSBMYXJnZVJhbmdlLiAgU2lu
Y2UgYm1hbGxvYworICAgICAgICBhbGxvY2F0ZXMgbWVtb3J5IGZyb20gbG93ZXIgYWRkcmVzc2Vz
IGZpcnN0LCBpdCBpcyB0aG91Z2h0IHRoYXQgdGhlIGNoYW5nZQorICAgICAgICBpbiB0aGlzIHBh
dGNoIGlzIHN1ZmZpY2llbnQgdG8gcmVkdWNlIG5vdCBvbmx5IHRoZSBudW1iZXIgb2YgbWFkdmlz
ZSBjYWxscywKKyAgICAgICAgYnV0IHRoZSB0aW1lIGl0IHRha2VzIHRvIG1ha2UgdGhvc2UgY2Fs
bHMuCisKKyAgICAgICAgKiBibWFsbG9jL0JQbGF0Zm9ybS5oOgorICAgICAgICAqIGJtYWxsb2Mv
SGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWNvbW1pdExhcmdlUmFuZ2UpOgor
ICAgICAgICAoYm1hbGxvYzo6SGVhcDo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6YWxsb2NhdGVTbWFsbENodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2Nh
dGVTbWFsbENodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxQYWdl
KToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNwbGl0QW5kQWxsb2NhdGUpOgorICAgICAgICAo
Ym1hbGxvYzo6SGVhcDo6YWxsb2NhdGVMYXJnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjp0
cnlBbGxvY2F0ZUxhcmdlQ2h1bmspOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6c2hyaW5rTGFy
Z2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZUxhcmdlKToKKyAgICAgICAg
KGJtYWxsb2M6OkhlYXA6OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBibWFsbG9jL0hlYXAuaDoKKyAgICAgICAgKiBibWFsbG9jL0lzb0RpcmVjdG9yeS5oOgor
ICAgICAgICAqIGJtYWxsb2MvSXNvRGlyZWN0b3J5SW5saW5lcy5oOgorICAgICAgICAoYm1hbGxv
Yzo6cGFzc2VkTnVtUGFnZXM+Ojp0YWtlRmlyc3RFbGlnaWJsZSk6CisgICAgICAgIChibWFsbG9j
OjpwYXNzZWROdW1QYWdlcz46OnNjYXZlbmdlKToKKyAgICAgICAgKGJtYWxsb2M6OnBhc3NlZE51
bVBhZ2VzPjo6c2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmspOiBEZWxldGVkLgorICAgICAgICAqIGJt
YWxsb2MvSXNvSGVhcEltcGwuaDoKKyAgICAgICAgKiBibWFsbG9jL0lzb0hlYXBJbXBsSW5saW5l
cy5oOgorICAgICAgICAoYm1hbGxvYzo6SXNvSGVhcEltcGw8Q29uZmlnPjo6c2NhdmVuZ2VUb0hp
Z2hXYXRlcm1hcmspOiBEZWxldGVkLgorICAgICAgICAqIGJtYWxsb2MvTGFyZ2VNYXAuY3BwOgor
ICAgICAgICAoYm1hbGxvYzo6TGFyZ2VNYXA6OmFkZCk6CisgICAgICAgICogYm1hbGxvYy9MYXJn
ZVJhbmdlLmg6CisgICAgICAgIChibWFsbG9jOjpMYXJnZVJhbmdlOjpMYXJnZVJhbmdlKToKKyAg
ICAgICAgKGJtYWxsb2M6OkxhcmdlUmFuZ2U6OnBoeXNpY2FsRXh0ZW50IGNvbnN0KToKKyAgICAg
ICAgKGJtYWxsb2M6OkxhcmdlUmFuZ2U6OnNldFBoeXNpY2FsRXh0ZW50KToKKyAgICAgICAgKGJt
YWxsb2M6OkxhcmdlUmFuZ2U6OnJlc2V0UGh5c2ljYWxFeHRlbnQpOgorICAgICAgICAoYm1hbGxv
Yzo6TGFyZ2VSYW5nZTo6c2V0VXNlZFNpbmNlTGFzdFNjYXZlbmdlKToKKyAgICAgICAgKGJtYWxs
b2M6Om1lcmdlKToKKyAgICAgICAgKGJtYWxsb2M6OkxhcmdlUmFuZ2U6OnNwbGl0IGNvbnN0KToK
KyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9TY2F2ZW5nZXIuY3BwOgor
ICAgICAgICAoYm1hbGxvYzo6U2NhdmVuZ2VyOjpTY2F2ZW5nZXIpOgorICAgICAgICAoYm1hbGxv
Yzo6U2NhdmVuZ2VyOjpzY2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnRo
cmVhZFJ1bkxvb3ApOgorICAgICAgICAoYm1hbGxvYzo6U2NhdmVuZ2VyOjp0aW1lU2luY2VMYXN0
UGFydGlhbFNjYXZlbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6
cGFydGlhbFNjYXZlbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL1NjYXZlbmdlci5o
OgorICAgICAgICAqIGJtYWxsb2MvU21hbGxQYWdlLmg6CisgICAgICAgIChibWFsbG9jOjpTbWFs
bFBhZ2U6OnNldFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSk6CisKIDIwMjEtMDUtMjEgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgW2JtYWxsb2NdIFJvbGxvdXQg
cjI3NjI2NiBiZWNhdXNlIFdlYktpdCBwcm9jZXNzZXMgYXJlIHNwZW5kaW5nIG11Y2ggbW9yZSB0
aW1lIGluIG1hZHZpc2UKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQlBsYXRmb3JtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CUGxhdGZvcm0uaAkocmV2aXNp
b24gMjc4MDcyKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CUGxhdGZvcm0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA5LDEyICszMDksNiBAQAogLyogVGhpcyBpcyB1c2VkIGZvciBkZWJ1Z2dp
bmcgd2hlbiBoYWNraW5nIG9uIGhvdyBibWFsbG9jIGNhbGN1bGF0ZXMgaXRzIHBoeXNpY2FsIGZv
b3RwcmludC4gKi8KICNkZWZpbmUgRU5BQkxFX1BIWVNJQ0FMX1BBR0VfTUFQIDAKIAotI2lmIEJQ
TEFURk9STShNQUMpCi0jZGVmaW5lIEJVU0VfUEFSVElBTF9TQ0FWRU5HRSAxCi0jZWxzZQotI2Rl
ZmluZSBCVVNFX1BBUlRJQUxfU0NBVkVOR0UgMAotI2VuZGlmCi0KICNpZiAhZGVmaW5lZChCVVNF
X1BSRUNPTVBVVEVEX0NPTlNUQU5UU19WTVBBR0U0SykKICNkZWZpbmUgQlVTRV9QUkVDT01QVVRF
RF9DT05TVEFOVFNfVk1QQUdFNEsgMQogI2VuZGlmCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5j
cHAJKHJldmlzaW9uIDI3ODA3MikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgSGVhcDo6SGVhcChIZWFwS2luZCBraW5k
LCBMb2NrSG9sZGVyJikKICAgICAgICAgbV9naWdhY2FnZVNpemUgPSBzaXplOwogICAgICAgICBw
dHJkaWZmX3Qgb2Zmc2V0ID0gcm91bmREb3duVG9NdWx0aXBsZU9mKHZtUGFnZVNpemUoKSwgcmFu
ZG9tWzFdICUgKGdpZ2FjYWdlU2l6ZSAtIHNpemUpKTsKICAgICAgICAgdm9pZCogYmFzZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGdpZ2FjYWdlQmFzZVB0cikgKyBvZmZzZXQ7
Ci0gICAgICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJhbmdlKGJhc2UsIHNpemUsIDAsIDApKTsK
KyAgICAgICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFuZ2UoYmFzZSwgc2l6ZSwgMCwgMCwgYmFz
ZSkpOwogICAgIH0KICNlbmRpZgogICAgIApAQCAtMTA4LDEwICsxMDgsMTMgQEAgdm9pZCBIZWFw
OjpkZWNvbW1pdExhcmdlUmFuZ2UoVW5pcXVlTG9jawogewogICAgIG1fZm9vdHByaW50IC09IHJh
bmdlLnRvdGFsUGh5c2ljYWxTaXplKCk7CiAgICAgbV9mcmVlYWJsZU1lbW9yeSAtPSByYW5nZS50
b3RhbFBoeXNpY2FsU2l6ZSgpOwotICAgIGRlY29tbWl0dGVyLmFkZExhenkocmFuZ2UuYmVnaW4o
KSwgcmFuZ2Uuc2l6ZSgpKTsKLSAgICBtX2hhc1BlbmRpbmdEZWNvbW1pdHMgPSB0cnVlOworICAg
IGlmIChyYW5nZS50b3RhbFBoeXNpY2FsU2l6ZSgpKSB7CisgICAgICAgIGRlY29tbWl0dGVyLmFk
ZExhenkocmFuZ2UuYmVnaW4oKSwgcmFuZ2UucGh5c2ljYWxFbmQoKSAtIHJhbmdlLmJlZ2luKCkp
OworICAgICAgICBtX2hhc1BlbmRpbmdEZWNvbW1pdHMgPSB0cnVlOworICAgIH0KICAgICByYW5n
ZS5zZXRTdGFydFBoeXNpY2FsU2l6ZSgwKTsKICAgICByYW5nZS5zZXRUb3RhbFBoeXNpY2FsU2l6
ZSgwKTsKKyAgICByYW5nZS5jbGVhclBoeXNpY2FsRW5kKCk7CiAgICAgQkFTU0VSVChyYW5nZS5p
c0VsaWdpYmlsZSgpKTsKICAgICByYW5nZS5zZXRFbGlnaWJsZShmYWxzZSk7CiAjaWYgRU5BQkxF
X1BIWVNJQ0FMX1BBR0VfTUFQIApAQCAtMTE5LDI0ICsxMjIsMTggQEAgdm9pZCBIZWFwOjpkZWNv
bW1pdExhcmdlUmFuZ2UoVW5pcXVlTG9jawogI2VuZGlmCiB9CiAKLSNpZiBCVVNFKFBBUlRJQUxf
U0NBVkVOR0UpCi12b2lkIEhlYXA6OnNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIEJ1
bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIpCi0jZWxzZQogdm9pZCBIZWFwOjpzY2F2ZW5nZShVbmlx
dWVMb2NrSG9sZGVyJiBsb2NrLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyLCBzaXplX3QmIGRl
ZmVycmVkRGVjb21taXRzKQotI2VuZGlmCiB7CiAgICAgZm9yIChhdXRvJiBsaXN0IDogbV9mcmVl
UGFnZXMpIHsKICAgICAgICAgZm9yIChhdXRvKiBjaHVuayA6IGxpc3QpIHsKICAgICAgICAgICAg
IGZvciAoYXV0byogcGFnZSA6IGNodW5rLT5mcmVlUGFnZXMoKSkgewogICAgICAgICAgICAgICAg
IGlmICghcGFnZS0+aGFzUGh5c2ljYWxQYWdlcygpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQogICAgICAgICAgICAgICAgIGlmIChw
YWdlLT51c2VkU2luY2VMYXN0U2NhdmVuZ2UoKSkgewogICAgICAgICAgICAgICAgICAgICBwYWdl
LT5jbGVhclVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpOwogICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZERlY29tbWl0cysrOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICB9Ci0jZW5kaWYKIAogICAgICAgICAgICAgICAgIHNpemVfdCBwYWdlU2l6ZSA9IGJt
YWxsb2M6OnBhZ2VTaXplKCZsaXN0IC0gJm1fZnJlZVBhZ2VzWzBdKTsKICAgICAgICAgICAgICAg
ICBzaXplX3QgZGVjb21taXRTaXplID0gcGh5c2ljYWxQYWdlU2l6ZVNsb3BweShwYWdlLT5iZWdp
bigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7CkBAIC0xNTcsMzYgKzE1NCwxNCBAQCB2b2lkIEhlYXA6
OnNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvCiAgICAgfQogCiAgICAgZm9yIChMYXJnZVJh
bmdlJiByYW5nZSA6IG1fbGFyZ2VGcmVlKSB7Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQot
ICAgICAgICBtX2hpZ2hXYXRlcm1hcmsgPSBzdGQ6Om1pbihtX2hpZ2hXYXRlcm1hcmssIHN0YXRp
Y19jYXN0PHZvaWQqPihyYW5nZS5iZWdpbigpKSk7Ci0jZWxzZQogICAgICAgICBpZiAocmFuZ2Uu
dXNlZFNpbmNlTGFzdFNjYXZlbmdlKCkpIHsKICAgICAgICAgICAgIHJhbmdlLmNsZWFyVXNlZFNp
bmNlTGFzdFNjYXZlbmdlKCk7CiAgICAgICAgICAgICBkZWZlcnJlZERlY29tbWl0cysrOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSNlbmRpZgogICAgICAgICBkZWNvbW1pdExh
cmdlUmFuZ2UobG9jaywgcmFuZ2UsIGRlY29tbWl0dGVyKTsKICAgICB9Ci0KLSNpZiBCVVNFKFBB
UlRJQUxfU0NBVkVOR0UpCi0gICAgbV9mcmVlYWJsZU1lbW9yeSA9IDA7Ci0jZW5kaWYKLX0KLQot
I2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLXZvaWQgSGVhcDo6c2NhdmVuZ2VUb0hpZ2hXYXRl
cm1hcmsoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgQnVsa0RlY29tbWl0JiBkZWNvbW1pdHRlcikK
LXsKLSAgICB2b2lkKiBuZXdIaWdoV2F0ZXJNYXJrID0gbnVsbHB0cjsKLSAgICBmb3IgKExhcmdl
UmFuZ2UmIHJhbmdlIDogbV9sYXJnZUZyZWUpIHsKLSAgICAgICAgaWYgKHJhbmdlLmJlZ2luKCkg
PD0gbV9oaWdoV2F0ZXJtYXJrKQotICAgICAgICAgICAgbmV3SGlnaFdhdGVyTWFyayA9IHN0ZDo6
bWluKG5ld0hpZ2hXYXRlck1hcmssIHN0YXRpY19jYXN0PHZvaWQqPihyYW5nZS5iZWdpbigpKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRlY29tbWl0TGFyZ2VSYW5nZShsb2NrLCByYW5n
ZSwgZGVjb21taXR0ZXIpOwotICAgIH0KLSAgICBtX2hpZ2hXYXRlcm1hcmsgPSBuZXdIaWdoV2F0
ZXJNYXJrOwogfQotI2VuZGlmCiAKIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZUxpbmVDYWNoZShVbmlx
dWVMb2NrSG9sZGVyJiwgTGluZUNhY2hlJiBsaW5lQ2FjaGUpCiB7CkBAIC0yMjEsMjIgKzE5Niwx
MyBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxDaHVuayhVbmlxdWVMb2NrCiAgICAgICAgIHNp
emVfdCBhY2NvdW50ZWRJbkZyZWVhYmxlID0gMDsKICAgICAgICAgZm9yRWFjaFBhZ2UoY2h1bmss
IHBhZ2VTaXplLCBbJl0oU21hbGxQYWdlKiBwYWdlKSB7CiAgICAgICAgICAgICBwYWdlLT5zZXRI
YXNQaHlzaWNhbFBhZ2VzKHRydWUpOwotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAg
ICAgICAgICBwYWdlLT5zZXRVc2VkU2luY2VMYXN0U2NhdmVuZ2UoKTsKLSNlbmRpZgogICAgICAg
ICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGxvY2ssIHRydWUpOwogICAgICAgICAgICAgY2h1
bmstPmZyZWVQYWdlcygpLnB1c2gocGFnZSk7CiAgICAgICAgICAgICBhY2NvdW50ZWRJbkZyZWVh
YmxlICs9IHBhZ2VTaXplOwogICAgICAgICB9KTsKIAotICAgICAgICBtX2ZyZWVhYmxlTWVtb3J5
ICs9IGFjY291bnRlZEluRnJlZWFibGU7Ci0KLSAgICAgICAgYXV0byBtZXRhZGF0YVNpemUgPSBD
aHVuazo6bWV0YWRhdGFTaXplKHBhZ2VTaXplKTsKLSAgICAgICAgdm1EZWFsbG9jYXRlUGh5c2lj
YWxQYWdlc1Nsb3BweShjaHVuay0+YWRkcmVzcyhzaXplb2YoQ2h1bmspKSwgbWV0YWRhdGFTaXpl
IC0gc2l6ZW9mKENodW5rKSk7Ci0KLSAgICAgICAgYXV0byBkZWNvbW1pdFNpemUgPSBjaHVua1Np
emUgLSBtZXRhZGF0YVNpemUgLSBhY2NvdW50ZWRJbkZyZWVhYmxlOwotICAgICAgICBpZiAoZGVj
b21taXRTaXplID4gMCkKLSAgICAgICAgICAgIHZtRGVhbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9w
cHkoY2h1bmstPmFkZHJlc3MoY2h1bmtTaXplIC0gZGVjb21taXRTaXplKSwgZGVjb21taXRTaXpl
KTsKKyAgICAgICAgbV9mcmVlYWJsZU1lbW9yeSArPSBjaHVua1NpemU7CiAKICAgICAgICAgbV9z
Y2F2ZW5nZXItPnNjaGVkdWxlKDApOwogCkBAIC0yNTMsMjQgKzIxOSwyOCBAQCB2b2lkIEhlYXA6
OmRlYWxsb2NhdGVTbWFsbENodW5rKFVuaXF1ZUxvCiAgICAgCiAgICAgc2l6ZV90IHNpemUgPSBt
X2xhcmdlQWxsb2NhdGVkLnJlbW92ZShjaHVuayk7CiAgICAgc2l6ZV90IHRvdGFsUGh5c2ljYWxT
aXplID0gc2l6ZTsKKyAgICBzaXplX3QgY2h1bmtQYWdlU2l6ZSA9IHBhZ2VTaXplKHBhZ2VDbGFz
cyk7CisgICAgYm9vbCBjYWxjdWxhdGluZ1N0YXJ0UGh5c2ljYWxTaXplID0gdHJ1ZTsKKyAgICBz
aXplX3Qgc3RhcnRQaHlzaWNhbFNpemUgPSAwOwogCi0gICAgc2l6ZV90IGFjY291bnRlZEluRnJl
ZWFibGUgPSAwOwotCi0gICAgYm9vbCBoYXNQaHlzaWNhbFBhZ2VzID0gdHJ1ZTsKLSAgICBmb3JF
YWNoUGFnZShjaHVuaywgcGFnZVNpemUocGFnZUNsYXNzKSwgWyZdKFNtYWxsUGFnZSogcGFnZSkg
eworICAgIHZvaWQqIHBoeXNpY2FsRW5kID0gY2h1bmstPmFkZHJlc3MoY2h1bmstPm1ldGFkYXRh
U2l6ZShjaHVua1BhZ2VTaXplKSk7CisgICAgZm9yRWFjaFBhZ2UoY2h1bmssIGNodW5rUGFnZVNp
emUsIFsmXShTbWFsbFBhZ2UqIHBhZ2UpIHsKICAgICAgICAgc2l6ZV90IHBoeXNpY2FsU2l6ZSA9
IHBoeXNpY2FsUGFnZVNpemVTbG9wcHkocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUo
cGFnZUNsYXNzKSk7CiAgICAgICAgIGlmICghcGFnZS0+aGFzUGh5c2ljYWxQYWdlcygpKSB7CiAg
ICAgICAgICAgICB0b3RhbFBoeXNpY2FsU2l6ZSAtPSBwaHlzaWNhbFNpemU7Ci0gICAgICAgICAg
ICBoYXNQaHlzaWNhbFBhZ2VzID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoY2FsY3VsYXRpbmdT
dGFydFBoeXNpY2FsU2l6ZSkgeworICAgICAgICAgICAgICAgIGNhbGN1bGF0aW5nU3RhcnRQaHlz
aWNhbFNpemUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBzdGFydFBoeXNpY2FsU2l6ZSA9IHBh
Z2UtPmJlZ2luKCktPmJlZ2luKCkgLSBjaHVuay0+Ynl0ZXMoKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhY2NvdW50ZWRJbkZyZWVhYmxlICs9IHBoeXNpY2Fs
U2l6ZTsKKyAgICAgICAgICAgIHBoeXNpY2FsRW5kID0gcGFnZS0+YmVnaW4oKS0+YmVnaW4oKSAr
IHBoeXNpY2FsU2l6ZTsKICAgICB9KTsKIAotICAgIG1fZnJlZWFibGVNZW1vcnkgLT0gYWNjb3Vu
dGVkSW5GcmVlYWJsZTsKLSAgICBtX2ZyZWVhYmxlTWVtb3J5ICs9IHRvdGFsUGh5c2ljYWxTaXpl
OworICAgIGlmIChjYWxjdWxhdGluZ1N0YXJ0UGh5c2ljYWxTaXplKQorICAgICAgICBzdGFydFBo
eXNpY2FsU2l6ZSA9IHNpemU7CiAKLSAgICBzaXplX3Qgc3RhcnRQaHlzaWNhbFNpemUgPSBoYXNQ
aHlzaWNhbFBhZ2VzID8gc2l6ZSA6IDA7Ci0gICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFuZ2Uo
Y2h1bmssIHNpemUsIHN0YXJ0UGh5c2ljYWxTaXplLCB0b3RhbFBoeXNpY2FsU2l6ZSkpOworICAg
IHBoeXNpY2FsRW5kID0gdG90YWxQaHlzaWNhbFNpemUgPT0gc2l6ZSA/IGNodW5rLT5hZGRyZXNz
KHRvdGFsUGh5c2ljYWxTaXplKSA6IHBoeXNpY2FsRW5kOworICAgIG1fbGFyZ2VGcmVlLmFkZChM
YXJnZVJhbmdlKGNodW5rLCBzaXplLCBzdGFydFBoeXNpY2FsU2l6ZSwgdG90YWxQaHlzaWNhbFNp
emUsIHBoeXNpY2FsRW5kKSk7CiB9CiAKIFNtYWxsUGFnZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBh
Z2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IHNpemVDbGFzcywgTGluZUNhY2hlJiBs
aW5lQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQpAQCAtMzE0LDkgKzI4NCw3IEBAIFNtYWxs
UGFnZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2UoVW5pcXUKICAgICAgICAgICAgIG1fcGh5c2lj
YWxQYWdlTWFwLmNvbW1pdChwYWdlLT5iZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7CiAjZW5k
aWYKICAgICAgICAgfQotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgICAgIHBhZ2Ut
PnNldFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpOwotI2VuZGlmCiAKICAgICAgICAgcmV0dXJuIHBh
Z2U7CiAgICAgfSgpOwpAQCAtNTI1LDYgKzQ5Myw3IEBAIExhcmdlUmFuZ2UgSGVhcDo6c3BsaXRB
bmRBbGxvY2F0ZShVbmlxdWUKICAgICAgICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHko
cmFuZ2UuYmVnaW4oKSArIHJhbmdlLnN0YXJ0UGh5c2ljYWxTaXplKCksIHJhbmdlLnNpemUoKSAt
IHJhbmdlLnN0YXJ0UGh5c2ljYWxTaXplKCkpOwogICAgICAgICByYW5nZS5zZXRTdGFydFBoeXNp
Y2FsU2l6ZShyYW5nZS5zaXplKCkpOwogICAgICAgICByYW5nZS5zZXRUb3RhbFBoeXNpY2FsU2l6
ZShyYW5nZS5zaXplKCkpOworICAgICAgICByYW5nZS5zZXRQaHlzaWNhbEVuZChyYW5nZS5iZWdp
bigpICsgcmFuZ2Uuc2l6ZSgpKTsKICNpZiBFTkFCTEVfUEhZU0lDQUxfUEFHRV9NQVAgCiAgICAg
ICAgIG1fcGh5c2ljYWxQYWdlTWFwLmNvbW1pdChyYW5nZS5iZWdpbigpLCByYW5nZS5zaXplKCkp
OwogI2VuZGlmCkBAIC01OTAsOSArNTU5LDYgQEAgdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShV
bmlxdWVMb2NrSG9sZAogICAgIG1fZnJlZWFibGVNZW1vcnkgLT0gcmFuZ2UudG90YWxQaHlzaWNh
bFNpemUoKTsKIAogICAgIHZvaWQqIHJlc3VsdCA9IHNwbGl0QW5kQWxsb2NhdGUobG9jaywgcmFu
Z2UsIGFsaWdubWVudCwgc2l6ZSkuYmVnaW4oKTsKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0Up
Ci0gICAgbV9oaWdoV2F0ZXJtYXJrID0gc3RkOjptYXgobV9oaWdoV2F0ZXJtYXJrLCByZXN1bHQp
OwotI2VuZGlmCiAgICAgQVNTRVJUX09SX1JFVFVSTl9PTl9GQUlMVVJFKHJlc3VsdCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIApAQCAtNjIxLDcgKzU4Nyw3IEBAIExhcmdlUmFuZ2UgSGVhcDo6dHJ5
QWxsb2NhdGVMYXJnZUNodW5rKHMKICAgICBQZXJQcm9jZXNzPFpvbmU+OjpnZXQoKS0+YWRkUmFu
Z2UoUmFuZ2UobWVtb3J5LCBzaXplKSk7CiAjZW5kaWYKIAotICAgIHJldHVybiBMYXJnZVJhbmdl
KG1lbW9yeSwgc2l6ZSwgMCwgMCk7CisgICAgcmV0dXJuIExhcmdlUmFuZ2UobWVtb3J5LCBzaXpl
LCAwLCAwLCBtZW1vcnkpOwogfQogCiBzaXplX3QgSGVhcDo6bGFyZ2VTaXplKFVuaXF1ZUxvY2tI
b2xkZXImLCB2b2lkKiBvYmplY3QpCkBAIC02MzQsNyArNjAwLDcgQEAgdm9pZCBIZWFwOjpzaHJp
bmtMYXJnZShVbmlxdWVMb2NrSG9sZGVyJgogICAgIEJBU1NFUlQob2JqZWN0LnNpemUoKSA+IG5l
d1NpemUpOwogCiAgICAgc2l6ZV90IHNpemUgPSBtX2xhcmdlQWxsb2NhdGVkLnJlbW92ZShvYmpl
Y3QuYmVnaW4oKSk7Ci0gICAgTGFyZ2VSYW5nZSByYW5nZSA9IExhcmdlUmFuZ2Uob2JqZWN0LCBz
aXplLCBzaXplKTsKKyAgICBMYXJnZVJhbmdlIHJhbmdlID0gTGFyZ2VSYW5nZShvYmplY3QsIHNp
emUsIHNpemUsIG9iamVjdC5iZWdpbigpICsgc2l6ZSk7CiAgICAgc3BsaXRBbmRBbGxvY2F0ZShs
b2NrLCByYW5nZSwgYWxpZ25tZW50LCBuZXdTaXplKTsKIAogICAgIG1fc2NhdmVuZ2VyLT5zY2hl
ZHVsZShzaXplKTsKQEAgLTY0Myw3ICs2MDksNyBAQCB2b2lkIEhlYXA6OnNocmlua0xhcmdlKFVu
aXF1ZUxvY2tIb2xkZXImCiB2b2lkIEhlYXA6OmRlYWxsb2NhdGVMYXJnZShVbmlxdWVMb2NrSG9s
ZGVyJiwgdm9pZCogb2JqZWN0KQogewogICAgIHNpemVfdCBzaXplID0gbV9sYXJnZUFsbG9jYXRl
ZC5yZW1vdmUob2JqZWN0KTsKLSAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShvYmplY3Qs
IHNpemUsIHNpemUsIHNpemUpKTsKKyAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShvYmpl
Y3QsIHNpemUsIHNpemUsIHNpemUsIHN0YXRpY19jYXN0PGNoYXIqPihvYmplY3QpICsgc2l6ZSkp
OwogICAgIG1fZnJlZWFibGVNZW1vcnkgKz0gc2l6ZTsKICAgICBtX3NjYXZlbmdlci0+c2NoZWR1
bGUoc2l6ZSk7CiB9CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkocmV2aXNpb24gMjc4MDcyKQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDEy
ICs3NCw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgbGFyZ2VTaXplKFVuaXF1ZUxvY2tIb2xkZXIm
LCB2b2lkKik7CiAgICAgdm9pZCBzaHJpbmtMYXJnZShVbmlxdWVMb2NrSG9sZGVyJiwgY29uc3Qg
UmFuZ2UmLCBzaXplX3QpOwogCi0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAgIHZvaWQg
c2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsoVW5pcXVlTG9ja0hvbGRlciYsIEJ1bGtEZWNvbW1pdCYp
OwotICAgIHZvaWQgc2NhdmVuZ2UoVW5pcXVlTG9ja0hvbGRlciYsIEJ1bGtEZWNvbW1pdCYpOwot
I2Vsc2UKICAgICB2b2lkIHNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImLCBCdWxrRGVjb21taXQm
LCBzaXplX3QmIGRlZmVycmVkRGVjb21taXRzKTsKLSNlbmRpZgogICAgIHZvaWQgc2NhdmVuZ2Uo
VW5pcXVlTG9ja0hvbGRlciYsIEJ1bGtEZWNvbW1pdCYsIHNpemVfdCYgZnJlZWQsIHNpemVfdCBn
b2FsKTsKIAogICAgIHNpemVfdCBmcmVlYWJsZU1lbW9yeShVbmlxdWVMb2NrSG9sZGVyJik7CkBA
IC0xNDcsMTAgKzE0Miw2IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFX1BIWVNJQ0FMX1BBR0VfTUFQ
IAogICAgIFBoeXNpY2FsUGFnZU1hcCBtX3BoeXNpY2FsUGFnZU1hcDsKICNlbmRpZgotICAgIAot
I2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICB2b2lkKiBtX2hpZ2hXYXRlcm1hcmsgeyBu
dWxscHRyIH07Ci0jZW5kaWYKIH07CiAKIGlubGluZSB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxC
dW1wUmFuZ2VzKApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29EaXJlY3RvcnkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0RpcmVjdG9yeS5oCShyZXZp
c2lvbiAyNzgwNzIpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0RpcmVjdG9yeS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Niw5ICs3Niw2IEBAIHB1YmxpYzoKICAgICAvLyBJdGVyYXRlIG92
ZXIgYWxsIGVtcHR5IGFuZCBjb21taXR0ZWQgcGFnZXMsIGFuZCBwdXQgdGhlbSBpbnRvIHRoZSB2
ZWN0b3IuIFRoaXMgYWxzbyByZWNvcmRzIHRoZQogICAgIC8vIHBhZ2VzIGFzIGJlaW5nIGRlY29t
bWl0dGVkLiBJdCdzIHRoZSBjYWxsZXIncyBqb2IgdG8gZG8gdGhlIGFjdHVhbCBkZWNvbW1pdHRp
bmcuCiAgICAgdm9pZCBzY2F2ZW5nZShjb25zdCBMb2NrSG9sZGVyJiwgVmVjdG9yPERlZmVycmVk
RGVjb21taXQ+Jik7Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAgIHZvaWQgc2NhdmVu
Z2VUb0hpZ2hXYXRlcm1hcmsoY29uc3QgTG9ja0hvbGRlciYsIFZlY3RvcjxEZWZlcnJlZERlY29t
bWl0PiYpOwotI2VuZGlmCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQg
Zm9yRWFjaENvbW1pdHRlZFBhZ2UoY29uc3QgTG9ja0hvbGRlciYsIGNvbnN0IEZ1bmMmKTsKQEAg
LTkzLDkgKzkwLDYgQEAgcHJpdmF0ZToKICAgICBCaXRzPG51bVBhZ2VzPiBtX2VtcHR5OwogICAg
IEJpdHM8bnVtUGFnZXM+IG1fY29tbWl0dGVkOwogICAgIHVuc2lnbmVkIG1fZmlyc3RFbGlnaWJs
ZU9yRGVjb21taXR0ZWQgeyAwIH07Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAgIHVu
c2lnbmVkIG1faGlnaFdhdGVybWFyayB7IDAgfTsKLSNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29EaXJlY3RvcnlJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29EaXJlY3RvcnlJ
bmxpbmVzLmgJKHJldmlzaW9uIDI3ODA3MikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNv
RGlyZWN0b3J5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMCArNTAsNiBAQCBFbGln
aWJpbGl0eVJlc3VsdDxDb25maWc+IElzb0RpcmVjdG9yeTxDCiAgICAgaWYgKHBhZ2VJbmRleCA+
PSBudW1QYWdlcykKICAgICAgICAgcmV0dXJuIEVsaWdpYmlsaXR5S2luZDo6RnVsbDsKIAotI2lm
IEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICBtX2hpZ2hXYXRlcm1hcmsgPSBzdGQ6Om1heChw
YWdlSW5kZXgsIG1faGlnaFdhdGVybWFyayk7Ci0jZW5kaWYKLQogICAgIFNjYXZlbmdlciYgc2Nh
dmVuZ2VyID0gKlNjYXZlbmdlcjo6Z2V0KCk7CiAgICAgc2NhdmVuZ2VyLmRpZFN0YXJ0R3Jvd2lu
ZygpOwogICAgIApAQCAtMTQ2LDIzICsxNDIsNyBAQCB2b2lkIElzb0RpcmVjdG9yeTxDb25maWcs
IHBhc3NlZE51bVBhZ2VzCiAgICAgICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7CiAgICAgICAgICAg
ICBzY2F2ZW5nZVBhZ2UobG9ja2VyLCBpbmRleCwgZGVjb21taXRzKTsKICAgICAgICAgfSk7Ci0j
aWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAgIG1faGlnaFdhdGVybWFyayA9IDA7Ci0jZW5k
aWYKLX0KLQotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLXRlbXBsYXRlPHR5cGVuYW1lIENv
bmZpZywgdW5zaWduZWQgcGFzc2VkTnVtUGFnZXM+Ci12b2lkIElzb0RpcmVjdG9yeTxDb25maWcs
IHBhc3NlZE51bVBhZ2VzPjo6c2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsoY29uc3QgTG9ja0hvbGRl
ciYgbG9ja2VyLCBWZWN0b3I8RGVmZXJyZWREZWNvbW1pdD4mIGRlY29tbWl0cykKLXsKLSAgICAo
bV9lbXB0eSAmIG1fY29tbWl0dGVkKS5mb3JFYWNoU2V0Qml0KAotICAgICAgICBbJl0gKHNpemVf
dCBpbmRleCkgewotICAgICAgICAgICAgaWYgKGluZGV4ID4gbV9oaWdoV2F0ZXJtYXJrKQotICAg
ICAgICAgICAgICAgIHNjYXZlbmdlUGFnZShsb2NrZXIsIGluZGV4LCBkZWNvbW1pdHMpOwotICAg
ICAgICB9KTsKLSAgICBtX2hpZ2hXYXRlcm1hcmsgPSAwOwogfQotI2VuZGlmCiAKIHRlbXBsYXRl
PHR5cGVuYW1lIENvbmZpZywgdW5zaWduZWQgcGFzc2VkTnVtUGFnZXM+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29IZWFwSW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvSGVhcEltcGwuaAkocmV2aXNp
b24gMjc4MDcyKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29IZWFwSW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw5ICs0OSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Jc29IZWFw
SW1wbEJhc2UoKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2NhdmVuZ2UoVmVjdG9yPERlZmVy
cmVkRGVjb21taXQ+JikgPSAwOwotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICB2aXJ0
dWFsIHZvaWQgc2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsoVmVjdG9yPERlZmVycmVkRGVjb21taXQ+
JikgPSAwOwotI2VuZGlmCiAgICAgCiAgICAgdm9pZCBzY2F2ZW5nZU5vdygpOwogICAgIHN0YXRp
YyB2b2lkIGZpbmlzaFNjYXZlbmdpbmcoVmVjdG9yPERlZmVycmVkRGVjb21taXQ+Jik7CkBAIC0x
MTIsOSArMTA5LDYgQEAgcHVibGljOgogICAgIHZvaWQgZGlkQmVjb21lRWxpZ2libGVPckRlY29t
bWl0ZWQoY29uc3QgTG9ja0hvbGRlciYsIElzb0RpcmVjdG9yeTxDb25maWcsIElzb0RpcmVjdG9y
eVBhZ2U8Q29uZmlnPjo6bnVtUGFnZXM+Kik7CiAgICAgCiAgICAgdm9pZCBzY2F2ZW5nZShWZWN0
b3I8RGVmZXJyZWREZWNvbW1pdD4mKSBvdmVycmlkZTsKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVO
R0UpCi0gICAgdm9pZCBzY2F2ZW5nZVRvSGlnaFdhdGVybWFyayhWZWN0b3I8RGVmZXJyZWREZWNv
bW1pdD4mKSBvdmVycmlkZTsKLSNlbmRpZgogCiAgICAgdW5zaWduZWQgYWxsb2NhdG9yT2Zmc2V0
KCk7CiAgICAgdW5zaWduZWQgZGVhbGxvY2F0b3JPZmZzZXQoKTsKSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvSXNvSGVhcEltcGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9Jc29IZWFwSW1wbElubGluZXMuaAkocmV2aXNpb24gMjc4MDcyKQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29IZWFwSW1wbElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTIxLDIxICsxMjEsNiBAQCB2b2lkIElzb0hlYXBJbXBsPENvbmZpZz46OnNjYXZlbmdl
KFZlY3RvCiAgICAgbV9kaXJlY3RvcnlIaWdoV2F0ZXJtYXJrID0gMDsKIH0KIAotI2lmIEJVU0Uo
UEFSVElBTF9TQ0FWRU5HRSkKLXRlbXBsYXRlPHR5cGVuYW1lIENvbmZpZz4KLXZvaWQgSXNvSGVh
cEltcGw8Q29uZmlnPjo6c2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsoVmVjdG9yPERlZmVycmVkRGVj
b21taXQ+JiBkZWNvbW1pdHMpCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIodGhpcy0+bG9jayk7
Ci0gICAgaWYgKCFtX2RpcmVjdG9yeUhpZ2hXYXRlcm1hcmspCi0gICAgICAgIG1faW5saW5lRGly
ZWN0b3J5LnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKGxvY2tlciwgZGVjb21taXRzKTsKLSAgICBm
b3IgKElzb0RpcmVjdG9yeVBhZ2U8Q29uZmlnPiogcGFnZSA9IG1faGVhZERpcmVjdG9yeS5nZXQo
KTsgcGFnZTsgcGFnZSA9IHBhZ2UtPm5leHQpIHsKLSAgICAgICAgaWYgKHBhZ2UtPmluZGV4KCkg
Pj0gbV9kaXJlY3RvcnlIaWdoV2F0ZXJtYXJrKQotICAgICAgICAgICAgcGFnZS0+cGF5bG9hZC5z
Y2F2ZW5nZVRvSGlnaFdhdGVybWFyayhsb2NrZXIsIGRlY29tbWl0cyk7Ci0gICAgfQotICAgIG1f
ZGlyZWN0b3J5SGlnaFdhdGVybWFyayA9IDA7Ci19Ci0jZW5kaWYKLQogaW5saW5lIHNpemVfdCBJ
c29IZWFwSW1wbEJhc2U6OmZyZWVhYmxlTWVtb3J5KCkKIHsKICAgICByZXR1cm4gbV9mcmVlYWJs
ZU1lbW9yeTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VNYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VNYXAuY3BwCShyZXZpc2lvbiAy
NzgwNzIpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlTWFwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzYsOSArNzYsNyBAQCB2b2lkIExhcmdlTWFwOjphZGQoY29uc3QgTGFyZ2VSYW5n
ZSYgcmFuCiAgICAgICAgIG1lcmdlZCA9IG1lcmdlKG1lcmdlZCwgbV9mcmVlLnBvcChpLS0pKTsK
ICAgICB9CiAKLSNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQogICAgIG1lcmdlZC5zZXRVc2Vk
U2luY2VMYXN0U2NhdmVuZ2UoKTsKLSNlbmRpZgogICAgIG1fZnJlZS5wdXNoKG1lcmdlZCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VSYW5nZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VSYW5nZS5oCShyZXZpc2lvbiAyNzgwNzIp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlUmFuZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNDcgKzM3LDM1IEBAIHB1YmxpYzoKICAgICAgICAgOiBSYW5nZSgpCiAgICAgICAgICwg
bV9zdGFydFBoeXNpY2FsU2l6ZSgwKQogICAgICAgICAsIG1fdG90YWxQaHlzaWNhbFNpemUoMCkK
LSNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQorICAgICAgICAsIG1fcGh5c2ljYWxFbmQoYmVn
aW4oKSkKICAgICAgICAgLCBtX2lzRWxpZ2libGUodHJ1ZSkKICAgICAgICAgLCBtX3VzZWRTaW5j
ZUxhc3RTY2F2ZW5nZShmYWxzZSkKLSNlbmRpZgogICAgIHsKICAgICB9CiAKLSAgICBMYXJnZVJh
bmdlKGNvbnN0IFJhbmdlJiBvdGhlciwgc2l6ZV90IHN0YXJ0UGh5c2ljYWxTaXplLCBzaXplX3Qg
dG90YWxQaHlzaWNhbFNpemUpCisgICAgTGFyZ2VSYW5nZShjb25zdCBSYW5nZSYgb3RoZXIsIHNp
emVfdCBzdGFydFBoeXNpY2FsU2l6ZSwgc2l6ZV90IHRvdGFsUGh5c2ljYWxTaXplLCB2b2lkKiBw
aHlzaWNhbEVuZCkKICAgICAgICAgOiBSYW5nZShvdGhlcikKICAgICAgICAgLCBtX3N0YXJ0UGh5
c2ljYWxTaXplKHN0YXJ0UGh5c2ljYWxTaXplKQogICAgICAgICAsIG1fdG90YWxQaHlzaWNhbFNp
emUodG90YWxQaHlzaWNhbFNpemUpCi0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKKyAgICAg
ICAgLCBtX3BoeXNpY2FsRW5kKHN0YXRpY19jYXN0PGNoYXIqPihwaHlzaWNhbEVuZCkpCiAgICAg
ICAgICwgbV9pc0VsaWdpYmxlKHRydWUpCiAgICAgICAgICwgbV91c2VkU2luY2VMYXN0U2NhdmVu
Z2UoZmFsc2UpCi0jZW5kaWYKICAgICB7CiAgICAgICAgIEJBU1NFUlQodGhpcy0+c2l6ZSgpID49
IHRoaXMtPnRvdGFsUGh5c2ljYWxTaXplKCkpOwogICAgICAgICBCQVNTRVJUKHRoaXMtPnRvdGFs
UGh5c2ljYWxTaXplKCkgPj0gdGhpcy0+c3RhcnRQaHlzaWNhbFNpemUoKSk7CiAgICAgfQogCi0j
aWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAgIExhcmdlUmFuZ2Uodm9pZCogYmVnaW4sIHNp
emVfdCBzaXplLCBzaXplX3Qgc3RhcnRQaHlzaWNhbFNpemUsIHNpemVfdCB0b3RhbFBoeXNpY2Fs
U2l6ZSkKLSAgICAgICAgOiBSYW5nZShiZWdpbiwgc2l6ZSkKLSAgICAgICAgLCBtX3N0YXJ0UGh5
c2ljYWxTaXplKHN0YXJ0UGh5c2ljYWxTaXplKQotICAgICAgICAsIG1fdG90YWxQaHlzaWNhbFNp
emUodG90YWxQaHlzaWNhbFNpemUpCi0gICAgewotICAgICAgICBCQVNTRVJUKHRoaXMtPnNpemUo
KSA+PSB0aGlzLT50b3RhbFBoeXNpY2FsU2l6ZSgpKTsKLSAgICAgICAgQkFTU0VSVCh0aGlzLT50
b3RhbFBoeXNpY2FsU2l6ZSgpID49IHRoaXMtPnN0YXJ0UGh5c2ljYWxTaXplKCkpOwotICAgIH0K
LSNlbHNlCi0gICAgTGFyZ2VSYW5nZSh2b2lkKiBiZWdpbiwgc2l6ZV90IHNpemUsIHNpemVfdCBz
dGFydFBoeXNpY2FsU2l6ZSwgc2l6ZV90IHRvdGFsUGh5c2ljYWxTaXplLCBib29sIHVzZWRTaW5j
ZUxhc3RTY2F2ZW5nZSA9IGZhbHNlKQorICAgIExhcmdlUmFuZ2Uodm9pZCogYmVnaW4sIHNpemVf
dCBzaXplLCBzaXplX3Qgc3RhcnRQaHlzaWNhbFNpemUsIHNpemVfdCB0b3RhbFBoeXNpY2FsU2l6
ZSwgdm9pZCogcGh5c2ljYWxFbmQsIGJvb2wgdXNlZFNpbmNlTGFzdFNjYXZlbmdlID0gZmFsc2Up
CiAgICAgICAgIDogUmFuZ2UoYmVnaW4sIHNpemUpCiAgICAgICAgICwgbV9zdGFydFBoeXNpY2Fs
U2l6ZShzdGFydFBoeXNpY2FsU2l6ZSkKICAgICAgICAgLCBtX3RvdGFsUGh5c2ljYWxTaXplKHRv
dGFsUGh5c2ljYWxTaXplKQorICAgICAgICAsIG1fcGh5c2ljYWxFbmQoc3RhdGljX2Nhc3Q8Y2hh
cio+KHBoeXNpY2FsRW5kKSkKICAgICAgICAgLCBtX2lzRWxpZ2libGUodHJ1ZSkKICAgICAgICAg
LCBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5nZSh1c2VkU2luY2VMYXN0U2NhdmVuZ2UpCiAgICAgewog
ICAgICAgICBCQVNTRVJUKHRoaXMtPnNpemUoKSA+PSB0aGlzLT50b3RhbFBoeXNpY2FsU2l6ZSgp
KTsKICAgICAgICAgQkFTU0VSVCh0aGlzLT50b3RhbFBoeXNpY2FsU2l6ZSgpID49IHRoaXMtPnN0
YXJ0UGh5c2ljYWxTaXplKCkpOwogICAgIH0KLSNlbmRpZgogCiAgICAgLy8gUmV0dXJucyBhIGxv
d2VyIGJvdW5kIG9uIHBoeXNpY2FsIHNpemUgYXQgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZS4gUmFu
Z2VzIHRoYXQKICAgICAvLyBzcGFuIG5vbi1waHlzaWNhbCBmcmFnbWVudHMgdXNlIHRoaXMgbnVt
YmVyIHRvIHJlbWVtYmVyIHRoZSBwaHlzaWNhbCBzaXplIG9mCkBAIC05OCwxNyArODYsMjEgQEAg
cHVibGljOgogICAgIC8vIGRvZXNuJ3QgcmVhbGx5IGFmZmVjdCBhY2N1cmFjeS4KICAgICBzaXpl
X3QgdG90YWxQaHlzaWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsUGh5c2ljYWxTaXpl
OyB9CiAgICAgdm9pZCBzZXRUb3RhbFBoeXNpY2FsU2l6ZShzaXplX3QgdG90YWxQaHlzaWNhbFNp
emUpIHsgbV90b3RhbFBoeXNpY2FsU2l6ZSA9IHRvdGFsUGh5c2ljYWxTaXplOyB9CisgICAgCisg
ICAgLy8gVGhpcyBpcyB0aGUgbGFzdCBhZGRyZXNzIG9mIHBoeXNpY2FsIG1lbW9yeSBpbiB0aGlz
IHJhbmdlLgorICAgIC8vIFdoZW4gZGVjb21pdHRpbmcgdGhpcyByYW5nZSwgd2UgZGVjb21taXR0
IFtiZWdpbigpLCBwaHlzaWNhbEVuZCkuCisgICAgY2hhciogcGh5c2ljYWxFbmQoKSBjb25zdCB7
IHJldHVybiBtX3BoeXNpY2FsRW5kOyB9CisgICAgdm9pZCBzZXRQaHlzaWNhbEVuZCh2b2lkKiBw
aHlzaWNhbEVuZCkgeyBtX3BoeXNpY2FsRW5kID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHBoeXNpY2Fs
RW5kKTsgfQorICAgIHZvaWQgY2xlYXJQaHlzaWNhbEVuZCgpIHsgbV9waHlzaWNhbEVuZCA9IGJl
Z2luKCk7IH0KIAogICAgIHN0ZDo6cGFpcjxMYXJnZVJhbmdlLCBMYXJnZVJhbmdlPiBzcGxpdChz
aXplX3QpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRFbGlnaWJsZShib29sIGVsaWdpYmxlKSB7IG1f
aXNFbGlnaWJsZSA9IGVsaWdpYmxlOyB9CiAgICAgYm9vbCBpc0VsaWdpYmlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNFbGlnaWJsZTsgfQogCi0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKICAg
ICBib29sIHVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFNpbmNl
TGFzdFNjYXZlbmdlOyB9CiAgICAgdm9pZCBjbGVhclVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpIHsg
bV91c2VkU2luY2VMYXN0U2NhdmVuZ2UgPSBmYWxzZTsgfQogICAgIHZvaWQgc2V0VXNlZFNpbmNl
TGFzdFNjYXZlbmdlKCkgeyBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5nZSA9IHRydWU7IH0KLSNlbmRp
ZgogCiAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3Qgdm9pZCogb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IGJlZ2luKCkgPCBvdGhlcjsgfQogICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IExhcmdlUmFuZ2Um
IG90aGVyKSBjb25zdCB7IHJldHVybiBiZWdpbigpIDwgb3RoZXIuYmVnaW4oKTsgfQpAQCAtMTE2
LDEyICsxMDgsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHNpemVfdCBtX3N0YXJ0UGh5c2lj
YWxTaXplOwogICAgIHNpemVfdCBtX3RvdGFsUGh5c2ljYWxTaXplOwotI2lmIEJVU0UoUEFSVElB
TF9TQ0FWRU5HRSkKLSAgICBib29sIG1faXNFbGlnaWJsZSB7IHRydWUgfTsKLSNlbHNlCisgICAg
Y2hhciogbV9waHlzaWNhbEVuZDsKICAgICB1bnNpZ25lZCBtX2lzRWxpZ2libGU6IDE7CiAgICAg
dW5zaWduZWQgbV91c2VkU2luY2VMYXN0U2NhdmVuZ2U6IDE7Ci0jZW5kaWYKIH07CiAKIGlubGlu
ZSBib29sIGNhbk1lcmdlKGNvbnN0IExhcmdlUmFuZ2UmIGEsIGNvbnN0IExhcmdlUmFuZ2UmIGIp
CkBAIC0xNDQsMTggKzEzMywxNyBAQCBpbmxpbmUgYm9vbCBjYW5NZXJnZShjb25zdCBMYXJnZVJh
bmdlJiBhCiBpbmxpbmUgTGFyZ2VSYW5nZSBtZXJnZShjb25zdCBMYXJnZVJhbmdlJiBhLCBjb25z
dCBMYXJnZVJhbmdlJiBiKQogewogICAgIGNvbnN0IExhcmdlUmFuZ2UmIGxlZnQgPSBzdGQ6Om1p
bihhLCBiKTsKLSNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQorICAgIGNvbnN0IExhcmdlUmFu
Z2UmIHJpZ2h0ID0gc3RkOjptYXgoYSwgYik7CisgICAgdm9pZCogcGh5c2ljYWxFbmQgPSByaWdo
dC50b3RhbFBoeXNpY2FsU2l6ZSgpID8gcmlnaHQucGh5c2ljYWxFbmQoKSA6IGxlZnQucGh5c2lj
YWxFbmQoKTsKICAgICBib29sIG1lcmdlZFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSA9IGEudXNlZFNp
bmNlTGFzdFNjYXZlbmdlKCkgfHwgYi51c2VkU2luY2VMYXN0U2NhdmVuZ2UoKTsKLSNlbmRpZgog
ICAgIGlmIChsZWZ0LnNpemUoKSA9PSBsZWZ0LnN0YXJ0UGh5c2ljYWxTaXplKCkpIHsKICAgICAg
ICAgcmV0dXJuIExhcmdlUmFuZ2UoCiAgICAgICAgICAgICBsZWZ0LmJlZ2luKCksCiAgICAgICAg
ICAgICBhLnNpemUoKSArIGIuc2l6ZSgpLAogICAgICAgICAgICAgYS5zdGFydFBoeXNpY2FsU2l6
ZSgpICsgYi5zdGFydFBoeXNpY2FsU2l6ZSgpLAotICAgICAgICAgICAgYS50b3RhbFBoeXNpY2Fs
U2l6ZSgpICsgYi50b3RhbFBoeXNpY2FsU2l6ZSgpCi0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5H
RSkKKyAgICAgICAgICAgIGEudG90YWxQaHlzaWNhbFNpemUoKSArIGIudG90YWxQaHlzaWNhbFNp
emUoKSwKKyAgICAgICAgICAgIHBoeXNpY2FsRW5kCiAgICAgICAgICAgICAsIG1lcmdlZFVzZWRT
aW5jZUxhc3RTY2F2ZW5nZQotI2VuZGlmCiAgICAgICAgICk7CiAgICAgICAgIAogICAgIH0KQEAg
LTE2NCwxMCArMTUyLDkgQEAgaW5saW5lIExhcmdlUmFuZ2UgbWVyZ2UoY29uc3QgTGFyZ2VSYW5n
ZQogICAgICAgICBsZWZ0LmJlZ2luKCksCiAgICAgICAgIGEuc2l6ZSgpICsgYi5zaXplKCksCiAg
ICAgICAgIGxlZnQuc3RhcnRQaHlzaWNhbFNpemUoKSwKLSAgICAgICAgYS50b3RhbFBoeXNpY2Fs
U2l6ZSgpICsgYi50b3RhbFBoeXNpY2FsU2l6ZSgpCi0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5H
RSkKKyAgICAgICAgYS50b3RhbFBoeXNpY2FsU2l6ZSgpICsgYi50b3RhbFBoeXNpY2FsU2l6ZSgp
LAorICAgICAgICBwaHlzaWNhbEVuZAogICAgICAgICAsIG1lcmdlZFVzZWRTaW5jZUxhc3RTY2F2
ZW5nZQotI2VuZGlmCiAgICAgKTsKIH0KIApAQCAtMTc1LDExICsxNjIsMTIgQEAgaW5saW5lIHN0
ZDo6cGFpcjxMYXJnZVJhbmdlLCBMYXJnZVJhbmdlPgogewogICAgIEJBU1NFUlQobGVmdFNpemUg
PD0gdGhpcy0+c2l6ZSgpKTsKICAgICBzaXplX3QgcmlnaHRTaXplID0gdGhpcy0+c2l6ZSgpIC0g
bGVmdFNpemU7CisgICAgY2hhciogcGh5c2ljYWxFbmQgPSB0aGlzLT5waHlzaWNhbEVuZCgpOwog
CiAgICAgaWYgKGxlZnRTaXplIDw9IHN0YXJ0UGh5c2ljYWxTaXplKCkpIHsKICAgICAgICAgQkFT
U0VSVCh0b3RhbFBoeXNpY2FsU2l6ZSgpID49IGxlZnRTaXplKTsKLSAgICAgICAgTGFyZ2VSYW5n
ZSBsZWZ0KGJlZ2luKCksIGxlZnRTaXplLCBsZWZ0U2l6ZSwgbGVmdFNpemUpOwotICAgICAgICBM
YXJnZVJhbmdlIHJpZ2h0KGxlZnQuZW5kKCksIHJpZ2h0U2l6ZSwgc3RhcnRQaHlzaWNhbFNpemUo
KSAtIGxlZnRTaXplLCB0b3RhbFBoeXNpY2FsU2l6ZSgpIC0gbGVmdFNpemUpOworICAgICAgICBM
YXJnZVJhbmdlIGxlZnQoYmVnaW4oKSwgbGVmdFNpemUsIGxlZnRTaXplLCBsZWZ0U2l6ZSwgc3Rk
OjptaW4ocGh5c2ljYWxFbmQsIGJlZ2luKCkgKyBsZWZ0U2l6ZSkpOworICAgICAgICBMYXJnZVJh
bmdlIHJpZ2h0KGxlZnQuZW5kKCksIHJpZ2h0U2l6ZSwgc3RhcnRQaHlzaWNhbFNpemUoKSAtIGxl
ZnRTaXplLCB0b3RhbFBoeXNpY2FsU2l6ZSgpIC0gbGVmdFNpemUsIHN0ZDo6bWF4KHBoeXNpY2Fs
RW5kLCBsZWZ0LmVuZCgpKSk7CiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsZWZ0LCBy
aWdodCk7CiAgICAgfQogCkBAIC0xOTQsOCArMTgyLDggQEAgaW5saW5lIHN0ZDo6cGFpcjxMYXJn
ZVJhbmdlLCBMYXJnZVJhbmdlPgogICAgICAgICByaWdodFRvdGFsUGh5c2ljYWxTaXplID0gcmln
aHRTaXplOwogICAgIH0KIAotICAgIExhcmdlUmFuZ2UgbGVmdChiZWdpbigpLCBsZWZ0U2l6ZSwg
c3RhcnRQaHlzaWNhbFNpemUoKSwgbGVmdFRvdGFsUGh5c2ljYWxTaXplKTsKLSAgICBMYXJnZVJh
bmdlIHJpZ2h0KGxlZnQuZW5kKCksIHJpZ2h0U2l6ZSwgMCwgcmlnaHRUb3RhbFBoeXNpY2FsU2l6
ZSk7CisgICAgTGFyZ2VSYW5nZSBsZWZ0KGJlZ2luKCksIGxlZnRTaXplLCBzdGFydFBoeXNpY2Fs
U2l6ZSgpLCBsZWZ0VG90YWxQaHlzaWNhbFNpemUsIHN0ZDo6bWluKHBoeXNpY2FsRW5kLCBiZWdp
bigpICsgbGVmdFNpemUpKTsKKyAgICBMYXJnZVJhbmdlIHJpZ2h0KGxlZnQuZW5kKCksIHJpZ2h0
U2l6ZSwgMCwgcmlnaHRUb3RhbFBoeXNpY2FsU2l6ZSwgc3RkOjptYXgocGh5c2ljYWxFbmQsIGxl
ZnQuZW5kKCkpKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobGVmdCwgcmlnaHQpOwogfQog
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuY3BwCShyZXZpc2lvbiAyNzgwNzIp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg1LDExICs4NSw3IEBAIFNjYXZlbmdlcjo6U2NhdmVuZ2VyKGNvbnN0IExvY2tIb2xkZXIm
KQogICAgIGRpc3BhdGNoX3Jlc3VtZShtX3ByZXNzdXJlSGFuZGxlckRpc3BhdGNoU291cmNlKTsK
ICAgICBkaXNwYXRjaF9yZWxlYXNlKHF1ZXVlKTsKICNlbmRpZgotI2lmIEJVU0UoUEFSVElBTF9T
Q0FWRU5HRSkKLSAgICBtX3dhaXRUaW1lID0gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyhtX2lz
SW5NaW5pTW9kZSA/IDIwMCA6IDIwMDApOwotI2Vsc2UKICAgICBtX3dhaXRUaW1lID0gc3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcygxMCk7Ci0jZW5kaWYKIAogICAgIG1fdGhyZWFkID0gc3RkOjp0
aHJlYWQoJnRocmVhZEVudHJ5UG9pbnQsIHRoaXMpOwogfQpAQCAtMTg3LDE0ICsxODMsNiBAQCBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIFNjYXZlbmdlcjo6dGltCiAgICAgcmV0dXJuIHN0ZDo6
Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hy
b25vOjpzdGVhZHlfY2xvY2s6Om5vdygpIC0gbV9sYXN0RnVsbFNjYXZlbmdlVGltZSk7CiB9CiAK
LSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi1zdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIFNj
YXZlbmdlcjo6dGltZVNpbmNlTGFzdFBhcnRpYWxTY2F2ZW5nZSgpCi17Ci0gICAgVW5pcXVlTG9j
a0hvbGRlciBsb2NrKG11dGV4KCkpOwotICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25f
Y2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2Nr
Ojpub3coKSAtIG1fbGFzdFBhcnRpYWxTY2F2ZW5nZVRpbWUpOwotfQotI2VuZGlmCi0KIHZvaWQg
U2NhdmVuZ2VyOjplbmFibGVNaW5pTW9kZSgpCiB7CiAgICAgbV9pc0luTWluaU1vZGUgPSB0cnVl
OyAvLyBXZSBqdXN0IHN0b3JlIHRvIHRoaXMgcmFjaWx5LiBUaGUgc2NhdmVuZ2VyIHRocmVhZCB3
aWxsIGV2ZW50dWFsbHkgcGljayB1cCB0aGUgcmlnaHQgdmFsdWUuCkBAIC0yMjAsMjUgKzIwOCwx
NyBAQCB2b2lkIFNjYXZlbmdlcjo6c2NhdmVuZ2UoKQogCiAgICAgICAgIHsKICAgICAgICAgICAg
IFByaW50VGltZSBwcmludFRpbWUoIlxuZnVsbCBzY2F2ZW5nZSB1bmRlciBsb2NrIHRpbWUiKTsK
LSNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQogICAgICAgICAgICAgc2l6ZV90IGRlZmVycmVk
RGVjb21taXRzID0gMDsKLSNlbmRpZgogICAgICAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2Nr
KEhlYXA6Om11dGV4KCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSGVhcHM7
IGktLTspIHsKICAgICAgICAgICAgICAgICBpZiAoIWlzQWN0aXZlSGVhcEtpbmQoc3RhdGljX2Nh
c3Q8SGVhcEtpbmQ+KGkpKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0jaWYgQlVT
RShQQVJUSUFMX1NDQVZFTkdFKQotICAgICAgICAgICAgICAgIFBlclByb2Nlc3M8UGVySGVhcEtp
bmQ8SGVhcD4+OjpnZXQoKS0+YXQoaSkuc2NhdmVuZ2UobG9jaywgZGVjb21taXR0ZXIpOwotI2Vs
c2UKICAgICAgICAgICAgICAgICBQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCkt
PmF0KGkpLnNjYXZlbmdlKGxvY2ssIGRlY29tbWl0dGVyLCBkZWZlcnJlZERlY29tbWl0cyk7Ci0j
ZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlY29tbWl0dGVyLnByb2Nlc3NFYWdl
cigpOwogCi0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKICAgICAgICAgICAgIGlmIChkZWZl
cnJlZERlY29tbWl0cykKICAgICAgICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6OlJ1blNvb247
Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIHsKQEAgLTI3OSw3OCArMjU5LDYgQEAgdm9p
ZCBTY2F2ZW5nZXI6OnNjYXZlbmdlKCkKICAgICB9CiB9CiAKLSNpZiBCVVNFKFBBUlRJQUxfU0NB
VkVOR0UpCi12b2lkIFNjYXZlbmdlcjo6cGFydGlhbFNjYXZlbmdlKCkKLXsKLSAgICBpZiAoIW1f
aXNFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2so
bV9zY2F2ZW5naW5nTXV0ZXgpOwotCi0gICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgZnByaW50
ZihzdGRlcnIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gICAgICAg
IGZwcmludGYoc3RkZXJyLCAiLS1iZWZvcmUgcGFydGlhbCBzY2F2ZW5naW5nLS1cbiIpOwotICAg
ICAgICBkdW1wU3RhdHMoKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIEJ1bGtEZWNvbW1pdCBk
ZWNvbW1pdHRlcjsKLSAgICAgICAgewotICAgICAgICAgICAgUHJpbnRUaW1lIHByaW50VGltZSgi
XG5wYXJ0aWFsU2NhdmVuZ2UgdW5kZXIgbG9jayB0aW1lIik7Ci0gICAgICAgICAgICBVbmlxdWVM
b2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1IZWFwczsgaS0tOykgewotICAgICAgICAgICAgICAgIGlmICghaXNBY3RpdmVIZWFw
S2luZChzdGF0aWNfY2FzdDxIZWFwS2luZD4oaSkpKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBIZWFwJiBoZWFwID0gUGVyUHJvY2VzczxQZXJIZWFwS2lu
ZDxIZWFwPj46OmdldCgpLT5hdChpKTsKLSAgICAgICAgICAgICAgICBzaXplX3QgZnJlZWFibGVN
ZW1vcnkgPSBoZWFwLmZyZWVhYmxlTWVtb3J5KGxvY2spOwotICAgICAgICAgICAgICAgIGlmIChm
cmVlYWJsZU1lbW9yeSA8IDQgKiBNQikKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgaGVhcC5zY2F2ZW5nZVRvSGlnaFdhdGVybWFyayhsb2NrLCBkZWNvbW1p
dHRlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlY29tbWl0dGVyLnByb2Nlc3NF
YWdlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgewotICAgICAgICAgICAgUHJpbnRUaW1lIHBy
aW50VGltZSgicGFydGlhbFNjYXZlbmdlIGxhenkgZGVjb21taXQgdGltZSIpOwotICAgICAgICAg
ICAgZGVjb21taXR0ZXIucHJvY2Vzc0xhenkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIFByaW50VGltZSBwcmludFRpbWUoInBhcnRpYWxTY2F2ZW5nZSBtYXJrIGFsbCBh
cyBlbGlnaWJsZSB0aW1lIik7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0
ZXgoKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1IZWFwczsgaS0tOykgewot
ICAgICAgICAgICAgICAgIGlmICghaXNBY3RpdmVIZWFwS2luZChzdGF0aWNfY2FzdDxIZWFwS2lu
ZD4oaSkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBI
ZWFwJiBoZWFwID0gUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChpKTsK
LSAgICAgICAgICAgICAgICBoZWFwLm1hcmtBbGxMYXJnZUFzRWxpZ2liaWxlKGxvY2spOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgewotICAgICAgICBSRUxFQVNFX0JB
U1NFUlQoIW1fZGVmZXJyZWREZWNvbW1pdHMuc2l6ZSgpKTsKLSAgICAgICAgQWxsSXNvSGVhcHM6
OmdldCgpLT5mb3JFYWNoKAotICAgICAgICAgICAgWyZdIChJc29IZWFwSW1wbEJhc2UmIGhlYXAp
IHsKLSAgICAgICAgICAgICAgICBoZWFwLnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKG1fZGVmZXJy
ZWREZWNvbW1pdHMpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIElzb0hlYXBJbXBsQmFzZTo6
ZmluaXNoU2NhdmVuZ2luZyhtX2RlZmVycmVkRGVjb21taXRzKTsKLSAgICAgICAgbV9kZWZlcnJl
ZERlY29tbWl0cy5zaHJpbmsoMCk7Ci0gICAgfQotCi0gICAgaWYgKHZlcmJvc2UpIHsKLSAgICAg
ICAgZnByaW50ZihzdGRlcnIsICItLWFmdGVyIHBhcnRpYWwgc2NhdmVuZ2luZy0tXG4iKTsKLSAg
ICAgICAgZHVtcFN0YXRzKCk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgVW5pcXVl
TG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOwotICAgICAgICBtX2xhc3RQYXJ0aWFsU2NhdmVuZ2VU
aW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7Ci0gICAgfQotfQotI2VuZGlm
Ci0KIHNpemVfdCBTY2F2ZW5nZXI6OmZyZWVhYmxlTWVtb3J5KCkKIHsKICAgICBzaXplX3QgcmVz
dWx0ID0gMDsKQEAgLTQzMiw2OSArMzQwLDYgQEAgdm9pZCBTY2F2ZW5nZXI6OnRocmVhZFJ1bkxv
b3AoKQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLVxuIik7CiAgICAgICAgIH0KIAotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkK
LSAgICAgICAgZW51bSBjbGFzcyBTY2F2ZW5nZU1vZGUgewotICAgICAgICAgICAgTm9uZSwKLSAg
ICAgICAgICAgIFBhcnRpYWwsCi0gICAgICAgICAgICBGdWxsCi0gICAgICAgIH07Ci0KLSAgICAg
ICAgc2l6ZV90IGZyZWVhYmxlTWVtb3J5ID0gdGhpcy0+ZnJlZWFibGVNZW1vcnkoKTsKLQotICAg
ICAgICBTY2F2ZW5nZU1vZGUgc2NhdmVuZ2VNb2RlID0gWyZdIHsKLSAgICAgICAgICAgIGF1dG8g
dGltZVNpbmNlTGFzdEZ1bGxTY2F2ZW5nZSA9IHRoaXMtPnRpbWVTaW5jZUxhc3RGdWxsU2NhdmVu
Z2UoKTsKLSAgICAgICAgICAgIGF1dG8gdGltZVNpbmNlTGFzdFBhcnRpYWxTY2F2ZW5nZSA9IHRo
aXMtPnRpbWVTaW5jZUxhc3RQYXJ0aWFsU2NhdmVuZ2UoKTsKLSAgICAgICAgICAgIGF1dG8gdGlt
ZVNpbmNlTGFzdFNjYXZlbmdlID0gc3RkOjptaW4odGltZVNpbmNlTGFzdFBhcnRpYWxTY2F2ZW5n
ZSwgdGltZVNpbmNlTGFzdEZ1bGxTY2F2ZW5nZSk7Ci0KLSAgICAgICAgICAgIGlmIChpc1VuZGVy
TWVtb3J5UHJlc3N1cmUoKSAmJiBmcmVlYWJsZU1lbW9yeSA+IDEgKiBNQiAmJiB0aW1lU2luY2VM
YXN0U2NhdmVuZ2UgPiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDUpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBTY2F2ZW5nZU1vZGU6OkZ1bGw7Ci0KLSAgICAgICAgICAgIGlmICghbV9pc1By
b2JhYmx5R3Jvd2luZykgewotICAgICAgICAgICAgICAgIGlmICh0aW1lU2luY2VMYXN0RnVsbFNj
YXZlbmdlIDwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygxMDAwKSAmJiAhbV9pc0luTWluaU1v
ZGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTY2F2ZW5nZU1vZGU6OlBhcnRpYWw7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIFNjYXZlbmdlTW9kZTo6RnVsbDsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKG1faXNJbk1pbmlNb2RlKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHRpbWVTaW5jZUxhc3RGdWxsU2NhdmVuZ2UgPCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDIw
MCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTY2F2ZW5nZU1vZGU6OlBhcnRpYWw7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIFNjYXZlbmdlTW9kZTo6RnVsbDsKLSAgICAgICAgICAgIH0K
LQotI2lmIEJDUFUoWDg2XzY0KQotICAgICAgICAgICAgYXV0byBwYXJ0aWFsU2NhdmVuZ2VJbnRl
cnZhbCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTIwMDApOwotI2Vsc2UKLSAgICAgICAg
ICAgIGF1dG8gcGFydGlhbFNjYXZlbmdlSW50ZXJ2YWwgPSBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzKDgwMDApOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAodGltZVNpbmNlTGFzdFNjYXZlbmdl
IDwgcGFydGlhbFNjYXZlbmdlSW50ZXJ2YWwpIHsKLSAgICAgICAgICAgICAgICAvLyBSYXRlIGxp
bWl0IHBhcnRpYWwgc2NhdmVuZ2VzLgotICAgICAgICAgICAgICAgIHJldHVybiBTY2F2ZW5nZU1v
ZGU6Ok5vbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZnJlZWFibGVNZW1vcnkg
PCAyNSAqIE1CKQotICAgICAgICAgICAgICAgIHJldHVybiBTY2F2ZW5nZU1vZGU6Ok5vbmU7Ci0g
ICAgICAgICAgICBpZiAoNSAqIGZyZWVhYmxlTWVtb3J5IDwgZm9vdHByaW50KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFNjYXZlbmdlTW9kZTo6Tm9uZTsKLSAgICAgICAgICAgIHJldHVybiBT
Y2F2ZW5nZU1vZGU6OlBhcnRpYWw7Ci0gICAgICAgIH0oKTsKLQotICAgICAgICBtX2lzUHJvYmFi
bHlHcm93aW5nID0gZmFsc2U7Ci0KLSAgICAgICAgc3dpdGNoIChzY2F2ZW5nZU1vZGUpIHsKLSAg
ICAgICAgY2FzZSBTY2F2ZW5nZU1vZGU6Ok5vbmU6IHsKLSAgICAgICAgICAgIHJ1blNvb24oKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU2NhdmVuZ2VNb2Rl
OjpQYXJ0aWFsOiB7Ci0gICAgICAgICAgICBwYXJ0aWFsU2NhdmVuZ2UoKTsKLSAgICAgICAgICAg
IHJ1blNvb24oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
U2NhdmVuZ2VNb2RlOjpGdWxsOiB7Ci0gICAgICAgICAgICBzY2F2ZW5nZSgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotI2Vsc2UKICAgICAgICAgc3RkOjpjaHJv
bm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBzdGFydCB7IHN0ZDo6Y2hyb25vOjpzdGVhZHlf
Y2xvY2s6Om5vdygpIH07CiAgICAgICAgIAogICAgICAgICBzY2F2ZW5nZSgpOwpAQCAtNTA5LDE0
ICszNTQsMTMgQEAgdm9pZCBTY2F2ZW5nZXI6OnRocmVhZFJ1bkxvb3AoKQogICAgICAgICAvLyBG
SVhNRTogV2UgbmVlZCB0byBpbnZlc3RpZ2F0ZSBtaW5pLW1vZGUncyBhZGp1c3RtZW50LgogICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzOTg3CiAg
ICAgICAgIGlmICghbV9pc0luTWluaU1vZGUpIHsKLSAgICAgICAgICAgIHRpbWVTcGVudFNjYXZl
bmdpbmcgKj0gMTUwOworICAgICAgICAgICAgdGltZVNwZW50U2NhdmVuZ2luZyAqPSBzX25ld1dh
aXRNdWx0aXBsaWVyOwogICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBuZXdX
YWl0VGltZSA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHM+KHRpbWVTcGVudFNjYXZlbmdpbmcpOwotICAgICAgICAgICAgbV93YWl0VGltZSA9IHN0
ZDo6bWluKHN0ZDo6bWF4KG5ld1dhaXRUaW1lLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEw
MCkpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwMDAwKSk7CisgICAgICAgICAgICBtX3dh
aXRUaW1lID0gc3RkOjptaW4oc3RkOjptYXgobmV3V2FpdFRpbWUsIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMoc19taW5XYWl0VGltZU1pbGxpc2Vjb25kcykpLCBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzKHNfbWF4V2FpdFRpbWVNaWxsaXNlY29uZHMpKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJuZXcgd2FpdCB0aW1l
ICVsbGRtc1xuIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nIGludD4obV93YWl0VGltZS5jb3VudCgp
KSk7Ci0jZW5kaWYKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2Nh
dmVuZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIu
aAkocmV2aXNpb24gMjc4MDcyKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTAgKzkyLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNl
dFRocmVhZE5hbWUoY29uc3QgY2hhciopOwogCiAgICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cyB0aW1lU2luY2VMYXN0RnVsbFNjYXZlbmdlKCk7Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdF
KQotICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVNpbmNlTGFzdFBhcnRpYWxTY2F2
ZW5nZSgpOwotICAgIHZvaWQgcGFydGlhbFNjYXZlbmdlKCk7Ci0jZW5kaWYKIAogICAgIHN0ZDo6
YXRvbWljPFN0YXRlPiBtX3N0YXRlIHsgU3RhdGU6OlNsZWVwIH07CiAgICAgc2l6ZV90IG1fc2Nh
dmVuZ2VyQnl0ZXMgeyAwIH07CkBAIC0xMDgsMTUgKzEwNCwyMiBAQCBwcml2YXRlOgogCiAgICAg
c3RkOjp0aHJlYWQgbV90aHJlYWQ7CiAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGlt
ZV9wb2ludCBtX2xhc3RGdWxsU2NhdmVuZ2VUaW1lIHsgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9j
azo6bm93KCkgfTsKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi0gICAgc3RkOjpjaHJvbm86
OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBtX2xhc3RQYXJ0aWFsU2NhdmVuZ2VUaW1lIHsgc3Rk
OjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkgfTsKLSNlbmRpZgogCiAjaWYgQk9TKERBUldJ
TikKICAgICBkaXNwYXRjaF9zb3VyY2VfdCBtX3ByZXNzdXJlSGFuZGxlckRpc3BhdGNoU291cmNl
OwogICAgIHFvc19jbGFzc190IG1fcmVxdWVzdGVkU2NhdmVuZ2VyVGhyZWFkUU9TQ2xhc3MgeyBR
T1NfQ0xBU1NfVVNFUl9JTklUSUFURUQgfTsKICNlbmRpZgogICAgIAorI2lmIEJQTEFURk9STShN
QUMpCisgICAgY29uc3QgdW5zaWduZWQgc19uZXdXYWl0TXVsdGlwbGllciA9IDMwMDsKKyAgICBj
b25zdCB1bnNpZ25lZCBzX21pbldhaXRUaW1lTWlsbGlzZWNvbmRzID0gNzUwOworICAgIGNvbnN0
IHVuc2lnbmVkIHNfbWF4V2FpdFRpbWVNaWxsaXNlY29uZHMgPSAyMDAwMDsKKyNlbHNlCisgICAg
Y29uc3QgdW5zaWduZWQgc19uZXdXYWl0TXVsdGlwbGllciA9IDE1MDsKKyAgICBjb25zdCB1bnNp
Z25lZCBzX21pbldhaXRUaW1lTWlsbGlzZWNvbmRzID0gMTAwOworICAgIGNvbnN0IHVuc2lnbmVk
IHNfbWF4V2FpdFRpbWVNaWxsaXNlY29uZHMgPSAxMDAwMDsKKyNlbmRpZgorCiAgICAgVmVjdG9y
PERlZmVycmVkRGVjb21taXQ+IG1fZGVmZXJyZWREZWNvbW1pdHM7CiAgICAgYm9vbCBtX2lzRW5h
YmxlZCB7IHRydWUgfTsKIH07CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsUGFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxQYWdlLmgJKHJl
dmlzaW9uIDI3ODA3MikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxQYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDExICs1MSw5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1BoeXNp
Y2FsUGFnZXMoKSB7IHJldHVybiBtX2hhc1BoeXNpY2FsUGFnZXM7IH0KICAgICB2b2lkIHNldEhh
c1BoeXNpY2FsUGFnZXMoYm9vbCBoYXNQaHlzaWNhbFBhZ2VzKSB7IG1faGFzUGh5c2ljYWxQYWdl
cyA9IGhhc1BoeXNpY2FsUGFnZXM7IH0KIAotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAg
ICAgYm9vbCB1c2VkU2luY2VMYXN0U2NhdmVuZ2UoKSB7IHJldHVybiBtX3VzZWRTaW5jZUxhc3RT
Y2F2ZW5nZTsgfQogICAgIHZvaWQgY2xlYXJVc2VkU2luY2VMYXN0U2NhdmVuZ2UoKSB7IG1fdXNl
ZFNpbmNlTGFzdFNjYXZlbmdlID0gZmFsc2U7IH0KICAgICB2b2lkIHNldFVzZWRTaW5jZUxhc3RT
Y2F2ZW5nZSgpIHsgbV91c2VkU2luY2VMYXN0U2NhdmVuZ2UgPSB0cnVlOyB9Ci0jZW5kaWYKIAog
ICAgIFNtYWxsTGluZSogYmVnaW4oKTsKIApAQCAtNjUsOSArNjMsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIHVuc2lnbmVkIGNoYXIgbV9oYXNGcmVlTGluZXM6IDE7CiAgICAgdW5zaWduZWQg
Y2hhciBtX2hhc1BoeXNpY2FsUGFnZXM6IDE7Ci0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkK
ICAgICB1bnNpZ25lZCBjaGFyIG1fdXNlZFNpbmNlTGFzdFNjYXZlbmdlOiAxOwotI2VuZGlmCiAg
ICAgdW5zaWduZWQgY2hhciBtX3JlZkNvdW50OiA3OwogICAgIHVuc2lnbmVkIGNoYXIgbV9zaXpl
Q2xhc3M7CiAgICAgdW5zaWduZWQgY2hhciBtX3NsaWRlOwo=
</data>
<flag name="review"
          id="450977"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="450985"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429956</attachid>
            <date>2021-05-27 16:54:05 -0700</date>
            <delta_ts>2021-06-09 11:26:40 -0700</delta_ts>
            <desc>Patch for Landing.</desc>
            <filename>226237.patch</filename>
            <type>text/plain</type>
            <size>37329</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODE4MikKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBACisyMDIxLTA1LTI2ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIFtibWFsbG9jXSBNYWtlIGFk
YXB0aXZlIHNjYXZlbmdpbmcgbW9yZSBwcmVjaXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYyMzcKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9m
ZnJleSBHYXJlbi4KKworICAgICAgICBUaGlzIHBhdGNoIHJlLWVuYWJsZXMgdGhlIGFkYXB0aXZl
IHNjYXZlbmdlciBmb3IgbWFjT1MuCisgICAgICAgIEl0IGlzIG11Y2ggbW9yZSBwcmVjaXNlIHdo
ZW4gY2FsbGluZyBtYWR2aXNlKCkgYnkga2VlcGluZyB0cmFjayBvZiB0aGUKKyAgICAgICAgbWF4
aW11bSBleHRlbnQgb2YgcGh5c2ljYWxseSBtYXBwZWQgbWVtb3J5IGluIGEgTGFyZ2VSYW5nZS4g
IEZvciBleGFtcGxlLAorICAgICAgICBpbiB0aGUgcHJpb3IgY29kZSwgd2UnZCByZXR1cm4gYSBz
bWFsbCByYW5nZSBiYWNrIHRvIGEgR2lnYWNhZ2UgTGFyZ2VSYW5nZQorICAgICAgICB3aGl0aG91
dCBhbnkgcGh5c2ljYWwgcGFnZXMuICBXaGVuIHdlIHNjYXZlbmdlIHRoYXQgTGFyZ2VSYW5nZSwg
d2UgbWFkdmlzZSgpCisgICAgICAgIHRoZSB3aG9sZSBHaWdhY2FnZSByYW5nZS4gIEFsdGhvdWdo
IHRoaXMgZGlkbid0IGNhdXNlIGNvcnJlY3RuZXNzIGlzc3VlcywKKyAgICAgICAgaXQgd2FzIHF1
aXRlIHdhc3RlZnVsLgorCisgICAgICAgIEluIHRoZSB0ZXN0cyBJIGRpZCB3aXRoIHRoaXMgcGF0
Y2ggY29tcGFyZWQgdG8gdGhlIGVhcmxpZXIgYWRhcHRpdmUgY2hhbmdlLAorICAgICAgICB0aGUg
bnVtYmVyIG9mIG1hZHZpc2UgY2FsbHMgd2UgbWFkZSBkcm9wcyBieSB+MTglIGFuZCB0aGUgdGlt
ZSBzcGVudCBpbiB0aG9zZQorICAgICAgICBjYWxscyBkcm9wcGVkIH4xMyUgb24gYW4gQXBwbGUg
c2lsaWNvbiBtYWMgYW5kIH4zMCUgb24gYW4geDg2IG1hYy4KKyAgICAgICAgVGhpcyB3YXMgbWVh
c3VyZWQgdXNpbmcgZHRyYWNlIHJ1bm5pbmcgSmV0U3RyZWFtMiBmcm9tIHRoZSBjb21tYW5kIGxp
bmUuCisgICAgICAgIFJBTWlmaWNhdGlvbiByZXN1bHRzIGltcHJvdmVkIH4xJSBvdmVyIHRoZSBh
ZHB0aXZlIGNoYW5nZS4KKworICAgICAgICBUaGVyZSBpcyB0aGUgcG9zc2libGUgZnV0dXJlIG9w
dGltaXphdGlvbiB3aGVyZSB3ZSBhbHNvIGtlZXAgdHJhY2sgb2YgdGhlCisgICAgICAgIGZpcnN0
IGFkZHJlc3Mgb2YgcGh5c2ljYWxseSBtYXBwZWQgbWVtb3J5IGluIGEgTGFyZ2VSYW5nZS4gIFNp
bmNlIGJtYWxsb2MKKyAgICAgICAgYWxsb2NhdGVzIG1lbW9yeSBmcm9tIGxvd2VyIGFkZHJlc3Nl
cyBmaXJzdCwgaXQgaXMgdGhvdWdodCB0aGF0IHRoZSBjaGFuZ2UKKyAgICAgICAgaW4gdGhpcyBw
YXRjaCBpcyBzdWZmaWNpZW50IHRvIHJlZHVjZSBub3Qgb25seSB0aGUgbnVtYmVyIG9mIG1hZHZp
c2UgY2FsbHMsCisgICAgICAgIGJ1dCB0aGUgdGltZSBpdCB0YWtlcyB0byBtYWtlIHRob3NlIGNh
bGxzLgorCisgICAgICAgICogYm1hbGxvYy9CUGxhdGZvcm0uaDoKKyAgICAgICAgKiBibWFsbG9j
L0hlYXAuY3BwOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVjb21taXRMYXJnZVJhbmdlKToK
KyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNjYXZlbmdlKToKKyAgICAgICAgKGJtYWxsb2M6Okhl
YXA6OmFsbG9jYXRlU21hbGxDaHVuayk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9j
YXRlU21hbGxDaHVuayk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxsUGFn
ZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKToKKyAgICAgICAg
KGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlTGFyZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6
dHJ5QWxsb2NhdGVMYXJnZUNodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlua0xh
cmdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVMYXJnZSk6CisgICAgICAg
IChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZVRvSGlnaFdhdGVybWFyayk6IERlbGV0ZWQuCisgICAg
ICAgICogYm1hbGxvYy9IZWFwLmg6CisgICAgICAgICogYm1hbGxvYy9Jc29EaXJlY3RvcnkuaDoK
KyAgICAgICAgKiBibWFsbG9jL0lzb0RpcmVjdG9yeUlubGluZXMuaDoKKyAgICAgICAgKGJtYWxs
b2M6OnBhc3NlZE51bVBhZ2VzPjo6dGFrZUZpcnN0RWxpZ2libGUpOgorICAgICAgICAoYm1hbGxv
Yzo6cGFzc2VkTnVtUGFnZXM+OjpzY2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpwYXNzZWRO
dW1QYWdlcz46OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKTogRGVsZXRlZC4KKyAgICAgICAgKiBi
bWFsbG9jL0lzb0hlYXBJbXBsLmg6CisgICAgICAgICogYm1hbGxvYy9Jc29IZWFwSW1wbElubGlu
ZXMuaDoKKyAgICAgICAgKGJtYWxsb2M6Oklzb0hlYXBJbXBsPENvbmZpZz46OnNjYXZlbmdlVG9I
aWdoV2F0ZXJtYXJrKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL0xhcmdlTWFwLmNwcDoK
KyAgICAgICAgKGJtYWxsb2M6OkxhcmdlTWFwOjphZGQpOgorICAgICAgICAqIGJtYWxsb2MvTGFy
Z2VSYW5nZS5oOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VSYW5nZTo6TGFyZ2VSYW5nZSk6Cisg
ICAgICAgIChibWFsbG9jOjpMYXJnZVJhbmdlOjpwaHlzaWNhbEV4dGVudCBjb25zdCk6CisgICAg
ICAgIChibWFsbG9jOjpMYXJnZVJhbmdlOjpzZXRQaHlzaWNhbEV4dGVudCk6CisgICAgICAgIChi
bWFsbG9jOjpMYXJnZVJhbmdlOjpyZXNldFBoeXNpY2FsRXh0ZW50KToKKyAgICAgICAgKGJtYWxs
b2M6OkxhcmdlUmFuZ2U6OnNldFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSk6CisgICAgICAgIChibWFs
bG9jOjptZXJnZSk6CisgICAgICAgIChibWFsbG9jOjpMYXJnZVJhbmdlOjpzcGxpdCBjb25zdCk6
CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIGJtYWxsb2MvU2NhdmVuZ2VyLmNwcDoK
KyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6U2NhdmVuZ2VyKToKKyAgICAgICAgKGJtYWxs
b2M6OlNjYXZlbmdlcjo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6U2NhdmVuZ2VyOjp0
aHJlYWRSdW5Mb29wKToKKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6dGltZVNpbmNlTGFz
dFBhcnRpYWxTY2F2ZW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6
OnBhcnRpYWxTY2F2ZW5nZSk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9TY2F2ZW5nZXIu
aDoKKyAgICAgICAgKiBibWFsbG9jL1NtYWxsUGFnZS5oOgorICAgICAgICAoYm1hbGxvYzo6U21h
bGxQYWdlOjpzZXRVc2VkU2luY2VMYXN0U2NhdmVuZ2UpOgorCiAyMDIxLTA1LTIxICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFtibWFsbG9jXSBSb2xsb3V0
IHIyNzYyNjYgYmVjYXVzZSBXZWJLaXQgcHJvY2Vzc2VzIGFyZSBzcGVuZGluZyBtdWNoIG1vcmUg
dGltZSBpbiBtYWR2aXNlCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JQbGF0Zm9ybS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQlBsYXRmb3JtLmgJKHJldmlz
aW9uIDI3ODE4MikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQlBsYXRmb3JtLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwOSwxMiArMzA5LDYgQEAKIC8qIFRoaXMgaXMgdXNlZCBmb3IgZGVidWdn
aW5nIHdoZW4gaGFja2luZyBvbiBob3cgYm1hbGxvYyBjYWxjdWxhdGVzIGl0cyBwaHlzaWNhbCBm
b290cHJpbnQuICovCiAjZGVmaW5lIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUCAwCiAKLSNpZiBC
UExBVEZPUk0oTUFDKQotI2RlZmluZSBCVVNFX1BBUlRJQUxfU0NBVkVOR0UgMQotI2Vsc2UKLSNk
ZWZpbmUgQlVTRV9QQVJUSUFMX1NDQVZFTkdFIDAKLSNlbmRpZgotCiAjaWYgIWRlZmluZWQoQlVT
RV9QUkVDT01QVVRFRF9DT05TVEFOVFNfVk1QQUdFNEspCiAjZGVmaW5lIEJVU0VfUFJFQ09NUFVU
RURfQ09OU1RBTlRTX1ZNUEFHRTRLIDEKICNlbmRpZgpJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAu
Y3BwCShyZXZpc2lvbiAyNzgxODIpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIEhlYXA6OkhlYXAoSGVhcEtpbmQga2lu
ZCwgTG9ja0hvbGRlciYpCiAgICAgICAgIG1fZ2lnYWNhZ2VTaXplID0gc2l6ZTsKICAgICAgICAg
cHRyZGlmZl90IG9mZnNldCA9IHJvdW5kRG93blRvTXVsdGlwbGVPZih2bVBhZ2VTaXplKCksIHJh
bmRvbVsxXSAlIChnaWdhY2FnZVNpemUgLSBzaXplKSk7CiAgICAgICAgIHZvaWQqIGJhc2UgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihnaWdhY2FnZUJhc2VQdHIpICsgb2Zmc2V0
OwotICAgICAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShiYXNlLCBzaXplLCAwLCAwKSk7
CisgICAgICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJhbmdlKGJhc2UsIHNpemUsIDAsIDAsIGJh
c2UpKTsKICAgICB9CiAjZW5kaWYKICAgICAKQEAgLTEwOCwxMCArMTA4LDEzIEBAIHZvaWQgSGVh
cDo6ZGVjb21taXRMYXJnZVJhbmdlKFVuaXF1ZUxvY2sKIHsKICAgICBtX2Zvb3RwcmludCAtPSBy
YW5nZS50b3RhbFBoeXNpY2FsU2l6ZSgpOwogICAgIG1fZnJlZWFibGVNZW1vcnkgLT0gcmFuZ2Uu
dG90YWxQaHlzaWNhbFNpemUoKTsKLSAgICBkZWNvbW1pdHRlci5hZGRMYXp5KHJhbmdlLmJlZ2lu
KCksIHJhbmdlLnNpemUoKSk7Ci0gICAgbV9oYXNQZW5kaW5nRGVjb21taXRzID0gdHJ1ZTsKKyAg
ICBpZiAocmFuZ2UudG90YWxQaHlzaWNhbFNpemUoKSkgeworICAgICAgICBkZWNvbW1pdHRlci5h
ZGRMYXp5KHJhbmdlLmJlZ2luKCksIHJhbmdlLnBoeXNpY2FsRW5kKCkgLSByYW5nZS5iZWdpbigp
KTsKKyAgICAgICAgbV9oYXNQZW5kaW5nRGVjb21taXRzID0gdHJ1ZTsKKyAgICB9CiAgICAgcmFu
Z2Uuc2V0U3RhcnRQaHlzaWNhbFNpemUoMCk7CiAgICAgcmFuZ2Uuc2V0VG90YWxQaHlzaWNhbFNp
emUoMCk7CisgICAgcmFuZ2UuY2xlYXJQaHlzaWNhbEVuZCgpOwogICAgIEJBU1NFUlQocmFuZ2Uu
aXNFbGlnaWJpbGUoKSk7CiAgICAgcmFuZ2Uuc2V0RWxpZ2libGUoZmFsc2UpOwogI2lmIEVOQUJM
RV9QSFlTSUNBTF9QQUdFX01BUCAKQEAgLTExOSwyNCArMTIyLDE4IEBAIHZvaWQgSGVhcDo6ZGVj
b21taXRMYXJnZVJhbmdlKFVuaXF1ZUxvY2sKICNlbmRpZgogfQogCi0jaWYgQlVTRShQQVJUSUFM
X1NDQVZFTkdFKQotdm9pZCBIZWFwOjpzY2F2ZW5nZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBC
dWxrRGVjb21taXQmIGRlY29tbWl0dGVyKQotI2Vsc2UKIHZvaWQgSGVhcDo6c2NhdmVuZ2UoVW5p
cXVlTG9ja0hvbGRlciYgbG9jaywgQnVsa0RlY29tbWl0JiBkZWNvbW1pdHRlciwgc2l6ZV90JiBk
ZWZlcnJlZERlY29tbWl0cykKLSNlbmRpZgogewogICAgIGZvciAoYXV0byYgbGlzdCA6IG1fZnJl
ZVBhZ2VzKSB7CiAgICAgICAgIGZvciAoYXV0byogY2h1bmsgOiBsaXN0KSB7CiAgICAgICAgICAg
ICBmb3IgKGF1dG8qIHBhZ2UgOiBjaHVuay0+ZnJlZVBhZ2VzKCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoIXBhZ2UtPmhhc1BoeXNpY2FsUGFnZXMoKSkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKICAgICAgICAgICAgICAgICBpZiAo
cGFnZS0+dXNlZFNpbmNlTGFzdFNjYXZlbmdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgcGFn
ZS0+Y2xlYXJVc2VkU2luY2VMYXN0U2NhdmVuZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgZGVm
ZXJyZWREZWNvbW1pdHMrKzsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgfQotI2VuZGlmCiAKICAgICAgICAgICAgICAgICBzaXplX3QgcGFnZVNpemUgPSBi
bWFsbG9jOjpwYWdlU2l6ZSgmbGlzdCAtICZtX2ZyZWVQYWdlc1swXSk7CiAgICAgICAgICAgICAg
ICAgc2l6ZV90IGRlY29tbWl0U2l6ZSA9IHBoeXNpY2FsUGFnZVNpemVTbG9wcHkocGFnZS0+YmVn
aW4oKS0+YmVnaW4oKSwgcGFnZVNpemUpOwpAQCAtMTU3LDM3ICsxNTQsMTUgQEAgdm9pZCBIZWFw
OjpzY2F2ZW5nZShVbmlxdWVMb2NrSG9sZGVyJiBsbwogICAgIH0KIAogICAgIGZvciAoTGFyZ2VS
YW5nZSYgcmFuZ2UgOiBtX2xhcmdlRnJlZSkgewotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkK
LSAgICAgICAgbV9oaWdoV2F0ZXJtYXJrID0gc3RkOjptaW4obV9oaWdoV2F0ZXJtYXJrLCBzdGF0
aWNfY2FzdDx2b2lkKj4ocmFuZ2UuYmVnaW4oKSkpOwotI2Vsc2UKICAgICAgICAgaWYgKHJhbmdl
LnVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpKSB7CiAgICAgICAgICAgICByYW5nZS5jbGVhclVzZWRT
aW5jZUxhc3RTY2F2ZW5nZSgpOwogICAgICAgICAgICAgZGVmZXJyZWREZWNvbW1pdHMrKzsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgZGVjb21taXRM
YXJnZVJhbmdlKGxvY2ssIHJhbmdlLCBkZWNvbW1pdHRlcik7CiAgICAgfQotCi0jaWYgQlVTRShQ
QVJUSUFMX1NDQVZFTkdFKQotICAgIG1fZnJlZWFibGVNZW1vcnkgPSAwOwotI2VuZGlmCiB9CiAK
LSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi12b2lkIEhlYXA6OnNjYXZlbmdlVG9IaWdoV2F0
ZXJtYXJrKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIEJ1bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIp
Ci17Ci0gICAgdm9pZCogbmV3SGlnaFdhdGVyTWFyayA9IG51bGxwdHI7Ci0gICAgZm9yIChMYXJn
ZVJhbmdlJiByYW5nZSA6IG1fbGFyZ2VGcmVlKSB7Ci0gICAgICAgIGlmIChyYW5nZS5iZWdpbigp
IDw9IG1faGlnaFdhdGVybWFyaykKLSAgICAgICAgICAgIG5ld0hpZ2hXYXRlck1hcmsgPSBzdGQ6
Om1pbihuZXdIaWdoV2F0ZXJNYXJrLCBzdGF0aWNfY2FzdDx2b2lkKj4ocmFuZ2UuYmVnaW4oKSkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkZWNvbW1pdExhcmdlUmFuZ2UobG9jaywgcmFu
Z2UsIGRlY29tbWl0dGVyKTsKLSAgICB9Ci0gICAgbV9oaWdoV2F0ZXJtYXJrID0gbmV3SGlnaFdh
dGVyTWFyazsKLX0KLSNlbmRpZgotCiB2b2lkIEhlYXA6OmRlYWxsb2NhdGVMaW5lQ2FjaGUoVW5p
cXVlTG9ja0hvbGRlciYsIExpbmVDYWNoZSYgbGluZUNhY2hlKQogewogICAgIGZvciAoYXV0byYg
bGlzdCA6IGxpbmVDYWNoZSkgewpAQCAtMjE4LDI1ICsxOTMsMTQgQEAgdm9pZCBIZWFwOjphbGxv
Y2F0ZVNtYWxsQ2h1bmsoVW5pcXVlTG9jawogCiAgICAgICAgIG1fb2JqZWN0VHlwZXMuc2V0KGxv
Y2ssIGNodW5rLCBPYmplY3RUeXBlOjpTbWFsbCk7CiAKLSAgICAgICAgc2l6ZV90IGFjY291bnRl
ZEluRnJlZWFibGUgPSAwOwogICAgICAgICBmb3JFYWNoUGFnZShjaHVuaywgcGFnZVNpemUsIFsm
XShTbWFsbFBhZ2UqIHBhZ2UpIHsKICAgICAgICAgICAgIHBhZ2UtPnNldEhhc1BoeXNpY2FsUGFn
ZXModHJ1ZSk7Ci0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKICAgICAgICAgICAgIHBhZ2Ut
PnNldFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpOwotI2VuZGlmCiAgICAgICAgICAgICBwYWdlLT5z
ZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7CiAgICAgICAgICAgICBjaHVuay0+ZnJlZVBhZ2Vz
KCkucHVzaChwYWdlKTsKLSAgICAgICAgICAgIGFjY291bnRlZEluRnJlZWFibGUgKz0gcGFnZVNp
emU7CiAgICAgICAgIH0pOwogCi0gICAgICAgIG1fZnJlZWFibGVNZW1vcnkgKz0gYWNjb3VudGVk
SW5GcmVlYWJsZTsKLQotICAgICAgICBhdXRvIG1ldGFkYXRhU2l6ZSA9IENodW5rOjptZXRhZGF0
YVNpemUocGFnZVNpemUpOwotICAgICAgICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5
KGNodW5rLT5hZGRyZXNzKHNpemVvZihDaHVuaykpLCBtZXRhZGF0YVNpemUgLSBzaXplb2YoQ2h1
bmspKTsKLQotICAgICAgICBhdXRvIGRlY29tbWl0U2l6ZSA9IGNodW5rU2l6ZSAtIG1ldGFkYXRh
U2l6ZSAtIGFjY291bnRlZEluRnJlZWFibGU7Ci0gICAgICAgIGlmIChkZWNvbW1pdFNpemUgPiAw
KQotICAgICAgICAgICAgdm1EZWFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShjaHVuay0+YWRk
cmVzcyhjaHVua1NpemUgLSBkZWNvbW1pdFNpemUpLCBkZWNvbW1pdFNpemUpOworICAgICAgICBt
X2ZyZWVhYmxlTWVtb3J5ICs9IGNodW5rU2l6ZTsKIAogICAgICAgICBtX3NjYXZlbmdlci0+c2No
ZWR1bGUoMCk7CiAKQEAgLTI1MywyNCArMjE3LDIzIEBAIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNt
YWxsQ2h1bmsoVW5pcXVlTG8KICAgICAKICAgICBzaXplX3Qgc2l6ZSA9IG1fbGFyZ2VBbGxvY2F0
ZWQucmVtb3ZlKGNodW5rKTsKICAgICBzaXplX3QgdG90YWxQaHlzaWNhbFNpemUgPSBzaXplOwor
ICAgIHNpemVfdCBjaHVua1BhZ2VTaXplID0gcGFnZVNpemUocGFnZUNsYXNzKTsKKyAgICBTbWFs
bFBhZ2UqIGZpcnN0UGFnZVdpdGhvdXRQaHlzaWNhbFBhZ2VzID0gbnVsbHB0cjsKIAotICAgIHNp
emVfdCBhY2NvdW50ZWRJbkZyZWVhYmxlID0gMDsKLQotICAgIGJvb2wgaGFzUGh5c2ljYWxQYWdl
cyA9IHRydWU7Ci0gICAgZm9yRWFjaFBhZ2UoY2h1bmssIHBhZ2VTaXplKHBhZ2VDbGFzcyksIFsm
XShTbWFsbFBhZ2UqIHBhZ2UpIHsKKyAgICB2b2lkKiBwaHlzaWNhbEVuZCA9IGNodW5rLT5hZGRy
ZXNzKGNodW5rLT5tZXRhZGF0YVNpemUoY2h1bmtQYWdlU2l6ZSkpOworICAgIGZvckVhY2hQYWdl
KGNodW5rLCBjaHVua1BhZ2VTaXplLCBbJl0oU21hbGxQYWdlKiBwYWdlKSB7CiAgICAgICAgIHNp
emVfdCBwaHlzaWNhbFNpemUgPSBwaHlzaWNhbFBhZ2VTaXplU2xvcHB5KHBhZ2UtPmJlZ2luKCkt
PmJlZ2luKCksIHBhZ2VTaXplKHBhZ2VDbGFzcykpOwogICAgICAgICBpZiAoIXBhZ2UtPmhhc1Bo
eXNpY2FsUGFnZXMoKSkgewogICAgICAgICAgICAgdG90YWxQaHlzaWNhbFNpemUgLT0gcGh5c2lj
YWxTaXplOwotICAgICAgICAgICAgaGFzUGh5c2ljYWxQYWdlcyA9IGZhbHNlOworICAgICAgICAg
ICAgaWYgKCFmaXJzdFBhZ2VXaXRob3V0UGh5c2ljYWxQYWdlcykKKyAgICAgICAgICAgICAgICBm
aXJzdFBhZ2VXaXRob3V0UGh5c2ljYWxQYWdlcyA9IHBhZ2U7CiAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgYWNjb3VudGVkSW5GcmVlYWJsZSArPSBwaHlzaWNhbFNpemU7CisgICAgICAgICAg
ICBwaHlzaWNhbEVuZCA9IHBhZ2UtPmJlZ2luKCktPmJlZ2luKCkgKyBwaHlzaWNhbFNpemU7CiAg
ICAgfSk7CiAKLSAgICBtX2ZyZWVhYmxlTWVtb3J5IC09IGFjY291bnRlZEluRnJlZWFibGU7Ci0g
ICAgbV9mcmVlYWJsZU1lbW9yeSArPSB0b3RhbFBoeXNpY2FsU2l6ZTsKKyAgICBzaXplX3Qgc3Rh
cnRQaHlzaWNhbFNpemUgPSBmaXJzdFBhZ2VXaXRob3V0UGh5c2ljYWxQYWdlcyA/IGZpcnN0UGFn
ZVdpdGhvdXRQaHlzaWNhbFBhZ2VzLT5iZWdpbigpLT5iZWdpbigpIC0gY2h1bmstPmJ5dGVzKCkg
OiBzaXplOwogCi0gICAgc2l6ZV90IHN0YXJ0UGh5c2ljYWxTaXplID0gaGFzUGh5c2ljYWxQYWdl
cyA/IHNpemUgOiAwOwotICAgIG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJhbmdlKGNodW5rLCBzaXpl
LCBzdGFydFBoeXNpY2FsU2l6ZSwgdG90YWxQaHlzaWNhbFNpemUpKTsKKyAgICBtX2xhcmdlRnJl
ZS5hZGQoTGFyZ2VSYW5nZShjaHVuaywgc2l6ZSwgc3RhcnRQaHlzaWNhbFNpemUsIHRvdGFsUGh5
c2ljYWxTaXplLCBjaHVuay0+YWRkcmVzcyhzdGFydFBoeXNpY2FsU2l6ZSkpKTsKIH0KIAogU21h
bGxQYWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBz
aXplX3Qgc2l6ZUNsYXNzLCBMaW5lQ2FjaGUmIGxpbmVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rp
b24pCkBAIC0yODMsOCArMjQ2LDYgQEAgU21hbGxQYWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFn
ZShVbmlxdQogICAgIGlmICghbV9saW5lQ2FjaGVbc2l6ZUNsYXNzXS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBtX2xpbmVDYWNoZVtzaXplQ2xhc3NdLnBvcEZyb250KCk7CiAKLSAgICBtX3Nj
YXZlbmdlci0+ZGlkU3RhcnRHcm93aW5nKCk7Ci0gICAgCiAgICAgU21hbGxQYWdlKiBwYWdlID0g
WyZdKCkgLT4gU21hbGxQYWdlKiB7CiAgICAgICAgIHNpemVfdCBwYWdlQ2xhc3MgPSBtX2NvbnN0
YW50cy5wYWdlQ2xhc3Moc2l6ZUNsYXNzKTsKICAgICAgICAgCkBAIC0zMTQsOSArMjc1LDcgQEAg
U21hbGxQYWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShVbmlxdQogICAgICAgICAgICAgbV9w
aHlzaWNhbFBhZ2VNYXAuY29tbWl0KHBhZ2UtPmJlZ2luKCktPmJlZ2luKCksIHBhZ2VTaXplKTsK
ICNlbmRpZgogICAgICAgICB9Ci0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKICAgICAgICAg
cGFnZS0+c2V0VXNlZFNpbmNlTGFzdFNjYXZlbmdlKCk7Ci0jZW5kaWYKIAogICAgICAgICByZXR1
cm4gcGFnZTsKICAgICB9KCk7CkBAIC01MjUsNiArNDg0LDcgQEAgTGFyZ2VSYW5nZSBIZWFwOjpz
cGxpdEFuZEFsbG9jYXRlKFVuaXF1ZQogICAgICAgICB2bUFsbG9jYXRlUGh5c2ljYWxQYWdlc1Ns
b3BweShyYW5nZS5iZWdpbigpICsgcmFuZ2Uuc3RhcnRQaHlzaWNhbFNpemUoKSwgcmFuZ2Uuc2l6
ZSgpIC0gcmFuZ2Uuc3RhcnRQaHlzaWNhbFNpemUoKSk7CiAgICAgICAgIHJhbmdlLnNldFN0YXJ0
UGh5c2ljYWxTaXplKHJhbmdlLnNpemUoKSk7CiAgICAgICAgIHJhbmdlLnNldFRvdGFsUGh5c2lj
YWxTaXplKHJhbmdlLnNpemUoKSk7CisgICAgICAgIHJhbmdlLnNldFBoeXNpY2FsRW5kKHJhbmdl
LmJlZ2luKCkgKyByYW5nZS5zaXplKCkpOwogI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUCAK
ICAgICAgICAgbV9waHlzaWNhbFBhZ2VNYXAuY29tbWl0KHJhbmdlLmJlZ2luKCksIHJhbmdlLnNp
emUoKSk7CiAjZW5kaWYKQEAgLTU2MCw4ICs1MjAsNiBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxh
cmdlKFVuaXF1ZUxvY2tIb2xkCiAKICAgICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQp
KTsKICAgICAKLSAgICBtX3NjYXZlbmdlci0+ZGlkU3RhcnRHcm93aW5nKCk7Ci0gICAgCiAgICAg
c2l6ZV90IHJvdW5kZWRTaXplID0gc2l6ZSA/IHJvdW5kVXBUb011bHRpcGxlT2YobGFyZ2VBbGln
bm1lbnQsIHNpemUpIDogbGFyZ2VBbGlnbm1lbnQ7CiAgICAgQVNTRVJUX09SX1JFVFVSTl9PTl9G
QUlMVVJFKHJvdW5kZWRTaXplID49IHNpemUpOyAvLyBDaGVjayBmb3Igb3ZlcmZsb3cKICAgICBz
aXplID0gcm91bmRlZFNpemU7CkBAIC01OTAsOSArNTQ4LDYgQEAgdm9pZCogSGVhcDo6YWxsb2Nh
dGVMYXJnZShVbmlxdWVMb2NrSG9sZAogICAgIG1fZnJlZWFibGVNZW1vcnkgLT0gcmFuZ2UudG90
YWxQaHlzaWNhbFNpemUoKTsKIAogICAgIHZvaWQqIHJlc3VsdCA9IHNwbGl0QW5kQWxsb2NhdGUo
bG9jaywgcmFuZ2UsIGFsaWdubWVudCwgc2l6ZSkuYmVnaW4oKTsKLSNpZiBCVVNFKFBBUlRJQUxf
U0NBVkVOR0UpCi0gICAgbV9oaWdoV2F0ZXJtYXJrID0gc3RkOjptYXgobV9oaWdoV2F0ZXJtYXJr
LCByZXN1bHQpOwotI2VuZGlmCiAgICAgQVNTRVJUX09SX1JFVFVSTl9PTl9GQUlMVVJFKHJlc3Vs
dCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtNjIxLDcgKzU3Niw3IEBAIExhcmdlUmFuZ2Ug
SGVhcDo6dHJ5QWxsb2NhdGVMYXJnZUNodW5rKHMKICAgICBQZXJQcm9jZXNzPFpvbmU+OjpnZXQo
KS0+YWRkUmFuZ2UoUmFuZ2UobWVtb3J5LCBzaXplKSk7CiAjZW5kaWYKIAotICAgIHJldHVybiBM
YXJnZVJhbmdlKG1lbW9yeSwgc2l6ZSwgMCwgMCk7CisgICAgcmV0dXJuIExhcmdlUmFuZ2UobWVt
b3J5LCBzaXplLCAwLCAwLCBtZW1vcnkpOwogfQogCiBzaXplX3QgSGVhcDo6bGFyZ2VTaXplKFVu
aXF1ZUxvY2tIb2xkZXImLCB2b2lkKiBvYmplY3QpCkBAIC02MzQsNyArNTg5LDcgQEAgdm9pZCBI
ZWFwOjpzaHJpbmtMYXJnZShVbmlxdWVMb2NrSG9sZGVyJgogICAgIEJBU1NFUlQob2JqZWN0LnNp
emUoKSA+IG5ld1NpemUpOwogCiAgICAgc2l6ZV90IHNpemUgPSBtX2xhcmdlQWxsb2NhdGVkLnJl
bW92ZShvYmplY3QuYmVnaW4oKSk7Ci0gICAgTGFyZ2VSYW5nZSByYW5nZSA9IExhcmdlUmFuZ2Uo
b2JqZWN0LCBzaXplLCBzaXplKTsKKyAgICBMYXJnZVJhbmdlIHJhbmdlID0gTGFyZ2VSYW5nZShv
YmplY3QsIHNpemUsIHNpemUsIG9iamVjdC5iZWdpbigpICsgc2l6ZSk7CiAgICAgc3BsaXRBbmRB
bGxvY2F0ZShsb2NrLCByYW5nZSwgYWxpZ25tZW50LCBuZXdTaXplKTsKIAogICAgIG1fc2NhdmVu
Z2VyLT5zY2hlZHVsZShzaXplKTsKQEAgLTY0Myw3ICs1OTgsNyBAQCB2b2lkIEhlYXA6OnNocmlu
a0xhcmdlKFVuaXF1ZUxvY2tIb2xkZXImCiB2b2lkIEhlYXA6OmRlYWxsb2NhdGVMYXJnZShVbmlx
dWVMb2NrSG9sZGVyJiwgdm9pZCogb2JqZWN0KQogewogICAgIHNpemVfdCBzaXplID0gbV9sYXJn
ZUFsbG9jYXRlZC5yZW1vdmUob2JqZWN0KTsKLSAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VSYW5n
ZShvYmplY3QsIHNpemUsIHNpemUsIHNpemUpKTsKKyAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VS
YW5nZShvYmplY3QsIHNpemUsIHNpemUsIHNpemUsIHN0YXRpY19jYXN0PGNoYXIqPihvYmplY3Qp
ICsgc2l6ZSkpOwogICAgIG1fZnJlZWFibGVNZW1vcnkgKz0gc2l6ZTsKICAgICBtX3NjYXZlbmdl
ci0+c2NoZWR1bGUoc2l6ZSk7CiB9CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkocmV2aXNpb24g
Mjc4MTgyKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc0LDEyICs3NCw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgbGFyZ2VTaXplKFVuaXF1ZUxv
Y2tIb2xkZXImLCB2b2lkKik7CiAgICAgdm9pZCBzaHJpbmtMYXJnZShVbmlxdWVMb2NrSG9sZGVy
JiwgY29uc3QgUmFuZ2UmLCBzaXplX3QpOwogCi0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQot
ICAgIHZvaWQgc2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsoVW5pcXVlTG9ja0hvbGRlciYsIEJ1bGtE
ZWNvbW1pdCYpOwotICAgIHZvaWQgc2NhdmVuZ2UoVW5pcXVlTG9ja0hvbGRlciYsIEJ1bGtEZWNv
bW1pdCYpOwotI2Vsc2UKICAgICB2b2lkIHNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImLCBCdWxr
RGVjb21taXQmLCBzaXplX3QmIGRlZmVycmVkRGVjb21taXRzKTsKLSNlbmRpZgogICAgIHZvaWQg
c2NhdmVuZ2UoVW5pcXVlTG9ja0hvbGRlciYsIEJ1bGtEZWNvbW1pdCYsIHNpemVfdCYgZnJlZWQs
IHNpemVfdCBnb2FsKTsKIAogICAgIHNpemVfdCBmcmVlYWJsZU1lbW9yeShVbmlxdWVMb2NrSG9s
ZGVyJik7CkBAIC0xNDcsMTAgKzE0Miw2IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFX1BIWVNJQ0FM
X1BBR0VfTUFQIAogICAgIFBoeXNpY2FsUGFnZU1hcCBtX3BoeXNpY2FsUGFnZU1hcDsKICNlbmRp
ZgotICAgIAotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICB2b2lkKiBtX2hpZ2hXYXRl
cm1hcmsgeyBudWxscHRyIH07Ci0jZW5kaWYKIH07CiAKIGlubGluZSB2b2lkIEhlYXA6OmFsbG9j
YXRlU21hbGxCdW1wUmFuZ2VzKApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29EaXJl
Y3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0RpcmVjdG9y
eS5oCShyZXZpc2lvbiAyNzgxODIpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0RpcmVj
dG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw5ICs3Niw2IEBAIHB1YmxpYzoKICAgICAvLyBJ
dGVyYXRlIG92ZXIgYWxsIGVtcHR5IGFuZCBjb21taXR0ZWQgcGFnZXMsIGFuZCBwdXQgdGhlbSBp
bnRvIHRoZSB2ZWN0b3IuIFRoaXMgYWxzbyByZWNvcmRzIHRoZQogICAgIC8vIHBhZ2VzIGFzIGJl
aW5nIGRlY29tbWl0dGVkLiBJdCdzIHRoZSBjYWxsZXIncyBqb2IgdG8gZG8gdGhlIGFjdHVhbCBk
ZWNvbW1pdHRpbmcuCiAgICAgdm9pZCBzY2F2ZW5nZShjb25zdCBMb2NrSG9sZGVyJiwgVmVjdG9y
PERlZmVycmVkRGVjb21taXQ+Jik7Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAgIHZv
aWQgc2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsoY29uc3QgTG9ja0hvbGRlciYsIFZlY3RvcjxEZWZl
cnJlZERlY29tbWl0PiYpOwotI2VuZGlmCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgog
ICAgIHZvaWQgZm9yRWFjaENvbW1pdHRlZFBhZ2UoY29uc3QgTG9ja0hvbGRlciYsIGNvbnN0IEZ1
bmMmKTsKQEAgLTkzLDkgKzkwLDYgQEAgcHJpdmF0ZToKICAgICBCaXRzPG51bVBhZ2VzPiBtX2Vt
cHR5OwogICAgIEJpdHM8bnVtUGFnZXM+IG1fY29tbWl0dGVkOwogICAgIHVuc2lnbmVkIG1fZmly
c3RFbGlnaWJsZU9yRGVjb21taXR0ZWQgeyAwIH07Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdF
KQotICAgIHVuc2lnbmVkIG1faGlnaFdhdGVybWFyayB7IDAgfTsKLSNlbmRpZgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29EaXJl
Y3RvcnlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29E
aXJlY3RvcnlJbmxpbmVzLmgJKHJldmlzaW9uIDI3ODE4MikKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSXNvRGlyZWN0b3J5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMiArNTAs
NyBAQCBFbGlnaWJpbGl0eVJlc3VsdDxDb25maWc+IElzb0RpcmVjdG9yeTxDCiAgICAgaWYgKHBh
Z2VJbmRleCA+PSBudW1QYWdlcykKICAgICAgICAgcmV0dXJuIEVsaWdpYmlsaXR5S2luZDo6RnVs
bDsKIAotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICBtX2hpZ2hXYXRlcm1hcmsgPSBz
dGQ6Om1heChwYWdlSW5kZXgsIG1faGlnaFdhdGVybWFyayk7Ci0jZW5kaWYKLQogICAgIFNjYXZl
bmdlciYgc2NhdmVuZ2VyID0gKlNjYXZlbmdlcjo6Z2V0KCk7Ci0gICAgc2NhdmVuZ2VyLmRpZFN0
YXJ0R3Jvd2luZygpOwogICAgIAogICAgIElzb1BhZ2U8Q29uZmlnPiogcGFnZSA9IG1fcGFnZXNb
cGFnZUluZGV4XS5nZXQoKTsKICAgICAKQEAgLTE0NiwyMyArMTQxLDcgQEAgdm9pZCBJc29EaXJl
Y3Rvcnk8Q29uZmlnLCBwYXNzZWROdW1QYWdlcwogICAgICAgICBbJl0gKHNpemVfdCBpbmRleCkg
ewogICAgICAgICAgICAgc2NhdmVuZ2VQYWdlKGxvY2tlciwgaW5kZXgsIGRlY29tbWl0cyk7CiAg
ICAgICAgIH0pOwotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICBtX2hpZ2hXYXRlcm1h
cmsgPSAwOwotI2VuZGlmCi19Ci0KLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi10ZW1wbGF0
ZTx0eXBlbmFtZSBDb25maWcsIHVuc2lnbmVkIHBhc3NlZE51bVBhZ2VzPgotdm9pZCBJc29EaXJl
Y3Rvcnk8Q29uZmlnLCBwYXNzZWROdW1QYWdlcz46OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKGNv
bnN0IExvY2tIb2xkZXImIGxvY2tlciwgVmVjdG9yPERlZmVycmVkRGVjb21taXQ+JiBkZWNvbW1p
dHMpCi17Ci0gICAgKG1fZW1wdHkgJiBtX2NvbW1pdHRlZCkuZm9yRWFjaFNldEJpdCgKLSAgICAg
ICAgWyZdIChzaXplX3QgaW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA+IG1faGlnaFdh
dGVybWFyaykKLSAgICAgICAgICAgICAgICBzY2F2ZW5nZVBhZ2UobG9ja2VyLCBpbmRleCwgZGVj
b21taXRzKTsKLSAgICAgICAgfSk7Ci0gICAgbV9oaWdoV2F0ZXJtYXJrID0gMDsKIH0KLSNlbmRp
ZgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWcsIHVuc2lnbmVkIHBhc3NlZE51bVBhZ2VzPgog
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNv
SGVhcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0hlYXBJ
bXBsLmgJKHJldmlzaW9uIDI3ODE4MikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvSGVh
cEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksNiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB+SXNvSGVhcEltcGxCYXNlKCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHNjYXZlbmdl
KFZlY3RvcjxEZWZlcnJlZERlY29tbWl0PiYpID0gMDsKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVO
R0UpCi0gICAgdmlydHVhbCB2b2lkIHNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKFZlY3RvcjxEZWZl
cnJlZERlY29tbWl0PiYpID0gMDsKLSNlbmRpZgogICAgIAogICAgIHZvaWQgc2NhdmVuZ2VOb3co
KTsKICAgICBzdGF0aWMgdm9pZCBmaW5pc2hTY2F2ZW5naW5nKFZlY3RvcjxEZWZlcnJlZERlY29t
bWl0PiYpOwpAQCAtMTEyLDkgKzEwOSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEJlY29tZUVs
aWdpYmxlT3JEZWNvbW1pdGVkKGNvbnN0IExvY2tIb2xkZXImLCBJc29EaXJlY3Rvcnk8Q29uZmln
LCBJc29EaXJlY3RvcnlQYWdlPENvbmZpZz46Om51bVBhZ2VzPiopOwogICAgIAogICAgIHZvaWQg
c2NhdmVuZ2UoVmVjdG9yPERlZmVycmVkRGVjb21taXQ+Jikgb3ZlcnJpZGU7Ci0jaWYgQlVTRShQ
QVJUSUFMX1NDQVZFTkdFKQotICAgIHZvaWQgc2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsoVmVjdG9y
PERlZmVycmVkRGVjb21taXQ+Jikgb3ZlcnJpZGU7Ci0jZW5kaWYKIAogICAgIHVuc2lnbmVkIGFs
bG9jYXRvck9mZnNldCgpOwogICAgIHVuc2lnbmVkIGRlYWxsb2NhdG9yT2Zmc2V0KCk7CkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0hlYXBJbXBsSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvSGVhcEltcGxJbmxpbmVzLmgJKHJldmlzaW9u
IDI3ODE4MikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvSGVhcEltcGxJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMSwyMSArMTIxLDYgQEAgdm9pZCBJc29IZWFwSW1wbDxDb25m
aWc+OjpzY2F2ZW5nZShWZWN0bwogICAgIG1fZGlyZWN0b3J5SGlnaFdhdGVybWFyayA9IDA7CiB9
CiAKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWc+
Ci12b2lkIElzb0hlYXBJbXBsPENvbmZpZz46OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKFZlY3Rv
cjxEZWZlcnJlZERlY29tbWl0PiYgZGVjb21taXRzKQotewotICAgIExvY2tIb2xkZXIgbG9ja2Vy
KHRoaXMtPmxvY2spOwotICAgIGlmICghbV9kaXJlY3RvcnlIaWdoV2F0ZXJtYXJrKQotICAgICAg
ICBtX2lubGluZURpcmVjdG9yeS5zY2F2ZW5nZVRvSGlnaFdhdGVybWFyayhsb2NrZXIsIGRlY29t
bWl0cyk7Ci0gICAgZm9yIChJc29EaXJlY3RvcnlQYWdlPENvbmZpZz4qIHBhZ2UgPSBtX2hlYWRE
aXJlY3RvcnkuZ2V0KCk7IHBhZ2U7IHBhZ2UgPSBwYWdlLT5uZXh0KSB7Ci0gICAgICAgIGlmIChw
YWdlLT5pbmRleCgpID49IG1fZGlyZWN0b3J5SGlnaFdhdGVybWFyaykKLSAgICAgICAgICAgIHBh
Z2UtPnBheWxvYWQuc2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsobG9ja2VyLCBkZWNvbW1pdHMpOwot
ICAgIH0KLSAgICBtX2RpcmVjdG9yeUhpZ2hXYXRlcm1hcmsgPSAwOwotfQotI2VuZGlmCi0KIGlu
bGluZSBzaXplX3QgSXNvSGVhcEltcGxCYXNlOjpmcmVlYWJsZU1lbW9yeSgpCiB7CiAgICAgcmV0
dXJuIG1fZnJlZWFibGVNZW1vcnk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1No
YXJlZEhlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9J
c29TaGFyZWRIZWFwSW5saW5lcy5oCShyZXZpc2lvbiAyNzgxODIpCisrKyBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0lzb1NoYXJlZEhlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcg
KzYzLDYgQEAgdGVtcGxhdGU8dW5zaWduZWQgcGFzc2VkT2JqZWN0U2l6ZT4KIEJOT19JTkxJTkUg
dm9pZCogSXNvU2hhcmVkSGVhcDo6YWxsb2NhdGVTbG93KGNvbnN0IExvY2tIb2xkZXImIGxvY2tl
ciwgYm9vbCBhYm9ydE9uRmFpbHVyZSkKIHsKICAgICBTY2F2ZW5nZXImIHNjYXZlbmdlciA9ICpT
Y2F2ZW5nZXI6OmdldCgpOwotICAgIHNjYXZlbmdlci5kaWRTdGFydEdyb3dpbmcoKTsKICAgICBz
Y2F2ZW5nZXIuc2NoZWR1bGVJZlVuZGVyTWVtb3J5UHJlc3N1cmUoSXNvU2hhcmVkUGFnZTo6cGFn
ZVNpemUpOwogCiAgICAgSXNvU2hhcmVkUGFnZSogcGFnZSA9IElzb1NoYXJlZFBhZ2U6OnRyeUNy
ZWF0ZSgpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU1hcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU1hcC5jcHAJKHJldmlzaW9uIDI3
ODE4MikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VNYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Niw5ICs3Niw3IEBAIHZvaWQgTGFyZ2VNYXA6OmFkZChjb25zdCBMYXJnZVJhbmdl
JiByYW4KICAgICAgICAgbWVyZ2VkID0gbWVyZ2UobWVyZ2VkLCBtX2ZyZWUucG9wKGktLSkpOwog
ICAgIH0KIAotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgbWVyZ2VkLnNldFVzZWRT
aW5jZUxhc3RTY2F2ZW5nZSgpOwotI2VuZGlmCiAgICAgbV9mcmVlLnB1c2gobWVyZ2VkKTsKIH0K
IApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZVJhbmdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZVJhbmdlLmgJKHJldmlzaW9uIDI3ODE4MikK
KysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VSYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw0NyArMzcsMzUgQEAgcHVibGljOgogICAgICAgICA6IFJhbmdlKCkKICAgICAgICAgLCBt
X3N0YXJ0UGh5c2ljYWxTaXplKDApCiAgICAgICAgICwgbV90b3RhbFBoeXNpY2FsU2l6ZSgwKQot
I2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCisgICAgICAgICwgbV9waHlzaWNhbEVuZChiZWdp
bigpKQogICAgICAgICAsIG1faXNFbGlnaWJsZSh0cnVlKQogICAgICAgICAsIG1fdXNlZFNpbmNl
TGFzdFNjYXZlbmdlKGZhbHNlKQotI2VuZGlmCiAgICAgewogICAgIH0KIAotICAgIExhcmdlUmFu
Z2UoY29uc3QgUmFuZ2UmIG90aGVyLCBzaXplX3Qgc3RhcnRQaHlzaWNhbFNpemUsIHNpemVfdCB0
b3RhbFBoeXNpY2FsU2l6ZSkKKyAgICBMYXJnZVJhbmdlKGNvbnN0IFJhbmdlJiBvdGhlciwgc2l6
ZV90IHN0YXJ0UGh5c2ljYWxTaXplLCBzaXplX3QgdG90YWxQaHlzaWNhbFNpemUsIHZvaWQqIHBo
eXNpY2FsRW5kKQogICAgICAgICA6IFJhbmdlKG90aGVyKQogICAgICAgICAsIG1fc3RhcnRQaHlz
aWNhbFNpemUoc3RhcnRQaHlzaWNhbFNpemUpCiAgICAgICAgICwgbV90b3RhbFBoeXNpY2FsU2l6
ZSh0b3RhbFBoeXNpY2FsU2l6ZSkKLSNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQorICAgICAg
ICAsIG1fcGh5c2ljYWxFbmQoc3RhdGljX2Nhc3Q8Y2hhcio+KHBoeXNpY2FsRW5kKSkKICAgICAg
ICAgLCBtX2lzRWxpZ2libGUodHJ1ZSkKICAgICAgICAgLCBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5n
ZShmYWxzZSkKLSNlbmRpZgogICAgIHsKICAgICAgICAgQkFTU0VSVCh0aGlzLT5zaXplKCkgPj0g
dGhpcy0+dG90YWxQaHlzaWNhbFNpemUoKSk7CiAgICAgICAgIEJBU1NFUlQodGhpcy0+dG90YWxQ
aHlzaWNhbFNpemUoKSA+PSB0aGlzLT5zdGFydFBoeXNpY2FsU2l6ZSgpKTsKICAgICB9CiAKLSNp
ZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi0gICAgTGFyZ2VSYW5nZSh2b2lkKiBiZWdpbiwgc2l6
ZV90IHNpemUsIHNpemVfdCBzdGFydFBoeXNpY2FsU2l6ZSwgc2l6ZV90IHRvdGFsUGh5c2ljYWxT
aXplKQotICAgICAgICA6IFJhbmdlKGJlZ2luLCBzaXplKQotICAgICAgICAsIG1fc3RhcnRQaHlz
aWNhbFNpemUoc3RhcnRQaHlzaWNhbFNpemUpCi0gICAgICAgICwgbV90b3RhbFBoeXNpY2FsU2l6
ZSh0b3RhbFBoeXNpY2FsU2l6ZSkKLSAgICB7Ci0gICAgICAgIEJBU1NFUlQodGhpcy0+c2l6ZSgp
ID49IHRoaXMtPnRvdGFsUGh5c2ljYWxTaXplKCkpOwotICAgICAgICBCQVNTRVJUKHRoaXMtPnRv
dGFsUGh5c2ljYWxTaXplKCkgPj0gdGhpcy0+c3RhcnRQaHlzaWNhbFNpemUoKSk7Ci0gICAgfQot
I2Vsc2UKLSAgICBMYXJnZVJhbmdlKHZvaWQqIGJlZ2luLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHN0
YXJ0UGh5c2ljYWxTaXplLCBzaXplX3QgdG90YWxQaHlzaWNhbFNpemUsIGJvb2wgdXNlZFNpbmNl
TGFzdFNjYXZlbmdlID0gZmFsc2UpCisgICAgTGFyZ2VSYW5nZSh2b2lkKiBiZWdpbiwgc2l6ZV90
IHNpemUsIHNpemVfdCBzdGFydFBoeXNpY2FsU2l6ZSwgc2l6ZV90IHRvdGFsUGh5c2ljYWxTaXpl
LCB2b2lkKiBwaHlzaWNhbEVuZCwgYm9vbCB1c2VkU2luY2VMYXN0U2NhdmVuZ2UgPSBmYWxzZSkK
ICAgICAgICAgOiBSYW5nZShiZWdpbiwgc2l6ZSkKICAgICAgICAgLCBtX3N0YXJ0UGh5c2ljYWxT
aXplKHN0YXJ0UGh5c2ljYWxTaXplKQogICAgICAgICAsIG1fdG90YWxQaHlzaWNhbFNpemUodG90
YWxQaHlzaWNhbFNpemUpCisgICAgICAgICwgbV9waHlzaWNhbEVuZChzdGF0aWNfY2FzdDxjaGFy
Kj4ocGh5c2ljYWxFbmQpKQogICAgICAgICAsIG1faXNFbGlnaWJsZSh0cnVlKQogICAgICAgICAs
IG1fdXNlZFNpbmNlTGFzdFNjYXZlbmdlKHVzZWRTaW5jZUxhc3RTY2F2ZW5nZSkKICAgICB7CiAg
ICAgICAgIEJBU1NFUlQodGhpcy0+c2l6ZSgpID49IHRoaXMtPnRvdGFsUGh5c2ljYWxTaXplKCkp
OwogICAgICAgICBCQVNTRVJUKHRoaXMtPnRvdGFsUGh5c2ljYWxTaXplKCkgPj0gdGhpcy0+c3Rh
cnRQaHlzaWNhbFNpemUoKSk7CiAgICAgfQotI2VuZGlmCiAKICAgICAvLyBSZXR1cm5zIGEgbG93
ZXIgYm91bmQgb24gcGh5c2ljYWwgc2l6ZSBhdCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlLiBSYW5n
ZXMgdGhhdAogICAgIC8vIHNwYW4gbm9uLXBoeXNpY2FsIGZyYWdtZW50cyB1c2UgdGhpcyBudW1i
ZXIgdG8gcmVtZW1iZXIgdGhlIHBoeXNpY2FsIHNpemUgb2YKQEAgLTk4LDE3ICs4NiwyMSBAQCBw
dWJsaWM6CiAgICAgLy8gZG9lc24ndCByZWFsbHkgYWZmZWN0IGFjY3VyYWN5LgogICAgIHNpemVf
dCB0b3RhbFBoeXNpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxQaHlzaWNhbFNpemU7
IH0KICAgICB2b2lkIHNldFRvdGFsUGh5c2ljYWxTaXplKHNpemVfdCB0b3RhbFBoeXNpY2FsU2l6
ZSkgeyBtX3RvdGFsUGh5c2ljYWxTaXplID0gdG90YWxQaHlzaWNhbFNpemU7IH0KKyAgICAKKyAg
ICAvLyBUaGlzIGlzIHRoZSBhZGRyZXNzIHBhc3QgdGhlIGVuZCBvZiBwaHlzaWNhbCBtZW1vcnkg
aW4gdGhpcyByYW5nZS4KKyAgICAvLyBXaGVuIGRlY29taXR0aW5nIHRoaXMgcmFuZ2UsIHdlIGRl
Y29tbWl0dCBbYmVnaW4oKSwgcGh5c2ljYWxFbmQpLgorICAgIGNoYXIqIHBoeXNpY2FsRW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9waHlzaWNhbEVuZDsgfQorICAgIHZvaWQgc2V0UGh5c2ljYWxFbmQo
dm9pZCogcGh5c2ljYWxFbmQpIHsgbV9waHlzaWNhbEVuZCA9IHN0YXRpY19jYXN0PGNoYXIqPihw
aHlzaWNhbEVuZCk7IH0KKyAgICB2b2lkIGNsZWFyUGh5c2ljYWxFbmQoKSB7IG1fcGh5c2ljYWxF
bmQgPSBiZWdpbigpOyB9CiAKICAgICBzdGQ6OnBhaXI8TGFyZ2VSYW5nZSwgTGFyZ2VSYW5nZT4g
c3BsaXQoc2l6ZV90KSBjb25zdDsKIAogICAgIHZvaWQgc2V0RWxpZ2libGUoYm9vbCBlbGlnaWJs
ZSkgeyBtX2lzRWxpZ2libGUgPSBlbGlnaWJsZTsgfQogICAgIGJvb2wgaXNFbGlnaWJpbGUoKSBj
b25zdCB7IHJldHVybiBtX2lzRWxpZ2libGU7IH0KIAotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVO
R0UpCiAgICAgYm9vbCB1c2VkU2luY2VMYXN0U2NhdmVuZ2UoKSBjb25zdCB7IHJldHVybiBtX3Vz
ZWRTaW5jZUxhc3RTY2F2ZW5nZTsgfQogICAgIHZvaWQgY2xlYXJVc2VkU2luY2VMYXN0U2NhdmVu
Z2UoKSB7IG1fdXNlZFNpbmNlTGFzdFNjYXZlbmdlID0gZmFsc2U7IH0KICAgICB2b2lkIHNldFVz
ZWRTaW5jZUxhc3RTY2F2ZW5nZSgpIHsgbV91c2VkU2luY2VMYXN0U2NhdmVuZ2UgPSB0cnVlOyB9
Ci0jZW5kaWYKIAogICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHZvaWQqIG90aGVyKSBjb25zdCB7
IHJldHVybiBiZWdpbigpIDwgb3RoZXI7IH0KICAgICBib29sIG9wZXJhdG9yPChjb25zdCBMYXJn
ZVJhbmdlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA8IG90aGVyLmJlZ2luKCk7IH0K
QEAgLTExNiwxMiArMTA4LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzaXplX3QgbV9zdGFy
dFBoeXNpY2FsU2l6ZTsKICAgICBzaXplX3QgbV90b3RhbFBoeXNpY2FsU2l6ZTsKLSNpZiBCVVNF
KFBBUlRJQUxfU0NBVkVOR0UpCi0gICAgYm9vbCBtX2lzRWxpZ2libGUgeyB0cnVlIH07Ci0jZWxz
ZQorICAgIGNoYXIqIG1fcGh5c2ljYWxFbmQ7CiAgICAgdW5zaWduZWQgbV9pc0VsaWdpYmxlOiAx
OwogICAgIHVuc2lnbmVkIG1fdXNlZFNpbmNlTGFzdFNjYXZlbmdlOiAxOwotI2VuZGlmCiB9Owog
CiBpbmxpbmUgYm9vbCBjYW5NZXJnZShjb25zdCBMYXJnZVJhbmdlJiBhLCBjb25zdCBMYXJnZVJh
bmdlJiBiKQpAQCAtMTQ0LDE4ICsxMzMsMTcgQEAgaW5saW5lIGJvb2wgY2FuTWVyZ2UoY29uc3Qg
TGFyZ2VSYW5nZSYgYQogaW5saW5lIExhcmdlUmFuZ2UgbWVyZ2UoY29uc3QgTGFyZ2VSYW5nZSYg
YSwgY29uc3QgTGFyZ2VSYW5nZSYgYikKIHsKICAgICBjb25zdCBMYXJnZVJhbmdlJiBsZWZ0ID0g
c3RkOjptaW4oYSwgYik7Ci0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKKyAgICBjb25zdCBM
YXJnZVJhbmdlJiByaWdodCA9IHN0ZDo6bWF4KGEsIGIpOworICAgIHZvaWQqIHBoeXNpY2FsRW5k
ID0gcmlnaHQudG90YWxQaHlzaWNhbFNpemUoKSA/IHJpZ2h0LnBoeXNpY2FsRW5kKCkgOiBsZWZ0
LnBoeXNpY2FsRW5kKCk7CiAgICAgYm9vbCBtZXJnZWRVc2VkU2luY2VMYXN0U2NhdmVuZ2UgPSBh
LnVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpIHx8IGIudXNlZFNpbmNlTGFzdFNjYXZlbmdlKCk7Ci0j
ZW5kaWYKICAgICBpZiAobGVmdC5zaXplKCkgPT0gbGVmdC5zdGFydFBoeXNpY2FsU2l6ZSgpKSB7
CiAgICAgICAgIHJldHVybiBMYXJnZVJhbmdlKAogICAgICAgICAgICAgbGVmdC5iZWdpbigpLAog
ICAgICAgICAgICAgYS5zaXplKCkgKyBiLnNpemUoKSwKICAgICAgICAgICAgIGEuc3RhcnRQaHlz
aWNhbFNpemUoKSArIGIuc3RhcnRQaHlzaWNhbFNpemUoKSwKLSAgICAgICAgICAgIGEudG90YWxQ
aHlzaWNhbFNpemUoKSArIGIudG90YWxQaHlzaWNhbFNpemUoKQotI2lmICFCVVNFKFBBUlRJQUxf
U0NBVkVOR0UpCisgICAgICAgICAgICBhLnRvdGFsUGh5c2ljYWxTaXplKCkgKyBiLnRvdGFsUGh5
c2ljYWxTaXplKCksCisgICAgICAgICAgICBwaHlzaWNhbEVuZAogICAgICAgICAgICAgLCBtZXJn
ZWRVc2VkU2luY2VMYXN0U2NhdmVuZ2UKLSNlbmRpZgogICAgICAgICApOwogICAgICAgICAKICAg
ICB9CkBAIC0xNjQsMTAgKzE1Miw5IEBAIGlubGluZSBMYXJnZVJhbmdlIG1lcmdlKGNvbnN0IExh
cmdlUmFuZ2UKICAgICAgICAgbGVmdC5iZWdpbigpLAogICAgICAgICBhLnNpemUoKSArIGIuc2l6
ZSgpLAogICAgICAgICBsZWZ0LnN0YXJ0UGh5c2ljYWxTaXplKCksCi0gICAgICAgIGEudG90YWxQ
aHlzaWNhbFNpemUoKSArIGIudG90YWxQaHlzaWNhbFNpemUoKQotI2lmICFCVVNFKFBBUlRJQUxf
U0NBVkVOR0UpCisgICAgICAgIGEudG90YWxQaHlzaWNhbFNpemUoKSArIGIudG90YWxQaHlzaWNh
bFNpemUoKSwKKyAgICAgICAgcGh5c2ljYWxFbmQKICAgICAgICAgLCBtZXJnZWRVc2VkU2luY2VM
YXN0U2NhdmVuZ2UKLSNlbmRpZgogICAgICk7CiB9CiAKQEAgLTE3NSwxMSArMTYyLDEyIEBAIGlu
bGluZSBzdGQ6OnBhaXI8TGFyZ2VSYW5nZSwgTGFyZ2VSYW5nZT4KIHsKICAgICBCQVNTRVJUKGxl
ZnRTaXplIDw9IHRoaXMtPnNpemUoKSk7CiAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHRoaXMtPnNp
emUoKSAtIGxlZnRTaXplOworICAgIGNoYXIqIHBoeXNpY2FsRW5kID0gdGhpcy0+cGh5c2ljYWxF
bmQoKTsKIAogICAgIGlmIChsZWZ0U2l6ZSA8PSBzdGFydFBoeXNpY2FsU2l6ZSgpKSB7CiAgICAg
ICAgIEJBU1NFUlQodG90YWxQaHlzaWNhbFNpemUoKSA+PSBsZWZ0U2l6ZSk7Ci0gICAgICAgIExh
cmdlUmFuZ2UgbGVmdChiZWdpbigpLCBsZWZ0U2l6ZSwgbGVmdFNpemUsIGxlZnRTaXplKTsKLSAg
ICAgICAgTGFyZ2VSYW5nZSByaWdodChsZWZ0LmVuZCgpLCByaWdodFNpemUsIHN0YXJ0UGh5c2lj
YWxTaXplKCkgLSBsZWZ0U2l6ZSwgdG90YWxQaHlzaWNhbFNpemUoKSAtIGxlZnRTaXplKTsKKyAg
ICAgICAgTGFyZ2VSYW5nZSBsZWZ0KGJlZ2luKCksIGxlZnRTaXplLCBsZWZ0U2l6ZSwgbGVmdFNp
emUsIHN0ZDo6bWluKHBoeXNpY2FsRW5kLCBiZWdpbigpICsgbGVmdFNpemUpKTsKKyAgICAgICAg
TGFyZ2VSYW5nZSByaWdodChsZWZ0LmVuZCgpLCByaWdodFNpemUsIHN0YXJ0UGh5c2ljYWxTaXpl
KCkgLSBsZWZ0U2l6ZSwgdG90YWxQaHlzaWNhbFNpemUoKSAtIGxlZnRTaXplLCBzdGQ6Om1heChw
aHlzaWNhbEVuZCwgbGVmdC5lbmQoKSkpOwogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
bGVmdCwgcmlnaHQpOwogICAgIH0KIApAQCAtMTk0LDggKzE4Miw4IEBAIGlubGluZSBzdGQ6OnBh
aXI8TGFyZ2VSYW5nZSwgTGFyZ2VSYW5nZT4KICAgICAgICAgcmlnaHRUb3RhbFBoeXNpY2FsU2l6
ZSA9IHJpZ2h0U2l6ZTsKICAgICB9CiAKLSAgICBMYXJnZVJhbmdlIGxlZnQoYmVnaW4oKSwgbGVm
dFNpemUsIHN0YXJ0UGh5c2ljYWxTaXplKCksIGxlZnRUb3RhbFBoeXNpY2FsU2l6ZSk7Ci0gICAg
TGFyZ2VSYW5nZSByaWdodChsZWZ0LmVuZCgpLCByaWdodFNpemUsIDAsIHJpZ2h0VG90YWxQaHlz
aWNhbFNpemUpOworICAgIExhcmdlUmFuZ2UgbGVmdChiZWdpbigpLCBsZWZ0U2l6ZSwgc3RhcnRQ
aHlzaWNhbFNpemUoKSwgbGVmdFRvdGFsUGh5c2ljYWxTaXplLCBzdGQ6Om1pbihwaHlzaWNhbEVu
ZCwgYmVnaW4oKSArIGxlZnRTaXplKSk7CisgICAgTGFyZ2VSYW5nZSByaWdodChsZWZ0LmVuZCgp
LCByaWdodFNpemUsIDAsIHJpZ2h0VG90YWxQaHlzaWNhbFNpemUsIHN0ZDo6bWF4KHBoeXNpY2Fs
RW5kLCBsZWZ0LmVuZCgpKSk7CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGxlZnQsIHJpZ2h0
KTsKIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmNwcAkocmV2aXNpb24g
Mjc4MTgyKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NSwxMSArODUsNyBAQCBTY2F2ZW5nZXI6OlNjYXZlbmdlcihjb25zdCBMb2Nr
SG9sZGVyJikKICAgICBkaXNwYXRjaF9yZXN1bWUobV9wcmVzc3VyZUhhbmRsZXJEaXNwYXRjaFNv
dXJjZSk7CiAgICAgZGlzcGF0Y2hfcmVsZWFzZShxdWV1ZSk7CiAjZW5kaWYKLSNpZiBCVVNFKFBB
UlRJQUxfU0NBVkVOR0UpCi0gICAgbV93YWl0VGltZSA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMobV9pc0luTWluaU1vZGUgPyAyMDAgOiAyMDAwKTsKLSNlbHNlCiAgICAgbV93YWl0VGltZSA9
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTApOwotI2VuZGlmCiAKICAgICBtX3RocmVhZCA9
IHN0ZDo6dGhyZWFkKCZ0aHJlYWRFbnRyeVBvaW50LCB0aGlzKTsKIH0KQEAgLTEyMCwxMiArMTE2
LDYgQEAgdm9pZCBTY2F2ZW5nZXI6OnJ1blNvb24oY29uc3QgTG9ja0hvbGRlcgogICAgIG1fY29u
ZGl0aW9uLm5vdGlmeV9hbGwoKTsKIH0KIAotdm9pZCBTY2F2ZW5nZXI6OmRpZFN0YXJ0R3Jvd2lu
ZygpCi17Ci0gICAgLy8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gbG9jayBoZXJlLCBzaW5jZSB0
aGlzIGlzIGp1c3QgYSBoZXVyaXN0aWMuCi0gICAgbV9pc1Byb2JhYmx5R3Jvd2luZyA9IHRydWU7
Ci19Ci0KIHZvaWQgU2NhdmVuZ2VyOjpzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShzaXpl
X3QgYnl0ZXMpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOwpAQCAtMTQ2LDcgKzEz
Niw2IEBAIHZvaWQgU2NhdmVuZ2VyOjpzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmUKICAgICBpZiAo
IWlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2lzUHJv
YmFibHlHcm93aW5nID0gZmFsc2U7CiAgICAgcnVuKGxvY2spOwogfQogCkBAIC0xNTgsNyArMTQ3
LDYgQEAgdm9pZCBTY2F2ZW5nZXI6OnNjaGVkdWxlKHNpemVfdCBieXRlcykKICAgICBpZiAod2ls
bFJ1blNvb24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1faXNQcm9iYWJseUdyb3dp
bmcgPSBmYWxzZTsKICAgICBydW5Tb29uKGxvY2spOwogfQogCkBAIC0xODcsMTQgKzE3NSw2IEBA
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgU2NhdmVuZ2VyOjp0aW0KICAgICByZXR1cm4gc3Rk
OjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpj
aHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkgLSBtX2xhc3RGdWxsU2NhdmVuZ2VUaW1lKTsKIH0K
IAotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLXN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
U2NhdmVuZ2VyOjp0aW1lU2luY2VMYXN0UGFydGlhbFNjYXZlbmdlKCkKLXsKLSAgICBVbmlxdWVM
b2NrSG9sZGVyIGxvY2sobXV0ZXgoKSk7Ci0gICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlv
bl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xv
Y2s6Om5vdygpIC0gbV9sYXN0UGFydGlhbFNjYXZlbmdlVGltZSk7Ci19Ci0jZW5kaWYKLQogdm9p
ZCBTY2F2ZW5nZXI6OmVuYWJsZU1pbmlNb2RlKCkKIHsKICAgICBtX2lzSW5NaW5pTW9kZSA9IHRy
dWU7IC8vIFdlIGp1c3Qgc3RvcmUgdG8gdGhpcyByYWNpbHkuIFRoZSBzY2F2ZW5nZXIgdGhyZWFk
IHdpbGwgZXZlbnR1YWxseSBwaWNrIHVwIHRoZSByaWdodCB2YWx1ZS4KQEAgLTIyMCwyNSArMjAw
LDE3IEBAIHZvaWQgU2NhdmVuZ2VyOjpzY2F2ZW5nZSgpCiAKICAgICAgICAgewogICAgICAgICAg
ICAgUHJpbnRUaW1lIHByaW50VGltZSgiXG5mdWxsIHNjYXZlbmdlIHVuZGVyIGxvY2sgdGltZSIp
OwotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgICAgICAgICBzaXplX3QgZGVmZXJy
ZWREZWNvbW1pdHMgPSAwOwotI2VuZGlmCiAgICAgICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxv
Y2soSGVhcDo6bXV0ZXgoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1IZWFw
czsgaS0tOykgewogICAgICAgICAgICAgICAgIGlmICghaXNBY3RpdmVIZWFwS2luZChzdGF0aWNf
Y2FzdDxIZWFwS2luZD4oaSkpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSNpZiBC
VVNFKFBBUlRJQUxfU0NBVkVOR0UpCi0gICAgICAgICAgICAgICAgUGVyUHJvY2VzczxQZXJIZWFw
S2luZDxIZWFwPj46OmdldCgpLT5hdChpKS5zY2F2ZW5nZShsb2NrLCBkZWNvbW1pdHRlcik7Ci0j
ZWxzZQogICAgICAgICAgICAgICAgIFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQo
KS0+YXQoaSkuc2NhdmVuZ2UobG9jaywgZGVjb21taXR0ZXIsIGRlZmVycmVkRGVjb21taXRzKTsK
LSNlbmRpZgogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVjb21taXR0ZXIucHJvY2Vzc0Vh
Z2VyKCk7CiAKLSNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQogICAgICAgICAgICAgaWYgKGRl
ZmVycmVkRGVjb21taXRzKQogICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6UnVuU29v
bjsKLSNlbmRpZgogICAgICAgICB9CiAKICAgICAgICAgewpAQCAtMjc5LDc4ICsyNTEsNiBAQCB2
b2lkIFNjYXZlbmdlcjo6c2NhdmVuZ2UoKQogICAgIH0KIH0KIAotI2lmIEJVU0UoUEFSVElBTF9T
Q0FWRU5HRSkKLXZvaWQgU2NhdmVuZ2VyOjpwYXJ0aWFsU2NhdmVuZ2UoKQotewotICAgIGlmICgh
bV9pc0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9j
ayhtX3NjYXZlbmdpbmdNdXRleCk7Ci0KLSAgICBpZiAodmVyYm9zZSkgewotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgICAg
ICAgZnByaW50ZihzdGRlcnIsICItLWJlZm9yZSBwYXJ0aWFsIHNjYXZlbmdpbmctLVxuIik7Ci0g
ICAgICAgIGR1bXBTdGF0cygpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgQnVsa0RlY29tbWl0
IGRlY29tbWl0dGVyOwotICAgICAgICB7Ci0gICAgICAgICAgICBQcmludFRpbWUgcHJpbnRUaW1l
KCJcbnBhcnRpYWxTY2F2ZW5nZSB1bmRlciBsb2NrIHRpbWUiKTsKLSAgICAgICAgICAgIFVuaXF1
ZUxvY2tIb2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bUhlYXBzOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0FjdGl2ZUhl
YXBLaW5kKHN0YXRpY19jYXN0PEhlYXBLaW5kPihpKSkpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIEhlYXAmIGhlYXAgPSBQZXJQcm9jZXNzPFBlckhlYXBL
aW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGkpOwotICAgICAgICAgICAgICAgIHNpemVfdCBmcmVlYWJs
ZU1lbW9yeSA9IGhlYXAuZnJlZWFibGVNZW1vcnkobG9jayk7Ci0gICAgICAgICAgICAgICAgaWYg
KGZyZWVhYmxlTWVtb3J5IDwgNCAqIE1CKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICBoZWFwLnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKGxvY2ssIGRlY29t
bWl0dGVyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVjb21taXR0ZXIucHJvY2Vz
c0VhZ2VyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB7Ci0gICAgICAgICAgICBQcmludFRpbWUg
cHJpbnRUaW1lKCJwYXJ0aWFsU2NhdmVuZ2UgbGF6eSBkZWNvbW1pdCB0aW1lIik7Ci0gICAgICAg
ICAgICBkZWNvbW1pdHRlci5wcm9jZXNzTGF6eSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgewot
ICAgICAgICAgICAgUHJpbnRUaW1lIHByaW50VGltZSgicGFydGlhbFNjYXZlbmdlIG1hcmsgYWxs
IGFzIGVsaWdpYmxlIHRpbWUiKTsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9jayhIZWFwOjpt
dXRleCgpKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUhlYXBzOyBpLS07KSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0FjdGl2ZUhlYXBLaW5kKHN0YXRpY19jYXN0PEhlYXBL
aW5kPihpKSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IEhlYXAmIGhlYXAgPSBQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGkp
OwotICAgICAgICAgICAgICAgIGhlYXAubWFya0FsbExhcmdlQXNFbGlnaWJpbGUobG9jayk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIFJFTEVBU0Vf
QkFTU0VSVCghbV9kZWZlcnJlZERlY29tbWl0cy5zaXplKCkpOwotICAgICAgICBBbGxJc29IZWFw
czo6Z2V0KCktPmZvckVhY2goCi0gICAgICAgICAgICBbJl0gKElzb0hlYXBJbXBsQmFzZSYgaGVh
cCkgewotICAgICAgICAgICAgICAgIGhlYXAuc2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsobV9kZWZl
cnJlZERlY29tbWl0cyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgSXNvSGVhcEltcGxCYXNl
OjpmaW5pc2hTY2F2ZW5naW5nKG1fZGVmZXJyZWREZWNvbW1pdHMpOwotICAgICAgICBtX2RlZmVy
cmVkRGVjb21taXRzLnNocmluaygwKTsKLSAgICB9Ci0KLSAgICBpZiAodmVyYm9zZSkgewotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIi0tYWZ0ZXIgcGFydGlhbCBzY2F2ZW5naW5nLS1cbiIpOwot
ICAgICAgICBkdW1wU3RhdHMoKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICItLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gICAgfQotCi0gICAgewotICAgICAgICBVbmlx
dWVMb2NrSG9sZGVyIGxvY2sobXV0ZXgoKSk7Ci0gICAgICAgIG1fbGFzdFBhcnRpYWxTY2F2ZW5n
ZVRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKLSAgICB9Ci19Ci0jZW5k
aWYKLQogc2l6ZV90IFNjYXZlbmdlcjo6ZnJlZWFibGVNZW1vcnkoKQogewogICAgIHNpemVfdCBy
ZXN1bHQgPSAwOwpAQCAtNDMyLDY5ICszMzIsNiBAQCB2b2lkIFNjYXZlbmdlcjo6dGhyZWFkUnVu
TG9vcCgpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tXG4iKTsKICAgICAgICAgfQogCi0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdF
KQotICAgICAgICBlbnVtIGNsYXNzIFNjYXZlbmdlTW9kZSB7Ci0gICAgICAgICAgICBOb25lLAot
ICAgICAgICAgICAgUGFydGlhbCwKLSAgICAgICAgICAgIEZ1bGwKLSAgICAgICAgfTsKLQotICAg
ICAgICBzaXplX3QgZnJlZWFibGVNZW1vcnkgPSB0aGlzLT5mcmVlYWJsZU1lbW9yeSgpOwotCi0g
ICAgICAgIFNjYXZlbmdlTW9kZSBzY2F2ZW5nZU1vZGUgPSBbJl0gewotICAgICAgICAgICAgYXV0
byB0aW1lU2luY2VMYXN0RnVsbFNjYXZlbmdlID0gdGhpcy0+dGltZVNpbmNlTGFzdEZ1bGxTY2F2
ZW5nZSgpOwotICAgICAgICAgICAgYXV0byB0aW1lU2luY2VMYXN0UGFydGlhbFNjYXZlbmdlID0g
dGhpcy0+dGltZVNpbmNlTGFzdFBhcnRpYWxTY2F2ZW5nZSgpOwotICAgICAgICAgICAgYXV0byB0
aW1lU2luY2VMYXN0U2NhdmVuZ2UgPSBzdGQ6Om1pbih0aW1lU2luY2VMYXN0UGFydGlhbFNjYXZl
bmdlLCB0aW1lU2luY2VMYXN0RnVsbFNjYXZlbmdlKTsKLQotICAgICAgICAgICAgaWYgKGlzVW5k
ZXJNZW1vcnlQcmVzc3VyZSgpICYmIGZyZWVhYmxlTWVtb3J5ID4gMSAqIE1CICYmIHRpbWVTaW5j
ZUxhc3RTY2F2ZW5nZSA+IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoNSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIFNjYXZlbmdlTW9kZTo6RnVsbDsKLQotICAgICAgICAgICAgaWYgKCFtX2lz
UHJvYmFibHlHcm93aW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRpbWVTaW5jZUxhc3RGdWxs
U2NhdmVuZ2UgPCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwMDApICYmICFtX2lzSW5NaW5p
TW9kZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjYXZlbmdlTW9kZTo6UGFydGlhbDsK
LSAgICAgICAgICAgICAgICByZXR1cm4gU2NhdmVuZ2VNb2RlOjpGdWxsOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAobV9pc0luTWluaU1vZGUpIHsKLSAgICAgICAgICAgICAgICBp
ZiAodGltZVNpbmNlTGFzdEZ1bGxTY2F2ZW5nZSA8IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMo
MjAwKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjYXZlbmdlTW9kZTo6UGFydGlhbDsK
LSAgICAgICAgICAgICAgICByZXR1cm4gU2NhdmVuZ2VNb2RlOjpGdWxsOwotICAgICAgICAgICAg
fQotCi0jaWYgQkNQVShYODZfNjQpCi0gICAgICAgICAgICBhdXRvIHBhcnRpYWxTY2F2ZW5nZUlu
dGVydmFsID0gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygxMjAwMCk7Ci0jZWxzZQotICAgICAg
ICAgICAgYXV0byBwYXJ0aWFsU2NhdmVuZ2VJbnRlcnZhbCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMoODAwMCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmICh0aW1lU2luY2VMYXN0U2NhdmVu
Z2UgPCBwYXJ0aWFsU2NhdmVuZ2VJbnRlcnZhbCkgewotICAgICAgICAgICAgICAgIC8vIFJhdGUg
bGltaXQgcGFydGlhbCBzY2F2ZW5nZXMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNjYXZlbmdl
TW9kZTo6Tm9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmcmVlYWJsZU1lbW9y
eSA8IDI1ICogTUIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNjYXZlbmdlTW9kZTo6Tm9uZTsK
LSAgICAgICAgICAgIGlmICg1ICogZnJlZWFibGVNZW1vcnkgPCBmb290cHJpbnQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gU2NhdmVuZ2VNb2RlOjpOb25lOwotICAgICAgICAgICAgcmV0dXJu
IFNjYXZlbmdlTW9kZTo6UGFydGlhbDsKLSAgICAgICAgfSgpOwotCi0gICAgICAgIG1faXNQcm9i
YWJseUdyb3dpbmcgPSBmYWxzZTsKLQotICAgICAgICBzd2l0Y2ggKHNjYXZlbmdlTW9kZSkgewot
ICAgICAgICBjYXNlIFNjYXZlbmdlTW9kZTo6Tm9uZTogewotICAgICAgICAgICAgcnVuU29vbigp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTY2F2ZW5nZU1v
ZGU6OlBhcnRpYWw6IHsKLSAgICAgICAgICAgIHBhcnRpYWxTY2F2ZW5nZSgpOwotICAgICAgICAg
ICAgcnVuU29vbigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBTY2F2ZW5nZU1vZGU6OkZ1bGw6IHsKLSAgICAgICAgICAgIHNjYXZlbmdlKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9Ci0jZWxzZQogICAgICAgICBzdGQ6OmNo
cm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IHN0YXJ0IHsgc3RkOjpjaHJvbm86OnN0ZWFk
eV9jbG9jazo6bm93KCkgfTsKICAgICAgICAgCiAgICAgICAgIHNjYXZlbmdlKCk7CkBAIC01MDks
MTQgKzM0NiwxMyBAQCB2b2lkIFNjYXZlbmdlcjo6dGhyZWFkUnVuTG9vcCgpCiAgICAgICAgIC8v
IEZJWE1FOiBXZSBuZWVkIHRvIGludmVzdGlnYXRlIG1pbmktbW9kZSdzIGFkanVzdG1lbnQuCiAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5ODcK
ICAgICAgICAgaWYgKCFtX2lzSW5NaW5pTW9kZSkgewotICAgICAgICAgICAgdGltZVNwZW50U2Nh
dmVuZ2luZyAqPSAxNTA7CisgICAgICAgICAgICB0aW1lU3BlbnRTY2F2ZW5naW5nICo9IHNfbmV3
V2FpdE11bHRpcGxpZXI7CiAgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIG5l
d1dhaXRUaW1lID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxp
c2Vjb25kcz4odGltZVNwZW50U2NhdmVuZ2luZyk7Ci0gICAgICAgICAgICBtX3dhaXRUaW1lID0g
c3RkOjptaW4oc3RkOjptYXgobmV3V2FpdFRpbWUsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMo
MTAwKSksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTAwMDApKTsKKyAgICAgICAgICAgIG1f
d2FpdFRpbWUgPSBzdGQ6Om1pbihzdGQ6Om1heChuZXdXYWl0VGltZSwgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyhzX21pbldhaXRUaW1lTWlsbGlzZWNvbmRzKSksIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMoc19tYXhXYWl0VGltZU1pbGxpc2Vjb25kcykpOwogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5ldyB3YWl0IHRp
bWUgJWxsZG1zXG4iLCBzdGF0aWNfY2FzdDxsb25nIGxvbmcgaW50PihtX3dhaXRUaW1lLmNvdW50
KCkpKTsKLSNlbmRpZgogICAgIH0KIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9T
Y2F2ZW5nZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdl
ci5oCShyZXZpc2lvbiAyNzgxODIpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw2IEBAIHB1YmxpYzoKICAgICBib29sIHdp
bGxSdW5Tb29uKCkgeyByZXR1cm4gbV9zdGF0ZSA+IFN0YXRlOjpTbGVlcDsgfQogICAgIHZvaWQg
cnVuU29vbigpOwogICAgIAotICAgIEJFWFBPUlQgdm9pZCBkaWRTdGFydEdyb3dpbmcoKTsKICAg
ICBCRVhQT1JUIHZvaWQgc2NoZWR1bGVJZlVuZGVyTWVtb3J5UHJlc3N1cmUoc2l6ZV90IGJ5dGVz
KTsKICAgICBCRVhQT1JUIHZvaWQgc2NoZWR1bGUoc2l6ZV90IGJ5dGVzKTsKIApAQCAtOTIsMTUg
KzkxLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRUaHJlYWROYW1lKGNvbnN0IGNoYXIqKTsK
IAogICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZVNpbmNlTGFzdEZ1bGxTY2F2ZW5n
ZSgpOwotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzIHRpbWVTaW5jZUxhc3RQYXJ0aWFsU2NhdmVuZ2UoKTsKLSAgICB2b2lkIHBhcnRpYWxT
Y2F2ZW5nZSgpOwotI2VuZGlmCiAKICAgICBzdGQ6OmF0b21pYzxTdGF0ZT4gbV9zdGF0ZSB7IFN0
YXRlOjpTbGVlcCB9OwogICAgIHNpemVfdCBtX3NjYXZlbmdlckJ5dGVzIHsgMCB9OwogICAgIHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgbV93YWl0VGltZTsKLSAgICBib29sIG1faXNQcm9iYWJs
eUdyb3dpbmcgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0luTWluaU1vZGUgeyBmYWxzZSB9Owog
ICAgIAogICAgIE11dGV4IG1fc2NhdmVuZ2luZ011dGV4OwpAQCAtMTA4LDE1ICsxMDIsMjIgQEAg
cHJpdmF0ZToKIAogICAgIHN0ZDo6dGhyZWFkIG1fdGhyZWFkOwogICAgIHN0ZDo6Y2hyb25vOjpz
dGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9sYXN0RnVsbFNjYXZlbmdlVGltZSB7IHN0ZDo6Y2hy
b25vOjpzdGVhZHlfY2xvY2s6Om5vdygpIH07Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQot
ICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9sYXN0UGFydGlhbFNj
YXZlbmdlVGltZSB7IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpIH07Ci0jZW5kaWYK
IAogI2lmIEJPUyhEQVJXSU4pCiAgICAgZGlzcGF0Y2hfc291cmNlX3QgbV9wcmVzc3VyZUhhbmRs
ZXJEaXNwYXRjaFNvdXJjZTsKICAgICBxb3NfY2xhc3NfdCBtX3JlcXVlc3RlZFNjYXZlbmdlclRo
cmVhZFFPU0NsYXNzIHsgUU9TX0NMQVNTX1VTRVJfSU5JVElBVEVEIH07CiAjZW5kaWYKICAgICAK
KyNpZiBCUExBVEZPUk0oTUFDKQorICAgIGNvbnN0IHVuc2lnbmVkIHNfbmV3V2FpdE11bHRpcGxp
ZXIgPSAzMDA7CisgICAgY29uc3QgdW5zaWduZWQgc19taW5XYWl0VGltZU1pbGxpc2Vjb25kcyA9
IDc1MDsKKyAgICBjb25zdCB1bnNpZ25lZCBzX21heFdhaXRUaW1lTWlsbGlzZWNvbmRzID0gMjAw
MDA7CisjZWxzZQorICAgIGNvbnN0IHVuc2lnbmVkIHNfbmV3V2FpdE11bHRpcGxpZXIgPSAxNTA7
CisgICAgY29uc3QgdW5zaWduZWQgc19taW5XYWl0VGltZU1pbGxpc2Vjb25kcyA9IDEwMDsKKyAg
ICBjb25zdCB1bnNpZ25lZCBzX21heFdhaXRUaW1lTWlsbGlzZWNvbmRzID0gMTAwMDA7CisjZW5k
aWYKKwogICAgIFZlY3RvcjxEZWZlcnJlZERlY29tbWl0PiBtX2RlZmVycmVkRGVjb21taXRzOwog
ICAgIGJvb2wgbV9pc0VuYWJsZWQgeyB0cnVlIH07CiB9OwpJbmRleDogU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9TbWFsbFBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1NtYWxsUGFnZS5oCShyZXZpc2lvbiAyNzgxODIpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1NtYWxsUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSArNTEsOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXNQaHlzaWNhbFBhZ2VzKCkgeyByZXR1cm4gbV9oYXNQaHlzaWNhbFBhZ2VzOyB9
CiAgICAgdm9pZCBzZXRIYXNQaHlzaWNhbFBhZ2VzKGJvb2wgaGFzUGh5c2ljYWxQYWdlcykgeyBt
X2hhc1BoeXNpY2FsUGFnZXMgPSBoYXNQaHlzaWNhbFBhZ2VzOyB9CiAKLSNpZiAhQlVTRShQQVJU
SUFMX1NDQVZFTkdFKQogICAgIGJvb2wgdXNlZFNpbmNlTGFzdFNjYXZlbmdlKCkgeyByZXR1cm4g
bV91c2VkU2luY2VMYXN0U2NhdmVuZ2U7IH0KICAgICB2b2lkIGNsZWFyVXNlZFNpbmNlTGFzdFNj
YXZlbmdlKCkgeyBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5nZSA9IGZhbHNlOyB9CiAgICAgdm9pZCBz
ZXRVc2VkU2luY2VMYXN0U2NhdmVuZ2UoKSB7IG1fdXNlZFNpbmNlTGFzdFNjYXZlbmdlID0gdHJ1
ZTsgfQotI2VuZGlmCiAKICAgICBTbWFsbExpbmUqIGJlZ2luKCk7CiAKQEAgLTY1LDkgKzYzLDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBjaGFyIG1faGFzRnJlZUxpbmVzOiAx
OwogICAgIHVuc2lnbmVkIGNoYXIgbV9oYXNQaHlzaWNhbFBhZ2VzOiAxOwotI2lmICFCVVNFKFBB
UlRJQUxfU0NBVkVOR0UpCiAgICAgdW5zaWduZWQgY2hhciBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5n
ZTogMTsKLSNlbmRpZgogICAgIHVuc2lnbmVkIGNoYXIgbV9yZWZDb3VudDogNzsKICAgICB1bnNp
Z25lZCBjaGFyIG1fc2l6ZUNsYXNzOwogICAgIHVuc2lnbmVkIGNoYXIgbV9zbGlkZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430982</attachid>
            <date>2021-06-09 11:26:40 -0700</date>
            <delta_ts>2021-06-23 15:20:59 -0700</delta_ts>
            <desc>Patch with mini-mode fix.</desc>
            <filename>226237-2.patch</filename>
            <type>text/plain</type>
            <size>37816</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODY2NikKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBACisyMDIxLTA2LTA5ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIFtibWFsbG9jXSBNYWtlIGFk
YXB0aXZlIHNjYXZlbmdpbmcgbW9yZSBwcmVjaXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYyMzcKKyAgICAgICAgW2JtYWxsb2NdIE1pbmktbW9k
ZSBzaG91bGQgYWxzbyBhZGp1c3Qgc2NhdmVuZ2VyIGludGVydmFsCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5ODcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWxhbmQgdGhlIGFkYXB0aXZlIHNjYXZl
bmdlciBjaGFuZ2UgZm9yIG1hY09TIHdpdGggYSBmaXggdG8gbWluaSBtb2RlLgorCisgICAgICAg
IFRoZSBmaXggZm9yIG1pbmkgbW9kZSB3YXMgdG8gYWRqdXN0IHRoZSB3YWl0IHRpbWUgYmV0d2Vl
biBzY2F2ZW5naW5nIGZyb20KKyAgICAgICAgdGhlIGluaXRpYWwgaW50ZXJ2YWwgb2YgMTAgbXNl
YyB0byBhIG1vcmUgcmVhc29uYWJsZSB2YWx1ZS4gIFRoZSBzbWFsbCBpbml0aWFsCisgICAgICAg
IHZhbHVlIGlzIHRoZXJlIGZvciB0aGUgc2NhdmVuZ2VyIHRvIHJ1biBvbmNlIGFmdGVyIHN0YXJ0
IHVwLiAgQWZ0ZXIgdGhhdAorICAgICAgICBpbml0aWFsIHNjYXZlbmdpbmcsIHdlIHVzZSBhIGxv
bmdlciBkZWxheSBiYXNlZCBvbiB0aW1lIHNjYXZlbmdpbmcuICBGb3IKKyAgICAgICAgbWluaSBt
b2RlLCB3ZSBqdXN0IGxlZnQgdGhlIHdhaXQgdGltZSBhcyB0aGUgaW5pdGlhbCBzbWFsbCB2YWx1
ZS4KKyAgICAgICAgV2UgYWxyZWFkeSBoYWQgYSBmaXggbWUgYnVnLCAyMDM5ODcsIGZvciB0aGlz
IGlzc3VlLiAgCisKKyAgICAgICAgUmVmYWN0b3JlZCB0aGUgbmV4dCB3YWl0IHRpbWUgY2FsY3Vs
YXRpb24gdG8gaW5jbHVkZSBhIHNlcGFyYXRlIHBhdGggZm9yIG1pbmkgbW9kZQorICAgICAgICB3
aGVyZSB3ZSB0YWtlIHRoZSBsYXN0IHdhaXQgdGltZSB2YWx1ZSBhbmQgdXNlIHRoYXQgZm9yIHRo
ZSBwcm9wb3NlZCBuZXh0IHdhaXQgdGltZS4KKyAgICAgICAgV2UgdGhlbiBmYWxsIHRocm91Z2gg
dG8gYSBjb21tb24gcGF0aCB3aGVyZSB3ZSBib3VuZCB0aGF0IHByb3Bvc2VkIHZhbHVlIGJ5IHRo
ZSBtaW4KKyAgICAgICAgYW5kIG1heCB3YWl0IHRpbWVzLiAgSXQgZW5kcyB1cCBiZWluZyB0aGUg
Y2FzZSB0aGF0IHRoZSBzdGVhZHkgc3RhdGUgd2FpdCB0aW1lIGZvcgorICAgICAgICBtaW5pIG1v
ZGUgaXMgdGhlIG1pbmltdW0gd2FpdCB0aW1lLgorCisgICAgICAgICogYm1hbGxvYy9CUGxhdGZv
cm0uaDoKKyAgICAgICAgKiBibWFsbG9jL0hlYXAuY3BwOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6ZGVjb21taXRMYXJnZVJhbmdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNjYXZlbmdl
KToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxDaHVuayk6CisgICAgICAg
IChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlU21hbGxDaHVuayk6CisgICAgICAgIChibWFsbG9j
OjpIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzcGxp
dEFuZEFsbG9jYXRlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlTGFyZ2UpOgor
ICAgICAgICAoYm1hbGxvYzo6SGVhcDo6dHJ5QWxsb2NhdGVMYXJnZUNodW5rKToKKyAgICAgICAg
KGJtYWxsb2M6OkhlYXA6OnNocmlua0xhcmdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRl
YWxsb2NhdGVMYXJnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzY2F2ZW5nZVRvSGlnaFdh
dGVybWFyayk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9IZWFwLmg6CisgICAgICAgICog
Ym1hbGxvYy9Jc29EaXJlY3RvcnkuaDoKKyAgICAgICAgKiBibWFsbG9jL0lzb0RpcmVjdG9yeUlu
bGluZXMuaDoKKyAgICAgICAgKGJtYWxsb2M6OnBhc3NlZE51bVBhZ2VzPjo6dGFrZUZpcnN0RWxp
Z2libGUpOgorICAgICAgICAoYm1hbGxvYzo6cGFzc2VkTnVtUGFnZXM+OjpzY2F2ZW5nZSk6Cisg
ICAgICAgIChibWFsbG9jOjpwYXNzZWROdW1QYWdlcz46OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJr
KTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL0lzb0hlYXBJbXBsLmg6CisgICAgICAgICog
Ym1hbGxvYy9Jc29IZWFwSW1wbElubGluZXMuaDoKKyAgICAgICAgKGJtYWxsb2M6Oklzb0hlYXBJ
bXBsPENvbmZpZz46OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKTogRGVsZXRlZC4KKyAgICAgICAg
KiBibWFsbG9jL0lzb1NoYXJlZEhlYXBJbmxpbmVzLmg6CisgICAgICAgIChibWFsbG9jOjpJc29T
aGFyZWRIZWFwOjphbGxvY2F0ZVNsb3cpOgorICAgICAgICAqIGJtYWxsb2MvTGFyZ2VNYXAuY3Bw
OgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VNYXA6OmFkZCk6CisgICAgICAgICogYm1hbGxvYy9M
YXJnZVJhbmdlLmg6CisgICAgICAgIChibWFsbG9jOjpMYXJnZVJhbmdlOjpMYXJnZVJhbmdlKToK
KyAgICAgICAgKGJtYWxsb2M6OkxhcmdlUmFuZ2U6OnBoeXNpY2FsRW5kIGNvbnN0KToKKyAgICAg
ICAgKGJtYWxsb2M6OkxhcmdlUmFuZ2U6OnNldFBoeXNpY2FsRW5kKToKKyAgICAgICAgKGJtYWxs
b2M6OkxhcmdlUmFuZ2U6OmNsZWFyUGh5c2ljYWxFbmQpOgorICAgICAgICAoYm1hbGxvYzo6TGFy
Z2VSYW5nZTo6c2V0VXNlZFNpbmNlTGFzdFNjYXZlbmdlKToKKyAgICAgICAgKGJtYWxsb2M6Om1l
cmdlKToKKyAgICAgICAgKGJtYWxsb2M6OkxhcmdlUmFuZ2U6OnNwbGl0IGNvbnN0KToKKyAgICAg
ICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9TY2F2ZW5nZXIuY3BwOgorICAgICAg
ICAoYm1hbGxvYzo6U2NhdmVuZ2VyOjpTY2F2ZW5nZXIpOgorICAgICAgICAoYm1hbGxvYzo6U2Nh
dmVuZ2VyOjpzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZSk6CisgICAgICAgIChibWFsbG9j
OjpTY2F2ZW5nZXI6OnNjaGVkdWxlKToKKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6c2Nh
dmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6U2NhdmVuZ2VyOjp0aHJlYWRSdW5Mb29wKToKKyAg
ICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6ZGlkU3RhcnRHcm93aW5nKTogRGVsZXRlZC4KKyAg
ICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6dGltZVNpbmNlTGFzdFBhcnRpYWxTY2F2ZW5nZSk6
IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnBhcnRpYWxTY2F2ZW5nZSk6
IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9TY2F2ZW5nZXIuaDoKKyAgICAgICAgKiBibWFs
bG9jL1NtYWxsUGFnZS5oOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxQYWdlOjpzZXRVc2VkU2lu
Y2VMYXN0U2NhdmVuZ2UpOgorCiAyMDIxLTA2LTAzICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZA
YXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNzgyNzguCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JQbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQlBsYXRmb3JtLmgJKHJldmlzaW9uIDI3ODY2NikKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQlBsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSwx
MiArMzA5LDYgQEAKIC8qIFRoaXMgaXMgdXNlZCBmb3IgZGVidWdnaW5nIHdoZW4gaGFja2luZyBv
biBob3cgYm1hbGxvYyBjYWxjdWxhdGVzIGl0cyBwaHlzaWNhbCBmb290cHJpbnQuICovCiAjZGVm
aW5lIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUCAwCiAKLSNpZiBCUExBVEZPUk0oTUFDKQotI2Rl
ZmluZSBCVVNFX1BBUlRJQUxfU0NBVkVOR0UgMQotI2Vsc2UKLSNkZWZpbmUgQlVTRV9QQVJUSUFM
X1NDQVZFTkdFIDAKLSNlbmRpZgotCiAjaWYgIWRlZmluZWQoQlVTRV9QUkVDT01QVVRFRF9DT05T
VEFOVFNfVk1QQUdFNEspCiAjZGVmaW5lIEJVU0VfUFJFQ09NUFVURURfQ09OU1RBTlRTX1ZNUEFH
RTRLIDEKICNlbmRpZgpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCShyZXZpc2lvbiAyNzg2
NjYpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NSw3ICs2NSw3IEBAIEhlYXA6OkhlYXAoSGVhcEtpbmQga2luZCwgTG9ja0hvbGRlciYpCiAg
ICAgICAgIG1fZ2lnYWNhZ2VTaXplID0gc2l6ZTsKICAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9
IHJvdW5kRG93blRvTXVsdGlwbGVPZih2bVBhZ2VTaXplKCksIHJhbmRvbVsxXSAlIChnaWdhY2Fn
ZVNpemUgLSBzaXplKSk7CiAgICAgICAgIHZvaWQqIGJhc2UgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGNoYXIqPihnaWdhY2FnZUJhc2VQdHIpICsgb2Zmc2V0OwotICAgICAgICBtX2xhcmdl
RnJlZS5hZGQoTGFyZ2VSYW5nZShiYXNlLCBzaXplLCAwLCAwKSk7CisgICAgICAgIG1fbGFyZ2VG
cmVlLmFkZChMYXJnZVJhbmdlKGJhc2UsIHNpemUsIDAsIDAsIGJhc2UpKTsKICAgICB9CiAjZW5k
aWYKICAgICAKQEAgLTEwOCwxMCArMTA4LDEzIEBAIHZvaWQgSGVhcDo6ZGVjb21taXRMYXJnZVJh
bmdlKFVuaXF1ZUxvY2sKIHsKICAgICBtX2Zvb3RwcmludCAtPSByYW5nZS50b3RhbFBoeXNpY2Fs
U2l6ZSgpOwogICAgIG1fZnJlZWFibGVNZW1vcnkgLT0gcmFuZ2UudG90YWxQaHlzaWNhbFNpemUo
KTsKLSAgICBkZWNvbW1pdHRlci5hZGRMYXp5KHJhbmdlLmJlZ2luKCksIHJhbmdlLnNpemUoKSk7
Ci0gICAgbV9oYXNQZW5kaW5nRGVjb21taXRzID0gdHJ1ZTsKKyAgICBpZiAocmFuZ2UudG90YWxQ
aHlzaWNhbFNpemUoKSkgeworICAgICAgICBkZWNvbW1pdHRlci5hZGRMYXp5KHJhbmdlLmJlZ2lu
KCksIHJhbmdlLnBoeXNpY2FsRW5kKCkgLSByYW5nZS5iZWdpbigpKTsKKyAgICAgICAgbV9oYXNQ
ZW5kaW5nRGVjb21taXRzID0gdHJ1ZTsKKyAgICB9CiAgICAgcmFuZ2Uuc2V0U3RhcnRQaHlzaWNh
bFNpemUoMCk7CiAgICAgcmFuZ2Uuc2V0VG90YWxQaHlzaWNhbFNpemUoMCk7CisgICAgcmFuZ2Uu
Y2xlYXJQaHlzaWNhbEVuZCgpOwogICAgIEJBU1NFUlQocmFuZ2UuaXNFbGlnaWJpbGUoKSk7CiAg
ICAgcmFuZ2Uuc2V0RWxpZ2libGUoZmFsc2UpOwogI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01B
UCAKQEAgLTExOSwyNCArMTIyLDE4IEBAIHZvaWQgSGVhcDo6ZGVjb21taXRMYXJnZVJhbmdlKFVu
aXF1ZUxvY2sKICNlbmRpZgogfQogCi0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotdm9pZCBI
ZWFwOjpzY2F2ZW5nZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBCdWxrRGVjb21taXQmIGRlY29t
bWl0dGVyKQotI2Vsc2UKIHZvaWQgSGVhcDo6c2NhdmVuZ2UoVW5pcXVlTG9ja0hvbGRlciYgbG9j
aywgQnVsa0RlY29tbWl0JiBkZWNvbW1pdHRlciwgc2l6ZV90JiBkZWZlcnJlZERlY29tbWl0cykK
LSNlbmRpZgogewogICAgIGZvciAoYXV0byYgbGlzdCA6IG1fZnJlZVBhZ2VzKSB7CiAgICAgICAg
IGZvciAoYXV0byogY2h1bmsgOiBsaXN0KSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8qIHBhZ2Ug
OiBjaHVuay0+ZnJlZVBhZ2VzKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXBhZ2UtPmhhc1Bo
eXNpY2FsUGFnZXMoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0jaWYgIUJVU0Uo
UEFSVElBTF9TQ0FWRU5HRSkKICAgICAgICAgICAgICAgICBpZiAocGFnZS0+dXNlZFNpbmNlTGFz
dFNjYXZlbmdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgcGFnZS0+Y2xlYXJVc2VkU2luY2VM
YXN0U2NhdmVuZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWREZWNvbW1pdHMrKzsK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotI2VuZGlm
CiAKICAgICAgICAgICAgICAgICBzaXplX3QgcGFnZVNpemUgPSBibWFsbG9jOjpwYWdlU2l6ZSgm
bGlzdCAtICZtX2ZyZWVQYWdlc1swXSk7CiAgICAgICAgICAgICAgICAgc2l6ZV90IGRlY29tbWl0
U2l6ZSA9IHBoeXNpY2FsUGFnZVNpemVTbG9wcHkocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFn
ZVNpemUpOwpAQCAtMTU3LDM3ICsxNTQsMTUgQEAgdm9pZCBIZWFwOjpzY2F2ZW5nZShVbmlxdWVM
b2NrSG9sZGVyJiBsbwogICAgIH0KIAogICAgIGZvciAoTGFyZ2VSYW5nZSYgcmFuZ2UgOiBtX2xh
cmdlRnJlZSkgewotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICAgICAgbV9oaWdoV2F0
ZXJtYXJrID0gc3RkOjptaW4obV9oaWdoV2F0ZXJtYXJrLCBzdGF0aWNfY2FzdDx2b2lkKj4ocmFu
Z2UuYmVnaW4oKSkpOwotI2Vsc2UKICAgICAgICAgaWYgKHJhbmdlLnVzZWRTaW5jZUxhc3RTY2F2
ZW5nZSgpKSB7CiAgICAgICAgICAgICByYW5nZS5jbGVhclVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgp
OwogICAgICAgICAgICAgZGVmZXJyZWREZWNvbW1pdHMrKzsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgZGVjb21taXRMYXJnZVJhbmdlKGxvY2ssIHJh
bmdlLCBkZWNvbW1pdHRlcik7CiAgICAgfQotCi0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQot
ICAgIG1fZnJlZWFibGVNZW1vcnkgPSAwOwotI2VuZGlmCiB9CiAKLSNpZiBCVVNFKFBBUlRJQUxf
U0NBVkVOR0UpCi12b2lkIEhlYXA6OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKFVuaXF1ZUxvY2tI
b2xkZXImIGxvY2ssIEJ1bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIpCi17Ci0gICAgdm9pZCogbmV3
SGlnaFdhdGVyTWFyayA9IG51bGxwdHI7Ci0gICAgZm9yIChMYXJnZVJhbmdlJiByYW5nZSA6IG1f
bGFyZ2VGcmVlKSB7Ci0gICAgICAgIGlmIChyYW5nZS5iZWdpbigpIDw9IG1faGlnaFdhdGVybWFy
aykKLSAgICAgICAgICAgIG5ld0hpZ2hXYXRlck1hcmsgPSBzdGQ6Om1pbihuZXdIaWdoV2F0ZXJN
YXJrLCBzdGF0aWNfY2FzdDx2b2lkKj4ocmFuZ2UuYmVnaW4oKSkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBkZWNvbW1pdExhcmdlUmFuZ2UobG9jaywgcmFuZ2UsIGRlY29tbWl0dGVyKTsK
LSAgICB9Ci0gICAgbV9oaWdoV2F0ZXJtYXJrID0gbmV3SGlnaFdhdGVyTWFyazsKLX0KLSNlbmRp
ZgotCiB2b2lkIEhlYXA6OmRlYWxsb2NhdGVMaW5lQ2FjaGUoVW5pcXVlTG9ja0hvbGRlciYsIExp
bmVDYWNoZSYgbGluZUNhY2hlKQogewogICAgIGZvciAoYXV0byYgbGlzdCA6IGxpbmVDYWNoZSkg
ewpAQCAtMjE4LDI1ICsxOTMsMTQgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmsoVW5p
cXVlTG9jawogCiAgICAgICAgIG1fb2JqZWN0VHlwZXMuc2V0KGxvY2ssIGNodW5rLCBPYmplY3RU
eXBlOjpTbWFsbCk7CiAKLSAgICAgICAgc2l6ZV90IGFjY291bnRlZEluRnJlZWFibGUgPSAwOwog
ICAgICAgICBmb3JFYWNoUGFnZShjaHVuaywgcGFnZVNpemUsIFsmXShTbWFsbFBhZ2UqIHBhZ2Up
IHsKICAgICAgICAgICAgIHBhZ2UtPnNldEhhc1BoeXNpY2FsUGFnZXModHJ1ZSk7Ci0jaWYgIUJV
U0UoUEFSVElBTF9TQ0FWRU5HRSkKICAgICAgICAgICAgIHBhZ2UtPnNldFVzZWRTaW5jZUxhc3RT
Y2F2ZW5nZSgpOwotI2VuZGlmCiAgICAgICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMobG9j
aywgdHJ1ZSk7CiAgICAgICAgICAgICBjaHVuay0+ZnJlZVBhZ2VzKCkucHVzaChwYWdlKTsKLSAg
ICAgICAgICAgIGFjY291bnRlZEluRnJlZWFibGUgKz0gcGFnZVNpemU7CiAgICAgICAgIH0pOwog
Ci0gICAgICAgIG1fZnJlZWFibGVNZW1vcnkgKz0gYWNjb3VudGVkSW5GcmVlYWJsZTsKLQotICAg
ICAgICBhdXRvIG1ldGFkYXRhU2l6ZSA9IENodW5rOjptZXRhZGF0YVNpemUocGFnZVNpemUpOwot
ICAgICAgICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KGNodW5rLT5hZGRyZXNzKHNp
emVvZihDaHVuaykpLCBtZXRhZGF0YVNpemUgLSBzaXplb2YoQ2h1bmspKTsKLQotICAgICAgICBh
dXRvIGRlY29tbWl0U2l6ZSA9IGNodW5rU2l6ZSAtIG1ldGFkYXRhU2l6ZSAtIGFjY291bnRlZElu
RnJlZWFibGU7Ci0gICAgICAgIGlmIChkZWNvbW1pdFNpemUgPiAwKQotICAgICAgICAgICAgdm1E
ZWFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShjaHVuay0+YWRkcmVzcyhjaHVua1NpemUgLSBk
ZWNvbW1pdFNpemUpLCBkZWNvbW1pdFNpemUpOworICAgICAgICBtX2ZyZWVhYmxlTWVtb3J5ICs9
IGNodW5rU2l6ZTsKIAogICAgICAgICBtX3NjYXZlbmdlci0+c2NoZWR1bGUoMCk7CiAKQEAgLTI1
MywyNCArMjE3LDIzIEBAIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoVW5pcXVlTG8K
ICAgICAKICAgICBzaXplX3Qgc2l6ZSA9IG1fbGFyZ2VBbGxvY2F0ZWQucmVtb3ZlKGNodW5rKTsK
ICAgICBzaXplX3QgdG90YWxQaHlzaWNhbFNpemUgPSBzaXplOworICAgIHNpemVfdCBjaHVua1Bh
Z2VTaXplID0gcGFnZVNpemUocGFnZUNsYXNzKTsKKyAgICBTbWFsbFBhZ2UqIGZpcnN0UGFnZVdp
dGhvdXRQaHlzaWNhbFBhZ2VzID0gbnVsbHB0cjsKIAotICAgIHNpemVfdCBhY2NvdW50ZWRJbkZy
ZWVhYmxlID0gMDsKLQotICAgIGJvb2wgaGFzUGh5c2ljYWxQYWdlcyA9IHRydWU7Ci0gICAgZm9y
RWFjaFBhZ2UoY2h1bmssIHBhZ2VTaXplKHBhZ2VDbGFzcyksIFsmXShTbWFsbFBhZ2UqIHBhZ2Up
IHsKKyAgICB2b2lkKiBwaHlzaWNhbEVuZCA9IGNodW5rLT5hZGRyZXNzKGNodW5rLT5tZXRhZGF0
YVNpemUoY2h1bmtQYWdlU2l6ZSkpOworICAgIGZvckVhY2hQYWdlKGNodW5rLCBjaHVua1BhZ2VT
aXplLCBbJl0oU21hbGxQYWdlKiBwYWdlKSB7CiAgICAgICAgIHNpemVfdCBwaHlzaWNhbFNpemUg
PSBwaHlzaWNhbFBhZ2VTaXplU2xvcHB5KHBhZ2UtPmJlZ2luKCktPmJlZ2luKCksIHBhZ2VTaXpl
KHBhZ2VDbGFzcykpOwogICAgICAgICBpZiAoIXBhZ2UtPmhhc1BoeXNpY2FsUGFnZXMoKSkgewog
ICAgICAgICAgICAgdG90YWxQaHlzaWNhbFNpemUgLT0gcGh5c2ljYWxTaXplOwotICAgICAgICAg
ICAgaGFzUGh5c2ljYWxQYWdlcyA9IGZhbHNlOworICAgICAgICAgICAgaWYgKCFmaXJzdFBhZ2VX
aXRob3V0UGh5c2ljYWxQYWdlcykKKyAgICAgICAgICAgICAgICBmaXJzdFBhZ2VXaXRob3V0UGh5
c2ljYWxQYWdlcyA9IHBhZ2U7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYWNjb3VudGVk
SW5GcmVlYWJsZSArPSBwaHlzaWNhbFNpemU7CisgICAgICAgICAgICBwaHlzaWNhbEVuZCA9IHBh
Z2UtPmJlZ2luKCktPmJlZ2luKCkgKyBwaHlzaWNhbFNpemU7CiAgICAgfSk7CiAKLSAgICBtX2Zy
ZWVhYmxlTWVtb3J5IC09IGFjY291bnRlZEluRnJlZWFibGU7Ci0gICAgbV9mcmVlYWJsZU1lbW9y
eSArPSB0b3RhbFBoeXNpY2FsU2l6ZTsKKyAgICBzaXplX3Qgc3RhcnRQaHlzaWNhbFNpemUgPSBm
aXJzdFBhZ2VXaXRob3V0UGh5c2ljYWxQYWdlcyA/IGZpcnN0UGFnZVdpdGhvdXRQaHlzaWNhbFBh
Z2VzLT5iZWdpbigpLT5iZWdpbigpIC0gY2h1bmstPmJ5dGVzKCkgOiBzaXplOwogCi0gICAgc2l6
ZV90IHN0YXJ0UGh5c2ljYWxTaXplID0gaGFzUGh5c2ljYWxQYWdlcyA/IHNpemUgOiAwOwotICAg
IG1fbGFyZ2VGcmVlLmFkZChMYXJnZVJhbmdlKGNodW5rLCBzaXplLCBzdGFydFBoeXNpY2FsU2l6
ZSwgdG90YWxQaHlzaWNhbFNpemUpKTsKKyAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShj
aHVuaywgc2l6ZSwgc3RhcnRQaHlzaWNhbFNpemUsIHRvdGFsUGh5c2ljYWxTaXplLCBjaHVuay0+
YWRkcmVzcyhzdGFydFBoeXNpY2FsU2l6ZSkpKTsKIH0KIAogU21hbGxQYWdlKiBIZWFwOjphbGxv
Y2F0ZVNtYWxsUGFnZShVbmlxdWVMb2NrSG9sZGVyJiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNzLCBM
aW5lQ2FjaGUmIGxpbmVDYWNoZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCkBAIC0yODMsOCArMjQ2
LDYgQEAgU21hbGxQYWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShVbmlxdQogICAgIGlmICgh
bV9saW5lQ2FjaGVbc2l6ZUNsYXNzXS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtX2xpbmVD
YWNoZVtzaXplQ2xhc3NdLnBvcEZyb250KCk7CiAKLSAgICBtX3NjYXZlbmdlci0+ZGlkU3RhcnRH
cm93aW5nKCk7Ci0gICAgCiAgICAgU21hbGxQYWdlKiBwYWdlID0gWyZdKCkgLT4gU21hbGxQYWdl
KiB7CiAgICAgICAgIHNpemVfdCBwYWdlQ2xhc3MgPSBtX2NvbnN0YW50cy5wYWdlQ2xhc3Moc2l6
ZUNsYXNzKTsKICAgICAgICAgCkBAIC0zMTQsOSArMjc1LDcgQEAgU21hbGxQYWdlKiBIZWFwOjph
bGxvY2F0ZVNtYWxsUGFnZShVbmlxdQogICAgICAgICAgICAgbV9waHlzaWNhbFBhZ2VNYXAuY29t
bWl0KHBhZ2UtPmJlZ2luKCktPmJlZ2luKCksIHBhZ2VTaXplKTsKICNlbmRpZgogICAgICAgICB9
Ci0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKICAgICAgICAgcGFnZS0+c2V0VXNlZFNpbmNl
TGFzdFNjYXZlbmdlKCk7Ci0jZW5kaWYKIAogICAgICAgICByZXR1cm4gcGFnZTsKICAgICB9KCk7
CkBAIC01MjUsNiArNDg0LDcgQEAgTGFyZ2VSYW5nZSBIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKFVu
aXF1ZQogICAgICAgICB2bUFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShyYW5nZS5iZWdpbigp
ICsgcmFuZ2Uuc3RhcnRQaHlzaWNhbFNpemUoKSwgcmFuZ2Uuc2l6ZSgpIC0gcmFuZ2Uuc3RhcnRQ
aHlzaWNhbFNpemUoKSk7CiAgICAgICAgIHJhbmdlLnNldFN0YXJ0UGh5c2ljYWxTaXplKHJhbmdl
LnNpemUoKSk7CiAgICAgICAgIHJhbmdlLnNldFRvdGFsUGh5c2ljYWxTaXplKHJhbmdlLnNpemUo
KSk7CisgICAgICAgIHJhbmdlLnNldFBoeXNpY2FsRW5kKHJhbmdlLmJlZ2luKCkgKyByYW5nZS5z
aXplKCkpOwogI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUCAKICAgICAgICAgbV9waHlzaWNh
bFBhZ2VNYXAuY29tbWl0KHJhbmdlLmJlZ2luKCksIHJhbmdlLnNpemUoKSk7CiAjZW5kaWYKQEAg
LTU2MCw4ICs1MjAsNiBAQCB2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKFVuaXF1ZUxvY2tIb2xk
CiAKICAgICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQpKTsKICAgICAKLSAgICBtX3Nj
YXZlbmdlci0+ZGlkU3RhcnRHcm93aW5nKCk7Ci0gICAgCiAgICAgc2l6ZV90IHJvdW5kZWRTaXpl
ID0gc2l6ZSA/IHJvdW5kVXBUb011bHRpcGxlT2YobGFyZ2VBbGlnbm1lbnQsIHNpemUpIDogbGFy
Z2VBbGlnbm1lbnQ7CiAgICAgQVNTRVJUX09SX1JFVFVSTl9PTl9GQUlMVVJFKHJvdW5kZWRTaXpl
ID49IHNpemUpOyAvLyBDaGVjayBmb3Igb3ZlcmZsb3cKICAgICBzaXplID0gcm91bmRlZFNpemU7
CkBAIC01OTAsOSArNTQ4LDYgQEAgdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShVbmlxdWVMb2Nr
SG9sZAogICAgIG1fZnJlZWFibGVNZW1vcnkgLT0gcmFuZ2UudG90YWxQaHlzaWNhbFNpemUoKTsK
IAogICAgIHZvaWQqIHJlc3VsdCA9IHNwbGl0QW5kQWxsb2NhdGUobG9jaywgcmFuZ2UsIGFsaWdu
bWVudCwgc2l6ZSkuYmVnaW4oKTsKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi0gICAgbV9o
aWdoV2F0ZXJtYXJrID0gc3RkOjptYXgobV9oaWdoV2F0ZXJtYXJrLCByZXN1bHQpOwotI2VuZGlm
CiAgICAgQVNTRVJUX09SX1JFVFVSTl9PTl9GQUlMVVJFKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIApAQCAtNjIxLDcgKzU3Niw3IEBAIExhcmdlUmFuZ2UgSGVhcDo6dHJ5QWxsb2NhdGVM
YXJnZUNodW5rKHMKICAgICBQZXJQcm9jZXNzPFpvbmU+OjpnZXQoKS0+YWRkUmFuZ2UoUmFuZ2Uo
bWVtb3J5LCBzaXplKSk7CiAjZW5kaWYKIAotICAgIHJldHVybiBMYXJnZVJhbmdlKG1lbW9yeSwg
c2l6ZSwgMCwgMCk7CisgICAgcmV0dXJuIExhcmdlUmFuZ2UobWVtb3J5LCBzaXplLCAwLCAwLCBt
ZW1vcnkpOwogfQogCiBzaXplX3QgSGVhcDo6bGFyZ2VTaXplKFVuaXF1ZUxvY2tIb2xkZXImLCB2
b2lkKiBvYmplY3QpCkBAIC02MzQsNyArNTg5LDcgQEAgdm9pZCBIZWFwOjpzaHJpbmtMYXJnZShV
bmlxdWVMb2NrSG9sZGVyJgogICAgIEJBU1NFUlQob2JqZWN0LnNpemUoKSA+IG5ld1NpemUpOwog
CiAgICAgc2l6ZV90IHNpemUgPSBtX2xhcmdlQWxsb2NhdGVkLnJlbW92ZShvYmplY3QuYmVnaW4o
KSk7Ci0gICAgTGFyZ2VSYW5nZSByYW5nZSA9IExhcmdlUmFuZ2Uob2JqZWN0LCBzaXplLCBzaXpl
KTsKKyAgICBMYXJnZVJhbmdlIHJhbmdlID0gTGFyZ2VSYW5nZShvYmplY3QsIHNpemUsIHNpemUs
IG9iamVjdC5iZWdpbigpICsgc2l6ZSk7CiAgICAgc3BsaXRBbmRBbGxvY2F0ZShsb2NrLCByYW5n
ZSwgYWxpZ25tZW50LCBuZXdTaXplKTsKIAogICAgIG1fc2NhdmVuZ2VyLT5zY2hlZHVsZShzaXpl
KTsKQEAgLTY0Myw3ICs1OTgsNyBAQCB2b2lkIEhlYXA6OnNocmlua0xhcmdlKFVuaXF1ZUxvY2tI
b2xkZXImCiB2b2lkIEhlYXA6OmRlYWxsb2NhdGVMYXJnZShVbmlxdWVMb2NrSG9sZGVyJiwgdm9p
ZCogb2JqZWN0KQogewogICAgIHNpemVfdCBzaXplID0gbV9sYXJnZUFsbG9jYXRlZC5yZW1vdmUo
b2JqZWN0KTsKLSAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShvYmplY3QsIHNpemUsIHNp
emUsIHNpemUpKTsKKyAgICBtX2xhcmdlRnJlZS5hZGQoTGFyZ2VSYW5nZShvYmplY3QsIHNpemUs
IHNpemUsIHNpemUsIHN0YXRpY19jYXN0PGNoYXIqPihvYmplY3QpICsgc2l6ZSkpOwogICAgIG1f
ZnJlZWFibGVNZW1vcnkgKz0gc2l6ZTsKICAgICBtX3NjYXZlbmdlci0+c2NoZWR1bGUoc2l6ZSk7
CiB9CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkocmV2aXNpb24gMjc4NjY2KQorKysgU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDEyICs3NCw3IEBA
IHB1YmxpYzoKICAgICBzaXplX3QgbGFyZ2VTaXplKFVuaXF1ZUxvY2tIb2xkZXImLCB2b2lkKik7
CiAgICAgdm9pZCBzaHJpbmtMYXJnZShVbmlxdWVMb2NrSG9sZGVyJiwgY29uc3QgUmFuZ2UmLCBz
aXplX3QpOwogCi0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAgIHZvaWQgc2NhdmVuZ2VU
b0hpZ2hXYXRlcm1hcmsoVW5pcXVlTG9ja0hvbGRlciYsIEJ1bGtEZWNvbW1pdCYpOwotICAgIHZv
aWQgc2NhdmVuZ2UoVW5pcXVlTG9ja0hvbGRlciYsIEJ1bGtEZWNvbW1pdCYpOwotI2Vsc2UKICAg
ICB2b2lkIHNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImLCBCdWxrRGVjb21taXQmLCBzaXplX3Qm
IGRlZmVycmVkRGVjb21taXRzKTsKLSNlbmRpZgogICAgIHZvaWQgc2NhdmVuZ2UoVW5pcXVlTG9j
a0hvbGRlciYsIEJ1bGtEZWNvbW1pdCYsIHNpemVfdCYgZnJlZWQsIHNpemVfdCBnb2FsKTsKIAog
ICAgIHNpemVfdCBmcmVlYWJsZU1lbW9yeShVbmlxdWVMb2NrSG9sZGVyJik7CkBAIC0xNDcsMTAg
KzE0Miw2IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFX1BIWVNJQ0FMX1BBR0VfTUFQIAogICAgIFBo
eXNpY2FsUGFnZU1hcCBtX3BoeXNpY2FsUGFnZU1hcDsKICNlbmRpZgotICAgIAotI2lmIEJVU0Uo
UEFSVElBTF9TQ0FWRU5HRSkKLSAgICB2b2lkKiBtX2hpZ2hXYXRlcm1hcmsgeyBudWxscHRyIH07
Ci0jZW5kaWYKIH07CiAKIGlubGluZSB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2Vz
KApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29EaXJlY3RvcnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0RpcmVjdG9yeS5oCShyZXZpc2lvbiAyNzg2
NjYpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0RpcmVjdG9yeS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Niw5ICs3Niw2IEBAIHB1YmxpYzoKICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGVt
cHR5IGFuZCBjb21taXR0ZWQgcGFnZXMsIGFuZCBwdXQgdGhlbSBpbnRvIHRoZSB2ZWN0b3IuIFRo
aXMgYWxzbyByZWNvcmRzIHRoZQogICAgIC8vIHBhZ2VzIGFzIGJlaW5nIGRlY29tbWl0dGVkLiBJ
dCdzIHRoZSBjYWxsZXIncyBqb2IgdG8gZG8gdGhlIGFjdHVhbCBkZWNvbW1pdHRpbmcuCiAgICAg
dm9pZCBzY2F2ZW5nZShjb25zdCBMb2NrSG9sZGVyJiwgVmVjdG9yPERlZmVycmVkRGVjb21taXQ+
Jik7Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAgIHZvaWQgc2NhdmVuZ2VUb0hpZ2hX
YXRlcm1hcmsoY29uc3QgTG9ja0hvbGRlciYsIFZlY3RvcjxEZWZlcnJlZERlY29tbWl0PiYpOwot
I2VuZGlmCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaENv
bW1pdHRlZFBhZ2UoY29uc3QgTG9ja0hvbGRlciYsIGNvbnN0IEZ1bmMmKTsKQEAgLTkzLDkgKzkw
LDYgQEAgcHJpdmF0ZToKICAgICBCaXRzPG51bVBhZ2VzPiBtX2VtcHR5OwogICAgIEJpdHM8bnVt
UGFnZXM+IG1fY29tbWl0dGVkOwogICAgIHVuc2lnbmVkIG1fZmlyc3RFbGlnaWJsZU9yRGVjb21t
aXR0ZWQgeyAwIH07Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAgIHVuc2lnbmVkIG1f
aGlnaFdhdGVybWFyayB7IDAgfTsKLSNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgYm1hbGxv
YwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29EaXJlY3RvcnlJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29EaXJlY3RvcnlJbmxpbmVzLmgJ
KHJldmlzaW9uIDI3ODY2NikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvRGlyZWN0b3J5
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMiArNTAsNyBAQCBFbGlnaWJpbGl0eVJl
c3VsdDxDb25maWc+IElzb0RpcmVjdG9yeTxDCiAgICAgaWYgKHBhZ2VJbmRleCA+PSBudW1QYWdl
cykKICAgICAgICAgcmV0dXJuIEVsaWdpYmlsaXR5S2luZDo6RnVsbDsKIAotI2lmIEJVU0UoUEFS
VElBTF9TQ0FWRU5HRSkKLSAgICBtX2hpZ2hXYXRlcm1hcmsgPSBzdGQ6Om1heChwYWdlSW5kZXgs
IG1faGlnaFdhdGVybWFyayk7Ci0jZW5kaWYKLQogICAgIFNjYXZlbmdlciYgc2NhdmVuZ2VyID0g
KlNjYXZlbmdlcjo6Z2V0KCk7Ci0gICAgc2NhdmVuZ2VyLmRpZFN0YXJ0R3Jvd2luZygpOwogICAg
IAogICAgIElzb1BhZ2U8Q29uZmlnPiogcGFnZSA9IG1fcGFnZXNbcGFnZUluZGV4XS5nZXQoKTsK
ICAgICAKQEAgLTE0NiwyMyArMTQxLDcgQEAgdm9pZCBJc29EaXJlY3Rvcnk8Q29uZmlnLCBwYXNz
ZWROdW1QYWdlcwogICAgICAgICBbJl0gKHNpemVfdCBpbmRleCkgewogICAgICAgICAgICAgc2Nh
dmVuZ2VQYWdlKGxvY2tlciwgaW5kZXgsIGRlY29tbWl0cyk7CiAgICAgICAgIH0pOwotI2lmIEJV
U0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICBtX2hpZ2hXYXRlcm1hcmsgPSAwOwotI2VuZGlmCi19
Ci0KLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWcs
IHVuc2lnbmVkIHBhc3NlZE51bVBhZ2VzPgotdm9pZCBJc29EaXJlY3Rvcnk8Q29uZmlnLCBwYXNz
ZWROdW1QYWdlcz46OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKGNvbnN0IExvY2tIb2xkZXImIGxv
Y2tlciwgVmVjdG9yPERlZmVycmVkRGVjb21taXQ+JiBkZWNvbW1pdHMpCi17Ci0gICAgKG1fZW1w
dHkgJiBtX2NvbW1pdHRlZCkuZm9yRWFjaFNldEJpdCgKLSAgICAgICAgWyZdIChzaXplX3QgaW5k
ZXgpIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA+IG1faGlnaFdhdGVybWFyaykKLSAgICAgICAg
ICAgICAgICBzY2F2ZW5nZVBhZ2UobG9ja2VyLCBpbmRleCwgZGVjb21taXRzKTsKLSAgICAgICAg
fSk7Ci0gICAgbV9oaWdoV2F0ZXJtYXJrID0gMDsKIH0KLSNlbmRpZgogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb25maWcsIHVuc2lnbmVkIHBhc3NlZE51bVBhZ2VzPgogdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvSGVhcEltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0hlYXBJbXBsLmgJKHJldmlzaW9uIDI3
ODY2NikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvSGVhcEltcGwuaAkod29ya2luZyBj
b3B5KQpAQCAtNDksOSArNDksNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SXNvSGVhcEltcGxC
YXNlKCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHNjYXZlbmdlKFZlY3RvcjxEZWZlcnJlZERl
Y29tbWl0PiYpID0gMDsKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi0gICAgdmlydHVhbCB2
b2lkIHNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKFZlY3RvcjxEZWZlcnJlZERlY29tbWl0PiYpID0g
MDsKLSNlbmRpZgogICAgIAogICAgIHZvaWQgc2NhdmVuZ2VOb3coKTsKICAgICBzdGF0aWMgdm9p
ZCBmaW5pc2hTY2F2ZW5naW5nKFZlY3RvcjxEZWZlcnJlZERlY29tbWl0PiYpOwpAQCAtMTEyLDkg
KzEwOSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEJlY29tZUVsaWdpYmxlT3JEZWNvbW1pdGVk
KGNvbnN0IExvY2tIb2xkZXImLCBJc29EaXJlY3Rvcnk8Q29uZmlnLCBJc29EaXJlY3RvcnlQYWdl
PENvbmZpZz46Om51bVBhZ2VzPiopOwogICAgIAogICAgIHZvaWQgc2NhdmVuZ2UoVmVjdG9yPERl
ZmVycmVkRGVjb21taXQ+Jikgb3ZlcnJpZGU7Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQot
ICAgIHZvaWQgc2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsoVmVjdG9yPERlZmVycmVkRGVjb21taXQ+
Jikgb3ZlcnJpZGU7Ci0jZW5kaWYKIAogICAgIHVuc2lnbmVkIGFsbG9jYXRvck9mZnNldCgpOwog
ICAgIHVuc2lnbmVkIGRlYWxsb2NhdG9yT2Zmc2V0KCk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0lzb0hlYXBJbXBsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvSXNvSGVhcEltcGxJbmxpbmVzLmgJKHJldmlzaW9uIDI3ODY2NikKKysrIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvSXNvSGVhcEltcGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyMSwyMSArMTIxLDYgQEAgdm9pZCBJc29IZWFwSW1wbDxDb25maWc+OjpzY2F2ZW5nZShWZWN0
bwogICAgIG1fZGlyZWN0b3J5SGlnaFdhdGVybWFyayA9IDA7CiB9CiAKLSNpZiBCVVNFKFBBUlRJ
QUxfU0NBVkVOR0UpCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb25maWc+Ci12b2lkIElzb0hlYXBJbXBs
PENvbmZpZz46OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKFZlY3RvcjxEZWZlcnJlZERlY29tbWl0
PiYgZGVjb21taXRzKQotewotICAgIExvY2tIb2xkZXIgbG9ja2VyKHRoaXMtPmxvY2spOwotICAg
IGlmICghbV9kaXJlY3RvcnlIaWdoV2F0ZXJtYXJrKQotICAgICAgICBtX2lubGluZURpcmVjdG9y
eS5zY2F2ZW5nZVRvSGlnaFdhdGVybWFyayhsb2NrZXIsIGRlY29tbWl0cyk7Ci0gICAgZm9yIChJ
c29EaXJlY3RvcnlQYWdlPENvbmZpZz4qIHBhZ2UgPSBtX2hlYWREaXJlY3RvcnkuZ2V0KCk7IHBh
Z2U7IHBhZ2UgPSBwYWdlLT5uZXh0KSB7Ci0gICAgICAgIGlmIChwYWdlLT5pbmRleCgpID49IG1f
ZGlyZWN0b3J5SGlnaFdhdGVybWFyaykKLSAgICAgICAgICAgIHBhZ2UtPnBheWxvYWQuc2NhdmVu
Z2VUb0hpZ2hXYXRlcm1hcmsobG9ja2VyLCBkZWNvbW1pdHMpOwotICAgIH0KLSAgICBtX2RpcmVj
dG9yeUhpZ2hXYXRlcm1hcmsgPSAwOwotfQotI2VuZGlmCi0KIGlubGluZSBzaXplX3QgSXNvSGVh
cEltcGxCYXNlOjpmcmVlYWJsZU1lbW9yeSgpCiB7CiAgICAgcmV0dXJuIG1fZnJlZWFibGVNZW1v
cnk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1NoYXJlZEhlYXBJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29TaGFyZWRIZWFwSW5saW5l
cy5oCShyZXZpc2lvbiAyNzg2NjYpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1NoYXJl
ZEhlYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDYgQEAgdGVtcGxhdGU8
dW5zaWduZWQgcGFzc2VkT2JqZWN0U2l6ZT4KIEJOT19JTkxJTkUgdm9pZCogSXNvU2hhcmVkSGVh
cDo6YWxsb2NhdGVTbG93KGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgYm9vbCBhYm9ydE9uRmFp
bHVyZSkKIHsKICAgICBTY2F2ZW5nZXImIHNjYXZlbmdlciA9ICpTY2F2ZW5nZXI6OmdldCgpOwot
ICAgIHNjYXZlbmdlci5kaWRTdGFydEdyb3dpbmcoKTsKICAgICBzY2F2ZW5nZXIuc2NoZWR1bGVJ
ZlVuZGVyTWVtb3J5UHJlc3N1cmUoSXNvU2hhcmVkUGFnZTo6cGFnZVNpemUpOwogCiAgICAgSXNv
U2hhcmVkUGFnZSogcGFnZSA9IElzb1NoYXJlZFBhZ2U6OnRyeUNyZWF0ZSgpOwpJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9MYXJnZU1hcC5jcHAJKHJldmlzaW9uIDI3ODY2NikKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvTGFyZ2VNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw5ICs3Niw3
IEBAIHZvaWQgTGFyZ2VNYXA6OmFkZChjb25zdCBMYXJnZVJhbmdlJiByYW4KICAgICAgICAgbWVy
Z2VkID0gbWVyZ2UobWVyZ2VkLCBtX2ZyZWUucG9wKGktLSkpOwogICAgIH0KIAotI2lmICFCVVNF
KFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgbWVyZ2VkLnNldFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgp
OwotI2VuZGlmCiAgICAgbV9mcmVlLnB1c2gobWVyZ2VkKTsKIH0KIApJbmRleDogU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9MYXJnZVJhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9MYXJnZVJhbmdlLmgJKHJldmlzaW9uIDI3ODY2NikKKysrIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvTGFyZ2VSYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw0NyArMzcsMzUgQEAg
cHVibGljOgogICAgICAgICA6IFJhbmdlKCkKICAgICAgICAgLCBtX3N0YXJ0UGh5c2ljYWxTaXpl
KDApCiAgICAgICAgICwgbV90b3RhbFBoeXNpY2FsU2l6ZSgwKQotI2lmICFCVVNFKFBBUlRJQUxf
U0NBVkVOR0UpCisgICAgICAgICwgbV9waHlzaWNhbEVuZChiZWdpbigpKQogICAgICAgICAsIG1f
aXNFbGlnaWJsZSh0cnVlKQogICAgICAgICAsIG1fdXNlZFNpbmNlTGFzdFNjYXZlbmdlKGZhbHNl
KQotI2VuZGlmCiAgICAgewogICAgIH0KIAotICAgIExhcmdlUmFuZ2UoY29uc3QgUmFuZ2UmIG90
aGVyLCBzaXplX3Qgc3RhcnRQaHlzaWNhbFNpemUsIHNpemVfdCB0b3RhbFBoeXNpY2FsU2l6ZSkK
KyAgICBMYXJnZVJhbmdlKGNvbnN0IFJhbmdlJiBvdGhlciwgc2l6ZV90IHN0YXJ0UGh5c2ljYWxT
aXplLCBzaXplX3QgdG90YWxQaHlzaWNhbFNpemUsIHZvaWQqIHBoeXNpY2FsRW5kKQogICAgICAg
ICA6IFJhbmdlKG90aGVyKQogICAgICAgICAsIG1fc3RhcnRQaHlzaWNhbFNpemUoc3RhcnRQaHlz
aWNhbFNpemUpCiAgICAgICAgICwgbV90b3RhbFBoeXNpY2FsU2l6ZSh0b3RhbFBoeXNpY2FsU2l6
ZSkKLSNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQorICAgICAgICAsIG1fcGh5c2ljYWxFbmQo
c3RhdGljX2Nhc3Q8Y2hhcio+KHBoeXNpY2FsRW5kKSkKICAgICAgICAgLCBtX2lzRWxpZ2libGUo
dHJ1ZSkKICAgICAgICAgLCBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5nZShmYWxzZSkKLSNlbmRpZgog
ICAgIHsKICAgICAgICAgQkFTU0VSVCh0aGlzLT5zaXplKCkgPj0gdGhpcy0+dG90YWxQaHlzaWNh
bFNpemUoKSk7CiAgICAgICAgIEJBU1NFUlQodGhpcy0+dG90YWxQaHlzaWNhbFNpemUoKSA+PSB0
aGlzLT5zdGFydFBoeXNpY2FsU2l6ZSgpKTsKICAgICB9CiAKLSNpZiBCVVNFKFBBUlRJQUxfU0NB
VkVOR0UpCi0gICAgTGFyZ2VSYW5nZSh2b2lkKiBiZWdpbiwgc2l6ZV90IHNpemUsIHNpemVfdCBz
dGFydFBoeXNpY2FsU2l6ZSwgc2l6ZV90IHRvdGFsUGh5c2ljYWxTaXplKQotICAgICAgICA6IFJh
bmdlKGJlZ2luLCBzaXplKQotICAgICAgICAsIG1fc3RhcnRQaHlzaWNhbFNpemUoc3RhcnRQaHlz
aWNhbFNpemUpCi0gICAgICAgICwgbV90b3RhbFBoeXNpY2FsU2l6ZSh0b3RhbFBoeXNpY2FsU2l6
ZSkKLSAgICB7Ci0gICAgICAgIEJBU1NFUlQodGhpcy0+c2l6ZSgpID49IHRoaXMtPnRvdGFsUGh5
c2ljYWxTaXplKCkpOwotICAgICAgICBCQVNTRVJUKHRoaXMtPnRvdGFsUGh5c2ljYWxTaXplKCkg
Pj0gdGhpcy0+c3RhcnRQaHlzaWNhbFNpemUoKSk7Ci0gICAgfQotI2Vsc2UKLSAgICBMYXJnZVJh
bmdlKHZvaWQqIGJlZ2luLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHN0YXJ0UGh5c2ljYWxTaXplLCBz
aXplX3QgdG90YWxQaHlzaWNhbFNpemUsIGJvb2wgdXNlZFNpbmNlTGFzdFNjYXZlbmdlID0gZmFs
c2UpCisgICAgTGFyZ2VSYW5nZSh2b2lkKiBiZWdpbiwgc2l6ZV90IHNpemUsIHNpemVfdCBzdGFy
dFBoeXNpY2FsU2l6ZSwgc2l6ZV90IHRvdGFsUGh5c2ljYWxTaXplLCB2b2lkKiBwaHlzaWNhbEVu
ZCwgYm9vbCB1c2VkU2luY2VMYXN0U2NhdmVuZ2UgPSBmYWxzZSkKICAgICAgICAgOiBSYW5nZShi
ZWdpbiwgc2l6ZSkKICAgICAgICAgLCBtX3N0YXJ0UGh5c2ljYWxTaXplKHN0YXJ0UGh5c2ljYWxT
aXplKQogICAgICAgICAsIG1fdG90YWxQaHlzaWNhbFNpemUodG90YWxQaHlzaWNhbFNpemUpCisg
ICAgICAgICwgbV9waHlzaWNhbEVuZChzdGF0aWNfY2FzdDxjaGFyKj4ocGh5c2ljYWxFbmQpKQog
ICAgICAgICAsIG1faXNFbGlnaWJsZSh0cnVlKQogICAgICAgICAsIG1fdXNlZFNpbmNlTGFzdFNj
YXZlbmdlKHVzZWRTaW5jZUxhc3RTY2F2ZW5nZSkKICAgICB7CiAgICAgICAgIEJBU1NFUlQodGhp
cy0+c2l6ZSgpID49IHRoaXMtPnRvdGFsUGh5c2ljYWxTaXplKCkpOwogICAgICAgICBCQVNTRVJU
KHRoaXMtPnRvdGFsUGh5c2ljYWxTaXplKCkgPj0gdGhpcy0+c3RhcnRQaHlzaWNhbFNpemUoKSk7
CiAgICAgfQotI2VuZGlmCiAKICAgICAvLyBSZXR1cm5zIGEgbG93ZXIgYm91bmQgb24gcGh5c2lj
YWwgc2l6ZSBhdCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlLiBSYW5nZXMgdGhhdAogICAgIC8vIHNw
YW4gbm9uLXBoeXNpY2FsIGZyYWdtZW50cyB1c2UgdGhpcyBudW1iZXIgdG8gcmVtZW1iZXIgdGhl
IHBoeXNpY2FsIHNpemUgb2YKQEAgLTk4LDE3ICs4NiwyMSBAQCBwdWJsaWM6CiAgICAgLy8gZG9l
c24ndCByZWFsbHkgYWZmZWN0IGFjY3VyYWN5LgogICAgIHNpemVfdCB0b3RhbFBoeXNpY2FsU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxQaHlzaWNhbFNpemU7IH0KICAgICB2b2lkIHNldFRv
dGFsUGh5c2ljYWxTaXplKHNpemVfdCB0b3RhbFBoeXNpY2FsU2l6ZSkgeyBtX3RvdGFsUGh5c2lj
YWxTaXplID0gdG90YWxQaHlzaWNhbFNpemU7IH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIHRoZSBh
ZGRyZXNzIHBhc3QgdGhlIGVuZCBvZiBwaHlzaWNhbCBtZW1vcnkgaW4gdGhpcyByYW5nZS4KKyAg
ICAvLyBXaGVuIGRlY29taXR0aW5nIHRoaXMgcmFuZ2UsIHdlIGRlY29tbWl0dCBbYmVnaW4oKSwg
cGh5c2ljYWxFbmQpLgorICAgIGNoYXIqIHBoeXNpY2FsRW5kKCkgY29uc3QgeyByZXR1cm4gbV9w
aHlzaWNhbEVuZDsgfQorICAgIHZvaWQgc2V0UGh5c2ljYWxFbmQodm9pZCogcGh5c2ljYWxFbmQp
IHsgbV9waHlzaWNhbEVuZCA9IHN0YXRpY19jYXN0PGNoYXIqPihwaHlzaWNhbEVuZCk7IH0KKyAg
ICB2b2lkIGNsZWFyUGh5c2ljYWxFbmQoKSB7IG1fcGh5c2ljYWxFbmQgPSBiZWdpbigpOyB9CiAK
ICAgICBzdGQ6OnBhaXI8TGFyZ2VSYW5nZSwgTGFyZ2VSYW5nZT4gc3BsaXQoc2l6ZV90KSBjb25z
dDsKIAogICAgIHZvaWQgc2V0RWxpZ2libGUoYm9vbCBlbGlnaWJsZSkgeyBtX2lzRWxpZ2libGUg
PSBlbGlnaWJsZTsgfQogICAgIGJvb2wgaXNFbGlnaWJpbGUoKSBjb25zdCB7IHJldHVybiBtX2lz
RWxpZ2libGU7IH0KIAotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgYm9vbCB1c2Vk
U2luY2VMYXN0U2NhdmVuZ2UoKSBjb25zdCB7IHJldHVybiBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5n
ZTsgfQogICAgIHZvaWQgY2xlYXJVc2VkU2luY2VMYXN0U2NhdmVuZ2UoKSB7IG1fdXNlZFNpbmNl
TGFzdFNjYXZlbmdlID0gZmFsc2U7IH0KICAgICB2b2lkIHNldFVzZWRTaW5jZUxhc3RTY2F2ZW5n
ZSgpIHsgbV91c2VkU2luY2VMYXN0U2NhdmVuZ2UgPSB0cnVlOyB9Ci0jZW5kaWYKIAogICAgIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IHZvaWQqIG90aGVyKSBjb25zdCB7IHJldHVybiBiZWdpbigpIDwg
b3RoZXI7IH0KICAgICBib29sIG9wZXJhdG9yPChjb25zdCBMYXJnZVJhbmdlJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gYmVnaW4oKSA8IG90aGVyLmJlZ2luKCk7IH0KQEAgLTExNiwxMiArMTA4LDkg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzaXplX3QgbV9zdGFydFBoeXNpY2FsU2l6ZTsKICAg
ICBzaXplX3QgbV90b3RhbFBoeXNpY2FsU2l6ZTsKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0Up
Ci0gICAgYm9vbCBtX2lzRWxpZ2libGUgeyB0cnVlIH07Ci0jZWxzZQorICAgIGNoYXIqIG1fcGh5
c2ljYWxFbmQ7CiAgICAgdW5zaWduZWQgbV9pc0VsaWdpYmxlOiAxOwogICAgIHVuc2lnbmVkIG1f
dXNlZFNpbmNlTGFzdFNjYXZlbmdlOiAxOwotI2VuZGlmCiB9OwogCiBpbmxpbmUgYm9vbCBjYW5N
ZXJnZShjb25zdCBMYXJnZVJhbmdlJiBhLCBjb25zdCBMYXJnZVJhbmdlJiBiKQpAQCAtMTQ0LDE4
ICsxMzMsMTcgQEAgaW5saW5lIGJvb2wgY2FuTWVyZ2UoY29uc3QgTGFyZ2VSYW5nZSYgYQogaW5s
aW5lIExhcmdlUmFuZ2UgbWVyZ2UoY29uc3QgTGFyZ2VSYW5nZSYgYSwgY29uc3QgTGFyZ2VSYW5n
ZSYgYikKIHsKICAgICBjb25zdCBMYXJnZVJhbmdlJiBsZWZ0ID0gc3RkOjptaW4oYSwgYik7Ci0j
aWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKKyAgICBjb25zdCBMYXJnZVJhbmdlJiByaWdodCA9
IHN0ZDo6bWF4KGEsIGIpOworICAgIHZvaWQqIHBoeXNpY2FsRW5kID0gcmlnaHQudG90YWxQaHlz
aWNhbFNpemUoKSA/IHJpZ2h0LnBoeXNpY2FsRW5kKCkgOiBsZWZ0LnBoeXNpY2FsRW5kKCk7CiAg
ICAgYm9vbCBtZXJnZWRVc2VkU2luY2VMYXN0U2NhdmVuZ2UgPSBhLnVzZWRTaW5jZUxhc3RTY2F2
ZW5nZSgpIHx8IGIudXNlZFNpbmNlTGFzdFNjYXZlbmdlKCk7Ci0jZW5kaWYKICAgICBpZiAobGVm
dC5zaXplKCkgPT0gbGVmdC5zdGFydFBoeXNpY2FsU2l6ZSgpKSB7CiAgICAgICAgIHJldHVybiBM
YXJnZVJhbmdlKAogICAgICAgICAgICAgbGVmdC5iZWdpbigpLAogICAgICAgICAgICAgYS5zaXpl
KCkgKyBiLnNpemUoKSwKICAgICAgICAgICAgIGEuc3RhcnRQaHlzaWNhbFNpemUoKSArIGIuc3Rh
cnRQaHlzaWNhbFNpemUoKSwKLSAgICAgICAgICAgIGEudG90YWxQaHlzaWNhbFNpemUoKSArIGIu
dG90YWxQaHlzaWNhbFNpemUoKQotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCisgICAgICAg
ICAgICBhLnRvdGFsUGh5c2ljYWxTaXplKCkgKyBiLnRvdGFsUGh5c2ljYWxTaXplKCksCisgICAg
ICAgICAgICBwaHlzaWNhbEVuZAogICAgICAgICAgICAgLCBtZXJnZWRVc2VkU2luY2VMYXN0U2Nh
dmVuZ2UKLSNlbmRpZgogICAgICAgICApOwogICAgICAgICAKICAgICB9CkBAIC0xNjQsMTAgKzE1
Miw5IEBAIGlubGluZSBMYXJnZVJhbmdlIG1lcmdlKGNvbnN0IExhcmdlUmFuZ2UKICAgICAgICAg
bGVmdC5iZWdpbigpLAogICAgICAgICBhLnNpemUoKSArIGIuc2l6ZSgpLAogICAgICAgICBsZWZ0
LnN0YXJ0UGh5c2ljYWxTaXplKCksCi0gICAgICAgIGEudG90YWxQaHlzaWNhbFNpemUoKSArIGIu
dG90YWxQaHlzaWNhbFNpemUoKQotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCisgICAgICAg
IGEudG90YWxQaHlzaWNhbFNpemUoKSArIGIudG90YWxQaHlzaWNhbFNpemUoKSwKKyAgICAgICAg
cGh5c2ljYWxFbmQKICAgICAgICAgLCBtZXJnZWRVc2VkU2luY2VMYXN0U2NhdmVuZ2UKLSNlbmRp
ZgogICAgICk7CiB9CiAKQEAgLTE3NSwxMSArMTYyLDEyIEBAIGlubGluZSBzdGQ6OnBhaXI8TGFy
Z2VSYW5nZSwgTGFyZ2VSYW5nZT4KIHsKICAgICBCQVNTRVJUKGxlZnRTaXplIDw9IHRoaXMtPnNp
emUoKSk7CiAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHRoaXMtPnNpemUoKSAtIGxlZnRTaXplOwor
ICAgIGNoYXIqIHBoeXNpY2FsRW5kID0gdGhpcy0+cGh5c2ljYWxFbmQoKTsKIAogICAgIGlmIChs
ZWZ0U2l6ZSA8PSBzdGFydFBoeXNpY2FsU2l6ZSgpKSB7CiAgICAgICAgIEJBU1NFUlQodG90YWxQ
aHlzaWNhbFNpemUoKSA+PSBsZWZ0U2l6ZSk7Ci0gICAgICAgIExhcmdlUmFuZ2UgbGVmdChiZWdp
bigpLCBsZWZ0U2l6ZSwgbGVmdFNpemUsIGxlZnRTaXplKTsKLSAgICAgICAgTGFyZ2VSYW5nZSBy
aWdodChsZWZ0LmVuZCgpLCByaWdodFNpemUsIHN0YXJ0UGh5c2ljYWxTaXplKCkgLSBsZWZ0U2l6
ZSwgdG90YWxQaHlzaWNhbFNpemUoKSAtIGxlZnRTaXplKTsKKyAgICAgICAgTGFyZ2VSYW5nZSBs
ZWZ0KGJlZ2luKCksIGxlZnRTaXplLCBsZWZ0U2l6ZSwgbGVmdFNpemUsIHN0ZDo6bWluKHBoeXNp
Y2FsRW5kLCBiZWdpbigpICsgbGVmdFNpemUpKTsKKyAgICAgICAgTGFyZ2VSYW5nZSByaWdodChs
ZWZ0LmVuZCgpLCByaWdodFNpemUsIHN0YXJ0UGh5c2ljYWxTaXplKCkgLSBsZWZ0U2l6ZSwgdG90
YWxQaHlzaWNhbFNpemUoKSAtIGxlZnRTaXplLCBzdGQ6Om1heChwaHlzaWNhbEVuZCwgbGVmdC5l
bmQoKSkpOwogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobGVmdCwgcmlnaHQpOwogICAg
IH0KIApAQCAtMTk0LDggKzE4Miw4IEBAIGlubGluZSBzdGQ6OnBhaXI8TGFyZ2VSYW5nZSwgTGFy
Z2VSYW5nZT4KICAgICAgICAgcmlnaHRUb3RhbFBoeXNpY2FsU2l6ZSA9IHJpZ2h0U2l6ZTsKICAg
ICB9CiAKLSAgICBMYXJnZVJhbmdlIGxlZnQoYmVnaW4oKSwgbGVmdFNpemUsIHN0YXJ0UGh5c2lj
YWxTaXplKCksIGxlZnRUb3RhbFBoeXNpY2FsU2l6ZSk7Ci0gICAgTGFyZ2VSYW5nZSByaWdodChs
ZWZ0LmVuZCgpLCByaWdodFNpemUsIDAsIHJpZ2h0VG90YWxQaHlzaWNhbFNpemUpOworICAgIExh
cmdlUmFuZ2UgbGVmdChiZWdpbigpLCBsZWZ0U2l6ZSwgc3RhcnRQaHlzaWNhbFNpemUoKSwgbGVm
dFRvdGFsUGh5c2ljYWxTaXplLCBzdGQ6Om1pbihwaHlzaWNhbEVuZCwgYmVnaW4oKSArIGxlZnRT
aXplKSk7CisgICAgTGFyZ2VSYW5nZSByaWdodChsZWZ0LmVuZCgpLCByaWdodFNpemUsIDAsIHJp
Z2h0VG90YWxQaHlzaWNhbFNpemUsIHN0ZDo6bWF4KHBoeXNpY2FsRW5kLCBsZWZ0LmVuZCgpKSk7
CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGxlZnQsIHJpZ2h0KTsKIH0KIApJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmNwcAkocmV2aXNpb24gMjc4NjY2KQorKysgU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSwxMSAr
ODUsNyBAQCBTY2F2ZW5nZXI6OlNjYXZlbmdlcihjb25zdCBMb2NrSG9sZGVyJikKICAgICBkaXNw
YXRjaF9yZXN1bWUobV9wcmVzc3VyZUhhbmRsZXJEaXNwYXRjaFNvdXJjZSk7CiAgICAgZGlzcGF0
Y2hfcmVsZWFzZShxdWV1ZSk7CiAjZW5kaWYKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi0g
ICAgbV93YWl0VGltZSA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMobV9pc0luTWluaU1vZGUg
PyAyMDAgOiAyMDAwKTsKLSNlbHNlCiAgICAgbV93YWl0VGltZSA9IHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMoMTApOwotI2VuZGlmCiAKICAgICBtX3RocmVhZCA9IHN0ZDo6dGhyZWFkKCZ0aHJl
YWRFbnRyeVBvaW50LCB0aGlzKTsKIH0KQEAgLTEyMCwxMiArMTE2LDYgQEAgdm9pZCBTY2F2ZW5n
ZXI6OnJ1blNvb24oY29uc3QgTG9ja0hvbGRlcgogICAgIG1fY29uZGl0aW9uLm5vdGlmeV9hbGwo
KTsKIH0KIAotdm9pZCBTY2F2ZW5nZXI6OmRpZFN0YXJ0R3Jvd2luZygpCi17Ci0gICAgLy8gV2Ug
ZG9uJ3QgcmVhbGx5IG5lZWQgdG8gbG9jayBoZXJlLCBzaW5jZSB0aGlzIGlzIGp1c3QgYSBoZXVy
aXN0aWMuCi0gICAgbV9pc1Byb2JhYmx5R3Jvd2luZyA9IHRydWU7Ci19Ci0KIHZvaWQgU2NhdmVu
Z2VyOjpzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmVzc3VyZShzaXplX3QgYnl0ZXMpCiB7CiAgICAg
TG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOwpAQCAtMTQ2LDcgKzEzNiw2IEBAIHZvaWQgU2NhdmVu
Z2VyOjpzY2hlZHVsZUlmVW5kZXJNZW1vcnlQcmUKICAgICBpZiAoIWlzVW5kZXJNZW1vcnlQcmVz
c3VyZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2lzUHJvYmFibHlHcm93aW5nID0gZmFs
c2U7CiAgICAgcnVuKGxvY2spOwogfQogCkBAIC0xNTgsNyArMTQ3LDYgQEAgdm9pZCBTY2F2ZW5n
ZXI6OnNjaGVkdWxlKHNpemVfdCBieXRlcykKICAgICBpZiAod2lsbFJ1blNvb24oKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIG1faXNQcm9iYWJseUdyb3dpbmcgPSBmYWxzZTsKICAgICBy
dW5Tb29uKGxvY2spOwogfQogCkBAIC0xODcsMTQgKzE3NSw2IEBAIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHMgU2NhdmVuZ2VyOjp0aW0KICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9u
X2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9j
azo6bm93KCkgLSBtX2xhc3RGdWxsU2NhdmVuZ2VUaW1lKTsKIH0KIAotI2lmIEJVU0UoUEFSVElB
TF9TQ0FWRU5HRSkKLXN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgU2NhdmVuZ2VyOjp0aW1lU2lu
Y2VMYXN0UGFydGlhbFNjYXZlbmdlKCkKLXsKLSAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2sobXV0
ZXgoKSk7Ci0gICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25v
OjptaWxsaXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpIC0gbV9sYXN0
UGFydGlhbFNjYXZlbmdlVGltZSk7Ci19Ci0jZW5kaWYKLQogdm9pZCBTY2F2ZW5nZXI6OmVuYWJs
ZU1pbmlNb2RlKCkKIHsKICAgICBtX2lzSW5NaW5pTW9kZSA9IHRydWU7IC8vIFdlIGp1c3Qgc3Rv
cmUgdG8gdGhpcyByYWNpbHkuIFRoZSBzY2F2ZW5nZXIgdGhyZWFkIHdpbGwgZXZlbnR1YWxseSBw
aWNrIHVwIHRoZSByaWdodCB2YWx1ZS4KQEAgLTIyMCwyNSArMjAwLDE3IEBAIHZvaWQgU2NhdmVu
Z2VyOjpzY2F2ZW5nZSgpCiAKICAgICAgICAgewogICAgICAgICAgICAgUHJpbnRUaW1lIHByaW50
VGltZSgiXG5mdWxsIHNjYXZlbmdlIHVuZGVyIGxvY2sgdGltZSIpOwotI2lmICFCVVNFKFBBUlRJ
QUxfU0NBVkVOR0UpCiAgICAgICAgICAgICBzaXplX3QgZGVmZXJyZWREZWNvbW1pdHMgPSAwOwot
I2VuZGlmCiAgICAgICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1IZWFwczsgaS0tOykgewogICAgICAg
ICAgICAgICAgIGlmICghaXNBY3RpdmVIZWFwS2luZChzdGF0aWNfY2FzdDxIZWFwS2luZD4oaSkp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVO
R0UpCi0gICAgICAgICAgICAgICAgUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgp
LT5hdChpKS5zY2F2ZW5nZShsb2NrLCBkZWNvbW1pdHRlcik7Ci0jZWxzZQogICAgICAgICAgICAg
ICAgIFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoaSkuc2NhdmVuZ2Uo
bG9jaywgZGVjb21taXR0ZXIsIGRlZmVycmVkRGVjb21taXRzKTsKLSNlbmRpZgogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZGVjb21taXR0ZXIucHJvY2Vzc0VhZ2VyKCk7CiAKLSNpZiAhQlVT
RShQQVJUSUFMX1NDQVZFTkdFKQogICAgICAgICAgICAgaWYgKGRlZmVycmVkRGVjb21taXRzKQog
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6UnVuU29vbjsKLSNlbmRpZgogICAgICAg
ICB9CiAKICAgICAgICAgewpAQCAtMjc5LDc4ICsyNTEsNiBAQCB2b2lkIFNjYXZlbmdlcjo6c2Nh
dmVuZ2UoKQogICAgIH0KIH0KIAotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLXZvaWQgU2Nh
dmVuZ2VyOjpwYXJ0aWFsU2NhdmVuZ2UoKQotewotICAgIGlmICghbV9pc0VuYWJsZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhtX3NjYXZlbmdpbmdNdXRl
eCk7Ci0KLSAgICBpZiAodmVyYm9zZSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIs
ICItLWJlZm9yZSBwYXJ0aWFsIHNjYXZlbmdpbmctLVxuIik7Ci0gICAgICAgIGR1bXBTdGF0cygp
OwotICAgIH0KLQotICAgIHsKLSAgICAgICAgQnVsa0RlY29tbWl0IGRlY29tbWl0dGVyOwotICAg
ICAgICB7Ci0gICAgICAgICAgICBQcmludFRpbWUgcHJpbnRUaW1lKCJcbnBhcnRpYWxTY2F2ZW5n
ZSB1bmRlciBsb2NrIHRpbWUiKTsKLSAgICAgICAgICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhI
ZWFwOjptdXRleCgpKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUhlYXBzOyBp
LS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0FjdGl2ZUhlYXBLaW5kKHN0YXRpY19jYXN0
PEhlYXBLaW5kPihpKSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIEhlYXAmIGhlYXAgPSBQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCkt
PmF0KGkpOwotICAgICAgICAgICAgICAgIHNpemVfdCBmcmVlYWJsZU1lbW9yeSA9IGhlYXAuZnJl
ZWFibGVNZW1vcnkobG9jayk7Ci0gICAgICAgICAgICAgICAgaWYgKGZyZWVhYmxlTWVtb3J5IDwg
NCAqIE1CKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBo
ZWFwLnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKGxvY2ssIGRlY29tbWl0dGVyKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZGVjb21taXR0ZXIucHJvY2Vzc0VhZ2VyKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICB7Ci0gICAgICAgICAgICBQcmludFRpbWUgcHJpbnRUaW1lKCJwYXJ0aWFs
U2NhdmVuZ2UgbGF6eSBkZWNvbW1pdCB0aW1lIik7Ci0gICAgICAgICAgICBkZWNvbW1pdHRlci5w
cm9jZXNzTGF6eSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgewotICAgICAgICAgICAgUHJpbnRU
aW1lIHByaW50VGltZSgicGFydGlhbFNjYXZlbmdlIG1hcmsgYWxsIGFzIGVsaWdpYmxlIHRpbWUi
KTsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9jayhIZWFwOjptdXRleCgpKTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG51bUhlYXBzOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFpc0FjdGl2ZUhlYXBLaW5kKHN0YXRpY19jYXN0PEhlYXBLaW5kPihpKSkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIEhlYXAmIGhlYXAgPSBQZXJQ
cm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGkpOwotICAgICAgICAgICAgICAg
IGhlYXAubWFya0FsbExhcmdlQXNFbGlnaWJpbGUobG9jayk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQkFTU0VSVCghbV9kZWZlcnJl
ZERlY29tbWl0cy5zaXplKCkpOwotICAgICAgICBBbGxJc29IZWFwczo6Z2V0KCktPmZvckVhY2go
Ci0gICAgICAgICAgICBbJl0gKElzb0hlYXBJbXBsQmFzZSYgaGVhcCkgewotICAgICAgICAgICAg
ICAgIGhlYXAuc2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsobV9kZWZlcnJlZERlY29tbWl0cyk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgSXNvSGVhcEltcGxCYXNlOjpmaW5pc2hTY2F2ZW5naW5n
KG1fZGVmZXJyZWREZWNvbW1pdHMpOwotICAgICAgICBtX2RlZmVycmVkRGVjb21taXRzLnNocmlu
aygwKTsKLSAgICB9Ci0KLSAgICBpZiAodmVyYm9zZSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIi0tYWZ0ZXIgcGFydGlhbCBzY2F2ZW5naW5nLS1cbiIpOwotICAgICAgICBkdW1wU3RhdHMo
KTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVxuIik7Ci0gICAgfQotCi0gICAgewotICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2so
bXV0ZXgoKSk7Ci0gICAgICAgIG1fbGFzdFBhcnRpYWxTY2F2ZW5nZVRpbWUgPSBzdGQ6OmNocm9u
bzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQogc2l6ZV90IFNjYXZl
bmdlcjo6ZnJlZWFibGVNZW1vcnkoKQogewogICAgIHNpemVfdCByZXN1bHQgPSAwOwpAQCAtNDMy
LDY5ICszMzIsNiBAQCB2b2lkIFNjYXZlbmdlcjo6dGhyZWFkUnVuTG9vcCgpCiAgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsK
ICAgICAgICAgfQogCi0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAgICAgICBlbnVtIGNs
YXNzIFNjYXZlbmdlTW9kZSB7Ci0gICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgUGFydGlh
bCwKLSAgICAgICAgICAgIEZ1bGwKLSAgICAgICAgfTsKLQotICAgICAgICBzaXplX3QgZnJlZWFi
bGVNZW1vcnkgPSB0aGlzLT5mcmVlYWJsZU1lbW9yeSgpOwotCi0gICAgICAgIFNjYXZlbmdlTW9k
ZSBzY2F2ZW5nZU1vZGUgPSBbJl0gewotICAgICAgICAgICAgYXV0byB0aW1lU2luY2VMYXN0RnVs
bFNjYXZlbmdlID0gdGhpcy0+dGltZVNpbmNlTGFzdEZ1bGxTY2F2ZW5nZSgpOwotICAgICAgICAg
ICAgYXV0byB0aW1lU2luY2VMYXN0UGFydGlhbFNjYXZlbmdlID0gdGhpcy0+dGltZVNpbmNlTGFz
dFBhcnRpYWxTY2F2ZW5nZSgpOwotICAgICAgICAgICAgYXV0byB0aW1lU2luY2VMYXN0U2NhdmVu
Z2UgPSBzdGQ6Om1pbih0aW1lU2luY2VMYXN0UGFydGlhbFNjYXZlbmdlLCB0aW1lU2luY2VMYXN0
RnVsbFNjYXZlbmdlKTsKLQotICAgICAgICAgICAgaWYgKGlzVW5kZXJNZW1vcnlQcmVzc3VyZSgp
ICYmIGZyZWVhYmxlTWVtb3J5ID4gMSAqIE1CICYmIHRpbWVTaW5jZUxhc3RTY2F2ZW5nZSA+IHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoNSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNjYXZl
bmdlTW9kZTo6RnVsbDsKLQotICAgICAgICAgICAgaWYgKCFtX2lzUHJvYmFibHlHcm93aW5nKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHRpbWVTaW5jZUxhc3RGdWxsU2NhdmVuZ2UgPCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzKDEwMDApICYmICFtX2lzSW5NaW5pTW9kZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFNjYXZlbmdlTW9kZTo6UGFydGlhbDsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gU2NhdmVuZ2VNb2RlOjpGdWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAobV9pc0luTWluaU1vZGUpIHsKLSAgICAgICAgICAgICAgICBpZiAodGltZVNpbmNlTGFzdEZ1
bGxTY2F2ZW5nZSA8IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMjAwKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFNjYXZlbmdlTW9kZTo6UGFydGlhbDsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gU2NhdmVuZ2VNb2RlOjpGdWxsOwotICAgICAgICAgICAgfQotCi0jaWYgQkNQVShYODZf
NjQpCi0gICAgICAgICAgICBhdXRvIHBhcnRpYWxTY2F2ZW5nZUludGVydmFsID0gc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kcygxMjAwMCk7Ci0jZWxzZQotICAgICAgICAgICAgYXV0byBwYXJ0aWFs
U2NhdmVuZ2VJbnRlcnZhbCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoODAwMCk7Ci0jZW5k
aWYKLSAgICAgICAgICAgIGlmICh0aW1lU2luY2VMYXN0U2NhdmVuZ2UgPCBwYXJ0aWFsU2NhdmVu
Z2VJbnRlcnZhbCkgewotICAgICAgICAgICAgICAgIC8vIFJhdGUgbGltaXQgcGFydGlhbCBzY2F2
ZW5nZXMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNjYXZlbmdlTW9kZTo6Tm9uZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmcmVlYWJsZU1lbW9yeSA8IDI1ICogTUIpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIFNjYXZlbmdlTW9kZTo6Tm9uZTsKLSAgICAgICAgICAgIGlmICg1
ICogZnJlZWFibGVNZW1vcnkgPCBmb290cHJpbnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
U2NhdmVuZ2VNb2RlOjpOb25lOwotICAgICAgICAgICAgcmV0dXJuIFNjYXZlbmdlTW9kZTo6UGFy
dGlhbDsKLSAgICAgICAgfSgpOwotCi0gICAgICAgIG1faXNQcm9iYWJseUdyb3dpbmcgPSBmYWxz
ZTsKLQotICAgICAgICBzd2l0Y2ggKHNjYXZlbmdlTW9kZSkgewotICAgICAgICBjYXNlIFNjYXZl
bmdlTW9kZTo6Tm9uZTogewotICAgICAgICAgICAgcnVuU29vbigpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTY2F2ZW5nZU1vZGU6OlBhcnRpYWw6IHsKLSAg
ICAgICAgICAgIHBhcnRpYWxTY2F2ZW5nZSgpOwotICAgICAgICAgICAgcnVuU29vbigpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTY2F2ZW5nZU1vZGU6OkZ1
bGw6IHsKLSAgICAgICAgICAgIHNjYXZlbmdlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICB9Ci0jZWxzZQogICAgICAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2Nr
Ojp0aW1lX3BvaW50IHN0YXJ0IHsgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkgfTsK
ICAgICAgICAgCiAgICAgICAgIHNjYXZlbmdlKCk7CkBAIC01MDYsMTcgKzM0MywyMSBAQCB2b2lk
IFNjYXZlbmdlcjo6dGhyZWFkUnVuTG9vcCgpCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
ZG91YmxlPihzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWljcm9zZWNv
bmRzPih0aW1lU3BlbnRTY2F2ZW5naW5nKS5jb3VudCgpKSAvIDEwMDApOwogICAgICAgICB9CiAK
LSAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gaW52ZXN0aWdhdGUgbWluaS1tb2RlJ3MgYWRq
dXN0bWVudC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMzk4NworICAgICAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIG5ld1dhaXRUaW1l
OworCiAgICAgICAgIGlmICghbV9pc0luTWluaU1vZGUpIHsKLSAgICAgICAgICAgIHRpbWVTcGVu
dFNjYXZlbmdpbmcgKj0gMTUwOwotICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cyBuZXdXYWl0VGltZSA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHM+KHRpbWVTcGVudFNjYXZlbmdpbmcpOwotICAgICAgICAgICAgbV93YWl0VGlt
ZSA9IHN0ZDo6bWluKHN0ZDo6bWF4KG5ld1dhaXRUaW1lLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzKDEwMCkpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwMDAwKSk7CisgICAgICAgICAg
ICB0aW1lU3BlbnRTY2F2ZW5naW5nICo9IHNfbmV3V2FpdE11bHRpcGxpZXI7CisgICAgICAgICAg
ICBuZXdXYWl0VGltZSA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHM+KHRpbWVTcGVudFNjYXZlbmdpbmcpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gRm9yIG1pbmkgbW9kZSwgd2UgdXNlIHRoZSBsYXN0IHZhbHVlIGFuZCBhZGp1
c3QgaXQgdG8gdGhlIG1pbiAvIG1heCB3YWl0IHRpbWVzLgorICAgICAgICAgICAgLy8gVGhpcyBl
bmRzIHVwIGJlaW5nIHRoZSBtaW5pbXVtIHdhaXQgdGltZS4KKyAgICAgICAgICAgIG5ld1dhaXRU
aW1lID0gbV93YWl0VGltZTsKICAgICAgICAgfQogCisgICAgICAgIG1fd2FpdFRpbWUgPSBzdGQ6
Om1pbihzdGQ6Om1heChuZXdXYWl0VGltZSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyhzX21p
bldhaXRUaW1lTWlsbGlzZWNvbmRzKSksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoc19tYXhX
YWl0VGltZU1pbGxpc2Vjb25kcykpOworCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJuZXcgd2FpdCB0aW1lICVsbGRtc1xuIiwgc3RhdGljX2Nhc3Q8
bG9uZyBsb25nIGludD4obV93YWl0VGltZS5jb3VudCgpKSk7Ci0jZW5kaWYKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuaAkocmV2aXNpb24gMjc4NjY2KQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTks
NyArNTksNiBAQCBwdWJsaWM6CiAgICAgYm9vbCB3aWxsUnVuU29vbigpIHsgcmV0dXJuIG1fc3Rh
dGUgPiBTdGF0ZTo6U2xlZXA7IH0KICAgICB2b2lkIHJ1blNvb24oKTsKICAgICAKLSAgICBCRVhQ
T1JUIHZvaWQgZGlkU3RhcnRHcm93aW5nKCk7CiAgICAgQkVYUE9SVCB2b2lkIHNjaGVkdWxlSWZV
bmRlck1lbW9yeVByZXNzdXJlKHNpemVfdCBieXRlcyk7CiAgICAgQkVYUE9SVCB2b2lkIHNjaGVk
dWxlKHNpemVfdCBieXRlcyk7CiAKQEAgLTkyLDE1ICs5MSwxMCBAQCBwcml2YXRlOgogICAgIHZv
aWQgc2V0VGhyZWFkTmFtZShjb25zdCBjaGFyKik7CiAKICAgICBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzIHRpbWVTaW5jZUxhc3RGdWxsU2NhdmVuZ2UoKTsKLSNpZiBCVVNFKFBBUlRJQUxfU0NB
VkVOR0UpCi0gICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lU2luY2VMYXN0UGFydGlh
bFNjYXZlbmdlKCk7Ci0gICAgdm9pZCBwYXJ0aWFsU2NhdmVuZ2UoKTsKLSNlbmRpZgogCiAgICAg
c3RkOjphdG9taWM8U3RhdGU+IG1fc3RhdGUgeyBTdGF0ZTo6U2xlZXAgfTsKICAgICBzaXplX3Qg
bV9zY2F2ZW5nZXJCeXRlcyB7IDAgfTsKICAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIG1f
d2FpdFRpbWU7Ci0gICAgYm9vbCBtX2lzUHJvYmFibHlHcm93aW5nIHsgZmFsc2UgfTsKICAgICBi
b29sIG1faXNJbk1pbmlNb2RlIHsgZmFsc2UgfTsKICAgICAKICAgICBNdXRleCBtX3NjYXZlbmdp
bmdNdXRleDsKQEAgLTEwOCwxNSArMTAyLDIyIEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnRocmVh
ZCBtX3RocmVhZDsKICAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG1f
bGFzdEZ1bGxTY2F2ZW5nZVRpbWUgeyBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSB9
OwotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Ns
b2NrOjp0aW1lX3BvaW50IG1fbGFzdFBhcnRpYWxTY2F2ZW5nZVRpbWUgeyBzdGQ6OmNocm9ubzo6
c3RlYWR5X2Nsb2NrOjpub3coKSB9OwotI2VuZGlmCiAKICNpZiBCT1MoREFSV0lOKQogICAgIGRp
c3BhdGNoX3NvdXJjZV90IG1fcHJlc3N1cmVIYW5kbGVyRGlzcGF0Y2hTb3VyY2U7CiAgICAgcW9z
X2NsYXNzX3QgbV9yZXF1ZXN0ZWRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyB7IFFPU19DTEFTU19V
U0VSX0lOSVRJQVRFRCB9OwogI2VuZGlmCiAgICAgCisjaWYgQlBMQVRGT1JNKE1BQykKKyAgICBj
b25zdCB1bnNpZ25lZCBzX25ld1dhaXRNdWx0aXBsaWVyID0gMzAwOworICAgIGNvbnN0IHVuc2ln
bmVkIHNfbWluV2FpdFRpbWVNaWxsaXNlY29uZHMgPSA3NTA7CisgICAgY29uc3QgdW5zaWduZWQg
c19tYXhXYWl0VGltZU1pbGxpc2Vjb25kcyA9IDIwMDAwOworI2Vsc2UKKyAgICBjb25zdCB1bnNp
Z25lZCBzX25ld1dhaXRNdWx0aXBsaWVyID0gMTUwOworICAgIGNvbnN0IHVuc2lnbmVkIHNfbWlu
V2FpdFRpbWVNaWxsaXNlY29uZHMgPSAxMDA7CisgICAgY29uc3QgdW5zaWduZWQgc19tYXhXYWl0
VGltZU1pbGxpc2Vjb25kcyA9IDEwMDAwOworI2VuZGlmCisKICAgICBWZWN0b3I8RGVmZXJyZWRE
ZWNvbW1pdD4gbV9kZWZlcnJlZERlY29tbWl0czsKICAgICBib29sIG1faXNFbmFibGVkIHsgdHJ1
ZSB9OwogfTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU21hbGxQYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbFBhZ2UuaAkocmV2aXNpb24gMjc4
NjY2KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbFBhZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNTEsMTEgKzUxLDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzUGh5c2ljYWxQYWdlcygp
IHsgcmV0dXJuIG1faGFzUGh5c2ljYWxQYWdlczsgfQogICAgIHZvaWQgc2V0SGFzUGh5c2ljYWxQ
YWdlcyhib29sIGhhc1BoeXNpY2FsUGFnZXMpIHsgbV9oYXNQaHlzaWNhbFBhZ2VzID0gaGFzUGh5
c2ljYWxQYWdlczsgfQogCi0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKICAgICBib29sIHVz
ZWRTaW5jZUxhc3RTY2F2ZW5nZSgpIHsgcmV0dXJuIG1fdXNlZFNpbmNlTGFzdFNjYXZlbmdlOyB9
CiAgICAgdm9pZCBjbGVhclVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpIHsgbV91c2VkU2luY2VMYXN0
U2NhdmVuZ2UgPSBmYWxzZTsgfQogICAgIHZvaWQgc2V0VXNlZFNpbmNlTGFzdFNjYXZlbmdlKCkg
eyBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5nZSA9IHRydWU7IH0KLSNlbmRpZgogCiAgICAgU21hbGxM
aW5lKiBiZWdpbigpOwogCkBAIC02NSw5ICs2Myw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
dW5zaWduZWQgY2hhciBtX2hhc0ZyZWVMaW5lczogMTsKICAgICB1bnNpZ25lZCBjaGFyIG1faGFz
UGh5c2ljYWxQYWdlczogMTsKLSNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQogICAgIHVuc2ln
bmVkIGNoYXIgbV91c2VkU2luY2VMYXN0U2NhdmVuZ2U6IDE7Ci0jZW5kaWYKICAgICB1bnNpZ25l
ZCBjaGFyIG1fcmVmQ291bnQ6IDc7CiAgICAgdW5zaWduZWQgY2hhciBtX3NpemVDbGFzczsKICAg
ICB1bnNpZ25lZCBjaGFyIG1fc2xpZGU7Cg==
</data>
<flag name="commit-queue"
          id="452649"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432096</attachid>
            <date>2021-06-23 15:20:59 -0700</date>
            <delta_ts>2021-07-02 13:03:09 -0700</delta_ts>
            <desc>Updated patch with fix</desc>
            <filename>226237-3.patch</filename>
            <type>text/plain</type>
            <size>38259</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3OTEzNCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDIxLTA2LTIzICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIFtibWFsbG9jXSBNYWtlIGFk
YXB0aXZlIHNjYXZlbmdpbmcgbW9yZSBwcmVjaXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYyMzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZWxhbmQgdGhlIGFkYXB0aXZlIHNjYXZlbmdlciBjaGFu
Z2UgZm9yIG1hY09TIHdpdGggZml4LgorCisgICAgICAgIFRoZSBidWcgaGFwcGVucyB3aGVuIGRl
Y29tbWl0dGluZyBsYXJnZSByYW5nZXMgdGhhdCBkb24ndCBoYXZlIHBoeXNpY2FsIHBhZ2VzLgor
ICAgICAgICBXZSdkIGNhbGwgSGVhcDo6ZGVjb21taXRMYXJnZVJhbmdlKCksIGJ1dCB3b3VsZCBv
bmx5IGFkZCB0aGUgcmFuZ2UgdG8gdGhlCisgICAgICAgIGRlY29tbWl0dGVyIGxpc3QgaWYgdGhl
cmUgd2VyZSBwaHlzaWNhbCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJhbmdlLgorICAgICAg
ICBXZSB3b3VsZCBzdGlsbCBwZXJmb3JtIGFsbCB0aGUgb3RoZXIgcHJvY2Vzc2luZyBvZiBhIGRl
Y29tbWl0dGVkIHJhbmdlLAorICAgICAgICBpbmNsdWRpbmcgc2V0dGluZyB0aGUgcmFuZ2UgYXMg
bm90IGVsZ2libGUgZm9yIGFsbG9jYXRpb24gb3IgbWVyZ2luZy4KKyAgICAgICAgSGFkIHRoZSBy
YW5nZSBiZWVuIGFkZGVkIHRvIHRoZSBkZWNvbW1pdHRlciBsaXN0LCB3ZSB3b3VsZCBoYXZlIHNl
dCB0aGUKKyAgICAgICAgcmFuZ2UgYXMgZWxnaWJsZSBhZnRlciB0aGUgcGh5c2ljYWwgcGFnZXMg
d2VyZSByZWxlYXNlZCB0byB0aGUgT1MuCisgICAgICAgIFRoZSByZXN1bHQgaXMgdGhhdCB0aGUg
cmFuZ2UgY291bGQgbmV2ZXIgYmUgYWxsb2NhdGVkLCBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIGEK
KyAgICAgICAgbGFyZ2VyIHJhbmdlIG1lcmdlZCB3aXRoIGFkamFjZW50IHJhbmdlcy4KKworICAg
ICAgICBUaGUgZml4IGlzIHRvIG9ubHkgcGVyZm9ybSBkZWNvbW1pdCBwcm9jZXNzaW5nIG9mIGxh
cmdlIHJhbmdlcyBpZiB0aGV5IGhhdmUKKyAgICAgICAgcGh5c2ljYWwgcGFnZXMuICBXZSBub3cg
Y2hlY2sgZm9yIHBoeXNpY2FsIHBhZ2VzIGJlZm9yZSBjYWxsaW5nIEhlYXA6OmRlY29tbWl0TGFy
Z2VSYW5nZSgpLgorICAgICAgICBGb3IgcmFuZ2VzIHRoYXQgZG9uJ3QgaGF2ZSBwaHlzaWNhbCBw
YWdlcywgdGhleSBjYW4gc3RheSBvbiB0aGUgZnJlZSBsaXN0IGFzCisgICAgICAgIGVsZ2libGUg
d2l0aG91dCBoYXZpbmcgdG8gcm91bmQgdHJpcCB0aHJvdWdoIGRlY29tbWl0IHByb2Nlc3Npbmcu
CisKKyAgICAgICAgTWFkZSBhIG1pbm9yIGNoYW5nZSB0byB0aGUgY2FsY3VsYXRpb24gb2YgdGhl
IHBoeXNpY2FsIGVuZCBvZiB0aGUgTGFyZ2VSYW5nZSBjcmVhdGVkCisgICAgICAgIGFuZCBhZGRl
ZCB0byB0aGUgZnJlZSBsaXN0IGluIEhlYXA6OmRlYWxsb2NhdGVTbWFsbENodW5rLiAgSWYgdGhl
IGxhc3QgcGFnZSBpbiB0aGUgY2h1bmsKKyAgICAgICAgaGFzIGEgcGh5c2ljYWwgcGFnZSwgd2Ug
c2V0IHRoZSBwaHlzaWNhbCBlbmQgb2YgdGhlIHJhbmdlIHRvIHRoZSBlbmQgb2YgdGhlIGNodW5r
LgorICAgICAgICBUaGlzIGlzIGZvciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBhbiB1bnVzYWJs
ZSBwYXJ0aWFsIHNtYWxsIHBhZ2UgYXQgdGhlIGVuZCBvZiB0aGUgY2h1bmsuCisKKyAgICAgICAg
KiBibWFsbG9jL0JQbGF0Zm9ybS5oOgorICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpIZWFwOjpkZWNvbW1pdExhcmdlUmFuZ2UpOgorICAgICAgICAoYm1hbGxv
Yzo6SGVhcDo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVTbWFs
bENodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVTbWFsbENodW5rKToK
KyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKToKKyAgICAgICAgKGJt
YWxsb2M6OkhlYXA6OnNwbGl0QW5kQWxsb2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6
YWxsb2NhdGVMYXJnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjp0cnlBbGxvY2F0ZUxhcmdl
Q2h1bmspOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6c2hyaW5rTGFyZ2UpOgorICAgICAgICAo
Ym1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZUxhcmdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6
OnNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL0hl
YXAuaDoKKyAgICAgICAgKiBibWFsbG9jL0lzb0RpcmVjdG9yeS5oOgorICAgICAgICAqIGJtYWxs
b2MvSXNvRGlyZWN0b3J5SW5saW5lcy5oOgorICAgICAgICAoYm1hbGxvYzo6cGFzc2VkTnVtUGFn
ZXM+Ojp0YWtlRmlyc3RFbGlnaWJsZSk6CisgICAgICAgIChibWFsbG9jOjpwYXNzZWROdW1QYWdl
cz46OnNjYXZlbmdlKToKKyAgICAgICAgKGJtYWxsb2M6OnBhc3NlZE51bVBhZ2VzPjo6c2NhdmVu
Z2VUb0hpZ2hXYXRlcm1hcmspOiBEZWxldGVkLgorICAgICAgICAqIGJtYWxsb2MvSXNvSGVhcElt
cGwuaDoKKyAgICAgICAgKiBibWFsbG9jL0lzb0hlYXBJbXBsSW5saW5lcy5oOgorICAgICAgICAo
Ym1hbGxvYzo6SXNvSGVhcEltcGw8Q29uZmlnPjo6c2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmspOiBE
ZWxldGVkLgorICAgICAgICAqIGJtYWxsb2MvSXNvU2hhcmVkSGVhcElubGluZXMuaDoKKyAgICAg
ICAgKGJtYWxsb2M6Oklzb1NoYXJlZEhlYXA6OmFsbG9jYXRlU2xvdyk6CisgICAgICAgICogYm1h
bGxvYy9MYXJnZU1hcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpMYXJnZU1hcDo6YWRkKToKKyAg
ICAgICAgKiBibWFsbG9jL0xhcmdlUmFuZ2UuaDoKKyAgICAgICAgKGJtYWxsb2M6OkxhcmdlUmFu
Z2U6OkxhcmdlUmFuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VSYW5nZTo6cGh5c2ljYWxF
bmQgY29uc3QpOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VSYW5nZTo6c2V0UGh5c2ljYWxFbmQp
OgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VSYW5nZTo6Y2xlYXJQaHlzaWNhbEVuZCk6CisgICAg
ICAgIChibWFsbG9jOjpMYXJnZVJhbmdlOjpzZXRVc2VkU2luY2VMYXN0U2NhdmVuZ2UpOgorICAg
ICAgICAoYm1hbGxvYzo6bWVyZ2UpOgorICAgICAgICAoYm1hbGxvYzo6TGFyZ2VSYW5nZTo6c3Bs
aXQgY29uc3QpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL1NjYXZl
bmdlci5jcHA6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OlNjYXZlbmdlcik6CisgICAg
ICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnNjaGVkdWxlSWZVbmRlck1lbW9yeVByZXNzdXJlKToK
KyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6c2NoZWR1bGUpOgorICAgICAgICAoYm1hbGxv
Yzo6U2NhdmVuZ2VyOjpzY2F2ZW5nZSk6CisgICAgICAgIChibWFsbG9jOjpTY2F2ZW5nZXI6OnRo
cmVhZFJ1bkxvb3ApOgorICAgICAgICAoYm1hbGxvYzo6U2NhdmVuZ2VyOjpkaWRTdGFydEdyb3dp
bmcpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6U2NhdmVuZ2VyOjp0aW1lU2luY2VMYXN0
UGFydGlhbFNjYXZlbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6
cGFydGlhbFNjYXZlbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBibWFsbG9jL1NjYXZlbmdlci5o
OgorICAgICAgICAqIGJtYWxsb2MvU21hbGxQYWdlLmg6CisgICAgICAgIChibWFsbG9jOjpTbWFs
bFBhZ2U6OnNldFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSk6CisKIDIwMjEtMDYtMjEgIEtpbW1vIEtp
bm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBtYWtlVW5pcXVlIGNhbm5v
dCBiZSB1c2VkIHRvIGluc3RhbnRpYXRlIGZ1bmN0aW9uLWxvY2FsIGNsYXNzZXMKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQlBsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9CUGxhdGZvcm0uaAkocmV2aXNpb24gMjc5MTM0KQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9CUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDEyICszMDks
NiBAQAogLyogVGhpcyBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcgd2hlbiBoYWNraW5nIG9uIGhvdyBi
bWFsbG9jIGNhbGN1bGF0ZXMgaXRzIHBoeXNpY2FsIGZvb3RwcmludC4gKi8KICNkZWZpbmUgRU5B
QkxFX1BIWVNJQ0FMX1BBR0VfTUFQIDAKIAotI2lmIEJQTEFURk9STShNQUMpCi0jZGVmaW5lIEJV
U0VfUEFSVElBTF9TQ0FWRU5HRSAxCi0jZWxzZQotI2RlZmluZSBCVVNFX1BBUlRJQUxfU0NBVkVO
R0UgMAotI2VuZGlmCi0KICNpZiAhZGVmaW5lZChCVVNFX1BSRUNPTVBVVEVEX0NPTlNUQU5UU19W
TVBBR0U0SykKICNkZWZpbmUgQlVTRV9QUkVDT01QVVRFRF9DT05TVEFOVFNfVk1QQUdFNEsgMQog
I2VuZGlmCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlzaW9uIDI3OTEzNCkKKysr
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcg
KzY1LDcgQEAgSGVhcDo6SGVhcChIZWFwS2luZCBraW5kLCBMb2NrSG9sZGVyJikKICAgICAgICAg
bV9naWdhY2FnZVNpemUgPSBzaXplOwogICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcm91bmRE
b3duVG9NdWx0aXBsZU9mKHZtUGFnZVNpemUoKSwgcmFuZG9tWzFdICUgKGdpZ2FjYWdlU2l6ZSAt
IHNpemUpKTsKICAgICAgICAgdm9pZCogYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KGdpZ2FjYWdlQmFzZVB0cikgKyBvZmZzZXQ7Ci0gICAgICAgIG1fbGFyZ2VGcmVlLmFk
ZChMYXJnZVJhbmdlKGJhc2UsIHNpemUsIDAsIDApKTsKKyAgICAgICAgbV9sYXJnZUZyZWUuYWRk
KExhcmdlUmFuZ2UoYmFzZSwgc2l6ZSwgMCwgMCwgYmFzZSkpOwogICAgIH0KICNlbmRpZgogICAg
IApAQCAtMTA2LDM3ICsxMDYsMzQgQEAgdm9pZCBIZWFwOjptYXJrQWxsTGFyZ2VBc0VsaWdpYmls
ZShjb25zdAogCiB2b2lkIEhlYXA6OmRlY29tbWl0TGFyZ2VSYW5nZShVbmlxdWVMb2NrSG9sZGVy
JiwgTGFyZ2VSYW5nZSYgcmFuZ2UsIEJ1bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIpCiB7CisgICAg
QkFTU0VSVChyYW5nZS5oYXNQaHlzaWNhbFBhZ2VzKCkpOworCiAgICAgbV9mb290cHJpbnQgLT0g
cmFuZ2UudG90YWxQaHlzaWNhbFNpemUoKTsKICAgICBtX2ZyZWVhYmxlTWVtb3J5IC09IHJhbmdl
LnRvdGFsUGh5c2ljYWxTaXplKCk7Ci0gICAgZGVjb21taXR0ZXIuYWRkTGF6eShyYW5nZS5iZWdp
bigpLCByYW5nZS5zaXplKCkpOworICAgIGRlY29tbWl0dGVyLmFkZExhenkocmFuZ2UuYmVnaW4o
KSwgcmFuZ2UucGh5c2ljYWxFbmQoKSAtIHJhbmdlLmJlZ2luKCkpOwogICAgIG1faGFzUGVuZGlu
Z0RlY29tbWl0cyA9IHRydWU7CiAgICAgcmFuZ2Uuc2V0U3RhcnRQaHlzaWNhbFNpemUoMCk7CiAg
ICAgcmFuZ2Uuc2V0VG90YWxQaHlzaWNhbFNpemUoMCk7CisgICAgcmFuZ2UuY2xlYXJQaHlzaWNh
bEVuZCgpOwogICAgIEJBU1NFUlQocmFuZ2UuaXNFbGlnaWJpbGUoKSk7CiAgICAgcmFuZ2Uuc2V0
RWxpZ2libGUoZmFsc2UpOwotI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUCAKKyNpZiBFTkFC
TEVfUEhZU0lDQUxfUEFHRV9NQVAKICAgICBtX3BoeXNpY2FsUGFnZU1hcC5kZWNvbW1pdChyYW5n
ZS5iZWdpbigpLCByYW5nZS5zaXplKCkpOwogI2VuZGlmCiB9CiAKLSNpZiBCVVNFKFBBUlRJQUxf
U0NBVkVOR0UpCi12b2lkIEhlYXA6OnNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvY2ssIEJ1
bGtEZWNvbW1pdCYgZGVjb21taXR0ZXIpCi0jZWxzZQogdm9pZCBIZWFwOjpzY2F2ZW5nZShVbmlx
dWVMb2NrSG9sZGVyJiBsb2NrLCBCdWxrRGVjb21taXQmIGRlY29tbWl0dGVyLCBzaXplX3QmIGRl
ZmVycmVkRGVjb21taXRzKQotI2VuZGlmCiB7CiAgICAgZm9yIChhdXRvJiBsaXN0IDogbV9mcmVl
UGFnZXMpIHsKICAgICAgICAgZm9yIChhdXRvKiBjaHVuayA6IGxpc3QpIHsKICAgICAgICAgICAg
IGZvciAoYXV0byogcGFnZSA6IGNodW5rLT5mcmVlUGFnZXMoKSkgewogICAgICAgICAgICAgICAg
IGlmICghcGFnZS0+aGFzUGh5c2ljYWxQYWdlcygpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQogICAgICAgICAgICAgICAgIGlmIChw
YWdlLT51c2VkU2luY2VMYXN0U2NhdmVuZ2UoKSkgewogICAgICAgICAgICAgICAgICAgICBwYWdl
LT5jbGVhclVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpOwogICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZERlY29tbWl0cysrOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICB9Ci0jZW5kaWYKIAogICAgICAgICAgICAgICAgIHNpemVfdCBwYWdlU2l6ZSA9IGJt
YWxsb2M6OnBhZ2VTaXplKCZsaXN0IC0gJm1fZnJlZVBhZ2VzWzBdKTsKICAgICAgICAgICAgICAg
ICBzaXplX3QgZGVjb21taXRTaXplID0gcGh5c2ljYWxQYWdlU2l6ZVNsb3BweShwYWdlLT5iZWdp
bigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7CkBAIC0xNTcsMzYgKzE1NCwxNyBAQCB2b2lkIEhlYXA6
OnNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImIGxvCiAgICAgfQogCiAgICAgZm9yIChMYXJnZVJh
bmdlJiByYW5nZSA6IG1fbGFyZ2VGcmVlKSB7Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQot
ICAgICAgICBtX2hpZ2hXYXRlcm1hcmsgPSBzdGQ6Om1pbihtX2hpZ2hXYXRlcm1hcmssIHN0YXRp
Y19jYXN0PHZvaWQqPihyYW5nZS5iZWdpbigpKSk7Ci0jZWxzZQorICAgICAgICBpZiAoIXJhbmdl
Lmhhc1BoeXNpY2FsUGFnZXMoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAo
cmFuZ2UudXNlZFNpbmNlTGFzdFNjYXZlbmdlKCkpIHsKICAgICAgICAgICAgIHJhbmdlLmNsZWFy
VXNlZFNpbmNlTGFzdFNjYXZlbmdlKCk7CiAgICAgICAgICAgICBkZWZlcnJlZERlY29tbWl0cysr
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICBkZWNv
bW1pdExhcmdlUmFuZ2UobG9jaywgcmFuZ2UsIGRlY29tbWl0dGVyKTsKLSAgICB9CiAKLSNpZiBC
VVNFKFBBUlRJQUxfU0NBVkVOR0UpCi0gICAgbV9mcmVlYWJsZU1lbW9yeSA9IDA7Ci0jZW5kaWYK
LX0KLQotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLXZvaWQgSGVhcDo6c2NhdmVuZ2VUb0hp
Z2hXYXRlcm1hcmsoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgQnVsa0RlY29tbWl0JiBkZWNvbW1p
dHRlcikKLXsKLSAgICB2b2lkKiBuZXdIaWdoV2F0ZXJNYXJrID0gbnVsbHB0cjsKLSAgICBmb3Ig
KExhcmdlUmFuZ2UmIHJhbmdlIDogbV9sYXJnZUZyZWUpIHsKLSAgICAgICAgaWYgKHJhbmdlLmJl
Z2luKCkgPD0gbV9oaWdoV2F0ZXJtYXJrKQotICAgICAgICAgICAgbmV3SGlnaFdhdGVyTWFyayA9
IHN0ZDo6bWluKG5ld0hpZ2hXYXRlck1hcmssIHN0YXRpY19jYXN0PHZvaWQqPihyYW5nZS5iZWdp
bigpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRlY29tbWl0TGFyZ2VSYW5nZShsb2Nr
LCByYW5nZSwgZGVjb21taXR0ZXIpOworICAgICAgICBkZWNvbW1pdExhcmdlUmFuZ2UobG9jaywg
cmFuZ2UsIGRlY29tbWl0dGVyKTsKICAgICB9Ci0gICAgbV9oaWdoV2F0ZXJtYXJrID0gbmV3SGln
aFdhdGVyTWFyazsKIH0KLSNlbmRpZgogCiB2b2lkIEhlYXA6OmRlYWxsb2NhdGVMaW5lQ2FjaGUo
VW5pcXVlTG9ja0hvbGRlciYsIExpbmVDYWNoZSYgbGluZUNhY2hlKQogewpAQCAtMjE4LDI1ICsx
OTYsMTQgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmsoVW5pcXVlTG9jawogCiAgICAg
ICAgIG1fb2JqZWN0VHlwZXMuc2V0KGxvY2ssIGNodW5rLCBPYmplY3RUeXBlOjpTbWFsbCk7CiAK
LSAgICAgICAgc2l6ZV90IGFjY291bnRlZEluRnJlZWFibGUgPSAwOwogICAgICAgICBmb3JFYWNo
UGFnZShjaHVuaywgcGFnZVNpemUsIFsmXShTbWFsbFBhZ2UqIHBhZ2UpIHsKICAgICAgICAgICAg
IHBhZ2UtPnNldEhhc1BoeXNpY2FsUGFnZXModHJ1ZSk7Ci0jaWYgIUJVU0UoUEFSVElBTF9TQ0FW
RU5HRSkKICAgICAgICAgICAgIHBhZ2UtPnNldFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpOwotI2Vu
ZGlmCiAgICAgICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7CiAgICAg
ICAgICAgICBjaHVuay0+ZnJlZVBhZ2VzKCkucHVzaChwYWdlKTsKLSAgICAgICAgICAgIGFjY291
bnRlZEluRnJlZWFibGUgKz0gcGFnZVNpemU7CiAgICAgICAgIH0pOwogCi0gICAgICAgIG1fZnJl
ZWFibGVNZW1vcnkgKz0gYWNjb3VudGVkSW5GcmVlYWJsZTsKLQotICAgICAgICBhdXRvIG1ldGFk
YXRhU2l6ZSA9IENodW5rOjptZXRhZGF0YVNpemUocGFnZVNpemUpOwotICAgICAgICB2bURlYWxs
b2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KGNodW5rLT5hZGRyZXNzKHNpemVvZihDaHVuaykpLCBt
ZXRhZGF0YVNpemUgLSBzaXplb2YoQ2h1bmspKTsKLQotICAgICAgICBhdXRvIGRlY29tbWl0U2l6
ZSA9IGNodW5rU2l6ZSAtIG1ldGFkYXRhU2l6ZSAtIGFjY291bnRlZEluRnJlZWFibGU7Ci0gICAg
ICAgIGlmIChkZWNvbW1pdFNpemUgPiAwKQotICAgICAgICAgICAgdm1EZWFsbG9jYXRlUGh5c2lj
YWxQYWdlc1Nsb3BweShjaHVuay0+YWRkcmVzcyhjaHVua1NpemUgLSBkZWNvbW1pdFNpemUpLCBk
ZWNvbW1pdFNpemUpOworICAgICAgICBtX2ZyZWVhYmxlTWVtb3J5ICs9IGNodW5rU2l6ZTsKIAog
ICAgICAgICBtX3NjYXZlbmdlci0+c2NoZWR1bGUoMCk7CiAKQEAgLTI1MywyNCArMjIwLDI4IEBA
IHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsQ2h1bmsoVW5pcXVlTG8KICAgICAKICAgICBzaXpl
X3Qgc2l6ZSA9IG1fbGFyZ2VBbGxvY2F0ZWQucmVtb3ZlKGNodW5rKTsKICAgICBzaXplX3QgdG90
YWxQaHlzaWNhbFNpemUgPSBzaXplOworICAgIHNpemVfdCBjaHVua1BhZ2VTaXplID0gcGFnZVNp
emUocGFnZUNsYXNzKTsKKyAgICBTbWFsbFBhZ2UqIGZpcnN0UGFnZVdpdGhvdXRQaHlzaWNhbFBh
Z2VzID0gbnVsbHB0cjsKIAotICAgIHNpemVfdCBhY2NvdW50ZWRJbkZyZWVhYmxlID0gMDsKLQot
ICAgIGJvb2wgaGFzUGh5c2ljYWxQYWdlcyA9IHRydWU7Ci0gICAgZm9yRWFjaFBhZ2UoY2h1bmss
IHBhZ2VTaXplKHBhZ2VDbGFzcyksIFsmXShTbWFsbFBhZ2UqIHBhZ2UpIHsKKyAgICB2b2lkKiBw
aHlzaWNhbEVuZCA9IGNodW5rLT5hZGRyZXNzKGNodW5rLT5tZXRhZGF0YVNpemUoY2h1bmtQYWdl
U2l6ZSkpOworICAgIGJvb2wgbGFzdFBhZ2VIYXNQaHlzaWNhbFBhZ2VzID0gZmFsc2U7CisgICAg
Zm9yRWFjaFBhZ2UoY2h1bmssIGNodW5rUGFnZVNpemUsIFsmXShTbWFsbFBhZ2UqIHBhZ2UpIHsK
ICAgICAgICAgc2l6ZV90IHBoeXNpY2FsU2l6ZSA9IHBoeXNpY2FsUGFnZVNpemVTbG9wcHkocGFn
ZS0+YmVnaW4oKS0+YmVnaW4oKSwgcGFnZVNpemUocGFnZUNsYXNzKSk7CiAgICAgICAgIGlmICgh
cGFnZS0+aGFzUGh5c2ljYWxQYWdlcygpKSB7CiAgICAgICAgICAgICB0b3RhbFBoeXNpY2FsU2l6
ZSAtPSBwaHlzaWNhbFNpemU7Ci0gICAgICAgICAgICBoYXNQaHlzaWNhbFBhZ2VzID0gZmFsc2U7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYWNjb3VudGVkSW5GcmVlYWJsZSArPSBwaHlz
aWNhbFNpemU7CisgICAgICAgICAgICBsYXN0UGFnZUhhc1BoeXNpY2FsUGFnZXMgPSBmYWxzZTsK
KyAgICAgICAgICAgIGlmICghZmlyc3RQYWdlV2l0aG91dFBoeXNpY2FsUGFnZXMpCisgICAgICAg
ICAgICAgICAgZmlyc3RQYWdlV2l0aG91dFBoeXNpY2FsUGFnZXMgPSBwYWdlOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgcGh5c2ljYWxFbmQgPSBwYWdlLT5iZWdpbigpLT5iZWdpbigp
ICsgcGh5c2ljYWxTaXplOworICAgICAgICAgICAgbGFzdFBhZ2VIYXNQaHlzaWNhbFBhZ2VzID0g
dHJ1ZTsKKyAgICAgICAgfQogICAgIH0pOwogCi0gICAgbV9mcmVlYWJsZU1lbW9yeSAtPSBhY2Nv
dW50ZWRJbkZyZWVhYmxlOwotICAgIG1fZnJlZWFibGVNZW1vcnkgKz0gdG90YWxQaHlzaWNhbFNp
emU7Ci0KLSAgICBzaXplX3Qgc3RhcnRQaHlzaWNhbFNpemUgPSBoYXNQaHlzaWNhbFBhZ2VzID8g
c2l6ZSA6IDA7Ci0gICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFuZ2UoY2h1bmssIHNpemUsIHN0
YXJ0UGh5c2ljYWxTaXplLCB0b3RhbFBoeXNpY2FsU2l6ZSkpOworICAgIHNpemVfdCBzdGFydFBo
eXNpY2FsU2l6ZSA9IGZpcnN0UGFnZVdpdGhvdXRQaHlzaWNhbFBhZ2VzID8gZmlyc3RQYWdlV2l0
aG91dFBoeXNpY2FsUGFnZXMtPmJlZ2luKCktPmJlZ2luKCkgLSBjaHVuay0+Ynl0ZXMoKSA6IHNp
emU7CisgICAgcGh5c2ljYWxFbmQgPSBsYXN0UGFnZUhhc1BoeXNpY2FsUGFnZXMgPyBjaHVuay0+
YWRkcmVzcyhzaXplKSA6IHBoeXNpY2FsRW5kOworICAgIAorICAgIG1fbGFyZ2VGcmVlLmFkZChM
YXJnZVJhbmdlKGNodW5rLCBzaXplLCBzdGFydFBoeXNpY2FsU2l6ZSwgdG90YWxQaHlzaWNhbFNp
emUsIHBoeXNpY2FsRW5kKSk7CiB9CiAKIFNtYWxsUGFnZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBh
Z2UoVW5pcXVlTG9ja0hvbGRlciYgbG9jaywgc2l6ZV90IHNpemVDbGFzcywgTGluZUNhY2hlJiBs
aW5lQ2FjaGUsIEZhaWx1cmVBY3Rpb24gYWN0aW9uKQpAQCAtMjgzLDggKzI1NCw2IEBAIFNtYWxs
UGFnZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2UoVW5pcXUKICAgICBpZiAoIW1fbGluZUNhY2hl
W3NpemVDbGFzc10uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbV9saW5lQ2FjaGVbc2l6ZUNs
YXNzXS5wb3BGcm9udCgpOwogCi0gICAgbV9zY2F2ZW5nZXItPmRpZFN0YXJ0R3Jvd2luZygpOwot
ICAgIAogICAgIFNtYWxsUGFnZSogcGFnZSA9IFsmXSgpIC0+IFNtYWxsUGFnZSogewogICAgICAg
ICBzaXplX3QgcGFnZUNsYXNzID0gbV9jb25zdGFudHMucGFnZUNsYXNzKHNpemVDbGFzcyk7CiAg
ICAgICAgIApAQCAtMzE0LDkgKzI4Myw3IEBAIFNtYWxsUGFnZSogSGVhcDo6YWxsb2NhdGVTbWFs
bFBhZ2UoVW5pcXUKICAgICAgICAgICAgIG1fcGh5c2ljYWxQYWdlTWFwLmNvbW1pdChwYWdlLT5i
ZWdpbigpLT5iZWdpbigpLCBwYWdlU2l6ZSk7CiAjZW5kaWYKICAgICAgICAgfQotI2lmICFCVVNF
KFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgICAgIHBhZ2UtPnNldFVzZWRTaW5jZUxhc3RTY2F2ZW5n
ZSgpOwotI2VuZGlmCiAKICAgICAgICAgcmV0dXJuIHBhZ2U7CiAgICAgfSgpOwpAQCAtNTI1LDYg
KzQ5Miw3IEBAIExhcmdlUmFuZ2UgSGVhcDo6c3BsaXRBbmRBbGxvY2F0ZShVbmlxdWUKICAgICAg
ICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkocmFuZ2UuYmVnaW4oKSArIHJhbmdlLnN0
YXJ0UGh5c2ljYWxTaXplKCksIHJhbmdlLnNpemUoKSAtIHJhbmdlLnN0YXJ0UGh5c2ljYWxTaXpl
KCkpOwogICAgICAgICByYW5nZS5zZXRTdGFydFBoeXNpY2FsU2l6ZShyYW5nZS5zaXplKCkpOwog
ICAgICAgICByYW5nZS5zZXRUb3RhbFBoeXNpY2FsU2l6ZShyYW5nZS5zaXplKCkpOworICAgICAg
ICByYW5nZS5zZXRQaHlzaWNhbEVuZChyYW5nZS5iZWdpbigpICsgcmFuZ2Uuc2l6ZSgpKTsKICNp
ZiBFTkFCTEVfUEhZU0lDQUxfUEFHRV9NQVAgCiAgICAgICAgIG1fcGh5c2ljYWxQYWdlTWFwLmNv
bW1pdChyYW5nZS5iZWdpbigpLCByYW5nZS5zaXplKCkpOwogI2VuZGlmCkBAIC01NjAsOCArNTI4
LDYgQEAgdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShVbmlxdWVMb2NrSG9sZAogCiAgICAgQkFT
U0VSVChpc1Bvd2VyT2ZUd28oYWxpZ25tZW50KSk7CiAgICAgCi0gICAgbV9zY2F2ZW5nZXItPmRp
ZFN0YXJ0R3Jvd2luZygpOwotICAgIAogICAgIHNpemVfdCByb3VuZGVkU2l6ZSA9IHNpemUgPyBy
b3VuZFVwVG9NdWx0aXBsZU9mKGxhcmdlQWxpZ25tZW50LCBzaXplKSA6IGxhcmdlQWxpZ25tZW50
OwogICAgIEFTU0VSVF9PUl9SRVRVUk5fT05fRkFJTFVSRShyb3VuZGVkU2l6ZSA+PSBzaXplKTsg
Ly8gQ2hlY2sgZm9yIG92ZXJmbG93CiAgICAgc2l6ZSA9IHJvdW5kZWRTaXplOwpAQCAtNTkwLDkg
KzU1Niw2IEBAIHZvaWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2UoVW5pcXVlTG9ja0hvbGQKICAgICBt
X2ZyZWVhYmxlTWVtb3J5IC09IHJhbmdlLnRvdGFsUGh5c2ljYWxTaXplKCk7CiAKICAgICB2b2lk
KiByZXN1bHQgPSBzcGxpdEFuZEFsbG9jYXRlKGxvY2ssIHJhbmdlLCBhbGlnbm1lbnQsIHNpemUp
LmJlZ2luKCk7Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAgIG1faGlnaFdhdGVybWFy
ayA9IHN0ZDo6bWF4KG1faGlnaFdhdGVybWFyaywgcmVzdWx0KTsKLSNlbmRpZgogICAgIEFTU0VS
VF9PUl9SRVRVUk5fT05fRkFJTFVSRShyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiAKQEAg
LTYyMSw3ICs1ODQsNyBAQCBMYXJnZVJhbmdlIEhlYXA6OnRyeUFsbG9jYXRlTGFyZ2VDaHVuayhz
CiAgICAgUGVyUHJvY2Vzczxab25lPjo6Z2V0KCktPmFkZFJhbmdlKFJhbmdlKG1lbW9yeSwgc2l6
ZSkpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gTGFyZ2VSYW5nZShtZW1vcnksIHNpemUsIDAsIDAp
OworICAgIHJldHVybiBMYXJnZVJhbmdlKG1lbW9yeSwgc2l6ZSwgMCwgMCwgbWVtb3J5KTsKIH0K
IAogc2l6ZV90IEhlYXA6OmxhcmdlU2l6ZShVbmlxdWVMb2NrSG9sZGVyJiwgdm9pZCogb2JqZWN0
KQpAQCAtNjM0LDcgKzU5Nyw3IEBAIHZvaWQgSGVhcDo6c2hyaW5rTGFyZ2UoVW5pcXVlTG9ja0hv
bGRlciYKICAgICBCQVNTRVJUKG9iamVjdC5zaXplKCkgPiBuZXdTaXplKTsKIAogICAgIHNpemVf
dCBzaXplID0gbV9sYXJnZUFsbG9jYXRlZC5yZW1vdmUob2JqZWN0LmJlZ2luKCkpOwotICAgIExh
cmdlUmFuZ2UgcmFuZ2UgPSBMYXJnZVJhbmdlKG9iamVjdCwgc2l6ZSwgc2l6ZSk7CisgICAgTGFy
Z2VSYW5nZSByYW5nZSA9IExhcmdlUmFuZ2Uob2JqZWN0LCBzaXplLCBzaXplLCBvYmplY3QuYmVn
aW4oKSArIHNpemUpOwogICAgIHNwbGl0QW5kQWxsb2NhdGUobG9jaywgcmFuZ2UsIGFsaWdubWVu
dCwgbmV3U2l6ZSk7CiAKICAgICBtX3NjYXZlbmdlci0+c2NoZWR1bGUoc2l6ZSk7CkBAIC02NDMs
NyArNjA2LDcgQEAgdm9pZCBIZWFwOjpzaHJpbmtMYXJnZShVbmlxdWVMb2NrSG9sZGVyJgogdm9p
ZCBIZWFwOjpkZWFsbG9jYXRlTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYsIHZvaWQqIG9iamVjdCkK
IHsKICAgICBzaXplX3Qgc2l6ZSA9IG1fbGFyZ2VBbGxvY2F0ZWQucmVtb3ZlKG9iamVjdCk7Ci0g
ICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFuZ2Uob2JqZWN0LCBzaXplLCBzaXplLCBzaXplKSk7
CisgICAgbV9sYXJnZUZyZWUuYWRkKExhcmdlUmFuZ2Uob2JqZWN0LCBzaXplLCBzaXplLCBzaXpl
LCBzdGF0aWNfY2FzdDxjaGFyKj4ob2JqZWN0KSArIHNpemUpKTsKICAgICBtX2ZyZWVhYmxlTWVt
b3J5ICs9IHNpemU7CiAgICAgbV9zY2F2ZW5nZXItPnNjaGVkdWxlKHNpemUpOwogfQpJbmRleDog
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9IZWFwLmgJKHJldmlzaW9uIDI3OTEzNCkKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCwxMiArNzQsNyBAQCBwdWJsaWM6CiAg
ICAgc2l6ZV90IGxhcmdlU2l6ZShVbmlxdWVMb2NrSG9sZGVyJiwgdm9pZCopOwogICAgIHZvaWQg
c2hyaW5rTGFyZ2UoVW5pcXVlTG9ja0hvbGRlciYsIGNvbnN0IFJhbmdlJiwgc2l6ZV90KTsKIAot
I2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICB2b2lkIHNjYXZlbmdlVG9IaWdoV2F0ZXJt
YXJrKFVuaXF1ZUxvY2tIb2xkZXImLCBCdWxrRGVjb21taXQmKTsKLSAgICB2b2lkIHNjYXZlbmdl
KFVuaXF1ZUxvY2tIb2xkZXImLCBCdWxrRGVjb21taXQmKTsKLSNlbHNlCiAgICAgdm9pZCBzY2F2
ZW5nZShVbmlxdWVMb2NrSG9sZGVyJiwgQnVsa0RlY29tbWl0Jiwgc2l6ZV90JiBkZWZlcnJlZERl
Y29tbWl0cyk7Ci0jZW5kaWYKICAgICB2b2lkIHNjYXZlbmdlKFVuaXF1ZUxvY2tIb2xkZXImLCBC
dWxrRGVjb21taXQmLCBzaXplX3QmIGZyZWVkLCBzaXplX3QgZ29hbCk7CiAKICAgICBzaXplX3Qg
ZnJlZWFibGVNZW1vcnkoVW5pcXVlTG9ja0hvbGRlciYpOwpAQCAtMTQ3LDEwICsxNDIsNiBAQCBw
cml2YXRlOgogI2lmIEVOQUJMRV9QSFlTSUNBTF9QQUdFX01BUCAKICAgICBQaHlzaWNhbFBhZ2VN
YXAgbV9waHlzaWNhbFBhZ2VNYXA7CiAjZW5kaWYKLSAgICAKLSNpZiBCVVNFKFBBUlRJQUxfU0NB
VkVOR0UpCi0gICAgdm9pZCogbV9oaWdoV2F0ZXJtYXJrIHsgbnVsbHB0ciB9OwotI2VuZGlmCiB9
OwogCiBpbmxpbmUgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcygKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvRGlyZWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9Jc29EaXJlY3RvcnkuaAkocmV2aXNpb24gMjc5MTM0KQorKysgU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29EaXJlY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNzYs
OSArNzYsNiBAQCBwdWJsaWM6CiAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBlbXB0eSBhbmQgY29t
bWl0dGVkIHBhZ2VzLCBhbmQgcHV0IHRoZW0gaW50byB0aGUgdmVjdG9yLiBUaGlzIGFsc28gcmVj
b3JkcyB0aGUKICAgICAvLyBwYWdlcyBhcyBiZWluZyBkZWNvbW1pdHRlZC4gSXQncyB0aGUgY2Fs
bGVyJ3Mgam9iIHRvIGRvIHRoZSBhY3R1YWwgZGVjb21taXR0aW5nLgogICAgIHZvaWQgc2NhdmVu
Z2UoY29uc3QgTG9ja0hvbGRlciYsIFZlY3RvcjxEZWZlcnJlZERlY29tbWl0PiYpOwotI2lmIEJV
U0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICB2b2lkIHNjYXZlbmdlVG9IaWdoV2F0ZXJtYXJrKGNv
bnN0IExvY2tIb2xkZXImLCBWZWN0b3I8RGVmZXJyZWREZWNvbW1pdD4mKTsKLSNlbmRpZgogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2hDb21taXR0ZWRQYWdl
KGNvbnN0IExvY2tIb2xkZXImLCBjb25zdCBGdW5jJik7CkBAIC05Myw5ICs5MCw2IEBAIHByaXZh
dGU6CiAgICAgQml0czxudW1QYWdlcz4gbV9lbXB0eTsKICAgICBCaXRzPG51bVBhZ2VzPiBtX2Nv
bW1pdHRlZDsKICAgICB1bnNpZ25lZCBtX2ZpcnN0RWxpZ2libGVPckRlY29tbWl0dGVkIHsgMCB9
OwotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICB1bnNpZ25lZCBtX2hpZ2hXYXRlcm1h
cmsgeyAwIH07Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvRGlyZWN0b3J5SW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvRGlyZWN0b3J5SW5saW5lcy5oCShyZXZpc2lvbiAy
NzkxMzQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0RpcmVjdG9yeUlubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsMTIgKzUwLDcgQEAgRWxpZ2liaWxpdHlSZXN1bHQ8Q29uZmln
PiBJc29EaXJlY3Rvcnk8QwogICAgIGlmIChwYWdlSW5kZXggPj0gbnVtUGFnZXMpCiAgICAgICAg
IHJldHVybiBFbGlnaWJpbGl0eUtpbmQ6OkZ1bGw7CiAKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVO
R0UpCi0gICAgbV9oaWdoV2F0ZXJtYXJrID0gc3RkOjptYXgocGFnZUluZGV4LCBtX2hpZ2hXYXRl
cm1hcmspOwotI2VuZGlmCi0KICAgICBTY2F2ZW5nZXImIHNjYXZlbmdlciA9ICpTY2F2ZW5nZXI6
OmdldCgpOwotICAgIHNjYXZlbmdlci5kaWRTdGFydEdyb3dpbmcoKTsKICAgICAKICAgICBJc29Q
YWdlPENvbmZpZz4qIHBhZ2UgPSBtX3BhZ2VzW3BhZ2VJbmRleF0uZ2V0KCk7CiAgICAgCkBAIC0x
NDYsMjMgKzE0MSw3IEBAIHZvaWQgSXNvRGlyZWN0b3J5PENvbmZpZywgcGFzc2VkTnVtUGFnZXMK
ICAgICAgICAgWyZdIChzaXplX3QgaW5kZXgpIHsKICAgICAgICAgICAgIHNjYXZlbmdlUGFnZShs
b2NrZXIsIGluZGV4LCBkZWNvbW1pdHMpOwogICAgICAgICB9KTsKLSNpZiBCVVNFKFBBUlRJQUxf
U0NBVkVOR0UpCi0gICAgbV9oaWdoV2F0ZXJtYXJrID0gMDsKLSNlbmRpZgotfQotCi0jaWYgQlVT
RShQQVJUSUFMX1NDQVZFTkdFKQotdGVtcGxhdGU8dHlwZW5hbWUgQ29uZmlnLCB1bnNpZ25lZCBw
YXNzZWROdW1QYWdlcz4KLXZvaWQgSXNvRGlyZWN0b3J5PENvbmZpZywgcGFzc2VkTnVtUGFnZXM+
OjpzY2F2ZW5nZVRvSGlnaFdhdGVybWFyayhjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIFZlY3Rv
cjxEZWZlcnJlZERlY29tbWl0PiYgZGVjb21taXRzKQotewotICAgIChtX2VtcHR5ICYgbV9jb21t
aXR0ZWQpLmZvckVhY2hTZXRCaXQoCi0gICAgICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7Ci0gICAg
ICAgICAgICBpZiAoaW5kZXggPiBtX2hpZ2hXYXRlcm1hcmspCi0gICAgICAgICAgICAgICAgc2Nh
dmVuZ2VQYWdlKGxvY2tlciwgaW5kZXgsIGRlY29tbWl0cyk7Ci0gICAgICAgIH0pOwotICAgIG1f
aGlnaFdhdGVybWFyayA9IDA7CiB9Ci0jZW5kaWYKIAogdGVtcGxhdGU8dHlwZW5hbWUgQ29uZmln
LCB1bnNpZ25lZCBwYXNzZWROdW1QYWdlcz4KIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0hlYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29IZWFwSW1wbC5oCShyZXZpc2lvbiAyNzkxMzQpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0hlYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDkgKzQ5LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfklzb0hlYXBJbXBsQmFzZSgpOwogICAg
IAogICAgIHZpcnR1YWwgdm9pZCBzY2F2ZW5nZShWZWN0b3I8RGVmZXJyZWREZWNvbW1pdD4mKSA9
IDA7Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAgIHZpcnR1YWwgdm9pZCBzY2F2ZW5n
ZVRvSGlnaFdhdGVybWFyayhWZWN0b3I8RGVmZXJyZWREZWNvbW1pdD4mKSA9IDA7Ci0jZW5kaWYK
ICAgICAKICAgICB2b2lkIHNjYXZlbmdlTm93KCk7CiAgICAgc3RhdGljIHZvaWQgZmluaXNoU2Nh
dmVuZ2luZyhWZWN0b3I8RGVmZXJyZWREZWNvbW1pdD4mKTsKQEAgLTExMiw5ICsxMDksNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkaWRCZWNvbWVFbGlnaWJsZU9yRGVjb21taXRlZChjb25zdCBMb2Nr
SG9sZGVyJiwgSXNvRGlyZWN0b3J5PENvbmZpZywgSXNvRGlyZWN0b3J5UGFnZTxDb25maWc+Ojpu
dW1QYWdlcz4qKTsKICAgICAKICAgICB2b2lkIHNjYXZlbmdlKFZlY3RvcjxEZWZlcnJlZERlY29t
bWl0PiYpIG92ZXJyaWRlOwotI2lmIEJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICB2b2lkIHNj
YXZlbmdlVG9IaWdoV2F0ZXJtYXJrKFZlY3RvcjxEZWZlcnJlZERlY29tbWl0PiYpIG92ZXJyaWRl
OwotI2VuZGlmCiAKICAgICB1bnNpZ25lZCBhbGxvY2F0b3JPZmZzZXQoKTsKICAgICB1bnNpZ25l
ZCBkZWFsbG9jYXRvck9mZnNldCgpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29I
ZWFwSW1wbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lz
b0hlYXBJbXBsSW5saW5lcy5oCShyZXZpc2lvbiAyNzkxMzQpCisrKyBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0lzb0hlYXBJbXBsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMjEgKzEy
MSw2IEBAIHZvaWQgSXNvSGVhcEltcGw8Q29uZmlnPjo6c2NhdmVuZ2UoVmVjdG8KICAgICBtX2Rp
cmVjdG9yeUhpZ2hXYXRlcm1hcmsgPSAwOwogfQogCi0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdF
KQotdGVtcGxhdGU8dHlwZW5hbWUgQ29uZmlnPgotdm9pZCBJc29IZWFwSW1wbDxDb25maWc+Ojpz
Y2F2ZW5nZVRvSGlnaFdhdGVybWFyayhWZWN0b3I8RGVmZXJyZWREZWNvbW1pdD4mIGRlY29tbWl0
cykKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcih0aGlzLT5sb2NrKTsKLSAgICBpZiAoIW1fZGly
ZWN0b3J5SGlnaFdhdGVybWFyaykKLSAgICAgICAgbV9pbmxpbmVEaXJlY3Rvcnkuc2NhdmVuZ2VU
b0hpZ2hXYXRlcm1hcmsobG9ja2VyLCBkZWNvbW1pdHMpOwotICAgIGZvciAoSXNvRGlyZWN0b3J5
UGFnZTxDb25maWc+KiBwYWdlID0gbV9oZWFkRGlyZWN0b3J5LmdldCgpOyBwYWdlOyBwYWdlID0g
cGFnZS0+bmV4dCkgewotICAgICAgICBpZiAocGFnZS0+aW5kZXgoKSA+PSBtX2RpcmVjdG9yeUhp
Z2hXYXRlcm1hcmspCi0gICAgICAgICAgICBwYWdlLT5wYXlsb2FkLnNjYXZlbmdlVG9IaWdoV2F0
ZXJtYXJrKGxvY2tlciwgZGVjb21taXRzKTsKLSAgICB9Ci0gICAgbV9kaXJlY3RvcnlIaWdoV2F0
ZXJtYXJrID0gMDsKLX0KLSNlbmRpZgotCiBpbmxpbmUgc2l6ZV90IElzb0hlYXBJbXBsQmFzZTo6
ZnJlZWFibGVNZW1vcnkoKQogewogICAgIHJldHVybiBtX2ZyZWVhYmxlTWVtb3J5OwpJbmRleDog
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29TaGFyZWRIZWFwSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvU2hhcmVkSGVhcElubGluZXMuaAkocmV2aXNp
b24gMjc5MTM0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29TaGFyZWRIZWFwSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw2IEBAIHRlbXBsYXRlPHVuc2lnbmVkIHBh
c3NlZE9iamVjdFNpemU+CiBCTk9fSU5MSU5FIHZvaWQqIElzb1NoYXJlZEhlYXA6OmFsbG9jYXRl
U2xvdyhjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIGJvb2wgYWJvcnRPbkZhaWx1cmUpCiB7CiAg
ICAgU2NhdmVuZ2VyJiBzY2F2ZW5nZXIgPSAqU2NhdmVuZ2VyOjpnZXQoKTsKLSAgICBzY2F2ZW5n
ZXIuZGlkU3RhcnRHcm93aW5nKCk7CiAgICAgc2NhdmVuZ2VyLnNjaGVkdWxlSWZVbmRlck1lbW9y
eVByZXNzdXJlKElzb1NoYXJlZFBhZ2U6OnBhZ2VTaXplKTsKIAogICAgIElzb1NoYXJlZFBhZ2Uq
IHBhZ2UgPSBJc29TaGFyZWRQYWdlOjp0cnlDcmVhdGUoKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvTGFyZ2VNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvTGFyZ2VNYXAuY3BwCShyZXZpc2lvbiAyNzkxMzQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0xhcmdlTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsOSArNzYsNyBAQCB2b2lkIExh
cmdlTWFwOjphZGQoY29uc3QgTGFyZ2VSYW5nZSYgcmFuCiAgICAgICAgIG1lcmdlZCA9IG1lcmdl
KG1lcmdlZCwgbV9mcmVlLnBvcChpLS0pKTsKICAgICB9CiAKLSNpZiAhQlVTRShQQVJUSUFMX1ND
QVZFTkdFKQogICAgIG1lcmdlZC5zZXRVc2VkU2luY2VMYXN0U2NhdmVuZ2UoKTsKLSNlbmRpZgog
ICAgIG1fZnJlZS5wdXNoKG1lcmdlZCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvTGFyZ2VSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFy
Z2VSYW5nZS5oCShyZXZpc2lvbiAyNzkxMzQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xh
cmdlUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNDcgKzM3LDM1IEBAIHB1YmxpYzoKICAg
ICAgICAgOiBSYW5nZSgpCiAgICAgICAgICwgbV9zdGFydFBoeXNpY2FsU2l6ZSgwKQogICAgICAg
ICAsIG1fdG90YWxQaHlzaWNhbFNpemUoMCkKLSNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQor
ICAgICAgICAsIG1fcGh5c2ljYWxFbmQoYmVnaW4oKSkKICAgICAgICAgLCBtX2lzRWxpZ2libGUo
dHJ1ZSkKICAgICAgICAgLCBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5nZShmYWxzZSkKLSNlbmRpZgog
ICAgIHsKICAgICB9CiAKLSAgICBMYXJnZVJhbmdlKGNvbnN0IFJhbmdlJiBvdGhlciwgc2l6ZV90
IHN0YXJ0UGh5c2ljYWxTaXplLCBzaXplX3QgdG90YWxQaHlzaWNhbFNpemUpCisgICAgTGFyZ2VS
YW5nZShjb25zdCBSYW5nZSYgb3RoZXIsIHNpemVfdCBzdGFydFBoeXNpY2FsU2l6ZSwgc2l6ZV90
IHRvdGFsUGh5c2ljYWxTaXplLCB2b2lkKiBwaHlzaWNhbEVuZCkKICAgICAgICAgOiBSYW5nZShv
dGhlcikKICAgICAgICAgLCBtX3N0YXJ0UGh5c2ljYWxTaXplKHN0YXJ0UGh5c2ljYWxTaXplKQog
ICAgICAgICAsIG1fdG90YWxQaHlzaWNhbFNpemUodG90YWxQaHlzaWNhbFNpemUpCi0jaWYgIUJV
U0UoUEFSVElBTF9TQ0FWRU5HRSkKKyAgICAgICAgLCBtX3BoeXNpY2FsRW5kKHN0YXRpY19jYXN0
PGNoYXIqPihwaHlzaWNhbEVuZCkpCiAgICAgICAgICwgbV9pc0VsaWdpYmxlKHRydWUpCiAgICAg
ICAgICwgbV91c2VkU2luY2VMYXN0U2NhdmVuZ2UoZmFsc2UpCi0jZW5kaWYKICAgICB7CiAgICAg
ICAgIEJBU1NFUlQodGhpcy0+c2l6ZSgpID49IHRoaXMtPnRvdGFsUGh5c2ljYWxTaXplKCkpOwog
ICAgICAgICBCQVNTRVJUKHRoaXMtPnRvdGFsUGh5c2ljYWxTaXplKCkgPj0gdGhpcy0+c3RhcnRQ
aHlzaWNhbFNpemUoKSk7CiAgICAgfQogCi0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAg
IExhcmdlUmFuZ2Uodm9pZCogYmVnaW4sIHNpemVfdCBzaXplLCBzaXplX3Qgc3RhcnRQaHlzaWNh
bFNpemUsIHNpemVfdCB0b3RhbFBoeXNpY2FsU2l6ZSkKLSAgICAgICAgOiBSYW5nZShiZWdpbiwg
c2l6ZSkKLSAgICAgICAgLCBtX3N0YXJ0UGh5c2ljYWxTaXplKHN0YXJ0UGh5c2ljYWxTaXplKQot
ICAgICAgICAsIG1fdG90YWxQaHlzaWNhbFNpemUodG90YWxQaHlzaWNhbFNpemUpCi0gICAgewot
ICAgICAgICBCQVNTRVJUKHRoaXMtPnNpemUoKSA+PSB0aGlzLT50b3RhbFBoeXNpY2FsU2l6ZSgp
KTsKLSAgICAgICAgQkFTU0VSVCh0aGlzLT50b3RhbFBoeXNpY2FsU2l6ZSgpID49IHRoaXMtPnN0
YXJ0UGh5c2ljYWxTaXplKCkpOwotICAgIH0KLSNlbHNlCi0gICAgTGFyZ2VSYW5nZSh2b2lkKiBi
ZWdpbiwgc2l6ZV90IHNpemUsIHNpemVfdCBzdGFydFBoeXNpY2FsU2l6ZSwgc2l6ZV90IHRvdGFs
UGh5c2ljYWxTaXplLCBib29sIHVzZWRTaW5jZUxhc3RTY2F2ZW5nZSA9IGZhbHNlKQorICAgIExh
cmdlUmFuZ2Uodm9pZCogYmVnaW4sIHNpemVfdCBzaXplLCBzaXplX3Qgc3RhcnRQaHlzaWNhbFNp
emUsIHNpemVfdCB0b3RhbFBoeXNpY2FsU2l6ZSwgdm9pZCogcGh5c2ljYWxFbmQsIGJvb2wgdXNl
ZFNpbmNlTGFzdFNjYXZlbmdlID0gZmFsc2UpCiAgICAgICAgIDogUmFuZ2UoYmVnaW4sIHNpemUp
CiAgICAgICAgICwgbV9zdGFydFBoeXNpY2FsU2l6ZShzdGFydFBoeXNpY2FsU2l6ZSkKICAgICAg
ICAgLCBtX3RvdGFsUGh5c2ljYWxTaXplKHRvdGFsUGh5c2ljYWxTaXplKQorICAgICAgICAsIG1f
cGh5c2ljYWxFbmQoc3RhdGljX2Nhc3Q8Y2hhcio+KHBoeXNpY2FsRW5kKSkKICAgICAgICAgLCBt
X2lzRWxpZ2libGUodHJ1ZSkKICAgICAgICAgLCBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5nZSh1c2Vk
U2luY2VMYXN0U2NhdmVuZ2UpCiAgICAgewogICAgICAgICBCQVNTRVJUKHRoaXMtPnNpemUoKSA+
PSB0aGlzLT50b3RhbFBoeXNpY2FsU2l6ZSgpKTsKICAgICAgICAgQkFTU0VSVCh0aGlzLT50b3Rh
bFBoeXNpY2FsU2l6ZSgpID49IHRoaXMtPnN0YXJ0UGh5c2ljYWxTaXplKCkpOwogICAgIH0KLSNl
bmRpZgogCiAgICAgLy8gUmV0dXJucyBhIGxvd2VyIGJvdW5kIG9uIHBoeXNpY2FsIHNpemUgYXQg
dGhlIHN0YXJ0IG9mIHRoZSByYW5nZS4gUmFuZ2VzIHRoYXQKICAgICAvLyBzcGFuIG5vbi1waHlz
aWNhbCBmcmFnbWVudHMgdXNlIHRoaXMgbnVtYmVyIHRvIHJlbWVtYmVyIHRoZSBwaHlzaWNhbCBz
aXplIG9mCkBAIC05OSwxNiArODcsMjEgQEAgcHVibGljOgogICAgIHNpemVfdCB0b3RhbFBoeXNp
Y2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxQaHlzaWNhbFNpemU7IH0KICAgICB2b2lk
IHNldFRvdGFsUGh5c2ljYWxTaXplKHNpemVfdCB0b3RhbFBoeXNpY2FsU2l6ZSkgeyBtX3RvdGFs
UGh5c2ljYWxTaXplID0gdG90YWxQaHlzaWNhbFNpemU7IH0KIAorICAgIC8vIFRoaXMgaXMgdGhl
IGFkZHJlc3MgcGFzdCB0aGUgZW5kIG9mIHBoeXNpY2FsIG1lbW9yeSBpbiB0aGlzIHJhbmdlLgor
ICAgIC8vIFdoZW4gZGVjb21pdHRpbmcgdGhpcyByYW5nZSwgd2UgZGVjb21taXR0IFtiZWdpbigp
LCBwaHlzaWNhbEVuZCkuCisgICAgY2hhciogcGh5c2ljYWxFbmQoKSBjb25zdCB7IHJldHVybiBt
X3BoeXNpY2FsRW5kOyB9CisgICAgdm9pZCBzZXRQaHlzaWNhbEVuZCh2b2lkKiBwaHlzaWNhbEVu
ZCkgeyBtX3BoeXNpY2FsRW5kID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHBoeXNpY2FsRW5kKTsgfQor
ICAgIHZvaWQgY2xlYXJQaHlzaWNhbEVuZCgpIHsgbV9waHlzaWNhbEVuZCA9IGJlZ2luKCk7IH0K
KyAgICBib29sIGhhc1BoeXNpY2FsUGFnZXMoKSB7IHJldHVybiBtX3BoeXNpY2FsRW5kICE9IGJl
Z2luKCk7IH0KKwogICAgIHN0ZDo6cGFpcjxMYXJnZVJhbmdlLCBMYXJnZVJhbmdlPiBzcGxpdChz
aXplX3QpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRFbGlnaWJsZShib29sIGVsaWdpYmxlKSB7IG1f
aXNFbGlnaWJsZSA9IGVsaWdpYmxlOyB9CiAgICAgYm9vbCBpc0VsaWdpYmlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNFbGlnaWJsZTsgfQogCi0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKICAg
ICBib29sIHVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFNpbmNl
TGFzdFNjYXZlbmdlOyB9CiAgICAgdm9pZCBjbGVhclVzZWRTaW5jZUxhc3RTY2F2ZW5nZSgpIHsg
bV91c2VkU2luY2VMYXN0U2NhdmVuZ2UgPSBmYWxzZTsgfQogICAgIHZvaWQgc2V0VXNlZFNpbmNl
TGFzdFNjYXZlbmdlKCkgeyBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5nZSA9IHRydWU7IH0KLSNlbmRp
ZgogCiAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3Qgdm9pZCogb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IGJlZ2luKCkgPCBvdGhlcjsgfQogICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IExhcmdlUmFuZ2Um
IG90aGVyKSBjb25zdCB7IHJldHVybiBiZWdpbigpIDwgb3RoZXIuYmVnaW4oKTsgfQpAQCAtMTE2
LDEyICsxMDksOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHNpemVfdCBtX3N0YXJ0UGh5c2lj
YWxTaXplOwogICAgIHNpemVfdCBtX3RvdGFsUGh5c2ljYWxTaXplOwotI2lmIEJVU0UoUEFSVElB
TF9TQ0FWRU5HRSkKLSAgICBib29sIG1faXNFbGlnaWJsZSB7IHRydWUgfTsKLSNlbHNlCisgICAg
Y2hhciogbV9waHlzaWNhbEVuZDsKICAgICB1bnNpZ25lZCBtX2lzRWxpZ2libGU6IDE7CiAgICAg
dW5zaWduZWQgbV91c2VkU2luY2VMYXN0U2NhdmVuZ2U6IDE7Ci0jZW5kaWYKIH07CiAKIGlubGlu
ZSBib29sIGNhbk1lcmdlKGNvbnN0IExhcmdlUmFuZ2UmIGEsIGNvbnN0IExhcmdlUmFuZ2UmIGIp
CkBAIC0xNDQsMTggKzEzNCwxNyBAQCBpbmxpbmUgYm9vbCBjYW5NZXJnZShjb25zdCBMYXJnZVJh
bmdlJiBhCiBpbmxpbmUgTGFyZ2VSYW5nZSBtZXJnZShjb25zdCBMYXJnZVJhbmdlJiBhLCBjb25z
dCBMYXJnZVJhbmdlJiBiKQogewogICAgIGNvbnN0IExhcmdlUmFuZ2UmIGxlZnQgPSBzdGQ6Om1p
bihhLCBiKTsKLSNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQorICAgIGNvbnN0IExhcmdlUmFu
Z2UmIHJpZ2h0ID0gc3RkOjptYXgoYSwgYik7CisgICAgdm9pZCogcGh5c2ljYWxFbmQgPSByaWdo
dC50b3RhbFBoeXNpY2FsU2l6ZSgpID8gcmlnaHQucGh5c2ljYWxFbmQoKSA6IGxlZnQucGh5c2lj
YWxFbmQoKTsKICAgICBib29sIG1lcmdlZFVzZWRTaW5jZUxhc3RTY2F2ZW5nZSA9IGEudXNlZFNp
bmNlTGFzdFNjYXZlbmdlKCkgfHwgYi51c2VkU2luY2VMYXN0U2NhdmVuZ2UoKTsKLSNlbmRpZgog
ICAgIGlmIChsZWZ0LnNpemUoKSA9PSBsZWZ0LnN0YXJ0UGh5c2ljYWxTaXplKCkpIHsKICAgICAg
ICAgcmV0dXJuIExhcmdlUmFuZ2UoCiAgICAgICAgICAgICBsZWZ0LmJlZ2luKCksCiAgICAgICAg
ICAgICBhLnNpemUoKSArIGIuc2l6ZSgpLAogICAgICAgICAgICAgYS5zdGFydFBoeXNpY2FsU2l6
ZSgpICsgYi5zdGFydFBoeXNpY2FsU2l6ZSgpLAotICAgICAgICAgICAgYS50b3RhbFBoeXNpY2Fs
U2l6ZSgpICsgYi50b3RhbFBoeXNpY2FsU2l6ZSgpCi0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5H
RSkKLSAgICAgICAgICAgICwgbWVyZ2VkVXNlZFNpbmNlTGFzdFNjYXZlbmdlCi0jZW5kaWYKKyAg
ICAgICAgICAgIGEudG90YWxQaHlzaWNhbFNpemUoKSArIGIudG90YWxQaHlzaWNhbFNpemUoKSwK
KyAgICAgICAgICAgIHBoeXNpY2FsRW5kLAorICAgICAgICAgICAgbWVyZ2VkVXNlZFNpbmNlTGFz
dFNjYXZlbmdlCiAgICAgICAgICk7CiAgICAgICAgIAogICAgIH0KQEAgLTE2NCwxMCArMTUzLDkg
QEAgaW5saW5lIExhcmdlUmFuZ2UgbWVyZ2UoY29uc3QgTGFyZ2VSYW5nZQogICAgICAgICBsZWZ0
LmJlZ2luKCksCiAgICAgICAgIGEuc2l6ZSgpICsgYi5zaXplKCksCiAgICAgICAgIGxlZnQuc3Rh
cnRQaHlzaWNhbFNpemUoKSwKLSAgICAgICAgYS50b3RhbFBoeXNpY2FsU2l6ZSgpICsgYi50b3Rh
bFBoeXNpY2FsU2l6ZSgpCi0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKLSAgICAgICAgLCBt
ZXJnZWRVc2VkU2luY2VMYXN0U2NhdmVuZ2UKLSNlbmRpZgorICAgICAgICBhLnRvdGFsUGh5c2lj
YWxTaXplKCkgKyBiLnRvdGFsUGh5c2ljYWxTaXplKCksCisgICAgICAgIHBoeXNpY2FsRW5kLAor
ICAgICAgICBtZXJnZWRVc2VkU2luY2VMYXN0U2NhdmVuZ2UKICAgICApOwogfQogCkBAIC0xNzUs
MTEgKzE2MywxMiBAQCBpbmxpbmUgc3RkOjpwYWlyPExhcmdlUmFuZ2UsIExhcmdlUmFuZ2U+CiB7
CiAgICAgQkFTU0VSVChsZWZ0U2l6ZSA8PSB0aGlzLT5zaXplKCkpOwogICAgIHNpemVfdCByaWdo
dFNpemUgPSB0aGlzLT5zaXplKCkgLSBsZWZ0U2l6ZTsKKyAgICBjaGFyKiBwaHlzaWNhbEVuZCA9
IHRoaXMtPnBoeXNpY2FsRW5kKCk7CiAKICAgICBpZiAobGVmdFNpemUgPD0gc3RhcnRQaHlzaWNh
bFNpemUoKSkgewogICAgICAgICBCQVNTRVJUKHRvdGFsUGh5c2ljYWxTaXplKCkgPj0gbGVmdFNp
emUpOwotICAgICAgICBMYXJnZVJhbmdlIGxlZnQoYmVnaW4oKSwgbGVmdFNpemUsIGxlZnRTaXpl
LCBsZWZ0U2l6ZSk7Ci0gICAgICAgIExhcmdlUmFuZ2UgcmlnaHQobGVmdC5lbmQoKSwgcmlnaHRT
aXplLCBzdGFydFBoeXNpY2FsU2l6ZSgpIC0gbGVmdFNpemUsIHRvdGFsUGh5c2ljYWxTaXplKCkg
LSBsZWZ0U2l6ZSk7CisgICAgICAgIExhcmdlUmFuZ2UgbGVmdChiZWdpbigpLCBsZWZ0U2l6ZSwg
bGVmdFNpemUsIGxlZnRTaXplLCBzdGQ6Om1pbihwaHlzaWNhbEVuZCwgYmVnaW4oKSArIGxlZnRT
aXplKSk7CisgICAgICAgIExhcmdlUmFuZ2UgcmlnaHQobGVmdC5lbmQoKSwgcmlnaHRTaXplLCBz
dGFydFBoeXNpY2FsU2l6ZSgpIC0gbGVmdFNpemUsIHRvdGFsUGh5c2ljYWxTaXplKCkgLSBsZWZ0
U2l6ZSwgc3RkOjptYXgocGh5c2ljYWxFbmQsIGxlZnQuZW5kKCkpKTsKICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKGxlZnQsIHJpZ2h0KTsKICAgICB9CiAKQEAgLTE5NCw4ICsxODMsOCBA
QCBpbmxpbmUgc3RkOjpwYWlyPExhcmdlUmFuZ2UsIExhcmdlUmFuZ2U+CiAgICAgICAgIHJpZ2h0
VG90YWxQaHlzaWNhbFNpemUgPSByaWdodFNpemU7CiAgICAgfQogCi0gICAgTGFyZ2VSYW5nZSBs
ZWZ0KGJlZ2luKCksIGxlZnRTaXplLCBzdGFydFBoeXNpY2FsU2l6ZSgpLCBsZWZ0VG90YWxQaHlz
aWNhbFNpemUpOwotICAgIExhcmdlUmFuZ2UgcmlnaHQobGVmdC5lbmQoKSwgcmlnaHRTaXplLCAw
LCByaWdodFRvdGFsUGh5c2ljYWxTaXplKTsKKyAgICBMYXJnZVJhbmdlIGxlZnQoYmVnaW4oKSwg
bGVmdFNpemUsIHN0YXJ0UGh5c2ljYWxTaXplKCksIGxlZnRUb3RhbFBoeXNpY2FsU2l6ZSwgc3Rk
OjptaW4ocGh5c2ljYWxFbmQsIGJlZ2luKCkgKyBsZWZ0U2l6ZSkpOworICAgIExhcmdlUmFuZ2Ug
cmlnaHQobGVmdC5lbmQoKSwgcmlnaHRTaXplLCAwLCByaWdodFRvdGFsUGh5c2ljYWxTaXplLCBz
dGQ6Om1heChwaHlzaWNhbEVuZCwgbGVmdC5lbmQoKSkpOwogICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihsZWZ0LCByaWdodCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2Nh
dmVuZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdl
ci5jcHAJKHJldmlzaW9uIDI3OTEzNCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVu
Z2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMTEgKzg1LDcgQEAgU2NhdmVuZ2VyOjpTY2F2
ZW5nZXIoY29uc3QgTG9ja0hvbGRlciYpCiAgICAgZGlzcGF0Y2hfcmVzdW1lKG1fcHJlc3N1cmVI
YW5kbGVyRGlzcGF0Y2hTb3VyY2UpOwogICAgIGRpc3BhdGNoX3JlbGVhc2UocXVldWUpOwogI2Vu
ZGlmCi0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAgIG1fd2FpdFRpbWUgPSBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzKG1faXNJbk1pbmlNb2RlID8gMjAwIDogMjAwMCk7Ci0jZWxzZQog
ICAgIG1fd2FpdFRpbWUgPSBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwKTsKLSNlbmRpZgog
CiAgICAgbV90aHJlYWQgPSBzdGQ6OnRocmVhZCgmdGhyZWFkRW50cnlQb2ludCwgdGhpcyk7CiB9
CkBAIC0xMjAsMTIgKzExNiw2IEBAIHZvaWQgU2NhdmVuZ2VyOjpydW5Tb29uKGNvbnN0IExvY2tI
b2xkZXIKICAgICBtX2NvbmRpdGlvbi5ub3RpZnlfYWxsKCk7CiB9CiAKLXZvaWQgU2NhdmVuZ2Vy
OjpkaWRTdGFydEdyb3dpbmcoKQotewotICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIHRvIGxv
Y2sgaGVyZSwgc2luY2UgdGhpcyBpcyBqdXN0IGEgaGV1cmlzdGljLgotICAgIG1faXNQcm9iYWJs
eUdyb3dpbmcgPSB0cnVlOwotfQotCiB2b2lkIFNjYXZlbmdlcjo6c2NoZWR1bGVJZlVuZGVyTWVt
b3J5UHJlc3N1cmUoc2l6ZV90IGJ5dGVzKQogewogICAgIExvY2tIb2xkZXIgbG9jayhtdXRleCgp
KTsKQEAgLTE0Niw3ICsxMzYsNiBAQCB2b2lkIFNjYXZlbmdlcjo6c2NoZWR1bGVJZlVuZGVyTWVt
b3J5UHJlCiAgICAgaWYgKCFpc1VuZGVyTWVtb3J5UHJlc3N1cmUoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9pc1Byb2JhYmx5R3Jvd2luZyA9IGZhbHNlOwogICAgIHJ1bihsb2NrKTsKIH0K
IApAQCAtMTU4LDcgKzE0Nyw2IEBAIHZvaWQgU2NhdmVuZ2VyOjpzY2hlZHVsZShzaXplX3QgYnl0
ZXMpCiAgICAgaWYgKHdpbGxSdW5Tb29uKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBt
X2lzUHJvYmFibHlHcm93aW5nID0gZmFsc2U7CiAgICAgcnVuU29vbihsb2NrKTsKIH0KIApAQCAt
MTg3LDE0ICsxNzUsNiBAQCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIFNjYXZlbmdlcjo6dGlt
CiAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHM+KHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpIC0gbV9sYXN0RnVsbFNj
YXZlbmdlVGltZSk7CiB9CiAKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi1zdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIFNjYXZlbmdlcjo6dGltZVNpbmNlTGFzdFBhcnRpYWxTY2F2ZW5nZSgp
Ci17Ci0gICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOwotICAgIHJldHVybiBzdGQ6
OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNo
cm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSAtIG1fbGFzdFBhcnRpYWxTY2F2ZW5nZVRpbWUpOwot
fQotI2VuZGlmCi0KIHZvaWQgU2NhdmVuZ2VyOjplbmFibGVNaW5pTW9kZSgpCiB7CiAgICAgbV9p
c0luTWluaU1vZGUgPSB0cnVlOyAvLyBXZSBqdXN0IHN0b3JlIHRvIHRoaXMgcmFjaWx5LiBUaGUg
c2NhdmVuZ2VyIHRocmVhZCB3aWxsIGV2ZW50dWFsbHkgcGljayB1cCB0aGUgcmlnaHQgdmFsdWUu
CkBAIC0yMjAsMjUgKzIwMCwxNyBAQCB2b2lkIFNjYXZlbmdlcjo6c2NhdmVuZ2UoKQogCiAgICAg
ICAgIHsKICAgICAgICAgICAgIFByaW50VGltZSBwcmludFRpbWUoIlxuZnVsbCBzY2F2ZW5nZSB1
bmRlciBsb2NrIHRpbWUiKTsKLSNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQogICAgICAgICAg
ICAgc2l6ZV90IGRlZmVycmVkRGVjb21taXRzID0gMDsKLSNlbmRpZgogICAgICAgICAgICAgVW5p
cXVlTG9ja0hvbGRlciBsb2NrKEhlYXA6Om11dGV4KCkpOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtSGVhcHM7IGktLTspIHsKICAgICAgICAgICAgICAgICBpZiAoIWlzQWN0aXZl
SGVhcEtpbmQoc3RhdGljX2Nhc3Q8SGVhcEtpbmQ+KGkpKSkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0jaWYgQlVTRShQQVJUSUFMX1NDQVZFTkdFKQotICAgICAgICAgICAgICAgIFBl
clByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoaSkuc2NhdmVuZ2UobG9jaywg
ZGVjb21taXR0ZXIpOwotI2Vsc2UKICAgICAgICAgICAgICAgICBQZXJQcm9jZXNzPFBlckhlYXBL
aW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGkpLnNjYXZlbmdlKGxvY2ssIGRlY29tbWl0dGVyLCBkZWZl
cnJlZERlY29tbWl0cyk7Ci0jZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlY29t
bWl0dGVyLnByb2Nlc3NFYWdlcigpOwogCi0jaWYgIUJVU0UoUEFSVElBTF9TQ0FWRU5HRSkKICAg
ICAgICAgICAgIGlmIChkZWZlcnJlZERlY29tbWl0cykKICAgICAgICAgICAgICAgICBtX3N0YXRl
ID0gU3RhdGU6OlJ1blNvb247Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIHsKQEAgLTI3
OSw3OCArMjUxLDYgQEAgdm9pZCBTY2F2ZW5nZXI6OnNjYXZlbmdlKCkKICAgICB9CiB9CiAKLSNp
ZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi12b2lkIFNjYXZlbmdlcjo6cGFydGlhbFNjYXZlbmdl
KCkKLXsKLSAgICBpZiAoIW1faXNFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBVbmlx
dWVMb2NrSG9sZGVyIGxvY2sobV9zY2F2ZW5naW5nTXV0ZXgpOwotCi0gICAgaWYgKHZlcmJvc2Up
IHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVxuIik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiLS1iZWZvcmUgcGFydGlhbCBzY2F2
ZW5naW5nLS1cbiIpOwotICAgICAgICBkdW1wU3RhdHMoKTsKLSAgICB9Ci0KLSAgICB7Ci0gICAg
ICAgIEJ1bGtEZWNvbW1pdCBkZWNvbW1pdHRlcjsKLSAgICAgICAgewotICAgICAgICAgICAgUHJp
bnRUaW1lIHByaW50VGltZSgiXG5wYXJ0aWFsU2NhdmVuZ2UgdW5kZXIgbG9jayB0aW1lIik7Ci0g
ICAgICAgICAgICBVbmlxdWVMb2NrSG9sZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1IZWFwczsgaS0tOykgewotICAgICAgICAgICAgICAg
IGlmICghaXNBY3RpdmVIZWFwS2luZChzdGF0aWNfY2FzdDxIZWFwS2luZD4oaSkpKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBIZWFwJiBoZWFwID0gUGVy
UHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChpKTsKLSAgICAgICAgICAgICAg
ICBzaXplX3QgZnJlZWFibGVNZW1vcnkgPSBoZWFwLmZyZWVhYmxlTWVtb3J5KGxvY2spOwotICAg
ICAgICAgICAgICAgIGlmIChmcmVlYWJsZU1lbW9yeSA8IDQgKiBNQikKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaGVhcC5zY2F2ZW5nZVRvSGlnaFdhdGVy
bWFyayhsb2NrLCBkZWNvbW1pdHRlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRl
Y29tbWl0dGVyLnByb2Nlc3NFYWdlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgewotICAgICAg
ICAgICAgUHJpbnRUaW1lIHByaW50VGltZSgicGFydGlhbFNjYXZlbmdlIGxhenkgZGVjb21taXQg
dGltZSIpOwotICAgICAgICAgICAgZGVjb21taXR0ZXIucHJvY2Vzc0xhenkoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHsKLSAgICAgICAgICAgIFByaW50VGltZSBwcmludFRpbWUoInBhcnRpYWxT
Y2F2ZW5nZSBtYXJrIGFsbCBhcyBlbGlnaWJsZSB0aW1lIik7Ci0gICAgICAgICAgICBMb2NrSG9s
ZGVyIGxvY2soSGVhcDo6bXV0ZXgoKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1IZWFwczsgaS0tOykgewotICAgICAgICAgICAgICAgIGlmICghaXNBY3RpdmVIZWFwS2luZChz
dGF0aWNfY2FzdDxIZWFwS2luZD4oaSkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICBIZWFwJiBoZWFwID0gUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFw
Pj46OmdldCgpLT5hdChpKTsKLSAgICAgICAgICAgICAgICBoZWFwLm1hcmtBbGxMYXJnZUFzRWxp
Z2liaWxlKGxvY2spOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgewot
ICAgICAgICBSRUxFQVNFX0JBU1NFUlQoIW1fZGVmZXJyZWREZWNvbW1pdHMuc2l6ZSgpKTsKLSAg
ICAgICAgQWxsSXNvSGVhcHM6OmdldCgpLT5mb3JFYWNoKAotICAgICAgICAgICAgWyZdIChJc29I
ZWFwSW1wbEJhc2UmIGhlYXApIHsKLSAgICAgICAgICAgICAgICBoZWFwLnNjYXZlbmdlVG9IaWdo
V2F0ZXJtYXJrKG1fZGVmZXJyZWREZWNvbW1pdHMpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAg
IElzb0hlYXBJbXBsQmFzZTo6ZmluaXNoU2NhdmVuZ2luZyhtX2RlZmVycmVkRGVjb21taXRzKTsK
LSAgICAgICAgbV9kZWZlcnJlZERlY29tbWl0cy5zaHJpbmsoMCk7Ci0gICAgfQotCi0gICAgaWYg
KHZlcmJvc2UpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICItLWFmdGVyIHBhcnRpYWwgc2Nh
dmVuZ2luZy0tXG4iKTsKLSAgICAgICAgZHVtcFN0YXRzKCk7Ci0gICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgIH0KLQotICAg
IHsKLSAgICAgICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKG11dGV4KCkpOwotICAgICAgICBtX2xh
c3RQYXJ0aWFsU2NhdmVuZ2VUaW1lID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7
Ci0gICAgfQotfQotI2VuZGlmCi0KIHNpemVfdCBTY2F2ZW5nZXI6OmZyZWVhYmxlTWVtb3J5KCkK
IHsKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKQEAgLTQzMiw2OSArMzMyLDYgQEAgdm9pZCBTY2F2
ZW5nZXI6OnRocmVhZFJ1bkxvb3AoKQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICItLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAgICAgICAgIH0KIAotI2lmIEJVU0Uo
UEFSVElBTF9TQ0FWRU5HRSkKLSAgICAgICAgZW51bSBjbGFzcyBTY2F2ZW5nZU1vZGUgewotICAg
ICAgICAgICAgTm9uZSwKLSAgICAgICAgICAgIFBhcnRpYWwsCi0gICAgICAgICAgICBGdWxsCi0g
ICAgICAgIH07Ci0KLSAgICAgICAgc2l6ZV90IGZyZWVhYmxlTWVtb3J5ID0gdGhpcy0+ZnJlZWFi
bGVNZW1vcnkoKTsKLQotICAgICAgICBTY2F2ZW5nZU1vZGUgc2NhdmVuZ2VNb2RlID0gWyZdIHsK
LSAgICAgICAgICAgIGF1dG8gdGltZVNpbmNlTGFzdEZ1bGxTY2F2ZW5nZSA9IHRoaXMtPnRpbWVT
aW5jZUxhc3RGdWxsU2NhdmVuZ2UoKTsKLSAgICAgICAgICAgIGF1dG8gdGltZVNpbmNlTGFzdFBh
cnRpYWxTY2F2ZW5nZSA9IHRoaXMtPnRpbWVTaW5jZUxhc3RQYXJ0aWFsU2NhdmVuZ2UoKTsKLSAg
ICAgICAgICAgIGF1dG8gdGltZVNpbmNlTGFzdFNjYXZlbmdlID0gc3RkOjptaW4odGltZVNpbmNl
TGFzdFBhcnRpYWxTY2F2ZW5nZSwgdGltZVNpbmNlTGFzdEZ1bGxTY2F2ZW5nZSk7Ci0KLSAgICAg
ICAgICAgIGlmIChpc1VuZGVyTWVtb3J5UHJlc3N1cmUoKSAmJiBmcmVlYWJsZU1lbW9yeSA+IDEg
KiBNQiAmJiB0aW1lU2luY2VMYXN0U2NhdmVuZ2UgPiBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
KDUpKQotICAgICAgICAgICAgICAgIHJldHVybiBTY2F2ZW5nZU1vZGU6OkZ1bGw7Ci0KLSAgICAg
ICAgICAgIGlmICghbV9pc1Byb2JhYmx5R3Jvd2luZykgewotICAgICAgICAgICAgICAgIGlmICh0
aW1lU2luY2VMYXN0RnVsbFNjYXZlbmdlIDwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygxMDAw
KSAmJiAhbV9pc0luTWluaU1vZGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTY2F2ZW5n
ZU1vZGU6OlBhcnRpYWw7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNjYXZlbmdlTW9kZTo6RnVs
bDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1faXNJbk1pbmlNb2RlKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKHRpbWVTaW5jZUxhc3RGdWxsU2NhdmVuZ2UgPCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzKDIwMCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTY2F2ZW5n
ZU1vZGU6OlBhcnRpYWw7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNjYXZlbmdlTW9kZTo6RnVs
bDsKLSAgICAgICAgICAgIH0KLQotI2lmIEJDUFUoWDg2XzY0KQotICAgICAgICAgICAgYXV0byBw
YXJ0aWFsU2NhdmVuZ2VJbnRlcnZhbCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTIwMDAp
OwotI2Vsc2UKLSAgICAgICAgICAgIGF1dG8gcGFydGlhbFNjYXZlbmdlSW50ZXJ2YWwgPSBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzKDgwMDApOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAodGlt
ZVNpbmNlTGFzdFNjYXZlbmdlIDwgcGFydGlhbFNjYXZlbmdlSW50ZXJ2YWwpIHsKLSAgICAgICAg
ICAgICAgICAvLyBSYXRlIGxpbWl0IHBhcnRpYWwgc2NhdmVuZ2VzLgotICAgICAgICAgICAgICAg
IHJldHVybiBTY2F2ZW5nZU1vZGU6Ok5vbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoZnJlZWFibGVNZW1vcnkgPCAyNSAqIE1CKQotICAgICAgICAgICAgICAgIHJldHVybiBTY2F2
ZW5nZU1vZGU6Ok5vbmU7Ci0gICAgICAgICAgICBpZiAoNSAqIGZyZWVhYmxlTWVtb3J5IDwgZm9v
dHByaW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNjYXZlbmdlTW9kZTo6Tm9uZTsKLSAg
ICAgICAgICAgIHJldHVybiBTY2F2ZW5nZU1vZGU6OlBhcnRpYWw7Ci0gICAgICAgIH0oKTsKLQot
ICAgICAgICBtX2lzUHJvYmFibHlHcm93aW5nID0gZmFsc2U7Ci0KLSAgICAgICAgc3dpdGNoIChz
Y2F2ZW5nZU1vZGUpIHsKLSAgICAgICAgY2FzZSBTY2F2ZW5nZU1vZGU6Ok5vbmU6IHsKLSAgICAg
ICAgICAgIHJ1blNvb24oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgU2NhdmVuZ2VNb2RlOjpQYXJ0aWFsOiB7Ci0gICAgICAgICAgICBwYXJ0aWFsU2NhdmVu
Z2UoKTsKLSAgICAgICAgICAgIHJ1blNvb24oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgU2NhdmVuZ2VNb2RlOjpGdWxsOiB7Ci0gICAgICAgICAgICBzY2F2
ZW5nZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotI2Vsc2UK
ICAgICAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBzdGFydCB7IHN0
ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpIH07CiAgICAgICAgIAogICAgICAgICBzY2F2
ZW5nZSgpOwpAQCAtNTA5LDE0ICszNDYsMTMgQEAgdm9pZCBTY2F2ZW5nZXI6OnRocmVhZFJ1bkxv
b3AoKQogICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBpbnZlc3RpZ2F0ZSBtaW5pLW1vZGUn
cyBhZGp1c3RtZW50LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAzOTg3CiAgICAgICAgIGlmICghbV9pc0luTWluaU1vZGUpIHsKLSAgICAgICAg
ICAgIHRpbWVTcGVudFNjYXZlbmdpbmcgKj0gMTUwOworICAgICAgICAgICAgdGltZVNwZW50U2Nh
dmVuZ2luZyAqPSBzX25ld1dhaXRNdWx0aXBsaWVyOwogICAgICAgICAgICAgc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcyBuZXdXYWl0VGltZSA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KHRpbWVTcGVudFNjYXZlbmdpbmcpOwotICAgICAgICAg
ICAgbV93YWl0VGltZSA9IHN0ZDo6bWluKHN0ZDo6bWF4KG5ld1dhaXRUaW1lLCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzKDEwMCkpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwMDAwKSk7
CisgICAgICAgICAgICBtX3dhaXRUaW1lID0gc3RkOjptaW4oc3RkOjptYXgobmV3V2FpdFRpbWUs
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoc19taW5XYWl0VGltZU1pbGxpc2Vjb25kcykpLCBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKHNfbWF4V2FpdFRpbWVNaWxsaXNlY29uZHMpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICJuZXcgd2FpdCB0aW1lICVsbGRtc1xuIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nIGludD4o
bV93YWl0VGltZS5jb3VudCgpKSk7Ci0jZW5kaWYKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9TY2F2ZW5nZXIuaAkocmV2aXNpb24gMjc5MTM0KQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9TY2F2ZW5nZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNiBAQCBwdWJs
aWM6CiAgICAgYm9vbCB3aWxsUnVuU29vbigpIHsgcmV0dXJuIG1fc3RhdGUgPiBTdGF0ZTo6U2xl
ZXA7IH0KICAgICB2b2lkIHJ1blNvb24oKTsKICAgICAKLSAgICBCRVhQT1JUIHZvaWQgZGlkU3Rh
cnRHcm93aW5nKCk7CiAgICAgQkVYUE9SVCB2b2lkIHNjaGVkdWxlSWZVbmRlck1lbW9yeVByZXNz
dXJlKHNpemVfdCBieXRlcyk7CiAgICAgQkVYUE9SVCB2b2lkIHNjaGVkdWxlKHNpemVfdCBieXRl
cyk7CiAKQEAgLTkyLDE1ICs5MSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0VGhyZWFkTmFt
ZShjb25zdCBjaGFyKik7CiAKICAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVTaW5j
ZUxhc3RGdWxsU2NhdmVuZ2UoKTsKLSNpZiBCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCi0gICAgc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lU2luY2VMYXN0UGFydGlhbFNjYXZlbmdlKCk7Ci0g
ICAgdm9pZCBwYXJ0aWFsU2NhdmVuZ2UoKTsKLSNlbmRpZgogCiAgICAgc3RkOjphdG9taWM8U3Rh
dGU+IG1fc3RhdGUgeyBTdGF0ZTo6U2xlZXAgfTsKICAgICBzaXplX3QgbV9zY2F2ZW5nZXJCeXRl
cyB7IDAgfTsKICAgICBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIG1fd2FpdFRpbWU7Ci0gICAg
Ym9vbCBtX2lzUHJvYmFibHlHcm93aW5nIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNJbk1pbmlN
b2RlIHsgZmFsc2UgfTsKICAgICAKICAgICBNdXRleCBtX3NjYXZlbmdpbmdNdXRleDsKQEAgLTEw
OCwxNSArMTAyLDIyIEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnRocmVhZCBtX3RocmVhZDsKICAg
ICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG1fbGFzdEZ1bGxTY2F2ZW5n
ZVRpbWUgeyBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKSB9OwotI2lmIEJVU0UoUEFS
VElBTF9TQ0FWRU5HRSkKLSAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50
IG1fbGFzdFBhcnRpYWxTY2F2ZW5nZVRpbWUgeyBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpu
b3coKSB9OwotI2VuZGlmCiAKICNpZiBCT1MoREFSV0lOKQogICAgIGRpc3BhdGNoX3NvdXJjZV90
IG1fcHJlc3N1cmVIYW5kbGVyRGlzcGF0Y2hTb3VyY2U7CiAgICAgcW9zX2NsYXNzX3QgbV9yZXF1
ZXN0ZWRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFzcyB7IFFPU19DTEFTU19VU0VSX0lOSVRJQVRFRCB9
OwogI2VuZGlmCi0gICAgCisKKyNpZiBCUExBVEZPUk0oTUFDKQorICAgIGNvbnN0IHVuc2lnbmVk
IHNfbmV3V2FpdE11bHRpcGxpZXIgPSAzMDA7CisgICAgY29uc3QgdW5zaWduZWQgc19taW5XYWl0
VGltZU1pbGxpc2Vjb25kcyA9IDc1MDsKKyAgICBjb25zdCB1bnNpZ25lZCBzX21heFdhaXRUaW1l
TWlsbGlzZWNvbmRzID0gMjAwMDA7CisjZWxzZQorICAgIGNvbnN0IHVuc2lnbmVkIHNfbmV3V2Fp
dE11bHRpcGxpZXIgPSAxNTA7CisgICAgY29uc3QgdW5zaWduZWQgc19taW5XYWl0VGltZU1pbGxp
c2Vjb25kcyA9IDEwMDsKKyAgICBjb25zdCB1bnNpZ25lZCBzX21heFdhaXRUaW1lTWlsbGlzZWNv
bmRzID0gMTAwMDA7CisjZW5kaWYKKwogICAgIFZlY3RvcjxEZWZlcnJlZERlY29tbWl0PiBtX2Rl
ZmVycmVkRGVjb21taXRzOwogICAgIGJvb2wgbV9pc0VuYWJsZWQgeyB0cnVlIH07CiB9OwpJbmRl
eDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbFBhZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsUGFnZS5oCShyZXZpc2lvbiAyNzkxMzQpCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMSAr
NTEsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQaHlzaWNhbFBhZ2VzKCkgeyByZXR1cm4gbV9o
YXNQaHlzaWNhbFBhZ2VzOyB9CiAgICAgdm9pZCBzZXRIYXNQaHlzaWNhbFBhZ2VzKGJvb2wgaGFz
UGh5c2ljYWxQYWdlcykgeyBtX2hhc1BoeXNpY2FsUGFnZXMgPSBoYXNQaHlzaWNhbFBhZ2VzOyB9
CiAKLSNpZiAhQlVTRShQQVJUSUFMX1NDQVZFTkdFKQogICAgIGJvb2wgdXNlZFNpbmNlTGFzdFNj
YXZlbmdlKCkgeyByZXR1cm4gbV91c2VkU2luY2VMYXN0U2NhdmVuZ2U7IH0KICAgICB2b2lkIGNs
ZWFyVXNlZFNpbmNlTGFzdFNjYXZlbmdlKCkgeyBtX3VzZWRTaW5jZUxhc3RTY2F2ZW5nZSA9IGZh
bHNlOyB9CiAgICAgdm9pZCBzZXRVc2VkU2luY2VMYXN0U2NhdmVuZ2UoKSB7IG1fdXNlZFNpbmNl
TGFzdFNjYXZlbmdlID0gdHJ1ZTsgfQotI2VuZGlmCiAKICAgICBTbWFsbExpbmUqIGJlZ2luKCk7
CiAKQEAgLTY1LDkgKzYzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBjaGFy
IG1faGFzRnJlZUxpbmVzOiAxOwogICAgIHVuc2lnbmVkIGNoYXIgbV9oYXNQaHlzaWNhbFBhZ2Vz
OiAxOwotI2lmICFCVVNFKFBBUlRJQUxfU0NBVkVOR0UpCiAgICAgdW5zaWduZWQgY2hhciBtX3Vz
ZWRTaW5jZUxhc3RTY2F2ZW5nZTogMTsKLSNlbmRpZgogICAgIHVuc2lnbmVkIGNoYXIgbV9yZWZD
b3VudDogNzsKICAgICB1bnNpZ25lZCBjaGFyIG1fc2l6ZUNsYXNzOwogICAgIHVuc2lnbmVkIGNo
YXIgbV9zbGlkZTsK
</data>
<flag name="review"
          id="454035"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>