<?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>48507</bug_id>
          
          <creation_ts>2010-10-28 04:38:30 -0700</creation_ts>
          <short_desc>[GTK] Implement RunLoop, WorkQueue, Connection classes for WebKit2</short_desc>
          <delta_ts>2011-01-20 05:47:25 -0800</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>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52805</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Amruth Raj">amruthraj</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>joone</cc>
    
    <cc>kbalazs</cc>
    
    <cc>kenneth</cc>
    
    <cc>koivisto</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ravi.kasibhatla</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>300985</commentid>
    <comment_count>0</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-10-28 04:38:30 -0700</bug_when>
    <thetext>Implement RunLoop, WorkQueue and Connection classes and their corresponding Makefile changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301711</commentid>
    <comment_count>1</comment_count>
      <attachid>72321</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-10-29 06:15:37 -0700</bug_when>
    <thetext>Created attachment 72321
Implements RunLoop, WorkQueue, Connection classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301741</commentid>
    <comment_count>2</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-10-29 07:14:31 -0700</bug_when>
    <thetext>Adding myself to the CC list for this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303414</commentid>
    <comment_count>3</comment_count>
      <attachid>72680</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-11-02 09:39:58 -0700</bug_when>
    <thetext>Created attachment 72680
RunLoop WorkQueue and Connection class implementation for GTK port

Patch contains the implementation of RunLoop, WorkQueue and Connection classes for GTK port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309380</commentid>
    <comment_count>4</comment_count>
      <attachid>72680</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-15 11:51:31 -0800</bug_when>
    <thetext>Comment on attachment 72680
RunLoop WorkQueue and Connection class implementation for GTK port

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

Here&apos;s an initial review. These are mostly style issues. Someone with more experience with the WebKit2 ports might have more insightful comments about the functionality.

&gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:34
&gt; +#include &quot;ArgumentEncoder.h&quot;
&gt; +#include &quot;WorkItem.h&quot;
&gt; +
&gt; +#include &lt;errno.h&gt;
&gt; +#include &lt;stdio.h&gt;
&gt; +#include &lt;sys/fcntl.h&gt;

These includes should be together in one clump with a newline before the &quot;using&quot; declaration.

&gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:51
&gt; +    // TODO: unregister from connection queue.
&gt; +    m_connectionQueue.unregisterEventSourceHandler(m_socket);

Why isn&apos;t it possible to simply implement this now? It should probably be implemented or the comment should explain why.

&gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:81
&gt; +        Vector&lt;uint8_t&gt; buffer;
&gt; +        buffer.resize(messageSize);
&gt; +        numberOfBytesRead = read(m_socket, buffer.data(), messageSize);
&gt; +
&gt; +        size_t realBufferSize = messageSize - sizeof(MessageID);
&gt; +        unsigned messageID = *reinterpret_cast&lt;unsigned*&gt;(buffer.data() + realBufferSize);
&gt; +
&gt; +        processIncomingMessage(MessageID::fromInt(messageID), adoptPtr(new ArgumentDecoder(buffer.data(), realBufferSize)));

This seems wrong. It assumes that read(...) is returning all of the message data, which read(...) doesn&apos;t guarantee. If, for some reason, it is always the case for Unix domain sockets then there should be a comment about it, I think. Additionally numberOfBytesRead is used to store the the result of read(...), but it isn&apos;t used. It&apos;s only used for the earlier size_t read(...).

&gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:112
&gt; +    Vector&lt;uint8_t&gt; buffer;
&gt; +    buffer.append(reinterpret_cast&lt;uint8_t*&gt;(&amp;bufferSize), sizeof(size_t));
&gt; +    buffer.append(arguments-&gt;buffer(), arguments-&gt;bufferSize());

Sending these separately will avoid a memcpy, right? Perhaps we should do that.

&gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:116
&gt; +    int bytesWritten = write(m_socket, buffer.data(), buffer.size());
&gt; +    ASSERT_UNUSED(bytesWritten, bytesWritten);
&gt; +    

Shouldn&apos;t we be checking the return value here? write returns -1 on error and perhaps we should handle that somehow. Qt seems to handle all situations where bytesWritten != buffer.size() as a fatal error always. We should probably handle it somehow.

&gt; WebKit2/Platform/RunLoop.h:37
&gt; +#include &lt;glib.h&gt;

Please do no use GTK+ / GLib includes in headers. If you have to use GLib types, use forward-declarations.

&gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:78
&gt; +    g_source_set_callback(source, (GSourceFunc)&amp;RunLoop::performWork, this, NULL);

Use 0 here instead of NULL (and everywhere, except when it generates a warning).

&gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:98
&gt; +gboolean RunLoop::TimerBase::oneShotTimerFired(gpointer context)
&gt; +{
&gt; +    RunLoop::TimerBase* timerclass = static_cast&lt;RunLoop::TimerBase*&gt;(context);
&gt; +    timerclass-&gt;fired();

Traditionally we just cast the callback when it&apos;s added and use something like gboolean RunLoop::TimerBase::oneShotTimerFired(RunLoop::TimerBase* timerClass). Note the camelCase. Why is this called timerclass, when it&apos;s an instance?

&gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:107
&gt; +gboolean RunLoop::TimerBase::repeatingTimerFired(gpointer context)
&gt; +{
&gt; +    RunLoop::TimerBase* timerclass = static_cast&lt;RunLoop::TimerBase*&gt;(context);
&gt; +    timerclass-&gt;fired();
&gt; +    return TRUE;
&gt; +}

Same comments here.

&gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:116
&gt; +        g_source_set_callback(m_timerSource, (GSourceFunc)&amp;RunLoop::TimerBase::repeatingTimerFired, this, NULL);

0 instead of NULL.

&gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:119
&gt; +        g_source_set_callback(m_timerSource, (GSourceFunc)&amp;RunLoop::TimerBase::oneShotTimerFired, this, NULL);

Ditto.

&gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:135
&gt; +    return m_timerSource? true : false;

Is it possible to just do something like &quot;return m_timerSource;&quot; without generating a warning?

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:62
&gt; +void* WorkQueue::workQueueThreadBody(void *context)
&gt; +{
&gt; +    static_cast&lt;WorkQueue*&gt;(context)-&gt;workQueueThreadBody();
&gt; +    return 0;
&gt; +}

I think this might be clearer if it was void* WorkQueue::workQueueThreadBody(WorkQueue *workQueue) and you just use a reinterpret_cast cast when you add it. See comment above.

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:74
&gt; +    : m_dispatchSource(dispatchSource)
&gt; +    , m_workItem(workItem)
&gt; +    , m_workQueue(workQueue)

These should be indented.

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:82
&gt; +    static gboolean performWorkOnce(gpointer source)
&gt; +    {
&gt; +        EventSource* eventSource = static_cast&lt;EventSource*&gt;(source);

Ditto with the reinterpret_cast approach.

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:94
&gt; +    static gboolean closeConnection(GIOChannel* channel, GIOCondition condition, gpointer source)

Ditto.

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:96
&gt; +        if ((condition &amp; G_IO_HUP) || (condition &amp; G_IO_ERR)) {

Please use an early return here instead.

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:112
&gt; +    static gboolean performWork(GIOChannel* channel, GIOCondition condition, gpointer source) 
&gt; +    {
&gt; +        if (condition &amp; G_IO_IN) {
&gt; +            EventSource* eventSource = static_cast&lt;EventSource*&gt;(source);

Same two comments as above.

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:127
&gt; +    static void deleteEventSource(gpointer source) 

Ditto.

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:150
&gt; +    if (condition == G_IO_IN) {
&gt; +        g_source_set_callback(dispatchSource, (GSourceFunc)&amp; WorkQueue::EventSource::performWork, eventSource, &amp;WorkQueue::EventSource::deleteEventSource);
&gt; +    } else if (condition == (G_IO_HUP | G_IO_ERR)) {
&gt; +        g_source_set_callback(dispatchSource, (GSourceFunc)&amp;WorkQueue::EventSource::closeConnection, eventSource, &amp;WorkQueue::EventSource::deleteEventSource);
&gt; +    }

A few issues here:
1. One line bodies should not have the surrounding curly braces per WebKit style. On the other hand these lines are pretty long so maybe you should split them across multiple lines which would require the curly braces. See the WebKit style guidelines for more information: http://webkit.org/coding/coding-style.html
2. Use a reinterpret_cast instead of a C-style cast. This comment applies globally to this patch. :)
3. The spacing is weird around for the ampersand operator in the first block &quot;&amp; WorkQueue::&quot; --&gt; &quot;&amp;WorkQueue&quot;.

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:182
&gt; +        Vector&lt;EventSource*&gt; sources;
&gt; +        sources = it-&gt;second;

Couldn&apos;t this be one line?

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:186
&gt; +            EventSource* eventSource = sources[i];
&gt; +            GSource* gSource = eventSource-&gt;dispatchSource();
&gt; +            g_source_destroy(gSource);

Couldn&apos;t this be one line too?

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:198
&gt; +    g_source_set_callback(dispatchSource, (GSourceFunc)&amp;WorkQueue::EventSource::performWorkOnce, eventSource, &amp;WorkQueue::EventSource::deleteEventSource);

reinterpret_cast here.

&gt; WebKit2/Platform/PlatformProcessIdentifier.h:3
&gt; + * Portions Copyright (c) 2010 Motorola Mobility, Inc.  All rights reserved.

Typically there is a threshold of about 10 lines before adding copyright lines to a file.

&gt; WebKit2/Platform/WorkQueue.h:35
&gt; +#include &lt;glib.h&gt;

Please do not include GTK+ / GLib includes in header files. Instead use forward declarations. GTK+/GLib headers increase build times.

&gt; WebKit2/Platform/WorkQueue.h:164
&gt; +    class EventSource;

This forward declaration should be at the top of the file, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309715</commentid>
    <comment_count>5</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-11-16 07:12:59 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 72680 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72680&amp;action=review
&gt; 
&gt; Here&apos;s an initial review. These are mostly style issues. Someone with more experience with the WebKit2 ports might have more insightful comments about the functionality.
&gt; 
Adding more WebKit2 contributors.
Could you please give us your comments on this patch. Robinson has given his initial comments and we are working on the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309965</commentid>
    <comment_count>6</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-11-16 15:17:04 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 72680 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72680&amp;action=review
&gt; &gt; 
&gt; &gt; Here&apos;s an initial review. These are mostly style issues. Someone with more experience with the WebKit2 ports might have more insightful comments about the functionality.
&gt; &gt; 
&gt; Adding more WebKit2 contributors.
&gt; Could you please give us your comments on this patch. Robinson has given his initial comments and we are working on the same.

Generally looks pretty straightforward to me. I do not see any blocker
from landing it after you have fixed the problems mentioned by Robinson.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310803</commentid>
    <comment_count>7</comment_count>
      <attachid>74227</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-11-18 05:17:17 -0800</bug_when>
    <thetext>Created attachment 74227
RunLoop WorkQueue Connection class implementation

RunLoop WorkQueue Connection class implementation after addressing the comments by mrobinson.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310819</commentid>
    <comment_count>8</comment_count>
      <attachid>74230</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-11-18 06:08:32 -0800</bug_when>
    <thetext>Created attachment 74230
RunLoop WorkQueue Connection class implementation

Added a missing change with the previous patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310822</commentid>
    <comment_count>9</comment_count>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-11-18 06:17:15 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 72680 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72680&amp;action=review
&gt; 
&gt; Here&apos;s an initial review. These are mostly style issues. Someone with more experience with the WebKit2 ports might have more insightful comments about the functionality.
&gt; 
&gt; &gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:34
&gt; &gt; +#include &quot;ArgumentEncoder.h&quot;
&gt; &gt; +#include &quot;WorkItem.h&quot;
&gt; &gt; +
&gt; &gt; +#include &lt;errno.h&gt;
&gt; &gt; +#include &lt;stdio.h&gt;
&gt; &gt; +#include &lt;sys/fcntl.h&gt;
&gt; 
&gt; These includes should be together in one clump with a newline before the &quot;using&quot; declaration.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:51
&gt; &gt; +    // TODO: unregister from connection queue.
&gt; &gt; +    m_connectionQueue.unregisterEventSourceHandler(m_socket);
&gt; 
&gt; Why isn&apos;t it possible to simply implement this now? It should probably be implemented or the comment should explain why.
&gt; 
This is an incorrect TODO. This is implemented. We have removed this now.
&gt; &gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:81
&gt; &gt; +        Vector&lt;uint8_t&gt; buffer;
&gt; &gt; +        buffer.resize(messageSize);
&gt; &gt; +        numberOfBytesRead = read(m_socket, buffer.data(), messageSize);
&gt; &gt; +
&gt; &gt; +        size_t realBufferSize = messageSize - sizeof(MessageID);
&gt; &gt; +        unsigned messageID = *reinterpret_cast&lt;unsigned*&gt;(buffer.data() + realBufferSize);
&gt; &gt; +
&gt; &gt; +        processIncomingMessage(MessageID::fromInt(messageID), adoptPtr(new ArgumentDecoder(buffer.data(), realBufferSize)));
&gt; 
&gt; This seems wrong. It assumes that read(...) is returning all of the message data, which read(...) doesn&apos;t guarantee. If, for some reason, it is always the case for Unix domain sockets then there should be a comment about it, I think. Additionally numberOfBytesRead is used to store the the result of read(...), but it isn&apos;t used. It&apos;s only used for the earlier size_t read(...).
&gt; 
Thanks for pointing. Unix domain sockets do not guarantee it. We implemented functions writeBytesToSocket, readBytesFromSocket to handle these cases. We also handled the error cases.
&gt; &gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:112
&gt; &gt; +    Vector&lt;uint8_t&gt; buffer;
&gt; &gt; +    buffer.append(reinterpret_cast&lt;uint8_t*&gt;(&amp;bufferSize), sizeof(size_t));
&gt; &gt; +    buffer.append(arguments-&gt;buffer(), arguments-&gt;bufferSize());
&gt; 
&gt; Sending these separately will avoid a memcpy, right? Perhaps we should do that.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:116
&gt; &gt; +    int bytesWritten = write(m_socket, buffer.data(), buffer.size());
&gt; &gt; +    ASSERT_UNUSED(bytesWritten, bytesWritten);
&gt; &gt; +    
&gt; 
&gt; Shouldn&apos;t we be checking the return value here? write returns -1 on error and perhaps we should handle that somehow. Qt seems to handle all situations where bytesWritten != buffer.size() as a fatal error always. We should probably handle it somehow.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/RunLoop.h:37
&gt; &gt; +#include &lt;glib.h&gt;
&gt; 
&gt; Please do no use GTK+ / GLib includes in headers. If you have to use GLib types, use forward-declarations.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:78
&gt; &gt; +    g_source_set_callback(source, (GSourceFunc)&amp;RunLoop::performWork, this, NULL);
&gt; 
&gt; Use 0 here instead of NULL (and everywhere, except when it generates a warning).
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:98
&gt; &gt; +gboolean RunLoop::TimerBase::oneShotTimerFired(gpointer context)
&gt; &gt; +{
&gt; &gt; +    RunLoop::TimerBase* timerclass = static_cast&lt;RunLoop::TimerBase*&gt;(context);
&gt; &gt; +    timerclass-&gt;fired();
&gt; 
&gt; Traditionally we just cast the callback when it&apos;s added and use something like gboolean RunLoop::TimerBase::oneShotTimerFired(RunLoop::TimerBase* timerClass). Note the camelCase. Why is this called timerclass, when it&apos;s an instance?
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:107
&gt; &gt; +gboolean RunLoop::TimerBase::repeatingTimerFired(gpointer context)
&gt; &gt; +{
&gt; &gt; +    RunLoop::TimerBase* timerclass = static_cast&lt;RunLoop::TimerBase*&gt;(context);
&gt; &gt; +    timerclass-&gt;fired();
&gt; &gt; +    return TRUE;
&gt; &gt; +}
&gt; 
&gt; Same comments here.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:116
&gt; &gt; +        g_source_set_callback(m_timerSource, (GSourceFunc)&amp;RunLoop::TimerBase::repeatingTimerFired, this, NULL);
&gt; 
&gt; 0 instead of NULL.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:119
&gt; &gt; +        g_source_set_callback(m_timerSource, (GSourceFunc)&amp;RunLoop::TimerBase::oneShotTimerFired, this, NULL);
&gt; 
&gt; Ditto.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:135
&gt; &gt; +    return m_timerSource? true : false;
&gt; 
&gt; Is it possible to just do something like &quot;return m_timerSource;&quot; without generating a warning?
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:62
&gt; &gt; +void* WorkQueue::workQueueThreadBody(void *context)
&gt; &gt; +{
&gt; &gt; +    static_cast&lt;WorkQueue*&gt;(context)-&gt;workQueueThreadBody();
&gt; &gt; +    return 0;
&gt; &gt; +}
&gt; 
&gt; I think this might be clearer if it was void* WorkQueue::workQueueThreadBody(WorkQueue *workQueue) and you just use a reinterpret_cast cast when you add it. See comment above.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:74
&gt; &gt; +    : m_dispatchSource(dispatchSource)
&gt; &gt; +    , m_workItem(workItem)
&gt; &gt; +    , m_workQueue(workQueue)
&gt; 
&gt; These should be indented.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:82
&gt; &gt; +    static gboolean performWorkOnce(gpointer source)
&gt; &gt; +    {
&gt; &gt; +        EventSource* eventSource = static_cast&lt;EventSource*&gt;(source);
&gt; 
&gt; Ditto with the reinterpret_cast approach.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:94
&gt; &gt; +    static gboolean closeConnection(GIOChannel* channel, GIOCondition condition, gpointer source)
&gt; 
&gt; Ditto.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:96
&gt; &gt; +        if ((condition &amp; G_IO_HUP) || (condition &amp; G_IO_ERR)) {
&gt; 
&gt; Please use an early return here instead.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:112
&gt; &gt; +    static gboolean performWork(GIOChannel* channel, GIOCondition condition, gpointer source) 
&gt; &gt; +    {
&gt; &gt; +        if (condition &amp; G_IO_IN) {
&gt; &gt; +            EventSource* eventSource = static_cast&lt;EventSource*&gt;(source);
&gt; 
&gt; Same two comments as above.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:127
&gt; &gt; +    static void deleteEventSource(gpointer source) 
&gt; 
&gt; Ditto.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:150
&gt; &gt; +    if (condition == G_IO_IN) {
&gt; &gt; +        g_source_set_callback(dispatchSource, (GSourceFunc)&amp; WorkQueue::EventSource::performWork, eventSource, &amp;WorkQueue::EventSource::deleteEventSource);
&gt; &gt; +    } else if (condition == (G_IO_HUP | G_IO_ERR)) {
&gt; &gt; +        g_source_set_callback(dispatchSource, (GSourceFunc)&amp;WorkQueue::EventSource::closeConnection, eventSource, &amp;WorkQueue::EventSource::deleteEventSource);
&gt; &gt; +    }
&gt; 
&gt; A few issues here:
&gt; 1. One line bodies should not have the surrounding curly braces per WebKit style. On the other hand these lines are pretty long so maybe you should split them across multiple lines which would require the curly braces. See the WebKit style guidelines for more information: http://webkit.org/coding/coding-style.html
&gt; 2. Use a reinterpret_cast instead of a C-style cast. This comment applies globally to this patch. :)
&gt; 3. The spacing is weird around for the ampersand operator in the first block &quot;&amp; WorkQueue::&quot; --&gt; &quot;&amp;WorkQueue&quot;.
&gt; 
Done. Addressed all 3 points.
&gt; &gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:182
&gt; &gt; +        Vector&lt;EventSource*&gt; sources;
&gt; &gt; +        sources = it-&gt;second;
&gt; 
&gt; Couldn&apos;t this be one line?
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:186
&gt; &gt; +            EventSource* eventSource = sources[i];
&gt; &gt; +            GSource* gSource = eventSource-&gt;dispatchSource();
&gt; &gt; +            g_source_destroy(gSource);
&gt; 
&gt; Couldn&apos;t this be one line too?
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:198
&gt; &gt; +    g_source_set_callback(dispatchSource, (GSourceFunc)&amp;WorkQueue::EventSource::performWorkOnce, eventSource, &amp;WorkQueue::EventSource::deleteEventSource);
&gt; 
&gt; reinterpret_cast here.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/PlatformProcessIdentifier.h:3
&gt; &gt; + * Portions Copyright (c) 2010 Motorola Mobility, Inc.  All rights reserved.
&gt; 
&gt; Typically there is a threshold of about 10 lines before adding copyright lines to a file.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/WorkQueue.h:35
&gt; &gt; +#include &lt;glib.h&gt;
&gt; 
&gt; Please do not include GTK+ / GLib includes in header files. Instead use forward declarations. GTK+/GLib headers increase build times.
&gt; 
&gt; &gt; WebKit2/Platform/WorkQueue.h:164
&gt; &gt; +    class EventSource;
&gt; 
&gt; This forward declaration should be at the top of the file, I think.
We want EventSource forward declaration only within the WorkQueue class as we are declaring it inner class of WorkQueue. So, we followed the existing style in the file i.e. as in Mac, Win and Qt ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313996</commentid>
    <comment_count>10</comment_count>
      <attachid>74930</attachid>
    <who name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</who>
    <bug_when>2010-11-26 06:27:24 -0800</bug_when>
    <thetext>Created attachment 74930
RunLoop WorkQueue Connection class implementation without using ioctl

RunLoop WorkQueue Connection class implementation without using ioctl as per last review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314180</commentid>
    <comment_count>11</comment_count>
      <attachid>74930</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-28 04:58:12 -0800</bug_when>
    <thetext>Comment on attachment 74930
RunLoop WorkQueue Connection class implementation without using ioctl

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

Great progress. I&apos;m very happy with the elimination of the ioctl call. I still have a couple questions though.

&gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:39
&gt; +static const size_t messageInitialSize = 4096;

initialMessageBufferSize?

&gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:49
&gt; +    uint8_t* buffer = reinterpret_cast&lt;uint8_t*&gt;(ptr);

Why not just pass in a uint8_t pointer here?

&gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:77
&gt; +    uint8_t* buffer = reinterpret_cast&lt;uint8_t*&gt;(ptr);

Same.

&gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:136
&gt; +        if ((m_pendingBytes -= readBytesFromSocket(m_socket, (void*)(m_readBuffer.data() + (m_currentMessageSize - m_pendingBytes)), m_pendingBytes)) &gt; 0)

Why not just pass a uint8_t*? Can&apos;t readBytesFromSocket just take a uint8_t. You shouldn&apos;t need to cast a pointer to void* anyway.

&gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:45
&gt; +        m_runLoopMain = 0;

I don&apos;t think you need to set this to zero in the destructor.

&gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:50
&gt; +        m_runLoopContext = 0;

Same.

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:84
&gt; +                return TRUE;

If the queue is invalid do we want to keep getting this callback? Can a queue ever change from the invalid state?

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:161
&gt; +    if (condition == G_IO_IN) {
&gt; +        g_source_set_callback(dispatchSource, 
&gt; +                              reinterpret_cast&lt;GSourceFunc&gt;(&amp;WorkQueue::EventSource::performWork), 
&gt; +                              eventSource, 
&gt; +                              reinterpret_cast&lt;GDestroyNotify&gt;(&amp;WorkQueue::EventSource::deleteEventSource));
&gt; +    } else if (condition == (G_IO_HUP | G_IO_ERR)) {
&gt; +        g_source_set_callback(dispatchSource, 
&gt; +                              reinterpret_cast&lt;GSourceFunc&gt;(&amp;WorkQueue::EventSource::closeConnection), 
&gt; +                              eventSource, 
&gt; +                              reinterpret_cast&lt;GDestroyNotify&gt;(&amp;WorkQueue::EventSource::deleteEventSource));
&gt; +    }

This design is a little bit unbalanced, I think. Both the caller and the callee need to know about the semantics of the g_source_set_callback call.  I&apos;m not sure if it&apos;s possible to make the method more general or not. Maybe you could have a single source callback and pass some data about what the return value should be (true or false). That would remove the need for a specialized source callback (EventSource::closeConnection).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314181</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-28 04:59:45 -0800</bug_when>
    <thetext>(In reply to comment #11)

&gt; Why not just pass a uint8_t*? Can&apos;t readBytesFromSocket just take a uint8_t. You shouldn&apos;t need to cast a pointer to void* anyway.

Sorry. This should read:  &quot;Why not just pass a uint8_t*? You shouldn&apos;t need to cast a pointer to void* anyway.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314330</commentid>
    <comment_count>13</comment_count>
      <attachid>75006</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-11-29 03:08:54 -0800</bug_when>
    <thetext>Created attachment 75006
RunLoop WorkQueue Connection class implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314332</commentid>
    <comment_count>14</comment_count>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-11-29 03:20:03 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 74930 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74930&amp;action=review
&gt; 
&gt; Great progress. I&apos;m very happy with the elimination of the ioctl call. I still have a couple questions though.
&gt; 
&gt; &gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:39
&gt; &gt; +static const size_t messageInitialSize = 4096;
&gt; 
&gt; initialMessageBufferSize?
Done
&gt; 
&gt; &gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:49
&gt; &gt; +    uint8_t* buffer = reinterpret_cast&lt;uint8_t*&gt;(ptr);
&gt; 
&gt; Why not just pass in a uint8_t pointer here?
Done.
&gt; 
&gt; &gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:77
&gt; &gt; +    uint8_t* buffer = reinterpret_cast&lt;uint8_t*&gt;(ptr);
&gt; 
&gt; Same.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:136
&gt; &gt; +        if ((m_pendingBytes -= readBytesFromSocket(m_socket, (void*)(m_readBuffer.data() + (m_currentMessageSize - m_pendingBytes)), m_pendingBytes)) &gt; 0)
&gt; 
&gt; Why not just pass a uint8_t*? Can&apos;t readBytesFromSocket just take a uint8_t. You shouldn&apos;t need to cast a pointer to void* anyway.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:45
&gt; &gt; +        m_runLoopMain = 0;
&gt; 
&gt; I don&apos;t think you need to set this to zero in the destructor.
&gt; 
Done.
&gt; &gt; WebKit2/Platform/gtk/RunLoopGtk.cpp:50
&gt; &gt; +        m_runLoopContext = 0;
&gt; 
&gt; Same.
Done.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:84
&gt; &gt; +                return TRUE;
&gt; 
&gt; If the queue is invalid do we want to keep getting this callback? Can a queue ever change from the invalid state?
Changed the code to return false. Thanks for pointing.
&gt; 
&gt; &gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:161
&gt; &gt; +    if (condition == G_IO_IN) {
&gt; &gt; +        g_source_set_callback(dispatchSource, 
&gt; &gt; +                              reinterpret_cast&lt;GSourceFunc&gt;(&amp;WorkQueue::EventSource::performWork), 
&gt; &gt; +                              eventSource, 
&gt; &gt; +                              reinterpret_cast&lt;GDestroyNotify&gt;(&amp;WorkQueue::EventSource::deleteEventSource));
&gt; &gt; +    } else if (condition == (G_IO_HUP | G_IO_ERR)) {
&gt; &gt; +        g_source_set_callback(dispatchSource, 
&gt; &gt; +                              reinterpret_cast&lt;GSourceFunc&gt;(&amp;WorkQueue::EventSource::closeConnection), 
&gt; &gt; +                              eventSource, 
&gt; &gt; +                              reinterpret_cast&lt;GDestroyNotify&gt;(&amp;WorkQueue::EventSource::deleteEventSource));
&gt; &gt; +    }
&gt; 
&gt; This design is a little bit unbalanced, I think. Both the caller and the callee need to know about the semantics of the g_source_set_callback call.  I&apos;m not sure if it&apos;s possible to make the method more general or not. Maybe you could have a single source callback and pass some data about what the return value should be (true or false). That would remove the need for a specialized source callback (EventSource::closeConnection).
Removed closeConnection callback. The return value can be determined by the condition parameter of the callback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314368</commentid>
    <comment_count>15</comment_count>
      <attachid>75006</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-29 05:45:28 -0800</bug_when>
    <thetext>Comment on attachment 75006
RunLoop WorkQueue Connection class implementation

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

Looks good to me, though there are a few style issues. I&apos;ll fix them and land it myself.

&gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:41
&gt; +static int readBytesFromSocket(int fd, uint8_t* ptr, size_t length)

This should be &quot;fileDescriptor&quot; instead of &quot;fd&quot;.

&gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:69
&gt; +static bool writeBytesToSocket(int fd, uint8_t* ptr, size_t length)

Same.

&gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:79
&gt; +    // Keep writing to the socket till the complete message has been written

This is missing the period.

&gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:91
&gt; +    // write operation failed if complete message is not written

This should have a capital letter and a period.

&gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:135
&gt; +    // handle any previously unprocessed message

Ditto.

&gt; WebKit2/Platform/CoreIPC/gtk/ConnectionGtk.cpp:144
&gt; +    // prepare to read the next message

Ditto.

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:131
&gt; +void WorkQueue::registerEventSourceHandler(int fd, int condition, PassOwnPtr&lt;WorkItem&gt; item)

Sorry that I missed this. It should be &quot;fileDescriptor&quot; not &quot;fd&quot;.

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:144
&gt; +            reinterpret_cast&lt;GSourceFunc&gt;(&amp;WorkQueue::EventSource::performWork), 
&gt; +            eventSource, 
&gt; +            reinterpret_cast&lt;GDestroyNotify&gt;(&amp;WorkQueue::EventSource::deleteEventSource));
&gt; +

The indentation looks off here.

&gt; WebKit2/Platform/gtk/WorkQueueGtk.cpp:165
&gt; +void WorkQueue::unregisterEventSourceHandler(int fd)

This should be fileDesciptor as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314862</commentid>
    <comment_count>16</comment_count>
      <attachid>75106</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-11-29 22:26:50 -0800</bug_when>
    <thetext>Created attachment 75106
Addressed style issues

Addressed the style issues mentioned in the previous comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314885</commentid>
    <comment_count>17</comment_count>
      <attachid>75106</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-11-30 00:17:16 -0800</bug_when>
    <thetext>Comment on attachment 75106
Addressed style issues

Thanks. That makes things easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315481</commentid>
    <comment_count>18</comment_count>
      <attachid>75106</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-30 19:00:00 -0800</bug_when>
    <thetext>Comment on attachment 75106
Addressed style issues

Rejecting patch 75106 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sl&apos;, &apos;apply-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, 75106]&quot; exit_code: 2
Last 500 characters of output:
ILED at 83.
Hunk #4 succeeded at 141 (offset 2 lines).
1 out of 4 hunks FAILED -- saving rejects to file WebKit2/Platform/RunLoop.h.rej
patching file WebKit2/Platform/WorkQueue.h
Hunk #3 succeeded at 83 (offset 5 lines).
Hunk #4 succeeded at 158 (offset 5 lines).
patching file WebKit2/Platform/gtk/RunLoopGtk.cpp
patching file WebKit2/Platform/gtk/WorkQueueGtk.cpp

Failed to run &quot;[u&apos;/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Martin Robinson&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/6484003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315549</commentid>
    <comment_count>19</comment_count>
      <attachid>75256</attachid>
    <who name="Amruth Raj">amruthraj</who>
    <bug_when>2010-11-30 23:05:42 -0800</bug_when>
    <thetext>Created attachment 75256
Patch on top of latest revision</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316212</commentid>
    <comment_count>20</comment_count>
      <attachid>75256</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-02 09:34:22 -0800</bug_when>
    <thetext>Comment on attachment 75256
Patch on top of latest revision

Clearing flags on attachment: 75256

Committed r73142: &lt;http://trac.webkit.org/changeset/73142&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316213</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-02 09:34:29 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72321</attachid>
            <date>2010-10-29 06:15:37 -0700</date>
            <delta_ts>2010-11-02 09:46:11 -0700</delta_ts>
            <desc>Implements RunLoop, WorkQueue, Connection classes</desc>
            <filename>RunLoop.diff</filename>
            <type>text/plain</type>
            <size>22527</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
ZWE5ZmY5OS4uM2I5MzRiYyAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAxMC0xMC0yOCAgQW1ydXRoIFJhaiAg
PGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIEthc2liaGF0bGEgIDxyYXZpLmthc2li
aGF0bGFAbW90b3JvbGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBSdW5Mb29wIGFuZCBXb3JrUXVldWUgaW1wbGVtZW50YXRpb24gZm9y
IFdlYktpdDIgR1RLIHBvcnQuCisgICAgICAgIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDg1MDcpCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgUnVu
TG9vcCBhbmQgV29ya1F1ZXVlIGZpbGVzIHRvIHRoZSBidWlsZCBmaWxlLgorICAgICAgICAqIFBs
YXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMv
Z3RrL0Nvbm5lY3Rpb25HdGsuY3BwOiBBZGRlZC4gQ29ubmVjdGlvbiBjbGFzcyBpbXBsZW1lbnRh
dGlvbiBmb3IgR1RLIHBvcnQgKFVOSVhfWDExIHNwZWNpZmljKS4KKyAgICAgICAgKENvcmVJUEM6
OkNvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChDb3JlSVBDOjpDb25u
ZWN0aW9uOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlv
bjo6cmVhZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpvcGVu
KToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtQ2FuU2VuZE91dGdvaW5n
TWVzc2FnZXMpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVz
c2FnZSk6CisgICAgICAgICogUGxhdGZvcm0vUnVuTG9vcC5oOgorICAgICAgICAqIFBsYXRmb3Jt
L1dvcmtRdWV1ZS5oOgorICAgICAgICAqIFBsYXRmb3JtL2d0ay9SdW5Mb29wR3RrLmNwcDogQWRk
ZWQuIFJ1bnMgYW4gZXZlbnQgbG9vcCB1c2luZyBHTWFpbkxvb3AgYW5kIGhhbmRsZXMgdGhlIGlu
Y29taW5nIG1lc3NhZ2VzLgorICAgICAgICAoUnVuTG9vcDo6UnVuTG9vcCk6CisgICAgICAgIChS
dW5Mb29wOjp+UnVuTG9vcCk6CisgICAgICAgIChSdW5Mb29wOjpydW4pOgorICAgICAgICAoUnVu
TG9vcDo6bWFpbkxvb3ApOgorICAgICAgICAoUnVuTG9vcDo6c3RvcCk6CisgICAgICAgIChSdW5M
b29wOjpwZXJmb3JtV29yayk6CisgICAgICAgIChSdW5Mb29wOjp3YWtlVXApOgorICAgICAgICAo
UnVuTG9vcDo6VGltZXJCYXNlOjpUaW1lckJhc2UpOgorICAgICAgICAoUnVuTG9vcDo6VGltZXJC
YXNlOjp+VGltZXJCYXNlKToKKyAgICAgICAgKFJ1bkxvb3A6OlRpbWVyQmFzZTo6b25lU2hvdFRp
bWVyRmlyZWQpOgorICAgICAgICAoUnVuTG9vcDo6VGltZXJCYXNlOjpyZXBlYXRpbmdUaW1lckZp
cmVkKToKKyAgICAgICAgKFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RhcnQpOgorICAgICAgICAoUnVu
TG9vcDo6VGltZXJCYXNlOjpzdG9wKToKKyAgICAgICAgKFJ1bkxvb3A6OlRpbWVyQmFzZTo6aXNB
Y3RpdmUpOgorICAgICAgICAqIFBsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwOiBBZGRlZC4g
Q3JlYXRlcyBhIHRocmVhZCBhbmQgcG9sbHMgb24gYSBnaXZlbiBmZCB1c2luZyBHSU9DaGFubmVs
LgorICAgICAgICBEaXNwYXRjaGVzIHRoZSBvYnRhaW5lZCBtZXNzYWdlcyB0byBSdW5Mb29wJ3Mg
R01haW5Mb29wLgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAg
ICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV29ya1F1ZXVl
Ojp3b3JrUXVldWVUaHJlYWRCb2R5KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6
OkV2ZW50U291cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRpc3BhdGNo
U291cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25j
ZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpjbG9zZUNvbm5lY3Rpb24pOgor
ICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmspOgorICAgICAgICAo
V29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3VyY2UpOgorICAgICAgICAoV29y
a1F1ZXVlOjpyZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6
OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjpzY2hl
ZHVsZVdvcmspOgorCiAyMDEwLTEwLTI4ICBBbXJ1dGggUmFqICA8YW1ydXRocmFqQG1vdG9yb2xh
LmNvbT4gYW5kIFJhdmkgS2FzaWJoYXRsYSAgPHJhdmkua2FzaWJoYXRsYUBtb3Rvcm9sYS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtIGIvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA3NjBmOWJl
Li42NjhmYzQ0IDEwMDY0NAotLS0gYS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYktp
dDIvR05VbWFrZWZpbGUuYW0KQEAgLTQzLDYgKzQzLDkgQEAgd2Via2l0Mmd0a19zdGF0aWNfaF9h
cGkgKz0gXAogCSQoc3JjZGlyKS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oCiAKIHdlYmtpdDJndGtfc291cmNlcyArPSBcCisJV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL2d0ay9Db25uZWN0aW9uR3RrLmNwcCBcCisJV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvUnVu
TG9vcEd0ay5jcHAgXAorCVdlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgXAog
CVdlYktpdDIvUGxhdGZvcm0vZ3RrL1NoYXJlZE1lbW9yeUd0ay5jcHAgXAogCVdlYktpdDIvU2hh
cmVkL2d0ay9CYWNraW5nU3RvcmVHdGsuY3BwIFwKIAlXZWJLaXQyL1NoYXJlZC9ndGsvUGxhdGZv
cm1DZXJ0aWZpY2F0ZUluZm8uaCBcCkBAIC00MDEsNiArNDA0LDcgQEAgQlVJTFRfU09VUkNFUyAr
PSBcCiAJJCh3ZWJraXQyX2J1aWx0X25vc291cmNlcykKIAogd2Via2l0Mmd0a19jcHBmbGFncyAr
PSBcCisJLUkkKHNyY2RpcikvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL2d0ayBcCiAJLUkkKHNy
Y2RpcikvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsgXAogCS1JJChzcmNkaXIpL1dlYktpdDIvU2hhcmVk
L2d0ayBcCiAJLUkkKHNyY2RpcikvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsgXApkaWZm
IC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaCBiL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgKaW5kZXggZGE4MDI1MS4uZGYzNGNkZiAxMDA2
NDQKLS0tIGEvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAorKysgYi9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCkBAIC00Nyw2ICs0Nyw5IEBACiAjaW5j
bHVkZSA8UVN0cmluZz4KIGNsYXNzIFFMb2NhbFNlcnZlcjsKIGNsYXNzIFFMb2NhbFNvY2tldDsK
KyNlbGlmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8
c3lzL3VuLmg+CiAjZW5kaWYKIAogY2xhc3MgUnVuTG9vcDsKQEAgLTI2MCw2ICsyNjMsOSBAQCBw
cml2YXRlOgogICAgIHNpemVfdCBtX2N1cnJlbnRNZXNzYWdlU2l6ZTsKICAgICBRTG9jYWxTb2Nr
ZXQqIG1fc29ja2V0OwogICAgIFFTdHJpbmcgbV9zZXJ2ZXJOYW1lOworI2VsaWYgUExBVEZPUk0o
R1RLKQorICAgIHZvaWQgcmVhZEV2ZW50SGFuZGxlcigpOworICAgIGludCBtX3NvY2tldDsKICNl
bmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL2d0ay9Db25u
ZWN0aW9uR3RrLmNwcCBiL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9ndGsvQ29ubmVjdGlvbkd0
ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkZDg5NQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9ndGsvQ29ubmVjdGlvbkd0ay5j
cHAKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1v
dG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisj
aW5jbHVkZSAiV29ya0l0ZW0uaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3Rk
aW8uaD4KKyNpbmNsdWRlIDxzeXMvZmNudGwuaD4KK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25h
bWVzcGFjZSBDb3JlSVBDIHsKKwordm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxpemUo
SWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIG1fc29ja2V0ID0gaWRlbnRpZmllcjsKKyAg
ICBtX2lzQ29ubmVjdGVkID0gdHJ1ZTsKK30KKwordm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUlu
dmFsaWRhdGUoKQoreworICAgIGlmICghbV9pc0Nvbm5lY3RlZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gVE9ETzogdW5yZWdpc3RlciBmcm9tIGNvbm5lY3Rpb24gcXVldWUuCisgICAgbV9j
b25uZWN0aW9uUXVldWUudW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihtX3NvY2tldCk7CisK
KyAgICBpZiAobV9zb2NrZXQgPiAwKSB7CisgICAgICAgIGNsb3NlKG1fc29ja2V0KTsKKyAgICAg
ICAgbV9zb2NrZXQgPSAtMTsKKyAgICB9CisKKyAgICBtX2lzQ29ubmVjdGVkID0gZmFsc2U7Cit9
CisKK3ZvaWQgQ29ubmVjdGlvbjo6cmVhZEV2ZW50SGFuZGxlcigpCit7CisgICAgaW50IG51bWJl
ck9mQnl0ZXNSZWFkID0gMDsKKworICAgIGlmIChtX3NvY2tldCA8IDApCisgICAgICAgIHJldHVy
bjsKKworICAgIHVpbnQ4X3Qgc2l6ZUJ1ZmZlcltzaXplb2Yoc2l6ZV90KV07CisgICAgbWVtc2V0
KHNpemVCdWZmZXIsIDAsIHNpemVvZihzaXplX3QpKTsKKworICAgIHdoaWxlICgobnVtYmVyT2ZC
eXRlc1JlYWQgPSByZWFkKG1fc29ja2V0LCBzaXplQnVmZmVyLCBzaXplb2Yoc2l6ZV90KSkpID4g
MCkgeworICAgICAgICBzaXplX3QgbWVzc2FnZVNpemUgPSAqcmVpbnRlcnByZXRfY2FzdDxzaXpl
X3QqPihzaXplQnVmZmVyKTsKKworICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOworICAg
ICAgICBidWZmZXIucmVzaXplKG1lc3NhZ2VTaXplKTsKKyAgICAgICAgbnVtYmVyT2ZCeXRlc1Jl
YWQgPSByZWFkKG1fc29ja2V0LCBidWZmZXIuZGF0YSgpLCBtZXNzYWdlU2l6ZSk7CisKKyAgICAg
ICAgc2l6ZV90IHJlYWxCdWZmZXJTaXplID0gbWVzc2FnZVNpemUgLSBzaXplb2YoTWVzc2FnZUlE
KTsKKyAgICAgICAgdW5zaWduZWQgbWVzc2FnZUlEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQqPihidWZmZXIuZGF0YSgpICsgcmVhbEJ1ZmZlclNpemUpOworCisgICAgICAgIHByb2Nlc3NJ
bmNvbWluZ01lc3NhZ2UoTWVzc2FnZUlEOjpmcm9tSW50KG1lc3NhZ2VJRCksIGFkb3B0UHRyKG5l
dyBBcmd1bWVudERlY29kZXIoYnVmZmVyLmRhdGEoKSwgcmVhbEJ1ZmZlclNpemUpKSk7CisgICAg
fQorfQorCitib29sIENvbm5lY3Rpb246Om9wZW4oKQoreworICAgIGludCBmbGFncyA9IGZjbnRs
KG1fc29ja2V0LCBGX0dFVEZMLCAwKTsKKyAgICBmY250bChtX3NvY2tldCwgRl9TRVRGTCwgZmxh
Z3MgfCBPX05PTkJMT0NLKTsKKworICAgIG1fY29ubmVjdGlvblF1ZXVlLnJlZ2lzdGVyRXZlbnRT
b3VyY2VIYW5kbGVyKG1fc29ja2V0LCAoR0lPQ29uZGl0aW9uKShHX0lPX0hVUHwgR19JT19FUlIp
LCBXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpjb25uZWN0aW9uRGlkQ2xvc2Up
KTsKKyAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihtX3Nv
Y2tldCwgKEdJT0NvbmRpdGlvbikoR19JT19JTiksIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNv
bm5lY3Rpb246OnJlYWRFdmVudEhhbmRsZXIpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gKG1fc29ja2V0ID4gMCk7Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6c2VuZE91
dGdvaW5nTWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNzT3duUHRyPEFyZ3VtZW50RW5j
b2Rlcj4gYXJndW1lbnRzKQoreworICAgIGlmIChtX3NvY2tldCA8IDEpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIFdlIHB1dCB0aGUgbWVzc2FnZSBJRCBsYXN0LgorICAgIGFyZ3Vt
ZW50cy0+ZW5jb2RlVUludDMyKG1lc3NhZ2VJRC50b0ludCgpKTsKKworICAgIHNpemVfdCBidWZm
ZXJTaXplID0gYXJndW1lbnRzLT5idWZmZXJTaXplKCk7CisKKyAgICBWZWN0b3I8dWludDhfdD4g
YnVmZmVyOworICAgIGJ1ZmZlci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJmJ1
ZmZlclNpemUpLCBzaXplb2Yoc2l6ZV90KSk7CisgICAgYnVmZmVyLmFwcGVuZChhcmd1bWVudHMt
PmJ1ZmZlcigpLCBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSk7CisKKyAgICBpbnQgYnl0ZXNXcml0
dGVuID0gd3JpdGUobV9zb2NrZXQsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOworICAg
IEFTU0VSVF9VTlVTRUQoYnl0ZXNXcml0dGVuLCBieXRlc1dyaXR0ZW4pOworICAgIAorICAgIHJl
dHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCmRpZmYgLS1naXQgYS9XZWJL
aXQyL1BsYXRmb3JtL1J1bkxvb3AuaCBiL1dlYktpdDIvUGxhdGZvcm0vUnVuTG9vcC5oCmluZGV4
IDVkOTY5ODMuLmIwMmVhMTEgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvUGxhdGZvcm0vUnVuTG9vcC5o
CisrKyBiL1dlYktpdDIvUGxhdGZvcm0vUnVuTG9vcC5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMyLDYgKzMzLDkgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lmIFBM
QVRGT1JNKEdUSykKKyNpbmNsdWRlIDxnbGliLmg+CisjZW5kaWYKIAogY2xhc3MgV29ya0l0ZW07
CiAKQEAgLTc2LDYgKzgwLDEwIEBAIHB1YmxpYzoKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgICAg
ICBzdGF0aWMgdm9pZCB0aW1lckZpcmVkKFJ1bkxvb3AqLCBpbnQgSUQpOwogICAgICAgICBpbnQg
bV9JRDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgc3RhdGljIGdib29sZWFuIG9uZVNo
b3RUaW1lckZpcmVkKGdwb2ludGVyIGRhdGEpOworICAgICAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVw
ZWF0aW5nVGltZXJGaXJlZChncG9pbnRlciBkYXRhKTsKKyAgICAgICAgR1NvdXJjZSogbV90aW1l
clNvdXJjZTsKICNlbmRpZgogICAgIH07CiAKQEAgLTEyNyw2ICsxMzUsMTMgQEAgcHJpdmF0ZToK
ICAgICBUaW1lck1hcCBtX2FjdGl2ZVRpbWVyczsKICAgICBjbGFzcyBUaW1lck9iamVjdDsKICAg
ICBUaW1lck9iamVjdCogbV90aW1lck9iamVjdDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmsoZ3BvaW50ZXIpOworICAgIEdNYWlu
TG9vcCogbWFpbkxvb3AoKTsKK3ByaXZhdGU6CisgICAgR01haW5Db250ZXh0KiBtX3J1bkxvb3BD
b250ZXh0OworICAgIEdNYWluTG9vcCogbV9ydW5Mb29wTWFpbjsKICNlbmRpZgogfTsKIApkaWZm
IC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaCBiL1dlYktpdDIvUGxhdGZvcm0v
V29ya1F1ZXVlLmgKaW5kZXggZjdjN2RjYS4uMWFhNGQzMSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9Q
bGF0Zm9ybS9Xb3JrUXVldWUuaAorKysgYi9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEg
TW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMxLDggQEAKICNpZiBIQVZFKERJU1BBVENIX0gpCiAjaW5j
bHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KICNlbmRpZgorI2VsaWYgUExBVEZPUk0oR1RLKQor
I2luY2x1ZGUgPGdsaWIuaD4KICNlbmRpZgogCiAjaW5jbHVkZSAiV29ya0l0ZW0uaCIKQEAgLTc0
LDYgKzc3LDkgQEAgcHVibGljOgogICAgIHZvaWQgZGlzY29ubmVjdFNpZ25hbChRT2JqZWN0Kiwg
Y29uc3QgY2hhciogc2lnbmFsKTsKIAogICAgIHZvaWQgbW92ZVNvY2tldFRvV29ya1RocmVhZChR
TG9jYWxTb2NrZXQqKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHJlZ2lzdGVyRXZl
bnRTb3VyY2VIYW5kbGVyKGludCwgR0lPQ29uZGl0aW9uLCBQYXNzT3duUHRyPFdvcmtJdGVtPik7
CisgICAgdm9pZCB1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCk7CiAjZW5kaWYKIAog
cHJpdmF0ZToKQEAgLTE0Niw2ICsxNTIsMTggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFFPYmpl
Y3QqLCBXb3JrSXRlbVF0Kj4gbV9zaWduYWxMaXN0ZW5lcnM7CiAgICAgUVRocmVhZCogbV93b3Jr
VGhyZWFkOwogICAgIGZyaWVuZCBjbGFzcyBXb3JrSXRlbVF0OworI2VsaWYgUExBVEZPUk0oR1RL
KQorICAgIHN0YXRpYyB2b2lkKiB3b3JrUXVldWVUaHJlYWRCb2R5KHZvaWQqKTsKKyAgICB2b2lk
IHdvcmtRdWV1ZVRocmVhZEJvZHkoKTsKKworICAgIFRocmVhZElkZW50aWZpZXIgbV93b3JrUXVl
dWVUaHJlYWQ7CisgICAgR01haW5Db250ZXh0KiBtX2V2ZW50Q29udGV4dDsKKyAgICBNdXRleCBt
X2V2ZW50TG9vcExvY2s7CisgICAgR01haW5Mb29wKiBtX2V2ZW50TG9vcDsKKyAgICBNdXRleCBt
X2V2ZW50U291cmNlc0xvY2s7CisgICAgY2xhc3MgRXZlbnRTb3VyY2U7CisgICAgSGFzaE1hcDxp
bnQsIFZlY3RvcjxFdmVudFNvdXJjZSo+ID4gbV9ldmVudFNvdXJjZXM7CisgICAgdHlwZWRlZiBI
YXNoTWFwPGludCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPjo6aXRlcmF0b3IgRXZlbnRTb3VyY2VJ
dGVyYXRvcjsgCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vZ3Rr
L1J1bkxvb3BHdGsuY3BwIGIvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwMGY1ZgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwCkBAIC0wLDAgKzEsMTM2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlJ1bkxvb3AuaCIK
KworI2luY2x1ZGUgIldLQmFzZS5oIgorI2luY2x1ZGUgPGdsaWIuaD4KKworUnVuTG9vcDo6UnVu
TG9vcCgpCit7CisgICAgbV9ydW5Mb29wQ29udGV4dCA9IGdfbWFpbl9jb250ZXh0X2RlZmF1bHQo
KTsKKyAgICBBU1NFUlQobV9ydW5Mb29wQ29udGV4dCk7CisgICAgbV9ydW5Mb29wTWFpbiA9IGdf
bWFpbl9sb29wX25ldyhtX3J1bkxvb3BDb250ZXh0LCBGQUxTRSk7CisgICAgQVNTRVJUKG1fcnVu
TG9vcE1haW4pOworfQorCitSdW5Mb29wOjp+UnVuTG9vcCgpCit7CisgICAgaWYgKG1fcnVuTG9v
cE1haW4pIHsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX3J1bkxvb3BNYWluKTsKKyAgICAg
ICAgZ19tYWluX2xvb3BfdW5yZWYobV9ydW5Mb29wTWFpbik7CisgICAgICAgIG1fcnVuTG9vcE1h
aW4gPSAwOworICAgIH0KKworICAgIGlmIChtX3J1bkxvb3BDb250ZXh0KSB7CisgICAgICAgIGdf
bWFpbl9jb250ZXh0X3VucmVmKG1fcnVuTG9vcENvbnRleHQpOworICAgICAgICBtX3J1bkxvb3BD
b250ZXh0ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgUnVuTG9vcDo6cnVuKCkKK3sKKyAgICBnX21h
aW5fbG9vcF9ydW4oUnVuTG9vcDo6bWFpbigpLT5tYWluTG9vcCgpKTsKK30KKworR01haW5Mb29w
KiBSdW5Mb29wOjptYWluTG9vcCgpCit7CisgICAgcmV0dXJuIG1fcnVuTG9vcE1haW47Cit9CisK
K3ZvaWQgUnVuTG9vcDo6c3RvcCgpCit7CisgICAgZ19tYWluX2xvb3BfcXVpdChtX3J1bkxvb3BN
YWluKTsKK30KKworZ2Jvb2xlYW4gUnVuTG9vcDo6cGVyZm9ybVdvcmsoZ3BvaW50ZXIgY29udGV4
dCkKK3sKKyAgICBzdGF0aWNfY2FzdDxSdW5Mb29wKj4oY29udGV4dCktPnBlcmZvcm1Xb3JrKCk7
CisgICAgcmV0dXJuIEZBTFNFOworfQorCit2b2lkIFJ1bkxvb3A6Ondha2VVcCgpCit7CisgICAg
R1NvdXJjZSogc291cmNlID0gZ190aW1lb3V0X3NvdXJjZV9uZXcoMCk7CisgICAgZ19zb3VyY2Vf
c2V0X2NhbGxiYWNrKHNvdXJjZSwgKEdTb3VyY2VGdW5jKSZSdW5Mb29wOjpwZXJmb3JtV29yaywg
dGhpcywgTlVMTCk7CisgICAgZ19zb3VyY2VfYXR0YWNoKHNvdXJjZSwgbV9ydW5Mb29wQ29udGV4
dCk7CisKKyAgICBnX21haW5fY29udGV4dF93YWtldXAobV9ydW5Mb29wQ29udGV4dCk7Cit9CisK
K1J1bkxvb3A6OlRpbWVyQmFzZTo6VGltZXJCYXNlKFJ1bkxvb3AqIHJ1bkxvb3ApCisgICAgOiBt
X3J1bkxvb3AocnVuTG9vcCkKKyAgICAsIG1fdGltZXJTb3VyY2UoMCkKK3sKK30KKworUnVuTG9v
cDo6VGltZXJCYXNlOjp+VGltZXJCYXNlKCkKK3sKKyAgICBzdG9wKCk7Cit9CisKK2dib29sZWFu
IFJ1bkxvb3A6OlRpbWVyQmFzZTo6b25lU2hvdFRpbWVyRmlyZWQoZ3BvaW50ZXIgY29udGV4dCkK
K3sKKyAgICBSdW5Mb29wOjpUaW1lckJhc2UqIHRpbWVyY2xhc3MgPSBzdGF0aWNfY2FzdDxSdW5M
b29wOjpUaW1lckJhc2UqPihjb250ZXh0KTsKKyAgICB0aW1lcmNsYXNzLT5maXJlZCgpOworICAg
IHJldHVybiBGQUxTRTsKK30KKworZ2Jvb2xlYW4gUnVuTG9vcDo6VGltZXJCYXNlOjpyZXBlYXRp
bmdUaW1lckZpcmVkKGdwb2ludGVyIGNvbnRleHQpCit7CisgICAgUnVuTG9vcDo6VGltZXJCYXNl
KiB0aW1lcmNsYXNzID0gc3RhdGljX2Nhc3Q8UnVuTG9vcDo6VGltZXJCYXNlKj4oY29udGV4dCk7
CisgICAgdGltZXJjbGFzcy0+ZmlyZWQoKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBS
dW5Mb29wOjpUaW1lckJhc2U6OnN0YXJ0KGRvdWJsZSBuZXh0RmlyZUludGVydmFsLCBkb3VibGUg
cmVwZWF0SW50ZXJ2YWwpCit7CisgICAgaWYgKG1fdGltZXJTb3VyY2UpCisgICAgICAgIHN0b3Ao
KTsKKworICAgIGlmIChyZXBlYXRJbnRlcnZhbCkgeworICAgICAgICBtX3RpbWVyU291cmNlID0g
Z190aW1lb3V0X3NvdXJjZV9uZXcoc3RhdGljX2Nhc3Q8Z3VpbnQ+KHJlcGVhdEludGVydmFsKSk7
CisgICAgICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3RpbWVyU291cmNlLCAoR1NvdXJjZUZ1
bmMpJlJ1bkxvb3A6OlRpbWVyQmFzZTo6cmVwZWF0aW5nVGltZXJGaXJlZCwgdGhpcywgTlVMTCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV90aW1lclNvdXJjZSA9IGdfdGltZW91dF9zb3VyY2Vf
bmV3KHN0YXRpY19jYXN0PGd1aW50PihuZXh0RmlyZUludGVydmFsKSk7CisgICAgICAgIGdfc291
cmNlX3NldF9jYWxsYmFjayhtX3RpbWVyU291cmNlLCAoR1NvdXJjZUZ1bmMpJlJ1bkxvb3A6OlRp
bWVyQmFzZTo6b25lU2hvdFRpbWVyRmlyZWQsIHRoaXMsIE5VTEwpOworICAgIH0KKyAgICBnX3Nv
dXJjZV9hdHRhY2gobV90aW1lclNvdXJjZSwgbV9ydW5Mb29wLT5tX3J1bkxvb3BDb250ZXh0KTsK
K30KKwordm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0b3AoKQoreworICAgIGlmICghbV90aW1l
clNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19zb3VyY2VfZGVzdHJveShtX3RpbWVy
U291cmNlKTsKKyAgICBtX3RpbWVyU291cmNlID0gMDsKK30KKworYm9vbCBSdW5Mb29wOjpUaW1l
ckJhc2U6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aW1lclNvdXJjZT8gdHJ1
ZSA6IGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVl
R3RrLmNwcCBiL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyMzljOQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKQEAgLTAsMCArMSwyMDMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisK
KyNpbmNsdWRlICJXS0Jhc2UuaCIKKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6
ZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIG1fZXZlbnRDb250ZXh0ID0gZ19tYWluX2NvbnRl
eHRfbmV3KCk7CisgICAgQVNTRVJUKG1fZXZlbnRDb250ZXh0KTsKKyAgICBtX2V2ZW50TG9vcCA9
IGdfbWFpbl9sb29wX25ldyhtX2V2ZW50Q29udGV4dCwgRkFMU0UpOworICAgIEFTU0VSVChtX2V2
ZW50TG9vcCk7CisgICAgbV93b3JrUXVldWVUaHJlYWQgPSBjcmVhdGVUaHJlYWQoJldvcmtRdWV1
ZTo6d29ya1F1ZXVlVGhyZWFkQm9keSwgdGhpcywgbmFtZSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVl
OjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50
TG9vcExvY2spOworCisgICAgaWYgKG1fZXZlbnRMb29wKSB7CisgICAgICAgIGlmIChnX21haW5f
bG9vcF9pc19ydW5uaW5nKG1fZXZlbnRMb29wKSkKKyAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1
aXQobV9ldmVudExvb3ApOworCisgICAgICAgIGdfbWFpbl9sb29wX3VucmVmKG1fZXZlbnRMb29w
KTsKKyAgICAgICAgbV9ldmVudExvb3AgPSAwOworICAgIH0KKworICAgIGlmIChtX2V2ZW50Q29u
dGV4dCkgeworICAgICAgICBnX21haW5fY29udGV4dF91bnJlZihtX2V2ZW50Q29udGV4dCk7Cisg
ICAgICAgIG1fZXZlbnRDb250ZXh0ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQqIFdvcmtRdWV1ZTo6
d29ya1F1ZXVlVGhyZWFkQm9keSh2b2lkICpjb250ZXh0KQoreworICAgIHN0YXRpY19jYXN0PFdv
cmtRdWV1ZSo+KGNvbnRleHQpLT53b3JrUXVldWVUaHJlYWRCb2R5KCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWRCb2R5KCkKK3sKKyAgICBnX21h
aW5fbG9vcF9ydW4obV9ldmVudExvb3ApOworfQorCitjbGFzcyBXb3JrUXVldWU6OkV2ZW50U291
cmNlIHsKK3B1YmxpYzoKKyAgICBFdmVudFNvdXJjZShHU291cmNlKiBkaXNwYXRjaFNvdXJjZSwg
UGFzc093blB0cjxXb3JrSXRlbT4gd29ya0l0ZW0sIFdvcmtRdWV1ZSogd29ya1F1ZXVlKQorICAg
IDogbV9kaXNwYXRjaFNvdXJjZShkaXNwYXRjaFNvdXJjZSkKKyAgICAsIG1fd29ya0l0ZW0od29y
a0l0ZW0pCisgICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCisgICAgeworICAgIH0KKworICAg
IEdTb3VyY2UqIGRpc3BhdGNoU291cmNlKCkgeyByZXR1cm4gbV9kaXNwYXRjaFNvdXJjZTsgfQor
CisgICAgc3RhdGljIGdib29sZWFuIHBlcmZvcm1Xb3JrT25jZShncG9pbnRlciBzb3VyY2UpCisg
ICAgeworICAgICAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxFdmVu
dFNvdXJjZSo+KHNvdXJjZSk7CisgICAgICAgIFdvcmtRdWV1ZSogcXVldWUgPSBldmVudFNvdXJj
ZS0+bV93b3JrUXVldWU7CisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cihxdWV1ZS0+bV9pc1ZhbGlkTXV0ZXgpOworICAgICAgICAgICAgaWYgKCFxdWV1ZS0+bV9pc1Zh
bGlkKQorICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorCisgICAgICAg
IGV2ZW50U291cmNlLT5tX3dvcmtJdGVtLT5leGVjdXRlKCk7CisgICAgICAgIHJldHVybiBGQUxT
RTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gY2xvc2VDb25uZWN0aW9uKEdJT0NoYW5u
ZWwqIGNoYW5uZWwsIEdJT0NvbmRpdGlvbiBjb25kaXRpb24sIGdwb2ludGVyIHNvdXJjZSkKKyAg
ICB7CisgICAgICAgIGlmICgoY29uZGl0aW9uICYgR19JT19IVVApIHx8IChjb25kaXRpb24gJiBH
X0lPX0VSUikpIHsKKyAgICAgICAgICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHN0YXRp
Y19jYXN0PEV2ZW50U291cmNlKj4oc291cmNlKTsKKyAgICAgICAgICAgIFdvcmtRdWV1ZSogcXVl
dWUgPSBldmVudFNvdXJjZS0+bV93b3JrUXVldWU7CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7CisgICAgICAg
ICAgICAgICAgaWYgKCFxdWV1ZS0+bV9pc1ZhbGlkKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBldmVudFNvdXJjZS0+bV93b3Jr
SXRlbS0+ZXhlY3V0ZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIGdib29sZWFuIHBlcmZvcm1Xb3JrKEdJT0NoYW5uZWwqIGNoYW5u
ZWwsIEdJT0NvbmRpdGlvbiBjb25kaXRpb24sIGdwb2ludGVyIHNvdXJjZSkgCisgICAgeworICAg
ICAgICBpZiAoY29uZGl0aW9uICYgR19JT19JTikgeworICAgICAgICAgICAgRXZlbnRTb3VyY2Uq
IGV2ZW50U291cmNlID0gc3RhdGljX2Nhc3Q8RXZlbnRTb3VyY2UqPihzb3VyY2UpOworICAgICAg
ICAgICAgV29ya1F1ZXVlKiBxdWV1ZSA9IGV2ZW50U291cmNlLT5tX3dvcmtRdWV1ZTsKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1faXNW
YWxpZE11dGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBldmVudFNvdXJjZS0+bV93b3JrSXRlbS0+ZXhlY3V0ZSgpOworICAgICAgICAgICAgcmV0dXJu
IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgfQorICAgIAor
ICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUV2ZW50U291cmNlKGdwb2ludGVyIHNvdXJjZSkgCisgICAg
eworICAgICAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxFdmVudFNv
dXJjZSo+KHNvdXJjZSk7CisgICAgICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKKyAgICB9CisgICAK
K3B1YmxpYzoKKyAgICBHU291cmNlKiBtX2Rpc3BhdGNoU291cmNlOworICAgIFBhc3NPd25QdHI8
V29ya0l0ZW0+IG1fd29ya0l0ZW07CisgICAgV29ya1F1ZXVlKiBtX3dvcmtRdWV1ZTsKK307CisK
K3ZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQgZmQsIEdJT0Nv
bmRpdGlvbiBjb25kaXRpb24sIFBhc3NPd25QdHI8V29ya0l0ZW0+IGl0ZW0pCit7CisgICAgR0lP
Q2hhbm5lbCogY2hhbm5lbCA9IGdfaW9fY2hhbm5lbF91bml4X25ldyhmZCk7CisgICAgR1NvdXJj
ZSogZGlzcGF0Y2hTb3VyY2UgPSBnX2lvX2NyZWF0ZV93YXRjaChjaGFubmVsLCBjb25kaXRpb24p
OworICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291
cmNlID0gbmV3IEV2ZW50U291cmNlKGRpc3BhdGNoU291cmNlLCBpdGVtLCB0aGlzKTsKKyAgIAor
ICAgIGlmIChjb25kaXRpb24gPT0gR19JT19JTikgeworICAgICAgICBnX3NvdXJjZV9zZXRfY2Fs
bGJhY2soZGlzcGF0Y2hTb3VyY2UsIChHU291cmNlRnVuYykmIFdvcmtRdWV1ZTo6RXZlbnRTb3Vy
Y2U6OnBlcmZvcm1Xb3JrLCBldmVudFNvdXJjZSwgJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRl
bGV0ZUV2ZW50U291cmNlKTsKKyAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbiA9PSAoR19JT19IVVAg
fCBHX0lPX0VSUikpIHsKKyAgICAgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKGRpc3BhdGNoU291
cmNlLCAoR1NvdXJjZUZ1bmMpJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmNsb3NlQ29ubmVjdGlv
biwgZXZlbnRTb3VyY2UsICZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJj
ZSk7CisgICAgfQorCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNv
dXJjZXNMb2NrKTsKKyAgICAgICAgQVNTRVJUKCFtX2V2ZW50U291cmNlcy5jb250YWlucyhmZCkp
OworICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzOworICAgICAgICBFdmVudFNv
dXJjZUl0ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmZCk7CisgICAgICAgIGlmIChp
dCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgCisgICAgICAgICAgICBzb3VyY2VzID0gaXQtPnNl
Y29uZDsKKworICAgICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNvdXJjZSk7CisgICAgICAgIG1f
ZXZlbnRTb3VyY2VzLnNldChmZCwgc291cmNlcyk7CisgICAgfQorCisgICAgeworICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIobV9ldmVudExvb3BMb2NrKTsKKyAgICAgICAgZ19zb3VyY2VfYXR0
YWNoKGRpc3BhdGNoU291cmNlLCBtX2V2ZW50Q29udGV4dCk7CisgICAgfQorfQorCit2b2lkIFdv
cmtRdWV1ZTo6dW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQgZmQpCit7CisgICAgQVNT
RVJUKGZkKTsKKyAgICAKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNMb2Nr
KTsKKyAgICAKKyAgICBFdmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmlu
ZChmZCk7CisgICAgQVNTRVJUKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKTsKKyAgICBBU1NF
UlQobV9ldmVudFNvdXJjZXMuY29udGFpbnMoZmQpKTsKKworICAgIGlmIChpdCAhPSBtX2V2ZW50
U291cmNlcy5lbmQoKSkgeworICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzOwor
ICAgICAgICBzb3VyY2VzID0gaXQtPnNlY29uZDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBzb3VyY2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBFdmVudFNvdXJj
ZSogZXZlbnRTb3VyY2UgPSBzb3VyY2VzW2ldOworICAgICAgICAgICAgR1NvdXJjZSogZ1NvdXJj
ZSA9IGV2ZW50U291cmNlLT5kaXNwYXRjaFNvdXJjZSgpOworICAgICAgICAgICAgZ19zb3VyY2Vf
ZGVzdHJveShnU291cmNlKTsKKyAgICAgICAgfQorICAgICAgICBtX2V2ZW50U291cmNlcy5yZW1v
dmUoaXQpOworICAgIH0KK30KKwordm9pZCBXb3JrUXVldWU6OnNjaGVkdWxlV29yayhQYXNzT3du
UHRyPFdvcmtJdGVtPiBpdGVtKQoreworICAgIEdTb3VyY2UqIGRpc3BhdGNoU291cmNlID0gZ190
aW1lb3V0X3NvdXJjZV9uZXcoMCk7CisgICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKKyAgICBF
dmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZGlzcGF0Y2hTb3VyY2Us
IGl0ZW0sIHRoaXMpOworICAgIAorICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNwYXRjaFNv
dXJjZSwgKEdTb3VyY2VGdW5jKSZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29ya09u
Y2UsIGV2ZW50U291cmNlLCAmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3Vy
Y2UpOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRMb29wTG9jayk7
CisgICAgICAgIGdfc291cmNlX2F0dGFjaChkaXNwYXRjaFNvdXJjZSwgbV9ldmVudENvbnRleHQp
OworICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72680</attachid>
            <date>2010-11-02 09:39:58 -0700</date>
            <delta_ts>2010-11-18 05:17:17 -0800</delta_ts>
            <desc>RunLoop WorkQueue and Connection class implementation for GTK port</desc>
            <filename>RunLoop WorkQueue Connection class Implementation.patch</filename>
            <type>text/plain</type>
            <size>23529</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9ndGsvQ29ubmVjdGlvbkd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL2d0ay9Db25uZWN0aW9uR3RrLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9ndGsvQ29ubmVjdGlv
bkd0ay5jcHAJKHJldmlzaW9uIDUxNzE5KQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9u
cyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisKKyNpbmNsdWRl
ICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlICJXb3JrSXRlbS5oIgorCisjaW5jbHVkZSA8
ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9mY250bC5oPgordXNp
bmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIENvcmVJUEMgeworCit2b2lkIENvbm5lY3Rp
b246OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgbV9z
b2NrZXQgPSBpZGVudGlmaWVyOworICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOworfQorCit2b2lk
IENvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgaWYgKCFtX2lzQ29ubmVj
dGVkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUT0RPOiB1bnJlZ2lzdGVyIGZyb20gY29u
bmVjdGlvbiBxdWV1ZS4KKyAgICBtX2Nvbm5lY3Rpb25RdWV1ZS51bnJlZ2lzdGVyRXZlbnRTb3Vy
Y2VIYW5kbGVyKG1fc29ja2V0KTsKKworICAgIGlmIChtX3NvY2tldCA+IDApIHsKKyAgICAgICAg
Y2xvc2UobV9zb2NrZXQpOworICAgICAgICBtX3NvY2tldCA9IC0xOworICAgIH0KKworICAgIG1f
aXNDb25uZWN0ZWQgPSBmYWxzZTsKK30KKwordm9pZCBDb25uZWN0aW9uOjpyZWFkRXZlbnRIYW5k
bGVyKCkKK3sKKyAgICBpbnQgbnVtYmVyT2ZCeXRlc1JlYWQgPSAwOworCisgICAgaWYgKG1fc29j
a2V0IDwgMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdWludDhfdCBzaXplQnVmZmVyW3NpemVv
ZihzaXplX3QpXTsKKyAgICBtZW1zZXQoc2l6ZUJ1ZmZlciwgMCwgc2l6ZW9mKHNpemVfdCkpOwor
CisgICAgd2hpbGUgKChudW1iZXJPZkJ5dGVzUmVhZCA9IHJlYWQobV9zb2NrZXQsIHNpemVCdWZm
ZXIsIHNpemVvZihzaXplX3QpKSkgPiAwKSB7CisgICAgICAgIHNpemVfdCBtZXNzYWdlU2l6ZSA9
ICpyZWludGVycHJldF9jYXN0PHNpemVfdCo+KHNpemVCdWZmZXIpOworCisgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBidWZmZXI7CisgICAgICAgIGJ1ZmZlci5yZXNpemUobWVzc2FnZVNpemUpOwor
ICAgICAgICBudW1iZXJPZkJ5dGVzUmVhZCA9IHJlYWQobV9zb2NrZXQsIGJ1ZmZlci5kYXRhKCks
IG1lc3NhZ2VTaXplKTsKKworICAgICAgICBzaXplX3QgcmVhbEJ1ZmZlclNpemUgPSBtZXNzYWdl
U2l6ZSAtIHNpemVvZihNZXNzYWdlSUQpOworICAgICAgICB1bnNpZ25lZCBtZXNzYWdlSUQgPSAq
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KGJ1ZmZlci5kYXRhKCkgKyByZWFsQnVmZmVyU2l6
ZSk7CisKKyAgICAgICAgcHJvY2Vzc0luY29taW5nTWVzc2FnZShNZXNzYWdlSUQ6OmZyb21JbnQo
bWVzc2FnZUlEKSwgYWRvcHRQdHIobmV3IEFyZ3VtZW50RGVjb2RlcihidWZmZXIuZGF0YSgpLCBy
ZWFsQnVmZmVyU2l6ZSkpKTsKKyAgICB9Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6b3BlbigpCit7
CisgICAgaW50IGZsYWdzID0gZmNudGwobV9zb2NrZXQsIEZfR0VURkwsIDApOworICAgIGZjbnRs
KG1fc29ja2V0LCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0spOworCisgICAgbV9jb25uZWN0
aW9uUXVldWUucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIobV9zb2NrZXQsIChHSU9Db25kaXRp
b24pKEdfSU9fSFVQfCBHX0lPX0VSUiksIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rp
b246OmNvbm5lY3Rpb25EaWRDbG9zZSkpOworICAgIG1fY29ubmVjdGlvblF1ZXVlLnJlZ2lzdGVy
RXZlbnRTb3VyY2VIYW5kbGVyKG1fc29ja2V0LCAoR0lPQ29uZGl0aW9uKShHX0lPX0lOKSwgV29y
a0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6cmVhZEV2ZW50SGFuZGxlcikpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIENvbm5lY3Rpb246OnBsYXRmb3JtQ2FuU2VuZE91dGdv
aW5nTWVzc2FnZXMoKSBjb25zdAoreworICAgIHJldHVybiAobV9zb2NrZXQgPiAwKTsKK30KKwor
Ym9vbCBDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQs
IFBhc3NPd25QdHI8QXJndW1lbnRFbmNvZGVyPiBhcmd1bWVudHMpCit7CisgICAgaWYgKG1fc29j
a2V0IDwgMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgcHV0IHRoZSBtZXNz
YWdlIElEIGxhc3QuCisgICAgYXJndW1lbnRzLT5lbmNvZGVVSW50MzIobWVzc2FnZUlELnRvSW50
KCkpOworCisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKTsK
KworICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CisgICAgYnVmZmVyLmFwcGVuZChyZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPigmYnVmZmVyU2l6ZSksIHNpemVvZihzaXplX3QpKTsKKyAgICBi
dWZmZXIuYXBwZW5kKGFyZ3VtZW50cy0+YnVmZmVyKCksIGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgp
KTsKKworICAgIGludCBieXRlc1dyaXR0ZW4gPSB3cml0ZShtX3NvY2tldCwgYnVmZmVyLmRhdGEo
KSwgYnVmZmVyLnNpemUoKSk7CisgICAgQVNTRVJUX1VOVVNFRChieXRlc1dyaXR0ZW4sIGJ5dGVz
V3JpdHRlbik7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIENv
cmVJUEMKSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAkocmV2aXNpb24g
NTE3MDUpCisrKyBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCShyZXZpc2lv
biA1MTcxOSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIFBvcnRpb25zIENvcHly
aWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNiArNDcsOSBAQAogI2lu
Y2x1ZGUgPFFTdHJpbmc+CiBjbGFzcyBRTG9jYWxTZXJ2ZXI7CiBjbGFzcyBRTG9jYWxTb2NrZXQ7
CisjZWxpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUg
PHN5cy91bi5oPgogI2VuZGlmCiAKIGNsYXNzIFJ1bkxvb3A7CkBAIC04Niw2ICs5MCw4IEBACiAg
ICAgc3RhdGljIGJvb2wgY3JlYXRlU2VydmVyQW5kQ2xpZW50SWRlbnRpZmllcnMoSWRlbnRpZmll
ciYgc2VydmVySWRlbnRpZmllciwgSWRlbnRpZmllciYgY2xpZW50SWRlbnRpZmllcik7CiAjZWxp
ZiBQTEFURk9STShRVCkKICAgICB0eXBlZGVmIGNvbnN0IFFTdHJpbmcgSWRlbnRpZmllcjsKKyNl
bGlmIFBMQVRGT1JNKEdUSykKKyAgICB0eXBlZGVmIGludCBJZGVudGlmaWVyOwogI2VuZGlmCiAK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb25uZWN0aW9uPiBjcmVhdGVTZXJ2ZXJDb25uZWN0aW9u
KElkZW50aWZpZXIsIENsaWVudCosIFJ1bkxvb3AqIGNsaWVudFJ1bkxvb3ApOwpAQCAtMjU3LDYg
KzI2Myw5IEBACiAgICAgc2l6ZV90IG1fY3VycmVudE1lc3NhZ2VTaXplOwogICAgIFFMb2NhbFNv
Y2tldCogbV9zb2NrZXQ7CiAgICAgUVN0cmluZyBtX3NlcnZlck5hbWU7CisjZWxpZiBQTEFURk9S
TShHVEspCisgICAgdm9pZCByZWFkRXZlbnRIYW5kbGVyKCk7CisgICAgaW50IG1fc29ja2V0Owog
I2VuZGlmCiB9OwogCkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL1J1bkxvb3AuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL1J1bkxvb3AuaAkocmV2aXNpb24gNTE3MDUpCisrKyBXZWJL
aXQyL1BsYXRmb3JtL1J1bkxvb3AuaAkocmV2aXNpb24gNTE3MTkpCkBAIC0xLDYgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMyLDYgKzMzLDkgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlIDxnbGliLmg+CisjZW5kaWYKIAogY2xhc3MgV29y
a0l0ZW07CiAKQEAgLTc2LDYgKzgwLDEwIEBACiAjZWxpZiBQTEFURk9STShRVCkKICAgICAgICAg
c3RhdGljIHZvaWQgdGltZXJGaXJlZChSdW5Mb29wKiwgaW50IElEKTsKICAgICAgICAgaW50IG1f
SUQ7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgICAgIHN0YXRpYyBnYm9vbGVhbiBvbmVTaG90
VGltZXJGaXJlZChncG9pbnRlciBkYXRhKTsKKyAgICAgICAgc3RhdGljIGdib29sZWFuIHJlcGVh
dGluZ1RpbWVyRmlyZWQoZ3BvaW50ZXIgZGF0YSk7CisgICAgICAgIEdTb3VyY2UqIG1fdGltZXJT
b3VyY2U7CiAjZW5kaWYKICAgICB9OwogCkBAIC0xMjcsNiArMTM1LDEzIEBACiAgICAgVGltZXJN
YXAgbV9hY3RpdmVUaW1lcnM7CiAgICAgY2xhc3MgVGltZXJPYmplY3Q7CiAgICAgVGltZXJPYmpl
Y3QqIG1fdGltZXJPYmplY3Q7CisjZWxpZiBQTEFURk9STShHVEspCitwdWJsaWM6CisgICAgc3Rh
dGljIGdib29sZWFuIHBlcmZvcm1Xb3JrKGdwb2ludGVyKTsKKyAgICBHTWFpbkxvb3AqIG1haW5M
b29wKCk7Citwcml2YXRlOgorICAgIEdNYWluQ29udGV4dCogbV9ydW5Mb29wQ29udGV4dDsKKyAg
ICBHTWFpbkxvb3AqIG1fcnVuTG9vcE1haW47CiAjZW5kaWYKIH07CiAKSW5kZXg6IFdlYktpdDIv
UGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZv
cm0vZ3RrL1J1bkxvb3BHdGsuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9n
dGsvUnVuTG9vcEd0ay5jcHAJKHJldmlzaW9uIDUxNzE5KQpAQCAtMCwwICsxLDEzNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisKKyNp
bmNsdWRlICJXS0Jhc2UuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisKK1J1bkxvb3A6OlJ1bkxvb3Ao
KQoreworICAgIG1fcnVuTG9vcENvbnRleHQgPSBnX21haW5fY29udGV4dF9kZWZhdWx0KCk7Cisg
ICAgQVNTRVJUKG1fcnVuTG9vcENvbnRleHQpOworICAgIG1fcnVuTG9vcE1haW4gPSBnX21haW5f
bG9vcF9uZXcobV9ydW5Mb29wQ29udGV4dCwgRkFMU0UpOworICAgIEFTU0VSVChtX3J1bkxvb3BN
YWluKTsKK30KKworUnVuTG9vcDo6flJ1bkxvb3AoKQoreworICAgIGlmIChtX3J1bkxvb3BNYWlu
KSB7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9ydW5Mb29wTWFpbik7CisgICAgICAgIGdf
bWFpbl9sb29wX3VucmVmKG1fcnVuTG9vcE1haW4pOworICAgICAgICBtX3J1bkxvb3BNYWluID0g
MDsKKyAgICB9CisKKyAgICBpZiAobV9ydW5Mb29wQ29udGV4dCkgeworICAgICAgICBnX21haW5f
Y29udGV4dF91bnJlZihtX3J1bkxvb3BDb250ZXh0KTsKKyAgICAgICAgbV9ydW5Mb29wQ29udGV4
dCA9IDA7CisgICAgfQorfQorCit2b2lkIFJ1bkxvb3A6OnJ1bigpCit7CisgICAgZ19tYWluX2xv
b3BfcnVuKFJ1bkxvb3A6Om1haW4oKS0+bWFpbkxvb3AoKSk7Cit9CisKK0dNYWluTG9vcCogUnVu
TG9vcDo6bWFpbkxvb3AoKQoreworICAgIHJldHVybiBtX3J1bkxvb3BNYWluOworfQorCit2b2lk
IFJ1bkxvb3A6OnN0b3AoKQoreworICAgIGdfbWFpbl9sb29wX3F1aXQobV9ydW5Mb29wTWFpbik7
Cit9CisKK2dib29sZWFuIFJ1bkxvb3A6OnBlcmZvcm1Xb3JrKGdwb2ludGVyIGNvbnRleHQpCit7
CisgICAgc3RhdGljX2Nhc3Q8UnVuTG9vcCo+KGNvbnRleHQpLT5wZXJmb3JtV29yaygpOworICAg
IHJldHVybiBGQUxTRTsKK30KKwordm9pZCBSdW5Mb29wOjp3YWtlVXAoKQoreworICAgIEdTb3Vy
Y2UqIHNvdXJjZSA9IGdfdGltZW91dF9zb3VyY2VfbmV3KDApOworICAgIGdfc291cmNlX3NldF9j
YWxsYmFjayhzb3VyY2UsIChHU291cmNlRnVuYykmUnVuTG9vcDo6cGVyZm9ybVdvcmssIHRoaXMs
IE5VTEwpOworICAgIGdfc291cmNlX2F0dGFjaChzb3VyY2UsIG1fcnVuTG9vcENvbnRleHQpOwor
CisgICAgZ19tYWluX2NvbnRleHRfd2FrZXVwKG1fcnVuTG9vcENvbnRleHQpOworfQorCitSdW5M
b29wOjpUaW1lckJhc2U6OlRpbWVyQmFzZShSdW5Mb29wKiBydW5Mb29wKQorICAgIDogbV9ydW5M
b29wKHJ1bkxvb3ApCisgICAgLCBtX3RpbWVyU291cmNlKDApCit7Cit9CisKK1J1bkxvb3A6OlRp
bWVyQmFzZTo6flRpbWVyQmFzZSgpCit7CisgICAgc3RvcCgpOworfQorCitnYm9vbGVhbiBSdW5M
b29wOjpUaW1lckJhc2U6Om9uZVNob3RUaW1lckZpcmVkKGdwb2ludGVyIGNvbnRleHQpCit7Cisg
ICAgUnVuTG9vcDo6VGltZXJCYXNlKiB0aW1lcmNsYXNzID0gc3RhdGljX2Nhc3Q8UnVuTG9vcDo6
VGltZXJCYXNlKj4oY29udGV4dCk7CisgICAgdGltZXJjbGFzcy0+ZmlyZWQoKTsKKyAgICByZXR1
cm4gRkFMU0U7Cit9CisKK2dib29sZWFuIFJ1bkxvb3A6OlRpbWVyQmFzZTo6cmVwZWF0aW5nVGlt
ZXJGaXJlZChncG9pbnRlciBjb250ZXh0KQoreworICAgIFJ1bkxvb3A6OlRpbWVyQmFzZSogdGlt
ZXJjbGFzcyA9IHN0YXRpY19jYXN0PFJ1bkxvb3A6OlRpbWVyQmFzZSo+KGNvbnRleHQpOworICAg
IHRpbWVyY2xhc3MtPmZpcmVkKCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgUnVuTG9v
cDo6VGltZXJCYXNlOjpzdGFydChkb3VibGUgbmV4dEZpcmVJbnRlcnZhbCwgZG91YmxlIHJlcGVh
dEludGVydmFsKQoreworICAgIGlmIChtX3RpbWVyU291cmNlKQorICAgICAgICBzdG9wKCk7CisK
KyAgICBpZiAocmVwZWF0SW50ZXJ2YWwpIHsKKyAgICAgICAgbV90aW1lclNvdXJjZSA9IGdfdGlt
ZW91dF9zb3VyY2VfbmV3KHN0YXRpY19jYXN0PGd1aW50PihyZXBlYXRJbnRlcnZhbCkpOworICAg
ICAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV90aW1lclNvdXJjZSwgKEdTb3VyY2VGdW5jKSZS
dW5Mb29wOjpUaW1lckJhc2U6OnJlcGVhdGluZ1RpbWVyRmlyZWQsIHRoaXMsIE5VTEwpOworICAg
IH0gZWxzZSB7CisgICAgICAgIG1fdGltZXJTb3VyY2UgPSBnX3RpbWVvdXRfc291cmNlX25ldyhz
dGF0aWNfY2FzdDxndWludD4obmV4dEZpcmVJbnRlcnZhbCkpOworICAgICAgICBnX3NvdXJjZV9z
ZXRfY2FsbGJhY2sobV90aW1lclNvdXJjZSwgKEdTb3VyY2VGdW5jKSZSdW5Mb29wOjpUaW1lckJh
c2U6Om9uZVNob3RUaW1lckZpcmVkLCB0aGlzLCBOVUxMKTsKKyAgICB9CisgICAgZ19zb3VyY2Vf
YXR0YWNoKG1fdGltZXJTb3VyY2UsIG1fcnVuTG9vcC0+bV9ydW5Mb29wQ29udGV4dCk7Cit9CisK
K3ZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpzdG9wKCkKK3sKKyAgICBpZiAoIW1fdGltZXJTb3Vy
Y2UpCisgICAgICAgIHJldHVybjsKKworICAgIGdfc291cmNlX2Rlc3Ryb3kobV90aW1lclNvdXJj
ZSk7CisgICAgbV90aW1lclNvdXJjZSA9IDA7Cit9CisKK2Jvb2wgUnVuTG9vcDo6VGltZXJCYXNl
Ojppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGltZXJTb3VyY2U/IHRydWUgOiBm
YWxzZTsKK30KSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAJKHJldmlzaW9u
IDUxNzE5KQpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKworI2luY2x1ZGUgIldLQmFzZS5oIgorCit2b2lk
IFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAg
bV9ldmVudENvbnRleHQgPSBnX21haW5fY29udGV4dF9uZXcoKTsKKyAgICBBU1NFUlQobV9ldmVu
dENvbnRleHQpOworICAgIG1fZXZlbnRMb29wID0gZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250
ZXh0LCBGQUxTRSk7CisgICAgQVNTRVJUKG1fZXZlbnRMb29wKTsKKyAgICBtX3dvcmtRdWV1ZVRo
cmVhZCA9IGNyZWF0ZVRocmVhZCgmV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWRCb2R5LCB0aGlz
LCBuYW1lKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7Cisg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRMb29wTG9jayk7CisKKyAgICBpZiAobV9ldmVu
dExvb3ApIHsKKyAgICAgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobV9ldmVudExvb3Ap
KQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX2V2ZW50TG9vcCk7CisKKyAgICAgICAg
Z19tYWluX2xvb3BfdW5yZWYobV9ldmVudExvb3ApOworICAgICAgICBtX2V2ZW50TG9vcCA9IDA7
CisgICAgfQorCisgICAgaWYgKG1fZXZlbnRDb250ZXh0KSB7CisgICAgICAgIGdfbWFpbl9jb250
ZXh0X3VucmVmKG1fZXZlbnRDb250ZXh0KTsKKyAgICAgICAgbV9ldmVudENvbnRleHQgPSAwOwor
ICAgIH0KK30KKwordm9pZCogV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWRCb2R5KHZvaWQgKmNv
bnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8V29ya1F1ZXVlKj4oY29udGV4dCktPndvcmtRdWV1
ZVRocmVhZEJvZHkoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXb3JrUXVldWU6OndvcmtR
dWV1ZVRocmVhZEJvZHkoKQoreworICAgIGdfbWFpbl9sb29wX3J1bihtX2V2ZW50TG9vcCk7Cit9
CisKK2NsYXNzIFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UgeworcHVibGljOgorICAgIEV2ZW50U291
cmNlKEdTb3VyY2UqIGRpc3BhdGNoU291cmNlLCBQYXNzT3duUHRyPFdvcmtJdGVtPiB3b3JrSXRl
bSwgV29ya1F1ZXVlKiB3b3JrUXVldWUpCisgICAgOiBtX2Rpc3BhdGNoU291cmNlKGRpc3BhdGNo
U291cmNlKQorICAgICwgbV93b3JrSXRlbSh3b3JrSXRlbSkKKyAgICAsIG1fd29ya1F1ZXVlKHdv
cmtRdWV1ZSkKKyAgICB7CisgICAgfQorCisgICAgR1NvdXJjZSogZGlzcGF0Y2hTb3VyY2UoKSB7
IHJldHVybiBtX2Rpc3BhdGNoU291cmNlOyB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9y
bVdvcmtPbmNlKGdwb2ludGVyIHNvdXJjZSkKKyAgICB7CisgICAgICAgIEV2ZW50U291cmNlKiBl
dmVudFNvdXJjZSA9IHN0YXRpY19jYXN0PEV2ZW50U291cmNlKj4oc291cmNlKTsKKyAgICAgICAg
V29ya1F1ZXVlKiBxdWV1ZSA9IGV2ZW50U291cmNlLT5tX3dvcmtRdWV1ZTsKKyAgICAgICAgewor
ICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7Cisg
ICAgICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgZXZlbnRTb3VyY2UtPm1fd29ya0l0ZW0tPmV4
ZWN1dGUoKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHN0YXRpYyBnYm9v
bGVhbiBjbG9zZUNvbm5lY3Rpb24oR0lPQ2hhbm5lbCogY2hhbm5lbCwgR0lPQ29uZGl0aW9uIGNv
bmRpdGlvbiwgZ3BvaW50ZXIgc291cmNlKQorICAgIHsKKyAgICAgICAgaWYgKChjb25kaXRpb24g
JiBHX0lPX0hVUCkgfHwgKGNvbmRpdGlvbiAmIEdfSU9fRVJSKSkgeworICAgICAgICAgICAgRXZl
bnRTb3VyY2UqIGV2ZW50U291cmNlID0gc3RhdGljX2Nhc3Q8RXZlbnRTb3VyY2UqPihzb3VyY2Up
OworICAgICAgICAgICAgV29ya1F1ZXVlKiBxdWV1ZSA9IGV2ZW50U291cmNlLT5tX3dvcmtRdWV1
ZTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIocXVl
dWUtPm1faXNWYWxpZE11dGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFs
aWQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGV2ZW50U291cmNlLT5tX3dvcmtJdGVtLT5leGVjdXRlKCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZ2Jvb2xlYW4g
cGVyZm9ybVdvcmsoR0lPQ2hhbm5lbCogY2hhbm5lbCwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwg
Z3BvaW50ZXIgc291cmNlKSAKKyAgICB7CisgICAgICAgIGlmIChjb25kaXRpb24gJiBHX0lPX0lO
KSB7CisgICAgICAgICAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxF
dmVudFNvdXJjZSo+KHNvdXJjZSk7CisgICAgICAgICAgICBXb3JrUXVldWUqIHF1ZXVlID0gZXZl
bnRTb3VyY2UtPm1fd29ya1F1ZXVlOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihxdWV1ZS0+bV9pc1ZhbGlkTXV0ZXgpOworICAgICAgICAgICAgICAg
IGlmICghcXVldWUtPm1faXNWYWxpZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV2ZW50U291cmNlLT5tX3dvcmtJdGVtLT5l
eGVjdXRlKCk7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gRkFMU0U7CisKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgZGVsZXRlRXZlbnRT
b3VyY2UoZ3BvaW50ZXIgc291cmNlKSAKKyAgICB7CisgICAgICAgIEV2ZW50U291cmNlKiBldmVu
dFNvdXJjZSA9IHN0YXRpY19jYXN0PEV2ZW50U291cmNlKj4oc291cmNlKTsKKyAgICAgICAgZGVs
ZXRlIGV2ZW50U291cmNlOworICAgIH0KKyAgIAorcHVibGljOgorICAgIEdTb3VyY2UqIG1fZGlz
cGF0Y2hTb3VyY2U7CisgICAgUGFzc093blB0cjxXb3JrSXRlbT4gbV93b3JrSXRlbTsKKyAgICBX
b3JrUXVldWUqIG1fd29ya1F1ZXVlOworfTsKKwordm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZl
bnRTb3VyY2VIYW5kbGVyKGludCBmZCwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwgUGFzc093blB0
cjxXb3JrSXRlbT4gaXRlbSkKK3sKKyAgICBHSU9DaGFubmVsKiBjaGFubmVsID0gZ19pb19jaGFu
bmVsX3VuaXhfbmV3KGZkKTsKKyAgICBHU291cmNlKiBkaXNwYXRjaFNvdXJjZSA9IGdfaW9fY3Jl
YXRlX3dhdGNoKGNoYW5uZWwsIGNvbmRpdGlvbik7CisgICAgQVNTRVJUKGRpc3BhdGNoU291cmNl
KTsKKyAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZGlzcGF0
Y2hTb3VyY2UsIGl0ZW0sIHRoaXMpOworICAgCisgICAgaWYgKGNvbmRpdGlvbiA9PSBHX0lPX0lO
KSB7CisgICAgICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNwYXRjaFNvdXJjZSwgKEdTb3Vy
Y2VGdW5jKSYgV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmssIGV2ZW50U291cmNl
LCAmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3VyY2UpOworICAgIH0gZWxz
ZSBpZiAoY29uZGl0aW9uID09IChHX0lPX0hVUCB8IEdfSU9fRVJSKSkgeworICAgICAgICBnX3Nv
dXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hTb3VyY2UsIChHU291cmNlRnVuYykmV29ya1F1ZXVl
OjpFdmVudFNvdXJjZTo6Y2xvc2VDb25uZWN0aW9uLCBldmVudFNvdXJjZSwgJldvcmtRdWV1ZTo6
RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOworICAgICAgICBBU1NFUlQo
IW1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKGZkKSk7CisgICAgICAgIFZlY3RvcjxFdmVudFNvdXJj
ZSo+IHNvdXJjZXM7CisgICAgICAgIEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50U291
cmNlcy5maW5kKGZkKTsKKyAgICAgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSAK
KyAgICAgICAgICAgIHNvdXJjZXMgPSBpdC0+c2Vjb25kOworCisgICAgICAgIHNvdXJjZXMuYXBw
ZW5kKGV2ZW50U291cmNlKTsKKyAgICAgICAgbV9ldmVudFNvdXJjZXMuc2V0KGZkLCBzb3VyY2Vz
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50TG9v
cExvY2spOworICAgICAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3VyY2UsIG1fZXZlbnRD
b250ZXh0KTsKKyAgICB9Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3Vy
Y2VIYW5kbGVyKGludCBmZCkKK3sKKyAgICBBU1NFUlQoZmQpOworICAgIAorICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOworICAgIAorICAgIEV2ZW50U291cmNlSXRl
cmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZkKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9l
dmVudFNvdXJjZXMuZW5kKCkpOworICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhm
ZCkpOworCisgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7CisgICAgICAgIFZl
Y3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXM7CisgICAgICAgIHNvdXJjZXMgPSBpdC0+c2Vjb25k
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNvdXJjZXMuc2l6ZSgpOyBp
KyspIHsKKyAgICAgICAgICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHNvdXJjZXNbaV07
CisgICAgICAgICAgICBHU291cmNlKiBnU291cmNlID0gZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291
cmNlKCk7CisgICAgICAgICAgICBnX3NvdXJjZV9kZXN0cm95KGdTb3VyY2UpOworICAgICAgICB9
CisgICAgICAgIG1fZXZlbnRTb3VyY2VzLnJlbW92ZShpdCk7CisgICAgfQorfQorCit2b2lkIFdv
cmtRdWV1ZTo6c2NoZWR1bGVXb3JrKFBhc3NPd25QdHI8V29ya0l0ZW0+IGl0ZW0pCit7CisgICAg
R1NvdXJjZSogZGlzcGF0Y2hTb3VyY2UgPSBnX3RpbWVvdXRfc291cmNlX25ldygwKTsKKyAgICBB
U1NFUlQoZGlzcGF0Y2hTb3VyY2UpOworICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5l
dyBFdmVudFNvdXJjZShkaXNwYXRjaFNvdXJjZSwgaXRlbSwgdGhpcyk7CisgICAgCisgICAgZ19z
b3VyY2Vfc2V0X2NhbGxiYWNrKGRpc3BhdGNoU291cmNlLCAoR1NvdXJjZUZ1bmMpJldvcmtRdWV1
ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSwgZXZlbnRTb3VyY2UsICZXb3JrUXVldWU6
OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJjZSk7CisgICAgeworICAgICAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9ldmVudExvb3BMb2NrKTsKKyAgICAgICAgZ19zb3VyY2VfYXR0YWNoKGRp
c3BhdGNoU291cmNlLCBtX2V2ZW50Q29udGV4dCk7CisgICAgfQorfQpJbmRleDogV2ViS2l0Mi9Q
bGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgJKHJldmlzaW9uIDUxNzA1KQor
KysgV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgJKHJldmlzaW9u
IDUxNzE5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEw
IE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw2ICs0MCw4IEBACiB0eXBlZGVmIEhBTkRMRSBQ
bGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwogI2VsaWYgUExBVEZPUk0oUVQpCiB0eXBlZGVmIFFQ
cm9jZXNzKiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOworI2VsaWYgUExBVEZPUk0oR1RLKQor
dHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwogI2VuZGlmCiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdCAKSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAkocmV2aXNpb24gNTE3MDUp
CisrKyBXZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCShyZXZpc2lvbiA1MTcxOSkKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2Jp
bGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzAsNiArMzEsOCBAQAogI2lmIEhBVkUoRElTUEFUQ0hfSCkKICNpbmNsdWRl
IDxkaXNwYXRjaC9kaXNwYXRjaC5oPgogI2VuZGlmCisjZWxpZiBQTEFURk9STShHVEspCisjaW5j
bHVkZSA8Z2xpYi5oPgogI2VuZGlmCiAKICNpbmNsdWRlICJXb3JrSXRlbS5oIgpAQCAtNzQsNiAr
NzcsOSBAQAogICAgIHZvaWQgZGlzY29ubmVjdFNpZ25hbChRT2JqZWN0KiwgY29uc3QgY2hhciog
c2lnbmFsKTsKIAogICAgIHZvaWQgbW92ZVNvY2tldFRvV29ya1RocmVhZChRTG9jYWxTb2NrZXQq
KTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5k
bGVyKGludCwgR0lPQ29uZGl0aW9uLCBQYXNzT3duUHRyPFdvcmtJdGVtPik7CisgICAgdm9pZCB1
bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAg
LTE0Niw2ICsxNTIsMTggQEAKICAgICBIYXNoTWFwPFFPYmplY3QqLCBXb3JrSXRlbVF0Kj4gbV9z
aWduYWxMaXN0ZW5lcnM7CiAgICAgUVRocmVhZCogbV93b3JrVGhyZWFkOwogICAgIGZyaWVuZCBj
bGFzcyBXb3JrSXRlbVF0OworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIHN0YXRpYyB2b2lkKiB3
b3JrUXVldWVUaHJlYWRCb2R5KHZvaWQqKTsKKyAgICB2b2lkIHdvcmtRdWV1ZVRocmVhZEJvZHko
KTsKKworICAgIFRocmVhZElkZW50aWZpZXIgbV93b3JrUXVldWVUaHJlYWQ7CisgICAgR01haW5D
b250ZXh0KiBtX2V2ZW50Q29udGV4dDsKKyAgICBNdXRleCBtX2V2ZW50TG9vcExvY2s7CisgICAg
R01haW5Mb29wKiBtX2V2ZW50TG9vcDsKKyAgICBNdXRleCBtX2V2ZW50U291cmNlc0xvY2s7Cisg
ICAgY2xhc3MgRXZlbnRTb3VyY2U7CisgICAgSGFzaE1hcDxpbnQsIFZlY3RvcjxFdmVudFNvdXJj
ZSo+ID4gbV9ldmVudFNvdXJjZXM7CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVmVjdG9yPEV2
ZW50U291cmNlKj4gPjo6aXRlcmF0b3IgRXZlbnRTb3VyY2VJdGVyYXRvcjsgCiAjZW5kaWYKIH07
CiAKSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdl
TG9nCShyZXZpc2lvbiA1MTcwNSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MTcx
OSkKQEAgLTEsMyArMSwzMDMgQEAKKzIwMTAtMTAtMjggIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpA
bW90b3JvbGEuY29tPiBhbmQgUmF2aSBLYXNpYmhhdGxhICA8cmF2aS5rYXNpYmhhdGxhQG1vdG9y
b2xhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgUnVuTG9vcCBhbmQgV29ya1F1ZXVlIGltcGxlbWVudGF0aW9uIGZvciBXZWJLaXQyIEdU
SyBwb3J0LgorICAgICAgICAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ4NTA3KQorCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmg6IFVOSVhf
WDExIHNwZWNpZmljIGNoYW5nZXMgZm9yIEdUSyBwb3J0LgorICAgICAgICAqIFBsYXRmb3JtL1Bs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaDogVU5JWF9YMTEgc3BlY2lmaWMgY2hhbmdlcyBmb3Ig
R1RLIHBvcnQuCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9ndGs6IEFkZGVkLgorICAgICAg
ICAqIFBsYXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25HdGsuY3BwOiBBZGRlZC4gQ29ubmVj
dGlvbiBjbGFzcyBpbXBsZW1lbnRhdGlvbiBmb3IgR1RLIHBvcnQgKFVOSVhfWDExIHNwZWNpZmlj
KS4KKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAg
ICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cmVhZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChDb3Jl
SVBDOjpDb25uZWN0aW9uOjpvcGVuKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBs
YXRmb3JtQ2FuU2VuZE91dGdvaW5nTWVzc2FnZXMpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVj
dGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZSk6CisgICAgICAgICogUGxhdGZvcm0vUnVuTG9vcC5o
OiBHVEsgcG9ydCBzcGVjaWZpYyBjaGFuZ2VzLgorICAgICAgICAqIFBsYXRmb3JtL1dvcmtRdWV1
ZS5oOiBHVEsgcG9ydCBzcGVjaWZpYyBjaGFuZ2VzLgorICAgICAgICAqIFBsYXRmb3JtL2d0azog
QWRkZWQuCisgICAgICAgICogUGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwOiBBZGRlZC4gUnVu
cyBhbiBldmVudCBsb29wIHVzaW5nIEdNYWluTG9vcCBhbmQgaGFuZGxlcyB0aGUgaW5jb21pbmcg
bWVzc2FnZXMuCisgICAgICAgIChSdW5Mb29wOjpSdW5Mb29wKToKKyAgICAgICAgKFJ1bkxvb3A6
On5SdW5Mb29wKToKKyAgICAgICAgKFJ1bkxvb3A6OnJ1bik6CisgICAgICAgIChSdW5Mb29wOjpt
YWluTG9vcCk6CisgICAgICAgIChSdW5Mb29wOjpzdG9wKToKKyAgICAgICAgKFJ1bkxvb3A6OnBl
cmZvcm1Xb3JrKToKKyAgICAgICAgKFJ1bkxvb3A6Ondha2VVcCk6CisgICAgICAgIChSdW5Mb29w
OjpUaW1lckJhc2U6OlRpbWVyQmFzZSk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJhc2U6On5U
aW1lckJhc2UpOgorICAgICAgICAoUnVuTG9vcDo6VGltZXJCYXNlOjpvbmVTaG90VGltZXJGaXJl
ZCk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJhc2U6OnJlcGVhdGluZ1RpbWVyRmlyZWQpOgor
ICAgICAgICAoUnVuTG9vcDo6VGltZXJCYXNlOjpzdGFydCk6CisgICAgICAgIChSdW5Mb29wOjpU
aW1lckJhc2U6OnN0b3ApOgorICAgICAgICAoUnVuTG9vcDo6VGltZXJCYXNlOjppc0FjdGl2ZSk6
CisgICAgICAgICogUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHA6IEFkZGVkLiBDcmVhdGVz
IGEgdGhyZWFkIGFuZCBwb2xscyBvbiBhIGdpdmVuIGZkIHVzaW5nIEdJT0NoYW5uZWwuCisgICAg
ICAgIERpc3BhdGNoZXMgdGhlIG9idGFpbmVkIG1lc3NhZ2VzIHRvIFJ1bkxvb3AncyBHTWFpbkxv
b3AuCisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChX
b3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChXb3JrUXVldWU6OndvcmtR
dWV1ZVRocmVhZEJvZHkpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6RXZlbnRT
b3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGlzcGF0Y2hTb3VyY2Up
OgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtPbmNlKToKKyAg
ICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmNsb3NlQ29ubmVjdGlvbik6CisgICAgICAg
IChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29yayk6CisgICAgICAgIChXb3JrUXVl
dWU6OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6
OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdp
c3RlckV2ZW50U291cmNlSGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OnNjaGVkdWxlV29y
ayk6CisKIDIwMTAtMTAtMjcgIEtpbW1vIEtpbm51bmVuICA8a2ltbW8udC5raW5udW5lbkBub2tp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4K
</data>
<flag name="review"
          id="62968"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74227</attachid>
            <date>2010-11-18 05:17:17 -0800</date>
            <delta_ts>2010-11-18 06:08:32 -0800</delta_ts>
            <desc>RunLoop WorkQueue Connection class implementation</desc>
            <filename>complete_runloop.patch</filename>
            <type>text/plain</type>
            <size>25753</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
ODA1MWY4OS4uM2I0ODJkOSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMC0xMC0yOCAgQW1ydXRoIFJhaiAg
PGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIEthc2liaGF0bGEgIDxyYXZpLmthc2li
aGF0bGFAbW90b3JvbGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBSdW5Mb29wIGFuZCBXb3JrUXVldWUgaW1wbGVtZW50YXRpb24gZm9y
IFdlYktpdDIgR1RLIHBvcnQuCisgICAgICAgIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDg1MDcpCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rp
b24uaDogVU5JWF9YMTEgc3BlY2lmaWMgY2hhbmdlcyBmb3IgR1RLIHBvcnQuCisgICAgICAgICog
UGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oOiBVTklYX1gxMSBzcGVjaWZpYyBj
aGFuZ2VzIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL2d0azogQWRk
ZWQuCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9ndGsvQ29ubmVjdGlvbkd0ay5jcHA6IEFk
ZGVkLiBDb25uZWN0aW9uIGNsYXNzIGltcGxlbWVudGF0aW9uIGZvciBHVEsgcG9ydCAoVU5JWF9Y
MTEgc3BlY2lmaWMpLgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0
aWFsaXplKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxpZGF0
ZSk6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpyZWFkRXZlbnRIYW5kbGVyKToKKyAg
ICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246Om9wZW4pOgorICAgICAgICAoQ29yZUlQQzo6Q29u
bmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdlcyk6CisgICAgICAgIChDb3Jl
SVBDOjpDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKToKKyAgICAgICAgKiBQbGF0Zm9y
bS9SdW5Mb29wLmg6IEdUSyBwb3J0IHNwZWNpZmljIGNoYW5nZXMuCisgICAgICAgICogUGxhdGZv
cm0vV29ya1F1ZXVlLmg6IEdUSyBwb3J0IHNwZWNpZmljIGNoYW5nZXMuCisgICAgICAgICogUGxh
dGZvcm0vZ3RrOiBBZGRlZC4KKyAgICAgICAgKiBQbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHA6
IEFkZGVkLiBSdW5zIGFuIGV2ZW50IGxvb3AgdXNpbmcgR01haW5Mb29wIGFuZCBoYW5kbGVzIHRo
ZSBpbmNvbWluZyBtZXNzYWdlcy4KKyAgICAgICAgKFJ1bkxvb3A6OlJ1bkxvb3ApOgorICAgICAg
ICAoUnVuTG9vcDo6flJ1bkxvb3ApOgorICAgICAgICAoUnVuTG9vcDo6cnVuKToKKyAgICAgICAg
KFJ1bkxvb3A6Om1haW5Mb29wKToKKyAgICAgICAgKFJ1bkxvb3A6OnN0b3ApOgorICAgICAgICAo
UnVuTG9vcDo6cGVyZm9ybVdvcmspOgorICAgICAgICAoUnVuTG9vcDo6d2FrZVVwKToKKyAgICAg
ICAgKFJ1bkxvb3A6OlRpbWVyQmFzZTo6VGltZXJCYXNlKToKKyAgICAgICAgKFJ1bkxvb3A6OlRp
bWVyQmFzZTo6flRpbWVyQmFzZSk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJhc2U6Om9uZVNo
b3RUaW1lckZpcmVkKToKKyAgICAgICAgKFJ1bkxvb3A6OlRpbWVyQmFzZTo6cmVwZWF0aW5nVGlt
ZXJGaXJlZCk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJhc2U6OnN0YXJ0KToKKyAgICAgICAg
KFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RvcCk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJhc2U6
OmlzQWN0aXZlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcDogQWRk
ZWQuIENyZWF0ZXMgYSB0aHJlYWQgYW5kIHBvbGxzIG9uIGEgZ2l2ZW4gZmQgdXNpbmcgR0lPQ2hh
bm5lbC4KKyAgICAgICAgRGlzcGF0Y2hlcyB0aGUgb2J0YWluZWQgbWVzc2FnZXMgdG8gUnVuTG9v
cCdzIEdNYWluTG9vcC4KKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToK
KyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6d29ya1F1ZXVlVGhyZWFkQm9keSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291
cmNlOjpFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkaXNw
YXRjaFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29y
a09uY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6Y2xvc2VDb25uZWN0aW9u
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKToKKyAgICAg
ICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAgICAgICAoV29ya1F1
ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
c2NoZWR1bGVXb3JrKToKKwogMjAxMC0xMC0xOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQg
YS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oIGIvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAppbmRleCBlNTE0NDUyLi5kODVjZmI5IDEwMDY0NAotLS0g
YS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCisrKyBiL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
ODYsNiArODcsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY3JlYXRlU2VydmVyQW5kQ2xp
ZW50SWRlbnRpZmllcnMoSWRlbnRpZmllciYgc2VydmVySWRlbnRpZmllciwgSWRlbnRpZmllciYg
Y2xpZW50SWRlbnRpZmllcik7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICB0eXBlZGVmIGNvbnN0
IFFTdHJpbmcgSWRlbnRpZmllcjsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICB0eXBlZGVmIGlu
dCBJZGVudGlmaWVyOwogI2VuZGlmCiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb25uZWN0aW9u
PiBjcmVhdGVTZXJ2ZXJDb25uZWN0aW9uKElkZW50aWZpZXIsIENsaWVudCosIFJ1bkxvb3AqIGNs
aWVudFJ1bkxvb3ApOwpAQCAtMjU3LDYgKzI2MCwxMCBAQCBwcml2YXRlOgogICAgIHNpemVfdCBt
X2N1cnJlbnRNZXNzYWdlU2l6ZTsKICAgICBRTG9jYWxTb2NrZXQqIG1fc29ja2V0OwogICAgIFFT
dHJpbmcgbV9zZXJ2ZXJOYW1lOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQgcmVhZEV2
ZW50SGFuZGxlcigpOworICAgIGludCBtX3NvY2tldDsKKyAgICBzaXplX3QgbV9jdXJyZW50TWVz
c2FnZVNpemU7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy9ndGsvQ29ubmVjdGlvbkd0ay5jcHAgYi9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvZ3Rr
L0Nvbm5lY3Rpb25HdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVh
MzFjOGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvZ3RrL0Nv
bm5lY3Rpb25HdGsuY3BwCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdo
dCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKworI2luY2x1ZGUgIkFyZ3VtZW50
RW5jb2Rlci5oIgorI2luY2x1ZGUgIldvcmtJdGVtLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNp
bmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lv
Y3RsLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKKwor
c3RhdGljIHNpemVfdCBieXRlc0F2YWlsYWJsZShpbnQgZmQpCit7CisgICAgQVNTRVJUKGZkID4g
MCk7CisgICAgc2l6ZV90IGF2YWlsYWJsZSA9IC0xOworICAgIGlmIChpb2N0bChmZCwgRklPTlJF
QUQsICZhdmFpbGFibGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOyAKKyAgICByZXR1cm4gYXZh
aWxhYmxlOworfQorCitzdGF0aWMgYm9vbCByZWFkQnl0ZXNGcm9tU29ja2V0KGludCBmZCwgdm9p
ZCogcHRyLCBzaXplX3QgbGVuZ3RoKQoreworICAgIEFTU0VSVChmZCA+IDApOworICAgIEFTU0VS
VChidWZmZXIpOworICAgIEFTU0VSVChsZW5ndGggPiAwKTsKKworICAgIHNzaXplX3QgbnVtYmVy
T2ZCeXRlc1JlYWQgPSAwOworICAgIHNpemVfdCBwZW5kaW5nQnl0ZXNUb1JlYWQgPSBsZW5ndGg7
CisgICAgdWludDhfdCogYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocHRyKTsK
KyAgICAvLyBLZWVwIHJlYWRpbmcgZnJvbSB0aGUgc29ja2V0IHRpbGwgdGhlIGNvbXBsZXRlIG1l
c3NhZ2UgaGFzIGJlZW4gcmVhZAorICAgIHdoaWxlIChwZW5kaW5nQnl0ZXNUb1JlYWQgPiAwKSB7
CisgICAgICAgIGlmICgobnVtYmVyT2ZCeXRlc1JlYWQgPSByZWFkKGZkLCBidWZmZXIsIHBlbmRp
bmdCeXRlc1RvUmVhZCkpIDwgMCkgeworICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQor
ICAgICAgICAgICAgICAgIG51bWJlck9mQnl0ZXNSZWFkID0gMDsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVy
ICs9IG51bWJlck9mQnl0ZXNSZWFkOworICAgICAgICBwZW5kaW5nQnl0ZXNUb1JlYWQgLT0gbnVt
YmVyT2ZCeXRlc1JlYWQ7CisgICAgfQorCisgICAgLy8gcmVhZCBvcGVyYXRpb24gZmFpbGVkIGlm
IGNvbXBsZXRlIG1lc3NhZ2UgaXMgbm90IHJlYWQKKyAgICByZXR1cm4gIXBlbmRpbmdCeXRlc1Rv
UmVhZDsKK30KKworc3RhdGljIGJvb2wgd3JpdGVCeXRlc1RvU29ja2V0KGludCBmZCwgdm9pZCog
cHRyLCBzaXplX3QgbGVuZ3RoKQoreworICAgIEFTU0VSVChmZCA+IDApOworICAgIEFTU0VSVChi
dWZmZXIpOworICAgIEFTU0VSVChsZW5ndGggPiAwKTsKKworICAgIHNzaXplX3QgbnVtYmVyT2ZC
eXRlc1dyaXR0ZW4gPSAwOworICAgIHNpemVfdCBwZW5kaW5nQnl0ZXNUb1dyaXRlID0gbGVuZ3Ro
OworICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHB0cik7
CisgICAgLy8gS2VlcCB3cml0aW5nIHRvIHRoZSBzb2NrZXQgdGlsbCB0aGUgY29tcGxldGUgbWVz
c2FnZSBoYXMgYmVlbiB3cml0dGVuCisgICAgd2hpbGUgKHBlbmRpbmdCeXRlc1RvV3JpdGUgPiAw
KSB7CisgICAgICAgIGlmICgobnVtYmVyT2ZCeXRlc1dyaXR0ZW4gPSB3cml0ZShmZCwgYnVmZmVy
LCBwZW5kaW5nQnl0ZXNUb1dyaXRlKSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0g
RUlOVFIpCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZCeXRlc1dyaXR0ZW4gPSAwOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBidWZmZXIgKz0gbnVtYmVyT2ZCeXRlc1dyaXR0ZW47CisgICAgICAgIHBlbmRpbmdCeXRl
c1RvV3JpdGUgLT0gbnVtYmVyT2ZCeXRlc1dyaXR0ZW47CisgICAgfQorCisgICAgLy8gd3JpdGUg
b3BlcmF0aW9uIGZhaWxlZCBpZiBjb21wbGV0ZSBtZXNzYWdlIGlzIG5vdCB3cml0dGVuCisgICAg
cmV0dXJuICFwZW5kaW5nQnl0ZXNUb1dyaXRlOworfQorCit2b2lkIENvbm5lY3Rpb246OnBsYXRm
b3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgbV9jdXJyZW50TWVz
c2FnZVNpemUgPSAwOworICAgIG1fc29ja2V0ID0gaWRlbnRpZmllcjsKKyAgICBtX2lzQ29ubmVj
dGVkID0gdHJ1ZTsKK30KKwordm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUludmFsaWRhdGUoKQor
eworICAgIGlmICghbV9pc0Nvbm5lY3RlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb25u
ZWN0aW9uUXVldWUudW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihtX3NvY2tldCk7CisgICAg
aWYgKG1fc29ja2V0ID4gMCkgeworICAgICAgICBjbG9zZShtX3NvY2tldCk7CisgICAgICAgIG1f
c29ja2V0ID0gLTE7CisgICAgfQorCisgICAgbV9pc0Nvbm5lY3RlZCA9IGZhbHNlOworfQorCit2
b2lkIENvbm5lY3Rpb246OnJlYWRFdmVudEhhbmRsZXIoKQoreworICAgIGlmIChtX3NvY2tldCA8
IDApCisgICAgICAgIHJldHVybjsKKworICAgIHVpbnQ4X3Qgc2l6ZUJ1ZmZlcltzaXplb2Yoc2l6
ZV90KV07CisgICAgbWVtc2V0KHNpemVCdWZmZXIsIDAsIHNpemVvZihzaXplX3QpKTsKKyAgICB3
aGlsZSAoYnl0ZXNBdmFpbGFibGUobV9zb2NrZXQpID49IHNpemVvZihzaXplX3QpKSB7CisgICAg
ICAgIGlmICghbV9jdXJyZW50TWVzc2FnZVNpemUgJiYgcmVhZEJ5dGVzRnJvbVNvY2tldChtX3Nv
Y2tldCwgc2l6ZUJ1ZmZlciwgc2l6ZW9mKHNpemVfdCkpKQorICAgICAgICAgICAgbV9jdXJyZW50
TWVzc2FnZVNpemUgPSAqcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPihzaXplQnVmZmVyKTsKKwor
ICAgICAgICBpZiAoYnl0ZXNBdmFpbGFibGUobV9zb2NrZXQpIDwgbV9jdXJyZW50TWVzc2FnZVNp
emUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZl
cjsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShtX2N1cnJlbnRNZXNzYWdlU2l6ZSk7CisKKyAgICAg
ICAgaWYgKCFyZWFkQnl0ZXNGcm9tU29ja2V0KG1fc29ja2V0LCBidWZmZXIuZGF0YSgpLCBtX2N1
cnJlbnRNZXNzYWdlU2l6ZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gTWVz
c2FnZSByZWNlaXZlZCBjb21wbGV0ZWx5LiBQcm9jZXNzIHRoZSBtZXNzYWdlIG5vdy4KKyAgICAg
ICAgc2l6ZV90IHJlYWxCdWZmZXJTaXplID0gbV9jdXJyZW50TWVzc2FnZVNpemUgLSBzaXplb2Yo
TWVzc2FnZUlEKTsKKyAgICAgICAgdW5zaWduZWQgbWVzc2FnZUlEID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQqPihidWZmZXIuZGF0YSgpICsgcmVhbEJ1ZmZlclNpemUpOworCisgICAgICAg
IHByb2Nlc3NJbmNvbWluZ01lc3NhZ2UoTWVzc2FnZUlEOjpmcm9tSW50KG1lc3NhZ2VJRCksIGFk
b3B0UHRyKG5ldyBBcmd1bWVudERlY29kZXIoYnVmZmVyLmRhdGEoKSwgcmVhbEJ1ZmZlclNpemUp
KSk7CisKKyAgICAgICAgLy8gcHJlcGFyZSB0byByZWFkIHRoZSBuZXh0IG1lc3NhZ2UKKyAgICAg
ICAgbV9jdXJyZW50TWVzc2FnZVNpemUgPSAwOworICAgICAgICBtZW1zZXQoc2l6ZUJ1ZmZlciwg
MCwgc2l6ZW9mKHNpemVfdCkpOworICAgIH0KK30KKworYm9vbCBDb25uZWN0aW9uOjpvcGVuKCkK
K3sKKyAgICBpbnQgZmxhZ3MgPSBmY250bChtX3NvY2tldCwgRl9HRVRGTCwgMCk7CisgICAgZmNu
dGwobV9zb2NrZXQsIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSyk7CisKKyAgICAvLyBSZWdp
c3RlciBjYWxsYmFja3MgZm9yIGNvbm5lY3Rpb24gdGVybWluYXRpb24gYW5kIGlucHV0IGRhdGEg
b24gdGhlIFdvcmtRdWV1ZQorICAgIG1fY29ubmVjdGlvblF1ZXVlLnJlZ2lzdGVyRXZlbnRTb3Vy
Y2VIYW5kbGVyKG1fc29ja2V0LCAoR19JT19IVVAgfCBHX0lPX0VSUiksIFdvcmtJdGVtOjpjcmVh
dGUodGhpcywgJkNvbm5lY3Rpb246OmNvbm5lY3Rpb25EaWRDbG9zZSkpOworICAgIG1fY29ubmVj
dGlvblF1ZXVlLnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKG1fc29ja2V0LCBHX0lPX0lOLCBX
b3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpyZWFkRXZlbnRIYW5kbGVyKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0
Z29pbmdNZXNzYWdlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX3NvY2tldCA+IDApOworfQor
Citib29sIENvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJ
RCwgUGFzc093blB0cjxBcmd1bWVudEVuY29kZXI+IGFyZ3VtZW50cykKK3sKKyAgICBpZiAobV9z
b2NrZXQgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBwdXQgdGhlIG1l
c3NhZ2UgSUQgbGFzdC4KKyAgICBhcmd1bWVudHMtPmVuY29kZVVJbnQzMihtZXNzYWdlSUQudG9J
bnQoKSk7CisKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgp
OworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICBidWZmZXIuYXBwZW5kKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZidWZmZXJTaXplKSwgc2l6ZW9mKHNpemVfdCkpOworICAg
IGJ1ZmZlci5hcHBlbmQoYXJndW1lbnRzLT5idWZmZXIoKSwgYXJndW1lbnRzLT5idWZmZXJTaXpl
KCkpOworCisgICAgcmV0dXJuIHdyaXRlQnl0ZXNUb1NvY2tldChtX3NvY2tldCwgYnVmZmVyLmRh
dGEoKSwgYnVmZmVyLnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIENvcmVJUEMKZGlmZiAt
LWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIGIvV2Vi
S2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgKaW5kZXggYWQxZTM5NC4u
MDM2MzY5MiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVu
dGlmaWVyLmgKKysrIGIvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
LmgKQEAgLTM5LDYgKzM5LDggQEAgdHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlm
aWVyOwogdHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKICNlbGlmIFBM
QVRGT1JNKFFUKQogdHlwZWRlZiBRUHJvY2VzcyogUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsK
KyNlbGlmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgcGlkX3QgUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
ZmllcjsKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQgCmRpZmYgLS1naXQgYS9XZWJL
aXQyL1BsYXRmb3JtL1J1bkxvb3AuaCBiL1dlYktpdDIvUGxhdGZvcm0vUnVuTG9vcC5oCmluZGV4
IDVkOTY5ODMuLjc5MjZlMTEgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvUGxhdGZvcm0vUnVuTG9vcC5o
CisrKyBiL1dlYktpdDIvUGxhdGZvcm0vUnVuTG9vcC5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMyLDYgKzMzLDEyIEBACiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpZiBQ
TEFURk9STShHVEspCit0eXBlZGVmIHN0cnVjdCBfR1NvdXJjZSBHU291cmNlOwordHlwZWRlZiBz
dHJ1Y3QgX0dNYWluTG9vcCBHTWFpbkxvb3A7Cit0eXBlZGVmIHN0cnVjdCBfR01haW5Db250ZXh0
IEdNYWluQ29udGV4dDsKK3R5cGVkZWYgaW50IGdib29sZWFuOworI2VuZGlmCiAKIGNsYXNzIFdv
cmtJdGVtOwogCkBAIC03Niw2ICs4MywxMSBAQCBwdWJsaWM6CiAjZWxpZiBQTEFURk9STShRVCkK
ICAgICAgICAgc3RhdGljIHZvaWQgdGltZXJGaXJlZChSdW5Mb29wKiwgaW50IElEKTsKICAgICAg
ICAgaW50IG1fSUQ7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgICAgIHN0YXRpYyBnYm9vbGVh
biBvbmVTaG90VGltZXJGaXJlZChSdW5Mb29wOjpUaW1lckJhc2UqKTsKKyAgICAgICAgc3RhdGlj
IGdib29sZWFuIHJlcGVhdGluZ1RpbWVyRmlyZWQoUnVuTG9vcDo6VGltZXJCYXNlKik7CisgICAg
ICAgIHZvaWQgcmVzZXRUaW1lclNvdXJjZSgpOworICAgICAgICBHU291cmNlKiBtX3RpbWVyU291
cmNlOwogI2VuZGlmCiAgICAgfTsKIApAQCAtMTI3LDYgKzEzOSwxMyBAQCBwcml2YXRlOgogICAg
IFRpbWVyTWFwIG1fYWN0aXZlVGltZXJzOwogICAgIGNsYXNzIFRpbWVyT2JqZWN0OwogICAgIFRp
bWVyT2JqZWN0KiBtX3RpbWVyT2JqZWN0OworI2VsaWYgUExBVEZPUk0oR1RLKQorcHVibGljOgor
ICAgIHN0YXRpYyBnYm9vbGVhbiBxdWV1ZVdvcmsoUnVuTG9vcCopOworICAgIEdNYWluTG9vcCog
bWFpbkxvb3AoKTsKK3ByaXZhdGU6CisgICAgR01haW5Db250ZXh0KiBtX3J1bkxvb3BDb250ZXh0
OworICAgIEdNYWluTG9vcCogbV9ydW5Mb29wTWFpbjsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0
IGEvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaCBiL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1
ZXVlLmgKaW5kZXggZjdjN2RjYS4uNmNmZDZiOCAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9QbGF0Zm9y
bS9Xb3JrUXVldWUuaAorKysgYi9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQzLDYgKzQ0LDkgQEAKIGNsYXNzIFFMb2NhbFNvY2tldDsKIGNsYXNzIFFPYmpl
Y3Q7CiBjbGFzcyBRVGhyZWFkOworI2VsaWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBzdHJ1Y3Qg
X0dNYWluQ29udGV4dCBHTWFpbkNvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBfR01haW5Mb29wIEdN
YWluTG9vcDsKICNlbmRpZgogCiBjbGFzcyBXb3JrUXVldWUgewpAQCAtNzQsNiArNzgsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkaXNjb25uZWN0U2lnbmFsKFFPYmplY3QqLCBjb25zdCBjaGFyKiBz
aWduYWwpOwogCiAgICAgdm9pZCBtb3ZlU29ja2V0VG9Xb3JrVGhyZWFkKFFMb2NhbFNvY2tldCop
OworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQgcmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRs
ZXIoaW50LCBpbnQsIFBhc3NPd25QdHI8V29ya0l0ZW0+KTsKKyAgICB2b2lkIHVucmVnaXN0ZXJF
dmVudFNvdXJjZUhhbmRsZXIoaW50KTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMTQ2LDYgKzE1
MywxOCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8UU9iamVjdCosIFdvcmtJdGVtUXQqPiBtX3Np
Z25hbExpc3RlbmVyczsKICAgICBRVGhyZWFkKiBtX3dvcmtUaHJlYWQ7CiAgICAgZnJpZW5kIGNs
YXNzIFdvcmtJdGVtUXQ7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgc3RhdGljIHZvaWQqIHN0
YXJ0V29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSopOworICAgIHZvaWQgd29ya1F1ZXVlVGhyZWFk
Qm9keSgpOworCisgICAgVGhyZWFkSWRlbnRpZmllciBtX3dvcmtRdWV1ZVRocmVhZDsKKyAgICBH
TWFpbkNvbnRleHQqIG1fZXZlbnRDb250ZXh0OworICAgIE11dGV4IG1fZXZlbnRMb29wTG9jazsK
KyAgICBHTWFpbkxvb3AqIG1fZXZlbnRMb29wOworICAgIE11dGV4IG1fZXZlbnRTb3VyY2VzTG9j
azsKKyAgICBjbGFzcyBFdmVudFNvdXJjZTsKKyAgICBIYXNoTWFwPGludCwgVmVjdG9yPEV2ZW50
U291cmNlKj4gPiBtX2V2ZW50U291cmNlczsKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBWZWN0
b3I8RXZlbnRTb3VyY2UqPiA+OjppdGVyYXRvciBFdmVudFNvdXJjZUl0ZXJhdG9yOyAKICNlbmRp
ZgogfTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAg
Yi9XZWJLaXQyL1BsYXRmb3JtL2d0ay9SdW5Mb29wR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42ZGFiYWViCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0Mi9QbGF0
Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMg
Q29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiUnVuTG9vcC5oIgorCisjaW5jbHVkZSAiV0tC
YXNlLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorCitSdW5Mb29wOjpSdW5Mb29wKCkKK3sKKyAgICBt
X3J1bkxvb3BDb250ZXh0ID0gZ19tYWluX2NvbnRleHRfZGVmYXVsdCgpOworICAgIEFTU0VSVCht
X3J1bkxvb3BDb250ZXh0KTsKKyAgICBtX3J1bkxvb3BNYWluID0gZ19tYWluX2xvb3BfbmV3KG1f
cnVuTG9vcENvbnRleHQsIEZBTFNFKTsKKyAgICBBU1NFUlQobV9ydW5Mb29wTWFpbik7Cit9CisK
K1J1bkxvb3A6On5SdW5Mb29wKCkKK3sKKyAgICBpZiAobV9ydW5Mb29wTWFpbikgeworICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KG1fcnVuTG9vcE1haW4pOworICAgICAgICBnX21haW5fbG9vcF91
bnJlZihtX3J1bkxvb3BNYWluKTsKKyAgICAgICAgbV9ydW5Mb29wTWFpbiA9IDA7CisgICAgfQor
CisgICAgaWYgKG1fcnVuTG9vcENvbnRleHQpIHsKKyAgICAgICAgZ19tYWluX2NvbnRleHRfdW5y
ZWYobV9ydW5Mb29wQ29udGV4dCk7CisgICAgICAgIG1fcnVuTG9vcENvbnRleHQgPSAwOworICAg
IH0KK30KKwordm9pZCBSdW5Mb29wOjpydW4oKQoreworICAgIGdfbWFpbl9sb29wX3J1bihSdW5M
b29wOjptYWluKCktPm1haW5Mb29wKCkpOworfQorCitHTWFpbkxvb3AqIFJ1bkxvb3A6Om1haW5M
b29wKCkKK3sKKyAgICByZXR1cm4gbV9ydW5Mb29wTWFpbjsKK30KKwordm9pZCBSdW5Mb29wOjpz
dG9wKCkKK3sKKyAgICBnX21haW5fbG9vcF9xdWl0KG1fcnVuTG9vcE1haW4pOworfQorCitnYm9v
bGVhbiBSdW5Mb29wOjpxdWV1ZVdvcmsoUnVuTG9vcCogcnVuTG9vcCkKK3sKKyAgICBydW5Mb29w
LT5wZXJmb3JtV29yaygpOworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBSdW5Mb29wOjp3
YWtlVXAoKQoreworICAgIEdTb3VyY2UqIHNvdXJjZSA9IGdfdGltZW91dF9zb3VyY2VfbmV3KDAp
OworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhzb3VyY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8R1Nv
dXJjZUZ1bmM+KCZSdW5Mb29wOjpxdWV1ZVdvcmspLCB0aGlzLCAwKTsKKyAgICBnX3NvdXJjZV9h
dHRhY2goc291cmNlLCBtX3J1bkxvb3BDb250ZXh0KTsKKworICAgIGdfbWFpbl9jb250ZXh0X3dh
a2V1cChtX3J1bkxvb3BDb250ZXh0KTsKK30KKworUnVuTG9vcDo6VGltZXJCYXNlOjpUaW1lckJh
c2UoUnVuTG9vcCogcnVuTG9vcCkKKyAgICA6IG1fcnVuTG9vcChydW5Mb29wKQorICAgICwgbV90
aW1lclNvdXJjZSgwKQoreworfQorCitSdW5Mb29wOjpUaW1lckJhc2U6On5UaW1lckJhc2UoKQor
eworICAgIHN0b3AoKTsKK30KKwordm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnJlc2V0VGltZXJT
b3VyY2UoKQoreworICAgIG1fdGltZXJTb3VyY2UgPSAwOworfQorCitnYm9vbGVhbiBSdW5Mb29w
OjpUaW1lckJhc2U6Om9uZVNob3RUaW1lckZpcmVkKFJ1bkxvb3A6OlRpbWVyQmFzZSogdGltZXIp
Cit7CisgICAgdGltZXItPmZpcmVkKCk7CisgICAgdGltZXItPnJlc2V0VGltZXJTb3VyY2UoKTsK
KyAgICByZXR1cm4gRkFMU0U7Cit9CisKK2dib29sZWFuIFJ1bkxvb3A6OlRpbWVyQmFzZTo6cmVw
ZWF0aW5nVGltZXJGaXJlZChSdW5Mb29wOjpUaW1lckJhc2UqIHRpbWVyKQoreworICAgIHRpbWVy
LT5maXJlZCgpOworICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIFJ1bkxvb3A6OlRpbWVyQmFz
ZTo6c3RhcnQoZG91YmxlIG5leHRGaXJlSW50ZXJ2YWwsIGRvdWJsZSByZXBlYXRJbnRlcnZhbCkK
K3sKKyAgICBpZiAobV90aW1lclNvdXJjZSkKKyAgICAgICAgc3RvcCgpOworCisgICAgaWYgKHJl
cGVhdEludGVydmFsKSB7CisgICAgICAgIG1fdGltZXJTb3VyY2UgPSBnX3RpbWVvdXRfc291cmNl
X25ldyhzdGF0aWNfY2FzdDxndWludD4ocmVwZWF0SW50ZXJ2YWwpKTsKKyAgICAgICAgZ19zb3Vy
Y2Vfc2V0X2NhbGxiYWNrKG1fdGltZXJTb3VyY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1
bmM+KCZSdW5Mb29wOjpUaW1lckJhc2U6OnJlcGVhdGluZ1RpbWVyRmlyZWQpLCB0aGlzLCAwKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBtX3RpbWVyU291cmNlID0gZ190aW1lb3V0X3NvdXJjZV9u
ZXcoc3RhdGljX2Nhc3Q8Z3VpbnQ+KG5leHRGaXJlSW50ZXJ2YWwpKTsKKyAgICAgICAgZ19zb3Vy
Y2Vfc2V0X2NhbGxiYWNrKG1fdGltZXJTb3VyY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1
bmM+KCZSdW5Mb29wOjpUaW1lckJhc2U6Om9uZVNob3RUaW1lckZpcmVkKSwgdGhpcywgMCk7Cisg
ICAgfQorICAgIGdfc291cmNlX2F0dGFjaChtX3RpbWVyU291cmNlLCBtX3J1bkxvb3AtPm1fcnVu
TG9vcENvbnRleHQpOworfQorCit2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RvcCgpCit7Cisg
ICAgaWYgKCFtX3RpbWVyU291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICBnX3NvdXJjZV9k
ZXN0cm95KG1fdGltZXJTb3VyY2UpOworICAgIG1fdGltZXJTb3VyY2UgPSAwOworfQorCitib29s
IFJ1bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Rp
bWVyU291cmNlOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVl
R3RrLmNwcCBiL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0MGVlYwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKQEAgLTAsMCArMSwyMTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisK
KyNpbmNsdWRlICJXS0Jhc2UuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisKKy8vIFdvcmtRdWV1ZTo6
RXZlbnRTb3VyY2UKK2NsYXNzIFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UgeworcHVibGljOgorICAg
IEV2ZW50U291cmNlKEdTb3VyY2UqIGRpc3BhdGNoU291cmNlLCBQYXNzT3duUHRyPFdvcmtJdGVt
PiB3b3JrSXRlbSwgV29ya1F1ZXVlKiB3b3JrUXVldWUpCisgICAgICAgIDogbV9kaXNwYXRjaFNv
dXJjZShkaXNwYXRjaFNvdXJjZSkKKyAgICAgICAgLCBtX3dvcmtJdGVtKHdvcmtJdGVtKQorICAg
ICAgICAsIG1fd29ya1F1ZXVlKHdvcmtRdWV1ZSkKKyAgICB7CisgICAgfQorCisgICAgR1NvdXJj
ZSogZGlzcGF0Y2hTb3VyY2UoKSB7IHJldHVybiBtX2Rpc3BhdGNoU291cmNlOyB9CisKKyAgICBz
dGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmtPbmNlKEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChldmVudFNvdXJjZSk7CisgICAgICAgIFdvcmtRdWV1ZSog
cXVldWUgPSBldmVudFNvdXJjZS0+bV93b3JrUXVldWU7CisgICAgICAgIHsKKyAgICAgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihxdWV1ZS0+bV9pc1ZhbGlkTXV0ZXgpOworICAgICAgICAgICAg
aWYgKCFxdWV1ZS0+bV9pc1ZhbGlkKQorICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAg
ICAgICAgfQorCisgICAgICAgIGV2ZW50U291cmNlLT5tX3dvcmtJdGVtLT5leGVjdXRlKCk7Cisg
ICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gY2xvc2VD
b25uZWN0aW9uKEdJT0NoYW5uZWwqIGNoYW5uZWwsIEdJT0NvbmRpdGlvbiBjb25kaXRpb24sIEV2
ZW50U291cmNlKiBldmVudFNvdXJjZSkKKyAgICB7CisgICAgICAgIGlmICghKGNvbmRpdGlvbiAm
IEdfSU9fSFVQKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fRVJSKSkKKyAgICAgICAgICAgIHJldHVy
biBGQUxTRTsKKworICAgICAgICBBU1NFUlQoZXZlbnRTb3VyY2UpOworICAgICAgICBXb3JrUXVl
dWUqIHF1ZXVlID0gZXZlbnRTb3VyY2UtPm1fd29ya1F1ZXVlOworICAgICAgICB7CisgICAgICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1faXNWYWxpZE11dGV4KTsKKyAgICAgICAg
ICAgIGlmICghcXVldWUtPm1faXNWYWxpZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7
CisgICAgICAgIH0KKyAgICAgICAgZXZlbnRTb3VyY2UtPm1fd29ya0l0ZW0tPmV4ZWN1dGUoKTsK
KyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZ2Jvb2xlYW4g
cGVyZm9ybVdvcmsoR0lPQ2hhbm5lbCogY2hhbm5lbCwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwg
RXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKSAKKyAgICB7CisgICAgICAgIGlmICghKGNvbmRpdGlv
biAmIEdfSU9fSU4pKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgICAgIEFTU0VS
VChldmVudFNvdXJjZSk7CisgICAgICAgIFdvcmtRdWV1ZSogcXVldWUgPSBldmVudFNvdXJjZS0+
bV93b3JrUXVldWU7CisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihx
dWV1ZS0+bV9pc1ZhbGlkTXV0ZXgpOworICAgICAgICAgICAgaWYgKCFxdWV1ZS0+bV9pc1ZhbGlk
KQorICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisKKyAgICAgICAgZXZl
bnRTb3VyY2UtPm1fd29ya0l0ZW0tPmV4ZWN1dGUoKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUV2ZW50U291cmNlKEV2ZW50U291cmNl
KiBldmVudFNvdXJjZSkgCisgICAgeworICAgICAgICBBU1NFUlQoZXZlbnRTb3VyY2UpOworICAg
ICAgICBkZWxldGUgZXZlbnRTb3VyY2U7CisgICAgfQorICAgCitwdWJsaWM6CisgICAgR1NvdXJj
ZSogbV9kaXNwYXRjaFNvdXJjZTsKKyAgICBQYXNzT3duUHRyPFdvcmtJdGVtPiBtX3dvcmtJdGVt
OworICAgIFdvcmtRdWV1ZSogbV93b3JrUXVldWU7Cit9OworCisvLyBXb3JrUXVldWUKK3ZvaWQg
V29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBt
X2V2ZW50Q29udGV4dCA9IGdfbWFpbl9jb250ZXh0X25ldygpOworICAgIEFTU0VSVChtX2V2ZW50
Q29udGV4dCk7CisgICAgbV9ldmVudExvb3AgPSBnX21haW5fbG9vcF9uZXcobV9ldmVudENvbnRl
eHQsIEZBTFNFKTsKKyAgICBBU1NFUlQobV9ldmVudExvb3ApOworICAgIG1fd29ya1F1ZXVlVGhy
ZWFkID0gY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4o
JldvcmtRdWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJlYWQpLCB0aGlzLCBuYW1lKTsKK30KKwordm9p
ZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fZXZlbnRMb29wTG9jayk7CisKKyAgICBpZiAobV9ldmVudExvb3ApIHsKKyAgICAgICAg
aWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobV9ldmVudExvb3ApKQorICAgICAgICAgICAgZ19t
YWluX2xvb3BfcXVpdChtX2V2ZW50TG9vcCk7CisKKyAgICAgICAgZ19tYWluX2xvb3BfdW5yZWYo
bV9ldmVudExvb3ApOworICAgICAgICBtX2V2ZW50TG9vcCA9IDA7CisgICAgfQorCisgICAgaWYg
KG1fZXZlbnRDb250ZXh0KSB7CisgICAgICAgIGdfbWFpbl9jb250ZXh0X3VucmVmKG1fZXZlbnRD
b250ZXh0KTsKKyAgICAgICAgbV9ldmVudENvbnRleHQgPSAwOworICAgIH0KK30KKwordm9pZCog
V29ya1F1ZXVlOjpzdGFydFdvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqIHdvcmtRdWV1ZSkKK3sK
KyAgICB3b3JrUXVldWUtPndvcmtRdWV1ZVRocmVhZEJvZHkoKTsKKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZEJvZHkoKQoreworICAgIGdfbWFpbl9s
b29wX3J1bihtX2V2ZW50TG9vcCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlckV2ZW50
U291cmNlSGFuZGxlcihpbnQgZmQsIGludCBjb25kaXRpb24sIFBhc3NPd25QdHI8V29ya0l0ZW0+
IGl0ZW0pCit7CisgICAgR0lPQ2hhbm5lbCogY2hhbm5lbCA9IGdfaW9fY2hhbm5lbF91bml4X25l
dyhmZCk7CisgICAgQVNTRVJUKGNoYW5uZWwpOworICAgIEdTb3VyY2UqIGRpc3BhdGNoU291cmNl
ID0gZ19pb19jcmVhdGVfd2F0Y2goY2hhbm5lbCwgc3RhdGljX2Nhc3Q8R0lPQ29uZGl0aW9uPihj
b25kaXRpb24pKTsKKyAgICBBU1NFUlQoZGlzcGF0Y2hTb3VyY2UpOworICAgIEV2ZW50U291cmNl
KiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShkaXNwYXRjaFNvdXJjZSwgaXRlbSwgdGhp
cyk7CisgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKyAgIAorICAgIGlmIChjb25kaXRpb24gPT0g
R19JT19JTikgeworICAgICAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hTb3VyY2Us
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHU291cmNl
RnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBldmVudFNvdXJjZSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PigmV29ya1F1ZXVlOjpFdmVu
dFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3VyY2UpKTsKKyAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbiA9
PSAoR19JT19IVVAgfCBHX0lPX0VSUikpIHsKKyAgICAgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNr
KGRpc3BhdGNoU291cmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpjbG9zZUNvbm5l
Y3Rpb24pLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50U291cmNlLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3Rp
Znk+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJjZSkpOworICAgIH0K
KworICAgIC8vIFNldCB1cCB0aGUgZXZlbnQgc291cmNlcyB1bmRlciB0aGUgbXV0ZXggc2luY2Ug
dGhpcyBpcyBzaGFyZWQgYWNyb3NzIG11bHRpcGxlIHRocmVhZHMKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOworICAgICAgICBBU1NFUlQoIW1f
ZXZlbnRTb3VyY2VzLmNvbnRhaW5zKGZkKSk7CisgICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+
IHNvdXJjZXM7CisgICAgICAgIEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNl
cy5maW5kKGZkKTsKKyAgICAgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSAKKyAg
ICAgICAgICAgIHNvdXJjZXMgPSBpdC0+c2Vjb25kOworCisgICAgICAgIHNvdXJjZXMuYXBwZW5k
KGV2ZW50U291cmNlKTsKKyAgICAgICAgbV9ldmVudFNvdXJjZXMuc2V0KGZkLCBzb3VyY2VzKTsK
KyAgICB9CisKKyAgICAvLyBBdHRhY2ggdGhlIGV2ZW50IHNvdXJjZSB0byB0aGUgR01haW5Db250
ZXh0IHVuZGVyIHRoZSBtdXRleCBzaW5jZSB0aGlzIGlzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUg
dGhyZWFkcworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRMb29wTG9j
ayk7CisgICAgICAgIGdfc291cmNlX2F0dGFjaChkaXNwYXRjaFNvdXJjZSwgbV9ldmVudENvbnRl
eHQpOworICAgIH0KK30KKwordm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhh
bmRsZXIoaW50IGZkKQoreworICAgIEFTU0VSVChmZCk7CisgICAgCisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fZXZlbnRTb3VyY2VzTG9jayk7CisgICAgCisgICAgRXZlbnRTb3VyY2VJdGVyYXRv
ciBpdCA9IG1fZXZlbnRTb3VyY2VzLmZpbmQoZmQpOworICAgIEFTU0VSVChpdCAhPSBtX2V2ZW50
U291cmNlcy5lbmQoKSk7CisgICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKGZkKSk7
CisKKyAgICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIHsKKyAgICAgICAgVmVjdG9y
PEV2ZW50U291cmNlKj4gc291cmNlcyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzb3VyY2VzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgZ19zb3VyY2Vf
ZGVzdHJveShzb3VyY2VzW2ldLT5kaXNwYXRjaFNvdXJjZSgpKTsKKworICAgICAgICBtX2V2ZW50
U291cmNlcy5yZW1vdmUoaXQpOworICAgIH0KK30KKwordm9pZCBXb3JrUXVldWU6OnNjaGVkdWxl
V29yayhQYXNzT3duUHRyPFdvcmtJdGVtPiBpdGVtKQoreworICAgIEdTb3VyY2UqIGRpc3BhdGNo
U291cmNlID0gZ190aW1lb3V0X3NvdXJjZV9uZXcoMCk7CisgICAgQVNTRVJUKGRpc3BhdGNoU291
cmNlKTsKKyAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZGlz
cGF0Y2hTb3VyY2UsIGl0ZW0sIHRoaXMpOworICAgIAorICAgIGdfc291cmNlX3NldF9jYWxsYmFj
ayhkaXNwYXRjaFNvdXJjZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29ya09u
Y2UpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTb3VyY2UsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PigmV29ya1F1
ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3VyY2UpKTsKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50TG9vcExvY2spOworICAgICAgICBnX3NvdXJjZV9hdHRh
Y2goZGlzcGF0Y2hTb3VyY2UsIG1fZXZlbnRDb250ZXh0KTsKKyAgICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74230</attachid>
            <date>2010-11-18 06:08:32 -0800</date>
            <delta_ts>2010-11-26 06:25:58 -0800</delta_ts>
            <desc>RunLoop WorkQueue Connection class implementation</desc>
            <filename>complete_runloop.patch</filename>
            <type>text/plain</type>
            <size>25967</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
ODA1MWY4OS4uODQyOGFlNiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMC0xMS0xOCAgQW1ydXRoIFJhaiAg
PGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIEthc2liaGF0bGEgIDxyYXZpLmthc2li
aGF0bGFAbW90b3JvbGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBSdW5Mb29wIGFuZCBXb3JrUXVldWUgaW1wbGVtZW50YXRpb24gZm9y
IFdlYktpdDIgR1RLIHBvcnQuCisgICAgICAgIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDg1MDcpCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rp
b24uaDogVU5JWF9YMTEgc3BlY2lmaWMgY2hhbmdlcyBmb3IgR1RLIHBvcnQuCisgICAgICAgICog
UGxhdGZvcm0vQ29yZUlQQy9ndGs6IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMv
Z3RrL0Nvbm5lY3Rpb25HdGsuY3BwOiBBZGRlZC4gQ29ubmVjdGlvbiBjbGFzcyBpbXBsZW1lbnRh
dGlvbiBmb3IgR1RLIHBvcnQgKFVOSVhfWDExIHNwZWNpZmljKS4KKyAgICAgICAgKENvcmVJUEM6
OmJ5dGVzQXZhaWxhYmxlKToKKyAgICAgICAgKENvcmVJUEM6OnJlYWRCeXRlc0Zyb21Tb2NrZXQp
OgorICAgICAgICAoQ29yZUlQQzo6d3JpdGVCeXRlc1RvU29ja2V0KToKKyAgICAgICAgKENvcmVJ
UEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChDb3JlSVBDOjpD
b25uZWN0aW9uOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVj
dGlvbjo6cmVhZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpv
cGVuKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtQ2FuU2VuZE91dGdv
aW5nTWVzc2FnZXMpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6c2VuZE91dGdvaW5n
TWVzc2FnZSk6CisgICAgICAgICogUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5o
OiBVTklYX1gxMSBzcGVjaWZpYyBjaGFuZ2VzIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKiBQbGF0
Zm9ybS9SdW5Mb29wLmg6IEdUSyBwb3J0IHNwZWNpZmljIGNoYW5nZXMuCisgICAgICAgICogUGxh
dGZvcm0vV29ya1F1ZXVlLmg6IEdUSyBwb3J0IHNwZWNpZmljIGNoYW5nZXMuCisgICAgICAgICog
UGxhdGZvcm0vZ3RrOiBBZGRlZC4KKyAgICAgICAgKiBQbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5j
cHA6IEFkZGVkLiBSdW5zIGFuIGV2ZW50IGxvb3AgdXNpbmcgR01haW5Mb29wIGFuZCBoYW5kbGVz
IHRoZSBpbmNvbWluZyBtZXNzYWdlcy4KKyAgICAgICAgKFJ1bkxvb3A6OlJ1bkxvb3ApOgorICAg
ICAgICAoUnVuTG9vcDo6flJ1bkxvb3ApOgorICAgICAgICAoUnVuTG9vcDo6cnVuKToKKyAgICAg
ICAgKFJ1bkxvb3A6Om1haW5Mb29wKToKKyAgICAgICAgKFJ1bkxvb3A6OnN0b3ApOgorICAgICAg
ICAoUnVuTG9vcDo6cXVldWVXb3JrKToKKyAgICAgICAgKFJ1bkxvb3A6Ondha2VVcCk6CisgICAg
ICAgIChSdW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFzZSk6CisgICAgICAgIChSdW5Mb29wOjpU
aW1lckJhc2U6On5UaW1lckJhc2UpOgorICAgICAgICAoUnVuTG9vcDo6VGltZXJCYXNlOjpvbmVT
aG90VGltZXJGaXJlZCk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJhc2U6OnJlcGVhdGluZ1Rp
bWVyRmlyZWQpOgorICAgICAgICAoUnVuTG9vcDo6VGltZXJCYXNlOjpzdGFydCk6CisgICAgICAg
IChSdW5Mb29wOjpUaW1lckJhc2U6OnN0b3ApOgorICAgICAgICAoUnVuTG9vcDo6VGltZXJCYXNl
Ojppc0FjdGl2ZSk6CisgICAgICAgICogUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHA6IEFk
ZGVkLiBDcmVhdGVzIGEgdGhyZWFkIGFuZCBwb2xscyBvbiBhIGdpdmVuIGZkIHVzaW5nIEdJT0No
YW5uZWwuCisgICAgICAgIERpc3BhdGNoZXMgdGhlIG9idGFpbmVkIG1lc3NhZ2VzIHRvIFJ1bkxv
b3AncyBHTWFpbkxvb3AuCisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpFdmVudFNv
dXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkaXNwYXRjaFNvdXJjZSk6
CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29ya09uY2UpOgorICAg
ICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6Y2xvc2VDb25uZWN0aW9uKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKToKKyAgICAgICAgKFdvcmtRdWV1
ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlk
YXRlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJlYWQpOgorICAgICAg
ICAoV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWRCb2R5KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lz
dGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6c2NoZWR1bGVXb3Jr
KToKKwogMjAxMC0xMC0xOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oIGIvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nv
bm5lY3Rpb24uaAppbmRleCBlNTE0NDUyLi5kODVjZmI5IDEwMDY0NAotLS0gYS9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCisrKyBiL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9Db25uZWN0aW9uLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIFBvcnRpb25z
IENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYsNiArODcsOCBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY3JlYXRlU2VydmVyQW5kQ2xpZW50SWRlbnRpZmll
cnMoSWRlbnRpZmllciYgc2VydmVySWRlbnRpZmllciwgSWRlbnRpZmllciYgY2xpZW50SWRlbnRp
Zmllcik7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICB0eXBlZGVmIGNvbnN0IFFTdHJpbmcgSWRl
bnRpZmllcjsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICB0eXBlZGVmIGludCBJZGVudGlmaWVy
OwogI2VuZGlmCiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb25uZWN0aW9uPiBjcmVhdGVTZXJ2
ZXJDb25uZWN0aW9uKElkZW50aWZpZXIsIENsaWVudCosIFJ1bkxvb3AqIGNsaWVudFJ1bkxvb3Ap
OwpAQCAtMjU3LDYgKzI2MCwxMCBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX2N1cnJlbnRNZXNz
YWdlU2l6ZTsKICAgICBRTG9jYWxTb2NrZXQqIG1fc29ja2V0OwogICAgIFFTdHJpbmcgbV9zZXJ2
ZXJOYW1lOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQgcmVhZEV2ZW50SGFuZGxlcigp
OworICAgIGludCBtX3NvY2tldDsKKyAgICBzaXplX3QgbV9jdXJyZW50TWVzc2FnZVNpemU7CiAj
ZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9ndGsvQ29u
bmVjdGlvbkd0ay5jcHAgYi9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25H
dGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Y2MyYjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25HdGsu
Y3BwCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBN
b3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKworI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgor
I2luY2x1ZGUgIldvcmtJdGVtLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxnbGli
Lmg+CisjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKKworc3RhdGljIHNpemVf
dCBieXRlc0F2YWlsYWJsZShpbnQgZmQpCit7CisgICAgQVNTRVJUKGZkID4gMCk7CisgICAgc2l6
ZV90IGF2YWlsYWJsZSA9IC0xOworICAgIGlmIChpb2N0bChmZCwgRklPTlJFQUQsICZhdmFpbGFi
bGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOyAKKyAgICByZXR1cm4gYXZhaWxhYmxlOworfQor
CitzdGF0aWMgYm9vbCByZWFkQnl0ZXNGcm9tU29ja2V0KGludCBmZCwgdm9pZCogcHRyLCBzaXpl
X3QgbGVuZ3RoKQoreworICAgIEFTU0VSVChmZCA+IDApOworICAgIEFTU0VSVChidWZmZXIpOwor
ICAgIEFTU0VSVChsZW5ndGggPiAwKTsKKworICAgIHNzaXplX3QgbnVtYmVyT2ZCeXRlc1JlYWQg
PSAwOworICAgIHNpemVfdCBwZW5kaW5nQnl0ZXNUb1JlYWQgPSBsZW5ndGg7CisgICAgdWludDhf
dCogYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocHRyKTsKKyAgICAvLyBLZWVw
IHJlYWRpbmcgZnJvbSB0aGUgc29ja2V0IHRpbGwgdGhlIGNvbXBsZXRlIG1lc3NhZ2UgaGFzIGJl
ZW4gcmVhZAorICAgIHdoaWxlIChwZW5kaW5nQnl0ZXNUb1JlYWQgPiAwKSB7CisgICAgICAgIGlm
ICgobnVtYmVyT2ZCeXRlc1JlYWQgPSByZWFkKGZkLCBidWZmZXIsIHBlbmRpbmdCeXRlc1RvUmVh
ZCkpIDwgMCkgeworICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQorICAgICAgICAgICAg
ICAgIG51bWJlck9mQnl0ZXNSZWFkID0gMDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyICs9IG51bWJlck9m
Qnl0ZXNSZWFkOworICAgICAgICBwZW5kaW5nQnl0ZXNUb1JlYWQgLT0gbnVtYmVyT2ZCeXRlc1Jl
YWQ7CisgICAgfQorCisgICAgLy8gcmVhZCBvcGVyYXRpb24gZmFpbGVkIGlmIGNvbXBsZXRlIG1l
c3NhZ2UgaXMgbm90IHJlYWQKKyAgICByZXR1cm4gIXBlbmRpbmdCeXRlc1RvUmVhZDsKK30KKwor
c3RhdGljIGJvb2wgd3JpdGVCeXRlc1RvU29ja2V0KGludCBmZCwgdm9pZCogcHRyLCBzaXplX3Qg
bGVuZ3RoKQoreworICAgIEFTU0VSVChmZCA+IDApOworICAgIEFTU0VSVChidWZmZXIpOworICAg
IEFTU0VSVChsZW5ndGggPiAwKTsKKworICAgIHNzaXplX3QgbnVtYmVyT2ZCeXRlc1dyaXR0ZW4g
PSAwOworICAgIHNpemVfdCBwZW5kaW5nQnl0ZXNUb1dyaXRlID0gbGVuZ3RoOworICAgIHVpbnQ4
X3QqIGJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHB0cik7CisgICAgLy8gS2Vl
cCB3cml0aW5nIHRvIHRoZSBzb2NrZXQgdGlsbCB0aGUgY29tcGxldGUgbWVzc2FnZSBoYXMgYmVl
biB3cml0dGVuCisgICAgd2hpbGUgKHBlbmRpbmdCeXRlc1RvV3JpdGUgPiAwKSB7CisgICAgICAg
IGlmICgobnVtYmVyT2ZCeXRlc1dyaXR0ZW4gPSB3cml0ZShmZCwgYnVmZmVyLCBwZW5kaW5nQnl0
ZXNUb1dyaXRlKSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisgICAg
ICAgICAgICAgICAgbnVtYmVyT2ZCeXRlc1dyaXR0ZW4gPSAwOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXIg
Kz0gbnVtYmVyT2ZCeXRlc1dyaXR0ZW47CisgICAgICAgIHBlbmRpbmdCeXRlc1RvV3JpdGUgLT0g
bnVtYmVyT2ZCeXRlc1dyaXR0ZW47CisgICAgfQorCisgICAgLy8gd3JpdGUgb3BlcmF0aW9uIGZh
aWxlZCBpZiBjb21wbGV0ZSBtZXNzYWdlIGlzIG5vdCB3cml0dGVuCisgICAgcmV0dXJuICFwZW5k
aW5nQnl0ZXNUb1dyaXRlOworfQorCit2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6
ZShJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgbV9jdXJyZW50TWVzc2FnZVNpemUgPSAw
OworICAgIG1fc29ja2V0ID0gaWRlbnRpZmllcjsKKyAgICBtX2lzQ29ubmVjdGVkID0gdHJ1ZTsK
K30KKwordm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIGlmICgh
bV9pc0Nvbm5lY3RlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb25uZWN0aW9uUXVldWUu
dW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihtX3NvY2tldCk7CisgICAgaWYgKG1fc29ja2V0
ID4gMCkgeworICAgICAgICBjbG9zZShtX3NvY2tldCk7CisgICAgICAgIG1fc29ja2V0ID0gLTE7
CisgICAgfQorCisgICAgbV9pc0Nvbm5lY3RlZCA9IGZhbHNlOworfQorCit2b2lkIENvbm5lY3Rp
b246OnJlYWRFdmVudEhhbmRsZXIoKQoreworICAgIGlmIChtX3NvY2tldCA8IDApCisgICAgICAg
IHJldHVybjsKKworICAgIHVpbnQ4X3Qgc2l6ZUJ1ZmZlcltzaXplb2Yoc2l6ZV90KV07CisgICAg
bWVtc2V0KHNpemVCdWZmZXIsIDAsIHNpemVvZihzaXplX3QpKTsKKyAgICB3aGlsZSAoYnl0ZXNB
dmFpbGFibGUobV9zb2NrZXQpKSB7CisgICAgICAgIGlmICghbV9jdXJyZW50TWVzc2FnZVNpemUg
JiYgcmVhZEJ5dGVzRnJvbVNvY2tldChtX3NvY2tldCwgc2l6ZUJ1ZmZlciwgc2l6ZW9mKHNpemVf
dCkpKQorICAgICAgICAgICAgbV9jdXJyZW50TWVzc2FnZVNpemUgPSAqcmVpbnRlcnByZXRfY2Fz
dDxzaXplX3QqPihzaXplQnVmZmVyKTsKKworICAgICAgICBpZiAoYnl0ZXNBdmFpbGFibGUobV9z
b2NrZXQpIDwgbV9jdXJyZW50TWVzc2FnZVNpemUpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShtX2N1
cnJlbnRNZXNzYWdlU2l6ZSk7CisKKyAgICAgICAgaWYgKCFyZWFkQnl0ZXNGcm9tU29ja2V0KG1f
c29ja2V0LCBidWZmZXIuZGF0YSgpLCBtX2N1cnJlbnRNZXNzYWdlU2l6ZSkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgLy8gTWVzc2FnZSByZWNlaXZlZCBjb21wbGV0ZWx5LiBQcm9j
ZXNzIHRoZSBtZXNzYWdlIG5vdy4KKyAgICAgICAgc2l6ZV90IHJlYWxCdWZmZXJTaXplID0gbV9j
dXJyZW50TWVzc2FnZVNpemUgLSBzaXplb2YoTWVzc2FnZUlEKTsKKyAgICAgICAgdW5zaWduZWQg
bWVzc2FnZUlEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihidWZmZXIuZGF0YSgpICsg
cmVhbEJ1ZmZlclNpemUpOworCisgICAgICAgIHByb2Nlc3NJbmNvbWluZ01lc3NhZ2UoTWVzc2Fn
ZUlEOjpmcm9tSW50KG1lc3NhZ2VJRCksIGFkb3B0UHRyKG5ldyBBcmd1bWVudERlY29kZXIoYnVm
ZmVyLmRhdGEoKSwgcmVhbEJ1ZmZlclNpemUpKSk7CisKKyAgICAgICAgLy8gcHJlcGFyZSB0byBy
ZWFkIHRoZSBuZXh0IG1lc3NhZ2UKKyAgICAgICAgbV9jdXJyZW50TWVzc2FnZVNpemUgPSAwOwor
ICAgICAgICBtZW1zZXQoc2l6ZUJ1ZmZlciwgMCwgc2l6ZW9mKHNpemVfdCkpOworICAgIH0KK30K
KworYm9vbCBDb25uZWN0aW9uOjpvcGVuKCkKK3sKKyAgICBpbnQgZmxhZ3MgPSBmY250bChtX3Nv
Y2tldCwgRl9HRVRGTCwgMCk7CisgICAgZmNudGwobV9zb2NrZXQsIEZfU0VURkwsIGZsYWdzIHwg
T19OT05CTE9DSyk7CisKKyAgICAvLyBSZWdpc3RlciBjYWxsYmFja3MgZm9yIGNvbm5lY3Rpb24g
dGVybWluYXRpb24gYW5kIGlucHV0IGRhdGEgb24gdGhlIFdvcmtRdWV1ZQorICAgIG1fY29ubmVj
dGlvblF1ZXVlLnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKG1fc29ja2V0LCAoR19JT19IVVAg
fCBHX0lPX0VSUiksIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OmNvbm5lY3Rp
b25EaWRDbG9zZSkpOworICAgIG1fY29ubmVjdGlvblF1ZXVlLnJlZ2lzdGVyRXZlbnRTb3VyY2VI
YW5kbGVyKG1fc29ja2V0LCBHX0lPX0lOLCBXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0
aW9uOjpyZWFkRXZlbnRIYW5kbGVyKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29u
bmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdlcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIChtX3NvY2tldCA+IDApOworfQorCitib29sIENvbm5lY3Rpb246OnNlbmRPdXRnb2lu
Z01lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxBcmd1bWVudEVuY29kZXI+
IGFyZ3VtZW50cykKK3sKKyAgICBpZiAobV9zb2NrZXQgPCAwKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBXZSBwdXQgdGhlIG1lc3NhZ2UgSUQgbGFzdC4KKyAgICBhcmd1bWVudHMt
PmVuY29kZVVJbnQzMihtZXNzYWdlSUQudG9JbnQoKSk7CisKKyAgICBzaXplX3QgYnVmZmVyU2l6
ZSA9IGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpOworCisgICAgLy8gU2VuZCB0aGUgbWVzc2FnZSBz
aXplIGZpcnN0CisgICAgaWYgKCF3cml0ZUJ5dGVzVG9Tb2NrZXQobV9zb2NrZXQsIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KCZidWZmZXJTaXplKSwgc2l6ZW9mKHNpemVfdCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTZW5kIHRoZSBhY3R1YWwgbWVzc2FnZQorICAgIGlm
ICghd3JpdGVCeXRlc1RvU29ja2V0KG1fc29ja2V0LCBhcmd1bWVudHMtPmJ1ZmZlcigpLCBhcmd1
bWVudHMtPmJ1ZmZlclNpemUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCmRpZmYgLS1naXQgYS9XZWJLaXQy
L1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCBiL1dlYktpdDIvUGxhdGZvcm0v
UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCmluZGV4IGFkMWUzOTQuLjAzNjM2OTIgMTAwNjQ0
Ci0tLSBhL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCisrKyBi
L1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCkBAIC0zOSw2ICsz
OSw4IEBAIHR5cGVkZWYgcGlkX3QgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKIHR5cGVkZWYg
SEFORExFIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CiAjZWxpZiBQTEFURk9STShRVCkKIHR5
cGVkZWYgUVByb2Nlc3MqIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CisjZWxpZiBQTEFURk9S
TShHVEspCit0eXBlZGVmIHBpZF90IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CiAjZW5kaWYK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0IApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9ybS9S
dW5Mb29wLmggYi9XZWJLaXQyL1BsYXRmb3JtL1J1bkxvb3AuaAppbmRleCA1ZDk2OTgzLi43OTI2
ZTExIDEwMDY0NAotLS0gYS9XZWJLaXQyL1BsYXRmb3JtL1J1bkxvb3AuaAorKysgYi9XZWJLaXQy
L1BsYXRmb3JtL1J1bkxvb3AuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogUG9y
dGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw2ICsz
MywxMiBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaWYgUExBVEZPUk0oR1RLKQor
dHlwZWRlZiBzdHJ1Y3QgX0dTb3VyY2UgR1NvdXJjZTsKK3R5cGVkZWYgc3RydWN0IF9HTWFpbkxv
b3AgR01haW5Mb29wOwordHlwZWRlZiBzdHJ1Y3QgX0dNYWluQ29udGV4dCBHTWFpbkNvbnRleHQ7
Cit0eXBlZGVmIGludCBnYm9vbGVhbjsKKyNlbmRpZgogCiBjbGFzcyBXb3JrSXRlbTsKIApAQCAt
NzYsNiArODMsMTEgQEAgcHVibGljOgogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIHN0YXRp
YyB2b2lkIHRpbWVyRmlyZWQoUnVuTG9vcCosIGludCBJRCk7CiAgICAgICAgIGludCBtX0lEOwor
I2VsaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBzdGF0aWMgZ2Jvb2xlYW4gb25lU2hvdFRpbWVy
RmlyZWQoUnVuTG9vcDo6VGltZXJCYXNlKik7CisgICAgICAgIHN0YXRpYyBnYm9vbGVhbiByZXBl
YXRpbmdUaW1lckZpcmVkKFJ1bkxvb3A6OlRpbWVyQmFzZSopOworICAgICAgICB2b2lkIHJlc2V0
VGltZXJTb3VyY2UoKTsKKyAgICAgICAgR1NvdXJjZSogbV90aW1lclNvdXJjZTsKICNlbmRpZgog
ICAgIH07CiAKQEAgLTEyNyw2ICsxMzksMTMgQEAgcHJpdmF0ZToKICAgICBUaW1lck1hcCBtX2Fj
dGl2ZVRpbWVyczsKICAgICBjbGFzcyBUaW1lck9iamVjdDsKICAgICBUaW1lck9iamVjdCogbV90
aW1lck9iamVjdDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKK3B1YmxpYzoKKyAgICBzdGF0aWMgZ2Jv
b2xlYW4gcXVldWVXb3JrKFJ1bkxvb3AqKTsKKyAgICBHTWFpbkxvb3AqIG1haW5Mb29wKCk7Citw
cml2YXRlOgorICAgIEdNYWluQ29udGV4dCogbV9ydW5Mb29wQ29udGV4dDsKKyAgICBHTWFpbkxv
b3AqIG1fcnVuTG9vcE1haW47CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxh
dGZvcm0vV29ya1F1ZXVlLmggYi9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCmluZGV4IGY3
YzdkY2EuLjZjZmQ2YjggMTAwNjQ0Ci0tLSBhL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgK
KysrIGIvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Myw2
ICs0NCw5IEBACiBjbGFzcyBRTG9jYWxTb2NrZXQ7CiBjbGFzcyBRT2JqZWN0OwogY2xhc3MgUVRo
cmVhZDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgc3RydWN0IF9HTWFpbkNvbnRleHQg
R01haW5Db250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgX0dNYWluTG9vcCBHTWFpbkxvb3A7CiAjZW5k
aWYKIAogY2xhc3MgV29ya1F1ZXVlIHsKQEAgLTc0LDYgKzc4LDkgQEAgcHVibGljOgogICAgIHZv
aWQgZGlzY29ubmVjdFNpZ25hbChRT2JqZWN0KiwgY29uc3QgY2hhciogc2lnbmFsKTsKIAogICAg
IHZvaWQgbW92ZVNvY2tldFRvV29ya1RocmVhZChRTG9jYWxTb2NrZXQqKTsKKyNlbGlmIFBMQVRG
T1JNKEdUSykKKyAgICB2b2lkIHJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCwgaW50LCBQ
YXNzT3duUHRyPFdvcmtJdGVtPik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5k
bGVyKGludCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTE0Niw2ICsxNTMsMTggQEAgcHJpdmF0
ZToKICAgICBIYXNoTWFwPFFPYmplY3QqLCBXb3JrSXRlbVF0Kj4gbV9zaWduYWxMaXN0ZW5lcnM7
CiAgICAgUVRocmVhZCogbV93b3JrVGhyZWFkOwogICAgIGZyaWVuZCBjbGFzcyBXb3JrSXRlbVF0
OworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIHN0YXRpYyB2b2lkKiBzdGFydFdvcmtRdWV1ZVRo
cmVhZChXb3JrUXVldWUqKTsKKyAgICB2b2lkIHdvcmtRdWV1ZVRocmVhZEJvZHkoKTsKKworICAg
IFRocmVhZElkZW50aWZpZXIgbV93b3JrUXVldWVUaHJlYWQ7CisgICAgR01haW5Db250ZXh0KiBt
X2V2ZW50Q29udGV4dDsKKyAgICBNdXRleCBtX2V2ZW50TG9vcExvY2s7CisgICAgR01haW5Mb29w
KiBtX2V2ZW50TG9vcDsKKyAgICBNdXRleCBtX2V2ZW50U291cmNlc0xvY2s7CisgICAgY2xhc3Mg
RXZlbnRTb3VyY2U7CisgICAgSGFzaE1hcDxpbnQsIFZlY3RvcjxFdmVudFNvdXJjZSo+ID4gbV9l
dmVudFNvdXJjZXM7CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVmVjdG9yPEV2ZW50U291cmNl
Kj4gPjo6aXRlcmF0b3IgRXZlbnRTb3VyY2VJdGVyYXRvcjsgCiAjZW5kaWYKIH07CiAKZGlmZiAt
LWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwIGIvV2ViS2l0Mi9QbGF0
Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNmRhYmFlYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1J1bkxv
b3BHdGsuY3BwCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg
MjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKworI2luY2x1ZGUgIldLQmFzZS5oIgorI2luY2x1
ZGUgPGdsaWIuaD4KKworUnVuTG9vcDo6UnVuTG9vcCgpCit7CisgICAgbV9ydW5Mb29wQ29udGV4
dCA9IGdfbWFpbl9jb250ZXh0X2RlZmF1bHQoKTsKKyAgICBBU1NFUlQobV9ydW5Mb29wQ29udGV4
dCk7CisgICAgbV9ydW5Mb29wTWFpbiA9IGdfbWFpbl9sb29wX25ldyhtX3J1bkxvb3BDb250ZXh0
LCBGQUxTRSk7CisgICAgQVNTRVJUKG1fcnVuTG9vcE1haW4pOworfQorCitSdW5Mb29wOjp+UnVu
TG9vcCgpCit7CisgICAgaWYgKG1fcnVuTG9vcE1haW4pIHsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdChtX3J1bkxvb3BNYWluKTsKKyAgICAgICAgZ19tYWluX2xvb3BfdW5yZWYobV9ydW5Mb29w
TWFpbik7CisgICAgICAgIG1fcnVuTG9vcE1haW4gPSAwOworICAgIH0KKworICAgIGlmIChtX3J1
bkxvb3BDb250ZXh0KSB7CisgICAgICAgIGdfbWFpbl9jb250ZXh0X3VucmVmKG1fcnVuTG9vcENv
bnRleHQpOworICAgICAgICBtX3J1bkxvb3BDb250ZXh0ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQg
UnVuTG9vcDo6cnVuKCkKK3sKKyAgICBnX21haW5fbG9vcF9ydW4oUnVuTG9vcDo6bWFpbigpLT5t
YWluTG9vcCgpKTsKK30KKworR01haW5Mb29wKiBSdW5Mb29wOjptYWluTG9vcCgpCit7CisgICAg
cmV0dXJuIG1fcnVuTG9vcE1haW47Cit9CisKK3ZvaWQgUnVuTG9vcDo6c3RvcCgpCit7CisgICAg
Z19tYWluX2xvb3BfcXVpdChtX3J1bkxvb3BNYWluKTsKK30KKworZ2Jvb2xlYW4gUnVuTG9vcDo6
cXVldWVXb3JrKFJ1bkxvb3AqIHJ1bkxvb3ApCit7CisgICAgcnVuTG9vcC0+cGVyZm9ybVdvcmso
KTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgUnVuTG9vcDo6d2FrZVVwKCkKK3sKKyAg
ICBHU291cmNlKiBzb3VyY2UgPSBnX3RpbWVvdXRfc291cmNlX25ldygwKTsKKyAgICBnX3NvdXJj
ZV9zZXRfY2FsbGJhY2soc291cmNlLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmUnVu
TG9vcDo6cXVldWVXb3JrKSwgdGhpcywgMCk7CisgICAgZ19zb3VyY2VfYXR0YWNoKHNvdXJjZSwg
bV9ydW5Mb29wQ29udGV4dCk7CisKKyAgICBnX21haW5fY29udGV4dF93YWtldXAobV9ydW5Mb29w
Q29udGV4dCk7Cit9CisKK1J1bkxvb3A6OlRpbWVyQmFzZTo6VGltZXJCYXNlKFJ1bkxvb3AqIHJ1
bkxvb3ApCisgICAgOiBtX3J1bkxvb3AocnVuTG9vcCkKKyAgICAsIG1fdGltZXJTb3VyY2UoMCkK
K3sKK30KKworUnVuTG9vcDo6VGltZXJCYXNlOjp+VGltZXJCYXNlKCkKK3sKKyAgICBzdG9wKCk7
Cit9CisKK3ZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpyZXNldFRpbWVyU291cmNlKCkKK3sKKyAg
ICBtX3RpbWVyU291cmNlID0gMDsKK30KKworZ2Jvb2xlYW4gUnVuTG9vcDo6VGltZXJCYXNlOjpv
bmVTaG90VGltZXJGaXJlZChSdW5Mb29wOjpUaW1lckJhc2UqIHRpbWVyKQoreworICAgIHRpbWVy
LT5maXJlZCgpOworICAgIHRpbWVyLT5yZXNldFRpbWVyU291cmNlKCk7CisgICAgcmV0dXJuIEZB
TFNFOworfQorCitnYm9vbGVhbiBSdW5Mb29wOjpUaW1lckJhc2U6OnJlcGVhdGluZ1RpbWVyRmly
ZWQoUnVuTG9vcDo6VGltZXJCYXNlKiB0aW1lcikKK3sKKyAgICB0aW1lci0+ZmlyZWQoKTsKKyAg
ICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0YXJ0KGRvdWJs
ZSBuZXh0RmlyZUludGVydmFsLCBkb3VibGUgcmVwZWF0SW50ZXJ2YWwpCit7CisgICAgaWYgKG1f
dGltZXJTb3VyY2UpCisgICAgICAgIHN0b3AoKTsKKworICAgIGlmIChyZXBlYXRJbnRlcnZhbCkg
eworICAgICAgICBtX3RpbWVyU291cmNlID0gZ190aW1lb3V0X3NvdXJjZV9uZXcoc3RhdGljX2Nh
c3Q8Z3VpbnQ+KHJlcGVhdEludGVydmFsKSk7CisgICAgICAgIGdfc291cmNlX3NldF9jYWxsYmFj
ayhtX3RpbWVyU291cmNlLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmUnVuTG9vcDo6
VGltZXJCYXNlOjpyZXBlYXRpbmdUaW1lckZpcmVkKSwgdGhpcywgMCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV90aW1lclNvdXJjZSA9IGdfdGltZW91dF9zb3VyY2VfbmV3KHN0YXRpY19jYXN0
PGd1aW50PihuZXh0RmlyZUludGVydmFsKSk7CisgICAgICAgIGdfc291cmNlX3NldF9jYWxsYmFj
ayhtX3RpbWVyU291cmNlLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmUnVuTG9vcDo6
VGltZXJCYXNlOjpvbmVTaG90VGltZXJGaXJlZCksIHRoaXMsIDApOworICAgIH0KKyAgICBnX3Nv
dXJjZV9hdHRhY2gobV90aW1lclNvdXJjZSwgbV9ydW5Mb29wLT5tX3J1bkxvb3BDb250ZXh0KTsK
K30KKwordm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0b3AoKQoreworICAgIGlmICghbV90aW1l
clNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19zb3VyY2VfZGVzdHJveShtX3RpbWVy
U291cmNlKTsKKyAgICBtX3RpbWVyU291cmNlID0gMDsKK30KKworYm9vbCBSdW5Mb29wOjpUaW1l
ckJhc2U6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aW1lclNvdXJjZTsKK30K
ZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgYi9XZWJL
aXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjc0NDBlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQyL1BsYXRmb3Jt
L2d0ay9Xb3JrUXVldWVHdGsuY3BwCkBAIC0wLDAgKzEsMjE2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENv
cHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgorCisjaW5jbHVkZSAiV0tC
YXNlLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorCisvLyBXb3JrUXVldWU6OkV2ZW50U291cmNlCitj
bGFzcyBXb3JrUXVldWU6OkV2ZW50U291cmNlIHsKK3B1YmxpYzoKKyAgICBFdmVudFNvdXJjZShH
U291cmNlKiBkaXNwYXRjaFNvdXJjZSwgUGFzc093blB0cjxXb3JrSXRlbT4gd29ya0l0ZW0sIFdv
cmtRdWV1ZSogd29ya1F1ZXVlKQorICAgICAgICA6IG1fZGlzcGF0Y2hTb3VyY2UoZGlzcGF0Y2hT
b3VyY2UpCisgICAgICAgICwgbV93b3JrSXRlbSh3b3JrSXRlbSkKKyAgICAgICAgLCBtX3dvcmtR
dWV1ZSh3b3JrUXVldWUpCisgICAgeworICAgIH0KKworICAgIEdTb3VyY2UqIGRpc3BhdGNoU291
cmNlKCkgeyByZXR1cm4gbV9kaXNwYXRjaFNvdXJjZTsgfQorCisgICAgc3RhdGljIGdib29sZWFu
IHBlcmZvcm1Xb3JrT25jZShFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCisgICAgeworICAgICAg
ICBBU1NFUlQoZXZlbnRTb3VyY2UpOworICAgICAgICBXb3JrUXVldWUqIHF1ZXVlID0gZXZlbnRT
b3VyY2UtPm1fd29ya1F1ZXVlOworICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIocXVldWUtPm1faXNWYWxpZE11dGV4KTsKKyAgICAgICAgICAgIGlmICghcXVldWUtPm1f
aXNWYWxpZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKworICAg
ICAgICBldmVudFNvdXJjZS0+bV93b3JrSXRlbS0+ZXhlY3V0ZSgpOworICAgICAgICByZXR1cm4g
RkFMU0U7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGNsb3NlQ29ubmVjdGlvbihHSU9D
aGFubmVsKiBjaGFubmVsLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBFdmVudFNvdXJjZSogZXZl
bnRTb3VyY2UpCisgICAgeworICAgICAgICBpZiAoIShjb25kaXRpb24gJiBHX0lPX0hVUCkgJiYg
IShjb25kaXRpb24gJiBHX0lPX0VSUikpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAg
ICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKyAgICAgICAgV29ya1F1ZXVlKiBxdWV1ZSA9IGV2
ZW50U291cmNlLT5tX3dvcmtRdWV1ZTsKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7CisgICAgICAgICAgICBpZiAoIXF1ZXVl
LT5tX2lzVmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9Cisg
ICAgICAgIGV2ZW50U291cmNlLT5tX3dvcmtJdGVtLT5leGVjdXRlKCk7CisgICAgICAgIHJldHVy
biBGQUxTRTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGdib29sZWFuIHBlcmZvcm1Xb3JrKEdJ
T0NoYW5uZWwqIGNoYW5uZWwsIEdJT0NvbmRpdGlvbiBjb25kaXRpb24sIEV2ZW50U291cmNlKiBl
dmVudFNvdXJjZSkgCisgICAgeworICAgICAgICBpZiAoIShjb25kaXRpb24gJiBHX0lPX0lOKSkK
KyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAgICBBU1NFUlQoZXZlbnRTb3VyY2Up
OworICAgICAgICBXb3JrUXVldWUqIHF1ZXVlID0gZXZlbnRTb3VyY2UtPm1fd29ya1F1ZXVlOwor
ICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1faXNWYWxp
ZE11dGV4KTsKKyAgICAgICAgICAgIGlmICghcXVldWUtPm1faXNWYWxpZCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorCisgICAgICAgIGV2ZW50U291cmNlLT5tX3dv
cmtJdGVtLT5leGVjdXRlKCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgdm9pZCBkZWxldGVFdmVudFNvdXJjZShFdmVudFNvdXJjZSogZXZlbnRTb3VyY2Up
IAorICAgIHsKKyAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKyAgICAgICAgZGVsZXRlIGV2
ZW50U291cmNlOworICAgIH0KKyAgIAorcHVibGljOgorICAgIEdTb3VyY2UqIG1fZGlzcGF0Y2hT
b3VyY2U7CisgICAgUGFzc093blB0cjxXb3JrSXRlbT4gbV93b3JrSXRlbTsKKyAgICBXb3JrUXVl
dWUqIG1fd29ya1F1ZXVlOworfTsKKworLy8gV29ya1F1ZXVlCit2b2lkIFdvcmtRdWV1ZTo6cGxh
dGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgbV9ldmVudENvbnRleHQg
PSBnX21haW5fY29udGV4dF9uZXcoKTsKKyAgICBBU1NFUlQobV9ldmVudENvbnRleHQpOworICAg
IG1fZXZlbnRMb29wID0gZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250ZXh0LCBGQUxTRSk7Cisg
ICAgQVNTRVJUKG1fZXZlbnRMb29wKTsKKyAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IGNyZWF0ZVRo
cmVhZChyZWludGVycHJldF9jYXN0PFdURjo6VGhyZWFkRnVuY3Rpb24+KCZXb3JrUXVldWU6OnN0
YXJ0V29ya1F1ZXVlVGhyZWFkKSwgdGhpcywgbmFtZSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpw
bGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50TG9v
cExvY2spOworCisgICAgaWYgKG1fZXZlbnRMb29wKSB7CisgICAgICAgIGlmIChnX21haW5fbG9v
cF9pc19ydW5uaW5nKG1fZXZlbnRMb29wKSkKKyAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
bV9ldmVudExvb3ApOworCisgICAgICAgIGdfbWFpbl9sb29wX3VucmVmKG1fZXZlbnRMb29wKTsK
KyAgICAgICAgbV9ldmVudExvb3AgPSAwOworICAgIH0KKworICAgIGlmIChtX2V2ZW50Q29udGV4
dCkgeworICAgICAgICBnX21haW5fY29udGV4dF91bnJlZihtX2V2ZW50Q29udGV4dCk7CisgICAg
ICAgIG1fZXZlbnRDb250ZXh0ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQqIFdvcmtRdWV1ZTo6c3Rh
cnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKiB3b3JrUXVldWUpCit7CisgICAgd29ya1F1ZXVl
LT53b3JrUXVldWVUaHJlYWRCb2R5KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV29ya1F1
ZXVlOjp3b3JrUXVldWVUaHJlYWRCb2R5KCkKK3sKKyAgICBnX21haW5fbG9vcF9ydW4obV9ldmVu
dExvb3ApOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIo
aW50IGZkLCBpbnQgY29uZGl0aW9uLCBQYXNzT3duUHRyPFdvcmtJdGVtPiBpdGVtKQoreworICAg
IEdJT0NoYW5uZWwqIGNoYW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoZmQpOworICAgIEFT
U0VSVChjaGFubmVsKTsKKyAgICBHU291cmNlKiBkaXNwYXRjaFNvdXJjZSA9IGdfaW9fY3JlYXRl
X3dhdGNoKGNoYW5uZWwsIHN0YXRpY19jYXN0PEdJT0NvbmRpdGlvbj4oY29uZGl0aW9uKSk7Cisg
ICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKKyAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2Ug
PSBuZXcgRXZlbnRTb3VyY2UoZGlzcGF0Y2hTb3VyY2UsIGl0ZW0sIHRoaXMpOworICAgIEFTU0VS
VChldmVudFNvdXJjZSk7CisgICAKKyAgICBpZiAoY29uZGl0aW9uID09IEdfSU9fSU4pIHsKKyAg
ICAgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKGRpc3BhdGNoU291cmNlLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZXb3JrUXVl
dWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29yayksIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXZlbnRTb3VyY2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0
ZUV2ZW50U291cmNlKSk7CisgICAgfSBlbHNlIGlmIChjb25kaXRpb24gPT0gKEdfSU9fSFVQIHwg
R19JT19FUlIpKSB7CisgICAgICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNwYXRjaFNvdXJj
ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdTb3Vy
Y2VGdW5jPigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6Y2xvc2VDb25uZWN0aW9uKSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFNvdXJjZSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PigmV29ya1F1ZXVl
OjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3VyY2UpKTsKKyAgICB9CisKKyAgICAvLyBTZXQg
dXAgdGhlIGV2ZW50IHNvdXJjZXMgdW5kZXIgdGhlIG11dGV4IHNpbmNlIHRoaXMgaXMgc2hhcmVk
IGFjcm9zcyBtdWx0aXBsZSB0aHJlYWRzCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9ldmVudFNvdXJjZXNMb2NrKTsKKyAgICAgICAgQVNTRVJUKCFtX2V2ZW50U291cmNlcy5j
b250YWlucyhmZCkpOworICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzOworICAg
ICAgICBFdmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmZCk7Cisg
ICAgICAgIGlmIChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgCisgICAgICAgICAgICBzb3Vy
Y2VzID0gaXQtPnNlY29uZDsKKworICAgICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNvdXJjZSk7
CisgICAgICAgIG1fZXZlbnRTb3VyY2VzLnNldChmZCwgc291cmNlcyk7CisgICAgfQorCisgICAg
Ly8gQXR0YWNoIHRoZSBldmVudCBzb3VyY2UgdG8gdGhlIEdNYWluQ29udGV4dCB1bmRlciB0aGUg
bXV0ZXggc2luY2UgdGhpcyBpcyBzaGFyZWQgYWNyb3NzIG11bHRpcGxlIHRocmVhZHMKKyAgICB7
CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50TG9vcExvY2spOworICAgICAgICBn
X3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3VyY2UsIG1fZXZlbnRDb250ZXh0KTsKKyAgICB9Cit9
CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmZCkK
K3sKKyAgICBBU1NFUlQoZmQpOworICAgIAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50
U291cmNlc0xvY2spOworICAgIAorICAgIEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50
U291cmNlcy5maW5kKGZkKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkp
OworICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhmZCkpOworCisgICAgaWYgKGl0
ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7CisgICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+
IHNvdXJjZXMgPSBpdC0+c2Vjb25kOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c291cmNlcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIGdfc291cmNlX2Rlc3Ryb3koc291cmNl
c1tpXS0+ZGlzcGF0Y2hTb3VyY2UoKSk7CisKKyAgICAgICAgbV9ldmVudFNvdXJjZXMucmVtb3Zl
KGl0KTsKKyAgICB9Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpzY2hlZHVsZVdvcmsoUGFzc093blB0
cjxXb3JrSXRlbT4gaXRlbSkKK3sKKyAgICBHU291cmNlKiBkaXNwYXRjaFNvdXJjZSA9IGdfdGlt
ZW91dF9zb3VyY2VfbmV3KDApOworICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisgICAgRXZl
bnRTb3VyY2UqIGV2ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNlKGRpc3BhdGNoU291cmNlLCBp
dGVtLCB0aGlzKTsKKyAgICAKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hTb3Vy
Y2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdTb3VyY2VG
dW5jPigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtPbmNlKSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50U291cmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1ZTo6RXZlbnRTb3Vy
Y2U6OmRlbGV0ZUV2ZW50U291cmNlKSk7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9ldmVudExvb3BMb2NrKTsKKyAgICAgICAgZ19zb3VyY2VfYXR0YWNoKGRpc3BhdGNoU291
cmNlLCBtX2V2ZW50Q29udGV4dCk7CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74930</attachid>
            <date>2010-11-26 06:27:24 -0800</date>
            <delta_ts>2010-11-29 03:05:13 -0800</delta_ts>
            <desc>RunLoop WorkQueue Connection class implementation without using ioctl</desc>
            <filename>rl_nov_26.patch</filename>
            <type>text/plain</type>
            <size>26729</size>
            <attacher name="Ravi Phaneendra Kasibhatla">ravi.kasibhatla</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
ODA1MWY4OS4uNDc3ZjQwMyAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAorMjAxMC0xMS0yNiAgQW1ydXRoIFJhaiAg
PGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIEthc2liaGF0bGEgIDxyYXZpLmthc2li
aGF0bGFAbW90b3JvbGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBSdW5Mb29wIGFuZCBXb3JrUXVldWUgaW1wbGVtZW50YXRpb24gZm9y
IFdlYktpdDIgR1RLIHBvcnQuCisgICAgICAgIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDg1MDcpCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rp
b24uaDogVU5JWF9YMTEgc3BlY2lmaWMgY2hhbmdlcyBmb3IgR1RLIHBvcnQuCisgICAgICAgICog
UGxhdGZvcm0vQ29yZUlQQy9ndGs6IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMv
Z3RrL0Nvbm5lY3Rpb25HdGsuY3BwOiBBZGRlZC4gQ29ubmVjdGlvbiBjbGFzcyBpbXBsZW1lbnRh
dGlvbiBmb3IgR1RLIHBvcnQgKFVOSVhfWDExIHNwZWNpZmljKS4KKyAgICAgICAgKENvcmVJUEM6
OnJlYWRCeXRlc0Zyb21Tb2NrZXQpOgorICAgICAgICAoQ29yZUlQQzo6d3JpdGVCeXRlc1RvU29j
a2V0KToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246Om1lc3NhZ2VQcm9jZXNzaW5nQ29t
cGxldGVkKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246Om9wZW4pOgorICAgICAgICAo
Q29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdlcyk6Cisg
ICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKENv
cmVJUEM6OkNvbm5lY3Rpb246OnByb2Nlc3NDb21wbGV0ZWRNZXNzYWdlKToKKyAgICAgICAgKENv
cmVJUEM6OkNvbm5lY3Rpb246OnJlYWRFdmVudEhhbmRsZXIpOgorICAgICAgICAoQ29yZUlQQzo6
Q29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZSk6CisgICAgICAgICogUGxhdGZvcm0vUGxh
dGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oOiBVTklYX1gxMSBzcGVjaWZpYyBjaGFuZ2VzIGZvciBH
VEsgcG9ydC4KKyAgICAgICAgKiBQbGF0Zm9ybS9SdW5Mb29wLmg6IEdUSyBwb3J0IHNwZWNpZmlj
IGNoYW5nZXMuCisgICAgICAgICogUGxhdGZvcm0vV29ya1F1ZXVlLmg6IEdUSyBwb3J0IHNwZWNp
ZmljIGNoYW5nZXMuCisgICAgICAgICogUGxhdGZvcm0vZ3RrOiBBZGRlZC4KKyAgICAgICAgKiBQ
bGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHA6IEFkZGVkLiBSdW5zIGFuIGV2ZW50IGxvb3AgdXNp
bmcgR01haW5Mb29wIGFuZCBoYW5kbGVzIHRoZSBpbmNvbWluZyBtZXNzYWdlcy4KKyAgICAgICAg
KFJ1bkxvb3A6OlJ1bkxvb3ApOgorICAgICAgICAoUnVuTG9vcDo6flJ1bkxvb3ApOgorICAgICAg
ICAoUnVuTG9vcDo6cnVuKToKKyAgICAgICAgKFJ1bkxvb3A6Om1haW5Mb29wKToKKyAgICAgICAg
KFJ1bkxvb3A6OnN0b3ApOgorICAgICAgICAoUnVuTG9vcDo6cXVldWVXb3JrKToKKyAgICAgICAg
KFJ1bkxvb3A6Ondha2VVcCk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFz
ZSk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJhc2U6On5UaW1lckJhc2UpOgorICAgICAgICAo
UnVuTG9vcDo6VGltZXJCYXNlOjpvbmVTaG90VGltZXJGaXJlZCk6CisgICAgICAgIChSdW5Mb29w
OjpUaW1lckJhc2U6OnJlcGVhdGluZ1RpbWVyRmlyZWQpOgorICAgICAgICAoUnVuTG9vcDo6VGlt
ZXJCYXNlOjpzdGFydCk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJhc2U6OnN0b3ApOgorICAg
ICAgICAoUnVuTG9vcDo6VGltZXJCYXNlOjppc0FjdGl2ZSk6CisgICAgICAgICogUGxhdGZvcm0v
Z3RrL1dvcmtRdWV1ZUd0ay5jcHA6IEFkZGVkLiBDcmVhdGVzIGEgdGhyZWFkIGFuZCBwb2xscyBv
biBhIGdpdmVuIGZkIHVzaW5nIEdJT0NoYW5uZWwuCisgICAgICAgIERpc3BhdGNoZXMgdGhlIG9i
dGFpbmVkIG1lc3NhZ2VzIHRvIFJ1bkxvb3AncyBHTWFpbkxvb3AuCisgICAgICAgIChXb3JrUXVl
dWU6OkV2ZW50U291cmNlOjpFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50
U291cmNlOjpkaXNwYXRjaFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNl
OjpwZXJmb3JtV29ya09uY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6Y2xv
c2VDb25uZWN0aW9uKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1X
b3JrKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNl
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdv
cmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6c3RhcnRX
b3JrUXVldWVUaHJlYWQpOgorICAgICAgICAoV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWRCb2R5
KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAg
ICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6c2NoZWR1bGVXb3JrKToKKwogMjAxMC0xMC0xOSAgQW5kZXJzIENhcmxzc29u
ICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcu
CmRpZmYgLS1naXQgYS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oIGIvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAppbmRleCBlNTE0NDUyLi42YTQyOWJh
IDEwMDY0NAotLS0gYS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCisrKyBi
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgKQEAgLTEsNiArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2Jp
bGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtODYsNiArODcsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY3JlYXRl
U2VydmVyQW5kQ2xpZW50SWRlbnRpZmllcnMoSWRlbnRpZmllciYgc2VydmVySWRlbnRpZmllciwg
SWRlbnRpZmllciYgY2xpZW50SWRlbnRpZmllcik7CiAjZWxpZiBQTEFURk9STShRVCkKICAgICB0
eXBlZGVmIGNvbnN0IFFTdHJpbmcgSWRlbnRpZmllcjsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAg
ICB0eXBlZGVmIGludCBJZGVudGlmaWVyOwogI2VuZGlmCiAKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDb25uZWN0aW9uPiBjcmVhdGVTZXJ2ZXJDb25uZWN0aW9uKElkZW50aWZpZXIsIENsaWVudCos
IFJ1bkxvb3AqIGNsaWVudFJ1bkxvb3ApOwpAQCAtMjU3LDYgKzI2MCwxNSBAQCBwcml2YXRlOgog
ICAgIHNpemVfdCBtX2N1cnJlbnRNZXNzYWdlU2l6ZTsKICAgICBRTG9jYWxTb2NrZXQqIG1fc29j
a2V0OwogICAgIFFTdHJpbmcgbV9zZXJ2ZXJOYW1lOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAg
IHZvaWQgcmVhZEV2ZW50SGFuZGxlcigpOworICAgIHZvaWQgcHJvY2Vzc0NvbXBsZXRlZE1lc3Nh
Z2UoKTsKKyAgICBib29sIG1lc3NhZ2VQcm9jZXNzaW5nQ29tcGxldGVkKCkgeyByZXR1cm4gIW1f
Y3VycmVudE1lc3NhZ2VTaXplOyB9CisKKyAgICBpbnQgbV9zb2NrZXQ7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IG1fcmVhZEJ1ZmZlcjsKKyAgICBzaXplX3QgbV9jdXJyZW50TWVzc2FnZVNpemU7Cisg
ICAgc2l6ZV90IG1fcGVuZGluZ0J5dGVzOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25HdGsuY3BwIGIvV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL2d0ay9Db25uZWN0aW9uR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yMTU1ZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL2d0ay9Db25uZWN0aW9uR3RrLmNwcApAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQ
b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisKKyNp
bmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlICJXb3JrSXRlbS5oIgorI2luY2x1
ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHN5cy9mY250bC5oPgor
Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgQ29yZUlQQyB7CisKK3N0YXRpYyBj
b25zdCBzaXplX3QgbWVzc2FnZUluaXRpYWxTaXplID0gNDA5NjsKKworc3RhdGljIGludCByZWFk
Qnl0ZXNGcm9tU29ja2V0KGludCBmZCwgdm9pZCogcHRyLCBzaXplX3QgbGVuZ3RoKQoreworICAg
IEFTU0VSVChmZCA+IDApOworICAgIEFTU0VSVChidWZmZXIpOworICAgIEFTU0VSVChsZW5ndGgg
PiAwKTsKKworICAgIHNzaXplX3QgbnVtYmVyT2ZCeXRlc1JlYWQgPSAwOworICAgIHNpemVfdCBw
ZW5kaW5nQnl0ZXNUb1JlYWQgPSBsZW5ndGg7CisgICAgdWludDhfdCogYnVmZmVyID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4ocHRyKTsKKworICAgIHdoaWxlIChwZW5kaW5nQnl0ZXNUb1Jl
YWQgPiAwKSB7CisgICAgICAgIGlmICgobnVtYmVyT2ZCeXRlc1JlYWQgPSByZWFkKGZkLCBidWZm
ZXIsIHBlbmRpbmdCeXRlc1RvUmVhZCkpIDwgMCkgeworICAgICAgICAgICAgaWYgKGVycm5vID09
IEVJTlRSKQorICAgICAgICAgICAgICAgIG51bWJlck9mQnl0ZXNSZWFkID0gMDsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERCTE9DSykKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsgCisgICAgICAgIH0gZWxzZSBpZiAoIW51bWJlck9mQnl0ZXNSZWFkKQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgYnVmZmVyICs9IG51bWJlck9mQnl0ZXNSZWFkOworICAg
ICAgICBwZW5kaW5nQnl0ZXNUb1JlYWQgLT0gbnVtYmVyT2ZCeXRlc1JlYWQ7CisgICAgfQorCisg
ICAgcmV0dXJuIChsZW5ndGggLSBwZW5kaW5nQnl0ZXNUb1JlYWQpOworfQorCitzdGF0aWMgYm9v
bCB3cml0ZUJ5dGVzVG9Tb2NrZXQoaW50IGZkLCB2b2lkKiBwdHIsIHNpemVfdCBsZW5ndGgpCit7
CisgICAgQVNTRVJUKGZkID4gMCk7CisgICAgQVNTRVJUKGJ1ZmZlcik7CisgICAgQVNTRVJUKGxl
bmd0aCA+IDApOworCisgICAgc3NpemVfdCBudW1iZXJPZkJ5dGVzV3JpdHRlbiA9IDA7CisgICAg
c2l6ZV90IHBlbmRpbmdCeXRlc1RvV3JpdGUgPSBsZW5ndGg7CisgICAgdWludDhfdCogYnVmZmVy
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocHRyKTsKKyAgICAvLyBLZWVwIHdyaXRpbmcg
dG8gdGhlIHNvY2tldCB0aWxsIHRoZSBjb21wbGV0ZSBtZXNzYWdlIGhhcyBiZWVuIHdyaXR0ZW4K
KyAgICB3aGlsZSAocGVuZGluZ0J5dGVzVG9Xcml0ZSA+IDApIHsKKyAgICAgICAgaWYgKChudW1i
ZXJPZkJ5dGVzV3JpdHRlbiA9IHdyaXRlKGZkLCBidWZmZXIsIHBlbmRpbmdCeXRlc1RvV3JpdGUp
KSA8IDApIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgICAg
ICBudW1iZXJPZkJ5dGVzV3JpdHRlbiA9IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJ1ZmZlciArPSBudW1iZXJP
ZkJ5dGVzV3JpdHRlbjsKKyAgICAgICAgcGVuZGluZ0J5dGVzVG9Xcml0ZSAtPSBudW1iZXJPZkJ5
dGVzV3JpdHRlbjsKKyAgICB9CisKKyAgICAvLyB3cml0ZSBvcGVyYXRpb24gZmFpbGVkIGlmIGNv
bXBsZXRlIG1lc3NhZ2UgaXMgbm90IHdyaXR0ZW4KKyAgICByZXR1cm4gIXBlbmRpbmdCeXRlc1Rv
V3JpdGU7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFsaXplKElkZW50aWZp
ZXIgaWRlbnRpZmllcikKK3sKKyAgICBtX2N1cnJlbnRNZXNzYWdlU2l6ZSA9IDA7CisgICAgbV9w
ZW5kaW5nQnl0ZXMgPSAwOworICAgIG1fcmVhZEJ1ZmZlci5yZXNpemUobWVzc2FnZUluaXRpYWxT
aXplKTsKKyAgICBtX3NvY2tldCA9IGlkZW50aWZpZXI7CisgICAgbV9pc0Nvbm5lY3RlZCA9IHRy
dWU7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyAgICBp
ZiAoIW1faXNDb25uZWN0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29ubmVjdGlvblF1
ZXVlLnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIobV9zb2NrZXQpOworICAgIGlmIChtX3Nv
Y2tldCA+IDApIHsKKyAgICAgICAgY2xvc2UobV9zb2NrZXQpOworICAgICAgICBtX3NvY2tldCA9
IC0xOworICAgIH0KKworICAgIG1faXNDb25uZWN0ZWQgPSBmYWxzZTsKK30KKwordm9pZCBDb25u
ZWN0aW9uOjpwcm9jZXNzQ29tcGxldGVkTWVzc2FnZSgpCit7CisgICAgc2l6ZV90IHJlYWxCdWZm
ZXJTaXplID0gbV9jdXJyZW50TWVzc2FnZVNpemUgLSBzaXplb2YoTWVzc2FnZUlEKTsKKyAgICB1
bnNpZ25lZCBtZXNzYWdlSUQgPSAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG1fcmVhZEJ1
ZmZlci5kYXRhKCkgKyByZWFsQnVmZmVyU2l6ZSk7CisKKyAgICBwcm9jZXNzSW5jb21pbmdNZXNz
YWdlKE1lc3NhZ2VJRDo6ZnJvbUludChtZXNzYWdlSUQpLCBhZG9wdFB0cihuZXcgQXJndW1lbnRE
ZWNvZGVyKG1fcmVhZEJ1ZmZlci5kYXRhKCksIHJlYWxCdWZmZXJTaXplKSkpOworCisgICAgLy8g
cHJlcGFyZSBmb3IgdGhlIG5leHQgbWVzc2FnZQorICAgIG1fY3VycmVudE1lc3NhZ2VTaXplID0g
MDsKKyAgICBtX3BlbmRpbmdCeXRlcyA9IDA7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6cmVhZEV2
ZW50SGFuZGxlcigpCit7CisgICAgaWYgKG1fc29ja2V0IDwgMCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gaGFuZGxlIGFueSBwcmV2aW91c2x5IHVucHJvY2Vzc2VkIG1lc3NhZ2UKKyAgICBp
ZiAoIW1lc3NhZ2VQcm9jZXNzaW5nQ29tcGxldGVkKCkpIHsKKyAgICAgICAgaWYgKChtX3BlbmRp
bmdCeXRlcyAtPSByZWFkQnl0ZXNGcm9tU29ja2V0KG1fc29ja2V0LCAodm9pZCopKG1fcmVhZEJ1
ZmZlci5kYXRhKCkgKyAobV9jdXJyZW50TWVzc2FnZVNpemUgLSBtX3BlbmRpbmdCeXRlcykpLCBt
X3BlbmRpbmdCeXRlcykpID4gMCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBN
ZXNzYWdlIHJlY2VpdmVkIGNvbXBsZXRlbHkuIFByb2Nlc3MgdGhlIG1lc3NhZ2Ugbm93LgorICAg
ICAgICBwcm9jZXNzQ29tcGxldGVkTWVzc2FnZSgpOworICAgIH0KKworICAgIC8vIHByZXBhcmUg
dG8gcmVhZCB0aGUgbmV4dCBtZXNzYWdlCisgICAgdWludDhfdCBzaXplQnVmZmVyW3NpemVvZihz
aXplX3QpXTsKKyAgICBtZW1zZXQoc2l6ZUJ1ZmZlciwgMCwgc2l6ZW9mKHNpemVfdCkpOworICAg
IAorICAgIHdoaWxlIChtZXNzYWdlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpKSB7CisgICAgICAgIGlm
IChyZWFkQnl0ZXNGcm9tU29ja2V0KG1fc29ja2V0LCBzaXplQnVmZmVyLCBzaXplb2Yoc2l6ZV90
KSkpCisgICAgICAgICAgICBtX2N1cnJlbnRNZXNzYWdlU2l6ZSA9ICpyZWludGVycHJldF9jYXN0
PHNpemVfdCo+KHNpemVCdWZmZXIpOworCisgICAgICAgIGlmICghbV9jdXJyZW50TWVzc2FnZVNp
emUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAobV9yZWFkQnVmZmVyLnNpemUo
KSA8IG1fY3VycmVudE1lc3NhZ2VTaXplKQorICAgICAgICAgICAgbV9yZWFkQnVmZmVyLmdyb3co
bV9jdXJyZW50TWVzc2FnZVNpemUpOworCisgICAgICAgIG1fcGVuZGluZ0J5dGVzID0gbV9jdXJy
ZW50TWVzc2FnZVNpemUgLSByZWFkQnl0ZXNGcm9tU29ja2V0KG1fc29ja2V0LCBtX3JlYWRCdWZm
ZXIuZGF0YSgpLCBtX2N1cnJlbnRNZXNzYWdlU2l6ZSk7CisgICAgICAgIGlmIChtX3BlbmRpbmdC
eXRlcyA+IDApIC8vIG1lc3NhZ2UgcGFydGlhbGx5IHJlY2VpdmVkCisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAvLyBNZXNzYWdlIHJlY2VpdmVkIGNvbXBsZXRlbHkuIFByb2Nlc3MgdGhl
IG1lc3NhZ2Ugbm93LgorICAgICAgICBwcm9jZXNzQ29tcGxldGVkTWVzc2FnZSgpOworCisgICAg
ICAgIG1lbXNldChzaXplQnVmZmVyLCAwLCBzaXplb2Yoc2l6ZV90KSk7CisgICAgfQorfQorCiti
b29sIENvbm5lY3Rpb246Om9wZW4oKQoreworICAgIGludCBmbGFncyA9IGZjbnRsKG1fc29ja2V0
LCBGX0dFVEZMLCAwKTsKKyAgICBmY250bChtX3NvY2tldCwgRl9TRVRGTCwgZmxhZ3MgfCBPX05P
TkJMT0NLKTsKKworICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgY29ubmVjdGlvbiB0ZXJt
aW5hdGlvbiBhbmQgaW5wdXQgZGF0YSBvbiB0aGUgV29ya1F1ZXVlCisgICAgbV9jb25uZWN0aW9u
UXVldWUucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIobV9zb2NrZXQsIChHX0lPX0hVUCB8IEdf
SU9fRVJSKSwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkRp
ZENsb3NlKSk7CisgICAgbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRs
ZXIobV9zb2NrZXQsIEdfSU9fSU4sIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246
OnJlYWRFdmVudEhhbmRsZXIpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb25uZWN0
aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gKG1fc29ja2V0ID4gMCk7Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVz
c2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNzT3duUHRyPEFyZ3VtZW50RW5jb2Rlcj4gYXJn
dW1lbnRzKQoreworICAgIGlmIChtX3NvY2tldCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIFdlIHB1dCB0aGUgbWVzc2FnZSBJRCBsYXN0LgorICAgIGFyZ3VtZW50cy0+ZW5j
b2RlVUludDMyKG1lc3NhZ2VJRC50b0ludCgpKTsKKworICAgIHNpemVfdCBidWZmZXJTaXplID0g
YXJndW1lbnRzLT5idWZmZXJTaXplKCk7CisKKyAgICAvLyBTZW5kIHRoZSBtZXNzYWdlIHNpemUg
Zmlyc3QKKyAgICBpZiAoIXdyaXRlQnl0ZXNUb1NvY2tldChtX3NvY2tldCwgcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oJmJ1ZmZlclNpemUpLCBzaXplb2Yoc2l6ZV90KSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghd3JpdGVCeXRlc1RvU29ja2V0KG1fc29ja2V0LCBhcmd1
bWVudHMtPmJ1ZmZlcigpLCBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBDb3JlSVBD
CmRpZmYgLS1naXQgYS9XZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIu
aCBiL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCmluZGV4IGFk
MWUzOTQuLjAzNjM2OTIgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9j
ZXNzSWRlbnRpZmllci5oCisrKyBiL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllci5oCkBAIC0zOSw2ICszOSw4IEBAIHR5cGVkZWYgcGlkX3QgUGxhdGZvcm1Qcm9jZXNz
SWRlbnRpZmllcjsKIHR5cGVkZWYgSEFORExFIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CiAj
ZWxpZiBQTEFURk9STShRVCkKIHR5cGVkZWYgUVByb2Nlc3MqIFBsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXI7CisjZWxpZiBQTEFURk9STShHVEspCit0eXBlZGVmIHBpZF90IFBsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXI7CiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0IApkaWZmIC0tZ2l0
IGEvV2ViS2l0Mi9QbGF0Zm9ybS9SdW5Mb29wLmggYi9XZWJLaXQyL1BsYXRmb3JtL1J1bkxvb3Au
aAppbmRleCA1ZDk2OTgzLi43OTI2ZTExIDEwMDY0NAotLS0gYS9XZWJLaXQyL1BsYXRmb3JtL1J1
bkxvb3AuaAorKysgYi9XZWJLaXQyL1BsYXRmb3JtL1J1bkxvb3AuaApAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1v
YmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMiw2ICszMywxMiBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZp
Yy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBzdHJ1Y3QgX0dTb3VyY2UgR1NvdXJjZTsKK3R5
cGVkZWYgc3RydWN0IF9HTWFpbkxvb3AgR01haW5Mb29wOwordHlwZWRlZiBzdHJ1Y3QgX0dNYWlu
Q29udGV4dCBHTWFpbkNvbnRleHQ7Cit0eXBlZGVmIGludCBnYm9vbGVhbjsKKyNlbmRpZgogCiBj
bGFzcyBXb3JrSXRlbTsKIApAQCAtNzYsNiArODMsMTEgQEAgcHVibGljOgogI2VsaWYgUExBVEZP
Uk0oUVQpCiAgICAgICAgIHN0YXRpYyB2b2lkIHRpbWVyRmlyZWQoUnVuTG9vcCosIGludCBJRCk7
CiAgICAgICAgIGludCBtX0lEOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBzdGF0aWMg
Z2Jvb2xlYW4gb25lU2hvdFRpbWVyRmlyZWQoUnVuTG9vcDo6VGltZXJCYXNlKik7CisgICAgICAg
IHN0YXRpYyBnYm9vbGVhbiByZXBlYXRpbmdUaW1lckZpcmVkKFJ1bkxvb3A6OlRpbWVyQmFzZSop
OworICAgICAgICB2b2lkIHJlc2V0VGltZXJTb3VyY2UoKTsKKyAgICAgICAgR1NvdXJjZSogbV90
aW1lclNvdXJjZTsKICNlbmRpZgogICAgIH07CiAKQEAgLTEyNyw2ICsxMzksMTMgQEAgcHJpdmF0
ZToKICAgICBUaW1lck1hcCBtX2FjdGl2ZVRpbWVyczsKICAgICBjbGFzcyBUaW1lck9iamVjdDsK
ICAgICBUaW1lck9iamVjdCogbV90aW1lck9iamVjdDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKK3B1
YmxpYzoKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcXVldWVXb3JrKFJ1bkxvb3AqKTsKKyAgICBHTWFp
bkxvb3AqIG1haW5Mb29wKCk7Citwcml2YXRlOgorICAgIEdNYWluQ29udGV4dCogbV9ydW5Mb29w
Q29udGV4dDsKKyAgICBHTWFpbkxvb3AqIG1fcnVuTG9vcE1haW47CiAjZW5kaWYKIH07CiAKZGlm
ZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggYi9XZWJLaXQyL1BsYXRmb3Jt
L1dvcmtRdWV1ZS5oCmluZGV4IGY3YzdkY2EuLjZjZmQ2YjggMTAwNjQ0Ci0tLSBhL1dlYktpdDIv
UGxhdGZvcm0vV29ya1F1ZXVlLmgKKysrIGIvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaApA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xh
IE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Myw2ICs0NCw5IEBACiBjbGFzcyBRTG9jYWxTb2NrZXQ7CiBjbGFz
cyBRT2JqZWN0OwogY2xhc3MgUVRocmVhZDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYg
c3RydWN0IF9HTWFpbkNvbnRleHQgR01haW5Db250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgX0dNYWlu
TG9vcCBHTWFpbkxvb3A7CiAjZW5kaWYKIAogY2xhc3MgV29ya1F1ZXVlIHsKQEAgLTc0LDYgKzc4
LDkgQEAgcHVibGljOgogICAgIHZvaWQgZGlzY29ubmVjdFNpZ25hbChRT2JqZWN0KiwgY29uc3Qg
Y2hhciogc2lnbmFsKTsKIAogICAgIHZvaWQgbW92ZVNvY2tldFRvV29ya1RocmVhZChRTG9jYWxT
b2NrZXQqKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHJlZ2lzdGVyRXZlbnRTb3Vy
Y2VIYW5kbGVyKGludCwgaW50LCBQYXNzT3duUHRyPFdvcmtJdGVtPik7CisgICAgdm9pZCB1bnJl
Z2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTE0
Niw2ICsxNTMsMTggQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFFPYmplY3QqLCBXb3JrSXRlbVF0
Kj4gbV9zaWduYWxMaXN0ZW5lcnM7CiAgICAgUVRocmVhZCogbV93b3JrVGhyZWFkOwogICAgIGZy
aWVuZCBjbGFzcyBXb3JrSXRlbVF0OworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIHN0YXRpYyB2
b2lkKiBzdGFydFdvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqKTsKKyAgICB2b2lkIHdvcmtRdWV1
ZVRocmVhZEJvZHkoKTsKKworICAgIFRocmVhZElkZW50aWZpZXIgbV93b3JrUXVldWVUaHJlYWQ7
CisgICAgR01haW5Db250ZXh0KiBtX2V2ZW50Q29udGV4dDsKKyAgICBNdXRleCBtX2V2ZW50TG9v
cExvY2s7CisgICAgR01haW5Mb29wKiBtX2V2ZW50TG9vcDsKKyAgICBNdXRleCBtX2V2ZW50U291
cmNlc0xvY2s7CisgICAgY2xhc3MgRXZlbnRTb3VyY2U7CisgICAgSGFzaE1hcDxpbnQsIFZlY3Rv
cjxFdmVudFNvdXJjZSo+ID4gbV9ldmVudFNvdXJjZXM7CisgICAgdHlwZWRlZiBIYXNoTWFwPGlu
dCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPjo6aXRlcmF0b3IgRXZlbnRTb3VyY2VJdGVyYXRvcjsg
CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1J1bkxvb3BH
dGsuY3BwIGIvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRhYmFlYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dDIvUGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBv
cnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKworI2luY2x1
ZGUgIldLQmFzZS5oIgorI2luY2x1ZGUgPGdsaWIuaD4KKworUnVuTG9vcDo6UnVuTG9vcCgpCit7
CisgICAgbV9ydW5Mb29wQ29udGV4dCA9IGdfbWFpbl9jb250ZXh0X2RlZmF1bHQoKTsKKyAgICBB
U1NFUlQobV9ydW5Mb29wQ29udGV4dCk7CisgICAgbV9ydW5Mb29wTWFpbiA9IGdfbWFpbl9sb29w
X25ldyhtX3J1bkxvb3BDb250ZXh0LCBGQUxTRSk7CisgICAgQVNTRVJUKG1fcnVuTG9vcE1haW4p
OworfQorCitSdW5Mb29wOjp+UnVuTG9vcCgpCit7CisgICAgaWYgKG1fcnVuTG9vcE1haW4pIHsK
KyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX3J1bkxvb3BNYWluKTsKKyAgICAgICAgZ19tYWlu
X2xvb3BfdW5yZWYobV9ydW5Mb29wTWFpbik7CisgICAgICAgIG1fcnVuTG9vcE1haW4gPSAwOwor
ICAgIH0KKworICAgIGlmIChtX3J1bkxvb3BDb250ZXh0KSB7CisgICAgICAgIGdfbWFpbl9jb250
ZXh0X3VucmVmKG1fcnVuTG9vcENvbnRleHQpOworICAgICAgICBtX3J1bkxvb3BDb250ZXh0ID0g
MDsKKyAgICB9Cit9CisKK3ZvaWQgUnVuTG9vcDo6cnVuKCkKK3sKKyAgICBnX21haW5fbG9vcF9y
dW4oUnVuTG9vcDo6bWFpbigpLT5tYWluTG9vcCgpKTsKK30KKworR01haW5Mb29wKiBSdW5Mb29w
OjptYWluTG9vcCgpCit7CisgICAgcmV0dXJuIG1fcnVuTG9vcE1haW47Cit9CisKK3ZvaWQgUnVu
TG9vcDo6c3RvcCgpCit7CisgICAgZ19tYWluX2xvb3BfcXVpdChtX3J1bkxvb3BNYWluKTsKK30K
KworZ2Jvb2xlYW4gUnVuTG9vcDo6cXVldWVXb3JrKFJ1bkxvb3AqIHJ1bkxvb3ApCit7CisgICAg
cnVuTG9vcC0+cGVyZm9ybVdvcmsoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgUnVu
TG9vcDo6d2FrZVVwKCkKK3sKKyAgICBHU291cmNlKiBzb3VyY2UgPSBnX3RpbWVvdXRfc291cmNl
X25ldygwKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soc291cmNlLCByZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPigmUnVuTG9vcDo6cXVldWVXb3JrKSwgdGhpcywgMCk7CisgICAgZ19z
b3VyY2VfYXR0YWNoKHNvdXJjZSwgbV9ydW5Mb29wQ29udGV4dCk7CisKKyAgICBnX21haW5fY29u
dGV4dF93YWtldXAobV9ydW5Mb29wQ29udGV4dCk7Cit9CisKK1J1bkxvb3A6OlRpbWVyQmFzZTo6
VGltZXJCYXNlKFJ1bkxvb3AqIHJ1bkxvb3ApCisgICAgOiBtX3J1bkxvb3AocnVuTG9vcCkKKyAg
ICAsIG1fdGltZXJTb3VyY2UoMCkKK3sKK30KKworUnVuTG9vcDo6VGltZXJCYXNlOjp+VGltZXJC
YXNlKCkKK3sKKyAgICBzdG9wKCk7Cit9CisKK3ZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpyZXNl
dFRpbWVyU291cmNlKCkKK3sKKyAgICBtX3RpbWVyU291cmNlID0gMDsKK30KKworZ2Jvb2xlYW4g
UnVuTG9vcDo6VGltZXJCYXNlOjpvbmVTaG90VGltZXJGaXJlZChSdW5Mb29wOjpUaW1lckJhc2Uq
IHRpbWVyKQoreworICAgIHRpbWVyLT5maXJlZCgpOworICAgIHRpbWVyLT5yZXNldFRpbWVyU291
cmNlKCk7CisgICAgcmV0dXJuIEZBTFNFOworfQorCitnYm9vbGVhbiBSdW5Mb29wOjpUaW1lckJh
c2U6OnJlcGVhdGluZ1RpbWVyRmlyZWQoUnVuTG9vcDo6VGltZXJCYXNlKiB0aW1lcikKK3sKKyAg
ICB0aW1lci0+ZmlyZWQoKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBSdW5Mb29wOjpU
aW1lckJhc2U6OnN0YXJ0KGRvdWJsZSBuZXh0RmlyZUludGVydmFsLCBkb3VibGUgcmVwZWF0SW50
ZXJ2YWwpCit7CisgICAgaWYgKG1fdGltZXJTb3VyY2UpCisgICAgICAgIHN0b3AoKTsKKworICAg
IGlmIChyZXBlYXRJbnRlcnZhbCkgeworICAgICAgICBtX3RpbWVyU291cmNlID0gZ190aW1lb3V0
X3NvdXJjZV9uZXcoc3RhdGljX2Nhc3Q8Z3VpbnQ+KHJlcGVhdEludGVydmFsKSk7CisgICAgICAg
IGdfc291cmNlX3NldF9jYWxsYmFjayhtX3RpbWVyU291cmNlLCByZWludGVycHJldF9jYXN0PEdT
b3VyY2VGdW5jPigmUnVuTG9vcDo6VGltZXJCYXNlOjpyZXBlYXRpbmdUaW1lckZpcmVkKSwgdGhp
cywgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV90aW1lclNvdXJjZSA9IGdfdGltZW91dF9z
b3VyY2VfbmV3KHN0YXRpY19jYXN0PGd1aW50PihuZXh0RmlyZUludGVydmFsKSk7CisgICAgICAg
IGdfc291cmNlX3NldF9jYWxsYmFjayhtX3RpbWVyU291cmNlLCByZWludGVycHJldF9jYXN0PEdT
b3VyY2VGdW5jPigmUnVuTG9vcDo6VGltZXJCYXNlOjpvbmVTaG90VGltZXJGaXJlZCksIHRoaXMs
IDApOworICAgIH0KKyAgICBnX3NvdXJjZV9hdHRhY2gobV90aW1lclNvdXJjZSwgbV9ydW5Mb29w
LT5tX3J1bkxvb3BDb250ZXh0KTsKK30KKwordm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnN0b3Ao
KQoreworICAgIGlmICghbV90aW1lclNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19z
b3VyY2VfZGVzdHJveShtX3RpbWVyU291cmNlKTsKKyAgICBtX3RpbWVyU291cmNlID0gMDsKK30K
KworYm9vbCBSdW5Mb29wOjpUaW1lckJhc2U6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV90aW1lclNvdXJjZTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dv
cmtRdWV1ZUd0ay5jcHAgYi9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NDBlZWMKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCkBAIC0wLDAgKzEsMjE2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldvcmtRdWV1
ZS5oIgorCisjaW5jbHVkZSAiV0tCYXNlLmgiCisjaW5jbHVkZSA8Z2xpYi5oPgorCisvLyBXb3Jr
UXVldWU6OkV2ZW50U291cmNlCitjbGFzcyBXb3JrUXVldWU6OkV2ZW50U291cmNlIHsKK3B1Ymxp
YzoKKyAgICBFdmVudFNvdXJjZShHU291cmNlKiBkaXNwYXRjaFNvdXJjZSwgUGFzc093blB0cjxX
b3JrSXRlbT4gd29ya0l0ZW0sIFdvcmtRdWV1ZSogd29ya1F1ZXVlKQorICAgICAgICA6IG1fZGlz
cGF0Y2hTb3VyY2UoZGlzcGF0Y2hTb3VyY2UpCisgICAgICAgICwgbV93b3JrSXRlbSh3b3JrSXRl
bSkKKyAgICAgICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCisgICAgeworICAgIH0KKworICAg
IEdTb3VyY2UqIGRpc3BhdGNoU291cmNlKCkgeyByZXR1cm4gbV9kaXNwYXRjaFNvdXJjZTsgfQor
CisgICAgc3RhdGljIGdib29sZWFuIHBlcmZvcm1Xb3JrT25jZShFdmVudFNvdXJjZSogZXZlbnRT
b3VyY2UpCisgICAgeworICAgICAgICBBU1NFUlQoZXZlbnRTb3VyY2UpOworICAgICAgICBXb3Jr
UXVldWUqIHF1ZXVlID0gZXZlbnRTb3VyY2UtPm1fd29ya1F1ZXVlOworICAgICAgICB7CisgICAg
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1faXNWYWxpZE11dGV4KTsKKyAgICAg
ICAgICAgIGlmICghcXVldWUtPm1faXNWYWxpZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFM
U0U7CisgICAgICAgIH0KKworICAgICAgICBldmVudFNvdXJjZS0+bV93b3JrSXRlbS0+ZXhlY3V0
ZSgpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFu
IGNsb3NlQ29ubmVjdGlvbihHSU9DaGFubmVsKiBjaGFubmVsLCBHSU9Db25kaXRpb24gY29uZGl0
aW9uLCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCisgICAgeworICAgICAgICBpZiAoIShjb25k
aXRpb24gJiBHX0lPX0hVUCkgJiYgIShjb25kaXRpb24gJiBHX0lPX0VSUikpCisgICAgICAgICAg
ICByZXR1cm4gRkFMU0U7CisKKyAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKyAgICAgICAg
V29ya1F1ZXVlKiBxdWV1ZSA9IGV2ZW50U291cmNlLT5tX3dvcmtRdWV1ZTsKKyAgICAgICAgewor
ICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7Cisg
ICAgICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEZBTFNFOworICAgICAgICB9CisgICAgICAgIGV2ZW50U291cmNlLT5tX3dvcmtJdGVtLT5leGVj
dXRlKCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGdi
b29sZWFuIHBlcmZvcm1Xb3JrKEdJT0NoYW5uZWwqIGNoYW5uZWwsIEdJT0NvbmRpdGlvbiBjb25k
aXRpb24sIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkgCisgICAgeworICAgICAgICBpZiAoIShj
b25kaXRpb24gJiBHX0lPX0lOKSkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAg
ICBBU1NFUlQoZXZlbnRTb3VyY2UpOworICAgICAgICBXb3JrUXVldWUqIHF1ZXVlID0gZXZlbnRT
b3VyY2UtPm1fd29ya1F1ZXVlOworICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIocXVldWUtPm1faXNWYWxpZE11dGV4KTsKKyAgICAgICAgICAgIGlmICghcXVldWUtPm1f
aXNWYWxpZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorCisgICAg
ICAgIGV2ZW50U291cmNlLT5tX3dvcmtJdGVtLT5leGVjdXRlKCk7CisgICAgICAgIHJldHVybiBU
UlVFOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVFdmVudFNvdXJjZShFdmVu
dFNvdXJjZSogZXZlbnRTb3VyY2UpIAorICAgIHsKKyAgICAgICAgQVNTRVJUKGV2ZW50U291cmNl
KTsKKyAgICAgICAgZGVsZXRlIGV2ZW50U291cmNlOworICAgIH0KKyAgIAorcHVibGljOgorICAg
IEdTb3VyY2UqIG1fZGlzcGF0Y2hTb3VyY2U7CisgICAgUGFzc093blB0cjxXb3JrSXRlbT4gbV93
b3JrSXRlbTsKKyAgICBXb3JrUXVldWUqIG1fd29ya1F1ZXVlOworfTsKKworLy8gV29ya1F1ZXVl
Cit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCit7
CisgICAgbV9ldmVudENvbnRleHQgPSBnX21haW5fY29udGV4dF9uZXcoKTsKKyAgICBBU1NFUlQo
bV9ldmVudENvbnRleHQpOworICAgIG1fZXZlbnRMb29wID0gZ19tYWluX2xvb3BfbmV3KG1fZXZl
bnRDb250ZXh0LCBGQUxTRSk7CisgICAgQVNTRVJUKG1fZXZlbnRMb29wKTsKKyAgICBtX3dvcmtR
dWV1ZVRocmVhZCA9IGNyZWF0ZVRocmVhZChyZWludGVycHJldF9jYXN0PFdURjo6VGhyZWFkRnVu
Y3Rpb24+KCZXb3JrUXVldWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKSwgdGhpcywgbmFtZSk7Cit9
CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2V2ZW50TG9vcExvY2spOworCisgICAgaWYgKG1fZXZlbnRMb29wKSB7Cisg
ICAgICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKG1fZXZlbnRMb29wKSkKKyAgICAgICAg
ICAgIGdfbWFpbl9sb29wX3F1aXQobV9ldmVudExvb3ApOworCisgICAgICAgIGdfbWFpbl9sb29w
X3VucmVmKG1fZXZlbnRMb29wKTsKKyAgICAgICAgbV9ldmVudExvb3AgPSAwOworICAgIH0KKwor
ICAgIGlmIChtX2V2ZW50Q29udGV4dCkgeworICAgICAgICBnX21haW5fY29udGV4dF91bnJlZiht
X2V2ZW50Q29udGV4dCk7CisgICAgICAgIG1fZXZlbnRDb250ZXh0ID0gMDsKKyAgICB9Cit9CisK
K3ZvaWQqIFdvcmtRdWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKiB3b3JrUXVl
dWUpCit7CisgICAgd29ya1F1ZXVlLT53b3JrUXVldWVUaHJlYWRCb2R5KCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWRCb2R5KCkKK3sKKyAgICBn
X21haW5fbG9vcF9ydW4obV9ldmVudExvb3ApOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0
ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50IGZkLCBpbnQgY29uZGl0aW9uLCBQYXNzT3duUHRyPFdv
cmtJdGVtPiBpdGVtKQoreworICAgIEdJT0NoYW5uZWwqIGNoYW5uZWwgPSBnX2lvX2NoYW5uZWxf
dW5peF9uZXcoZmQpOworICAgIEFTU0VSVChjaGFubmVsKTsKKyAgICBHU291cmNlKiBkaXNwYXRj
aFNvdXJjZSA9IGdfaW9fY3JlYXRlX3dhdGNoKGNoYW5uZWwsIHN0YXRpY19jYXN0PEdJT0NvbmRp
dGlvbj4oY29uZGl0aW9uKSk7CisgICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKKyAgICBFdmVu
dFNvdXJjZSogZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZGlzcGF0Y2hTb3VyY2UsIGl0
ZW0sIHRoaXMpOworICAgIEFTU0VSVChldmVudFNvdXJjZSk7CisgICAKKyAgICBpZiAoY29uZGl0
aW9uID09IEdfSU9fSU4pIHsKKyAgICAgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKGRpc3BhdGNo
U291cmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
R1NvdXJjZUZ1bmM+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29yayksIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTb3VyY2UsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1
ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKSk7CisgICAgfSBlbHNlIGlmIChjb25k
aXRpb24gPT0gKEdfSU9fSFVQIHwgR19JT19FUlIpKSB7CisgICAgICAgIGdfc291cmNlX3NldF9j
YWxsYmFjayhkaXNwYXRjaFNvdXJjZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6Y2xv
c2VDb25uZWN0aW9uKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFNvdXJj
ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0
cm95Tm90aWZ5PigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3VyY2UpKTsK
KyAgICB9CisKKyAgICAvLyBTZXQgdXAgdGhlIGV2ZW50IHNvdXJjZXMgdW5kZXIgdGhlIG11dGV4
IHNpbmNlIHRoaXMgaXMgc2hhcmVkIGFjcm9zcyBtdWx0aXBsZSB0aHJlYWRzCisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNMb2NrKTsKKyAgICAgICAgQVNT
RVJUKCFtX2V2ZW50U291cmNlcy5jb250YWlucyhmZCkpOworICAgICAgICBWZWN0b3I8RXZlbnRT
b3VyY2UqPiBzb3VyY2VzOworICAgICAgICBFdmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9ldmVu
dFNvdXJjZXMuZmluZChmZCk7CisgICAgICAgIGlmIChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQo
KSkgCisgICAgICAgICAgICBzb3VyY2VzID0gaXQtPnNlY29uZDsKKworICAgICAgICBzb3VyY2Vz
LmFwcGVuZChldmVudFNvdXJjZSk7CisgICAgICAgIG1fZXZlbnRTb3VyY2VzLnNldChmZCwgc291
cmNlcyk7CisgICAgfQorCisgICAgLy8gQXR0YWNoIHRoZSBldmVudCBzb3VyY2UgdG8gdGhlIEdN
YWluQ29udGV4dCB1bmRlciB0aGUgbXV0ZXggc2luY2UgdGhpcyBpcyBzaGFyZWQgYWNyb3NzIG11
bHRpcGxlIHRocmVhZHMKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50
TG9vcExvY2spOworICAgICAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3VyY2UsIG1fZXZl
bnRDb250ZXh0KTsKKyAgICB9Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRT
b3VyY2VIYW5kbGVyKGludCBmZCkKK3sKKyAgICBBU1NFUlQoZmQpOworICAgIAorICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOworICAgIAorICAgIEV2ZW50U291cmNl
SXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZkKTsKKyAgICBBU1NFUlQoaXQgIT0g
bV9ldmVudFNvdXJjZXMuZW5kKCkpOworICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlu
cyhmZCkpOworCisgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7CisgICAgICAg
IFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXMgPSBpdC0+c2Vjb25kOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIGdf
c291cmNlX2Rlc3Ryb3koc291cmNlc1tpXS0+ZGlzcGF0Y2hTb3VyY2UoKSk7CisKKyAgICAgICAg
bV9ldmVudFNvdXJjZXMucmVtb3ZlKGl0KTsKKyAgICB9Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpz
Y2hlZHVsZVdvcmsoUGFzc093blB0cjxXb3JrSXRlbT4gaXRlbSkKK3sKKyAgICBHU291cmNlKiBk
aXNwYXRjaFNvdXJjZSA9IGdfdGltZW91dF9zb3VyY2VfbmV3KDApOworICAgIEFTU0VSVChkaXNw
YXRjaFNvdXJjZSk7CisgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gbmV3IEV2ZW50U291
cmNlKGRpc3BhdGNoU291cmNlLCBpdGVtLCB0aGlzKTsKKyAgICAKKyAgICBnX3NvdXJjZV9zZXRf
Y2FsbGJhY2soZGlzcGF0Y2hTb3VyY2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9y
bVdvcmtPbmNlKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50U291cmNlLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4o
JldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKSk7CisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudExvb3BMb2NrKTsKKyAgICAgICAgZ19zb3Vy
Y2VfYXR0YWNoKGRpc3BhdGNoU291cmNlLCBtX2V2ZW50Q29udGV4dCk7CisgICAgfQorfQo=
</data>
<flag name="review"
          id="65642"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75006</attachid>
            <date>2010-11-29 03:08:54 -0800</date>
            <delta_ts>2010-11-29 22:25:12 -0800</delta_ts>
            <desc>RunLoop WorkQueue Connection class implementation</desc>
            <filename>rl_nov_29.patch</filename>
            <type>text/plain</type>
            <size>25735</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
ODA1MWY4OS4uZDFhYmMyMiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMC0xMS0yOSAgQW1ydXRoIFJhaiAg
PGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIEthc2liaGF0bGEgIDxyYXZpLmthc2li
aGF0bGFAbW90b3JvbGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBSdW5Mb29wIGFuZCBXb3JrUXVldWUgaW1wbGVtZW50YXRpb24gZm9y
IFdlYktpdDIgR1RLIHBvcnQuCisgICAgICAgIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDg1MDcpCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rp
b24uaDogVU5JWF9YMTEgc3BlY2lmaWMgY2hhbmdlcyBmb3IgR1RLIHBvcnQuCisgICAgICAgICog
UGxhdGZvcm0vQ29yZUlQQy9ndGs6IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMv
Z3RrL0Nvbm5lY3Rpb25HdGsuY3BwOiBBZGRlZC4gQ29ubmVjdGlvbiBjbGFzcyBpbXBsZW1lbnRh
dGlvbiBmb3IgR1RLIHBvcnQgKFVOSVhfWDExIHNwZWNpZmljKS4KKyAgICAgICAgKENvcmVJUEM6
OnJlYWRCeXRlc0Zyb21Tb2NrZXQpOgorICAgICAgICAoQ29yZUlQQzo6d3JpdGVCeXRlc1RvU29j
a2V0KToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246Om1lc3NhZ2VQcm9jZXNzaW5nQ29t
cGxldGVkKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246Om9wZW4pOgorICAgICAgICAo
Q29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdlcyk6Cisg
ICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKENv
cmVJUEM6OkNvbm5lY3Rpb246OnByb2Nlc3NDb21wbGV0ZWRNZXNzYWdlKToKKyAgICAgICAgKENv
cmVJUEM6OkNvbm5lY3Rpb246OnJlYWRFdmVudEhhbmRsZXIpOgorICAgICAgICAoQ29yZUlQQzo6
Q29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZSk6CisgICAgICAgICogUGxhdGZvcm0vUGxh
dGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oOiBVTklYX1gxMSBzcGVjaWZpYyBjaGFuZ2VzIGZvciBH
VEsgcG9ydC4KKyAgICAgICAgKiBQbGF0Zm9ybS9SdW5Mb29wLmg6IEdUSyBwb3J0IHNwZWNpZmlj
IGNoYW5nZXMuCisgICAgICAgICogUGxhdGZvcm0vV29ya1F1ZXVlLmg6IEdUSyBwb3J0IHNwZWNp
ZmljIGNoYW5nZXMuCisgICAgICAgICogUGxhdGZvcm0vZ3RrOiBBZGRlZC4KKyAgICAgICAgKiBQ
bGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHA6IEFkZGVkLiBSdW5zIGFuIGV2ZW50IGxvb3AgdXNp
bmcgR01haW5Mb29wIGFuZCBoYW5kbGVzIHRoZSBpbmNvbWluZyBtZXNzYWdlcy4KKyAgICAgICAg
KFJ1bkxvb3A6OlJ1bkxvb3ApOgorICAgICAgICAoUnVuTG9vcDo6flJ1bkxvb3ApOgorICAgICAg
ICAoUnVuTG9vcDo6cnVuKToKKyAgICAgICAgKFJ1bkxvb3A6Om1haW5Mb29wKToKKyAgICAgICAg
KFJ1bkxvb3A6OnN0b3ApOgorICAgICAgICAoUnVuTG9vcDo6cXVldWVXb3JrKToKKyAgICAgICAg
KFJ1bkxvb3A6Ondha2VVcCk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFz
ZSk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJhc2U6On5UaW1lckJhc2UpOgorICAgICAgICAo
UnVuTG9vcDo6VGltZXJCYXNlOjpvbmVTaG90VGltZXJGaXJlZCk6CisgICAgICAgIChSdW5Mb29w
OjpUaW1lckJhc2U6OnJlcGVhdGluZ1RpbWVyRmlyZWQpOgorICAgICAgICAoUnVuTG9vcDo6VGlt
ZXJCYXNlOjpzdGFydCk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJhc2U6OnN0b3ApOgorICAg
ICAgICAoUnVuTG9vcDo6VGltZXJCYXNlOjppc0FjdGl2ZSk6CisgICAgICAgICogUGxhdGZvcm0v
Z3RrL1dvcmtRdWV1ZUd0ay5jcHA6IEFkZGVkLiBDcmVhdGVzIGEgdGhyZWFkIGFuZCBwb2xscyBv
biBhIGdpdmVuIGZkIHVzaW5nIEdJT0NoYW5uZWwuCisgICAgICAgIERpc3BhdGNoZXMgdGhlIG9i
dGFpbmVkIG1lc3NhZ2VzIHRvIFJ1bkxvb3AncyBHTWFpbkxvb3AuCisgICAgICAgIChXb3JrUXVl
dWU6OkV2ZW50U291cmNlOjpFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50
U291cmNlOjpkaXNwYXRjaFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNl
OjpwZXJmb3JtV29ya09uY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVy
Zm9ybVdvcmspOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRT
b3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpz
dGFydFdvcmtRdWV1ZVRocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVh
ZEJvZHkpOgorICAgICAgICAoV29ya1F1ZXVlOjpyZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcik6
CisgICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAg
ICAgICAoV29ya1F1ZXVlOjpzY2hlZHVsZVdvcmspOgorCiAyMDEwLTEwLTE5ICBBbmRlcnMgQ2Fy
bHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdl
aW5pZy4KZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgg
Yi9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCmluZGV4IGU1MTQ0NTIuLjZh
NDI5YmEgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgK
KysrIGIvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaApAQCAtMSw2ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xh
IE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC04Niw2ICs4Nyw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBj
cmVhdGVTZXJ2ZXJBbmRDbGllbnRJZGVudGlmaWVycyhJZGVudGlmaWVyJiBzZXJ2ZXJJZGVudGlm
aWVyLCBJZGVudGlmaWVyJiBjbGllbnRJZGVudGlmaWVyKTsKICNlbGlmIFBMQVRGT1JNKFFUKQog
ICAgIHR5cGVkZWYgY29uc3QgUVN0cmluZyBJZGVudGlmaWVyOworI2VsaWYgUExBVEZPUk0oR1RL
KQorICAgIHR5cGVkZWYgaW50IElkZW50aWZpZXI7CiAjZW5kaWYKIAogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENvbm5lY3Rpb24+IGNyZWF0ZVNlcnZlckNvbm5lY3Rpb24oSWRlbnRpZmllciwgQ2xp
ZW50KiwgUnVuTG9vcCogY2xpZW50UnVuTG9vcCk7CkBAIC0yNTcsNiArMjYwLDE1IEBAIHByaXZh
dGU6CiAgICAgc2l6ZV90IG1fY3VycmVudE1lc3NhZ2VTaXplOwogICAgIFFMb2NhbFNvY2tldCog
bV9zb2NrZXQ7CiAgICAgUVN0cmluZyBtX3NlcnZlck5hbWU7CisjZWxpZiBQTEFURk9STShHVEsp
CisgICAgdm9pZCByZWFkRXZlbnRIYW5kbGVyKCk7CisgICAgdm9pZCBwcm9jZXNzQ29tcGxldGVk
TWVzc2FnZSgpOworICAgIGJvb2wgbWVzc2FnZVByb2Nlc3NpbmdDb21wbGV0ZWQoKSB7IHJldHVy
biAhbV9jdXJyZW50TWVzc2FnZVNpemU7IH0KKworICAgIGludCBtX3NvY2tldDsKKyAgICBWZWN0
b3I8dWludDhfdD4gbV9yZWFkQnVmZmVyOworICAgIHNpemVfdCBtX2N1cnJlbnRNZXNzYWdlU2l6
ZTsKKyAgICBzaXplX3QgbV9wZW5kaW5nQnl0ZXM7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBh
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9ndGsvQ29ubmVjdGlvbkd0ay5jcHAgYi9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25HdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjU5OTk0NjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25HdGsuY3BwCkBAIC0wLDAgKzEsMjA1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIK
KworI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgorI2luY2x1ZGUgIldvcmtJdGVtLmgiCisj
aW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8c3lzL2ZjbnRs
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKKworc3Rh
dGljIGNvbnN0IHNpemVfdCBpbml0aWFsTWVzc2FnZUJ1ZmZlclNpemUgPSA0MDk2OworCitzdGF0
aWMgaW50IHJlYWRCeXRlc0Zyb21Tb2NrZXQoaW50IGZkLCB1aW50OF90KiBwdHIsIHNpemVfdCBs
ZW5ndGgpCit7CisgICAgQVNTRVJUKGZkID4gMCk7CisgICAgQVNTRVJUKGJ1ZmZlcik7CisgICAg
QVNTRVJUKGxlbmd0aCA+IDApOworCisgICAgc3NpemVfdCBudW1iZXJPZkJ5dGVzUmVhZCA9IDA7
CisgICAgc2l6ZV90IHBlbmRpbmdCeXRlc1RvUmVhZCA9IGxlbmd0aDsKKyAgICB1aW50OF90KiBi
dWZmZXIgPSBwdHI7CisKKyAgICB3aGlsZSAocGVuZGluZ0J5dGVzVG9SZWFkID4gMCkgeworICAg
ICAgICBpZiAoKG51bWJlck9mQnl0ZXNSZWFkID0gcmVhZChmZCwgYnVmZmVyLCBwZW5kaW5nQnl0
ZXNUb1JlYWQpKSA8IDApIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAg
ICAgICAgICAgICBudW1iZXJPZkJ5dGVzUmVhZCA9IDA7CisgICAgICAgICAgICBlbHNlIGlmIChl
cnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRVdPVUxEQkxPQ0spCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7IAorICAg
ICAgICB9IGVsc2UgaWYgKCFudW1iZXJPZkJ5dGVzUmVhZCkKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGJ1ZmZlciArPSBudW1iZXJPZkJ5dGVzUmVhZDsKKyAgICAgICAgcGVuZGluZ0J5
dGVzVG9SZWFkIC09IG51bWJlck9mQnl0ZXNSZWFkOworICAgIH0KKworICAgIHJldHVybiAobGVu
Z3RoIC0gcGVuZGluZ0J5dGVzVG9SZWFkKTsKK30KKworc3RhdGljIGJvb2wgd3JpdGVCeXRlc1Rv
U29ja2V0KGludCBmZCwgdWludDhfdCogcHRyLCBzaXplX3QgbGVuZ3RoKQoreworICAgIEFTU0VS
VChmZCA+IDApOworICAgIEFTU0VSVChidWZmZXIpOworICAgIEFTU0VSVChsZW5ndGggPiAwKTsK
KworICAgIHNzaXplX3QgbnVtYmVyT2ZCeXRlc1dyaXR0ZW4gPSAwOworICAgIHNpemVfdCBwZW5k
aW5nQnl0ZXNUb1dyaXRlID0gbGVuZ3RoOworICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IHB0cjsKKwor
ICAgIC8vIEtlZXAgd3JpdGluZyB0byB0aGUgc29ja2V0IHRpbGwgdGhlIGNvbXBsZXRlIG1lc3Nh
Z2UgaGFzIGJlZW4gd3JpdHRlbgorICAgIHdoaWxlIChwZW5kaW5nQnl0ZXNUb1dyaXRlID4gMCkg
eworICAgICAgICBpZiAoKG51bWJlck9mQnl0ZXNXcml0dGVuID0gd3JpdGUoZmQsIGJ1ZmZlciwg
cGVuZGluZ0J5dGVzVG9Xcml0ZSkpIDwgMCkgeworICAgICAgICAgICAgaWYgKGVycm5vID09IEVJ
TlRSKQorICAgICAgICAgICAgICAgIG51bWJlck9mQnl0ZXNXcml0dGVuID0gMDsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgYnVmZmVyICs9IG51bWJlck9mQnl0ZXNXcml0dGVuOworICAgICAgICBwZW5kaW5nQnl0ZXNU
b1dyaXRlIC09IG51bWJlck9mQnl0ZXNXcml0dGVuOworICAgIH0KKworICAgIC8vIHdyaXRlIG9w
ZXJhdGlvbiBmYWlsZWQgaWYgY29tcGxldGUgbWVzc2FnZSBpcyBub3Qgd3JpdHRlbgorICAgIHJl
dHVybiAhcGVuZGluZ0J5dGVzVG9Xcml0ZTsKK30KKwordm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9y
bUluaXRpYWxpemUoSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIG1fY3VycmVudE1lc3Nh
Z2VTaXplID0gMDsKKyAgICBtX3BlbmRpbmdCeXRlcyA9IDA7CisgICAgbV9yZWFkQnVmZmVyLnJl
c2l6ZShpbml0aWFsTWVzc2FnZUJ1ZmZlclNpemUpOworICAgIG1fc29ja2V0ID0gaWRlbnRpZmll
cjsKKyAgICBtX2lzQ29ubmVjdGVkID0gdHJ1ZTsKK30KKwordm9pZCBDb25uZWN0aW9uOjpwbGF0
Zm9ybUludmFsaWRhdGUoKQoreworICAgIGlmICghbV9pc0Nvbm5lY3RlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9jb25uZWN0aW9uUXVldWUudW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxl
cihtX3NvY2tldCk7CisgICAgaWYgKG1fc29ja2V0ID4gMCkgeworICAgICAgICBjbG9zZShtX3Nv
Y2tldCk7CisgICAgICAgIG1fc29ja2V0ID0gLTE7CisgICAgfQorCisgICAgbV9pc0Nvbm5lY3Rl
ZCA9IGZhbHNlOworfQorCit2b2lkIENvbm5lY3Rpb246OnByb2Nlc3NDb21wbGV0ZWRNZXNzYWdl
KCkKK3sKKyAgICBzaXplX3QgcmVhbEJ1ZmZlclNpemUgPSBtX2N1cnJlbnRNZXNzYWdlU2l6ZSAt
IHNpemVvZihNZXNzYWdlSUQpOworICAgIHVuc2lnbmVkIG1lc3NhZ2VJRCA9ICpyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkKj4obV9yZWFkQnVmZmVyLmRhdGEoKSArIHJlYWxCdWZmZXJTaXplKTsK
KworICAgIHByb2Nlc3NJbmNvbWluZ01lc3NhZ2UoTWVzc2FnZUlEOjpmcm9tSW50KG1lc3NhZ2VJ
RCksIGFkb3B0UHRyKG5ldyBBcmd1bWVudERlY29kZXIobV9yZWFkQnVmZmVyLmRhdGEoKSwgcmVh
bEJ1ZmZlclNpemUpKSk7CisKKyAgICAvLyBwcmVwYXJlIGZvciB0aGUgbmV4dCBtZXNzYWdlCisg
ICAgbV9jdXJyZW50TWVzc2FnZVNpemUgPSAwOworICAgIG1fcGVuZGluZ0J5dGVzID0gMDsKK30K
Kwordm9pZCBDb25uZWN0aW9uOjpyZWFkRXZlbnRIYW5kbGVyKCkKK3sKKyAgICBpZiAobV9zb2Nr
ZXQgPCAwKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBoYW5kbGUgYW55IHByZXZpb3VzbHkg
dW5wcm9jZXNzZWQgbWVzc2FnZQorICAgIGlmICghbWVzc2FnZVByb2Nlc3NpbmdDb21wbGV0ZWQo
KSkgeworICAgICAgICBpZiAoKG1fcGVuZGluZ0J5dGVzIC09IHJlYWRCeXRlc0Zyb21Tb2NrZXQo
bV9zb2NrZXQsIChtX3JlYWRCdWZmZXIuZGF0YSgpICsgKG1fY3VycmVudE1lc3NhZ2VTaXplIC0g
bV9wZW5kaW5nQnl0ZXMpKSwgbV9wZW5kaW5nQnl0ZXMpKSA+IDApCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgLy8gTWVzc2FnZSByZWNlaXZlZCBjb21wbGV0ZWx5LiBQcm9jZXNzIHRo
ZSBtZXNzYWdlIG5vdy4KKyAgICAgICAgcHJvY2Vzc0NvbXBsZXRlZE1lc3NhZ2UoKTsKKyAgICB9
CisKKyAgICAvLyBwcmVwYXJlIHRvIHJlYWQgdGhlIG5leHQgbWVzc2FnZQorICAgIHVpbnQ4X3Qg
c2l6ZUJ1ZmZlcltzaXplb2Yoc2l6ZV90KV07CisgICAgbWVtc2V0KHNpemVCdWZmZXIsIDAsIHNp
emVvZihzaXplX3QpKTsKKyAgICAKKyAgICB3aGlsZSAobWVzc2FnZVByb2Nlc3NpbmdDb21wbGV0
ZWQoKSkgeworICAgICAgICBpZiAocmVhZEJ5dGVzRnJvbVNvY2tldChtX3NvY2tldCwgc2l6ZUJ1
ZmZlciwgc2l6ZW9mKHNpemVfdCkpKQorICAgICAgICAgICAgbV9jdXJyZW50TWVzc2FnZVNpemUg
PSAqcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPihzaXplQnVmZmVyKTsKKworICAgICAgICBpZiAo
IW1fY3VycmVudE1lc3NhZ2VTaXplKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYg
KG1fcmVhZEJ1ZmZlci5zaXplKCkgPCBtX2N1cnJlbnRNZXNzYWdlU2l6ZSkKKyAgICAgICAgICAg
IG1fcmVhZEJ1ZmZlci5ncm93KG1fY3VycmVudE1lc3NhZ2VTaXplKTsKKworICAgICAgICBtX3Bl
bmRpbmdCeXRlcyA9IG1fY3VycmVudE1lc3NhZ2VTaXplIC0gcmVhZEJ5dGVzRnJvbVNvY2tldCht
X3NvY2tldCwgbV9yZWFkQnVmZmVyLmRhdGEoKSwgbV9jdXJyZW50TWVzc2FnZVNpemUpOworICAg
ICAgICBpZiAobV9wZW5kaW5nQnl0ZXMgPiAwKSAvLyBtZXNzYWdlIHBhcnRpYWxseSByZWNlaXZl
ZAorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gTWVzc2FnZSByZWNlaXZlZCBjb21w
bGV0ZWx5LiBQcm9jZXNzIHRoZSBtZXNzYWdlIG5vdy4KKyAgICAgICAgcHJvY2Vzc0NvbXBsZXRl
ZE1lc3NhZ2UoKTsKKworICAgICAgICBtZW1zZXQoc2l6ZUJ1ZmZlciwgMCwgc2l6ZW9mKHNpemVf
dCkpOworICAgIH0KK30KKworYm9vbCBDb25uZWN0aW9uOjpvcGVuKCkKK3sKKyAgICBpbnQgZmxh
Z3MgPSBmY250bChtX3NvY2tldCwgRl9HRVRGTCwgMCk7CisgICAgZmNudGwobV9zb2NrZXQsIEZf
U0VURkwsIGZsYWdzIHwgT19OT05CTE9DSyk7CisKKyAgICAvLyBSZWdpc3RlciBjYWxsYmFja3Mg
Zm9yIGNvbm5lY3Rpb24gdGVybWluYXRpb24gYW5kIGlucHV0IGRhdGEgb24gdGhlIFdvcmtRdWV1
ZQorICAgIG1fY29ubmVjdGlvblF1ZXVlLnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKG1fc29j
a2V0LCAoR19JT19IVVAgfCBHX0lPX0VSUiksIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5l
Y3Rpb246OmNvbm5lY3Rpb25EaWRDbG9zZSkpOworICAgIG1fY29ubmVjdGlvblF1ZXVlLnJlZ2lz
dGVyRXZlbnRTb3VyY2VIYW5kbGVyKG1fc29ja2V0LCBHX0lPX0lOLCBXb3JrSXRlbTo6Y3JlYXRl
KHRoaXMsICZDb25uZWN0aW9uOjpyZWFkRXZlbnRIYW5kbGVyKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdlcygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIChtX3NvY2tldCA+IDApOworfQorCitib29sIENvbm5lY3Rp
b246OnNlbmRPdXRnb2luZ01lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxB
cmd1bWVudEVuY29kZXI+IGFyZ3VtZW50cykKK3sKKyAgICBpZiAobV9zb2NrZXQgPCAwKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSBwdXQgdGhlIG1lc3NhZ2UgSUQgbGFzdC4K
KyAgICBhcmd1bWVudHMtPmVuY29kZVVJbnQzMihtZXNzYWdlSUQudG9JbnQoKSk7CisKKyAgICBz
aXplX3QgYnVmZmVyU2l6ZSA9IGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpOworCisgICAgLy8gU2Vu
ZCB0aGUgbWVzc2FnZSBzaXplIGZpcnN0CisgICAgaWYgKCF3cml0ZUJ5dGVzVG9Tb2NrZXQobV9z
b2NrZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZidWZmZXJTaXplKSwgc2l6ZW9mKHNp
emVfdCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXdyaXRlQnl0ZXNUb1Nv
Y2tldChtX3NvY2tldCwgYXJndW1lbnRzLT5idWZmZXIoKSwgYXJndW1lbnRzLT5idWZmZXJTaXpl
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgQ29yZUlQQwpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9y
bVByb2Nlc3NJZGVudGlmaWVyLmggYi9XZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXIuaAppbmRleCBhZDFlMzk0Li4wMzYzNjkyIDEwMDY0NAotLS0gYS9XZWJLaXQyL1Bs
YXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaAorKysgYi9XZWJLaXQyL1BsYXRmb3Jt
L1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaApAQCAtMzksNiArMzksOCBAQCB0eXBlZGVmIHBp
ZF90IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CiB0eXBlZGVmIEhBTkRMRSBQbGF0Zm9ybVBy
b2Nlc3NJZGVudGlmaWVyOwogI2VsaWYgUExBVEZPUk0oUVQpCiB0eXBlZGVmIFFQcm9jZXNzKiBQ
bGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOworI2VsaWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBw
aWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdCAKZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vUnVuTG9vcC5oIGIvV2ViS2l0
Mi9QbGF0Zm9ybS9SdW5Mb29wLmgKaW5kZXggNWQ5Njk4My4uNzkyNmUxMSAxMDA2NDQKLS0tIGEv
V2ViS2l0Mi9QbGF0Zm9ybS9SdW5Mb29wLmgKKysrIGIvV2ViS2l0Mi9QbGF0Zm9ybS9SdW5Mb29w
LmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo
YykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNiArMzMsMTIgQEAKICNpbmNsdWRl
IDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgc3RydWN0IF9H
U291cmNlIEdTb3VyY2U7Cit0eXBlZGVmIHN0cnVjdCBfR01haW5Mb29wIEdNYWluTG9vcDsKK3R5
cGVkZWYgc3RydWN0IF9HTWFpbkNvbnRleHQgR01haW5Db250ZXh0OwordHlwZWRlZiBpbnQgZ2Jv
b2xlYW47CisjZW5kaWYKIAogY2xhc3MgV29ya0l0ZW07CiAKQEAgLTc2LDYgKzgzLDExIEBAIHB1
YmxpYzoKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgICAgICBzdGF0aWMgdm9pZCB0aW1lckZpcmVk
KFJ1bkxvb3AqLCBpbnQgSUQpOwogICAgICAgICBpbnQgbV9JRDsKKyNlbGlmIFBMQVRGT1JNKEdU
SykKKyAgICAgICAgc3RhdGljIGdib29sZWFuIG9uZVNob3RUaW1lckZpcmVkKFJ1bkxvb3A6OlRp
bWVyQmFzZSopOworICAgICAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVwZWF0aW5nVGltZXJGaXJlZChS
dW5Mb29wOjpUaW1lckJhc2UqKTsKKyAgICAgICAgdm9pZCByZXNldFRpbWVyU291cmNlKCk7Cisg
ICAgICAgIEdTb3VyY2UqIG1fdGltZXJTb3VyY2U7CiAjZW5kaWYKICAgICB9OwogCkBAIC0xMjcs
NiArMTM5LDEzIEBAIHByaXZhdGU6CiAgICAgVGltZXJNYXAgbV9hY3RpdmVUaW1lcnM7CiAgICAg
Y2xhc3MgVGltZXJPYmplY3Q7CiAgICAgVGltZXJPYmplY3QqIG1fdGltZXJPYmplY3Q7CisjZWxp
ZiBQTEFURk9STShHVEspCitwdWJsaWM6CisgICAgc3RhdGljIGdib29sZWFuIHF1ZXVlV29yayhS
dW5Mb29wKik7CisgICAgR01haW5Mb29wKiBtYWluTG9vcCgpOworcHJpdmF0ZToKKyAgICBHTWFp
bkNvbnRleHQqIG1fcnVuTG9vcENvbnRleHQ7CisgICAgR01haW5Mb29wKiBtX3J1bkxvb3BNYWlu
OwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5o
IGIvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAppbmRleCBmN2M3ZGNhLi42Y2ZkNmI4IDEw
MDY0NAotLS0gYS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCisrKyBiL1dlYktpdDIvUGxh
dGZvcm0vV29ya1F1ZXVlLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdo
dCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMsNiArNDQsOSBAQAogY2xhc3Mg
UUxvY2FsU29ja2V0OwogY2xhc3MgUU9iamVjdDsKIGNsYXNzIFFUaHJlYWQ7CisjZWxpZiBQTEFU
Rk9STShHVEspCit0eXBlZGVmIHN0cnVjdCBfR01haW5Db250ZXh0IEdNYWluQ29udGV4dDsKK3R5
cGVkZWYgc3RydWN0IF9HTWFpbkxvb3AgR01haW5Mb29wOwogI2VuZGlmCiAKIGNsYXNzIFdvcmtR
dWV1ZSB7CkBAIC03NCw2ICs3OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc2Nvbm5lY3RTaWdu
YWwoUU9iamVjdCosIGNvbnN0IGNoYXIqIHNpZ25hbCk7CiAKICAgICB2b2lkIG1vdmVTb2NrZXRU
b1dvcmtUaHJlYWQoUUxvY2FsU29ja2V0Kik7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgdm9p
ZCByZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQsIGludCwgUGFzc093blB0cjxXb3JrSXRl
bT4pOworICAgIHZvaWQgdW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQpOwogI2VuZGlm
CiAKIHByaXZhdGU6CkBAIC0xNDYsNiArMTUzLDE4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxR
T2JqZWN0KiwgV29ya0l0ZW1RdCo+IG1fc2lnbmFsTGlzdGVuZXJzOwogICAgIFFUaHJlYWQqIG1f
d29ya1RocmVhZDsKICAgICBmcmllbmQgY2xhc3MgV29ya0l0ZW1RdDsKKyNlbGlmIFBMQVRGT1JN
KEdUSykKKyAgICBzdGF0aWMgdm9pZCogc3RhcnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKik7
CisgICAgdm9pZCB3b3JrUXVldWVUaHJlYWRCb2R5KCk7CisKKyAgICBUaHJlYWRJZGVudGlmaWVy
IG1fd29ya1F1ZXVlVGhyZWFkOworICAgIEdNYWluQ29udGV4dCogbV9ldmVudENvbnRleHQ7Cisg
ICAgTXV0ZXggbV9ldmVudExvb3BMb2NrOworICAgIEdNYWluTG9vcCogbV9ldmVudExvb3A7Cisg
ICAgTXV0ZXggbV9ldmVudFNvdXJjZXNMb2NrOworICAgIGNsYXNzIEV2ZW50U291cmNlOworICAg
IEhhc2hNYXA8aW50LCBWZWN0b3I8RXZlbnRTb3VyY2UqPiA+IG1fZXZlbnRTb3VyY2VzOworICAg
IHR5cGVkZWYgSGFzaE1hcDxpbnQsIFZlY3RvcjxFdmVudFNvdXJjZSo+ID46Oml0ZXJhdG9yIEV2
ZW50U291cmNlSXRlcmF0b3I7IAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9XZWJLaXQyL1Bs
YXRmb3JtL2d0ay9SdW5Mb29wR3RrLmNwcCBiL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1J1bkxvb3BH
dGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZjlhOWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXQyL1BsYXRmb3JtL2d0ay9SdW5Mb29wR3RrLmNwcApAQCAtMCww
ICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJS
dW5Mb29wLmgiCisKKyNpbmNsdWRlICJXS0Jhc2UuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisKK1J1
bkxvb3A6OlJ1bkxvb3AoKQoreworICAgIG1fcnVuTG9vcENvbnRleHQgPSBnX21haW5fY29udGV4
dF9kZWZhdWx0KCk7CisgICAgQVNTRVJUKG1fcnVuTG9vcENvbnRleHQpOworICAgIG1fcnVuTG9v
cE1haW4gPSBnX21haW5fbG9vcF9uZXcobV9ydW5Mb29wQ29udGV4dCwgRkFMU0UpOworICAgIEFT
U0VSVChtX3J1bkxvb3BNYWluKTsKK30KKworUnVuTG9vcDo6flJ1bkxvb3AoKQoreworICAgIGlm
IChtX3J1bkxvb3BNYWluKSB7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9ydW5Mb29wTWFp
bik7CisgICAgICAgIGdfbWFpbl9sb29wX3VucmVmKG1fcnVuTG9vcE1haW4pOworICAgIH0KKwor
ICAgIGlmIChtX3J1bkxvb3BDb250ZXh0KQorICAgICAgICBnX21haW5fY29udGV4dF91bnJlZiht
X3J1bkxvb3BDb250ZXh0KTsKK30KKwordm9pZCBSdW5Mb29wOjpydW4oKQoreworICAgIGdfbWFp
bl9sb29wX3J1bihSdW5Mb29wOjptYWluKCktPm1haW5Mb29wKCkpOworfQorCitHTWFpbkxvb3Aq
IFJ1bkxvb3A6Om1haW5Mb29wKCkKK3sKKyAgICByZXR1cm4gbV9ydW5Mb29wTWFpbjsKK30KKwor
dm9pZCBSdW5Mb29wOjpzdG9wKCkKK3sKKyAgICBnX21haW5fbG9vcF9xdWl0KG1fcnVuTG9vcE1h
aW4pOworfQorCitnYm9vbGVhbiBSdW5Mb29wOjpxdWV1ZVdvcmsoUnVuTG9vcCogcnVuTG9vcCkK
K3sKKyAgICBydW5Mb29wLT5wZXJmb3JtV29yaygpOworICAgIHJldHVybiBGQUxTRTsKK30KKwor
dm9pZCBSdW5Mb29wOjp3YWtlVXAoKQoreworICAgIEdTb3VyY2UqIHNvdXJjZSA9IGdfdGltZW91
dF9zb3VyY2VfbmV3KDApOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhzb3VyY2UsIHJlaW50
ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZSdW5Mb29wOjpxdWV1ZVdvcmspLCB0aGlzLCAwKTsK
KyAgICBnX3NvdXJjZV9hdHRhY2goc291cmNlLCBtX3J1bkxvb3BDb250ZXh0KTsKKworICAgIGdf
bWFpbl9jb250ZXh0X3dha2V1cChtX3J1bkxvb3BDb250ZXh0KTsKK30KKworUnVuTG9vcDo6VGlt
ZXJCYXNlOjpUaW1lckJhc2UoUnVuTG9vcCogcnVuTG9vcCkKKyAgICA6IG1fcnVuTG9vcChydW5M
b29wKQorICAgICwgbV90aW1lclNvdXJjZSgwKQoreworfQorCitSdW5Mb29wOjpUaW1lckJhc2U6
On5UaW1lckJhc2UoKQoreworICAgIHN0b3AoKTsKK30KKwordm9pZCBSdW5Mb29wOjpUaW1lckJh
c2U6OnJlc2V0VGltZXJTb3VyY2UoKQoreworICAgIG1fdGltZXJTb3VyY2UgPSAwOworfQorCitn
Ym9vbGVhbiBSdW5Mb29wOjpUaW1lckJhc2U6Om9uZVNob3RUaW1lckZpcmVkKFJ1bkxvb3A6OlRp
bWVyQmFzZSogdGltZXIpCit7CisgICAgdGltZXItPmZpcmVkKCk7CisgICAgdGltZXItPnJlc2V0
VGltZXJTb3VyY2UoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK2dib29sZWFuIFJ1bkxvb3A6
OlRpbWVyQmFzZTo6cmVwZWF0aW5nVGltZXJGaXJlZChSdW5Mb29wOjpUaW1lckJhc2UqIHRpbWVy
KQoreworICAgIHRpbWVyLT5maXJlZCgpOworICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIFJ1
bkxvb3A6OlRpbWVyQmFzZTo6c3RhcnQoZG91YmxlIG5leHRGaXJlSW50ZXJ2YWwsIGRvdWJsZSBy
ZXBlYXRJbnRlcnZhbCkKK3sKKyAgICBpZiAobV90aW1lclNvdXJjZSkKKyAgICAgICAgc3RvcCgp
OworCisgICAgaWYgKHJlcGVhdEludGVydmFsKSB7CisgICAgICAgIG1fdGltZXJTb3VyY2UgPSBn
X3RpbWVvdXRfc291cmNlX25ldyhzdGF0aWNfY2FzdDxndWludD4ocmVwZWF0SW50ZXJ2YWwpKTsK
KyAgICAgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fdGltZXJTb3VyY2UsIHJlaW50ZXJwcmV0
X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZSdW5Mb29wOjpUaW1lckJhc2U6OnJlcGVhdGluZ1RpbWVyRmly
ZWQpLCB0aGlzLCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3RpbWVyU291cmNlID0gZ190
aW1lb3V0X3NvdXJjZV9uZXcoc3RhdGljX2Nhc3Q8Z3VpbnQ+KG5leHRGaXJlSW50ZXJ2YWwpKTsK
KyAgICAgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fdGltZXJTb3VyY2UsIHJlaW50ZXJwcmV0
X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZSdW5Mb29wOjpUaW1lckJhc2U6Om9uZVNob3RUaW1lckZpcmVk
KSwgdGhpcywgMCk7CisgICAgfQorICAgIGdfc291cmNlX2F0dGFjaChtX3RpbWVyU291cmNlLCBt
X3J1bkxvb3AtPm1fcnVuTG9vcENvbnRleHQpOworfQorCit2b2lkIFJ1bkxvb3A6OlRpbWVyQmFz
ZTo6c3RvcCgpCit7CisgICAgaWYgKCFtX3RpbWVyU291cmNlKQorICAgICAgICByZXR1cm47CisK
KyAgICBnX3NvdXJjZV9kZXN0cm95KG1fdGltZXJTb3VyY2UpOworICAgIG1fdGltZXJTb3VyY2Ug
PSAwOworfQorCitib29sIFJ1bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3RpdmUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3RpbWVyU291cmNlOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0Zm9y
bS9ndGsvV29ya1F1ZXVlR3RrLmNwcCBiL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0
ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQzYzk5NQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKQEAgLTAs
MCArMSwxOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1v
YmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
V29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlICJXS0Jhc2UuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisK
Ky8vIFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UKK2NsYXNzIFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2Ug
eworcHVibGljOgorICAgIEV2ZW50U291cmNlKEdTb3VyY2UqIGRpc3BhdGNoU291cmNlLCBQYXNz
T3duUHRyPFdvcmtJdGVtPiB3b3JrSXRlbSwgV29ya1F1ZXVlKiB3b3JrUXVldWUpCisgICAgICAg
IDogbV9kaXNwYXRjaFNvdXJjZShkaXNwYXRjaFNvdXJjZSkKKyAgICAgICAgLCBtX3dvcmtJdGVt
KHdvcmtJdGVtKQorICAgICAgICAsIG1fd29ya1F1ZXVlKHdvcmtRdWV1ZSkKKyAgICB7CisgICAg
fQorCisgICAgR1NvdXJjZSogZGlzcGF0Y2hTb3VyY2UoKSB7IHJldHVybiBtX2Rpc3BhdGNoU291
cmNlOyB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmtPbmNlKEV2ZW50U291cmNl
KiBldmVudFNvdXJjZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChldmVudFNvdXJjZSk7CisgICAg
ICAgIFdvcmtRdWV1ZSogcXVldWUgPSBldmVudFNvdXJjZS0+bV93b3JrUXVldWU7CisgICAgICAg
IHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihxdWV1ZS0+bV9pc1ZhbGlkTXV0ZXgp
OworICAgICAgICAgICAgaWYgKCFxdWV1ZS0+bV9pc1ZhbGlkKQorICAgICAgICAgICAgICAgIHJl
dHVybiBGQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGV2ZW50U291cmNlLT5tX3dvcmtJdGVt
LT5leGVjdXRlKCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBzdGF0aWMg
Z2Jvb2xlYW4gcGVyZm9ybVdvcmsoR0lPQ2hhbm5lbCogY2hhbm5lbCwgR0lPQ29uZGl0aW9uIGNv
bmRpdGlvbiwgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKSAKKyAgICB7CisgICAgICAgIEFTU0VS
VChldmVudFNvdXJjZSk7CisKKyAgICAgICAgaWYgKCEoY29uZGl0aW9uICYgR19JT19JTikgJiYg
IShjb25kaXRpb24gJiBHX0lPX0hVUCkgJiYgIShjb25kaXRpb24gJiBHX0lPX0VSUikpCisgICAg
ICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgICAgV29ya1F1ZXVlKiBxdWV1ZSA9IGV2ZW50
U291cmNlLT5tX3dvcmtRdWV1ZTsKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7CisgICAgICAgICAgICBpZiAoIXF1ZXVlLT5t
X2lzVmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisKKyAg
ICAgICAgZXZlbnRTb3VyY2UtPm1fd29ya0l0ZW0tPmV4ZWN1dGUoKTsKKworICAgICAgICBpZiAo
KGNvbmRpdGlvbiAmIEdfSU9fSFVQKSB8fCAoY29uZGl0aW9uICYgR19JT19FUlIpKQorICAgICAg
ICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgdm9pZCBkZWxldGVFdmVudFNvdXJjZShFdmVudFNvdXJjZSogZXZlbnRTb3Vy
Y2UpIAorICAgIHsKKyAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKyAgICAgICAgZGVsZXRl
IGV2ZW50U291cmNlOworICAgIH0KKyAgIAorcHVibGljOgorICAgIEdTb3VyY2UqIG1fZGlzcGF0
Y2hTb3VyY2U7CisgICAgUGFzc093blB0cjxXb3JrSXRlbT4gbV93b3JrSXRlbTsKKyAgICBXb3Jr
UXVldWUqIG1fd29ya1F1ZXVlOworfTsKKworLy8gV29ya1F1ZXVlCit2b2lkIFdvcmtRdWV1ZTo6
cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgbV9ldmVudENvbnRl
eHQgPSBnX21haW5fY29udGV4dF9uZXcoKTsKKyAgICBBU1NFUlQobV9ldmVudENvbnRleHQpOwor
ICAgIG1fZXZlbnRMb29wID0gZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250ZXh0LCBGQUxTRSk7
CisgICAgQVNTRVJUKG1fZXZlbnRMb29wKTsKKyAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IGNyZWF0
ZVRocmVhZChyZWludGVycHJldF9jYXN0PFdURjo6VGhyZWFkRnVuY3Rpb24+KCZXb3JrUXVldWU6
OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKSwgdGhpcywgbmFtZSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVl
OjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50
TG9vcExvY2spOworCisgICAgaWYgKG1fZXZlbnRMb29wKSB7CisgICAgICAgIGlmIChnX21haW5f
bG9vcF9pc19ydW5uaW5nKG1fZXZlbnRMb29wKSkKKyAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1
aXQobV9ldmVudExvb3ApOworCisgICAgICAgIGdfbWFpbl9sb29wX3VucmVmKG1fZXZlbnRMb29w
KTsKKyAgICAgICAgbV9ldmVudExvb3AgPSAwOworICAgIH0KKworICAgIGlmIChtX2V2ZW50Q29u
dGV4dCkgeworICAgICAgICBnX21haW5fY29udGV4dF91bnJlZihtX2V2ZW50Q29udGV4dCk7Cisg
ICAgICAgIG1fZXZlbnRDb250ZXh0ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQqIFdvcmtRdWV1ZTo6
c3RhcnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKiB3b3JrUXVldWUpCit7CisgICAgd29ya1F1
ZXVlLT53b3JrUXVldWVUaHJlYWRCb2R5KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV29y
a1F1ZXVlOjp3b3JrUXVldWVUaHJlYWRCb2R5KCkKK3sKKyAgICBnX21haW5fbG9vcF9ydW4obV9l
dmVudExvb3ApOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRs
ZXIoaW50IGZkLCBpbnQgY29uZGl0aW9uLCBQYXNzT3duUHRyPFdvcmtJdGVtPiBpdGVtKQorewor
ICAgIEdJT0NoYW5uZWwqIGNoYW5uZWwgPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoZmQpOworICAg
IEFTU0VSVChjaGFubmVsKTsKKyAgICBHU291cmNlKiBkaXNwYXRjaFNvdXJjZSA9IGdfaW9fY3Jl
YXRlX3dhdGNoKGNoYW5uZWwsIHN0YXRpY19jYXN0PEdJT0NvbmRpdGlvbj4oY29uZGl0aW9uKSk7
CisgICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKKyAgICBFdmVudFNvdXJjZSogZXZlbnRTb3Vy
Y2UgPSBuZXcgRXZlbnRTb3VyY2UoZGlzcGF0Y2hTb3VyY2UsIGl0ZW0sIHRoaXMpOworICAgIEFT
U0VSVChldmVudFNvdXJjZSk7CisKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hT
b3VyY2UsIAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtR
dWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKSwgCisgICAgICAgICAgICBldmVudFNvdXJj
ZSwgCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PigmV29ya1F1
ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3VyY2UpKTsKKworICAgIC8vIFNldCB1cCB0
aGUgZXZlbnQgc291cmNlcyB1bmRlciB0aGUgbXV0ZXggc2luY2UgdGhpcyBpcyBzaGFyZWQgYWNy
b3NzIG11bHRpcGxlIHRocmVhZHMKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X2V2ZW50U291cmNlc0xvY2spOworICAgICAgICBBU1NFUlQoIW1fZXZlbnRTb3VyY2VzLmNvbnRh
aW5zKGZkKSk7CisgICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXM7CisgICAgICAg
IEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZkKTsKKyAgICAg
ICAgaWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSAKKyAgICAgICAgICAgIHNvdXJjZXMg
PSBpdC0+c2Vjb25kOworCisgICAgICAgIHNvdXJjZXMuYXBwZW5kKGV2ZW50U291cmNlKTsKKyAg
ICAgICAgbV9ldmVudFNvdXJjZXMuc2V0KGZkLCBzb3VyY2VzKTsKKyAgICB9CisKKyAgICAvLyBB
dHRhY2ggdGhlIGV2ZW50IHNvdXJjZSB0byB0aGUgR01haW5Db250ZXh0IHVuZGVyIHRoZSBtdXRl
eCBzaW5jZSB0aGlzIGlzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgdGhyZWFkcworICAgIHsKKyAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRMb29wTG9jayk7CisgICAgICAgIGdfc291
cmNlX2F0dGFjaChkaXNwYXRjaFNvdXJjZSwgbV9ldmVudENvbnRleHQpOworICAgIH0KK30KKwor
dm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50IGZkKQorewor
ICAgIEFTU0VSVChmZCk7CisgICAgCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRTb3Vy
Y2VzTG9jayk7CisgICAgCisgICAgRXZlbnRTb3VyY2VJdGVyYXRvciBpdCA9IG1fZXZlbnRTb3Vy
Y2VzLmZpbmQoZmQpOworICAgIEFTU0VSVChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSk7Cisg
ICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKGZkKSk7CisKKyAgICBpZiAoaXQgIT0g
bV9ldmVudFNvdXJjZXMuZW5kKCkpIHsKKyAgICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291
cmNlcyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3Vy
Y2VzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgZ19zb3VyY2VfZGVzdHJveShzb3VyY2VzW2ld
LT5kaXNwYXRjaFNvdXJjZSgpKTsKKworICAgICAgICBtX2V2ZW50U291cmNlcy5yZW1vdmUoaXQp
OworICAgIH0KK30KKwordm9pZCBXb3JrUXVldWU6OnNjaGVkdWxlV29yayhQYXNzT3duUHRyPFdv
cmtJdGVtPiBpdGVtKQoreworICAgIEdTb3VyY2UqIGRpc3BhdGNoU291cmNlID0gZ190aW1lb3V0
X3NvdXJjZV9uZXcoMCk7CisgICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKKyAgICBFdmVudFNv
dXJjZSogZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZGlzcGF0Y2hTb3VyY2UsIGl0ZW0s
IHRoaXMpOworICAgIAorICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNwYXRjaFNvdXJjZSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+
KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29ya09uY2UpLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXZlbnRTb3VyY2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6
ZGVsZXRlRXZlbnRTb3VyY2UpKTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X2V2ZW50TG9vcExvY2spOworICAgICAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3VyY2Us
IG1fZXZlbnRDb250ZXh0KTsKKyAgICB9Cit9Cg==
</data>
<flag name="review"
          id="65730"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75106</attachid>
            <date>2010-11-29 22:26:50 -0800</date>
            <delta_ts>2010-11-30 23:05:42 -0800</delta_ts>
            <desc>Addressed style issues</desc>
            <filename>rl_nov_30.patch</filename>
            <type>text/plain</type>
            <size>25893</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
ODA1MWY4OS4uZDFhYmMyMiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMC0xMS0zMCAgQW1ydXRoIFJhaiAg
PGFtcnV0aHJhakBtb3Rvcm9sYS5jb20+IGFuZCBSYXZpIEthc2liaGF0bGEgIDxyYXZpLmthc2li
aGF0bGFAbW90b3JvbGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBSdW5Mb29wIGFuZCBXb3JrUXVldWUgaW1wbGVtZW50YXRpb24gZm9y
IFdlYktpdDIgR1RLIHBvcnQuCisgICAgICAgIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDg1MDcpCisKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rp
b24uaDogVU5JWF9YMTEgc3BlY2lmaWMgY2hhbmdlcyBmb3IgR1RLIHBvcnQuCisgICAgICAgICog
UGxhdGZvcm0vQ29yZUlQQy9ndGs6IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMv
Z3RrL0Nvbm5lY3Rpb25HdGsuY3BwOiBBZGRlZC4gQ29ubmVjdGlvbiBjbGFzcyBpbXBsZW1lbnRh
dGlvbiBmb3IgR1RLIHBvcnQgKFVOSVhfWDExIHNwZWNpZmljKS4KKyAgICAgICAgKENvcmVJUEM6
OnJlYWRCeXRlc0Zyb21Tb2NrZXQpOgorICAgICAgICAoQ29yZUlQQzo6d3JpdGVCeXRlc1RvU29j
a2V0KToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246Om1lc3NhZ2VQcm9jZXNzaW5nQ29t
cGxldGVkKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246Om9wZW4pOgorICAgICAgICAo
Q29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdlcyk6Cisg
ICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKENv
cmVJUEM6OkNvbm5lY3Rpb246OnByb2Nlc3NDb21wbGV0ZWRNZXNzYWdlKToKKyAgICAgICAgKENv
cmVJUEM6OkNvbm5lY3Rpb246OnJlYWRFdmVudEhhbmRsZXIpOgorICAgICAgICAoQ29yZUlQQzo6
Q29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZSk6CisgICAgICAgICogUGxhdGZvcm0vUGxh
dGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oOiBVTklYX1gxMSBzcGVjaWZpYyBjaGFuZ2VzIGZvciBH
VEsgcG9ydC4KKyAgICAgICAgKiBQbGF0Zm9ybS9SdW5Mb29wLmg6IEdUSyBwb3J0IHNwZWNpZmlj
IGNoYW5nZXMuCisgICAgICAgICogUGxhdGZvcm0vV29ya1F1ZXVlLmg6IEdUSyBwb3J0IHNwZWNp
ZmljIGNoYW5nZXMuCisgICAgICAgICogUGxhdGZvcm0vZ3RrOiBBZGRlZC4KKyAgICAgICAgKiBQ
bGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHA6IEFkZGVkLiBSdW5zIGFuIGV2ZW50IGxvb3AgdXNp
bmcgR01haW5Mb29wIGFuZCBoYW5kbGVzIHRoZSBpbmNvbWluZyBtZXNzYWdlcy4KKyAgICAgICAg
KFJ1bkxvb3A6OlJ1bkxvb3ApOgorICAgICAgICAoUnVuTG9vcDo6flJ1bkxvb3ApOgorICAgICAg
ICAoUnVuTG9vcDo6cnVuKToKKyAgICAgICAgKFJ1bkxvb3A6Om1haW5Mb29wKToKKyAgICAgICAg
KFJ1bkxvb3A6OnN0b3ApOgorICAgICAgICAoUnVuTG9vcDo6cXVldWVXb3JrKToKKyAgICAgICAg
KFJ1bkxvb3A6Ondha2VVcCk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFz
ZSk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJhc2U6On5UaW1lckJhc2UpOgorICAgICAgICAo
UnVuTG9vcDo6VGltZXJCYXNlOjpvbmVTaG90VGltZXJGaXJlZCk6CisgICAgICAgIChSdW5Mb29w
OjpUaW1lckJhc2U6OnJlcGVhdGluZ1RpbWVyRmlyZWQpOgorICAgICAgICAoUnVuTG9vcDo6VGlt
ZXJCYXNlOjpzdGFydCk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJhc2U6OnN0b3ApOgorICAg
ICAgICAoUnVuTG9vcDo6VGltZXJCYXNlOjppc0FjdGl2ZSk6CisgICAgICAgICogUGxhdGZvcm0v
Z3RrL1dvcmtRdWV1ZUd0ay5jcHA6IEFkZGVkLiBDcmVhdGVzIGEgdGhyZWFkIGFuZCBwb2xscyBv
biBhIGdpdmVuIGZkIHVzaW5nIEdJT0NoYW5uZWwuCisgICAgICAgIERpc3BhdGNoZXMgdGhlIG9i
dGFpbmVkIG1lc3NhZ2VzIHRvIFJ1bkxvb3AncyBHTWFpbkxvb3AuCisgICAgICAgIChXb3JrUXVl
dWU6OkV2ZW50U291cmNlOjpFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50
U291cmNlOjpkaXNwYXRjaFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNl
OjpwZXJmb3JtV29ya09uY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVy
Zm9ybVdvcmspOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRT
b3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAg
ICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpz
dGFydFdvcmtRdWV1ZVRocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVh
ZEJvZHkpOgorICAgICAgICAoV29ya1F1ZXVlOjpyZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcik6
CisgICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAg
ICAgICAoV29ya1F1ZXVlOjpzY2hlZHVsZVdvcmspOgorCiAyMDEwLTEwLTE5ICBBbmRlcnMgQ2Fy
bHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdl
aW5pZy4KZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgg
Yi9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCmluZGV4IGU1MTQ0NTIuLjZh
NDI5YmEgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgK
KysrIGIvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaApAQCAtMSw2ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xh
IE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC04Niw2ICs4Nyw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBj
cmVhdGVTZXJ2ZXJBbmRDbGllbnRJZGVudGlmaWVycyhJZGVudGlmaWVyJiBzZXJ2ZXJJZGVudGlm
aWVyLCBJZGVudGlmaWVyJiBjbGllbnRJZGVudGlmaWVyKTsKICNlbGlmIFBMQVRGT1JNKFFUKQog
ICAgIHR5cGVkZWYgY29uc3QgUVN0cmluZyBJZGVudGlmaWVyOworI2VsaWYgUExBVEZPUk0oR1RL
KQorICAgIHR5cGVkZWYgaW50IElkZW50aWZpZXI7CiAjZW5kaWYKIAogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENvbm5lY3Rpb24+IGNyZWF0ZVNlcnZlckNvbm5lY3Rpb24oSWRlbnRpZmllciwgQ2xp
ZW50KiwgUnVuTG9vcCogY2xpZW50UnVuTG9vcCk7CkBAIC0yNTcsNiArMjYwLDE1IEBAIHByaXZh
dGU6CiAgICAgc2l6ZV90IG1fY3VycmVudE1lc3NhZ2VTaXplOwogICAgIFFMb2NhbFNvY2tldCog
bV9zb2NrZXQ7CiAgICAgUVN0cmluZyBtX3NlcnZlck5hbWU7CisjZWxpZiBQTEFURk9STShHVEsp
CisgICAgdm9pZCByZWFkRXZlbnRIYW5kbGVyKCk7CisgICAgdm9pZCBwcm9jZXNzQ29tcGxldGVk
TWVzc2FnZSgpOworICAgIGJvb2wgbWVzc2FnZVByb2Nlc3NpbmdDb21wbGV0ZWQoKSB7IHJldHVy
biAhbV9jdXJyZW50TWVzc2FnZVNpemU7IH0KKworICAgIGludCBtX3NvY2tldDsKKyAgICBWZWN0
b3I8dWludDhfdD4gbV9yZWFkQnVmZmVyOworICAgIHNpemVfdCBtX2N1cnJlbnRNZXNzYWdlU2l6
ZTsKKyAgICBzaXplX3QgbV9wZW5kaW5nQnl0ZXM7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBh
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9ndGsvQ29ubmVjdGlvbkd0ay5jcHAgYi9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25HdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjY1YjEyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25HdGsuY3BwCkBAIC0wLDAgKzEsMjA1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIK
KworI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgorI2luY2x1ZGUgIldvcmtJdGVtLmgiCisj
aW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8c3lzL2ZjbnRs
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKKworc3Rh
dGljIGNvbnN0IHNpemVfdCBpbml0aWFsTWVzc2FnZUJ1ZmZlclNpemUgPSA0MDk2OworCitzdGF0
aWMgaW50IHJlYWRCeXRlc0Zyb21Tb2NrZXQoaW50IGZpbGVEZXNjcmlwdG9yLCB1aW50OF90KiBw
dHIsIHNpemVfdCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGZpbGVEZXNjcmlwdG9yID4gMCk7Cisg
ICAgQVNTRVJUKGJ1ZmZlcik7CisgICAgQVNTRVJUKGxlbmd0aCA+IDApOworCisgICAgc3NpemVf
dCBudW1iZXJPZkJ5dGVzUmVhZCA9IDA7CisgICAgc2l6ZV90IHBlbmRpbmdCeXRlc1RvUmVhZCA9
IGxlbmd0aDsKKyAgICB1aW50OF90KiBidWZmZXIgPSBwdHI7CisKKyAgICB3aGlsZSAocGVuZGlu
Z0J5dGVzVG9SZWFkID4gMCkgeworICAgICAgICBpZiAoKG51bWJlck9mQnl0ZXNSZWFkID0gcmVh
ZChmaWxlRGVzY3JpcHRvciwgYnVmZmVyLCBwZW5kaW5nQnl0ZXNUb1JlYWQpKSA8IDApIHsKKyAg
ICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgICAgICBudW1iZXJPZkJ5
dGVzUmVhZCA9IDA7CisgICAgICAgICAgICBlbHNlIGlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJy
bm8gPT0gRVdPVUxEQkxPQ0spCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7IAorICAgICAgICB9IGVsc2UgaWYgKCFudW1i
ZXJPZkJ5dGVzUmVhZCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGJ1ZmZlciArPSBu
dW1iZXJPZkJ5dGVzUmVhZDsKKyAgICAgICAgcGVuZGluZ0J5dGVzVG9SZWFkIC09IG51bWJlck9m
Qnl0ZXNSZWFkOworICAgIH0KKworICAgIHJldHVybiAobGVuZ3RoIC0gcGVuZGluZ0J5dGVzVG9S
ZWFkKTsKK30KKworc3RhdGljIGJvb2wgd3JpdGVCeXRlc1RvU29ja2V0KGludCBmaWxlRGVzY3Jp
cHRvciwgdWludDhfdCogcHRyLCBzaXplX3QgbGVuZ3RoKQoreworICAgIEFTU0VSVChmaWxlRGVz
Y3JpcHRvciA+IDApOworICAgIEFTU0VSVChidWZmZXIpOworICAgIEFTU0VSVChsZW5ndGggPiAw
KTsKKworICAgIHNzaXplX3QgbnVtYmVyT2ZCeXRlc1dyaXR0ZW4gPSAwOworICAgIHNpemVfdCBw
ZW5kaW5nQnl0ZXNUb1dyaXRlID0gbGVuZ3RoOworICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IHB0cjsK
KworICAgIC8vIEtlZXAgd3JpdGluZyB0byB0aGUgc29ja2V0IHRpbGwgdGhlIGNvbXBsZXRlIG1l
c3NhZ2UgaGFzIGJlZW4gd3JpdHRlbi4KKyAgICB3aGlsZSAocGVuZGluZ0J5dGVzVG9Xcml0ZSA+
IDApIHsKKyAgICAgICAgaWYgKChudW1iZXJPZkJ5dGVzV3JpdHRlbiA9IHdyaXRlKGZpbGVEZXNj
cmlwdG9yLCBidWZmZXIsIHBlbmRpbmdCeXRlc1RvV3JpdGUpKSA8IDApIHsKKyAgICAgICAgICAg
IGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgICAgICBudW1iZXJPZkJ5dGVzV3JpdHRl
biA9IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJ1ZmZlciArPSBudW1iZXJPZkJ5dGVzV3JpdHRlbjsKKyAgICAg
ICAgcGVuZGluZ0J5dGVzVG9Xcml0ZSAtPSBudW1iZXJPZkJ5dGVzV3JpdHRlbjsKKyAgICB9CisK
KyAgICAvLyBXcml0ZSBvcGVyYXRpb24gZmFpbGVkIGlmIGNvbXBsZXRlIG1lc3NhZ2UgaXMgbm90
IHdyaXR0ZW4uCisgICAgcmV0dXJuICFwZW5kaW5nQnl0ZXNUb1dyaXRlOworfQorCit2b2lkIENv
bm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7Cisg
ICAgbV9jdXJyZW50TWVzc2FnZVNpemUgPSAwOworICAgIG1fcGVuZGluZ0J5dGVzID0gMDsKKyAg
ICBtX3JlYWRCdWZmZXIucmVzaXplKGluaXRpYWxNZXNzYWdlQnVmZmVyU2l6ZSk7CisgICAgbV9z
b2NrZXQgPSBpZGVudGlmaWVyOworICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOworfQorCit2b2lk
IENvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgaWYgKCFtX2lzQ29ubmVj
dGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Nvbm5lY3Rpb25RdWV1ZS51bnJlZ2lzdGVy
RXZlbnRTb3VyY2VIYW5kbGVyKG1fc29ja2V0KTsKKyAgICBpZiAobV9zb2NrZXQgPiAwKSB7Cisg
ICAgICAgIGNsb3NlKG1fc29ja2V0KTsKKyAgICAgICAgbV9zb2NrZXQgPSAtMTsKKyAgICB9CisK
KyAgICBtX2lzQ29ubmVjdGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6cHJvY2Vz
c0NvbXBsZXRlZE1lc3NhZ2UoKQoreworICAgIHNpemVfdCByZWFsQnVmZmVyU2l6ZSA9IG1fY3Vy
cmVudE1lc3NhZ2VTaXplIC0gc2l6ZW9mKE1lc3NhZ2VJRCk7CisgICAgdW5zaWduZWQgbWVzc2Fn
ZUlEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3JlYWRCdWZmZXIuZGF0YSgpICsg
cmVhbEJ1ZmZlclNpemUpOworCisgICAgcHJvY2Vzc0luY29taW5nTWVzc2FnZShNZXNzYWdlSUQ6
OmZyb21JbnQobWVzc2FnZUlEKSwgYWRvcHRQdHIobmV3IEFyZ3VtZW50RGVjb2RlcihtX3JlYWRC
dWZmZXIuZGF0YSgpLCByZWFsQnVmZmVyU2l6ZSkpKTsKKworICAgIC8vIFByZXBhcmUgZm9yIHRo
ZSBuZXh0IG1lc3NhZ2UuCisgICAgbV9jdXJyZW50TWVzc2FnZVNpemUgPSAwOworICAgIG1fcGVu
ZGluZ0J5dGVzID0gMDsKK30KKwordm9pZCBDb25uZWN0aW9uOjpyZWFkRXZlbnRIYW5kbGVyKCkK
K3sKKyAgICBpZiAobV9zb2NrZXQgPCAwKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBIYW5k
bGUgYW55IHByZXZpb3VzbHkgdW5wcm9jZXNzZWQgbWVzc2FnZS4KKyAgICBpZiAoIW1lc3NhZ2VQ
cm9jZXNzaW5nQ29tcGxldGVkKCkpIHsKKyAgICAgICAgaWYgKChtX3BlbmRpbmdCeXRlcyAtPSBy
ZWFkQnl0ZXNGcm9tU29ja2V0KG1fc29ja2V0LCAobV9yZWFkQnVmZmVyLmRhdGEoKSArIChtX2N1
cnJlbnRNZXNzYWdlU2l6ZSAtIG1fcGVuZGluZ0J5dGVzKSksIG1fcGVuZGluZ0J5dGVzKSkgPiAw
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIE1lc3NhZ2UgcmVjZWl2ZWQgY29t
cGxldGVseS4gUHJvY2VzcyB0aGUgbWVzc2FnZSBub3cuCisgICAgICAgIHByb2Nlc3NDb21wbGV0
ZWRNZXNzYWdlKCk7CisgICAgfQorCisgICAgLy8gUHJlcGFyZSB0byByZWFkIHRoZSBuZXh0IG1l
c3NhZ2UuCisgICAgdWludDhfdCBzaXplQnVmZmVyW3NpemVvZihzaXplX3QpXTsKKyAgICBtZW1z
ZXQoc2l6ZUJ1ZmZlciwgMCwgc2l6ZW9mKHNpemVfdCkpOworICAgIAorICAgIHdoaWxlIChtZXNz
YWdlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpKSB7CisgICAgICAgIGlmIChyZWFkQnl0ZXNGcm9tU29j
a2V0KG1fc29ja2V0LCBzaXplQnVmZmVyLCBzaXplb2Yoc2l6ZV90KSkpCisgICAgICAgICAgICBt
X2N1cnJlbnRNZXNzYWdlU2l6ZSA9ICpyZWludGVycHJldF9jYXN0PHNpemVfdCo+KHNpemVCdWZm
ZXIpOworCisgICAgICAgIGlmICghbV9jdXJyZW50TWVzc2FnZVNpemUpCisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBpZiAobV9yZWFkQnVmZmVyLnNpemUoKSA8IG1fY3VycmVudE1lc3Nh
Z2VTaXplKQorICAgICAgICAgICAgbV9yZWFkQnVmZmVyLmdyb3cobV9jdXJyZW50TWVzc2FnZVNp
emUpOworCisgICAgICAgIG1fcGVuZGluZ0J5dGVzID0gbV9jdXJyZW50TWVzc2FnZVNpemUgLSBy
ZWFkQnl0ZXNGcm9tU29ja2V0KG1fc29ja2V0LCBtX3JlYWRCdWZmZXIuZGF0YSgpLCBtX2N1cnJl
bnRNZXNzYWdlU2l6ZSk7CisgICAgICAgIGlmIChtX3BlbmRpbmdCeXRlcyA+IDApIC8vIE1lc3Nh
Z2UgcGFydGlhbGx5IHJlY2VpdmVkLgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8g
TWVzc2FnZSByZWNlaXZlZCBjb21wbGV0ZWx5LiBQcm9jZXNzIHRoZSBtZXNzYWdlIG5vdy4KKyAg
ICAgICAgcHJvY2Vzc0NvbXBsZXRlZE1lc3NhZ2UoKTsKKworICAgICAgICBtZW1zZXQoc2l6ZUJ1
ZmZlciwgMCwgc2l6ZW9mKHNpemVfdCkpOworICAgIH0KK30KKworYm9vbCBDb25uZWN0aW9uOjpv
cGVuKCkKK3sKKyAgICBpbnQgZmxhZ3MgPSBmY250bChtX3NvY2tldCwgRl9HRVRGTCwgMCk7Cisg
ICAgZmNudGwobV9zb2NrZXQsIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSyk7CisKKyAgICAv
LyBSZWdpc3RlciBjYWxsYmFja3MgZm9yIGNvbm5lY3Rpb24gdGVybWluYXRpb24gYW5kIGlucHV0
IGRhdGEgb24gdGhlIFdvcmtRdWV1ZS4KKyAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5yZWdpc3RlckV2
ZW50U291cmNlSGFuZGxlcihtX3NvY2tldCwgKEdfSU9fSFVQIHwgR19JT19FUlIpLCBXb3JrSXRl
bTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpjb25uZWN0aW9uRGlkQ2xvc2UpKTsKKyAgICBt
X2Nvbm5lY3Rpb25RdWV1ZS5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihtX3NvY2tldCwgR19J
T19JTiwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6cmVhZEV2ZW50SGFuZGxl
cikpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbm5lY3Rpb246OnBsYXRmb3JtQ2Fu
U2VuZE91dGdvaW5nTWVzc2FnZXMoKSBjb25zdAoreworICAgIHJldHVybiAobV9zb2NrZXQgPiAw
KTsKK30KKworYm9vbCBDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKE1lc3NhZ2VJRCBt
ZXNzYWdlSUQsIFBhc3NPd25QdHI8QXJndW1lbnRFbmNvZGVyPiBhcmd1bWVudHMpCit7CisgICAg
aWYgKG1fc29ja2V0IDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2UgcHV0
IHRoZSBtZXNzYWdlIElEIGxhc3QuCisgICAgYXJndW1lbnRzLT5lbmNvZGVVSW50MzIobWVzc2Fn
ZUlELnRvSW50KCkpOworCisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBhcmd1bWVudHMtPmJ1ZmZl
clNpemUoKTsKKworICAgIC8vIFNlbmQgdGhlIG1lc3NhZ2Ugc2l6ZSBmaXJzdC4KKyAgICBpZiAo
IXdyaXRlQnl0ZXNUb1NvY2tldChtX3NvY2tldCwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
JmJ1ZmZlclNpemUpLCBzaXplb2Yoc2l6ZV90KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghd3JpdGVCeXRlc1RvU29ja2V0KG1fc29ja2V0LCBhcmd1bWVudHMtPmJ1ZmZlcigp
LCBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCmRpZmYgLS1naXQgYS9X
ZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCBiL1dlYktpdDIvUGxh
dGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCmluZGV4IGFkMWUzOTQuLjAzNjM2OTIg
MTAwNjQ0Ci0tLSBhL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5o
CisrKyBiL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCkBAIC0z
OSw2ICszOSw4IEBAIHR5cGVkZWYgcGlkX3QgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKIHR5
cGVkZWYgSEFORExFIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CiAjZWxpZiBQTEFURk9STShR
VCkKIHR5cGVkZWYgUVByb2Nlc3MqIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CisjZWxpZiBQ
TEFURk9STShHVEspCit0eXBlZGVmIHBpZF90IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CiAj
ZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0IApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0
Zm9ybS9SdW5Mb29wLmggYi9XZWJLaXQyL1BsYXRmb3JtL1J1bkxvb3AuaAppbmRleCA1ZDk2OTgz
Li43OTI2ZTExIDEwMDY0NAotLS0gYS9XZWJLaXQyL1BsYXRmb3JtL1J1bkxvb3AuaAorKysgYi9X
ZWJLaXQyL1BsYXRmb3JtL1J1bkxvb3AuaApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Miw2ICszMywxMiBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaWYgUExBVEZPUk0o
R1RLKQordHlwZWRlZiBzdHJ1Y3QgX0dTb3VyY2UgR1NvdXJjZTsKK3R5cGVkZWYgc3RydWN0IF9H
TWFpbkxvb3AgR01haW5Mb29wOwordHlwZWRlZiBzdHJ1Y3QgX0dNYWluQ29udGV4dCBHTWFpbkNv
bnRleHQ7Cit0eXBlZGVmIGludCBnYm9vbGVhbjsKKyNlbmRpZgogCiBjbGFzcyBXb3JrSXRlbTsK
IApAQCAtNzYsNiArODMsMTEgQEAgcHVibGljOgogI2VsaWYgUExBVEZPUk0oUVQpCiAgICAgICAg
IHN0YXRpYyB2b2lkIHRpbWVyRmlyZWQoUnVuTG9vcCosIGludCBJRCk7CiAgICAgICAgIGludCBt
X0lEOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBzdGF0aWMgZ2Jvb2xlYW4gb25lU2hv
dFRpbWVyRmlyZWQoUnVuTG9vcDo6VGltZXJCYXNlKik7CisgICAgICAgIHN0YXRpYyBnYm9vbGVh
biByZXBlYXRpbmdUaW1lckZpcmVkKFJ1bkxvb3A6OlRpbWVyQmFzZSopOworICAgICAgICB2b2lk
IHJlc2V0VGltZXJTb3VyY2UoKTsKKyAgICAgICAgR1NvdXJjZSogbV90aW1lclNvdXJjZTsKICNl
bmRpZgogICAgIH07CiAKQEAgLTEyNyw2ICsxMzksMTMgQEAgcHJpdmF0ZToKICAgICBUaW1lck1h
cCBtX2FjdGl2ZVRpbWVyczsKICAgICBjbGFzcyBUaW1lck9iamVjdDsKICAgICBUaW1lck9iamVj
dCogbV90aW1lck9iamVjdDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKK3B1YmxpYzoKKyAgICBzdGF0
aWMgZ2Jvb2xlYW4gcXVldWVXb3JrKFJ1bkxvb3AqKTsKKyAgICBHTWFpbkxvb3AqIG1haW5Mb29w
KCk7Citwcml2YXRlOgorICAgIEdNYWluQ29udGV4dCogbV9ydW5Mb29wQ29udGV4dDsKKyAgICBH
TWFpbkxvb3AqIG1fcnVuTG9vcE1haW47CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1dlYktp
dDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggYi9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCmlu
ZGV4IGY3YzdkY2EuLjZjZmQ2YjggMTAwNjQ0Ci0tLSBhL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1
ZXVlLmgKKysrIGIvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaApAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00Myw2ICs0NCw5IEBACiBjbGFzcyBRTG9jYWxTb2NrZXQ7CiBjbGFzcyBRT2JqZWN0OwogY2xh
c3MgUVRocmVhZDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgc3RydWN0IF9HTWFpbkNv
bnRleHQgR01haW5Db250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgX0dNYWluTG9vcCBHTWFpbkxvb3A7
CiAjZW5kaWYKIAogY2xhc3MgV29ya1F1ZXVlIHsKQEAgLTc0LDYgKzc4LDkgQEAgcHVibGljOgog
ICAgIHZvaWQgZGlzY29ubmVjdFNpZ25hbChRT2JqZWN0KiwgY29uc3QgY2hhciogc2lnbmFsKTsK
IAogICAgIHZvaWQgbW92ZVNvY2tldFRvV29ya1RocmVhZChRTG9jYWxTb2NrZXQqKTsKKyNlbGlm
IFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIHJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCwg
aW50LCBQYXNzT3duUHRyPFdvcmtJdGVtPik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRXZlbnRTb3Vy
Y2VIYW5kbGVyKGludCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTE0Niw2ICsxNTMsMTggQEAg
cHJpdmF0ZToKICAgICBIYXNoTWFwPFFPYmplY3QqLCBXb3JrSXRlbVF0Kj4gbV9zaWduYWxMaXN0
ZW5lcnM7CiAgICAgUVRocmVhZCogbV93b3JrVGhyZWFkOwogICAgIGZyaWVuZCBjbGFzcyBXb3Jr
SXRlbVF0OworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIHN0YXRpYyB2b2lkKiBzdGFydFdvcmtR
dWV1ZVRocmVhZChXb3JrUXVldWUqKTsKKyAgICB2b2lkIHdvcmtRdWV1ZVRocmVhZEJvZHkoKTsK
KworICAgIFRocmVhZElkZW50aWZpZXIgbV93b3JrUXVldWVUaHJlYWQ7CisgICAgR01haW5Db250
ZXh0KiBtX2V2ZW50Q29udGV4dDsKKyAgICBNdXRleCBtX2V2ZW50TG9vcExvY2s7CisgICAgR01h
aW5Mb29wKiBtX2V2ZW50TG9vcDsKKyAgICBNdXRleCBtX2V2ZW50U291cmNlc0xvY2s7CisgICAg
Y2xhc3MgRXZlbnRTb3VyY2U7CisgICAgSGFzaE1hcDxpbnQsIFZlY3RvcjxFdmVudFNvdXJjZSo+
ID4gbV9ldmVudFNvdXJjZXM7CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVmVjdG9yPEV2ZW50
U291cmNlKj4gPjo6aXRlcmF0b3IgRXZlbnRTb3VyY2VJdGVyYXRvcjsgCiAjZW5kaWYKIH07CiAK
ZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwIGIvV2ViS2l0
Mi9QbGF0Zm9ybS9ndGsvUnVuTG9vcEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOWZmOWE5ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdDIvUGxhdGZvcm0vZ3Rr
L1J1bkxvb3BHdGsuY3BwCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdo
dCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKworI2luY2x1ZGUgIldLQmFzZS5oIgor
I2luY2x1ZGUgPGdsaWIuaD4KKworUnVuTG9vcDo6UnVuTG9vcCgpCit7CisgICAgbV9ydW5Mb29w
Q29udGV4dCA9IGdfbWFpbl9jb250ZXh0X2RlZmF1bHQoKTsKKyAgICBBU1NFUlQobV9ydW5Mb29w
Q29udGV4dCk7CisgICAgbV9ydW5Mb29wTWFpbiA9IGdfbWFpbl9sb29wX25ldyhtX3J1bkxvb3BD
b250ZXh0LCBGQUxTRSk7CisgICAgQVNTRVJUKG1fcnVuTG9vcE1haW4pOworfQorCitSdW5Mb29w
Ojp+UnVuTG9vcCgpCit7CisgICAgaWYgKG1fcnVuTG9vcE1haW4pIHsKKyAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdChtX3J1bkxvb3BNYWluKTsKKyAgICAgICAgZ19tYWluX2xvb3BfdW5yZWYobV9y
dW5Mb29wTWFpbik7CisgICAgfQorCisgICAgaWYgKG1fcnVuTG9vcENvbnRleHQpCisgICAgICAg
IGdfbWFpbl9jb250ZXh0X3VucmVmKG1fcnVuTG9vcENvbnRleHQpOworfQorCit2b2lkIFJ1bkxv
b3A6OnJ1bigpCit7CisgICAgZ19tYWluX2xvb3BfcnVuKFJ1bkxvb3A6Om1haW4oKS0+bWFpbkxv
b3AoKSk7Cit9CisKK0dNYWluTG9vcCogUnVuTG9vcDo6bWFpbkxvb3AoKQoreworICAgIHJldHVy
biBtX3J1bkxvb3BNYWluOworfQorCit2b2lkIFJ1bkxvb3A6OnN0b3AoKQoreworICAgIGdfbWFp
bl9sb29wX3F1aXQobV9ydW5Mb29wTWFpbik7Cit9CisKK2dib29sZWFuIFJ1bkxvb3A6OnF1ZXVl
V29yayhSdW5Mb29wKiBydW5Mb29wKQoreworICAgIHJ1bkxvb3AtPnBlcmZvcm1Xb3JrKCk7Cisg
ICAgcmV0dXJuIEZBTFNFOworfQorCit2b2lkIFJ1bkxvb3A6Ondha2VVcCgpCit7CisgICAgR1Nv
dXJjZSogc291cmNlID0gZ190aW1lb3V0X3NvdXJjZV9uZXcoMCk7CisgICAgZ19zb3VyY2Vfc2V0
X2NhbGxiYWNrKHNvdXJjZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJlJ1bkxvb3A6
OnF1ZXVlV29yayksIHRoaXMsIDApOworICAgIGdfc291cmNlX2F0dGFjaChzb3VyY2UsIG1fcnVu
TG9vcENvbnRleHQpOworCisgICAgZ19tYWluX2NvbnRleHRfd2FrZXVwKG1fcnVuTG9vcENvbnRl
eHQpOworfQorCitSdW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFzZShSdW5Mb29wKiBydW5Mb29w
KQorICAgIDogbV9ydW5Mb29wKHJ1bkxvb3ApCisgICAgLCBtX3RpbWVyU291cmNlKDApCit7Cit9
CisKK1J1bkxvb3A6OlRpbWVyQmFzZTo6flRpbWVyQmFzZSgpCit7CisgICAgc3RvcCgpOworfQor
Cit2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6cmVzZXRUaW1lclNvdXJjZSgpCit7CisgICAgbV90
aW1lclNvdXJjZSA9IDA7Cit9CisKK2dib29sZWFuIFJ1bkxvb3A6OlRpbWVyQmFzZTo6b25lU2hv
dFRpbWVyRmlyZWQoUnVuTG9vcDo6VGltZXJCYXNlKiB0aW1lcikKK3sKKyAgICB0aW1lci0+Zmly
ZWQoKTsKKyAgICB0aW1lci0+cmVzZXRUaW1lclNvdXJjZSgpOworICAgIHJldHVybiBGQUxTRTsK
K30KKworZ2Jvb2xlYW4gUnVuTG9vcDo6VGltZXJCYXNlOjpyZXBlYXRpbmdUaW1lckZpcmVkKFJ1
bkxvb3A6OlRpbWVyQmFzZSogdGltZXIpCit7CisgICAgdGltZXItPmZpcmVkKCk7CisgICAgcmV0
dXJuIFRSVUU7Cit9CisKK3ZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpzdGFydChkb3VibGUgbmV4
dEZpcmVJbnRlcnZhbCwgZG91YmxlIHJlcGVhdEludGVydmFsKQoreworICAgIGlmIChtX3RpbWVy
U291cmNlKQorICAgICAgICBzdG9wKCk7CisKKyAgICBpZiAocmVwZWF0SW50ZXJ2YWwpIHsKKyAg
ICAgICAgbV90aW1lclNvdXJjZSA9IGdfdGltZW91dF9zb3VyY2VfbmV3KHN0YXRpY19jYXN0PGd1
aW50PihyZXBlYXRJbnRlcnZhbCkpOworICAgICAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV90
aW1lclNvdXJjZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJlJ1bkxvb3A6OlRpbWVy
QmFzZTo6cmVwZWF0aW5nVGltZXJGaXJlZCksIHRoaXMsIDApOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1fdGltZXJTb3VyY2UgPSBnX3RpbWVvdXRfc291cmNlX25ldyhzdGF0aWNfY2FzdDxndWlu
dD4obmV4dEZpcmVJbnRlcnZhbCkpOworICAgICAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV90
aW1lclNvdXJjZSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJlJ1bkxvb3A6OlRpbWVy
QmFzZTo6b25lU2hvdFRpbWVyRmlyZWQpLCB0aGlzLCAwKTsKKyAgICB9CisgICAgZ19zb3VyY2Vf
YXR0YWNoKG1fdGltZXJTb3VyY2UsIG1fcnVuTG9vcC0+bV9ydW5Mb29wQ29udGV4dCk7Cit9CisK
K3ZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpzdG9wKCkKK3sKKyAgICBpZiAoIW1fdGltZXJTb3Vy
Y2UpCisgICAgICAgIHJldHVybjsKKworICAgIGdfc291cmNlX2Rlc3Ryb3kobV90aW1lclNvdXJj
ZSk7CisgICAgbV90aW1lclNvdXJjZSA9IDA7Cit9CisKK2Jvb2wgUnVuTG9vcDo6VGltZXJCYXNl
Ojppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGltZXJTb3VyY2U7Cit9CmRpZmYg
LS1naXQgYS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIGIvV2ViS2l0Mi9Q
bGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4xZjBkMTE4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsv
V29ya1F1ZXVlR3RrLmNwcApAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmln
aHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKworI2luY2x1ZGUgIldLQmFzZS5o
IgorI2luY2x1ZGUgPGdsaWIuaD4KKworLy8gV29ya1F1ZXVlOjpFdmVudFNvdXJjZQorY2xhc3Mg
V29ya1F1ZXVlOjpFdmVudFNvdXJjZSB7CitwdWJsaWM6CisgICAgRXZlbnRTb3VyY2UoR1NvdXJj
ZSogZGlzcGF0Y2hTb3VyY2UsIFBhc3NPd25QdHI8V29ya0l0ZW0+IHdvcmtJdGVtLCBXb3JrUXVl
dWUqIHdvcmtRdWV1ZSkKKyAgICAgICAgOiBtX2Rpc3BhdGNoU291cmNlKGRpc3BhdGNoU291cmNl
KQorICAgICAgICAsIG1fd29ya0l0ZW0od29ya0l0ZW0pCisgICAgICAgICwgbV93b3JrUXVldWUo
d29ya1F1ZXVlKQorICAgIHsKKyAgICB9CisKKyAgICBHU291cmNlKiBkaXNwYXRjaFNvdXJjZSgp
IHsgcmV0dXJuIG1fZGlzcGF0Y2hTb3VyY2U7IH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBwZXJm
b3JtV29ya09uY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGV2ZW50U291cmNlKTsKKyAgICAgICAgV29ya1F1ZXVlKiBxdWV1ZSA9IGV2ZW50U291cmNl
LT5tX3dvcmtRdWV1ZTsKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7CisgICAgICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFs
aWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAg
ZXZlbnRTb3VyY2UtPm1fd29ya0l0ZW0tPmV4ZWN1dGUoKTsKKyAgICAgICAgcmV0dXJuIEZBTFNF
OworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBwZXJmb3JtV29yayhHSU9DaGFubmVsKiBj
aGFubmVsLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2Up
IAorICAgIHsKKyAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKworICAgICAgICBpZiAoIShj
b25kaXRpb24gJiBHX0lPX0lOKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fSFVQKSAmJiAhKGNvbmRp
dGlvbiAmIEdfSU9fRVJSKSkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAgICBX
b3JrUXVldWUqIHF1ZXVlID0gZXZlbnRTb3VyY2UtPm1fd29ya1F1ZXVlOworICAgICAgICB7Cisg
ICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1faXNWYWxpZE11dGV4KTsKKyAg
ICAgICAgICAgIGlmICghcXVldWUtPm1faXNWYWxpZCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
RkFMU0U7CisgICAgICAgIH0KKworICAgICAgICBldmVudFNvdXJjZS0+bV93b3JrSXRlbS0+ZXhl
Y3V0ZSgpOworCisgICAgICAgIGlmICgoY29uZGl0aW9uICYgR19JT19IVVApIHx8IChjb25kaXRp
b24gJiBHX0lPX0VSUikpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgICAgcmV0
dXJuIFRSVUU7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUV2ZW50U291cmNl
KEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkgCisgICAgeworICAgICAgICBBU1NFUlQoZXZlbnRT
b3VyY2UpOworICAgICAgICBkZWxldGUgZXZlbnRTb3VyY2U7CisgICAgfQorICAgCitwdWJsaWM6
CisgICAgR1NvdXJjZSogbV9kaXNwYXRjaFNvdXJjZTsKKyAgICBQYXNzT3duUHRyPFdvcmtJdGVt
PiBtX3dvcmtJdGVtOworICAgIFdvcmtRdWV1ZSogbV93b3JrUXVldWU7Cit9OworCisvLyBXb3Jr
UXVldWUKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFt
ZSkKK3sKKyAgICBtX2V2ZW50Q29udGV4dCA9IGdfbWFpbl9jb250ZXh0X25ldygpOworICAgIEFT
U0VSVChtX2V2ZW50Q29udGV4dCk7CisgICAgbV9ldmVudExvb3AgPSBnX21haW5fbG9vcF9uZXco
bV9ldmVudENvbnRleHQsIEZBTFNFKTsKKyAgICBBU1NFUlQobV9ldmVudExvb3ApOworICAgIG1f
d29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJl
YWRGdW5jdGlvbj4oJldvcmtRdWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJlYWQpLCB0aGlzLCBuYW1l
KTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRMb29wTG9jayk7CisKKyAgICBpZiAobV9ldmVudExvb3Ap
IHsKKyAgICAgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobV9ldmVudExvb3ApKQorICAg
ICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX2V2ZW50TG9vcCk7CisKKyAgICAgICAgZ19tYWlu
X2xvb3BfdW5yZWYobV9ldmVudExvb3ApOworICAgICAgICBtX2V2ZW50TG9vcCA9IDA7CisgICAg
fQorCisgICAgaWYgKG1fZXZlbnRDb250ZXh0KSB7CisgICAgICAgIGdfbWFpbl9jb250ZXh0X3Vu
cmVmKG1fZXZlbnRDb250ZXh0KTsKKyAgICAgICAgbV9ldmVudENvbnRleHQgPSAwOworICAgIH0K
K30KKwordm9pZCogV29ya1F1ZXVlOjpzdGFydFdvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqIHdv
cmtRdWV1ZSkKK3sKKyAgICB3b3JrUXVldWUtPndvcmtRdWV1ZVRocmVhZEJvZHkoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZEJvZHkoKQorewor
ICAgIGdfbWFpbl9sb29wX3J1bihtX2V2ZW50TG9vcCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpy
ZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IsIGludCBjb25kaXRp
b24sIFBhc3NPd25QdHI8V29ya0l0ZW0+IGl0ZW0pCit7CisgICAgR0lPQ2hhbm5lbCogY2hhbm5l
bCA9IGdfaW9fY2hhbm5lbF91bml4X25ldyhmaWxlRGVzY3JpcHRvcik7CisgICAgQVNTRVJUKGNo
YW5uZWwpOworICAgIEdTb3VyY2UqIGRpc3BhdGNoU291cmNlID0gZ19pb19jcmVhdGVfd2F0Y2go
Y2hhbm5lbCwgc3RhdGljX2Nhc3Q8R0lPQ29uZGl0aW9uPihjb25kaXRpb24pKTsKKyAgICBBU1NF
UlQoZGlzcGF0Y2hTb3VyY2UpOworICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBF
dmVudFNvdXJjZShkaXNwYXRjaFNvdXJjZSwgaXRlbSwgdGhpcyk7CisgICAgQVNTRVJUKGV2ZW50
U291cmNlKTsKKworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNwYXRjaFNvdXJjZSwgcmVp
bnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZv
cm1Xb3JrKSwgCisgICAgICAgIGV2ZW50U291cmNlLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95
Tm90aWZ5PigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3VyY2UpKTsKKwor
ICAgIC8vIFNldCB1cCB0aGUgZXZlbnQgc291cmNlcyB1bmRlciB0aGUgbXV0ZXggc2luY2UgdGhp
cyBpcyBzaGFyZWQgYWNyb3NzIG11bHRpcGxlIHRocmVhZHMuCisgICAgeworICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNMb2NrKTsKKyAgICAgICAgQVNTRVJUKCFtX2V2
ZW50U291cmNlcy5jb250YWlucyhmaWxlRGVzY3JpcHRvcikpOworICAgICAgICBWZWN0b3I8RXZl
bnRTb3VyY2UqPiBzb3VyY2VzOworICAgICAgICBFdmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9l
dmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7CisgICAgICAgIGlmIChpdCAhPSBtX2V2
ZW50U291cmNlcy5lbmQoKSkgCisgICAgICAgICAgICBzb3VyY2VzID0gaXQtPnNlY29uZDsKKwor
ICAgICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNvdXJjZSk7CisgICAgICAgIG1fZXZlbnRTb3Vy
Y2VzLnNldChmaWxlRGVzY3JpcHRvciwgc291cmNlcyk7CisgICAgfQorCisgICAgLy8gQXR0YWNo
IHRoZSBldmVudCBzb3VyY2UgdG8gdGhlIEdNYWluQ29udGV4dCB1bmRlciB0aGUgbXV0ZXggc2lu
Y2UgdGhpcyBpcyBzaGFyZWQgYWNyb3NzIG11bHRpcGxlIHRocmVhZHMuCisgICAgeworICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudExvb3BMb2NrKTsKKyAgICAgICAgZ19zb3VyY2Vf
YXR0YWNoKGRpc3BhdGNoU291cmNlLCBtX2V2ZW50Q29udGV4dCk7CisgICAgfQorfQorCit2b2lk
IFdvcmtRdWV1ZTo6dW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQgZmlsZURlc2NyaXB0
b3IpCit7CisgICAgQVNTRVJUKGZpbGVEZXNjcmlwdG9yKTsKKyAgICAKKyAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9ldmVudFNvdXJjZXNMb2NrKTsKKyAgICAKKyAgICBFdmVudFNvdXJjZUl0ZXJh
dG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7CisgICAgQVNTRVJU
KGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKTsKKyAgICBBU1NFUlQobV9ldmVudFNvdXJjZXMu
Y29udGFpbnMoZmlsZURlc2NyaXB0b3IpKTsKKworICAgIGlmIChpdCAhPSBtX2V2ZW50U291cmNl
cy5lbmQoKSkgeworICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZXMuc2l6ZSgpOyBp
KyspCisgICAgICAgICAgICBnX3NvdXJjZV9kZXN0cm95KHNvdXJjZXNbaV0tPmRpc3BhdGNoU291
cmNlKCkpOworCisgICAgICAgIG1fZXZlbnRTb3VyY2VzLnJlbW92ZShpdCk7CisgICAgfQorfQor
Cit2b2lkIFdvcmtRdWV1ZTo6c2NoZWR1bGVXb3JrKFBhc3NPd25QdHI8V29ya0l0ZW0+IGl0ZW0p
Cit7CisgICAgR1NvdXJjZSogZGlzcGF0Y2hTb3VyY2UgPSBnX3RpbWVvdXRfc291cmNlX25ldygw
KTsKKyAgICBBU1NFUlQoZGlzcGF0Y2hTb3VyY2UpOworICAgIEV2ZW50U291cmNlKiBldmVudFNv
dXJjZSA9IG5ldyBFdmVudFNvdXJjZShkaXNwYXRjaFNvdXJjZSwgaXRlbSwgdGhpcyk7CisgICAg
CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKGRpc3BhdGNoU291cmNlLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6
RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSksIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBldmVudFNvdXJjZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8R0Rlc3Ryb3lOb3RpZnk+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNv
dXJjZSkpOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRMb29wTG9j
ayk7CisgICAgICAgIGdfc291cmNlX2F0dGFjaChkaXNwYXRjaFNvdXJjZSwgbV9ldmVudENvbnRl
eHQpOworICAgIH0KK30K
</data>
<flag name="review"
          id="65844"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
    <flag name="commit-queue"
          id="65851"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75256</attachid>
            <date>2010-11-30 23:05:42 -0800</date>
            <delta_ts>2010-12-02 09:34:22 -0800</delta_ts>
            <desc>Patch on top of latest revision</desc>
            <filename>rl_dec_1</filename>
            <type>text/plain</type>
            <size>26069</size>
            <attacher name="Amruth Raj">amruthraj</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vUnVuTG9vcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
UGxhdGZvcm0vUnVuTG9vcC5oCShyZXZpc2lvbiA3MzAwOSkKKysrIFdlYktpdDIvUGxhdGZvcm0v
UnVuTG9vcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMy
LDYgKzMzLDEyIEBACiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpZiBQTEFURk9STShH
VEspCit0eXBlZGVmIHN0cnVjdCBfR1NvdXJjZSBHU291cmNlOwordHlwZWRlZiBzdHJ1Y3QgX0dN
YWluTG9vcCBHTWFpbkxvb3A7Cit0eXBlZGVmIHN0cnVjdCBfR01haW5Db250ZXh0IEdNYWluQ29u
dGV4dDsKK3R5cGVkZWYgaW50IGdib29sZWFuOworI2VuZGlmCiAKIGNsYXNzIFdvcmtJdGVtOwog
CkBAIC03OCw2ICs4NSwxMSBAQAogICAgICAgICBzdGF0aWMgdm9pZCB0aW1lckZpcmVkKFJ1bkxv
b3AqLCBpbnQgSUQpOwogICAgICAgICBpbnQgbV9JRDsKICAgICAgICAgYm9vbCBtX2lzUmVwZWF0
aW5nOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBzdGF0aWMgZ2Jvb2xlYW4gb25lU2hv
dFRpbWVyRmlyZWQoUnVuTG9vcDo6VGltZXJCYXNlKik7CisgICAgICAgIHN0YXRpYyBnYm9vbGVh
biByZXBlYXRpbmdUaW1lckZpcmVkKFJ1bkxvb3A6OlRpbWVyQmFzZSopOworICAgICAgICB2b2lk
IHJlc2V0VGltZXJTb3VyY2UoKTsKKyAgICAgICAgR1NvdXJjZSogbV90aW1lclNvdXJjZTsKICNl
bmRpZgogICAgIH07CiAKQEAgLTEyOSw2ICsxNDEsMTMgQEAKICAgICBUaW1lck1hcCBtX2FjdGl2
ZVRpbWVyczsKICAgICBjbGFzcyBUaW1lck9iamVjdDsKICAgICBUaW1lck9iamVjdCogbV90aW1l
ck9iamVjdDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKK3B1YmxpYzoKKyAgICBzdGF0aWMgZ2Jvb2xl
YW4gcXVldWVXb3JrKFJ1bkxvb3AqKTsKKyAgICBHTWFpbkxvb3AqIG1haW5Mb29wKCk7Citwcml2
YXRlOgorICAgIEdNYWluQ29udGV4dCogbV9ydW5Mb29wQ29udGV4dDsKKyAgICBHTWFpbkxvb3Aq
IG1fcnVuTG9vcE1haW47CiAjZW5kaWYKIH07CiAKSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy9ndGsvQ29ubmVjdGlvbkd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL2d0ay9Db25uZWN0aW9uR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9ndGsvQ29ubmVjdGlvbkd0ay5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBN
b2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
IkNvbm5lY3Rpb24uaCIKKworI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgorI2luY2x1ZGUg
IldvcmtJdGVtLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5j
bHVkZSA8c3lzL2ZjbnRsLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBD
b3JlSVBDIHsKKworc3RhdGljIGNvbnN0IHNpemVfdCBpbml0aWFsTWVzc2FnZUJ1ZmZlclNpemUg
PSA0MDk2OworCitzdGF0aWMgaW50IHJlYWRCeXRlc0Zyb21Tb2NrZXQoaW50IGZpbGVEZXNjcmlw
dG9yLCB1aW50OF90KiBwdHIsIHNpemVfdCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGZpbGVEZXNj
cmlwdG9yID4gMCk7CisgICAgQVNTRVJUKGJ1ZmZlcik7CisgICAgQVNTRVJUKGxlbmd0aCA+IDAp
OworCisgICAgc3NpemVfdCBudW1iZXJPZkJ5dGVzUmVhZCA9IDA7CisgICAgc2l6ZV90IHBlbmRp
bmdCeXRlc1RvUmVhZCA9IGxlbmd0aDsKKyAgICB1aW50OF90KiBidWZmZXIgPSBwdHI7CisKKyAg
ICB3aGlsZSAocGVuZGluZ0J5dGVzVG9SZWFkID4gMCkgeworICAgICAgICBpZiAoKG51bWJlck9m
Qnl0ZXNSZWFkID0gcmVhZChmaWxlRGVzY3JpcHRvciwgYnVmZmVyLCBwZW5kaW5nQnl0ZXNUb1Jl
YWQpKSA8IDApIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAg
ICAgICBudW1iZXJPZkJ5dGVzUmVhZCA9IDA7CisgICAgICAgICAgICBlbHNlIGlmIChlcnJubyA9
PSBFQUdBSU4gfHwgZXJybm8gPT0gRVdPVUxEQkxPQ0spCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7IAorICAgICAgICB9
IGVsc2UgaWYgKCFudW1iZXJPZkJ5dGVzUmVhZCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGJ1ZmZlciArPSBudW1iZXJPZkJ5dGVzUmVhZDsKKyAgICAgICAgcGVuZGluZ0J5dGVzVG9S
ZWFkIC09IG51bWJlck9mQnl0ZXNSZWFkOworICAgIH0KKworICAgIHJldHVybiAobGVuZ3RoIC0g
cGVuZGluZ0J5dGVzVG9SZWFkKTsKK30KKworc3RhdGljIGJvb2wgd3JpdGVCeXRlc1RvU29ja2V0
KGludCBmaWxlRGVzY3JpcHRvciwgdWludDhfdCogcHRyLCBzaXplX3QgbGVuZ3RoKQoreworICAg
IEFTU0VSVChmaWxlRGVzY3JpcHRvciA+IDApOworICAgIEFTU0VSVChidWZmZXIpOworICAgIEFT
U0VSVChsZW5ndGggPiAwKTsKKworICAgIHNzaXplX3QgbnVtYmVyT2ZCeXRlc1dyaXR0ZW4gPSAw
OworICAgIHNpemVfdCBwZW5kaW5nQnl0ZXNUb1dyaXRlID0gbGVuZ3RoOworICAgIHVpbnQ4X3Qq
IGJ1ZmZlciA9IHB0cjsKKworICAgIC8vIEtlZXAgd3JpdGluZyB0byB0aGUgc29ja2V0IHRpbGwg
dGhlIGNvbXBsZXRlIG1lc3NhZ2UgaGFzIGJlZW4gd3JpdHRlbi4KKyAgICB3aGlsZSAocGVuZGlu
Z0J5dGVzVG9Xcml0ZSA+IDApIHsKKyAgICAgICAgaWYgKChudW1iZXJPZkJ5dGVzV3JpdHRlbiA9
IHdyaXRlKGZpbGVEZXNjcmlwdG9yLCBidWZmZXIsIHBlbmRpbmdCeXRlc1RvV3JpdGUpKSA8IDAp
IHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgICAgICBudW1i
ZXJPZkJ5dGVzV3JpdHRlbiA9IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJ1ZmZlciArPSBudW1iZXJPZkJ5dGVz
V3JpdHRlbjsKKyAgICAgICAgcGVuZGluZ0J5dGVzVG9Xcml0ZSAtPSBudW1iZXJPZkJ5dGVzV3Jp
dHRlbjsKKyAgICB9CisKKyAgICAvLyBXcml0ZSBvcGVyYXRpb24gZmFpbGVkIGlmIGNvbXBsZXRl
IG1lc3NhZ2UgaXMgbm90IHdyaXR0ZW4uCisgICAgcmV0dXJuICFwZW5kaW5nQnl0ZXNUb1dyaXRl
OworfQorCit2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlk
ZW50aWZpZXIpCit7CisgICAgbV9jdXJyZW50TWVzc2FnZVNpemUgPSAwOworICAgIG1fcGVuZGlu
Z0J5dGVzID0gMDsKKyAgICBtX3JlYWRCdWZmZXIucmVzaXplKGluaXRpYWxNZXNzYWdlQnVmZmVy
U2l6ZSk7CisgICAgbV9zb2NrZXQgPSBpZGVudGlmaWVyOworICAgIG1faXNDb25uZWN0ZWQgPSB0
cnVlOworfQorCit2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAg
aWYgKCFtX2lzQ29ubmVjdGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Nvbm5lY3Rpb25R
dWV1ZS51bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKG1fc29ja2V0KTsKKyAgICBpZiAobV9z
b2NrZXQgPiAwKSB7CisgICAgICAgIGNsb3NlKG1fc29ja2V0KTsKKyAgICAgICAgbV9zb2NrZXQg
PSAtMTsKKyAgICB9CisKKyAgICBtX2lzQ29ubmVjdGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgQ29u
bmVjdGlvbjo6cHJvY2Vzc0NvbXBsZXRlZE1lc3NhZ2UoKQoreworICAgIHNpemVfdCByZWFsQnVm
ZmVyU2l6ZSA9IG1fY3VycmVudE1lc3NhZ2VTaXplIC0gc2l6ZW9mKE1lc3NhZ2VJRCk7CisgICAg
dW5zaWduZWQgbWVzc2FnZUlEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQqPihtX3JlYWRC
dWZmZXIuZGF0YSgpICsgcmVhbEJ1ZmZlclNpemUpOworCisgICAgcHJvY2Vzc0luY29taW5nTWVz
c2FnZShNZXNzYWdlSUQ6OmZyb21JbnQobWVzc2FnZUlEKSwgYWRvcHRQdHIobmV3IEFyZ3VtZW50
RGVjb2RlcihtX3JlYWRCdWZmZXIuZGF0YSgpLCByZWFsQnVmZmVyU2l6ZSkpKTsKKworICAgIC8v
IFByZXBhcmUgZm9yIHRoZSBuZXh0IG1lc3NhZ2UuCisgICAgbV9jdXJyZW50TWVzc2FnZVNpemUg
PSAwOworICAgIG1fcGVuZGluZ0J5dGVzID0gMDsKK30KKwordm9pZCBDb25uZWN0aW9uOjpyZWFk
RXZlbnRIYW5kbGVyKCkKK3sKKyAgICBpZiAobV9zb2NrZXQgPCAwKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBIYW5kbGUgYW55IHByZXZpb3VzbHkgdW5wcm9jZXNzZWQgbWVzc2FnZS4KKyAg
ICBpZiAoIW1lc3NhZ2VQcm9jZXNzaW5nQ29tcGxldGVkKCkpIHsKKyAgICAgICAgaWYgKChtX3Bl
bmRpbmdCeXRlcyAtPSByZWFkQnl0ZXNGcm9tU29ja2V0KG1fc29ja2V0LCAobV9yZWFkQnVmZmVy
LmRhdGEoKSArIChtX2N1cnJlbnRNZXNzYWdlU2l6ZSAtIG1fcGVuZGluZ0J5dGVzKSksIG1fcGVu
ZGluZ0J5dGVzKSkgPiAwKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIE1lc3Nh
Z2UgcmVjZWl2ZWQgY29tcGxldGVseS4gUHJvY2VzcyB0aGUgbWVzc2FnZSBub3cuCisgICAgICAg
IHByb2Nlc3NDb21wbGV0ZWRNZXNzYWdlKCk7CisgICAgfQorCisgICAgLy8gUHJlcGFyZSB0byBy
ZWFkIHRoZSBuZXh0IG1lc3NhZ2UuCisgICAgdWludDhfdCBzaXplQnVmZmVyW3NpemVvZihzaXpl
X3QpXTsKKyAgICBtZW1zZXQoc2l6ZUJ1ZmZlciwgMCwgc2l6ZW9mKHNpemVfdCkpOworICAgIAor
ICAgIHdoaWxlIChtZXNzYWdlUHJvY2Vzc2luZ0NvbXBsZXRlZCgpKSB7CisgICAgICAgIGlmIChy
ZWFkQnl0ZXNGcm9tU29ja2V0KG1fc29ja2V0LCBzaXplQnVmZmVyLCBzaXplb2Yoc2l6ZV90KSkp
CisgICAgICAgICAgICBtX2N1cnJlbnRNZXNzYWdlU2l6ZSA9ICpyZWludGVycHJldF9jYXN0PHNp
emVfdCo+KHNpemVCdWZmZXIpOworCisgICAgICAgIGlmICghbV9jdXJyZW50TWVzc2FnZVNpemUp
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAobV9yZWFkQnVmZmVyLnNpemUoKSA8
IG1fY3VycmVudE1lc3NhZ2VTaXplKQorICAgICAgICAgICAgbV9yZWFkQnVmZmVyLmdyb3cobV9j
dXJyZW50TWVzc2FnZVNpemUpOworCisgICAgICAgIG1fcGVuZGluZ0J5dGVzID0gbV9jdXJyZW50
TWVzc2FnZVNpemUgLSByZWFkQnl0ZXNGcm9tU29ja2V0KG1fc29ja2V0LCBtX3JlYWRCdWZmZXIu
ZGF0YSgpLCBtX2N1cnJlbnRNZXNzYWdlU2l6ZSk7CisgICAgICAgIGlmIChtX3BlbmRpbmdCeXRl
cyA+IDApIC8vIE1lc3NhZ2UgcGFydGlhbGx5IHJlY2VpdmVkLgorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgLy8gTWVzc2FnZSByZWNlaXZlZCBjb21wbGV0ZWx5LiBQcm9jZXNzIHRoZSBt
ZXNzYWdlIG5vdy4KKyAgICAgICAgcHJvY2Vzc0NvbXBsZXRlZE1lc3NhZ2UoKTsKKworICAgICAg
ICBtZW1zZXQoc2l6ZUJ1ZmZlciwgMCwgc2l6ZW9mKHNpemVfdCkpOworICAgIH0KK30KKworYm9v
bCBDb25uZWN0aW9uOjpvcGVuKCkKK3sKKyAgICBpbnQgZmxhZ3MgPSBmY250bChtX3NvY2tldCwg
Rl9HRVRGTCwgMCk7CisgICAgZmNudGwobV9zb2NrZXQsIEZfU0VURkwsIGZsYWdzIHwgT19OT05C
TE9DSyk7CisKKyAgICAvLyBSZWdpc3RlciBjYWxsYmFja3MgZm9yIGNvbm5lY3Rpb24gdGVybWlu
YXRpb24gYW5kIGlucHV0IGRhdGEgb24gdGhlIFdvcmtRdWV1ZS4KKyAgICBtX2Nvbm5lY3Rpb25R
dWV1ZS5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihtX3NvY2tldCwgKEdfSU9fSFVQIHwgR19J
T19FUlIpLCBXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpjb25uZWN0aW9uRGlk
Q2xvc2UpKTsKKyAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxl
cihtX3NvY2tldCwgR19JT19JTiwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6
cmVhZEV2ZW50SGFuZGxlcikpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbm5lY3Rp
b246OnBsYXRmb3JtQ2FuU2VuZE91dGdvaW5nTWVzc2FnZXMoKSBjb25zdAoreworICAgIHJldHVy
biAobV9zb2NrZXQgPiAwKTsKK30KKworYm9vbCBDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNz
YWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQsIFBhc3NPd25QdHI8QXJndW1lbnRFbmNvZGVyPiBhcmd1
bWVudHMpCit7CisgICAgaWYgKG1fc29ja2V0IDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gV2UgcHV0IHRoZSBtZXNzYWdlIElEIGxhc3QuCisgICAgYXJndW1lbnRzLT5lbmNv
ZGVVSW50MzIobWVzc2FnZUlELnRvSW50KCkpOworCisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBh
cmd1bWVudHMtPmJ1ZmZlclNpemUoKTsKKworICAgIC8vIFNlbmQgdGhlIG1lc3NhZ2Ugc2l6ZSBm
aXJzdC4KKyAgICBpZiAoIXdyaXRlQnl0ZXNUb1NvY2tldChtX3NvY2tldCwgcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oJmJ1ZmZlclNpemUpLCBzaXplb2Yoc2l6ZV90KSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghd3JpdGVCeXRlc1RvU29ja2V0KG1fc29ja2V0LCBhcmd1
bWVudHMtPmJ1ZmZlcigpLCBhcmd1bWVudHMtPmJ1ZmZlclNpemUoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBDb3JlSVBD
CkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgJKHJldmlzaW9uIDczMDA5
KQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj
KSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MCw2ICs5MSw4IEBACiAgICAgc3RhdGlj
IGJvb2wgY3JlYXRlU2VydmVyQW5kQ2xpZW50SWRlbnRpZmllcnMoSWRlbnRpZmllciYgc2VydmVy
SWRlbnRpZmllciwgSWRlbnRpZmllciYgY2xpZW50SWRlbnRpZmllcik7CiAjZWxpZiBQTEFURk9S
TShRVCkKICAgICB0eXBlZGVmIGNvbnN0IFFTdHJpbmcgSWRlbnRpZmllcjsKKyNlbGlmIFBMQVRG
T1JNKEdUSykKKyAgICB0eXBlZGVmIGludCBJZGVudGlmaWVyOwogI2VuZGlmCiAKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDb25uZWN0aW9uPiBjcmVhdGVTZXJ2ZXJDb25uZWN0aW9uKElkZW50aWZp
ZXIsIENsaWVudCosIFJ1bkxvb3AqIGNsaWVudFJ1bkxvb3ApOwpAQCAtMjYzLDYgKzI2NiwxNSBA
QAogICAgIHNpemVfdCBtX2N1cnJlbnRNZXNzYWdlU2l6ZTsKICAgICBRTG9jYWxTb2NrZXQqIG1f
c29ja2V0OwogICAgIFFTdHJpbmcgbV9zZXJ2ZXJOYW1lOworI2VsaWYgUExBVEZPUk0oR1RLKQor
ICAgIHZvaWQgcmVhZEV2ZW50SGFuZGxlcigpOworICAgIHZvaWQgcHJvY2Vzc0NvbXBsZXRlZE1l
c3NhZ2UoKTsKKyAgICBib29sIG1lc3NhZ2VQcm9jZXNzaW5nQ29tcGxldGVkKCkgeyByZXR1cm4g
IW1fY3VycmVudE1lc3NhZ2VTaXplOyB9CisKKyAgICBpbnQgbV9zb2NrZXQ7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IG1fcmVhZEJ1ZmZlcjsKKyAgICBzaXplX3QgbV9jdXJyZW50TWVzc2FnZVNpemU7
CisgICAgc2l6ZV90IG1fcGVuZGluZ0J5dGVzOwogI2VuZGlmCiB9OwogCkluZGV4OiBXZWJLaXQy
L1BsYXRmb3JtL2d0ay9SdW5Mb29wR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRm
b3JtL2d0ay9SdW5Mb29wR3RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvUGxhdGZvcm0v
Z3RrL1J1bkxvb3BHdGsuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQ
b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisKKyNpbmNs
dWRlICJXS0Jhc2UuaCIKKyNpbmNsdWRlIDxnbGliLmg+CisKK1J1bkxvb3A6OlJ1bkxvb3AoKQor
eworICAgIG1fcnVuTG9vcENvbnRleHQgPSBnX21haW5fY29udGV4dF9kZWZhdWx0KCk7CisgICAg
QVNTRVJUKG1fcnVuTG9vcENvbnRleHQpOworICAgIG1fcnVuTG9vcE1haW4gPSBnX21haW5fbG9v
cF9uZXcobV9ydW5Mb29wQ29udGV4dCwgRkFMU0UpOworICAgIEFTU0VSVChtX3J1bkxvb3BNYWlu
KTsKK30KKworUnVuTG9vcDo6flJ1bkxvb3AoKQoreworICAgIGlmIChtX3J1bkxvb3BNYWluKSB7
CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9ydW5Mb29wTWFpbik7CisgICAgICAgIGdfbWFp
bl9sb29wX3VucmVmKG1fcnVuTG9vcE1haW4pOworICAgIH0KKworICAgIGlmIChtX3J1bkxvb3BD
b250ZXh0KQorICAgICAgICBnX21haW5fY29udGV4dF91bnJlZihtX3J1bkxvb3BDb250ZXh0KTsK
K30KKwordm9pZCBSdW5Mb29wOjpydW4oKQoreworICAgIGdfbWFpbl9sb29wX3J1bihSdW5Mb29w
OjptYWluKCktPm1haW5Mb29wKCkpOworfQorCitHTWFpbkxvb3AqIFJ1bkxvb3A6Om1haW5Mb29w
KCkKK3sKKyAgICByZXR1cm4gbV9ydW5Mb29wTWFpbjsKK30KKwordm9pZCBSdW5Mb29wOjpzdG9w
KCkKK3sKKyAgICBnX21haW5fbG9vcF9xdWl0KG1fcnVuTG9vcE1haW4pOworfQorCitnYm9vbGVh
biBSdW5Mb29wOjpxdWV1ZVdvcmsoUnVuTG9vcCogcnVuTG9vcCkKK3sKKyAgICBydW5Mb29wLT5w
ZXJmb3JtV29yaygpOworICAgIHJldHVybiBGQUxTRTsKK30KKwordm9pZCBSdW5Mb29wOjp3YWtl
VXAoKQoreworICAgIEdTb3VyY2UqIHNvdXJjZSA9IGdfdGltZW91dF9zb3VyY2VfbmV3KDApOwor
ICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhzb3VyY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJj
ZUZ1bmM+KCZSdW5Mb29wOjpxdWV1ZVdvcmspLCB0aGlzLCAwKTsKKyAgICBnX3NvdXJjZV9hdHRh
Y2goc291cmNlLCBtX3J1bkxvb3BDb250ZXh0KTsKKworICAgIGdfbWFpbl9jb250ZXh0X3dha2V1
cChtX3J1bkxvb3BDb250ZXh0KTsKK30KKworUnVuTG9vcDo6VGltZXJCYXNlOjpUaW1lckJhc2Uo
UnVuTG9vcCogcnVuTG9vcCkKKyAgICA6IG1fcnVuTG9vcChydW5Mb29wKQorICAgICwgbV90aW1l
clNvdXJjZSgwKQoreworfQorCitSdW5Mb29wOjpUaW1lckJhc2U6On5UaW1lckJhc2UoKQorewor
ICAgIHN0b3AoKTsKK30KKwordm9pZCBSdW5Mb29wOjpUaW1lckJhc2U6OnJlc2V0VGltZXJTb3Vy
Y2UoKQoreworICAgIG1fdGltZXJTb3VyY2UgPSAwOworfQorCitnYm9vbGVhbiBSdW5Mb29wOjpU
aW1lckJhc2U6Om9uZVNob3RUaW1lckZpcmVkKFJ1bkxvb3A6OlRpbWVyQmFzZSogdGltZXIpCit7
CisgICAgdGltZXItPmZpcmVkKCk7CisgICAgdGltZXItPnJlc2V0VGltZXJTb3VyY2UoKTsKKyAg
ICByZXR1cm4gRkFMU0U7Cit9CisKK2dib29sZWFuIFJ1bkxvb3A6OlRpbWVyQmFzZTo6cmVwZWF0
aW5nVGltZXJGaXJlZChSdW5Mb29wOjpUaW1lckJhc2UqIHRpbWVyKQoreworICAgIHRpbWVyLT5m
aXJlZCgpOworICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6
c3RhcnQoZG91YmxlIG5leHRGaXJlSW50ZXJ2YWwsIGRvdWJsZSByZXBlYXRJbnRlcnZhbCkKK3sK
KyAgICBpZiAobV90aW1lclNvdXJjZSkKKyAgICAgICAgc3RvcCgpOworCisgICAgaWYgKHJlcGVh
dEludGVydmFsKSB7CisgICAgICAgIG1fdGltZXJTb3VyY2UgPSBnX3RpbWVvdXRfc291cmNlX25l
dyhzdGF0aWNfY2FzdDxndWludD4ocmVwZWF0SW50ZXJ2YWwpKTsKKyAgICAgICAgZ19zb3VyY2Vf
c2V0X2NhbGxiYWNrKG1fdGltZXJTb3VyY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+
KCZSdW5Mb29wOjpUaW1lckJhc2U6OnJlcGVhdGluZ1RpbWVyRmlyZWQpLCB0aGlzLCAwKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtX3RpbWVyU291cmNlID0gZ190aW1lb3V0X3NvdXJjZV9uZXco
c3RhdGljX2Nhc3Q8Z3VpbnQ+KG5leHRGaXJlSW50ZXJ2YWwpKTsKKyAgICAgICAgZ19zb3VyY2Vf
c2V0X2NhbGxiYWNrKG1fdGltZXJTb3VyY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+
KCZSdW5Mb29wOjpUaW1lckJhc2U6Om9uZVNob3RUaW1lckZpcmVkKSwgdGhpcywgMCk7CisgICAg
fQorICAgIGdfc291cmNlX2F0dGFjaChtX3RpbWVyU291cmNlLCBtX3J1bkxvb3AtPm1fcnVuTG9v
cENvbnRleHQpOworfQorCit2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RvcCgpCit7CisgICAg
aWYgKCFtX3RpbWVyU291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICBnX3NvdXJjZV9kZXN0
cm95KG1fdGltZXJTb3VyY2UpOworICAgIG1fdGltZXJTb3VyY2UgPSAwOworfQorCitib29sIFJ1
bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RpbWVy
U291cmNlOworfQpJbmRleDogV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEw
IE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlICJXS0Jhc2UuaCIKKyNpbmNsdWRl
IDxnbGliLmg+CisKKy8vIFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UKK2NsYXNzIFdvcmtRdWV1ZTo6
RXZlbnRTb3VyY2UgeworcHVibGljOgorICAgIEV2ZW50U291cmNlKEdTb3VyY2UqIGRpc3BhdGNo
U291cmNlLCBQYXNzT3duUHRyPFdvcmtJdGVtPiB3b3JrSXRlbSwgV29ya1F1ZXVlKiB3b3JrUXVl
dWUpCisgICAgICAgIDogbV9kaXNwYXRjaFNvdXJjZShkaXNwYXRjaFNvdXJjZSkKKyAgICAgICAg
LCBtX3dvcmtJdGVtKHdvcmtJdGVtKQorICAgICAgICAsIG1fd29ya1F1ZXVlKHdvcmtRdWV1ZSkK
KyAgICB7CisgICAgfQorCisgICAgR1NvdXJjZSogZGlzcGF0Y2hTb3VyY2UoKSB7IHJldHVybiBt
X2Rpc3BhdGNoU291cmNlOyB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmtPbmNl
KEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChldmVudFNv
dXJjZSk7CisgICAgICAgIFdvcmtRdWV1ZSogcXVldWUgPSBldmVudFNvdXJjZS0+bV93b3JrUXVl
dWU7CisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihxdWV1ZS0+bV9p
c1ZhbGlkTXV0ZXgpOworICAgICAgICAgICAgaWYgKCFxdWV1ZS0+bV9pc1ZhbGlkKQorICAgICAg
ICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorCisgICAgICAgIGV2ZW50U291cmNl
LT5tX3dvcmtJdGVtLT5leGVjdXRlKCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisK
KyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmsoR0lPQ2hhbm5lbCogY2hhbm5lbCwgR0lP
Q29uZGl0aW9uIGNvbmRpdGlvbiwgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKSAKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChldmVudFNvdXJjZSk7CisKKyAgICAgICAgaWYgKCEoY29uZGl0aW9uICYg
R19JT19JTikgJiYgIShjb25kaXRpb24gJiBHX0lPX0hVUCkgJiYgIShjb25kaXRpb24gJiBHX0lP
X0VSUikpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgICAgV29ya1F1ZXVlKiBx
dWV1ZSA9IGV2ZW50U291cmNlLT5tX3dvcmtRdWV1ZTsKKyAgICAgICAgeworICAgICAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7CisgICAgICAgICAgICBp
ZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAg
ICAgICB9CisKKyAgICAgICAgZXZlbnRTb3VyY2UtPm1fd29ya0l0ZW0tPmV4ZWN1dGUoKTsKKwor
ICAgICAgICBpZiAoKGNvbmRpdGlvbiAmIEdfSU9fSFVQKSB8fCAoY29uZGl0aW9uICYgR19JT19F
UlIpKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgICAgIHJldHVybiBUUlVFOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVFdmVudFNvdXJjZShFdmVudFNvdXJj
ZSogZXZlbnRTb3VyY2UpIAorICAgIHsKKyAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKyAg
ICAgICAgZGVsZXRlIGV2ZW50U291cmNlOworICAgIH0KKyAgIAorcHVibGljOgorICAgIEdTb3Vy
Y2UqIG1fZGlzcGF0Y2hTb3VyY2U7CisgICAgUGFzc093blB0cjxXb3JrSXRlbT4gbV93b3JrSXRl
bTsKKyAgICBXb3JrUXVldWUqIG1fd29ya1F1ZXVlOworfTsKKworLy8gV29ya1F1ZXVlCit2b2lk
IFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAg
bV9ldmVudENvbnRleHQgPSBnX21haW5fY29udGV4dF9uZXcoKTsKKyAgICBBU1NFUlQobV9ldmVu
dENvbnRleHQpOworICAgIG1fZXZlbnRMb29wID0gZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250
ZXh0LCBGQUxTRSk7CisgICAgQVNTRVJUKG1fZXZlbnRMb29wKTsKKyAgICBtX3dvcmtRdWV1ZVRo
cmVhZCA9IGNyZWF0ZVRocmVhZChyZWludGVycHJldF9jYXN0PFdURjo6VGhyZWFkRnVuY3Rpb24+
KCZXb3JrUXVldWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKSwgdGhpcywgbmFtZSk7Cit9CisKK3Zv
aWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX2V2ZW50TG9vcExvY2spOworCisgICAgaWYgKG1fZXZlbnRMb29wKSB7CisgICAgICAg
IGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKG1fZXZlbnRMb29wKSkKKyAgICAgICAgICAgIGdf
bWFpbl9sb29wX3F1aXQobV9ldmVudExvb3ApOworCisgICAgICAgIGdfbWFpbl9sb29wX3VucmVm
KG1fZXZlbnRMb29wKTsKKyAgICAgICAgbV9ldmVudExvb3AgPSAwOworICAgIH0KKworICAgIGlm
IChtX2V2ZW50Q29udGV4dCkgeworICAgICAgICBnX21haW5fY29udGV4dF91bnJlZihtX2V2ZW50
Q29udGV4dCk7CisgICAgICAgIG1fZXZlbnRDb250ZXh0ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQq
IFdvcmtRdWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKiB3b3JrUXVldWUpCit7
CisgICAgd29ya1F1ZXVlLT53b3JrUXVldWVUaHJlYWRCb2R5KCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWRCb2R5KCkKK3sKKyAgICBnX21haW5f
bG9vcF9ydW4obV9ldmVudExvb3ApOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVu
dFNvdXJjZUhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBpbnQgY29uZGl0aW9uLCBQYXNzT3du
UHRyPFdvcmtJdGVtPiBpdGVtKQoreworICAgIEdJT0NoYW5uZWwqIGNoYW5uZWwgPSBnX2lvX2No
YW5uZWxfdW5peF9uZXcoZmlsZURlc2NyaXB0b3IpOworICAgIEFTU0VSVChjaGFubmVsKTsKKyAg
ICBHU291cmNlKiBkaXNwYXRjaFNvdXJjZSA9IGdfaW9fY3JlYXRlX3dhdGNoKGNoYW5uZWwsIHN0
YXRpY19jYXN0PEdJT0NvbmRpdGlvbj4oY29uZGl0aW9uKSk7CisgICAgQVNTRVJUKGRpc3BhdGNo
U291cmNlKTsKKyAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2Uo
ZGlzcGF0Y2hTb3VyY2UsIGl0ZW0sIHRoaXMpOworICAgIEFTU0VSVChldmVudFNvdXJjZSk7CisK
KyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hTb3VyY2UsIHJlaW50ZXJwcmV0X2Nh
c3Q8R1NvdXJjZUZ1bmM+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29yayksIAor
ICAgICAgICBldmVudFNvdXJjZSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oJldv
cmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKSk7CisKKyAgICAvLyBTZXQg
dXAgdGhlIGV2ZW50IHNvdXJjZXMgdW5kZXIgdGhlIG11dGV4IHNpbmNlIHRoaXMgaXMgc2hhcmVk
IGFjcm9zcyBtdWx0aXBsZSB0aHJlYWRzLgorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fZXZlbnRTb3VyY2VzTG9jayk7CisgICAgICAgIEFTU0VSVCghbV9ldmVudFNvdXJjZXMu
Y29udGFpbnMoZmlsZURlc2NyaXB0b3IpKTsKKyAgICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4g
c291cmNlczsKKyAgICAgICAgRXZlbnRTb3VyY2VJdGVyYXRvciBpdCA9IG1fZXZlbnRTb3VyY2Vz
LmZpbmQoZmlsZURlc2NyaXB0b3IpOworICAgICAgICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMu
ZW5kKCkpIAorICAgICAgICAgICAgc291cmNlcyA9IGl0LT5zZWNvbmQ7CisKKyAgICAgICAgc291
cmNlcy5hcHBlbmQoZXZlbnRTb3VyY2UpOworICAgICAgICBtX2V2ZW50U291cmNlcy5zZXQoZmls
ZURlc2NyaXB0b3IsIHNvdXJjZXMpOworICAgIH0KKworICAgIC8vIEF0dGFjaCB0aGUgZXZlbnQg
c291cmNlIHRvIHRoZSBHTWFpbkNvbnRleHQgdW5kZXIgdGhlIG11dGV4IHNpbmNlIHRoaXMgaXMg
c2hhcmVkIGFjcm9zcyBtdWx0aXBsZSB0aHJlYWRzLgorICAgIHsKKyAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fZXZlbnRMb29wTG9jayk7CisgICAgICAgIGdfc291cmNlX2F0dGFjaChkaXNw
YXRjaFNvdXJjZSwgbV9ldmVudENvbnRleHQpOworICAgIH0KK30KKwordm9pZCBXb3JrUXVldWU6
OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yKQoreworICAg
IEFTU0VSVChmaWxlRGVzY3JpcHRvcik7CisgICAgCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
ZXZlbnRTb3VyY2VzTG9jayk7CisgICAgCisgICAgRXZlbnRTb3VyY2VJdGVyYXRvciBpdCA9IG1f
ZXZlbnRTb3VyY2VzLmZpbmQoZmlsZURlc2NyaXB0b3IpOworICAgIEFTU0VSVChpdCAhPSBtX2V2
ZW50U291cmNlcy5lbmQoKSk7CisgICAgQVNTRVJUKG1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKGZp
bGVEZXNjcmlwdG9yKSk7CisKKyAgICBpZiAoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIHsK
KyAgICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291cmNlcyA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VzLnNpemUoKTsgaSsrKQorICAgICAg
ICAgICAgZ19zb3VyY2VfZGVzdHJveShzb3VyY2VzW2ldLT5kaXNwYXRjaFNvdXJjZSgpKTsKKwor
ICAgICAgICBtX2V2ZW50U291cmNlcy5yZW1vdmUoaXQpOworICAgIH0KK30KKwordm9pZCBXb3Jr
UXVldWU6OnNjaGVkdWxlV29yayhQYXNzT3duUHRyPFdvcmtJdGVtPiBpdGVtKQoreworICAgIEdT
b3VyY2UqIGRpc3BhdGNoU291cmNlID0gZ190aW1lb3V0X3NvdXJjZV9uZXcoMCk7CisgICAgQVNT
RVJUKGRpc3BhdGNoU291cmNlKTsKKyAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBuZXcg
RXZlbnRTb3VyY2UoZGlzcGF0Y2hTb3VyY2UsIGl0ZW0sIHRoaXMpOworICAgIAorICAgIGdfc291
cmNlX3NldF9jYWxsYmFjayhkaXNwYXRjaFNvdXJjZSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZXb3JrUXVldWU6OkV2ZW50U291cmNl
OjpwZXJmb3JtV29ya09uY2UpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTb3Vy
Y2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95
Tm90aWZ5PigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3VyY2UpKTsKKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50TG9vcExvY2spOworICAgICAg
ICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3VyY2UsIG1fZXZlbnRDb250ZXh0KTsKKyAgICB9
Cit9CkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIu
aAkocmV2aXNpb24gNzMwMDkpCisrKyBXZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBAQAogdHlwZWRlZiBIQU5E
TEUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKICNlbGlmIFBMQVRGT1JNKFFUKQogdHlwZWRl
ZiBRUHJvY2VzcyogUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKKyNlbGlmIFBMQVRGT1JNKEdU
SykKK3R5cGVkZWYgcGlkX3QgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKICNlbmRpZgogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQgCkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgJKHJldmlzaW9uIDcz
MDA5KQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1v
YmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Myw2ICs0NCw5IEBACiBjbGFzcyBRTG9jYWxTb2NrZXQ7CiBjbGFzcyBR
T2JqZWN0OwogY2xhc3MgUVRocmVhZDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYgc3Ry
dWN0IF9HTWFpbkNvbnRleHQgR01haW5Db250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgX0dNYWluTG9v
cCBHTWFpbkxvb3A7CiAjZW5kaWYKIAogY2xhc3MgV29ya1F1ZXVlIHsKQEAgLTc5LDYgKzgzLDkg
QEAKICAgICB2b2lkIGRpc2Nvbm5lY3RTaWduYWwoUU9iamVjdCosIGNvbnN0IGNoYXIqIHNpZ25h
bCk7CiAKICAgICB2b2lkIG1vdmVTb2NrZXRUb1dvcmtUaHJlYWQoUUxvY2FsU29ja2V0Kik7Cisj
ZWxpZiBQTEFURk9STShHVEspCisgICAgdm9pZCByZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihp
bnQsIGludCwgUGFzc093blB0cjxXb3JrSXRlbT4pOworICAgIHZvaWQgdW5yZWdpc3RlckV2ZW50
U291cmNlSGFuZGxlcihpbnQpOwogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0xNTEsNiArMTU4LDE4
IEBACiAgICAgSGFzaE1hcDxRT2JqZWN0KiwgV29ya0l0ZW1RdCo+IG1fc2lnbmFsTGlzdGVuZXJz
OwogICAgIFFUaHJlYWQqIG1fd29ya1RocmVhZDsKICAgICBmcmllbmQgY2xhc3MgV29ya0l0ZW1R
dDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBzdGF0aWMgdm9pZCogc3RhcnRXb3JrUXVldWVU
aHJlYWQoV29ya1F1ZXVlKik7CisgICAgdm9pZCB3b3JrUXVldWVUaHJlYWRCb2R5KCk7CisKKyAg
ICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya1F1ZXVlVGhyZWFkOworICAgIEdNYWluQ29udGV4dCog
bV9ldmVudENvbnRleHQ7CisgICAgTXV0ZXggbV9ldmVudExvb3BMb2NrOworICAgIEdNYWluTG9v
cCogbV9ldmVudExvb3A7CisgICAgTXV0ZXggbV9ldmVudFNvdXJjZXNMb2NrOworICAgIGNsYXNz
IEV2ZW50U291cmNlOworICAgIEhhc2hNYXA8aW50LCBWZWN0b3I8RXZlbnRTb3VyY2UqPiA+IG1f
ZXZlbnRTb3VyY2VzOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFZlY3RvcjxFdmVudFNvdXJj
ZSo+ID46Oml0ZXJhdG9yIEV2ZW50U291cmNlSXRlcmF0b3I7IAogI2VuZGlmCiB9OwogCkluZGV4
OiBXZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2
aXNpb24gNzMwMDkpCisrKyBXZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU3IEBACisyMDEwLTExLTMwIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3JvbGEuY29t
PiBhbmQgUmF2aSBLYXNpYmhhdGxhICA8cmF2aS5rYXNpYmhhdGxhQG1vdG9yb2xhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBJbXBs
ZW1lbnQgUnVuTG9vcCwgV29ya1F1ZXVlLCBDb25uZWN0aW9uIGNsYXNzZXMgZm9yIFdlYktpdDIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4NTA3CisK
KyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaDogVU5JWF9YMTEgc3BlY2lm
aWMgY2hhbmdlcyBmb3IgR1RLIHBvcnQuCisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpt
ZXNzYWdlUHJvY2Vzc2luZ0NvbXBsZXRlZCk6CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9n
dGs6IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvZ3RrL0Nvbm5lY3Rpb25HdGsu
Y3BwOiBBZGRlZC4gQ29ubmVjdGlvbiBjbGFzcyBpbXBsZW1lbnRhdGlvbiBmb3IgR1RLIHBvcnQg
KFVOSVhfWDExIHNwZWNpZmljKS4KKyAgICAgICAgKENvcmVJUEM6OnJlYWRCeXRlc0Zyb21Tb2Nr
ZXQpOgorICAgICAgICAoQ29yZUlQQzo6d3JpdGVCeXRlc1RvU29ja2V0KToKKyAgICAgICAgKENv
cmVJUEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChDb3JlSVBD
OjpDb25uZWN0aW9uOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoQ29yZUlQQzo6Q29u
bmVjdGlvbjo6cHJvY2Vzc0NvbXBsZXRlZE1lc3NhZ2UpOgorICAgICAgICAoQ29yZUlQQzo6Q29u
bmVjdGlvbjo6cmVhZEV2ZW50SGFuZGxlcik6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9u
OjpvcGVuKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtQ2FuU2VuZE91
dGdvaW5nTWVzc2FnZXMpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6c2VuZE91dGdv
aW5nTWVzc2FnZSk6CisgICAgICAgICogUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmll
ci5oOiBVTklYX1gxMSBzcGVjaWZpYyBjaGFuZ2VzIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKiBQ
bGF0Zm9ybS9SdW5Mb29wLmg6IEdUSyBwb3J0IHNwZWNpZmljIGNoYW5nZXMuCisgICAgICAgICog
UGxhdGZvcm0vV29ya1F1ZXVlLmg6IEdUSyBwb3J0IHNwZWNpZmljIGNoYW5nZXMuCisgICAgICAg
ICogUGxhdGZvcm0vZ3RrL1J1bkxvb3BHdGsuY3BwOiBBZGRlZC4gUnVucyBhbiBldmVudCBsb29w
IHVzaW5nIEdNYWluTG9vcCBhbmQgaGFuZGxlcyB0aGUgaW5jb21pbmcgbWVzc2FnZXMuCisgICAg
ICAgIChSdW5Mb29wOjpSdW5Mb29wKToKKyAgICAgICAgKFJ1bkxvb3A6On5SdW5Mb29wKToKKyAg
ICAgICAgKFJ1bkxvb3A6OnJ1bik6CisgICAgICAgIChSdW5Mb29wOjptYWluTG9vcCk6CisgICAg
ICAgIChSdW5Mb29wOjpzdG9wKToKKyAgICAgICAgKFJ1bkxvb3A6OnF1ZXVlV29yayk6CisgICAg
ICAgIChSdW5Mb29wOjp3YWtlVXApOgorICAgICAgICAoUnVuTG9vcDo6VGltZXJCYXNlOjpUaW1l
ckJhc2UpOgorICAgICAgICAoUnVuTG9vcDo6VGltZXJCYXNlOjp+VGltZXJCYXNlKToKKyAgICAg
ICAgKFJ1bkxvb3A6OlRpbWVyQmFzZTo6cmVzZXRUaW1lclNvdXJjZSk6CisgICAgICAgIChSdW5M
b29wOjpUaW1lckJhc2U6Om9uZVNob3RUaW1lckZpcmVkKToKKyAgICAgICAgKFJ1bkxvb3A6OlRp
bWVyQmFzZTo6cmVwZWF0aW5nVGltZXJGaXJlZCk6CisgICAgICAgIChSdW5Mb29wOjpUaW1lckJh
c2U6OnN0YXJ0KToKKyAgICAgICAgKFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RvcCk6CisgICAgICAg
IChSdW5Mb29wOjpUaW1lckJhc2U6OmlzQWN0aXZlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9ndGsv
V29ya1F1ZXVlR3RrLmNwcDogQWRkZWQuIENyZWF0ZXMgYSB0aHJlYWQgYW5kIHBvbGxzIG9uIGEg
Z2l2ZW4gZmQgdXNpbmcgR0lPQ2hhbm5lbC4gCisgICAgICAgIERpc3BhdGNoZXMgdGhlIG9idGFp
bmVkIG1lc3NhZ2VzIHRvIFJ1bkxvb3AncyBHTWFpbkxvb3AuCisgICAgICAgIChXb3JrUXVldWU6
OkV2ZW50U291cmNlOjpFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291
cmNlOjpkaXNwYXRjaFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpw
ZXJmb3JtV29ya09uY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9y
bVdvcmspOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3Vy
Y2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAo
V29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpzdGFy
dFdvcmtRdWV1ZVRocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZEJv
ZHkpOgorICAgICAgICAoV29ya1F1ZXVlOjpyZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcik6Cisg
ICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAgICAg
ICAoV29ya1F1ZXVlOjpzY2hlZHVsZVdvcmspOgorCiAyMDEwLTExLTMwICBSeW9zdWtlIE5pd2Eg
IDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgc3BlY3VsYXRpdmUgYnVp
bGQgZml4IGZvciBXaW5kb3dzLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>