<?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>112943</bug_id>
          
          <creation_ts>2013-03-21 11:43:12 -0700</creation_ts>
          <short_desc>If a previously loaded resource is later stored to the disk cache, replace the buffer with MMAP&apos;ed memory</short_desc>
          <delta_ts>2013-03-21 17:16:40 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>buildbot</cc>
    
    <cc>ggaren</cc>
    
    <cc>japhet</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>860513</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-21 11:43:12 -0700</bug_when>
    <thetext>If a previously loaded resource is later stored to the disk cached, replace the buffer with MMAP&apos;ed memory.

This gives us a memory win multiplied by the number of times the resource is referenced in a different WebProcess.

&lt;rdar://problem/13414154&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860529</commentid>
    <comment_count>1</comment_count>
      <attachid>194310</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-21 11:57:42 -0700</bug_when>
    <thetext>Created attachment 194310
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860535</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-21 12:00:10 -0700</bug_when>
    <thetext>Attachment 194310 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/loader/ResourceBuffer.cpp&apos;, u&apos;Source/WebCore/loader/ResourceBuffer.h&apos;, u&apos;Source/WebCore/loader/cache/CachedResource.cpp&apos;, u&apos;Source/WebCore/loader/cache/CachedResource.h&apos;, u&apos;Source/WebCore/platform/SharedBuffer.h&apos;, u&apos;Source/WebCore/platform/cf/SharedBufferCF.cpp&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.h&apos;, u&apos;Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm&apos;, u&apos;Source/WebKit2/Platform/SharedMemory.h&apos;, u&apos;Source/WebKit2/Platform/mac/SharedMemoryMac.cpp&apos;, u&apos;Source/WebKit2/Shared/ShareableResource.cpp&apos;, u&apos;Source/WebKit2/Shared/ShareableResource.h&apos;, u&apos;Source/WebKit2/Shared/WebCoreArgumentCoders.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Network/NetworkProcessConnection.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Network/NetworkProcessConnection.h&apos;, u&apos;Source/WebKit2/WebProcess/Network/NetworkProcessConnection.messages.in&apos;, u&apos;Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp&apos;]&quot; exit_code: 1
Source/WebKit2/Platform/mac/SharedMemoryMac.cpp:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/NetworkProcess/NetworkResourceLoader.h:111:  The parameter name &quot;handle&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/Shared/ShareableResource.cpp:68:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/ShareableResource.cpp:69:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/ShareableResource.cpp:70:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/ShareableResource.cpp:71:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/ShareableResource.cpp:72:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/ShareableResource.cpp:74:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:262:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 9 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860539</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-21 12:04:43 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 194310 [details] did not pass style-queue:

&gt; Source/WebKit2/Platform/mac/SharedMemoryMac.cpp:113:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.h:111:  The parameter name &quot;handle&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebKit2/Shared/ShareableResource.cpp:68:  Use 0 instead of NULL.  [readability/null] [5]
&gt; Source/WebKit2/Shared/ShareableResource.cpp:69:  Use 0 instead of NULL.  [readability/null] [5]
&gt; Source/WebKit2/Shared/ShareableResource.cpp:70:  Use 0 instead of NULL.  [readability/null] [5]
&gt; Source/WebKit2/Shared/ShareableResource.cpp:71:  Use 0 instead of NULL.  [readability/null] [5]
&gt; Source/WebKit2/Shared/ShareableResource.cpp:72:  Use 0 instead of NULL.  [readability/null] [5]
&gt; Source/WebKit2/Shared/ShareableResource.cpp:74:  Use 0 instead of NULL.  [readability/null] [5]
&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:262:  One space before end of line comments  [whitespace/comments] [5]
&gt; Total errors found: 9 in 21 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Fixed the 3 that should&apos;ve been fixed, leaving standard CF-style in place for the 6 others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860547</commentid>
    <comment_count>4</comment_count>
      <attachid>194310</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-21 12:09:33 -0700</bug_when>
    <thetext>Comment on attachment 194310
Patch v1

Attachment 194310 did not pass qt-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17250145</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860551</commentid>
    <comment_count>5</comment_count>
      <attachid>194310</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-21 12:14:25 -0700</bug_when>
    <thetext>Comment on attachment 194310
Patch v1

Attachment 194310 did not pass qt-wk2-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17290097</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860572</commentid>
    <comment_count>6</comment_count>
      <attachid>194310</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-21 12:31:02 -0700</bug_when>
    <thetext>Comment on attachment 194310
Patch v1

Attachment 194310 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/17161975</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860578</commentid>
    <comment_count>7</comment_count>
      <attachid>194319</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-21 12:37:53 -0700</bug_when>
    <thetext>Created attachment 194319
Patch v2 - Style and build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860581</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-21 12:41:07 -0700</bug_when>
    <thetext>Attachment 194319 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/loader/ResourceBuffer.cpp&apos;, u&apos;Source/WebCore/loader/ResourceBuffer.h&apos;, u&apos;Source/WebCore/loader/cache/CachedResource.cpp&apos;, u&apos;Source/WebCore/loader/cache/CachedResource.h&apos;, u&apos;Source/WebCore/platform/SharedBuffer.h&apos;, u&apos;Source/WebCore/platform/cf/SharedBufferCF.cpp&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.h&apos;, u&apos;Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm&apos;, u&apos;Source/WebKit2/Platform/SharedMemory.h&apos;, u&apos;Source/WebKit2/Platform/mac/SharedMemoryMac.cpp&apos;, u&apos;Source/WebKit2/Shared/ShareableResource.cpp&apos;, u&apos;Source/WebKit2/Shared/ShareableResource.h&apos;, u&apos;Source/WebKit2/Shared/WebCoreArgumentCoders.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Network/NetworkProcessConnection.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Network/NetworkProcessConnection.h&apos;, u&apos;Source/WebKit2/WebProcess/Network/NetworkProcessConnection.messages.in&apos;, u&apos;Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp&apos;]&quot; exit_code: 1
Source/WebKit2/Shared/ShareableResource.cpp:68:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/ShareableResource.cpp:69:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/ShareableResource.cpp:70:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/ShareableResource.cpp:71:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/ShareableResource.cpp:72:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/ShareableResource.cpp:74:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 6 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860595</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-21 12:56:04 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=194310&amp;action=review

&gt; Source/WebCore/loader/cache/CachedResource.cpp:979
&gt; +    // Verify the buffers are the same as if the encoded data is different than what we&apos;re replacing,
&gt; +    // we don&apos;t want to replace it.

I think it&apos;s almost self-evident that we wouldn&apos;t want to replace our content with something that didn&apos;t match -- what&apos;s not self-evident is how that could ever happen. I think that&apos;s a better thing to comment about. Something like:

This function supports replacing an item with its value in the disk cache. Since the disk cache is race-y, we can&apos;t assume that &apos;newBuffer&apos; actually matches m_data.

&gt; Source/WebCore/loader/cache/CachedResource.cpp:981
&gt; +    if (m_data-&gt;size() != newBuffer-&gt;size() || !memcmp(m_data-&gt;data(), newBuffer-&gt;data(), m_data-&gt;size()))
&gt; +        return;

This is wrong. memcmp returns 0 when the two buffer are equal.

&gt; Source/WebCore/loader/cache/CachedResource.h:268
&gt; +    void tryReplacingEncodedData(PassRefPtr&lt;SharedBuffer&gt;);

Your other function is named &quot;tryWrap&quot;, in the imperative form, so I think we should do the same here: &quot;tryReplace&quot;.

&gt; Source/WebCore/platform/cf/SharedBufferCF.cpp:103
&gt; +    else
&gt; +        append(newContents);

I don&apos;t think this else case makes sense. We don&apos;t have a use case where we would want to append &apos;newContents&apos;, since the optimization will fail if we do. I think it would be better to rename this function to &apos;tryReplaceContents&apos;, and move the buffer comparison into this function as well. Then, we can just return early if &apos;newContents&apos; lacks an optimized form.

&gt;&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:262
&gt;&gt; +        ref();  // Balanced by a deref() in diskCacheTimerFired().
&gt; 
&gt; One space before end of line comments  [whitespace/comments] [5]

Style bot is right, for once.

Nit: It&apos;s adoptRef(), not deref().

&gt; Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm:44
&gt; +static bool CFURLCacheIsMemMappedData(CFURLCacheRef cache, CFDataRef data)

Can we use the SOFT_LINK_OPTIONAL macro here instead of rolling our own?

&gt; Source/WebKit2/Platform/mac/SharedMemoryMac.cpp:110
&gt; +    sharedMemory-&gt;m_shouldVMDeallocateData = true;

What is the case where m_shouldVMDeallocateData is false? As far as I can tell, it always ends up true.

&gt; Source/WebKit2/Shared/ShareableResource.cpp:61
&gt; +    resource-&gt;deref();

For your timer, you chose adoptRef() instead of an explicit deref(). Let&apos;s pick one style and use it everywhere.

&gt; Source/WebKit2/Shared/ShareableResource.cpp:67
&gt; +        resource.leakRef(),

For your timer, you chose ref() instead of leakRef(). Let&apos;s pick one style and use it everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860641</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-21 13:47:28 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=194310&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedResource.cpp:979
&gt; &gt; +    // Verify the buffers are the same as if the encoded data is different than what we&apos;re replacing,
&gt; &gt; +    // we don&apos;t want to replace it.
&gt; 
&gt; I think it&apos;s almost self-evident that we wouldn&apos;t want to replace our content with something that didn&apos;t match -- what&apos;s not self-evident is how that could ever happen. I think that&apos;s a better thing to comment about. Something like:
&gt; 
&gt; This function supports replacing an item with its value in the disk cache. Since the disk cache is race-y, we can&apos;t assume that &apos;newBuffer&apos; actually matches m_data.

Good suggestion.

&gt; &gt; Source/WebCore/loader/cache/CachedResource.cpp:981
&gt; &gt; +    if (m_data-&gt;size() != newBuffer-&gt;size() || !memcmp(m_data-&gt;data(), newBuffer-&gt;data(), m_data-&gt;size()))
&gt; &gt; +        return;
&gt; 
&gt; This is wrong. memcmp returns 0 when the two buffer are equal.

Yikes

&gt; &gt; Source/WebCore/loader/cache/CachedResource.h:268
&gt; &gt; +    void tryReplacingEncodedData(PassRefPtr&lt;SharedBuffer&gt;);
&gt; 
&gt; Your other function is named &quot;tryWrap&quot;, in the imperative form, so I think we should do the same here: &quot;tryReplace&quot;.

Done

&gt; &gt; Source/WebCore/platform/cf/SharedBufferCF.cpp:103
&gt; &gt; +    else
&gt; &gt; +        append(newContents);
&gt; 
&gt; I don&apos;t think this else case makes sense. We don&apos;t have a use case where we would want to append &apos;newContents&apos;, since the optimization will fail if we do. I think it would be better to rename this function to &apos;tryReplaceContents&apos;, and move the buffer comparison into this function as well. Then, we can just return early if &apos;newContents&apos; lacks an optimized form.

Since SharedBuffer is completely divorced from the mechanism we&apos;re adding, I was attempting to keep it general purpose.

I sympathize to your suggestion but think it is flawed itself - &quot;we can just return early if &apos;newContents&apos; lacks an optimized form&quot; is impossible to implement as we know there&apos;s a cfData but we don&apos;t know it&apos;s optimized.

Maybe &quot;tryReplaceContentsWithPlatformBuffer&quot; is both a sufficiently general and sufficiently specific name to make us both happy?

&gt; &gt;&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:262
&gt; &gt;&gt; +        ref();  // Balanced by a deref() in diskCacheTimerFired().
&gt; Nit: It&apos;s adoptRef(), not deref().

Fixed

&gt; &gt; Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm:44
&gt; &gt; +static bool CFURLCacheIsMemMappedData(CFURLCacheRef cache, CFDataRef data)
&gt; 
&gt; Can we use the SOFT_LINK_OPTIONAL macro here instead of rolling our own?

That was the first thing I tried, at which point I discovered:
A - It doesn&apos;t do what you think it does
and
B - It doesn&apos;t work at all on Mac, despite the comment above it claiming it might be used on Mac.

&gt; &gt; Source/WebKit2/Platform/mac/SharedMemoryMac.cpp:110
&gt; &gt; +    sharedMemory-&gt;m_shouldVMDeallocateData = true;
&gt; 
&gt; What is the case where m_shouldVMDeallocateData is false? As far as I can tell, it always ends up true.

I think you&apos;ve misread - When an MMAPed buffer is passed in to ::createFromVMBuffer() directly, SharedMemory didn&apos;t allocate it with vm_allocate and therefore should&apos;ve deallocate it with vm_deallocate.

&gt; &gt; Source/WebKit2/Shared/ShareableResource.cpp:61
&gt; &gt; +    resource-&gt;deref();
&gt; 
&gt; For your timer, you chose adoptRef() instead of an explicit deref(). Let&apos;s pick one style and use it everywhere.
&gt; 
&gt; &gt; Source/WebKit2/Shared/ShareableResource.cpp:67
&gt; &gt; +        resource.leakRef(),
&gt; 
&gt; For your timer, you chose ref() instead of leakRef(). Let&apos;s pick one style and use it everywhere.

Normally we do this type of thing with ref()/deref().

It&apos;s easy to make ShareableResource use ref()/deref() and I&apos;ve made that chance locally.

In the case of the timer, there are multiple code paths to return from the function, so relying on RefPtr&lt;&gt; destruction to do the cleanup is both less code and more foolproof.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860691</commentid>
    <comment_count>11</comment_count>
      <attachid>194337</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-21 14:21:29 -0700</bug_when>
    <thetext>Created attachment 194337
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860692</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-21 14:23:56 -0700</bug_when>
    <thetext>&gt; Maybe &quot;tryReplaceContentsWithPlatformBuffer&quot; is both a sufficiently general and sufficiently specific name to make us both happy?

Sounds good. (My main goal is just removing the call to append(). Putting &quot;try&quot; in the name is just a way to give us the freedom to return early without calling append().)


&gt; &gt; What is the case where m_shouldVMDeallocateData is false? As far as I can tell, it always ends up true.

&gt; I think you&apos;ve misread - When an MMAPed buffer is passed in to ::createFromVMBuffer() directly,
&gt; SharedMemory didn&apos;t allocate it with vm_allocate and therefore should&apos;ve deallocate it with
&gt;  vm_deallocate.

Very possible! :)

The call to createFromVMBuffer that I see is:

RefPtr&lt;SharedMemory&gt; sharedMemory = createFromVMBuffer(toPointer(address), size);

Five lines later I see:

sharedMemory-&gt;m_shouldVMDeallocateData = true;

I don&apos;t see any other calls to createFromVMBuffer(). That&apos;s what made me think that the flag is always logically true.

&gt; Normally we do this type of thing with ref()/deref().

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860695</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-21 14:25:19 -0700</bug_when>
    <thetext>(In reply to comment #12)

&gt; &gt; &gt; What is the case where m_shouldVMDeallocateData is false? As far as I can tell, it always ends up true.
&gt; 
&gt; &gt; I think you&apos;ve misread - When an MMAPed buffer is passed in to ::createFromVMBuffer() directly,
&gt; &gt; SharedMemory didn&apos;t allocate it with vm_allocate and therefore should&apos;ve deallocate it with
&gt; &gt;  vm_deallocate.
&gt; 
&gt; Very possible! :)
&gt; 
&gt; The call to createFromVMBuffer that I see is:
&gt; 
&gt; RefPtr&lt;SharedMemory&gt; sharedMemory = createFromVMBuffer(toPointer(address), size);
&gt; 
&gt; Five lines later I see:
&gt; 
&gt; sharedMemory-&gt;m_shouldVMDeallocateData = true;
&gt; 
&gt; I don&apos;t see any other calls to createFromVMBuffer(). That&apos;s what made me think that the flag is always logically true.

That caller is NetworkResourceLoader::tryGetShareableHandleForResource</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860738</commentid>
    <comment_count>14</comment_count>
      <attachid>194337</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-21 14:50:32 -0700</bug_when>
    <thetext>Comment on attachment 194337
Patch v3

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860799</commentid>
    <comment_count>15</comment_count>
      <attachid>194367</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-21 15:44:20 -0700</bug_when>
    <thetext>Created attachment 194367
Updated patch for EWS run</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860803</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-21 15:48:39 -0700</bug_when>
    <thetext>Attachment 194367 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/loader/ResourceBuffer.h&apos;, u&apos;Source/WebCore/loader/cache/CachedResource.cpp&apos;, u&apos;Source/WebCore/loader/cache/CachedResource.h&apos;, u&apos;Source/WebCore/loader/mac/ResourceBuffer.mm&apos;, u&apos;Source/WebCore/platform/SharedBuffer.h&apos;, u&apos;Source/WebCore/platform/cf/SharedBufferCF.cpp&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp&apos;, u&apos;Source/WebKit2/NetworkProcess/NetworkResourceLoader.h&apos;, u&apos;Source/WebKit2/NetworkProcess/mac/NetworkResourceLoaderMac.mm&apos;, u&apos;Source/WebKit2/Platform/SharedMemory.h&apos;, u&apos;Source/WebKit2/Platform/mac/SharedMemoryMac.cpp&apos;, u&apos;Source/WebKit2/Shared/ShareableResource.cpp&apos;, u&apos;Source/WebKit2/Shared/ShareableResource.h&apos;, u&apos;Source/WebKit2/Shared/WebCoreArgumentCoders.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Network/NetworkProcessConnection.cpp&apos;, u&apos;Source/WebKit2/WebProcess/Network/NetworkProcessConnection.h&apos;, u&apos;Source/WebKit2/WebProcess/Network/NetworkProcessConnection.messages.in&apos;, u&apos;Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp&apos;]&quot; exit_code: 1
Source/WebKit2/Shared/ShareableResource.cpp:69:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/ShareableResource.cpp:70:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/ShareableResource.cpp:71:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/ShareableResource.cpp:72:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/ShareableResource.cpp:73:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Shared/ShareableResource.cpp:75:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 6 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860902</commentid>
    <comment_count>17</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-21 17:08:16 -0700</bug_when>
    <thetext>EWS is running *EXTREMELY* slowly this afternoon.  Enough have passed that I&apos;m pulling the trigger on landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860910</commentid>
    <comment_count>18</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-21 17:16:40 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/146544</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194310</attachid>
            <date>2013-03-21 11:57:42 -0700</date>
            <delta_ts>2013-03-21 12:37:53 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>32633</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxYzIxODgwLi4zNmRjYzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTMtMDMtMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIElmIGEgcHJldmlvdXNseSBsb2FkZWQgcmVzb3VyY2UgaXMgbGF0ZXIgc3RvcmVkIHRvIHRo
ZSBkaXNrIGNhY2hlZCwgcmVwbGFjZSB0aGUgYnVmZmVyIHdpdGggTU1BUCdlZCBtZW1vcnkuCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQxNDE1ND4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTI5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE5vIGNoYW5nZSBpbiBiZWhhdmlvci4p
CisKKyAgICAgICAgR2l2ZSBTaGFyZWRCdWZmZXIgdGhlIGFiaWxpdHkgdG8gcmVwbGFjZSBpdHMg
Y29udGVudHMgZnJvbSBhbm90aGVyIFNoYXJlZEJ1ZmZlcjoKKyAgICAgICAgKiBwbGF0Zm9ybS9T
aGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OnJlcGxhY2VDb250ZW50cyk6CisKKyAg
ICAgICAgRm9yd2FyZCBhbG9uZyBTaGFyZWRCdWZmZXIncyBuZXcgYWJpbGl0eSB0byBSZXNvdXJj
ZUJ1ZmZlcjoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VCdWZmZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VCdWZmZXI6OnJlcGxhY2VTaGFyZWRCdWZmZXJDb250ZW50cyk6Cisg
ICAgICAgICogbG9hZGVyL1Jlc291cmNlQnVmZmVyLmg6CisKKyAgICAgICAgR2l2ZSBDYWNoZWRS
ZXNvdXJjZSB0aGUgYWJpbGl0eSB0byByZXBsYWNlIGl0cyBlbmNvZGVkIGRhdGEgYnVmZmVyIGlm
IGFwcHJvcHJpYXRlOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6dHJ5UmVwbGFjaW5nRW5jb2RlZERh
dGEpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oOgorCisgICAgICAg
ICogV2ViQ29yZS5leHAuaW46CisKIDIwMTMtMDMtMTkgIE1heCBWdWpvdmljICA8bXZ1am92aWNA
YWRvYmUuY29tPgogCiAgICAgICAgIFJlZmFjdG9yIGNvbmRpdGlvbnMgZm9yIHNldENvbXBvc2l0
aW5nTGF5ZXJzTmVlZFJlYnVpbGQgaW4gUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgppbmRleCA4MjJlZmE4Li5hMmIxMjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpA
QCAtMTcwLDYgKzE3MCw3IEBAIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxM2dldFN0YXRpc3Rp
Y3NFdgogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTEzc2V0Q2FwYWNpdGllc0VqamoKIF9fWk43
V2ViQ29yZTExTWVtb3J5Q2FjaGUxNGV2aWN0UmVzb3VyY2VzRXYKIF9fWk43V2ViQ29yZTExTWVt
b3J5Q2FjaGUxNHJlc291cmNlRm9yVVJMRVJLTlNfNEtVUkxFCitfX1pON1dlYkNvcmUxMU1lbW9y
eUNhY2hlMThyZXNvdXJjZUZvclJlcXVlc3RFUktOU18xNVJlc291cmNlUmVxdWVzdEUKIF9fWk43
V2ViQ29yZTExTWVtb3J5Q2FjaGUxOWdldE9yaWdpbnNXaXRoQ2FjaGVFUk4zV1RGN0hhc2hTZXRJ
TlMxXzZSZWZQdHJJTlNfMTRTZWN1cml0eU9yaWdpbkVFRU5TXzE4U2VjdXJpdHlPcmlnaW5IYXNo
RU5TMV8xMEhhc2hUcmFpdHNJUzVfRUVFRQogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTI1cmVt
b3ZlUmVzb3VyY2VzV2l0aE9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKIF9fWk43V2ViQ29y
ZTExVVJMV2l0aERhdGFFUDZOU0RhdGFQNU5TVVJMCkBAIC0yNzMsNiArMjc0LDcgQEAgX19aTjdX
ZWJDb3JlMTN0b0hUTUxFbGVtZW50RVBOU18yMUZvcm1Bc3NvY2lhdGVkRWxlbWVudEUKIF9fWk43
V2ViQ29yZTEzdG9KU0RPTVdpbmRvd0VOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMTRDYWNo
ZWRSZXNvdXJjZTEycmVtb3ZlQ2xpZW50RVBOU18yMENhY2hlZFJlc291cmNlQ2xpZW50RQogX19a
TjdXZWJDb3JlMTRDYWNoZWRSZXNvdXJjZTE2dW5yZWdpc3RlckhhbmRsZUVQTlNfMjRDYWNoZWRS
ZXNvdXJjZUhhbmRsZUJhc2VFCitfX1pON1dlYkNvcmUxNENhY2hlZFJlc291cmNlMjN0cnlSZXBs
YWNpbmdFbmNvZGVkRGF0YUVOM1dURjEwUGFzc1JlZlB0cklOU18xMlNoYXJlZEJ1ZmZlckVFRQog
X19aTjdXZWJDb3JlMTRDYWNoZWRSZXNvdXJjZTlhZGRDbGllbnRFUE5TXzIwQ2FjaGVkUmVzb3Vy
Y2VDbGllbnRFCiBfX1pON1dlYkNvcmUxNENsaWVudFJlY3RMaXN0QzFFUktOM1dURjZWZWN0b3JJ
TlNfOUZsb2F0UXVhZEVMbTBFRUUKIF9fWk43V2ViQ29yZTE0Q2xpZW50UmVjdExpc3RDMUV2CkBA
IC00NTQsNiArNDU2LDcgQEAgX19aTjdXZWJDb3JlMTVKU0RPTVdpbmRvd0Jhc2UxOGNvbW1vbkpT
R2xvYmFsRGF0YUV2CiBfX1pON1dlYkNvcmUxNVBsYXRmb3JtQ0FMYXllcjE4c2V0R2VvbWV0cnlG
bGlwcGVkRWIKIF9fWk43V2ViQ29yZTE1UHJvdGVjdGlvblNwYWNlQzFFUktOM1dURjZTdHJpbmdF
aU5TXzI1UHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZUVTNF9OU18zNVByb3RlY3Rpb25TcGFjZUF1
dGhlbnRpY2F0aW9uU2NoZW1lRQogX19aTjdXZWJDb3JlMTVQcm90ZWN0aW9uU3BhY2VDMUV2Citf
X1pON1dlYkNvcmUxNVJlc291cmNlUmVxdWVzdDEzcGFydGl0aW9uTmFtZUVSS04zV1RGNlN0cmlu
Z0UKIF9fWk43V2ViQ29yZTE1UmVzb3VyY2VSZXF1ZXN0MjFodHRwUGlwZWxpbmluZ0VuYWJsZWRF
dgogX19aTjdXZWJDb3JlMTVSZXNvdXJjZVJlcXVlc3QyNHNldEhUVFBQaXBlbGluaW5nRW5hYmxl
ZEViCiBfX1pON1dlYkNvcmUxNVNjcm9sbEFsaWdubWVudDE3YWxpZ25DZW50ZXJBbHdheXNFCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VCdWZmZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmNwcAppbmRleCA0OWY0NmZiLi5kOWUy
ZjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VCdWZmZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5jcHAKQEAgLTEzOSw0
ICsxMzksMTIgQEAgdm9pZCBSZXNvdXJjZUJ1ZmZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZE1lbWJlciht
X3NoYXJlZEJ1ZmZlciwgInNoYXJlZEJ1ZmZlciIpOwogfQogCit2b2lkIFJlc291cmNlQnVmZmVy
OjpyZXBsYWNlU2hhcmVkQnVmZmVyQ29udGVudHMoU2hhcmVkQnVmZmVyKiBuZXdDb250ZW50cykK
K3sKKyAgICBpZiAoIW1fc2hhcmVkQnVmZmVyKQorICAgICAgICBtX3NoYXJlZEJ1ZmZlciA9IG5l
d0NvbnRlbnRzOworICAgIGVsc2UKKyAgICAgICAgbV9zaGFyZWRCdWZmZXItPnJlcGxhY2VDb250
ZW50cyhuZXdDb250ZW50cyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmgKaW5kZXggMTAwMzY2Yy4uMTA5ZjQzNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmgKQEAgLTY0LDYgKzY0LDcgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIGdldFNvbWVEYXRhKGNvbnN0IGNoYXIqJiBkYXRhLCB1bnNpZ25lZCBw
b3NpdGlvbiA9IDApIGNvbnN0OwogICAgIAogICAgIFNoYXJlZEJ1ZmZlciogc2hhcmVkQnVmZmVy
KCkgY29uc3Q7CisgICAgdm9pZCByZXBsYWNlU2hhcmVkQnVmZmVyQ29udGVudHMoU2hhcmVkQnVm
ZmVyKik7CiAgICAgUGFzc1JlZlB0cjxSZXNvdXJjZUJ1ZmZlcj4gY29weSgpIGNvbnN0OwogCiAg
ICAgYm9vbCBoYXNQdXJnZWFibGVCdWZmZXIoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCmluZGV4IGNhMmU4ZTMuLjdkNDQyZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcApAQCAt
OTY5LDQgKzk2OSwxOSBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpyZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgICAgICBpbmZvLmFk
ZFJhd0J1ZmZlcihtX3B1cmdlYWJsZURhdGEuZ2V0KCksIG1fcHVyZ2VhYmxlRGF0YS0+c2l6ZSgp
LCAiUHVyZ2VhYmxlRGF0YSIsICJwdXJnZWFibGVEYXRhIik7CiB9CiAKKyNpZiBQTEFURk9STShN
QUMpCit2b2lkIENhY2hlZFJlc291cmNlOjp0cnlSZXBsYWNpbmdFbmNvZGVkRGF0YShQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gbmV3QnVmZmVyKQoreworICAgIGlmICghbV9kYXRhKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgLy8gVmVyaWZ5IHRoZSBidWZmZXJzIGFyZSB0aGUgc2FtZSBh
cyBpZiB0aGUgZW5jb2RlZCBkYXRhIGlzIGRpZmZlcmVudCB0aGFuIHdoYXQgd2UncmUgcmVwbGFj
aW5nLAorICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gcmVwbGFjZSBpdC4KKyAgICBpZiAobV9kYXRh
LT5zaXplKCkgIT0gbmV3QnVmZmVyLT5zaXplKCkgfHwgIW1lbWNtcChtX2RhdGEtPmRhdGEoKSwg
bmV3QnVmZmVyLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIG1fZGF0YS0+cmVwbGFjZVNoYXJlZEJ1ZmZlckNvbnRlbnRzKG5ld0J1ZmZlci5nZXQo
KSk7Cit9CisjZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuaAppbmRleCAyN2IwOGRiLi42N2EwYmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaApAQCAtNTAsNiArNTAsNyBAQCBjbGFzcyBJbnNw
ZWN0b3JSZXNvdXJjZTsKIGNsYXNzIFB1cmdlYWJsZUJ1ZmZlcjsKIGNsYXNzIFJlc291cmNlQnVm
ZmVyOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CitjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBT
dWJyZXNvdXJjZUxvYWRlcjsKIAogLy8gQSByZXNvdXJjZSB0aGF0IGlzIGhlbGQgaW4gdGhlIGNh
Y2hlLiBDbGFzc2VzIHdobyB3YW50IHRvIHVzZSB0aGlzIG9iamVjdCBzaG91bGQgZGVyaXZlCkBA
IC0yNjMsNiArMjY0LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5SZXVzZShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgdm9pZCB0cnlSZXBsYWNpbmdFbmNvZGVkRGF0YShQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4pOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgY2hl
Y2tOb3RpZnkoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCAz
MmU3MWFmLi45YzU1N2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApA
QCAtMTE4LDYgKzExOCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY3JlYXRlUHVyZ2VhYmxlQnVm
ZmVyKCkgY29uc3Q7CiAKKyAgICB2b2lkIHJlcGxhY2VDb250ZW50cyhTaGFyZWRCdWZmZXIqKTsK
KwogcHJpdmF0ZToKICAgICBTaGFyZWRCdWZmZXIoKTsKICAgICBleHBsaWNpdCBTaGFyZWRCdWZm
ZXIoc2l6ZV90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJl
ZEJ1ZmZlckNGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNG
LmNwcAppbmRleCBkNTg3ZTc1Li5kMGU4ZTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCkBAIC05Myw2ICs5MywxNiBAQCB2b2lkIFNoYXJlZEJ1
ZmZlcjo6Y2xlYXJQbGF0Zm9ybURhdGEoKQogICAgIG1fY2ZEYXRhID0gMDsKIH0KIAordm9pZCBT
aGFyZWRCdWZmZXI6OnJlcGxhY2VDb250ZW50cyhTaGFyZWRCdWZmZXIqIG5ld0NvbnRlbnRzKQor
eyAgICAKKyAgICBjbGVhcigpOworCisgICAgaWYgKG5ld0NvbnRlbnRzLT5tX2NmRGF0YSkKKyAg
ICAgICAgbV9jZkRhdGEgPSBuZXdDb250ZW50cy0+bV9jZkRhdGE7CisgICAgZWxzZQorICAgICAg
ICBhcHBlbmQobmV3Q29udGVudHMpOworfQorCiAjaWYgVVNFKE5FVFdPUktfQ0ZEQVRBX0FSUkFZ
X0NBTExCQUNLKQogdm9pZCBTaGFyZWRCdWZmZXI6OmFwcGVuZChDRkRhdGFSZWYgZGF0YSkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBkN2EzMGViLi5hMjgzMDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAg
QEAKKzIwMTMtMDMtMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIElmIGEgcHJldmlvdXNseSBsb2FkZWQgcmVzb3VyY2UgaXMgbGF0ZXIgc3RvcmVkIHRvIHRo
ZSBkaXNrIGNhY2hlZCwgcmVwbGFjZSB0aGUgYnVmZmVyIHdpdGggTU1BUCdlZCBtZW1vcnkuCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQxNDE1ND4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTI5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgYSB0aW1lciB0aGF0IHdpbGwgdHJ5IHRvIGxvb2sgdXAg
dGhlIGRpc2sgY2FjaGVkIGJ1ZmZlciBmb3IgdGhlIHJlc291cmNlIGEgZmV3IHNlY29uZHMgYWZ0
ZXIgdGhlIGxvYWQKKyAgICAgICAgY29tcGxldGVzIGFuZCAtIGlmIHRoZSByZXNvdXJjZSBpcyBk
aXNrIGJhY2tlZCAtIHNlbmQgaXQgdG8gdGhlIFdlYlByb2Nlc3MgZm9yIHNoYXJpbmc6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpOZXR3b3JrUmVzb3VyY2VMb2FkZXIpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpc2tDYWNoZVRpbWVyRmly
ZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVj
ZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZp
bmlzaExvYWRpbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5oOgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxv
YWRlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp0cnlH
ZXRTaGFyZWFibGVIYW5kbGVGb3JSZXNvdXJjZSk6CisKKyAgICAgICAgUmVmYWN0b3IgU2hhcmVk
TWVtb3J5IHRvIHJlbW92ZSB0aGUgdW5uZWNlc3Nhcnkgdm1fY29weSBhbmQgb25seSB2bV9hbGxv
Y2F0ZSB3aGVuIGFuIGFwcHJvcHJpYXRlIGJ1ZmZlcgorICAgICAgICBkb2Vzbid0IGFscmVhZHkg
ZXhpc3Q6CisgICAgICAgICogUGxhdGZvcm0vU2hhcmVkTWVtb3J5Lmg6CisgICAgICAgICogUGxh
dGZvcm0vbWFjL1NoYXJlZE1lbW9yeU1hYy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGVGcm9t
Vk1CdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkp
OgorCisgICAgICAgIEdpdmUgU2hhcmVhYmxlUmVzb3VyY2UgdGhlIGFiaWxpdHkgdG8gY3JlYXRl
IGEgQ0ZEYXRhUmVmIHRoYXQgd3JhcHMgInRoaXMiLCBhbmQgcmV0dXJuIGl0IGluIGEgU2hhcmVk
QnVmZmVyOgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OnNoYXJlYWJsZVJlc291cmNlRGVhbGxvY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6
OmNyZWF0ZVNoYXJlYWJsZVJlc291cmNlRGVhbGxvY2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpT
aGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlOjp0cnlXcmFwSW5TaGFyZWRCdWZmZXIpOgorICAgICAg
ICAqIFNoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5oOgorCisgICAgICAgICogU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5jcHA6IEVuY29kZS9kZWNvZGUgdGhlIGNhY2hlIHBhcnRpdGlvbiBm
b3IgUmVzb3VyY2VSZXF1ZXN0LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb246OmRpZENhY2hlUmVzb3VyY2UpOiBMb29rdXAgdGhlIENhY2hlZFJl
c291cmNlIGluIHRoZSBXZWJDb3JlIG1lbW9yeSBjYWNoZQorICAgICAgICAgIGFuZCB0cnkgdG8g
cmVwbGFjZSBpdHMgZW5jb2RlZCBkYXRhIHdpdGggdGhlIHNoYXJlZCBtbWFwJ2VkIGJ1ZmZlci4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5t
ZXNzYWdlcy5pbjoKKworICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZl
UmVzb3VyY2UpOgorCiAyMDEzLTAzLTE5ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBGaXggV2ViS2l0MiBidWlsZHMgYWZ0ZXIgcjE0NjE5Mwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRlci5jcHAKaW5kZXggZmJlOWFlOC4uZjY0ZWNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKKyNpbmNs
dWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdv
cmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DZXJ0aWZpY2F0
ZUluZm8uaCIKICNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgpAQCAtNTEsNiAr
NTIsMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6TmV0
d29ya1Jlc291cmNlTG9hZGVyKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBs
b2FkUGFyYW1ldGVycywgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24p
CiAgICAgOiBTY2hlZHVsYWJsZUxvYWRlcihsb2FkUGFyYW1ldGVycywgY29ubmVjdGlvbikKKyAg
ICAsIG1fYnl0ZXNSZWNlaXZlZCgwKQorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTA5MAorICAgICwgbV9kaXNrQ2FjaGVUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMs
ICZOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpc2tDYWNoZVRpbWVyRmlyZWQpCisjZW5kaWYgLy8g
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIH0KQEAgLTE2OCw2ICsxNzMsMjEgQEAgdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NEaWRDbG9zZSgpCiAgICAgY2xlYW51cCgp
OwogfQogCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCit2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlza0NhY2hlVGltZXJGaXJlZCgpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBh
ZG9wdGVkUmVmID0gYWRvcHRSZWYodGhpcyk7IC8vIEJhbGFuY2Ugb3V0IHRoZSByZWYoKSB3aGVu
IHNldHRpbmcgdGhlIHRpbWVyLgorCisgICAgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSBoYW5k
bGU7CisgICAgdHJ5R2V0U2hhcmVhYmxlSGFuZGxlRm9yUmVzb3VyY2UoaGFuZGxlKTsKKyAgICBp
ZiAoaGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRpZENhY2hlUmVzb3VyY2UocmVxdWVzdCgpLCBo
YW5kbGUpKTsKK30KKyNlbmRpZiAvLyAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDkwCisKIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgTmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpzZW5kQWJvcnRpbmdPbkZhaWx1cmUoY29uc3QgVSYgbWVzc2FnZSkKIHsKICAgICBib29s
IHJlc3VsdCA9IHNlbmQobWVzc2FnZSk7CkBAIC0yMDMsNyArMjIzLDE3IEBAIHZvaWQgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBSZXNvdXJjZVJlCiAgICAgaWYgKCFzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6Oldl
YlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzcG9uc2VXaXRoQ2VydGlmaWNhdGVJbmZvKHJl
c3BvbnNlLCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyhyZXNwb25zZSkpKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgcGxhdGZvcm1EaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOworI2lmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorICAgIFNoYXJlYWJsZVJlc291
cmNlOjpIYW5kbGUgaGFuZGxlOworICAgIHRyeUdldFNoYXJlYWJsZUhhbmRsZUZvclJlc291cmNl
KGhhbmRsZSk7CisgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gU2luY2Ugd2UncmUgZGVsaXZlcmluZyB0aGlzIHJlc291cmNlIGJ5IG91cnNlbHZlcyBh
bGwgYXQgb25jZSwgd2UnbGwgYWJvcnQgdGhlIHJlc291cmNlIGhhbmRsZSBzaW5jZSB3ZSBkb24n
dCBuZWVkIGFueW1vcmUgY2FsbGJhY2tzIGZyb20gUmVzb3VyY2VIYW5kbGUuCisgICAgYWJvcnRJ
blByb2dyZXNzTG9hZCgpOworICAgIAorICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9h
ZGVyOjpEaWRSZWNlaXZlUmVzb3VyY2UoaGFuZGxlLCBjdXJyZW50VGltZSgpKSk7CisjZW5kaWYg
Ly8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiB9CiAKIHZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCkKQEAgLTIxMSw2
ICsyNDEsOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbgogICAgIC8vIEZJWE1FIChOZXR3b3Jr
UHJvY2Vzcyk6IEZvciB0aGUgbWVtb3J5IGNhY2hlIHdlJ2xsIGFsc28gbmVlZCB0byBjYWNoZSB0
aGUgcmVzcG9uc2UgZGF0YSBoZXJlLgogICAgIC8vIFN1Y2ggYnVmZmVyaW5nIHdpbGwgbmVlZCB0
byBiZSB0aHJlYWQgc2FmZSwgYXMgdGhpcyBjYWxsYmFjayBpcyBoYXBwZW5pbmcgb24gYSBiYWNr
Z3JvdW5kIHRocmVhZC4KICAgICAKKyAgICBtX2J5dGVzUmVjZWl2ZWQgKz0gbGVuZ3RoOworCiAg
ICAgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOwogICAgIHNlbmRBYm9ydGluZ09uRmFpbHVy
ZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVEYXRhKGRhdGFSZWZlcmVu
Y2UsIGVuY29kZWREYXRhTGVuZ3RoKSk7CiB9CkBAIC0yMjEsNiArMjUzLDE3IEBAIHZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91
YmxlIGZpbmlzaFRpbWUpCiAgICAgLy8gU3VjaCBib29ra2VlcGluZyB3aWxsIG5lZWQgdG8gYmUg
dGhyZWFkIHNhZmUsIGFzIHRoaXMgY2FsbGJhY2sgaXMgaGFwcGVuaW5nIG9uIGEgYmFja2dyb3Vu
ZCB0aHJlYWQuCiAgICAgaW52YWxpZGF0ZVNhbmRib3hFeHRlbnNpb25zKCk7CiAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZEZpbmlzaFJlc291cmNlTG9hZChmaW5pc2hU
aW1lKSk7CisKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyAg
ICAvLyBJZiB0aGlzIHJlc291cmNlIHdhcyBsYXJnZSBlbm91Z2ggdGhhdCBpdCBzaG91bGQgYmUg
Y2FjaGVkIHRvIGRpc2sgYXMgYSBzZXBhcmF0ZSBmaWxlLAorICAgIC8vIHRoZW4gd2Ugc2hvdWxk
IHRyeSB0byByZS1kZWxpdmVyIHRoZSByZXNvdXJjZSB0byB0aGUgV2ViUHJvY2VzcyBvbmNlIGl0
ICppcyogc2F2ZWQgYXMgYSBzZXBhcmF0ZSBmaWxlLiAgICAKKyAgICBpZiAobV9ieXRlc1JlY2Vp
dmVkID49IGZpbGVCYWNrZWRSZXNvdXJjZU1pbmltdW1TaXplKCkpIHsKKyAgICAgICAgLy8gRklY
TUU6IE9uY2UgYSBub3RpZmljYXRpb24gQVBJIGV4aXN0cyB0aGF0IG9ibGl2aWF0ZXMgdGhpcyB0
aW1lciwgdXNlIHRoYXQgaW5zdGVhZC4KKyAgICAgICAgcmVmKCk7ICAvLyBCYWxhbmNlZCBieSBh
IGRlcmVmKCkgaW4gZGlza0NhY2hlVGltZXJGaXJlZCgpLgorICAgICAgICBtX2Rpc2tDYWNoZVRp
bWVyLnN0YXJ0T25lU2hvdCgxMCk7CisgICAgfQorI2VuZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorICAgIAogICAgIHNjaGVkdWxlQ2xlYW51cE9uTWFpblRo
cmVhZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtSZXNvdXJjZUxvYWRlci5oCmluZGV4IGEzZjUzYjEuLjUwYWQzNGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5o
CkBAIC0zMCw4ICszMCwxMCBAQAogCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1
ZGUgIlNjaGVkdWxhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3Au
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVzb3VyY2VCdWZmZXI7CkBAIC0xMDYs
OCArMTA4LDE3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBzZW5k
U3luY0Fib3J0aW5nT25GYWlsdXJlKGNvbnN0IFUmIG1lc3NhZ2UsIGNvbnN0IHR5cGVuYW1lIFU6
OlJlcGx5JiByZXBseSk7CiAgICAgdm9pZCBhYm9ydEluUHJvZ3Jlc3NMb2FkKCk7CiAKKyAgICB2
b2lkIHRyeUdldFNoYXJlYWJsZUhhbmRsZUZvclJlc291cmNlKFNoYXJlYWJsZVJlc291cmNlOjpI
YW5kbGUmIGhhbmRsZSk7CisKICAgICBSZWZQdHI8UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ+IG1f
bmV0d29ya2luZ0NvbnRleHQ7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBt
X2hhbmRsZTsKKworICAgIHVpbnQ2NF90IG1fYnl0ZXNSZWNlaXZlZDsKKworI2lmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorICAgIHZvaWQgZGlza0NhY2hlVGltZXJG
aXJlZCgpOworICAgIFdlYkNvcmU6OlJ1bkxvb3A6OlRpbWVyPE5ldHdvcmtSZXNvdXJjZUxvYWRl
cj4gbV9kaXNrQ2FjaGVUaW1lcjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jl
c291cmNlTG9hZGVyTWFjLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05l
dHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbQppbmRleCA4MWUzZmI0Li5kMTU0ZWVhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9h
ZGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3Jr
UmVzb3VyY2VMb2FkZXJNYWMubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJTaGFyZWFi
bGVSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldlYlJl
c291cmNlTG9hZGVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zOCwxMSArMzksMjEgQEAgdHlwZWRl
ZiBzdHJ1Y3QgX0NGQ2FjaGVkVVJMUmVzcG9uc2UqIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY7CiBl
eHRlcm4gIkMiIENGVVJMQ2FjaGVSZWYgQ0ZVUkxDYWNoZUNvcHlTaGFyZWRVUkxDYWNoZSgpOwog
ZXh0ZXJuICJDIiBDRkNhY2hlZFVSTFJlc3BvbnNlUmVmIENGVVJMQ2FjaGVDb3B5UmVzcG9uc2VG
b3JSZXF1ZXN0KENGVVJMQ2FjaGVSZWYsIENGVVJMUmVxdWVzdFJlZik7CiBleHRlcm4gIkMiIENG
QXJyYXlSZWYgQ0ZDYWNoZWRVUkxSZXNwb25zZUNvcHlSZWNlaXZlckRhdGFBcnJheShDRkNhY2hl
ZFVSTFJlc3BvbnNlUmVmKTsKKworU09GVF9MSU5LX0ZSQU1FV09SSyhDRk5ldHdvcmspCitzdGF0
aWMgYm9vbCBDRlVSTENhY2hlSXNNZW1NYXBwZWREYXRhKENGVVJMQ2FjaGVSZWYgY2FjaGUsIENG
RGF0YVJlZiBkYXRhKQoreworICAgIHN0YXRpYyBDRkJvb2xlYW5SZWYgKCpzb2Z0TGlua0lzQ2Fj
aGVNTUFQZWREYXRhKShDRlVSTENhY2hlUmVmIGNhY2hlLCBDRkRhdGFSZWYgZGF0YSkgPSAoQ0ZC
b29sZWFuUmVmICgqKShDRlVSTENhY2hlUmVmIGNhY2hlLCBDRkRhdGFSZWYgZGF0YSkpIGRsc3lt
KENGTmV0d29ya0xpYnJhcnkoKSwgIl9DRlVSTENhY2hlSXNSZXNwb25zZURhdGFNZW1NYXBwZWQi
KTsKKyAgICAKKyAgICBpZiAoc29mdExpbmtJc0NhY2hlTU1BUGVkRGF0YSkKKyAgICAgICAgcmV0
dXJuIHNvZnRMaW5rSXNDYWNoZU1NQVBlZERhdGEoY2FjaGUsIGRhdGEpID09IGtDRkJvb2xlYW5U
cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnBsYXRmb3JtRGlkUmVjZWl2ZVJlc3BvbnNl
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKQordm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OnRyeUdldFNoYXJlYWJsZUhhbmRsZUZvclJlc291cmNlKFNoYXJlYWJsZVJlc291cmNl
OjpIYW5kbGUmIGhhbmRsZSkKIHsKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
IDwgMTA5MAogICAgIHJldHVybjsKQEAgLTcyLDI0ICs4MywxOCBAQCB2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6cGxhdGZvcm1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZQogICAgIGlmIChDRkRhdGFHZXRMZW5ndGgoZGF0YSkgPCAoQ0ZJbmRleClmaWxlQmFj
a2VkUmVzb3VyY2VNaW5pbXVtU2l6ZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgUmVm
UHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjpjcmVhdGVXaXRo
Vk1Db3B5KCh2b2lkKilDRkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0
YSkpOworICAgIGlmICghQ0ZVUkxDYWNoZUlzTWVtTWFwcGVkRGF0YShjYWNoZS5nZXQoKSwgZGF0
YSkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1l
bW9yeSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlRnJvbVZNQnVmZmVyKCh2b2lkKilDRkRhdGFHZXRC
eXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSkpOwogICAgIGlmICghc2hhcmVkTWVt
b3J5KSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBWTUNvcGllZCBzaGFy
ZWQgbWVtb3J5IGZvciBjYWNoZWQgcmVzb3VyY2UuICBXZSdsbCBsZXQgaXQgbG9hZCBub3JtYWxs
eS4iKTsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIFZNQ29waWVkIHNoYXJl
ZCBtZW1vcnkgZm9yIGNhY2hlZCByZXNvdXJjZS4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAKKwogICAgIHNpemVfdCBzaXplID0gc2hhcmVkTWVtb3J5LT5zaXplKCk7CiAgICAgUmVmUHRy
PFNoYXJlYWJsZVJlc291cmNlPiByZXNvdXJjZSA9IFNoYXJlYWJsZVJlc291cmNlOjpjcmVhdGUo
c2hhcmVkTWVtb3J5LnJlbGVhc2UoKSwgMCwgc2l6ZSk7Ci0gICAgU2hhcmVhYmxlUmVzb3VyY2U6
OkhhbmRsZSBoYW5kbGU7Ci0gICAgaWYgKCFyZXNvdXJjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIFNoYXJlYWJsZVJlc291cmNl
IGhhbmRsZSB0byBzZW5kIHRvIHRoZSBXZWJQcm9jZXNzIGZvciByZXNvdXJjZS4gIFdlJ2xsIGxl
dCBpdCBsb2FkIG5vcm1hbGx5LiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
U2luY2Ugd2UncmUgZGVsaXZlcmluZyB0aGlzIHJlc291cmNlIGJ5IG91cnNlbHZlcyBhbGwgYXQg
b25jZSwgd2UnbGwgYWJvcnQgdGhlIHJlc291cmNlIGhhbmRsZSBzaW5jZSB3ZSBkb24ndCBuZWVk
IGFueW1vcmUgY2FsbGJhY2tzIGZyb20gQ0ZOZXR3b3JrLgotICAgIGFib3J0SW5Qcm9ncmVzc0xv
YWQoKTsKLSAgICAKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkUmVj
ZWl2ZVJlc291cmNlKGhhbmRsZSwgY3VycmVudFRpbWUoKSkpOworICAgIHJlc291cmNlLT5jcmVh
dGVIYW5kbGUoaGFuZGxlKTsKICNlbmRpZiAvLyBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEIDwgMTA5MAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFy
ZWRNZW1vcnkuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCmluZGV4
IDdlNTdkNjcuLjU3OTdmYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1No
YXJlZE1lbW9yeS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5o
CkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIENyZWF0ZSBhIHNoYXJlZCBtZW1v
cnkgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHNpemUgYnkgdm1fY29weSdpbmcgdGhlIGdpdmVuIGJ1
ZmZlci4KICAgICAvLyBXaWxsIHJldHVybiAwIG9uIGZhaWx1cmUuCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2hhcmVkTWVtb3J5PiBjcmVhdGVXaXRoVk1Db3B5KHZvaWQqLCBzaXplX3QpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gY3JlYXRlRnJvbVZNQnVmZmVyKHZvaWQq
LCBzaXplX3QpOwogCiAjaWYgT1MoV0lORE9XUykKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFy
ZWRNZW1vcnk+IGFkb3B0KEhBTkRMRSwgc2l6ZV90LCBQcm90ZWN0aW9uKTsKQEAgLTEwOSw2ICsx
MDksOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHNpemVfdCBtX3NpemU7CiAgICAgdm9pZCog
bV9kYXRhOworICAgIGJvb2wgbV9zaG91bGRWTURlYWxsb2NhdGVEYXRhOworCiAjaWYgT1MoREFS
V0lOKQogICAgIG1hY2hfcG9ydF90IG1fcG9ydDsKICNlbGlmIE9TKFdJTkRPV1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvU2hhcmVkTWVtb3J5TWFjLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9TaGFyZWRNZW1vcnlNYWMuY3BwCmluZGV4IDFhNDcw
MmUuLjRkNjRhZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9TaGFy
ZWRNZW1vcnlNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9TaGFyZWRN
ZW1vcnlNYWMuY3BwCkBAIC05MiwzNyArOTIsMzYgQEAgc3RhdGljIGlubGluZSBtYWNoX3ZtX2Fk
ZHJlc3NfdCB0b1ZNQWRkcmVzcyh2b2lkKiBwb2ludGVyKQogICAgIAogUGFzc1JlZlB0cjxTaGFy
ZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNpemVfdCBzaXplKQogewotICAgIHJldHVy
biBTaGFyZWRNZW1vcnk6OmNyZWF0ZVdpdGhWTUNvcHkoMCwgc2l6ZSk7Ci19Ci0KLVBhc3NSZWZQ
dHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZVdpdGhWTUNvcHkodm9pZCogZGF0
YSwgc2l6ZV90IHNpemUpCi17CiAgICAgQVNTRVJUKHNpemUpOwogCiAgICAgbWFjaF92bV9hZGRy
ZXNzX3QgYWRkcmVzczsKICAgICBrZXJuX3JldHVybl90IGtyID0gbWFjaF92bV9hbGxvY2F0ZSht
YWNoX3Rhc2tfc2VsZigpLCAmYWRkcmVzcywgcm91bmRfcGFnZShzaXplKSwgVk1fRkxBR1NfQU5Z
V0hFUkUpOwogICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gYWxsb2NhdGUgbWFjaF92bV9hbGxvY2F0ZSBzaGFyZWQgbWVtb3J5ICglenUg
Ynl0ZXMpLiAlcyAoJXgpIiwgc2l6ZSwgbWFjaF9lcnJvcl9zdHJpbmcoa3IpLCBrcik7IAorICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBtYWNoX3ZtX2FsbG9jYXRlIHNoYXJl
ZCBtZW1vcnkgKCV6dSBieXRlcykuICVzICgleCkiLCBzaXplLCBtYWNoX2Vycm9yX3N0cmluZyhr
ciksIGtyKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIAotICAgIGlmIChkYXRhKSB7
Ci0gICAgICAgIGtyID0gbWFjaF92bV9jb3B5KG1hY2hfdGFza19zZWxmKCksIHRvVk1BZGRyZXNz
KGRhdGEpLCByb3VuZF9wYWdlKHNpemUpLCBhZGRyZXNzKTsKLSAgICAgICAgaWYgKGtyICE9IEtF
Uk5fU1VDQ0VTUykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdm1fY29weSBp
biB0byBzaGFyZWQgbWVtb3J5ICglenUgYnl0ZXMpLiAlcyAoJXgpIiwgc2l6ZSwgbWFjaF9lcnJv
cl9zdHJpbmcoa3IpLCBrcik7IAotICAgICAgICAgICAgbWFjaF92bV9kZWFsbG9jYXRlKG1hY2hf
dGFza19zZWxmKCksIGFkZHJlc3MsIHJvdW5kX3BhZ2Uoc2l6ZSkpOwotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9CiAKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFy
ZWRNZW1vcnkgPSBjcmVhdGVGcm9tVk1CdWZmZXIodG9Qb2ludGVyKGFkZHJlc3MpLCBzaXplKTsK
KyAgICBpZiAoIXNoYXJlZE1lbW9yeSkgeworICAgICAgICBtYWNoX3ZtX2RlYWxsb2NhdGUobWFj
aF90YXNrX3NlbGYoKSwgYWRkcmVzcywgcm91bmRfcGFnZShzaXplKSk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICAKKyAgICBzaGFyZWRNZW1vcnktPm1fc2hvdWxkVk1EZWFsbG9jYXRl
RGF0YSA9IHRydWU7CisgICAgcmV0dXJuIHNoYXJlZE1lbW9yeS5yZWxlYXNlKCk7Cit9CisgCitQ
YXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGVGcm9tVk1CdWZmZXIo
dm9pZCogZGF0YSwgc2l6ZV90IHNpemUpICAKK3sKKyAgICBBU1NFUlQoc2l6ZSk7CisgICAgCiAg
ICAgLy8gQ3JlYXRlIGEgTWFjaCBwb3J0IHRoYXQgcmVwcmVzZW50cyB0aGUgc2hhcmVkIG1lbW9y
eS4KICAgICBtYWNoX3BvcnRfdCBwb3J0OwogICAgIG1lbW9yeV9vYmplY3Rfc2l6ZV90IG1lbW9y
eU9iamVjdFNpemUgPSByb3VuZF9wYWdlKHNpemUpOwotICAgIGtyID0gbWFjaF9tYWtlX21lbW9y
eV9lbnRyeV82NChtYWNoX3Rhc2tfc2VsZigpLCAmbWVtb3J5T2JqZWN0U2l6ZSwgYWRkcmVzcywg
Vk1fUFJPVF9ERUZBVUxULCAmcG9ydCwgTUFDSF9QT1JUX05VTEwpOwotCisgICAga2Vybl9yZXR1
cm5fdCBrciA9IG1hY2hfbWFrZV9tZW1vcnlfZW50cnlfNjQobWFjaF90YXNrX3NlbGYoKSwgJm1l
bW9yeU9iamVjdFNpemUsIHRvVk1BZGRyZXNzKGRhdGEpLCBWTV9QUk9UX0RFRkFVTFQgfCBWTV9Q
Uk9UX0lTX01BU0ssICZwb3J0LCBNQUNIX1BPUlRfTlVMTCk7CisgICAgCiAgICAgaWYgKGtyICE9
IEtFUk5fU1VDQ0VTUykgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgYSBt
YWNoIHBvcnQgZm9yIHNoYXJlZCBtZW1vcnkuICVzICgleCkiLCBtYWNoX2Vycm9yX3N0cmluZyhr
ciksIGtyKTsKLSAgICAgICAgbWFjaF92bV9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIGFk
ZHJlc3MsIHJvdW5kX3BhZ2Uoc2l6ZSkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAg
LTEzMCw3ICsxMjksOCBAQCBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5Ojpj
cmVhdGVXaXRoVk1Db3B5KHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQogCiAgICAgUmVmUHRyPFNo
YXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KGFkb3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkpKTsKICAg
ICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IHNpemU7Ci0gICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEg
PSB0b1BvaW50ZXIoYWRkcmVzcyk7CisgICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSBkYXRhOwor
ICAgIHNoYXJlZE1lbW9yeS0+bV9zaG91bGRWTURlYWxsb2NhdGVEYXRhID0gZmFsc2U7CiAgICAg
c2hhcmVkTWVtb3J5LT5tX3BvcnQgPSBwb3J0OwogCiAgICAgcmV0dXJuIHNoYXJlZE1lbW9yeS5y
ZWxlYXNlKCk7CkBAIC0xNjQsNiArMTY0LDcgQEAgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNo
YXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0IEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHAKICAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkoYWRvcHRSZWYobmV3IFNoYXJlZE1l
bW9yeSkpOwogICAgIHNoYXJlZE1lbW9yeS0+bV9zaXplID0gaGFuZGxlLm1fc2l6ZTsKICAgICBz
aGFyZWRNZW1vcnktPm1fZGF0YSA9IHRvUG9pbnRlcihtYXBwZWRBZGRyZXNzKTsKKyAgICBzaGFy
ZWRNZW1vcnktPm1fc2hvdWxkVk1EZWFsbG9jYXRlRGF0YSA9IHRydWU7CiAgICAgc2hhcmVkTWVt
b3J5LT5tX3BvcnQgPSBNQUNIX1BPUlRfTlVMTDsKIAogICAgIHJldHVybiBzaGFyZWRNZW1vcnku
cmVsZWFzZSgpOwpAQCAtMTcxLDcgKzE3Miw3IEBAIFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBT
aGFyZWRNZW1vcnk6OmNyZWF0ZShjb25zdCBIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwCiAK
IFNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9yeSgpCiB7Ci0gICAgaWYgKG1fZGF0YSkgeworICAg
IGlmIChtX2RhdGEgJiYgbV9zaG91bGRWTURlYWxsb2NhdGVEYXRhKSB7CiAgICAgICAgIGtlcm5f
cmV0dXJuX3Qga3IgPSBtYWNoX3ZtX2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgdG9WTUFk
ZHJlc3MobV9kYXRhKSwgcm91bmRfcGFnZShtX3NpemUpKTsKICAgICAgICAgQVNTRVJUX1VOVVNF
RChrciwga3IgPT0gS0VSTl9TVUNDRVNTKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L1NoYXJlYWJsZVJlc291cmNlLmNwcAppbmRleCBmN2VmZTg4Li44YThhOTU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5jcHAKQEAgLTI3LDYgKzI3LDkgQEAK
ICNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgogCiAjaW5jbHVkZSAiQXJndW1lbnRDb2Rl
cnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTUxLDYgKzU0LDQyIEBAIGJv
b2wgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciYgZGVjb2RlciwgSGFuZGxlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KKworc3RhdGljIHZvaWQgc2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRlKHZvaWQg
KnB0ciwgdm9pZCAqaW5mbykKK3sKKyAgICBTaGFyZWFibGVSZXNvdXJjZSogcmVzb3VyY2UgPSBz
dGF0aWNfY2FzdDxTaGFyZWFibGVSZXNvdXJjZSo+KGluZm8pOworICAgIHJlc291cmNlLT5kZXJl
ZigpOworfQorICAgIAorc3RhdGljIENGQWxsb2NhdG9yUmVmIGNyZWF0ZVNoYXJlYWJsZVJlc291
cmNlRGVhbGxvY2F0b3IoUGFzc1JlZlB0cjxTaGFyZWFibGVSZXNvdXJjZT4gcmVzb3VyY2UpCit7
CisgICAgQ0ZBbGxvY2F0b3JDb250ZXh0IGNvbnRleHQgPSB7IDAsCisgICAgICAgIHJlc291cmNl
LmxlYWtSZWYoKSwKKyAgICAgICAgTlVMTCwgLy8gcmV0YWluCisgICAgICAgIE5VTEwsIC8vIHJl
bGVhc2UKKyAgICAgICAgTlVMTCwgLy8gY29weURlc2NyaXB0aW9uCisgICAgICAgIE5VTEwsIC8v
IGFsbG9jYXRlCisgICAgICAgIE5VTEwsIC8vIHJlYWxsb2NhdGUKKyAgICAgICAgc2hhcmVhYmxl
UmVzb3VyY2VEZWFsbG9jYXRlLAorICAgICAgICBOVUxMLAorICAgIH07CisKKyAgICByZXR1cm4g
Q0ZBbGxvY2F0b3JDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgJmNvbnRleHQpOworfQorCitQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZTo6dHJ5V3Jh
cEluU2hhcmVkQnVmZmVyKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8U2hhcmVhYmxlUmVzb3VyY2U+
IHJlc291cmNlID0gU2hhcmVhYmxlUmVzb3VyY2U6OmNyZWF0ZSgqdGhpcyk7CisgICAgaWYgKCFy
ZXNvdXJjZSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWNyZWF0ZSBTaGFyZWFi
bGVSZXNvdXJjZSBmcm9tIGhhbmRsZS4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgUmV0YWluUHRyPENGQWxsb2NhdG9yUmVmPiBkZWFsbG9jYXRvcihBZG9wdENGLCBjcmVhdGVT
aGFyZWFibGVSZXNvdXJjZURlYWxsb2NhdG9yKHJlc291cmNlKSk7CisgICAgUmV0YWluUHRyPENG
RGF0YVJlZj4gZGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KHJlc291cmNlLT5k
YXRhKCkpLCBzdGF0aWNfY2FzdDxDRkluZGV4PihyZXNvdXJjZS0+c2l6ZSgpKSwgZGVhbGxvY2F0
b3IuZ2V0KCkpKTsKKworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEoZGF0YS5n
ZXQoKSk7Cit9CiAgICAgCiBQYXNzUmVmUHRyPFNoYXJlYWJsZVJlc291cmNlPiBTaGFyZWFibGVS
ZXNvdXJjZTo6Y3JlYXRlKFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnksIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgc2l6ZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1No
YXJlYWJsZVJlc291cmNlLmgKaW5kZXggNmU1YzBjOS4uNzc4ZTlhMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7
CiAgICAgCiBjbGFzcyBTaGFyZWFibGVSZXNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJl
YWJsZVJlc291cmNlPiB7CkBAIC00OCw2ICs1Miw4IEBAIHB1YmxpYzoKICAgICAgICAgdm9pZCBl
bmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBi
b29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXImLCBIYW5kbGUmKTsKIAorICAgICAg
ICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gdHJ5V3JhcEluU2hhcmVkQnVmZmVy
KCkgY29uc3Q7CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgU2hhcmVhYmxl
UmVzb3VyY2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5jcHAKaW5kZXggMTZlZGM1NC4uOWMwMTAyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKQEAgLTM4Nyw2ICszODcsMTAgQEAgdm9p
ZCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZShBcmd1bWVudEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFJlc28KICAgICAgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVlc3Qu
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoQ0FD
SEVfUEFSVElUSU9OSU5HKQorICAgIGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LmNhY2hlUGFy
dGl0aW9uKCk7CisjZW5kaWYKKwogICAgIGVuY29kZVBsYXRmb3JtRGF0YShlbmNvZGVyLCByZXNv
dXJjZVJlcXVlc3QpOwogfQogCkBAIC00MjgsNiArNDMyLDEzIEBAIGJvb2wgQXJndW1lbnRDb2Rl
cjxSZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBSZXNv
dXJjZVJlCiAgICAgICAgIHJlc291cmNlUmVxdWVzdCA9IHJlcXVlc3Q7CiAgICAgfQogCisjaWYg
RU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICBTdHJpbmcgY2FjaGVQYXJ0aXRpb247Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShjYWNoZVBhcnRpdGlvbikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXNvdXJjZVJlcXVlc3Quc2V0Q2FjaGVQYXJ0aXRpb24oY2FjaGVQYXJ0aXRp
b24pOworI2VuZGlmCisKICAgICByZXR1cm4gZGVjb2RlUGxhdGZvcm1EYXRhKGRlY29kZXIsIHJl
c291cmNlUmVxdWVzdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAKaW5kZXggMTgz
NDRjMS4uM2YwZDU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJXZWJSZXNvdXJjZUJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYlJlc291
cmNlTG9hZFNjaGVkdWxlci5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZGVyTWVzc2FnZXMu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL01lbW9yeUNhY2hlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZUJ1ZmZlci5oPgogCiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKQEAgLTYwLDcg
KzYxLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24KICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGRpZFJlY2VpdmVOZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb25NZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCiB2b2lkIE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKENvcmVJUEM6OkNvbm5l
Y3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyLCBPd25Q
dHI8Q29yZUlQQzo6TWVzc2FnZUVuY29kZXI+JiByZXBseUVuY29kZXIpCkBAIC04NSw2ICs4Niwy
MSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNz
YWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDbwogewogfQogCit2b2lkIE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbjo6ZGlkQ2FjaGVSZXNvdXJjZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBDYWNo
ZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBtZW1vcnlDYWNoZSgpLT5yZXNvdXJjZUZvclJlcXVlc3Qo
cmVxdWVzdCk7CisgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IGhhbmRsZS50cnlXcmFwSW5TaGFyZWRCdWZm
ZXIoKTsKKyAgICBpZiAoIWJ1ZmZlcikgeworICAgICAgICBMT0dfRVJST1IoIlVuYWJsZWQgdG8g
Y3JlYXRlIFNoYXJlZEJ1ZmZlciBmcm9tIFNoYXJlYWJsZVJlc291cmNlIGhhbmRsZSBmb3IgcmVz
b3VyY2UgdXJsICVzIiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlc291cmNlLT50cnlSZXBsYWNpbmdFbmNvZGVk
RGF0YShidWZmZXIucmVsZWFzZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oCmlu
ZGV4IGQ0NDkwYTAuLjBjZGM3M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgKQEAgLTI3LDYg
KzI3LDcgQEAKICNkZWZpbmUgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uX2gKIAogI2luY2x1ZGUg
IkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAg
LTU2LDE1ICs1NywyMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgQ29yZUlQQzo6Q29ubmVjdGlvbiog
Y29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQogCisgICAg
dm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZShDb3JlSVBDOjpD
b25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKKwogcHJpdmF0ZToKICAgICBO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcik7
CiAKICAgICAvLyBDb3JlSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VE
ZWNvZGVyJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShDb3JlSVBD
OjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImLCBPd25QdHI8Q29yZUlQQzo6
TWVzc2FnZUVuY29kZXI+Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKENvcmVJUEM6OkNv
bm5lY3Rpb24qKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29y
ZUlQQzo6TWVzc2FnZURlY29kZXImLCBPd25QdHI8Q29yZUlQQzo6TWVzc2FnZUVuY29kZXI+Jikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKENvcmVJUEM6OkNvbm5lY3Rpb24q
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKENv
cmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2Vp
dmVyTmFtZSwgQ29yZUlQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBPVkVSUklERTsK
IAorICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCisgICAgdm9pZCBkaWRDYWNoZVJlc291cmNlKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFNoYXJlYWJsZVJlc291cmNlOjpI
YW5kbGUmKTsKKwogICAgIC8vIFRoZSBjb25uZWN0aW9uIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRv
IHRoZSBuZXR3b3JrIHByb2Nlc3MuCiAgICAgUmVmUHRyPENvcmVJUEM6OkNvbm5lY3Rpb24+IG1f
Y29ubmVjdGlvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5p
bgppbmRleCBmMTc3MzgzLi41NmNiZjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24ubWVzc2FnZXMuaW4KQEAgLTI0LDYgKzI0LDggQEAKIAogbWVzc2FnZXMgLT4gTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uIExlZ2FjeVJlY2VpdmVyIHsKIAorICAgIERpZENhY2hlUmVzb3VyY2Uo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QsIFdlYktpdDo6U2hhcmVhYmxlUmVzb3Vy
Y2U6OkhhbmRsZSByZXNvdXJjZSkKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJS
ZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2Vi
UmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IGVlYzJhMTAuLjk0ZTZlOTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmNw
cApAQCAtMTA3LDQ3ICsxMDcsMjAgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbFJl
c291cmNlTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICBtX2NvcmVMb2FkZXIt
PmRpZEZhaWwoZXJyb3IpOwogfQogCi1zdGF0aWMgdm9pZCBzaGFyZWFibGVSZXNvdXJjZURlYWxs
b2NhdGUodm9pZCAqcHRyLCB2b2lkICppbmZvKQotewotICAgIFNoYXJlYWJsZVJlc291cmNlKiBy
ZXNvdXJjZSA9IHN0YXRpY19jYXN0PFNoYXJlYWJsZVJlc291cmNlKj4oaW5mbyk7Ci0gICAgcmVz
b3VyY2UtPmRlcmVmKCk7Ci19Ci0gICAgCi1zdGF0aWMgQ0ZBbGxvY2F0b3JSZWYgY3JlYXRlU2hh
cmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRvcihQYXNzUmVmUHRyPFNoYXJlYWJsZVJlc291cmNlPiBy
ZXNvdXJjZSkKLXsKLSAgICBDRkFsbG9jYXRvckNvbnRleHQgY29udGV4dCA9IHsgMCwKLSAgICAg
ICAgcmVzb3VyY2UubGVha1JlZigpLAotICAgICAgICBOVUxMLCAvLyByZXRhaW4KLSAgICAgICAg
TlVMTCwgLy8gcmVsZWFzZQotICAgICAgICBOVUxMLCAvLyBjb3B5RGVzY3JpcHRpb24KLSAgICAg
ICAgTlVMTCwgLy8gYWxsb2NhdGUKLSAgICAgICAgTlVMTCwgLy8gcmVhbGxvY2F0ZQotICAgICAg
ICBzaGFyZWFibGVSZXNvdXJjZURlYWxsb2NhdGUsCi0gICAgICAgIE5VTEwsCi0gICAgfTsKLQot
ICAgIHJldHVybiBDRkFsbG9jYXRvckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAmY29udGV4
dCk7Ci19Ci0KIHZvaWQgV2ViUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNvdXJjZShjb25z
dCBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlJiBoYW5kbGUsIGRvdWJsZSBmaW5pc2hUaW1lKQog
ewogICAgIExPRyhOZXR3b3JrLCAiKFdlYlByb2Nlc3MpIFdlYlJlc291cmNlTG9hZGVyOjpkaWRS
ZWNlaXZlUmVzb3VyY2UgZm9yICclcyciLCBtX2NvcmVMb2FkZXItPnVybCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwogCi0gICAgUmVmUHRyPFNoYXJlYWJsZVJlc291cmNlPiByZXNvdXJjZSA9
IFNoYXJlYWJsZVJlc291cmNlOjpjcmVhdGUoaGFuZGxlKTsKLSAgICBpZiAoIXJlc291cmNlKSB7
Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlZCB0byByZWNyZWF0ZSB0aGUgU2hhcmVhYmxlUmVz
b3VyY2Ugc2VudCBmcm9tIHRoZSBuZXR3b3JrIHByb2Nlc3MuIik7CisgICAgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gYnVmZmVyID0gaGFuZGxlLnRyeVdyYXBJblNoYXJlZEJ1ZmZlcigpOworICAgIGlm
ICghYnVmZmVyKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBidWZmZXIg
ZnJvbSBTaGFyZWFibGVSZXNvdXJjZSBzZW50IGZyb20gdGhlIG5ldHdvcmsgcHJvY2Vzcy4iKTsK
ICAgICAgICAgbV9jb3JlTG9hZGVyLT5kaWRGYWlsKGludGVybmFsRXJyb3IobV9jb3JlTG9hZGVy
LT5yZXF1ZXN0KCkudXJsKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIE9u
bHkgc2VuZCBkYXRhIHRvIHRoZSBkaWRSZWNlaXZlRGF0YSBjYWxsYmFjayBpZiBpdCBleGlzdHMu
Ci0gICAgaWYgKHJlc291cmNlLT5zaXplKCkpIHsKLSAgICAgICAgUmV0YWluUHRyPENGQWxsb2Nh
dG9yUmVmPiBkZWFsbG9jYXRvcihBZG9wdENGLCBjcmVhdGVTaGFyZWFibGVSZXNvdXJjZURlYWxs
b2NhdG9yKHJlc291cmNlKSk7Ci0gICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRv
cHRDRiwgQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihyZXNvdXJjZS0+ZGF0YSgpKSwgc3RhdGljX2Nh
c3Q8Q0ZJbmRleD4ocmVzb3VyY2UtPnNpemUoKSksIGRlYWxsb2NhdG9yLmdldCgpKSk7Ci0KLSAg
ICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjp3cmFwQ0ZE
YXRhKGRhdGEuZ2V0KCkpOworICAgIGlmIChidWZmZXItPnNpemUoKSkKICAgICAgICAgbV9jb3Jl
TG9hZGVyLT5kaWRSZWNlaXZlQnVmZmVyKGJ1ZmZlci5nZXQoKSwgYnVmZmVyLT5zaXplKCksIERh
dGFQYXlsb2FkV2hvbGVSZXNvdXJjZSk7Ci0gICAgfQogCiAgICAgbV9jb3JlTG9hZGVyLT5kaWRG
aW5pc2hMb2FkaW5nKGZpbmlzaFRpbWUpOwogfQo=
</data>
<flag name="commit-queue"
          id="216056"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194319</attachid>
            <date>2013-03-21 12:37:53 -0700</date>
            <delta_ts>2013-03-21 14:21:29 -0700</delta_ts>
            <desc>Patch v2 - Style and build fixes</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>32433</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxYzIxODgwLi4zNmRjYzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTMtMDMtMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIElmIGEgcHJldmlvdXNseSBsb2FkZWQgcmVzb3VyY2UgaXMgbGF0ZXIgc3RvcmVkIHRvIHRo
ZSBkaXNrIGNhY2hlZCwgcmVwbGFjZSB0aGUgYnVmZmVyIHdpdGggTU1BUCdlZCBtZW1vcnkuCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQxNDE1ND4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTI5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE5vIGNoYW5nZSBpbiBiZWhhdmlvci4p
CisKKyAgICAgICAgR2l2ZSBTaGFyZWRCdWZmZXIgdGhlIGFiaWxpdHkgdG8gcmVwbGFjZSBpdHMg
Y29udGVudHMgZnJvbSBhbm90aGVyIFNoYXJlZEJ1ZmZlcjoKKyAgICAgICAgKiBwbGF0Zm9ybS9T
aGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OnJlcGxhY2VDb250ZW50cyk6CisKKyAg
ICAgICAgRm9yd2FyZCBhbG9uZyBTaGFyZWRCdWZmZXIncyBuZXcgYWJpbGl0eSB0byBSZXNvdXJj
ZUJ1ZmZlcjoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VCdWZmZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VCdWZmZXI6OnJlcGxhY2VTaGFyZWRCdWZmZXJDb250ZW50cyk6Cisg
ICAgICAgICogbG9hZGVyL1Jlc291cmNlQnVmZmVyLmg6CisKKyAgICAgICAgR2l2ZSBDYWNoZWRS
ZXNvdXJjZSB0aGUgYWJpbGl0eSB0byByZXBsYWNlIGl0cyBlbmNvZGVkIGRhdGEgYnVmZmVyIGlm
IGFwcHJvcHJpYXRlOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6dHJ5UmVwbGFjaW5nRW5jb2RlZERh
dGEpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oOgorCisgICAgICAg
ICogV2ViQ29yZS5leHAuaW46CisKIDIwMTMtMDMtMTkgIE1heCBWdWpvdmljICA8bXZ1am92aWNA
YWRvYmUuY29tPgogCiAgICAgICAgIFJlZmFjdG9yIGNvbmRpdGlvbnMgZm9yIHNldENvbXBvc2l0
aW5nTGF5ZXJzTmVlZFJlYnVpbGQgaW4gUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgppbmRleCA4MjJlZmE4Li5hZDQzNGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpA
QCAtMTcwLDYgKzE3MCw3IEBAIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxM2dldFN0YXRpc3Rp
Y3NFdgogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTEzc2V0Q2FwYWNpdGllc0VqamoKIF9fWk43
V2ViQ29yZTExTWVtb3J5Q2FjaGUxNGV2aWN0UmVzb3VyY2VzRXYKIF9fWk43V2ViQ29yZTExTWVt
b3J5Q2FjaGUxNHJlc291cmNlRm9yVVJMRVJLTlNfNEtVUkxFCitfX1pON1dlYkNvcmUxMU1lbW9y
eUNhY2hlMThyZXNvdXJjZUZvclJlcXVlc3RFUktOU18xNVJlc291cmNlUmVxdWVzdEUKIF9fWk43
V2ViQ29yZTExTWVtb3J5Q2FjaGUxOWdldE9yaWdpbnNXaXRoQ2FjaGVFUk4zV1RGN0hhc2hTZXRJ
TlMxXzZSZWZQdHJJTlNfMTRTZWN1cml0eU9yaWdpbkVFRU5TXzE4U2VjdXJpdHlPcmlnaW5IYXNo
RU5TMV8xMEhhc2hUcmFpdHNJUzVfRUVFRQogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTI1cmVt
b3ZlUmVzb3VyY2VzV2l0aE9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKIF9fWk43V2ViQ29y
ZTExVVJMV2l0aERhdGFFUDZOU0RhdGFQNU5TVVJMCkBAIC0yNzMsNiArMjc0LDcgQEAgX19aTjdX
ZWJDb3JlMTN0b0hUTUxFbGVtZW50RVBOU18yMUZvcm1Bc3NvY2lhdGVkRWxlbWVudEUKIF9fWk43
V2ViQ29yZTEzdG9KU0RPTVdpbmRvd0VOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMTRDYWNo
ZWRSZXNvdXJjZTEycmVtb3ZlQ2xpZW50RVBOU18yMENhY2hlZFJlc291cmNlQ2xpZW50RQogX19a
TjdXZWJDb3JlMTRDYWNoZWRSZXNvdXJjZTE2dW5yZWdpc3RlckhhbmRsZUVQTlNfMjRDYWNoZWRS
ZXNvdXJjZUhhbmRsZUJhc2VFCitfX1pON1dlYkNvcmUxNENhY2hlZFJlc291cmNlMjN0cnlSZXBs
YWNpbmdFbmNvZGVkRGF0YUVOM1dURjEwUGFzc1JlZlB0cklOU18xMlNoYXJlZEJ1ZmZlckVFRQog
X19aTjdXZWJDb3JlMTRDYWNoZWRSZXNvdXJjZTlhZGRDbGllbnRFUE5TXzIwQ2FjaGVkUmVzb3Vy
Y2VDbGllbnRFCiBfX1pON1dlYkNvcmUxNENsaWVudFJlY3RMaXN0QzFFUktOM1dURjZWZWN0b3JJ
TlNfOUZsb2F0UXVhZEVMbTBFRUUKIF9fWk43V2ViQ29yZTE0Q2xpZW50UmVjdExpc3RDMUV2CkBA
IC0xNTg3LDYgKzE1ODksNyBAQCBfaGFzQ2FzZUluc2Vuc2l0aXZlU3VmZml4CiBfc3RyaW5nSXND
YXNlSW5zZW5zaXRpdmVFcXVhbFRvU3RyaW5nCiBfc3VnZ2VzdGVkRmlsZW5hbWVXaXRoTUlNRVR5
cGUKICNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorX19aTjdXZWJDb3JlMTVSZXNvdXJj
ZVJlcXVlc3QxM3BhcnRpdGlvbk5hbWVFUktOM1dURjZTdHJpbmdFCiBfd2tDYWNoZVBhcnRpdGlv
bktleQogI2VuZGlmCiBfd2tDR0NvbnRleHRHZXRTaG91bGRTbW9vdGhGb250cwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5jcHAKaW5kZXggNDlmNDZmYi4uYzlmZjVmZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VCdWZmZXIuY3BwCkBAIC0xMzksNCArMTM5LDEz
IEBAIHZvaWQgUmVzb3VyY2VCdWZmZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdElu
Zm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAgICAgaW5mby5hZGRNZW1iZXIobV9zaGFyZWRC
dWZmZXIsICJzaGFyZWRCdWZmZXIiKTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgUmVz
b3VyY2VCdWZmZXI6OnJlcGxhY2VTaGFyZWRCdWZmZXJDb250ZW50cyhTaGFyZWRCdWZmZXIqIG5l
d0NvbnRlbnRzKQoreworICAgIGlmICghbV9zaGFyZWRCdWZmZXIpCisgICAgICAgIG1fc2hhcmVk
QnVmZmVyID0gbmV3Q29udGVudHM7CisgICAgZWxzZQorICAgICAgICBtX3NoYXJlZEJ1ZmZlci0+
cmVwbGFjZUNvbnRlbnRzKG5ld0NvbnRlbnRzKTsKK30KKyNlbmRpZgogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VCdWZmZXIuaAppbmRleCAxMDAzNjZj
Li5mZjZiNmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VCdWZmZXIuaApAQCAtNjQs
NiArNjQsOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZ2V0U29tZURhdGEoY29uc3QgY2hhciom
IGRhdGEsIHVuc2lnbmVkIHBvc2l0aW9uID0gMCkgY29uc3Q7CiAgICAgCiAgICAgU2hhcmVkQnVm
ZmVyKiBzaGFyZWRCdWZmZXIoKSBjb25zdDsKKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9pZCBy
ZXBsYWNlU2hhcmVkQnVmZmVyQ29udGVudHMoU2hhcmVkQnVmZmVyKik7CisjZW5kaWYKICAgICBQ
YXNzUmVmUHRyPFJlc291cmNlQnVmZmVyPiBjb3B5KCkgY29uc3Q7CiAKICAgICBib29sIGhhc1B1
cmdlYWJsZUJ1ZmZlcigpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAKaW5kZXggY2EyZThlMy4uN2Q0NDJlMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCkBAIC05NjksNCArOTY5LDE5
IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdElu
Zm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAgICAgICAgIGluZm8uYWRkUmF3QnVmZmVyKG1f
cHVyZ2VhYmxlRGF0YS5nZXQoKSwgbV9wdXJnZWFibGVEYXRhLT5zaXplKCksICJQdXJnZWFibGVE
YXRhIiwgInB1cmdlYWJsZURhdGEiKTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgQ2Fj
aGVkUmVzb3VyY2U6OnRyeVJlcGxhY2luZ0VuY29kZWREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBuZXdCdWZmZXIpCit7CisgICAgaWYgKCFtX2RhdGEpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICAvLyBWZXJpZnkgdGhlIGJ1ZmZlcnMgYXJlIHRoZSBzYW1lIGFzIGlmIHRoZSBlbmNv
ZGVkIGRhdGEgaXMgZGlmZmVyZW50IHRoYW4gd2hhdCB3ZSdyZSByZXBsYWNpbmcsCisgICAgLy8g
d2UgZG9uJ3Qgd2FudCB0byByZXBsYWNlIGl0LgorICAgIGlmIChtX2RhdGEtPnNpemUoKSAhPSBu
ZXdCdWZmZXItPnNpemUoKSB8fCAhbWVtY21wKG1fZGF0YS0+ZGF0YSgpLCBuZXdCdWZmZXItPmRh
dGEoKSwgbV9kYXRhLT5zaXplKCkpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9kYXRh
LT5yZXBsYWNlU2hhcmVkQnVmZmVyQ29udGVudHMobmV3QnVmZmVyLmdldCgpKTsKK30KKyNlbmRp
ZgorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVz
b3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCmlu
ZGV4IDI3YjA4ZGIuLjY3YTBiZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5oCkBAIC01MCw2ICs1MCw3IEBAIGNsYXNzIEluc3BlY3RvclJlc291cmNl
OwogY2xhc3MgUHVyZ2VhYmxlQnVmZmVyOwogY2xhc3MgUmVzb3VyY2VCdWZmZXI7CiBjbGFzcyBT
ZWN1cml0eU9yaWdpbjsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFN1YnJlc291cmNlTG9h
ZGVyOwogCiAvLyBBIHJlc291cmNlIHRoYXQgaXMgaGVsZCBpbiB0aGUgY2FjaGUuIENsYXNzZXMg
d2hvIHdhbnQgdG8gdXNlIHRoaXMgb2JqZWN0IHNob3VsZCBkZXJpdmUKQEAgLTI2Myw2ICsyNjQs
MTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGNhblJldXNlKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAorI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICB2b2lkIHRyeVJlcGxhY2luZ0VuY29kZWREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPik7
CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBjaGVja05vdGlmeSgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IDMyZTcxYWYuLjljNTU3
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC0xMTgsNiArMTE4
LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBjcmVhdGVQdXJnZWFibGVCdWZmZXIoKSBjb25zdDsK
IAorICAgIHZvaWQgcmVwbGFjZUNvbnRlbnRzKFNoYXJlZEJ1ZmZlciopOworCiBwcml2YXRlOgog
ICAgIFNoYXJlZEJ1ZmZlcigpOwogICAgIGV4cGxpY2l0IFNoYXJlZEJ1ZmZlcihzaXplX3QpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCmluZGV4IGQ1
ODdlNzUuLmQwZThlMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1No
YXJlZEJ1ZmZlckNGLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRC
dWZmZXJDRi5jcHAKQEAgLTkzLDYgKzkzLDE2IEBAIHZvaWQgU2hhcmVkQnVmZmVyOjpjbGVhclBs
YXRmb3JtRGF0YSgpCiAgICAgbV9jZkRhdGEgPSAwOwogfQogCit2b2lkIFNoYXJlZEJ1ZmZlcjo6
cmVwbGFjZUNvbnRlbnRzKFNoYXJlZEJ1ZmZlciogbmV3Q29udGVudHMpCit7ICAgIAorICAgIGNs
ZWFyKCk7CisKKyAgICBpZiAobmV3Q29udGVudHMtPm1fY2ZEYXRhKQorICAgICAgICBtX2NmRGF0
YSA9IG5ld0NvbnRlbnRzLT5tX2NmRGF0YTsKKyAgICBlbHNlCisgICAgICAgIGFwcGVuZChuZXdD
b250ZW50cyk7Cit9CisKICNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCiB2
b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKENGRGF0YVJlZiBkYXRhKQogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IGQ3YTMwZWIuLmEyODMwNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxMy0wMy0y
MSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgSWYgYSBwcmV2
aW91c2x5IGxvYWRlZCByZXNvdXJjZSBpcyBsYXRlciBzdG9yZWQgdG8gdGhlIGRpc2sgY2FjaGVk
LCByZXBsYWNlIHRoZSBidWZmZXIgd2l0aCBNTUFQJ2VkIG1lbW9yeS4KKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzEzNDE0MTU0PiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExMjk0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBhIHRpbWVyIHRoYXQgd2lsbCB0cnkgdG8gbG9vayB1cCB0aGUgZGlzayBjYWNo
ZWQgYnVmZmVyIGZvciB0aGUgcmVzb3VyY2UgYSBmZXcgc2Vjb25kcyBhZnRlciB0aGUgbG9hZAor
ICAgICAgICBjb21wbGV0ZXMgYW5kIC0gaWYgdGhlIHJlc291cmNlIGlzIGRpc2sgYmFja2VkIC0g
c2VuZCBpdCB0byB0aGUgV2ViUHJvY2VzcyBmb3Igc2hhcmluZzoKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlza0NhY2hlVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmg6CisKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnRyeUdldFNoYXJlYWJsZUhh
bmRsZUZvclJlc291cmNlKToKKworICAgICAgICBSZWZhY3RvciBTaGFyZWRNZW1vcnkgdG8gcmVt
b3ZlIHRoZSB1bm5lY2Vzc2FyeSB2bV9jb3B5IGFuZCBvbmx5IHZtX2FsbG9jYXRlIHdoZW4gYW4g
YXBwcm9wcmlhdGUgYnVmZmVyCisgICAgICAgIGRvZXNuJ3QgYWxyZWFkeSBleGlzdDoKKyAgICAg
ICAgKiBQbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9tYWMvU2hh
cmVkTWVtb3J5TWFjLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZUZyb21WTUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9yeSk6CisKKyAgICAgICAg
R2l2ZSBTaGFyZWFibGVSZXNvdXJjZSB0aGUgYWJpbGl0eSB0byBjcmVhdGUgYSBDRkRhdGFSZWYg
dGhhdCB3cmFwcyAidGhpcyIsIGFuZCByZXR1cm4gaXQgaW4gYSBTaGFyZWRCdWZmZXI6CisgICAg
ICAgICogU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6c2hh
cmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRlKToKKyAgICAgICAgKFdlYktpdDo6Y3JlYXRlU2hhcmVh
YmxlUmVzb3VyY2VEZWFsbG9jYXRvcik6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZVJlc291
cmNlOjpIYW5kbGU6OnRyeVdyYXBJblNoYXJlZEJ1ZmZlcik6CisgICAgICAgICogU2hhcmVkL1No
YXJlYWJsZVJlc291cmNlLmg6CisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcDogRW5jb2RlL2RlY29kZSB0aGUgY2FjaGUgcGFydGl0aW9uIGZvciBSZXNvdXJjZVJl
cXVlc3QuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpk
aWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbjo6ZGlkQ2FjaGVSZXNvdXJjZSk6IExvb2t1cCB0aGUgQ2FjaGVkUmVzb3VyY2UgaW4gdGhl
IFdlYkNvcmUgbWVtb3J5IGNhY2hlCisgICAgICAgICAgYW5kIHRyeSB0byByZXBsYWNlIGl0cyBl
bmNvZGVkIGRhdGEgd2l0aCB0aGUgc2hhcmVkIG1tYXAnZWQgYnVmZmVyLgorICAgICAgICAqIFdl
YlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluOgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNvdXJjZSk6CisK
IDIwMTMtMDMtMTkgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFtHVEtdIEZpeCBXZWJLaXQyIGJ1aWxkcyBhZnRlciByMTQ2MTkzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcApp
bmRleCBmYmU5YWU4Li42ZWY1ODUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNlcnRpZmljYXRlSW5mby5oIgogI2lu
Y2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCkBAIC01MSw2ICs1MiwxMCBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogTmV0d29ya1Jlc291cmNlTG9hZGVyOjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXIoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIGxvYWRQYXJhbWV0ZXJz
LCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVjdGlvbikKICAgICA6IFNjaGVk
dWxhYmxlTG9hZGVyKGxvYWRQYXJhbWV0ZXJzLCBjb25uZWN0aW9uKQorICAgICwgbV9ieXRlc1Jl
Y2VpdmVkKDApCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisg
ICAgLCBtX2Rpc2tDYWNoZVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJk5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6ZGlza0NhY2hlVGltZXJGaXJlZCkKKyNlbmRpZiAvLyBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogfQpAQCAtMTY4LDYgKzE3MywyMSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y29u
bmVjdGlvblRvV2ViUHJvY2Vzc0RpZENsb3NlKCkKICAgICBjbGVhbnVwKCk7CiB9CiAKKyNpZiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKK3ZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjpkaXNrQ2FjaGVUaW1lckZpcmVkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGFkb3B0ZWRSZWYgPSBh
ZG9wdFJlZih0aGlzKTsgLy8gQmFsYW5jZSBvdXQgdGhlIHJlZigpIHdoZW4gc2V0dGluZyB0aGUg
dGltZXIuCisKKyAgICBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlIGhhbmRsZTsKKyAgICB0cnlH
ZXRTaGFyZWFibGVIYW5kbGVGb3JSZXNvdXJjZShoYW5kbGUpOworICAgIGlmIChoYW5kbGUuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbjo6RGlkQ2FjaGVSZXNvdXJjZShyZXF1ZXN0KCksIGhhbmRsZSkpOworfQor
I2VuZGlmIC8vICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKwog
dGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNlbmRBYm9y
dGluZ09uRmFpbHVyZShjb25zdCBVJiBtZXNzYWdlKQogewogICAgIGJvb2wgcmVzdWx0ID0gc2Vu
ZChtZXNzYWdlKTsKQEAgLTIwMyw3ICsyMjMsMTcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmUK
ICAgICBpZiAoIXNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2Fk
ZXI6OkRpZFJlY2VpdmVSZXNwb25zZVdpdGhDZXJ0aWZpY2F0ZUluZm8ocmVzcG9uc2UsIFBsYXRm
b3JtQ2VydGlmaWNhdGVJbmZvKHJlc3BvbnNlKSkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBw
bGF0Zm9ybURpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CisjaWYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisgICAgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSBo
YW5kbGU7CisgICAgdHJ5R2V0U2hhcmVhYmxlSGFuZGxlRm9yUmVzb3VyY2UoaGFuZGxlKTsKKyAg
ICBpZiAoaGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBTaW5jZSB3
ZSdyZSBkZWxpdmVyaW5nIHRoaXMgcmVzb3VyY2UgYnkgb3Vyc2VsdmVzIGFsbCBhdCBvbmNlLCB3
ZSdsbCBhYm9ydCB0aGUgcmVzb3VyY2UgaGFuZGxlIHNpbmNlIHdlIGRvbid0IG5lZWQgYW55bW9y
ZSBjYWxsYmFja3MgZnJvbSBSZXNvdXJjZUhhbmRsZS4KKyAgICBhYm9ydEluUHJvZ3Jlc3NMb2Fk
KCk7CisgICAgCisgICAgc2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2Vp
dmVSZXNvdXJjZShoYW5kbGUsIGN1cnJlbnRUaW1lKCkpKTsKKyNlbmRpZiAvLyBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKIH0KIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCwgaW50IGVuY29kZWREYXRhTGVuZ3RoKQpAQCAtMjExLDYgKzI0MSw4IEBAIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSos
IGNvbnN0IGNoYXIqIGRhdGEsIGluCiAgICAgLy8gRklYTUUgKE5ldHdvcmtQcm9jZXNzKTogRm9y
IHRoZSBtZW1vcnkgY2FjaGUgd2UnbGwgYWxzbyBuZWVkIHRvIGNhY2hlIHRoZSByZXNwb25zZSBk
YXRhIGhlcmUuCiAgICAgLy8gU3VjaCBidWZmZXJpbmcgd2lsbCBuZWVkIHRvIGJlIHRocmVhZCBz
YWZlLCBhcyB0aGlzIGNhbGxiYWNrIGlzIGhhcHBlbmluZyBvbiBhIGJhY2tncm91bmQgdGhyZWFk
LgogICAgIAorICAgIG1fYnl0ZXNSZWNlaXZlZCArPSBsZW5ndGg7CisKICAgICBDb3JlSVBDOjpE
YXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oZGF0YSksIGxlbmd0aCk7CiAgICAgc2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpX
ZWJSZXNvdXJjZUxvYWRlcjo6RGlkUmVjZWl2ZURhdGEoZGF0YVJlZmVyZW5jZSwgZW5jb2RlZERh
dGFMZW5ndGgpKTsKIH0KQEAgLTIyMSw2ICsyNTMsMTcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUgZmluaXNoVGlt
ZSkKICAgICAvLyBTdWNoIGJvb2trZWVwaW5nIHdpbGwgbmVlZCB0byBiZSB0aHJlYWQgc2FmZSwg
YXMgdGhpcyBjYWxsYmFjayBpcyBoYXBwZW5pbmcgb24gYSBiYWNrZ3JvdW5kIHRocmVhZC4KICAg
ICBpbnZhbGlkYXRlU2FuZGJveEV4dGVuc2lvbnMoKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJS
ZXNvdXJjZUxvYWRlcjo6RGlkRmluaXNoUmVzb3VyY2VMb2FkKGZpbmlzaFRpbWUpKTsKKworI2lm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorICAgIC8vIElmIHRoaXMg
cmVzb3VyY2Ugd2FzIGxhcmdlIGVub3VnaCB0aGF0IGl0IHNob3VsZCBiZSBjYWNoZWQgdG8gZGlz
ayBhcyBhIHNlcGFyYXRlIGZpbGUsCisgICAgLy8gdGhlbiB3ZSBzaG91bGQgdHJ5IHRvIHJlLWRl
bGl2ZXIgdGhlIHJlc291cmNlIHRvIHRoZSBXZWJQcm9jZXNzIG9uY2UgaXQgKmlzKiBzYXZlZCBh
cyBhIHNlcGFyYXRlIGZpbGUuICAgIAorICAgIGlmIChtX2J5dGVzUmVjZWl2ZWQgPj0gZmlsZUJh
Y2tlZFJlc291cmNlTWluaW11bVNpemUoKSkgeworICAgICAgICAvLyBGSVhNRTogT25jZSBhIG5v
dGlmaWNhdGlvbiBBUEkgZXhpc3RzIHRoYXQgb2JsaXZpYXRlcyB0aGlzIHRpbWVyLCB1c2UgdGhh
dCBpbnN0ZWFkLgorICAgICAgICByZWYoKTsgLy8gQmFsYW5jZWQgYnkgYSBkZXJlZigpIGluIGRp
c2tDYWNoZVRpbWVyRmlyZWQoKS4KKyAgICAgICAgbV9kaXNrQ2FjaGVUaW1lci5zdGFydE9uZVNo
b3QoMTApOworICAgIH0KKyNlbmRpZiAvLyBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwOTAKKyAgICAKICAgICBzY2hlZHVsZUNsZWFudXBPbk1haW5UaHJlYWQoKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaAppbmRleCBhM2Y1M2IxLi41MWVjZDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaApAQCAtMzAsOCArMzAs
MTAgQEAKIAogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRlICJTY2hlZHVsYWJs
ZUxvYWRlci5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZVJlc291cmNlLmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZUhhbmRsZUNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VM
b2FkZXJPcHRpb25zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIGNsYXNzIFJlc291cmNlQnVmZmVyOwpAQCAtMTA2LDggKzEwOCwxNyBAQCBw
cml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgc2VuZFN5bmNBYm9ydGluZ09u
RmFpbHVyZShjb25zdCBVJiBtZXNzYWdlLCBjb25zdCB0eXBlbmFtZSBVOjpSZXBseSYgcmVwbHkp
OwogICAgIHZvaWQgYWJvcnRJblByb2dyZXNzTG9hZCgpOwogCisgICAgdm9pZCB0cnlHZXRTaGFy
ZWFibGVIYW5kbGVGb3JSZXNvdXJjZShTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlJik7CisKICAg
ICBSZWZQdHI8UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ+IG1fbmV0d29ya2luZ0NvbnRleHQ7CiAg
ICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBtX2hhbmRsZTsKKworICAgIHVpbnQ2
NF90IG1fYnl0ZXNSZWNlaXZlZDsKKworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTA5MAorICAgIHZvaWQgZGlza0NhY2hlVGltZXJGaXJlZCgpOworICAgIFdlYkNvcmU6
OlJ1bkxvb3A6OlRpbWVyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbV9kaXNrQ2FjaGVUaW1lcjsK
KyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1h
Yy5tbQppbmRleCA4MWUzZmI0Li5kMTU0ZWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0K
QEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgogI2luY2x1
ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZGVyTWVzc2FnZXMu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCkBAIC0zOCwxMSArMzksMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgX0NGQ2FjaGVkVVJM
UmVzcG9uc2UqIENGQ2FjaGVkVVJMUmVzcG9uc2VSZWY7CiBleHRlcm4gIkMiIENGVVJMQ2FjaGVS
ZWYgQ0ZVUkxDYWNoZUNvcHlTaGFyZWRVUkxDYWNoZSgpOwogZXh0ZXJuICJDIiBDRkNhY2hlZFVS
TFJlc3BvbnNlUmVmIENGVVJMQ2FjaGVDb3B5UmVzcG9uc2VGb3JSZXF1ZXN0KENGVVJMQ2FjaGVS
ZWYsIENGVVJMUmVxdWVzdFJlZik7CiBleHRlcm4gIkMiIENGQXJyYXlSZWYgQ0ZDYWNoZWRVUkxS
ZXNwb25zZUNvcHlSZWNlaXZlckRhdGFBcnJheShDRkNhY2hlZFVSTFJlc3BvbnNlUmVmKTsKKwor
U09GVF9MSU5LX0ZSQU1FV09SSyhDRk5ldHdvcmspCitzdGF0aWMgYm9vbCBDRlVSTENhY2hlSXNN
ZW1NYXBwZWREYXRhKENGVVJMQ2FjaGVSZWYgY2FjaGUsIENGRGF0YVJlZiBkYXRhKQoreworICAg
IHN0YXRpYyBDRkJvb2xlYW5SZWYgKCpzb2Z0TGlua0lzQ2FjaGVNTUFQZWREYXRhKShDRlVSTENh
Y2hlUmVmIGNhY2hlLCBDRkRhdGFSZWYgZGF0YSkgPSAoQ0ZCb29sZWFuUmVmICgqKShDRlVSTENh
Y2hlUmVmIGNhY2hlLCBDRkRhdGFSZWYgZGF0YSkpIGRsc3ltKENGTmV0d29ya0xpYnJhcnkoKSwg
Il9DRlVSTENhY2hlSXNSZXNwb25zZURhdGFNZW1NYXBwZWQiKTsKKyAgICAKKyAgICBpZiAoc29m
dExpbmtJc0NhY2hlTU1BUGVkRGF0YSkKKyAgICAgICAgcmV0dXJuIHNvZnRMaW5rSXNDYWNoZU1N
QVBlZERhdGEoY2FjaGUsIGRhdGEpID09IGtDRkJvb2xlYW5UcnVlOworICAgIHJldHVybiBmYWxz
ZTsKK30KICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OnBsYXRmb3JtRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnRyeUdldFNoYXJlYWJs
ZUhhbmRsZUZvclJlc291cmNlKFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUmIGhhbmRsZSkKIHsK
ICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTA5MAogICAgIHJldHVybjsK
QEAgLTcyLDI0ICs4MywxOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6cGxhdGZvcm1E
aWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZQogICAgIGlmIChDRkRh
dGFHZXRMZW5ndGgoZGF0YSkgPCAoQ0ZJbmRleClmaWxlQmFja2VkUmVzb3VyY2VNaW5pbXVtU2l6
ZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hh
cmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjpjcmVhdGVXaXRoVk1Db3B5KCh2b2lkKilDRkRhdGFH
ZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSkpOworICAgIGlmICghQ0ZVUkxD
YWNoZUlzTWVtTWFwcGVkRGF0YShjYWNoZS5nZXQoKSwgZGF0YSkpCisgICAgICAgIHJldHVybjsK
KworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9yeTo6
Y3JlYXRlRnJvbVZNQnVmZmVyKCh2b2lkKilDRkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFH
ZXRMZW5ndGgoZGF0YSkpOwogICAgIGlmICghc2hhcmVkTWVtb3J5KSB7Ci0gICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBWTUNvcGllZCBzaGFyZWQgbWVtb3J5IGZvciBjYWNoZWQg
cmVzb3VyY2UuICBXZSdsbCBsZXQgaXQgbG9hZCBub3JtYWxseS4iKTsKKyAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gY3JlYXRlIFZNQ29waWVkIHNoYXJlZCBtZW1vcnkgZm9yIGNhY2hlZCBy
ZXNvdXJjZS4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAKKwogICAgIHNpemVfdCBzaXpl
ID0gc2hhcmVkTWVtb3J5LT5zaXplKCk7CiAgICAgUmVmUHRyPFNoYXJlYWJsZVJlc291cmNlPiBy
ZXNvdXJjZSA9IFNoYXJlYWJsZVJlc291cmNlOjpjcmVhdGUoc2hhcmVkTWVtb3J5LnJlbGVhc2Uo
KSwgMCwgc2l6ZSk7Ci0gICAgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSBoYW5kbGU7Ci0gICAg
aWYgKCFyZXNvdXJjZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpIHsKLSAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gY3JlYXRlIFNoYXJlYWJsZVJlc291cmNlIGhhbmRsZSB0byBzZW5kIHRvIHRo
ZSBXZWJQcm9jZXNzIGZvciByZXNvdXJjZS4gIFdlJ2xsIGxldCBpdCBsb2FkIG5vcm1hbGx5LiIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU2luY2Ugd2UncmUgZGVsaXZlcmlu
ZyB0aGlzIHJlc291cmNlIGJ5IG91cnNlbHZlcyBhbGwgYXQgb25jZSwgd2UnbGwgYWJvcnQgdGhl
IHJlc291cmNlIGhhbmRsZSBzaW5jZSB3ZSBkb24ndCBuZWVkIGFueW1vcmUgY2FsbGJhY2tzIGZy
b20gQ0ZOZXR3b3JrLgotICAgIGFib3J0SW5Qcm9ncmVzc0xvYWQoKTsKLSAgICAKLSAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkUmVjZWl2ZVJlc291cmNlKGhhbmRsZSwg
Y3VycmVudFRpbWUoKSkpOworICAgIHJlc291cmNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKICNl
bmRpZiAvLyBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTA5MAogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaCBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCmluZGV4IDdlNTdkNjcuLjU3OTdmYWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCkBAIC04NCw3ICs4NCw3IEBAIHB1
YmxpYzoKIAogICAgIC8vIENyZWF0ZSBhIHNoYXJlZCBtZW1vcnkgb2JqZWN0IHdpdGggdGhlIGdp
dmVuIHNpemUgYnkgdm1fY29weSdpbmcgdGhlIGdpdmVuIGJ1ZmZlci4KICAgICAvLyBXaWxsIHJl
dHVybiAwIG9uIGZhaWx1cmUuCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBj
cmVhdGVXaXRoVk1Db3B5KHZvaWQqLCBzaXplX3QpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNo
YXJlZE1lbW9yeT4gY3JlYXRlRnJvbVZNQnVmZmVyKHZvaWQqLCBzaXplX3QpOwogCiAjaWYgT1Mo
V0lORE9XUykKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IGFkb3B0KEhBTkRM
RSwgc2l6ZV90LCBQcm90ZWN0aW9uKTsKQEAgLTEwOSw2ICsxMDksOCBAQCBwdWJsaWM6CiBwcml2
YXRlOgogICAgIHNpemVfdCBtX3NpemU7CiAgICAgdm9pZCogbV9kYXRhOworICAgIGJvb2wgbV9z
aG91bGRWTURlYWxsb2NhdGVEYXRhOworCiAjaWYgT1MoREFSV0lOKQogICAgIG1hY2hfcG9ydF90
IG1fcG9ydDsKICNlbGlmIE9TKFdJTkRPV1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9tYWMvU2hhcmVkTWVtb3J5TWFjLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L21hYy9TaGFyZWRNZW1vcnlNYWMuY3BwCmluZGV4IDFhNDcwMmUuLjg5M2E0OWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9TaGFyZWRNZW1vcnlNYWMuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9TaGFyZWRNZW1vcnlNYWMuY3BwCkBAIC05Miwz
NyArOTIsMzYgQEAgc3RhdGljIGlubGluZSBtYWNoX3ZtX2FkZHJlc3NfdCB0b1ZNQWRkcmVzcyh2
b2lkKiBwb2ludGVyKQogICAgIAogUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9y
eTo6Y3JlYXRlKHNpemVfdCBzaXplKQogewotICAgIHJldHVybiBTaGFyZWRNZW1vcnk6OmNyZWF0
ZVdpdGhWTUNvcHkoMCwgc2l6ZSk7Ci19Ci0KLVBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFy
ZWRNZW1vcnk6OmNyZWF0ZVdpdGhWTUNvcHkodm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCi17CiAg
ICAgQVNTRVJUKHNpemUpOwogCiAgICAgbWFjaF92bV9hZGRyZXNzX3QgYWRkcmVzczsKICAgICBr
ZXJuX3JldHVybl90IGtyID0gbWFjaF92bV9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCAmYWRk
cmVzcywgcm91bmRfcGFnZShzaXplKSwgVk1fRkxBR1NfQU5ZV0hFUkUpOwogICAgIGlmIChrciAh
PSBLRVJOX1NVQ0NFU1MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUg
bWFjaF92bV9hbGxvY2F0ZSBzaGFyZWQgbWVtb3J5ICglenUgYnl0ZXMpLiAlcyAoJXgpIiwgc2l6
ZSwgbWFjaF9lcnJvcl9zdHJpbmcoa3IpLCBrcik7IAorICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBhbGxvY2F0ZSBtYWNoX3ZtX2FsbG9jYXRlIHNoYXJlZCBtZW1vcnkgKCV6dSBieXRlcyku
ICVzICgleCkiLCBzaXplLCBtYWNoX2Vycm9yX3N0cmluZyhrciksIGtyKTsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQotICAgIAotICAgIGlmIChkYXRhKSB7Ci0gICAgICAgIGtyID0gbWFjaF92
bV9jb3B5KG1hY2hfdGFza19zZWxmKCksIHRvVk1BZGRyZXNzKGRhdGEpLCByb3VuZF9wYWdlKHNp
emUpLCBhZGRyZXNzKTsKLSAgICAgICAgaWYgKGtyICE9IEtFUk5fU1VDQ0VTUykgewotICAgICAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gdm1fY29weSBpbiB0byBzaGFyZWQgbWVtb3J5ICgl
enUgYnl0ZXMpLiAlcyAoJXgpIiwgc2l6ZSwgbWFjaF9lcnJvcl9zdHJpbmcoa3IpLCBrcik7IAot
ICAgICAgICAgICAgbWFjaF92bV9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIGFkZHJlc3Ms
IHJvdW5kX3BhZ2Uoc2l6ZSkpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KKwor
ICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSA9IGNyZWF0ZUZyb21WTUJ1ZmZl
cih0b1BvaW50ZXIoYWRkcmVzcyksIHNpemUpOworICAgIGlmICghc2hhcmVkTWVtb3J5KSB7Cisg
ICAgICAgIG1hY2hfdm1fZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBhZGRyZXNzLCByb3Vu
ZF9wYWdlKHNpemUpKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIAorICAgIHNoYXJl
ZE1lbW9yeS0+bV9zaG91bGRWTURlYWxsb2NhdGVEYXRhID0gdHJ1ZTsKKyAgICByZXR1cm4gc2hh
cmVkTWVtb3J5LnJlbGVhc2UoKTsKK30KIAorUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJl
ZE1lbW9yeTo6Y3JlYXRlRnJvbVZNQnVmZmVyKHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKSAgCit7
CisgICAgQVNTRVJUKHNpemUpOworICAgIAogICAgIC8vIENyZWF0ZSBhIE1hY2ggcG9ydCB0aGF0
IHJlcHJlc2VudHMgdGhlIHNoYXJlZCBtZW1vcnkuCiAgICAgbWFjaF9wb3J0X3QgcG9ydDsKICAg
ICBtZW1vcnlfb2JqZWN0X3NpemVfdCBtZW1vcnlPYmplY3RTaXplID0gcm91bmRfcGFnZShzaXpl
KTsKLSAgICBrciA9IG1hY2hfbWFrZV9tZW1vcnlfZW50cnlfNjQobWFjaF90YXNrX3NlbGYoKSwg
Jm1lbW9yeU9iamVjdFNpemUsIGFkZHJlc3MsIFZNX1BST1RfREVGQVVMVCwgJnBvcnQsIE1BQ0hf
UE9SVF9OVUxMKTsKLQorICAgIGtlcm5fcmV0dXJuX3Qga3IgPSBtYWNoX21ha2VfbWVtb3J5X2Vu
dHJ5XzY0KG1hY2hfdGFza19zZWxmKCksICZtZW1vcnlPYmplY3RTaXplLCB0b1ZNQWRkcmVzcyhk
YXRhKSwgVk1fUFJPVF9ERUZBVUxUIHwgVk1fUFJPVF9JU19NQVNLLCAmcG9ydCwgTUFDSF9QT1JU
X05VTEwpOworICAgIAogICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpIHsKICAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGEgbWFjaCBwb3J0IGZvciBzaGFyZWQgbWVtb3J5LiAl
cyAoJXgpIiwgbWFjaF9lcnJvcl9zdHJpbmcoa3IpLCBrcik7Ci0gICAgICAgIG1hY2hfdm1fZGVh
bGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBhZGRyZXNzLCByb3VuZF9wYWdlKHNpemUpKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xMzAsNyArMTI5LDggQEAgUGFzc1JlZlB0cjxT
aGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlV2l0aFZNQ29weSh2b2lkKiBkYXRhLCBz
aXplX3Qgc2l6ZSkKIAogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeShhZG9w
dFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7CiAgICAgc2hhcmVkTWVtb3J5LT5tX3NpemUgPSBzaXpl
OwotICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gdG9Qb2ludGVyKGFkZHJlc3MpOworICAgIHNo
YXJlZE1lbW9yeS0+bV9kYXRhID0gZGF0YTsKKyAgICBzaGFyZWRNZW1vcnktPm1fc2hvdWxkVk1E
ZWFsbG9jYXRlRGF0YSA9IGZhbHNlOwogICAgIHNoYXJlZE1lbW9yeS0+bV9wb3J0ID0gcG9ydDsK
IAogICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwpAQCAtMTY0LDYgKzE2NCw3IEBA
IFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShjb25zdCBIYW5k
bGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwCiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVk
TWVtb3J5KGFkb3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkpKTsKICAgICBzaGFyZWRNZW1vcnktPm1f
c2l6ZSA9IGhhbmRsZS5tX3NpemU7CiAgICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSB0b1BvaW50
ZXIobWFwcGVkQWRkcmVzcyk7CisgICAgc2hhcmVkTWVtb3J5LT5tX3Nob3VsZFZNRGVhbGxvY2F0
ZURhdGEgPSB0cnVlOwogICAgIHNoYXJlZE1lbW9yeS0+bV9wb3J0ID0gTUFDSF9QT1JUX05VTEw7
CiAKICAgICByZXR1cm4gc2hhcmVkTWVtb3J5LnJlbGVhc2UoKTsKQEAgLTE3MSw3ICsxNzIsNyBA
QCBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoY29uc3QgSGFu
ZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcAogCiBTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnko
KQogewotICAgIGlmIChtX2RhdGEpIHsKKyAgICBpZiAobV9kYXRhICYmIG1fc2hvdWxkVk1EZWFs
bG9jYXRlRGF0YSkgewogICAgICAgICBrZXJuX3JldHVybl90IGtyID0gbWFjaF92bV9kZWFsbG9j
YXRlKG1hY2hfdGFza19zZWxmKCksIHRvVk1BZGRyZXNzKG1fZGF0YSksIHJvdW5kX3BhZ2UobV9z
aXplKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoa3IsIGtyID09IEtFUk5fU1VDQ0VTUyk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVJlc291cmNl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5jcHAKaW5kZXgg
ZjdlZmU4OC4uOGE4YTk1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJl
YWJsZVJlc291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVz
b3VyY2UuY3BwCkBAIC0yNyw2ICsyNyw5IEBACiAjaW5jbHVkZSAiU2hhcmVhYmxlUmVzb3VyY2Uu
aCIKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TaGFy
ZWRCdWZmZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCkBAIC01MSw2ICs1NCw0MiBAQCBib29sIFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGU6
OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXImIGRlY29kZXIsIEhhbmRsZQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CisKK3N0YXRpYyB2b2lkIHNoYXJl
YWJsZVJlc291cmNlRGVhbGxvY2F0ZSh2b2lkICpwdHIsIHZvaWQgKmluZm8pCit7CisgICAgU2hh
cmVhYmxlUmVzb3VyY2UqIHJlc291cmNlID0gc3RhdGljX2Nhc3Q8U2hhcmVhYmxlUmVzb3VyY2Uq
PihpbmZvKTsKKyAgICByZXNvdXJjZS0+ZGVyZWYoKTsKK30KKyAgICAKK3N0YXRpYyBDRkFsbG9j
YXRvclJlZiBjcmVhdGVTaGFyZWFibGVSZXNvdXJjZURlYWxsb2NhdG9yKFBhc3NSZWZQdHI8U2hh
cmVhYmxlUmVzb3VyY2U+IHJlc291cmNlKQoreworICAgIENGQWxsb2NhdG9yQ29udGV4dCBjb250
ZXh0ID0geyAwLAorICAgICAgICByZXNvdXJjZS5sZWFrUmVmKCksCisgICAgICAgIE5VTEwsIC8v
IHJldGFpbgorICAgICAgICBOVUxMLCAvLyByZWxlYXNlCisgICAgICAgIE5VTEwsIC8vIGNvcHlE
ZXNjcmlwdGlvbgorICAgICAgICBOVUxMLCAvLyBhbGxvY2F0ZQorICAgICAgICBOVUxMLCAvLyBy
ZWFsbG9jYXRlCisgICAgICAgIHNoYXJlYWJsZVJlc291cmNlRGVhbGxvY2F0ZSwKKyAgICAgICAg
TlVMTCwKKyAgICB9OworCisgICAgcmV0dXJuIENGQWxsb2NhdG9yQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsICZjb250ZXh0KTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJl
YWJsZVJlc291cmNlOjpIYW5kbGU6OnRyeVdyYXBJblNoYXJlZEJ1ZmZlcigpIGNvbnN0Cit7Cisg
ICAgUmVmUHRyPFNoYXJlYWJsZVJlc291cmNlPiByZXNvdXJjZSA9IFNoYXJlYWJsZVJlc291cmNl
OjpjcmVhdGUoKnRoaXMpOworICAgIGlmICghcmVzb3VyY2UpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gcmVjcmVhdGUgU2hhcmVhYmxlUmVzb3VyY2UgZnJvbSBoYW5kbGUuIik7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJldGFpblB0cjxDRkFsbG9jYXRvclJlZj4g
ZGVhbGxvY2F0b3IoQWRvcHRDRiwgY3JlYXRlU2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRvcihy
ZXNvdXJjZSkpOworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRh
Q3JlYXRlV2l0aEJ5dGVzTm9Db3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgVUludDgqPihyZXNvdXJjZS0+ZGF0YSgpKSwgc3RhdGljX2Nhc3Q8Q0ZJbmRleD4o
cmVzb3VyY2UtPnNpemUoKSksIGRlYWxsb2NhdG9yLmdldCgpKSk7CisKKyAgICByZXR1cm4gU2hh
cmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKGRhdGEuZ2V0KCkpOworfQogICAgIAogUGFzc1JlZlB0cjxT
aGFyZWFibGVSZXNvdXJjZT4gU2hhcmVhYmxlUmVzb3VyY2U6OmNyZWF0ZShQYXNzUmVmUHRyPFNo
YXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHNpemUp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2Uu
aCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5oCmluZGV4IDZlNWMw
YzkuLjc3OGU5YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVS
ZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5o
CkBAIC0zMiw2ICszMiwxMCBAQAogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTaGFyZWRCdWZm
ZXI7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIAogY2xhc3MgU2hhcmVhYmxlUmVzb3Vy
Y2UgOiBwdWJsaWMgUmVmQ291bnRlZDxTaGFyZWFibGVSZXNvdXJjZT4gewpAQCAtNDgsNiArNTIs
OCBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2Rl
ciYpIGNvbnN0OwogICAgICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnRE
ZWNvZGVyJiwgSGFuZGxlJik7CiAKKyAgICAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+IHRyeVdyYXBJblNoYXJlZEJ1ZmZlcigpIGNvbnN0OworCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgZnJpZW5kIGNsYXNzIFNoYXJlYWJsZVJlc291cmNlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IDE2ZWRjNTQuLjljMDEw
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwCkBAIC0zODcsNiArMzg3LDEwIEBAIHZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVl
c3Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZXNvCiAgICAgICAg
IGVuY29kZXIgPDwgcmVzb3VyY2VSZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5n
KCk7CiAgICAgfQogCisjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKKyAgICBlbmNvZGVy
IDw8IHJlc291cmNlUmVxdWVzdC5jYWNoZVBhcnRpdGlvbigpOworI2VuZGlmCisKICAgICBlbmNv
ZGVQbGF0Zm9ybURhdGEoZW5jb2RlciwgcmVzb3VyY2VSZXF1ZXN0KTsKIH0KIApAQCAtNDI4LDYg
KzQzMiwxMyBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciYgZGVjb2RlciwgUmVzb3VyY2VSZQogICAgICAgICByZXNvdXJjZVJlcXVl
c3QgPSByZXF1ZXN0OwogICAgIH0KIAorI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCisg
ICAgU3RyaW5nIGNhY2hlUGFydGl0aW9uOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY2FjaGVQ
YXJ0aXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzb3VyY2VSZXF1ZXN0LnNl
dENhY2hlUGFydGl0aW9uKGNhY2hlUGFydGl0aW9uKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIGRl
Y29kZVBsYXRmb3JtRGF0YShkZWNvZGVyLCByZXNvdXJjZVJlcXVlc3QpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24uY3BwCmluZGV4IDE4MzQ0YzEuLjNmMGQ1OWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VC
dWZmZXIuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNsdWRl
ICJXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9NZW1vcnlD
YWNoZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VCdWZmZXIuaD4KIAogI2lmIEVOQUJM
RShORVRXT1JLX1BST0NFU1MpCkBAIC02MCw3ICs2MSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0
aW9uCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZShjb25uZWN0aW9u
LCBkZWNvZGVyKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2Vp
dmVTeW5jTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpN
ZXNzYWdlRGVjb2RlciYgZGVjb2RlciwgT3duUHRyPENvcmVJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYg
cmVwbHlFbmNvZGVyKQpAQCAtODUsNiArODYsMjEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ28K
IHsKIH0KIAordm9pZCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZENhY2hlUmVzb3VyY2Uo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTaGFyZWFibGVSZXNvdXJjZTo6
SGFuZGxlJiBoYW5kbGUpCit7CisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gbWVtb3J5
Q2FjaGUoKS0+cmVzb3VyY2VGb3JSZXF1ZXN0KHJlcXVlc3QpOworICAgIGlmICghcmVzb3VyY2Up
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIg
PSBoYW5kbGUudHJ5V3JhcEluU2hhcmVkQnVmZmVyKCk7CisgICAgaWYgKCFidWZmZXIpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGVkIHRvIGNyZWF0ZSBTaGFyZWRCdWZmZXIgZnJvbSBTaGFy
ZWFibGVSZXNvdXJjZSBoYW5kbGUgZm9yIHJlc291cmNlIHVybCAlcyIsIHJlcXVlc3QudXJsKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBy
ZXNvdXJjZS0+dHJ5UmVwbGFjaW5nRW5jb2RlZERhdGEoYnVmZmVyLnJlbGVhc2UoKSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaAppbmRleCBkNDQ5MGEwLi4wY2RjNzNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbi5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbl9oCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiU2hh
cmVhYmxlUmVzb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01NiwxNSArNTcsMjAgQEAgcHVibGljOgogICAg
IAogICAgIENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X2Nvbm5lY3Rpb24uZ2V0KCk7IH0KIAorICAgIHZvaWQgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbk1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VE
ZWNvZGVyJik7CisKIHByaXZhdGU6CiAgICAgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKENvcmVJ
UEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIpOwogCiAgICAgLy8gQ29yZUlQQzo6Q29ubmVjdGlv
bjo6Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlU3luY01lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3Nh
Z2VEZWNvZGVyJiwgT3duUHRyPENvcmVJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYpOwotICAgIHZpcnR1
YWwgdm9pZCBkaWRDbG9zZShDb3JlSVBDOjpDb25uZWN0aW9uKik7CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdl
RGVjb2RlciYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlU3luY01lc3Nh
Z2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJiwgT3duUHRy
PENvcmVJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBk
aWRDbG9zZShDb3JlSVBDOjpDb25uZWN0aW9uKikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6
U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIENvcmVJUEM6OlN0cmluZ1JlZmVy
ZW5jZSBtZXNzYWdlTmFtZSkgT1ZFUlJJREU7CiAKKyAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgor
ICAgIHZvaWQgZGlkQ2FjaGVSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlJik7CisKICAgICAvLyBUaGUgY29ubmVj
dGlvbiBmcm9tIHRoZSB3ZWIgcHJvY2VzcyB0byB0aGUgbmV0d29yayBwcm9jZXNzLgogICAgIFJl
ZlB0cjxDb3JlSVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bi5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KaW5kZXggZjE3NzM4My4uNTZjYmY3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbi5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCkBAIC0yNCw2ICsyNCw4
IEBACiAKIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbiBMZWdhY3lSZWNlaXZl
ciB7CiAKKyAgICBEaWRDYWNoZVJlc291cmNlKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1
ZXN0LCBXZWJLaXQ6OlNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUgcmVzb3VyY2UpCisKIH0KIAog
I2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmNwcAppbmRleCBlZWMy
YTEwLi45NGU2ZTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
TmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTEwNyw0NyArMTA3LDIwIEBAIHZvaWQg
V2ViUmVzb3VyY2VMb2FkZXI6OmRpZEZhaWxSZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IpCiAgICAgbV9jb3JlTG9hZGVyLT5kaWRGYWlsKGVycm9yKTsKIH0KIAotc3RhdGlj
IHZvaWQgc2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRlKHZvaWQgKnB0ciwgdm9pZCAqaW5mbykK
LXsKLSAgICBTaGFyZWFibGVSZXNvdXJjZSogcmVzb3VyY2UgPSBzdGF0aWNfY2FzdDxTaGFyZWFi
bGVSZXNvdXJjZSo+KGluZm8pOwotICAgIHJlc291cmNlLT5kZXJlZigpOwotfQotICAgIAotc3Rh
dGljIENGQWxsb2NhdG9yUmVmIGNyZWF0ZVNoYXJlYWJsZVJlc291cmNlRGVhbGxvY2F0b3IoUGFz
c1JlZlB0cjxTaGFyZWFibGVSZXNvdXJjZT4gcmVzb3VyY2UpCi17Ci0gICAgQ0ZBbGxvY2F0b3JD
b250ZXh0IGNvbnRleHQgPSB7IDAsCi0gICAgICAgIHJlc291cmNlLmxlYWtSZWYoKSwKLSAgICAg
ICAgTlVMTCwgLy8gcmV0YWluCi0gICAgICAgIE5VTEwsIC8vIHJlbGVhc2UKLSAgICAgICAgTlVM
TCwgLy8gY29weURlc2NyaXB0aW9uCi0gICAgICAgIE5VTEwsIC8vIGFsbG9jYXRlCi0gICAgICAg
IE5VTEwsIC8vIHJlYWxsb2NhdGUKLSAgICAgICAgc2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRl
LAotICAgICAgICBOVUxMLAotICAgIH07Ci0KLSAgICByZXR1cm4gQ0ZBbGxvY2F0b3JDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgJmNvbnRleHQpOwotfQotCiB2b2lkIFdlYlJlc291cmNlTG9h
ZGVyOjpkaWRSZWNlaXZlUmVzb3VyY2UoY29uc3QgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYg
aGFuZGxlLCBkb3VibGUgZmluaXNoVGltZSkKIHsKICAgICBMT0coTmV0d29yaywgIihXZWJQcm9j
ZXNzKSBXZWJSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc291cmNlIGZvciAnJXMnIiwgbV9j
b3JlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIFJlZlB0cjxT
aGFyZWFibGVSZXNvdXJjZT4gcmVzb3VyY2UgPSBTaGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKGhh
bmRsZSk7Ci0gICAgaWYgKCFyZXNvdXJjZSkgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZWQg
dG8gcmVjcmVhdGUgdGhlIFNoYXJlYWJsZVJlc291cmNlIHNlbnQgZnJvbSB0aGUgbmV0d29yayBw
cm9jZXNzLiIpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IGhhbmRsZS50cnlX
cmFwSW5TaGFyZWRCdWZmZXIoKTsKKyAgICBpZiAoIWJ1ZmZlcikgeworICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byBjcmVhdGUgYnVmZmVyIGZyb20gU2hhcmVhYmxlUmVzb3VyY2Ugc2VudCBm
cm9tIHRoZSBuZXR3b3JrIHByb2Nlc3MuIik7CiAgICAgICAgIG1fY29yZUxvYWRlci0+ZGlkRmFp
bChpbnRlcm5hbEVycm9yKG1fY29yZUxvYWRlci0+cmVxdWVzdCgpLnVybCgpKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICAvLyBPbmx5IHNlbmQgZGF0YSB0byB0aGUgZGlkUmVjZWl2
ZURhdGEgY2FsbGJhY2sgaWYgaXQgZXhpc3RzLgotICAgIGlmIChyZXNvdXJjZS0+c2l6ZSgpKSB7
Ci0gICAgICAgIFJldGFpblB0cjxDRkFsbG9jYXRvclJlZj4gZGVhbGxvY2F0b3IoQWRvcHRDRiwg
Y3JlYXRlU2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRvcihyZXNvdXJjZSkpOwotICAgICAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0ZVdpdGhCeXRlc05v
Q29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4o
cmVzb3VyY2UtPmRhdGEoKSksIHN0YXRpY19jYXN0PENGSW5kZXg+KHJlc291cmNlLT5zaXplKCkp
LCBkZWFsbG9jYXRvci5nZXQoKSkpOwotCi0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1
ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShkYXRhLmdldCgpKTsKKyAgICBpZiAoYnVm
ZmVyLT5zaXplKCkpCiAgICAgICAgIG1fY29yZUxvYWRlci0+ZGlkUmVjZWl2ZUJ1ZmZlcihidWZm
ZXIuZ2V0KCksIGJ1ZmZlci0+c2l6ZSgpLCBEYXRhUGF5bG9hZFdob2xlUmVzb3VyY2UpOwotICAg
IH0KIAogICAgIG1fY29yZUxvYWRlci0+ZGlkRmluaXNoTG9hZGluZyhmaW5pc2hUaW1lKTsKIH0K
</data>
<flag name="review"
          id="216064"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194337</attachid>
            <date>2013-03-21 14:21:29 -0700</date>
            <delta_ts>2013-03-21 15:44:20 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>32585</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxYzIxODgwLi42ZjZmZWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTMtMDMtMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIElmIGEgcHJldmlvdXNseSBsb2FkZWQgcmVzb3VyY2UgaXMgbGF0ZXIgc3RvcmVkIHRvIHRo
ZSBkaXNrIGNhY2hlZCwgcmVwbGFjZSB0aGUgYnVmZmVyIHdpdGggTU1BUCdlZCBtZW1vcnkuCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQxNDE1ND4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTI5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE5vIGNoYW5nZSBpbiBiZWhhdmlvci4p
CisKKyAgICAgICAgR2l2ZSBTaGFyZWRCdWZmZXIgdGhlIGFiaWxpdHkgdG8gcmVwbGFjZSBpdHMg
Y29udGVudHMgZnJvbSBhbm90aGVyIFNoYXJlZEJ1ZmZlcjoKKyAgICAgICAgKiBwbGF0Zm9ybS9T
aGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OiB0cnlSZXBsYWNlQ29udGVudHNXaXRo
UGxhdGZvcm1CdWZmZXIpOgorCisgICAgICAgIEZvcndhcmQgYWxvbmcgU2hhcmVkQnVmZmVyJ3Mg
bmV3IGFiaWxpdHkgdG8gUmVzb3VyY2VCdWZmZXI6CisgICAgICAgICogbG9hZGVyL21hYy9SZXNv
dXJjZUJ1ZmZlci5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlQnVmZmVyOjogdHJ5UmVw
bGFjZVNoYXJlZEJ1ZmZlckNvbnRlbnRzKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VCdWZm
ZXIuaDoKKworICAgICAgICBHaXZlIENhY2hlZFJlc291cmNlIHRoZSBhYmlsaXR5IHRvIHJlcGxh
Y2UgaXRzIGVuY29kZWQgZGF0YSBidWZmZXIgaWYgYXBwcm9wcmlhdGU6CisgICAgICAgICogbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJl
c291cmNlOjogdHJ5UmVwbGFjZUVuY29kZWREYXRhKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2UuaDoKKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorCiAyMDEzLTAz
LTE5ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KIAogICAgICAgICBSZWZhY3Rv
ciBjb25kaXRpb25zIGZvciBzZXRDb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxkIGluIFJlbmRl
ckxheWVyOjpzdHlsZUNoYW5nZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggODIyZWZhOC4uMTEx
YTgxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTE3MCw2ICsxNzAsNyBAQCBfX1pON1dlYkNv
cmUxMU1lbW9yeUNhY2hlMTNnZXRTdGF0aXN0aWNzRXYKIF9fWk43V2ViQ29yZTExTWVtb3J5Q2Fj
aGUxM3NldENhcGFjaXRpZXNFampqCiBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMTRldmljdFJl
c291cmNlc0V2CiBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMTRyZXNvdXJjZUZvclVSTEVSS05T
XzRLVVJMRQorX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTE4cmVzb3VyY2VGb3JSZXF1ZXN0RVJL
TlNfMTVSZXNvdXJjZVJlcXVlc3RFCiBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMTlnZXRPcmln
aW5zV2l0aENhY2hlRVJOM1dURjdIYXNoU2V0SU5TMV82UmVmUHRySU5TXzE0U2VjdXJpdHlPcmln
aW5FRUVOU18xOFNlY3VyaXR5T3JpZ2luSGFzaEVOUzFfMTBIYXNoVHJhaXRzSVM1X0VFRUUKIF9f
Wk43V2ViQ29yZTExTWVtb3J5Q2FjaGUyNXJlbW92ZVJlc291cmNlc1dpdGhPcmlnaW5FUE5TXzE0
U2VjdXJpdHlPcmlnaW5FCiBfX1pON1dlYkNvcmUxMVVSTFdpdGhEYXRhRVA2TlNEYXRhUDVOU1VS
TApAQCAtMjczLDYgKzI3NCw3IEBAIF9fWk43V2ViQ29yZTEzdG9IVE1MRWxlbWVudEVQTlNfMjFG
b3JtQXNzb2NpYXRlZEVsZW1lbnRFCiBfX1pON1dlYkNvcmUxM3RvSlNET01XaW5kb3dFTjNKU0M3
SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2UxMnJlbW92ZUNsaWVudEVQTlNf
MjBDYWNoZWRSZXNvdXJjZUNsaWVudEUKIF9fWk43V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2UxNnVu
cmVnaXN0ZXJIYW5kbGVFUE5TXzI0Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlRQorX19aTjdXZWJD
b3JlMTRDYWNoZWRSZXNvdXJjZTIxdHJ5UmVwbGFjZUVuY29kZWREYXRhRU4zV1RGMTBQYXNzUmVm
UHRySU5TXzEyU2hhcmVkQnVmZmVyRUVFCiBfX1pON1dlYkNvcmUxNENhY2hlZFJlc291cmNlOWFk
ZENsaWVudEVQTlNfMjBDYWNoZWRSZXNvdXJjZUNsaWVudEUKIF9fWk43V2ViQ29yZTE0Q2xpZW50
UmVjdExpc3RDMUVSS04zV1RGNlZlY3RvcklOU185RmxvYXRRdWFkRUxtMEVFRQogX19aTjdXZWJD
b3JlMTRDbGllbnRSZWN0TGlzdEMxRXYKQEAgLTE1ODcsNiArMTU4OSw3IEBAIF9oYXNDYXNlSW5z
ZW5zaXRpdmVTdWZmaXgKIF9zdHJpbmdJc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9TdHJpbmcKIF9z
dWdnZXN0ZWRGaWxlbmFtZVdpdGhNSU1FVHlwZQogI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05J
TkcpCitfX1pON1dlYkNvcmUxNVJlc291cmNlUmVxdWVzdDEzcGFydGl0aW9uTmFtZUVSS04zV1RG
NlN0cmluZ0UKIF93a0NhY2hlUGFydGl0aW9uS2V5CiAjZW5kaWYKIF93a0NHQ29udGV4dEdldFNo
b3VsZFNtb290aEZvbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5oCmluZGV4
IDEwMDM2NmMuLjI2OTEwNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5o
CkBAIC02NCw2ICs2NCw5IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBnZXRTb21lRGF0YShjb25z
dCBjaGFyKiYgZGF0YSwgdW5zaWduZWQgcG9zaXRpb24gPSAwKSBjb25zdDsKICAgICAKICAgICBT
aGFyZWRCdWZmZXIqIHNoYXJlZEJ1ZmZlcigpIGNvbnN0OworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICB2b2lkIHRyeVJlcGxhY2VTaGFyZWRCdWZmZXJDb250ZW50cyhTaGFyZWRCdWZmZXIqKTsKKyNl
bmRpZgogICAgIFBhc3NSZWZQdHI8UmVzb3VyY2VCdWZmZXI+IGNvcHkoKSBjb25zdDsKIAogICAg
IGJvb2wgaGFzUHVyZ2VhYmxlQnVmZmVyKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAppbmRleCBjYTJlOGUzLi5kZDY3NzJkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKQEAgLTk2
OSw0ICs5NjksMTkgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVt
b3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKICAgICAgICAgaW5mby5hZGRS
YXdCdWZmZXIobV9wdXJnZWFibGVEYXRhLmdldCgpLCBtX3B1cmdlYWJsZURhdGEtPnNpemUoKSwg
IlB1cmdlYWJsZURhdGEiLCAicHVyZ2VhYmxlRGF0YSIpOwogfQogCisjaWYgUExBVEZPUk0oTUFD
KQordm9pZCBDYWNoZWRSZXNvdXJjZTo6dHJ5UmVwbGFjZUVuY29kZWREYXRhKFBhc3NSZWZQdHI8
U2hhcmVkQnVmZmVyPiBuZXdCdWZmZXIpCit7CisgICAgaWYgKCFtX2RhdGEpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICAvLyBCZWNhdXNlIHRoZSBkaXNrIGNhY2hlIGlzIGFzeW5jaHJvbm91
cyBhbmQgcmFjZXkgd2l0aCByZWdhcmRzIHRvIHRoZSBkYXRhIHdlIG1pZ2h0IGJlIGFza2VkIHRv
IHJlcGxhY2UsCisgICAgLy8gd2UgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgbmV3IGJ1ZmZlciBo
YXMgdGhlIHNhbWUgY29udGVudHMgYXMgb3VyIG9sZCBidWZmZXIuCisgICAgaWYgKG1fZGF0YS0+
c2l6ZSgpICE9IG5ld0J1ZmZlci0+c2l6ZSgpIHx8IG1lbWNtcChtX2RhdGEtPmRhdGEoKSwgbmV3
QnVmZmVyLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9kYXRhLT50cnlSZXBsYWNlU2hhcmVkQnVmZmVyQ29udGVudHMobmV3QnVmZmVyLmdldCgpKTsK
K30KKyNlbmRpZgorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZS5oCmluZGV4IDI3YjA4ZGIuLjE4MDg3YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCkBAIC01MCw2ICs1MCw3IEBAIGNsYXNzIEluc3BlY3Rv
clJlc291cmNlOwogY2xhc3MgUHVyZ2VhYmxlQnVmZmVyOwogY2xhc3MgUmVzb3VyY2VCdWZmZXI7
CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFN1YnJl
c291cmNlTG9hZGVyOwogCiAvLyBBIHJlc291cmNlIHRoYXQgaXMgaGVsZCBpbiB0aGUgY2FjaGUu
IENsYXNzZXMgd2hvIHdhbnQgdG8gdXNlIHRoaXMgb2JqZWN0IHNob3VsZCBkZXJpdmUKQEAgLTI2
Myw2ICsyNjQsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGNhblJldXNlKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAorI2lmIFBMQVRGT1JN
KE1BQykKKyAgICB2b2lkIHRyeVJlcGxhY2VFbmNvZGVkRGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4pOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tOb3Rp
ZnkoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL21hYy9SZXNvdXJjZUJ1
ZmZlci5tbSBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9tYWMvUmVzb3VyY2VCdWZmZXIubW0KaW5k
ZXggNjc1NjEzZi4uMTNlMGNiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL21h
Yy9SZXNvdXJjZUJ1ZmZlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvbWFjL1Jlc291
cmNlQnVmZmVyLm1tCkBAIC0zMyw0ICszMywxMiBAQCBOU0RhdGEqIFJlc291cmNlQnVmZmVyOjpj
cmVhdGVOU0RhdGEoKQogICAgIHJldHVybiBtX3NoYXJlZEJ1ZmZlci0+Y3JlYXRlTlNEYXRhKCk7
CiB9CiAKK3ZvaWQgUmVzb3VyY2VCdWZmZXI6OnRyeVJlcGxhY2VTaGFyZWRCdWZmZXJDb250ZW50
cyhTaGFyZWRCdWZmZXIqIG5ld0NvbnRlbnRzKQoreworICAgIGlmICghbV9zaGFyZWRCdWZmZXIp
CisgICAgICAgIG1fc2hhcmVkQnVmZmVyID0gbmV3Q29udGVudHM7CisgICAgZWxzZQorICAgICAg
ICBtX3NoYXJlZEJ1ZmZlci0+dHJ5UmVwbGFjZUNvbnRlbnRzV2l0aFBsYXRmb3JtQnVmZmVyKG5l
d0NvbnRlbnRzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCAzMmU3MWFmLi5mMjRhYzIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtMTE4LDYgKzExOCw4IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgY3JlYXRlUHVyZ2VhYmxlQnVmZmVyKCkgY29uc3Q7CiAKKyAgICB2b2lkIHRyeVJl
cGxhY2VDb250ZW50c1dpdGhQbGF0Zm9ybUJ1ZmZlcihTaGFyZWRCdWZmZXIqKTsKKwogcHJpdmF0
ZToKICAgICBTaGFyZWRCdWZmZXIoKTsKICAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXIoc2l6ZV90
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNG
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcAppbmRl
eCBkNTg3ZTc1Li5iYzVkZjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
Zi9TaGFyZWRCdWZmZXJDRi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2hh
cmVkQnVmZmVyQ0YuY3BwCkBAIC05Myw2ICs5MywxNSBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6Y2xl
YXJQbGF0Zm9ybURhdGEoKQogICAgIG1fY2ZEYXRhID0gMDsKIH0KIAordm9pZCBTaGFyZWRCdWZm
ZXI6OnRyeVJlcGxhY2VDb250ZW50c1dpdGhQbGF0Zm9ybUJ1ZmZlcihTaGFyZWRCdWZmZXIqIG5l
d0NvbnRlbnRzKQoreworICAgIGlmICghbmV3Q29udGVudHMtPm1fY2ZEYXRhKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjbGVhcigpOworICAgIG1fY2ZEYXRhID0gbmV3Q29udGVudHMtPm1fY2ZE
YXRhOworfQorCiAjaWYgVVNFKE5FVFdPUktfQ0ZEQVRBX0FSUkFZX0NBTExCQUNLKQogdm9pZCBT
aGFyZWRCdWZmZXI6OmFwcGVuZChDRkRhdGFSZWYgZGF0YSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBkN2Ez
MGViLi5hMjgzMDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTMtMDMtMjEgIEJy
YWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIElmIGEgcHJldmlvdXNs
eSBsb2FkZWQgcmVzb3VyY2UgaXMgbGF0ZXIgc3RvcmVkIHRvIHRoZSBkaXNrIGNhY2hlZCwgcmVw
bGFjZSB0aGUgYnVmZmVyIHdpdGggTU1BUCdlZCBtZW1vcnkuCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8xMzQxNDE1ND4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTI5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgYSB0aW1lciB0aGF0IHdpbGwgdHJ5IHRvIGxvb2sgdXAgdGhlIGRpc2sgY2FjaGVkIGJ1
ZmZlciBmb3IgdGhlIHJlc291cmNlIGEgZmV3IHNlY29uZHMgYWZ0ZXIgdGhlIGxvYWQKKyAgICAg
ICAgY29tcGxldGVzIGFuZCAtIGlmIHRoZSByZXNvdXJjZSBpcyBkaXNrIGJhY2tlZCAtIHNlbmQg
aXQgdG8gdGhlIFdlYlByb2Nlc3MgZm9yIHNoYXJpbmc6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jl
c291cmNlTG9hZGVyOjpOZXR3b3JrUmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpc2tDYWNoZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorCisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp0cnlHZXRTaGFyZWFibGVIYW5kbGVG
b3JSZXNvdXJjZSk6CisKKyAgICAgICAgUmVmYWN0b3IgU2hhcmVkTWVtb3J5IHRvIHJlbW92ZSB0
aGUgdW5uZWNlc3Nhcnkgdm1fY29weSBhbmQgb25seSB2bV9hbGxvY2F0ZSB3aGVuIGFuIGFwcHJv
cHJpYXRlIGJ1ZmZlcgorICAgICAgICBkb2Vzbid0IGFscmVhZHkgZXhpc3Q6CisgICAgICAgICog
UGxhdGZvcm0vU2hhcmVkTWVtb3J5Lmg6CisgICAgICAgICogUGxhdGZvcm0vbWFjL1NoYXJlZE1l
bW9yeU1hYy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGVGcm9tVk1CdWZmZXIpOgorICAgICAg
ICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkpOgorCisgICAgICAgIEdpdmUg
U2hhcmVhYmxlUmVzb3VyY2UgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIGEgQ0ZEYXRhUmVmIHRoYXQg
d3JhcHMgInRoaXMiLCBhbmQgcmV0dXJuIGl0IGluIGEgU2hhcmVkQnVmZmVyOgorICAgICAgICAq
IFNoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNoYXJlYWJs
ZVJlc291cmNlRGVhbGxvY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZVNoYXJlYWJsZVJl
c291cmNlRGVhbGxvY2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVSZXNvdXJjZTo6
SGFuZGxlOjp0cnlXcmFwSW5TaGFyZWRCdWZmZXIpOgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFi
bGVSZXNvdXJjZS5oOgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHA6IEVuY29kZS9kZWNvZGUgdGhlIGNhY2hlIHBhcnRpdGlvbiBmb3IgUmVzb3VyY2VSZXF1ZXN0
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVj
ZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246
OmRpZENhY2hlUmVzb3VyY2UpOiBMb29rdXAgdGhlIENhY2hlZFJlc291cmNlIGluIHRoZSBXZWJD
b3JlIG1lbW9yeSBjYWNoZQorICAgICAgICAgIGFuZCB0cnkgdG8gcmVwbGFjZSBpdHMgZW5jb2Rl
ZCBkYXRhIHdpdGggdGhlIHNoYXJlZCBtbWFwJ2VkIGJ1ZmZlci4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmg6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjoKKworICAg
ICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzb3VyY2UpOgorCiAyMDEz
LTAzLTE5ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R1RLXSBGaXggV2ViS2l0MiBidWlsZHMgYWZ0ZXIgcjE0NjE5MwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXgg
ZmJlOWFlOC4uMTU1YzEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb25NZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQYXJh
bWV0ZXJzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCIKICNpbmNsdWRl
ICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgpAQCAtNTEsNiArNTIsMTAgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVy
KGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiBsb2FkUGFyYW1ldGVycywgTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24pCiAgICAgOiBTY2hlZHVsYWJs
ZUxvYWRlcihsb2FkUGFyYW1ldGVycywgY29ubmVjdGlvbikKKyAgICAsIG1fYnl0ZXNSZWNlaXZl
ZCgwKQorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorICAgICwg
bV9kaXNrQ2FjaGVUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpc2tDYWNoZVRpbWVyRmlyZWQpCisjZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDkwCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIH0K
QEAgLTE2OCw2ICsxNzMsMjEgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3NEaWRDbG9zZSgpCiAgICAgY2xlYW51cCgpOwogfQogCisjaWYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6ZGlza0NhY2hlVGltZXJGaXJlZCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBhZG9wdGVkUmVmID0gYWRvcHRS
ZWYodGhpcyk7IC8vIEJhbGFuY2Ugb3V0IHRoZSByZWYoKSB3aGVuIHNldHRpbmcgdGhlIHRpbWVy
LgorCisgICAgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSBoYW5kbGU7CisgICAgdHJ5R2V0U2hh
cmVhYmxlSGFuZGxlRm9yUmVzb3VyY2UoaGFuZGxlKTsKKyAgICBpZiAoaGFuZGxlLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb246OkRpZENhY2hlUmVzb3VyY2UocmVxdWVzdCgpLCBoYW5kbGUpKTsKK30KKyNlbmRp
ZiAvLyAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisKIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IGJvb2wgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzZW5kQWJvcnRpbmdP
bkZhaWx1cmUoY29uc3QgVSYgbWVzc2FnZSkKIHsKICAgICBib29sIHJlc3VsdCA9IHNlbmQobWVz
c2FnZSk7CkBAIC0yMDMsNyArMjIzLDE3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpk
aWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlCiAgICAg
aWYgKCFzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpE
aWRSZWNlaXZlUmVzcG9uc2VXaXRoQ2VydGlmaWNhdGVJbmZvKHJlc3BvbnNlLCBQbGF0Zm9ybUNl
cnRpZmljYXRlSW5mbyhyZXNwb25zZSkpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZv
cm1EaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9N
SU5fUkVRVUlSRUQgPj0gMTA5MAorICAgIFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUgaGFuZGxl
OworICAgIHRyeUdldFNoYXJlYWJsZUhhbmRsZUZvclJlc291cmNlKGhhbmRsZSk7CisgICAgaWYg
KGhhbmRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gU2luY2Ugd2UncmUg
ZGVsaXZlcmluZyB0aGlzIHJlc291cmNlIGJ5IG91cnNlbHZlcyBhbGwgYXQgb25jZSwgd2UnbGwg
YWJvcnQgdGhlIHJlc291cmNlIGhhbmRsZSBzaW5jZSB3ZSBkb24ndCBuZWVkIGFueW1vcmUgY2Fs
bGJhY2tzIGZyb20gUmVzb3VyY2VIYW5kbGUuCisgICAgYWJvcnRJblByb2dyZXNzTG9hZCgpOwor
ICAgIAorICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVz
b3VyY2UoaGFuZGxlLCBjdXJyZW50VGltZSgpKSk7CisjZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiB9CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCkKQEAgLTIxMSw2ICsyNDEsOCBAQCB2b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBjaGFyKiBkYXRhLCBpbgogICAgIC8vIEZJWE1FIChOZXR3b3JrUHJvY2Vzcyk6IEZvciB0aGUg
bWVtb3J5IGNhY2hlIHdlJ2xsIGFsc28gbmVlZCB0byBjYWNoZSB0aGUgcmVzcG9uc2UgZGF0YSBo
ZXJlLgogICAgIC8vIFN1Y2ggYnVmZmVyaW5nIHdpbGwgbmVlZCB0byBiZSB0aHJlYWQgc2FmZSwg
YXMgdGhpcyBjYWxsYmFjayBpcyBoYXBwZW5pbmcgb24gYSBiYWNrZ3JvdW5kIHRocmVhZC4KICAg
ICAKKyAgICBtX2J5dGVzUmVjZWl2ZWQgKz0gbGVuZ3RoOworCiAgICAgQ29yZUlQQzo6RGF0YVJl
ZmVyZW5jZSBkYXRhUmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRh
dGEpLCBsZW5ndGgpOwogICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVz
b3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVEYXRhKGRhdGFSZWZlcmVuY2UsIGVuY29kZWREYXRhTGVu
Z3RoKSk7CiB9CkBAIC0yMjEsNiArMjUzLDE3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIGZpbmlzaFRpbWUpCiAg
ICAgLy8gU3VjaCBib29ra2VlcGluZyB3aWxsIG5lZWQgdG8gYmUgdGhyZWFkIHNhZmUsIGFzIHRo
aXMgY2FsbGJhY2sgaXMgaGFwcGVuaW5nIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQuCiAgICAgaW52
YWxpZGF0ZVNhbmRib3hFeHRlbnNpb25zKCk7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUmVzb3Vy
Y2VMb2FkZXI6OkRpZEZpbmlzaFJlc291cmNlTG9hZChmaW5pc2hUaW1lKSk7CisKKyNpZiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyAgICAvLyBJZiB0aGlzIHJlc291
cmNlIHdhcyBsYXJnZSBlbm91Z2ggdGhhdCBpdCBzaG91bGQgYmUgY2FjaGVkIHRvIGRpc2sgYXMg
YSBzZXBhcmF0ZSBmaWxlLAorICAgIC8vIHRoZW4gd2Ugc2hvdWxkIHRyeSB0byByZS1kZWxpdmVy
IHRoZSByZXNvdXJjZSB0byB0aGUgV2ViUHJvY2VzcyBvbmNlIGl0ICppcyogc2F2ZWQgYXMgYSBz
ZXBhcmF0ZSBmaWxlLiAgICAKKyAgICBpZiAobV9ieXRlc1JlY2VpdmVkID49IGZpbGVCYWNrZWRS
ZXNvdXJjZU1pbmltdW1TaXplKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IE9uY2UgYSBub3RpZmlj
YXRpb24gQVBJIGV4aXN0cyB0aGF0IG9ibGl2aWF0ZXMgdGhpcyB0aW1lciwgdXNlIHRoYXQgaW5z
dGVhZC4KKyAgICAgICAgcmVmKCk7IC8vIEJhbGFuY2VkIGJ5IGFuIGFkb3B0UmVmKCkgaW4gZGlz
a0NhY2hlVGltZXJGaXJlZCgpLgorICAgICAgICBtX2Rpc2tDYWNoZVRpbWVyLnN0YXJ0T25lU2hv
dCgxMCk7CisgICAgfQorI2VuZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTA5MAorICAgIAogICAgIHNjaGVkdWxlQ2xlYW51cE9uTWFpblRocmVhZCgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5oCmluZGV4IGEzZjUzYjEuLjUxZWNkODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCkBAIC0zMCw4ICszMCwx
MCBAQAogCiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIlNjaGVkdWxhYmxl
TG9hZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxv
YWRlck9wdGlvbnMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgUmVzb3VyY2VCdWZmZXI7CkBAIC0xMDYsOCArMTA4LDE3IEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBzZW5kU3luY0Fib3J0aW5nT25G
YWlsdXJlKGNvbnN0IFUmIG1lc3NhZ2UsIGNvbnN0IHR5cGVuYW1lIFU6OlJlcGx5JiByZXBseSk7
CiAgICAgdm9pZCBhYm9ydEluUHJvZ3Jlc3NMb2FkKCk7CiAKKyAgICB2b2lkIHRyeUdldFNoYXJl
YWJsZUhhbmRsZUZvclJlc291cmNlKFNoYXJlYWJsZVJlc291cmNlOjpIYW5kbGUmKTsKKwogICAg
IFJlZlB0cjxSZW1vdGVOZXR3b3JraW5nQ29udGV4dD4gbV9uZXR3b3JraW5nQ29udGV4dDsKICAg
ICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOworCisgICAgdWludDY0
X3QgbV9ieXRlc1JlY2VpdmVkOworCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDkwCisgICAgdm9pZCBkaXNrQ2FjaGVUaW1lckZpcmVkKCk7CisgICAgV2ViQ29yZTo6
UnVuTG9vcDo6VGltZXI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBtX2Rpc2tDYWNoZVRpbWVyOwor
I2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0gYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVyTWFj
Lm1tCmluZGV4IDgxZTNmYjQuLmQxNTRlZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0KKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbQpA
QCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZVJlc291cmNlLmgiCiAjaW5jbHVk
ZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKQEAgLTM4LDExICszOSwyMSBAQCB0eXBlZGVmIHN0cnVjdCBfQ0ZDYWNoZWRVUkxS
ZXNwb25zZSogQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZjsKIGV4dGVybiAiQyIgQ0ZVUkxDYWNoZVJl
ZiBDRlVSTENhY2hlQ29weVNoYXJlZFVSTENhY2hlKCk7CiBleHRlcm4gIkMiIENGQ2FjaGVkVVJM
UmVzcG9uc2VSZWYgQ0ZVUkxDYWNoZUNvcHlSZXNwb25zZUZvclJlcXVlc3QoQ0ZVUkxDYWNoZVJl
ZiwgQ0ZVUkxSZXF1ZXN0UmVmKTsKIGV4dGVybiAiQyIgQ0ZBcnJheVJlZiBDRkNhY2hlZFVSTFJl
c3BvbnNlQ29weVJlY2VpdmVyRGF0YUFycmF5KENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpOworCitT
T0ZUX0xJTktfRlJBTUVXT1JLKENGTmV0d29yaykKK3N0YXRpYyBib29sIENGVVJMQ2FjaGVJc01l
bU1hcHBlZERhdGEoQ0ZVUkxDYWNoZVJlZiBjYWNoZSwgQ0ZEYXRhUmVmIGRhdGEpCit7CisgICAg
c3RhdGljIENGQm9vbGVhblJlZiAoKnNvZnRMaW5rSXNDYWNoZU1NQVBlZERhdGEpKENGVVJMQ2Fj
aGVSZWYgY2FjaGUsIENGRGF0YVJlZiBkYXRhKSA9IChDRkJvb2xlYW5SZWYgKCopKENGVVJMQ2Fj
aGVSZWYgY2FjaGUsIENGRGF0YVJlZiBkYXRhKSkgZGxzeW0oQ0ZOZXR3b3JrTGlicmFyeSgpLCAi
X0NGVVJMQ2FjaGVJc1Jlc3BvbnNlRGF0YU1lbU1hcHBlZCIpOworICAgIAorICAgIGlmIChzb2Z0
TGlua0lzQ2FjaGVNTUFQZWREYXRhKQorICAgICAgICByZXR1cm4gc29mdExpbmtJc0NhY2hlTU1B
UGVkRGF0YShjYWNoZSwgZGF0YSkgPT0ga0NGQm9vbGVhblRydWU7CisgICAgcmV0dXJuIGZhbHNl
OworfQogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi12b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6cGxhdGZvcm1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYpCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6dHJ5R2V0U2hhcmVhYmxl
SGFuZGxlRm9yUmVzb3VyY2UoU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYgaGFuZGxlKQogewog
I2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDkwCiAgICAgcmV0dXJuOwpA
QCAtNzIsMjQgKzgzLDE4IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpwbGF0Zm9ybURp
ZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlCiAgICAgaWYgKENGRGF0
YUdldExlbmd0aChkYXRhKSA8IChDRkluZGV4KWZpbGVCYWNrZWRSZXNvdXJjZU1pbmltdW1TaXpl
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFy
ZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZVdpdGhWTUNvcHkoKHZvaWQqKUNGRGF0YUdl
dEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSk7CisgICAgaWYgKCFDRlVSTENh
Y2hlSXNNZW1NYXBwZWREYXRhKGNhY2hlLmdldCgpLCBkYXRhKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5Ojpj
cmVhdGVGcm9tVk1CdWZmZXIoKHZvaWQqKUNGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdl
dExlbmd0aChkYXRhKSk7CiAgICAgaWYgKCFzaGFyZWRNZW1vcnkpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gY3JlYXRlIFZNQ29waWVkIHNoYXJlZCBtZW1vcnkgZm9yIGNhY2hlZCBy
ZXNvdXJjZS4gIFdlJ2xsIGxldCBpdCBsb2FkIG5vcm1hbGx5LiIpOworICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBjcmVhdGUgVk1Db3BpZWQgc2hhcmVkIG1lbW9yeSBmb3IgY2FjaGVkIHJl
c291cmNlLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotIAorCiAgICAgc2l6ZV90IHNpemUg
PSBzaGFyZWRNZW1vcnktPnNpemUoKTsKICAgICBSZWZQdHI8U2hhcmVhYmxlUmVzb3VyY2U+IHJl
c291cmNlID0gU2hhcmVhYmxlUmVzb3VyY2U6OmNyZWF0ZShzaGFyZWRNZW1vcnkucmVsZWFzZSgp
LCAwLCBzaXplKTsKLSAgICBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlIGhhbmRsZTsKLSAgICBp
ZiAoIXJlc291cmNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkgewotICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBjcmVhdGUgU2hhcmVhYmxlUmVzb3VyY2UgaGFuZGxlIHRvIHNlbmQgdG8gdGhl
IFdlYlByb2Nlc3MgZm9yIHJlc291cmNlLiAgV2UnbGwgbGV0IGl0IGxvYWQgbm9ybWFsbHkuIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTaW5jZSB3ZSdyZSBkZWxpdmVyaW5n
IHRoaXMgcmVzb3VyY2UgYnkgb3Vyc2VsdmVzIGFsbCBhdCBvbmNlLCB3ZSdsbCBhYm9ydCB0aGUg
cmVzb3VyY2UgaGFuZGxlIHNpbmNlIHdlIGRvbid0IG5lZWQgYW55bW9yZSBjYWxsYmFja3MgZnJv
bSBDRk5ldHdvcmsuCi0gICAgYWJvcnRJblByb2dyZXNzTG9hZCgpOwotICAgIAotICAgIHNlbmQo
TWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzb3VyY2UoaGFuZGxlLCBj
dXJyZW50VGltZSgpKSk7CisgICAgcmVzb3VyY2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOwogI2Vu
ZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDkwCiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKaW5kZXggN2U1N2Q2Ny4uNTc5N2ZhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKKysrIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKQEAgLTg0LDcgKzg0LDcgQEAgcHVi
bGljOgogCiAgICAgLy8gQ3JlYXRlIGEgc2hhcmVkIG1lbW9yeSBvYmplY3Qgd2l0aCB0aGUgZ2l2
ZW4gc2l6ZSBieSB2bV9jb3B5J2luZyB0aGUgZ2l2ZW4gYnVmZmVyLgogICAgIC8vIFdpbGwgcmV0
dXJuIDAgb24gZmFpbHVyZS4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IGNy
ZWF0ZVdpdGhWTUNvcHkodm9pZCosIHNpemVfdCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hh
cmVkTWVtb3J5PiBjcmVhdGVGcm9tVk1CdWZmZXIodm9pZCosIHNpemVfdCk7CiAKICNpZiBPUyhX
SU5ET1dTKQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gYWRvcHQoSEFORExF
LCBzaXplX3QsIFByb3RlY3Rpb24pOwpAQCAtMTA5LDYgKzEwOSw4IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICB2b2lkKiBtX2RhdGE7CisgICAgYm9vbCBtX3No
b3VsZFZNRGVhbGxvY2F0ZURhdGE7CisKICNpZiBPUyhEQVJXSU4pCiAgICAgbWFjaF9wb3J0X3Qg
bV9wb3J0OwogI2VsaWYgT1MoV0lORE9XUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL21hYy9TaGFyZWRNZW1vcnlNYWMuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
bWFjL1NoYXJlZE1lbW9yeU1hYy5jcHAKaW5kZXggMWE0NzAyZS4uODkzYTQ5YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1NoYXJlZE1lbW9yeU1hYy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1NoYXJlZE1lbW9yeU1hYy5jcHAKQEAgLTkyLDM3
ICs5MiwzNiBAQCBzdGF0aWMgaW5saW5lIG1hY2hfdm1fYWRkcmVzc190IHRvVk1BZGRyZXNzKHZv
aWQqIHBvaW50ZXIpCiAgICAgCiBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5
OjpjcmVhdGUoc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6Y3JlYXRl
V2l0aFZNQ29weSgwLCBzaXplKTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJl
ZE1lbW9yeTo6Y3JlYXRlV2l0aFZNQ29weSh2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKLXsKICAg
ICBBU1NFUlQoc2l6ZSk7CiAKICAgICBtYWNoX3ZtX2FkZHJlc3NfdCBhZGRyZXNzOwogICAgIGtl
cm5fcmV0dXJuX3Qga3IgPSBtYWNoX3ZtX2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksICZhZGRy
ZXNzLCByb3VuZF9wYWdlKHNpemUpLCBWTV9GTEFHU19BTllXSEVSRSk7CiAgICAgaWYgKGtyICE9
IEtFUk5fU1VDQ0VTUykgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBt
YWNoX3ZtX2FsbG9jYXRlIHNoYXJlZCBtZW1vcnkgKCV6dSBieXRlcykuICVzICgleCkiLCBzaXpl
LCBtYWNoX2Vycm9yX3N0cmluZyhrciksIGtyKTsgCisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGFsbG9jYXRlIG1hY2hfdm1fYWxsb2NhdGUgc2hhcmVkIG1lbW9yeSAoJXp1IGJ5dGVzKS4g
JXMgKCV4KSIsIHNpemUsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSwga3IpOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9Ci0gICAgCi0gICAgaWYgKGRhdGEpIHsKLSAgICAgICAga3IgPSBtYWNoX3Zt
X2NvcHkobWFjaF90YXNrX3NlbGYoKSwgdG9WTUFkZHJlc3MoZGF0YSksIHJvdW5kX3BhZ2Uoc2l6
ZSksIGFkZHJlc3MpOwotICAgICAgICBpZiAoa3IgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAgICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB2bV9jb3B5IGluIHRvIHNoYXJlZCBtZW1vcnkgKCV6
dSBieXRlcykuICVzICgleCkiLCBzaXplLCBtYWNoX2Vycm9yX3N0cmluZyhrciksIGtyKTsgCi0g
ICAgICAgICAgICBtYWNoX3ZtX2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgYWRkcmVzcywg
cm91bmRfcGFnZShzaXplKSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQorCisg
ICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5ID0gY3JlYXRlRnJvbVZNQnVmZmVy
KHRvUG9pbnRlcihhZGRyZXNzKSwgc2l6ZSk7CisgICAgaWYgKCFzaGFyZWRNZW1vcnkpIHsKKyAg
ICAgICAgbWFjaF92bV9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIGFkZHJlc3MsIHJvdW5k
X3BhZ2Uoc2l6ZSkpOworICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgCisgICAgc2hhcmVk
TWVtb3J5LT5tX3Nob3VsZFZNRGVhbGxvY2F0ZURhdGEgPSB0cnVlOworICAgIHJldHVybiBzaGFy
ZWRNZW1vcnkucmVsZWFzZSgpOworfQogCitQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVk
TWVtb3J5OjpjcmVhdGVGcm9tVk1CdWZmZXIodm9pZCogZGF0YSwgc2l6ZV90IHNpemUpICAKK3sK
KyAgICBBU1NFUlQoc2l6ZSk7CisgICAgCiAgICAgLy8gQ3JlYXRlIGEgTWFjaCBwb3J0IHRoYXQg
cmVwcmVzZW50cyB0aGUgc2hhcmVkIG1lbW9yeS4KICAgICBtYWNoX3BvcnRfdCBwb3J0OwogICAg
IG1lbW9yeV9vYmplY3Rfc2l6ZV90IG1lbW9yeU9iamVjdFNpemUgPSByb3VuZF9wYWdlKHNpemUp
OwotICAgIGtyID0gbWFjaF9tYWtlX21lbW9yeV9lbnRyeV82NChtYWNoX3Rhc2tfc2VsZigpLCAm
bWVtb3J5T2JqZWN0U2l6ZSwgYWRkcmVzcywgVk1fUFJPVF9ERUZBVUxULCAmcG9ydCwgTUFDSF9Q
T1JUX05VTEwpOwotCisgICAga2Vybl9yZXR1cm5fdCBrciA9IG1hY2hfbWFrZV9tZW1vcnlfZW50
cnlfNjQobWFjaF90YXNrX3NlbGYoKSwgJm1lbW9yeU9iamVjdFNpemUsIHRvVk1BZGRyZXNzKGRh
dGEpLCBWTV9QUk9UX0RFRkFVTFQgfCBWTV9QUk9UX0lTX01BU0ssICZwb3J0LCBNQUNIX1BPUlRf
TlVMTCk7CisgICAgCiAgICAgaWYgKGtyICE9IEtFUk5fU1VDQ0VTUykgewogICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgYSBtYWNoIHBvcnQgZm9yIHNoYXJlZCBtZW1vcnkuICVz
ICgleCkiLCBtYWNoX2Vycm9yX3N0cmluZyhrciksIGtyKTsKLSAgICAgICAgbWFjaF92bV9kZWFs
bG9jYXRlKG1hY2hfdGFza19zZWxmKCksIGFkZHJlc3MsIHJvdW5kX3BhZ2Uoc2l6ZSkpOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTEzMCw3ICsxMjksOCBAQCBQYXNzUmVmUHRyPFNo
YXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGVXaXRoVk1Db3B5KHZvaWQqIGRhdGEsIHNp
emVfdCBzaXplKQogCiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KGFkb3B0
UmVmKG5ldyBTaGFyZWRNZW1vcnkpKTsKICAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IHNpemU7
Ci0gICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSB0b1BvaW50ZXIoYWRkcmVzcyk7CisgICAgc2hh
cmVkTWVtb3J5LT5tX2RhdGEgPSBkYXRhOworICAgIHNoYXJlZE1lbW9yeS0+bV9zaG91bGRWTURl
YWxsb2NhdGVEYXRhID0gZmFsc2U7CiAgICAgc2hhcmVkTWVtb3J5LT5tX3BvcnQgPSBwb3J0Owog
CiAgICAgcmV0dXJuIHNoYXJlZE1lbW9yeS5yZWxlYXNlKCk7CkBAIC0xNjQsNiArMTY0LDcgQEAg
UGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0IEhhbmRs
ZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHAKICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRN
ZW1vcnkoYWRvcHRSZWYobmV3IFNoYXJlZE1lbW9yeSkpOwogICAgIHNoYXJlZE1lbW9yeS0+bV9z
aXplID0gaGFuZGxlLm1fc2l6ZTsKICAgICBzaGFyZWRNZW1vcnktPm1fZGF0YSA9IHRvUG9pbnRl
cihtYXBwZWRBZGRyZXNzKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fc2hvdWxkVk1EZWFsbG9jYXRl
RGF0YSA9IHRydWU7CiAgICAgc2hhcmVkTWVtb3J5LT5tX3BvcnQgPSBNQUNIX1BPUlRfTlVMTDsK
IAogICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwpAQCAtMTcxLDcgKzE3Miw3IEBA
IFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShjb25zdCBIYW5k
bGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwCiAKIFNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9yeSgp
CiB7Ci0gICAgaWYgKG1fZGF0YSkgeworICAgIGlmIChtX2RhdGEgJiYgbV9zaG91bGRWTURlYWxs
b2NhdGVEYXRhKSB7CiAgICAgICAgIGtlcm5fcmV0dXJuX3Qga3IgPSBtYWNoX3ZtX2RlYWxsb2Nh
dGUobWFjaF90YXNrX3NlbGYoKSwgdG9WTUFkZHJlc3MobV9kYXRhKSwgcm91bmRfcGFnZShtX3Np
emUpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChrciwga3IgPT0gS0VSTl9TVUNDRVNTKTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2Uu
Y3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmNwcAppbmRleCBm
N2VmZTg4Li43ZGE3YWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVh
YmxlUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVSZXNv
dXJjZS5jcHAKQEAgLTI3LDYgKzI3LDkgQEAKICNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5o
IgogCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJl
ZEJ1ZmZlci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKQEAgLTUxLDYgKzU0LDQzIEBAIGJvb2wgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZTo6
ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgSGFuZGxlCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KKworc3RhdGljIHZvaWQgc2hhcmVh
YmxlUmVzb3VyY2VEZWFsbG9jYXRlKHZvaWQgKnB0ciwgdm9pZCAqaW5mbykKK3sKKyAgICAoc3Rh
dGljX2Nhc3Q8U2hhcmVhYmxlUmVzb3VyY2UqPihpbmZvKSktPmRlcmVmKCk7IC8vIEJhbGFuY2Vk
IGJ5IHJlZigpIGluIGNyZWF0ZVNoYXJlYWJsZVJlc291cmNlRGVhbGxvY2F0b3IoKQorfQorICAg
IAorc3RhdGljIENGQWxsb2NhdG9yUmVmIGNyZWF0ZVNoYXJlYWJsZVJlc291cmNlRGVhbGxvY2F0
b3IoU2hhcmVhYmxlUmVzb3VyY2UqIHJlc291cmNlKQoreworICAgIHJlc291cmNlLT5yZWYoKTsg
Ly8gQmFsYW5jZWQgYnkgZGVyZWYgaW4gc2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRlKCkKKwor
ICAgIENGQWxsb2NhdG9yQ29udGV4dCBjb250ZXh0ID0geyAwLAorICAgICAgICByZXNvdXJjZSwK
KyAgICAgICAgTlVMTCwgLy8gcmV0YWluCisgICAgICAgIE5VTEwsIC8vIHJlbGVhc2UKKyAgICAg
ICAgTlVMTCwgLy8gY29weURlc2NyaXB0aW9uCisgICAgICAgIE5VTEwsIC8vIGFsbG9jYXRlCisg
ICAgICAgIE5VTEwsIC8vIHJlYWxsb2NhdGUKKyAgICAgICAgc2hhcmVhYmxlUmVzb3VyY2VEZWFs
bG9jYXRlLAorICAgICAgICBOVUxMLCAvLyBwcmVmZXJyZWRTaXplCisgICAgfTsKKworICAgIHJl
dHVybiBDRkFsbG9jYXRvckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAmY29udGV4dCk7Cit9
CisKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlOjp0
cnlXcmFwSW5TaGFyZWRCdWZmZXIoKSBjb25zdAoreworICAgIFJlZlB0cjxTaGFyZWFibGVSZXNv
dXJjZT4gcmVzb3VyY2UgPSBTaGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKCp0aGlzKTsKKyAgICBp
ZiAoIXJlc291cmNlKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlY3JlYXRlIFNo
YXJlYWJsZVJlc291cmNlIGZyb20gaGFuZGxlLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBSZXRhaW5QdHI8Q0ZBbGxvY2F0b3JSZWY+IGRlYWxsb2NhdG9yKEFkb3B0Q0YsIGNy
ZWF0ZVNoYXJlYWJsZVJlc291cmNlRGVhbGxvY2F0b3IocmVzb3VyY2UuZ2V0KCkpKTsKKyAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0ZVdpdGhCeXRlc05v
Q29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4o
cmVzb3VyY2UtPmRhdGEoKSksIHN0YXRpY19jYXN0PENGSW5kZXg+KHJlc291cmNlLT5zaXplKCkp
LCBkZWFsbG9jYXRvci5nZXQoKSkpOworCisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3JhcENG
RGF0YShkYXRhLmdldCgpKTsKK30KICAgICAKIFBhc3NSZWZQdHI8U2hhcmVhYmxlUmVzb3VyY2U+
IFNoYXJlYWJsZVJlc291cmNlOjpjcmVhdGUoUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJl
ZE1lbW9yeSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBzaXplKQogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuaAppbmRleCA2ZTVjMGM5Li43NzhlOWEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuaApAQCAtMzIsNiArMzIsMTAg
QEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU2hhcmVkQnVmZmVyOworfQorCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKICAgICAKIGNsYXNzIFNoYXJlYWJsZVJlc291cmNlIDogcHVibGljIFJlZkNv
dW50ZWQ8U2hhcmVhYmxlUmVzb3VyY2U+IHsKQEAgLTQ4LDYgKzUyLDggQEAgcHVibGljOgogICAg
ICAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKICAgICAg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciYsIEhhbmRsZSYp
OwogCisgICAgICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiB0cnlXcmFwSW5T
aGFyZWRCdWZmZXIoKSBjb25zdDsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBTaGFyZWFibGVSZXNvdXJjZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcAppbmRleCAxNmVkYzU0Li45YzAxMDJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAtMzg3LDYgKzM4
NywxMCBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlKEFyZ3Vt
ZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVzbwogICAgICAgICBlbmNvZGVyIDw8IHJlc291
cmNlUmVxdWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwogICAgIH0KIAorI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCisgICAgZW5jb2RlciA8PCByZXNvdXJjZVJlcXVl
c3QuY2FjaGVQYXJ0aXRpb24oKTsKKyNlbmRpZgorCiAgICAgZW5jb2RlUGxhdGZvcm1EYXRhKGVu
Y29kZXIsIHJlc291cmNlUmVxdWVzdCk7CiB9CiAKQEAgLTQyOCw2ICs0MzIsMTMgQEAgYm9vbCBB
cmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmRlY29kZShBcmd1bWVudERlY29kZXImIGRl
Y29kZXIsIFJlc291cmNlUmUKICAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gcmVxdWVzdDsKICAg
ICB9CiAKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgIFN0cmluZyBjYWNoZVBh
cnRpdGlvbjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNhY2hlUGFydGl0aW9uKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJlc291cmNlUmVxdWVzdC5zZXRDYWNoZVBhcnRpdGlvbihj
YWNoZVBhcnRpdGlvbik7CisjZW5kaWYKKwogICAgIHJldHVybiBkZWNvZGVQbGF0Zm9ybURhdGEo
ZGVjb2RlciwgcmVzb3VyY2VSZXF1ZXN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNw
cAppbmRleCAxODM0NGMxLi4xMGI5MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIldlYlJlc291cmNlQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2Fk
ZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlQnVmZmVyLmg+CiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNT
KQpAQCAtNjAsNyArNjEsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVj
ZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbgogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgZGlkUmVjZWl2ZU5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAK
IHZvaWQgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoQ29y
ZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImIGRl
Y29kZXIsIE93blB0cjxDb3JlSVBDOjpNZXNzYWdlRW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKQEAg
LTg1LDYgKzg2LDIxIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZl
SW52YWxpZE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvCiB7CiB9CiAKK3ZvaWQgTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpkaWRDYWNoZVJlc291cmNlKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYgaGFuZGxlKQor
eworICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IG1lbW9yeUNhY2hlKCktPnJlc291cmNl
Rm9yUmVxdWVzdChyZXF1ZXN0KTsKKyAgICBpZiAoIXJlc291cmNlKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gaGFuZGxlLnRyeVdyYXBJ
blNoYXJlZEJ1ZmZlcigpOworICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgIExPR19FUlJPUigi
VW5hYmxlZCB0byBjcmVhdGUgU2hhcmVkQnVmZmVyIGZyb20gU2hhcmVhYmxlUmVzb3VyY2UgaGFu
ZGxlIGZvciByZXNvdXJjZSB1cmwgJXMiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVzb3VyY2UtPnRyeVJlcGxh
Y2VFbmNvZGVkRGF0YShidWZmZXIucmVsZWFzZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbi5oCmluZGV4IGQ0NDkwYTAuLjBjZGM3M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgK
QEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uX2gKIAog
I2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKQEAgLTU2LDE1ICs1NywyMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgQ29yZUlQQzo6Q29u
bmVjdGlvbiogY29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsg
fQogCisgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZShD
b3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKKwogcHJpdmF0
ZToKICAgICBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRl
bnRpZmllcik7CiAKICAgICAvLyBDb3JlSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6
Ok1lc3NhZ2VEZWNvZGVyJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImLCBPd25QdHI8
Q29yZUlQQzo6TWVzc2FnZUVuY29kZXI+Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKENv
cmVJUEM6OkNvbm5lY3Rpb24qKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2Uo
Q29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0
aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImLCBPd25QdHI8Q29yZUlQQzo6TWVzc2FnZUVu
Y29kZXI+JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKENvcmVJUEM6OkNv
bm5lY3Rpb24qKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRN
ZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVz
c2FnZVJlY2VpdmVyTmFtZSwgQ29yZUlQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBP
VkVSUklERTsKIAorICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCisgICAgdm9pZCBkaWRDYWNoZVJl
c291cmNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFNoYXJlYWJsZVJl
c291cmNlOjpIYW5kbGUmKTsKKwogICAgIC8vIFRoZSBjb25uZWN0aW9uIGZyb20gdGhlIHdlYiBw
cm9jZXNzIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3MuCiAgICAgUmVmUHRyPENvcmVJUEM6OkNvbm5l
Y3Rpb24+IG1fY29ubmVjdGlvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5t
ZXNzYWdlcy5pbgppbmRleCBmMTc3MzgzLi41NmNiZjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KQEAgLTI0LDYgKzI0LDggQEAKIAogbWVzc2FnZXMgLT4g
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uIExlZ2FjeVJlY2VpdmVyIHsKIAorICAgIERpZENhY2hl
UmVzb3VyY2UoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QsIFdlYktpdDo6U2hhcmVh
YmxlUmVzb3VyY2U6OkhhbmRsZSByZXNvdXJjZSkKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKE5F
VFdPUktfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0
d29yay9XZWJSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05l
dHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IGVlYzJhMTAuLjk0ZTZlOTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNl
TG9hZGVyLmNwcApAQCAtMTA3LDQ3ICsxMDcsMjAgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRlcjo6
ZGlkRmFpbFJlc291cmNlTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICBtX2Nv
cmVMb2FkZXItPmRpZEZhaWwoZXJyb3IpOwogfQogCi1zdGF0aWMgdm9pZCBzaGFyZWFibGVSZXNv
dXJjZURlYWxsb2NhdGUodm9pZCAqcHRyLCB2b2lkICppbmZvKQotewotICAgIFNoYXJlYWJsZVJl
c291cmNlKiByZXNvdXJjZSA9IHN0YXRpY19jYXN0PFNoYXJlYWJsZVJlc291cmNlKj4oaW5mbyk7
Ci0gICAgcmVzb3VyY2UtPmRlcmVmKCk7Ci19Ci0gICAgCi1zdGF0aWMgQ0ZBbGxvY2F0b3JSZWYg
Y3JlYXRlU2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRvcihQYXNzUmVmUHRyPFNoYXJlYWJsZVJl
c291cmNlPiByZXNvdXJjZSkKLXsKLSAgICBDRkFsbG9jYXRvckNvbnRleHQgY29udGV4dCA9IHsg
MCwKLSAgICAgICAgcmVzb3VyY2UubGVha1JlZigpLAotICAgICAgICBOVUxMLCAvLyByZXRhaW4K
LSAgICAgICAgTlVMTCwgLy8gcmVsZWFzZQotICAgICAgICBOVUxMLCAvLyBjb3B5RGVzY3JpcHRp
b24KLSAgICAgICAgTlVMTCwgLy8gYWxsb2NhdGUKLSAgICAgICAgTlVMTCwgLy8gcmVhbGxvY2F0
ZQotICAgICAgICBzaGFyZWFibGVSZXNvdXJjZURlYWxsb2NhdGUsCi0gICAgICAgIE5VTEwsCi0g
ICAgfTsKLQotICAgIHJldHVybiBDRkFsbG9jYXRvckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAmY29udGV4dCk7Ci19Ci0KIHZvaWQgV2ViUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNv
dXJjZShjb25zdCBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlJiBoYW5kbGUsIGRvdWJsZSBmaW5p
c2hUaW1lKQogewogICAgIExPRyhOZXR3b3JrLCAiKFdlYlByb2Nlc3MpIFdlYlJlc291cmNlTG9h
ZGVyOjpkaWRSZWNlaXZlUmVzb3VyY2UgZm9yICclcyciLCBtX2NvcmVMb2FkZXItPnVybCgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgUmVmUHRyPFNoYXJlYWJsZVJlc291cmNlPiBy
ZXNvdXJjZSA9IFNoYXJlYWJsZVJlc291cmNlOjpjcmVhdGUoaGFuZGxlKTsKLSAgICBpZiAoIXJl
c291cmNlKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlZCB0byByZWNyZWF0ZSB0aGUgU2hh
cmVhYmxlUmVzb3VyY2Ugc2VudCBmcm9tIHRoZSBuZXR3b3JrIHByb2Nlc3MuIik7CisgICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gaGFuZGxlLnRyeVdyYXBJblNoYXJlZEJ1ZmZlcigp
OworICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0
ZSBidWZmZXIgZnJvbSBTaGFyZWFibGVSZXNvdXJjZSBzZW50IGZyb20gdGhlIG5ldHdvcmsgcHJv
Y2Vzcy4iKTsKICAgICAgICAgbV9jb3JlTG9hZGVyLT5kaWRGYWlsKGludGVybmFsRXJyb3IobV9j
b3JlTG9hZGVyLT5yZXF1ZXN0KCkudXJsKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vIE9ubHkgc2VuZCBkYXRhIHRvIHRoZSBkaWRSZWNlaXZlRGF0YSBjYWxsYmFjayBpZiBp
dCBleGlzdHMuCi0gICAgaWYgKHJlc291cmNlLT5zaXplKCkpIHsKLSAgICAgICAgUmV0YWluUHRy
PENGQWxsb2NhdG9yUmVmPiBkZWFsbG9jYXRvcihBZG9wdENGLCBjcmVhdGVTaGFyZWFibGVSZXNv
dXJjZURlYWxsb2NhdG9yKHJlc291cmNlKSk7Ci0gICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+
IGRhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KGtDRkFsbG9jYXRvckRl
ZmF1bHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihyZXNvdXJjZS0+ZGF0YSgpKSwg
c3RhdGljX2Nhc3Q8Q0ZJbmRleD4ocmVzb3VyY2UtPnNpemUoKSksIGRlYWxsb2NhdG9yLmdldCgp
KSk7Ci0KLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVy
Ojp3cmFwQ0ZEYXRhKGRhdGEuZ2V0KCkpOworICAgIGlmIChidWZmZXItPnNpemUoKSkKICAgICAg
ICAgbV9jb3JlTG9hZGVyLT5kaWRSZWNlaXZlQnVmZmVyKGJ1ZmZlci5nZXQoKSwgYnVmZmVyLT5z
aXplKCksIERhdGFQYXlsb2FkV2hvbGVSZXNvdXJjZSk7Ci0gICAgfQogCiAgICAgbV9jb3JlTG9h
ZGVyLT5kaWRGaW5pc2hMb2FkaW5nKGZpbmlzaFRpbWUpOwogfQo=
</data>
<flag name="review"
          id="216094"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194367</attachid>
            <date>2013-03-21 15:44:20 -0700</date>
            <delta_ts>2013-03-21 15:44:20 -0700</delta_ts>
            <desc>Updated patch for EWS run</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>32816</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiYWY2ZmI0Li4yZDNiOGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTMtMDMtMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIElmIGEgcHJldmlvdXNseSBsb2FkZWQgcmVzb3VyY2UgaXMgbGF0ZXIgc3RvcmVkIHRvIHRo
ZSBkaXNrIGNhY2hlZCwgcmVwbGFjZSB0aGUgYnVmZmVyIHdpdGggTU1BUCdlZCBtZW1vcnkuCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQxNDE1ND4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTI5NDMKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBH
YXJlbi4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE5vIGNoYW5nZSBpbiBiZWhhdmlvci4pCisK
KyAgICAgICAgR2l2ZSBTaGFyZWRCdWZmZXIgdGhlIGFiaWxpdHkgdG8gcmVwbGFjZSBpdHMgY29u
dGVudHMgZnJvbSBhbm90aGVyIFNoYXJlZEJ1ZmZlcjoKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OiB0cnlSZXBsYWNlQ29udGVudHNXaXRoUGxh
dGZvcm1CdWZmZXIpOgorCisgICAgICAgIEZvcndhcmQgYWxvbmcgU2hhcmVkQnVmZmVyJ3MgbmV3
IGFiaWxpdHkgdG8gUmVzb3VyY2VCdWZmZXI6CisgICAgICAgICogbG9hZGVyL21hYy9SZXNvdXJj
ZUJ1ZmZlci5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlQnVmZmVyOjogdHJ5UmVwbGFj
ZVNoYXJlZEJ1ZmZlckNvbnRlbnRzKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VCdWZmZXIu
aDoKKworICAgICAgICBHaXZlIENhY2hlZFJlc291cmNlIHRoZSBhYmlsaXR5IHRvIHJlcGxhY2Ug
aXRzIGVuY29kZWQgZGF0YSBidWZmZXIgaWYgYXBwcm9wcmlhdGU6CisgICAgICAgICogbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291
cmNlOjogdHJ5UmVwbGFjZUVuY29kZWREYXRhKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuaDoKKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorCiAyMDEzLTAzLTIx
ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERC
OiBFbnN1cmUgYWxsIEFQSSBtZXRob2RzIGhhdmUgSURCX1RSQUNFIG1hY3JvcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgppbmRleCBkNTRkODEwLi42N2MwMTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAt
MTcwLDYgKzE3MCw3IEBAIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxM2dldFN0YXRpc3RpY3NF
dgogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTEzc2V0Q2FwYWNpdGllc0VqamoKIF9fWk43V2Vi
Q29yZTExTWVtb3J5Q2FjaGUxNGV2aWN0UmVzb3VyY2VzRXYKIF9fWk43V2ViQ29yZTExTWVtb3J5
Q2FjaGUxNHJlc291cmNlRm9yVVJMRVJLTlNfNEtVUkxFCitfX1pON1dlYkNvcmUxMU1lbW9yeUNh
Y2hlMThyZXNvdXJjZUZvclJlcXVlc3RFUktOU18xNVJlc291cmNlUmVxdWVzdEUKIF9fWk43V2Vi
Q29yZTExTWVtb3J5Q2FjaGUxOWdldE9yaWdpbnNXaXRoQ2FjaGVFUk4zV1RGN0hhc2hTZXRJTlMx
XzZSZWZQdHJJTlNfMTRTZWN1cml0eU9yaWdpbkVFRU5TXzE4U2VjdXJpdHlPcmlnaW5IYXNoRU5T
MV8xMEhhc2hUcmFpdHNJUzVfRUVFRQogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTI1cmVtb3Zl
UmVzb3VyY2VzV2l0aE9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKIF9fWk43V2ViQ29yZTEx
VVJMV2l0aERhdGFFUDZOU0RhdGFQNU5TVVJMCkBAIC0yNzMsNiArMjc0LDcgQEAgX19aTjdXZWJD
b3JlMTN0b0hUTUxFbGVtZW50RVBOU18yMUZvcm1Bc3NvY2lhdGVkRWxlbWVudEUKIF9fWk43V2Vi
Q29yZTEzdG9KU0RPTVdpbmRvd0VOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMTRDYWNoZWRS
ZXNvdXJjZTEycmVtb3ZlQ2xpZW50RVBOU18yMENhY2hlZFJlc291cmNlQ2xpZW50RQogX19aTjdX
ZWJDb3JlMTRDYWNoZWRSZXNvdXJjZTE2dW5yZWdpc3RlckhhbmRsZUVQTlNfMjRDYWNoZWRSZXNv
dXJjZUhhbmRsZUJhc2VFCitfX1pON1dlYkNvcmUxNENhY2hlZFJlc291cmNlMjF0cnlSZXBsYWNl
RW5jb2RlZERhdGFFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTJTaGFyZWRCdWZmZXJFRUUKIF9fWk43
V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2U5YWRkQ2xpZW50RVBOU18yMENhY2hlZFJlc291cmNlQ2xp
ZW50RQogX19aTjdXZWJDb3JlMTRDbGllbnRSZWN0TGlzdEMxRVJLTjNXVEY2VmVjdG9ySU5TXzlG
bG9hdFF1YWRFTG0wRUVFCiBfX1pON1dlYkNvcmUxNENsaWVudFJlY3RMaXN0QzFFdgpAQCAtMTU5
Nyw2ICsxNTk5LDcgQEAgX2hhc0Nhc2VJbnNlbnNpdGl2ZVN1ZmZpeAogX3N0cmluZ0lzQ2FzZUlu
c2Vuc2l0aXZlRXF1YWxUb1N0cmluZwogX3N1Z2dlc3RlZEZpbGVuYW1lV2l0aE1JTUVUeXBlCiAj
aWYgRU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKK19fWk43V2ViQ29yZTE1UmVzb3VyY2VSZXF1
ZXN0MTNwYXJ0aXRpb25OYW1lRVJLTjNXVEY2U3RyaW5nRQogX3drQ2FjaGVQYXJ0aXRpb25LZXkK
ICNlbmRpZgogX3drQ0dDb250ZXh0R2V0U2hvdWxkU21vb3RoRm9udHMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlQnVmZmVyLmgKaW5kZXggMTAwMzY2Yy4uMjY5MTA3OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlQnVmZmVyLmgKQEAgLTY0LDYgKzY0LDkgQEAgcHVibGljOgogICAg
IHVuc2lnbmVkIGdldFNvbWVEYXRhKGNvbnN0IGNoYXIqJiBkYXRhLCB1bnNpZ25lZCBwb3NpdGlv
biA9IDApIGNvbnN0OwogICAgIAogICAgIFNoYXJlZEJ1ZmZlciogc2hhcmVkQnVmZmVyKCkgY29u
c3Q7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgdHJ5UmVwbGFjZVNoYXJlZEJ1ZmZlckNv
bnRlbnRzKFNoYXJlZEJ1ZmZlciopOworI2VuZGlmCiAgICAgUGFzc1JlZlB0cjxSZXNvdXJjZUJ1
ZmZlcj4gY29weSgpIGNvbnN0OwogCiAgICAgYm9vbCBoYXNQdXJnZWFibGVCdWZmZXIoKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCmlu
ZGV4IGNhMmU4ZTMuLmRkNjc3MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlLmNwcApAQCAtOTY5LDQgKzk2OSwxOSBAQCB2b2lkIENhY2hlZFJlc291
cmNlOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZv
KSBjb25zdAogICAgICAgICBpbmZvLmFkZFJhd0J1ZmZlcihtX3B1cmdlYWJsZURhdGEuZ2V0KCks
IG1fcHVyZ2VhYmxlRGF0YS0+c2l6ZSgpLCAiUHVyZ2VhYmxlRGF0YSIsICJwdXJnZWFibGVEYXRh
Iik7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIENhY2hlZFJlc291cmNlOjp0cnlSZXBs
YWNlRW5jb2RlZERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IG5ld0J1ZmZlcikKK3sKKyAg
ICBpZiAoIW1fZGF0YSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEJlY2F1c2UgdGhl
IGRpc2sgY2FjaGUgaXMgYXN5bmNocm9ub3VzIGFuZCByYWNleSB3aXRoIHJlZ2FyZHMgdG8gdGhl
IGRhdGEgd2UgbWlnaHQgYmUgYXNrZWQgdG8gcmVwbGFjZSwKKyAgICAvLyB3ZSBuZWVkIHRvIHZl
cmlmeSB0aGF0IHRoZSBuZXcgYnVmZmVyIGhhcyB0aGUgc2FtZSBjb250ZW50cyBhcyBvdXIgb2xk
IGJ1ZmZlci4KKyAgICBpZiAobV9kYXRhLT5zaXplKCkgIT0gbmV3QnVmZmVyLT5zaXplKCkgfHwg
bWVtY21wKG1fZGF0YS0+ZGF0YSgpLCBuZXdCdWZmZXItPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnRyeVJlcGxhY2VTaGFyZWRCdWZmZXJD
b250ZW50cyhuZXdCdWZmZXIuZ2V0KCkpOworfQorI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgKaW5kZXggMjdiMDhkYi4uMTgwODdhNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgKQEAgLTUw
LDYgKzUwLDcgQEAgY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CiBjbGFzcyBQdXJnZWFibGVCdWZm
ZXI7CiBjbGFzcyBSZXNvdXJjZUJ1ZmZlcjsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOworY2xhc3Mg
U2hhcmVkQnVmZmVyOwogY2xhc3MgU3VicmVzb3VyY2VMb2FkZXI7CiAKIC8vIEEgcmVzb3VyY2Ug
dGhhdCBpcyBoZWxkIGluIHRoZSBjYWNoZS4gQ2xhc3NlcyB3aG8gd2FudCB0byB1c2UgdGhpcyBv
YmplY3Qgc2hvdWxkIGRlcml2ZQpAQCAtMjYzLDYgKzI2NCwxMCBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIGJvb2wgY2FuUmV1c2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgdHJ5UmVwbGFjZUVuY29k
ZWREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPik7CisjZW5kaWYKKwogcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgdm9pZCBjaGVja05vdGlmeSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvbWFjL1Jlc291cmNlQnVmZmVyLm1tIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L21hYy9SZXNvdXJjZUJ1ZmZlci5tbQppbmRleCA2NzU2MTNmLi4xM2UwY2IwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvbWFjL1Jlc291cmNlQnVmZmVyLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9tYWMvUmVzb3VyY2VCdWZmZXIubW0KQEAgLTMzLDQgKzMzLDEyIEBA
IE5TRGF0YSogUmVzb3VyY2VCdWZmZXI6OmNyZWF0ZU5TRGF0YSgpCiAgICAgcmV0dXJuIG1fc2hh
cmVkQnVmZmVyLT5jcmVhdGVOU0RhdGEoKTsKIH0KIAordm9pZCBSZXNvdXJjZUJ1ZmZlcjo6dHJ5
UmVwbGFjZVNoYXJlZEJ1ZmZlckNvbnRlbnRzKFNoYXJlZEJ1ZmZlciogbmV3Q29udGVudHMpCit7
CisgICAgaWYgKCFtX3NoYXJlZEJ1ZmZlcikKKyAgICAgICAgbV9zaGFyZWRCdWZmZXIgPSBuZXdD
b250ZW50czsKKyAgICBlbHNlCisgICAgICAgIG1fc2hhcmVkQnVmZmVyLT50cnlSZXBsYWNlQ29u
dGVudHNXaXRoUGxhdGZvcm1CdWZmZXIobmV3Q29udGVudHMpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZm
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IDMyZTcx
YWYuLmYyNGFjMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC0x
MTgsNiArMTE4LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBjcmVhdGVQdXJnZWFibGVCdWZmZXIo
KSBjb25zdDsKIAorICAgIHZvaWQgdHJ5UmVwbGFjZUNvbnRlbnRzV2l0aFBsYXRmb3JtQnVmZmVy
KFNoYXJlZEJ1ZmZlciopOworCiBwcml2YXRlOgogICAgIFNoYXJlZEJ1ZmZlcigpOwogICAgIGV4
cGxpY2l0IFNoYXJlZEJ1ZmZlcihzaXplX3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2YvU2hhcmVkQnVmZmVyQ0YuY3BwCmluZGV4IGQ1ODdlNzUuLmJjNWRmNTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAKQEAgLTkzLDYgKzkzLDE1
IEBAIHZvaWQgU2hhcmVkQnVmZmVyOjpjbGVhclBsYXRmb3JtRGF0YSgpCiAgICAgbV9jZkRhdGEg
PSAwOwogfQogCit2b2lkIFNoYXJlZEJ1ZmZlcjo6dHJ5UmVwbGFjZUNvbnRlbnRzV2l0aFBsYXRm
b3JtQnVmZmVyKFNoYXJlZEJ1ZmZlciogbmV3Q29udGVudHMpCit7CisgICAgaWYgKCFuZXdDb250
ZW50cy0+bV9jZkRhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIGNsZWFyKCk7CisgICAgbV9j
ZkRhdGEgPSBuZXdDb250ZW50cy0+bV9jZkRhdGE7Cit9CisKICNpZiBVU0UoTkVUV09SS19DRkRB
VEFfQVJSQVlfQ0FMTEJBQ0spCiB2b2lkIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKENGRGF0YVJlZiBk
YXRhKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCmluZGV4IDc5OTViOTkuLjEwZTJkYzI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTAgQEAKKzIwMTMtMDMtMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29t
PgorCisgICAgICAgIElmIGEgcHJldmlvdXNseSBsb2FkZWQgcmVzb3VyY2UgaXMgbGF0ZXIgc3Rv
cmVkIHRvIHRoZSBkaXNrIGNhY2hlZCwgcmVwbGFjZSB0aGUgYnVmZmVyIHdpdGggTU1BUCdlZCBt
ZW1vcnkuCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzQxNDE1ND4gYW5kIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTI5NDMKKworICAgICAgICBSZXZpZXdlZCBi
eSBHZW9mZiBHYXJlbi4KKworICAgICAgICBBZGQgYSB0aW1lciB0aGF0IHdpbGwgdHJ5IHRvIGxv
b2sgdXAgdGhlIGRpc2sgY2FjaGVkIGJ1ZmZlciBmb3IgdGhlIHJlc291cmNlIGEgZmV3IHNlY29u
ZHMgYWZ0ZXIgdGhlIGxvYWQKKyAgICAgICAgY29tcGxldGVzIGFuZCAtIGlmIHRoZSByZXNvdXJj
ZSBpcyBkaXNrIGJhY2tlZCAtIHNlbmQgaXQgdG8gdGhlIFdlYlByb2Nlc3MgZm9yIHNoYXJpbmc6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpc2tDYWNoZVRp
bWVyRmlyZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJl
Y2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRlci5oOgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNv
dXJjZUxvYWRlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVy
Ojp0cnlHZXRTaGFyZWFibGVIYW5kbGVGb3JSZXNvdXJjZSk6CisKKyAgICAgICAgUmVmYWN0b3Ig
U2hhcmVkTWVtb3J5IHRvIHJlbW92ZSB0aGUgdW5uZWNlc3Nhcnkgdm1fY29weSBhbmQgb25seSB2
bV9hbGxvY2F0ZSB3aGVuIGFuIGFwcHJvcHJpYXRlIGJ1ZmZlcgorICAgICAgICBkb2Vzbid0IGFs
cmVhZHkgZXhpc3Q6CisgICAgICAgICogUGxhdGZvcm0vU2hhcmVkTWVtb3J5Lmg6CisgICAgICAg
ICogUGxhdGZvcm0vbWFjL1NoYXJlZE1lbW9yeU1hYy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNo
YXJlZE1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVh
dGVGcm9tVk1CdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6On5TaGFyZWRN
ZW1vcnkpOgorCisgICAgICAgIEdpdmUgU2hhcmVhYmxlUmVzb3VyY2UgdGhlIGFiaWxpdHkgdG8g
Y3JlYXRlIGEgQ0ZEYXRhUmVmIHRoYXQgd3JhcHMgInRoaXMiLCBhbmQgcmV0dXJuIGl0IGluIGEg
U2hhcmVkQnVmZmVyOgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OnNoYXJlYWJsZVJlc291cmNlRGVhbGxvY2F0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OmNyZWF0ZVNoYXJlYWJsZVJlc291cmNlRGVhbGxvY2F0b3IpOgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlOjp0cnlXcmFwSW5TaGFyZWRCdWZmZXIpOgor
ICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVSZXNvdXJjZS5oOgorCisgICAgICAgICogU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6IEVuY29kZS9kZWNvZGUgdGhlIGNhY2hlIHBhcnRp
dGlvbiBmb3IgUmVzb3VyY2VSZXF1ZXN0LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZENhY2hlUmVzb3VyY2UpOiBMb29rdXAgdGhlIENh
Y2hlZFJlc291cmNlIGluIHRoZSBXZWJDb3JlIG1lbW9yeSBjYWNoZQorICAgICAgICAgIGFuZCB0
cnkgdG8gcmVwbGFjZSBpdHMgZW5jb2RlZCBkYXRhIHdpdGggdGhlIHNoYXJlZCBtbWFwJ2VkIGJ1
ZmZlci4KKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbi5tZXNzYWdlcy5pbjoKKworICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNv
dXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZGVyOjpkaWRS
ZWNlaXZlUmVzb3VyY2UpOgorCiAyMDEzLTAzLTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5
QGFwcGxlLmNvbT4KIAogICAgICAgICBTdXBwb3J0IGNvbm5lY3RpbmcgdGhlIFdlYiBJbnNwZWN0
b3Igd2l0aG91dCBzaG93aW5nIGl0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggZmJlOWFlOC4uOTZjMmM3
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3MuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNz
YWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCIKICNpbmNsdWRlICJSZW1vdGVOZXR3b3Jr
aW5nQ29udGV4dC5oIgpAQCAtNDMsNiArNDQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlQnVmZmVyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwpAQCAtNTEsNiArNTMsMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVyKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQ
YXJhbWV0ZXJzJiBsb2FkUGFyYW1ldGVycywgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mq
IGNvbm5lY3Rpb24pCiAgICAgOiBTY2hlZHVsYWJsZUxvYWRlcihsb2FkUGFyYW1ldGVycywgY29u
bmVjdGlvbikKKyAgICAsIG1fYnl0ZXNSZWNlaXZlZCgwKQorI2lmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorICAgICwgbV9kaXNrQ2FjaGVUaW1lcihSdW5Mb29wOjpt
YWluKCksIHRoaXMsICZOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpc2tDYWNoZVRpbWVyRmlyZWQp
CisjZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIH0KQEAgLTE2OCw2ICsxNzQsMjEgQEAgdm9pZCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NEaWRDbG9zZSgpCiAg
ICAgY2xlYW51cCgpOwogfQogCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDkwCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlza0NhY2hlVGltZXJGaXJlZCgp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBSZWZQdHI8TmV0d29ya1Jlc291
cmNlTG9hZGVyPiBhZG9wdGVkUmVmID0gYWRvcHRSZWYodGhpcyk7IC8vIEJhbGFuY2Ugb3V0IHRo
ZSByZWYoKSB3aGVuIHNldHRpbmcgdGhlIHRpbWVyLgorCisgICAgU2hhcmVhYmxlUmVzb3VyY2U6
OkhhbmRsZSBoYW5kbGU7CisgICAgdHJ5R2V0U2hhcmVhYmxlSGFuZGxlRm9yUmVzb3VyY2UoaGFu
ZGxlKTsKKyAgICBpZiAoaGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRpZENhY2hlUmVzb3VyY2Uo
cmVxdWVzdCgpLCBoYW5kbGUpKTsKK30KKyNlbmRpZiAvLyAjaWYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDkwCisKIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjpzZW5kQWJvcnRpbmdPbkZhaWx1cmUoY29uc3QgVSYgbWVzc2FnZSkK
IHsKICAgICBib29sIHJlc3VsdCA9IHNlbmQobWVzc2FnZSk7CkBAIC0yMDMsNyArMjI0LDE3IEBA
IHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlCiAgICAgaWYgKCFzZW5kQWJvcnRpbmdPbkZhaWx1cmUo
TWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzcG9uc2VXaXRoQ2VydGlm
aWNhdGVJbmZvKHJlc3BvbnNlLCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyhyZXNwb25zZSkpKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1EaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9u
c2UpOworI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorICAgIFNo
YXJlYWJsZVJlc291cmNlOjpIYW5kbGUgaGFuZGxlOworICAgIHRyeUdldFNoYXJlYWJsZUhhbmRs
ZUZvclJlc291cmNlKGhhbmRsZSk7CisgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gU2luY2Ugd2UncmUgZGVsaXZlcmluZyB0aGlzIHJlc291cmNlIGJ5
IG91cnNlbHZlcyBhbGwgYXQgb25jZSwgd2UnbGwgYWJvcnQgdGhlIHJlc291cmNlIGhhbmRsZSBz
aW5jZSB3ZSBkb24ndCBuZWVkIGFueW1vcmUgY2FsbGJhY2tzIGZyb20gUmVzb3VyY2VIYW5kbGUu
CisgICAgYWJvcnRJblByb2dyZXNzTG9hZCgpOworICAgIAorICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzb3VyY2UoaGFuZGxlLCBjdXJyZW50VGltZSgp
KSk7CisjZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiB9
CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0
aCkKQEAgLTIxMSw2ICsyNDIsOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVj
ZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbgogICAgIC8vIEZJ
WE1FIChOZXR3b3JrUHJvY2Vzcyk6IEZvciB0aGUgbWVtb3J5IGNhY2hlIHdlJ2xsIGFsc28gbmVl
ZCB0byBjYWNoZSB0aGUgcmVzcG9uc2UgZGF0YSBoZXJlLgogICAgIC8vIFN1Y2ggYnVmZmVyaW5n
IHdpbGwgbmVlZCB0byBiZSB0aHJlYWQgc2FmZSwgYXMgdGhpcyBjYWxsYmFjayBpcyBoYXBwZW5p
bmcgb24gYSBiYWNrZ3JvdW5kIHRocmVhZC4KICAgICAKKyAgICBtX2J5dGVzUmVjZWl2ZWQgKz0g
bGVuZ3RoOworCiAgICAgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOwogICAgIHNlbmRBYm9y
dGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVEYXRh
KGRhdGFSZWZlcmVuY2UsIGVuY29kZWREYXRhTGVuZ3RoKSk7CiB9CkBAIC0yMjEsNiArMjU0LDE3
IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNl
SGFuZGxlKiwgZG91YmxlIGZpbmlzaFRpbWUpCiAgICAgLy8gU3VjaCBib29ra2VlcGluZyB3aWxs
IG5lZWQgdG8gYmUgdGhyZWFkIHNhZmUsIGFzIHRoaXMgY2FsbGJhY2sgaXMgaGFwcGVuaW5nIG9u
IGEgYmFja2dyb3VuZCB0aHJlYWQuCiAgICAgaW52YWxpZGF0ZVNhbmRib3hFeHRlbnNpb25zKCk7
CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZEZpbmlzaFJlc291cmNl
TG9hZChmaW5pc2hUaW1lKSk7CisKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwOTAKKyAgICAvLyBJZiB0aGlzIHJlc291cmNlIHdhcyBsYXJnZSBlbm91Z2ggdGhhdCBp
dCBzaG91bGQgYmUgY2FjaGVkIHRvIGRpc2sgYXMgYSBzZXBhcmF0ZSBmaWxlLAorICAgIC8vIHRo
ZW4gd2Ugc2hvdWxkIHRyeSB0byByZS1kZWxpdmVyIHRoZSByZXNvdXJjZSB0byB0aGUgV2ViUHJv
Y2VzcyBvbmNlIGl0ICppcyogc2F2ZWQgYXMgYSBzZXBhcmF0ZSBmaWxlLiAgICAKKyAgICBpZiAo
bV9ieXRlc1JlY2VpdmVkID49IGZpbGVCYWNrZWRSZXNvdXJjZU1pbmltdW1TaXplKCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IE9uY2UgYSBub3RpZmljYXRpb24gQVBJIGV4aXN0cyB0aGF0IG9ibGl2
aWF0ZXMgdGhpcyB0aW1lciwgdXNlIHRoYXQgaW5zdGVhZC4KKyAgICAgICAgcmVmKCk7IC8vIEJh
bGFuY2VkIGJ5IGFuIGFkb3B0UmVmKCkgaW4gZGlza0NhY2hlVGltZXJGaXJlZCgpLgorICAgICAg
ICBtX2Rpc2tDYWNoZVRpbWVyLnN0YXJ0T25lU2hvdCgxMCk7CisgICAgfQorI2VuZGlmIC8vIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorICAgIAogICAgIHNjaGVkdWxl
Q2xlYW51cE9uTWFpblRocmVhZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCmluZGV4IGEzZjUzYjEuLjUxZWNk
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtS
ZXNvdXJjZUxvYWRlci5oCkBAIC0zMCw4ICszMCwxMCBAQAogCiAjaW5jbHVkZSAiTWVzc2FnZVNl
bmRlci5oIgogI2luY2x1ZGUgIlNjaGVkdWxhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVh
YmxlUmVzb3VyY2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1J1bkxvb3AuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVzb3VyY2VC
dWZmZXI7CkBAIC0xMDYsOCArMTA4LDE3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4gYm9vbCBzZW5kU3luY0Fib3J0aW5nT25GYWlsdXJlKGNvbnN0IFUmIG1lc3NhZ2UsIGNv
bnN0IHR5cGVuYW1lIFU6OlJlcGx5JiByZXBseSk7CiAgICAgdm9pZCBhYm9ydEluUHJvZ3Jlc3NM
b2FkKCk7CiAKKyAgICB2b2lkIHRyeUdldFNoYXJlYWJsZUhhbmRsZUZvclJlc291cmNlKFNoYXJl
YWJsZVJlc291cmNlOjpIYW5kbGUmKTsKKwogICAgIFJlZlB0cjxSZW1vdGVOZXR3b3JraW5nQ29u
dGV4dD4gbV9uZXR3b3JraW5nQ29udGV4dDsKICAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU+IG1faGFuZGxlOworCisgICAgdWludDY0X3QgbV9ieXRlc1JlY2VpdmVkOworCisjaWYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisgICAgdm9pZCBkaXNrQ2Fj
aGVUaW1lckZpcmVkKCk7CisgICAgV2ViQ29yZTo6UnVuTG9vcDo6VGltZXI8TmV0d29ya1Jlc291
cmNlTG9hZGVyPiBtX2Rpc2tDYWNoZVRpbWVyOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9O
ZXR3b3JrUmVzb3VyY2VMb2FkZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZGVyTWFjLm1tCmluZGV4IDQ0ZTg1MDEuLmQxNTRlZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXJNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFj
L05ldHdvcmtSZXNvdXJjZUxvYWRlck1hYy5tbQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUg
IlNoYXJlYWJsZVJlc291cmNlLmgiCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVk
ZSAiV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKQEAgLTM5LDExICszOSwyMSBAQCB0eXBlZGVmIHN0cnVjdCBfQ0ZDYWNoZWRV
UkxSZXNwb25zZSogQ0ZDYWNoZWRVUkxSZXNwb25zZVJlZjsKIGV4dGVybiAiQyIgQ0ZVUkxDYWNo
ZVJlZiBDRlVSTENhY2hlQ29weVNoYXJlZFVSTENhY2hlKCk7CiBleHRlcm4gIkMiIENGQ2FjaGVk
VVJMUmVzcG9uc2VSZWYgQ0ZVUkxDYWNoZUNvcHlSZXNwb25zZUZvclJlcXVlc3QoQ0ZVUkxDYWNo
ZVJlZiwgQ0ZVUkxSZXF1ZXN0UmVmKTsKIGV4dGVybiAiQyIgQ0ZBcnJheVJlZiBDRkNhY2hlZFVS
TFJlc3BvbnNlQ29weVJlY2VpdmVyRGF0YUFycmF5KENGQ2FjaGVkVVJMUmVzcG9uc2VSZWYpOwor
CitTT0ZUX0xJTktfRlJBTUVXT1JLKENGTmV0d29yaykKK3N0YXRpYyBib29sIENGVVJMQ2FjaGVJ
c01lbU1hcHBlZERhdGEoQ0ZVUkxDYWNoZVJlZiBjYWNoZSwgQ0ZEYXRhUmVmIGRhdGEpCit7Cisg
ICAgc3RhdGljIENGQm9vbGVhblJlZiAoKnNvZnRMaW5rSXNDYWNoZU1NQVBlZERhdGEpKENGVVJM
Q2FjaGVSZWYgY2FjaGUsIENGRGF0YVJlZiBkYXRhKSA9IChDRkJvb2xlYW5SZWYgKCopKENGVVJM
Q2FjaGVSZWYgY2FjaGUsIENGRGF0YVJlZiBkYXRhKSkgZGxzeW0oQ0ZOZXR3b3JrTGlicmFyeSgp
LCAiX0NGVVJMQ2FjaGVJc1Jlc3BvbnNlRGF0YU1lbU1hcHBlZCIpOworICAgIAorICAgIGlmIChz
b2Z0TGlua0lzQ2FjaGVNTUFQZWREYXRhKQorICAgICAgICByZXR1cm4gc29mdExpbmtJc0NhY2hl
TU1BUGVkRGF0YShjYWNoZSwgZGF0YSkgPT0ga0NGQm9vbGVhblRydWU7CisgICAgcmV0dXJuIGZh
bHNlOworfQogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi12b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6cGxhdGZvcm1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYpCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6dHJ5R2V0U2hhcmVh
YmxlSGFuZGxlRm9yUmVzb3VyY2UoU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYgaGFuZGxlKQog
ewogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDkwCiAgICAgcmV0dXJu
OwpAQCAtNzMsMjQgKzgzLDE4IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpwbGF0Zm9y
bURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlCiAgICAgaWYgKENG
RGF0YUdldExlbmd0aChkYXRhKSA8IChDRkluZGV4KWZpbGVCYWNrZWRSZXNvdXJjZU1pbmltdW1T
aXplKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBz
aGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZVdpdGhWTUNvcHkoKHZvaWQqKUNGRGF0
YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSk7CisgICAgaWYgKCFDRlVS
TENhY2hlSXNNZW1NYXBwZWREYXRhKGNhY2hlLmdldCgpLCBkYXRhKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5
OjpjcmVhdGVGcm9tVk1CdWZmZXIoKHZvaWQqKUNGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0
YUdldExlbmd0aChkYXRhKSk7CiAgICAgaWYgKCFzaGFyZWRNZW1vcnkpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIFZNQ29waWVkIHNoYXJlZCBtZW1vcnkgZm9yIGNhY2hl
ZCByZXNvdXJjZS4gIFdlJ2xsIGxldCBpdCBsb2FkIG5vcm1hbGx5LiIpOworICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgVk1Db3BpZWQgc2hhcmVkIG1lbW9yeSBmb3IgY2FjaGVk
IHJlc291cmNlLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotIAorCiAgICAgc2l6ZV90IHNp
emUgPSBzaGFyZWRNZW1vcnktPnNpemUoKTsKICAgICBSZWZQdHI8U2hhcmVhYmxlUmVzb3VyY2U+
IHJlc291cmNlID0gU2hhcmVhYmxlUmVzb3VyY2U6OmNyZWF0ZShzaGFyZWRNZW1vcnkucmVsZWFz
ZSgpLCAwLCBzaXplKTsKLSAgICBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlIGhhbmRsZTsKLSAg
ICBpZiAoIXJlc291cmNlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkgewotICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBjcmVhdGUgU2hhcmVhYmxlUmVzb3VyY2UgaGFuZGxlIHRvIHNlbmQgdG8g
dGhlIFdlYlByb2Nlc3MgZm9yIHJlc291cmNlLiAgV2UnbGwgbGV0IGl0IGxvYWQgbm9ybWFsbHku
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTaW5jZSB3ZSdyZSBkZWxpdmVy
aW5nIHRoaXMgcmVzb3VyY2UgYnkgb3Vyc2VsdmVzIGFsbCBhdCBvbmNlLCB3ZSdsbCBhYm9ydCB0
aGUgcmVzb3VyY2UgaGFuZGxlIHNpbmNlIHdlIGRvbid0IG5lZWQgYW55bW9yZSBjYWxsYmFja3Mg
ZnJvbSBDRk5ldHdvcmsuCi0gICAgYWJvcnRJblByb2dyZXNzTG9hZCgpOwotICAgIAotICAgIHNl
bmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzb3VyY2UoaGFuZGxl
LCBjdXJyZW50VGltZSgpKSk7CisgICAgcmVzb3VyY2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOwog
I2VuZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDkwCiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKaW5kZXggN2U1N2Q2Ny4uNTc5N2ZhYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKKysrIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKQEAgLTg0LDcgKzg0LDcgQEAg
cHVibGljOgogCiAgICAgLy8gQ3JlYXRlIGEgc2hhcmVkIG1lbW9yeSBvYmplY3Qgd2l0aCB0aGUg
Z2l2ZW4gc2l6ZSBieSB2bV9jb3B5J2luZyB0aGUgZ2l2ZW4gYnVmZmVyLgogICAgIC8vIFdpbGwg
cmV0dXJuIDAgb24gZmFpbHVyZS4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+
IGNyZWF0ZVdpdGhWTUNvcHkodm9pZCosIHNpemVfdCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
U2hhcmVkTWVtb3J5PiBjcmVhdGVGcm9tVk1CdWZmZXIodm9pZCosIHNpemVfdCk7CiAKICNpZiBP
UyhXSU5ET1dTKQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gYWRvcHQoSEFO
RExFLCBzaXplX3QsIFByb3RlY3Rpb24pOwpAQCAtMTA5LDYgKzEwOSw4IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICB2b2lkKiBtX2RhdGE7CisgICAgYm9vbCBt
X3Nob3VsZFZNRGVhbGxvY2F0ZURhdGE7CisKICNpZiBPUyhEQVJXSU4pCiAgICAgbWFjaF9wb3J0
X3QgbV9wb3J0OwogI2VsaWYgT1MoV0lORE9XUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL21hYy9TaGFyZWRNZW1vcnlNYWMuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vbWFjL1NoYXJlZE1lbW9yeU1hYy5jcHAKaW5kZXggMWE0NzAyZS4uODkzYTQ5YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1NoYXJlZE1lbW9yeU1hYy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1NoYXJlZE1lbW9yeU1hYy5jcHAKQEAgLTky
LDM3ICs5MiwzNiBAQCBzdGF0aWMgaW5saW5lIG1hY2hfdm1fYWRkcmVzc190IHRvVk1BZGRyZXNz
KHZvaWQqIHBvaW50ZXIpCiAgICAgCiBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVt
b3J5OjpjcmVhdGUoc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIFNoYXJlZE1lbW9yeTo6Y3Jl
YXRlV2l0aFZNQ29weSgwLCBzaXplKTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNo
YXJlZE1lbW9yeTo6Y3JlYXRlV2l0aFZNQ29weSh2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKLXsK
ICAgICBBU1NFUlQoc2l6ZSk7CiAKICAgICBtYWNoX3ZtX2FkZHJlc3NfdCBhZGRyZXNzOwogICAg
IGtlcm5fcmV0dXJuX3Qga3IgPSBtYWNoX3ZtX2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksICZh
ZGRyZXNzLCByb3VuZF9wYWdlKHNpemUpLCBWTV9GTEFHU19BTllXSEVSRSk7CiAgICAgaWYgKGty
ICE9IEtFUk5fU1VDQ0VTUykgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0
ZSBtYWNoX3ZtX2FsbG9jYXRlIHNoYXJlZCBtZW1vcnkgKCV6dSBieXRlcykuICVzICgleCkiLCBz
aXplLCBtYWNoX2Vycm9yX3N0cmluZyhrciksIGtyKTsgCisgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIGFsbG9jYXRlIG1hY2hfdm1fYWxsb2NhdGUgc2hhcmVkIG1lbW9yeSAoJXp1IGJ5dGVz
KS4gJXMgKCV4KSIsIHNpemUsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSwga3IpOwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9Ci0gICAgCi0gICAgaWYgKGRhdGEpIHsKLSAgICAgICAga3IgPSBtYWNo
X3ZtX2NvcHkobWFjaF90YXNrX3NlbGYoKSwgdG9WTUFkZHJlc3MoZGF0YSksIHJvdW5kX3BhZ2Uo
c2l6ZSksIGFkZHJlc3MpOwotICAgICAgICBpZiAoa3IgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAg
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB2bV9jb3B5IGluIHRvIHNoYXJlZCBtZW1vcnkg
KCV6dSBieXRlcykuICVzICgleCkiLCBzaXplLCBtYWNoX2Vycm9yX3N0cmluZyhrciksIGtyKTsg
Ci0gICAgICAgICAgICBtYWNoX3ZtX2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgYWRkcmVz
cywgcm91bmRfcGFnZShzaXplKSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQor
CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5ID0gY3JlYXRlRnJvbVZNQnVm
ZmVyKHRvUG9pbnRlcihhZGRyZXNzKSwgc2l6ZSk7CisgICAgaWYgKCFzaGFyZWRNZW1vcnkpIHsK
KyAgICAgICAgbWFjaF92bV9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIGFkZHJlc3MsIHJv
dW5kX3BhZ2Uoc2l6ZSkpOworICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgCisgICAgc2hh
cmVkTWVtb3J5LT5tX3Nob3VsZFZNRGVhbGxvY2F0ZURhdGEgPSB0cnVlOworICAgIHJldHVybiBz
aGFyZWRNZW1vcnkucmVsZWFzZSgpOworfQogCitQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hh
cmVkTWVtb3J5OjpjcmVhdGVGcm9tVk1CdWZmZXIodm9pZCogZGF0YSwgc2l6ZV90IHNpemUpICAK
K3sKKyAgICBBU1NFUlQoc2l6ZSk7CisgICAgCiAgICAgLy8gQ3JlYXRlIGEgTWFjaCBwb3J0IHRo
YXQgcmVwcmVzZW50cyB0aGUgc2hhcmVkIG1lbW9yeS4KICAgICBtYWNoX3BvcnRfdCBwb3J0Owog
ICAgIG1lbW9yeV9vYmplY3Rfc2l6ZV90IG1lbW9yeU9iamVjdFNpemUgPSByb3VuZF9wYWdlKHNp
emUpOwotICAgIGtyID0gbWFjaF9tYWtlX21lbW9yeV9lbnRyeV82NChtYWNoX3Rhc2tfc2VsZigp
LCAmbWVtb3J5T2JqZWN0U2l6ZSwgYWRkcmVzcywgVk1fUFJPVF9ERUZBVUxULCAmcG9ydCwgTUFD
SF9QT1JUX05VTEwpOwotCisgICAga2Vybl9yZXR1cm5fdCBrciA9IG1hY2hfbWFrZV9tZW1vcnlf
ZW50cnlfNjQobWFjaF90YXNrX3NlbGYoKSwgJm1lbW9yeU9iamVjdFNpemUsIHRvVk1BZGRyZXNz
KGRhdGEpLCBWTV9QUk9UX0RFRkFVTFQgfCBWTV9QUk9UX0lTX01BU0ssICZwb3J0LCBNQUNIX1BP
UlRfTlVMTCk7CisgICAgCiAgICAgaWYgKGtyICE9IEtFUk5fU1VDQ0VTUykgewogICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgYSBtYWNoIHBvcnQgZm9yIHNoYXJlZCBtZW1vcnku
ICVzICgleCkiLCBtYWNoX2Vycm9yX3N0cmluZyhrciksIGtyKTsKLSAgICAgICAgbWFjaF92bV9k
ZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIGFkZHJlc3MsIHJvdW5kX3BhZ2Uoc2l6ZSkpOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTEzMCw3ICsxMjksOCBAQCBQYXNzUmVmUHRy
PFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGVXaXRoVk1Db3B5KHZvaWQqIGRhdGEs
IHNpemVfdCBzaXplKQogCiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KGFk
b3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkpKTsKICAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IHNp
emU7Ci0gICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSB0b1BvaW50ZXIoYWRkcmVzcyk7CisgICAg
c2hhcmVkTWVtb3J5LT5tX2RhdGEgPSBkYXRhOworICAgIHNoYXJlZE1lbW9yeS0+bV9zaG91bGRW
TURlYWxsb2NhdGVEYXRhID0gZmFsc2U7CiAgICAgc2hhcmVkTWVtb3J5LT5tX3BvcnQgPSBwb3J0
OwogCiAgICAgcmV0dXJuIHNoYXJlZE1lbW9yeS5yZWxlYXNlKCk7CkBAIC0xNjQsNiArMTY0LDcg
QEAgUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0IEhh
bmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHAKICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFy
ZWRNZW1vcnkoYWRvcHRSZWYobmV3IFNoYXJlZE1lbW9yeSkpOwogICAgIHNoYXJlZE1lbW9yeS0+
bV9zaXplID0gaGFuZGxlLm1fc2l6ZTsKICAgICBzaGFyZWRNZW1vcnktPm1fZGF0YSA9IHRvUG9p
bnRlcihtYXBwZWRBZGRyZXNzKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fc2hvdWxkVk1EZWFsbG9j
YXRlRGF0YSA9IHRydWU7CiAgICAgc2hhcmVkTWVtb3J5LT5tX3BvcnQgPSBNQUNIX1BPUlRfTlVM
TDsKIAogICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwpAQCAtMTcxLDcgKzE3Miw3
IEBAIFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShjb25zdCBI
YW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwCiAKIFNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9y
eSgpCiB7Ci0gICAgaWYgKG1fZGF0YSkgeworICAgIGlmIChtX2RhdGEgJiYgbV9zaG91bGRWTURl
YWxsb2NhdGVEYXRhKSB7CiAgICAgICAgIGtlcm5fcmV0dXJuX3Qga3IgPSBtYWNoX3ZtX2RlYWxs
b2NhdGUobWFjaF90YXNrX3NlbGYoKSwgdG9WTUFkZHJlc3MobV9kYXRhKSwgcm91bmRfcGFnZSht
X3NpemUpKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChrciwga3IgPT0gS0VSTl9TVUNDRVNTKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3Vy
Y2UuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmNwcAppbmRl
eCBmN2VmZTg4Li43ZGE3YWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hh
cmVhYmxlUmVzb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TaGFyZWFibGVS
ZXNvdXJjZS5jcHAKQEAgLTI3LDYgKzI3LDkgQEAKICNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJj
ZS5oIgogCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1No
YXJlZEJ1ZmZlci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKQEAgLTUxLDYgKzU0LDQzIEBAIGJvb2wgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRs
ZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgSGFuZGxlCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KKworc3RhdGljIHZvaWQgc2hh
cmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRlKHZvaWQgKnB0ciwgdm9pZCAqaW5mbykKK3sKKyAgICAo
c3RhdGljX2Nhc3Q8U2hhcmVhYmxlUmVzb3VyY2UqPihpbmZvKSktPmRlcmVmKCk7IC8vIEJhbGFu
Y2VkIGJ5IHJlZigpIGluIGNyZWF0ZVNoYXJlYWJsZVJlc291cmNlRGVhbGxvY2F0b3IoKQorfQor
ICAgIAorc3RhdGljIENGQWxsb2NhdG9yUmVmIGNyZWF0ZVNoYXJlYWJsZVJlc291cmNlRGVhbGxv
Y2F0b3IoU2hhcmVhYmxlUmVzb3VyY2UqIHJlc291cmNlKQoreworICAgIHJlc291cmNlLT5yZWYo
KTsgLy8gQmFsYW5jZWQgYnkgZGVyZWYgaW4gc2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRlKCkK
KworICAgIENGQWxsb2NhdG9yQ29udGV4dCBjb250ZXh0ID0geyAwLAorICAgICAgICByZXNvdXJj
ZSwKKyAgICAgICAgTlVMTCwgLy8gcmV0YWluCisgICAgICAgIE5VTEwsIC8vIHJlbGVhc2UKKyAg
ICAgICAgTlVMTCwgLy8gY29weURlc2NyaXB0aW9uCisgICAgICAgIE5VTEwsIC8vIGFsbG9jYXRl
CisgICAgICAgIE5VTEwsIC8vIHJlYWxsb2NhdGUKKyAgICAgICAgc2hhcmVhYmxlUmVzb3VyY2VE
ZWFsbG9jYXRlLAorICAgICAgICBOVUxMLCAvLyBwcmVmZXJyZWRTaXplCisgICAgfTsKKworICAg
IHJldHVybiBDRkFsbG9jYXRvckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAmY29udGV4dCk7
Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxl
Ojp0cnlXcmFwSW5TaGFyZWRCdWZmZXIoKSBjb25zdAoreworICAgIFJlZlB0cjxTaGFyZWFibGVS
ZXNvdXJjZT4gcmVzb3VyY2UgPSBTaGFyZWFibGVSZXNvdXJjZTo6Y3JlYXRlKCp0aGlzKTsKKyAg
ICBpZiAoIXJlc291cmNlKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlY3JlYXRl
IFNoYXJlYWJsZVJlc291cmNlIGZyb20gaGFuZGxlLiIpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBSZXRhaW5QdHI8Q0ZBbGxvY2F0b3JSZWY+IGRlYWxsb2NhdG9yKEFkb3B0Q0Ys
IGNyZWF0ZVNoYXJlYWJsZVJlc291cmNlRGVhbGxvY2F0b3IocmVzb3VyY2UuZ2V0KCkpKTsKKyAg
ICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0ZVdpdGhCeXRl
c05vQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4
Kj4ocmVzb3VyY2UtPmRhdGEoKSksIHN0YXRpY19jYXN0PENGSW5kZXg+KHJlc291cmNlLT5zaXpl
KCkpLCBkZWFsbG9jYXRvci5nZXQoKSkpOworCisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6d3Jh
cENGRGF0YShkYXRhLmdldCgpKTsKK30KICAgICAKIFBhc3NSZWZQdHI8U2hhcmVhYmxlUmVzb3Vy
Y2U+IFNoYXJlYWJsZVJlc291cmNlOjpjcmVhdGUoUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IHNo
YXJlZE1lbW9yeSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBzaXplKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1NoYXJlYWJsZVJlc291cmNlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuaAppbmRleCA2ZTVjMGM5Li43NzhlOWEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2hhcmVhYmxlUmVzb3VyY2UuaApAQCAtMzIsNiArMzIs
MTAgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU2hhcmVkQnVmZmVyOworfQorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKICAgICAKIGNsYXNzIFNoYXJlYWJsZVJlc291cmNlIDogcHVibGljIFJl
ZkNvdW50ZWQ8U2hhcmVhYmxlUmVzb3VyY2U+IHsKQEAgLTQ4LDYgKzUyLDggQEAgcHVibGljOgog
ICAgICAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKICAg
ICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciYsIEhhbmRs
ZSYpOwogCisgICAgICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiB0cnlXcmFw
SW5TaGFyZWRCdWZmZXIoKSBjb25zdDsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBTaGFyZWFibGVSZXNvdXJjZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcAppbmRleCAxNmVkYzU0Li45YzAxMDJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAtMzg3LDYg
KzM4NywxMCBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6ZW5jb2RlKEFy
Z3VtZW50RW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVzbwogICAgICAgICBlbmNvZGVyIDw8IHJl
c291cmNlUmVxdWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwogICAgIH0KIAor
I2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCisgICAgZW5jb2RlciA8PCByZXNvdXJjZVJl
cXVlc3QuY2FjaGVQYXJ0aXRpb24oKTsKKyNlbmRpZgorCiAgICAgZW5jb2RlUGxhdGZvcm1EYXRh
KGVuY29kZXIsIHJlc291cmNlUmVxdWVzdCk7CiB9CiAKQEAgLTQyOCw2ICs0MzIsMTMgQEAgYm9v
bCBBcmd1bWVudENvZGVyPFJlc291cmNlUmVxdWVzdD46OmRlY29kZShBcmd1bWVudERlY29kZXIm
IGRlY29kZXIsIFJlc291cmNlUmUKICAgICAgICAgcmVzb3VyY2VSZXF1ZXN0ID0gcmVxdWVzdDsK
ICAgICB9CiAKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgIFN0cmluZyBjYWNo
ZVBhcnRpdGlvbjsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNhY2hlUGFydGl0aW9uKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc291cmNlUmVxdWVzdC5zZXRDYWNoZVBhcnRpdGlv
bihjYWNoZVBhcnRpdGlvbik7CisjZW5kaWYKKwogICAgIHJldHVybiBkZWNvZGVQbGF0Zm9ybURh
dGEoZGVjb2RlciwgcmVzb3VyY2VSZXF1ZXN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
LmNwcAppbmRleCAxODM0NGMxLi4xMGI5MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNw
cApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIldlYlJlc291cmNlQnVmZmVyLmgiCiAjaW5j
bHVkZSAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VM
b2FkZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1Jlc291cmNlQnVmZmVyLmg+CiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9D
RVNTKQpAQCAtNjAsNyArNjEsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlk
UmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgZGlkUmVjZWl2
ZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlU3luY01lc3NhZ2Uo
Q29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXIm
IGRlY29kZXIsIE93blB0cjxDb3JlSVBDOjpNZXNzYWdlRW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikK
QEAgLTg1LDYgKzg2LDIxIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNl
aXZlSW52YWxpZE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvCiB7CiB9CiAKK3ZvaWQg
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpkaWRDYWNoZVJlc291cmNlKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYgaGFuZGxl
KQoreworICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IG1lbW9yeUNhY2hlKCktPnJlc291
cmNlRm9yUmVxdWVzdChyZXF1ZXN0KTsKKyAgICBpZiAoIXJlc291cmNlKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gaGFuZGxlLnRyeVdy
YXBJblNoYXJlZEJ1ZmZlcigpOworICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgIExPR19FUlJP
UigiVW5hYmxlZCB0byBjcmVhdGUgU2hhcmVkQnVmZmVyIGZyb20gU2hhcmVhYmxlUmVzb3VyY2Ug
aGFuZGxlIGZvciByZXNvdXJjZSB1cmwgJXMiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVzb3VyY2UtPnRyeVJl
cGxhY2VFbmNvZGVkRGF0YShidWZmZXIucmVsZWFzZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbi5oCmluZGV4IGQ0NDkwYTAuLjBjZGM3M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
LmgKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uX2gK
IAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJTaGFyZWFibGVSZXNvdXJjZS5o
IgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKQEAgLTU2LDE1ICs1NywyMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgQ29yZUlQQzo6
Q29ubmVjdGlvbiogY29ubmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQo
KTsgfQogCisgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKKwogcHJp
dmF0ZToKICAgICBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oQ29yZUlQQzo6Q29ubmVjdGlvbjo6
SWRlbnRpZmllcik7CiAKICAgICAvLyBDb3JlSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJ
UEM6Ok1lc3NhZ2VEZWNvZGVyJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVTeW5jTWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImLCBPd25Q
dHI8Q29yZUlQQzo6TWVzc2FnZUVuY29kZXI+Jik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENsb3Nl
KENvcmVJUEM6OkNvbm5lY3Rpb24qKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3Nh
Z2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShDb3JlSVBDOjpDb25u
ZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImLCBPd25QdHI8Q29yZUlQQzo6TWVzc2Fn
ZUVuY29kZXI+JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKENvcmVJUEM6
OkNvbm5lY3Rpb24qKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUludmFs
aWRNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpTdHJpbmdSZWZlcmVuY2Ug
bWVzc2FnZVJlY2VpdmVyTmFtZSwgQ29yZUlQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1l
KSBPVkVSUklERTsKIAorICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCisgICAgdm9pZCBkaWRDYWNo
ZVJlc291cmNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFNoYXJlYWJs
ZVJlc291cmNlOjpIYW5kbGUmKTsKKwogICAgIC8vIFRoZSBjb25uZWN0aW9uIGZyb20gdGhlIHdl
YiBwcm9jZXNzIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3MuCiAgICAgUmVmUHRyPENvcmVJUEM6OkNv
bm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bi5tZXNzYWdlcy5pbgppbmRleCBmMTc3MzgzLi41NmNiZjcxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3Nh
Z2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KQEAgLTI0LDYgKzI0LDggQEAKIAogbWVzc2FnZXMg
LT4gTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uIExlZ2FjeVJlY2VpdmVyIHsKIAorICAgIERpZENh
Y2hlUmVzb3VyY2UoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QsIFdlYktpdDo6U2hh
cmVhYmxlUmVzb3VyY2U6OkhhbmRsZSByZXNvdXJjZSkKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxF
KE5FVFdPUktfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
TmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IGVlYzJhMTAuLjk0ZTZlOTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxv
YWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291
cmNlTG9hZGVyLmNwcApAQCAtMTA3LDQ3ICsxMDcsMjAgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRl
cjo6ZGlkRmFpbFJlc291cmNlTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICBt
X2NvcmVMb2FkZXItPmRpZEZhaWwoZXJyb3IpOwogfQogCi1zdGF0aWMgdm9pZCBzaGFyZWFibGVS
ZXNvdXJjZURlYWxsb2NhdGUodm9pZCAqcHRyLCB2b2lkICppbmZvKQotewotICAgIFNoYXJlYWJs
ZVJlc291cmNlKiByZXNvdXJjZSA9IHN0YXRpY19jYXN0PFNoYXJlYWJsZVJlc291cmNlKj4oaW5m
byk7Ci0gICAgcmVzb3VyY2UtPmRlcmVmKCk7Ci19Ci0gICAgCi1zdGF0aWMgQ0ZBbGxvY2F0b3JS
ZWYgY3JlYXRlU2hhcmVhYmxlUmVzb3VyY2VEZWFsbG9jYXRvcihQYXNzUmVmUHRyPFNoYXJlYWJs
ZVJlc291cmNlPiByZXNvdXJjZSkKLXsKLSAgICBDRkFsbG9jYXRvckNvbnRleHQgY29udGV4dCA9
IHsgMCwKLSAgICAgICAgcmVzb3VyY2UubGVha1JlZigpLAotICAgICAgICBOVUxMLCAvLyByZXRh
aW4KLSAgICAgICAgTlVMTCwgLy8gcmVsZWFzZQotICAgICAgICBOVUxMLCAvLyBjb3B5RGVzY3Jp
cHRpb24KLSAgICAgICAgTlVMTCwgLy8gYWxsb2NhdGUKLSAgICAgICAgTlVMTCwgLy8gcmVhbGxv
Y2F0ZQotICAgICAgICBzaGFyZWFibGVSZXNvdXJjZURlYWxsb2NhdGUsCi0gICAgICAgIE5VTEws
Ci0gICAgfTsKLQotICAgIHJldHVybiBDRkFsbG9jYXRvckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCAmY29udGV4dCk7Ci19Ci0KIHZvaWQgV2ViUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVS
ZXNvdXJjZShjb25zdCBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlJiBoYW5kbGUsIGRvdWJsZSBm
aW5pc2hUaW1lKQogewogICAgIExPRyhOZXR3b3JrLCAiKFdlYlByb2Nlc3MpIFdlYlJlc291cmNl
TG9hZGVyOjpkaWRSZWNlaXZlUmVzb3VyY2UgZm9yICclcyciLCBtX2NvcmVMb2FkZXItPnVybCgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgUmVmUHRyPFNoYXJlYWJsZVJlc291cmNl
PiByZXNvdXJjZSA9IFNoYXJlYWJsZVJlc291cmNlOjpjcmVhdGUoaGFuZGxlKTsKLSAgICBpZiAo
IXJlc291cmNlKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlZCB0byByZWNyZWF0ZSB0aGUg
U2hhcmVhYmxlUmVzb3VyY2Ugc2VudCBmcm9tIHRoZSBuZXR3b3JrIHByb2Nlc3MuIik7CisgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gaGFuZGxlLnRyeVdyYXBJblNoYXJlZEJ1ZmZl
cigpOworICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNy
ZWF0ZSBidWZmZXIgZnJvbSBTaGFyZWFibGVSZXNvdXJjZSBzZW50IGZyb20gdGhlIG5ldHdvcmsg
cHJvY2Vzcy4iKTsKICAgICAgICAgbV9jb3JlTG9hZGVyLT5kaWRGYWlsKGludGVybmFsRXJyb3Io
bV9jb3JlTG9hZGVyLT5yZXF1ZXN0KCkudXJsKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIC8vIE9ubHkgc2VuZCBkYXRhIHRvIHRoZSBkaWRSZWNlaXZlRGF0YSBjYWxsYmFjayBp
ZiBpdCBleGlzdHMuCi0gICAgaWYgKHJlc291cmNlLT5zaXplKCkpIHsKLSAgICAgICAgUmV0YWlu
UHRyPENGQWxsb2NhdG9yUmVmPiBkZWFsbG9jYXRvcihBZG9wdENGLCBjcmVhdGVTaGFyZWFibGVS
ZXNvdXJjZURlYWxsb2NhdG9yKHJlc291cmNlKSk7Ci0gICAgICAgIFJldGFpblB0cjxDRkRhdGFS
ZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KGtDRkFsbG9jYXRv
ckRlZmF1bHQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihyZXNvdXJjZS0+ZGF0YSgp
KSwgc3RhdGljX2Nhc3Q8Q0ZJbmRleD4ocmVzb3VyY2UtPnNpemUoKSksIGRlYWxsb2NhdG9yLmdl
dCgpKSk7Ci0KLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVm
ZmVyOjp3cmFwQ0ZEYXRhKGRhdGEuZ2V0KCkpOworICAgIGlmIChidWZmZXItPnNpemUoKSkKICAg
ICAgICAgbV9jb3JlTG9hZGVyLT5kaWRSZWNlaXZlQnVmZmVyKGJ1ZmZlci5nZXQoKSwgYnVmZmVy
LT5zaXplKCksIERhdGFQYXlsb2FkV2hvbGVSZXNvdXJjZSk7Ci0gICAgfQogCiAgICAgbV9jb3Jl
TG9hZGVyLT5kaWRGaW5pc2hMb2FkaW5nKGZpbmlzaFRpbWUpOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>