<?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>170976</bug_id>
          
          <creation_ts>2017-04-18 19:18:43 -0700</creation_ts>
          <short_desc>Add signaling API</short_desc>
          <delta_ts>2017-04-25 17:34:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=171159</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=171234</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>171139</dependson>
          <blocked>171159</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1298565</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-18 19:18:43 -0700</bug_when>
    <thetext>Add signaling API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298566</commentid>
    <comment_count>1</comment_count>
      <attachid>307450</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-18 19:20:41 -0700</bug_when>
    <thetext>Created attachment 307450
Proposed API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298582</commentid>
    <comment_count>2</comment_count>
      <attachid>307450</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-18 19:54:43 -0700</bug_when>
    <thetext>Comment on attachment 307450
Proposed API

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

&gt; Source/JavaScriptCore/tools/SignalHandler.h:31
&gt; +    Trap,

This should not be below LastIgnoredSignal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298604</commentid>
    <comment_count>3</comment_count>
      <attachid>307450</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-18 22:27:46 -0700</bug_when>
    <thetext>Comment on attachment 307450
Proposed API

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

&gt; Source/JavaScriptCore/tools/SignalHandler.cpp:84
&gt; +    auto currentNode = handlers[static_cast&lt;size_t&gt;(signal)].load();

You only need std::memory_order_acquire here.

&gt; Source/JavaScriptCore/tools/SignalHandler.cpp:87
&gt; +            didHandle = true;

Shouldn&apos;t this break out? I guess you&apos;re cascading all the installed ones all the way to the original one, and I&apos;d expect a way for an installed handler to say &quot;bail out&quot;.

&gt; Source/JavaScriptCore/tools/SignalHandler.cpp:89
&gt; +        currentNode = currentNode-&gt;next.load();

Ditto.

&gt; Source/JavaScriptCore/tools/SignalHandler.cpp:121
&gt; +    newNode-&gt;next.store(nullptr);

This doesn&apos;t need to be atomic (or can just be relaxed) because you haven&apos;t published it yet. The cmpxchg below publishes it.

&gt; Source/JavaScriptCore/tools/SignalHandler.cpp:123
&gt; +    auto currentNode = handlers[static_cast&lt;size_t&gt;(signal)].compareExchangeStrong(nullptr, newNode);

This can be acq_rel.

Why not fold this into the while loop below so you only have one cmpxchg?

&gt; Source/JavaScriptCore/tools/SignalHandler.cpp:131
&gt; +    }

There&apos;s a window here where you&apos;ve successfully set the `handlers[signal]` value, but haven&apos;t called `call_once` yet to initialize `oldActions[signal]`. If a signal gets handled here, is the code correct?

&gt; Source/JavaScriptCore/tools/SignalHandler.h:36
&gt; +    Bus,

SIGBUS versus SIGSEGV are tricky because MacOS raises SIGBUS where Linux raises SIGSEGV, except when it&apos;s an actual x86 segmentation fault. The API we&apos;re offering here is portable in that it&apos;ll install and deliver signals, but it&apos;s not portable in that different platforms will deliver different signals in particular situations.

Is that OK?

&gt; Source/JavaScriptCore/tools/SignalHandler.h:39
&gt; +};

Why only those?

FWIW C11 knows about:
SIGABRT
SIGFPE
SIGILL
SIGINT
SIGSEGV
SIGTERM

I guess we don&apos;t want to let users of this code raise() as well? C11 does both.

&gt; Source/JavaScriptCore/tools/SignalHandler.h:50
&gt; +// Thus it is your responibility to be able to detect the signal fired was yours or someone elses.

&quot;else&apos;s&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298609</commentid>
    <comment_count>4</comment_count>
      <attachid>307450</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-18 23:21:08 -0700</bug_when>
    <thetext>Comment on attachment 307450
Proposed API

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

&gt;&gt; Source/JavaScriptCore/tools/SignalHandler.cpp:84
&gt;&gt; +    auto currentNode = handlers[static_cast&lt;size_t&gt;(signal)].load();
&gt; 
&gt; You only need std::memory_order_acquire here.

Yeah, I didn&apos;t think too hard about the memory ordering constraints here. I can fix those.

&gt;&gt; Source/JavaScriptCore/tools/SignalHandler.cpp:87
&gt;&gt; +            didHandle = true;
&gt; 
&gt; Shouldn&apos;t this break out? I guess you&apos;re cascading all the installed ones all the way to the original one, and I&apos;d expect a way for an installed handler to say &quot;bail out&quot;.

Yeah, it&apos;s not really clear what that means though. There isn&apos;t really any way to know if the signal was intended for you exclusively you or someone else too. e.g. IIUC there could be two threads A and B sending a SigUsr1 to thread C. By the time the SigUsr1 is actually delivered the other one could have been discarded. If thread A&apos;s handler exits early then thread B&apos;s handler may never gets a chance to run.

&gt;&gt; Source/JavaScriptCore/tools/SignalHandler.cpp:89
&gt;&gt; +        currentNode = currentNode-&gt;next.load();
&gt; 
&gt; Ditto.

ditto.

&gt;&gt; Source/JavaScriptCore/tools/SignalHandler.cpp:121
&gt;&gt; +    newNode-&gt;next.store(nullptr);
&gt; 
&gt; This doesn&apos;t need to be atomic (or can just be relaxed) because you haven&apos;t published it yet. The cmpxchg below publishes it.

Ditto.

&gt;&gt; Source/JavaScriptCore/tools/SignalHandler.cpp:123
&gt;&gt; +    auto currentNode = handlers[static_cast&lt;size_t&gt;(signal)].compareExchangeStrong(nullptr, newNode);
&gt; 
&gt; This can be acq_rel.
&gt; 
&gt; Why not fold this into the while loop below so you only have one cmpxchg?

Ditto.

I feel like it&apos;s easier to read this way. Otherwise you need to be iterating over the Atomic itself which is harder to work with.

&gt;&gt; Source/JavaScriptCore/tools/SignalHandler.cpp:131
&gt;&gt; +    }
&gt; 
&gt; There&apos;s a window here where you&apos;ve successfully set the `handlers[signal]` value, but haven&apos;t called `call_once` yet to initialize `oldActions[signal]`. If a signal gets handled here, is the code correct?

I think it&apos;s safe to assume that you cannot send signals to any thread until your handler has been registered. Otherwise, your signal could just as easily arrive before this function is even called.

&gt;&gt; Source/JavaScriptCore/tools/SignalHandler.h:36
&gt;&gt; +    Bus,
&gt; 
&gt; SIGBUS versus SIGSEGV are tricky because MacOS raises SIGBUS where Linux raises SIGSEGV, except when it&apos;s an actual x86 segmentation fault. The API we&apos;re offering here is portable in that it&apos;ll install and deliver signals, but it&apos;s not portable in that different platforms will deliver different signals in particular situations.
&gt; 
&gt; Is that OK?

We could make this more abstract and bunch Bus and SegV into a Memory case. I&apos;m not opposed to such an idea as I expect anyone trying to handle one of those also wants to handle the other.

&gt;&gt; Source/JavaScriptCore/tools/SignalHandler.h:39
&gt;&gt; +};
&gt; 
&gt; Why only those?
&gt; 
&gt; FWIW C11 knows about:
&gt; SIGABRT
&gt; SIGFPE
&gt; SIGILL
&gt; SIGINT
&gt; SIGSEGV
&gt; SIGTERM
&gt; 
&gt; I guess we don&apos;t want to let users of this code raise() as well? C11 does both.

Right now sending a signal is your own business. Perhaps we should add such an API but I&apos;m not sure what that would look like just yet. Each user of signals does very different things right now.

&gt;&gt; Source/JavaScriptCore/tools/SignalHandler.h:50
&gt;&gt; +// Thus it is your responibility to be able to detect the signal fired was yours or someone elses.
&gt; 
&gt; &quot;else&apos;s&quot;

fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298727</commentid>
    <comment_count>5</comment_count>
      <attachid>307450</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-04-19 10:39:04 -0700</bug_when>
    <thetext>Comment on attachment 307450
Proposed API

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

Some comments for now while I think about this some more.

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        * tools/SignalHandler.cpp: Added.

Let&apos;s put this file in the runtime folder instead since it is part of the runtime.  I typically only put debugging tools for VM hackers in the tools folder.

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +        * tools/SignalHandler.h: Added.

Ditto.

&gt;&gt;&gt; Source/JavaScriptCore/tools/SignalHandler.h:36
&gt;&gt;&gt; +    Bus,
&gt;&gt; 
&gt;&gt; SIGBUS versus SIGSEGV are tricky because MacOS raises SIGBUS where Linux raises SIGSEGV, except when it&apos;s an actual x86 segmentation fault. The API we&apos;re offering here is portable in that it&apos;ll install and deliver signals, but it&apos;s not portable in that different platforms will deliver different signals in particular situations.
&gt;&gt; 
&gt;&gt; Is that OK?
&gt; 
&gt; We could make this more abstract and bunch Bus and SegV into a Memory case. I&apos;m not opposed to such an idea as I expect anyone trying to handle one of those also wants to handle the other.

I vote for keeping them distinct for now unless strong evidence arises to suggest we should do otherwise.  The implementation can choose to map one signal onto another, but at the abstraction level, let&apos;s keep the intent clear as to what condition / scenario we are actually trying to catch / trap on.

&gt;&gt;&gt; Source/JavaScriptCore/tools/SignalHandler.h:50
&gt;&gt;&gt; +// Thus it is your responibility to be able to detect the signal fired was yours or someone elses.
&gt;&gt; 
&gt;&gt; &quot;else&apos;s&quot;
&gt; 
&gt; fixed.

Typo: /responibility/responsibility/.

Let&apos;s rephrase &quot;to be able to detect the signal fired was yours&quot; to &quot;to discern if the signal fired was yours&quot;.

&gt; Source/JavaScriptCore/tools/SignalHandler.h:51
&gt; +// This function is currently a one way street.

I would clarify a bit as follows:
&quot;... one way street i.e. once installed, a signal handler cannot be uninstalled.&quot;

One might be able to infer this, but I think it&apos;s better to be specific about what &quot;one way street&quot; actually means.  We could get rid of the &quot;one way street&quot; and just state what it means, but I like poetic language, and it&apos;s easier to remember than the stuff after the &quot;i.e.&quot; (once the context has been clarified).  So, I vote for keeping it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298729</commentid>
    <comment_count>6</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-19 10:46:00 -0700</bug_when>
    <thetext>Thinking about this more I think we could have a message passing API using SIGUSR1. This would work by having each thread hold a lockless queue of SharedTasks. Whenever a thread receives a SIGUSR1 it iterates this queue and runs all the tasks. This is essentially what we do in VMTraps for SIGUSR1 and what I want to do with it for Wasm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298738</commentid>
    <comment_count>7</comment_count>
      <attachid>307450</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-19 11:15:12 -0700</bug_when>
    <thetext>Comment on attachment 307450
Proposed API

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:9
&gt;&gt; +        * tools/SignalHandler.cpp: Added.
&gt; 
&gt; Let&apos;s put this file in the runtime folder instead since it is part of the runtime.  I typically only put debugging tools for VM hackers in the tools folder.

I actually moved it to WTF since that seems like the more appropriate place for it anyway.

&gt;&gt; Source/JavaScriptCore/ChangeLog:14
&gt;&gt; +        * tools/SignalHandler.h: Added.
&gt; 
&gt; Ditto.

ditto.

&gt;&gt;&gt;&gt; Source/JavaScriptCore/tools/SignalHandler.h:50
&gt;&gt;&gt;&gt; +// Thus it is your responibility to be able to detect the signal fired was yours or someone elses.
&gt;&gt;&gt; 
&gt;&gt;&gt; &quot;else&apos;s&quot;
&gt;&gt; 
&gt;&gt; fixed.
&gt; 
&gt; Typo: /responibility/responsibility/.
&gt; 
&gt; Let&apos;s rephrase &quot;to be able to detect the signal fired was yours&quot; to &quot;to discern if the signal fired was yours&quot;.

Fixed.

&gt;&gt; Source/JavaScriptCore/tools/SignalHandler.h:51
&gt;&gt; +// This function is currently a one way street.
&gt; 
&gt; I would clarify a bit as follows:
&gt; &quot;... one way street i.e. once installed, a signal handler cannot be uninstalled.&quot;
&gt; 
&gt; One might be able to infer this, but I think it&apos;s better to be specific about what &quot;one way street&quot; actually means.  We could get rid of the &quot;one way street&quot; and just state what it means, but I like poetic language, and it&apos;s easier to remember than the stuff after the &quot;i.e.&quot; (once the context has been clarified).  So, I vote for keeping it.

Sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298933</commentid>
    <comment_count>8</comment_count>
      <attachid>307530</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-19 17:53:44 -0700</bug_when>
    <thetext>Created attachment 307530
updated API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298934</commentid>
    <comment_count>9</comment_count>
      <attachid>307531</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-19 17:54:12 -0700</bug_when>
    <thetext>Created attachment 307531
updated API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299005</commentid>
    <comment_count>10</comment_count>
      <attachid>307531</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-04-19 22:04:46 -0700</bug_when>
    <thetext>Comment on attachment 307531
updated API

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

&gt; Source/WTF/wtf/LocklessBag.h:56
&gt; +        while (!m_head.value.compare_exchange_strong(oldHead, newNode)) {
&gt; +            newNode-&gt;next = oldHead;
&gt; +        }

Don&apos;t need { } because there&apos;s only 1 line in the body.

Also, nit: m_head is a WTF:Atomic but you&apos;re relying on its underlying value implementation being a std::atomic.  Why not use the Atomic::compareExchangeStrong() instead?

&gt; Source/WTF/wtf/LocklessBag.h:63
&gt; +    void iterate(const Functor&amp; func)

At first I was wondering how this iterate() can be safe.  And then I see how you use it below.  Basically, it&apos;s safe because:
1. there&apos;s no race with consumeAll() because it is only used by the consumer, and
2. we don&apos;t worry about the race with add() because add() always adds to the front of the list.

It&apos;s be nice if we can at least document this detail so that no one modifies add() in such a way that breaks this in the future.  I can&apos;t think of a way to assert or guarantee it in code.

&gt; Source/WTF/wtf/ThreadMessage.cpp:58
&gt; +    Read = 0,
&gt; +    Write = 1,
&gt; +    Num = 2,

Can you spell out Num fully as NumberOfFileDescriptors?

&gt; Source/WTF/wtf/ThreadMessage.cpp:62
&gt; +static const char* magicByte = &quot;d&quot;;

You can make this &quot;static const char* const magicByte&quot; to indicate that you don&apos;t intend to ever change the value of magicByte.  The &quot;const char*&quot; only says that the initial value &quot;d&quot; is not mutable via magicByte.  It doesn&apos;t say anything about the const-ness of magicByte itself.

&gt; Source/WTF/wtf/ThreadMessage.cpp:75
&gt; +        installSignalHandler(Signal::Usr, [] (int, siginfo_t*, void*) {

There&apos;s a disconnect between specifying Signal::Usr here and then invoking thread.signal(SIGUSR2) below.  You should make the 2 consistent: either have installSignalHandler use the system SIGxxx values, or change Thread::signal() to take your Signal enums.  I suggest going with the system signal if possible.

&gt; Source/WTF/wtf/ThreadMessage.cpp:79
&gt; +                dataLogLn(&quot;We somehow got a message on a thread that didn&apos;t have a WTF::Thread initialized, we probably deadlocked, halp.&quot;);

/halp/help/.  Or are you being cute?

&gt; Source/WTF/wtf/ThreadMessage.cpp:95
&gt; +    bool result = thread.signal(SIGUSR2);

This is inconsistent with the signal id/type passed to installSignalHandler above.

&gt; Source/WTF/wtf/ThreadMessage.cpp:119
&gt; +        int flags = fcntl(fileDescriptors[Read], F_GETFL);
&gt; +        ASSERT(!(flags &amp; O_NONBLOCK));
&gt; +        fcntl(fileDescriptors[Read], F_SETFL, flags | O_NONBLOCK);
&gt; +
&gt; +        while (true) {
&gt; +            if (read(fileDescriptors[Read], buffer, 16) == -1) {
&gt; +                ASSERT(errno == EAGAIN);
&gt; +                break;
&gt; +            }
&gt; +        }
&gt; +
&gt; +        fcntl(fileDescriptors[Read], F_SETFL, flags);

Pardon my ignorance, but why is this needed?

Given the assertion that !(flags &amp; O_NONBLOCK), I take it that the read() at line 105 is blocking.  What happens if the target thread dies and our SIGUSR2 just went into the aether.  Will we be stuck waiting forever at the blocking read()?

&gt; Source/WTF/wtf/ThreadMessage.h:36
&gt; +void initializeMessages();

Why make this public?  Why not make it static and just call it in the call_once in sendMessage().  We wouldn&apos;t need to call it otherwise, right?

&gt; Source/WTF/wtf/threads/Signals.cpp:86
&gt; +        dataLogLn(&quot;We somehow got called for an unknown signal, halp.&quot;);

halp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299015</commentid>
    <comment_count>11</comment_count>
      <attachid>307531</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-19 22:29:25 -0700</bug_when>
    <thetext>Comment on attachment 307531
updated API

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

&gt; Source/WTF/wtf/LocklessBag.h:67
&gt; +            func(node-&gt;data);

Is func allowed to modify data? As written it currently is, and that&apos;s bad if multiple consumers are doing it at the same time.

&gt; Source/WTF/wtf/LocklessBag.h:77
&gt; +            func(std::forward&lt;T&gt;(node-&gt;data));

I think you want move here?

From this code it looks like consumers are not allowed to iterate concurrently with consumeAll. This should be documented.

&gt; Source/WTF/wtf/ThreadMessage.cpp:46
&gt; +        : message(WTFMove(m))

forward

&gt; Source/WTF/wtf/ThreadMessage.cpp:48
&gt; +        ran.store(false);

Can you just initialize it in the constructor initializer list?

&gt; Source/WTF/wtf/ThreadMessage.cpp:93
&gt; +    std::unique_ptr&lt;ThreadMessageData&gt; data = std::make_unique&lt;ThreadMessageData&gt;(WTFMove(message));

forward

&gt; Source/WTF/wtf/ThreadMessage.cpp:104
&gt; +        char buffer[16];

Make 16 a constexpr, and use it here + below.

&gt; Source/WTF/wtf/threads/Signals.cpp:67
&gt; +static LocklessBag&lt;SignalHandler&gt; handlers[static_cast&lt;size_t&gt;(Signal::NumberOfSignals)];

Technically you need to do:
static LocklessBag&lt;SignalHandler&gt; handlers[...blah...] = { ATOMIC_INIT(nullptr) };

ATOMIC_INIT is guaranteed to be able to perform static initialization. Atomics need to be zero-initialized, which doesn&apos;t mean putting the zero value in them because reasons.

&gt; Source/WTF/wtf/threads/Signals.cpp:86
&gt; +        dataLogLn(&quot;We somehow got called for an unknown signal, halp.&quot;);

Log `sig` here.

&gt; Source/WTF/wtf/threads/Signals.cpp:117
&gt; +    handlers[static_cast&lt;size_t&gt;(signal)].add(WTFMove(handler));

forward</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299157</commentid>
    <comment_count>12</comment_count>
      <attachid>307531</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-20 10:28:00 -0700</bug_when>
    <thetext>Comment on attachment 307531
updated API

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

&gt;&gt; Source/WTF/wtf/LocklessBag.h:56
&gt;&gt; +        }
&gt; 
&gt; Don&apos;t need { } because there&apos;s only 1 line in the body.
&gt; 
&gt; Also, nit: m_head is a WTF:Atomic but you&apos;re relying on its underlying value implementation being a std::atomic.  Why not use the Atomic::compareExchangeStrong() instead?

If I used Atomic::compareExchangeStrong the code would need to be:

Node* head;
Node* oldHead = newNode-&gt;next
while((head = m_head.compareExchangeStrong(oldHead, newNode) == oldHead) {
    newNode-&gt;next = head;
    oldHead = head;
}

or some other variant that has an extra local, which I think is harder to read.

&gt;&gt; Source/WTF/wtf/LocklessBag.h:63
&gt;&gt; +    void iterate(const Functor&amp; func)
&gt; 
&gt; At first I was wondering how this iterate() can be safe.  And then I see how you use it below.  Basically, it&apos;s safe because:
&gt; 1. there&apos;s no race with consumeAll() because it is only used by the consumer, and
&gt; 2. we don&apos;t worry about the race with add() because add() always adds to the front of the list.
&gt; 
&gt; It&apos;s be nice if we can at least document this detail so that no one modifies add() in such a way that breaks this in the future.  I can&apos;t think of a way to assert or guarantee it in code.

I added some more commentary at the top of the file and made the Consumer functions comment all caps.

&gt;&gt; Source/WTF/wtf/LocklessBag.h:67
&gt;&gt; +            func(node-&gt;data);
&gt; 
&gt; Is func allowed to modify data? As written it currently is, and that&apos;s bad if multiple consumers are doing it at the same time.

I made it harder for the func to think they can modify the data by forcing the func to take the data as a const.

There is only one consumer. That&apos;s the rule, if there is more than one consumer you&apos;re gonna have a bad time.

&gt;&gt; Source/WTF/wtf/LocklessBag.h:77
&gt;&gt; +            func(std::forward&lt;T&gt;(node-&gt;data));
&gt; 
&gt; I think you want move here?
&gt; 
&gt; From this code it looks like consumers are not allowed to iterate concurrently with consumeAll. This should be documented.

Ditto.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:46
&gt;&gt; +        : message(WTFMove(m))
&gt; 
&gt; forward

I think it should be move: ThreadMessage = Ref&lt;SharedTask&lt;void()&gt;&gt;. Isn&apos;t forward the same as move at that point.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:48
&gt;&gt; +        ran.store(false);
&gt; 
&gt; Can you just initialize it in the constructor initializer list?

I had to add a constructor to WTF::Atomic but yeah.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:58
&gt;&gt; +    Num = 2,
&gt; 
&gt; Can you spell out Num fully as NumberOfFileDescriptors?

Sure.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:62
&gt;&gt; +static const char* magicByte = &quot;d&quot;;
&gt; 
&gt; You can make this &quot;static const char* const magicByte&quot; to indicate that you don&apos;t intend to ever change the value of magicByte.  The &quot;const char*&quot; only says that the initial value &quot;d&quot; is not mutable via magicByte.  It doesn&apos;t say anything about the const-ness of magicByte itself.

Done.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:75
&gt;&gt; +        installSignalHandler(Signal::Usr, [] (int, siginfo_t*, void*) {
&gt; 
&gt; There&apos;s a disconnect between specifying Signal::Usr here and then invoking thread.signal(SIGUSR2) below.  You should make the 2 consistent: either have installSignalHandler use the system SIGxxx values, or change Thread::signal() to take your Signal enums.  I suggest going with the system signal if possible.

I would rather describe the exact set of signals we are going to use, which the enum does. I&apos;ll just export the toSystemSignal and fromSystemSignal functions.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:79
&gt;&gt; +                dataLogLn(&quot;We somehow got a message on a thread that didn&apos;t have a WTF::Thread initialized, we probably deadlocked, halp.&quot;);
&gt; 
&gt; /halp/help/.  Or are you being cute?

cute!

This shouldn&apos;t actually ever been seen

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:93
&gt;&gt; +    std::unique_ptr&lt;ThreadMessageData&gt; data = std::make_unique&lt;ThreadMessageData&gt;(WTFMove(message));
&gt; 
&gt; forward

ditto.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:104
&gt;&gt; +        char buffer[16];
&gt; 
&gt; Make 16 a constexpr, and use it here + below.

fixed.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:119
&gt;&gt; +        fcntl(fileDescriptors[Read], F_SETFL, flags);
&gt; 
&gt; Pardon my ignorance, but why is this needed?
&gt; 
&gt; Given the assertion that !(flags &amp; O_NONBLOCK), I take it that the read() at line 105 is blocking.  What happens if the target thread dies and our SIGUSR2 just went into the aether.  Will we be stuck waiting forever at the blocking read()?

I added this comment:

It&apos;s always safe to clear the pipe because only one thread can ever block trying to read from the pipe. Thus, each byte we clear from the pipe actually just corresponds to some task that has already finished. We actively want to ensure that the pipe does not overfill because otherwise our writers might spin trying to write.

Also we don&apos;t have to worry about the Thread dying because it should be strongly referenced by the sending thread.

&gt;&gt; Source/WTF/wtf/ThreadMessage.h:36
&gt;&gt; +void initializeMessages();
&gt; 
&gt; Why make this public?  Why not make it static and just call it in the call_once in sendMessage().  We wouldn&apos;t need to call it otherwise, right?

We want to be extra sure we get our pipe, I plan on calling this from initialized threading.

&gt;&gt; Source/WTF/wtf/threads/Signals.cpp:67
&gt;&gt; +static LocklessBag&lt;SignalHandler&gt; handlers[static_cast&lt;size_t&gt;(Signal::NumberOfSignals)];
&gt; 
&gt; Technically you need to do:
&gt; static LocklessBag&lt;SignalHandler&gt; handlers[...blah...] = { ATOMIC_INIT(nullptr) };
&gt; 
&gt; ATOMIC_INIT is guaranteed to be able to perform static initialization. Atomics need to be zero-initialized, which doesn&apos;t mean putting the zero value in them because reasons.

My LocklessBag has a trivial construction which sets the atomic to nullptr is it good enough to call that global constructor?

&gt;&gt;&gt; Source/WTF/wtf/threads/Signals.cpp:86
&gt;&gt;&gt; +        dataLogLn(&quot;We somehow got called for an unknown signal, halp.&quot;);
&gt;&gt; 
&gt;&gt; halp?
&gt; 
&gt; Log `sig` here.

Fixed.

&gt;&gt; Source/WTF/wtf/threads/Signals.cpp:117
&gt;&gt; +    handlers[static_cast&lt;size_t&gt;(signal)].add(WTFMove(handler));
&gt; 
&gt; forward

It&apos;s a WTF::Function, so that&apos;s the same as a move.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299162</commentid>
    <comment_count>13</comment_count>
      <attachid>307531</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-20 10:43:03 -0700</bug_when>
    <thetext>Comment on attachment 307531
updated API

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

&gt;&gt;&gt; Source/WTF/wtf/LocklessBag.h:56
&gt;&gt;&gt; +        }
&gt;&gt; 
&gt;&gt; Don&apos;t need { } because there&apos;s only 1 line in the body.
&gt;&gt; 
&gt;&gt; Also, nit: m_head is a WTF:Atomic but you&apos;re relying on its underlying value implementation being a std::atomic.  Why not use the Atomic::compareExchangeStrong() instead?
&gt; 
&gt; If I used Atomic::compareExchangeStrong the code would need to be:
&gt; 
&gt; Node* head;
&gt; Node* oldHead = newNode-&gt;next
&gt; while((head = m_head.compareExchangeStrong(oldHead, newNode) == oldHead) {
&gt;     newNode-&gt;next = head;
&gt;     oldHead = head;
&gt; }
&gt; 
&gt; or some other variant that has an extra local, which I think is harder to read.

I find the current version super hard to read.  I think the biggest problem with your algo is that you actually have two places where you set newNode-&gt;next, which makes it hard to see the workflow.

I would have written this as:

Node* newNode = newNode();
newNode-&gt;data = std::forward&lt;T&gt;(element);
for (;;) {
    Node* oldHead = m_head.load();
    newNode-&gt;next = oldHead;
    if (m_head.compareExchangeWeak(oldHead, newNode))
        break;
}

I think it&apos;s better to use weak CAS here because your algorithm is OK with spurious CAS failure.  You can probably write this loop a million other ways.  I like it better than your loop for two reasons:

- There is one place in the code where we load from m_head.  I think this makes it easier to reason about interleavings.
- There&apos;s no need to use the ugly std::atomic API.  I think that the &amp; behavior of the first argument to std::atomic::compare_exchange is an anti-pattern.

You can also accomplish this with Atomic&lt;&gt;::transaction:

m_head.transaction(
    [&amp;] (Node*&amp; head) {
        newNode-&gt;next = head;
        head = newNode;
    });

Though you&apos;d have to test if that works well on ARM (It should, but there&apos;s the risk that the store cancels the reservation).  If it works then this is clearly better.

In general, I think we should use WTF::Atomic&lt;&gt; API.  If we _did_ find that there was a use for the return-both-a-boolean-and-the-old-value behavior of std::atomic::compare_exchange, then we should add a forwarding function for it, like a new WTF::Atomic&lt;&gt;::compareExchange overload or a new version that returns a struct that has both a bool result and the old value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299178</commentid>
    <comment_count>14</comment_count>
      <attachid>307531</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-20 11:25:03 -0700</bug_when>
    <thetext>Comment on attachment 307531
updated API

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

&gt; Source/WTF/wtf/LocklessBag.h:48
&gt; +    PushResult add(T element) {

I think you want T&amp;&amp; here to get forwarding semantics.

&gt;&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:93
&gt;&gt;&gt; +    std::unique_ptr&lt;ThreadMessageData&gt; data = std::make_unique&lt;ThreadMessageData&gt;(WTFMove(message));
&gt;&gt; 
&gt;&gt; forward
&gt; 
&gt; ditto.

Why not just stack allocate this thing?

&gt; Source/WTF/wtf/ThreadMessage.cpp:109
&gt; +        ASSERT(!(flags &amp; O_NONBLOCK));

seems like this is worth a RELEASE_ASSERT since this algorithm would be broken otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299188</commentid>
    <comment_count>15</comment_count>
      <attachid>307531</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-04-20 11:35:54 -0700</bug_when>
    <thetext>Comment on attachment 307531
updated API

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

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:95
&gt;&gt; +    bool result = thread.signal(SIGUSR2);
&gt; 
&gt; This is inconsistent with the signal id/type passed to installSignalHandler above.

Nit: I think this should also use the nice enum for Signal::Usr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299473</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-20 20:06:36 -0700</bug_when>
    <thetext>Attachment 307531 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadMessage.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/LocklessBag.h:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/LocklessBag.h:56:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 4 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299514</commentid>
    <comment_count>17</comment_count>
      <attachid>307695</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-20 22:52:06 -0700</bug_when>
    <thetext>Created attachment 307695
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299619</commentid>
    <comment_count>18</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-04-21 07:45:54 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #17)
&gt; Created attachment 307695 [details]
&gt; Patch

&quot;patch does not apply to trunk of repository&quot;.  Please rebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299625</commentid>
    <comment_count>19</comment_count>
      <attachid>307731</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-21 08:11:48 -0700</bug_when>
    <thetext>Created attachment 307731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299646</commentid>
    <comment_count>20</comment_count>
      <attachid>307739</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-21 09:33:49 -0700</bug_when>
    <thetext>Created attachment 307739
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299652</commentid>
    <comment_count>21</comment_count>
      <attachid>307741</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-21 09:47:52 -0700</bug_when>
    <thetext>Created attachment 307741
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299660</commentid>
    <comment_count>22</comment_count>
      <attachid>307744</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-21 10:04:25 -0700</bug_when>
    <thetext>Created attachment 307744
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299667</commentid>
    <comment_count>23</comment_count>
      <attachid>307744</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-04-21 10:20:14 -0700</bug_when>
    <thetext>Comment on attachment 307744
Patch for landing

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

&gt; Source/WTF/wtf/LocklessBag.h:54
&gt; +        newNode-&gt;data = WTFMove(element);

You should use T&amp;&amp; above, and std::forward here.

&gt; Source/WTF/wtf/ThreadMessage.cpp:42
&gt; +const bool verbose = true;

expeliamo verbose

&gt; Source/WTF/wtf/ThreadMessage.cpp:85
&gt; +SUPPRESS_ASAN

Ca you comment on what ASAN dislikes?

&gt; Source/WTF/wtf/ThreadMessage.cpp:107
&gt; +            // other calls which set it at the same time.

I don&apos;t understand this comment. errno is thread-safe.

&gt; Source/WTF/wtf/ThreadMessage.cpp:144
&gt; +            // other calls which set it at the same time.

Ditto

&gt; Source/WTF/wtf/threads/Signals.cpp:103
&gt; +    handlers[static_cast&lt;size_t&gt;(signal)].add(WTFMove(handler));

std::forward

&gt; Source/WTF/wtf/threads/Signals.cpp:108
&gt; +        sigfillset(&amp;action.sa_mask);

RELEASE_ASSERT this returns 0.

&gt; Source/WTF/wtf/threads/Signals.cpp:110
&gt; +        sigaction(toSystemSignal(signal), &amp;action, &amp;oldActions[static_cast&lt;size_t&gt;(signal)]);

Ditto

&gt; Source/WTF/wtf/threads/Signals.h:38
&gt; +    Usr,

Why not call it USR2 since that&apos;s what we&apos;re using?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299695</commentid>
    <comment_count>24</comment_count>
      <attachid>307744</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-21 10:53:50 -0700</bug_when>
    <thetext>Comment on attachment 307744
Patch for landing

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

&gt;&gt; Source/WTF/wtf/LocklessBag.h:54
&gt;&gt; +        newNode-&gt;data = WTFMove(element);
&gt; 
&gt; You should use T&amp;&amp; above, and std::forward here.

Fixed.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:42
&gt;&gt; +const bool verbose = true;
&gt; 
&gt; expeliamo verbose

I just removed this.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:85
&gt;&gt; +SUPPRESS_ASAN
&gt; 
&gt; Ca you comment on what ASAN dislikes?

We are touching the stack of another thread (see 118), in the past ASAN didn&apos;t like this very much.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:107
&gt;&gt; +            // other calls which set it at the same time.
&gt; 
&gt; I don&apos;t understand this comment. errno is thread-safe.

TIL, fixed

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:144
&gt;&gt; +            // other calls which set it at the same time.
&gt; 
&gt; Ditto

ditto.

&gt;&gt; Source/WTF/wtf/threads/Signals.cpp:103
&gt;&gt; +    handlers[static_cast&lt;size_t&gt;(signal)].add(WTFMove(handler));
&gt; 
&gt; std::forward

We know the handlers type so we might as well move. I think move is cleaner.

&gt;&gt; Source/WTF/wtf/threads/Signals.cpp:108
&gt;&gt; +        sigfillset(&amp;action.sa_mask);
&gt; 
&gt; RELEASE_ASSERT this returns 0.

done.

&gt;&gt; Source/WTF/wtf/threads/Signals.cpp:110
&gt;&gt; +        sigaction(toSystemSignal(signal), &amp;action, &amp;oldActions[static_cast&lt;size_t&gt;(signal)]);
&gt; 
&gt; Ditto

done.

&gt;&gt; Source/WTF/wtf/threads/Signals.h:38
&gt;&gt; +    Usr,
&gt; 
&gt; Why not call it USR2 since that&apos;s what we&apos;re using?

We are probably only ever going to use one Usr signal, since we have the API I just added. We can always add the numbers later if we add the other.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299696</commentid>
    <comment_count>25</comment_count>
      <attachid>307751</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-21 10:54:16 -0700</bug_when>
    <thetext>Created attachment 307751
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299709</commentid>
    <comment_count>26</comment_count>
      <attachid>307755</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-21 11:20:39 -0700</bug_when>
    <thetext>Created attachment 307755
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299729</commentid>
    <comment_count>27</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-04-21 11:35:49 -0700</bug_when>
    <thetext>Committed r215620: &lt;http://trac.webkit.org/changeset/215620&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299829</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-21 13:29:23 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 171139</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299831</commentid>
    <comment_count>29</comment_count>
      <attachid>307755</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-21 13:31:27 -0700</bug_when>
    <thetext>Comment on attachment 307755
Patch for landing

Rejecting attachment 307755 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 307755, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
 succeeded at 1 with fuzz 3.
patching file Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
Hunk #1 FAILED at 174.
Hunk #2 FAILED at 1117.
Hunk #3 FAILED at 2179.
Hunk #4 FAILED at 2700.
4 out of 4 hunks FAILED -- saving rejects to file Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj.rej
patching file Tools/TestWebKitAPI/Tests/WTF/ThreadMessages.cpp

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: http://webkit-queues.webkit.org/results/3578179</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300175</commentid>
    <comment_count>30</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-22 02:27:31 -0700</bug_when>
    <thetext>SIGUSR2 signal is already used in Linux WebKit ports to suspend and resume threads.
I&apos;m investigating the way to adopt these changes in Linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300178</commentid>
    <comment_count>31</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-22 03:04:47 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #30)
&gt; SIGUSR2 signal is already used in Linux WebKit ports to suspend and resume
&gt; threads.
&gt; I&apos;m investigating the way to adopt these changes in Linux.

Some user-defined signal handlers require some context. For example, in Linux port SIGUSR2, signal handler is invoked after some setup.
So, as a result, just redirecting SIGUSR2 to the old default signal handler causes incorrect behaivor of the original signal handler. In this case, ThreadMessage&apos;s SIGUSR2 redirects SIGUSR2 handler, and suspend/resume handler is invoked without the setup, and causes SEGV.
So, I think redirecting Signal::Usr is not meaningful. It means that the original SIGUSR2 handler will be invoked with ThreadMessage&apos;s kill() call. And it will pose incorrect behavior.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307450</attachid>
            <date>2017-04-18 19:20:41 -0700</date>
            <delta_ts>2017-04-19 17:53:43 -0700</delta_ts>
            <desc>Proposed API</desc>
            <filename>bug-170976-20170418192040.patch</filename>
            <type>text/plain</type>
            <size>13395</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MTNlZjVmZjZhN2Y4ZjRjMjJlNTY1NTdlOWJiMmNiZmNhMGNjNzQyLi42OWQyOTY2ZGYzYjI0NWY4
NDdiYzkwZGYwY2QyYmM5Y2M3YmQ3NTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxNy0wNC0xOCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgc2lnbmFsaW5nIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIHRvb2xzL1NpZ25hbEhhbmRsZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6dG9TeXN0ZW1TaWduYWwpOgorICAgICAgICAoSlNDOjpmcm9tU3lzdGVt
U2lnbmFsKToKKyAgICAgICAgKEpTQzo6anNjU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChKU0M6
Omluc3RhbGxTaWduYWxIYW5kbGVyKToKKyAgICAgICAgKiB0b29scy9TaWduYWxIYW5kbGVyLmg6
IEFkZGVkLgorCiAyMDE3LTA0LTE4ICBPbGVrc2FuZHIgU2thY2hrb3YgIDxnc2thY2hrb3ZAZ21h
aWwuY29tPgogCiAgICAgICAgIFtFUzZdLiBJbXBsZW1lbnQgQW5uZXggQi4zLjMgZnVuY3Rpb24g
aG9pc3RpbmcgcnVsZXMgZm9yIGV2YWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
MjRlNmM0ZDMzMWQzN2QzM2IxMWRlNjRhZTM2YTgzMTJiNDRkOGI3NS4uNWYwN2Q1MWNkMjgzZDM5
NDVjMGJmZDg3ZDViMWNmNGIyYTRiYTVjMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTEzNDAsNiArMTM0MCw4IEBACiAJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNTMwRkIzMDIxRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwRkIzMDExRTdBMEI2
RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oICovOyB9OwogCQk1MzBGQjMwNDFFN0ExMTQ2MDAz
QzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3Qu
Y3BwICovOyB9OworCQk1MzExQkQ0RjFFQTZDRUI3MDA1MjUyODEgLyogU2lnbmFsSGFuZGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ0
RDFFQTZDRUI3MDA1MjUyODEgLyogU2lnbmFsSGFuZGxlci5jcHAgKi87IH07CisJCTUzMTFCRDUw
MUVBNkNFQjcwMDUyNTI4MSAvKiBTaWduYWxIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ0RTFFQTZDRUI3MDA1MjUyODEgLyogU2ln
bmFsSGFuZGxlci5oICovOyB9OwogCQk1MzEzNzRCRDFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBs
YW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTM3
NEJDMUQ1Q0U2NzYwMEFGN0EwQiAvKiBXYXNtUGxhbi5oICovOyB9OwogCQk1MzEzNzRCRjFENUNF
OTUwMDBBRjdBMEIgLyogV2FzbVBsYW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNw
cCAqLzsgfTsKIAkJNTMzQjE1REYxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzM0IxNURFMURDN0Y0NjMw
MDRENTAwQSAvKiBXYXNtT3BzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTM4NTUsNiArMzg1Nyw4IEBACiAJCTUyRjZDMzVDMUU3MUVCMDgwMDgx
RjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oOyBwYXRoID0ganMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTMwRkIzMDExRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTMwRkIzMDMxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtV29ya2xpc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzExQkQ0RDFFQTZDRUI3MDA1MjUyODEgLyogU2ln
bmFsSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaWdu
YWxIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMxMUJENEUxRUE2
Q0VCNzAwNTI1MjgxIC8qIFNpZ25hbEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2lnbmFsSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MzEzNzRCQzFENUNFNjc2MDBBRjdBMEIgLyogV2FzbVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2FzbVBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTMxMzc0QkUxRDVDRTk1MDAwQUY3QTBCIC8qIFdhc21QbGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21QbGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTMzQjE1REUxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNzA3MSw2ICs3MDc1LDggQEAKIAkJCQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMzMDYg
LyogUHJvZmlsZVRyZWVOb2RlLmggKi8sCiAJCQkJRkUzMDIyRDAxRTNENzM5NjAwQkFDNDkzIC8q
IFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwICovLAogCQkJCUZFMzAyMkQxMUUzRDczOTYwMEJBQzQ5
MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggKi8sCisJCQkJNTMxMUJENEQxRUE2Q0VCNzAwNTI1
MjgxIC8qIFNpZ25hbEhhbmRsZXIuY3BwICovLAorCQkJCTUzMTFCRDRFMUVBNkNFQjcwMDUyNTI4
MSAvKiBTaWduYWxIYW5kbGVyLmggKi8sCiAJCQkJRkUxQkQwMjkxRTcyMUIzNzAwMTM0QkM5IC8q
IFN0YWNrVHJhY2UuY3BwICovLAogCQkJCUZFMUJEMDJBMUU3MjFCMzcwMDEzNEJDOSAvKiBTdGFj
a1RyYWNlLmggKi8sCiAJCQkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJlZE1NYXBB
cnJheS5oICovLApAQCAtODkzMiw2ICs4OTM4LDcgQEAKIAkJCQkwRjFERDg0QTE4QTk0NUJFMDAy
NkYzRkEgLyogSlNDSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkIwRTE2RjVD
RDAwQjM0NDYwIC8qIEpTQ0pTVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NUEzMEYxMTM1
MDA3RTEwMENEQjQ5RSAvKiBKU0NKU1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTMxMUJENTAxRUE2Q0VCNzAwNTI1MjgxIC8qIFNpZ25hbEhhbmRsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLApAQCAtMTAwMDMsNiArMTAwMTAsNyBAQAogCQkJCTBGRUM4NTZG
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1
NzExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY2MTgzMjkxQzQ1QkYwNzAwNzI0NTBCIC8qIEFpckNDYWxsaW5nQ29udmVudGlvbi5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1MzExQkQ0RjFFQTZDRUI3MDA1MjUyODEgLyogU2lnbmFsSGFu
ZGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODU3MzFCREFDREM3MDA4MEZGNzQgLyog
QWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTc1MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjE4MzJCMUM0NUJG
MDcwMDcyNDUwQiAvKiBBaXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnbmFsSGFuZGxlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvU2lnbmFsSGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Y1ZjQ3OTc2
ZGNlOGFlZDgwYzk0ZjIwNmM3NjdiZmZkYjE0MGQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWduYWxIYW5kbGVyLmNwcApAQCAtMCwwICsxLDE0MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTaWduYWxIYW5kbGVyLmgiCisKKyNpbmNsdWRlIDxzaWdu
YWwuaD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Cisj
aW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIGlu
dCB0b1N5c3RlbVNpZ25hbChTaWduYWwgc2lnbmFsKQoreworICAgIHN3aXRjaCAoc2lnbmFsKSB7
CisgICAgY2FzZSBTaWduYWw6OlNlZ1Y6IHJldHVybiBTSUdTRUdWOworICAgIGNhc2UgU2lnbmFs
OjpCdXM6IHJldHVybiBTSUdCVVM7CisgICAgY2FzZSBTaWduYWw6OklsbDogcmV0dXJuIFNJR0lM
TDsKKyAgICBjYXNlIFNpZ25hbDo6VXNyMTogcmV0dXJuIFNJR1VTUjE7CisgICAgY2FzZSBTaWdu
YWw6OlRyYXA6IHJldHVybiBTSUdUUkFQOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUgU2lnbmFsIGZyb21T
eXN0ZW1TaWduYWwoaW50IHNpZ25hbCkKK3sKKyAgICBzd2l0Y2ggKHNpZ25hbCkgeworICAgIGNh
c2UgU0lHU0VHVjogcmV0dXJuIFNpZ25hbDo6U2VnVjsKKyAgICBjYXNlIFNJR0JVUzogcmV0dXJu
IFNpZ25hbDo6QnVzOworICAgIGNhc2UgU0lHSUxMOiByZXR1cm4gU2lnbmFsOjpJbGw7CisgICAg
Y2FzZSBTSUdVU1IxOiByZXR1cm4gU2lnbmFsOjpVc3IxOworICAgIGNhc2UgU0lHVFJBUDogcmV0
dXJuIFNpZ25hbDo6VHJhcDsKKyAgICBkZWZhdWx0OiByZXR1cm4gU2lnbmFsOjpVbmtub3duOwor
ICAgIH0KK30KKworc3RydWN0IFNpZ25hbEhhbmRsZXJMaXN0Tm9kZTsKKwordXNpbmcgTm9kZSA9
IEF0b21pYzxTaWduYWxIYW5kbGVyTGlzdE5vZGUqPjsKKworc3RydWN0IFNpZ25hbEhhbmRsZXJM
aXN0Tm9kZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU2ln
bmFsSGFuZGxlciBoYW5kbGVyOworICAgIE5vZGUgbmV4dDsKK307CisKK3N0YXRpYyBOb2RlIGhh
bmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKK3N0
YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWdu
YWw6Ok51bWJlck9mU2lnbmFscyldOworc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVP
bmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOwor
CitzdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywg
dm9pZCogbWNvbnRleHQpCit7CisgICAgU2lnbmFsIHNpZ25hbCA9IGZyb21TeXN0ZW1TaWduYWwo
c2lnKTsKKworICAgIGJvb2wgZGlkSGFuZGxlID0gZmFsc2U7CisgICAgYXV0byBjdXJyZW50Tm9k
ZSA9IGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0ubG9hZCgpOworICAgIHdo
aWxlIChjdXJyZW50Tm9kZSkgeworICAgICAgICBpZiAoY3VycmVudE5vZGUtPmhhbmRsZXIoc2ln
LCBpbmZvLCBtY29udGV4dCkgPT0gU2lnbmFsQWN0aW9uOjpIYW5kbGVkKQorICAgICAgICAgICAg
ZGlkSGFuZGxlID0gdHJ1ZTsKKworICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5u
ZXh0LmxvYWQoKTsKKyAgICB9CisKKyAgICAvLyBUT0RPOiBTaG91bGQgd2UgYWx3YXlzIGZvcndh
cmQgdG8gdGhlIG9sZCBoYW5kbGVyIG9yIG9ubHkgZm9yIHNvbWUgc2lnbmFscy4gSSdtIG5vdCBz
dXJlIHdoYXQgdGhlIHByb3RvY2FsbCBzaG91bGQgYmUgaGVyZS4KKyAgICBzdHJ1Y3Qgc2lnYWN0
aW9uJiBvbGRBY3Rpb24gPSBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV07
CisgICAgaWYgKG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24pCisgICAgICAgIG9sZEFjdGlvbi5zYV9z
aWdhY3Rpb24oc2lnLCBpbmZvLCBtY29udGV4dCk7CisKKyAgICBpZiAoZGlkSGFuZGxlIHx8IHNp
Z25hbCA8PSBTaWduYWw6Okxhc3RJZ25vcmVkU2lnbmFsKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBQcmUtZW1wdGl2ZWx5IHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBidXQgd2UgbWF5
IHJvbGwgaXQgYmFjayBiZWxvdy4KKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGN1cnJlbnRBY3Rpb247
CisgICAgc3RydWN0IHNpZ2FjdGlvbiBkZWZhdWx0QWN0aW9uOworICAgIGRlZmF1bHRBY3Rpb24u
c2FfaGFuZGxlciA9IFNJR19ERkw7CisgICAgc2lnZmlsbHNldCgmZGVmYXVsdEFjdGlvbi5zYV9t
YXNrKTsKKyAgICBkZWZhdWx0QWN0aW9uLnNhX2ZsYWdzID0gMDsKKyAgICBzaWdhY3Rpb24oc2ln
LCAmZGVmYXVsdEFjdGlvbiwgJmN1cnJlbnRBY3Rpb24pOworCisgICAgaWYgKGN1cnJlbnRBY3Rp
b24uc2Ffc2lnYWN0aW9uICE9IGpzY1NpZ25hbEhhbmRsZXIpIHsKKyAgICAgICAgLy8gVGhpcyBt
ZWFucyB0aGF0IHRoZXJlJ3MgYSBjbGllbnQgaGFuZGxlciBpbnN0YWxsZWQgYWZ0ZXIgdXMuIFRo
aXMgYWxzbyBtZWFucworICAgICAgICAvLyB0aGF0IHRoZSBjbGllbnQgaGFuZGxlciB0aGlua3Mg
aXQgd2FzIGFibGUgdG8gcmVjb3ZlciBmcm9tIHRoZSBzaWduYWwsIGFuZAorICAgICAgICAvLyBk
aWQgbm90IHVuaW5zdGFsbCBpdHNlbGYuIFdlIGNhbid0IGFyZ3VlIHdpdGggdGhpcyBiZWNhdXNl
IHRoZSBzaWduYWwgaXNuJ3QKKyAgICAgICAgLy8ga25vd24gdG8gYmUgb3VyIHNpZ25hbC4gSGVu
Y2UsIHJlc3RvcmUgdGhlIGNsaWVudCBoYW5kbGVyIGFuZCBrZWVwIGdvaW5nLgorICAgICAgICBz
aWdhY3Rpb24oc2lnLCAmY3VycmVudEFjdGlvbiwgbnVsbHB0cik7CisgICAgfQorfQorCit2b2lk
IGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCBzaWduYWwsIFNpZ25hbEhhbmRsZXIgaGFuZGxl
cikKK3sKKyAgICBhdXRvIG5ld05vZGUgPSBuZXcgU2lnbmFsSGFuZGxlckxpc3ROb2RlKCk7Cisg
ICAgbmV3Tm9kZS0+aGFuZGxlciA9IGhhbmRsZXI7CisgICAgbmV3Tm9kZS0+bmV4dC5zdG9yZShu
dWxscHRyKTsKKworICAgIGF1dG8gY3VycmVudE5vZGUgPSBoYW5kbGVyc1tzdGF0aWNfY2FzdDxz
aXplX3Q+KHNpZ25hbCldLmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhudWxscHRyLCBuZXdOb2RlKTsK
KyAgICB3aGlsZSAoY3VycmVudE5vZGUpIHsKKyAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5oYW5k
bGVyID09IGhhbmRsZXIpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBuZXdOb2RlOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9k
ZS0+bmV4dC5jb21wYXJlRXhjaGFuZ2VTdHJvbmcobnVsbHB0ciwgbmV3Tm9kZSk7CisgICAgfQor
CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXpl
X3Q+KHNpZ25hbCldLCBbJl0geworICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKyAg
ICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7CisgICAgICAgIHNp
Z2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0Ff
U0lHSU5GTzsKKyAgICAgICAgc2lnYWN0aW9uKHRvU3lzdGVtU2lnbmFsKHNpZ25hbCksICZhY3Rp
b24sICZvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0pOworICAgIH0pOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9TaWduYWxIYW5kbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2ln
bmFsSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4NmMyODRjYTU4MDBhODE1NTE0NDhkNjhhODk1YmE1
MWY4ZjE0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
U2lnbmFsSGFuZGxlci5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7CisK
K2VudW0gY2xhc3MgU2lnbmFsIHsKKyAgICBUcmFwLAorICAgIFVzcjEsCisgICAgTGFzdElnbm9y
ZWRTaWduYWwgPSBVc3IxLCAvLyBUaGlzIGlzIHRoZSBsYXN0IHNpZ25hbCB3ZSB3aWxsIG5vdCBm
b3J3YXJkIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIuCisgICAgSWxsLAorICAgIFNlZ1YsCisgICAg
QnVzLAorICAgIE51bWJlck9mU2lnbmFscywKKyAgICBVbmtub3duID0gTnVtYmVyT2ZTaWduYWxz
Cit9OworCitlbnVtIGNsYXNzIFNpZ25hbEFjdGlvbiB7CisgICAgSGFuZGxlZCwKKyAgICBOb3RI
YW5kbGVkCit9OworCit0eXBlZGVmIFNpZ25hbEFjdGlvbiAoKlNpZ25hbEhhbmRsZXIpKGludCwg
c2lnaW5mb190Kiwgdm9pZCopOworCisvLyBDYWxsIHRoaXMgbWV0aG9kIHdoZW5ldmVyIHlvdSB3
YW50IHRvIGluc3RhbGwgYSBzaWduYWwgaGFuZGxlci4gSXQncyBvayB0byBjYWxsIHRoaXMgZnVu
Y3Rpb24gbGF6aWx5LgorLy8gTm90ZTogeW91ciBzaWduYWwgaGFuZGxlciB3aWxsIGJlIGNhbGxl
ZCBldmVyeSB0aW1lIHRoZSBKU0MgaGFuZGxlciBmb3IgdGhlIGRlc2lyZWQgc2lnbmFsIGlzIGNh
bGxlZC4KKy8vIFRodXMgaXQgaXMgeW91ciByZXNwb25pYmlsaXR5IHRvIGJlIGFibGUgdG8gZGV0
ZWN0IHRoZSBzaWduYWwgZmlyZWQgd2FzIHlvdXJzIG9yIHNvbWVvbmUgZWxzZXMuCisvLyBUaGlz
IGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBhIG9uZSB3YXkgc3RyZWV0Lgordm9pZCBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWwsIFNpZ25hbEhhbmRsZXIpOworCit9IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307530</attachid>
            <date>2017-04-19 17:53:44 -0700</date>
            <delta_ts>2017-04-19 17:54:11 -0700</delta_ts>
            <desc>updated API</desc>
            <filename>bug-170976-20170419175343.patch</filename>
            <type>text/plain</type>
            <size>27280</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDViMDI2N2M1ZjQ3MTg5Y2IxOTc0NmFi
Y2QzMDIzYTZiNjZhNzdiYTcuLmRkYmNmYmQyYmU1MDk3MTU2ODY0YmIwZGFiMDNkNzRmZGI0NTFm
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTctMDQtMTkgIEtlaXRoIE1pbGxlciAgPGtlaXRo
X21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHNpZ25hbGluZyBBUEkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDk3NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0xvY2tsZXNzQmFnLmg6IEFkZGVkLgorICAg
ICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6YWRkKToKKyAgICAgICAgKFdURjo6TG9ja2xlc3NCYWc6
Oml0ZXJhdGUpOgorICAgICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6Y29uc3VtZUFsbCk6CisgICAg
ICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VGhyZWFk
TWVzc2FnZURhdGE6OlRocmVhZE1lc3NhZ2VEYXRhKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6
ZU1lc3NhZ2VzKToKKyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2UpOgorICAgICAgICAqIHd0Zi9U
aHJlYWRNZXNzYWdlLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAg
ICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1
cnJlbnRNYXlCZU51bGwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnQpOgorICAgICAg
ICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6dG9TeXN0
ZW1TaWduYWwpOgorICAgICAgICAoV1RGOjpmcm9tU3lzdGVtU2lnbmFsKToKKyAgICAgICAgKFdU
Rjo6anNjU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChXVEY6Omluc3RhbGxTaWduYWxIYW5kbGVy
KToKKyAgICAgICAgKiB3dGYvdGhyZWFkcy9TaWduYWxzLmg6IEFkZGVkLgorCiAyMDE3LTA0LTE4
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R0xJQl0gRGVmaW5lIHByaW9yaXRpZXMgYWxzbyBmb3IgYXN5bmMgbmV0d29yayBJTyB0YXNrcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzM0ZDE0OGI3Nzg5
MWYzZGMxZjMwNzM4MjI4NjBmNWM4MGVhZGY2ZC4uNDRhZjBkMzE2MTZlNDc4MGU5OTJiYjEyMWE3
NWMzYjQ2M2NlNDI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xNDksNiArMTQ5LDExIEBACiAJCTUxNUY3OTUwMUNGQzlGNEEwMENDRUQ5MyAvKiBDcm9z
c1RocmVhZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNUY3OTREMUNGQzlGNEEwMENDRUQ5MyAvKiBDcm9zc1RocmVhZFRhc2suaCAqLzsgfTsK
IAkJNTE1Rjc5NTYxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUY3OTU1MUNGRDNBNjkw
MENDRUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggKi87IH07CiAJCTUyMTgzMDEyQzk5RTQ3NkE4
NEVFQkVBOCAvKiBTeW1ib2xJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY3MkJCREIxMDdGQTQyNDg4NjE3OEI5RSAvKiBTeW1ib2xJbXBsLmNw
cCAqLzsgfTsKKwkJNTMxMUJENTMxRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENTExRUE3MUNB
RDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwICovOyB9OworCQk1MzExQkQ1NjFFQTdFMTVBMDA1MjUy
ODEgLyogTG9ja2xlc3NCYWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMTFCRDU1MUVBN0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVzc0JhZy5oICovOyB9
OworCQk1MzExQkQ1ODFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENTcxRUE3RTFBMTAwNTI1Mjgx
IC8qIFNpZ25hbHMuaCAqLzsgfTsKKwkJNTMxMUJENUExRUE4MUE5NjAwNTI1MjgxIC8qIFRocmVh
ZE1lc3NhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzMTFCRDU5MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggKi87IH07CisJCTUz
MTFCRDVDMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDVCMUVBODIyRjkwMDUyNTI4
MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLzsgfTsKIAkJNTM5RUIwNjMxRDU1Mjg0MjAwQzgyRUY3
IC8qIExFQkRlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi87IH07CiAJ
CTUzRUMyNTNFMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VDMjUzQzFFOTVBRDMwMDAwODMx
QjkgLyogUHJpb3JpdHlRdWV1ZS5oICovOyB9OwogCQk1NTMwNzFDQTFDNDA0MjcyMDAzODQ4OTgg
LyogVGlueUxSVUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi87IH07
CkBAIC01NDcsNiArNTUyLDExIEBACiAJCTUxNUY3OTRDMUNGQzlGNEEwMENDRUQ5MyAvKiBDcm9z
c1RocmVhZENvcGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1Ro
cmVhZENvcGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTVGNzk0RDFDRkM5
RjRBMDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENyb3NzVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTVGNzk1NTFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFF1ZXVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUzMTFCRDUxMUVBNzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpZ25hbHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzExQkQ1NTFFQTdFMTVBMDA1MjUyODEgLyogTG9j
a2xlc3NCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9ja2xlc3NCYWcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMxMUJENTcxRUE3RTFBMTAwNTI1Mjgx
IC8qIFNpZ25hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnbmFscy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzExQkQ1OTFFQTgxQTk2MDA1MjUyODEg
LyogVGhyZWFkTWVzc2FnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJl
YWRNZXNzYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMTFCRDVCMUVBODIy
RjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzlFQjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMRUJEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzRUMyNTNDMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByaW9yaXR5UXVldWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUzMDcxQzkxQzQwNDI3MjAwMzg0ODk4IC8qIFRpbnlMUlVD
YWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55TFJVQ2FjaGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNjIsNiArMTA3Miw3IEBACiAJCQkJMEY2
MEYzMkQxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCAqLywKIAkJCQkw
RjYwRjMyRTFERkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uaCAqLywKIAkJCQlB
OEE0NzJDMzE1MUE4MjVBMDA0MTIzRkYgLyogTG9ja2VyLmggKi8sCisJCQkJNTMxMUJENTUxRUE3
RTE1QTAwNTI1MjgxIC8qIExvY2tsZXNzQmFnLmggKi8sCiAJCQkJNTEzRTE3MEExQ0Q3RDVCRjAw
RTM2NTBCIC8qIExvZ2dpbmdBY2N1bXVsYXRvci5oICovLAogCQkJCTBGMzBCQThDMUU3ODcwOEUw
MDJDQTg0NyAvKiBMb2dnaW5nSGFzaElELmggKi8sCiAJCQkJMEYzMEJBOEQxRTc4NzA4RTAwMkNB
ODQ3IC8qIExvZ2dpbmdIYXNoTWFwLmggKi8sCkBAIC0xMTg2LDYgKzExOTcsOCBAQAogCQkJCUUz
MjAwQUI1MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3BwICovLAogCQkJCUUzMjAw
QUI2MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuaCAqLywKIAkJCQlBOEE0NzMzMDE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwICovLAorCQkJCTUzMTFC
RDVCMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLywKKwkJCQk1MzExQkQ1
OTFFQTgxQTk2MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5oICovLAogCQkJCUE4QTQ3MzMyMTUx
QTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwICovLAogCQkJCUE4QTQ3MzMzMTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmcuaCAqLywKIAkJCQlBOEE0NzMzNTE1MUE4MjVCMDA0MTIzRkYg
LyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oICovLApAQCAtMTMxMyw2ICsxMzI2LDggQEAKIAkJCWNo
aWxkcmVuID0gKAogCQkJCUE4QTQ3MzNBMTUxQTgyNUIwMDQxMjNGRiAvKiBCaW5hcnlTZW1hcGhv
cmUuY3BwICovLAogCQkJCUE4QTQ3MzNCMTUxQTgyNUIwMDQxMjNGRiAvKiBCaW5hcnlTZW1hcGhv
cmUuaCAqLywKKwkJCQk1MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgKi8s
CisJCQkJNTMxMUJENTcxRUE3RTFBMTAwNTI1MjgxIC8qIFNpZ25hbHMuaCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gdGhyZWFkczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xNDU4LDYg
KzE0NzMsNyBAQAogCQkJCURFNUEwOUZDMUJBMzY5OTIwMDNENDQyNCAvKiBDb21tb25DcnlwdG9T
UEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjkxMTcyRTAwRkMwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTgxNTFBODI1QjAwNDEy
M0ZGIC8qIENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzExQkQ1NjFFQTdFMTVBMDA1
MjUyODEgLyogTG9ja2xlc3NCYWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREI2OThFMUI3QzY0
M0EwMDBDMTA3OCAvKiBDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDhDMTUx
QTgyNjQwMDQxMjNGRiAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjlDMTcy
RjI1OTYwMDdEQkRBNSAvKiBDb252ZXJzaW9uTW9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTIz
LDYgKzE1MzksNyBAQAogCQkJCUE3MERBMDg0MTc5OUYwNEQwMDUyOUE5QiAvKiBJbnNlcnRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTI2MTQ3QjBBMTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2Vy
VG9TdHJpbmdDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0REN0ZGODE4NkQyOTFF
MDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMxMUJE
NTgxRUE3RTFBMTAwNTI1MjgxIC8qIFNpZ25hbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDREQ3
RkZBMTg2RDJBNTQwMDc0MzNDRCAvKiBJdGVyYXRvclJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5M0FDOTFBODE4OTQyRkM0MDAyNDQ5MzkgLyogTENoYXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUzOUVCMDYzMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTE2MjksNiArMTY0Niw3IEBACiAJCQkJQTc0ODc0NTQxN0EwQkRBRTAwRkEwNENCIC8qIFN0
cmluZ0hhc2hEdW1wQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDExNTFBODI1
QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQyMTUx
QTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdPcGVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUz
MTFCRDVBMUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkREQkZBODE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBNkVCMUUwMTg3RDBCRDMwMDMwMTI2RiAvKiBTdHJpbmdWaWV3Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNCODE1MUE4MjVCMDA0MTIzRkYgLyogc3RydG9kLmgg
aW4gSGVhZGVycyAqLywKQEAgLTE4NTMsOCArMTg3MSwxMCBAQAogCQkJCUZFREFDRDNEMTYzMEY4
M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDND
MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE1QkExNUZCMTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdDRi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MzExQkQ1QzFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOEE0NzQ0MDE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVGQzE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nSW1w
bENGLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMTFCRDUzMUVBNzFDQUQwMDUyNTI4MSAvKiBT
aWduYWxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUY1MTgyNDM0ODAwMEE4MkU2OSAv
KiBTdHJpbmdJbXBsTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RjMxODI0MzNBOTAw
QTgyRTY5IC8qIFN0cmluZ01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGRERCRkE3MTY2NkRG
QTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL0xvY2tsZXNzQmFnLmggYi9Tb3VyY2UvV1RGL3d0Zi9Mb2Nr
bGVzc0JhZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1OWM1YTJlNDA1NjM4NjQ0MjIyODQzMWY4NDNjYWE5M2M3
NzQwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Mb2NrbGVzc0JhZy5oCkBA
IC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkF0b21pY3MuaCIKKworbmFtZXNwYWNlIFdU
RiB7CisKKy8vIFRoaXMgYSBzaW1wbGUgc2luZ2xlIGNvbnN1bWVyLCBtdWx0aXBsZSBwcm9kdWNl
ciBCYWcgZGF0YSBzdHJ1Y3R1cmUuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBMb2Nr
bGVzc0JhZyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9ja2xlc3NCYWcpOworCisgICAg
c3RydWN0IE5vZGUgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJs
aWM6CisgICAgICAgIFQgZGF0YTsKKyAgICAgICAgTm9kZSogbmV4dDsKKyAgICB9OworcHVibGlj
OgorICAgIExvY2tsZXNzQmFnKCkgPSBkZWZhdWx0OworCisgICAgZW51bSBQdXNoUmVzdWx0IHsg
RW1wdHksIE5vbkVtcHR5IH07CisgICAgUHVzaFJlc3VsdCBhZGQoVCBlbGVtZW50KSB7CisgICAg
ICAgIE5vZGUqIG5ld05vZGUgPSBuZXcgTm9kZSgpOworICAgICAgICBuZXdOb2RlLT5kYXRhID0g
c3RkOjpmb3J3YXJkPFQ+KGVsZW1lbnQpOworICAgICAgICBuZXdOb2RlLT5uZXh0ID0gbV9oZWFk
LmxvYWQoKTsKKworICAgICAgICBOb2RlKiBvbGRIZWFkID0gbmV3Tm9kZS0+bmV4dDsKKyAgICAg
ICAgd2hpbGUgKCFtX2hlYWQudmFsdWUuY29tcGFyZV9leGNoYW5nZV9zdHJvbmcob2xkSGVhZCwg
bmV3Tm9kZSkpIHsKKyAgICAgICAgICAgIG5ld05vZGUtPm5leHQgPSBvbGRIZWFkOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIG9sZEhlYWQgPT0gbnVsbHB0ciA/IEVtcHR5IDogTm9uRW1w
dHk7CisgICAgfQorCisgICAgLy8gQ29uc3VtZXIgZnVuY3Rpb25zOiBFdmVyeXRoaW5nIGJlbG93
IGhlcmUgaXMgb25seSBzYWZlIHRvIGNhbGwgZnJvbSB0aGUgY29uc3VtZXIgdGhyZWFkLgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBpdGVyYXRlKGNvbnN0IEZ1bmN0
b3ImIGZ1bmMpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9oZWFkLmxvYWQoKTsKKyAg
ICAgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgICAgIGZ1bmMobm9kZS0+ZGF0YSk7CisgICAg
ICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBjb25zdW1lQWxsKGNvbnN0IEZ1bmN0b3Im
IGZ1bmMpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9oZWFkLmV4Y2hhbmdlKG51bGxw
dHIpOworICAgICAgICB3aGlsZSAobm9kZSkgeworICAgICAgICAgICAgZnVuYyhzdGQ6OmZvcndh
cmQ8VD4obm9kZS0+ZGF0YSkpOworICAgICAgICAgICAgTm9kZSogb2xkTm9kZSA9IG5vZGU7Cisg
ICAgICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKKyAgICAgICAgICAgIGRlbGV0ZSBvbGROb2Rl
OworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIEF0b21pYzxOb2RlKj4gbV9oZWFk
OworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVGhyZWFkTWVzc2FnZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kODYzMTk1NDVmZTQ4MGZiYWM4NmQ4MzBlZWU4YWIyYjA0YjVjYjUxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKQEAgLTAsMCAr
MSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkTWVzc2FnZS5oIgorCisjaWYgVVNF
KFBUSFJFQURTKQorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKwor
I2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRl
IDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorCisKK25h
bWVzcGFjZSBXVEYgeworCitjbGFzcyBUaHJlYWRNZXNzYWdlRGF0YSB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgVGhyZWFkTWVzc2FnZURhdGEoVGhyZWFkTWVz
c2FnZSYmIG0pCisgICAgICAgIDogbWVzc2FnZShXVEZNb3ZlKG0pKQorICAgIHsKKyAgICAgICAg
cmFuLnN0b3JlKGZhbHNlKTsKKyAgICB9CisKKyAgICBBdG9taWM8Ym9vbD4gcmFuOworICAgIFRo
cmVhZE1lc3NhZ2UgbWVzc2FnZTsKK307CisKK2VudW0gRmlsZURlc2NyaXB0b3IgeworICAgIFJl
YWQgPSAwLAorICAgIFdyaXRlID0gMSwKKyAgICBOdW0gPSAyLAorfTsKKworc3RhdGljIGludCBm
aWxlRGVzY3JpcHRvcnNbTnVtXTsKK3N0YXRpYyBjb25zdCBjaGFyKiBtYWdpY0J5dGUgPSAiZCI7
CisKKwordm9pZCBpbml0aWFsaXplTWVzc2FnZXMoKQoreworICAgIGludCByZXN1bHQgPSBwaXBl
KGZpbGVEZXNjcmlwdG9ycyk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7Cit9CisKK3Zv
aWQgc2VuZE1lc3NhZ2UoVGhyZWFkJiB0aHJlYWQsIFRocmVhZE1lc3NhZ2UgbWVzc2FnZSkKK3sK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNl
LCBbXSB7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VXNyLCBbXSAoaW50
LCBzaWdpbmZvX3QqLCB2b2lkKikgeworICAgICAgICAgICAgVGhyZWFkKiB0aHJlYWQgPSBUaHJl
YWQ6OmN1cnJlbnRNYXlCZU51bGwoKTsKKworICAgICAgICAgICAgaWYgKCF0aHJlYWQpIHsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oIldlIHNvbWVob3cgZ290IGEgbWVzc2FnZSBvbiBhIHRo
cmVhZCB0aGF0IGRpZG4ndCBoYXZlIGEgV1RGOjpUaHJlYWQgaW5pdGlhbGl6ZWQsIHdlIHByb2Jh
Ymx5IGRlYWRsb2NrZWQsIGhhbHAuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFj
dGlvbjo6Tm90SGFuZGxlZDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhyZWFkLT50
aHJlYWRNZXNzYWdlcygpLmNvbnN1bWVBbGwoW10gKFRocmVhZE1lc3NhZ2VEYXRhKiBkYXRhKSB7
CisgICAgICAgICAgICAgICAgZGF0YS0+bWVzc2FnZS0+cnVuKCk7CisgICAgICAgICAgICAgICAg
ZGF0YS0+cmFuLnN0b3JlKHRydWUpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHdyaXRlKGZpbGVEZXNjcmlwdG9yc1tXcml0ZV0sIG1hZ2ljQnl0ZSwgMSk7Cisg
ICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOworICAgICAgICB9KTsKKyAg
ICB9KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRNZXNzYWdlRGF0YT4gZGF0YSA9IHN0
ZDo6bWFrZV91bmlxdWU8VGhyZWFkTWVzc2FnZURhdGE+KFdURk1vdmUobWVzc2FnZSkpOworICAg
IHRocmVhZC50aHJlYWRNZXNzYWdlcygpLmFkZChkYXRhLmdldCgpKTsKKyAgICBib29sIHJlc3Vs
dCA9IHRocmVhZC5zaWduYWwoU0lHVVNSMik7CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsK
KworICAgIHN0YXRpYyBTdGF0aWNMb2NrIHJlYWRMb2NrOworICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHJlYWRMb2NrKTsKKyAgICAgICAgaWYgKGRhdGEtPnJh
bi5sb2FkKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2hhciBidWZmZXJbMTZd
OworICAgICAgICByZWFkKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgYnVmZmVyLCAxKTsKKyAgICAg
ICAgQVNTRVJUKGJ1ZmZlclswXSA9PSBtYWdpY0J5dGVbMF0pOworCisgICAgICAgIGludCBmbGFn
cyA9IGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgRl9HRVRGTCk7CisgICAgICAgIEFTU0VS
VCghKGZsYWdzICYgT19OT05CTE9DSykpOworICAgICAgICBmY250bChmaWxlRGVzY3JpcHRvcnNb
UmVhZF0sIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSyk7CisKKyAgICAgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgICAgIGlmIChyZWFkKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgYnVmZmVy
LCAxNikgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZXJybm8gPT0gRUFHQUlOKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgRl9TRVRGTCwgZmxhZ3MpOworICAgIH0K
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmggYi9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRNZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjk2OGM5NzUwMDBiNjYyOTM2NTczZjc2YWJmYTEx
NDcxMDEzMjE1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3Nh
Z2UuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVk
ZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBV
U0UoUFRIUkVBRFMpCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIGluaXRpYWxpemVNZXNzYWdl
cygpOworCitjbGFzcyBUaHJlYWRNZXNzYWdlRGF0YTsKK3VzaW5nIFRocmVhZE1lc3NhZ2UgPSBS
ZWY8U2hhcmVkVGFzazx2b2lkKCk+PjsKKwordm9pZCBzZW5kTWVzc2FnZShUaHJlYWQmLCBUaHJl
YWRNZXNzYWdlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoUFRIUkVB
RFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaCBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZy5oCmluZGV4IGJkMWY4ZjMzZTJhYWI1YjVjZGZiNGNjYjQ2OWI4NTg1ZTlh
MjQ2NGUuLjBkOWNlMzBmNTllZTNjZjIzYmIzNjQyYWNjNjZiMmFkNmVjMTQ2ZWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZy5oCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNs
dWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8
d3RmL0xvY2tsZXNzQmFnLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CkBAIC01Niw2ICs1Nyw4IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitjbGFzcyBUaHJlYWRNZXNz
YWdlRGF0YTsKKwogdXNpbmcgVGhyZWFkSWRlbnRpZmllciA9IHVpbnQzMl90OwogdHlwZWRlZiB2
b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKIApAQCAtNzUsNiArNzgsNyBA
QCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIFRocmVhZCBvYmplY3QuCiAgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBUaHJlYWQmIGN1cnJlbnQoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFRocmVhZCogY3VycmVudE1heUJlTnVsbCgpOwogCiAgICAgLy8gUmV0dXJucyBU
aHJlYWRJZGVudGlmaWVyIGRpcmVjdGx5LiBJdCBpcyB1c2VmdWwgaWYgdGhlIHVzZXIgb25seSBj
YXJlcyBhYm91dCBpZGVudGl0eQogICAgIC8vIG9mIHRocmVhZHMuIEF0IHRoYXQgdGltZSwgdXNl
cnMgc2hvdWxkIGtub3cgdGhhdCBob2xkaW5nIHRoaXMgVGhyZWFkSWRlbnRpZmllciBkb2VzIG5v
dCBlbnN1cmUKQEAgLTEzMiw2ICsxMzYsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBp
bml0aWFsaXplUGxhdGZvcm1UaHJlYWRpbmcoKTsKIAorICAgIExvY2tsZXNzQmFnPFRocmVhZE1l
c3NhZ2VEYXRhKj4mIHRocmVhZE1lc3NhZ2VzKCk7CisKIHByaXZhdGU6CiAgICAgVGhyZWFkKCk7
CiAKQEAgLTE3Nyw2ICsxODMsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kaWRFeGl0IHsgZmFs
c2UgfTsKICNpZiBVU0UoUFRIUkVBRFMpCiAgICAgcHRocmVhZF90IG1faGFuZGxlOworCisgICAg
TG9ja2xlc3NCYWc8VGhyZWFkTWVzc2FnZURhdGEqPiBtX3RocmVhZE1lc3NhZ2VzOwogI2lmIE9T
KERBUldJTikKICAgICBtYWNoX3BvcnRfdCBtX3BsYXRmb3JtVGhyZWFkOwogI2Vsc2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAppbmRleCAzZWU5YTVmNTQ1ZWFmMTI4OTkwZTVhOWEz
YzAxNTQ4ODUyNWJmZmQ3Li5jNDEzYjFhZTY0ZGM0NDUyNjc5ZjJkMGJhYTE5MTQwN2Y1MjFjNjY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0yNjQsMTEgKzI2NCwxOCBA
QCB2b2lkIFRocmVhZDo6ZGV0YWNoKCkKICAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKIH0K
IAotVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQorVGhyZWFkKiBUaHJlYWQ6OmN1cnJlbnRNYXlC
ZU51bGwoKQogewogICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVu
dCgpOwogICAgIGlmIChkYXRhKQotICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CisgICAg
ICAgIHJldHVybiAmZGF0YS0+dGhyZWFkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1Ro
cmVhZCYgVGhyZWFkOjpjdXJyZW50KCkKK3sKKyAgICBpZiAoVGhyZWFkKiBjdXJyZW50ID0gY3Vy
cmVudE1heUJlTnVsbCgpKQorICAgICAgICByZXR1cm4gKmN1cnJlbnQ7CiAKICAgICAvLyBOb3Qg
YSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVk
IHlldC4KICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhyZWFkKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTAyOTg1MWNmMjkwMWFm
MDU2MjVhNmViOWVmMGQzMjVkNzQ0ZmFlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3RocmVhZHMvU2lnbmFscy5jcHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU2lnbmFscy5oIgorCisjaWYgVVNFKFBUSFJFQURTKQorCisjaW5jbHVkZSA8c2lnbmFs
Lmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvTG9ja2xlc3NCYWcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSBpbnQgdG9T
eXN0ZW1TaWduYWwoU2lnbmFsIHNpZ25hbCkKK3sKKyAgICBzd2l0Y2ggKHNpZ25hbCkgeworICAg
IGNhc2UgU2lnbmFsOjpTZWdWOiByZXR1cm4gU0lHU0VHVjsKKyAgICBjYXNlIFNpZ25hbDo6QnVz
OiByZXR1cm4gU0lHQlVTOworICAgIGNhc2UgU2lnbmFsOjpJbGw6IHJldHVybiBTSUdJTEw7Cisg
ICAgY2FzZSBTaWduYWw6OlVzcjogcmV0dXJuIFNJR1VTUjI7CisgICAgY2FzZSBTaWduYWw6OlRy
YXA6IHJldHVybiBTSUdUUkFQOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUgU2lnbmFsIGZyb21TeXN0ZW1T
aWduYWwoaW50IHNpZ25hbCkKK3sKKyAgICBzd2l0Y2ggKHNpZ25hbCkgeworICAgIGNhc2UgU0lH
U0VHVjogcmV0dXJuIFNpZ25hbDo6U2VnVjsKKyAgICBjYXNlIFNJR0JVUzogcmV0dXJuIFNpZ25h
bDo6QnVzOworICAgIGNhc2UgU0lHSUxMOiByZXR1cm4gU2lnbmFsOjpJbGw7CisgICAgY2FzZSBT
SUdVU1IyOiByZXR1cm4gU2lnbmFsOjpVc3I7CisgICAgY2FzZSBTSUdUUkFQOiByZXR1cm4gU2ln
bmFsOjpUcmFwOworICAgIGRlZmF1bHQ6IHJldHVybiBTaWduYWw6OlVua25vd247CisgICAgfQor
fQorCitzdGF0aWMgTG9ja2xlc3NCYWc8U2lnbmFsSGFuZGxlcj4gaGFuZGxlcnNbc3RhdGljX2Nh
c3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOworc3RhdGljIHN0cnVjdCBzaWdh
Y3Rpb24gb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWdu
YWxzKV07CitzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNf
Y2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07CisKK3N0YXRpYyB2b2lkIGpz
Y1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4dCkK
K3sKKyAgICBTaWduYWwgc2lnbmFsID0gZnJvbVN5c3RlbVNpZ25hbChzaWcpOworCisgICAgYXV0
byByZXN0b3JlRGVmYXVsdCA9IFsmXSB7CisgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gZGVmYXVs
dEFjdGlvbjsKKyAgICAgICAgZGVmYXVsdEFjdGlvbi5zYV9oYW5kbGVyID0gU0lHX0RGTDsKKyAg
ICAgICAgc2lnZmlsbHNldCgmZGVmYXVsdEFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgZGVmYXVs
dEFjdGlvbi5zYV9mbGFncyA9IDA7CisgICAgICAgIHNpZ2FjdGlvbihzaWcsICZkZWZhdWx0QWN0
aW9uLCBudWxscHRyKTsKKyAgICB9OworCisgICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsKKyAg
ICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYnV0IHdlIG1pZ2h0IGFzIHdlbGwgYmUgY2FyZWZ1
bC4KKyAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6VW5rbm93bikgeworICAgICAgICBkYXRhTG9n
TG4oIldlIHNvbWVob3cgZ290IGNhbGxlZCBmb3IgYW4gdW5rbm93biBzaWduYWwsIGhhbHAuIik7
CisgICAgICAgIHJlc3RvcmVEZWZhdWx0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLml0ZXJhdGUoWyZdIChjb25z
dCBTaWduYWxIYW5kbGVyJiBoYW5kbGVyKSB7CisgICAgICAgIGlmIChoYW5kbGVyKHNpZywgaW5m
bywgbWNvbnRleHQpID09IFNpZ25hbEFjdGlvbjo6SGFuZGxlZCkKKyAgICAgICAgICAgIGRpZEhh
bmRsZSA9IHRydWU7CisgICAgfSk7CisKKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uJiBvbGRBY3Rpb24g
PSBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV07CisgICAgaWYgKHNpZ25h
bCA9PSBTaWduYWw6OlVzcikgeworICAgICAgICBpZiAob2xkQWN0aW9uLnNhX3NpZ2FjdGlvbikK
KyAgICAgICAgICAgIG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZvLCBtY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWRpZEhhbmRsZSkgeworICAgICAg
ICBpZiAob2xkQWN0aW9uLnNhX3NpZ2FjdGlvbikgeworICAgICAgICAgICAgb2xkQWN0aW9uLnNh
X3NpZ2FjdGlvbihzaWcsIGluZm8sIG1jb250ZXh0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIHJlc3RvcmVEZWZhdWx0KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3ZvaWQgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFs
SGFuZGxlciYmIGhhbmRsZXIpCit7CisgICAgQVNTRVJUKHNpZ25hbCA8IFNpZ25hbDo6VW5rbm93
bik7CisgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS5hZGQoV1RGTW92
ZShoYW5kbGVyKSk7CisKKyAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplT25jZUZsYWdzW3N0
YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0sIFsmXSB7CisgICAgICAgIHN0cnVjdCBzaWdhY3Rp
b24gYWN0aW9uOworICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0ganNjU2lnbmFsSGFuZGxl
cjsKKyAgICAgICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOworICAgICAgICBhY3Rpb24u
c2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworICAgICAgICBzaWdhY3Rpb24odG9TeXN0ZW1TaWduYWwo
c2lnbmFsKSwgJmFjdGlvbiwgJm9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwp
XSk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFBU
SFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmggYi9T
b3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZGZkNTBjODljOWRl
NTMxZDU4ZjMxNGE1OTk4YWZkOWNiMzM5NzU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dU
Ri93dGYvdGhyZWFkcy9TaWduYWxzLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKFBU
SFJFQURTKQorCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCitlbnVtIGNsYXNzIFNpZ25hbCB7CisgICAgLy8gVXNyIHdp
bGwgYWx3YXlzIGNoYWluIHRvIGFueSBub24tZGVmYXVsdCBoYW5kbGVyIGluc3RhbGwgYmVmb3Jl
IHVzLiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8ga25vdworICAgIC8vIGlmIGEgc2lnbmFsIHdh
cyBpbnRlbmRlZCBleGNsdXNpdmVseSBmb3IgdXMuCisgICAgVXNyLAorCisgICAgLy8gVGhlc2Ug
c2lnbmFscyB3aWxsIG9ubHkgY2hhaW4gaWYgd2UgZG9uJ3QgaGF2ZSBhIGhhbmRsZXIgdGhhdCBj
YW4gcHJvY2VzcyB0aGVtLiBJZiB0aGVyZSBpcyBub3RoaW5nCisgICAgLy8gdG8gY2hhaW4gdG8g
d2UgcmVzdG9yZSB0aGUgZGVmYXVsdCBoYW5kbGVyIGFuZCBjcmFzaC4KKyAgICBUcmFwLAorICAg
IElsbCwKKyAgICBTZWdWLAorICAgIEJ1cywKKyAgICBOdW1iZXJPZlNpZ25hbHMsCisgICAgVW5r
bm93biA9IE51bWJlck9mU2lnbmFscworfTsKKworZW51bSBjbGFzcyBTaWduYWxBY3Rpb24gewor
ICAgIEhhbmRsZWQsCisgICAgTm90SGFuZGxlZAorfTsKKwordXNpbmcgU2lnbmFsSGFuZGxlciA9
IEZ1bmN0aW9uPFNpZ25hbEFjdGlvbihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKT47CisKKy8vIENh
bGwgdGhpcyBtZXRob2Qgd2hlbmV2ZXIgeW91IHdhbnQgdG8gaW5zdGFsbCBhIHNpZ25hbCBoYW5k
bGVyLiBJdCdzIG9rIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBsYXppbHkuCisvLyBOb3RlOiBZb3Vy
IHNpZ25hbCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGhhbmRsZXIgZm9y
IHRoZSBkZXNpcmVkIHNpZ25hbCBpcyBjYWxsZWQuCisvLyBUaHVzIGl0IGlzIHlvdXIgcmVzcG9u
c2liaWxpdHkgdG8gZGlzY2VybiBpZiB0aGUgc2lnbmFsIGZpcmVkIHdhcyB5b3Vycy4KKy8vIFRo
aXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IGEgb25lIHdheSBzdHJlZXQgaS5lLiBvbmNlIGluc3Rh
bGxlZCwgYSBzaWduYWwgaGFuZGxlciBjYW5ub3QgYmUgdW5pbnN0YWxsZWQuCit2b2lkIGluc3Rh
bGxTaWduYWxIYW5kbGVyKFNpZ25hbCwgU2lnbmFsSGFuZGxlciYmKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307531</attachid>
            <date>2017-04-19 17:54:12 -0700</date>
            <delta_ts>2017-04-20 22:52:03 -0700</delta_ts>
            <desc>updated API</desc>
            <filename>bug-170976-20170419175411.patch</filename>
            <type>text/plain</type>
            <size>27280</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDViMDI2N2M1ZjQ3MTg5Y2IxOTc0NmFi
Y2QzMDIzYTZiNjZhNzdiYTcuLmRkYmNmYmQyYmU1MDk3MTU2ODY0YmIwZGFiMDNkNzRmZGI0NTFm
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTctMDQtMTkgIEtlaXRoIE1pbGxlciAgPGtlaXRo
X21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHNpZ25hbGluZyBBUEkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDk3NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0xvY2tsZXNzQmFnLmg6IEFkZGVkLgorICAg
ICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6YWRkKToKKyAgICAgICAgKFdURjo6TG9ja2xlc3NCYWc6
Oml0ZXJhdGUpOgorICAgICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6Y29uc3VtZUFsbCk6CisgICAg
ICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VGhyZWFk
TWVzc2FnZURhdGE6OlRocmVhZE1lc3NhZ2VEYXRhKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6
ZU1lc3NhZ2VzKToKKyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2UpOgorICAgICAgICAqIHd0Zi9U
aHJlYWRNZXNzYWdlLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAg
ICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1
cnJlbnRNYXlCZU51bGwpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnQpOgorICAgICAg
ICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6dG9TeXN0
ZW1TaWduYWwpOgorICAgICAgICAoV1RGOjpmcm9tU3lzdGVtU2lnbmFsKToKKyAgICAgICAgKFdU
Rjo6anNjU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChXVEY6Omluc3RhbGxTaWduYWxIYW5kbGVy
KToKKyAgICAgICAgKiB3dGYvdGhyZWFkcy9TaWduYWxzLmg6IEFkZGVkLgorCiAyMDE3LTA0LTE4
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R0xJQl0gRGVmaW5lIHByaW9yaXRpZXMgYWxzbyBmb3IgYXN5bmMgbmV0d29yayBJTyB0YXNrcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzM0ZDE0OGI3Nzg5
MWYzZGMxZjMwNzM4MjI4NjBmNWM4MGVhZGY2ZC4uNDRhZjBkMzE2MTZlNDc4MGU5OTJiYjEyMWE3
NWMzYjQ2M2NlNDI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xNDksNiArMTQ5LDExIEBACiAJCTUxNUY3OTUwMUNGQzlGNEEwMENDRUQ5MyAvKiBDcm9z
c1RocmVhZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNUY3OTREMUNGQzlGNEEwMENDRUQ5MyAvKiBDcm9zc1RocmVhZFRhc2suaCAqLzsgfTsK
IAkJNTE1Rjc5NTYxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUY3OTU1MUNGRDNBNjkw
MENDRUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggKi87IH07CiAJCTUyMTgzMDEyQzk5RTQ3NkE4
NEVFQkVBOCAvKiBTeW1ib2xJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY3MkJCREIxMDdGQTQyNDg4NjE3OEI5RSAvKiBTeW1ib2xJbXBsLmNw
cCAqLzsgfTsKKwkJNTMxMUJENTMxRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENTExRUE3MUNB
RDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwICovOyB9OworCQk1MzExQkQ1NjFFQTdFMTVBMDA1MjUy
ODEgLyogTG9ja2xlc3NCYWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMTFCRDU1MUVBN0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVzc0JhZy5oICovOyB9
OworCQk1MzExQkQ1ODFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENTcxRUE3RTFBMTAwNTI1Mjgx
IC8qIFNpZ25hbHMuaCAqLzsgfTsKKwkJNTMxMUJENUExRUE4MUE5NjAwNTI1MjgxIC8qIFRocmVh
ZE1lc3NhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzMTFCRDU5MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggKi87IH07CisJCTUz
MTFCRDVDMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDVCMUVBODIyRjkwMDUyNTI4
MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLzsgfTsKIAkJNTM5RUIwNjMxRDU1Mjg0MjAwQzgyRUY3
IC8qIExFQkRlY29kZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi87IH07CiAJ
CTUzRUMyNTNFMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VDMjUzQzFFOTVBRDMwMDAwODMx
QjkgLyogUHJpb3JpdHlRdWV1ZS5oICovOyB9OwogCQk1NTMwNzFDQTFDNDA0MjcyMDAzODQ4OTgg
LyogVGlueUxSVUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi87IH07
CkBAIC01NDcsNiArNTUyLDExIEBACiAJCTUxNUY3OTRDMUNGQzlGNEEwMENDRUQ5MyAvKiBDcm9z
c1RocmVhZENvcGllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1Ro
cmVhZENvcGllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTVGNzk0RDFDRkM5
RjRBMDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENyb3NzVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTVGNzk1NTFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFF1ZXVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUzMTFCRDUxMUVBNzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpZ25hbHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzExQkQ1NTFFQTdFMTVBMDA1MjUyODEgLyogTG9j
a2xlc3NCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9ja2xlc3NCYWcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMxMUJENTcxRUE3RTFBMTAwNTI1Mjgx
IC8qIFNpZ25hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnbmFscy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzExQkQ1OTFFQTgxQTk2MDA1MjUyODEg
LyogVGhyZWFkTWVzc2FnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJl
YWRNZXNzYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMTFCRDVCMUVBODIy
RjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzlFQjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMRUJEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzRUMyNTNDMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByaW9yaXR5UXVldWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUzMDcxQzkxQzQwNDI3MjAwMzg0ODk4IC8qIFRpbnlMUlVD
YWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55TFJVQ2FjaGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNjIsNiArMTA3Miw3IEBACiAJCQkJMEY2
MEYzMkQxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCAqLywKIAkJCQkw
RjYwRjMyRTFERkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uaCAqLywKIAkJCQlB
OEE0NzJDMzE1MUE4MjVBMDA0MTIzRkYgLyogTG9ja2VyLmggKi8sCisJCQkJNTMxMUJENTUxRUE3
RTE1QTAwNTI1MjgxIC8qIExvY2tsZXNzQmFnLmggKi8sCiAJCQkJNTEzRTE3MEExQ0Q3RDVCRjAw
RTM2NTBCIC8qIExvZ2dpbmdBY2N1bXVsYXRvci5oICovLAogCQkJCTBGMzBCQThDMUU3ODcwOEUw
MDJDQTg0NyAvKiBMb2dnaW5nSGFzaElELmggKi8sCiAJCQkJMEYzMEJBOEQxRTc4NzA4RTAwMkNB
ODQ3IC8qIExvZ2dpbmdIYXNoTWFwLmggKi8sCkBAIC0xMTg2LDYgKzExOTcsOCBAQAogCQkJCUUz
MjAwQUI1MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3BwICovLAogCQkJCUUzMjAw
QUI2MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuaCAqLywKIAkJCQlBOEE0NzMzMDE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwICovLAorCQkJCTUzMTFC
RDVCMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLywKKwkJCQk1MzExQkQ1
OTFFQTgxQTk2MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5oICovLAogCQkJCUE4QTQ3MzMyMTUx
QTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwICovLAogCQkJCUE4QTQ3MzMzMTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmcuaCAqLywKIAkJCQlBOEE0NzMzNTE1MUE4MjVCMDA0MTIzRkYg
LyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oICovLApAQCAtMTMxMyw2ICsxMzI2LDggQEAKIAkJCWNo
aWxkcmVuID0gKAogCQkJCUE4QTQ3MzNBMTUxQTgyNUIwMDQxMjNGRiAvKiBCaW5hcnlTZW1hcGhv
cmUuY3BwICovLAogCQkJCUE4QTQ3MzNCMTUxQTgyNUIwMDQxMjNGRiAvKiBCaW5hcnlTZW1hcGhv
cmUuaCAqLywKKwkJCQk1MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgKi8s
CisJCQkJNTMxMUJENTcxRUE3RTFBMTAwNTI1MjgxIC8qIFNpZ25hbHMuaCAqLywKIAkJCSk7CiAJ
CQlwYXRoID0gdGhyZWFkczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xNDU4LDYg
KzE0NzMsNyBAQAogCQkJCURFNUEwOUZDMUJBMzY5OTIwMDNENDQyNCAvKiBDb21tb25DcnlwdG9T
UEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjkxMTcyRTAwRkMwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOTgxNTFBODI1QjAwNDEy
M0ZGIC8qIENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzExQkQ1NjFFQTdFMTVBMDA1
MjUyODEgLyogTG9ja2xlc3NCYWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREI2OThFMUI3QzY0
M0EwMDBDMTA3OCAvKiBDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDhDMTUx
QTgyNjQwMDQxMjNGRiAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjlDMTcy
RjI1OTYwMDdEQkRBNSAvKiBDb252ZXJzaW9uTW9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTIz
LDYgKzE1MzksNyBAQAogCQkJCUE3MERBMDg0MTc5OUYwNEQwMDUyOUE5QiAvKiBJbnNlcnRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTI2MTQ3QjBBMTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2Vy
VG9TdHJpbmdDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0REN0ZGODE4NkQyOTFF
MDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMxMUJE
NTgxRUE3RTFBMTAwNTI1MjgxIC8qIFNpZ25hbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDREQ3
RkZBMTg2RDJBNTQwMDc0MzNDRCAvKiBJdGVyYXRvclJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5M0FDOTFBODE4OTQyRkM0MDAyNDQ5MzkgLyogTENoYXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUzOUVCMDYzMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTE2MjksNiArMTY0Niw3IEBACiAJCQkJQTc0ODc0NTQxN0EwQkRBRTAwRkEwNENCIC8qIFN0
cmluZ0hhc2hEdW1wQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDExNTFBODI1
QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQyMTUx
QTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdPcGVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUz
MTFCRDVBMUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkREQkZBODE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBNkVCMUUwMTg3RDBCRDMwMDMwMTI2RiAvKiBTdHJpbmdWaWV3Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNCODE1MUE4MjVCMDA0MTIzRkYgLyogc3RydG9kLmgg
aW4gSGVhZGVycyAqLywKQEAgLTE4NTMsOCArMTg3MSwxMCBAQAogCQkJCUZFREFDRDNEMTYzMEY4
M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDND
MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE1QkExNUZCMTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdDRi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MzExQkQ1QzFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOEE0NzQ0MDE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVGQzE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nSW1w
bENGLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMTFCRDUzMUVBNzFDQUQwMDUyNTI4MSAvKiBT
aWduYWxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUY1MTgyNDM0ODAwMEE4MkU2OSAv
KiBTdHJpbmdJbXBsTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RjMxODI0MzNBOTAw
QTgyRTY5IC8qIFN0cmluZ01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGRERCRkE3MTY2NkRG
QTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL0xvY2tsZXNzQmFnLmggYi9Tb3VyY2UvV1RGL3d0Zi9Mb2Nr
bGVzc0JhZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1OWM1YTJlNDA1NjM4NjQ0MjIyODQzMWY4NDNjYWE5M2M3
NzQwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Mb2NrbGVzc0JhZy5oCkBA
IC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkF0b21pY3MuaCIKKworbmFtZXNwYWNlIFdU
RiB7CisKKy8vIFRoaXMgYSBzaW1wbGUgc2luZ2xlIGNvbnN1bWVyLCBtdWx0aXBsZSBwcm9kdWNl
ciBCYWcgZGF0YSBzdHJ1Y3R1cmUuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBMb2Nr
bGVzc0JhZyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG9ja2xlc3NCYWcpOworCisgICAg
c3RydWN0IE5vZGUgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJs
aWM6CisgICAgICAgIFQgZGF0YTsKKyAgICAgICAgTm9kZSogbmV4dDsKKyAgICB9OworcHVibGlj
OgorICAgIExvY2tsZXNzQmFnKCkgPSBkZWZhdWx0OworCisgICAgZW51bSBQdXNoUmVzdWx0IHsg
RW1wdHksIE5vbkVtcHR5IH07CisgICAgUHVzaFJlc3VsdCBhZGQoVCBlbGVtZW50KSB7CisgICAg
ICAgIE5vZGUqIG5ld05vZGUgPSBuZXcgTm9kZSgpOworICAgICAgICBuZXdOb2RlLT5kYXRhID0g
c3RkOjpmb3J3YXJkPFQ+KGVsZW1lbnQpOworICAgICAgICBuZXdOb2RlLT5uZXh0ID0gbV9oZWFk
LmxvYWQoKTsKKworICAgICAgICBOb2RlKiBvbGRIZWFkID0gbmV3Tm9kZS0+bmV4dDsKKyAgICAg
ICAgd2hpbGUgKCFtX2hlYWQudmFsdWUuY29tcGFyZV9leGNoYW5nZV9zdHJvbmcob2xkSGVhZCwg
bmV3Tm9kZSkpIHsKKyAgICAgICAgICAgIG5ld05vZGUtPm5leHQgPSBvbGRIZWFkOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIG9sZEhlYWQgPT0gbnVsbHB0ciA/IEVtcHR5IDogTm9uRW1w
dHk7CisgICAgfQorCisgICAgLy8gQ29uc3VtZXIgZnVuY3Rpb25zOiBFdmVyeXRoaW5nIGJlbG93
IGhlcmUgaXMgb25seSBzYWZlIHRvIGNhbGwgZnJvbSB0aGUgY29uc3VtZXIgdGhyZWFkLgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBpdGVyYXRlKGNvbnN0IEZ1bmN0
b3ImIGZ1bmMpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9oZWFkLmxvYWQoKTsKKyAg
ICAgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgICAgIGZ1bmMobm9kZS0+ZGF0YSk7CisgICAg
ICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBjb25zdW1lQWxsKGNvbnN0IEZ1bmN0b3Im
IGZ1bmMpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9oZWFkLmV4Y2hhbmdlKG51bGxw
dHIpOworICAgICAgICB3aGlsZSAobm9kZSkgeworICAgICAgICAgICAgZnVuYyhzdGQ6OmZvcndh
cmQ8VD4obm9kZS0+ZGF0YSkpOworICAgICAgICAgICAgTm9kZSogb2xkTm9kZSA9IG5vZGU7Cisg
ICAgICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKKyAgICAgICAgICAgIGRlbGV0ZSBvbGROb2Rl
OworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIEF0b21pYzxOb2RlKj4gbV9oZWFk
OworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVGhyZWFkTWVzc2FnZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kODYzMTk1NDVmZTQ4MGZiYWM4NmQ4MzBlZWU4YWIyYjA0YjVjYjUxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKQEAgLTAsMCAr
MSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkTWVzc2FnZS5oIgorCisjaWYgVVNF
KFBUSFJFQURTKQorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKwor
I2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRl
IDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorCisKK25h
bWVzcGFjZSBXVEYgeworCitjbGFzcyBUaHJlYWRNZXNzYWdlRGF0YSB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgVGhyZWFkTWVzc2FnZURhdGEoVGhyZWFkTWVz
c2FnZSYmIG0pCisgICAgICAgIDogbWVzc2FnZShXVEZNb3ZlKG0pKQorICAgIHsKKyAgICAgICAg
cmFuLnN0b3JlKGZhbHNlKTsKKyAgICB9CisKKyAgICBBdG9taWM8Ym9vbD4gcmFuOworICAgIFRo
cmVhZE1lc3NhZ2UgbWVzc2FnZTsKK307CisKK2VudW0gRmlsZURlc2NyaXB0b3IgeworICAgIFJl
YWQgPSAwLAorICAgIFdyaXRlID0gMSwKKyAgICBOdW0gPSAyLAorfTsKKworc3RhdGljIGludCBm
aWxlRGVzY3JpcHRvcnNbTnVtXTsKK3N0YXRpYyBjb25zdCBjaGFyKiBtYWdpY0J5dGUgPSAiZCI7
CisKKwordm9pZCBpbml0aWFsaXplTWVzc2FnZXMoKQoreworICAgIGludCByZXN1bHQgPSBwaXBl
KGZpbGVEZXNjcmlwdG9ycyk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7Cit9CisKK3Zv
aWQgc2VuZE1lc3NhZ2UoVGhyZWFkJiB0aHJlYWQsIFRocmVhZE1lc3NhZ2UgbWVzc2FnZSkKK3sK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNl
LCBbXSB7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VXNyLCBbXSAoaW50
LCBzaWdpbmZvX3QqLCB2b2lkKikgeworICAgICAgICAgICAgVGhyZWFkKiB0aHJlYWQgPSBUaHJl
YWQ6OmN1cnJlbnRNYXlCZU51bGwoKTsKKworICAgICAgICAgICAgaWYgKCF0aHJlYWQpIHsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oIldlIHNvbWVob3cgZ290IGEgbWVzc2FnZSBvbiBhIHRo
cmVhZCB0aGF0IGRpZG4ndCBoYXZlIGEgV1RGOjpUaHJlYWQgaW5pdGlhbGl6ZWQsIHdlIHByb2Jh
Ymx5IGRlYWRsb2NrZWQsIGhhbHAuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFj
dGlvbjo6Tm90SGFuZGxlZDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhyZWFkLT50
aHJlYWRNZXNzYWdlcygpLmNvbnN1bWVBbGwoW10gKFRocmVhZE1lc3NhZ2VEYXRhKiBkYXRhKSB7
CisgICAgICAgICAgICAgICAgZGF0YS0+bWVzc2FnZS0+cnVuKCk7CisgICAgICAgICAgICAgICAg
ZGF0YS0+cmFuLnN0b3JlKHRydWUpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHdyaXRlKGZpbGVEZXNjcmlwdG9yc1tXcml0ZV0sIG1hZ2ljQnl0ZSwgMSk7Cisg
ICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOworICAgICAgICB9KTsKKyAg
ICB9KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRNZXNzYWdlRGF0YT4gZGF0YSA9IHN0
ZDo6bWFrZV91bmlxdWU8VGhyZWFkTWVzc2FnZURhdGE+KFdURk1vdmUobWVzc2FnZSkpOworICAg
IHRocmVhZC50aHJlYWRNZXNzYWdlcygpLmFkZChkYXRhLmdldCgpKTsKKyAgICBib29sIHJlc3Vs
dCA9IHRocmVhZC5zaWduYWwoU0lHVVNSMik7CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsK
KworICAgIHN0YXRpYyBTdGF0aWNMb2NrIHJlYWRMb2NrOworICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHJlYWRMb2NrKTsKKyAgICAgICAgaWYgKGRhdGEtPnJh
bi5sb2FkKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2hhciBidWZmZXJbMTZd
OworICAgICAgICByZWFkKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgYnVmZmVyLCAxKTsKKyAgICAg
ICAgQVNTRVJUKGJ1ZmZlclswXSA9PSBtYWdpY0J5dGVbMF0pOworCisgICAgICAgIGludCBmbGFn
cyA9IGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgRl9HRVRGTCk7CisgICAgICAgIEFTU0VS
VCghKGZsYWdzICYgT19OT05CTE9DSykpOworICAgICAgICBmY250bChmaWxlRGVzY3JpcHRvcnNb
UmVhZF0sIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSyk7CisKKyAgICAgICAgd2hpbGUgKHRy
dWUpIHsKKyAgICAgICAgICAgIGlmIChyZWFkKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgYnVmZmVy
LCAxNikgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZXJybm8gPT0gRUFHQUlOKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgRl9TRVRGTCwgZmxhZ3MpOworICAgIH0K
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmggYi9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRNZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjk2OGM5NzUwMDBiNjYyOTM2NTczZjc2YWJmYTEx
NDcxMDEzMjE1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3Nh
Z2UuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVk
ZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBV
U0UoUFRIUkVBRFMpCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIGluaXRpYWxpemVNZXNzYWdl
cygpOworCitjbGFzcyBUaHJlYWRNZXNzYWdlRGF0YTsKK3VzaW5nIFRocmVhZE1lc3NhZ2UgPSBS
ZWY8U2hhcmVkVGFzazx2b2lkKCk+PjsKKwordm9pZCBzZW5kTWVzc2FnZShUaHJlYWQmLCBUaHJl
YWRNZXNzYWdlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoUFRIUkVB
RFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaCBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZy5oCmluZGV4IGJkMWY4ZjMzZTJhYWI1YjVjZGZiNGNjYjQ2OWI4NTg1ZTlh
MjQ2NGUuLjBkOWNlMzBmNTllZTNjZjIzYmIzNjQyYWNjNjZiMmFkNmVjMTQ2ZWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZy5oCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNs
dWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8
d3RmL0xvY2tsZXNzQmFnLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CkBAIC01Niw2ICs1Nyw4IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitjbGFzcyBUaHJlYWRNZXNz
YWdlRGF0YTsKKwogdXNpbmcgVGhyZWFkSWRlbnRpZmllciA9IHVpbnQzMl90OwogdHlwZWRlZiB2
b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKIApAQCAtNzUsNiArNzgsNyBA
QCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIFRocmVhZCBvYmplY3QuCiAgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBUaHJlYWQmIGN1cnJlbnQoKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFRocmVhZCogY3VycmVudE1heUJlTnVsbCgpOwogCiAgICAgLy8gUmV0dXJucyBU
aHJlYWRJZGVudGlmaWVyIGRpcmVjdGx5LiBJdCBpcyB1c2VmdWwgaWYgdGhlIHVzZXIgb25seSBj
YXJlcyBhYm91dCBpZGVudGl0eQogICAgIC8vIG9mIHRocmVhZHMuIEF0IHRoYXQgdGltZSwgdXNl
cnMgc2hvdWxkIGtub3cgdGhhdCBob2xkaW5nIHRoaXMgVGhyZWFkSWRlbnRpZmllciBkb2VzIG5v
dCBlbnN1cmUKQEAgLTEzMiw2ICsxMzYsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBp
bml0aWFsaXplUGxhdGZvcm1UaHJlYWRpbmcoKTsKIAorICAgIExvY2tsZXNzQmFnPFRocmVhZE1l
c3NhZ2VEYXRhKj4mIHRocmVhZE1lc3NhZ2VzKCk7CisKIHByaXZhdGU6CiAgICAgVGhyZWFkKCk7
CiAKQEAgLTE3Nyw2ICsxODMsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kaWRFeGl0IHsgZmFs
c2UgfTsKICNpZiBVU0UoUFRIUkVBRFMpCiAgICAgcHRocmVhZF90IG1faGFuZGxlOworCisgICAg
TG9ja2xlc3NCYWc8VGhyZWFkTWVzc2FnZURhdGEqPiBtX3RocmVhZE1lc3NhZ2VzOwogI2lmIE9T
KERBUldJTikKICAgICBtYWNoX3BvcnRfdCBtX3BsYXRmb3JtVGhyZWFkOwogI2Vsc2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAppbmRleCAzZWU5YTVmNTQ1ZWFmMTI4OTkwZTVhOWEz
YzAxNTQ4ODUyNWJmZmQ3Li5jNDEzYjFhZTY0ZGM0NDUyNjc5ZjJkMGJhYTE5MTQwN2Y1MjFjNjY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0yNjQsMTEgKzI2NCwxOCBA
QCB2b2lkIFRocmVhZDo6ZGV0YWNoKCkKICAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKIH0K
IAotVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQorVGhyZWFkKiBUaHJlYWQ6OmN1cnJlbnRNYXlC
ZU51bGwoKQogewogICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVu
dCgpOwogICAgIGlmIChkYXRhKQotICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CisgICAg
ICAgIHJldHVybiAmZGF0YS0+dGhyZWFkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1Ro
cmVhZCYgVGhyZWFkOjpjdXJyZW50KCkKK3sKKyAgICBpZiAoVGhyZWFkKiBjdXJyZW50ID0gY3Vy
cmVudE1heUJlTnVsbCgpKQorICAgICAgICByZXR1cm4gKmN1cnJlbnQ7CiAKICAgICAvLyBOb3Qg
YSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVk
IHlldC4KICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhyZWFkKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTAyOTg1MWNmMjkwMWFm
MDU2MjVhNmViOWVmMGQzMjVkNzQ0ZmFlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL3RocmVhZHMvU2lnbmFscy5jcHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU2lnbmFscy5oIgorCisjaWYgVVNFKFBUSFJFQURTKQorCisjaW5jbHVkZSA8c2lnbmFs
Lmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvTG9ja2xlc3NCYWcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSBpbnQgdG9T
eXN0ZW1TaWduYWwoU2lnbmFsIHNpZ25hbCkKK3sKKyAgICBzd2l0Y2ggKHNpZ25hbCkgeworICAg
IGNhc2UgU2lnbmFsOjpTZWdWOiByZXR1cm4gU0lHU0VHVjsKKyAgICBjYXNlIFNpZ25hbDo6QnVz
OiByZXR1cm4gU0lHQlVTOworICAgIGNhc2UgU2lnbmFsOjpJbGw6IHJldHVybiBTSUdJTEw7Cisg
ICAgY2FzZSBTaWduYWw6OlVzcjogcmV0dXJuIFNJR1VTUjI7CisgICAgY2FzZSBTaWduYWw6OlRy
YXA6IHJldHVybiBTSUdUUkFQOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUgU2lnbmFsIGZyb21TeXN0ZW1T
aWduYWwoaW50IHNpZ25hbCkKK3sKKyAgICBzd2l0Y2ggKHNpZ25hbCkgeworICAgIGNhc2UgU0lH
U0VHVjogcmV0dXJuIFNpZ25hbDo6U2VnVjsKKyAgICBjYXNlIFNJR0JVUzogcmV0dXJuIFNpZ25h
bDo6QnVzOworICAgIGNhc2UgU0lHSUxMOiByZXR1cm4gU2lnbmFsOjpJbGw7CisgICAgY2FzZSBT
SUdVU1IyOiByZXR1cm4gU2lnbmFsOjpVc3I7CisgICAgY2FzZSBTSUdUUkFQOiByZXR1cm4gU2ln
bmFsOjpUcmFwOworICAgIGRlZmF1bHQ6IHJldHVybiBTaWduYWw6OlVua25vd247CisgICAgfQor
fQorCitzdGF0aWMgTG9ja2xlc3NCYWc8U2lnbmFsSGFuZGxlcj4gaGFuZGxlcnNbc3RhdGljX2Nh
c3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOworc3RhdGljIHN0cnVjdCBzaWdh
Y3Rpb24gb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWdu
YWxzKV07CitzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNf
Y2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07CisKK3N0YXRpYyB2b2lkIGpz
Y1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4dCkK
K3sKKyAgICBTaWduYWwgc2lnbmFsID0gZnJvbVN5c3RlbVNpZ25hbChzaWcpOworCisgICAgYXV0
byByZXN0b3JlRGVmYXVsdCA9IFsmXSB7CisgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gZGVmYXVs
dEFjdGlvbjsKKyAgICAgICAgZGVmYXVsdEFjdGlvbi5zYV9oYW5kbGVyID0gU0lHX0RGTDsKKyAg
ICAgICAgc2lnZmlsbHNldCgmZGVmYXVsdEFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgZGVmYXVs
dEFjdGlvbi5zYV9mbGFncyA9IDA7CisgICAgICAgIHNpZ2FjdGlvbihzaWcsICZkZWZhdWx0QWN0
aW9uLCBudWxscHRyKTsKKyAgICB9OworCisgICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsKKyAg
ICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYnV0IHdlIG1pZ2h0IGFzIHdlbGwgYmUgY2FyZWZ1
bC4KKyAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6VW5rbm93bikgeworICAgICAgICBkYXRhTG9n
TG4oIldlIHNvbWVob3cgZ290IGNhbGxlZCBmb3IgYW4gdW5rbm93biBzaWduYWwsIGhhbHAuIik7
CisgICAgICAgIHJlc3RvcmVEZWZhdWx0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLml0ZXJhdGUoWyZdIChjb25z
dCBTaWduYWxIYW5kbGVyJiBoYW5kbGVyKSB7CisgICAgICAgIGlmIChoYW5kbGVyKHNpZywgaW5m
bywgbWNvbnRleHQpID09IFNpZ25hbEFjdGlvbjo6SGFuZGxlZCkKKyAgICAgICAgICAgIGRpZEhh
bmRsZSA9IHRydWU7CisgICAgfSk7CisKKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uJiBvbGRBY3Rpb24g
PSBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV07CisgICAgaWYgKHNpZ25h
bCA9PSBTaWduYWw6OlVzcikgeworICAgICAgICBpZiAob2xkQWN0aW9uLnNhX3NpZ2FjdGlvbikK
KyAgICAgICAgICAgIG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZvLCBtY29udGV4dCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWRpZEhhbmRsZSkgeworICAgICAg
ICBpZiAob2xkQWN0aW9uLnNhX3NpZ2FjdGlvbikgeworICAgICAgICAgICAgb2xkQWN0aW9uLnNh
X3NpZ2FjdGlvbihzaWcsIGluZm8sIG1jb250ZXh0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIHJlc3RvcmVEZWZhdWx0KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3ZvaWQgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFs
SGFuZGxlciYmIGhhbmRsZXIpCit7CisgICAgQVNTRVJUKHNpZ25hbCA8IFNpZ25hbDo6VW5rbm93
bik7CisgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS5hZGQoV1RGTW92
ZShoYW5kbGVyKSk7CisKKyAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplT25jZUZsYWdzW3N0
YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0sIFsmXSB7CisgICAgICAgIHN0cnVjdCBzaWdhY3Rp
b24gYWN0aW9uOworICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0ganNjU2lnbmFsSGFuZGxl
cjsKKyAgICAgICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOworICAgICAgICBhY3Rpb24u
c2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworICAgICAgICBzaWdhY3Rpb24odG9TeXN0ZW1TaWduYWwo
c2lnbmFsKSwgJmFjdGlvbiwgJm9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwp
XSk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFBU
SFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmggYi9T
b3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZGZkNTBjODljOWRl
NTMxZDU4ZjMxNGE1OTk4YWZkOWNiMzM5NzU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dU
Ri93dGYvdGhyZWFkcy9TaWduYWxzLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKFBU
SFJFQURTKQorCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCitlbnVtIGNsYXNzIFNpZ25hbCB7CisgICAgLy8gVXNyIHdp
bGwgYWx3YXlzIGNoYWluIHRvIGFueSBub24tZGVmYXVsdCBoYW5kbGVyIGluc3RhbGwgYmVmb3Jl
IHVzLiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8ga25vdworICAgIC8vIGlmIGEgc2lnbmFsIHdh
cyBpbnRlbmRlZCBleGNsdXNpdmVseSBmb3IgdXMuCisgICAgVXNyLAorCisgICAgLy8gVGhlc2Ug
c2lnbmFscyB3aWxsIG9ubHkgY2hhaW4gaWYgd2UgZG9uJ3QgaGF2ZSBhIGhhbmRsZXIgdGhhdCBj
YW4gcHJvY2VzcyB0aGVtLiBJZiB0aGVyZSBpcyBub3RoaW5nCisgICAgLy8gdG8gY2hhaW4gdG8g
d2UgcmVzdG9yZSB0aGUgZGVmYXVsdCBoYW5kbGVyIGFuZCBjcmFzaC4KKyAgICBUcmFwLAorICAg
IElsbCwKKyAgICBTZWdWLAorICAgIEJ1cywKKyAgICBOdW1iZXJPZlNpZ25hbHMsCisgICAgVW5r
bm93biA9IE51bWJlck9mU2lnbmFscworfTsKKworZW51bSBjbGFzcyBTaWduYWxBY3Rpb24gewor
ICAgIEhhbmRsZWQsCisgICAgTm90SGFuZGxlZAorfTsKKwordXNpbmcgU2lnbmFsSGFuZGxlciA9
IEZ1bmN0aW9uPFNpZ25hbEFjdGlvbihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKT47CisKKy8vIENh
bGwgdGhpcyBtZXRob2Qgd2hlbmV2ZXIgeW91IHdhbnQgdG8gaW5zdGFsbCBhIHNpZ25hbCBoYW5k
bGVyLiBJdCdzIG9rIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBsYXppbHkuCisvLyBOb3RlOiBZb3Vy
IHNpZ25hbCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGhhbmRsZXIgZm9y
IHRoZSBkZXNpcmVkIHNpZ25hbCBpcyBjYWxsZWQuCisvLyBUaHVzIGl0IGlzIHlvdXIgcmVzcG9u
c2liaWxpdHkgdG8gZGlzY2VybiBpZiB0aGUgc2lnbmFsIGZpcmVkIHdhcyB5b3Vycy4KKy8vIFRo
aXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IGEgb25lIHdheSBzdHJlZXQgaS5lLiBvbmNlIGluc3Rh
bGxlZCwgYSBzaWduYWwgaGFuZGxlciBjYW5ub3QgYmUgdW5pbnN0YWxsZWQuCit2b2lkIGluc3Rh
bGxTaWduYWxIYW5kbGVyKFNpZ25hbCwgU2lnbmFsSGFuZGxlciYmKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307695</attachid>
            <date>2017-04-20 22:52:06 -0700</date>
            <delta_ts>2017-04-21 08:11:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170976-20170421015204.patch</filename>
            <type>text/plain</type>
            <size>61138</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MTNlZjVmZjZhN2Y4ZjRjMjJlNTY1NTdlOWJiMmNiZmNhMGNjNzQyLi4wODM2MTExMjJlZTI2OWFi
MzY4MzAyNTdhOGQ0OTkyM2FjOWI0YWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxNy0wNC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgc2lnbmFsaW5nIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHZhcmlvdXMgdXNlcyBvZiBzaWdhY3Rp
b24gdG8gdXNlIHRoZSBuZXcgc2lnbmFsaW5nIEFQSS4KKyAgICAgICAgQWxzbyBzd2l0Y2ggVk1U
cmFwcyB0byB1c2UgdGhlIHRocmVhZCBtZXNzYWdlIHN5c3RlbSBpbnN0ZWFkIG9mCisgICAgICAg
IHJvbGxpbmcgaXQncyBvd24uCisKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5o
OgorICAgICAgICAoSlNDOjppc0pJVFBDKToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3Bw
OgorICAgICAgICAoSlNDOjppbnN0YWxsU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChKU0M6OlZN
VHJhcHM6OlZNVHJhcHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNl
bmQpOgorICAgICAgICAoSlNDOjpoYW5kbGVTaWd1c3IxKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6aGFuZGxlU2lndHJhcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Omluc3RhbGxTaWduYWxI
YW5kbGVycyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmg6CisgICAgICAg
ICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA6CisgICAgICAgIChKU0M6Omluc3RhbGxD
cmFzaEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpoYW5kbGVDcmFzaCk6IERlbGV0ZWQuCisgICAg
ICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjplbmFibGVGYXN0TWVtb3J5KToK
KwogMjAxNy0wNC0xOCAgT2xla3NhbmRyIFNrYWNoa292ICA8Z3NrYWNoa292QGdtYWlsLmNvbT4K
IAogICAgICAgICBbRVM2XS4gSW1wbGVtZW50IEFubmV4IEIuMy4zIGZ1bmN0aW9uIGhvaXN0aW5n
IHJ1bGVzIGZvciBldmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDViMDI2N2M1ZjQ3MTg5Y2IxOTc0NmFiY2QzMDIzYTZiNjZh
NzdiYTcuLjk0ZDVkNjc2YmE4YjJiZjMyZTM1YzQ3MDhhODc1NzMzYmM5MDIzOTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNzYgQEAKKzIwMTctMDQtMjAgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIHNpZ25hbGluZyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDk3NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIGJ1bmNoIG9mIG5l
dyBmdW5jdGlvbmFsaXR5IHRvIFdURi4gRmlyc3QsIGl0IGFkZAorICAgICAgICBhIG5ldyBkYXRh
IHN0cnVjdHVyZSBvZiBhIGxvY2tsZXNzIGJhZy4gVGhlIExvY2tsZXNzQmFnIGNsYXNzIGNhbgor
ICAgICAgICBiZSB1c2VkIGFzIGVpdGhlciBhIG11bHRpLXdyaXRlciBtdWx0aS1yZWFkZXIgbG9j
a2xlc3MgYmFnIG9yIGEKKyAgICAgICAgbXVsdGktd3JpdGVyIHNpbmdsZSBjb25zdW1lciBsb2Nr
bGVzcyBiYWcuCisKKyAgICAgICAgTmV4dCwgdGhpcyBwYXRjaCBhZGRzIGFuIGFic3RyYWN0aW9u
IGFyb3VuZCBzaWdhY3Rpb24gaW4gV1RGLgorICAgICAgICBCYXNpY2FsbHksIHlvdSBjYW4gYWRk
IGEgaGFuZGxlciwgd2hpY2ggY2FuIGJlIGFuIGFyYml0cmFyeQorICAgICAgICBsYW1iZGEuIEFs
dGhvdWdoIGl0IHNob3VsZCBzdGlsbCBiZSBzYWZlIGZvciB0aGUgc2lnbmFsIHlvdSBhcmUKKyAg
ICAgICAgaGFuZGxpbmcuICB0aGUgc2lnbmFsIGhhbmRsZXIgbWFuYWdlciB3aWxsIHRoZW4gZG8g
YWxsIHRoZQorICAgICAgICBhcHByb3ByaWF0ZSBoYW5kbGluZyBvZiBjaGFpbmluZzoKKworICAg
ICAgICBJbiB0aGUgU0lHVVNSIGNhc2Ugd2UgYWx3YXlzIGZvcndhcmQgdGhlIHNpZ25hbCB0byBh
bnkgb3RoZXIKKyAgICAgICAgbm9uLWRlZmF1bHQgaGFuZGxlciBpbnN0YWxsZWQgYmVmb3JlIHVz
LiBXZSBuZWVkIHRvIGRvIHRoaXMsCisgICAgICAgIG90aGVyd2lzZSwgc2luY2UgaXQncyBub3Qg
cG9zc2libGUgdG8gdGVsbCBpZiBhIFNJR1VTUiB3YXMKKyAgICAgICAgaW50ZW5kZWQgZXhsdXNp
dmVseSBmb3Igb3VyIGhhbmRsZXJzLiBTaWduYWwgaGFuZGxlcnMgZG9uJ3QgcmVjb3JkCisgICAg
ICAgIGhvdyBtYW55IHRpbWVzIHRoZXkgd2VyZSBzZW50IG9ubHkgdGhhdCB0aGVyZSBpcyBhdCBs
ZWFzdCBvbmUKKyAgICAgICAgdW5oYW5kbGVkIHNpZ25hbC4KKworICAgICAgICBJbiB0aGUgZmF1
bHRpbmcgY2FzZXMgd2UgcmVxdWlyZSB0aGF0IGV2ZXJ5IGhhbmRsZSBiZSBhYmxlIHRvCisgICAg
ICAgIHJlY29nbmlzZSBhIGZhdWx0IHRoZXkgaW5zdGFsbGVkLCB2cyBjcmFzaGVzLiBJZiBub25l
IG9mIG91cgorICAgICAgICBoYW5kbGVycyBjbGFpbSB0byBoYXZlIGhhbmRsZWQgdGhlIGZhdWx0
IHdlIHdpbGwgZm9yd2FyZCB0aGUKKyAgICAgICAgZmF1bHQuIElmIGEgaGFuZGxlciB3YXMgaW5z
dGFsbGVkIGJlZm9yZSB0aGUgZmlyc3QgZmF1bHQgaGFuZGxlcgorICAgICAgICB3ZSBzaW1wbHkg
Y2FsbCB0aGF0IGhhbmRsZXIgYW5kIHJlbHkgb24gdGhlbSB0byB0YWtlIHRoZQorICAgICAgICBh
cHByb3ByaWF0ZSBhY3Rpb24uIElmIG5vIGhhbmRsZXIgd2FzIGluc3RhbGxlZCBiZWZvcmUgb3Vy
IGZpcnN0CisgICAgICAgIGhhbmRsZXIgd2UgcmVzdG9yZSB0aGUgZGVmYXVsdCBoYW5kbGVyIGFu
ZCBhbGxvdyB0aGUgZmF1bHQgdG8KKyAgICAgICAgaGFwcGVuIGFnYWluLgorCisgICAgICAgIEZp
bmFsbHksIHRoaXMgcGF0Y2ggYWRkcyBhIHNpZ25hbCBiYXNlZCBtZXNzYWdpbmcgc3lzdGVtLiAg
VGhpcworICAgICAgICBzeXN0ZW0gYWxsb3dzIHRoZSB1c2VyIHRvIHJ1biBhbiBhcmJpdHJhcnkg
bGFtYmRhIGZyb20gdGhlIFNJR1VTUjIKKyAgICAgICAgc2lnbmFsIGhhbmRsZXIgb2YgYW55IHRh
cmdldCBXVEY6OlRocmVhZC4gVGhpcyBpcyBhbHJlYWR5IGluIHVzZQorICAgICAgICBmb3IgdGhl
IFZNVHJhcHMgQVBJIHdoaWNoIGFsbG93cyB1cyB0byBraWxsIHJvZ3VlIFZNcyBieSBzZW5kaW5n
CisgICAgICAgIHRoZSBWTSdzIHJ1bm5pbmcgV1RGOjpUaHJlYWQgYSBTSUdVU1IgYW5kIHJlcXVl
c3RpbmcgaXQgamV0aXNvbgorICAgICAgICBhbGwgb3B0aW1pemVkIGNvZGUgYW5kIHRocm93IGFu
IHVuY2F0Y2hhYmxlIGV4Y2VwdGlvbiBmcm9tIGFsbAorICAgICAgICBmdW5jdGlvbiBlbnRyaWVz
L2xvb3AgYmFja2VkZ2VzLiAgSW4gdGhlIGZ1dHVyZSwgd2Ugd2lsbCBhbHNvIHVzZQorICAgICAg
ICB0aGlzIEFQSSBmb3IgV2FzbSB0byByZXNldCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGVzIGluIGN1
cnJlbnRseQorICAgICAgICBleGVjdXRpbmcgV2FzbSB0aHJlYWRzLgorCisgICAgICAgICogV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0F0b21pY3MuaDoKKyAg
ICAgICAgKFdURjo6QXRvbWljOjpBdG9taWMpOgorICAgICAgICAqIHd0Zi9Mb2NrbGVzc0JhZy5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6TG9ja2xlc3NCYWc6OkxvY2tsZXNzQmFnKToKKyAgICAg
ICAgKFdURjo6TG9ja2xlc3NCYWc6OmFkZCk6CisgICAgICAgIChXVEY6OkxvY2tsZXNzQmFnOjpp
dGVyYXRlKToKKyAgICAgICAgKFdURjo6TG9ja2xlc3NCYWc6OmNvbnN1bWVBbGwpOgorICAgICAg
ICAqIHd0Zi9UaHJlYWRNZXNzYWdlLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OlRocmVhZE1l
c3NhZ2VEYXRhOjpUaHJlYWRNZXNzYWdlRGF0YSk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVU
aHJlYWRNZXNzYWdlcyk6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlU2NvcGVkKToKKyAgICAg
ICAgKiB3dGYvVGhyZWFkTWVzc2FnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6c2VuZE1lc3Nh
Z2UpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuY3BwOgorICAgICAgICAoV1RGOjppbml0aWFs
aXplVGhyZWFkaW5nKToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAgIChXVEY6
OlRocmVhZDo6dGhyZWFkTWVzc2FnZXMpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdQdGhyZWFk
cy5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudE1heUJlTnVsbCk6CisgICAgICAg
IChXVEY6OlRocmVhZDo6Y3VycmVudCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6c2lnbmFsKToK
KyAgICAgICAgKiB3dGYvdGhyZWFkcy9TaWduYWxzLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6
OmpzY1NpZ25hbEhhbmRsZXIpOgorICAgICAgICAoV1RGOjppbnN0YWxsU2lnbmFsSGFuZGxlcik6
CisgICAgICAgICogd3RmL3RocmVhZHMvU2lnbmFscy5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
dG9TeXN0ZW1TaWduYWwpOgorICAgICAgICAoV1RGOjpmcm9tU3lzdGVtU2lnbmFsKToKKwogMjAx
Ny0wNC0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0dMSUJdIERlZmluZSBwcmlvcml0aWVzIGFsc28gZm9yIGFzeW5jIG5ldHdvcmsgSU8g
dGFza3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
LmgKaW5kZXggNmVlNmZlMjgxODdiOWFhNDlkZWEzYzIzNzFlM2NjYmM0MzQ3MTAxMS4uMTBlMTQ0
MmFlMTI5YmJlNGNmNDUyNjE4Y2JjOWZjNWU1MzkzMDQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKQEAgLTgxLDYgKzgxLDEyIEBAIHN0
YXRpYyBjb25zdCBkb3VibGUgZXhlY3V0YWJsZVBvb2xSZXNlcnZhdGlvbkZyYWN0aW9uID0gMC4y
NTsKIGV4dGVybiBKU19FWFBPUlREQVRBIHVpbnRwdHJfdCBzdGFydE9mRml4ZWRFeGVjdXRhYmxl
TWVtb3J5UG9vbDsKIGV4dGVybiBKU19FWFBPUlREQVRBIHVpbnRwdHJfdCBlbmRPZkZpeGVkRXhl
Y3V0YWJsZU1lbW9yeVBvb2w7CiAKK2lubGluZSBib29sIGlzSklUUEModm9pZCogcGMpCit7Cisg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVN
ZW1vcnlQb29sKSA8PSBwYworICAgICAgICAmJiBwYyA8IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCk7Cit9CisKIHR5cGVkZWYgdm9pZCAoKkpJ
VFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uKShvZmZfdCwgY29uc3Qgdm9pZCosIHNpemVfdCk7
CiBleHRlcm4gSlNfRVhQT1JUREFUQSBKSVRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbiBqaXRX
cml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTVRyYXBzLmNwcAppbmRleCAxMTYzZmZiOWViMmU3YTIwMjJhNjAzZDA3ODdlNTNmZTI1M2My
ZGNmLi5iMDI4MzJlOTQyMmVlNTlhMTIzM2MwM2FmZmMyYThiYTgwYTIyNWEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcApAQCAtNDIsNyArNDIsOCBAQAogI2lu
Y2x1ZGUgPHd0Zi9Qcm9jZXNzSUQuaD4KIAogI2lmIE9TKERBUldJTikKLSNpbmNsdWRlIDxzaWdu
YWwuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkTWVzc2FnZS5oPgorI2luY2x1ZGUgPHd0Zi90aHJl
YWRzL1NpZ25hbHMuaD4KICNlbmRpZgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTU0LDkgKzU1LDYg
QEAgQUxXQVlTX0lOTElORSBWTSYgVk1UcmFwczo6dm0oKSBjb25zdAogCiAjaWYgRU5BQkxFKFNJ
R05BTF9CQVNFRF9WTV9UUkFQUykKIAotc3RydWN0IHNpZ2FjdGlvbiBvcmlnaW5hbFNpZ3VzcjFB
Y3Rpb247Ci1zdHJ1Y3Qgc2lnYWN0aW9uIG9yaWdpbmFsU2lndHJhcEFjdGlvbjsKLQogc3RydWN0
IFNpZ25hbENvbnRleHQgewogICAgIFNpZ25hbENvbnRleHQobWNvbnRleHRfdCYgbWNvbnRleHQp
CiAgICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCkBAIC0xMjcsODcgKzEyNSwzMyBAQCBzdGF0
aWMgRXhwZWN0ZWQ8c3RkOjpwYWlyPFZNKiwgU3RhY2tCb3VuZHM+LCBWTVRyYXBzOjpFcnJvcj4g
ZmluZEFjdGl2ZVZNQW5kU3RhYwogICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihhY3RpdmVWTSwg
c3RhY2tCb3VuZHMpOwogfQogCi1zdGF0aWMgdm9pZCBoYW5kbGVTaWd1c3IxKGludCBzaWduYWxO
dW1iZXIsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogdWFwKQorc3RhdGljIHZvaWQgaW5zdGFsbFNp
Z25hbEhhbmRsZXIoKQogewotICAgIFNpZ25hbENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1
Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRleHQpOwotICAgIGF1dG8gYWN0aXZlVk1BbmRTdGFj
a0JvdW5kcyA9IGZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRleHQpOwotICAgIGlmIChh
Y3RpdmVWTUFuZFN0YWNrQm91bmRzKSB7CisgICAgV1RGOjppbnN0YWxsU2lnbmFsSGFuZGxlcihX
VEY6OlNpZ25hbDo6VHJhcCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKSAtPiBXVEY6
OlNpZ25hbEFjdGlvbiB7CisgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dChzdGF0aWNfY2Fz
dDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRleHQpOworCisgICAgICAgIGlmICghaXNKSVRQ
Qyhjb250ZXh0LnRyYXBQQykpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpTaWduYWxBY3Rpb246
Ok5vdEhhbmRsZWQ7CisKKyAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0gZmlu
ZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoY29udGV4dCk7CisgICAgICAgIGlmICghYWN0aXZlVk1B
bmRTdGFja0JvdW5kcykKKyAgICAgICAgICAgIHJldHVybiBXVEY6OlNpZ25hbEFjdGlvbjo6SGFu
ZGxlZDsgLy8gTGV0IHRoZSBTaWduYWxTZW5kZXIgdHJ5IGFnYWluIGxhdGVyLgorCiAgICAgICAg
IFZNKiB2bSA9IGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMudmFsdWUoKS5maXJzdDsKICAgICAgICAg
aWYgKHZtKSB7Ci0gICAgICAgICAgICBTdGFja0JvdW5kcyBzdGFja0JvdW5kcyA9IGFjdGl2ZVZN
QW5kU3RhY2tCb3VuZHMudmFsdWUoKS5zZWNvbmQ7CiAgICAgICAgICAgICBWTVRyYXBzJiB0cmFw
cyA9IHZtLT50cmFwcygpOwotICAgICAgICAgICAgaWYgKHRyYXBzLm5lZWRUcmFwSGFuZGxpbmco
KSkKLSAgICAgICAgICAgICAgICB0cmFwcy50cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKGNvbnRl
eHQsIHN0YWNrQm91bmRzKTsKKyAgICAgICAgICAgIGlmICghdHJhcHMubmVlZFRyYXBIYW5kbGlu
ZygpKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6OlNpZ25hbEFjdGlvbjo6SGFuZGxlZDsg
Ly8gVGhlIHBvbGxpbmcgY29kZSBiZWF0IHVzIHRvIGhhbmRsaW5nIHRoZSB0cmFwIGFscmVhZHku
CisKKyAgICAgICAgICAgIGF1dG8gZXhwZWN0ZWRTdWNjZXNzID0gdHJhcHMudHJ5SmV0dGlzb25D
b2RlQmxvY2tzT25TdGFjayhjb250ZXh0KTsKKyAgICAgICAgICAgIGlmICghZXhwZWN0ZWRTdWNj
ZXNzKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6OlNpZ25hbEFjdGlvbjo6SGFuZGxlZDsg
Ly8gTGV0IHRoZSBTaWduYWxTZW5kZXIgdHJ5IGFnYWluIGxhdGVyLgorICAgICAgICAgICAgaWYg
KGV4cGVjdGVkU3VjY2Vzcy52YWx1ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6OlNp
Z25hbEFjdGlvbjo6SGFuZGxlZDsgLy8gV2UndmUgc3VjY2VzcyBqZXR0aXNvbiB0aGUgY29kZUJs
b2Nrcy4KICAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gb3JpZ2luYWxBY3Rpb24gPSBvcmln
aW5hbFNpZ3VzcjFBY3Rpb24uc2Ffc2lnYWN0aW9uOwotICAgIGlmIChvcmlnaW5hbEFjdGlvbikK
LSAgICAgICAgb3JpZ2luYWxBY3Rpb24oc2lnbmFsTnVtYmVyLCBpbmZvLCB1YXApOwotfQotCi1z
dGF0aWMgdm9pZCBoYW5kbGVTaWd0cmFwKGludCBzaWduYWxOdW1iZXIsIHNpZ2luZm9fdCogaW5m
bywgdm9pZCogdWFwKQotewotICAgIFNpZ25hbENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1
Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRleHQpOwotICAgIGF1dG8gYWN0aXZlVk1BbmRTdGFj
a0JvdW5kcyA9IGZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRleHQpOwotICAgIGlmICgh
YWN0aXZlVk1BbmRTdGFja0JvdW5kcykKLSAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25h
bFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCi0KLSAgICBWTSogdm0gPSBhY3RpdmVWTUFuZFN0YWNr
Qm91bmRzLnZhbHVlKCkuZmlyc3Q7Ci0gICAgaWYgKHZtKSB7Ci0gICAgICAgIFZNVHJhcHMmIHRy
YXBzID0gdm0tPnRyYXBzKCk7Ci0gICAgICAgIGlmICghdHJhcHMubmVlZFRyYXBIYW5kbGluZygp
KQotICAgICAgICAgICAgcmV0dXJuOyAvLyBUaGUgcG9sbGluZyBjb2RlIGJlYXQgdXMgdG8gaGFu
ZGxpbmcgdGhlIHRyYXAgYWxyZWFkeS4KIAotICAgICAgICBhdXRvIGV4cGVjdGVkU3VjY2VzcyA9
IHRyYXBzLnRyeUpldHRpc29uQ29kZUJsb2Nrc09uU3RhY2soY29udGV4dCk7Ci0gICAgICAgIGlm
ICghZXhwZWN0ZWRTdWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25h
bFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCi0gICAgICAgIGlmIChleHBlY3RlZFN1Y2Nlc3MudmFs
dWUoKSkKLSAgICAgICAgICAgIHJldHVybjsgLy8gV2UndmUgc3VjY2VzcyBqZXR0aXNvbiB0aGUg
Y29kZUJsb2Nrcy4KLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlbiB0aGlzIFNJ
R1RSQVAgaXMgbm90IGR1ZSB0byBhIFZNVHJhcC4gTGV0J3MgZG8gdGhlIGRlZmF1bHQgYWN0aW9u
LgotICAgIGF1dG8gb3JpZ2luYWxBY3Rpb24gPSBvcmlnaW5hbFNpZ3RyYXBBY3Rpb24uc2Ffc2ln
YWN0aW9uOwotICAgIGlmIChvcmlnaW5hbEFjdGlvbikgewotICAgICAgICAvLyBJdCBpcyBhbHdh
eXMgc2FmZSB0byBqdXN0IGludm9rZSB0aGUgb3JpZ2luYWwgaGFuZGxlciB1c2luZyB0aGUgc2Ff
c2lnYWN0aW9uIGZvcm0KLSAgICAgICAgLy8gd2l0aG91dCBjaGVja2luZyBmb3IgdGhlIFNBX1NJ
R0lORk8gZmxhZy4gSWYgdGhlIG9yaWdpbmFsIGhhbmRsZXIgaXMgb2YgdGhlCi0gICAgICAgIC8v
IHNhX2hhbmRsZXIgZm9ybSwgaXQgd2lsbCBqdXN0IGlnbm9yZSB0aGUgMm5kIGFuZCAzcmQgYXJn
dW1lbnRzIHNpbmNlIHNhX2hhbmRsZXIgaXMgYQotICAgICAgICAvLyBzdWJzZXQgb2Ygc2Ffc2ln
YWN0aW9uLiBUaGlzIGlzIHdoYXQgdGhlIG1hbiBwYWdlcyBzYXlzIHRoZSBPUyBkb2VzIGFueXdh
eS4KLSAgICAgICAgb3JpZ2luYWxBY3Rpb24oc2lnbmFsTnVtYmVyLCBpbmZvLCB1YXApOwotICAg
IH0KLSAgICAKLSAgICAvLyBQcmUtZW1wdGl2ZWx5IHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxl
ciBidXQgd2UgbWF5IHJvbGwgaXQgYmFjayBiZWxvdy4KLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGN1
cnJlbnRBY3Rpb247Ci0gICAgc3RydWN0IHNpZ2FjdGlvbiBkZWZhdWx0QWN0aW9uOwotICAgIGRl
ZmF1bHRBY3Rpb24uc2FfaGFuZGxlciA9IFNJR19ERkw7Ci0gICAgc2lnZmlsbHNldCgmZGVmYXVs
dEFjdGlvbi5zYV9tYXNrKTsKLSAgICBkZWZhdWx0QWN0aW9uLnNhX2ZsYWdzID0gMDsKLSAgICBz
aWdhY3Rpb24oU0lHVFJBUCwgJmRlZmF1bHRBY3Rpb24sICZjdXJyZW50QWN0aW9uKTsKLSAgICAK
LSAgICBpZiAoY3VycmVudEFjdGlvbi5zYV9zaWdhY3Rpb24gIT0gaGFuZGxlU2lndHJhcCkgewot
ICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlcmUncyBhIGNsaWVudCBoYW5kbGVyIGluc3Rh
bGxlZCBhZnRlciB1cy4gVGhpcyBhbHNvIG1lYW5zCi0gICAgICAgIC8vIHRoYXQgdGhlIGNsaWVu
dCBoYW5kbGVyIHRoaW5rcyBpdCB3YXMgYWJsZSB0byByZWNvdmVyIGZyb20gdGhlIFNJR1RSQVAs
IGFuZAotICAgICAgICAvLyBkaWQgbm90IHVuaW5zdGFsbCBpdHNlbGYuIFdlIGNhbid0IGFyZ3Vl
IHdpdGggdGhpcyBiZWNhdXNlIHRoZSBzaWduYWwgaXNuJ3QKLSAgICAgICAgLy8ga25vd24gdG8g
YmUgZnJvbSBhIFZNVHJhcHMgc2lnbmFsLiBIZW5jZSwgcmVzdG9yZSB0aGUgY2xpZW50IGhhbmRs
ZXIKLSAgICAgICAgLy8gYW5kIGtlZXAgZ29pbmcuCi0gICAgICAgIHNpZ2FjdGlvbihTSUdUUkFQ
LCAmY3VycmVudEFjdGlvbiwgbnVsbHB0cik7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBpbnN0
YWxsU2lnbmFsSGFuZGxlcnMoKQotewotICAgIHR5cGVkZWYgdm9pZCAoKiBTaWdhY3Rpb25IYW5k
bGVyKShpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICopOwotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0
aW9uOwotCi0gICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2lnYWN0
aW9uSGFuZGxlcj4oaGFuZGxlU2lndXNyMSk7Ci0gICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21h
c2spOwotICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87Ci0gICAgc2lnYWN0aW9uKFNJ
R1VTUjEsICZhY3Rpb24sICZvcmlnaW5hbFNpZ3VzcjFBY3Rpb24pOwotCi0gICAgYWN0aW9uLnNh
X3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2lnYWN0aW9uSGFuZGxlcj4oaGFuZGxlU2ln
dHJhcCk7Ci0gICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5zYV9m
bGFncyA9IFNBX1NJR0lORk87Ci0gICAgc2lnYWN0aW9uKFNJR1RSQVAsICZhY3Rpb24sICZvcmln
aW5hbFNpZ3RyYXBBY3Rpb24pOworICAgICAgICByZXR1cm4gV1RGOjpTaWduYWxBY3Rpb246Ok5v
dEhhbmRsZWQ7CisgICAgfSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgc3RhdGljIENhbGxGcmFtZSog
c2FuaXRpemVkVG9wQ2FsbEZyYW1lKENhbGxGcmFtZSogdG9wQ2FsbEZyYW1lKQpAQCAtMzk1LDcg
KzMzOSw3IEBAIFZNVHJhcHM6OlZNVHJhcHMoKQogICAgIGlmICghT3B0aW9uczo6dXNlUG9sbGlu
Z1RyYXBzKCkpIHsKICAgICAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CiAgICAgICAg
IHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKLSAgICAgICAgICAgIGluc3RhbGxTaWduYWxIYW5k
bGVycygpOworICAgICAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoKTsKICAgICAgICAgfSk7
CiAgICAgfQogI2VuZGlmCkBAIC00NTUsNyArMzk5LDE5IEBAIHZvaWQgVk1UcmFwczo6U2lnbmFs
U2VuZGVyOjpzZW5kKCkKICAgICAgICAgICAgIFZNJiB2bSA9ICptX3ZtOwogICAgICAgICAgICAg
YXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJUaHJlYWQoKTsKICAgICAgICAgICAg
IGlmIChvcHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAgICAgICAgICAgb3B0aW9uYWxPd25l
clRocmVhZC52YWx1ZSgpLT5zaWduYWwoU0lHVVNSMSk7CisgICAgICAgICAgICAgICAgV1RGOjpz
ZW5kTWVzc2FnZSgqb3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLmdldCgpLCBbXSAoc2lnaW5m
b190KiwgdWNvbnRleHRfdCogdWNvbnRleHQpIC0+IHZvaWQgeworICAgICAgICAgICAgICAgICAg
ICBTaWduYWxDb250ZXh0IGNvbnRleHQodWNvbnRleHQtPnVjX21jb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0gZmluZEFjdGl2ZVZNQW5k
U3RhY2tCb3VuZHMoY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVWTUFu
ZFN0YWNrQm91bmRzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBWTSogdm0gPSBhY3RpdmVW
TUFuZFN0YWNrQm91bmRzLnZhbHVlKCkuZmlyc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodm0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0JvdW5kcyBzdGFja0Jv
dW5kcyA9IGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMudmFsdWUoKS5zZWNvbmQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVk1UcmFwcyYgdHJhcHMgPSB2bS0+dHJhcHMoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodHJhcHMubmVlZFRyYXBIYW5kbGluZygpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFwcy50cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRz
KGNvbnRleHQsIHN0YWNrQm91bmRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTVRyYXBzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmgKaW5kZXggZmRiYTJhZmQ4MzFmMDBkYmUyYmI1NTZhYmExM2M1YWRiZDgxMGIxNi4uNTQyNWIx
ODgzMzI3ZmFkODNlYzYwMjQyNmFlOTY4MTM1ZmNiMDU4MSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNVHJhcHMuaApAQCAtNDIsNyArNDIsOCBAQCBjbGFzcyBWTVRyYXBzIHsKIHB1
YmxpYzoKICAgICBlbnVtIGNsYXNzIEVycm9yIHsKICAgICAgICAgTm9uZSwKLSAgICAgICAgTG9j
a1VuYXZhaWxhYmxlCisgICAgICAgIExvY2tVbmF2YWlsYWJsZSwKKyAgICAgICAgTm90SklUQ29k
ZQogICAgIH07CiAKICAgICBlbnVtIEV2ZW50VHlwZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKaW5kZXggMjY1YzY2MTU1ZDFh
ZGI4ZGE5OGJkNzg5NDIwMjkyOTgzZDYxMjczZC4uYWVlNmRkMjhkODUyN2M3Y2RmMWZkMWQ5MDhh
YWEzMjRjZDUyNjhlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1Np
Z2lsbENyYXNoQW5hbHl6ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9T
aWdpbGxDcmFzaEFuYWx5emVyLmNwcApAQCAtMzcsOSArMzcsNyBAQAogI2luY2x1ZGUgIkE2NERP
cGNvZGUuaCIKICNlbmRpZgogCi0jaWYgSEFWRShTSUdOQUxfSCkKLSNpbmNsdWRlIDxzaWduYWwu
aD4KLSNlbmRpZgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIAogbmFtZXNwYWNl
IEpTQyB7CiAKQEAgLTE0MSw1OCArMTM5LDE5IEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKICAg
ICB2b2lkKiBmcmFtZVBvaW50ZXI7CiB9OwogCi1zdHJ1Y3Qgc2lnYWN0aW9uIG9yaWdpbmFsU2ln
SWxsQWN0aW9uOwotCi1zdGF0aWMgdm9pZCBoYW5kbGVDcmFzaChpbnQgc2lnbmFsTnVtYmVyLCBz
aWdpbmZvX3QqIGluZm8sIHZvaWQqIHVhcCkKLXsKLSAgICBTaWduYWxDb250ZXh0IGNvbnRleHQo
c3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0KTsKLSAgICBTaWdpbGxD
cmFzaEFuYWx5emVyJiBhbmFseXplciA9IFNpZ2lsbENyYXNoQW5hbHl6ZXI6Omluc3RhbmNlKCk7
Ci0gICAgYXV0byBjcmFzaFNvdXJjZSA9IGFuYWx5emVyLmFuYWx5emUoY29udGV4dCk7Ci0KLSAg
ICBhdXRvIG9yaWdpbmFsQWN0aW9uID0gb3JpZ2luYWxTaWdJbGxBY3Rpb24uc2Ffc2lnYWN0aW9u
OwotICAgIGlmIChvcmlnaW5hbEFjdGlvbikgewotICAgICAgICAvLyBJdCBpcyBhbHdheXMgc2Fm
ZSB0byBqdXN0IGludm9rZSB0aGUgb3JpZ2luYWwgaGFuZGxlciB1c2luZyB0aGUgc2Ffc2lnYWN0
aW9uIGZvcm0KLSAgICAgICAgLy8gd2l0aG91dCBjaGVja2luZyBmb3IgdGhlIFNBX1NJR0lORk8g
ZmxhZy4gSWYgdGhlIG9yaWdpbmFsIGhhbmRsZXIgaXMgb2YgdGhlCi0gICAgICAgIC8vIHNhX2hh
bmRsZXIgZm9ybSwgaXQgd2lsbCBqdXN0IGlnbm9yZSB0aGUgMm5kIGFuZCAzcmQgYXJndW1lbnRz
IHNpbmNlIHNhX2hhbmRsZXIgaXMgYQotICAgICAgICAvLyBzdWJzZXQgb2Ygc2Ffc2lnYWN0aW9u
LiBUaGlzIGlzIHdoYXQgdGhlIG1hbiBwYWdlcyBzYXlzIHRoZSBPUyBkb2VzIGFueXdheS4KLSAg
ICAgICAgb3JpZ2luYWxBY3Rpb24oc2lnbmFsTnVtYmVyLCBpbmZvLCB1YXApOwotICAgIH0KLQot
ICAgIGlmIChjcmFzaFNvdXJjZSA9PSBTaWdpbGxDcmFzaEFuYWx5emVyOjpDcmFzaFNvdXJjZTo6
SmF2YVNjcmlwdENvcmUpIHsKLSAgICAgICAgLy8gUmVzdG9yZSB0aGUgZGVmYXVsdCBoYW5kbGVy
IHNvIHRoYXQgd2UgY2FuIGdldCBhIGNvcmUgZHVtcC4KLSAgICAgICAgc3RydWN0IHNpZ2FjdGlv
biBkZWZhdWx0QWN0aW9uOwotICAgICAgICBkZWZhdWx0QWN0aW9uLnNhX2hhbmRsZXIgPSBTSUdf
REZMOwotICAgICAgICBzaWdmaWxsc2V0KCZkZWZhdWx0QWN0aW9uLnNhX21hc2spOwotICAgICAg
ICBkZWZhdWx0QWN0aW9uLnNhX2ZsYWdzID0gMDsKLSAgICAgICAgc2lnYWN0aW9uKFNJR0lMTCwg
JmRlZmF1bHRBY3Rpb24sIG51bGxwdHIpOwotICAgIH0gZWxzZSBpZiAoIW9yaWdpbmFsQWN0aW9u
KSB7Ci0gICAgICAgIC8vIFByZS1lbXB0aXZlbHkgcmVzdG9yZSB0aGUgZGVmYXVsdCBoYW5kbGVy
IGJ1dCB3ZSBtYXkgcm9sbCBpdCBiYWNrIGJlbG93LgotICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9u
IGN1cnJlbnRBY3Rpb247Ci0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gZGVmYXVsdEFjdGlvbjsK
LSAgICAgICAgZGVmYXVsdEFjdGlvbi5zYV9oYW5kbGVyID0gU0lHX0RGTDsKLSAgICAgICAgc2ln
ZmlsbHNldCgmZGVmYXVsdEFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgZGVmYXVsdEFjdGlvbi5z
YV9mbGFncyA9IDA7Ci0gICAgICAgIHNpZ2FjdGlvbihTSUdJTEwsICZkZWZhdWx0QWN0aW9uLCAm
Y3VycmVudEFjdGlvbik7Ci0KLSAgICAgICAgaWYgKGN1cnJlbnRBY3Rpb24uc2Ffc2lnYWN0aW9u
ICE9IGhhbmRsZUNyYXNoKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlcmUn
cyBhIGNsaWVudCBoYW5kbGVyIGluc3RhbGxlZCBhZnRlciB1cy4gVGhpcyBhbHNvIG1lYW5zCi0g
ICAgICAgICAgICAvLyB0aGF0IHRoZSBjbGllbnQgaGFuZGxlciB0aGlua3MgaXQgd2FzIGFibGUg
dG8gcmVjb3ZlciBmcm9tIHRoZSBTSUdJTEwsIGFuZAotICAgICAgICAgICAgLy8gZGlkIG5vdCB1
bmluc3RhbGwgaXRzZWxmLiBXZSBjYW4ndCBhcmd1ZSB3aXRoIHRoaXMgYmVjYXVzZSB0aGUgY3Jh
c2ggaXNuJ3QKLSAgICAgICAgICAgIC8vIGtub3duIHRvIGJlIGZyb20gYSBKYXZhU2NyaXB0Q29y
ZSBzb3VyY2UuIEhlbmNlLCByZXN0b3JlIHRoZSBjbGllbnQgaGFuZGxlcgotICAgICAgICAgICAg
Ly8gYW5kIGtlZXAgZ29pbmcuCi0gICAgICAgICAgICBzaWdhY3Rpb24oU0lHSUxMLCAmY3VycmVu
dEFjdGlvbiwgbnVsbHB0cik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHN0YXRpYyB2b2lkIGlu
c3RhbGxDcmFzaEhhbmRsZXIoKQogewogI2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKLSAg
ICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLSAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkICgqKShpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICopPihoYW5kbGVD
cmFzaCk7Ci0gICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5zYV9m
bGFncyA9IFNBX1NJR0lORk87Ci0gICAgc2lnYWN0aW9uKFNJR0lMTCwgJmFjdGlvbiwgJm9yaWdp
bmFsU2lnSWxsQWN0aW9uKTsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OklsbCwg
W10gKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKSB7CisgICAgICAgIFNpZ25hbENvbnRleHQg
Y29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRleHQpOworCisg
ICAgICAgIGlmICghaXNKSVRQQyhjb250ZXh0Lm1hY2hpbmVQQykpCisgICAgICAgICAgICByZXR1
cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOworCisgICAgICAgIFNpZ2lsbENyYXNoQW5hbHl6
ZXImIGFuYWx5emVyID0gU2lnaWxsQ3Jhc2hBbmFseXplcjo6aW5zdGFuY2UoKTsKKyAgICAgICAg
YW5hbHl6ZXIuYW5hbHl6ZShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6
Tm90SGFuZGxlZDsKKyAgICB9KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGhhbmRsZUNyYXNo
KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZh
dWx0U2lnbmFsSGFuZGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1
bHRTaWduYWxIYW5kbGVyLmNwcAppbmRleCA4OTgxMDRiZDQ4YWRiMTE4ODY1YTljOGRlZTViNTZm
NGU2NmJlYTgyLi4yZTBjOTlhMzliZWJkMzE3OGI5MTQ4ZDk1OGZlNTNlNTdhNjIyOTdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5k
bGVyLmNwcApAQCAtMzUsOSArMzUsOSBAQAogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNs
dWRlICJXYXNtVGh1bmtzLmgiCiAKLSNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDx3dGYv
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90
aHJlYWRzL1NpZ25hbHMuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApA
QCAtNTAsMTEgKzUwLDkgQEAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PHN0ZDo6
dHVwbGU8dm9pZCosIHZvaWQqPj4+IGNvZGVMb2NhdGlvbnM7IC8vICgKIAogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWV9GQVNUX01FTU9SWSkKIAotc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkU2ln
QnVzSGFuZGxlcjsKLXN0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ1NlZ3ZIYW5kbGVyOwog
c3RhdGljIGJvb2wgZmFzdEhhbmRsZXJJbnN0YWxsZWQgeyBmYWxzZSB9OwogCi1zdGF0aWMgdm9p
ZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250
ZXh0KQorc3RhdGljIFNpZ25hbEFjdGlvbiB0cmFwSGFuZGxlcihpbnQsIHNpZ2luZm9fdCogc2ln
SW5mbywgdm9pZCogdWNvbnRleHQpCiB7CiAgICAgbWNvbnRleHRfdCYgY29udGV4dCA9IHN0YXRp
Y19jYXN0PHVjb250ZXh0X3QqPih1Y29udGV4dCktPnVjX21jb250ZXh0OwogICAgIHZvaWQqIGZh
dWx0aW5nSW5zdHJ1Y3Rpb24gPSBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNv
bnRleHQpOwpAQCAtNjMsOSArNjEsNyBAQCBzdGF0aWMgdm9pZCB0cmFwSGFuZGxlcihpbnQgc2ln
bmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQogICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJKSVQgbWVtb3J5IHN0YXJ0OiAiLCBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKSksICIgZW5kOiAiLCBS
YXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVt
b3J5UG9vbCkpKTsKICAgICAvLyBGaXJzdCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgaW4g
SklUIGNvZGUgYmVmb3JlIHdlIGNhbiBhcXVpcmUgYW55IGxvY2tzLiBPdGhlcndpc2UsCiAgICAg
Ly8gd2UgbWlnaHQgaGF2ZSBjcmFzaGVkIGluIGNvZGUgdGhhdCBpcyBhbHJlYWR5IGhvbGRpbmcg
b25lIG9mIHRoZSBsb2NrcyB3ZSB3YW50IHRvIGFxdWlyZS4KLSAgICBpZiAocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpIDw9IGZhdWx0aW5n
SW5zdHJ1Y3Rpb24KLSAgICAgICAgJiYgZmF1bHRpbmdJbnN0cnVjdGlvbiA8IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkpIHsKLQorICAgIGlm
IChpc0pJVFBDKGZhdWx0aW5nSW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgIGJvb2wgZmF1bHRlZElu
QWN0aXZlRmFzdE1lbW9yeSA9IGZhbHNlOwogICAgICAgICB7CiAgICAgICAgICAgICB2b2lkKiBm
YXVsdGluZ0FkZHJlc3MgPSBzaWdJbmZvLT5zaV9hZGRyOwpAQCAtODksMTcgKzg1LDEyIEBAIHN0
YXRpYyB2b2lkIHRyYXBIYW5kbGVyKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9p
ZCogdWNvbnRleHQpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJm
b3VuZCBzdHViOiAiLCBSYXdQb2ludGVyKGV4Y2VwdGlvblN0dWIuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKICAgICAgICAgICAgICAgICAgICAgTWFjaGluZUNvbnRleHQ6OmFyZ3VtZW50
UG9pbnRlcjwxPihjb250ZXh0KSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEV4Y2VwdGlvblR5
cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKICAgICAgICAgICAgICAgICAgICAgTWFjaGlu
ZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihjb250ZXh0KSA9IGV4Y2VwdGlvblN0dWIuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICAvLyBTaW5j
ZSB3ZSBvbmx5IHVzZSBmYXN0IG1lbW9yeSBpbiBwcm9jZXNzZXMgd2UgY29udHJvbCwgaWYgd2Ug
cmVzdG9yZSB3ZSB3aWxsIGp1c3QgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIuCi0g
ICAgaWYgKHNpZ25hbCA9PSBTSUdCVVMpCi0gICAgICAgIHNpZ2FjdGlvbihzaWduYWwsICZvbGRT
aWdCdXNIYW5kbGVyLCBudWxscHRyKTsKLSAgICBlbHNlCi0gICAgICAgIHNpZ2FjdGlvbihzaWdu
YWwsICZvbGRTaWdTZWd2SGFuZGxlciwgbnVsbHB0cik7CisgICAgcmV0dXJuIFNpZ25hbEFjdGlv
bjo6Tm90SGFuZGxlZDsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWV9GQVNUX01F
TU9SWSkKQEAgLTEzMywyMiArMTI0LDEzIEBAIHZvaWQgZW5hYmxlRmFzdE1lbW9yeSgpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfRkFTVF9NRU1PUlkpCi0g
ICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotCi0gICAgICAgIGFjdGlvbi5zYV9zaWdh
Y3Rpb24gPSB0cmFwSGFuZGxlcjsKLSAgICAgICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2sp
OwotICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOwotICAgICAgICAKLSAgICAg
ICAgLy8gSW5zdGFsbGluZyBzaWduYWwgaGFuZGxlcnMgZmFpbHMgd2hlbgotICAgICAgICAvLyAx
LiBzcGVjaWZpY2llZCBzaWcgaXMgaW5jb3JyZWN0IChpbnZhbGlkIHZhbHVlcyBvciBzaWduYWwg
bnVtYmVycyB3aGljaCBjYW5ub3QgYmUgaGFuZGxlZCksIG9yCi0gICAgICAgIC8vIDIuIHNlY29u
ZCBvciB0aGlyZCBwYXJhbWV0ZXIgcG9pbnRzIGluY29ycmVjdCBwb2ludGVycy4KLSAgICAgICAg
Ly8gVGh1cywgd2UgbXVzdCBub3QgZmFpbCBpbiB0aGUgZm9sbG93aW5nIGF0dGVtcHRzLgotICAg
ICAgICBpbnQgcmV0ID0gMDsKLSAgICAgICAgcmV0ID0gc2lnYWN0aW9uKFNJR0JVUywgJmFjdGlv
biwgJm9sZFNpZ0J1c0hhbmRsZXIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmV0KTsKLQot
ICAgICAgICByZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgJmFjdGlvbiwgJm9sZFNpZ1NlZ3ZIYW5k
bGVyKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJldCk7CisgICAgICAgIGluc3RhbGxTaWdu
YWxIYW5kbGVyKFNpZ25hbDo6QnVzLCBbXSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZv
LCB2b2lkKiB1Y29udGV4dCkgeworICAgICAgICAgICAgcmV0dXJuIHRyYXBIYW5kbGVyKHNpZ25h
bCwgc2lnSW5mbywgdWNvbnRleHQpOworICAgICAgICB9KTsKKworICAgICAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OlNlZ1YsIFtdIChpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0lu
Zm8sIHZvaWQqIHVjb250ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4gdHJhcEhhbmRsZXIoc2ln
bmFsLCBzaWdJbmZvLCB1Y29udGV4dCk7CisgICAgICAgIH0pOwogCiAgICAgICAgIGNvZGVMb2Nh
dGlvbnMuY29uc3RydWN0KCk7CiAgICAgICAgIGZhc3RIYW5kbGVySW5zdGFsbGVkID0gdHJ1ZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGMzNGQxNDhiNzc4
OTFmM2RjMWYzMDczODIyODYwZjVjODBlYWRmNmQuLjQ0YWYwZDMxNjE2ZTQ3ODBlOTkyYmIxMjFh
NzVjM2I0NjNjZTQyODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTQ5LDYgKzE0OSwxMSBAQAogCQk1MTVGNzk1MDFDRkM5RjRBMDBDQ0VEOTMgLyogQ3Jv
c3NUaHJlYWRUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTVGNzk0RDFDRkM5RjRBMDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRUYXNrLmggKi87IH07
CiAJCTUxNUY3OTU2MUNGRDNBNjkwMENDRUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVGNzk1NTFDRkQzQTY5
MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oICovOyB9OwogCQk1MjE4MzAxMkM5OUU0NzZB
ODRFRUJFQTggLyogU3ltYm9sSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNzJCQkRCMTA3RkE0MjQ4ODYxNzhCOUUgLyogU3ltYm9sSW1wbC5j
cHAgKi87IH07CisJCTUzMTFCRDUzMUVBNzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDUxMUVBNzFD
QUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCAqLzsgfTsKKwkJNTMxMUJENTYxRUE3RTE1QTAwNTI1
MjgxIC8qIExvY2tsZXNzQmFnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzExQkQ1NTFFQTdFMTVBMDA1MjUyODEgLyogTG9ja2xlc3NCYWcuaCAqLzsg
fTsKKwkJNTMxMUJENTgxRUE3RTFBMTAwNTI1MjgxIC8qIFNpZ25hbHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4
MSAvKiBTaWduYWxzLmggKi87IH07CisJCTUzMTFCRDVBMUVBODFBOTYwMDUyNTI4MSAvKiBUaHJl
YWRNZXNzYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MzExQkQ1OTFFQTgxQTk2MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5oICovOyB9OworCQk1
MzExQkQ1QzFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1QjFFQTgyMkY5MDA1MjUy
ODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgKi87IH07CiAJCTUzOUVCMDYzMUQ1NTI4NDIwMEM4MkVG
NyAvKiBMRUJEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzlFQjA2MjFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovOyB9Owog
CQk1M0VDMjUzRTFFOTVBRDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFQzI1M0MxRTk1QUQzMDAwMDgz
MUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLzsgfTsKIAkJNTUzMDcxQ0ExQzQwNDI3MjAwMzg0ODk4
IC8qIFRpbnlMUlVDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTUzMDcxQzkxQzQwNDI3MjAwMzg0ODk4IC8qIFRpbnlMUlVDYWNoZS5oICovOyB9
OwpAQCAtNTQ3LDYgKzU1MiwxMSBAQAogCQk1MTVGNzk0QzFDRkM5RjRBMDBDQ0VEOTMgLyogQ3Jv
c3NUaHJlYWRDb3BpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NU
aHJlYWRDb3BpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1Rjc5NEQxQ0ZD
OUY0QTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDcm9zc1RocmVhZFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRRdWV1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaWduYWxzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMxMUJENTUxRUE3RTE1QTAwNTI1MjgxIC8qIExv
Y2tsZXNzQmFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tsZXNzQmFn
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4
MSAvKiBTaWduYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpZ25hbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMxMUJENTkxRUE4MUE5NjAwNTI1Mjgx
IC8qIFRocmVhZE1lc3NhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhy
ZWFkTWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzExQkQ1QjFFQTgy
MkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTEVCRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1M0VDMjUzQzFFOTVBRDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmlvcml0eVF1ZXVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJV
Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueUxSVUNhY2hlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDYyLDYgKzEwNzIsNyBAQAogCQkJCTBG
NjBGMzJEMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0cmVhbS5jcHAgKi8sCiAJCQkJ
MEY2MEYzMkUxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmggKi8sCiAJCQkJ
QThBNDcyQzMxNTFBODI1QTAwNDEyM0ZGIC8qIExvY2tlci5oICovLAorCQkJCTUzMTFCRDU1MUVB
N0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVzc0JhZy5oICovLAogCQkJCTUxM0UxNzBBMUNEN0Q1QkYw
MEUzNjUwQiAvKiBMb2dnaW5nQWNjdW11bGF0b3IuaCAqLywKIAkJCQkwRjMwQkE4QzFFNzg3MDhF
MDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hJRC5oICovLAogCQkJCTBGMzBCQThEMUU3ODcwOEUwMDJD
QTg0NyAvKiBMb2dnaW5nSGFzaE1hcC5oICovLApAQCAtMTE4Niw2ICsxMTk3LDggQEAKIAkJCQlF
MzIwMEFCNTFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmNwcCAqLywKIAkJCQlFMzIw
MEFCNjFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmggKi8sCiAJCQkJQThBNDczMzAx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCAqLywKKwkJCQk1MzEx
QkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgKi8sCisJCQkJNTMxMUJE
NTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLywKIAkJCQlBOEE0NzMzMjE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCAqLywKIAkJCQlBOEE0NzMzMzE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi8sCiAJCQkJQThBNDczMzUxNTFBODI1QjAwNDEyM0ZG
IC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCAqLywKQEAgLTEzMTMsNiArMTMyNiw4IEBACiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlBOEE0NzMzQTE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBo
b3JlLmNwcCAqLywKIAkJCQlBOEE0NzMzQjE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBo
b3JlLmggKi8sCisJCQkJNTMxMUJENTExRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwICov
LAorCQkJCTUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4MSAvKiBTaWduYWxzLmggKi8sCiAJCQkpOwog
CQkJcGF0aCA9IHRocmVhZHM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTQ1OCw2
ICsxNDczLDcgQEAKIAkJCQlERTVBMDlGQzFCQTM2OTkyMDAzRDQ0MjQgLyogQ29tbW9uQ3J5cHRv
U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMkI5MTE3MkUwMEZDMDA3REJEQTUgLyogQ29t
cGlsYXRpb25UaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3Mzk4MTUxQTgyNUIwMDQx
MjNGRiAvKiBDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMxMUJENTYxRUE3RTE1QTAw
NTI1MjgxIC8qIExvY2tsZXNzQmFnLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCNjk4RTFCN0M2
NDNBMDAwQzEwNzggLyogQ29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4QzE1
MUE4MjY0MDA0MTIzRkYgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMkI5QzE3
MkYyNTk2MDA3REJEQTUgLyogQ29udmVyc2lvbk1vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTUy
Myw2ICsxNTM5LDcgQEAKIAkJCQlBNzBEQTA4NDE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjE0N0IwQTE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdl
clRvU3RyaW5nQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NERDdGRjgxODZEMjkx
RTAwNzQzM0NEIC8qIEl0ZXJhdG9yQWRhcHRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMTFC
RDU4MUVBN0UxQTEwMDUyNTI4MSAvKiBTaWduYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0RE
N0ZGQTE4NkQyQTU0MDA3NDMzQ0QgLyogSXRlcmF0b3JSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNBQzkxQTgxODk0MkZDNDAwMjQ0OTM5IC8qIExDaGFyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MzlFQjA2MzFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC0xNjI5LDYgKzE2NDYsNyBAQAogCQkJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAvKiBT
dHJpbmdIYXNoRHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQxMTUxQTgy
NUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0MjE1
MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nT3BlcmF0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MzExQkQ1QTFFQTgxQTk2MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZEREJGQTgxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTZFQjFFMDE4N0QwQkQzMDAzMDEyNkYgLyogU3RyaW5nVmlldy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQjgxNTFBODI1QjAwNDEyM0ZGIC8qIHN0cnRvZC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xODUzLDggKzE4NzEsMTAgQEAKIAkJCQlGRURBQ0QzRDE2MzBG
ODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQz
QzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNUJBMTVGQjE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nQ0YuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNTMxMUJENUMxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0NDAxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RkMxODI0MzVBNjAwQTgyRTY5IC8qIFN0cmluZ0lt
cGxDRi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyog
U2lnbmFscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVGNTE4MjQzNDgwMDBBODJFNjkg
LyogU3RyaW5nSW1wbE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUYzMTgyNDMzQTkw
MEE4MkU2OSAvKiBTdHJpbmdNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRkREQkZBNzE2NjZE
RkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmggYi9Tb3VyY2UvV1RGL3d0Zi9BdG9taWNz
LmgKaW5kZXggNzcyZTZmZWJiZDJlNzE2OWQ0M2Q1MDc5NWMxZWFmYzU4ZWE2OGQxOC4uOTkwN2Iz
MmJmNGU0YmMzNDA2YTA1YjM5ODBhYzdkM2MwNjNjZmQyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvQXRvbWljcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0F0b21pY3MuaApAQCAtMTc0LDYg
KzE3NCwxMiBAQCBzdHJ1Y3QgQXRvbWljIHsKICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uKGZ1
bmMsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQsIGFib3J0TGlrZWxpaG9vZCk7CiAgICAgfQog
CisgICAgQXRvbWljKCkgPSBkZWZhdWx0OworICAgIGNvbnN0ZXhwciBBdG9taWMoVCBpbml0aWFs
KQorICAgICAgICA6IHZhbHVlKHN0ZDo6Zm9yd2FyZDxUPihpbml0aWFsKSkKKyAgICB7CisgICAg
fQorCiAgICAgc3RkOjphdG9taWM8VD4gdmFsdWU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9Mb2NrbGVzc0JhZy5oIGIvU291cmNlL1dURi93dGYvTG9ja2xlc3NCYWcuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xYjQ2YmM1YTc5ZTY0Nzk2ZGM4YzNkOWExZDAzMWU4Y2E2ZDM5ODcyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dURi93dGYvTG9ja2xlc3NCYWcuaApAQCAtMCwwICsxLDk3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJBdG9taWNzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlz
IGEgc2ltcGxlIHNpbmdsZSBjb25zdW1lciwgbXVsdGlwbGUgcHJvZHVjZXIgQmFnIGRhdGEgc3Ry
dWN0dXJlLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgTG9ja2xlc3NCYWcgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2tsZXNzQmFnKTsKKworICAgIHN0cnVjdCBOb2RlIHsK
KyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBU
IGRhdGE7CisgICAgICAgIE5vZGUqIG5leHQ7CisgICAgfTsKK3B1YmxpYzoKKyAgICBMb2NrbGVz
c0JhZygpCisgICAgICAgIDogbV9oZWFkKG51bGxwdHIpCisgICAgeworICAgIH0KKworICAgIGVu
dW0gUHVzaFJlc3VsdCB7IEVtcHR5LCBOb25FbXB0eSB9OworICAgIFB1c2hSZXN1bHQgYWRkKFQg
ZWxlbWVudCkKKyAgICB7CisgICAgICAgIE5vZGUqIG5ld05vZGUgPSBuZXcgTm9kZSgpOworICAg
ICAgICBuZXdOb2RlLT5kYXRhID0gV1RGTW92ZShlbGVtZW50KTsKKworICAgICAgICBOb2RlKiBv
bGRIZWFkOworICAgICAgICBtX2hlYWQudHJhbnNhY3Rpb24oWyZdIChOb2RlKiYgaGVhZCkgewor
ICAgICAgICAgICAgb2xkSGVhZCA9IGhlYWQ7CisgICAgICAgICAgICBuZXdOb2RlLT5uZXh0ID0g
aGVhZDsKKyAgICAgICAgICAgIGhlYWQgPSBuZXdOb2RlOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBvbGRIZWFkID09IG51bGxwdHIgPyBF
bXB0eSA6IE5vbkVtcHR5OworICAgIH0KKworICAgIC8vIENPTlNVTUVSIEZVTkNUSU9OUzogRXZl
cnl0aGluZyBiZWxvdyBoZXJlIGlzIG9ubHkgc2FmZSB0byBjYWxsIGZyb20gdGhlIGNvbnN1bWVy
IHRocmVhZC4KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgc2FmZSB0byBjYWxs
IGZyb20gbW9yZSB0aGFuIG9uZSB0aHJlYWQsIGJ1dCBPTkxZIGlmIG5vIHRocmVhZCBjYW4gY2Fs
bCBjb25zdW1lQWxsLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBp
dGVyYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0g
bV9oZWFkLmxvYWQoKTsKKyAgICAgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgICAgIGNvbnN0
IFQmIGRhdGEgPSBub2RlLT5kYXRhOworICAgICAgICAgICAgZnVuYyhkYXRhKTsKKyAgICAgICAg
ICAgIG5vZGUgPSBub2RlLT5uZXh0OworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGNvbnN1bWVBbGwoY29uc3QgRnVuY3RvciYgZnVu
YykKKyAgICB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hlYWQuZXhjaGFuZ2UobnVsbHB0cik7
CisgICAgICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgICAgICBmdW5jKFdURk1vdmUobm9kZS0+
ZGF0YSkpOworICAgICAgICAgICAgTm9kZSogb2xkTm9kZSA9IG5vZGU7CisgICAgICAgICAgICBu
b2RlID0gbm9kZS0+bmV4dDsKKyAgICAgICAgICAgIGRlbGV0ZSBvbGROb2RlOworICAgICAgICB9
CisgICAgfQorCitwcml2YXRlOgorICAgIEF0b21pYzxOb2RlKj4gbV9oZWFkOworfTsKKyAgICAK
K30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVz
c2FnZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
YWFkM2I3NGM0MzBmNzJmOGJkMzM3YWJiZDdlMjgxOWVlMjdmNzQ1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKQEAgLTAsMCArMSwxNjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkTWVzc2FnZS5oIgorCisjaWYgVVNFKFBUSFJFQURTKQor
CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2Vy
Lmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorCisKK25hbWVzcGFjZSBXVEYg
eworCitjb25zdCBib29sIHZlcmJvc2UgPSB0cnVlOworCitjbGFzcyBUaHJlYWRNZXNzYWdlRGF0
YSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgVGhyZWFkTWVz
c2FnZURhdGEoY29uc3QgVGhyZWFkTWVzc2FnZSYgbSkKKyAgICAgICAgOiByYW4oZmFsc2UpCisg
ICAgICAgICwgbWVzc2FnZShtKQorICAgIHsKKyAgICB9CisKKyAgICBBdG9taWM8Ym9vbD4gcmFu
OworICAgIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2U7Cit9OworCitlbnVtIEZpbGVEZXNj
cmlwdG9yIHsKKyAgICBSZWFkLAorICAgIFdyaXRlLAorICAgIE51bWJlck9mRmlsZURlc2NyaXB0
b3JzLAorfTsKKworc3RhdGljIGludCBmaWxlRGVzY3JpcHRvcnNbTnVtYmVyT2ZGaWxlRGVzY3Jp
cHRvcnNdOworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IG1hZ2ljQnl0ZSA9ICJkIjsKKworCit2
b2lkIGluaXRpYWxpemVUaHJlYWRNZXNzYWdlcygpCit7CisgICAgaW50IHJlc3VsdCA9IHBpcGUo
ZmlsZURlc2NyaXB0b3JzKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKKworICAgIGlu
dCBmbGFncyA9IGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tXcml0ZV0sIEZfR0VURkwpOworICAgIHJl
c3VsdCA9IGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tXcml0ZV0sIEZfU0VURkwsIGZsYWdzIHwgT19O
T05CTE9DSyB8IE9fQVBQRU5EKTsKKyAgICBmbGFncyA9IGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tX
cml0ZV0sIEZfR0VURkwpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCAhPSAtMSk7CisgICAg
UkVMRUFTRV9BU1NFUlQoKGZsYWdzICYgT19OT05CTE9DSykgJiYgKGZsYWdzICYgT19BUFBFTkQp
KTsKKworICAgIGZsYWdzID0gZmNudGwoZmlsZURlc2NyaXB0b3JzW1JlYWRdLCBGX0dFVEZMKTsK
KyAgICByZXN1bHQgPSBmY250bChmaWxlRGVzY3JpcHRvcnNbUmVhZF0sIEZfU0VURkwsIGZsYWdz
ICYgfk9fTk9OQkxPQ0spOworICAgIGZsYWdzID0gZmNudGwoZmlsZURlc2NyaXB0b3JzW1JlYWRd
LCBGX0dFVEZMKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQgIT0gLTEpOworICAgIFJFTEVB
U0VfQVNTRVJUKCEoZmxhZ3MgJiBPX05PTkJMT0NLKSk7Cit9CisKK1NVUFBSRVNTX0FTQU4KK01l
c3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVh
ZE1lc3NhZ2UmIG1lc3NhZ2UpCit7CisgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0YXJ0aW5n
IHNlbmQiKTsKKyAgICBjb25zdGV4cHIgU2lnbmFsIHNpZ25hbCA9IFNpZ25hbDo6VXNyOworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtd
IHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoc2lnbmFsLCBbXSAoaW50LCBzaWdpbmZv
X3QqIGluZm8sIHZvaWQqIHVhcCkgeworICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
ImluIGhhbmRsZXIiKTsKKyAgICAgICAgICAgIFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpjdXJy
ZW50TWF5QmVOdWxsKCk7CisKKyAgICAgICAgICAgIGlmICghdGhyZWFkKSB7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuKCJXZSBzb21laG93IGdvdCBhIG1lc3NhZ2Ugb24gYSB0aHJlYWQgdGhh
dCBkaWRuJ3QgaGF2ZSBhIFdURjo6VGhyZWFkIGluaXRpYWxpemVkLCB3ZSBwcm9iYWJseSBkZWFk
bG9ja2VkLCBoYWxwLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5v
dEhhbmRsZWQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRocmVhZC0+dGhyZWFkTWVz
c2FnZXMoKS5jb25zdW1lQWxsKFsmXSAoVGhyZWFkTWVzc2FnZURhdGEqIGRhdGEpIHsKKyAgICAg
ICAgICAgICAgICBkYXRhLT5tZXNzYWdlKGluZm8sIHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1
YXApKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5yYW4uc3RvcmUodHJ1ZSk7CisgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSwgd2UgY2FuJ3QgY2hlY2sgdGhl
IGVycm5vIGhlcmUgc2luY2Ugb3RoZXIgdGhyZWFkcyBtYXkgYmUgZG9pbmcKKyAgICAgICAgICAg
IC8vIG90aGVyIGNhbGxzIHdoaWNoIHNldCBpdCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIndyaXRpbmcgYnl0ZSIpOworICAgICAgICAgICAgd2hp
bGUgKHdyaXRlKGZpbGVEZXNjcmlwdG9yc1tXcml0ZV0sIG1hZ2ljQnl0ZSwgMSkgPT0gLTEpIHsg
fQorICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImxlYXZpbmcgaGFuZGxlciIpOwor
ICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsKKyAgICAgICAgfSk7Cisg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJoYW5kbGVyIGluc3RhbGxlZCIpOworICAgIH0p
OworCisKKyAgICAvLyBTaW5jZSB3ZSBhcmUgZ3VhcmVudGVlZCBub3QgdG8gcmV0dXJuIHVudGls
IHdlIGdldCBhIHJlc3BvbnNlIGZyb20gdGhlIG90aGVyIHRocmVhZCB0aGlzIGlzIG9rLgorICAg
IFRocmVhZE1lc3NhZ2VEYXRhIGRhdGEobWVzc2FnZSk7CisKKyAgICB0aHJlYWQudGhyZWFkTWVz
c2FnZXMoKS5hZGQoJmRhdGEpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJtZXNzYWdlIHF1
ZXVlZCIpOworICAgIGJvb2wgcmVzdWx0ID0gdGhyZWFkLnNpZ25hbCh0b1N5c3RlbVNpZ25hbChz
aWduYWwpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIE1lc3NhZ2VTdGF0dXM6
OlRocmVhZEV4aXRlZDsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJoZXJlIik7CisKKyAgICBzdGF0aWMgU3RhdGljTG9jayByZWFkTG9jazsK
KyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihyZWFkTG9jayk7
CisgICAgICAgIGNvbnN0ZXhwciBzaXplX3QgYnVmZmVyU2l6ZSA9IDE2OworICAgICAgICBjaGFy
IGJ1ZmZlcltidWZmZXJTaXplXTsKKworICAgICAgICAvLyBJdCdzIGFsd2F5cyBzYWZlIHRvIGNs
ZWFyIHRoZSBwaXBlIGJlY2F1c2Ugb25seSBvbmUgdGhyZWFkIGNhbiBldmVyIGJsb2NrIHRyeWlu
ZyB0byByZWFkCisgICAgICAgIC8vIGZyb20gdGhlIHBpcGUuIFRodXMsIGVhY2ggYnl0ZSB3ZSBj
bGVhciBmcm9tIHRoZSBwaXBlIGFjdHVhbGx5IGp1c3QgY29ycmVzcG9uZHMgdG8gc29tZSB0YXNr
CisgICAgICAgIC8vIHRoYXQgaGFzIGFscmVhZHkgZmluaXNoZWQuIFdlIGFjdGl2ZWx5IHdhbnQg
dG8gZW5zdXJlIHRoYXQgdGhlIHBpcGUgZG9lcyBub3Qgb3ZlcmZpbGwgYmVjYXVzZQorICAgICAg
ICAvLyBvdGhlcndpc2Ugb3VyIHdyaXRlcnMgbWlnaHQgc3BpbiB0cnlpbmcgdG8gd3JpdGUuCisg
ICAgICAgIGF1dG8gY2xlYXJQaXBlID0gWyZdIHsKKyAgICAgICAgICAgIGludCBmbGFncyA9IGZj
bnRsKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgRl9HRVRGTCk7CisgICAgICAgICAgICBBU1NFUlQo
IShmbGFncyAmIE9fTk9OQkxPQ0spKTsKKyAgICAgICAgICAgIGZjbnRsKGZpbGVEZXNjcmlwdG9y
c1tSZWFkXSwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKTsKKworICAgICAgICAgICAgLy8g
VW5mb3J0dW5hdGVseSwgd2UgY2FuJ3QgY2hlY2sgdGhlIGVycm5vIGhlcmUgc2luY2Ugb3RoZXIg
dGhyZWFkcyBtYXkgYmUgZG9pbmcKKyAgICAgICAgICAgIC8vIG90aGVyIGNhbGxzIHdoaWNoIHNl
dCBpdCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgd2hpbGUgKHJlYWQoZmlsZURlc2Ny
aXB0b3JzW1JlYWRdLCBidWZmZXIsIGJ1ZmZlclNpemUpICE9IC0xKSB7IH0KKworICAgICAgICAg
ICAgZmNudGwoZmlsZURlc2NyaXB0b3JzW1JlYWRdLCBGX1NFVEZMLCBmbGFncyk7CisgICAgICAg
IH07CisKKyAgICAgICAgaWYgKGRhdGEucmFuLmxvYWQoKSkgeworICAgICAgICAgICAgY2xlYXJQ
aXBlKCk7CisgICAgICAgICAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6TWVzc2FnZVJhbjsKKyAg
ICAgICAgfQorCisgICAgICAgIHJlYWQoZmlsZURlc2NyaXB0b3JzW1JlYWRdLCBidWZmZXIsIDEp
OworICAgICAgICBBU1NFUlQoYnVmZmVyWzBdID09IG1hZ2ljQnl0ZVswXSk7CisgICAgICAgIGNs
ZWFyUGlwZSgpOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZE1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YWU1M2YyOWNmN2U4ZmIwMGVmOTIxMWQxNmNlMmNkZWQ2
MDNlYzFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5o
CkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3
dGYvU2NvcGVkTGFtYmRhLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgVVNF
KFBUSFJFQURTKQorCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBpbml0aWFsaXplVGhyZWFkTWVz
c2FnZXMoKTsKKworY2xhc3MgVGhyZWFkTWVzc2FnZURhdGE7Cit1c2luZyBUaHJlYWRNZXNzYWdl
ID0gU2NvcGVkTGFtYmRhPHZvaWQoc2lnaW5mb190KiwgdWNvbnRleHRfdCopPjsKKworZW51bSBj
bGFzcyBNZXNzYWdlU3RhdHVzIHsKKyAgICBNZXNzYWdlUmFuLAorICAgIFRocmVhZEV4aXRlZCwK
K307CisKKy8vIFRoaXMgbWV0aG9kIGFsbG93cyB1cyB0byBzZW5kIGEgbWVzc2FnZSB3aGljaCB3
aWxsIGJlIHJ1biBpbiBhIHNpZ25hbCBoYW5kbGVyIG9uIHRoZSBkZXNpcmVkIHRocmVhZC4KKy8v
IFRoZXJlIGFyZSBzZXZlcmFsIGNhdmVhdGVzIHRvIHRoaXMgbWV0aG9kIGhvd2V2ZXIsIFRoaXMg
ZnVuY3Rpb24gdXNlcyBzaWduYWxzIHNvIHlvdXIgbWVzc2FnZSBzaG91bGQKKy8vIGJlIHN5bmMg
c2lnbmFsIHNhZmUuCitNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYsIGNv
bnN0IFRocmVhZE1lc3NhZ2UmKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK01lc3Nh
Z2VTdGF0dXMgc2VuZE1lc3NhZ2UoVGhyZWFkJiB0YXJnZXRUaHJlYWQsIGNvbnN0IEZ1bmN0b3Im
IGZ1bmMpCit7CisgICAgYXV0byBsYW1iZGEgPSBzY29wZWRMYW1iZGFSZWY8dm9pZChzaWdpbmZv
X3QqLCB1Y29udGV4dF90Kik+KGZ1bmMpOworICAgIHJldHVybiBzZW5kTWVzc2FnZVNjb3BlZCh0
YXJnZXRUaHJlYWQsIGxhbWJkYSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBX
VEY6OnNlbmRNZXNzYWdlOworCisjZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5j
cHAKaW5kZXggZmVmNTgxMWE3ZDU3YmI4OWRjMDM3NWY5MTEyMmQ1YTI0OGNiMjI4Ni4uNWUzNDQ1
MWNlZGFlNTE5Y2RiY2UzYTBjNDIyM2VlODUyZmI0NzhmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3Rm
L1JhbmRvbU51bWJlclNlZWQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkSG9sZGVyLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZE1lc3NhZ2UuaD4KICNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KIApAQCAtMTc4LDYgKzE3OSw3IEBA
IHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiAgICAgICAgIHd0ZlRocmVhZERhdGEoKTsKICAg
ICAgICAgaW5pdGlhbGl6ZURhdGVzKCk7CiAgICAgICAgIFRocmVhZDo6aW5pdGlhbGl6ZVBsYXRm
b3JtVGhyZWFkaW5nKCk7CisgICAgICAgIGluaXRpYWxpemVUaHJlYWRNZXNzYWdlcygpOwogICAg
IH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaCBiL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IGJkMWY4ZjMzZTJhYWI1YjVjZGZiNGNjYjQ2OWI4
NTg1ZTlhMjQ2NGUuLmMyMGE2NWUyMmJmZDUwM2Q2YjU2NTE1ZDk0ODQ2NzA2NjYyODExNmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZy5oCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4K
ICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5j
bHVkZSA8d3RmL0xvY2tsZXNzQmFnLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CkBAIC01Niw2ICs1Nyw4IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitjbGFzcyBUaHJl
YWRNZXNzYWdlRGF0YTsKKwogdXNpbmcgVGhyZWFkSWRlbnRpZmllciA9IHVpbnQzMl90OwogdHlw
ZWRlZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKIApAQCAtNzUsNiAr
NzgsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIFRocmVhZCBvYmplY3QuCiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWQmIGN1cnJlbnQoKTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFRocmVhZCogY3VycmVudE1heUJlTnVsbCgpOwogCiAgICAgLy8gUmV0
dXJucyBUaHJlYWRJZGVudGlmaWVyIGRpcmVjdGx5LiBJdCBpcyB1c2VmdWwgaWYgdGhlIHVzZXIg
b25seSBjYXJlcyBhYm91dCBpZGVudGl0eQogICAgIC8vIG9mIHRocmVhZHMuIEF0IHRoYXQgdGlt
ZSwgdXNlcnMgc2hvdWxkIGtub3cgdGhhdCBob2xkaW5nIHRoaXMgVGhyZWFkSWRlbnRpZmllciBk
b2VzIG5vdCBlbnN1cmUKQEAgLTEzMiw3ICsxMzYsMTEgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZVBsYXRmb3JtVGhyZWFkaW5nKCk7CiAKLXByaXZhdGU6CisjaWYgVVNF
KFBUSFJFQURTKQorICAgIExvY2tsZXNzQmFnPFRocmVhZE1lc3NhZ2VEYXRhKj4mIHRocmVhZE1l
c3NhZ2VzKCkgeyByZXR1cm4gbV90aHJlYWRNZXNzYWdlczsgfQorI2VuZGlmCisKK3Byb3RlY3Rl
ZDoKICAgICBUaHJlYWQoKTsKIAogICAgIC8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNpZmljIFRo
cmVhZDo6Y3JlYXRlIGltcGxlbWVudGF0aW9uLgpAQCAtMTc3LDYgKzE4NSw4IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2RpZEV4aXQgeyBmYWxzZSB9OwogI2lmIFVTRShQVEhSRUFEUykKICAgICBw
dGhyZWFkX3QgbV9oYW5kbGU7CisKKyAgICBMb2NrbGVzc0JhZzxUaHJlYWRNZXNzYWdlRGF0YSo+
IG1fdGhyZWFkTWVzc2FnZXM7CiAjaWYgT1MoREFSV0lOKQogICAgIG1hY2hfcG9ydF90IG1fcGxh
dGZvcm1UaHJlYWQ7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5n
UHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCmluZGV4
IDNlZTlhNWY1NDVlYWYxMjg5OTBlNWE5YTNjMDE1NDg4NTI1YmZmZDcuLjFhNWQ5OWY2MTRmNWQ5
NWFjZjYxNzFlZjAxZDAzZDE0YzIxYzdmZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZGluZ1B0aHJlYWRzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFk
cy5jcHAKQEAgLTI2NCwxMSArMjY0LDE4IEBAIHZvaWQgVGhyZWFkOjpkZXRhY2goKQogICAgICAg
ICBkaWRCZWNvbWVEZXRhY2hlZCgpOwogfQogCi1UaHJlYWQmIFRocmVhZDo6Y3VycmVudCgpCitU
aHJlYWQqIFRocmVhZDo6Y3VycmVudE1heUJlTnVsbCgpCiB7CiAgICAgVGhyZWFkSG9sZGVyKiBk
YXRhID0gVGhyZWFkSG9sZGVyOjpjdXJyZW50KCk7CiAgICAgaWYgKGRhdGEpCi0gICAgICAgIHJl
dHVybiBkYXRhLT50aHJlYWQoKTsKKyAgICAgICAgcmV0dXJuICZkYXRhLT50aHJlYWQoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQoreworICAg
IGlmIChUaHJlYWQqIGN1cnJlbnQgPSBjdXJyZW50TWF5QmVOdWxsKCkpCisgICAgICAgIHJldHVy
biAqY3VycmVudDsKIAogICAgIC8vIE5vdCBhIFdURi1jcmVhdGVkIHRocmVhZCwgVGhyZWFkSWRl
bnRpZmllciBpcyBub3QgZXN0YWJsaXNoZWQgeWV0LgogICAgIFJlZlB0cjxUaHJlYWQ+IHRocmVh
ZCA9IGFkb3B0UmVmKG5ldyBUaHJlYWQoKSk7CkBAIC0yODYsNiArMjkzLDggQEAgVGhyZWFkSWRl
bnRpZmllciBUaHJlYWQ6OmN1cnJlbnRJRCgpCiBib29sIFRocmVhZDo6c2lnbmFsKGludCBzaWdu
YWxOdW1iZXIpCiB7CiAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobV9t
dXRleCk7CisgICAgaWYgKGhhc0V4aXRlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aW50IGVyck5vID0gcHRocmVhZF9raWxsKG1faGFuZGxlLCBzaWduYWxOdW1iZXIpOwogICAgIHJl
dHVybiAhZXJyTm87IC8vIEEgMCBlcnJObyBtZWFucyBzdWNjZXNzLgogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RocmVh
ZHMvU2lnbmFscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjJkNzE4N2UwNTU4YTk5ODM1NWM4NmFmNjliMDc0
ZTFmNDMyZTQxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2ln
bmFscy5jcHAKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2lnbmFscy5o
IgorCisjaWYgVVNFKFBUSFJFQURTKQorCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8
d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9M
b2NrbGVzc0JhZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworc3RhdGljIExvY2tsZXNzQmFnPFNp
Z25hbEhhbmRsZXI+IGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJP
ZlNpZ25hbHMpXSA9IHsgfTsKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFjdGlvbnNbc3Rh
dGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOworc3RhdGljIHN0ZDo6
b25jZV9mbGFnIGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6
Ok51bWJlck9mU2lnbmFscyldOworCitzdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBz
aWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogbWNvbnRleHQpCit7CisgICAgU2lnbmFsIHNpZ25h
bCA9IGZyb21TeXN0ZW1TaWduYWwoc2lnKTsKKworICAgIGF1dG8gcmVzdG9yZURlZmF1bHQgPSBb
Jl0geworICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGRlZmF1bHRBY3Rpb247CisgICAgICAgIGRl
ZmF1bHRBY3Rpb24uc2FfaGFuZGxlciA9IFNJR19ERkw7CisgICAgICAgIHNpZ2ZpbGxzZXQoJmRl
ZmF1bHRBY3Rpb24uc2FfbWFzayk7CisgICAgICAgIGRlZmF1bHRBY3Rpb24uc2FfZmxhZ3MgPSAw
OworICAgICAgICBzaWdhY3Rpb24oc2lnLCAmZGVmYXVsdEFjdGlvbiwgbnVsbHB0cik7CisgICAg
fTsKKworICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBidXQgd2UgbWlnaHQgYXMgd2VsbCBi
ZSBjYXJlZnVsLgorICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpVbmtub3duKSB7CisgICAgICAg
IGRhdGFMb2dMbigiV2Ugc29tZWhvdyBnb3QgY2FsbGVkIGZvciBhbiB1bmtub3duIHNpZ25hbCAi
LCBzaWcsICIsIGhhbHAuIik7CisgICAgICAgIHJlc3RvcmVEZWZhdWx0KCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBib29sIGRpZEhhbmRsZSA9IGZhbHNlOworICAgIGJvb2wgcmVz
dG9yZURlZmF1bHRIYW5kbGVyID0gZmFsc2U7CisgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6
ZV90PihzaWduYWwpXS5pdGVyYXRlKFsmXSAoY29uc3QgU2lnbmFsSGFuZGxlciYgaGFuZGxlcikg
eworICAgICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnLCBpbmZvLCBtY29udGV4dCkpIHsKKyAgICAg
ICAgY2FzZSBTaWduYWxBY3Rpb246OkhhbmRsZWQ6CisgICAgICAgICAgICBkaWRIYW5kbGUgPSB0
cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpGb3Jj
ZURlZmF1bHQ6CisgICAgICAgICAgICByZXN0b3JlRGVmYXVsdEhhbmRsZXIgPSB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0pOworCisgICAgaWYgKHJlc3RvcmVEZWZhdWx0SGFuZGxlcikgeworICAg
ICAgICByZXN0b3JlRGVmYXVsdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3Ry
dWN0IHNpZ2FjdGlvbiYgb2xkQWN0aW9uID0gb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+
KHNpZ25hbCldOworICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpVc3IpIHsKKyAgICAgICAgaWYg
KG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24pCisgICAgICAgICAgICBvbGRBY3Rpb24uc2Ffc2lnYWN0
aW9uKHNpZywgaW5mbywgbWNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFkaWRIYW5kbGUpIHsKKyAgICAgICAgaWYgKG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24pIHsK
KyAgICAgICAgICAgIG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZvLCBtY29udGV4dCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICByZXN0b3JlRGVmYXVs
dCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIGluc3RhbGxTaWduYWxIYW5k
bGVyKFNpZ25hbCBzaWduYWwsIFNpZ25hbEhhbmRsZXImJiBoYW5kbGVyKQoreworICAgIEFTU0VS
VChzaWduYWwgPCBTaWduYWw6OlVua25vd24pOworICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNp
emVfdD4oc2lnbmFsKV0uYWRkKFdURk1vdmUoaGFuZGxlcikpOworCisgICAgc3RkOjpjYWxsX29u
Y2UoaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLCBbJl0g
eworICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKyAgICAgICAgYWN0aW9uLnNhX3Np
Z2FjdGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7CisgICAgICAgIHNpZ2ZpbGxzZXQoJmFjdGlvbi5z
YV9tYXNrKTsKKyAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKKyAgICAgICAg
c2lnYWN0aW9uKHRvU3lzdGVtU2lnbmFsKHNpZ25hbCksICZhY3Rpb24sICZvbGRBY3Rpb25zW3N0
YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0pOworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3RocmVhZHMvU2lnbmFscy5oIGIvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDNhMWQyZTU4MDg4MWJhZTkzMzllMTY3ODE4YTdiOWVmMWI4MGZjMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCkBAIC0wLDAg
KzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFVTRShQVEhSRUFEUykKKworI2luY2x1ZGUgPHNpZ25hbC5oPgor
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCituYW1lc3BhY2UgV1RGIHsKKworZW51bSBjbGFz
cyBTaWduYWwgeworICAgIC8vIFVzciB3aWxsIGFsd2F5cyBjaGFpbiB0byBhbnkgbm9uLWRlZmF1
bHQgaGFuZGxlciBpbnN0YWxsIGJlZm9yZSB1cy4gU2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIGtu
b3cKKyAgICAvLyBpZiBhIHNpZ25hbCB3YXMgaW50ZW5kZWQgZXhjbHVzaXZlbHkgZm9yIHVzLgor
ICAgIFVzciwKKworICAgIC8vIFRoZXNlIHNpZ25hbHMgd2lsbCBvbmx5IGNoYWluIGlmIHdlIGRv
bid0IGhhdmUgYSBoYW5kbGVyIHRoYXQgY2FuIHByb2Nlc3MgdGhlbS4gSWYgdGhlcmUgaXMgbm90
aGluZworICAgIC8vIHRvIGNoYWluIHRvIHdlIHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBh
bmQgY3Jhc2guCisgICAgVHJhcCwKKyAgICBJbGwsCisgICAgU2VnViwKKyAgICBCdXMsCisgICAg
TnVtYmVyT2ZTaWduYWxzLAorICAgIFVua25vd24gPSBOdW1iZXJPZlNpZ25hbHMKK307CisKK2lu
bGluZSBpbnQgdG9TeXN0ZW1TaWduYWwoU2lnbmFsIHNpZ25hbCkKK3sKKyAgICBzd2l0Y2ggKHNp
Z25hbCkgeworICAgIGNhc2UgU2lnbmFsOjpTZWdWOiByZXR1cm4gU0lHU0VHVjsKKyAgICBjYXNl
IFNpZ25hbDo6QnVzOiByZXR1cm4gU0lHQlVTOworICAgIGNhc2UgU2lnbmFsOjpJbGw6IHJldHVy
biBTSUdJTEw7CisgICAgY2FzZSBTaWduYWw6OlVzcjogcmV0dXJuIFNJR1VTUjI7CisgICAgY2Fz
ZSBTaWduYWw6OlRyYXA6IHJldHVybiBTSUdUUkFQOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUgU2lnbmFs
IGZyb21TeXN0ZW1TaWduYWwoaW50IHNpZ25hbCkKK3sKKyAgICBzd2l0Y2ggKHNpZ25hbCkgewor
ICAgIGNhc2UgU0lHU0VHVjogcmV0dXJuIFNpZ25hbDo6U2VnVjsKKyAgICBjYXNlIFNJR0JVUzog
cmV0dXJuIFNpZ25hbDo6QnVzOworICAgIGNhc2UgU0lHSUxMOiByZXR1cm4gU2lnbmFsOjpJbGw7
CisgICAgY2FzZSBTSUdVU1IyOiByZXR1cm4gU2lnbmFsOjpVc3I7CisgICAgY2FzZSBTSUdUUkFQ
OiByZXR1cm4gU2lnbmFsOjpUcmFwOworICAgIGRlZmF1bHQ6IHJldHVybiBTaWduYWw6OlVua25v
d247CisgICAgfQorfQorCitlbnVtIGNsYXNzIFNpZ25hbEFjdGlvbiB7CisgICAgSGFuZGxlZCwK
KyAgICBOb3RIYW5kbGVkLAorICAgIEZvcmNlRGVmYXVsdAorfTsKKwordXNpbmcgU2lnbmFsSGFu
ZGxlciA9IEZ1bmN0aW9uPFNpZ25hbEFjdGlvbihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKT47CisK
Ky8vIENhbGwgdGhpcyBtZXRob2Qgd2hlbmV2ZXIgeW91IHdhbnQgdG8gaW5zdGFsbCBhIHNpZ25h
bCBoYW5kbGVyLiBJdCdzIG9rIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBsYXppbHkuCisvLyBOb3Rl
OiBZb3VyIHNpZ25hbCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGhhbmRs
ZXIgZm9yIHRoZSBkZXNpcmVkIHNpZ25hbCBpcyBjYWxsZWQuCisvLyBUaHVzIGl0IGlzIHlvdXIg
cmVzcG9uc2liaWxpdHkgdG8gZGlzY2VybiBpZiB0aGUgc2lnbmFsIGZpcmVkIHdhcyB5b3Vycy4K
Ky8vIFRoaXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IGEgb25lIHdheSBzdHJlZXQgaS5lLiBvbmNl
IGluc3RhbGxlZCwgYSBzaWduYWwgaGFuZGxlciBjYW5ub3QgYmUgdW5pbnN0YWxsZWQuCit2b2lk
IGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCwgU2lnbmFsSGFuZGxlciYmKTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U2lnbmFsOwordXNpbmcgV1RGOjp0b1N5c3RlbVNp
Z25hbDsKK3VzaW5nIFdURjo6ZnJvbVN5c3RlbVNpZ25hbDsKK3VzaW5nIFdURjo6U2lnbmFsQWN0
aW9uOwordXNpbmcgV1RGOjppbnN0YWxsU2lnbmFsSGFuZGxlcjsKKworI2VuZGlmIC8vIFVTRShQ
VEhSRUFEUykKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCBlNGU1ODMxN2I1OGY3MDlkZmY4MDgzNGZjNWViNDcwZDI1N2JjNzQxLi5iMTU5YWVmNDVl
YzQ1YjIyNzZjNDFhODIyZmY5ZmRlOTEyYzUxMTgzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDQtMjAgIEtl
aXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHNpZ25h
bGluZyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MDk3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCB0ZXN0cyBmb3IgVGhyZWFkTWVzc2FnZXMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHA6IEFkZGVkLgorICAgICAgICAo
cnVuVGhyZWFkTWVzc2FnZVRlc3QpOgorICAgICAgICAoVEVTVCk6CisKIDIwMTctMDQtMTggIEpv
bmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIyMTUzNDYgYW5kIDIxNTM2MS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNTNkMDQ1ZDk0ZWM0MWQ3ZTJiYTU0MzM4ZjM0NWI3N2FkNDEwMjEyYy4uZjFhY2ZjNDI4Mjcx
OTkxYmJmNzNhODU4MDZiNjg0YThiMmRlMjMxNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTE3Miw2ICsxNzIsNyBAQAogCQk1MkI4Q0Y5ODE1ODY4RDkxMDAyODEwNTMgLyogU2V0RG9jdW1l
bnRVUkkuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkI4Q0Y5NDE1ODY4Q0YwMDAyODEwNTMgLyogU2V0RG9jdW1lbnRVUkkuaHRtbCAq
LzsgfTsKIAkJNTJENjczRUUxQUZCMTI3MzAwRkExOUZFIC8qIFdLUGFnZUNvcHlTZXNzaW9uU3Rh
dGVXaXRoRmlsdGVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyRDY3M0VDMUFGQjEyNjgwMEZBMTlGRSAvKiBXS1BhZ2VDb3B5U2Vzc2lvblN0
YXRlV2l0aEZpbHRlcmluZy5jcHAgKi87IH07CiAJCTUyRTVDRTQ5MTREMjFFQUIwMDNCMkJEOCAv
KiBQYXJlbnRGcmFtZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTJFNUNFNDgxNEQyMUVBQjAwM0IyQkQ4IC8qIFBhcmVudEZyYW1lX0J1
bmRsZS5jcHAgKi87IH07CisJCTUzMTFCRDVFMUVBOTQ5MEUwMDUyNTI4MSAvKiBUaHJlYWRNZXNz
YWdlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzExQkQ1RDFFQTk0OTBEMDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZXMuY3BwICovOyB9OwogCQk1
MzFDMUQ4RTFERjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzFDMUQ4RDFERjhFRjcyMDA2RTk3OUYg
LyogTEVCRGVjb2Rlci5jcHAgKi87IH07CiAJCTUzNjc3MDM0MUNDODAyMjgwMEQ0MjVCMSAvKiBX
ZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRP
YmplY3REZXNjcmlwdGlvbi5tbSAqLzsgfTsKIAkJNTM2NzcwMzYxQ0M4MUI2MTAwRDQyNUIxIC8q
IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIxIC8q
IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi87IH07CkBAIC0xMTEwLDYgKzExMTEs
NyBAQAogCQk1MkQ2NzNFQzFBRkIxMjY4MDBGQTE5RkUgLyogV0tQYWdlQ29weVNlc3Npb25TdGF0
ZVdpdGhGaWx0ZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V0tQYWdlQ29weVNlc3Npb25TdGF0ZVdpdGhGaWx0ZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MkU1Q0U0NTE0RDIxRTlEMDAzQjJCRDggLyogUGFyZW50RnJhbWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyZW50RnJhbWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkU1Q0U0ODE0RDIxRUFCMDAzQjJCRDggLyog
UGFyZW50RnJhbWVfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBhcmVudEZyYW1lX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUzMTFCRDVEMUVBOTQ5MEQwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdlcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMUMxRDhEMURGOEVGNzIwMDZFOTc5RiAvKiBMRUJEZWNv
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExFQkRlY29kZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzY3NzAzMzFDQzgwMjI4MDBENDI1
QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIxIC8qIFdlYlNj
cmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBX
ZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjE2Niw2ICsyMTY4LDcgQEAKIAkJCQk3Qzc0RDQyRDE4ODIyOEYzMDBFNUVENTcgLyog
U3RyaW5nVmlldy5jcHAgKi8sCiAJCQkJNTU5N0Y4MzQxRDk1OTZDODAwNjZCQzIxIC8qIFN5bmNo
cm9uaXplZEZpeGVkUXVldWUuY3BwICovLAogCQkJCTkzMjlBQTI4MURFM0Y4MUUwMDNBQkQwNyAv
KiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgKi8sCisJCQkJNTMxMUJENUQxRUE5NDkwRDAwNTI1Mjgx
IC8qIFRocmVhZE1lc3NhZ2VzLmNwcCAqLywKIAkJCQkwRjJDMjBCNzFEQ0Q1NDQ4MDA1NDJEOUUg
LyogVGltZS5jcHAgKi8sCiAJCQkJNUM1RTYzM0QxRDBCNjc5NDAwODVBMDI1IC8qIFVuaXF1ZVJl
Zi5jcHAgKi8sCiAJCQkJN0NEMEQ1QUExRDU1MzRERTAwMENDOUUxIC8qIFZhcmlhbnQuY3BwICov
LApAQCAtMjY4NSw2ICsyNjg4LDcgQEAKIAkJCQk3QzgzREVFMDFEMEE1OTBDMDBGRUJDRjMgLyog
SW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzFDMUQ4
RTFERjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
QzgzREVFODFEMEE1OTBDMDBGRUJDRjMgLyogTGlzdEhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNTMxMUJENUUxRUE5NDkwRTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2VzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdDODNERjFEMUQwQTU5MEMwMEZFQkNGMyAvKiBMb2NrLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdDODNERUVEMUQwQTU5MEMwMEZFQkNGMyAvKiBNYXRoRXh0cmFzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUVGMUQwQTU5MEMwMEZFQkNGMyAvKiBNRDUuY3Bw
IGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9UaHJlYWRNZXNzYWdlcy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJl
YWRNZXNzYWdlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDlhMjc3M2YyMzQxYWM5YTM2ZDViNGQ0NTVhNzMz
NmJkMGY1YjY0MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1RocmVhZE1lc3NhZ2VzLmNwcApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorCitzdGF0aWMgdm9pZCBydW5U
aHJlYWRNZXNzYWdlVGVzdCh1bnNpZ25lZCBudW1TZW5kZXJzLCB1bnNpZ25lZCBudW1NZXNzYWdl
cykKK3sKKyAgICBib29sIHJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmcgPSB0cnVlOworICAgIGRh
dGFMb2dMbigic3RhcnRpbmciKTsKKyAgICBSZWZQdHI8VGhyZWFkPiByZWNlaXZlclRocmVhZCA9
IFRocmVhZDo6Y3JlYXRlKCJUaHJlYWRNZXNzYWdlIHJlY2VpdmVyIiwgWyZyZWNlaXZlclNob3Vs
ZEtlZXBSdW5uaW5nXSAoKSB7CisgICAgICAgIHdoaWxlIChyZWNlaXZlclNob3VsZEtlZXBSdW5u
aW5nKSB7IH0KKyAgICB9KTsKKyAgICBBU1NFUlRfVFJVRShyZWNlaXZlclRocmVhZCk7CisKKyAg
ICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHNlbmRlclRocmVhZHMobnVtU2VuZGVycyk7CisgICAg
VmVjdG9yPHVuc2lnbmVkPiBtZXNzYWdlc1J1bihudW1TZW5kZXJzKTsKKyAgICBWZWN0b3I8dW5z
aWduZWQ+IGhhbmRsZXJzUnVuKG51bVNlbmRlcnMpOworICAgIG1lc3NhZ2VzUnVuLmZpbGwoMCk7
CisgICAgaGFuZGxlcnNSdW4uZmlsbCgwKTsKKworICAgIGZvciAodW5zaWduZWQgc2VuZGVySUQg
PSAwOyBzZW5kZXJJRCA8IG51bVNlbmRlcnM7ICsrc2VuZGVySUQpIHsKKyAgICAgICAgc2VuZGVy
VGhyZWFkc1tzZW5kZXJJRF0gPSBUaHJlYWQ6OmNyZWF0ZSgiVGhyZWFkTWVzc2FnZSBzZW5kZXIi
LCBbc2VuZGVySUQsIG51bU1lc3NhZ2VzLCByZWNlaXZlclRocmVhZCwgJm1lc3NhZ2VzUnVuLCAm
aGFuZGxlcnNSdW5dICgpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1NZXNzYWdlczsgKytpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZW5kTWVz
c2FnZSgqcmVjZWl2ZXJUaHJlYWQuZ2V0KCksIFtzZW5kZXJJRCwgJmhhbmRsZXJzUnVuXSAoc2ln
aW5mb190KiwgdWNvbnRleHRfdCopIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnNSdW5b
c2VuZGVySURdKys7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgRVhQRUNU
X1RSVUUocmVzdWx0ID09IFdURjo6TWVzc2FnZVN0YXR1czo6TWVzc2FnZVJhbik7CisgICAgICAg
ICAgICAgICAgbWVzc2FnZXNSdW5bc2VuZGVySURdKys7CisgICAgICAgICAgICB9CisgICAgICAg
IH0pOworICAgICAgICBBU1NFUlRfVFJVRShzZW5kZXJUaHJlYWRzW3NlbmRlcklEXSk7CisgICAg
fQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVNlbmRlcnM7ICsraSkKKyAgICAg
ICAgc2VuZGVyVGhyZWFkc1tpXS0+d2FpdEZvckNvbXBsZXRpb24oKTsKKworICAgIHJlY2VpdmVy
U2hvdWxkS2VlcFJ1bm5pbmcgPSBmYWxzZTsKKyAgICByZWNlaXZlclRocmVhZC0+d2FpdEZvckNv
bXBsZXRpb24oKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1TZW5kZXJzOyAr
K2kpIHsKKyAgICAgICAgRVhQRUNUX0VRKG51bU1lc3NhZ2VzLCBtZXNzYWdlc1J1bltpXSk7Cisg
ICAgICAgIEVYUEVDVF9FUShudW1NZXNzYWdlcywgaGFuZGxlcnNSdW5baV0pOworICAgIH0KK30K
KworVEVTVChUaHJlYWRNZXNzYWdlLCBCYXNpYykKK3sKKyAgICBydW5UaHJlYWRNZXNzYWdlVGVz
dCgxLCAxKTsKKyAgICBydW5UaHJlYWRNZXNzYWdlVGVzdCgxLCAxMDApOworfQorCitURVNUKFRo
cmVhZE1lc3NhZ2UsIE11bHRpcGxlU2VuZGVycykKK3sKKyAgICBydW5UaHJlYWRNZXNzYWdlVGVz
dCgxMCwgMSk7CisgICAgcnVuVGhyZWFkTWVzc2FnZVRlc3QoMTAsIDEwMCk7CisgICAgcnVuVGhy
ZWFkTWVzc2FnZVRlc3QoMTAsIDEwMDAwKTsKK30KKworY2xhc3MgUmVmbGVjdGVkVGhyZWFkIDog
cHVibGljIFRocmVhZCB7CitwdWJsaWM6CisgICAgdXNpbmcgVGhyZWFkOjptX211dGV4OworICAg
IHVzaW5nIFRocmVhZDo6bV9oYW5kbGU7CisgICAgdXNpbmcgVGhyZWFkOjpoYXNFeGl0ZWQ7Cit9
OworCitURVNUKFRocmVhZE1lc3NhZ2UsIFNpZ25hbHNXb3JrT25FeGl0KQoreworICAgIHN0YXRp
YyBib29sIGhhbmRsZXJSYW4gPSBmYWxzZTsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWdu
YWw6OlVzciwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCopIC0+IFNpZ25hbEFjdGlvbiB7Cisg
ICAgICAgIGRhdGFMb2dMbigiaGVyZSIpOworICAgICAgICBoYW5kbGVyUmFuID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsKKyAgICB9KTsKKworICAgIGJvb2wg
cmVjZWl2ZXJTaG91bGRLZWVwUnVubmluZyA9IHRydWU7CisgICAgUmVmUHRyPFRocmVhZD4gcmVj
ZWl2ZXJUaHJlYWQgPSAoVGhyZWFkOjpjcmVhdGUoIlRocmVhZE1lc3NhZ2UgcmVjZWl2ZXIiLAor
ICAgICAgICBbJnJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmddICgpIHsKKyAgICAgICAgICAgIHdo
aWxlIChyZWNlaXZlclNob3VsZEtlZXBSdW5uaW5nKSB7IH0KKyAgICB9KSk7CisgICAgQVNTRVJU
X1RSVUUocmVjZWl2ZXJUaHJlYWQpOworCisgICAgYm9vbCBzaWduYWxGaXJlZDsKKyAgICB7Cisg
ICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHN0YXRpY19jYXN0PFJl
ZmxlY3RlZFRocmVhZCo+KHJlY2VpdmVyVGhyZWFkLmdldCgpKS0+bV9tdXRleCk7CisgICAgICAg
IHJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KHN0YXRpY19jYXN0PFJlZmxlY3RlZFRocmVhZCo+KHJlY2VpdmVyVGhyZWFkLmdldCgpKS0+aGFz
RXhpdGVkKCkpOworICAgICAgICBzbGVlcCgxKTsKKyAgICAgICAgc2lnbmFsRmlyZWQgPSAhcHRo
cmVhZF9raWxsKHN0YXRpY19jYXN0PFJlZmxlY3RlZFRocmVhZCo+KHJlY2VpdmVyVGhyZWFkLmdl
dCgpKS0+bV9oYW5kbGUsIHRvU3lzdGVtU2lnbmFsKFNpZ25hbDo6VXNyKSk7CisgICAgfQorCisg
ICAgcmVjZWl2ZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgRVhQRUNUX1RSVUUo
aGFuZGxlclJhbiB8fCAhc2lnbmFsRmlyZWQpOworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307731</attachid>
            <date>2017-04-21 08:11:48 -0700</date>
            <delta_ts>2017-04-21 09:33:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170976-20170421111146.patch</filename>
            <type>text/plain</type>
            <size>61246</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NjA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NTE3ZjQ2Y2JiMzdhZjUwMjQ4YmI0YzIxMDYyNTVkOWUwYmIyNzI2Li5iYmQ4NzcyMDE1ODUzMzMz
ZTMwNTk2OWVlNzNjMjdlN2ZmNTQ1YTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxNy0wNC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgc2lnbmFsaW5nIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHZhcmlvdXMgdXNlcyBvZiBzaWdhY3Rp
b24gdG8gdXNlIHRoZSBuZXcgc2lnbmFsaW5nIEFQSS4KKyAgICAgICAgQWxzbyBzd2l0Y2ggVk1U
cmFwcyB0byB1c2UgdGhlIHRocmVhZCBtZXNzYWdlIHN5c3RlbSBpbnN0ZWFkIG9mCisgICAgICAg
IHJvbGxpbmcgaXQncyBvd24uCisKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5o
OgorICAgICAgICAoSlNDOjppc0pJVFBDKToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3Bw
OgorICAgICAgICAoSlNDOjppbnN0YWxsU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChKU0M6OlZN
VHJhcHM6OlZNVHJhcHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNl
bmQpOgorICAgICAgICAoSlNDOjpoYW5kbGVTaWd1c3IxKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6aGFuZGxlU2lndHJhcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Omluc3RhbGxTaWduYWxI
YW5kbGVycyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmg6CisgICAgICAg
ICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA6CisgICAgICAgIChKU0M6Omluc3RhbGxD
cmFzaEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpoYW5kbGVDcmFzaCk6IERlbGV0ZWQuCisgICAg
ICAgICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjplbmFibGVGYXN0TWVtb3J5KToK
KwogMjAxNy0wNC0yMCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAK
ICAgICAgICAgW2NtYWtlXSBEZWZpbmUgRk9SV0FSRElOR19IRUFERVJTX0RJUiBpbiBXZWJLaXRG
UyBhbmQgdXNlIGl0IGV2ZXJ5d2hlcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
IGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggY2RkMjc4MTcwNDJkNzFhNTkxZTU1OGEwMjlj
ZGUzZjMxZjlkNDVmOS4uZTVmNjM0NjkwYzZiZDE4NWUwNTM3ODFiMTQ5YjQ4ZDA2NzMxODQ1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw3NiBAQAorMjAxNy0wNC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWls
bGVyQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc2lnbmFsaW5nIEFQSQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTc2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgYnVu
Y2ggb2YgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gV1RGLiBGaXJzdCwgaXQgYWRkCisgICAgICAgIGEg
bmV3IGRhdGEgc3RydWN0dXJlIG9mIGEgbG9ja2xlc3MgYmFnLiBUaGUgTG9ja2xlc3NCYWcgY2xh
c3MgY2FuCisgICAgICAgIGJlIHVzZWQgYXMgZWl0aGVyIGEgbXVsdGktd3JpdGVyIG11bHRpLXJl
YWRlciBsb2NrbGVzcyBiYWcgb3IgYQorICAgICAgICBtdWx0aS13cml0ZXIgc2luZ2xlIGNvbnN1
bWVyIGxvY2tsZXNzIGJhZy4KKworICAgICAgICBOZXh0LCB0aGlzIHBhdGNoIGFkZHMgYW4gYWJz
dHJhY3Rpb24gYXJvdW5kIHNpZ2FjdGlvbiBpbiBXVEYuCisgICAgICAgIEJhc2ljYWxseSwgeW91
IGNhbiBhZGQgYSBoYW5kbGVyLCB3aGljaCBjYW4gYmUgYW4gYXJiaXRyYXJ5CisgICAgICAgIGxh
bWJkYS4gQWx0aG91Z2ggaXQgc2hvdWxkIHN0aWxsIGJlIHNhZmUgZm9yIHRoZSBzaWduYWwgeW91
IGFyZQorICAgICAgICBoYW5kbGluZy4gIHRoZSBzaWduYWwgaGFuZGxlciBtYW5hZ2VyIHdpbGwg
dGhlbiBkbyBhbGwgdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIGhhbmRsaW5nIG9mIGNoYWluaW5n
OgorCisgICAgICAgIEluIHRoZSBTSUdVU1IgY2FzZSB3ZSBhbHdheXMgZm9yd2FyZCB0aGUgc2ln
bmFsIHRvIGFueSBvdGhlcgorICAgICAgICBub24tZGVmYXVsdCBoYW5kbGVyIGluc3RhbGxlZCBi
ZWZvcmUgdXMuIFdlIG5lZWQgdG8gZG8gdGhpcywKKyAgICAgICAgb3RoZXJ3aXNlLCBzaW5jZSBp
dCdzIG5vdCBwb3NzaWJsZSB0byB0ZWxsIGlmIGEgU0lHVVNSIHdhcworICAgICAgICBpbnRlbmRl
ZCBleGx1c2l2ZWx5IGZvciBvdXIgaGFuZGxlcnMuIFNpZ25hbCBoYW5kbGVycyBkb24ndCByZWNv
cmQKKyAgICAgICAgaG93IG1hbnkgdGltZXMgdGhleSB3ZXJlIHNlbnQgb25seSB0aGF0IHRoZXJl
IGlzIGF0IGxlYXN0IG9uZQorICAgICAgICB1bmhhbmRsZWQgc2lnbmFsLgorCisgICAgICAgIElu
IHRoZSBmYXVsdGluZyBjYXNlcyB3ZSByZXF1aXJlIHRoYXQgZXZlcnkgaGFuZGxlIGJlIGFibGUg
dG8KKyAgICAgICAgcmVjb2duaXNlIGEgZmF1bHQgdGhleSBpbnN0YWxsZWQsIHZzIGNyYXNoZXMu
IElmIG5vbmUgb2Ygb3VyCisgICAgICAgIGhhbmRsZXJzIGNsYWltIHRvIGhhdmUgaGFuZGxlZCB0
aGUgZmF1bHQgd2Ugd2lsbCBmb3J3YXJkIHRoZQorICAgICAgICBmYXVsdC4gSWYgYSBoYW5kbGVy
IHdhcyBpbnN0YWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBmYXVsdCBoYW5kbGVyCisgICAgICAgIHdl
IHNpbXBseSBjYWxsIHRoYXQgaGFuZGxlciBhbmQgcmVseSBvbiB0aGVtIHRvIHRha2UgdGhlCisg
ICAgICAgIGFwcHJvcHJpYXRlIGFjdGlvbi4gSWYgbm8gaGFuZGxlciB3YXMgaW5zdGFsbGVkIGJl
Zm9yZSBvdXIgZmlyc3QKKyAgICAgICAgaGFuZGxlciB3ZSByZXN0b3JlIHRoZSBkZWZhdWx0IGhh
bmRsZXIgYW5kIGFsbG93IHRoZSBmYXVsdCB0bworICAgICAgICBoYXBwZW4gYWdhaW4uCisKKyAg
ICAgICAgRmluYWxseSwgdGhpcyBwYXRjaCBhZGRzIGEgc2lnbmFsIGJhc2VkIG1lc3NhZ2luZyBz
eXN0ZW0uICBUaGlzCisgICAgICAgIHN5c3RlbSBhbGxvd3MgdGhlIHVzZXIgdG8gcnVuIGFuIGFy
Yml0cmFyeSBsYW1iZGEgZnJvbSB0aGUgU0lHVVNSMgorICAgICAgICBzaWduYWwgaGFuZGxlciBv
ZiBhbnkgdGFyZ2V0IFdURjo6VGhyZWFkLiBUaGlzIGlzIGFscmVhZHkgaW4gdXNlCisgICAgICAg
IGZvciB0aGUgVk1UcmFwcyBBUEkgd2hpY2ggYWxsb3dzIHVzIHRvIGtpbGwgcm9ndWUgVk1zIGJ5
IHNlbmRpbmcKKyAgICAgICAgdGhlIFZNJ3MgcnVubmluZyBXVEY6OlRocmVhZCBhIFNJR1VTUiBh
bmQgcmVxdWVzdGluZyBpdCBqZXRpc29uCisgICAgICAgIGFsbCBvcHRpbWl6ZWQgY29kZSBhbmQg
dGhyb3cgYW4gdW5jYXRjaGFibGUgZXhjZXB0aW9uIGZyb20gYWxsCisgICAgICAgIGZ1bmN0aW9u
IGVudHJpZXMvbG9vcCBiYWNrZWRnZXMuICBJbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGFsc28gdXNl
CisgICAgICAgIHRoaXMgQVBJIGZvciBXYXNtIHRvIHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNo
ZXMgaW4gY3VycmVudGx5CisgICAgICAgIGV4ZWN1dGluZyBXYXNtIHRocmVhZHMuCisKKyAgICAg
ICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQXRvbWlj
cy5oOgorICAgICAgICAoV1RGOjpBdG9taWM6OkF0b21pYyk6CisgICAgICAgICogd3RmL0xvY2ts
ZXNzQmFnLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6TG9ja2xlc3NCYWcp
OgorICAgICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6YWRkKToKKyAgICAgICAgKFdURjo6TG9ja2xl
c3NCYWc6Oml0ZXJhdGUpOgorICAgICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6Y29uc3VtZUFsbCk6
CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
VGhyZWFkTWVzc2FnZURhdGE6OlRocmVhZE1lc3NhZ2VEYXRhKToKKyAgICAgICAgKFdURjo6aW5p
dGlhbGl6ZVRocmVhZE1lc3NhZ2VzKToKKyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2VTY29wZWQp
OgorICAgICAgICAqIHd0Zi9UaHJlYWRNZXNzYWdlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpz
ZW5kTWVzc2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6
OmluaXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjp0aHJlYWRNZXNzYWdlcyk6CisgICAgICAgICogd3RmL1RocmVhZGlu
Z1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKToK
KyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpz
aWduYWwpOgorICAgICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6anNjU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChXVEY6Omluc3RhbGxTaWduYWxI
YW5kbGVyKToKKyAgICAgICAgKiB3dGYvdGhyZWFkcy9TaWduYWxzLmg6IEFkZGVkLgorICAgICAg
ICAoV1RGOjp0b1N5c3RlbVNpZ25hbCk6CisgICAgICAgIChXVEY6OmZyb21TeXN0ZW1TaWduYWwp
OgorCiAyMDE3LTA0LTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
TW92ZSBub3RGb3VuZCBpbnRvIGl0cyBvd24gZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAppbmRleCA2ZWU2ZmUyODE4N2I5YWE0OWRlYTNj
MjM3MWUzY2NiYzQzNDcxMDExLi4xMGUxNDQyYWUxMjliYmU0Y2Y0NTI2MThjYmM5ZmM1ZTUzOTMw
NDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuaApAQCAtODEsNiArODEsMTIgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBleGVjdXRhYmxlUG9v
bFJlc2VydmF0aW9uRnJhY3Rpb24gPSAwLjI1OwogZXh0ZXJuIEpTX0VYUE9SVERBVEEgdWludHB0
cl90IHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sOwogZXh0ZXJuIEpTX0VYUE9SVERB
VEEgdWludHB0cl90IGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbDsKIAoraW5saW5lIGJv
b2wgaXNKSVRQQyh2b2lkKiBwYykKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpIDw9IHBjCisgICAgICAgICYmIHBj
IDwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29s
KTsKK30KKwogdHlwZWRlZiB2b2lkICgqSklUV3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24pKG9m
Zl90LCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKIGV4dGVybiBKU19FWFBPUlREQVRBIEpJVFdyaXRl
U2VwYXJhdGVIZWFwc0Z1bmN0aW9uIGppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IGU2Mjg1YTMwYzIy
MmE1YWNhZGMzOGYwYzliMWI3YWU3YTQ3N2U3ODUuLjlmYzhmMGY3ZTM5MjdjM2ViY2ZjM2RlNWE0
YzlkNjE5NGFjZjQ4ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMu
Y3BwCkBAIC00Miw3ICs0Miw4IEBACiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogCiAjaWYg
T1MoREFSV0lOKQotI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNz
YWdlLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogI2VuZGlmCiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtNTQsOSArNTUsNiBAQCBBTFdBWVNfSU5MSU5FIFZNJiBWTVRyYXBzOjp2
bSgpIGNvbnN0CiAKICNpZiBFTkFCTEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBTKQogCi1zdHJ1Y3Qg
c2lnYWN0aW9uIG9yaWdpbmFsU2lndXNyMUFjdGlvbjsKLXN0cnVjdCBzaWdhY3Rpb24gb3JpZ2lu
YWxTaWd0cmFwQWN0aW9uOwotCiBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgU2lnbmFsQ29u
dGV4dChtY29udGV4dF90JiBtY29udGV4dCkKICAgICAgICAgOiBtY29udGV4dChtY29udGV4dCkK
QEAgLTEzMiw4NyArMTMwLDM1IEBAIHN0YXRpYyBFeHBlY3RlZDxWTUFuZFN0YWNrQm91bmRzLCBW
TVRyYXBzOjpFcnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoU2lnCiAgICAgcmV0dXJu
IFZNQW5kU3RhY2tCb3VuZHMgeyBhY3RpdmVWTSwgc3RhY2tCb3VuZHMgfTsKIH0KIAotc3RhdGlj
IHZvaWQgaGFuZGxlU2lndXNyMShpbnQgc2lnbmFsTnVtYmVyLCBzaWdpbmZvX3QqIGluZm8sIHZv
aWQqIHVhcCkKK3N0YXRpYyB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKCkKIHsKLSAgICBTaWdu
YWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250
ZXh0KTsKLSAgICBhdXRvIGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMgPSBmaW5kQWN0aXZlVk1BbmRT
dGFja0JvdW5kcyhjb250ZXh0KTsKLSAgICBpZiAoYWN0aXZlVk1BbmRTdGFja0JvdW5kcykgewor
ICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VHJhcCwgW10gKGludCwgc2lnaW5mb190
Kiwgdm9pZCogdWFwKSAtPiBTaWduYWxBY3Rpb24geworICAgICAgICBTaWduYWxDb250ZXh0IGNv
bnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0KTsKKworICAg
ICAgICBpZiAoIWlzSklUUEMoY29udGV4dC50cmFwUEMpKQorICAgICAgICAgICAgcmV0dXJuIFNp
Z25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50
bHkgZWF0cyBhbGwgdHJhcHMgaW5jbHVkaW5nIGppdCBhc3NlcnRzIHdlIHNob3VsZCBtYWtlIHN1
cmUgdGhpcworICAgICAgICAvLyBhbHdheXMgd29ya3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzEwMzkKKyAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91
bmRzID0gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoY29udGV4dCk7CisgICAgICAgIGlmICgh
YWN0aXZlVk1BbmRTdGFja0JvdW5kcykKKyAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246
OkhhbmRsZWQ7IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KKwogICAg
ICAgICBWTSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07CiAgICAgICAg
IGlmICh2bSkgewotICAgICAgICAgICAgU3RhY2tCb3VuZHMgc3RhY2tCb3VuZHMgPSBhY3RpdmVW
TUFuZFN0YWNrQm91bmRzLnZhbHVlKCkuc3RhY2tCb3VuZHM7CiAgICAgICAgICAgICBWTVRyYXBz
JiB0cmFwcyA9IHZtLT50cmFwcygpOwotICAgICAgICAgICAgaWYgKHRyYXBzLm5lZWRUcmFwSGFu
ZGxpbmcoKSkKLSAgICAgICAgICAgICAgICB0cmFwcy50cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRz
KGNvbnRleHQsIHN0YWNrQm91bmRzKTsKKyAgICAgICAgICAgIGlmICghdHJhcHMubmVlZFRyYXBI
YW5kbGluZygpKQorICAgICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7
IC8vIFRoZSBwb2xsaW5nIGNvZGUgYmVhdCB1cyB0byBoYW5kbGluZyB0aGUgdHJhcCBhbHJlYWR5
LgorCisgICAgICAgICAgICBhdXRvIGV4cGVjdGVkU3VjY2VzcyA9IHRyYXBzLnRyeUpldHRpc29u
Q29kZUJsb2Nrc09uU3RhY2soY29udGV4dCk7CisgICAgICAgICAgICBpZiAoIWV4cGVjdGVkU3Vj
Y2VzcykKKyAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOyAvLyBM
ZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCisgICAgICAgICAgICBpZiAoZXhw
ZWN0ZWRTdWNjZXNzLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlv
bjo6SGFuZGxlZDsgLy8gV2UndmUgc3VjY2VzcyBqZXR0aXNvbiB0aGUgY29kZUJsb2Nrcy4KICAg
ICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gb3JpZ2luYWxBY3Rpb24gPSBvcmlnaW5hbFNpZ3Vz
cjFBY3Rpb24uc2Ffc2lnYWN0aW9uOwotICAgIGlmIChvcmlnaW5hbEFjdGlvbikKLSAgICAgICAg
b3JpZ2luYWxBY3Rpb24oc2lnbmFsTnVtYmVyLCBpbmZvLCB1YXApOwotfQotCi1zdGF0aWMgdm9p
ZCBoYW5kbGVTaWd0cmFwKGludCBzaWduYWxOdW1iZXIsIHNpZ2luZm9fdCogaW5mbywgdm9pZCog
dWFwKQotewotICAgIFNpZ25hbENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90
Kj4odWFwKS0+dWNfbWNvbnRleHQpOwotICAgIGF1dG8gYWN0aXZlVk1BbmRTdGFja0JvdW5kcyA9
IGZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRleHQpOwotICAgIGlmICghYWN0aXZlVk1B
bmRTdGFja0JvdW5kcykKLSAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0
cnkgYWdhaW4gbGF0ZXIuCi0KLSAgICBWTSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRzLnZh
bHVlKCkudm07Ci0gICAgaWYgKHZtKSB7Ci0gICAgICAgIFZNVHJhcHMmIHRyYXBzID0gdm0tPnRy
YXBzKCk7Ci0gICAgICAgIGlmICghdHJhcHMubmVlZFRyYXBIYW5kbGluZygpKQotICAgICAgICAg
ICAgcmV0dXJuOyAvLyBUaGUgcG9sbGluZyBjb2RlIGJlYXQgdXMgdG8gaGFuZGxpbmcgdGhlIHRy
YXAgYWxyZWFkeS4KIAotICAgICAgICBhdXRvIGV4cGVjdGVkU3VjY2VzcyA9IHRyYXBzLnRyeUpl
dHRpc29uQ29kZUJsb2Nrc09uU3RhY2soY29udGV4dCk7Ci0gICAgICAgIGlmICghZXhwZWN0ZWRT
dWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkg
YWdhaW4gbGF0ZXIuCi0gICAgICAgIGlmIChleHBlY3RlZFN1Y2Nlc3MudmFsdWUoKSkKLSAgICAg
ICAgICAgIHJldHVybjsgLy8gV2UndmUgc3VjY2VzcyBqZXR0aXNvbiB0aGUgY29kZUJsb2Nrcy4K
LSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlbiB0aGlzIFNJR1RSQVAgaXMgbm90
IGR1ZSB0byBhIFZNVHJhcC4gTGV0J3MgZG8gdGhlIGRlZmF1bHQgYWN0aW9uLgotICAgIGF1dG8g
b3JpZ2luYWxBY3Rpb24gPSBvcmlnaW5hbFNpZ3RyYXBBY3Rpb24uc2Ffc2lnYWN0aW9uOwotICAg
IGlmIChvcmlnaW5hbEFjdGlvbikgewotICAgICAgICAvLyBJdCBpcyBhbHdheXMgc2FmZSB0byBq
dXN0IGludm9rZSB0aGUgb3JpZ2luYWwgaGFuZGxlciB1c2luZyB0aGUgc2Ffc2lnYWN0aW9uIGZv
cm0KLSAgICAgICAgLy8gd2l0aG91dCBjaGVja2luZyBmb3IgdGhlIFNBX1NJR0lORk8gZmxhZy4g
SWYgdGhlIG9yaWdpbmFsIGhhbmRsZXIgaXMgb2YgdGhlCi0gICAgICAgIC8vIHNhX2hhbmRsZXIg
Zm9ybSwgaXQgd2lsbCBqdXN0IGlnbm9yZSB0aGUgMm5kIGFuZCAzcmQgYXJndW1lbnRzIHNpbmNl
IHNhX2hhbmRsZXIgaXMgYQotICAgICAgICAvLyBzdWJzZXQgb2Ygc2Ffc2lnYWN0aW9uLiBUaGlz
IGlzIHdoYXQgdGhlIG1hbiBwYWdlcyBzYXlzIHRoZSBPUyBkb2VzIGFueXdheS4KLSAgICAgICAg
b3JpZ2luYWxBY3Rpb24oc2lnbmFsTnVtYmVyLCBpbmZvLCB1YXApOwotICAgIH0KLSAgICAKLSAg
ICAvLyBQcmUtZW1wdGl2ZWx5IHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBidXQgd2UgbWF5
IHJvbGwgaXQgYmFjayBiZWxvdy4KLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGN1cnJlbnRBY3Rpb247
Ci0gICAgc3RydWN0IHNpZ2FjdGlvbiBkZWZhdWx0QWN0aW9uOwotICAgIGRlZmF1bHRBY3Rpb24u
c2FfaGFuZGxlciA9IFNJR19ERkw7Ci0gICAgc2lnZmlsbHNldCgmZGVmYXVsdEFjdGlvbi5zYV9t
YXNrKTsKLSAgICBkZWZhdWx0QWN0aW9uLnNhX2ZsYWdzID0gMDsKLSAgICBzaWdhY3Rpb24oU0lH
VFJBUCwgJmRlZmF1bHRBY3Rpb24sICZjdXJyZW50QWN0aW9uKTsKLSAgICAKLSAgICBpZiAoY3Vy
cmVudEFjdGlvbi5zYV9zaWdhY3Rpb24gIT0gaGFuZGxlU2lndHJhcCkgewotICAgICAgICAvLyBU
aGlzIG1lYW5zIHRoYXQgdGhlcmUncyBhIGNsaWVudCBoYW5kbGVyIGluc3RhbGxlZCBhZnRlciB1
cy4gVGhpcyBhbHNvIG1lYW5zCi0gICAgICAgIC8vIHRoYXQgdGhlIGNsaWVudCBoYW5kbGVyIHRo
aW5rcyBpdCB3YXMgYWJsZSB0byByZWNvdmVyIGZyb20gdGhlIFNJR1RSQVAsIGFuZAotICAgICAg
ICAvLyBkaWQgbm90IHVuaW5zdGFsbCBpdHNlbGYuIFdlIGNhbid0IGFyZ3VlIHdpdGggdGhpcyBi
ZWNhdXNlIHRoZSBzaWduYWwgaXNuJ3QKLSAgICAgICAgLy8ga25vd24gdG8gYmUgZnJvbSBhIFZN
VHJhcHMgc2lnbmFsLiBIZW5jZSwgcmVzdG9yZSB0aGUgY2xpZW50IGhhbmRsZXIKLSAgICAgICAg
Ly8gYW5kIGtlZXAgZ29pbmcuCi0gICAgICAgIHNpZ2FjdGlvbihTSUdUUkFQLCAmY3VycmVudEFj
dGlvbiwgbnVsbHB0cik7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFu
ZGxlcnMoKQotewotICAgIHR5cGVkZWYgdm9pZCAoKiBTaWdhY3Rpb25IYW5kbGVyKShpbnQsIHNp
Z2luZm9fdCAqLCB2b2lkICopOwotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotCi0gICAg
YWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2lnYWN0aW9uSGFuZGxlcj4o
aGFuZGxlU2lndXNyMSk7Ci0gICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFj
dGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87Ci0gICAgc2lnYWN0aW9uKFNJR1VTUjEsICZhY3Rp
b24sICZvcmlnaW5hbFNpZ3VzcjFBY3Rpb24pOwotCi0gICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8U2lnYWN0aW9uSGFuZGxlcj4oaGFuZGxlU2lndHJhcCk7Ci0gICAg
c2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJ
R0lORk87Ci0gICAgc2lnYWN0aW9uKFNJR1RSQVAsICZhY3Rpb24sICZvcmlnaW5hbFNpZ3RyYXBB
Y3Rpb24pOworICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOworICAgIH0pOwog
fQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBDYWxsRnJhbWUqIHNhbml0aXplZFRvcENhbGxGcmFt
ZShDYWxsRnJhbWUqIHRvcENhbGxGcmFtZSkKQEAgLTQwMCw3ICszNDYsNyBAQCBWTVRyYXBzOjpW
TVRyYXBzKCkKICAgICBpZiAoIU9wdGlvbnM6OnVzZVBvbGxpbmdUcmFwcygpKSB7CiAgICAgICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOwogICAgICAgICBzdGQ6OmNhbGxfb25jZShvbmNl
LCBbXSB7Ci0gICAgICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcnMoKTsKKyAgICAgICAgICAg
IGluc3RhbGxTaWduYWxIYW5kbGVyKCk7CiAgICAgICAgIH0pOwogICAgIH0KICNlbmRpZgpAQCAt
NDYwLDcgKzQwNiwxOSBAQCB2b2lkIFZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6c2VuZCgpCiAgICAg
ICAgICAgICBWTSYgdm0gPSAqbV92bTsKICAgICAgICAgICAgIGF1dG8gb3B0aW9uYWxPd25lclRo
cmVhZCA9IHZtLm93bmVyVGhyZWFkKCk7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxPd25lclRo
cmVhZCkgewotICAgICAgICAgICAgICAgIG9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS0+c2ln
bmFsKFNJR1VTUjEpOworICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKCpvcHRpb25hbE93bmVy
VGhyZWFkLnZhbHVlKCkuZ2V0KCksIFtdIChzaWdpbmZvX3QqLCB1Y29udGV4dF90KiB1Y29udGV4
dCkgLT4gdm9pZCB7CisgICAgICAgICAgICAgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dCh1
Y29udGV4dC0+dWNfbWNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGFjdGl2ZVZN
QW5kU3RhY2tCb3VuZHMgPSBmaW5kQWN0aXZlVk1BbmRTdGFja0JvdW5kcyhjb250ZXh0KTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFZNKiB2bSA9IGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMudmFsdWUoKS52
bTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2bSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzID0gYWN0aXZlVk1BbmRTdGFja0JvdW5k
cy52YWx1ZSgpLnN0YWNrQm91bmRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZNVHJh
cHMmIHRyYXBzID0gdm0tPnRyYXBzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRyYXBzLm5lZWRUcmFwSGFuZGxpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJhcHMudHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhjb250ZXh0LCBzdGFja0JvdW5kcyk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5oCmluZGV4IGZkYmEyYWZkODMxZjAw
ZGJlMmJiNTU2YWJhMTNjNWFkYmQ4MTBiMTYuLjU0MjViMTg4MzMyN2ZhZDgzZWM2MDI0MjZhZTk2
ODEzNWZjYjA1ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
VHJhcHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmgKQEAg
LTQyLDcgKzQyLDggQEAgY2xhc3MgVk1UcmFwcyB7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBF
cnJvciB7CiAgICAgICAgIE5vbmUsCi0gICAgICAgIExvY2tVbmF2YWlsYWJsZQorICAgICAgICBM
b2NrVW5hdmFpbGFibGUsCisgICAgICAgIE5vdEpJVENvZGUKICAgICB9OwogCiAgICAgZW51bSBF
dmVudFR5cGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2ls
bENyYXNoQW5hbHl6ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENy
YXNoQW5hbHl6ZXIuY3BwCmluZGV4IDI2NWM2NjE1NWQxYWRiOGRhOThiZDc4OTQyMDI5Mjk4M2Q2
MTI3M2QuLmFlZTZkZDI4ZDg1MjdjN2NkZjFmZDFkOTA4YWFhMzI0Y2Q1MjY4ZWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAK
QEAgLTM3LDkgKzM3LDcgQEAKICNpbmNsdWRlICJBNjRET3Bjb2RlLmgiCiAjZW5kaWYKIAotI2lm
IEhBVkUoU0lHTkFMX0gpCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDx3
dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNDEsNTggKzEz
OSwxOSBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwog
fTsKIAotc3RydWN0IHNpZ2FjdGlvbiBvcmlnaW5hbFNpZ0lsbEFjdGlvbjsKLQotc3RhdGljIHZv
aWQgaGFuZGxlQ3Jhc2goaW50IHNpZ25hbE51bWJlciwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1
YXApCi17Ci0gICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3Qq
Pih1YXApLT51Y19tY29udGV4dCk7Ci0gICAgU2lnaWxsQ3Jhc2hBbmFseXplciYgYW5hbHl6ZXIg
PSBTaWdpbGxDcmFzaEFuYWx5emVyOjppbnN0YW5jZSgpOwotICAgIGF1dG8gY3Jhc2hTb3VyY2Ug
PSBhbmFseXplci5hbmFseXplKGNvbnRleHQpOwotCi0gICAgYXV0byBvcmlnaW5hbEFjdGlvbiA9
IG9yaWdpbmFsU2lnSWxsQWN0aW9uLnNhX3NpZ2FjdGlvbjsKLSAgICBpZiAob3JpZ2luYWxBY3Rp
b24pIHsKLSAgICAgICAgLy8gSXQgaXMgYWx3YXlzIHNhZmUgdG8ganVzdCBpbnZva2UgdGhlIG9y
aWdpbmFsIGhhbmRsZXIgdXNpbmcgdGhlIHNhX3NpZ2FjdGlvbiBmb3JtCi0gICAgICAgIC8vIHdp
dGhvdXQgY2hlY2tpbmcgZm9yIHRoZSBTQV9TSUdJTkZPIGZsYWcuIElmIHRoZSBvcmlnaW5hbCBo
YW5kbGVyIGlzIG9mIHRoZQotICAgICAgICAvLyBzYV9oYW5kbGVyIGZvcm0sIGl0IHdpbGwganVz
dCBpZ25vcmUgdGhlIDJuZCBhbmQgM3JkIGFyZ3VtZW50cyBzaW5jZSBzYV9oYW5kbGVyIGlzIGEK
LSAgICAgICAgLy8gc3Vic2V0IG9mIHNhX3NpZ2FjdGlvbi4gVGhpcyBpcyB3aGF0IHRoZSBtYW4g
cGFnZXMgc2F5cyB0aGUgT1MgZG9lcyBhbnl3YXkuCi0gICAgICAgIG9yaWdpbmFsQWN0aW9uKHNp
Z25hbE51bWJlciwgaW5mbywgdWFwKTsKLSAgICB9Ci0KLSAgICBpZiAoY3Jhc2hTb3VyY2UgPT0g
U2lnaWxsQ3Jhc2hBbmFseXplcjo6Q3Jhc2hTb3VyY2U6OkphdmFTY3JpcHRDb3JlKSB7Ci0gICAg
ICAgIC8vIFJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBzbyB0aGF0IHdlIGNhbiBnZXQgYSBj
b3JlIGR1bXAuCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gZGVmYXVsdEFjdGlvbjsKLSAgICAg
ICAgZGVmYXVsdEFjdGlvbi5zYV9oYW5kbGVyID0gU0lHX0RGTDsKLSAgICAgICAgc2lnZmlsbHNl
dCgmZGVmYXVsdEFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgZGVmYXVsdEFjdGlvbi5zYV9mbGFn
cyA9IDA7Ci0gICAgICAgIHNpZ2FjdGlvbihTSUdJTEwsICZkZWZhdWx0QWN0aW9uLCBudWxscHRy
KTsKLSAgICB9IGVsc2UgaWYgKCFvcmlnaW5hbEFjdGlvbikgewotICAgICAgICAvLyBQcmUtZW1w
dGl2ZWx5IHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBidXQgd2UgbWF5IHJvbGwgaXQgYmFj
ayBiZWxvdy4KLSAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBjdXJyZW50QWN0aW9uOwotICAgICAg
ICBzdHJ1Y3Qgc2lnYWN0aW9uIGRlZmF1bHRBY3Rpb247Ci0gICAgICAgIGRlZmF1bHRBY3Rpb24u
c2FfaGFuZGxlciA9IFNJR19ERkw7Ci0gICAgICAgIHNpZ2ZpbGxzZXQoJmRlZmF1bHRBY3Rpb24u
c2FfbWFzayk7Ci0gICAgICAgIGRlZmF1bHRBY3Rpb24uc2FfZmxhZ3MgPSAwOwotICAgICAgICBz
aWdhY3Rpb24oU0lHSUxMLCAmZGVmYXVsdEFjdGlvbiwgJmN1cnJlbnRBY3Rpb24pOwotCi0gICAg
ICAgIGlmIChjdXJyZW50QWN0aW9uLnNhX3NpZ2FjdGlvbiAhPSBoYW5kbGVDcmFzaCkgewotICAg
ICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZXJlJ3MgYSBjbGllbnQgaGFuZGxlciBpbnN0
YWxsZWQgYWZ0ZXIgdXMuIFRoaXMgYWxzbyBtZWFucwotICAgICAgICAgICAgLy8gdGhhdCB0aGUg
Y2xpZW50IGhhbmRsZXIgdGhpbmtzIGl0IHdhcyBhYmxlIHRvIHJlY292ZXIgZnJvbSB0aGUgU0lH
SUxMLCBhbmQKLSAgICAgICAgICAgIC8vIGRpZCBub3QgdW5pbnN0YWxsIGl0c2VsZi4gV2UgY2Fu
J3QgYXJndWUgd2l0aCB0aGlzIGJlY2F1c2UgdGhlIGNyYXNoIGlzbid0Ci0gICAgICAgICAgICAv
LyBrbm93biB0byBiZSBmcm9tIGEgSmF2YVNjcmlwdENvcmUgc291cmNlLiBIZW5jZSwgcmVzdG9y
ZSB0aGUgY2xpZW50IGhhbmRsZXIKLSAgICAgICAgICAgIC8vIGFuZCBrZWVwIGdvaW5nLgotICAg
ICAgICAgICAgc2lnYWN0aW9uKFNJR0lMTCwgJmN1cnJlbnRBY3Rpb24sIG51bGxwdHIpOwotICAg
ICAgICB9Ci0gICAgfQotfQotCiBzdGF0aWMgdm9pZCBpbnN0YWxsQ3Jhc2hIYW5kbGVyKCkKIHsK
ICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rp
b247Ci0gICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAoKiko
aW50LCBzaWdpbmZvX3QgKiwgdm9pZCAqKT4oaGFuZGxlQ3Jhc2gpOwotICAgIHNpZ2ZpbGxzZXQo
JmFjdGlvbi5zYV9tYXNrKTsKLSAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOwotICAg
IHNpZ2FjdGlvbihTSUdJTEwsICZhY3Rpb24sICZvcmlnaW5hbFNpZ0lsbEFjdGlvbik7CisgICAg
aW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpJbGwsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZv
aWQqIHVhcCkgeworICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNv
bnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0KTsKKworICAgICAgICBpZiAoIWlzSklUUEMoY29u
dGV4dC5tYWNoaW5lUEMpKQorICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFu
ZGxlZDsKKworICAgICAgICBTaWdpbGxDcmFzaEFuYWx5emVyJiBhbmFseXplciA9IFNpZ2lsbENy
YXNoQW5hbHl6ZXI6Omluc3RhbmNlKCk7CisgICAgICAgIGFuYWx5emVyLmFuYWx5emUoY29udGV4
dCk7CisgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CisgICAgfSk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShoYW5kbGVDcmFzaCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5k
ZXggODk4MTA0YmQ0OGFkYjExODg2NWE5YzhkZWU1YjU2ZjRlNjZiZWE4Mi4uMmUwYzk5YTM5YmVi
ZDMxNzhiOTE0OGQ5NThmZTUzZTU3YTYyMjk3ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKQEAgLTM1LDkgKzM1LDkg
QEAKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgogCi0j
aW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTUwLDExICs1MCw5IEBAIHN0YXRp
YyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4+PiBj
b2RlTG9jYXRpb25zOyAvLyAoCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfRkFTVF9NRU1PUlkp
CiAKLXN0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ0J1c0hhbmRsZXI7Ci1zdGF0aWMgc3Ry
dWN0IHNpZ2FjdGlvbiBvbGRTaWdTZWd2SGFuZGxlcjsKIHN0YXRpYyBib29sIGZhc3RIYW5kbGVy
SW5zdGFsbGVkIHsgZmFsc2UgfTsKIAotc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25h
bCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKK3N0YXRpYyBTaWduYWxBY3Rp
b24gdHJhcEhhbmRsZXIoaW50LCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQog
ewogICAgIG1jb250ZXh0X3QmIGNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNv
bnRleHQpLT51Y19tY29udGV4dDsKICAgICB2b2lkKiBmYXVsdGluZ0luc3RydWN0aW9uID0gTWFj
aGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihjb250ZXh0KTsKQEAgLTYzLDkgKzYxLDcg
QEAgc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZv
LCB2b2lkKiB1Y29udGV4dCkKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSklUIG1lbW9yeSBz
dGFydDogIiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihzdGFydE9mRml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbCkpLCAiIGVuZDogIiwgUmF3UG9pbnRlcihyZWludGVycHJldF9j
YXN0PHZvaWQqPihlbmRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpKSk7CiAgICAgLy8gRmly
c3Qgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgYXJlIGluIEpJVCBjb2RlIGJlZm9yZSB3ZSBjYW4g
YXF1aXJlIGFueSBsb2Nrcy4gT3RoZXJ3aXNlLAogICAgIC8vIHdlIG1pZ2h0IGhhdmUgY3Jhc2hl
ZCBpbiBjb2RlIHRoYXQgaXMgYWxyZWFkeSBob2xkaW5nIG9uZSBvZiB0aGUgbG9ja3Mgd2Ugd2Fu
dCB0byBhcXVpcmUuCi0gICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXJ0T2ZGaXhl
ZEV4ZWN1dGFibGVNZW1vcnlQb29sKSA8PSBmYXVsdGluZ0luc3RydWN0aW9uCi0gICAgICAgICYm
IGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPCByZWludGVycHJldF9jYXN0PHZvaWQqPihlbmRPZkZpeGVk
RXhlY3V0YWJsZU1lbW9yeVBvb2wpKSB7Ci0KKyAgICBpZiAoaXNKSVRQQyhmYXVsdGluZ0luc3Ry
dWN0aW9uKSkgewogICAgICAgICBib29sIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSBmYWxz
ZTsKICAgICAgICAgewogICAgICAgICAgICAgdm9pZCogZmF1bHRpbmdBZGRyZXNzID0gc2lnSW5m
by0+c2lfYWRkcjsKQEAgLTg5LDE3ICs4NSwxMiBAQCBzdGF0aWMgdm9pZCB0cmFwSGFuZGxlcihp
bnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQogICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiZm91bmQgc3R1YjogIiwgUmF3UG9pbnRl
cihleGNlcHRpb25TdHViLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIE1hY2hpbmVDb250ZXh0Ojphcmd1bWVudFBvaW50ZXI8MT4oY29udGV4dCkgPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFj
Y2Vzcyk7CiAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBv
aW50ZXIoY29udGV4dCkgPSBleGNlcHRpb25TdHViLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBTaWduYWxBY3Rpb246OkhhbmRsZWQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQotCi0gICAgLy8gU2luY2Ugd2Ugb25seSB1c2UgZmFzdCBtZW1v
cnkgaW4gcHJvY2Vzc2VzIHdlIGNvbnRyb2wsIGlmIHdlIHJlc3RvcmUgd2Ugd2lsbCBqdXN0IGZh
bGwgYmFjayB0byB0aGUgZGVmYXVsdCBoYW5kbGVyLgotICAgIGlmIChzaWduYWwgPT0gU0lHQlVT
KQotICAgICAgICBzaWdhY3Rpb24oc2lnbmFsLCAmb2xkU2lnQnVzSGFuZGxlciwgbnVsbHB0cik7
Ci0gICAgZWxzZQotICAgICAgICBzaWdhY3Rpb24oc2lnbmFsLCAmb2xkU2lnU2VndkhhbmRsZXIs
IG51bGxwdHIpOworICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFlfRkFTVF9NRU1PUlkpCkBAIC0xMzMsMjIgKzEyNCwx
MyBAQCB2b2lkIGVuYWJsZUZhc3RNZW1vcnkoKQogICAgICAgICAgICAgcmV0dXJuOwogCiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZX0ZBU1RfTUVNT1JZKQotICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9u
IGFjdGlvbjsKLQotICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gdHJhcEhhbmRsZXI7Ci0g
ICAgICAgIHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgYWN0aW9uLnNhX2Zs
YWdzID0gU0FfU0lHSU5GTzsKLSAgICAgICAgCi0gICAgICAgIC8vIEluc3RhbGxpbmcgc2lnbmFs
IGhhbmRsZXJzIGZhaWxzIHdoZW4KLSAgICAgICAgLy8gMS4gc3BlY2lmaWNpZWQgc2lnIGlzIGlu
Y29ycmVjdCAoaW52YWxpZCB2YWx1ZXMgb3Igc2lnbmFsIG51bWJlcnMgd2hpY2ggY2Fubm90IGJl
IGhhbmRsZWQpLCBvcgotICAgICAgICAvLyAyLiBzZWNvbmQgb3IgdGhpcmQgcGFyYW1ldGVyIHBv
aW50cyBpbmNvcnJlY3QgcG9pbnRlcnMuCi0gICAgICAgIC8vIFRodXMsIHdlIG11c3Qgbm90IGZh
aWwgaW4gdGhlIGZvbGxvd2luZyBhdHRlbXB0cy4KLSAgICAgICAgaW50IHJldCA9IDA7Ci0gICAg
ICAgIHJldCA9IHNpZ2FjdGlvbihTSUdCVVMsICZhY3Rpb24sICZvbGRTaWdCdXNIYW5kbGVyKTsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJldCk7Ci0KLSAgICAgICAgcmV0ID0gc2lnYWN0aW9u
KFNJR1NFR1YsICZhY3Rpb24sICZvbGRTaWdTZWd2SGFuZGxlcik7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFyZXQpOworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OkJ1cywg
W10gKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWwsIHNpZ0luZm8sIHVjb250ZXh0KTsK
KyAgICAgICAgfSk7CisKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpTZWdW
LCBbXSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRyYXBIYW5kbGVyKHNpZ25hbCwgc2lnSW5mbywgdWNvbnRleHQp
OworICAgICAgICB9KTsKIAogICAgICAgICBjb2RlTG9jYXRpb25zLmNvbnN0cnVjdCgpOwogICAg
ICAgICBmYXN0SGFuZGxlckluc3RhbGxlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA5NGMxMTZiZjEyMzE0YWIwMDE4NjljNjdhMDU5MDFhMDE2
ODBmYmZjLi5mYjdhOTAxZmEyNzMxNDgzZjRlMzZhZGNmMzJhZWU4M2VmZmQyNDFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0OSw2ICsxNDksMTEgQEAK
IAkJNTE1Rjc5NTAxQ0ZDOUY0QTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkVGFzay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1Rjc5NEQxQ0ZDOUY0QTAw
Q0NFRDkzIC8qIENyb3NzVGhyZWFkVGFzay5oICovOyB9OwogCQk1MTVGNzk1NjFDRkQzQTY5MDBD
Q0VEOTMgLyogQ3Jvc3NUaHJlYWRRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFk
UXVldWUuaCAqLzsgfTsKIAkJNTIxODMwMTJDOTlFNDc2QTg0RUVCRUE4IC8qIFN5bWJvbEltcGwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjcyQkJE
QjEwN0ZBNDI0ODg2MTc4QjlFIC8qIFN5bWJvbEltcGwuY3BwICovOyB9OworCQk1MzExQkQ1MzFF
QTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5j
cHAgKi87IH07CisJCTUzMTFCRDU2MUVBN0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVzc0JhZy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENTUxRUE3
RTE1QTAwNTI1MjgxIC8qIExvY2tsZXNzQmFnLmggKi87IH07CisJCTUzMTFCRDU4MUVBN0UxQTEw
MDUyNTI4MSAvKiBTaWduYWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzExQkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oICovOyB9Owor
CQk1MzExQkQ1QTFFQTgxQTk2MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENTkxRUE4MUE5NjAwNTI1
MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLzsgfTsKKwkJNTMxMUJENUMxRUE4MjJGOTAwNTI1Mjgx
IC8qIFRocmVhZE1lc3NhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3Bw
ICovOyB9OwogCQk1MzlFQjA2MzFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5RUIwNjIxRDU1Mjg0
MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLzsgfTsKIAkJNTNFQzI1M0UxRTk1QUQzMDAwMDgz
MUI5IC8qIFByaW9yaXR5UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRUMyNTNDMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmgg
Ki87IH07CiAJCTU1MzA3MUNBMUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MzA3MUM5MUM0MDQy
NzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLzsgfTsKQEAgLTU0OCw2ICs1NTMsMTEgQEAK
IAkJNTE1Rjc5NEMxQ0ZDOUY0QTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkQ29waWVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNUY3OTREMUNGQzlGNEEwMENDRUQ5MyAvKiBDcm9zc1Ro
cmVhZFRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRU
YXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNUY3OTU1MUNGRDNBNjkwMEND
RUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENyb3NzVGhyZWFkUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMx
MUJENTExRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2lnbmFscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUzMTFCRDU1MUVBN0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVzc0JhZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrbGVzc0JhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MzExQkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaWduYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUzMTFCRDU5MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1l
c3NhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTWVz
c2FnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIw
MEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExFQkRlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFQzI1M0MxRTk1
QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTA2NCw2ICsxMDc0LDcgQEAKIAkJCQkwRjYwRjMyRDFERkNCRDFCMDA0MTZENkMg
LyogTG9ja2VkUHJpbnRTdHJlYW0uY3BwICovLAogCQkJCTBGNjBGMzJFMURGQ0JEMUIwMDQxNkQ2
QyAvKiBMb2NrZWRQcmludFN0cmVhbS5oICovLAogCQkJCUE4QTQ3MkMzMTUxQTgyNUEwMDQxMjNG
RiAvKiBMb2NrZXIuaCAqLywKKwkJCQk1MzExQkQ1NTFFQTdFMTVBMDA1MjUyODEgLyogTG9ja2xl
c3NCYWcuaCAqLywKIAkJCQk1MTNFMTcwQTFDRDdENUJGMDBFMzY1MEIgLyogTG9nZ2luZ0FjY3Vt
dWxhdG9yLmggKi8sCiAJCQkJMEYzMEJBOEMxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNo
SUQuaCAqLywKIAkJCQkwRjMwQkE4RDFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hNYXAu
aCAqLywKQEAgLTExODksNiArMTIwMCw4IEBACiAJCQkJRTMyMDBBQjUxRTlBNTM2RDAwM0I1OUQy
IC8qIFRocmVhZEhvbGRlci5jcHAgKi8sCiAJCQkJRTMyMDBBQjYxRTlBNTM2RDAwM0I1OUQyIC8q
IFRocmVhZEhvbGRlci5oICovLAogCQkJCUE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJl
YWRIb2xkZXJQdGhyZWFkcy5jcHAgKi8sCisJCQkJNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8q
IFRocmVhZE1lc3NhZ2UuY3BwICovLAorCQkJCTUzMTFCRDU5MUVBODFBOTYwMDUyNTI4MSAvKiBU
aHJlYWRNZXNzYWdlLmggKi8sCiAJCQkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZy5jcHAgKi8sCiAJCQkJQThBNDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5o
ICovLAogCQkJCUE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVz
LmggKi8sCkBAIC0xMzE2LDYgKzEzMjksOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQThBNDcz
M0ExNTFBODI1QjAwNDEyM0ZGIC8qIEJpbmFyeVNlbWFwaG9yZS5jcHAgKi8sCiAJCQkJQThBNDcz
M0IxNTFBODI1QjAwNDEyM0ZGIC8qIEJpbmFyeVNlbWFwaG9yZS5oICovLAorCQkJCTUzMTFCRDUx
MUVBNzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCAqLywKKwkJCQk1MzExQkQ1NzFFQTdFMUEx
MDA1MjUyODEgLyogU2lnbmFscy5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0aHJlYWRzOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE0NjEsNiArMTQ3Niw3IEBACiAJCQkJREU1QTA5
RkMxQkEzNjk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY4RjJCOTExNzJFMDBGQzAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzM5ODE1MUE4MjVCMDA0MTIzRkYgLyogQ29tcGlsZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTUzMTFCRDU2MUVBN0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVzc0JhZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjY5OEUxQjdDNjQzQTAwMEMxMDc4IC8qIENvbmRpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0OEMxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZp
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjJCOUMxNzJGMjU5NjAwN0RCREE1IC8qIENvbnZl
cnNpb25Nb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTE1MjYsNiArMTU0Miw3IEBACiAJCQkJQTcw
REEwODQxNzk5RjA0RDAwNTI5QTlCIC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MjYxNDdCMEExNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTdDREQ3RkY4MTg2RDI5MUUwMDc0MzNDRCAvKiBJdGVyYXRvckFk
YXB0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzExQkQ1ODFFQTdFMUExMDA1MjUyODEgLyog
U2lnbmFscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NERDdGRkExODZEMkE1NDAwNzQzM0NEIC8q
IEl0ZXJhdG9yUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQUM5MUE4MTg5NDJGQzQwMDI0
NDkzOSAvKiBMQ2hhci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5RUIwNjMxRDU1Mjg0MjAwQzgy
RUY3IC8qIExFQkRlY29kZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTYzMyw2ICsxNjUwLDcgQEAK
IAkJCQlBNzQ4NzQ1NDE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0MTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDIxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmlu
Z09wZXJhdG9ycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMxMUJENUExRUE4MUE5NjAwNTI1Mjgx
IC8qIFRocmVhZE1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRERCRkE4MTY2NkRGQTMw
MEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2RUIx
RTAxODdEMEJEMzAwMzAxMjZGIC8qIFN0cmluZ1ZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3M0I4MTUxQTgyNUIwMDQxMjNGRiAvKiBzdHJ0b2QuaCBpbiBIZWFkZXJzICovLApAQCAtMTg1
Nyw4ICsxODc1LDEwIEBACiAJCQkJRkVEQUNEM0QxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3Rh
dHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0M0MxNTFBODI1QjAwNDEyM0ZGIC8qIFN0
cmluZ0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RkIxODI0MzVBNjAwQTgy
RTY5IC8qIFN0cmluZ0NGLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMTFCRDVDMUVBODIyRjkw
MDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDQw
MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
QkExNUZDMTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdJbXBsQ0YuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNTMxMUJENTMxRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTVCQTE1RjUxODI0MzQ4MDAwQTgyRTY5IC8qIFN0cmluZ0ltcGxNYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQlBNUJBMTVGMzE4MjQzM0E5MDBBODJFNjkgLyogU3RyaW5nTWFjLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1By
aW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
QXRvbWljcy5oIGIvU291cmNlL1dURi93dGYvQXRvbWljcy5oCmluZGV4IDc3MmU2ZmViYmQyZTcx
NjlkNDNkNTA3OTVjMWVhZmM1OGVhNjhkMTguLjk5MDdiMzJiZjRlNGJjMzQwNmEwNWIzOTgwYWM3
ZDNjMDYzY2ZkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKQEAgLTE3NCw2ICsxNzQsMTIgQEAgc3RydWN0IEF0b21p
YyB7CiAgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbihmdW5jLCBzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxheGVkLCBhYm9ydExpa2VsaWhvb2QpOwogICAgIH0KIAorICAgIEF0b21pYygpID0gZGVmYXVs
dDsKKyAgICBjb25zdGV4cHIgQXRvbWljKFQgaW5pdGlhbCkKKyAgICAgICAgOiB2YWx1ZShzdGQ6
OmZvcndhcmQ8VD4oaW5pdGlhbCkpCisgICAgeworICAgIH0KKwogICAgIHN0ZDo6YXRvbWljPFQ+
IHZhbHVlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTG9ja2xlc3NCYWcuaCBi
L1NvdXJjZS9XVEYvd3RmL0xvY2tsZXNzQmFnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI0NmJjNWE3OWU2NDc5
NmRjOGMzZDlhMWQwMzFlOGNhNmQzOTg3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL0xvY2tsZXNzQmFnLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXRvbWlj
cy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBhIHNpbXBsZSBzaW5nbGUgY29uc3Vt
ZXIsIG11bHRpcGxlIHByb2R1Y2VyIEJhZyBkYXRhIHN0cnVjdHVyZS4KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK2NsYXNzIExvY2tsZXNzQmFnIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShM
b2NrbGVzc0JhZyk7CisKKyAgICBzdHJ1Y3QgTm9kZSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgVCBkYXRhOworICAgICAgICBOb2RlKiBu
ZXh0OworICAgIH07CitwdWJsaWM6CisgICAgTG9ja2xlc3NCYWcoKQorICAgICAgICA6IG1faGVh
ZChudWxscHRyKQorICAgIHsKKyAgICB9CisKKyAgICBlbnVtIFB1c2hSZXN1bHQgeyBFbXB0eSwg
Tm9uRW1wdHkgfTsKKyAgICBQdXNoUmVzdWx0IGFkZChUIGVsZW1lbnQpCisgICAgeworICAgICAg
ICBOb2RlKiBuZXdOb2RlID0gbmV3IE5vZGUoKTsKKyAgICAgICAgbmV3Tm9kZS0+ZGF0YSA9IFdU
Rk1vdmUoZWxlbWVudCk7CisKKyAgICAgICAgTm9kZSogb2xkSGVhZDsKKyAgICAgICAgbV9oZWFk
LnRyYW5zYWN0aW9uKFsmXSAoTm9kZSomIGhlYWQpIHsKKyAgICAgICAgICAgIG9sZEhlYWQgPSBo
ZWFkOworICAgICAgICAgICAgbmV3Tm9kZS0+bmV4dCA9IGhlYWQ7CisgICAgICAgICAgICBoZWFk
ID0gbmV3Tm9kZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKworICAg
ICAgICByZXR1cm4gb2xkSGVhZCA9PSBudWxscHRyID8gRW1wdHkgOiBOb25FbXB0eTsKKyAgICB9
CisKKyAgICAvLyBDT05TVU1FUiBGVU5DVElPTlM6IEV2ZXJ5dGhpbmcgYmVsb3cgaGVyZSBpcyBv
bmx5IHNhZmUgdG8gY2FsbCBmcm9tIHRoZSBjb25zdW1lciB0aHJlYWQuCisKKyAgICAvLyBUaGlz
IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHNhZmUgdG8gY2FsbCBmcm9tIG1vcmUgdGhhbiBvbmUgdGhy
ZWFkLCBidXQgT05MWSBpZiBubyB0aHJlYWQgY2FuIGNhbGwgY29uc3VtZUFsbC4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgaXRlcmF0ZShjb25zdCBGdW5jdG9yJiBm
dW5jKQorICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1faGVhZC5sb2FkKCk7CisgICAgICAg
IHdoaWxlIChub2RlKSB7CisgICAgICAgICAgICBjb25zdCBUJiBkYXRhID0gbm9kZS0+ZGF0YTsK
KyAgICAgICAgICAgIGZ1bmMoZGF0YSk7CisgICAgICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dm9pZCBjb25zdW1lQWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCisgICAgeworICAgICAgICBOb2Rl
KiBub2RlID0gbV9oZWFkLmV4Y2hhbmdlKG51bGxwdHIpOworICAgICAgICB3aGlsZSAobm9kZSkg
eworICAgICAgICAgICAgZnVuYyhXVEZNb3ZlKG5vZGUtPmRhdGEpKTsKKyAgICAgICAgICAgIE5v
ZGUqIG9sZE5vZGUgPSBub2RlOworICAgICAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CisgICAg
ICAgICAgICBkZWxldGUgb2xkTm9kZTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAg
ICBBdG9taWM8Tm9kZSo+IG1faGVhZDsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuY3BwIGIvU291cmNlL1dURi93
dGYvVGhyZWFkTWVzc2FnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGFhZDNiNzRjNDMwZjcyZjhiZDMzN2Fi
YmQ3ZTI4MTllZTI3Zjc0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZE1lc3NhZ2UuY3BwCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVh
ZE1lc3NhZ2UuaCIKKworI2lmIFVTRShQVEhSRUFEUykKKworI2luY2x1ZGUgPGZjbnRsLmg+Cisj
aW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi90aHJl
YWRzL1NpZ25hbHMuaD4KKworCituYW1lc3BhY2UgV1RGIHsKKworY29uc3QgYm9vbCB2ZXJib3Nl
ID0gdHJ1ZTsKKworY2xhc3MgVGhyZWFkTWVzc2FnZURhdGEgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIFRocmVhZE1lc3NhZ2VEYXRhKGNvbnN0IFRocmVhZE1l
c3NhZ2UmIG0pCisgICAgICAgIDogcmFuKGZhbHNlKQorICAgICAgICAsIG1lc3NhZ2UobSkKKyAg
ICB7CisgICAgfQorCisgICAgQXRvbWljPGJvb2w+IHJhbjsKKyAgICBjb25zdCBUaHJlYWRNZXNz
YWdlJiBtZXNzYWdlOworfTsKKworZW51bSBGaWxlRGVzY3JpcHRvciB7CisgICAgUmVhZCwKKyAg
ICBXcml0ZSwKKyAgICBOdW1iZXJPZkZpbGVEZXNjcmlwdG9ycywKK307CisKK3N0YXRpYyBpbnQg
ZmlsZURlc2NyaXB0b3JzW051bWJlck9mRmlsZURlc2NyaXB0b3JzXTsKK3N0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBtYWdpY0J5dGUgPSAiZCI7CisKKwordm9pZCBpbml0aWFsaXplVGhyZWFkTWVz
c2FnZXMoKQoreworICAgIGludCByZXN1bHQgPSBwaXBlKGZpbGVEZXNjcmlwdG9ycyk7CisgICAg
UkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7CisKKyAgICBpbnQgZmxhZ3MgPSBmY250bChmaWxlRGVz
Y3JpcHRvcnNbV3JpdGVdLCBGX0dFVEZMKTsKKyAgICByZXN1bHQgPSBmY250bChmaWxlRGVzY3Jp
cHRvcnNbV3JpdGVdLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0sgfCBPX0FQUEVORCk7Cisg
ICAgZmxhZ3MgPSBmY250bChmaWxlRGVzY3JpcHRvcnNbV3JpdGVdLCBGX0dFVEZMKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChyZXN1bHQgIT0gLTEpOworICAgIFJFTEVBU0VfQVNTRVJUKChmbGFncyAm
IE9fTk9OQkxPQ0spICYmIChmbGFncyAmIE9fQVBQRU5EKSk7CisKKyAgICBmbGFncyA9IGZjbnRs
KGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgRl9HRVRGTCk7CisgICAgcmVzdWx0ID0gZmNudGwoZmls
ZURlc2NyaXB0b3JzW1JlYWRdLCBGX1NFVEZMLCBmbGFncyAmIH5PX05PTkJMT0NLKTsKKyAgICBm
bGFncyA9IGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgRl9HRVRGTCk7CisgICAgUkVMRUFT
RV9BU1NFUlQocmVzdWx0ICE9IC0xKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghKGZsYWdzICYgT19O
T05CTE9DSykpOworfQorCitTVVBQUkVTU19BU0FOCitNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdl
U2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQorewor
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJzdGFydGluZyBzZW5kIik7CisgICAgY29uc3RleHBy
IFNpZ25hbCBzaWduYWwgPSBTaWduYWw6OlVzcjsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
b25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIGluc3RhbGxTaWdu
YWxIYW5kbGVyKHNpZ25hbCwgW10gKGludCwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1YXApIHsK
KyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJpbiBoYW5kbGVyIik7CisgICAgICAg
ICAgICBUaHJlYWQqIHRocmVhZCA9IFRocmVhZDo6Y3VycmVudE1heUJlTnVsbCgpOworCisgICAg
ICAgICAgICBpZiAoIXRocmVhZCkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiV2Ugc29t
ZWhvdyBnb3QgYSBtZXNzYWdlIG9uIGEgdGhyZWFkIHRoYXQgZGlkbid0IGhhdmUgYSBXVEY6OlRo
cmVhZCBpbml0aWFsaXplZCwgd2UgcHJvYmFibHkgZGVhZGxvY2tlZCwgaGFscC4iKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB0aHJlYWQtPnRocmVhZE1lc3NhZ2VzKCkuY29uc3VtZUFsbChbJl0g
KFRocmVhZE1lc3NhZ2VEYXRhKiBkYXRhKSB7CisgICAgICAgICAgICAgICAgZGF0YS0+bWVzc2Fn
ZShpbmZvLCBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKSk7CisgICAgICAgICAgICAgICAg
ZGF0YS0+cmFuLnN0b3JlKHRydWUpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8v
IFVuZm9ydHVuYXRlbHksIHdlIGNhbid0IGNoZWNrIHRoZSBlcnJubyBoZXJlIHNpbmNlIG90aGVy
IHRocmVhZHMgbWF5IGJlIGRvaW5nCisgICAgICAgICAgICAvLyBvdGhlciBjYWxscyB3aGljaCBz
ZXQgaXQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2Us
ICJ3cml0aW5nIGJ5dGUiKTsKKyAgICAgICAgICAgIHdoaWxlICh3cml0ZShmaWxlRGVzY3JpcHRv
cnNbV3JpdGVdLCBtYWdpY0J5dGUsIDEpID09IC0xKSB7IH0KKyAgICAgICAgICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJsZWF2aW5nIGhhbmRsZXIiKTsKKyAgICAgICAgICAgIHJldHVybiBTaWdu
YWxBY3Rpb246OkhhbmRsZWQ7CisgICAgICAgIH0pOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJi
b3NlLCAiaGFuZGxlciBpbnN0YWxsZWQiKTsKKyAgICB9KTsKKworCisgICAgLy8gU2luY2Ugd2Ug
YXJlIGd1YXJlbnRlZWQgbm90IHRvIHJldHVybiB1bnRpbCB3ZSBnZXQgYSByZXNwb25zZSBmcm9t
IHRoZSBvdGhlciB0aHJlYWQgdGhpcyBpcyBvay4KKyAgICBUaHJlYWRNZXNzYWdlRGF0YSBkYXRh
KG1lc3NhZ2UpOworCisgICAgdGhyZWFkLnRocmVhZE1lc3NhZ2VzKCkuYWRkKCZkYXRhKTsKKyAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAibWVzc2FnZSBxdWV1ZWQiKTsKKyAgICBib29sIHJlc3Vs
dCA9IHRocmVhZC5zaWduYWwodG9TeXN0ZW1TaWduYWwoc2lnbmFsKSk7CisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIHJldHVybiBNZXNzYWdlU3RhdHVzOjpUaHJlYWRFeGl0ZWQ7CisgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiaGVyZSIpOwor
CisgICAgc3RhdGljIFN0YXRpY0xvY2sgcmVhZExvY2s7CisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIocmVhZExvY2spOworICAgICAgICBjb25zdGV4cHIgc2l6
ZV90IGJ1ZmZlclNpemUgPSAxNjsKKyAgICAgICAgY2hhciBidWZmZXJbYnVmZmVyU2l6ZV07CisK
KyAgICAgICAgLy8gSXQncyBhbHdheXMgc2FmZSB0byBjbGVhciB0aGUgcGlwZSBiZWNhdXNlIG9u
bHkgb25lIHRocmVhZCBjYW4gZXZlciBibG9jayB0cnlpbmcgdG8gcmVhZAorICAgICAgICAvLyBm
cm9tIHRoZSBwaXBlLiBUaHVzLCBlYWNoIGJ5dGUgd2UgY2xlYXIgZnJvbSB0aGUgcGlwZSBhY3R1
YWxseSBqdXN0IGNvcnJlc3BvbmRzIHRvIHNvbWUgdGFzaworICAgICAgICAvLyB0aGF0IGhhcyBh
bHJlYWR5IGZpbmlzaGVkLiBXZSBhY3RpdmVseSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBwaXBl
IGRvZXMgbm90IG92ZXJmaWxsIGJlY2F1c2UKKyAgICAgICAgLy8gb3RoZXJ3aXNlIG91ciB3cml0
ZXJzIG1pZ2h0IHNwaW4gdHJ5aW5nIHRvIHdyaXRlLgorICAgICAgICBhdXRvIGNsZWFyUGlwZSA9
IFsmXSB7CisgICAgICAgICAgICBpbnQgZmxhZ3MgPSBmY250bChmaWxlRGVzY3JpcHRvcnNbUmVh
ZF0sIEZfR0VURkwpOworICAgICAgICAgICAgQVNTRVJUKCEoZmxhZ3MgJiBPX05PTkJMT0NLKSk7
CisgICAgICAgICAgICBmY250bChmaWxlRGVzY3JpcHRvcnNbUmVhZF0sIEZfU0VURkwsIGZsYWdz
IHwgT19OT05CTE9DSyk7CisKKyAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHksIHdlIGNhbid0
IGNoZWNrIHRoZSBlcnJubyBoZXJlIHNpbmNlIG90aGVyIHRocmVhZHMgbWF5IGJlIGRvaW5nCisg
ICAgICAgICAgICAvLyBvdGhlciBjYWxscyB3aGljaCBzZXQgaXQgYXQgdGhlIHNhbWUgdGltZS4K
KyAgICAgICAgICAgIHdoaWxlIChyZWFkKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgYnVmZmVyLCBi
dWZmZXJTaXplKSAhPSAtMSkgeyB9CisKKyAgICAgICAgICAgIGZjbnRsKGZpbGVEZXNjcmlwdG9y
c1tSZWFkXSwgRl9TRVRGTCwgZmxhZ3MpOworICAgICAgICB9OworCisgICAgICAgIGlmIChkYXRh
LnJhbi5sb2FkKCkpIHsKKyAgICAgICAgICAgIGNsZWFyUGlwZSgpOworICAgICAgICAgICAgcmV0
dXJuIE1lc3NhZ2VTdGF0dXM6Ok1lc3NhZ2VSYW47CisgICAgICAgIH0KKworICAgICAgICByZWFk
KGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgYnVmZmVyLCAxKTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZl
clswXSA9PSBtYWdpY0J5dGVbMF0pOworICAgICAgICBjbGVhclBpcGUoKTsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRNZXNzYWdlLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OWFlNTNmMjljZjdlOGZiMDBlZjkyMTFkMTZjZTJjZGVkNjAzZWMxYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaApAQCAtMCwwICsxLDYyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFVTRShQVEhSRUFEUykKKworbmFtZXNwYWNl
IFdURiB7CisKK3ZvaWQgaW5pdGlhbGl6ZVRocmVhZE1lc3NhZ2VzKCk7CisKK2NsYXNzIFRocmVh
ZE1lc3NhZ2VEYXRhOwordXNpbmcgVGhyZWFkTWVzc2FnZSA9IFNjb3BlZExhbWJkYTx2b2lkKHNp
Z2luZm9fdCosIHVjb250ZXh0X3QqKT47CisKK2VudW0gY2xhc3MgTWVzc2FnZVN0YXR1cyB7Cisg
ICAgTWVzc2FnZVJhbiwKKyAgICBUaHJlYWRFeGl0ZWQsCit9OworCisvLyBUaGlzIG1ldGhvZCBh
bGxvd3MgdXMgdG8gc2VuZCBhIG1lc3NhZ2Ugd2hpY2ggd2lsbCBiZSBydW4gaW4gYSBzaWduYWwg
aGFuZGxlciBvbiB0aGUgZGVzaXJlZCB0aHJlYWQuCisvLyBUaGVyZSBhcmUgc2V2ZXJhbCBjYXZl
YXRlcyB0byB0aGlzIG1ldGhvZCBob3dldmVyLCBUaGlzIGZ1bmN0aW9uIHVzZXMgc2lnbmFscyBz
byB5b3VyIG1lc3NhZ2Ugc2hvdWxkCisvLyBiZSBzeW5jIHNpZ25hbCBzYWZlLgorTWVzc2FnZVN0
YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmLCBjb25zdCBUaHJlYWRNZXNzYWdlJik7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlKFRo
cmVhZCYgdGFyZ2V0VGhyZWFkLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGF1dG8gbGFt
YmRhID0gc2NvcGVkTGFtYmRhUmVmPHZvaWQoc2lnaW5mb190KiwgdWNvbnRleHRfdCopPihmdW5j
KTsKKyAgICByZXR1cm4gc2VuZE1lc3NhZ2VTY29wZWQodGFyZ2V0VGhyZWFkLCBsYW1iZGEpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpzZW5kTWVzc2FnZTsKKworI2Vu
ZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGlu
Zy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCmluZGV4IGZlZjU4MTFhN2Q1N2Ji
ODlkYzAzNzVmOTExMjJkNWEyNDhjYjIyODYuLjVlMzQ0NTFjZWRhZTUxOWNkYmNlM2EwYzQyMjNl
ZTg1MmZiNDc4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgPHd0Zi9EYXRlTWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXJTZWVkLmg+CiAj
aW5jbHVkZSA8d3RmL1RocmVhZEhvbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdl
Lmg+CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdWaWV3Lmg+CiAKQEAgLTE3OCw2ICsxNzksNyBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRp
bmcoKQogICAgICAgICB3dGZUaHJlYWREYXRhKCk7CiAgICAgICAgIGluaXRpYWxpemVEYXRlcygp
OwogICAgICAgICBUaHJlYWQ6OmluaXRpYWxpemVQbGF0Zm9ybVRocmVhZGluZygpOworICAgICAg
ICBpbml0aWFsaXplVGhyZWFkTWVzc2FnZXMoKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApp
bmRleCBiZDFmOGYzM2UyYWFiNWI1Y2RmYjRjY2I0NjliODU4NWU5YTI0NjRlLi5jMjBhNjVlMjJi
ZmQ1MDNkNmI1NjUxNWQ5NDg0NjcwNjY2MjgxMTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtNDIsNiAr
NDIsNyBAQAogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrbGVzc0JhZy5o
PgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVJl
Z2lzdGVycy5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtNTYsNiArNTcsOCBA
QAogCiBuYW1lc3BhY2UgV1RGIHsKIAorY2xhc3MgVGhyZWFkTWVzc2FnZURhdGE7CisKIHVzaW5n
IFRocmVhZElkZW50aWZpZXIgPSB1aW50MzJfdDsKIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0
aW9uKSh2b2lkKiBhcmd1bWVudCk7CiAKQEAgLTc1LDYgKzc4LDcgQEAgcHVibGljOgogCiAgICAg
Ly8gUmV0dXJucyBUaHJlYWQgb2JqZWN0LgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMg
VGhyZWFkJiBjdXJyZW50KCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWQq
IGN1cnJlbnRNYXlCZU51bGwoKTsKIAogICAgIC8vIFJldHVybnMgVGhyZWFkSWRlbnRpZmllciBk
aXJlY3RseS4gSXQgaXMgdXNlZnVsIGlmIHRoZSB1c2VyIG9ubHkgY2FyZXMgYWJvdXQgaWRlbnRp
dHkKICAgICAvLyBvZiB0aHJlYWRzLiBBdCB0aGF0IHRpbWUsIHVzZXJzIHNob3VsZCBrbm93IHRo
YXQgaG9sZGluZyB0aGlzIFRocmVhZElkZW50aWZpZXIgZG9lcyBub3QgZW5zdXJlCkBAIC0xMzIs
NyArMTM2LDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVQbGF0Zm9y
bVRocmVhZGluZygpOwogCi1wcml2YXRlOgorI2lmIFVTRShQVEhSRUFEUykKKyAgICBMb2NrbGVz
c0JhZzxUaHJlYWRNZXNzYWdlRGF0YSo+JiB0aHJlYWRNZXNzYWdlcygpIHsgcmV0dXJuIG1fdGhy
ZWFkTWVzc2FnZXM7IH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CiAgICAgVGhyZWFkKCk7CiAKICAg
ICAvLyBJbnRlcm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBUaHJlYWQ6OmNyZWF0ZSBpbXBsZW1lbnRh
dGlvbi4KQEAgLTE3Nyw2ICsxODUsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kaWRFeGl0IHsg
ZmFsc2UgfTsKICNpZiBVU0UoUFRIUkVBRFMpCiAgICAgcHRocmVhZF90IG1faGFuZGxlOworCisg
ICAgTG9ja2xlc3NCYWc8VGhyZWFkTWVzc2FnZURhdGEqPiBtX3RocmVhZE1lc3NhZ2VzOwogI2lm
IE9TKERBUldJTikKICAgICBtYWNoX3BvcnRfdCBtX3BsYXRmb3JtVGhyZWFkOwogI2Vsc2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAppbmRleCAzZWU5YTVmNTQ1ZWFmMTI4OTkwZTVh
OWEzYzAxNTQ4ODUyNWJmZmQ3Li4xYTVkOTlmNjE0ZjVkOTVhY2Y2MTcxZWYwMWQwM2QxNGMyMWM3
ZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0yNjQsMTEgKzI2NCwx
OCBAQCB2b2lkIFRocmVhZDo6ZGV0YWNoKCkKICAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsK
IH0KIAotVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQorVGhyZWFkKiBUaHJlYWQ6OmN1cnJlbnRN
YXlCZU51bGwoKQogewogICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3Vy
cmVudCgpOwogICAgIGlmIChkYXRhKQotICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7Cisg
ICAgICAgIHJldHVybiAmZGF0YS0+dGhyZWFkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K1RocmVhZCYgVGhyZWFkOjpjdXJyZW50KCkKK3sKKyAgICBpZiAoVGhyZWFkKiBjdXJyZW50ID0g
Y3VycmVudE1heUJlTnVsbCgpKQorICAgICAgICByZXR1cm4gKmN1cnJlbnQ7CiAKICAgICAvLyBO
b3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlz
aGVkIHlldC4KICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhyZWFk
KCkpOwpAQCAtMjg2LDYgKzI5Myw4IEBAIFRocmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50
SUQoKQogYm9vbCBUaHJlYWQ6OnNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKQogewogICAgIHN0ZDo6
dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIGlmIChoYXNFeGl0
ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGludCBlcnJObyA9IHB0aHJlYWRfa2ls
bChtX2hhbmRsZSwgc2lnbmFsTnVtYmVyKTsKICAgICByZXR1cm4gIWVyck5vOyAvLyBBIDAgZXJy
Tm8gbWVhbnMgc3VjY2Vzcy4KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMv
U2lnbmFscy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjYyZDcxODdlMDU1OGE5OTgzNTVjODZhZjY5YjA3NGUxZjQzMmU0MTUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCkBAIC0wLDAgKzEsMTE1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpZ25hbHMuaCIKKworI2lmIFVTRShQVEhSRUFEUykK
KworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2xlc3NCYWcuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK3N0YXRpYyBMb2NrbGVzc0JhZzxTaWduYWxIYW5kbGVyPiBoYW5kbGVyc1tz
dGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV0gPSB7IH07CitzdGF0
aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFs
OjpOdW1iZXJPZlNpZ25hbHMpXTsKK3N0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25j
ZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKKwor
c3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZv
aWQqIG1jb250ZXh0KQoreworICAgIFNpZ25hbCBzaWduYWwgPSBmcm9tU3lzdGVtU2lnbmFsKHNp
Zyk7CisKKyAgICBhdXRvIHJlc3RvcmVEZWZhdWx0ID0gWyZdIHsKKyAgICAgICAgc3RydWN0IHNp
Z2FjdGlvbiBkZWZhdWx0QWN0aW9uOworICAgICAgICBkZWZhdWx0QWN0aW9uLnNhX2hhbmRsZXIg
PSBTSUdfREZMOworICAgICAgICBzaWdmaWxsc2V0KCZkZWZhdWx0QWN0aW9uLnNhX21hc2spOwor
ICAgICAgICBkZWZhdWx0QWN0aW9uLnNhX2ZsYWdzID0gMDsKKyAgICAgICAgc2lnYWN0aW9uKHNp
ZywgJmRlZmF1bHRBY3Rpb24sIG51bGxwdHIpOworICAgIH07CisKKyAgICAvLyBUaGlzIHNob3Vs
ZG4ndCBoYXBwZW4gYnV0IHdlIG1pZ2h0IGFzIHdlbGwgYmUgY2FyZWZ1bC4KKyAgICBpZiAoc2ln
bmFsID09IFNpZ25hbDo6VW5rbm93bikgeworICAgICAgICBkYXRhTG9nTG4oIldlIHNvbWVob3cg
Z290IGNhbGxlZCBmb3IgYW4gdW5rbm93biBzaWduYWwgIiwgc2lnLCAiLCBoYWxwLiIpOworICAg
ICAgICByZXN0b3JlRGVmYXVsdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9v
bCBkaWRIYW5kbGUgPSBmYWxzZTsKKyAgICBib29sIHJlc3RvcmVEZWZhdWx0SGFuZGxlciA9IGZh
bHNlOworICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0uaXRlcmF0ZShb
Jl0gKGNvbnN0IFNpZ25hbEhhbmRsZXImIGhhbmRsZXIpIHsKKyAgICAgICAgc3dpdGNoIChoYW5k
bGVyKHNpZywgaW5mbywgbWNvbnRleHQpKSB7CisgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpI
YW5kbGVkOgorICAgICAgICAgICAgZGlkSGFuZGxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFNpZ25hbEFjdGlvbjo6Rm9yY2VEZWZhdWx0OgorICAgICAgICAgICAg
cmVzdG9yZURlZmF1bHRIYW5kbGVyID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KTsKKworICAg
IGlmIChyZXN0b3JlRGVmYXVsdEhhbmRsZXIpIHsKKyAgICAgICAgcmVzdG9yZURlZmF1bHQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0cnVjdCBzaWdhY3Rpb24mIG9sZEFjdGlv
biA9IG9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXTsKKyAgICBpZiAoc2ln
bmFsID09IFNpZ25hbDo6VXNyKSB7CisgICAgICAgIGlmIChvbGRBY3Rpb24uc2Ffc2lnYWN0aW9u
KQorICAgICAgICAgICAgb2xkQWN0aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGluZm8sIG1jb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZGlkSGFuZGxlKSB7CisgICAg
ICAgIGlmIChvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKSB7CisgICAgICAgICAgICBvbGRBY3Rpb24u
c2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgbWNvbnRleHQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgcmVzdG9yZURlZmF1bHQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKwordm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWwgc2lnbmFsLCBTaWdu
YWxIYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBBU1NFUlQoc2lnbmFsIDwgU2lnbmFsOjpVbmtu
b3duKTsKKyAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLmFkZChXVEZN
b3ZlKGhhbmRsZXIpKTsKKworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxhZ3Nb
c3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSwgWyZdIHsKKyAgICAgICAgc3RydWN0IHNpZ2Fj
dGlvbiBhY3Rpb247CisgICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBqc2NTaWduYWxIYW5k
bGVyOworICAgICAgICBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7CisgICAgICAgIGFjdGlv
bi5zYV9mbGFncyA9IFNBX1NJR0lORk87CisgICAgICAgIHNpZ2FjdGlvbih0b1N5c3RlbVNpZ25h
bChzaWduYWwpLCAmYWN0aW9uLCAmb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25h
bCldKTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0Uo
UFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaCBi
L1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzYTFkMmU1ODA4
ODFiYWU5MzM5ZTE2NzgxOGE3YjllZjFiODBmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0Uo
UFRIUkVBRFMpCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24u
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK2VudW0gY2xhc3MgU2lnbmFsIHsKKyAgICAvLyBVc3Ig
d2lsbCBhbHdheXMgY2hhaW4gdG8gYW55IG5vbi1kZWZhdWx0IGhhbmRsZXIgaW5zdGFsbCBiZWZv
cmUgdXMuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byBrbm93CisgICAgLy8gaWYgYSBzaWduYWwg
d2FzIGludGVuZGVkIGV4Y2x1c2l2ZWx5IGZvciB1cy4KKyAgICBVc3IsCisKKyAgICAvLyBUaGVz
ZSBzaWduYWxzIHdpbGwgb25seSBjaGFpbiBpZiB3ZSBkb24ndCBoYXZlIGEgaGFuZGxlciB0aGF0
IGNhbiBwcm9jZXNzIHRoZW0uIElmIHRoZXJlIGlzIG5vdGhpbmcKKyAgICAvLyB0byBjaGFpbiB0
byB3ZSByZXN0b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIgYW5kIGNyYXNoLgorICAgIFRyYXAsCisg
ICAgSWxsLAorICAgIFNlZ1YsCisgICAgQnVzLAorICAgIE51bWJlck9mU2lnbmFscywKKyAgICBV
bmtub3duID0gTnVtYmVyT2ZTaWduYWxzCit9OworCitpbmxpbmUgaW50IHRvU3lzdGVtU2lnbmFs
KFNpZ25hbCBzaWduYWwpCit7CisgICAgc3dpdGNoIChzaWduYWwpIHsKKyAgICBjYXNlIFNpZ25h
bDo6U2VnVjogcmV0dXJuIFNJR1NFR1Y7CisgICAgY2FzZSBTaWduYWw6OkJ1czogcmV0dXJuIFNJ
R0JVUzsKKyAgICBjYXNlIFNpZ25hbDo6SWxsOiByZXR1cm4gU0lHSUxMOworICAgIGNhc2UgU2ln
bmFsOjpVc3I6IHJldHVybiBTSUdVU1IyOworICAgIGNhc2UgU2lnbmFsOjpUcmFwOiByZXR1cm4g
U0lHVFJBUDsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworaW5saW5lIFNpZ25hbCBmcm9tU3lzdGVtU2lnbmFsKGludCBz
aWduYWwpCit7CisgICAgc3dpdGNoIChzaWduYWwpIHsKKyAgICBjYXNlIFNJR1NFR1Y6IHJldHVy
biBTaWduYWw6OlNlZ1Y7CisgICAgY2FzZSBTSUdCVVM6IHJldHVybiBTaWduYWw6OkJ1czsKKyAg
ICBjYXNlIFNJR0lMTDogcmV0dXJuIFNpZ25hbDo6SWxsOworICAgIGNhc2UgU0lHVVNSMjogcmV0
dXJuIFNpZ25hbDo6VXNyOworICAgIGNhc2UgU0lHVFJBUDogcmV0dXJuIFNpZ25hbDo6VHJhcDsK
KyAgICBkZWZhdWx0OiByZXR1cm4gU2lnbmFsOjpVbmtub3duOworICAgIH0KK30KKworZW51bSBj
bGFzcyBTaWduYWxBY3Rpb24geworICAgIEhhbmRsZWQsCisgICAgTm90SGFuZGxlZCwKKyAgICBG
b3JjZURlZmF1bHQKK307CisKK3VzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxB
Y3Rpb24oaW50LCBzaWdpbmZvX3QqLCB2b2lkKik+OworCisvLyBDYWxsIHRoaXMgbWV0aG9kIHdo
ZW5ldmVyIHlvdSB3YW50IHRvIGluc3RhbGwgYSBzaWduYWwgaGFuZGxlci4gSXQncyBvayB0byBj
YWxsIHRoaXMgZnVuY3Rpb24gbGF6aWx5LgorLy8gTm90ZTogWW91ciBzaWduYWwgaGFuZGxlciB3
aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBoYW5kbGVyIGZvciB0aGUgZGVzaXJlZCBzaWdu
YWwgaXMgY2FsbGVkLgorLy8gVGh1cyBpdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGRpc2Nl
cm4gaWYgdGhlIHNpZ25hbCBmaXJlZCB3YXMgeW91cnMuCisvLyBUaGlzIGZ1bmN0aW9uIGlzIGN1
cnJlbnRseSBhIG9uZSB3YXkgc3RyZWV0IGkuZS4gb25jZSBpbnN0YWxsZWQsIGEgc2lnbmFsIGhh
bmRsZXIgY2Fubm90IGJlIHVuaW5zdGFsbGVkLgordm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcihT
aWduYWwsIFNpZ25hbEhhbmRsZXImJik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBX
VEY6OlNpZ25hbDsKK3VzaW5nIFdURjo6dG9TeXN0ZW1TaWduYWw7Cit1c2luZyBXVEY6OmZyb21T
eXN0ZW1TaWduYWw7Cit1c2luZyBXVEY6OlNpZ25hbEFjdGlvbjsKK3VzaW5nIFdURjo6aW5zdGFs
bFNpZ25hbEhhbmRsZXI7CisKKyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjU2MTc1OWJmNGNkNjQ2NWY3
YjJjNmQzOGU1YzcyYTM0ZTQ3MDRiMC4uYTNlYWY1OTIwMmE1N2RlOGEzMTVkYjY4ZmEwZDEwZTcz
NWEwNDlmZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA0LTIwICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxs
ZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzaWduYWxpbmcgQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA5NzYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGVzdHMgZm9yIFRocmVhZE1l
c3NhZ2VzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhy
ZWFkTWVzc2FnZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHJ1blRocmVhZE1lc3NhZ2VUZXN0KToK
KyAgICAgICAgKFRFU1QpOgorCiAyMDE3LTA0LTIxICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVkdWNlIGNvcGllcyBhbmQgYWxsb2NhdGlv
bnMgaW4gU2hhcmVkQnVmZmVyOjphcHBlbmQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMGQ4
NWIyYjQ4Y2Y1Y2M4MzVmODdkNjY5ODE1NmRjNzMxZTRkYjQ3NC4uNjM3OGI2ZGEwMTJhNjc2ZjBm
MTRhOGJlZGI4N2U1ZmVkMjYyMmFkOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3NCw2
ICsxNzQsNyBAQAogCQk1MkI4Q0Y5ODE1ODY4RDkxMDAyODEwNTMgLyogU2V0RG9jdW1lbnRVUkku
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MkI4Q0Y5NDE1ODY4Q0YwMDAyODEwNTMgLyogU2V0RG9jdW1lbnRVUkkuaHRtbCAqLzsgfTsK
IAkJNTJENjczRUUxQUZCMTI3MzAwRkExOUZFIC8qIFdLUGFnZUNvcHlTZXNzaW9uU3RhdGVXaXRo
RmlsdGVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUyRDY3M0VDMUFGQjEyNjgwMEZBMTlGRSAvKiBXS1BhZ2VDb3B5U2Vzc2lvblN0YXRlV2l0
aEZpbHRlcmluZy5jcHAgKi87IH07CiAJCTUyRTVDRTQ5MTREMjFFQUIwMDNCMkJEOCAvKiBQYXJl
bnRGcmFtZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJFNUNFNDgxNEQyMUVBQjAwM0IyQkQ4IC8qIFBhcmVudEZyYW1lX0J1bmRsZS5j
cHAgKi87IH07CisJCTUzMTFCRDVFMUVBOTQ5MEUwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1
RDFFQTk0OTBEMDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZXMuY3BwICovOyB9OwogCQk1MzFDMUQ4
RTFERjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzFDMUQ4RDFERjhFRjcyMDA2RTk3OUYgLyogTEVC
RGVjb2Rlci5jcHAgKi87IH07CiAJCTUzNjc3MDM0MUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3Jp
cHRPYmplY3REZXNjcmlwdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3RE
ZXNjcmlwdGlvbi5tbSAqLzsgfTsKIAkJNTM2NzcwMzYxQ0M4MUI2MTAwRDQyNUIxIC8qIFdlYlNj
cmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIxIC8qIFdlYlNj
cmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi87IH07CkBAIC0xMTE2LDYgKzExMTcsNyBAQAog
CQk1MkQ2NzNFQzFBRkIxMjY4MDBGQTE5RkUgLyogV0tQYWdlQ29weVNlc3Npb25TdGF0ZVdpdGhG
aWx0ZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tQYWdl
Q29weVNlc3Npb25TdGF0ZVdpdGhGaWx0ZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MkU1Q0U0NTE0RDIxRTlEMDAzQjJCRDggLyogUGFyZW50RnJhbWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyZW50RnJhbWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MkU1Q0U0ODE0RDIxRUFCMDAzQjJCRDggLyogUGFyZW50
RnJhbWVfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBh
cmVudEZyYW1lX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMTFC
RDVEMUVBOTQ5MEQwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdlcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzMUMxRDhEMURGOEVGNzIwMDZFOTc5RiAvKiBMRUJEZWNvZGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExFQkRlY29kZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzY3NzAzMzFDQzgwMjI4MDBENDI1QjEgLyog
V2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIxIC8qIFdlYlNjcmlwdE9i
amVjdERlc2NyaXB0aW9uLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBXZWJTY3Jp
cHRPYmplY3REZXNjcmlwdGlvbi5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjE3Nyw2ICsyMTc5LDcgQEAKIAkJCQk3Qzc0RDQyRDE4ODIyOEYzMDBFNUVENTcgLyogU3RyaW5n
Vmlldy5jcHAgKi8sCiAJCQkJNTU5N0Y4MzQxRDk1OTZDODAwNjZCQzIxIC8qIFN5bmNocm9uaXpl
ZEZpeGVkUXVldWUuY3BwICovLAogCQkJCTkzMjlBQTI4MURFM0Y4MUUwMDNBQkQwNyAvKiBUZXh0
QnJlYWtJdGVyYXRvci5jcHAgKi8sCisJCQkJNTMxMUJENUQxRUE5NDkwRDAwNTI1MjgxIC8qIFRo
cmVhZE1lc3NhZ2VzLmNwcCAqLywKIAkJCQkwRjJDMjBCNzFEQ0Q1NDQ4MDA1NDJEOUUgLyogVGlt
ZS5jcHAgKi8sCiAJCQkJNUM1RTYzM0QxRDBCNjc5NDAwODVBMDI1IC8qIFVuaXF1ZVJlZi5jcHAg
Ki8sCiAJCQkJN0NEMEQ1QUExRDU1MzRERTAwMENDOUUxIC8qIFZhcmlhbnQuY3BwICovLApAQCAt
MjY5Nyw2ICsyNzAwLDcgQEAKIAkJCQk3QzgzREVFMDFEMEE1OTBDMDBGRUJDRjMgLyogSW50ZWdl
clRvU3RyaW5nQ29udmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzFDMUQ4RTFERjhF
RjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVF
ODFEMEE1OTBDMDBGRUJDRjMgLyogTGlzdEhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTMxMUJENUUxRUE5NDkwRTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2VzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDODNERjFEMUQwQTU5MEMwMEZFQkNGMyAvKiBMb2NrLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDODNERUVEMUQwQTU5MEMwMEZFQkNGMyAvKiBNYXRoRXh0cmFzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdDODNERUVGMUQwQTU5MEMwMEZFQkNGMyAvKiBNRDUuY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJl
YWRNZXNzYWdlcy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNz
YWdlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDlhMjc3M2YyMzQxYWM5YTM2ZDViNGQ0NTVhNzMzNmJkMGY1
YjY0MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Ro
cmVhZE1lc3NhZ2VzLmNwcApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHd0Zi9EYXRh
TG9nLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorCitzdGF0aWMgdm9pZCBydW5UaHJlYWRN
ZXNzYWdlVGVzdCh1bnNpZ25lZCBudW1TZW5kZXJzLCB1bnNpZ25lZCBudW1NZXNzYWdlcykKK3sK
KyAgICBib29sIHJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmcgPSB0cnVlOworICAgIGRhdGFMb2dM
bigic3RhcnRpbmciKTsKKyAgICBSZWZQdHI8VGhyZWFkPiByZWNlaXZlclRocmVhZCA9IFRocmVh
ZDo6Y3JlYXRlKCJUaHJlYWRNZXNzYWdlIHJlY2VpdmVyIiwgWyZyZWNlaXZlclNob3VsZEtlZXBS
dW5uaW5nXSAoKSB7CisgICAgICAgIHdoaWxlIChyZWNlaXZlclNob3VsZEtlZXBSdW5uaW5nKSB7
IH0KKyAgICB9KTsKKyAgICBBU1NFUlRfVFJVRShyZWNlaXZlclRocmVhZCk7CisKKyAgICBWZWN0
b3I8UmVmUHRyPFRocmVhZD4+IHNlbmRlclRocmVhZHMobnVtU2VuZGVycyk7CisgICAgVmVjdG9y
PHVuc2lnbmVkPiBtZXNzYWdlc1J1bihudW1TZW5kZXJzKTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+
IGhhbmRsZXJzUnVuKG51bVNlbmRlcnMpOworICAgIG1lc3NhZ2VzUnVuLmZpbGwoMCk7CisgICAg
aGFuZGxlcnNSdW4uZmlsbCgwKTsKKworICAgIGZvciAodW5zaWduZWQgc2VuZGVySUQgPSAwOyBz
ZW5kZXJJRCA8IG51bVNlbmRlcnM7ICsrc2VuZGVySUQpIHsKKyAgICAgICAgc2VuZGVyVGhyZWFk
c1tzZW5kZXJJRF0gPSBUaHJlYWQ6OmNyZWF0ZSgiVGhyZWFkTWVzc2FnZSBzZW5kZXIiLCBbc2Vu
ZGVySUQsIG51bU1lc3NhZ2VzLCByZWNlaXZlclRocmVhZCwgJm1lc3NhZ2VzUnVuLCAmaGFuZGxl
cnNSdW5dICgpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1NZXNz
YWdlczsgKytpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZW5kTWVzc2FnZSgq
cmVjZWl2ZXJUaHJlYWQuZ2V0KCksIFtzZW5kZXJJRCwgJmhhbmRsZXJzUnVuXSAoc2lnaW5mb190
KiwgdWNvbnRleHRfdCopIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnNSdW5bc2VuZGVy
SURdKys7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUo
cmVzdWx0ID09IFdURjo6TWVzc2FnZVN0YXR1czo6TWVzc2FnZVJhbik7CisgICAgICAgICAgICAg
ICAgbWVzc2FnZXNSdW5bc2VuZGVySURdKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwor
ICAgICAgICBBU1NFUlRfVFJVRShzZW5kZXJUaHJlYWRzW3NlbmRlcklEXSk7CisgICAgfQorCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVNlbmRlcnM7ICsraSkKKyAgICAgICAgc2Vu
ZGVyVGhyZWFkc1tpXS0+d2FpdEZvckNvbXBsZXRpb24oKTsKKworICAgIHJlY2VpdmVyU2hvdWxk
S2VlcFJ1bm5pbmcgPSBmYWxzZTsKKyAgICByZWNlaXZlclRocmVhZC0+d2FpdEZvckNvbXBsZXRp
b24oKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1TZW5kZXJzOyArK2kpIHsK
KyAgICAgICAgRVhQRUNUX0VRKG51bU1lc3NhZ2VzLCBtZXNzYWdlc1J1bltpXSk7CisgICAgICAg
IEVYUEVDVF9FUShudW1NZXNzYWdlcywgaGFuZGxlcnNSdW5baV0pOworICAgIH0KK30KKworVEVT
VChUaHJlYWRNZXNzYWdlLCBCYXNpYykKK3sKKyAgICBydW5UaHJlYWRNZXNzYWdlVGVzdCgxLCAx
KTsKKyAgICBydW5UaHJlYWRNZXNzYWdlVGVzdCgxLCAxMDApOworfQorCitURVNUKFRocmVhZE1l
c3NhZ2UsIE11bHRpcGxlU2VuZGVycykKK3sKKyAgICBydW5UaHJlYWRNZXNzYWdlVGVzdCgxMCwg
MSk7CisgICAgcnVuVGhyZWFkTWVzc2FnZVRlc3QoMTAsIDEwMCk7CisgICAgcnVuVGhyZWFkTWVz
c2FnZVRlc3QoMTAsIDEwMDAwKTsKK30KKworY2xhc3MgUmVmbGVjdGVkVGhyZWFkIDogcHVibGlj
IFRocmVhZCB7CitwdWJsaWM6CisgICAgdXNpbmcgVGhyZWFkOjptX211dGV4OworICAgIHVzaW5n
IFRocmVhZDo6bV9oYW5kbGU7CisgICAgdXNpbmcgVGhyZWFkOjpoYXNFeGl0ZWQ7Cit9OworCitU
RVNUKFRocmVhZE1lc3NhZ2UsIFNpZ25hbHNXb3JrT25FeGl0KQoreworICAgIHN0YXRpYyBib29s
IGhhbmRsZXJSYW4gPSBmYWxzZTsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OlVz
ciwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCopIC0+IFNpZ25hbEFjdGlvbiB7CisgICAgICAg
IGRhdGFMb2dMbigiaGVyZSIpOworICAgICAgICBoYW5kbGVyUmFuID0gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsKKyAgICB9KTsKKworICAgIGJvb2wgcmVjZWl2
ZXJTaG91bGRLZWVwUnVubmluZyA9IHRydWU7CisgICAgUmVmUHRyPFRocmVhZD4gcmVjZWl2ZXJU
aHJlYWQgPSAoVGhyZWFkOjpjcmVhdGUoIlRocmVhZE1lc3NhZ2UgcmVjZWl2ZXIiLAorICAgICAg
ICBbJnJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmddICgpIHsKKyAgICAgICAgICAgIHdoaWxlIChy
ZWNlaXZlclNob3VsZEtlZXBSdW5uaW5nKSB7IH0KKyAgICB9KSk7CisgICAgQVNTRVJUX1RSVUUo
cmVjZWl2ZXJUaHJlYWQpOworCisgICAgYm9vbCBzaWduYWxGaXJlZDsKKyAgICB7CisgICAgICAg
IHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHN0YXRpY19jYXN0PFJlZmxlY3Rl
ZFRocmVhZCo+KHJlY2VpdmVyVGhyZWFkLmdldCgpKS0+bV9tdXRleCk7CisgICAgICAgIHJlY2Vp
dmVyU2hvdWxkS2VlcFJ1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHN0YXRp
Y19jYXN0PFJlZmxlY3RlZFRocmVhZCo+KHJlY2VpdmVyVGhyZWFkLmdldCgpKS0+aGFzRXhpdGVk
KCkpOworICAgICAgICBzbGVlcCgxKTsKKyAgICAgICAgc2lnbmFsRmlyZWQgPSAhcHRocmVhZF9r
aWxsKHN0YXRpY19jYXN0PFJlZmxlY3RlZFRocmVhZCo+KHJlY2VpdmVyVGhyZWFkLmdldCgpKS0+
bV9oYW5kbGUsIHRvU3lzdGVtU2lnbmFsKFNpZ25hbDo6VXNyKSk7CisgICAgfQorCisgICAgcmVj
ZWl2ZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgRVhQRUNUX1RSVUUoaGFuZGxl
clJhbiB8fCAhc2lnbmFsRmlyZWQpOworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307739</attachid>
            <date>2017-04-21 09:33:49 -0700</date>
            <delta_ts>2017-04-21 09:47:48 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170976-20170421123349.patch</filename>
            <type>text/plain</type>
            <size>61255</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NTE3ZjQ2Y2JiMzdhZjUwMjQ4YmI0YzIxMDYyNTVkOWUwYmIyNzI2Li5lMDk2YzBjNDkyZGRjNDlh
ZmNhZmI1OGJlMTkyYTdhNGViNjFlZDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxNy0wNC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgc2lnbmFsaW5nIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RmlsaXAgUGl6bG8uCisKKyAgICAgICAgVXBkYXRlIHZhcmlvdXMgdXNlcyBvZiBzaWdhY3Rpb24g
dG8gdXNlIHRoZSBuZXcgc2lnbmFsaW5nIEFQSS4KKyAgICAgICAgQWxzbyBzd2l0Y2ggVk1UcmFw
cyB0byB1c2UgdGhlIHRocmVhZCBtZXNzYWdlIHN5c3RlbSBpbnN0ZWFkIG9mCisgICAgICAgIHJv
bGxpbmcgaXQncyBvd24uCisKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgor
ICAgICAgICAoSlNDOjppc0pJVFBDKToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgor
ICAgICAgICAoSlNDOjppbnN0YWxsU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChKU0M6OlZNVHJh
cHM6OlZNVHJhcHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQp
OgorICAgICAgICAoSlNDOjpoYW5kbGVTaWd1c3IxKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
aGFuZGxlU2lndHJhcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Omluc3RhbGxTaWduYWxIYW5k
bGVycyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmg6CisgICAgICAgICog
dG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA6CisgICAgICAgIChKU0M6Omluc3RhbGxDcmFz
aEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpoYW5kbGVDcmFzaCk6IERlbGV0ZWQuCisgICAgICAg
ICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjplbmFibGVGYXN0TWVtb3J5KToKKwog
MjAxNy0wNC0yMCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAg
ICAgICAgW2NtYWtlXSBEZWZpbmUgRk9SV0FSRElOR19IRUFERVJTX0RJUiBpbiBXZWJLaXRGUyBh
bmQgdXNlIGl0IGV2ZXJ5d2hlcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggY2RkMjc4MTcwNDJkNzFhNTkxZTU1OGEwMjljZGUz
ZjMxZjlkNDVmOS4uM2I1YjgxODIzZmZlYmU0NzkzOTVlOTVjMWNhYTVmYmY3NWViYjQ4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw3NiBAQAorMjAxNy0wNC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVy
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc2lnbmFsaW5nIEFQSQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTc2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgYnVuY2ggb2Yg
bmV3IGZ1bmN0aW9uYWxpdHkgdG8gV1RGLiBGaXJzdCwgaXQgYWRkCisgICAgICAgIGEgbmV3IGRh
dGEgc3RydWN0dXJlIG9mIGEgbG9ja2xlc3MgYmFnLiBUaGUgTG9ja2xlc3NCYWcgY2xhc3MgY2Fu
CisgICAgICAgIGJlIHVzZWQgYXMgZWl0aGVyIGEgbXVsdGktd3JpdGVyIG11bHRpLXJlYWRlciBs
b2NrbGVzcyBiYWcgb3IgYQorICAgICAgICBtdWx0aS13cml0ZXIgc2luZ2xlIGNvbnN1bWVyIGxv
Y2tsZXNzIGJhZy4KKworICAgICAgICBOZXh0LCB0aGlzIHBhdGNoIGFkZHMgYW4gYWJzdHJhY3Rp
b24gYXJvdW5kIHNpZ2FjdGlvbiBpbiBXVEYuCisgICAgICAgIEJhc2ljYWxseSwgeW91IGNhbiBh
ZGQgYSBoYW5kbGVyLCB3aGljaCBjYW4gYmUgYW4gYXJiaXRyYXJ5CisgICAgICAgIGxhbWJkYS4g
QWx0aG91Z2ggaXQgc2hvdWxkIHN0aWxsIGJlIHNhZmUgZm9yIHRoZSBzaWduYWwgeW91IGFyZQor
ICAgICAgICBoYW5kbGluZy4gIHRoZSBzaWduYWwgaGFuZGxlciBtYW5hZ2VyIHdpbGwgdGhlbiBk
byBhbGwgdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIGhhbmRsaW5nIG9mIGNoYWluaW5nOgorCisg
ICAgICAgIEluIHRoZSBTSUdVU1IgY2FzZSB3ZSBhbHdheXMgZm9yd2FyZCB0aGUgc2lnbmFsIHRv
IGFueSBvdGhlcgorICAgICAgICBub24tZGVmYXVsdCBoYW5kbGVyIGluc3RhbGxlZCBiZWZvcmUg
dXMuIFdlIG5lZWQgdG8gZG8gdGhpcywKKyAgICAgICAgb3RoZXJ3aXNlLCBzaW5jZSBpdCdzIG5v
dCBwb3NzaWJsZSB0byB0ZWxsIGlmIGEgU0lHVVNSIHdhcworICAgICAgICBpbnRlbmRlZCBleGx1
c2l2ZWx5IGZvciBvdXIgaGFuZGxlcnMuIFNpZ25hbCBoYW5kbGVycyBkb24ndCByZWNvcmQKKyAg
ICAgICAgaG93IG1hbnkgdGltZXMgdGhleSB3ZXJlIHNlbnQgb25seSB0aGF0IHRoZXJlIGlzIGF0
IGxlYXN0IG9uZQorICAgICAgICB1bmhhbmRsZWQgc2lnbmFsLgorCisgICAgICAgIEluIHRoZSBm
YXVsdGluZyBjYXNlcyB3ZSByZXF1aXJlIHRoYXQgZXZlcnkgaGFuZGxlIGJlIGFibGUgdG8KKyAg
ICAgICAgcmVjb2duaXNlIGEgZmF1bHQgdGhleSBpbnN0YWxsZWQsIHZzIGNyYXNoZXMuIElmIG5v
bmUgb2Ygb3VyCisgICAgICAgIGhhbmRsZXJzIGNsYWltIHRvIGhhdmUgaGFuZGxlZCB0aGUgZmF1
bHQgd2Ugd2lsbCBmb3J3YXJkIHRoZQorICAgICAgICBmYXVsdC4gSWYgYSBoYW5kbGVyIHdhcyBp
bnN0YWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBmYXVsdCBoYW5kbGVyCisgICAgICAgIHdlIHNpbXBs
eSBjYWxsIHRoYXQgaGFuZGxlciBhbmQgcmVseSBvbiB0aGVtIHRvIHRha2UgdGhlCisgICAgICAg
IGFwcHJvcHJpYXRlIGFjdGlvbi4gSWYgbm8gaGFuZGxlciB3YXMgaW5zdGFsbGVkIGJlZm9yZSBv
dXIgZmlyc3QKKyAgICAgICAgaGFuZGxlciB3ZSByZXN0b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIg
YW5kIGFsbG93IHRoZSBmYXVsdCB0bworICAgICAgICBoYXBwZW4gYWdhaW4uCisKKyAgICAgICAg
RmluYWxseSwgdGhpcyBwYXRjaCBhZGRzIGEgc2lnbmFsIGJhc2VkIG1lc3NhZ2luZyBzeXN0ZW0u
ICBUaGlzCisgICAgICAgIHN5c3RlbSBhbGxvd3MgdGhlIHVzZXIgdG8gcnVuIGFuIGFyYml0cmFy
eSBsYW1iZGEgZnJvbSB0aGUgU0lHVVNSMgorICAgICAgICBzaWduYWwgaGFuZGxlciBvZiBhbnkg
dGFyZ2V0IFdURjo6VGhyZWFkLiBUaGlzIGlzIGFscmVhZHkgaW4gdXNlCisgICAgICAgIGZvciB0
aGUgVk1UcmFwcyBBUEkgd2hpY2ggYWxsb3dzIHVzIHRvIGtpbGwgcm9ndWUgVk1zIGJ5IHNlbmRp
bmcKKyAgICAgICAgdGhlIFZNJ3MgcnVubmluZyBXVEY6OlRocmVhZCBhIFNJR1VTUiBhbmQgcmVx
dWVzdGluZyBpdCBqZXRpc29uCisgICAgICAgIGFsbCBvcHRpbWl6ZWQgY29kZSBhbmQgdGhyb3cg
YW4gdW5jYXRjaGFibGUgZXhjZXB0aW9uIGZyb20gYWxsCisgICAgICAgIGZ1bmN0aW9uIGVudHJp
ZXMvbG9vcCBiYWNrZWRnZXMuICBJbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGFsc28gdXNlCisgICAg
ICAgIHRoaXMgQVBJIGZvciBXYXNtIHRvIHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZXMgaW4g
Y3VycmVudGx5CisgICAgICAgIGV4ZWN1dGluZyBXYXNtIHRocmVhZHMuCisKKyAgICAgICAgKiBX
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgor
ICAgICAgICAoV1RGOjpBdG9taWM6OkF0b21pYyk6CisgICAgICAgICogd3RmL0xvY2tsZXNzQmFn
Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6TG9ja2xlc3NCYWcpOgorICAg
ICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6YWRkKToKKyAgICAgICAgKFdURjo6TG9ja2xlc3NCYWc6
Oml0ZXJhdGUpOgorICAgICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6Y29uc3VtZUFsbCk6CisgICAg
ICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VGhyZWFk
TWVzc2FnZURhdGE6OlRocmVhZE1lc3NhZ2VEYXRhKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6
ZVRocmVhZE1lc3NhZ2VzKToKKyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2VTY29wZWQpOgorICAg
ICAgICAqIHd0Zi9UaHJlYWRNZXNzYWdlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpzZW5kTWVz
c2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OmluaXRp
YWxpemVUaHJlYWRpbmcpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjp0aHJlYWRNZXNzYWdlcyk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJl
YWRzLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWwp
OgorICAgICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6anNjU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChXVEY6Omluc3RhbGxTaWduYWxIYW5kbGVy
KToKKyAgICAgICAgKiB3dGYvdGhyZWFkcy9TaWduYWxzLmg6IEFkZGVkLgorICAgICAgICAoV1RG
Ojp0b1N5c3RlbVNpZ25hbCk6CisgICAgICAgIChXVEY6OmZyb21TeXN0ZW1TaWduYWwpOgorCiAy
MDE3LTA0LTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSBu
b3RGb3VuZCBpbnRvIGl0cyBvd24gZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAppbmRleCA2ZWU2ZmUyODE4N2I5YWE0OWRlYTNjMjM3MWUz
Y2NiYzQzNDcxMDExLi4xMGUxNDQyYWUxMjliYmU0Y2Y0NTI2MThjYmM5ZmM1ZTUzOTMwNDhjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaApA
QCAtODEsNiArODEsMTIgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBleGVjdXRhYmxlUG9vbFJlc2Vy
dmF0aW9uRnJhY3Rpb24gPSAwLjI1OwogZXh0ZXJuIEpTX0VYUE9SVERBVEEgdWludHB0cl90IHN0
YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sOwogZXh0ZXJuIEpTX0VYUE9SVERBVEEgdWlu
dHB0cl90IGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbDsKIAoraW5saW5lIGJvb2wgaXNK
SVRQQyh2b2lkKiBwYykKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3Rh
cnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpIDw9IHBjCisgICAgICAgICYmIHBjIDwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKTsKK30K
KwogdHlwZWRlZiB2b2lkICgqSklUV3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24pKG9mZl90LCBj
b25zdCB2b2lkKiwgc2l6ZV90KTsKIGV4dGVybiBKU19FWFBPUlREQVRBIEpJVFdyaXRlU2VwYXJh
dGVIZWFwc0Z1bmN0aW9uIGppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IGU2Mjg1YTMwYzIyMmE1YWNh
ZGMzOGYwYzliMWI3YWU3YTQ3N2U3ODUuLjlmYzhmMGY3ZTM5MjdjM2ViY2ZjM2RlNWE0YzlkNjE5
NGFjZjQ4ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJh
cHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBA
IC00Miw3ICs0Miw4IEBACiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogCiAjaWYgT1MoREFS
V0lOKQotI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+
CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtNTQsOSArNTUsNiBAQCBBTFdBWVNfSU5MSU5FIFZNJiBWTVRyYXBzOjp2bSgpIGNv
bnN0CiAKICNpZiBFTkFCTEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBTKQogCi1zdHJ1Y3Qgc2lnYWN0
aW9uIG9yaWdpbmFsU2lndXNyMUFjdGlvbjsKLXN0cnVjdCBzaWdhY3Rpb24gb3JpZ2luYWxTaWd0
cmFwQWN0aW9uOwotCiBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgU2lnbmFsQ29udGV4dCht
Y29udGV4dF90JiBtY29udGV4dCkKICAgICAgICAgOiBtY29udGV4dChtY29udGV4dCkKQEAgLTEz
Miw4NyArMTMwLDM1IEBAIHN0YXRpYyBFeHBlY3RlZDxWTUFuZFN0YWNrQm91bmRzLCBWTVRyYXBz
OjpFcnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoU2lnCiAgICAgcmV0dXJuIFZNQW5k
U3RhY2tCb3VuZHMgeyBhY3RpdmVWTSwgc3RhY2tCb3VuZHMgfTsKIH0KIAotc3RhdGljIHZvaWQg
aGFuZGxlU2lndXNyMShpbnQgc2lnbmFsTnVtYmVyLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIHVh
cCkKK3N0YXRpYyB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKCkKIHsKLSAgICBTaWduYWxDb250
ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0KTsK
LSAgICBhdXRvIGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMgPSBmaW5kQWN0aXZlVk1BbmRTdGFja0Jv
dW5kcyhjb250ZXh0KTsKLSAgICBpZiAoYWN0aXZlVk1BbmRTdGFja0JvdW5kcykgeworICAgIGlu
c3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VHJhcCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9p
ZCogdWFwKSAtPiBTaWduYWxBY3Rpb24geworICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQo
c3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0KTsKKworICAgICAgICBp
ZiAoIWlzSklUUEMoY29udGV4dC50cmFwUEMpKQorICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFj
dGlvbjo6Tm90SGFuZGxlZDsKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50bHkgZWF0
cyBhbGwgdHJhcHMgaW5jbHVkaW5nIGppdCBhc3NlcnRzIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhp
cworICAgICAgICAvLyBhbHdheXMgd29ya3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzEwMzkKKyAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0g
ZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoY29udGV4dCk7CisgICAgICAgIGlmICghYWN0aXZl
Vk1BbmRTdGFja0JvdW5kcykKKyAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRs
ZWQ7IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KKwogICAgICAgICBW
TSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07CiAgICAgICAgIGlmICh2
bSkgewotICAgICAgICAgICAgU3RhY2tCb3VuZHMgc3RhY2tCb3VuZHMgPSBhY3RpdmVWTUFuZFN0
YWNrQm91bmRzLnZhbHVlKCkuc3RhY2tCb3VuZHM7CiAgICAgICAgICAgICBWTVRyYXBzJiB0cmFw
cyA9IHZtLT50cmFwcygpOwotICAgICAgICAgICAgaWYgKHRyYXBzLm5lZWRUcmFwSGFuZGxpbmco
KSkKLSAgICAgICAgICAgICAgICB0cmFwcy50cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKGNvbnRl
eHQsIHN0YWNrQm91bmRzKTsKKyAgICAgICAgICAgIGlmICghdHJhcHMubmVlZFRyYXBIYW5kbGlu
ZygpKQorICAgICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7IC8vIFRo
ZSBwb2xsaW5nIGNvZGUgYmVhdCB1cyB0byBoYW5kbGluZyB0aGUgdHJhcCBhbHJlYWR5LgorCisg
ICAgICAgICAgICBhdXRvIGV4cGVjdGVkU3VjY2VzcyA9IHRyYXBzLnRyeUpldHRpc29uQ29kZUJs
b2Nrc09uU3RhY2soY29udGV4dCk7CisgICAgICAgICAgICBpZiAoIWV4cGVjdGVkU3VjY2VzcykK
KyAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOyAvLyBMZXQgdGhl
IFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRT
dWNjZXNzLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFu
ZGxlZDsgLy8gV2UndmUgc3VjY2VzcyBqZXR0aXNvbiB0aGUgY29kZUJsb2Nrcy4KICAgICAgICAg
fQotICAgIH0KLQotICAgIGF1dG8gb3JpZ2luYWxBY3Rpb24gPSBvcmlnaW5hbFNpZ3VzcjFBY3Rp
b24uc2Ffc2lnYWN0aW9uOwotICAgIGlmIChvcmlnaW5hbEFjdGlvbikKLSAgICAgICAgb3JpZ2lu
YWxBY3Rpb24oc2lnbmFsTnVtYmVyLCBpbmZvLCB1YXApOwotfQotCi1zdGF0aWMgdm9pZCBoYW5k
bGVTaWd0cmFwKGludCBzaWduYWxOdW1iZXIsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogdWFwKQot
ewotICAgIFNpZ25hbENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFw
KS0+dWNfbWNvbnRleHQpOwotICAgIGF1dG8gYWN0aXZlVk1BbmRTdGFja0JvdW5kcyA9IGZpbmRB
Y3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRleHQpOwotICAgIGlmICghYWN0aXZlVk1BbmRTdGFj
a0JvdW5kcykKLSAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdh
aW4gbGF0ZXIuCi0KLSAgICBWTSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCku
dm07Ci0gICAgaWYgKHZtKSB7Ci0gICAgICAgIFZNVHJhcHMmIHRyYXBzID0gdm0tPnRyYXBzKCk7
Ci0gICAgICAgIGlmICghdHJhcHMubmVlZFRyYXBIYW5kbGluZygpKQotICAgICAgICAgICAgcmV0
dXJuOyAvLyBUaGUgcG9sbGluZyBjb2RlIGJlYXQgdXMgdG8gaGFuZGxpbmcgdGhlIHRyYXAgYWxy
ZWFkeS4KIAotICAgICAgICBhdXRvIGV4cGVjdGVkU3VjY2VzcyA9IHRyYXBzLnRyeUpldHRpc29u
Q29kZUJsb2Nrc09uU3RhY2soY29udGV4dCk7Ci0gICAgICAgIGlmICghZXhwZWN0ZWRTdWNjZXNz
KQotICAgICAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4g
bGF0ZXIuCi0gICAgICAgIGlmIChleHBlY3RlZFN1Y2Nlc3MudmFsdWUoKSkKLSAgICAgICAgICAg
IHJldHVybjsgLy8gV2UndmUgc3VjY2VzcyBqZXR0aXNvbiB0aGUgY29kZUJsb2Nrcy4KLSAgICB9
Ci0KLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlbiB0aGlzIFNJR1RSQVAgaXMgbm90IGR1ZSB0
byBhIFZNVHJhcC4gTGV0J3MgZG8gdGhlIGRlZmF1bHQgYWN0aW9uLgotICAgIGF1dG8gb3JpZ2lu
YWxBY3Rpb24gPSBvcmlnaW5hbFNpZ3RyYXBBY3Rpb24uc2Ffc2lnYWN0aW9uOwotICAgIGlmIChv
cmlnaW5hbEFjdGlvbikgewotICAgICAgICAvLyBJdCBpcyBhbHdheXMgc2FmZSB0byBqdXN0IGlu
dm9rZSB0aGUgb3JpZ2luYWwgaGFuZGxlciB1c2luZyB0aGUgc2Ffc2lnYWN0aW9uIGZvcm0KLSAg
ICAgICAgLy8gd2l0aG91dCBjaGVja2luZyBmb3IgdGhlIFNBX1NJR0lORk8gZmxhZy4gSWYgdGhl
IG9yaWdpbmFsIGhhbmRsZXIgaXMgb2YgdGhlCi0gICAgICAgIC8vIHNhX2hhbmRsZXIgZm9ybSwg
aXQgd2lsbCBqdXN0IGlnbm9yZSB0aGUgMm5kIGFuZCAzcmQgYXJndW1lbnRzIHNpbmNlIHNhX2hh
bmRsZXIgaXMgYQotICAgICAgICAvLyBzdWJzZXQgb2Ygc2Ffc2lnYWN0aW9uLiBUaGlzIGlzIHdo
YXQgdGhlIG1hbiBwYWdlcyBzYXlzIHRoZSBPUyBkb2VzIGFueXdheS4KLSAgICAgICAgb3JpZ2lu
YWxBY3Rpb24oc2lnbmFsTnVtYmVyLCBpbmZvLCB1YXApOwotICAgIH0KLSAgICAKLSAgICAvLyBQ
cmUtZW1wdGl2ZWx5IHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBidXQgd2UgbWF5IHJvbGwg
aXQgYmFjayBiZWxvdy4KLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGN1cnJlbnRBY3Rpb247Ci0gICAg
c3RydWN0IHNpZ2FjdGlvbiBkZWZhdWx0QWN0aW9uOwotICAgIGRlZmF1bHRBY3Rpb24uc2FfaGFu
ZGxlciA9IFNJR19ERkw7Ci0gICAgc2lnZmlsbHNldCgmZGVmYXVsdEFjdGlvbi5zYV9tYXNrKTsK
LSAgICBkZWZhdWx0QWN0aW9uLnNhX2ZsYWdzID0gMDsKLSAgICBzaWdhY3Rpb24oU0lHVFJBUCwg
JmRlZmF1bHRBY3Rpb24sICZjdXJyZW50QWN0aW9uKTsKLSAgICAKLSAgICBpZiAoY3VycmVudEFj
dGlvbi5zYV9zaWdhY3Rpb24gIT0gaGFuZGxlU2lndHJhcCkgewotICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgdGhlcmUncyBhIGNsaWVudCBoYW5kbGVyIGluc3RhbGxlZCBhZnRlciB1cy4gVGhp
cyBhbHNvIG1lYW5zCi0gICAgICAgIC8vIHRoYXQgdGhlIGNsaWVudCBoYW5kbGVyIHRoaW5rcyBp
dCB3YXMgYWJsZSB0byByZWNvdmVyIGZyb20gdGhlIFNJR1RSQVAsIGFuZAotICAgICAgICAvLyBk
aWQgbm90IHVuaW5zdGFsbCBpdHNlbGYuIFdlIGNhbid0IGFyZ3VlIHdpdGggdGhpcyBiZWNhdXNl
IHRoZSBzaWduYWwgaXNuJ3QKLSAgICAgICAgLy8ga25vd24gdG8gYmUgZnJvbSBhIFZNVHJhcHMg
c2lnbmFsLiBIZW5jZSwgcmVzdG9yZSB0aGUgY2xpZW50IGhhbmRsZXIKLSAgICAgICAgLy8gYW5k
IGtlZXAgZ29pbmcuCi0gICAgICAgIHNpZ2FjdGlvbihTSUdUUkFQLCAmY3VycmVudEFjdGlvbiwg
bnVsbHB0cik7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcnMo
KQotewotICAgIHR5cGVkZWYgdm9pZCAoKiBTaWdhY3Rpb25IYW5kbGVyKShpbnQsIHNpZ2luZm9f
dCAqLCB2b2lkICopOwotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotCi0gICAgYWN0aW9u
LnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2lnYWN0aW9uSGFuZGxlcj4oaGFuZGxl
U2lndXNyMSk7Ci0gICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5z
YV9mbGFncyA9IFNBX1NJR0lORk87Ci0gICAgc2lnYWN0aW9uKFNJR1VTUjEsICZhY3Rpb24sICZv
cmlnaW5hbFNpZ3VzcjFBY3Rpb24pOwotCi0gICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8U2lnYWN0aW9uSGFuZGxlcj4oaGFuZGxlU2lndHJhcCk7Ci0gICAgc2lnZmls
bHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87
Ci0gICAgc2lnYWN0aW9uKFNJR1RSQVAsICZhY3Rpb24sICZvcmlnaW5hbFNpZ3RyYXBBY3Rpb24p
OworICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOworICAgIH0pOwogfQogCiBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBDYWxsRnJhbWUqIHNhbml0aXplZFRvcENhbGxGcmFtZShDYWxs
RnJhbWUqIHRvcENhbGxGcmFtZSkKQEAgLTQwMCw3ICszNDYsNyBAQCBWTVRyYXBzOjpWTVRyYXBz
KCkKICAgICBpZiAoIU9wdGlvbnM6OnVzZVBvbGxpbmdUcmFwcygpKSB7CiAgICAgICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlOwogICAgICAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7
Ci0gICAgICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcnMoKTsKKyAgICAgICAgICAgIGluc3Rh
bGxTaWduYWxIYW5kbGVyKCk7CiAgICAgICAgIH0pOwogICAgIH0KICNlbmRpZgpAQCAtNDYwLDcg
KzQwNiwxOSBAQCB2b2lkIFZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6c2VuZCgpCiAgICAgICAgICAg
ICBWTSYgdm0gPSAqbV92bTsKICAgICAgICAgICAgIGF1dG8gb3B0aW9uYWxPd25lclRocmVhZCA9
IHZtLm93bmVyVGhyZWFkKCk7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxPd25lclRocmVhZCkg
ewotICAgICAgICAgICAgICAgIG9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS0+c2lnbmFsKFNJ
R1VTUjEpOworICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKCpvcHRpb25hbE93bmVyVGhyZWFk
LnZhbHVlKCkuZ2V0KCksIFtdIChzaWdpbmZvX3QqLCB1Y29udGV4dF90KiB1Y29udGV4dCkgLT4g
dm9pZCB7CisgICAgICAgICAgICAgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dCh1Y29udGV4
dC0+dWNfbWNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGFjdGl2ZVZNQW5kU3Rh
Y2tCb3VuZHMgPSBmaW5kQWN0aXZlVk1BbmRTdGFja0JvdW5kcyhjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZNKiB2bSA9IGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMudmFsdWUoKS52bTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2bSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzID0gYWN0aXZlVk1BbmRTdGFja0JvdW5kcy52YWx1
ZSgpLnN0YWNrQm91bmRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZNVHJhcHMmIHRy
YXBzID0gdm0tPnRyYXBzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYXBz
Lm5lZWRUcmFwSGFuZGxpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJh
cHMudHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhjb250ZXh0LCBzdGFja0JvdW5kcyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5oCmluZGV4IGZkYmEyYWZkODMxZjAwZGJlMmJi
NTU2YWJhMTNjNWFkYmQ4MTBiMTYuLjU0MjViMTg4MzMyN2ZhZDgzZWM2MDI0MjZhZTk2ODEzNWZj
YjA1ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmgKQEAgLTQyLDcg
KzQyLDggQEAgY2xhc3MgVk1UcmFwcyB7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBFcnJvciB7
CiAgICAgICAgIE5vbmUsCi0gICAgICAgIExvY2tVbmF2YWlsYWJsZQorICAgICAgICBMb2NrVW5h
dmFpbGFibGUsCisgICAgICAgIE5vdEpJVENvZGUKICAgICB9OwogCiAgICAgZW51bSBFdmVudFR5
cGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNo
QW5hbHl6ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwCmluZGV4IDI2NWM2NjE1NWQxYWRiOGRhOThiZDc4OTQyMDI5Mjk4M2Q2MTI3M2Qu
LmFlZTZkZDI4ZDg1MjdjN2NkZjFmZDFkOTA4YWFhMzI0Y2Q1MjY4ZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKQEAgLTM3
LDkgKzM3LDcgQEAKICNpbmNsdWRlICJBNjRET3Bjb2RlLmgiCiAjZW5kaWYKIAotI2lmIEhBVkUo
U0lHTkFMX0gpCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvdGhy
ZWFkcy9TaWduYWxzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNDEsNTggKzEzOSwxOSBA
QCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwogfTsKIAot
c3RydWN0IHNpZ2FjdGlvbiBvcmlnaW5hbFNpZ0lsbEFjdGlvbjsKLQotc3RhdGljIHZvaWQgaGFu
ZGxlQ3Jhc2goaW50IHNpZ25hbE51bWJlciwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1YXApCi17
Ci0gICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXAp
LT51Y19tY29udGV4dCk7Ci0gICAgU2lnaWxsQ3Jhc2hBbmFseXplciYgYW5hbHl6ZXIgPSBTaWdp
bGxDcmFzaEFuYWx5emVyOjppbnN0YW5jZSgpOwotICAgIGF1dG8gY3Jhc2hTb3VyY2UgPSBhbmFs
eXplci5hbmFseXplKGNvbnRleHQpOwotCi0gICAgYXV0byBvcmlnaW5hbEFjdGlvbiA9IG9yaWdp
bmFsU2lnSWxsQWN0aW9uLnNhX3NpZ2FjdGlvbjsKLSAgICBpZiAob3JpZ2luYWxBY3Rpb24pIHsK
LSAgICAgICAgLy8gSXQgaXMgYWx3YXlzIHNhZmUgdG8ganVzdCBpbnZva2UgdGhlIG9yaWdpbmFs
IGhhbmRsZXIgdXNpbmcgdGhlIHNhX3NpZ2FjdGlvbiBmb3JtCi0gICAgICAgIC8vIHdpdGhvdXQg
Y2hlY2tpbmcgZm9yIHRoZSBTQV9TSUdJTkZPIGZsYWcuIElmIHRoZSBvcmlnaW5hbCBoYW5kbGVy
IGlzIG9mIHRoZQotICAgICAgICAvLyBzYV9oYW5kbGVyIGZvcm0sIGl0IHdpbGwganVzdCBpZ25v
cmUgdGhlIDJuZCBhbmQgM3JkIGFyZ3VtZW50cyBzaW5jZSBzYV9oYW5kbGVyIGlzIGEKLSAgICAg
ICAgLy8gc3Vic2V0IG9mIHNhX3NpZ2FjdGlvbi4gVGhpcyBpcyB3aGF0IHRoZSBtYW4gcGFnZXMg
c2F5cyB0aGUgT1MgZG9lcyBhbnl3YXkuCi0gICAgICAgIG9yaWdpbmFsQWN0aW9uKHNpZ25hbE51
bWJlciwgaW5mbywgdWFwKTsKLSAgICB9Ci0KLSAgICBpZiAoY3Jhc2hTb3VyY2UgPT0gU2lnaWxs
Q3Jhc2hBbmFseXplcjo6Q3Jhc2hTb3VyY2U6OkphdmFTY3JpcHRDb3JlKSB7Ci0gICAgICAgIC8v
IFJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBzbyB0aGF0IHdlIGNhbiBnZXQgYSBjb3JlIGR1
bXAuCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gZGVmYXVsdEFjdGlvbjsKLSAgICAgICAgZGVm
YXVsdEFjdGlvbi5zYV9oYW5kbGVyID0gU0lHX0RGTDsKLSAgICAgICAgc2lnZmlsbHNldCgmZGVm
YXVsdEFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgZGVmYXVsdEFjdGlvbi5zYV9mbGFncyA9IDA7
Ci0gICAgICAgIHNpZ2FjdGlvbihTSUdJTEwsICZkZWZhdWx0QWN0aW9uLCBudWxscHRyKTsKLSAg
ICB9IGVsc2UgaWYgKCFvcmlnaW5hbEFjdGlvbikgewotICAgICAgICAvLyBQcmUtZW1wdGl2ZWx5
IHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBidXQgd2UgbWF5IHJvbGwgaXQgYmFjayBiZWxv
dy4KLSAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBjdXJyZW50QWN0aW9uOwotICAgICAgICBzdHJ1
Y3Qgc2lnYWN0aW9uIGRlZmF1bHRBY3Rpb247Ci0gICAgICAgIGRlZmF1bHRBY3Rpb24uc2FfaGFu
ZGxlciA9IFNJR19ERkw7Ci0gICAgICAgIHNpZ2ZpbGxzZXQoJmRlZmF1bHRBY3Rpb24uc2FfbWFz
ayk7Ci0gICAgICAgIGRlZmF1bHRBY3Rpb24uc2FfZmxhZ3MgPSAwOwotICAgICAgICBzaWdhY3Rp
b24oU0lHSUxMLCAmZGVmYXVsdEFjdGlvbiwgJmN1cnJlbnRBY3Rpb24pOwotCi0gICAgICAgIGlm
IChjdXJyZW50QWN0aW9uLnNhX3NpZ2FjdGlvbiAhPSBoYW5kbGVDcmFzaCkgewotICAgICAgICAg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZXJlJ3MgYSBjbGllbnQgaGFuZGxlciBpbnN0YWxsZWQg
YWZ0ZXIgdXMuIFRoaXMgYWxzbyBtZWFucwotICAgICAgICAgICAgLy8gdGhhdCB0aGUgY2xpZW50
IGhhbmRsZXIgdGhpbmtzIGl0IHdhcyBhYmxlIHRvIHJlY292ZXIgZnJvbSB0aGUgU0lHSUxMLCBh
bmQKLSAgICAgICAgICAgIC8vIGRpZCBub3QgdW5pbnN0YWxsIGl0c2VsZi4gV2UgY2FuJ3QgYXJn
dWUgd2l0aCB0aGlzIGJlY2F1c2UgdGhlIGNyYXNoIGlzbid0Ci0gICAgICAgICAgICAvLyBrbm93
biB0byBiZSBmcm9tIGEgSmF2YVNjcmlwdENvcmUgc291cmNlLiBIZW5jZSwgcmVzdG9yZSB0aGUg
Y2xpZW50IGhhbmRsZXIKLSAgICAgICAgICAgIC8vIGFuZCBrZWVwIGdvaW5nLgotICAgICAgICAg
ICAgc2lnYWN0aW9uKFNJR0lMTCwgJmN1cnJlbnRBY3Rpb24sIG51bGxwdHIpOwotICAgICAgICB9
Ci0gICAgfQotfQotCiBzdGF0aWMgdm9pZCBpbnN0YWxsQ3Jhc2hIYW5kbGVyKCkKIHsKICNpZiBD
UFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Ci0g
ICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAoKikoaW50LCBz
aWdpbmZvX3QgKiwgdm9pZCAqKT4oaGFuZGxlQ3Jhc2gpOwotICAgIHNpZ2ZpbGxzZXQoJmFjdGlv
bi5zYV9tYXNrKTsKLSAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOwotICAgIHNpZ2Fj
dGlvbihTSUdJTEwsICZhY3Rpb24sICZvcmlnaW5hbFNpZ0lsbEFjdGlvbik7CisgICAgaW5zdGFs
bFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpJbGwsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVh
cCkgeworICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRf
dCo+KHVhcCktPnVjX21jb250ZXh0KTsKKworICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4dC5t
YWNoaW5lUEMpKQorICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsK
KworICAgICAgICBTaWdpbGxDcmFzaEFuYWx5emVyJiBhbmFseXplciA9IFNpZ2lsbENyYXNoQW5h
bHl6ZXI6Omluc3RhbmNlKCk7CisgICAgICAgIGFuYWx5emVyLmFuYWx5emUoY29udGV4dCk7Cisg
ICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CisgICAgfSk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShoYW5kbGVDcmFzaCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggODk4
MTA0YmQ0OGFkYjExODg2NWE5YzhkZWU1YjU2ZjRlNjZiZWE4Mi4uMmUwYzk5YTM5YmViZDMxNzhi
OTE0OGQ5NThmZTUzZTU3YTYyMjk3ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKQEAgLTM1LDkgKzM1LDkgQEAKICNp
bmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgogCi0jaW5jbHVk
ZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTUwLDExICs1MCw5IEBAIHN0YXRpYyBMYXp5
TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4+PiBjb2RlTG9j
YXRpb25zOyAvLyAoCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfRkFTVF9NRU1PUlkpCiAKLXN0
YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ0J1c0hhbmRsZXI7Ci1zdGF0aWMgc3RydWN0IHNp
Z2FjdGlvbiBvbGRTaWdTZWd2SGFuZGxlcjsKIHN0YXRpYyBib29sIGZhc3RIYW5kbGVySW5zdGFs
bGVkIHsgZmFsc2UgfTsKIAotc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2ln
aW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKK3N0YXRpYyBTaWduYWxBY3Rpb24gdHJh
cEhhbmRsZXIoaW50LCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQogewogICAg
IG1jb250ZXh0X3QmIGNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQp
LT51Y19tY29udGV4dDsKICAgICB2b2lkKiBmYXVsdGluZ0luc3RydWN0aW9uID0gTWFjaGluZUNv
bnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihjb250ZXh0KTsKQEAgLTYzLDkgKzYxLDcgQEAgc3Rh
dGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lk
KiB1Y29udGV4dCkKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSklUIG1lbW9yeSBzdGFydDog
IiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihzdGFydE9mRml4ZWRFeGVjdXRh
YmxlTWVtb3J5UG9vbCkpLCAiIGVuZDogIiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZv
aWQqPihlbmRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpKSk7CiAgICAgLy8gRmlyc3Qgd2Ug
bmVlZCB0byBtYWtlIHN1cmUgd2UgYXJlIGluIEpJVCBjb2RlIGJlZm9yZSB3ZSBjYW4gYXF1aXJl
IGFueSBsb2Nrcy4gT3RoZXJ3aXNlLAogICAgIC8vIHdlIG1pZ2h0IGhhdmUgY3Jhc2hlZCBpbiBj
b2RlIHRoYXQgaXMgYWxyZWFkeSBob2xkaW5nIG9uZSBvZiB0aGUgbG9ja3Mgd2Ugd2FudCB0byBh
cXVpcmUuCi0gICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXJ0T2ZGaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sKSA8PSBmYXVsdGluZ0luc3RydWN0aW9uCi0gICAgICAgICYmIGZhdWx0
aW5nSW5zdHJ1Y3Rpb24gPCByZWludGVycHJldF9jYXN0PHZvaWQqPihlbmRPZkZpeGVkRXhlY3V0
YWJsZU1lbW9yeVBvb2wpKSB7Ci0KKyAgICBpZiAoaXNKSVRQQyhmYXVsdGluZ0luc3RydWN0aW9u
KSkgewogICAgICAgICBib29sIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSBmYWxzZTsKICAg
ICAgICAgewogICAgICAgICAgICAgdm9pZCogZmF1bHRpbmdBZGRyZXNzID0gc2lnSW5mby0+c2lf
YWRkcjsKQEAgLTg5LDE3ICs4NSwxMiBAQCBzdGF0aWMgdm9pZCB0cmFwSGFuZGxlcihpbnQgc2ln
bmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQogICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiZm91bmQgc3R1YjogIiwgUmF3UG9pbnRlcihleGNl
cHRpb25TdHViLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIE1hY2hpbmVDb250ZXh0Ojphcmd1bWVudFBvaW50ZXI8MT4oY29udGV4dCkgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7
CiAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIo
Y29udGV4dCkgPSBleGNlcHRpb25TdHViLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaWdu
YWxBY3Rpb246OkhhbmRsZWQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQotCi0gICAgLy8gU2luY2Ugd2Ugb25seSB1c2UgZmFzdCBtZW1vcnkgaW4g
cHJvY2Vzc2VzIHdlIGNvbnRyb2wsIGlmIHdlIHJlc3RvcmUgd2Ugd2lsbCBqdXN0IGZhbGwgYmFj
ayB0byB0aGUgZGVmYXVsdCBoYW5kbGVyLgotICAgIGlmIChzaWduYWwgPT0gU0lHQlVTKQotICAg
ICAgICBzaWdhY3Rpb24oc2lnbmFsLCAmb2xkU2lnQnVzSGFuZGxlciwgbnVsbHB0cik7Ci0gICAg
ZWxzZQotICAgICAgICBzaWdhY3Rpb24oc2lnbmFsLCAmb2xkU2lnU2VndkhhbmRsZXIsIG51bGxw
dHIpOworICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CiB9CiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFlfRkFTVF9NRU1PUlkpCkBAIC0xMzMsMjIgKzEyNCwxMyBAQCB2
b2lkIGVuYWJsZUZhc3RNZW1vcnkoKQogICAgICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZX0ZBU1RfTUVNT1JZKQotICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlv
bjsKLQotICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gdHJhcEhhbmRsZXI7Ci0gICAgICAg
IHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0g
U0FfU0lHSU5GTzsKLSAgICAgICAgCi0gICAgICAgIC8vIEluc3RhbGxpbmcgc2lnbmFsIGhhbmRs
ZXJzIGZhaWxzIHdoZW4KLSAgICAgICAgLy8gMS4gc3BlY2lmaWNpZWQgc2lnIGlzIGluY29ycmVj
dCAoaW52YWxpZCB2YWx1ZXMgb3Igc2lnbmFsIG51bWJlcnMgd2hpY2ggY2Fubm90IGJlIGhhbmRs
ZWQpLCBvcgotICAgICAgICAvLyAyLiBzZWNvbmQgb3IgdGhpcmQgcGFyYW1ldGVyIHBvaW50cyBp
bmNvcnJlY3QgcG9pbnRlcnMuCi0gICAgICAgIC8vIFRodXMsIHdlIG11c3Qgbm90IGZhaWwgaW4g
dGhlIGZvbGxvd2luZyBhdHRlbXB0cy4KLSAgICAgICAgaW50IHJldCA9IDA7Ci0gICAgICAgIHJl
dCA9IHNpZ2FjdGlvbihTSUdCVVMsICZhY3Rpb24sICZvbGRTaWdCdXNIYW5kbGVyKTsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIXJldCk7Ci0KLSAgICAgICAgcmV0ID0gc2lnYWN0aW9uKFNJR1NF
R1YsICZhY3Rpb24sICZvbGRTaWdTZWd2SGFuZGxlcik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFyZXQpOworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OkJ1cywgW10gKGlu
dCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWwsIHNpZ0luZm8sIHVjb250ZXh0KTsKKyAgICAg
ICAgfSk7CisKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpTZWdWLCBbXSAo
aW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRyYXBIYW5kbGVyKHNpZ25hbCwgc2lnSW5mbywgdWNvbnRleHQpOworICAg
ICAgICB9KTsKIAogICAgICAgICBjb2RlTG9jYXRpb25zLmNvbnN0cnVjdCgpOwogICAgICAgICBm
YXN0SGFuZGxlckluc3RhbGxlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA5NGMxMTZiZjEyMzE0YWIwMDE4NjljNjdhMDU5MDFhMDE2ODBmYmZj
Li5mYjdhOTAxZmEyNzMxNDgzZjRlMzZhZGNmMzJhZWU4M2VmZmQyNDFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0OSw2ICsxNDksMTEgQEAKIAkJNTE1
Rjc5NTAxQ0ZDOUY0QTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkVGFzay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1Rjc5NEQxQ0ZDOUY0QTAwQ0NFRDkz
IC8qIENyb3NzVGhyZWFkVGFzay5oICovOyB9OwogCQk1MTVGNzk1NjFDRkQzQTY5MDBDQ0VEOTMg
LyogQ3Jvc3NUaHJlYWRRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUu
aCAqLzsgfTsKIAkJNTIxODMwMTJDOTlFNDc2QTg0RUVCRUE4IC8qIFN5bWJvbEltcGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjcyQkJEQjEwN0ZB
NDI0ODg2MTc4QjlFIC8qIFN5bWJvbEltcGwuY3BwICovOyB9OworCQk1MzExQkQ1MzFFQTcxQ0FE
MDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgKi87
IH07CisJCTUzMTFCRDU2MUVBN0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVzc0JhZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENTUxRUE3RTE1QTAw
NTI1MjgxIC8qIExvY2tsZXNzQmFnLmggKi87IH07CisJCTUzMTFCRDU4MUVBN0UxQTEwMDUyNTI4
MSAvKiBTaWduYWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzExQkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oICovOyB9OworCQk1MzEx
QkQ1QTFFQTgxQTk2MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8q
IFRocmVhZE1lc3NhZ2UuaCAqLzsgfTsKKwkJNTMxMUJENUMxRUE4MjJGOTAwNTI1MjgxIC8qIFRo
cmVhZE1lc3NhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwICovOyB9
OwogCQk1MzlFQjA2MzFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5RUIwNjIxRDU1Mjg0MjAwQzgy
RUY3IC8qIExFQkRlY29kZXIuaCAqLzsgfTsKIAkJNTNFQzI1M0UxRTk1QUQzMDAwMDgzMUI5IC8q
IFByaW9yaXR5UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzRUMyNTNDMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggKi87IH07
CiAJCTU1MzA3MUNBMUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MzA3MUM5MUM0MDQyNzIwMDM4
NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLzsgfTsKQEAgLTU0OCw2ICs1NTMsMTEgQEAKIAkJNTE1
Rjc5NEMxQ0ZDOUY0QTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkQ29waWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxNUY3OTREMUNGQzlGNEEwMENDRUQ5MyAvKiBDcm9zc1RocmVhZFRh
c2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRUYXNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNUY3OTU1MUNGRDNBNjkwMENDRUQ5MyAv
KiBDcm9zc1RocmVhZFF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENy
b3NzVGhyZWFkUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMxMUJENTEx
RUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2lnbmFscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUz
MTFCRDU1MUVBN0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVzc0JhZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMb2NrbGVzc0JhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MzExQkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTaWduYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUzMTFCRDU5MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVG
NyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRl
Y29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFQzI1M0MxRTk1QUQzMDAw
MDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFD
OTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTA2NCw2ICsxMDc0LDcgQEAKIAkJCQkwRjYwRjMyRDFERkNCRDFCMDA0MTZENkMgLyogTG9j
a2VkUHJpbnRTdHJlYW0uY3BwICovLAogCQkJCTBGNjBGMzJFMURGQ0JEMUIwMDQxNkQ2QyAvKiBM
b2NrZWRQcmludFN0cmVhbS5oICovLAogCQkJCUE4QTQ3MkMzMTUxQTgyNUEwMDQxMjNGRiAvKiBM
b2NrZXIuaCAqLywKKwkJCQk1MzExQkQ1NTFFQTdFMTVBMDA1MjUyODEgLyogTG9ja2xlc3NCYWcu
aCAqLywKIAkJCQk1MTNFMTcwQTFDRDdENUJGMDBFMzY1MEIgLyogTG9nZ2luZ0FjY3VtdWxhdG9y
LmggKi8sCiAJCQkJMEYzMEJBOEMxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNoSUQuaCAq
LywKIAkJCQkwRjMwQkE4RDFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hNYXAuaCAqLywK
QEAgLTExODksNiArMTIwMCw4IEBACiAJCQkJRTMyMDBBQjUxRTlBNTM2RDAwM0I1OUQyIC8qIFRo
cmVhZEhvbGRlci5jcHAgKi8sCiAJCQkJRTMyMDBBQjYxRTlBNTM2RDAwM0I1OUQyIC8qIFRocmVh
ZEhvbGRlci5oICovLAogCQkJCUE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xk
ZXJQdGhyZWFkcy5jcHAgKi8sCisJCQkJNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVh
ZE1lc3NhZ2UuY3BwICovLAorCQkJCTUzMTFCRDU5MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRN
ZXNzYWdlLmggKi8sCiAJCQkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5j
cHAgKi8sCiAJCQkJQThBNDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICovLAog
CQkJCUE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi8s
CkBAIC0xMzE2LDYgKzEzMjksOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQThBNDczM0ExNTFB
ODI1QjAwNDEyM0ZGIC8qIEJpbmFyeVNlbWFwaG9yZS5jcHAgKi8sCiAJCQkJQThBNDczM0IxNTFB
ODI1QjAwNDEyM0ZGIC8qIEJpbmFyeVNlbWFwaG9yZS5oICovLAorCQkJCTUzMTFCRDUxMUVBNzFD
QUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCAqLywKKwkJCQk1MzExQkQ1NzFFQTdFMUExMDA1MjUy
ODEgLyogU2lnbmFscy5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0aHJlYWRzOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE0NjEsNiArMTQ3Niw3IEBACiAJCQkJREU1QTA5RkMxQkEz
Njk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4
RjJCOTExNzJFMDBGQzAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzM5ODE1MUE4MjVCMDA0MTIzRkYgLyogQ29tcGlsZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzMTFCRDU2MUVBN0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVzc0JhZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZEQjY5OEUxQjdDNjQzQTAwMEMxMDc4IC8qIENvbmRpdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0OEMxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY4RjJCOUMxNzJGMjU5NjAwN0RCREE1IC8qIENvbnZlcnNpb25N
b2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTE1MjYsNiArMTU0Miw3IEBACiAJCQkJQTcwREEwODQx
Nzk5RjA0RDAwNTI5QTlCIC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYxNDdC
MEExNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdDREQ3RkY4MTg2RDI5MUUwMDc0MzNDRCAvKiBJdGVyYXRvckFkYXB0b3Jz
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzExQkQ1ODFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFs
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NERDdGRkExODZEMkE1NDAwNzQzM0NEIC8qIEl0ZXJh
dG9yUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQUM5MUE4MTg5NDJGQzQwMDI0NDkzOSAv
KiBMQ2hhci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5RUIwNjMxRDU1Mjg0MjAwQzgyRUY3IC8q
IExFQkRlY29kZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTYzMyw2ICsxNjUwLDcgQEAKIAkJCQlB
NzQ4NzQ1NDE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzQ0MTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDIxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ09wZXJh
dG9ycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMxMUJENUExRUE4MUE5NjAwNTI1MjgxIC8qIFRo
cmVhZE1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRERCRkE4MTY2NkRGQTMwMEM1NUZF
RiAvKiBTdHJpbmdQcmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2RUIxRTAxODdE
MEJEMzAwMzAxMjZGIC8qIFN0cmluZ1ZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0I4
MTUxQTgyNUIwMDQxMjNGRiAvKiBzdHJ0b2QuaCBpbiBIZWFkZXJzICovLApAQCAtMTg1Nyw4ICsx
ODc1LDEwIEBACiAJCQkJRkVEQUNEM0QxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0M0MxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0J1
aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RkIxODI0MzVBNjAwQTgyRTY5IC8q
IFN0cmluZ0NGLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMTFCRDVDMUVBODIyRjkwMDUyNTI4
MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDQwMTUxQTgy
NUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUZD
MTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdJbXBsQ0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTMxMUJENTMxRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTVCQTE1RjUxODI0MzQ4MDAwQTgyRTY5IC8qIFN0cmluZ0ltcGxNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQlBNUJBMTVGMzE4MjQzM0E5MDBBODJFNjkgLyogU3RyaW5nTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3Ry
ZWFtLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQXRvbWlj
cy5oIGIvU291cmNlL1dURi93dGYvQXRvbWljcy5oCmluZGV4IDc3MmU2ZmViYmQyZTcxNjlkNDNk
NTA3OTVjMWVhZmM1OGVhNjhkMTguLjk5MDdiMzJiZjRlNGJjMzQwNmEwNWIzOTgwYWM3ZDNjMDYz
Y2ZkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9BdG9taWNzLmgKQEAgLTE3NCw2ICsxNzQsMTIgQEAgc3RydWN0IEF0b21pYyB7CiAg
ICAgICAgIHJldHVybiB0cmFuc2FjdGlvbihmdW5jLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVk
LCBhYm9ydExpa2VsaWhvb2QpOwogICAgIH0KIAorICAgIEF0b21pYygpID0gZGVmYXVsdDsKKyAg
ICBjb25zdGV4cHIgQXRvbWljKFQgaW5pdGlhbCkKKyAgICAgICAgOiB2YWx1ZShzdGQ6OmZvcndh
cmQ8VD4oaW5pdGlhbCkpCisgICAgeworICAgIH0KKwogICAgIHN0ZDo6YXRvbWljPFQ+IHZhbHVl
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTG9ja2xlc3NCYWcuaCBiL1NvdXJj
ZS9XVEYvd3RmL0xvY2tsZXNzQmFnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI0NmJjNWE3OWU2NDc5NmRjOGMz
ZDlhMWQwMzFlOGNhNmQzOTg3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0xv
Y2tsZXNzQmFnLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXRvbWljcy5oIgor
CituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBhIHNpbXBsZSBzaW5nbGUgY29uc3VtZXIsIG11
bHRpcGxlIHByb2R1Y2VyIEJhZyBkYXRhIHN0cnVjdHVyZS4KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIExvY2tsZXNzQmFnIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMb2NrbGVz
c0JhZyk7CisKKyAgICBzdHJ1Y3QgTm9kZSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgVCBkYXRhOworICAgICAgICBOb2RlKiBuZXh0Owor
ICAgIH07CitwdWJsaWM6CisgICAgTG9ja2xlc3NCYWcoKQorICAgICAgICA6IG1faGVhZChudWxs
cHRyKQorICAgIHsKKyAgICB9CisKKyAgICBlbnVtIFB1c2hSZXN1bHQgeyBFbXB0eSwgTm9uRW1w
dHkgfTsKKyAgICBQdXNoUmVzdWx0IGFkZChUIGVsZW1lbnQpCisgICAgeworICAgICAgICBOb2Rl
KiBuZXdOb2RlID0gbmV3IE5vZGUoKTsKKyAgICAgICAgbmV3Tm9kZS0+ZGF0YSA9IFdURk1vdmUo
ZWxlbWVudCk7CisKKyAgICAgICAgTm9kZSogb2xkSGVhZDsKKyAgICAgICAgbV9oZWFkLnRyYW5z
YWN0aW9uKFsmXSAoTm9kZSomIGhlYWQpIHsKKyAgICAgICAgICAgIG9sZEhlYWQgPSBoZWFkOwor
ICAgICAgICAgICAgbmV3Tm9kZS0+bmV4dCA9IGhlYWQ7CisgICAgICAgICAgICBoZWFkID0gbmV3
Tm9kZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKworICAgICAgICBy
ZXR1cm4gb2xkSGVhZCA9PSBudWxscHRyID8gRW1wdHkgOiBOb25FbXB0eTsKKyAgICB9CisKKyAg
ICAvLyBDT05TVU1FUiBGVU5DVElPTlM6IEV2ZXJ5dGhpbmcgYmVsb3cgaGVyZSBpcyBvbmx5IHNh
ZmUgdG8gY2FsbCBmcm9tIHRoZSBjb25zdW1lciB0aHJlYWQuCisKKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIGlzIGFjdHVhbGx5IHNhZmUgdG8gY2FsbCBmcm9tIG1vcmUgdGhhbiBvbmUgdGhyZWFkLCBi
dXQgT05MWSBpZiBubyB0aHJlYWQgY2FuIGNhbGwgY29uc3VtZUFsbC4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgaXRlcmF0ZShjb25zdCBGdW5jdG9yJiBmdW5jKQor
ICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1faGVhZC5sb2FkKCk7CisgICAgICAgIHdoaWxl
IChub2RlKSB7CisgICAgICAgICAgICBjb25zdCBUJiBkYXRhID0gbm9kZS0+ZGF0YTsKKyAgICAg
ICAgICAgIGZ1bmMoZGF0YSk7CisgICAgICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBj
b25zdW1lQWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCisgICAgeworICAgICAgICBOb2RlKiBub2Rl
ID0gbV9oZWFkLmV4Y2hhbmdlKG51bGxwdHIpOworICAgICAgICB3aGlsZSAobm9kZSkgeworICAg
ICAgICAgICAgZnVuYyhXVEZNb3ZlKG5vZGUtPmRhdGEpKTsKKyAgICAgICAgICAgIE5vZGUqIG9s
ZE5vZGUgPSBub2RlOworICAgICAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CisgICAgICAgICAg
ICBkZWxldGUgb2xkTm9kZTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBBdG9t
aWM8Tm9kZSo+IG1faGVhZDsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuY3BwIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkTWVzc2FnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGFhZDNiNzRjNDMwZjcyZjhiZDMzN2FiYmQ3ZTI4
MTllZTI3Zjc0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3Nh
Z2UuY3BwCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRocmVhZE1lc3Nh
Z2UuaCIKKworI2lmIFVTRShQVEhSRUFEUykKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVk
ZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1Np
Z25hbHMuaD4KKworCituYW1lc3BhY2UgV1RGIHsKKworY29uc3QgYm9vbCB2ZXJib3NlID0gdHJ1
ZTsKKworY2xhc3MgVGhyZWFkTWVzc2FnZURhdGEgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIFRocmVhZE1lc3NhZ2VEYXRhKGNvbnN0IFRocmVhZE1lc3NhZ2Um
IG0pCisgICAgICAgIDogcmFuKGZhbHNlKQorICAgICAgICAsIG1lc3NhZ2UobSkKKyAgICB7Cisg
ICAgfQorCisgICAgQXRvbWljPGJvb2w+IHJhbjsKKyAgICBjb25zdCBUaHJlYWRNZXNzYWdlJiBt
ZXNzYWdlOworfTsKKworZW51bSBGaWxlRGVzY3JpcHRvciB7CisgICAgUmVhZCwKKyAgICBXcml0
ZSwKKyAgICBOdW1iZXJPZkZpbGVEZXNjcmlwdG9ycywKK307CisKK3N0YXRpYyBpbnQgZmlsZURl
c2NyaXB0b3JzW051bWJlck9mRmlsZURlc2NyaXB0b3JzXTsKK3N0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBtYWdpY0J5dGUgPSAiZCI7CisKKwordm9pZCBpbml0aWFsaXplVGhyZWFkTWVzc2FnZXMo
KQoreworICAgIGludCByZXN1bHQgPSBwaXBlKGZpbGVEZXNjcmlwdG9ycyk7CisgICAgUkVMRUFT
RV9BU1NFUlQoIXJlc3VsdCk7CisKKyAgICBpbnQgZmxhZ3MgPSBmY250bChmaWxlRGVzY3JpcHRv
cnNbV3JpdGVdLCBGX0dFVEZMKTsKKyAgICByZXN1bHQgPSBmY250bChmaWxlRGVzY3JpcHRvcnNb
V3JpdGVdLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxPQ0sgfCBPX0FQUEVORCk7CisgICAgZmxh
Z3MgPSBmY250bChmaWxlRGVzY3JpcHRvcnNbV3JpdGVdLCBGX0dFVEZMKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQgIT0gLTEpOworICAgIFJFTEVBU0VfQVNTRVJUKChmbGFncyAmIE9fTk9O
QkxPQ0spICYmIChmbGFncyAmIE9fQVBQRU5EKSk7CisKKyAgICBmbGFncyA9IGZjbnRsKGZpbGVE
ZXNjcmlwdG9yc1tSZWFkXSwgRl9HRVRGTCk7CisgICAgcmVzdWx0ID0gZmNudGwoZmlsZURlc2Ny
aXB0b3JzW1JlYWRdLCBGX1NFVEZMLCBmbGFncyAmIH5PX05PTkJMT0NLKTsKKyAgICBmbGFncyA9
IGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgRl9HRVRGTCk7CisgICAgUkVMRUFTRV9BU1NF
UlQocmVzdWx0ICE9IC0xKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghKGZsYWdzICYgT19OT05CTE9D
SykpOworfQorCitTVVBQUkVTU19BU0FOCitNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVk
KFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQoreworICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJzdGFydGluZyBzZW5kIik7CisgICAgY29uc3RleHByIFNpZ25h
bCBzaWduYWwgPSBTaWduYWw6OlVzcjsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsK
KyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5k
bGVyKHNpZ25hbCwgW10gKGludCwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1YXApIHsKKyAgICAg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJpbiBoYW5kbGVyIik7CisgICAgICAgICAgICBU
aHJlYWQqIHRocmVhZCA9IFRocmVhZDo6Y3VycmVudE1heUJlTnVsbCgpOworCisgICAgICAgICAg
ICBpZiAoIXRocmVhZCkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiV2Ugc29tZWhvdyBn
b3QgYSBtZXNzYWdlIG9uIGEgdGhyZWFkIHRoYXQgZGlkbid0IGhhdmUgYSBXVEY6OlRocmVhZCBp
bml0aWFsaXplZCwgd2UgcHJvYmFibHkgZGVhZGxvY2tlZCwgaGFscC4iKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB0aHJlYWQtPnRocmVhZE1lc3NhZ2VzKCkuY29uc3VtZUFsbChbJl0gKFRocmVh
ZE1lc3NhZ2VEYXRhKiBkYXRhKSB7CisgICAgICAgICAgICAgICAgZGF0YS0+bWVzc2FnZShpbmZv
LCBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKSk7CisgICAgICAgICAgICAgICAgZGF0YS0+
cmFuLnN0b3JlKHRydWUpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIFVuZm9y
dHVuYXRlbHksIHdlIGNhbid0IGNoZWNrIHRoZSBlcnJubyBoZXJlIHNpbmNlIG90aGVyIHRocmVh
ZHMgbWF5IGJlIGRvaW5nCisgICAgICAgICAgICAvLyBvdGhlciBjYWxscyB3aGljaCBzZXQgaXQg
YXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJ3cml0
aW5nIGJ5dGUiKTsKKyAgICAgICAgICAgIHdoaWxlICh3cml0ZShmaWxlRGVzY3JpcHRvcnNbV3Jp
dGVdLCBtYWdpY0J5dGUsIDEpID09IC0xKSB7IH0KKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZl
cmJvc2UsICJsZWF2aW5nIGhhbmRsZXIiKTsKKyAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rp
b246OkhhbmRsZWQ7CisgICAgICAgIH0pOworICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
aGFuZGxlciBpbnN0YWxsZWQiKTsKKyAgICB9KTsKKworCisgICAgLy8gU2luY2Ugd2UgYXJlIGd1
YXJlbnRlZWQgbm90IHRvIHJldHVybiB1bnRpbCB3ZSBnZXQgYSByZXNwb25zZSBmcm9tIHRoZSBv
dGhlciB0aHJlYWQgdGhpcyBpcyBvay4KKyAgICBUaHJlYWRNZXNzYWdlRGF0YSBkYXRhKG1lc3Nh
Z2UpOworCisgICAgdGhyZWFkLnRocmVhZE1lc3NhZ2VzKCkuYWRkKCZkYXRhKTsKKyAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAibWVzc2FnZSBxdWV1ZWQiKTsKKyAgICBib29sIHJlc3VsdCA9IHRo
cmVhZC5zaWduYWwodG9TeXN0ZW1TaWduYWwoc2lnbmFsKSk7CisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIHJldHVybiBNZXNzYWdlU3RhdHVzOjpUaHJlYWRFeGl0ZWQ7CisgICAgUkVMRUFTRV9B
U1NFUlQocmVzdWx0KTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiaGVyZSIpOworCisgICAg
c3RhdGljIFN0YXRpY0xvY2sgcmVhZExvY2s7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIocmVhZExvY2spOworICAgICAgICBjb25zdGV4cHIgc2l6ZV90IGJ1
ZmZlclNpemUgPSAxNjsKKyAgICAgICAgY2hhciBidWZmZXJbYnVmZmVyU2l6ZV07CisKKyAgICAg
ICAgLy8gSXQncyBhbHdheXMgc2FmZSB0byBjbGVhciB0aGUgcGlwZSBiZWNhdXNlIG9ubHkgb25l
IHRocmVhZCBjYW4gZXZlciBibG9jayB0cnlpbmcgdG8gcmVhZAorICAgICAgICAvLyBmcm9tIHRo
ZSBwaXBlLiBUaHVzLCBlYWNoIGJ5dGUgd2UgY2xlYXIgZnJvbSB0aGUgcGlwZSBhY3R1YWxseSBq
dXN0IGNvcnJlc3BvbmRzIHRvIHNvbWUgdGFzaworICAgICAgICAvLyB0aGF0IGhhcyBhbHJlYWR5
IGZpbmlzaGVkLiBXZSBhY3RpdmVseSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBwaXBlIGRvZXMg
bm90IG92ZXJmaWxsIGJlY2F1c2UKKyAgICAgICAgLy8gb3RoZXJ3aXNlIG91ciB3cml0ZXJzIG1p
Z2h0IHNwaW4gdHJ5aW5nIHRvIHdyaXRlLgorICAgICAgICBhdXRvIGNsZWFyUGlwZSA9IFsmXSB7
CisgICAgICAgICAgICBpbnQgZmxhZ3MgPSBmY250bChmaWxlRGVzY3JpcHRvcnNbUmVhZF0sIEZf
R0VURkwpOworICAgICAgICAgICAgQVNTRVJUKCEoZmxhZ3MgJiBPX05PTkJMT0NLKSk7CisgICAg
ICAgICAgICBmY250bChmaWxlRGVzY3JpcHRvcnNbUmVhZF0sIEZfU0VURkwsIGZsYWdzIHwgT19O
T05CTE9DSyk7CisKKyAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHksIHdlIGNhbid0IGNoZWNr
IHRoZSBlcnJubyBoZXJlIHNpbmNlIG90aGVyIHRocmVhZHMgbWF5IGJlIGRvaW5nCisgICAgICAg
ICAgICAvLyBvdGhlciBjYWxscyB3aGljaCBzZXQgaXQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAg
ICAgICAgIHdoaWxlIChyZWFkKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgYnVmZmVyLCBidWZmZXJT
aXplKSAhPSAtMSkgeyB9CisKKyAgICAgICAgICAgIGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tSZWFk
XSwgRl9TRVRGTCwgZmxhZ3MpOworICAgICAgICB9OworCisgICAgICAgIGlmIChkYXRhLnJhbi5s
b2FkKCkpIHsKKyAgICAgICAgICAgIGNsZWFyUGlwZSgpOworICAgICAgICAgICAgcmV0dXJuIE1l
c3NhZ2VTdGF0dXM6Ok1lc3NhZ2VSYW47CisgICAgICAgIH0KKworICAgICAgICByZWFkKGZpbGVE
ZXNjcmlwdG9yc1tSZWFkXSwgYnVmZmVyLCAxKTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlclswXSA9
PSBtYWdpY0J5dGVbMF0pOworICAgICAgICBjbGVhclBpcGUoKTsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNz
YWdlLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWFlNTNm
MjljZjdlOGZiMDBlZjkyMTFkMTZjZTJjZGVkNjAzZWMxYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFVTRShQVEhSRUFEUykKKworbmFtZXNwYWNlIFdURiB7
CisKK3ZvaWQgaW5pdGlhbGl6ZVRocmVhZE1lc3NhZ2VzKCk7CisKK2NsYXNzIFRocmVhZE1lc3Nh
Z2VEYXRhOwordXNpbmcgVGhyZWFkTWVzc2FnZSA9IFNjb3BlZExhbWJkYTx2b2lkKHNpZ2luZm9f
dCosIHVjb250ZXh0X3QqKT47CisKK2VudW0gY2xhc3MgTWVzc2FnZVN0YXR1cyB7CisgICAgTWVz
c2FnZVJhbiwKKyAgICBUaHJlYWRFeGl0ZWQsCit9OworCisvLyBUaGlzIG1ldGhvZCBhbGxvd3Mg
dXMgdG8gc2VuZCBhIG1lc3NhZ2Ugd2hpY2ggd2lsbCBiZSBydW4gaW4gYSBzaWduYWwgaGFuZGxl
ciBvbiB0aGUgZGVzaXJlZCB0aHJlYWQuCisvLyBUaGVyZSBhcmUgc2V2ZXJhbCBjYXZlYXRlcyB0
byB0aGlzIG1ldGhvZCBob3dldmVyLCBUaGlzIGZ1bmN0aW9uIHVzZXMgc2lnbmFscyBzbyB5b3Vy
IG1lc3NhZ2Ugc2hvdWxkCisvLyBiZSBzeW5jIHNpZ25hbCBzYWZlLgorTWVzc2FnZVN0YXR1cyBz
ZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmLCBjb25zdCBUaHJlYWRNZXNzYWdlJik7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlKFRocmVhZCYg
dGFyZ2V0VGhyZWFkLCBjb25zdCBGdW5jdG9yJiBmdW5jKQoreworICAgIGF1dG8gbGFtYmRhID0g
c2NvcGVkTGFtYmRhUmVmPHZvaWQoc2lnaW5mb190KiwgdWNvbnRleHRfdCopPihmdW5jKTsKKyAg
ICByZXR1cm4gc2VuZE1lc3NhZ2VTY29wZWQodGFyZ2V0VGhyZWFkLCBsYW1iZGEpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpzZW5kTWVzc2FnZTsKKworI2VuZGlmIC8v
IFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCmluZGV4IGZlZjU4MTFhN2Q1N2JiODlkYzAz
NzVmOTExMjJkNWEyNDhjYjIyODYuLjVlMzQ0NTFjZWRhZTUxOWNkYmNlM2EwYzQyMjNlZTg1MmZi
NDc4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPHd0
Zi9EYXRlTWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXJTZWVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZEhvbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+CiAj
aW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdW
aWV3Lmg+CiAKQEAgLTE3OCw2ICsxNzksNyBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQog
ICAgICAgICB3dGZUaHJlYWREYXRhKCk7CiAgICAgICAgIGluaXRpYWxpemVEYXRlcygpOwogICAg
ICAgICBUaHJlYWQ6OmluaXRpYWxpemVQbGF0Zm9ybVRocmVhZGluZygpOworICAgICAgICBpbml0
aWFsaXplVGhyZWFkTWVzc2FnZXMoKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCBi
ZDFmOGYzM2UyYWFiNWI1Y2RmYjRjY2I0NjliODU4NWU5YTI0NjRlLi5jMjBhNjVlMjJiZmQ1MDNk
NmI1NjUxNWQ5NDg0NjcwNjY2MjgxMTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtNDIsNiArNDIsNyBA
QAogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAj
aW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrbGVzc0JhZy5oPgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVJlZ2lzdGVy
cy5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtNTYsNiArNTcsOCBAQAogCiBu
YW1lc3BhY2UgV1RGIHsKIAorY2xhc3MgVGhyZWFkTWVzc2FnZURhdGE7CisKIHVzaW5nIFRocmVh
ZElkZW50aWZpZXIgPSB1aW50MzJfdDsKIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2
b2lkKiBhcmd1bWVudCk7CiAKQEAgLTc1LDYgKzc4LDcgQEAgcHVibGljOgogCiAgICAgLy8gUmV0
dXJucyBUaHJlYWQgb2JqZWN0LgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhyZWFk
JiBjdXJyZW50KCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWQqIGN1cnJl
bnRNYXlCZU51bGwoKTsKIAogICAgIC8vIFJldHVybnMgVGhyZWFkSWRlbnRpZmllciBkaXJlY3Rs
eS4gSXQgaXMgdXNlZnVsIGlmIHRoZSB1c2VyIG9ubHkgY2FyZXMgYWJvdXQgaWRlbnRpdHkKICAg
ICAvLyBvZiB0aHJlYWRzLiBBdCB0aGF0IHRpbWUsIHVzZXJzIHNob3VsZCBrbm93IHRoYXQgaG9s
ZGluZyB0aGlzIFRocmVhZElkZW50aWZpZXIgZG9lcyBub3QgZW5zdXJlCkBAIC0xMzIsNyArMTM2
LDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVQbGF0Zm9ybVRocmVh
ZGluZygpOwogCi1wcml2YXRlOgorI2lmIFVTRShQVEhSRUFEUykKKyAgICBMb2NrbGVzc0JhZzxU
aHJlYWRNZXNzYWdlRGF0YSo+JiB0aHJlYWRNZXNzYWdlcygpIHsgcmV0dXJuIG1fdGhyZWFkTWVz
c2FnZXM7IH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CiAgICAgVGhyZWFkKCk7CiAKICAgICAvLyBJ
bnRlcm5hbCBwbGF0Zm9ybS1zcGVjaWZpYyBUaHJlYWQ6OmNyZWF0ZSBpbXBsZW1lbnRhdGlvbi4K
QEAgLTE3Nyw2ICsxODUsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kaWRFeGl0IHsgZmFsc2Ug
fTsKICNpZiBVU0UoUFRIUkVBRFMpCiAgICAgcHRocmVhZF90IG1faGFuZGxlOworCisgICAgTG9j
a2xlc3NCYWc8VGhyZWFkTWVzc2FnZURhdGEqPiBtX3RocmVhZE1lc3NhZ2VzOwogI2lmIE9TKERB
UldJTikKICAgICBtYWNoX3BvcnRfdCBtX3BsYXRmb3JtVGhyZWFkOwogI2Vsc2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZ1B0aHJlYWRzLmNwcAppbmRleCAzZWU5YTVmNTQ1ZWFmMTI4OTkwZTVhOWEzYzAx
NTQ4ODUyNWJmZmQ3Li4xYTVkOTlmNjE0ZjVkOTVhY2Y2MTcxZWYwMWQwM2QxNGMyMWM3ZmQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0yNjQsMTEgKzI2NCwxOCBAQCB2
b2lkIFRocmVhZDo6ZGV0YWNoKCkKICAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKIH0KIAot
VGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQorVGhyZWFkKiBUaHJlYWQ6OmN1cnJlbnRNYXlCZU51
bGwoKQogewogICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgp
OwogICAgIGlmIChkYXRhKQotICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CisgICAgICAg
IHJldHVybiAmZGF0YS0+dGhyZWFkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1RocmVh
ZCYgVGhyZWFkOjpjdXJyZW50KCkKK3sKKyAgICBpZiAoVGhyZWFkKiBjdXJyZW50ID0gY3VycmVu
dE1heUJlTnVsbCgpKQorICAgICAgICByZXR1cm4gKmN1cnJlbnQ7CiAKICAgICAvLyBOb3QgYSBX
VEYtY3JlYXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHll
dC4KICAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhyZWFkKCkpOwpA
QCAtMjg2LDYgKzI5Myw4IEBAIFRocmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50SUQoKQog
Ym9vbCBUaHJlYWQ6OnNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKQogewogICAgIHN0ZDo6dW5pcXVl
X2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIGlmIChoYXNFeGl0ZWQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGludCBlcnJObyA9IHB0aHJlYWRfa2lsbChtX2hh
bmRsZSwgc2lnbmFsTnVtYmVyKTsKICAgICByZXR1cm4gIWVyck5vOyAvLyBBIDAgZXJyTm8gbWVh
bnMgc3VjY2Vzcy4KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFs
cy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0
YWRiZTI2MTVmOGVlYTUyOTkyOTRmYjdkMDFhZmY0ZmI2NWEwOWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCkBAIC0wLDAgKzEsMTE2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNpZ25hbHMuaCIKKworI2lmIFVTRShQVEhSRUFEUykKKworI2lu
Y2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNz
Lmg+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2xlc3NCYWcu
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK3N0YXRpYyBMb2NrbGVzc0JhZzxTaWduYWxIYW5kbGVy
PiBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV0g
PSB7IH07CitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNp
emVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKK3N0YXRpYyBzdGQ6Om9uY2VfZmxhZyBp
bml0aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNp
Z25hbHMpXTsKKworc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZv
X3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQoreworICAgIFNpZ25hbCBzaWduYWwgPSBmcm9tU3lz
dGVtU2lnbmFsKHNpZyk7CisKKyAgICBhdXRvIHJlc3RvcmVEZWZhdWx0ID0gWyZdIHsKKyAgICAg
ICAgc3RydWN0IHNpZ2FjdGlvbiBkZWZhdWx0QWN0aW9uOworICAgICAgICBkZWZhdWx0QWN0aW9u
LnNhX2hhbmRsZXIgPSBTSUdfREZMOworICAgICAgICBzaWdmaWxsc2V0KCZkZWZhdWx0QWN0aW9u
LnNhX21hc2spOworICAgICAgICBkZWZhdWx0QWN0aW9uLnNhX2ZsYWdzID0gMDsKKyAgICAgICAg
c2lnYWN0aW9uKHNpZywgJmRlZmF1bHRBY3Rpb24sIG51bGxwdHIpOworICAgIH07CisKKyAgICAv
LyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYnV0IHdlIG1pZ2h0IGFzIHdlbGwgYmUgY2FyZWZ1bC4K
KyAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6VW5rbm93bikgeworICAgICAgICBkYXRhTG9nTG4o
IldlIHNvbWVob3cgZ290IGNhbGxlZCBmb3IgYW4gdW5rbm93biBzaWduYWwgIiwgc2lnLCAiLCBo
YWxwLiIpOworICAgICAgICByZXN0b3JlRGVmYXVsdCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsKKyAgICBib29sIHJlc3RvcmVEZWZhdWx0
SGFuZGxlciA9IGZhbHNlOworICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFs
KV0uaXRlcmF0ZShbJl0gKGNvbnN0IFNpZ25hbEhhbmRsZXImIGhhbmRsZXIpIHsKKyAgICAgICAg
c3dpdGNoIChoYW5kbGVyKHNpZywgaW5mbywgbWNvbnRleHQpKSB7CisgICAgICAgIGNhc2UgU2ln
bmFsQWN0aW9uOjpIYW5kbGVkOgorICAgICAgICAgICAgZGlkSGFuZGxlID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNpZ25hbEFjdGlvbjo6Rm9yY2VEZWZhdWx0Ogor
ICAgICAgICAgICAgcmVzdG9yZURlZmF1bHRIYW5kbGVyID0gdHJ1ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9KTsKKworICAgIGlmIChyZXN0b3JlRGVmYXVsdEhhbmRsZXIpIHsKKyAgICAgICAgcmVzdG9y
ZURlZmF1bHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0cnVjdCBzaWdhY3Rp
b24mIG9sZEFjdGlvbiA9IG9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXTsK
KyAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6VXNyKSB7CisgICAgICAgIGlmIChvbGRBY3Rpb24u
c2Ffc2lnYWN0aW9uKQorICAgICAgICAgICAgb2xkQWN0aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGlu
Zm8sIG1jb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZGlkSGFu
ZGxlKSB7CisgICAgICAgIGlmIChvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKSB7CisgICAgICAgICAg
ICBvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgbWNvbnRleHQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgcmVzdG9yZURlZmF1bHQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWwg
c2lnbmFsLCBTaWduYWxIYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBBU1NFUlQoc2lnbmFsIDwg
U2lnbmFsOjpVbmtub3duKTsKKyAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25h
bCldLmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsKKworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxp
emVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSwgWyZdIHsKKyAgICAgICAg
c3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CisgICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBq
c2NTaWduYWxIYW5kbGVyOworICAgICAgICBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7Cisg
ICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87CisgICAgICAgIHNpZ2FjdGlvbih0
b1N5c3RlbVNpZ25hbChzaWduYWwpLCAmYWN0aW9uLCAmb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxz
aXplX3Q+KHNpZ25hbCldKTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRz
L1NpZ25hbHMuaCBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjAzYTFkMmU1ODA4ODFiYWU5MzM5ZTE2NzgxOGE3YjllZjFiODBmYzIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaApAQCAtMCwwICsxLDk3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBVU0UoUFRIUkVBRFMpCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx3
dGYvRnVuY3Rpb24uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2VudW0gY2xhc3MgU2lnbmFsIHsK
KyAgICAvLyBVc3Igd2lsbCBhbHdheXMgY2hhaW4gdG8gYW55IG5vbi1kZWZhdWx0IGhhbmRsZXIg
aW5zdGFsbCBiZWZvcmUgdXMuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byBrbm93CisgICAgLy8g
aWYgYSBzaWduYWwgd2FzIGludGVuZGVkIGV4Y2x1c2l2ZWx5IGZvciB1cy4KKyAgICBVc3IsCisK
KyAgICAvLyBUaGVzZSBzaWduYWxzIHdpbGwgb25seSBjaGFpbiBpZiB3ZSBkb24ndCBoYXZlIGEg
aGFuZGxlciB0aGF0IGNhbiBwcm9jZXNzIHRoZW0uIElmIHRoZXJlIGlzIG5vdGhpbmcKKyAgICAv
LyB0byBjaGFpbiB0byB3ZSByZXN0b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIgYW5kIGNyYXNoLgor
ICAgIFRyYXAsCisgICAgSWxsLAorICAgIFNlZ1YsCisgICAgQnVzLAorICAgIE51bWJlck9mU2ln
bmFscywKKyAgICBVbmtub3duID0gTnVtYmVyT2ZTaWduYWxzCit9OworCitpbmxpbmUgaW50IHRv
U3lzdGVtU2lnbmFsKFNpZ25hbCBzaWduYWwpCit7CisgICAgc3dpdGNoIChzaWduYWwpIHsKKyAg
ICBjYXNlIFNpZ25hbDo6U2VnVjogcmV0dXJuIFNJR1NFR1Y7CisgICAgY2FzZSBTaWduYWw6OkJ1
czogcmV0dXJuIFNJR0JVUzsKKyAgICBjYXNlIFNpZ25hbDo6SWxsOiByZXR1cm4gU0lHSUxMOwor
ICAgIGNhc2UgU2lnbmFsOjpVc3I6IHJldHVybiBTSUdVU1IyOworICAgIGNhc2UgU2lnbmFsOjpU
cmFwOiByZXR1cm4gU0lHVFJBUDsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworaW5saW5lIFNpZ25hbCBmcm9tU3lzdGVt
U2lnbmFsKGludCBzaWduYWwpCit7CisgICAgc3dpdGNoIChzaWduYWwpIHsKKyAgICBjYXNlIFNJ
R1NFR1Y6IHJldHVybiBTaWduYWw6OlNlZ1Y7CisgICAgY2FzZSBTSUdCVVM6IHJldHVybiBTaWdu
YWw6OkJ1czsKKyAgICBjYXNlIFNJR0lMTDogcmV0dXJuIFNpZ25hbDo6SWxsOworICAgIGNhc2Ug
U0lHVVNSMjogcmV0dXJuIFNpZ25hbDo6VXNyOworICAgIGNhc2UgU0lHVFJBUDogcmV0dXJuIFNp
Z25hbDo6VHJhcDsKKyAgICBkZWZhdWx0OiByZXR1cm4gU2lnbmFsOjpVbmtub3duOworICAgIH0K
K30KKworZW51bSBjbGFzcyBTaWduYWxBY3Rpb24geworICAgIEhhbmRsZWQsCisgICAgTm90SGFu
ZGxlZCwKKyAgICBGb3JjZURlZmF1bHQKK307CisKK3VzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5j
dGlvbjxTaWduYWxBY3Rpb24oaW50LCBzaWdpbmZvX3QqLCB2b2lkKik+OworCisvLyBDYWxsIHRo
aXMgbWV0aG9kIHdoZW5ldmVyIHlvdSB3YW50IHRvIGluc3RhbGwgYSBzaWduYWwgaGFuZGxlci4g
SXQncyBvayB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbGF6aWx5LgorLy8gTm90ZTogWW91ciBzaWdu
YWwgaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBoYW5kbGVyIGZvciB0aGUg
ZGVzaXJlZCBzaWduYWwgaXMgY2FsbGVkLgorLy8gVGh1cyBpdCBpcyB5b3VyIHJlc3BvbnNpYmls
aXR5IHRvIGRpc2Nlcm4gaWYgdGhlIHNpZ25hbCBmaXJlZCB3YXMgeW91cnMuCisvLyBUaGlzIGZ1
bmN0aW9uIGlzIGN1cnJlbnRseSBhIG9uZSB3YXkgc3RyZWV0IGkuZS4gb25jZSBpbnN0YWxsZWQs
IGEgc2lnbmFsIGhhbmRsZXIgY2Fubm90IGJlIHVuaW5zdGFsbGVkLgordm9pZCBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWwsIFNpZ25hbEhhbmRsZXImJik7CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCit1c2luZyBXVEY6OlNpZ25hbDsKK3VzaW5nIFdURjo6dG9TeXN0ZW1TaWduYWw7Cit1c2lu
ZyBXVEY6OmZyb21TeXN0ZW1TaWduYWw7Cit1c2luZyBXVEY6OlNpZ25hbEFjdGlvbjsKK3VzaW5n
IFdURjo6aW5zdGFsbFNpZ25hbEhhbmRsZXI7CisKKyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjU2MTc1
OWJmNGNkNjQ2NWY3YjJjNmQzOGU1YzcyYTM0ZTQ3MDRiMC4uMGU4MjlhZWIyOWMyNzFhMDAwNzZh
ODk5NDA3MmRhNTkyMzNlNGViMCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA0LTIwICBLZWl0aCBNaWxsZXIg
IDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzaWduYWxpbmcgQVBJCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA5NzYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBBZGQgdGVzdHMgZm9y
IFRocmVhZE1lc3NhZ2VzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHJ1blRocmVhZE1lc3Nh
Z2VUZXN0KToKKyAgICAgICAgKFRFU1QpOgorCiAyMDE3LTA0LTIxICBBbGV4IENocmlzdGVuc2Vu
ICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVkdWNlIGNvcGllcyBhbmQg
YWxsb2NhdGlvbnMgaW4gU2hhcmVkQnVmZmVyOjphcHBlbmQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMGQ4NWIyYjQ4Y2Y1Y2M4MzVmODdkNjY5ODE1NmRjNzMxZTRkYjQ3NC4uNjM3OGI2ZGEw
MTJhNjc2ZjBmMTRhOGJlZGI4N2U1ZmVkMjYyMmFkOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTE3NCw2ICsxNzQsNyBAQAogCQk1MkI4Q0Y5ODE1ODY4RDkxMDAyODEwNTMgLyogU2V0RG9j
dW1lbnRVUkkuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MkI4Q0Y5NDE1ODY4Q0YwMDAyODEwNTMgLyogU2V0RG9jdW1lbnRVUkkuaHRt
bCAqLzsgfTsKIAkJNTJENjczRUUxQUZCMTI3MzAwRkExOUZFIC8qIFdLUGFnZUNvcHlTZXNzaW9u
U3RhdGVXaXRoRmlsdGVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyRDY3M0VDMUFGQjEyNjgwMEZBMTlGRSAvKiBXS1BhZ2VDb3B5U2Vzc2lv
blN0YXRlV2l0aEZpbHRlcmluZy5jcHAgKi87IH07CiAJCTUyRTVDRTQ5MTREMjFFQUIwMDNCMkJE
OCAvKiBQYXJlbnRGcmFtZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTJFNUNFNDgxNEQyMUVBQjAwM0IyQkQ4IC8qIFBhcmVudEZyYW1l
X0J1bmRsZS5jcHAgKi87IH07CisJCTUzMTFCRDVFMUVBOTQ5MEUwMDUyNTI4MSAvKiBUaHJlYWRN
ZXNzYWdlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MzExQkQ1RDFFQTk0OTBEMDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZXMuY3BwICovOyB9Owog
CQk1MzFDMUQ4RTFERjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzFDMUQ4RDFERjhFRjcyMDA2RTk3
OUYgLyogTEVCRGVjb2Rlci5jcHAgKi87IH07CiAJCTUzNjc3MDM0MUNDODAyMjgwMEQ0MjVCMSAv
KiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3Jp
cHRPYmplY3REZXNjcmlwdGlvbi5tbSAqLzsgfTsKIAkJNTM2NzcwMzYxQ0M4MUI2MTAwRDQyNUIx
IC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIx
IC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi87IH07CkBAIC0xMTE2LDYgKzEx
MTcsNyBAQAogCQk1MkQ2NzNFQzFBRkIxMjY4MDBGQTE5RkUgLyogV0tQYWdlQ29weVNlc3Npb25T
dGF0ZVdpdGhGaWx0ZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0tQYWdlQ29weVNlc3Npb25TdGF0ZVdpdGhGaWx0ZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MkU1Q0U0NTE0RDIxRTlEMDAzQjJCRDggLyogUGFyZW50RnJhbWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyZW50RnJhbWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkU1Q0U0ODE0RDIxRUFCMDAzQjJCRDgg
LyogUGFyZW50RnJhbWVfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBhcmVudEZyYW1lX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUzMTFCRDVEMUVBOTQ5MEQwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdlcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMUMxRDhEMURGOEVGNzIwMDZFOTc5RiAvKiBMRUJE
ZWNvZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExFQkRlY29k
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzY3NzAzMzFDQzgwMjI4MDBE
NDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIxIC8qIFdl
YlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGgg
PSBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjE3Nyw2ICsyMTc5LDcgQEAKIAkJCQk3Qzc0RDQyRDE4ODIyOEYzMDBFNUVENTcg
LyogU3RyaW5nVmlldy5jcHAgKi8sCiAJCQkJNTU5N0Y4MzQxRDk1OTZDODAwNjZCQzIxIC8qIFN5
bmNocm9uaXplZEZpeGVkUXVldWUuY3BwICovLAogCQkJCTkzMjlBQTI4MURFM0Y4MUUwMDNBQkQw
NyAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgKi8sCisJCQkJNTMxMUJENUQxRUE5NDkwRDAwNTI1
MjgxIC8qIFRocmVhZE1lc3NhZ2VzLmNwcCAqLywKIAkJCQkwRjJDMjBCNzFEQ0Q1NDQ4MDA1NDJE
OUUgLyogVGltZS5jcHAgKi8sCiAJCQkJNUM1RTYzM0QxRDBCNjc5NDAwODVBMDI1IC8qIFVuaXF1
ZVJlZi5jcHAgKi8sCiAJCQkJN0NEMEQ1QUExRDU1MzRERTAwMENDOUUxIC8qIFZhcmlhbnQuY3Bw
ICovLApAQCAtMjY5Nyw2ICsyNzAwLDcgQEAKIAkJCQk3QzgzREVFMDFEMEE1OTBDMDBGRUJDRjMg
LyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzFD
MUQ4RTFERjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3QzgzREVFODFEMEE1OTBDMDBGRUJDRjMgLyogTGlzdEhhc2hTZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNTMxMUJENUUxRUE5NDkwRTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2VzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdDODNERjFEMUQwQTU5MEMwMEZFQkNGMyAvKiBMb2NrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdDODNERUVEMUQwQTU5MEMwMEZFQkNGMyAvKiBNYXRoRXh0cmFz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUVGMUQwQTU5MEMwMEZFQkNGMyAvKiBNRDUu
Y3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9UaHJlYWRNZXNzYWdlcy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9U
aHJlYWRNZXNzYWdlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDlhMjc3M2YyMzQxYWM5YTM2ZDViNGQ0NTVh
NzMzNmJkMGY1YjY0MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUg
PHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorCitzdGF0aWMgdm9pZCBy
dW5UaHJlYWRNZXNzYWdlVGVzdCh1bnNpZ25lZCBudW1TZW5kZXJzLCB1bnNpZ25lZCBudW1NZXNz
YWdlcykKK3sKKyAgICBib29sIHJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmcgPSB0cnVlOworICAg
IGRhdGFMb2dMbigic3RhcnRpbmciKTsKKyAgICBSZWZQdHI8VGhyZWFkPiByZWNlaXZlclRocmVh
ZCA9IFRocmVhZDo6Y3JlYXRlKCJUaHJlYWRNZXNzYWdlIHJlY2VpdmVyIiwgWyZyZWNlaXZlclNo
b3VsZEtlZXBSdW5uaW5nXSAoKSB7CisgICAgICAgIHdoaWxlIChyZWNlaXZlclNob3VsZEtlZXBS
dW5uaW5nKSB7IH0KKyAgICB9KTsKKyAgICBBU1NFUlRfVFJVRShyZWNlaXZlclRocmVhZCk7CisK
KyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHNlbmRlclRocmVhZHMobnVtU2VuZGVycyk7Cisg
ICAgVmVjdG9yPHVuc2lnbmVkPiBtZXNzYWdlc1J1bihudW1TZW5kZXJzKTsKKyAgICBWZWN0b3I8
dW5zaWduZWQ+IGhhbmRsZXJzUnVuKG51bVNlbmRlcnMpOworICAgIG1lc3NhZ2VzUnVuLmZpbGwo
MCk7CisgICAgaGFuZGxlcnNSdW4uZmlsbCgwKTsKKworICAgIGZvciAodW5zaWduZWQgc2VuZGVy
SUQgPSAwOyBzZW5kZXJJRCA8IG51bVNlbmRlcnM7ICsrc2VuZGVySUQpIHsKKyAgICAgICAgc2Vu
ZGVyVGhyZWFkc1tzZW5kZXJJRF0gPSBUaHJlYWQ6OmNyZWF0ZSgiVGhyZWFkTWVzc2FnZSBzZW5k
ZXIiLCBbc2VuZGVySUQsIG51bU1lc3NhZ2VzLCByZWNlaXZlclRocmVhZCwgJm1lc3NhZ2VzUnVu
LCAmaGFuZGxlcnNSdW5dICgpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1NZXNzYWdlczsgKytpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZW5k
TWVzc2FnZSgqcmVjZWl2ZXJUaHJlYWQuZ2V0KCksIFtzZW5kZXJJRCwgJmhhbmRsZXJzUnVuXSAo
c2lnaW5mb190KiwgdWNvbnRleHRfdCopIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnNS
dW5bc2VuZGVySURdKys7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgRVhQ
RUNUX1RSVUUocmVzdWx0ID09IFdURjo6TWVzc2FnZVN0YXR1czo6TWVzc2FnZVJhbik7CisgICAg
ICAgICAgICAgICAgbWVzc2FnZXNSdW5bc2VuZGVySURdKys7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgICAgICBBU1NFUlRfVFJVRShzZW5kZXJUaHJlYWRzW3NlbmRlcklEXSk7Cisg
ICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVNlbmRlcnM7ICsraSkKKyAg
ICAgICAgc2VuZGVyVGhyZWFkc1tpXS0+d2FpdEZvckNvbXBsZXRpb24oKTsKKworICAgIHJlY2Vp
dmVyU2hvdWxkS2VlcFJ1bm5pbmcgPSBmYWxzZTsKKyAgICByZWNlaXZlclRocmVhZC0+d2FpdEZv
ckNvbXBsZXRpb24oKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1TZW5kZXJz
OyArK2kpIHsKKyAgICAgICAgRVhQRUNUX0VRKG51bU1lc3NhZ2VzLCBtZXNzYWdlc1J1bltpXSk7
CisgICAgICAgIEVYUEVDVF9FUShudW1NZXNzYWdlcywgaGFuZGxlcnNSdW5baV0pOworICAgIH0K
K30KKworVEVTVChUaHJlYWRNZXNzYWdlLCBCYXNpYykKK3sKKyAgICBydW5UaHJlYWRNZXNzYWdl
VGVzdCgxLCAxKTsKKyAgICBydW5UaHJlYWRNZXNzYWdlVGVzdCgxLCAxMDApOworfQorCitURVNU
KFRocmVhZE1lc3NhZ2UsIE11bHRpcGxlU2VuZGVycykKK3sKKyAgICBydW5UaHJlYWRNZXNzYWdl
VGVzdCgxMCwgMSk7CisgICAgcnVuVGhyZWFkTWVzc2FnZVRlc3QoMTAsIDEwMCk7CisgICAgcnVu
VGhyZWFkTWVzc2FnZVRlc3QoMTAsIDEwMDAwKTsKK30KKworY2xhc3MgUmVmbGVjdGVkVGhyZWFk
IDogcHVibGljIFRocmVhZCB7CitwdWJsaWM6CisgICAgdXNpbmcgVGhyZWFkOjptX211dGV4Owor
ICAgIHVzaW5nIFRocmVhZDo6bV9oYW5kbGU7CisgICAgdXNpbmcgVGhyZWFkOjpoYXNFeGl0ZWQ7
Cit9OworCitURVNUKFRocmVhZE1lc3NhZ2UsIFNpZ25hbHNXb3JrT25FeGl0KQoreworICAgIHN0
YXRpYyBib29sIGhhbmRsZXJSYW4gPSBmYWxzZTsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihT
aWduYWw6OlVzciwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCopIC0+IFNpZ25hbEFjdGlvbiB7
CisgICAgICAgIGRhdGFMb2dMbigiaGVyZSIpOworICAgICAgICBoYW5kbGVyUmFuID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsKKyAgICB9KTsKKworICAgIGJv
b2wgcmVjZWl2ZXJTaG91bGRLZWVwUnVubmluZyA9IHRydWU7CisgICAgUmVmUHRyPFRocmVhZD4g
cmVjZWl2ZXJUaHJlYWQgPSAoVGhyZWFkOjpjcmVhdGUoIlRocmVhZE1lc3NhZ2UgcmVjZWl2ZXIi
LAorICAgICAgICBbJnJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmddICgpIHsKKyAgICAgICAgICAg
IHdoaWxlIChyZWNlaXZlclNob3VsZEtlZXBSdW5uaW5nKSB7IH0KKyAgICB9KSk7CisgICAgQVNT
RVJUX1RSVUUocmVjZWl2ZXJUaHJlYWQpOworCisgICAgYm9vbCBzaWduYWxGaXJlZDsKKyAgICB7
CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHN0YXRpY19jYXN0
PFJlZmxlY3RlZFRocmVhZCo+KHJlY2VpdmVyVGhyZWFkLmdldCgpKS0+bV9tdXRleCk7CisgICAg
ICAgIHJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKHN0YXRpY19jYXN0PFJlZmxlY3RlZFRocmVhZCo+KHJlY2VpdmVyVGhyZWFkLmdldCgpKS0+
aGFzRXhpdGVkKCkpOworICAgICAgICBzbGVlcCgxKTsKKyAgICAgICAgc2lnbmFsRmlyZWQgPSAh
cHRocmVhZF9raWxsKHN0YXRpY19jYXN0PFJlZmxlY3RlZFRocmVhZCo+KHJlY2VpdmVyVGhyZWFk
LmdldCgpKS0+bV9oYW5kbGUsIHRvU3lzdGVtU2lnbmFsKFNpZ25hbDo6VXNyKSk7CisgICAgfQor
CisgICAgcmVjZWl2ZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgRVhQRUNUX1RS
VUUoaGFuZGxlclJhbiB8fCAhc2lnbmFsRmlyZWQpOworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307741</attachid>
            <date>2017-04-21 09:47:52 -0700</date>
            <delta_ts>2017-04-21 10:04:21 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170976-20170421124751.patch</filename>
            <type>text/plain</type>
            <size>61287</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NTE3ZjQ2Y2JiMzdhZjUwMjQ4YmI0YzIxMDYyNTVkOWUwYmIyNzI2Li5lMDk2YzBjNDkyZGRjNDlh
ZmNhZmI1OGJlMTkyYTdhNGViNjFlZDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxNy0wNC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgc2lnbmFsaW5nIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RmlsaXAgUGl6bG8uCisKKyAgICAgICAgVXBkYXRlIHZhcmlvdXMgdXNlcyBvZiBzaWdhY3Rpb24g
dG8gdXNlIHRoZSBuZXcgc2lnbmFsaW5nIEFQSS4KKyAgICAgICAgQWxzbyBzd2l0Y2ggVk1UcmFw
cyB0byB1c2UgdGhlIHRocmVhZCBtZXNzYWdlIHN5c3RlbSBpbnN0ZWFkIG9mCisgICAgICAgIHJv
bGxpbmcgaXQncyBvd24uCisKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgor
ICAgICAgICAoSlNDOjppc0pJVFBDKToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgor
ICAgICAgICAoSlNDOjppbnN0YWxsU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChKU0M6OlZNVHJh
cHM6OlZNVHJhcHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQp
OgorICAgICAgICAoSlNDOjpoYW5kbGVTaWd1c3IxKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
aGFuZGxlU2lndHJhcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Omluc3RhbGxTaWduYWxIYW5k
bGVycyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmg6CisgICAgICAgICog
dG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA6CisgICAgICAgIChKU0M6Omluc3RhbGxDcmFz
aEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpoYW5kbGVDcmFzaCk6IERlbGV0ZWQuCisgICAgICAg
ICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjplbmFibGVGYXN0TWVtb3J5KToKKwog
MjAxNy0wNC0yMCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAg
ICAgICAgW2NtYWtlXSBEZWZpbmUgRk9SV0FSRElOR19IRUFERVJTX0RJUiBpbiBXZWJLaXRGUyBh
bmQgdXNlIGl0IGV2ZXJ5d2hlcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggY2RkMjc4MTcwNDJkNzFhNTkxZTU1OGEwMjljZGUz
ZjMxZjlkNDVmOS4uM2I1YjgxODIzZmZlYmU0NzkzOTVlOTVjMWNhYTVmYmY3NWViYjQ4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw3NiBAQAorMjAxNy0wNC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVy
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc2lnbmFsaW5nIEFQSQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTc2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgYnVuY2ggb2Yg
bmV3IGZ1bmN0aW9uYWxpdHkgdG8gV1RGLiBGaXJzdCwgaXQgYWRkCisgICAgICAgIGEgbmV3IGRh
dGEgc3RydWN0dXJlIG9mIGEgbG9ja2xlc3MgYmFnLiBUaGUgTG9ja2xlc3NCYWcgY2xhc3MgY2Fu
CisgICAgICAgIGJlIHVzZWQgYXMgZWl0aGVyIGEgbXVsdGktd3JpdGVyIG11bHRpLXJlYWRlciBs
b2NrbGVzcyBiYWcgb3IgYQorICAgICAgICBtdWx0aS13cml0ZXIgc2luZ2xlIGNvbnN1bWVyIGxv
Y2tsZXNzIGJhZy4KKworICAgICAgICBOZXh0LCB0aGlzIHBhdGNoIGFkZHMgYW4gYWJzdHJhY3Rp
b24gYXJvdW5kIHNpZ2FjdGlvbiBpbiBXVEYuCisgICAgICAgIEJhc2ljYWxseSwgeW91IGNhbiBh
ZGQgYSBoYW5kbGVyLCB3aGljaCBjYW4gYmUgYW4gYXJiaXRyYXJ5CisgICAgICAgIGxhbWJkYS4g
QWx0aG91Z2ggaXQgc2hvdWxkIHN0aWxsIGJlIHNhZmUgZm9yIHRoZSBzaWduYWwgeW91IGFyZQor
ICAgICAgICBoYW5kbGluZy4gIHRoZSBzaWduYWwgaGFuZGxlciBtYW5hZ2VyIHdpbGwgdGhlbiBk
byBhbGwgdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIGhhbmRsaW5nIG9mIGNoYWluaW5nOgorCisg
ICAgICAgIEluIHRoZSBTSUdVU1IgY2FzZSB3ZSBhbHdheXMgZm9yd2FyZCB0aGUgc2lnbmFsIHRv
IGFueSBvdGhlcgorICAgICAgICBub24tZGVmYXVsdCBoYW5kbGVyIGluc3RhbGxlZCBiZWZvcmUg
dXMuIFdlIG5lZWQgdG8gZG8gdGhpcywKKyAgICAgICAgb3RoZXJ3aXNlLCBzaW5jZSBpdCdzIG5v
dCBwb3NzaWJsZSB0byB0ZWxsIGlmIGEgU0lHVVNSIHdhcworICAgICAgICBpbnRlbmRlZCBleGx1
c2l2ZWx5IGZvciBvdXIgaGFuZGxlcnMuIFNpZ25hbCBoYW5kbGVycyBkb24ndCByZWNvcmQKKyAg
ICAgICAgaG93IG1hbnkgdGltZXMgdGhleSB3ZXJlIHNlbnQgb25seSB0aGF0IHRoZXJlIGlzIGF0
IGxlYXN0IG9uZQorICAgICAgICB1bmhhbmRsZWQgc2lnbmFsLgorCisgICAgICAgIEluIHRoZSBm
YXVsdGluZyBjYXNlcyB3ZSByZXF1aXJlIHRoYXQgZXZlcnkgaGFuZGxlIGJlIGFibGUgdG8KKyAg
ICAgICAgcmVjb2duaXNlIGEgZmF1bHQgdGhleSBpbnN0YWxsZWQsIHZzIGNyYXNoZXMuIElmIG5v
bmUgb2Ygb3VyCisgICAgICAgIGhhbmRsZXJzIGNsYWltIHRvIGhhdmUgaGFuZGxlZCB0aGUgZmF1
bHQgd2Ugd2lsbCBmb3J3YXJkIHRoZQorICAgICAgICBmYXVsdC4gSWYgYSBoYW5kbGVyIHdhcyBp
bnN0YWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBmYXVsdCBoYW5kbGVyCisgICAgICAgIHdlIHNpbXBs
eSBjYWxsIHRoYXQgaGFuZGxlciBhbmQgcmVseSBvbiB0aGVtIHRvIHRha2UgdGhlCisgICAgICAg
IGFwcHJvcHJpYXRlIGFjdGlvbi4gSWYgbm8gaGFuZGxlciB3YXMgaW5zdGFsbGVkIGJlZm9yZSBv
dXIgZmlyc3QKKyAgICAgICAgaGFuZGxlciB3ZSByZXN0b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIg
YW5kIGFsbG93IHRoZSBmYXVsdCB0bworICAgICAgICBoYXBwZW4gYWdhaW4uCisKKyAgICAgICAg
RmluYWxseSwgdGhpcyBwYXRjaCBhZGRzIGEgc2lnbmFsIGJhc2VkIG1lc3NhZ2luZyBzeXN0ZW0u
ICBUaGlzCisgICAgICAgIHN5c3RlbSBhbGxvd3MgdGhlIHVzZXIgdG8gcnVuIGFuIGFyYml0cmFy
eSBsYW1iZGEgZnJvbSB0aGUgU0lHVVNSMgorICAgICAgICBzaWduYWwgaGFuZGxlciBvZiBhbnkg
dGFyZ2V0IFdURjo6VGhyZWFkLiBUaGlzIGlzIGFscmVhZHkgaW4gdXNlCisgICAgICAgIGZvciB0
aGUgVk1UcmFwcyBBUEkgd2hpY2ggYWxsb3dzIHVzIHRvIGtpbGwgcm9ndWUgVk1zIGJ5IHNlbmRp
bmcKKyAgICAgICAgdGhlIFZNJ3MgcnVubmluZyBXVEY6OlRocmVhZCBhIFNJR1VTUiBhbmQgcmVx
dWVzdGluZyBpdCBqZXRpc29uCisgICAgICAgIGFsbCBvcHRpbWl6ZWQgY29kZSBhbmQgdGhyb3cg
YW4gdW5jYXRjaGFibGUgZXhjZXB0aW9uIGZyb20gYWxsCisgICAgICAgIGZ1bmN0aW9uIGVudHJp
ZXMvbG9vcCBiYWNrZWRnZXMuICBJbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGFsc28gdXNlCisgICAg
ICAgIHRoaXMgQVBJIGZvciBXYXNtIHRvIHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZXMgaW4g
Y3VycmVudGx5CisgICAgICAgIGV4ZWN1dGluZyBXYXNtIHRocmVhZHMuCisKKyAgICAgICAgKiBX
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgor
ICAgICAgICAoV1RGOjpBdG9taWM6OkF0b21pYyk6CisgICAgICAgICogd3RmL0xvY2tsZXNzQmFn
Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6TG9ja2xlc3NCYWcpOgorICAg
ICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6YWRkKToKKyAgICAgICAgKFdURjo6TG9ja2xlc3NCYWc6
Oml0ZXJhdGUpOgorICAgICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6Y29uc3VtZUFsbCk6CisgICAg
ICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VGhyZWFk
TWVzc2FnZURhdGE6OlRocmVhZE1lc3NhZ2VEYXRhKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6
ZVRocmVhZE1lc3NhZ2VzKToKKyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2VTY29wZWQpOgorICAg
ICAgICAqIHd0Zi9UaHJlYWRNZXNzYWdlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpzZW5kTWVz
c2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OmluaXRp
YWxpemVUaHJlYWRpbmcpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjp0aHJlYWRNZXNzYWdlcyk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJl
YWRzLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWwp
OgorICAgICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6anNjU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChXVEY6Omluc3RhbGxTaWduYWxIYW5kbGVy
KToKKyAgICAgICAgKiB3dGYvdGhyZWFkcy9TaWduYWxzLmg6IEFkZGVkLgorICAgICAgICAoV1RG
Ojp0b1N5c3RlbVNpZ25hbCk6CisgICAgICAgIChXVEY6OmZyb21TeXN0ZW1TaWduYWwpOgorCiAy
MDE3LTA0LTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSBu
b3RGb3VuZCBpbnRvIGl0cyBvd24gZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAppbmRleCA2ZWU2ZmUyODE4N2I5YWE0OWRlYTNjMjM3MWUz
Y2NiYzQzNDcxMDExLi4xMGUxNDQyYWUxMjliYmU0Y2Y0NTI2MThjYmM5ZmM1ZTUzOTMwNDhjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaApA
QCAtODEsNiArODEsMTIgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBleGVjdXRhYmxlUG9vbFJlc2Vy
dmF0aW9uRnJhY3Rpb24gPSAwLjI1OwogZXh0ZXJuIEpTX0VYUE9SVERBVEEgdWludHB0cl90IHN0
YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sOwogZXh0ZXJuIEpTX0VYUE9SVERBVEEgdWlu
dHB0cl90IGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbDsKIAoraW5saW5lIGJvb2wgaXNK
SVRQQyh2b2lkKiBwYykKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3Rh
cnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpIDw9IHBjCisgICAgICAgICYmIHBjIDwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKTsKK30K
KwogdHlwZWRlZiB2b2lkICgqSklUV3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24pKG9mZl90LCBj
b25zdCB2b2lkKiwgc2l6ZV90KTsKIGV4dGVybiBKU19FWFBPUlREQVRBIEpJVFdyaXRlU2VwYXJh
dGVIZWFwc0Z1bmN0aW9uIGppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IGU2Mjg1YTMwYzIyMmE1YWNh
ZGMzOGYwYzliMWI3YWU3YTQ3N2U3ODUuLjlmYzhmMGY3ZTM5MjdjM2ViY2ZjM2RlNWE0YzlkNjE5
NGFjZjQ4ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJh
cHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBA
IC00Miw3ICs0Miw4IEBACiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogCiAjaWYgT1MoREFS
V0lOKQotI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+
CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtNTQsOSArNTUsNiBAQCBBTFdBWVNfSU5MSU5FIFZNJiBWTVRyYXBzOjp2bSgpIGNv
bnN0CiAKICNpZiBFTkFCTEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBTKQogCi1zdHJ1Y3Qgc2lnYWN0
aW9uIG9yaWdpbmFsU2lndXNyMUFjdGlvbjsKLXN0cnVjdCBzaWdhY3Rpb24gb3JpZ2luYWxTaWd0
cmFwQWN0aW9uOwotCiBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgU2lnbmFsQ29udGV4dCht
Y29udGV4dF90JiBtY29udGV4dCkKICAgICAgICAgOiBtY29udGV4dChtY29udGV4dCkKQEAgLTEz
Miw4NyArMTMwLDM1IEBAIHN0YXRpYyBFeHBlY3RlZDxWTUFuZFN0YWNrQm91bmRzLCBWTVRyYXBz
OjpFcnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoU2lnCiAgICAgcmV0dXJuIFZNQW5k
U3RhY2tCb3VuZHMgeyBhY3RpdmVWTSwgc3RhY2tCb3VuZHMgfTsKIH0KIAotc3RhdGljIHZvaWQg
aGFuZGxlU2lndXNyMShpbnQgc2lnbmFsTnVtYmVyLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIHVh
cCkKK3N0YXRpYyB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKCkKIHsKLSAgICBTaWduYWxDb250
ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0KTsK
LSAgICBhdXRvIGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMgPSBmaW5kQWN0aXZlVk1BbmRTdGFja0Jv
dW5kcyhjb250ZXh0KTsKLSAgICBpZiAoYWN0aXZlVk1BbmRTdGFja0JvdW5kcykgeworICAgIGlu
c3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VHJhcCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9p
ZCogdWFwKSAtPiBTaWduYWxBY3Rpb24geworICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQo
c3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0KTsKKworICAgICAgICBp
ZiAoIWlzSklUUEMoY29udGV4dC50cmFwUEMpKQorICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFj
dGlvbjo6Tm90SGFuZGxlZDsKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50bHkgZWF0
cyBhbGwgdHJhcHMgaW5jbHVkaW5nIGppdCBhc3NlcnRzIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhp
cworICAgICAgICAvLyBhbHdheXMgd29ya3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzEwMzkKKyAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0g
ZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoY29udGV4dCk7CisgICAgICAgIGlmICghYWN0aXZl
Vk1BbmRTdGFja0JvdW5kcykKKyAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRs
ZWQ7IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KKwogICAgICAgICBW
TSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07CiAgICAgICAgIGlmICh2
bSkgewotICAgICAgICAgICAgU3RhY2tCb3VuZHMgc3RhY2tCb3VuZHMgPSBhY3RpdmVWTUFuZFN0
YWNrQm91bmRzLnZhbHVlKCkuc3RhY2tCb3VuZHM7CiAgICAgICAgICAgICBWTVRyYXBzJiB0cmFw
cyA9IHZtLT50cmFwcygpOwotICAgICAgICAgICAgaWYgKHRyYXBzLm5lZWRUcmFwSGFuZGxpbmco
KSkKLSAgICAgICAgICAgICAgICB0cmFwcy50cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKGNvbnRl
eHQsIHN0YWNrQm91bmRzKTsKKyAgICAgICAgICAgIGlmICghdHJhcHMubmVlZFRyYXBIYW5kbGlu
ZygpKQorICAgICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7IC8vIFRo
ZSBwb2xsaW5nIGNvZGUgYmVhdCB1cyB0byBoYW5kbGluZyB0aGUgdHJhcCBhbHJlYWR5LgorCisg
ICAgICAgICAgICBhdXRvIGV4cGVjdGVkU3VjY2VzcyA9IHRyYXBzLnRyeUpldHRpc29uQ29kZUJs
b2Nrc09uU3RhY2soY29udGV4dCk7CisgICAgICAgICAgICBpZiAoIWV4cGVjdGVkU3VjY2VzcykK
KyAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOyAvLyBMZXQgdGhl
IFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRT
dWNjZXNzLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFu
ZGxlZDsgLy8gV2UndmUgc3VjY2VzcyBqZXR0aXNvbiB0aGUgY29kZUJsb2Nrcy4KICAgICAgICAg
fQotICAgIH0KLQotICAgIGF1dG8gb3JpZ2luYWxBY3Rpb24gPSBvcmlnaW5hbFNpZ3VzcjFBY3Rp
b24uc2Ffc2lnYWN0aW9uOwotICAgIGlmIChvcmlnaW5hbEFjdGlvbikKLSAgICAgICAgb3JpZ2lu
YWxBY3Rpb24oc2lnbmFsTnVtYmVyLCBpbmZvLCB1YXApOwotfQotCi1zdGF0aWMgdm9pZCBoYW5k
bGVTaWd0cmFwKGludCBzaWduYWxOdW1iZXIsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogdWFwKQot
ewotICAgIFNpZ25hbENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFw
KS0+dWNfbWNvbnRleHQpOwotICAgIGF1dG8gYWN0aXZlVk1BbmRTdGFja0JvdW5kcyA9IGZpbmRB
Y3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRleHQpOwotICAgIGlmICghYWN0aXZlVk1BbmRTdGFj
a0JvdW5kcykKLSAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdh
aW4gbGF0ZXIuCi0KLSAgICBWTSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCku
dm07Ci0gICAgaWYgKHZtKSB7Ci0gICAgICAgIFZNVHJhcHMmIHRyYXBzID0gdm0tPnRyYXBzKCk7
Ci0gICAgICAgIGlmICghdHJhcHMubmVlZFRyYXBIYW5kbGluZygpKQotICAgICAgICAgICAgcmV0
dXJuOyAvLyBUaGUgcG9sbGluZyBjb2RlIGJlYXQgdXMgdG8gaGFuZGxpbmcgdGhlIHRyYXAgYWxy
ZWFkeS4KIAotICAgICAgICBhdXRvIGV4cGVjdGVkU3VjY2VzcyA9IHRyYXBzLnRyeUpldHRpc29u
Q29kZUJsb2Nrc09uU3RhY2soY29udGV4dCk7Ci0gICAgICAgIGlmICghZXhwZWN0ZWRTdWNjZXNz
KQotICAgICAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4g
bGF0ZXIuCi0gICAgICAgIGlmIChleHBlY3RlZFN1Y2Nlc3MudmFsdWUoKSkKLSAgICAgICAgICAg
IHJldHVybjsgLy8gV2UndmUgc3VjY2VzcyBqZXR0aXNvbiB0aGUgY29kZUJsb2Nrcy4KLSAgICB9
Ci0KLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlbiB0aGlzIFNJR1RSQVAgaXMgbm90IGR1ZSB0
byBhIFZNVHJhcC4gTGV0J3MgZG8gdGhlIGRlZmF1bHQgYWN0aW9uLgotICAgIGF1dG8gb3JpZ2lu
YWxBY3Rpb24gPSBvcmlnaW5hbFNpZ3RyYXBBY3Rpb24uc2Ffc2lnYWN0aW9uOwotICAgIGlmIChv
cmlnaW5hbEFjdGlvbikgewotICAgICAgICAvLyBJdCBpcyBhbHdheXMgc2FmZSB0byBqdXN0IGlu
dm9rZSB0aGUgb3JpZ2luYWwgaGFuZGxlciB1c2luZyB0aGUgc2Ffc2lnYWN0aW9uIGZvcm0KLSAg
ICAgICAgLy8gd2l0aG91dCBjaGVja2luZyBmb3IgdGhlIFNBX1NJR0lORk8gZmxhZy4gSWYgdGhl
IG9yaWdpbmFsIGhhbmRsZXIgaXMgb2YgdGhlCi0gICAgICAgIC8vIHNhX2hhbmRsZXIgZm9ybSwg
aXQgd2lsbCBqdXN0IGlnbm9yZSB0aGUgMm5kIGFuZCAzcmQgYXJndW1lbnRzIHNpbmNlIHNhX2hh
bmRsZXIgaXMgYQotICAgICAgICAvLyBzdWJzZXQgb2Ygc2Ffc2lnYWN0aW9uLiBUaGlzIGlzIHdo
YXQgdGhlIG1hbiBwYWdlcyBzYXlzIHRoZSBPUyBkb2VzIGFueXdheS4KLSAgICAgICAgb3JpZ2lu
YWxBY3Rpb24oc2lnbmFsTnVtYmVyLCBpbmZvLCB1YXApOwotICAgIH0KLSAgICAKLSAgICAvLyBQ
cmUtZW1wdGl2ZWx5IHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBidXQgd2UgbWF5IHJvbGwg
aXQgYmFjayBiZWxvdy4KLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGN1cnJlbnRBY3Rpb247Ci0gICAg
c3RydWN0IHNpZ2FjdGlvbiBkZWZhdWx0QWN0aW9uOwotICAgIGRlZmF1bHRBY3Rpb24uc2FfaGFu
ZGxlciA9IFNJR19ERkw7Ci0gICAgc2lnZmlsbHNldCgmZGVmYXVsdEFjdGlvbi5zYV9tYXNrKTsK
LSAgICBkZWZhdWx0QWN0aW9uLnNhX2ZsYWdzID0gMDsKLSAgICBzaWdhY3Rpb24oU0lHVFJBUCwg
JmRlZmF1bHRBY3Rpb24sICZjdXJyZW50QWN0aW9uKTsKLSAgICAKLSAgICBpZiAoY3VycmVudEFj
dGlvbi5zYV9zaWdhY3Rpb24gIT0gaGFuZGxlU2lndHJhcCkgewotICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgdGhlcmUncyBhIGNsaWVudCBoYW5kbGVyIGluc3RhbGxlZCBhZnRlciB1cy4gVGhp
cyBhbHNvIG1lYW5zCi0gICAgICAgIC8vIHRoYXQgdGhlIGNsaWVudCBoYW5kbGVyIHRoaW5rcyBp
dCB3YXMgYWJsZSB0byByZWNvdmVyIGZyb20gdGhlIFNJR1RSQVAsIGFuZAotICAgICAgICAvLyBk
aWQgbm90IHVuaW5zdGFsbCBpdHNlbGYuIFdlIGNhbid0IGFyZ3VlIHdpdGggdGhpcyBiZWNhdXNl
IHRoZSBzaWduYWwgaXNuJ3QKLSAgICAgICAgLy8ga25vd24gdG8gYmUgZnJvbSBhIFZNVHJhcHMg
c2lnbmFsLiBIZW5jZSwgcmVzdG9yZSB0aGUgY2xpZW50IGhhbmRsZXIKLSAgICAgICAgLy8gYW5k
IGtlZXAgZ29pbmcuCi0gICAgICAgIHNpZ2FjdGlvbihTSUdUUkFQLCAmY3VycmVudEFjdGlvbiwg
bnVsbHB0cik7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcnMo
KQotewotICAgIHR5cGVkZWYgdm9pZCAoKiBTaWdhY3Rpb25IYW5kbGVyKShpbnQsIHNpZ2luZm9f
dCAqLCB2b2lkICopOwotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotCi0gICAgYWN0aW9u
LnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2lnYWN0aW9uSGFuZGxlcj4oaGFuZGxl
U2lndXNyMSk7Ci0gICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5z
YV9mbGFncyA9IFNBX1NJR0lORk87Ci0gICAgc2lnYWN0aW9uKFNJR1VTUjEsICZhY3Rpb24sICZv
cmlnaW5hbFNpZ3VzcjFBY3Rpb24pOwotCi0gICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8U2lnYWN0aW9uSGFuZGxlcj4oaGFuZGxlU2lndHJhcCk7Ci0gICAgc2lnZmls
bHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87
Ci0gICAgc2lnYWN0aW9uKFNJR1RSQVAsICZhY3Rpb24sICZvcmlnaW5hbFNpZ3RyYXBBY3Rpb24p
OworICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOworICAgIH0pOwogfQogCiBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBDYWxsRnJhbWUqIHNhbml0aXplZFRvcENhbGxGcmFtZShDYWxs
RnJhbWUqIHRvcENhbGxGcmFtZSkKQEAgLTQwMCw3ICszNDYsNyBAQCBWTVRyYXBzOjpWTVRyYXBz
KCkKICAgICBpZiAoIU9wdGlvbnM6OnVzZVBvbGxpbmdUcmFwcygpKSB7CiAgICAgICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlOwogICAgICAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7
Ci0gICAgICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcnMoKTsKKyAgICAgICAgICAgIGluc3Rh
bGxTaWduYWxIYW5kbGVyKCk7CiAgICAgICAgIH0pOwogICAgIH0KICNlbmRpZgpAQCAtNDYwLDcg
KzQwNiwxOSBAQCB2b2lkIFZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6c2VuZCgpCiAgICAgICAgICAg
ICBWTSYgdm0gPSAqbV92bTsKICAgICAgICAgICAgIGF1dG8gb3B0aW9uYWxPd25lclRocmVhZCA9
IHZtLm93bmVyVGhyZWFkKCk7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxPd25lclRocmVhZCkg
ewotICAgICAgICAgICAgICAgIG9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS0+c2lnbmFsKFNJ
R1VTUjEpOworICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKCpvcHRpb25hbE93bmVyVGhyZWFk
LnZhbHVlKCkuZ2V0KCksIFtdIChzaWdpbmZvX3QqLCB1Y29udGV4dF90KiB1Y29udGV4dCkgLT4g
dm9pZCB7CisgICAgICAgICAgICAgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dCh1Y29udGV4
dC0+dWNfbWNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGFjdGl2ZVZNQW5kU3Rh
Y2tCb3VuZHMgPSBmaW5kQWN0aXZlVk1BbmRTdGFja0JvdW5kcyhjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZNKiB2bSA9IGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMudmFsdWUoKS52bTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2bSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzID0gYWN0aXZlVk1BbmRTdGFja0JvdW5kcy52YWx1
ZSgpLnN0YWNrQm91bmRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZNVHJhcHMmIHRy
YXBzID0gdm0tPnRyYXBzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYXBz
Lm5lZWRUcmFwSGFuZGxpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJh
cHMudHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhjb250ZXh0LCBzdGFja0JvdW5kcyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5oCmluZGV4IGZkYmEyYWZkODMxZjAwZGJlMmJi
NTU2YWJhMTNjNWFkYmQ4MTBiMTYuLjU0MjViMTg4MzMyN2ZhZDgzZWM2MDI0MjZhZTk2ODEzNWZj
YjA1ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmgKQEAgLTQyLDcg
KzQyLDggQEAgY2xhc3MgVk1UcmFwcyB7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBFcnJvciB7
CiAgICAgICAgIE5vbmUsCi0gICAgICAgIExvY2tVbmF2YWlsYWJsZQorICAgICAgICBMb2NrVW5h
dmFpbGFibGUsCisgICAgICAgIE5vdEpJVENvZGUKICAgICB9OwogCiAgICAgZW51bSBFdmVudFR5
cGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNo
QW5hbHl6ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwCmluZGV4IDI2NWM2NjE1NWQxYWRiOGRhOThiZDc4OTQyMDI5Mjk4M2Q2MTI3M2Qu
LmViODZlZTQwYzJlNTAyM2NiMGU2ZmExMTg1MzYzNmE0MWJhZDJjNmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKQEAgLTM3
LDkgKzM3LDcgQEAKICNpbmNsdWRlICJBNjRET3Bjb2RlLmgiCiAjZW5kaWYKIAotI2lmIEhBVkUo
U0lHTkFMX0gpCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvdGhy
ZWFkcy9TaWduYWxzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNDEsNjAgKzEzOSwxOSBA
QCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwogfTsKIAot
c3RydWN0IHNpZ2FjdGlvbiBvcmlnaW5hbFNpZ0lsbEFjdGlvbjsKLQotc3RhdGljIHZvaWQgaGFu
ZGxlQ3Jhc2goaW50IHNpZ25hbE51bWJlciwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1YXApCi17
Ci0gICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXAp
LT51Y19tY29udGV4dCk7Ci0gICAgU2lnaWxsQ3Jhc2hBbmFseXplciYgYW5hbHl6ZXIgPSBTaWdp
bGxDcmFzaEFuYWx5emVyOjppbnN0YW5jZSgpOwotICAgIGF1dG8gY3Jhc2hTb3VyY2UgPSBhbmFs
eXplci5hbmFseXplKGNvbnRleHQpOwotCi0gICAgYXV0byBvcmlnaW5hbEFjdGlvbiA9IG9yaWdp
bmFsU2lnSWxsQWN0aW9uLnNhX3NpZ2FjdGlvbjsKLSAgICBpZiAob3JpZ2luYWxBY3Rpb24pIHsK
LSAgICAgICAgLy8gSXQgaXMgYWx3YXlzIHNhZmUgdG8ganVzdCBpbnZva2UgdGhlIG9yaWdpbmFs
IGhhbmRsZXIgdXNpbmcgdGhlIHNhX3NpZ2FjdGlvbiBmb3JtCi0gICAgICAgIC8vIHdpdGhvdXQg
Y2hlY2tpbmcgZm9yIHRoZSBTQV9TSUdJTkZPIGZsYWcuIElmIHRoZSBvcmlnaW5hbCBoYW5kbGVy
IGlzIG9mIHRoZQotICAgICAgICAvLyBzYV9oYW5kbGVyIGZvcm0sIGl0IHdpbGwganVzdCBpZ25v
cmUgdGhlIDJuZCBhbmQgM3JkIGFyZ3VtZW50cyBzaW5jZSBzYV9oYW5kbGVyIGlzIGEKLSAgICAg
ICAgLy8gc3Vic2V0IG9mIHNhX3NpZ2FjdGlvbi4gVGhpcyBpcyB3aGF0IHRoZSBtYW4gcGFnZXMg
c2F5cyB0aGUgT1MgZG9lcyBhbnl3YXkuCi0gICAgICAgIG9yaWdpbmFsQWN0aW9uKHNpZ25hbE51
bWJlciwgaW5mbywgdWFwKTsKLSAgICB9Ci0KLSAgICBpZiAoY3Jhc2hTb3VyY2UgPT0gU2lnaWxs
Q3Jhc2hBbmFseXplcjo6Q3Jhc2hTb3VyY2U6OkphdmFTY3JpcHRDb3JlKSB7Ci0gICAgICAgIC8v
IFJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBzbyB0aGF0IHdlIGNhbiBnZXQgYSBjb3JlIGR1
bXAuCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gZGVmYXVsdEFjdGlvbjsKLSAgICAgICAgZGVm
YXVsdEFjdGlvbi5zYV9oYW5kbGVyID0gU0lHX0RGTDsKLSAgICAgICAgc2lnZmlsbHNldCgmZGVm
YXVsdEFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgZGVmYXVsdEFjdGlvbi5zYV9mbGFncyA9IDA7
Ci0gICAgICAgIHNpZ2FjdGlvbihTSUdJTEwsICZkZWZhdWx0QWN0aW9uLCBudWxscHRyKTsKLSAg
ICB9IGVsc2UgaWYgKCFvcmlnaW5hbEFjdGlvbikgewotICAgICAgICAvLyBQcmUtZW1wdGl2ZWx5
IHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBidXQgd2UgbWF5IHJvbGwgaXQgYmFjayBiZWxv
dy4KLSAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBjdXJyZW50QWN0aW9uOwotICAgICAgICBzdHJ1
Y3Qgc2lnYWN0aW9uIGRlZmF1bHRBY3Rpb247Ci0gICAgICAgIGRlZmF1bHRBY3Rpb24uc2FfaGFu
ZGxlciA9IFNJR19ERkw7Ci0gICAgICAgIHNpZ2ZpbGxzZXQoJmRlZmF1bHRBY3Rpb24uc2FfbWFz
ayk7Ci0gICAgICAgIGRlZmF1bHRBY3Rpb24uc2FfZmxhZ3MgPSAwOwotICAgICAgICBzaWdhY3Rp
b24oU0lHSUxMLCAmZGVmYXVsdEFjdGlvbiwgJmN1cnJlbnRBY3Rpb24pOwotCi0gICAgICAgIGlm
IChjdXJyZW50QWN0aW9uLnNhX3NpZ2FjdGlvbiAhPSBoYW5kbGVDcmFzaCkgewotICAgICAgICAg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZXJlJ3MgYSBjbGllbnQgaGFuZGxlciBpbnN0YWxsZWQg
YWZ0ZXIgdXMuIFRoaXMgYWxzbyBtZWFucwotICAgICAgICAgICAgLy8gdGhhdCB0aGUgY2xpZW50
IGhhbmRsZXIgdGhpbmtzIGl0IHdhcyBhYmxlIHRvIHJlY292ZXIgZnJvbSB0aGUgU0lHSUxMLCBh
bmQKLSAgICAgICAgICAgIC8vIGRpZCBub3QgdW5pbnN0YWxsIGl0c2VsZi4gV2UgY2FuJ3QgYXJn
dWUgd2l0aCB0aGlzIGJlY2F1c2UgdGhlIGNyYXNoIGlzbid0Ci0gICAgICAgICAgICAvLyBrbm93
biB0byBiZSBmcm9tIGEgSmF2YVNjcmlwdENvcmUgc291cmNlLiBIZW5jZSwgcmVzdG9yZSB0aGUg
Y2xpZW50IGhhbmRsZXIKLSAgICAgICAgICAgIC8vIGFuZCBrZWVwIGdvaW5nLgotICAgICAgICAg
ICAgc2lnYWN0aW9uKFNJR0lMTCwgJmN1cnJlbnRBY3Rpb24sIG51bGxwdHIpOwotICAgICAgICB9
Ci0gICAgfQotfQotCiBzdGF0aWMgdm9pZCBpbnN0YWxsQ3Jhc2hIYW5kbGVyKCkKIHsKICNpZiBD
UFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Ci0g
ICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAoKikoaW50LCBz
aWdpbmZvX3QgKiwgdm9pZCAqKT4oaGFuZGxlQ3Jhc2gpOwotICAgIHNpZ2ZpbGxzZXQoJmFjdGlv
bi5zYV9tYXNrKTsKLSAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOwotICAgIHNpZ2Fj
dGlvbihTSUdJTEwsICZhY3Rpb24sICZvcmlnaW5hbFNpZ0lsbEFjdGlvbik7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShoYW5kbGVDcmFzaCk7CisgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2ln
bmFsOjpJbGwsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkgeworICAgICAgICBTaWdu
YWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250
ZXh0KTsKKworICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4dC5tYWNoaW5lUEMpKQorICAgICAg
ICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKKworICAgICAgICBTaWdpbGxD
cmFzaEFuYWx5emVyJiBhbmFseXplciA9IFNpZ2lsbENyYXNoQW5hbHl6ZXI6Omluc3RhbmNlKCk7
CisgICAgICAgIGFuYWx5emVyLmFuYWx5emUoY29udGV4dCk7CisgICAgICAgIHJldHVybiBTaWdu
YWxBY3Rpb246Ok5vdEhhbmRsZWQ7CisgICAgfSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAppbmRl
eCA4OTgxMDRiZDQ4YWRiMTE4ODY1YTljOGRlZTViNTZmNGU2NmJlYTgyLi4yZTBjOTlhMzliZWJk
MzE3OGI5MTQ4ZDk1OGZlNTNlNTdhNjIyOTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcApAQCAtMzUsOSArMzUsOSBA
QAogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtVGh1bmtzLmgiCiAKLSNp
bmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNTAsMTEgKzUwLDkgQEAgc3RhdGlj
IExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPj4+IGNv
ZGVMb2NhdGlvbnM7IC8vICgKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9GQVNUX01FTU9SWSkK
IAotc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkU2lnQnVzSGFuZGxlcjsKLXN0YXRpYyBzdHJ1
Y3Qgc2lnYWN0aW9uIG9sZFNpZ1NlZ3ZIYW5kbGVyOwogc3RhdGljIGJvb2wgZmFzdEhhbmRsZXJJ
bnN0YWxsZWQgeyBmYWxzZSB9OwogCi1zdGF0aWMgdm9pZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFs
LCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQorc3RhdGljIFNpZ25hbEFjdGlv
biB0cmFwSGFuZGxlcihpbnQsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpCiB7
CiAgICAgbWNvbnRleHRfdCYgY29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1Y29u
dGV4dCktPnVjX21jb250ZXh0OwogICAgIHZvaWQqIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPSBNYWNo
aW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpOwpAQCAtNjMsOSArNjEsNyBA
QCBzdGF0aWMgdm9pZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8s
IHZvaWQqIHVjb250ZXh0KQogICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJKSVQgbWVtb3J5IHN0
YXJ0OiAiLCBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXJ0T2ZGaXhlZEV4
ZWN1dGFibGVNZW1vcnlQb29sKSksICIgZW5kOiAiLCBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkpKTsKICAgICAvLyBGaXJz
dCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gSklUIGNvZGUgYmVmb3JlIHdlIGNhbiBh
cXVpcmUgYW55IGxvY2tzLiBPdGhlcndpc2UsCiAgICAgLy8gd2UgbWlnaHQgaGF2ZSBjcmFzaGVk
IGluIGNvZGUgdGhhdCBpcyBhbHJlYWR5IGhvbGRpbmcgb25lIG9mIHRoZSBsb2NrcyB3ZSB3YW50
IHRvIGFxdWlyZS4KLSAgICBpZiAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhcnRPZkZpeGVk
RXhlY3V0YWJsZU1lbW9yeVBvb2wpIDw9IGZhdWx0aW5nSW5zdHJ1Y3Rpb24KLSAgICAgICAgJiYg
ZmF1bHRpbmdJbnN0cnVjdGlvbiA8IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVuZE9mRml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbCkpIHsKLQorICAgIGlmIChpc0pJVFBDKGZhdWx0aW5nSW5zdHJ1
Y3Rpb24pKSB7CiAgICAgICAgIGJvb2wgZmF1bHRlZEluQWN0aXZlRmFzdE1lbW9yeSA9IGZhbHNl
OwogICAgICAgICB7CiAgICAgICAgICAgICB2b2lkKiBmYXVsdGluZ0FkZHJlc3MgPSBzaWdJbmZv
LT5zaV9hZGRyOwpAQCAtODksMTcgKzg1LDEyIEBAIHN0YXRpYyB2b2lkIHRyYXBIYW5kbGVyKGlu
dCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpCiAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmb3VuZCBzdHViOiAiLCBSYXdQb2ludGVy
KGV4Y2VwdGlvblN0dWIuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAgICAgICAg
ICAgICAgICAgTWFjaGluZUNvbnRleHQ6OmFyZ3VtZW50UG9pbnRlcjwxPihjb250ZXh0KSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNj
ZXNzKTsKICAgICAgICAgICAgICAgICAgICAgTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9p
bnRlcihjb250ZXh0KSA9IGV4Y2VwdGlvblN0dWIuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICAvLyBTaW5jZSB3ZSBvbmx5IHVzZSBmYXN0IG1lbW9y
eSBpbiBwcm9jZXNzZXMgd2UgY29udHJvbCwgaWYgd2UgcmVzdG9yZSB3ZSB3aWxsIGp1c3QgZmFs
bCBiYWNrIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIuCi0gICAgaWYgKHNpZ25hbCA9PSBTSUdCVVMp
Ci0gICAgICAgIHNpZ2FjdGlvbihzaWduYWwsICZvbGRTaWdCdXNIYW5kbGVyLCBudWxscHRyKTsK
LSAgICBlbHNlCi0gICAgICAgIHNpZ2FjdGlvbihzaWduYWwsICZvbGRTaWdTZWd2SGFuZGxlciwg
bnVsbHB0cik7CisgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKIH0KIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWV9GQVNUX01FTU9SWSkKQEAgLTEzMywyMiArMTI0LDEz
IEBAIHZvaWQgZW5hYmxlRmFzdE1lbW9yeSgpCiAgICAgICAgICAgICByZXR1cm47CiAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFlfRkFTVF9NRU1PUlkpCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24g
YWN0aW9uOwotCi0gICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSB0cmFwSGFuZGxlcjsKLSAg
ICAgICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgICAgICBhY3Rpb24uc2FfZmxh
Z3MgPSBTQV9TSUdJTkZPOwotICAgICAgICAKLSAgICAgICAgLy8gSW5zdGFsbGluZyBzaWduYWwg
aGFuZGxlcnMgZmFpbHMgd2hlbgotICAgICAgICAvLyAxLiBzcGVjaWZpY2llZCBzaWcgaXMgaW5j
b3JyZWN0IChpbnZhbGlkIHZhbHVlcyBvciBzaWduYWwgbnVtYmVycyB3aGljaCBjYW5ub3QgYmUg
aGFuZGxlZCksIG9yCi0gICAgICAgIC8vIDIuIHNlY29uZCBvciB0aGlyZCBwYXJhbWV0ZXIgcG9p
bnRzIGluY29ycmVjdCBwb2ludGVycy4KLSAgICAgICAgLy8gVGh1cywgd2UgbXVzdCBub3QgZmFp
bCBpbiB0aGUgZm9sbG93aW5nIGF0dGVtcHRzLgotICAgICAgICBpbnQgcmV0ID0gMDsKLSAgICAg
ICAgcmV0ID0gc2lnYWN0aW9uKFNJR0JVUywgJmFjdGlvbiwgJm9sZFNpZ0J1c0hhbmRsZXIpOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmV0KTsKLQotICAgICAgICByZXQgPSBzaWdhY3Rpb24o
U0lHU0VHViwgJmFjdGlvbiwgJm9sZFNpZ1NlZ3ZIYW5kbGVyKTsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIXJldCk7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6QnVzLCBb
XSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRyYXBIYW5kbGVyKHNpZ25hbCwgc2lnSW5mbywgdWNvbnRleHQpOwor
ICAgICAgICB9KTsKKworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OlNlZ1Ys
IFtdIChpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KSB7Cisg
ICAgICAgICAgICByZXR1cm4gdHJhcEhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCB1Y29udGV4dCk7
CisgICAgICAgIH0pOwogCiAgICAgICAgIGNvZGVMb2NhdGlvbnMuY29uc3RydWN0KCk7CiAgICAg
ICAgIGZhc3RIYW5kbGVySW5zdGFsbGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDk0YzExNmJmMTIzMTRhYjAwMTg2OWM2N2EwNTkwMWEwMTY4
MGZiZmMuLmZiN2E5MDFmYTI3MzE0ODNmNGUzNmFkY2YzMmFlZTgzZWZmZDI0MWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ5LDYgKzE0OSwxMSBAQAog
CQk1MTVGNzk1MDFDRkM5RjRBMDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRUYXNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVGNzk0RDFDRkM5RjRBMDBD
Q0VEOTMgLyogQ3Jvc3NUaHJlYWRUYXNrLmggKi87IH07CiAJCTUxNUY3OTU2MUNGRDNBNjkwMEND
RUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTVGNzk1NTFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRR
dWV1ZS5oICovOyB9OwogCQk1MjE4MzAxMkM5OUU0NzZBODRFRUJFQTggLyogU3ltYm9sSW1wbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNzJCQkRC
MTA3RkE0MjQ4ODYxNzhCOUUgLyogU3ltYm9sSW1wbC5jcHAgKi87IH07CisJCTUzMTFCRDUzMUVB
NzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDUxMUVBNzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNw
cCAqLzsgfTsKKwkJNTMxMUJENTYxRUE3RTE1QTAwNTI1MjgxIC8qIExvY2tsZXNzQmFnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1NTFFQTdF
MTVBMDA1MjUyODEgLyogTG9ja2xlc3NCYWcuaCAqLzsgfTsKKwkJNTMxMUJENTgxRUE3RTFBMTAw
NTI1MjgxIC8qIFNpZ25hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4MSAvKiBTaWduYWxzLmggKi87IH07CisJ
CTUzMTFCRDVBMUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1OTFFQTgxQTk2MDA1MjUy
ODEgLyogVGhyZWFkTWVzc2FnZS5oICovOyB9OworCQk1MzExQkQ1QzFFQTgyMkY5MDA1MjUyODEg
LyogVGhyZWFkTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAg
Ki87IH07CiAJCTUzOUVCMDYzMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjA2MjFENTUyODQy
MDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovOyB9OwogCQk1M0VDMjUzRTFFOTVBRDMwMDAwODMx
QjkgLyogUHJpb3JpdHlRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAq
LzsgfTsKIAkJNTUzMDcxQ0ExQzQwNDI3MjAwMzg0ODk4IC8qIFRpbnlMUlVDYWNoZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUzMDcxQzkxQzQwNDI3
MjAwMzg0ODk4IC8qIFRpbnlMUlVDYWNoZS5oICovOyB9OwpAQCAtNTQ4LDYgKzU1MywxMSBAQAog
CQk1MTVGNzk0QzFDRkM5RjRBMDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRDb3BpZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1Rjc5NEQxQ0ZDOUY0QTAwQ0NFRDkzIC8qIENyb3NzVGhy
ZWFkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFRh
c2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NF
RDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ3Jvc3NUaHJlYWRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzEx
QkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTaWduYWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTMxMUJENTUxRUE3RTE1QTAwNTI1MjgxIC8qIExvY2tsZXNzQmFnLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tsZXNzQmFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4MSAvKiBTaWduYWxzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpZ25hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVz
c2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNz
YWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwNjIxRDU1Mjg0MjAw
QzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TEVCRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VDMjUzQzFFOTVB
RDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQcmlvcml0eVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1
MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGlueUxSVUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMDY0LDYgKzEwNzQsNyBAQAogCQkJCTBGNjBGMzJEMURGQ0JEMUIwMDQxNkQ2QyAv
KiBMb2NrZWRQcmludFN0cmVhbS5jcHAgKi8sCiAJCQkJMEY2MEYzMkUxREZDQkQxQjAwNDE2RDZD
IC8qIExvY2tlZFByaW50U3RyZWFtLmggKi8sCiAJCQkJQThBNDcyQzMxNTFBODI1QTAwNDEyM0ZG
IC8qIExvY2tlci5oICovLAorCQkJCTUzMTFCRDU1MUVBN0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVz
c0JhZy5oICovLAogCQkJCTUxM0UxNzBBMUNEN0Q1QkYwMEUzNjUwQiAvKiBMb2dnaW5nQWNjdW11
bGF0b3IuaCAqLywKIAkJCQkwRjMwQkE4QzFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hJ
RC5oICovLAogCQkJCTBGMzBCQThEMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaE1hcC5o
ICovLApAQCAtMTE4OSw2ICsxMjAwLDggQEAKIAkJCQlFMzIwMEFCNTFFOUE1MzZEMDAzQjU5RDIg
LyogVGhyZWFkSG9sZGVyLmNwcCAqLywKIAkJCQlFMzIwMEFCNjFFOUE1MzZEMDAzQjU5RDIgLyog
VGhyZWFkSG9sZGVyLmggKi8sCiAJCQkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZEhvbGRlclB0aHJlYWRzLmNwcCAqLywKKwkJCQk1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyog
VGhyZWFkTWVzc2FnZS5jcHAgKi8sCisJCQkJNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRo
cmVhZE1lc3NhZ2UuaCAqLywKIAkJCQlBOEE0NzMzMjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
aW5nLmNwcCAqLywKIAkJCQlBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmgg
Ki8sCiAJCQkJQThBNDczMzUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMu
aCAqLywKQEAgLTEzMTYsNiArMTMyOSw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlBOEE0NzMz
QTE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmNwcCAqLywKIAkJCQlBOEE0NzMz
QjE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggKi8sCisJCQkJNTMxMUJENTEx
RUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwICovLAorCQkJCTUzMTFCRDU3MUVBN0UxQTEw
MDUyNTI4MSAvKiBTaWduYWxzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHRocmVhZHM7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTQ2MSw2ICsxNDc2LDcgQEAKIAkJCQlERTVBMDlG
QzFCQTM2OTkyMDAzRDQ0MjQgLyogQ29tbW9uQ3J5cHRvU1BJLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjhGMkI5MTE3MkUwMEZDMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3Mzk4MTUxQTgyNUIwMDQxMjNGRiAvKiBDb21waWxlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTMxMUJENTYxRUE3RTE1QTAwNTI1MjgxIC8qIExvY2tsZXNzQmFnLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkRCNjk4RTFCN0M2NDNBMDAwQzEwNzggLyogQ29uZGl0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4QzE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmln
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMkI5QzE3MkYyNTk2MDA3REJEQTUgLyogQ29udmVy
c2lvbk1vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTUyNiw2ICsxNTQyLDcgQEAKIAkJCQlBNzBE
QTA4NDE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQky
NjE0N0IwQTE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0NERDdGRjgxODZEMjkxRTAwNzQzM0NEIC8qIEl0ZXJhdG9yQWRh
cHRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMTFCRDU4MUVBN0UxQTEwMDUyNTI4MSAvKiBT
aWduYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0REN0ZGQTE4NkQyQTU0MDA3NDMzQ0QgLyog
SXRlcmF0b3JSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNBQzkxQTgxODk0MkZDNDAwMjQ0
OTM5IC8qIExDaGFyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlFQjA2MzFENTUyODQyMDBDODJF
RjcgLyogTEVCRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjMzLDYgKzE2NTAsNyBAQAog
CQkJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQxMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBs
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0MjE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5n
T3BlcmF0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzExQkQ1QTFFQTgxQTk2MDA1MjUyODEg
LyogVGhyZWFkTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQTgxNjY2REZBMzAw
QzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTZFQjFF
MDE4N0QwQkQzMDAzMDEyNkYgLyogU3RyaW5nVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDczQjgxNTFBODI1QjAwNDEyM0ZGIC8qIHN0cnRvZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODU3
LDggKzE4NzUsMTAgQEAKIAkJCQlGRURBQ0QzRDE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQzQzE1MUE4MjVCMDA0MTIzRkYgLyogU3Ry
aW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVGQjE4MjQzNUE2MDBBODJF
NjkgLyogU3RyaW5nQ0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMxMUJENUMxRUE4MjJGOTAw
NTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NDAx
NTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVC
QTE1RkMxODI0MzVBNjAwQTgyRTY5IC8qIFN0cmluZ0ltcGxDRi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUJBMTVGNTE4MjQzNDgwMDBBODJFNjkgLyogU3RyaW5nSW1wbE1hYy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUE1QkExNUYzMTgyNDMzQTkwMEE4MkU2OSAvKiBTdHJpbmdNYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQkwRkREQkZBNzE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJp
bnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9B
dG9taWNzLmggYi9Tb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKaW5kZXggNzcyZTZmZWJiZDJlNzE2
OWQ0M2Q1MDc5NWMxZWFmYzU4ZWE2OGQxOC4uOTkwN2IzMmJmNGU0YmMzNDA2YTA1YjM5ODBhYzdk
M2MwNjNjZmQyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQXRvbWljcy5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0F0b21pY3MuaApAQCAtMTc0LDYgKzE3NCwxMiBAQCBzdHJ1Y3QgQXRvbWlj
IHsKICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uKGZ1bmMsIHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGF4ZWQsIGFib3J0TGlrZWxpaG9vZCk7CiAgICAgfQogCisgICAgQXRvbWljKCkgPSBkZWZhdWx0
OworICAgIGNvbnN0ZXhwciBBdG9taWMoVCBpbml0aWFsKQorICAgICAgICA6IHZhbHVlKHN0ZDo6
Zm9yd2FyZDxUPihpbml0aWFsKSkKKyAgICB7CisgICAgfQorCiAgICAgc3RkOjphdG9taWM8VD4g
dmFsdWU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Mb2NrbGVzc0JhZy5oIGIv
U291cmNlL1dURi93dGYvTG9ja2xlc3NCYWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjQ2YmM1YTc5ZTY0Nzk2
ZGM4YzNkOWExZDAzMWU4Y2E2ZDM5ODcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvTG9ja2xlc3NCYWcuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBdG9taWNz
LmgiCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGEgc2ltcGxlIHNpbmdsZSBjb25zdW1l
ciwgbXVsdGlwbGUgcHJvZHVjZXIgQmFnIGRhdGEgc3RydWN0dXJlLgorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorY2xhc3MgTG9ja2xlc3NCYWcgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExv
Y2tsZXNzQmFnKTsKKworICAgIHN0cnVjdCBOb2RlIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBUIGRhdGE7CisgICAgICAgIE5vZGUqIG5l
eHQ7CisgICAgfTsKK3B1YmxpYzoKKyAgICBMb2NrbGVzc0JhZygpCisgICAgICAgIDogbV9oZWFk
KG51bGxwdHIpCisgICAgeworICAgIH0KKworICAgIGVudW0gUHVzaFJlc3VsdCB7IEVtcHR5LCBO
b25FbXB0eSB9OworICAgIFB1c2hSZXN1bHQgYWRkKFQgZWxlbWVudCkKKyAgICB7CisgICAgICAg
IE5vZGUqIG5ld05vZGUgPSBuZXcgTm9kZSgpOworICAgICAgICBuZXdOb2RlLT5kYXRhID0gV1RG
TW92ZShlbGVtZW50KTsKKworICAgICAgICBOb2RlKiBvbGRIZWFkOworICAgICAgICBtX2hlYWQu
dHJhbnNhY3Rpb24oWyZdIChOb2RlKiYgaGVhZCkgeworICAgICAgICAgICAgb2xkSGVhZCA9IGhl
YWQ7CisgICAgICAgICAgICBuZXdOb2RlLT5uZXh0ID0gaGVhZDsKKyAgICAgICAgICAgIGhlYWQg
PSBuZXdOb2RlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworCisgICAg
ICAgIHJldHVybiBvbGRIZWFkID09IG51bGxwdHIgPyBFbXB0eSA6IE5vbkVtcHR5OworICAgIH0K
KworICAgIC8vIENPTlNVTUVSIEZVTkNUSU9OUzogRXZlcnl0aGluZyBiZWxvdyBoZXJlIGlzIG9u
bHkgc2FmZSB0byBjYWxsIGZyb20gdGhlIGNvbnN1bWVyIHRocmVhZC4KKworICAgIC8vIFRoaXMg
ZnVuY3Rpb24gaXMgYWN0dWFsbHkgc2FmZSB0byBjYWxsIGZyb20gbW9yZSB0aGFuIG9uZSB0aHJl
YWQsIGJ1dCBPTkxZIGlmIG5vIHRocmVhZCBjYW4gY2FsbCBjb25zdW1lQWxsLgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBpdGVyYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1
bmMpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9oZWFkLmxvYWQoKTsKKyAgICAgICAg
d2hpbGUgKG5vZGUpIHsKKyAgICAgICAgICAgIGNvbnN0IFQmIGRhdGEgPSBub2RlLT5kYXRhOwor
ICAgICAgICAgICAgZnVuYyhkYXRhKTsKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5uZXh0Owor
ICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2
b2lkIGNvbnN1bWVBbGwoY29uc3QgRnVuY3RvciYgZnVuYykKKyAgICB7CisgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2hlYWQuZXhjaGFuZ2UobnVsbHB0cik7CisgICAgICAgIHdoaWxlIChub2RlKSB7
CisgICAgICAgICAgICBmdW5jKFdURk1vdmUobm9kZS0+ZGF0YSkpOworICAgICAgICAgICAgTm9k
ZSogb2xkTm9kZSA9IG5vZGU7CisgICAgICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKKyAgICAg
ICAgICAgIGRlbGV0ZSBvbGROb2RlOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAg
IEF0b21pYzxOb2RlKj4gbV9oZWFkOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRNZXNzYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYWFkM2I3NGM0MzBmNzJmOGJkMzM3YWJi
ZDdlMjgxOWVlMjdmNzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFk
TWVzc2FnZS5jcHAKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFk
TWVzc2FnZS5oIgorCisjaWYgVVNFKFBUSFJFQURTKQorCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNp
bmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8
d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL3RocmVh
ZHMvU2lnbmFscy5oPgorCisKK25hbWVzcGFjZSBXVEYgeworCitjb25zdCBib29sIHZlcmJvc2Ug
PSB0cnVlOworCitjbGFzcyBUaHJlYWRNZXNzYWdlRGF0YSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgVGhyZWFkTWVzc2FnZURhdGEoY29uc3QgVGhyZWFkTWVz
c2FnZSYgbSkKKyAgICAgICAgOiByYW4oZmFsc2UpCisgICAgICAgICwgbWVzc2FnZShtKQorICAg
IHsKKyAgICB9CisKKyAgICBBdG9taWM8Ym9vbD4gcmFuOworICAgIGNvbnN0IFRocmVhZE1lc3Nh
Z2UmIG1lc3NhZ2U7Cit9OworCitlbnVtIEZpbGVEZXNjcmlwdG9yIHsKKyAgICBSZWFkLAorICAg
IFdyaXRlLAorICAgIE51bWJlck9mRmlsZURlc2NyaXB0b3JzLAorfTsKKworc3RhdGljIGludCBm
aWxlRGVzY3JpcHRvcnNbTnVtYmVyT2ZGaWxlRGVzY3JpcHRvcnNdOworc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IG1hZ2ljQnl0ZSA9ICJkIjsKKworCit2b2lkIGluaXRpYWxpemVUaHJlYWRNZXNz
YWdlcygpCit7CisgICAgaW50IHJlc3VsdCA9IHBpcGUoZmlsZURlc2NyaXB0b3JzKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKKworICAgIGludCBmbGFncyA9IGZjbnRsKGZpbGVEZXNj
cmlwdG9yc1tXcml0ZV0sIEZfR0VURkwpOworICAgIHJlc3VsdCA9IGZjbnRsKGZpbGVEZXNjcmlw
dG9yc1tXcml0ZV0sIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSyB8IE9fQVBQRU5EKTsKKyAg
ICBmbGFncyA9IGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tXcml0ZV0sIEZfR0VURkwpOworICAgIFJF
TEVBU0VfQVNTRVJUKHJlc3VsdCAhPSAtMSk7CisgICAgUkVMRUFTRV9BU1NFUlQoKGZsYWdzICYg
T19OT05CTE9DSykgJiYgKGZsYWdzICYgT19BUFBFTkQpKTsKKworICAgIGZsYWdzID0gZmNudGwo
ZmlsZURlc2NyaXB0b3JzW1JlYWRdLCBGX0dFVEZMKTsKKyAgICByZXN1bHQgPSBmY250bChmaWxl
RGVzY3JpcHRvcnNbUmVhZF0sIEZfU0VURkwsIGZsYWdzICYgfk9fTk9OQkxPQ0spOworICAgIGZs
YWdzID0gZmNudGwoZmlsZURlc2NyaXB0b3JzW1JlYWRdLCBGX0dFVEZMKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQgIT0gLTEpOworICAgIFJFTEVBU0VfQVNTRVJUKCEoZmxhZ3MgJiBPX05P
TkJMT0NLKSk7Cit9CisKK1NVUFBSRVNTX0FTQU4KK01lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VT
Y29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7Cisg
ICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0YXJ0aW5nIHNlbmQiKTsKKyAgICBjb25zdGV4cHIg
U2lnbmFsIHNpZ25hbCA9IFNpZ25hbDo6VXNyOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKKyAgICAgICAgaW5zdGFsbFNpZ25h
bEhhbmRsZXIoc2lnbmFsLCBbXSAoaW50LCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIHVhcCkgewor
ICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImluIGhhbmRsZXIiKTsKKyAgICAgICAg
ICAgIFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKCk7CisKKyAgICAg
ICAgICAgIGlmICghdGhyZWFkKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJXZSBzb21l
aG93IGdvdCBhIG1lc3NhZ2Ugb24gYSB0aHJlYWQgdGhhdCBkaWRuJ3QgaGF2ZSBhIFdURjo6VGhy
ZWFkIGluaXRpYWxpemVkLCB3ZSBwcm9iYWJseSBkZWFkbG9ja2VkLCBoYWxwLiIpOworICAgICAg
ICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHRocmVhZC0+dGhyZWFkTWVzc2FnZXMoKS5jb25zdW1lQWxsKFsmXSAo
VGhyZWFkTWVzc2FnZURhdGEqIGRhdGEpIHsKKyAgICAgICAgICAgICAgICBkYXRhLT5tZXNzYWdl
KGluZm8sIHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXApKTsKKyAgICAgICAgICAgICAgICBk
YXRhLT5yYW4uc3RvcmUodHJ1ZSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8g
VW5mb3J0dW5hdGVseSwgd2UgY2FuJ3QgY2hlY2sgdGhlIGVycm5vIGhlcmUgc2luY2Ugb3RoZXIg
dGhyZWFkcyBtYXkgYmUgZG9pbmcKKyAgICAgICAgICAgIC8vIG90aGVyIGNhbGxzIHdoaWNoIHNl
dCBpdCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwg
IndyaXRpbmcgYnl0ZSIpOworICAgICAgICAgICAgd2hpbGUgKHdyaXRlKGZpbGVEZXNjcmlwdG9y
c1tXcml0ZV0sIG1hZ2ljQnl0ZSwgMSkgPT0gLTEpIHsgfQorICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgImxlYXZpbmcgaGFuZGxlciIpOworICAgICAgICAgICAgcmV0dXJuIFNpZ25h
bEFjdGlvbjo6SGFuZGxlZDsKKyAgICAgICAgfSk7CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJoYW5kbGVyIGluc3RhbGxlZCIpOworICAgIH0pOworCisKKyAgICAvLyBTaW5jZSB3ZSBh
cmUgZ3VhcmVudGVlZCBub3QgdG8gcmV0dXJuIHVudGlsIHdlIGdldCBhIHJlc3BvbnNlIGZyb20g
dGhlIG90aGVyIHRocmVhZCB0aGlzIGlzIG9rLgorICAgIFRocmVhZE1lc3NhZ2VEYXRhIGRhdGEo
bWVzc2FnZSk7CisKKyAgICB0aHJlYWQudGhyZWFkTWVzc2FnZXMoKS5hZGQoJmRhdGEpOworICAg
IGRhdGFMb2dMbklmKHZlcmJvc2UsICJtZXNzYWdlIHF1ZXVlZCIpOworICAgIGJvb2wgcmVzdWx0
ID0gdGhyZWFkLnNpZ25hbCh0b1N5c3RlbVNpZ25hbChzaWduYWwpKTsKKyAgICBpZiAoIXJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuIE1lc3NhZ2VTdGF0dXM6OlRocmVhZEV4aXRlZDsKKyAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQpOworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJoZXJlIik7CisK
KyAgICBzdGF0aWMgU3RhdGljTG9jayByZWFkTG9jazsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihyZWFkTG9jayk7CisgICAgICAgIGNvbnN0ZXhwciBzaXpl
X3QgYnVmZmVyU2l6ZSA9IDE2OworICAgICAgICBjaGFyIGJ1ZmZlcltidWZmZXJTaXplXTsKKwor
ICAgICAgICAvLyBJdCdzIGFsd2F5cyBzYWZlIHRvIGNsZWFyIHRoZSBwaXBlIGJlY2F1c2Ugb25s
eSBvbmUgdGhyZWFkIGNhbiBldmVyIGJsb2NrIHRyeWluZyB0byByZWFkCisgICAgICAgIC8vIGZy
b20gdGhlIHBpcGUuIFRodXMsIGVhY2ggYnl0ZSB3ZSBjbGVhciBmcm9tIHRoZSBwaXBlIGFjdHVh
bGx5IGp1c3QgY29ycmVzcG9uZHMgdG8gc29tZSB0YXNrCisgICAgICAgIC8vIHRoYXQgaGFzIGFs
cmVhZHkgZmluaXNoZWQuIFdlIGFjdGl2ZWx5IHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIHBpcGUg
ZG9lcyBub3Qgb3ZlcmZpbGwgYmVjYXVzZQorICAgICAgICAvLyBvdGhlcndpc2Ugb3VyIHdyaXRl
cnMgbWlnaHQgc3BpbiB0cnlpbmcgdG8gd3JpdGUuCisgICAgICAgIGF1dG8gY2xlYXJQaXBlID0g
WyZdIHsKKyAgICAgICAgICAgIGludCBmbGFncyA9IGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tSZWFk
XSwgRl9HRVRGTCk7CisgICAgICAgICAgICBBU1NFUlQoIShmbGFncyAmIE9fTk9OQkxPQ0spKTsK
KyAgICAgICAgICAgIGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgRl9TRVRGTCwgZmxhZ3Mg
fCBPX05PTkJMT0NLKTsKKworICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSwgd2UgY2FuJ3Qg
Y2hlY2sgdGhlIGVycm5vIGhlcmUgc2luY2Ugb3RoZXIgdGhyZWFkcyBtYXkgYmUgZG9pbmcKKyAg
ICAgICAgICAgIC8vIG90aGVyIGNhbGxzIHdoaWNoIHNldCBpdCBhdCB0aGUgc2FtZSB0aW1lLgor
ICAgICAgICAgICAgd2hpbGUgKHJlYWQoZmlsZURlc2NyaXB0b3JzW1JlYWRdLCBidWZmZXIsIGJ1
ZmZlclNpemUpICE9IC0xKSB7IH0KKworICAgICAgICAgICAgZmNudGwoZmlsZURlc2NyaXB0b3Jz
W1JlYWRdLCBGX1NFVEZMLCBmbGFncyk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKGRhdGEu
cmFuLmxvYWQoKSkgeworICAgICAgICAgICAgY2xlYXJQaXBlKCk7CisgICAgICAgICAgICByZXR1
cm4gTWVzc2FnZVN0YXR1czo6TWVzc2FnZVJhbjsKKyAgICAgICAgfQorCisgICAgICAgIHJlYWQo
ZmlsZURlc2NyaXB0b3JzW1JlYWRdLCBidWZmZXIsIDEpOworICAgICAgICBBU1NFUlQoYnVmZmVy
WzBdID09IG1hZ2ljQnl0ZVswXSk7CisgICAgICAgIGNsZWFyUGlwZSgpOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZE1lc3NhZ2UuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
YWU1M2YyOWNmN2U4ZmIwMGVmOTIxMWQxNmNlMmNkZWQ2MDNlYzFiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgVVNFKFBUSFJFQURTKQorCituYW1lc3BhY2Ug
V1RGIHsKKwordm9pZCBpbml0aWFsaXplVGhyZWFkTWVzc2FnZXMoKTsKKworY2xhc3MgVGhyZWFk
TWVzc2FnZURhdGE7Cit1c2luZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVkTGFtYmRhPHZvaWQoc2ln
aW5mb190KiwgdWNvbnRleHRfdCopPjsKKworZW51bSBjbGFzcyBNZXNzYWdlU3RhdHVzIHsKKyAg
ICBNZXNzYWdlUmFuLAorICAgIFRocmVhZEV4aXRlZCwKK307CisKKy8vIFRoaXMgbWV0aG9kIGFs
bG93cyB1cyB0byBzZW5kIGEgbWVzc2FnZSB3aGljaCB3aWxsIGJlIHJ1biBpbiBhIHNpZ25hbCBo
YW5kbGVyIG9uIHRoZSBkZXNpcmVkIHRocmVhZC4KKy8vIFRoZXJlIGFyZSBzZXZlcmFsIGNhdmVh
dGVzIHRvIHRoaXMgbWV0aG9kIGhvd2V2ZXIsIFRoaXMgZnVuY3Rpb24gdXNlcyBzaWduYWxzIHNv
IHlvdXIgbWVzc2FnZSBzaG91bGQKKy8vIGJlIHN5bmMgc2lnbmFsIHNhZmUuCitNZXNzYWdlU3Rh
dHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYsIGNvbnN0IFRocmVhZE1lc3NhZ2UmKTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK01lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2UoVGhy
ZWFkJiB0YXJnZXRUaHJlYWQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7CisgICAgYXV0byBsYW1i
ZGEgPSBzY29wZWRMYW1iZGFSZWY8dm9pZChzaWdpbmZvX3QqLCB1Y29udGV4dF90Kik+KGZ1bmMp
OworICAgIHJldHVybiBzZW5kTWVzc2FnZVNjb3BlZCh0YXJnZXRUaHJlYWQsIGxhbWJkYSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OnNlbmRNZXNzYWdlOworCisjZW5k
aWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5n
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKaW5kZXggZmVmNTgxMWE3ZDU3YmI4
OWRjMDM3NWY5MTEyMmQ1YTI0OGNiMjI4Ni4uMTVhNWM2ODlhZTg1MWI2ZmZhOTM4M2M1MWM2NmY4
MTU1N2Q0MTgzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVk
ZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL1JhbmRvbU51bWJlclNlZWQuaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkSG9sZGVyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZE1lc3NhZ2Uu
aD4KICNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1ZpZXcuaD4KIApAQCAtMTc4LDYgKzE3OSw5IEBAIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGlu
ZygpCiAgICAgICAgIHd0ZlRocmVhZERhdGEoKTsKICAgICAgICAgaW5pdGlhbGl6ZURhdGVzKCk7
CiAgICAgICAgIFRocmVhZDo6aW5pdGlhbGl6ZVBsYXRmb3JtVGhyZWFkaW5nKCk7CisjaWYgVVNF
KFBUSFJFQURTKQorICAgICAgICBpbml0aWFsaXplVGhyZWFkTWVzc2FnZXMoKTsKKyNlbmRpZgog
ICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaCBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IGJkMWY4ZjMzZTJhYWI1YjVjZGZiNGNjYjQ2
OWI4NTg1ZTlhMjQ2NGUuLmMyMGE2NWUyMmJmZDUwM2Q2YjU2NTE1ZDk0ODQ2NzA2NjYyODExNmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZy5oCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8d3RmL0F0b21pY3Mu
aD4KICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+Cisj
aW5jbHVkZSA8d3RmL0xvY2tsZXNzQmFnLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CkBAIC01Niw2ICs1Nyw4IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitjbGFzcyBU
aHJlYWRNZXNzYWdlRGF0YTsKKwogdXNpbmcgVGhyZWFkSWRlbnRpZmllciA9IHVpbnQzMl90Owog
dHlwZWRlZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKIApAQCAtNzUs
NiArNzgsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIFRocmVhZCBvYmplY3QuCiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWQmIGN1cnJlbnQoKTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFRocmVhZCogY3VycmVudE1heUJlTnVsbCgpOwogCiAgICAgLy8g
UmV0dXJucyBUaHJlYWRJZGVudGlmaWVyIGRpcmVjdGx5LiBJdCBpcyB1c2VmdWwgaWYgdGhlIHVz
ZXIgb25seSBjYXJlcyBhYm91dCBpZGVudGl0eQogICAgIC8vIG9mIHRocmVhZHMuIEF0IHRoYXQg
dGltZSwgdXNlcnMgc2hvdWxkIGtub3cgdGhhdCBob2xkaW5nIHRoaXMgVGhyZWFkSWRlbnRpZmll
ciBkb2VzIG5vdCBlbnN1cmUKQEAgLTEzMiw3ICsxMzYsMTEgQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZVBsYXRmb3JtVGhyZWFkaW5nKCk7CiAKLXByaXZhdGU6CisjaWYg
VVNFKFBUSFJFQURTKQorICAgIExvY2tsZXNzQmFnPFRocmVhZE1lc3NhZ2VEYXRhKj4mIHRocmVh
ZE1lc3NhZ2VzKCkgeyByZXR1cm4gbV90aHJlYWRNZXNzYWdlczsgfQorI2VuZGlmCisKK3Byb3Rl
Y3RlZDoKICAgICBUaHJlYWQoKTsKIAogICAgIC8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNpZmlj
IFRocmVhZDo6Y3JlYXRlIGltcGxlbWVudGF0aW9uLgpAQCAtMTc3LDYgKzE4NSw4IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2RpZEV4aXQgeyBmYWxzZSB9OwogI2lmIFVTRShQVEhSRUFEUykKICAg
ICBwdGhyZWFkX3QgbV9oYW5kbGU7CisKKyAgICBMb2NrbGVzc0JhZzxUaHJlYWRNZXNzYWdlRGF0
YSo+IG1fdGhyZWFkTWVzc2FnZXM7CiAjaWYgT1MoREFSV0lOKQogICAgIG1hY2hfcG9ydF90IG1f
cGxhdGZvcm1UaHJlYWQ7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFk
aW5nUHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCmlu
ZGV4IDNlZTlhNWY1NDVlYWYxMjg5OTBlNWE5YTNjMDE1NDg4NTI1YmZmZDcuLjFhNWQ5OWY2MTRm
NWQ5NWFjZjYxNzFlZjAxZDAzZDE0YzIxYzdmZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZ1B0aHJlYWRzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhy
ZWFkcy5jcHAKQEAgLTI2NCwxMSArMjY0LDE4IEBAIHZvaWQgVGhyZWFkOjpkZXRhY2goKQogICAg
ICAgICBkaWRCZWNvbWVEZXRhY2hlZCgpOwogfQogCi1UaHJlYWQmIFRocmVhZDo6Y3VycmVudCgp
CitUaHJlYWQqIFRocmVhZDo6Y3VycmVudE1heUJlTnVsbCgpCiB7CiAgICAgVGhyZWFkSG9sZGVy
KiBkYXRhID0gVGhyZWFkSG9sZGVyOjpjdXJyZW50KCk7CiAgICAgaWYgKGRhdGEpCi0gICAgICAg
IHJldHVybiBkYXRhLT50aHJlYWQoKTsKKyAgICAgICAgcmV0dXJuICZkYXRhLT50aHJlYWQoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQorewor
ICAgIGlmIChUaHJlYWQqIGN1cnJlbnQgPSBjdXJyZW50TWF5QmVOdWxsKCkpCisgICAgICAgIHJl
dHVybiAqY3VycmVudDsKIAogICAgIC8vIE5vdCBhIFdURi1jcmVhdGVkIHRocmVhZCwgVGhyZWFk
SWRlbnRpZmllciBpcyBub3QgZXN0YWJsaXNoZWQgeWV0LgogICAgIFJlZlB0cjxUaHJlYWQ+IHRo
cmVhZCA9IGFkb3B0UmVmKG5ldyBUaHJlYWQoKSk7CkBAIC0yODYsNiArMjkzLDggQEAgVGhyZWFk
SWRlbnRpZmllciBUaHJlYWQ6OmN1cnJlbnRJRCgpCiBib29sIFRocmVhZDo6c2lnbmFsKGludCBz
aWduYWxOdW1iZXIpCiB7CiAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIo
bV9tdXRleCk7CisgICAgaWYgKGhhc0V4aXRlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaW50IGVyck5vID0gcHRocmVhZF9raWxsKG1faGFuZGxlLCBzaWduYWxOdW1iZXIpOwogICAg
IHJldHVybiAhZXJyTm87IC8vIEEgMCBlcnJObyBtZWFucyBzdWNjZXNzLgogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3Ro
cmVhZHMvU2lnbmFscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTRhZGJlMjYxNWY4ZWVhNTI5OTI5NGZiN2Qw
MWFmZjRmYjY1YTA5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMv
U2lnbmFscy5jcHAKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2lnbmFs
cy5oIgorCisjaWYgVVNFKFBUSFJFQURTKQorCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8
c2lnbmFsLmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxv
Zy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrbGVzc0JhZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
c3RhdGljIExvY2tsZXNzQmFnPFNpZ25hbEhhbmRsZXI+IGhhbmRsZXJzW3N0YXRpY19jYXN0PHNp
emVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXSA9IHsgfTsKK3N0YXRpYyBzdHJ1Y3Qgc2ln
YWN0aW9uIG9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2ln
bmFscyldOworc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGlj
X2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOworCitzdGF0aWMgdm9pZCBq
c2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogbWNvbnRleHQp
Cit7CisgICAgU2lnbmFsIHNpZ25hbCA9IGZyb21TeXN0ZW1TaWduYWwoc2lnKTsKKworICAgIGF1
dG8gcmVzdG9yZURlZmF1bHQgPSBbJl0geworICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGRlZmF1
bHRBY3Rpb247CisgICAgICAgIGRlZmF1bHRBY3Rpb24uc2FfaGFuZGxlciA9IFNJR19ERkw7Cisg
ICAgICAgIHNpZ2ZpbGxzZXQoJmRlZmF1bHRBY3Rpb24uc2FfbWFzayk7CisgICAgICAgIGRlZmF1
bHRBY3Rpb24uc2FfZmxhZ3MgPSAwOworICAgICAgICBzaWdhY3Rpb24oc2lnLCAmZGVmYXVsdEFj
dGlvbiwgbnVsbHB0cik7CisgICAgfTsKKworICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBi
dXQgd2UgbWlnaHQgYXMgd2VsbCBiZSBjYXJlZnVsLgorICAgIGlmIChzaWduYWwgPT0gU2lnbmFs
OjpVbmtub3duKSB7CisgICAgICAgIGRhdGFMb2dMbigiV2Ugc29tZWhvdyBnb3QgY2FsbGVkIGZv
ciBhbiB1bmtub3duIHNpZ25hbCAiLCBzaWcsICIsIGhhbHAuIik7CisgICAgICAgIHJlc3RvcmVE
ZWZhdWx0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGRpZEhhbmRsZSA9
IGZhbHNlOworICAgIGJvb2wgcmVzdG9yZURlZmF1bHRIYW5kbGVyID0gZmFsc2U7CisgICAgaGFu
ZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS5pdGVyYXRlKFsmXSAoY29uc3QgU2ln
bmFsSGFuZGxlciYgaGFuZGxlcikgeworICAgICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnLCBpbmZv
LCBtY29udGV4dCkpIHsKKyAgICAgICAgY2FzZSBTaWduYWxBY3Rpb246OkhhbmRsZWQ6CisgICAg
ICAgICAgICBkaWRIYW5kbGUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgU2lnbmFsQWN0aW9uOjpGb3JjZURlZmF1bHQ6CisgICAgICAgICAgICByZXN0b3JlRGVmYXVs
dEhhbmRsZXIgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgaWYgKHJlc3RvcmVE
ZWZhdWx0SGFuZGxlcikgeworICAgICAgICByZXN0b3JlRGVmYXVsdCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgc3RydWN0IHNpZ2FjdGlvbiYgb2xkQWN0aW9uID0gb2xkQWN0aW9u
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldOworICAgIGlmIChzaWduYWwgPT0gU2lnbmFs
OjpVc3IpIHsKKyAgICAgICAgaWYgKG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24pCisgICAgICAgICAg
ICBvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgbWNvbnRleHQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFkaWRIYW5kbGUpIHsKKyAgICAgICAgaWYgKG9sZEFj
dGlvbi5zYV9zaWdhY3Rpb24pIHsKKyAgICAgICAgICAgIG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24o
c2lnLCBpbmZvLCBtY29udGV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICByZXN0b3JlRGVmYXVsdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2
b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCBzaWduYWwsIFNpZ25hbEhhbmRsZXImJiBo
YW5kbGVyKQoreworICAgIEFTU0VSVChzaWduYWwgPCBTaWduYWw6OlVua25vd24pOworICAgIGhh
bmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0uYWRkKFdURk1vdmUoaGFuZGxlcikp
OworCisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxz
aXplX3Q+KHNpZ25hbCldLCBbJl0geworICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsK
KyAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7CisgICAgICAg
IHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0g
U0FfU0lHSU5GTzsKKyAgICAgICAgc2lnYWN0aW9uKHRvU3lzdGVtU2lnbmFsKHNpZ25hbCksICZh
Y3Rpb24sICZvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0pOworICAgIH0p
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oIGIvU291cmNlL1dURi93
dGYvdGhyZWFkcy9TaWduYWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDNhMWQyZTU4MDg4MWJhZTkzMzllMTY3
ODE4YTdiOWVmMWI4MGZjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RocmVh
ZHMvU2lnbmFscy5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShQVEhSRUFEUykKKwor
I2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKworZW51bSBjbGFzcyBTaWduYWwgeworICAgIC8vIFVzciB3aWxsIGFsd2F5cyBj
aGFpbiB0byBhbnkgbm9uLWRlZmF1bHQgaGFuZGxlciBpbnN0YWxsIGJlZm9yZSB1cy4gU2luY2Ug
dGhlcmUgaXMgbm8gd2F5IHRvIGtub3cKKyAgICAvLyBpZiBhIHNpZ25hbCB3YXMgaW50ZW5kZWQg
ZXhjbHVzaXZlbHkgZm9yIHVzLgorICAgIFVzciwKKworICAgIC8vIFRoZXNlIHNpZ25hbHMgd2ls
bCBvbmx5IGNoYWluIGlmIHdlIGRvbid0IGhhdmUgYSBoYW5kbGVyIHRoYXQgY2FuIHByb2Nlc3Mg
dGhlbS4gSWYgdGhlcmUgaXMgbm90aGluZworICAgIC8vIHRvIGNoYWluIHRvIHdlIHJlc3RvcmUg
dGhlIGRlZmF1bHQgaGFuZGxlciBhbmQgY3Jhc2guCisgICAgVHJhcCwKKyAgICBJbGwsCisgICAg
U2VnViwKKyAgICBCdXMsCisgICAgTnVtYmVyT2ZTaWduYWxzLAorICAgIFVua25vd24gPSBOdW1i
ZXJPZlNpZ25hbHMKK307CisKK2lubGluZSBpbnQgdG9TeXN0ZW1TaWduYWwoU2lnbmFsIHNpZ25h
bCkKK3sKKyAgICBzd2l0Y2ggKHNpZ25hbCkgeworICAgIGNhc2UgU2lnbmFsOjpTZWdWOiByZXR1
cm4gU0lHU0VHVjsKKyAgICBjYXNlIFNpZ25hbDo6QnVzOiByZXR1cm4gU0lHQlVTOworICAgIGNh
c2UgU2lnbmFsOjpJbGw6IHJldHVybiBTSUdJTEw7CisgICAgY2FzZSBTaWduYWw6OlVzcjogcmV0
dXJuIFNJR1VTUjI7CisgICAgY2FzZSBTaWduYWw6OlRyYXA6IHJldHVybiBTSUdUUkFQOworICAg
IGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitpbmxpbmUgU2lnbmFsIGZyb21TeXN0ZW1TaWduYWwoaW50IHNpZ25hbCkKK3sKKyAg
ICBzd2l0Y2ggKHNpZ25hbCkgeworICAgIGNhc2UgU0lHU0VHVjogcmV0dXJuIFNpZ25hbDo6U2Vn
VjsKKyAgICBjYXNlIFNJR0JVUzogcmV0dXJuIFNpZ25hbDo6QnVzOworICAgIGNhc2UgU0lHSUxM
OiByZXR1cm4gU2lnbmFsOjpJbGw7CisgICAgY2FzZSBTSUdVU1IyOiByZXR1cm4gU2lnbmFsOjpV
c3I7CisgICAgY2FzZSBTSUdUUkFQOiByZXR1cm4gU2lnbmFsOjpUcmFwOworICAgIGRlZmF1bHQ6
IHJldHVybiBTaWduYWw6OlVua25vd247CisgICAgfQorfQorCitlbnVtIGNsYXNzIFNpZ25hbEFj
dGlvbiB7CisgICAgSGFuZGxlZCwKKyAgICBOb3RIYW5kbGVkLAorICAgIEZvcmNlRGVmYXVsdAor
fTsKKwordXNpbmcgU2lnbmFsSGFuZGxlciA9IEZ1bmN0aW9uPFNpZ25hbEFjdGlvbihpbnQsIHNp
Z2luZm9fdCosIHZvaWQqKT47CisKKy8vIENhbGwgdGhpcyBtZXRob2Qgd2hlbmV2ZXIgeW91IHdh
bnQgdG8gaW5zdGFsbCBhIHNpZ25hbCBoYW5kbGVyLiBJdCdzIG9rIHRvIGNhbGwgdGhpcyBmdW5j
dGlvbiBsYXppbHkuCisvLyBOb3RlOiBZb3VyIHNpZ25hbCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVk
IGV2ZXJ5IHRpbWUgdGhlIGhhbmRsZXIgZm9yIHRoZSBkZXNpcmVkIHNpZ25hbCBpcyBjYWxsZWQu
CisvLyBUaHVzIGl0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gZGlzY2VybiBpZiB0aGUgc2ln
bmFsIGZpcmVkIHdhcyB5b3Vycy4KKy8vIFRoaXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IGEgb25l
IHdheSBzdHJlZXQgaS5lLiBvbmNlIGluc3RhbGxlZCwgYSBzaWduYWwgaGFuZGxlciBjYW5ub3Qg
YmUgdW5pbnN0YWxsZWQuCit2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCwgU2lnbmFs
SGFuZGxlciYmKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U2lnbmFsOwor
dXNpbmcgV1RGOjp0b1N5c3RlbVNpZ25hbDsKK3VzaW5nIFdURjo6ZnJvbVN5c3RlbVNpZ25hbDsK
K3VzaW5nIFdURjo6U2lnbmFsQWN0aW9uOwordXNpbmcgV1RGOjppbnN0YWxsU2lnbmFsSGFuZGxl
cjsKKworI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmNTYxNzU5YmY0Y2Q2NDY1ZjdiMmM2ZDM4ZTVjNzJh
MzRlNDcwNGIwLi4wZTgyOWFlYjI5YzI3MWEwMDA3NmE4OTk0MDcyZGE1OTIzM2U0ZWIwIDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMTctMDQtMjAgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+
CisKKyAgICAgICAgQWRkIHNpZ25hbGluZyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDk3NgorCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlw
IFBpemxvLgorCisgICAgICAgIEFkZCB0ZXN0cyBmb3IgVGhyZWFkTWVzc2FnZXMuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHA6
IEFkZGVkLgorICAgICAgICAocnVuVGhyZWFkTWVzc2FnZVRlc3QpOgorICAgICAgICAoVEVTVCk6
CisKIDIwMTctMDQtMjEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZWR1Y2UgY29waWVzIGFuZCBhbGxvY2F0aW9ucyBpbiBTaGFyZWRCdWZm
ZXI6OmFwcGVuZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwZDg1YjJiNDhjZjVjYzgzNWY4
N2Q2Njk4MTU2ZGM3MzFlNGRiNDc0Li42Mzc4YjZkYTAxMmE2NzZmMGYxNGE4YmVkYjg3ZTVmZWQy
NjIyYWQ4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTc0LDYgKzE3NCw3IEBACiAJCTUy
QjhDRjk4MTU4NjhEOTEwMDI4MTA1MyAvKiBTZXREb2N1bWVudFVSSS5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjhDRjk0MTU4NjhD
RjAwMDI4MTA1MyAvKiBTZXREb2N1bWVudFVSSS5odG1sICovOyB9OwogCQk1MkQ2NzNFRTFBRkIx
MjczMDBGQTE5RkUgLyogV0tQYWdlQ29weVNlc3Npb25TdGF0ZVdpdGhGaWx0ZXJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENjczRUMxQUZC
MTI2ODAwRkExOUZFIC8qIFdLUGFnZUNvcHlTZXNzaW9uU3RhdGVXaXRoRmlsdGVyaW5nLmNwcCAq
LzsgfTsKIAkJNTJFNUNFNDkxNEQyMUVBQjAwM0IyQkQ4IC8qIFBhcmVudEZyYW1lX0J1bmRsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkU1Q0U0
ODE0RDIxRUFCMDAzQjJCRDggLyogUGFyZW50RnJhbWVfQnVuZGxlLmNwcCAqLzsgfTsKKwkJNTMx
MUJENUUxRUE5NDkwRTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2VzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDVEMUVBOTQ5MEQwMDUyNTI4
MSAvKiBUaHJlYWRNZXNzYWdlcy5jcHAgKi87IH07CiAJCTUzMUMxRDhFMURGOEVGNzIwMDZFOTc5
RiAvKiBMRUJEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMUMxRDhEMURGOEVGNzIwMDZFOTc5RiAvKiBMRUJEZWNvZGVyLmNwcCAqLzsg
fTsKIAkJNTM2NzcwMzQxQ0M4MDIyODAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0
aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2
NzcwMzMxQ0M4MDIyODAwRDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tICov
OyB9OwogCQk1MzY3NzAzNjFDQzgxQjYxMDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3Jp
cHRpb24uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzY3NzAzNTFDQzgxMkY5MDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3Jp
cHRpb24uaHRtbCAqLzsgfTsKQEAgLTExMTYsNiArMTExNyw3IEBACiAJCTUyRDY3M0VDMUFGQjEy
NjgwMEZBMTlGRSAvKiBXS1BhZ2VDb3B5U2Vzc2lvblN0YXRlV2l0aEZpbHRlcmluZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1BhZ2VDb3B5U2Vzc2lvblN0YXRl
V2l0aEZpbHRlcmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRTVDRTQ1
MTREMjFFOUQwMDNCMkJEOCAvKiBQYXJlbnRGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYXJlbnRGcmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUyRTVDRTQ4MTREMjFFQUIwMDNCMkJEOCAvKiBQYXJlbnRGcmFtZV9CdW5kbGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyZW50RnJhbWVfQnVuZGxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMxMUJENUQxRUE5NDkwRDAwNTI1
MjgxIC8qIFRocmVhZE1lc3NhZ2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRocmVhZE1lc3NhZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTMxQzFEOEQxREY4RUY3MjAwNkU5NzlGIC8qIExFQkRlY29kZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTEVCRGVjb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmplY3RE
ZXNjcmlwdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzY3NzAzNTFDQzgxMkY5MDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24u
aHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdERlc2NyaXB0
aW9uLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTc3LDYgKzIxNzksNyBA
QAogCQkJCTdDNzRENDJEMTg4MjI4RjMwMEU1RUQ1NyAvKiBTdHJpbmdWaWV3LmNwcCAqLywKIAkJ
CQk1NTk3RjgzNDFEOTU5NkM4MDA2NkJDMjEgLyogU3luY2hyb25pemVkRml4ZWRRdWV1ZS5jcHAg
Ki8sCiAJCQkJOTMyOUFBMjgxREUzRjgxRTAwM0FCRDA3IC8qIFRleHRCcmVha0l0ZXJhdG9yLmNw
cCAqLywKKwkJCQk1MzExQkQ1RDFFQTk0OTBEMDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZXMuY3Bw
ICovLAogCQkJCTBGMkMyMEI3MURDRDU0NDgwMDU0MkQ5RSAvKiBUaW1lLmNwcCAqLywKIAkJCQk1
QzVFNjMzRDFEMEI2Nzk0MDA4NUEwMjUgLyogVW5pcXVlUmVmLmNwcCAqLywKIAkJCQk3Q0QwRDVB
QTFENTUzNERFMDAwQ0M5RTEgLyogVmFyaWFudC5jcHAgKi8sCkBAIC0yNjk3LDYgKzI3MDAsNyBA
QAogCQkJCTdDODNERUUwMUQwQTU5MEMwMEZFQkNGMyAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJz
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzMUMxRDhFMURGOEVGNzIwMDZFOTc5RiAvKiBM
RUJEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUU4MUQwQTU5MEMwMEZFQkNG
MyAvKiBMaXN0SGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzExQkQ1RTFFQTk0OTBF
MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RG
MUQxRDBBNTkwQzAwRkVCQ0YzIC8qIExvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RF
RUQxRDBBNTkwQzAwRkVCQ0YzIC8qIE1hdGhFeHRyYXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0M4M0RFRUYxRDBBNTkwQzAwRkVCQ0YzIC8qIE1ENS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wOWEyNzczZjIzNDFhYzlhMzZkNWI0ZDQ1NWE3MzM2YmQwZjViNjQwCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3Bw
CkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkTWVzc2FnZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGhy
ZWFkcy9TaWduYWxzLmg+CisKK3N0YXRpYyB2b2lkIHJ1blRocmVhZE1lc3NhZ2VUZXN0KHVuc2ln
bmVkIG51bVNlbmRlcnMsIHVuc2lnbmVkIG51bU1lc3NhZ2VzKQoreworICAgIGJvb2wgcmVjZWl2
ZXJTaG91bGRLZWVwUnVubmluZyA9IHRydWU7CisgICAgZGF0YUxvZ0xuKCJzdGFydGluZyIpOwor
ICAgIFJlZlB0cjxUaHJlYWQ+IHJlY2VpdmVyVGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIlRocmVh
ZE1lc3NhZ2UgcmVjZWl2ZXIiLCBbJnJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmddICgpIHsKKyAg
ICAgICAgd2hpbGUgKHJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmcpIHsgfQorICAgIH0pOworICAg
IEFTU0VSVF9UUlVFKHJlY2VpdmVyVGhyZWFkKTsKKworICAgIFZlY3RvcjxSZWZQdHI8VGhyZWFk
Pj4gc2VuZGVyVGhyZWFkcyhudW1TZW5kZXJzKTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1lc3Nh
Z2VzUnVuKG51bVNlbmRlcnMpOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gaGFuZGxlcnNSdW4obnVt
U2VuZGVycyk7CisgICAgbWVzc2FnZXNSdW4uZmlsbCgwKTsKKyAgICBoYW5kbGVyc1J1bi5maWxs
KDApOworCisgICAgZm9yICh1bnNpZ25lZCBzZW5kZXJJRCA9IDA7IHNlbmRlcklEIDwgbnVtU2Vu
ZGVyczsgKytzZW5kZXJJRCkgeworICAgICAgICBzZW5kZXJUaHJlYWRzW3NlbmRlcklEXSA9IFRo
cmVhZDo6Y3JlYXRlKCJUaHJlYWRNZXNzYWdlIHNlbmRlciIsIFtzZW5kZXJJRCwgbnVtTWVzc2Fn
ZXMsIHJlY2VpdmVyVGhyZWFkLCAmbWVzc2FnZXNSdW4sICZoYW5kbGVyc1J1bl0gKCkgeworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bU1lc3NhZ2VzOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNlbmRNZXNzYWdlKCpyZWNlaXZlclRocmVhZC5n
ZXQoKSwgW3NlbmRlcklELCAmaGFuZGxlcnNSdW5dIChzaWdpbmZvX3QqLCB1Y29udGV4dF90Kikg
eworICAgICAgICAgICAgICAgICAgICBoYW5kbGVyc1J1bltzZW5kZXJJRF0rKzsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZXN1bHQgPT0gV1RGOjpN
ZXNzYWdlU3RhdHVzOjpNZXNzYWdlUmFuKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlc1J1bltz
ZW5kZXJJRF0rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIEFTU0VSVF9U
UlVFKHNlbmRlclRocmVhZHNbc2VuZGVySURdKTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtU2VuZGVyczsgKytpKQorICAgICAgICBzZW5kZXJUaHJlYWRzW2ldLT53
YWl0Rm9yQ29tcGxldGlvbigpOworCisgICAgcmVjZWl2ZXJTaG91bGRLZWVwUnVubmluZyA9IGZh
bHNlOworICAgIHJlY2VpdmVyVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVNlbmRlcnM7ICsraSkgeworICAgICAgICBFWFBFQ1Rf
RVEobnVtTWVzc2FnZXMsIG1lc3NhZ2VzUnVuW2ldKTsKKyAgICAgICAgRVhQRUNUX0VRKG51bU1l
c3NhZ2VzLCBoYW5kbGVyc1J1bltpXSk7CisgICAgfQorfQorCitURVNUKFRocmVhZE1lc3NhZ2Us
IEJhc2ljKQoreworICAgIHJ1blRocmVhZE1lc3NhZ2VUZXN0KDEsIDEpOworICAgIHJ1blRocmVh
ZE1lc3NhZ2VUZXN0KDEsIDEwMCk7Cit9CisKK1RFU1QoVGhyZWFkTWVzc2FnZSwgTXVsdGlwbGVT
ZW5kZXJzKQoreworICAgIHJ1blRocmVhZE1lc3NhZ2VUZXN0KDEwLCAxKTsKKyAgICBydW5UaHJl
YWRNZXNzYWdlVGVzdCgxMCwgMTAwKTsKKyAgICBydW5UaHJlYWRNZXNzYWdlVGVzdCgxMCwgMTAw
MDApOworfQorCitjbGFzcyBSZWZsZWN0ZWRUaHJlYWQgOiBwdWJsaWMgVGhyZWFkIHsKK3B1Ymxp
YzoKKyAgICB1c2luZyBUaHJlYWQ6Om1fbXV0ZXg7CisgICAgdXNpbmcgVGhyZWFkOjptX2hhbmRs
ZTsKKyAgICB1c2luZyBUaHJlYWQ6Omhhc0V4aXRlZDsKK307CisKK1RFU1QoVGhyZWFkTWVzc2Fn
ZSwgU2lnbmFsc1dvcmtPbkV4aXQpCit7CisgICAgc3RhdGljIGJvb2wgaGFuZGxlclJhbiA9IGZh
bHNlOworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VXNyLCBbXSAoaW50LCBzaWdp
bmZvX3QqLCB2b2lkKikgLT4gU2lnbmFsQWN0aW9uIHsKKyAgICAgICAgZGF0YUxvZ0xuKCJoZXJl
Iik7CisgICAgICAgIGhhbmRsZXJSYW4gPSB0cnVlOworICAgICAgICByZXR1cm4gU2lnbmFsQWN0
aW9uOjpIYW5kbGVkOworICAgIH0pOworCisgICAgYm9vbCByZWNlaXZlclNob3VsZEtlZXBSdW5u
aW5nID0gdHJ1ZTsKKyAgICBSZWZQdHI8VGhyZWFkPiByZWNlaXZlclRocmVhZCA9IChUaHJlYWQ6
OmNyZWF0ZSgiVGhyZWFkTWVzc2FnZSByZWNlaXZlciIsCisgICAgICAgIFsmcmVjZWl2ZXJTaG91
bGRLZWVwUnVubmluZ10gKCkgeworICAgICAgICAgICAgd2hpbGUgKHJlY2VpdmVyU2hvdWxkS2Vl
cFJ1bm5pbmcpIHsgfQorICAgIH0pKTsKKyAgICBBU1NFUlRfVFJVRShyZWNlaXZlclRocmVhZCk7
CisKKyAgICBib29sIHNpZ25hbEZpcmVkOworICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9j
azxzdGQ6Om11dGV4PiBsb2NrZXIoc3RhdGljX2Nhc3Q8UmVmbGVjdGVkVGhyZWFkKj4ocmVjZWl2
ZXJUaHJlYWQuZ2V0KCkpLT5tX211dGV4KTsKKyAgICAgICAgcmVjZWl2ZXJTaG91bGRLZWVwUnVu
bmluZyA9IGZhbHNlOworICAgICAgICBFWFBFQ1RfRkFMU0Uoc3RhdGljX2Nhc3Q8UmVmbGVjdGVk
VGhyZWFkKj4ocmVjZWl2ZXJUaHJlYWQuZ2V0KCkpLT5oYXNFeGl0ZWQoKSk7CisgICAgICAgIHNs
ZWVwKDEpOworICAgICAgICBzaWduYWxGaXJlZCA9ICFwdGhyZWFkX2tpbGwoc3RhdGljX2Nhc3Q8
UmVmbGVjdGVkVGhyZWFkKj4ocmVjZWl2ZXJUaHJlYWQuZ2V0KCkpLT5tX2hhbmRsZSwgdG9TeXN0
ZW1TaWduYWwoU2lnbmFsOjpVc3IpKTsKKyAgICB9CisKKyAgICByZWNlaXZlclRocmVhZC0+d2Fp
dEZvckNvbXBsZXRpb24oKTsKKyAgICBFWFBFQ1RfVFJVRShoYW5kbGVyUmFuIHx8ICFzaWduYWxG
aXJlZCk7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307744</attachid>
            <date>2017-04-21 10:04:25 -0700</date>
            <delta_ts>2017-04-21 10:54:12 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170976-20170421130423.patch</filename>
            <type>text/plain</type>
            <size>62446</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NTE3ZjQ2Y2JiMzdhZjUwMjQ4YmI0YzIxMDYyNTVkOWUwYmIyNzI2Li5lMDk2YzBjNDkyZGRjNDlh
ZmNhZmI1OGJlMTkyYTdhNGViNjFlZDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxNy0wNC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgc2lnbmFsaW5nIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RmlsaXAgUGl6bG8uCisKKyAgICAgICAgVXBkYXRlIHZhcmlvdXMgdXNlcyBvZiBzaWdhY3Rpb24g
dG8gdXNlIHRoZSBuZXcgc2lnbmFsaW5nIEFQSS4KKyAgICAgICAgQWxzbyBzd2l0Y2ggVk1UcmFw
cyB0byB1c2UgdGhlIHRocmVhZCBtZXNzYWdlIHN5c3RlbSBpbnN0ZWFkIG9mCisgICAgICAgIHJv
bGxpbmcgaXQncyBvd24uCisKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgor
ICAgICAgICAoSlNDOjppc0pJVFBDKToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgor
ICAgICAgICAoSlNDOjppbnN0YWxsU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChKU0M6OlZNVHJh
cHM6OlZNVHJhcHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQp
OgorICAgICAgICAoSlNDOjpoYW5kbGVTaWd1c3IxKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
aGFuZGxlU2lndHJhcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Omluc3RhbGxTaWduYWxIYW5k
bGVycyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmg6CisgICAgICAgICog
dG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA6CisgICAgICAgIChKU0M6Omluc3RhbGxDcmFz
aEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpoYW5kbGVDcmFzaCk6IERlbGV0ZWQuCisgICAgICAg
ICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjplbmFibGVGYXN0TWVtb3J5KToKKwog
MjAxNy0wNC0yMCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAg
ICAgICAgW2NtYWtlXSBEZWZpbmUgRk9SV0FSRElOR19IRUFERVJTX0RJUiBpbiBXZWJLaXRGUyBh
bmQgdXNlIGl0IGV2ZXJ5d2hlcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggY2RkMjc4MTcwNDJkNzFhNTkxZTU1OGEwMjljZGUz
ZjMxZjlkNDVmOS4uM2I1YjgxODIzZmZlYmU0NzkzOTVlOTVjMWNhYTVmYmY3NWViYjQ4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw3NiBAQAorMjAxNy0wNC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVy
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc2lnbmFsaW5nIEFQSQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTc2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgYnVuY2ggb2Yg
bmV3IGZ1bmN0aW9uYWxpdHkgdG8gV1RGLiBGaXJzdCwgaXQgYWRkCisgICAgICAgIGEgbmV3IGRh
dGEgc3RydWN0dXJlIG9mIGEgbG9ja2xlc3MgYmFnLiBUaGUgTG9ja2xlc3NCYWcgY2xhc3MgY2Fu
CisgICAgICAgIGJlIHVzZWQgYXMgZWl0aGVyIGEgbXVsdGktd3JpdGVyIG11bHRpLXJlYWRlciBs
b2NrbGVzcyBiYWcgb3IgYQorICAgICAgICBtdWx0aS13cml0ZXIgc2luZ2xlIGNvbnN1bWVyIGxv
Y2tsZXNzIGJhZy4KKworICAgICAgICBOZXh0LCB0aGlzIHBhdGNoIGFkZHMgYW4gYWJzdHJhY3Rp
b24gYXJvdW5kIHNpZ2FjdGlvbiBpbiBXVEYuCisgICAgICAgIEJhc2ljYWxseSwgeW91IGNhbiBh
ZGQgYSBoYW5kbGVyLCB3aGljaCBjYW4gYmUgYW4gYXJiaXRyYXJ5CisgICAgICAgIGxhbWJkYS4g
QWx0aG91Z2ggaXQgc2hvdWxkIHN0aWxsIGJlIHNhZmUgZm9yIHRoZSBzaWduYWwgeW91IGFyZQor
ICAgICAgICBoYW5kbGluZy4gIHRoZSBzaWduYWwgaGFuZGxlciBtYW5hZ2VyIHdpbGwgdGhlbiBk
byBhbGwgdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIGhhbmRsaW5nIG9mIGNoYWluaW5nOgorCisg
ICAgICAgIEluIHRoZSBTSUdVU1IgY2FzZSB3ZSBhbHdheXMgZm9yd2FyZCB0aGUgc2lnbmFsIHRv
IGFueSBvdGhlcgorICAgICAgICBub24tZGVmYXVsdCBoYW5kbGVyIGluc3RhbGxlZCBiZWZvcmUg
dXMuIFdlIG5lZWQgdG8gZG8gdGhpcywKKyAgICAgICAgb3RoZXJ3aXNlLCBzaW5jZSBpdCdzIG5v
dCBwb3NzaWJsZSB0byB0ZWxsIGlmIGEgU0lHVVNSIHdhcworICAgICAgICBpbnRlbmRlZCBleGx1
c2l2ZWx5IGZvciBvdXIgaGFuZGxlcnMuIFNpZ25hbCBoYW5kbGVycyBkb24ndCByZWNvcmQKKyAg
ICAgICAgaG93IG1hbnkgdGltZXMgdGhleSB3ZXJlIHNlbnQgb25seSB0aGF0IHRoZXJlIGlzIGF0
IGxlYXN0IG9uZQorICAgICAgICB1bmhhbmRsZWQgc2lnbmFsLgorCisgICAgICAgIEluIHRoZSBm
YXVsdGluZyBjYXNlcyB3ZSByZXF1aXJlIHRoYXQgZXZlcnkgaGFuZGxlIGJlIGFibGUgdG8KKyAg
ICAgICAgcmVjb2duaXNlIGEgZmF1bHQgdGhleSBpbnN0YWxsZWQsIHZzIGNyYXNoZXMuIElmIG5v
bmUgb2Ygb3VyCisgICAgICAgIGhhbmRsZXJzIGNsYWltIHRvIGhhdmUgaGFuZGxlZCB0aGUgZmF1
bHQgd2Ugd2lsbCBmb3J3YXJkIHRoZQorICAgICAgICBmYXVsdC4gSWYgYSBoYW5kbGVyIHdhcyBp
bnN0YWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBmYXVsdCBoYW5kbGVyCisgICAgICAgIHdlIHNpbXBs
eSBjYWxsIHRoYXQgaGFuZGxlciBhbmQgcmVseSBvbiB0aGVtIHRvIHRha2UgdGhlCisgICAgICAg
IGFwcHJvcHJpYXRlIGFjdGlvbi4gSWYgbm8gaGFuZGxlciB3YXMgaW5zdGFsbGVkIGJlZm9yZSBv
dXIgZmlyc3QKKyAgICAgICAgaGFuZGxlciB3ZSByZXN0b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIg
YW5kIGFsbG93IHRoZSBmYXVsdCB0bworICAgICAgICBoYXBwZW4gYWdhaW4uCisKKyAgICAgICAg
RmluYWxseSwgdGhpcyBwYXRjaCBhZGRzIGEgc2lnbmFsIGJhc2VkIG1lc3NhZ2luZyBzeXN0ZW0u
ICBUaGlzCisgICAgICAgIHN5c3RlbSBhbGxvd3MgdGhlIHVzZXIgdG8gcnVuIGFuIGFyYml0cmFy
eSBsYW1iZGEgZnJvbSB0aGUgU0lHVVNSMgorICAgICAgICBzaWduYWwgaGFuZGxlciBvZiBhbnkg
dGFyZ2V0IFdURjo6VGhyZWFkLiBUaGlzIGlzIGFscmVhZHkgaW4gdXNlCisgICAgICAgIGZvciB0
aGUgVk1UcmFwcyBBUEkgd2hpY2ggYWxsb3dzIHVzIHRvIGtpbGwgcm9ndWUgVk1zIGJ5IHNlbmRp
bmcKKyAgICAgICAgdGhlIFZNJ3MgcnVubmluZyBXVEY6OlRocmVhZCBhIFNJR1VTUiBhbmQgcmVx
dWVzdGluZyBpdCBqZXRpc29uCisgICAgICAgIGFsbCBvcHRpbWl6ZWQgY29kZSBhbmQgdGhyb3cg
YW4gdW5jYXRjaGFibGUgZXhjZXB0aW9uIGZyb20gYWxsCisgICAgICAgIGZ1bmN0aW9uIGVudHJp
ZXMvbG9vcCBiYWNrZWRnZXMuICBJbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGFsc28gdXNlCisgICAg
ICAgIHRoaXMgQVBJIGZvciBXYXNtIHRvIHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZXMgaW4g
Y3VycmVudGx5CisgICAgICAgIGV4ZWN1dGluZyBXYXNtIHRocmVhZHMuCisKKyAgICAgICAgKiBX
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgor
ICAgICAgICAoV1RGOjpBdG9taWM6OkF0b21pYyk6CisgICAgICAgICogd3RmL0xvY2tsZXNzQmFn
Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6TG9ja2xlc3NCYWcpOgorICAg
ICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6YWRkKToKKyAgICAgICAgKFdURjo6TG9ja2xlc3NCYWc6
Oml0ZXJhdGUpOgorICAgICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6Y29uc3VtZUFsbCk6CisgICAg
ICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VGhyZWFk
TWVzc2FnZURhdGE6OlRocmVhZE1lc3NhZ2VEYXRhKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6
ZVRocmVhZE1lc3NhZ2VzKToKKyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2VTY29wZWQpOgorICAg
ICAgICAqIHd0Zi9UaHJlYWRNZXNzYWdlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpzZW5kTWVz
c2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OmluaXRp
YWxpemVUaHJlYWRpbmcpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjp0aHJlYWRNZXNzYWdlcyk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJl
YWRzLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWwp
OgorICAgICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6anNjU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChXVEY6Omluc3RhbGxTaWduYWxIYW5kbGVy
KToKKyAgICAgICAgKiB3dGYvdGhyZWFkcy9TaWduYWxzLmg6IEFkZGVkLgorICAgICAgICAoV1RG
Ojp0b1N5c3RlbVNpZ25hbCk6CisgICAgICAgIChXVEY6OmZyb21TeXN0ZW1TaWduYWwpOgorCiAy
MDE3LTA0LTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSBu
b3RGb3VuZCBpbnRvIGl0cyBvd24gZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAppbmRleCA2ZWU2ZmUyODE4N2I5YWE0OWRlYTNjMjM3MWUz
Y2NiYzQzNDcxMDExLi4xMGUxNDQyYWUxMjliYmU0Y2Y0NTI2MThjYmM5ZmM1ZTUzOTMwNDhjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaApA
QCAtODEsNiArODEsMTIgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBleGVjdXRhYmxlUG9vbFJlc2Vy
dmF0aW9uRnJhY3Rpb24gPSAwLjI1OwogZXh0ZXJuIEpTX0VYUE9SVERBVEEgdWludHB0cl90IHN0
YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sOwogZXh0ZXJuIEpTX0VYUE9SVERBVEEgdWlu
dHB0cl90IGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbDsKIAoraW5saW5lIGJvb2wgaXNK
SVRQQyh2b2lkKiBwYykKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3Rh
cnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpIDw9IHBjCisgICAgICAgICYmIHBjIDwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKTsKK30K
KwogdHlwZWRlZiB2b2lkICgqSklUV3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24pKG9mZl90LCBj
b25zdCB2b2lkKiwgc2l6ZV90KTsKIGV4dGVybiBKU19FWFBPUlREQVRBIEpJVFdyaXRlU2VwYXJh
dGVIZWFwc0Z1bmN0aW9uIGppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IGU2Mjg1YTMwYzIyMmE1YWNh
ZGMzOGYwYzliMWI3YWU3YTQ3N2U3ODUuLjlmYzhmMGY3ZTM5MjdjM2ViY2ZjM2RlNWE0YzlkNjE5
NGFjZjQ4ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJh
cHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBA
IC00Miw3ICs0Miw4IEBACiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogCiAjaWYgT1MoREFS
V0lOKQotI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+
CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtNTQsOSArNTUsNiBAQCBBTFdBWVNfSU5MSU5FIFZNJiBWTVRyYXBzOjp2bSgpIGNv
bnN0CiAKICNpZiBFTkFCTEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBTKQogCi1zdHJ1Y3Qgc2lnYWN0
aW9uIG9yaWdpbmFsU2lndXNyMUFjdGlvbjsKLXN0cnVjdCBzaWdhY3Rpb24gb3JpZ2luYWxTaWd0
cmFwQWN0aW9uOwotCiBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgU2lnbmFsQ29udGV4dCht
Y29udGV4dF90JiBtY29udGV4dCkKICAgICAgICAgOiBtY29udGV4dChtY29udGV4dCkKQEAgLTEz
Miw4NyArMTMwLDM1IEBAIHN0YXRpYyBFeHBlY3RlZDxWTUFuZFN0YWNrQm91bmRzLCBWTVRyYXBz
OjpFcnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoU2lnCiAgICAgcmV0dXJuIFZNQW5k
U3RhY2tCb3VuZHMgeyBhY3RpdmVWTSwgc3RhY2tCb3VuZHMgfTsKIH0KIAotc3RhdGljIHZvaWQg
aGFuZGxlU2lndXNyMShpbnQgc2lnbmFsTnVtYmVyLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIHVh
cCkKK3N0YXRpYyB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKCkKIHsKLSAgICBTaWduYWxDb250
ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0KTsK
LSAgICBhdXRvIGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMgPSBmaW5kQWN0aXZlVk1BbmRTdGFja0Jv
dW5kcyhjb250ZXh0KTsKLSAgICBpZiAoYWN0aXZlVk1BbmRTdGFja0JvdW5kcykgeworICAgIGlu
c3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VHJhcCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9p
ZCogdWFwKSAtPiBTaWduYWxBY3Rpb24geworICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQo
c3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0KTsKKworICAgICAgICBp
ZiAoIWlzSklUUEMoY29udGV4dC50cmFwUEMpKQorICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFj
dGlvbjo6Tm90SGFuZGxlZDsKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50bHkgZWF0
cyBhbGwgdHJhcHMgaW5jbHVkaW5nIGppdCBhc3NlcnRzIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhp
cworICAgICAgICAvLyBhbHdheXMgd29ya3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzEwMzkKKyAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0g
ZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoY29udGV4dCk7CisgICAgICAgIGlmICghYWN0aXZl
Vk1BbmRTdGFja0JvdW5kcykKKyAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRs
ZWQ7IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KKwogICAgICAgICBW
TSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07CiAgICAgICAgIGlmICh2
bSkgewotICAgICAgICAgICAgU3RhY2tCb3VuZHMgc3RhY2tCb3VuZHMgPSBhY3RpdmVWTUFuZFN0
YWNrQm91bmRzLnZhbHVlKCkuc3RhY2tCb3VuZHM7CiAgICAgICAgICAgICBWTVRyYXBzJiB0cmFw
cyA9IHZtLT50cmFwcygpOwotICAgICAgICAgICAgaWYgKHRyYXBzLm5lZWRUcmFwSGFuZGxpbmco
KSkKLSAgICAgICAgICAgICAgICB0cmFwcy50cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKGNvbnRl
eHQsIHN0YWNrQm91bmRzKTsKKyAgICAgICAgICAgIGlmICghdHJhcHMubmVlZFRyYXBIYW5kbGlu
ZygpKQorICAgICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7IC8vIFRo
ZSBwb2xsaW5nIGNvZGUgYmVhdCB1cyB0byBoYW5kbGluZyB0aGUgdHJhcCBhbHJlYWR5LgorCisg
ICAgICAgICAgICBhdXRvIGV4cGVjdGVkU3VjY2VzcyA9IHRyYXBzLnRyeUpldHRpc29uQ29kZUJs
b2Nrc09uU3RhY2soY29udGV4dCk7CisgICAgICAgICAgICBpZiAoIWV4cGVjdGVkU3VjY2VzcykK
KyAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOyAvLyBMZXQgdGhl
IFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRT
dWNjZXNzLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFu
ZGxlZDsgLy8gV2UndmUgc3VjY2VzcyBqZXR0aXNvbiB0aGUgY29kZUJsb2Nrcy4KICAgICAgICAg
fQotICAgIH0KLQotICAgIGF1dG8gb3JpZ2luYWxBY3Rpb24gPSBvcmlnaW5hbFNpZ3VzcjFBY3Rp
b24uc2Ffc2lnYWN0aW9uOwotICAgIGlmIChvcmlnaW5hbEFjdGlvbikKLSAgICAgICAgb3JpZ2lu
YWxBY3Rpb24oc2lnbmFsTnVtYmVyLCBpbmZvLCB1YXApOwotfQotCi1zdGF0aWMgdm9pZCBoYW5k
bGVTaWd0cmFwKGludCBzaWduYWxOdW1iZXIsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogdWFwKQot
ewotICAgIFNpZ25hbENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFw
KS0+dWNfbWNvbnRleHQpOwotICAgIGF1dG8gYWN0aXZlVk1BbmRTdGFja0JvdW5kcyA9IGZpbmRB
Y3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRleHQpOwotICAgIGlmICghYWN0aXZlVk1BbmRTdGFj
a0JvdW5kcykKLSAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdh
aW4gbGF0ZXIuCi0KLSAgICBWTSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCku
dm07Ci0gICAgaWYgKHZtKSB7Ci0gICAgICAgIFZNVHJhcHMmIHRyYXBzID0gdm0tPnRyYXBzKCk7
Ci0gICAgICAgIGlmICghdHJhcHMubmVlZFRyYXBIYW5kbGluZygpKQotICAgICAgICAgICAgcmV0
dXJuOyAvLyBUaGUgcG9sbGluZyBjb2RlIGJlYXQgdXMgdG8gaGFuZGxpbmcgdGhlIHRyYXAgYWxy
ZWFkeS4KIAotICAgICAgICBhdXRvIGV4cGVjdGVkU3VjY2VzcyA9IHRyYXBzLnRyeUpldHRpc29u
Q29kZUJsb2Nrc09uU3RhY2soY29udGV4dCk7Ci0gICAgICAgIGlmICghZXhwZWN0ZWRTdWNjZXNz
KQotICAgICAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4g
bGF0ZXIuCi0gICAgICAgIGlmIChleHBlY3RlZFN1Y2Nlc3MudmFsdWUoKSkKLSAgICAgICAgICAg
IHJldHVybjsgLy8gV2UndmUgc3VjY2VzcyBqZXR0aXNvbiB0aGUgY29kZUJsb2Nrcy4KLSAgICB9
Ci0KLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlbiB0aGlzIFNJR1RSQVAgaXMgbm90IGR1ZSB0
byBhIFZNVHJhcC4gTGV0J3MgZG8gdGhlIGRlZmF1bHQgYWN0aW9uLgotICAgIGF1dG8gb3JpZ2lu
YWxBY3Rpb24gPSBvcmlnaW5hbFNpZ3RyYXBBY3Rpb24uc2Ffc2lnYWN0aW9uOwotICAgIGlmIChv
cmlnaW5hbEFjdGlvbikgewotICAgICAgICAvLyBJdCBpcyBhbHdheXMgc2FmZSB0byBqdXN0IGlu
dm9rZSB0aGUgb3JpZ2luYWwgaGFuZGxlciB1c2luZyB0aGUgc2Ffc2lnYWN0aW9uIGZvcm0KLSAg
ICAgICAgLy8gd2l0aG91dCBjaGVja2luZyBmb3IgdGhlIFNBX1NJR0lORk8gZmxhZy4gSWYgdGhl
IG9yaWdpbmFsIGhhbmRsZXIgaXMgb2YgdGhlCi0gICAgICAgIC8vIHNhX2hhbmRsZXIgZm9ybSwg
aXQgd2lsbCBqdXN0IGlnbm9yZSB0aGUgMm5kIGFuZCAzcmQgYXJndW1lbnRzIHNpbmNlIHNhX2hh
bmRsZXIgaXMgYQotICAgICAgICAvLyBzdWJzZXQgb2Ygc2Ffc2lnYWN0aW9uLiBUaGlzIGlzIHdo
YXQgdGhlIG1hbiBwYWdlcyBzYXlzIHRoZSBPUyBkb2VzIGFueXdheS4KLSAgICAgICAgb3JpZ2lu
YWxBY3Rpb24oc2lnbmFsTnVtYmVyLCBpbmZvLCB1YXApOwotICAgIH0KLSAgICAKLSAgICAvLyBQ
cmUtZW1wdGl2ZWx5IHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBidXQgd2UgbWF5IHJvbGwg
aXQgYmFjayBiZWxvdy4KLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGN1cnJlbnRBY3Rpb247Ci0gICAg
c3RydWN0IHNpZ2FjdGlvbiBkZWZhdWx0QWN0aW9uOwotICAgIGRlZmF1bHRBY3Rpb24uc2FfaGFu
ZGxlciA9IFNJR19ERkw7Ci0gICAgc2lnZmlsbHNldCgmZGVmYXVsdEFjdGlvbi5zYV9tYXNrKTsK
LSAgICBkZWZhdWx0QWN0aW9uLnNhX2ZsYWdzID0gMDsKLSAgICBzaWdhY3Rpb24oU0lHVFJBUCwg
JmRlZmF1bHRBY3Rpb24sICZjdXJyZW50QWN0aW9uKTsKLSAgICAKLSAgICBpZiAoY3VycmVudEFj
dGlvbi5zYV9zaWdhY3Rpb24gIT0gaGFuZGxlU2lndHJhcCkgewotICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgdGhlcmUncyBhIGNsaWVudCBoYW5kbGVyIGluc3RhbGxlZCBhZnRlciB1cy4gVGhp
cyBhbHNvIG1lYW5zCi0gICAgICAgIC8vIHRoYXQgdGhlIGNsaWVudCBoYW5kbGVyIHRoaW5rcyBp
dCB3YXMgYWJsZSB0byByZWNvdmVyIGZyb20gdGhlIFNJR1RSQVAsIGFuZAotICAgICAgICAvLyBk
aWQgbm90IHVuaW5zdGFsbCBpdHNlbGYuIFdlIGNhbid0IGFyZ3VlIHdpdGggdGhpcyBiZWNhdXNl
IHRoZSBzaWduYWwgaXNuJ3QKLSAgICAgICAgLy8ga25vd24gdG8gYmUgZnJvbSBhIFZNVHJhcHMg
c2lnbmFsLiBIZW5jZSwgcmVzdG9yZSB0aGUgY2xpZW50IGhhbmRsZXIKLSAgICAgICAgLy8gYW5k
IGtlZXAgZ29pbmcuCi0gICAgICAgIHNpZ2FjdGlvbihTSUdUUkFQLCAmY3VycmVudEFjdGlvbiwg
bnVsbHB0cik7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcnMo
KQotewotICAgIHR5cGVkZWYgdm9pZCAoKiBTaWdhY3Rpb25IYW5kbGVyKShpbnQsIHNpZ2luZm9f
dCAqLCB2b2lkICopOwotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotCi0gICAgYWN0aW9u
LnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2lnYWN0aW9uSGFuZGxlcj4oaGFuZGxl
U2lndXNyMSk7Ci0gICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5z
YV9mbGFncyA9IFNBX1NJR0lORk87Ci0gICAgc2lnYWN0aW9uKFNJR1VTUjEsICZhY3Rpb24sICZv
cmlnaW5hbFNpZ3VzcjFBY3Rpb24pOwotCi0gICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8U2lnYWN0aW9uSGFuZGxlcj4oaGFuZGxlU2lndHJhcCk7Ci0gICAgc2lnZmls
bHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87
Ci0gICAgc2lnYWN0aW9uKFNJR1RSQVAsICZhY3Rpb24sICZvcmlnaW5hbFNpZ3RyYXBBY3Rpb24p
OworICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOworICAgIH0pOwogfQogCiBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBDYWxsRnJhbWUqIHNhbml0aXplZFRvcENhbGxGcmFtZShDYWxs
RnJhbWUqIHRvcENhbGxGcmFtZSkKQEAgLTQwMCw3ICszNDYsNyBAQCBWTVRyYXBzOjpWTVRyYXBz
KCkKICAgICBpZiAoIU9wdGlvbnM6OnVzZVBvbGxpbmdUcmFwcygpKSB7CiAgICAgICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlOwogICAgICAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7
Ci0gICAgICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcnMoKTsKKyAgICAgICAgICAgIGluc3Rh
bGxTaWduYWxIYW5kbGVyKCk7CiAgICAgICAgIH0pOwogICAgIH0KICNlbmRpZgpAQCAtNDYwLDcg
KzQwNiwxOSBAQCB2b2lkIFZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6c2VuZCgpCiAgICAgICAgICAg
ICBWTSYgdm0gPSAqbV92bTsKICAgICAgICAgICAgIGF1dG8gb3B0aW9uYWxPd25lclRocmVhZCA9
IHZtLm93bmVyVGhyZWFkKCk7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxPd25lclRocmVhZCkg
ewotICAgICAgICAgICAgICAgIG9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS0+c2lnbmFsKFNJ
R1VTUjEpOworICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKCpvcHRpb25hbE93bmVyVGhyZWFk
LnZhbHVlKCkuZ2V0KCksIFtdIChzaWdpbmZvX3QqLCB1Y29udGV4dF90KiB1Y29udGV4dCkgLT4g
dm9pZCB7CisgICAgICAgICAgICAgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dCh1Y29udGV4
dC0+dWNfbWNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGFjdGl2ZVZNQW5kU3Rh
Y2tCb3VuZHMgPSBmaW5kQWN0aXZlVk1BbmRTdGFja0JvdW5kcyhjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZNKiB2bSA9IGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMudmFsdWUoKS52bTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2bSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzID0gYWN0aXZlVk1BbmRTdGFja0JvdW5kcy52YWx1
ZSgpLnN0YWNrQm91bmRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZNVHJhcHMmIHRy
YXBzID0gdm0tPnRyYXBzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYXBz
Lm5lZWRUcmFwSGFuZGxpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJh
cHMudHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhjb250ZXh0LCBzdGFja0JvdW5kcyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5oCmluZGV4IGZkYmEyYWZkODMxZjAwZGJlMmJi
NTU2YWJhMTNjNWFkYmQ4MTBiMTYuLjU0MjViMTg4MzMyN2ZhZDgzZWM2MDI0MjZhZTk2ODEzNWZj
YjA1ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmgKQEAgLTQyLDcg
KzQyLDggQEAgY2xhc3MgVk1UcmFwcyB7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBFcnJvciB7
CiAgICAgICAgIE5vbmUsCi0gICAgICAgIExvY2tVbmF2YWlsYWJsZQorICAgICAgICBMb2NrVW5h
dmFpbGFibGUsCisgICAgICAgIE5vdEpJVENvZGUKICAgICB9OwogCiAgICAgZW51bSBFdmVudFR5
cGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNo
QW5hbHl6ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwCmluZGV4IDI2NWM2NjE1NWQxYWRiOGRhOThiZDc4OTQyMDI5Mjk4M2Q2MTI3M2Qu
LmViODZlZTQwYzJlNTAyM2NiMGU2ZmExMTg1MzYzNmE0MWJhZDJjNmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKQEAgLTM3
LDkgKzM3LDcgQEAKICNpbmNsdWRlICJBNjRET3Bjb2RlLmgiCiAjZW5kaWYKIAotI2lmIEhBVkUo
U0lHTkFMX0gpCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvdGhy
ZWFkcy9TaWduYWxzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNDEsNjAgKzEzOSwxOSBA
QCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwogfTsKIAot
c3RydWN0IHNpZ2FjdGlvbiBvcmlnaW5hbFNpZ0lsbEFjdGlvbjsKLQotc3RhdGljIHZvaWQgaGFu
ZGxlQ3Jhc2goaW50IHNpZ25hbE51bWJlciwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1YXApCi17
Ci0gICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXAp
LT51Y19tY29udGV4dCk7Ci0gICAgU2lnaWxsQ3Jhc2hBbmFseXplciYgYW5hbHl6ZXIgPSBTaWdp
bGxDcmFzaEFuYWx5emVyOjppbnN0YW5jZSgpOwotICAgIGF1dG8gY3Jhc2hTb3VyY2UgPSBhbmFs
eXplci5hbmFseXplKGNvbnRleHQpOwotCi0gICAgYXV0byBvcmlnaW5hbEFjdGlvbiA9IG9yaWdp
bmFsU2lnSWxsQWN0aW9uLnNhX3NpZ2FjdGlvbjsKLSAgICBpZiAob3JpZ2luYWxBY3Rpb24pIHsK
LSAgICAgICAgLy8gSXQgaXMgYWx3YXlzIHNhZmUgdG8ganVzdCBpbnZva2UgdGhlIG9yaWdpbmFs
IGhhbmRsZXIgdXNpbmcgdGhlIHNhX3NpZ2FjdGlvbiBmb3JtCi0gICAgICAgIC8vIHdpdGhvdXQg
Y2hlY2tpbmcgZm9yIHRoZSBTQV9TSUdJTkZPIGZsYWcuIElmIHRoZSBvcmlnaW5hbCBoYW5kbGVy
IGlzIG9mIHRoZQotICAgICAgICAvLyBzYV9oYW5kbGVyIGZvcm0sIGl0IHdpbGwganVzdCBpZ25v
cmUgdGhlIDJuZCBhbmQgM3JkIGFyZ3VtZW50cyBzaW5jZSBzYV9oYW5kbGVyIGlzIGEKLSAgICAg
ICAgLy8gc3Vic2V0IG9mIHNhX3NpZ2FjdGlvbi4gVGhpcyBpcyB3aGF0IHRoZSBtYW4gcGFnZXMg
c2F5cyB0aGUgT1MgZG9lcyBhbnl3YXkuCi0gICAgICAgIG9yaWdpbmFsQWN0aW9uKHNpZ25hbE51
bWJlciwgaW5mbywgdWFwKTsKLSAgICB9Ci0KLSAgICBpZiAoY3Jhc2hTb3VyY2UgPT0gU2lnaWxs
Q3Jhc2hBbmFseXplcjo6Q3Jhc2hTb3VyY2U6OkphdmFTY3JpcHRDb3JlKSB7Ci0gICAgICAgIC8v
IFJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBzbyB0aGF0IHdlIGNhbiBnZXQgYSBjb3JlIGR1
bXAuCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gZGVmYXVsdEFjdGlvbjsKLSAgICAgICAgZGVm
YXVsdEFjdGlvbi5zYV9oYW5kbGVyID0gU0lHX0RGTDsKLSAgICAgICAgc2lnZmlsbHNldCgmZGVm
YXVsdEFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgZGVmYXVsdEFjdGlvbi5zYV9mbGFncyA9IDA7
Ci0gICAgICAgIHNpZ2FjdGlvbihTSUdJTEwsICZkZWZhdWx0QWN0aW9uLCBudWxscHRyKTsKLSAg
ICB9IGVsc2UgaWYgKCFvcmlnaW5hbEFjdGlvbikgewotICAgICAgICAvLyBQcmUtZW1wdGl2ZWx5
IHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBidXQgd2UgbWF5IHJvbGwgaXQgYmFjayBiZWxv
dy4KLSAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBjdXJyZW50QWN0aW9uOwotICAgICAgICBzdHJ1
Y3Qgc2lnYWN0aW9uIGRlZmF1bHRBY3Rpb247Ci0gICAgICAgIGRlZmF1bHRBY3Rpb24uc2FfaGFu
ZGxlciA9IFNJR19ERkw7Ci0gICAgICAgIHNpZ2ZpbGxzZXQoJmRlZmF1bHRBY3Rpb24uc2FfbWFz
ayk7Ci0gICAgICAgIGRlZmF1bHRBY3Rpb24uc2FfZmxhZ3MgPSAwOwotICAgICAgICBzaWdhY3Rp
b24oU0lHSUxMLCAmZGVmYXVsdEFjdGlvbiwgJmN1cnJlbnRBY3Rpb24pOwotCi0gICAgICAgIGlm
IChjdXJyZW50QWN0aW9uLnNhX3NpZ2FjdGlvbiAhPSBoYW5kbGVDcmFzaCkgewotICAgICAgICAg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZXJlJ3MgYSBjbGllbnQgaGFuZGxlciBpbnN0YWxsZWQg
YWZ0ZXIgdXMuIFRoaXMgYWxzbyBtZWFucwotICAgICAgICAgICAgLy8gdGhhdCB0aGUgY2xpZW50
IGhhbmRsZXIgdGhpbmtzIGl0IHdhcyBhYmxlIHRvIHJlY292ZXIgZnJvbSB0aGUgU0lHSUxMLCBh
bmQKLSAgICAgICAgICAgIC8vIGRpZCBub3QgdW5pbnN0YWxsIGl0c2VsZi4gV2UgY2FuJ3QgYXJn
dWUgd2l0aCB0aGlzIGJlY2F1c2UgdGhlIGNyYXNoIGlzbid0Ci0gICAgICAgICAgICAvLyBrbm93
biB0byBiZSBmcm9tIGEgSmF2YVNjcmlwdENvcmUgc291cmNlLiBIZW5jZSwgcmVzdG9yZSB0aGUg
Y2xpZW50IGhhbmRsZXIKLSAgICAgICAgICAgIC8vIGFuZCBrZWVwIGdvaW5nLgotICAgICAgICAg
ICAgc2lnYWN0aW9uKFNJR0lMTCwgJmN1cnJlbnRBY3Rpb24sIG51bGxwdHIpOwotICAgICAgICB9
Ci0gICAgfQotfQotCiBzdGF0aWMgdm9pZCBpbnN0YWxsQ3Jhc2hIYW5kbGVyKCkKIHsKICNpZiBD
UFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Ci0g
ICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAoKikoaW50LCBz
aWdpbmZvX3QgKiwgdm9pZCAqKT4oaGFuZGxlQ3Jhc2gpOwotICAgIHNpZ2ZpbGxzZXQoJmFjdGlv
bi5zYV9tYXNrKTsKLSAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOwotICAgIHNpZ2Fj
dGlvbihTSUdJTEwsICZhY3Rpb24sICZvcmlnaW5hbFNpZ0lsbEFjdGlvbik7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShoYW5kbGVDcmFzaCk7CisgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2ln
bmFsOjpJbGwsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkgeworICAgICAgICBTaWdu
YWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250
ZXh0KTsKKworICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4dC5tYWNoaW5lUEMpKQorICAgICAg
ICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKKworICAgICAgICBTaWdpbGxD
cmFzaEFuYWx5emVyJiBhbmFseXplciA9IFNpZ2lsbENyYXNoQW5hbHl6ZXI6Omluc3RhbmNlKCk7
CisgICAgICAgIGFuYWx5emVyLmFuYWx5emUoY29udGV4dCk7CisgICAgICAgIHJldHVybiBTaWdu
YWxBY3Rpb246Ok5vdEhhbmRsZWQ7CisgICAgfSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAppbmRl
eCA4OTgxMDRiZDQ4YWRiMTE4ODY1YTljOGRlZTViNTZmNGU2NmJlYTgyLi4yZTBjOTlhMzliZWJk
MzE3OGI5MTQ4ZDk1OGZlNTNlNTdhNjIyOTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcApAQCAtMzUsOSArMzUsOSBA
QAogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtVGh1bmtzLmgiCiAKLSNp
bmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNTAsMTEgKzUwLDkgQEAgc3RhdGlj
IExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPj4+IGNv
ZGVMb2NhdGlvbnM7IC8vICgKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9GQVNUX01FTU9SWSkK
IAotc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkU2lnQnVzSGFuZGxlcjsKLXN0YXRpYyBzdHJ1
Y3Qgc2lnYWN0aW9uIG9sZFNpZ1NlZ3ZIYW5kbGVyOwogc3RhdGljIGJvb2wgZmFzdEhhbmRsZXJJ
bnN0YWxsZWQgeyBmYWxzZSB9OwogCi1zdGF0aWMgdm9pZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFs
LCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQorc3RhdGljIFNpZ25hbEFjdGlv
biB0cmFwSGFuZGxlcihpbnQsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpCiB7
CiAgICAgbWNvbnRleHRfdCYgY29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1Y29u
dGV4dCktPnVjX21jb250ZXh0OwogICAgIHZvaWQqIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPSBNYWNo
aW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpOwpAQCAtNjMsOSArNjEsNyBA
QCBzdGF0aWMgdm9pZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8s
IHZvaWQqIHVjb250ZXh0KQogICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJKSVQgbWVtb3J5IHN0
YXJ0OiAiLCBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXJ0T2ZGaXhlZEV4
ZWN1dGFibGVNZW1vcnlQb29sKSksICIgZW5kOiAiLCBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkpKTsKICAgICAvLyBGaXJz
dCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gSklUIGNvZGUgYmVmb3JlIHdlIGNhbiBh
cXVpcmUgYW55IGxvY2tzLiBPdGhlcndpc2UsCiAgICAgLy8gd2UgbWlnaHQgaGF2ZSBjcmFzaGVk
IGluIGNvZGUgdGhhdCBpcyBhbHJlYWR5IGhvbGRpbmcgb25lIG9mIHRoZSBsb2NrcyB3ZSB3YW50
IHRvIGFxdWlyZS4KLSAgICBpZiAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhcnRPZkZpeGVk
RXhlY3V0YWJsZU1lbW9yeVBvb2wpIDw9IGZhdWx0aW5nSW5zdHJ1Y3Rpb24KLSAgICAgICAgJiYg
ZmF1bHRpbmdJbnN0cnVjdGlvbiA8IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVuZE9mRml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbCkpIHsKLQorICAgIGlmIChpc0pJVFBDKGZhdWx0aW5nSW5zdHJ1
Y3Rpb24pKSB7CiAgICAgICAgIGJvb2wgZmF1bHRlZEluQWN0aXZlRmFzdE1lbW9yeSA9IGZhbHNl
OwogICAgICAgICB7CiAgICAgICAgICAgICB2b2lkKiBmYXVsdGluZ0FkZHJlc3MgPSBzaWdJbmZv
LT5zaV9hZGRyOwpAQCAtODksMTcgKzg1LDEyIEBAIHN0YXRpYyB2b2lkIHRyYXBIYW5kbGVyKGlu
dCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpCiAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmb3VuZCBzdHViOiAiLCBSYXdQb2ludGVy
KGV4Y2VwdGlvblN0dWIuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAgICAgICAg
ICAgICAgICAgTWFjaGluZUNvbnRleHQ6OmFyZ3VtZW50UG9pbnRlcjwxPihjb250ZXh0KSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNj
ZXNzKTsKICAgICAgICAgICAgICAgICAgICAgTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9p
bnRlcihjb250ZXh0KSA9IGV4Y2VwdGlvblN0dWIuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICAvLyBTaW5jZSB3ZSBvbmx5IHVzZSBmYXN0IG1lbW9y
eSBpbiBwcm9jZXNzZXMgd2UgY29udHJvbCwgaWYgd2UgcmVzdG9yZSB3ZSB3aWxsIGp1c3QgZmFs
bCBiYWNrIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIuCi0gICAgaWYgKHNpZ25hbCA9PSBTSUdCVVMp
Ci0gICAgICAgIHNpZ2FjdGlvbihzaWduYWwsICZvbGRTaWdCdXNIYW5kbGVyLCBudWxscHRyKTsK
LSAgICBlbHNlCi0gICAgICAgIHNpZ2FjdGlvbihzaWduYWwsICZvbGRTaWdTZWd2SGFuZGxlciwg
bnVsbHB0cik7CisgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKIH0KIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWV9GQVNUX01FTU9SWSkKQEAgLTEzMywyMiArMTI0LDEz
IEBAIHZvaWQgZW5hYmxlRmFzdE1lbW9yeSgpCiAgICAgICAgICAgICByZXR1cm47CiAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFlfRkFTVF9NRU1PUlkpCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24g
YWN0aW9uOwotCi0gICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSB0cmFwSGFuZGxlcjsKLSAg
ICAgICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgICAgICBhY3Rpb24uc2FfZmxh
Z3MgPSBTQV9TSUdJTkZPOwotICAgICAgICAKLSAgICAgICAgLy8gSW5zdGFsbGluZyBzaWduYWwg
aGFuZGxlcnMgZmFpbHMgd2hlbgotICAgICAgICAvLyAxLiBzcGVjaWZpY2llZCBzaWcgaXMgaW5j
b3JyZWN0IChpbnZhbGlkIHZhbHVlcyBvciBzaWduYWwgbnVtYmVycyB3aGljaCBjYW5ub3QgYmUg
aGFuZGxlZCksIG9yCi0gICAgICAgIC8vIDIuIHNlY29uZCBvciB0aGlyZCBwYXJhbWV0ZXIgcG9p
bnRzIGluY29ycmVjdCBwb2ludGVycy4KLSAgICAgICAgLy8gVGh1cywgd2UgbXVzdCBub3QgZmFp
bCBpbiB0aGUgZm9sbG93aW5nIGF0dGVtcHRzLgotICAgICAgICBpbnQgcmV0ID0gMDsKLSAgICAg
ICAgcmV0ID0gc2lnYWN0aW9uKFNJR0JVUywgJmFjdGlvbiwgJm9sZFNpZ0J1c0hhbmRsZXIpOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmV0KTsKLQotICAgICAgICByZXQgPSBzaWdhY3Rpb24o
U0lHU0VHViwgJmFjdGlvbiwgJm9sZFNpZ1NlZ3ZIYW5kbGVyKTsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIXJldCk7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6QnVzLCBb
XSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRyYXBIYW5kbGVyKHNpZ25hbCwgc2lnSW5mbywgdWNvbnRleHQpOwor
ICAgICAgICB9KTsKKworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OlNlZ1Ys
IFtdIChpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KSB7Cisg
ICAgICAgICAgICByZXR1cm4gdHJhcEhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCB1Y29udGV4dCk7
CisgICAgICAgIH0pOwogCiAgICAgICAgIGNvZGVMb2NhdGlvbnMuY29uc3RydWN0KCk7CiAgICAg
ICAgIGZhc3RIYW5kbGVySW5zdGFsbGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDk0YzExNmJmMTIzMTRhYjAwMTg2OWM2N2EwNTkwMWEwMTY4
MGZiZmMuLmZiN2E5MDFmYTI3MzE0ODNmNGUzNmFkY2YzMmFlZTgzZWZmZDI0MWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ5LDYgKzE0OSwxMSBAQAog
CQk1MTVGNzk1MDFDRkM5RjRBMDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRUYXNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVGNzk0RDFDRkM5RjRBMDBD
Q0VEOTMgLyogQ3Jvc3NUaHJlYWRUYXNrLmggKi87IH07CiAJCTUxNUY3OTU2MUNGRDNBNjkwMEND
RUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTVGNzk1NTFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRR
dWV1ZS5oICovOyB9OwogCQk1MjE4MzAxMkM5OUU0NzZBODRFRUJFQTggLyogU3ltYm9sSW1wbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNzJCQkRC
MTA3RkE0MjQ4ODYxNzhCOUUgLyogU3ltYm9sSW1wbC5jcHAgKi87IH07CisJCTUzMTFCRDUzMUVB
NzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDUxMUVBNzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNw
cCAqLzsgfTsKKwkJNTMxMUJENTYxRUE3RTE1QTAwNTI1MjgxIC8qIExvY2tsZXNzQmFnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1NTFFQTdF
MTVBMDA1MjUyODEgLyogTG9ja2xlc3NCYWcuaCAqLzsgfTsKKwkJNTMxMUJENTgxRUE3RTFBMTAw
NTI1MjgxIC8qIFNpZ25hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4MSAvKiBTaWduYWxzLmggKi87IH07CisJ
CTUzMTFCRDVBMUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1OTFFQTgxQTk2MDA1MjUy
ODEgLyogVGhyZWFkTWVzc2FnZS5oICovOyB9OworCQk1MzExQkQ1QzFFQTgyMkY5MDA1MjUyODEg
LyogVGhyZWFkTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAg
Ki87IH07CiAJCTUzOUVCMDYzMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjA2MjFENTUyODQy
MDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovOyB9OwogCQk1M0VDMjUzRTFFOTVBRDMwMDAwODMx
QjkgLyogUHJpb3JpdHlRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAq
LzsgfTsKIAkJNTUzMDcxQ0ExQzQwNDI3MjAwMzg0ODk4IC8qIFRpbnlMUlVDYWNoZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUzMDcxQzkxQzQwNDI3
MjAwMzg0ODk4IC8qIFRpbnlMUlVDYWNoZS5oICovOyB9OwpAQCAtNTQ4LDYgKzU1MywxMSBAQAog
CQk1MTVGNzk0QzFDRkM5RjRBMDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRDb3BpZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1Rjc5NEQxQ0ZDOUY0QTAwQ0NFRDkzIC8qIENyb3NzVGhy
ZWFkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFRh
c2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NF
RDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ3Jvc3NUaHJlYWRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzEx
QkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTaWduYWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTMxMUJENTUxRUE3RTE1QTAwNTI1MjgxIC8qIExvY2tsZXNzQmFnLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tsZXNzQmFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4MSAvKiBTaWduYWxzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpZ25hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVz
c2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNz
YWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwNjIxRDU1Mjg0MjAw
QzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TEVCRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VDMjUzQzFFOTVB
RDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQcmlvcml0eVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1
MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGlueUxSVUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMDY0LDYgKzEwNzQsNyBAQAogCQkJCTBGNjBGMzJEMURGQ0JEMUIwMDQxNkQ2QyAv
KiBMb2NrZWRQcmludFN0cmVhbS5jcHAgKi8sCiAJCQkJMEY2MEYzMkUxREZDQkQxQjAwNDE2RDZD
IC8qIExvY2tlZFByaW50U3RyZWFtLmggKi8sCiAJCQkJQThBNDcyQzMxNTFBODI1QTAwNDEyM0ZG
IC8qIExvY2tlci5oICovLAorCQkJCTUzMTFCRDU1MUVBN0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVz
c0JhZy5oICovLAogCQkJCTUxM0UxNzBBMUNEN0Q1QkYwMEUzNjUwQiAvKiBMb2dnaW5nQWNjdW11
bGF0b3IuaCAqLywKIAkJCQkwRjMwQkE4QzFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hJ
RC5oICovLAogCQkJCTBGMzBCQThEMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaE1hcC5o
ICovLApAQCAtMTE4OSw2ICsxMjAwLDggQEAKIAkJCQlFMzIwMEFCNTFFOUE1MzZEMDAzQjU5RDIg
LyogVGhyZWFkSG9sZGVyLmNwcCAqLywKIAkJCQlFMzIwMEFCNjFFOUE1MzZEMDAzQjU5RDIgLyog
VGhyZWFkSG9sZGVyLmggKi8sCiAJCQkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZEhvbGRlclB0aHJlYWRzLmNwcCAqLywKKwkJCQk1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyog
VGhyZWFkTWVzc2FnZS5jcHAgKi8sCisJCQkJNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRo
cmVhZE1lc3NhZ2UuaCAqLywKIAkJCQlBOEE0NzMzMjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
aW5nLmNwcCAqLywKIAkJCQlBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmgg
Ki8sCiAJCQkJQThBNDczMzUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMu
aCAqLywKQEAgLTEzMTYsNiArMTMyOSw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlBOEE0NzMz
QTE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmNwcCAqLywKIAkJCQlBOEE0NzMz
QjE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggKi8sCisJCQkJNTMxMUJENTEx
RUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwICovLAorCQkJCTUzMTFCRDU3MUVBN0UxQTEw
MDUyNTI4MSAvKiBTaWduYWxzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHRocmVhZHM7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTQ2MSw2ICsxNDc2LDcgQEAKIAkJCQlERTVBMDlG
QzFCQTM2OTkyMDAzRDQ0MjQgLyogQ29tbW9uQ3J5cHRvU1BJLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjhGMkI5MTE3MkUwMEZDMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3Mzk4MTUxQTgyNUIwMDQxMjNGRiAvKiBDb21waWxlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTMxMUJENTYxRUE3RTE1QTAwNTI1MjgxIC8qIExvY2tsZXNzQmFnLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkRCNjk4RTFCN0M2NDNBMDAwQzEwNzggLyogQ29uZGl0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4QzE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmln
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMkI5QzE3MkYyNTk2MDA3REJEQTUgLyogQ29udmVy
c2lvbk1vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTUyNiw2ICsxNTQyLDcgQEAKIAkJCQlBNzBE
QTA4NDE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQky
NjE0N0IwQTE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0NERDdGRjgxODZEMjkxRTAwNzQzM0NEIC8qIEl0ZXJhdG9yQWRh
cHRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMTFCRDU4MUVBN0UxQTEwMDUyNTI4MSAvKiBT
aWduYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0REN0ZGQTE4NkQyQTU0MDA3NDMzQ0QgLyog
SXRlcmF0b3JSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNBQzkxQTgxODk0MkZDNDAwMjQ0
OTM5IC8qIExDaGFyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlFQjA2MzFENTUyODQyMDBDODJF
RjcgLyogTEVCRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjMzLDYgKzE2NTAsNyBAQAog
CQkJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQxMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBs
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0MjE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5n
T3BlcmF0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzExQkQ1QTFFQTgxQTk2MDA1MjUyODEg
LyogVGhyZWFkTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQTgxNjY2REZBMzAw
QzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTZFQjFF
MDE4N0QwQkQzMDAzMDEyNkYgLyogU3RyaW5nVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDczQjgxNTFBODI1QjAwNDEyM0ZGIC8qIHN0cnRvZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODU3
LDggKzE4NzUsMTAgQEAKIAkJCQlGRURBQ0QzRDE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQzQzE1MUE4MjVCMDA0MTIzRkYgLyogU3Ry
aW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVGQjE4MjQzNUE2MDBBODJF
NjkgLyogU3RyaW5nQ0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMxMUJENUMxRUE4MjJGOTAw
NTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NDAx
NTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVC
QTE1RkMxODI0MzVBNjAwQTgyRTY5IC8qIFN0cmluZ0ltcGxDRi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUJBMTVGNTE4MjQzNDgwMDBBODJFNjkgLyogU3RyaW5nSW1wbE1hYy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUE1QkExNUYzMTgyNDMzQTkwMEE4MkU2OSAvKiBTdHJpbmdNYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQkwRkREQkZBNzE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJp
bnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9B
dG9taWNzLmggYi9Tb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKaW5kZXggNzcyZTZmZWJiZDJlNzE2
OWQ0M2Q1MDc5NWMxZWFmYzU4ZWE2OGQxOC4uOTkwN2IzMmJmNGU0YmMzNDA2YTA1YjM5ODBhYzdk
M2MwNjNjZmQyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQXRvbWljcy5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0F0b21pY3MuaApAQCAtMTc0LDYgKzE3NCwxMiBAQCBzdHJ1Y3QgQXRvbWlj
IHsKICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uKGZ1bmMsIHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGF4ZWQsIGFib3J0TGlrZWxpaG9vZCk7CiAgICAgfQogCisgICAgQXRvbWljKCkgPSBkZWZhdWx0
OworICAgIGNvbnN0ZXhwciBBdG9taWMoVCBpbml0aWFsKQorICAgICAgICA6IHZhbHVlKHN0ZDo6
Zm9yd2FyZDxUPihpbml0aWFsKSkKKyAgICB7CisgICAgfQorCiAgICAgc3RkOjphdG9taWM8VD4g
dmFsdWU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IDFiYWUzYmI5MGIzNzEyMGE1MWM0
ODk5ZDk4N2Q4YTM0MTI1NDBkNjcuLjcxMjNhNmUwM2NlODgwZjE3ZGMwNDJiMTRkOTFjZDBiYmE3
ZTFhNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC02Miw2ICs2Miw3IEBAIHNldChXVEZfSEVB
REVSUwogICAgIExvY2tBbGdvcml0aG0uaAogICAgIExvY2tlZFByaW50U3RyZWFtLmgKICAgICBM
b2NrZXIuaAorICAgIExvY2tsZXNzQmFnLmgKICAgICBMb2dnaW5nSGFzaElELmgKICAgICBMb2dn
aW5nSGFzaE1hcC5oCiAgICAgTG9nZ2luZ0hhc2hTZXQuaApAQCAtMTMwLDYgKzEzMSw3IEBAIHNl
dChXVEZfSEVBREVSUwogICAgIFN0cmluZ1ByaW50U3RyZWFtLmgKICAgICBTeXN0ZW1UcmFjaW5n
LmgKICAgICBUaHJlYWRIb2xkZXIuY3BwCisgICAgVGhyZWFkTWVzc2FnZS5oCiAgICAgVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaAogICAgIFRocmVhZFNwZWNpZmljLmgKICAgICBUaHJlYWRpbmcuaApA
QCAtMTg1LDYgKzE4Nyw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIHRleHQvaWN1L1VUZXh0UHJv
dmlkZXJVVEYxNi5oCiAKICAgICB0aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oCisgICAgdGhyZWFk
cy9TaWduYWxzLmgKIAogICAgIHVuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaAogICAgIHVuaWNvZGUv
Q29sbGF0b3IuaApAQCAtMjM5LDYgKzI0Miw3IEBAIHNldChXVEZfU09VUkNFUwogICAgIFN0YWNr
Qm91bmRzLmNwcAogICAgIFN0YWNrU3RhdHMuY3BwCiAgICAgU3RyaW5nUHJpbnRTdHJlYW0uY3Bw
CisgICAgVGhyZWFkTWVzc2FnZS5jcHAKICAgICBUaHJlYWRpbmcuY3BwCiAgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmNwcAogICAgIFdURlRocmVhZERhdGEuY3BwCkBAIC0yNzksNiArMjgz
LDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgdGV4dC9pY3UvVVRleHRQcm92aWRlclVURjE2LmNw
cAogCiAgICAgdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuY3BwCisgICAgdGhyZWFkcy9TaWduYWxz
LmNwcAogCiAgICAgdW5pY29kZS9VVEY4LmNwcAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvTG9ja2xlc3NCYWcuaCBiL1NvdXJjZS9XVEYvd3RmL0xvY2tsZXNzQmFnLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWI0NmJjNWE3OWU2NDc5NmRjOGMzZDlhMWQwMzFlOGNhNmQzOTg3MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0xvY2tsZXNzQmFnLmgKQEAgLTAsMCArMSw5NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQXRvbWljcy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBhIHNp
bXBsZSBzaW5nbGUgY29uc3VtZXIsIG11bHRpcGxlIHByb2R1Y2VyIEJhZyBkYXRhIHN0cnVjdHVy
ZS4KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIExvY2tsZXNzQmFnIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShMb2NrbGVzc0JhZyk7CisKKyAgICBzdHJ1Y3QgTm9kZSB7CisgICAg
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgVCBkYXRh
OworICAgICAgICBOb2RlKiBuZXh0OworICAgIH07CitwdWJsaWM6CisgICAgTG9ja2xlc3NCYWco
KQorICAgICAgICA6IG1faGVhZChudWxscHRyKQorICAgIHsKKyAgICB9CisKKyAgICBlbnVtIFB1
c2hSZXN1bHQgeyBFbXB0eSwgTm9uRW1wdHkgfTsKKyAgICBQdXNoUmVzdWx0IGFkZChUIGVsZW1l
bnQpCisgICAgeworICAgICAgICBOb2RlKiBuZXdOb2RlID0gbmV3IE5vZGUoKTsKKyAgICAgICAg
bmV3Tm9kZS0+ZGF0YSA9IFdURk1vdmUoZWxlbWVudCk7CisKKyAgICAgICAgTm9kZSogb2xkSGVh
ZDsKKyAgICAgICAgbV9oZWFkLnRyYW5zYWN0aW9uKFsmXSAoTm9kZSomIGhlYWQpIHsKKyAgICAg
ICAgICAgIG9sZEhlYWQgPSBoZWFkOworICAgICAgICAgICAgbmV3Tm9kZS0+bmV4dCA9IGhlYWQ7
CisgICAgICAgICAgICBoZWFkID0gbmV3Tm9kZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gb2xkSGVhZCA9PSBudWxscHRyID8gRW1wdHkg
OiBOb25FbXB0eTsKKyAgICB9CisKKyAgICAvLyBDT05TVU1FUiBGVU5DVElPTlM6IEV2ZXJ5dGhp
bmcgYmVsb3cgaGVyZSBpcyBvbmx5IHNhZmUgdG8gY2FsbCBmcm9tIHRoZSBjb25zdW1lciB0aHJl
YWQuCisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHNhZmUgdG8gY2FsbCBmcm9t
IG1vcmUgdGhhbiBvbmUgdGhyZWFkLCBidXQgT05MWSBpZiBubyB0aHJlYWQgY2FuIGNhbGwgY29u
c3VtZUFsbC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgaXRlcmF0
ZShjb25zdCBGdW5jdG9yJiBmdW5jKQorICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1faGVh
ZC5sb2FkKCk7CisgICAgICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgICAgICBjb25zdCBUJiBk
YXRhID0gbm9kZS0+ZGF0YTsKKyAgICAgICAgICAgIGZ1bmMoZGF0YSk7CisgICAgICAgICAgICBu
b2RlID0gbm9kZS0+bmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBjb25zdW1lQWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCisg
ICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9oZWFkLmV4Y2hhbmdlKG51bGxwdHIpOworICAg
ICAgICB3aGlsZSAobm9kZSkgeworICAgICAgICAgICAgZnVuYyhXVEZNb3ZlKG5vZGUtPmRhdGEp
KTsKKyAgICAgICAgICAgIE5vZGUqIG9sZE5vZGUgPSBub2RlOworICAgICAgICAgICAgbm9kZSA9
IG5vZGUtPm5leHQ7CisgICAgICAgICAgICBkZWxldGUgb2xkTm9kZTsKKyAgICAgICAgfQorICAg
IH0KKworcHJpdmF0ZToKKyAgICBBdG9taWM8Tm9kZSo+IG1faGVhZDsKK307CisgICAgCit9IC8v
IG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2Uu
Y3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGFhZDNi
NzRjNDMwZjcyZjhiZDMzN2FiYmQ3ZTI4MTllZTI3Zjc0NQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuY3BwCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRocmVhZE1lc3NhZ2UuaCIKKworI2lmIFVTRShQVEhSRUFEUykKKworI2lu
Y2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDx3dGYvRGF0
YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgor
I2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KKworCituYW1lc3BhY2UgV1RGIHsKKwor
Y29uc3QgYm9vbCB2ZXJib3NlID0gdHJ1ZTsKKworY2xhc3MgVGhyZWFkTWVzc2FnZURhdGEgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFRocmVhZE1lc3NhZ2VE
YXRhKGNvbnN0IFRocmVhZE1lc3NhZ2UmIG0pCisgICAgICAgIDogcmFuKGZhbHNlKQorICAgICAg
ICAsIG1lc3NhZ2UobSkKKyAgICB7CisgICAgfQorCisgICAgQXRvbWljPGJvb2w+IHJhbjsKKyAg
ICBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlOworfTsKKworZW51bSBGaWxlRGVzY3JpcHRv
ciB7CisgICAgUmVhZCwKKyAgICBXcml0ZSwKKyAgICBOdW1iZXJPZkZpbGVEZXNjcmlwdG9ycywK
K307CisKK3N0YXRpYyBpbnQgZmlsZURlc2NyaXB0b3JzW051bWJlck9mRmlsZURlc2NyaXB0b3Jz
XTsKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBtYWdpY0J5dGUgPSAiZCI7CisKKwordm9pZCBp
bml0aWFsaXplVGhyZWFkTWVzc2FnZXMoKQoreworICAgIGludCByZXN1bHQgPSBwaXBlKGZpbGVE
ZXNjcmlwdG9ycyk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7CisKKyAgICBpbnQgZmxh
Z3MgPSBmY250bChmaWxlRGVzY3JpcHRvcnNbV3JpdGVdLCBGX0dFVEZMKTsKKyAgICByZXN1bHQg
PSBmY250bChmaWxlRGVzY3JpcHRvcnNbV3JpdGVdLCBGX1NFVEZMLCBmbGFncyB8IE9fTk9OQkxP
Q0sgfCBPX0FQUEVORCk7CisgICAgZmxhZ3MgPSBmY250bChmaWxlRGVzY3JpcHRvcnNbV3JpdGVd
LCBGX0dFVEZMKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQgIT0gLTEpOworICAgIFJFTEVB
U0VfQVNTRVJUKChmbGFncyAmIE9fTk9OQkxPQ0spICYmIChmbGFncyAmIE9fQVBQRU5EKSk7CisK
KyAgICBmbGFncyA9IGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgRl9HRVRGTCk7CisgICAg
cmVzdWx0ID0gZmNudGwoZmlsZURlc2NyaXB0b3JzW1JlYWRdLCBGX1NFVEZMLCBmbGFncyAmIH5P
X05PTkJMT0NLKTsKKyAgICBmbGFncyA9IGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgRl9H
RVRGTCk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ICE9IC0xKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghKGZsYWdzICYgT19OT05CTE9DSykpOworfQorCitTVVBQUkVTU19BU0FOCitNZXNzYWdl
U3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNz
YWdlJiBtZXNzYWdlKQoreworICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJzdGFydGluZyBzZW5k
Iik7CisgICAgY29uc3RleHByIFNpZ25hbCBzaWduYWwgPSBTaWduYWw6OlVzcjsKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7Cisg
ICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKHNpZ25hbCwgW10gKGludCwgc2lnaW5mb190KiBp
bmZvLCB2b2lkKiB1YXApIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJpbiBo
YW5kbGVyIik7CisgICAgICAgICAgICBUaHJlYWQqIHRocmVhZCA9IFRocmVhZDo6Y3VycmVudE1h
eUJlTnVsbCgpOworCisgICAgICAgICAgICBpZiAoIXRocmVhZCkgeworICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiV2Ugc29tZWhvdyBnb3QgYSBtZXNzYWdlIG9uIGEgdGhyZWFkIHRoYXQgZGlk
bid0IGhhdmUgYSBXVEY6OlRocmVhZCBpbml0aWFsaXplZCwgd2UgcHJvYmFibHkgZGVhZGxvY2tl
ZCwgaGFscC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5k
bGVkOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aHJlYWQtPnRocmVhZE1lc3NhZ2Vz
KCkuY29uc3VtZUFsbChbJl0gKFRocmVhZE1lc3NhZ2VEYXRhKiBkYXRhKSB7CisgICAgICAgICAg
ICAgICAgZGF0YS0+bWVzc2FnZShpbmZvLCBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKSk7
CisgICAgICAgICAgICAgICAgZGF0YS0+cmFuLnN0b3JlKHRydWUpOworICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHksIHdlIGNhbid0IGNoZWNrIHRoZSBlcnJu
byBoZXJlIHNpbmNlIG90aGVyIHRocmVhZHMgbWF5IGJlIGRvaW5nCisgICAgICAgICAgICAvLyBv
dGhlciBjYWxscyB3aGljaCBzZXQgaXQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIGRh
dGFMb2dMbklmKHZlcmJvc2UsICJ3cml0aW5nIGJ5dGUiKTsKKyAgICAgICAgICAgIHdoaWxlICh3
cml0ZShmaWxlRGVzY3JpcHRvcnNbV3JpdGVdLCBtYWdpY0J5dGUsIDEpID09IC0xKSB7IH0KKyAg
ICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJsZWF2aW5nIGhhbmRsZXIiKTsKKyAgICAg
ICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7CisgICAgICAgIH0pOworICAgICAg
ICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiaGFuZGxlciBpbnN0YWxsZWQiKTsKKyAgICB9KTsKKwor
CisgICAgLy8gU2luY2Ugd2UgYXJlIGd1YXJlbnRlZWQgbm90IHRvIHJldHVybiB1bnRpbCB3ZSBn
ZXQgYSByZXNwb25zZSBmcm9tIHRoZSBvdGhlciB0aHJlYWQgdGhpcyBpcyBvay4KKyAgICBUaHJl
YWRNZXNzYWdlRGF0YSBkYXRhKG1lc3NhZ2UpOworCisgICAgdGhyZWFkLnRocmVhZE1lc3NhZ2Vz
KCkuYWRkKCZkYXRhKTsKKyAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAibWVzc2FnZSBxdWV1ZWQi
KTsKKyAgICBib29sIHJlc3VsdCA9IHRocmVhZC5zaWduYWwodG9TeXN0ZW1TaWduYWwoc2lnbmFs
KSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBNZXNzYWdlU3RhdHVzOjpUaHJl
YWRFeGl0ZWQ7CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICBkYXRhTG9nTG5JZih2
ZXJib3NlLCAiaGVyZSIpOworCisgICAgc3RhdGljIFN0YXRpY0xvY2sgcmVhZExvY2s7CisgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocmVhZExvY2spOworICAg
ICAgICBjb25zdGV4cHIgc2l6ZV90IGJ1ZmZlclNpemUgPSAxNjsKKyAgICAgICAgY2hhciBidWZm
ZXJbYnVmZmVyU2l6ZV07CisKKyAgICAgICAgLy8gSXQncyBhbHdheXMgc2FmZSB0byBjbGVhciB0
aGUgcGlwZSBiZWNhdXNlIG9ubHkgb25lIHRocmVhZCBjYW4gZXZlciBibG9jayB0cnlpbmcgdG8g
cmVhZAorICAgICAgICAvLyBmcm9tIHRoZSBwaXBlLiBUaHVzLCBlYWNoIGJ5dGUgd2UgY2xlYXIg
ZnJvbSB0aGUgcGlwZSBhY3R1YWxseSBqdXN0IGNvcnJlc3BvbmRzIHRvIHNvbWUgdGFzaworICAg
ICAgICAvLyB0aGF0IGhhcyBhbHJlYWR5IGZpbmlzaGVkLiBXZSBhY3RpdmVseSB3YW50IHRvIGVu
c3VyZSB0aGF0IHRoZSBwaXBlIGRvZXMgbm90IG92ZXJmaWxsIGJlY2F1c2UKKyAgICAgICAgLy8g
b3RoZXJ3aXNlIG91ciB3cml0ZXJzIG1pZ2h0IHNwaW4gdHJ5aW5nIHRvIHdyaXRlLgorICAgICAg
ICBhdXRvIGNsZWFyUGlwZSA9IFsmXSB7CisgICAgICAgICAgICBpbnQgZmxhZ3MgPSBmY250bChm
aWxlRGVzY3JpcHRvcnNbUmVhZF0sIEZfR0VURkwpOworICAgICAgICAgICAgQVNTRVJUKCEoZmxh
Z3MgJiBPX05PTkJMT0NLKSk7CisgICAgICAgICAgICBmY250bChmaWxlRGVzY3JpcHRvcnNbUmVh
ZF0sIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSyk7CisKKyAgICAgICAgICAgIC8vIFVuZm9y
dHVuYXRlbHksIHdlIGNhbid0IGNoZWNrIHRoZSBlcnJubyBoZXJlIHNpbmNlIG90aGVyIHRocmVh
ZHMgbWF5IGJlIGRvaW5nCisgICAgICAgICAgICAvLyBvdGhlciBjYWxscyB3aGljaCBzZXQgaXQg
YXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIHdoaWxlIChyZWFkKGZpbGVEZXNjcmlwdG9y
c1tSZWFkXSwgYnVmZmVyLCBidWZmZXJTaXplKSAhPSAtMSkgeyB9CisKKyAgICAgICAgICAgIGZj
bnRsKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgRl9TRVRGTCwgZmxhZ3MpOworICAgICAgICB9Owor
CisgICAgICAgIGlmIChkYXRhLnJhbi5sb2FkKCkpIHsKKyAgICAgICAgICAgIGNsZWFyUGlwZSgp
OworICAgICAgICAgICAgcmV0dXJuIE1lc3NhZ2VTdGF0dXM6Ok1lc3NhZ2VSYW47CisgICAgICAg
IH0KKworICAgICAgICByZWFkKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgYnVmZmVyLCAxKTsKKyAg
ICAgICAgQVNTRVJUKGJ1ZmZlclswXSA9PSBtYWdpY0J5dGVbMF0pOworICAgICAgICBjbGVhclBp
cGUoKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNz
YWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOWFlNTNmMjljZjdlOGZiMDBlZjkyMTFkMTZjZTJjZGVkNjAzZWMx
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaApAQCAt
MCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1Nj
b3BlZExhbWJkYS5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFVTRShQVEhS
RUFEUykKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgaW5pdGlhbGl6ZVRocmVhZE1lc3NhZ2Vz
KCk7CisKK2NsYXNzIFRocmVhZE1lc3NhZ2VEYXRhOwordXNpbmcgVGhyZWFkTWVzc2FnZSA9IFNj
b3BlZExhbWJkYTx2b2lkKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqKT47CisKK2VudW0gY2xhc3Mg
TWVzc2FnZVN0YXR1cyB7CisgICAgTWVzc2FnZVJhbiwKKyAgICBUaHJlYWRFeGl0ZWQsCit9Owor
CisvLyBUaGlzIG1ldGhvZCBhbGxvd3MgdXMgdG8gc2VuZCBhIG1lc3NhZ2Ugd2hpY2ggd2lsbCBi
ZSBydW4gaW4gYSBzaWduYWwgaGFuZGxlciBvbiB0aGUgZGVzaXJlZCB0aHJlYWQuCisvLyBUaGVy
ZSBhcmUgc2V2ZXJhbCBjYXZlYXRlcyB0byB0aGlzIG1ldGhvZCBob3dldmVyLCBUaGlzIGZ1bmN0
aW9uIHVzZXMgc2lnbmFscyBzbyB5b3VyIG1lc3NhZ2Ugc2hvdWxkCisvLyBiZSBzeW5jIHNpZ25h
bCBzYWZlLgorTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmLCBjb25zdCBU
aHJlYWRNZXNzYWdlJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitNZXNzYWdlU3Rh
dHVzIHNlbmRNZXNzYWdlKFRocmVhZCYgdGFyZ2V0VGhyZWFkLCBjb25zdCBGdW5jdG9yJiBmdW5j
KQoreworICAgIGF1dG8gbGFtYmRhID0gc2NvcGVkTGFtYmRhUmVmPHZvaWQoc2lnaW5mb190Kiwg
dWNvbnRleHRfdCopPihmdW5jKTsKKyAgICByZXR1cm4gc2VuZE1lc3NhZ2VTY29wZWQodGFyZ2V0
VGhyZWFkLCBsYW1iZGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpz
ZW5kTWVzc2FnZTsKKworI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCmlu
ZGV4IGZlZjU4MTFhN2Q1N2JiODlkYzAzNzVmOTExMjJkNWEyNDhjYjIyODYuLjE1YTVjNjg5YWU4
NTFiNmZmYTkzODNjNTFjNjZmODE1NTdkNDE4MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcApAQCAtMzQs
NiArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9SYW5k
b21OdW1iZXJTZWVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZEhvbGRlci5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRNZXNzYWdlLmg+CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKQEAgLTE3OCw2ICsxNzksOSBAQCB2b2lk
IGluaXRpYWxpemVUaHJlYWRpbmcoKQogICAgICAgICB3dGZUaHJlYWREYXRhKCk7CiAgICAgICAg
IGluaXRpYWxpemVEYXRlcygpOwogICAgICAgICBUaHJlYWQ6OmluaXRpYWxpemVQbGF0Zm9ybVRo
cmVhZGluZygpOworI2lmIFVTRShQVEhSRUFEUykKKyAgICAgICAgaW5pdGlhbGl6ZVRocmVhZE1l
c3NhZ2VzKCk7CisjZW5kaWYKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCBiZDFmOGYz
M2UyYWFiNWI1Y2RmYjRjY2I0NjliODU4NWU5YTI0NjRlLi5jMjBhNjVlMjJiZmQ1MDNkNmI1NjUx
NWQ5NDg0NjcwNjY2MjgxMTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtNDIsNiArNDIsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrbGVzc0JhZy5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oPgog
I2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtNTYsNiArNTcsOCBAQAogCiBuYW1lc3Bh
Y2UgV1RGIHsKIAorY2xhc3MgVGhyZWFkTWVzc2FnZURhdGE7CisKIHVzaW5nIFRocmVhZElkZW50
aWZpZXIgPSB1aW50MzJfdDsKIHR5cGVkZWYgdm9pZCAoKlRocmVhZEZ1bmN0aW9uKSh2b2lkKiBh
cmd1bWVudCk7CiAKQEAgLTc1LDYgKzc4LDcgQEAgcHVibGljOgogCiAgICAgLy8gUmV0dXJucyBU
aHJlYWQgb2JqZWN0LgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhyZWFkJiBjdXJy
ZW50KCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWQqIGN1cnJlbnRNYXlC
ZU51bGwoKTsKIAogICAgIC8vIFJldHVybnMgVGhyZWFkSWRlbnRpZmllciBkaXJlY3RseS4gSXQg
aXMgdXNlZnVsIGlmIHRoZSB1c2VyIG9ubHkgY2FyZXMgYWJvdXQgaWRlbnRpdHkKICAgICAvLyBv
ZiB0aHJlYWRzLiBBdCB0aGF0IHRpbWUsIHVzZXJzIHNob3VsZCBrbm93IHRoYXQgaG9sZGluZyB0
aGlzIFRocmVhZElkZW50aWZpZXIgZG9lcyBub3QgZW5zdXJlCkBAIC0xMzIsNyArMTM2LDExIEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVQbGF0Zm9ybVRocmVhZGluZygp
OwogCi1wcml2YXRlOgorI2lmIFVTRShQVEhSRUFEUykKKyAgICBMb2NrbGVzc0JhZzxUaHJlYWRN
ZXNzYWdlRGF0YSo+JiB0aHJlYWRNZXNzYWdlcygpIHsgcmV0dXJuIG1fdGhyZWFkTWVzc2FnZXM7
IH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CiAgICAgVGhyZWFkKCk7CiAKICAgICAvLyBJbnRlcm5h
bCBwbGF0Zm9ybS1zcGVjaWZpYyBUaHJlYWQ6OmNyZWF0ZSBpbXBsZW1lbnRhdGlvbi4KQEAgLTE3
Nyw2ICsxODUsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kaWRFeGl0IHsgZmFsc2UgfTsKICNp
ZiBVU0UoUFRIUkVBRFMpCiAgICAgcHRocmVhZF90IG1faGFuZGxlOworCisgICAgTG9ja2xlc3NC
YWc8VGhyZWFkTWVzc2FnZURhdGEqPiBtX3RocmVhZE1lc3NhZ2VzOwogI2lmIE9TKERBUldJTikK
ICAgICBtYWNoX3BvcnRfdCBtX3BsYXRmb3JtVGhyZWFkOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZ1B0aHJlYWRzLmNwcAppbmRleCAzZWU5YTVmNTQ1ZWFmMTI4OTkwZTVhOWEzYzAxNTQ4ODUy
NWJmZmQ3Li4xYTVkOTlmNjE0ZjVkOTVhY2Y2MTcxZWYwMWQwM2QxNGMyMWM3ZmQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0yNjQsMTEgKzI2NCwxOCBAQCB2b2lkIFRo
cmVhZDo6ZGV0YWNoKCkKICAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKIH0KIAotVGhyZWFk
JiBUaHJlYWQ6OmN1cnJlbnQoKQorVGhyZWFkKiBUaHJlYWQ6OmN1cnJlbnRNYXlCZU51bGwoKQog
ewogICAgIFRocmVhZEhvbGRlciogZGF0YSA9IFRocmVhZEhvbGRlcjo6Y3VycmVudCgpOwogICAg
IGlmIChkYXRhKQotICAgICAgICByZXR1cm4gZGF0YS0+dGhyZWFkKCk7CisgICAgICAgIHJldHVy
biAmZGF0YS0+dGhyZWFkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1RocmVhZCYgVGhy
ZWFkOjpjdXJyZW50KCkKK3sKKyAgICBpZiAoVGhyZWFkKiBjdXJyZW50ID0gY3VycmVudE1heUJl
TnVsbCgpKQorICAgICAgICByZXR1cm4gKmN1cnJlbnQ7CiAKICAgICAvLyBOb3QgYSBXVEYtY3Jl
YXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHlldC4KICAg
ICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZihuZXcgVGhyZWFkKCkpOwpAQCAtMjg2
LDYgKzI5Myw4IEBAIFRocmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50SUQoKQogYm9vbCBU
aHJlYWQ6OnNpZ25hbChpbnQgc2lnbmFsTnVtYmVyKQogewogICAgIHN0ZDo6dW5pcXVlX2xvY2s8
c3RkOjptdXRleD4gbG9ja2VyKG1fbXV0ZXgpOworICAgIGlmIChoYXNFeGl0ZWQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGludCBlcnJObyA9IHB0aHJlYWRfa2lsbChtX2hhbmRsZSwg
c2lnbmFsTnVtYmVyKTsKICAgICByZXR1cm4gIWVyck5vOyAvLyBBIDAgZXJyTm8gbWVhbnMgc3Vj
Y2Vzcy4KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0YWRiZTI2
MTVmOGVlYTUyOTkyOTRmYjdkMDFhZmY0ZmI2NWEwOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNpZ25hbHMuaCIKKworI2lmIFVTRShQVEhSRUFEUykKKworI2luY2x1ZGUg
PG11dGV4PgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Cisj
aW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2xlc3NCYWcuaD4KKwor
bmFtZXNwYWNlIFdURiB7CisKK3N0YXRpYyBMb2NrbGVzc0JhZzxTaWduYWxIYW5kbGVyPiBoYW5k
bGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV0gPSB7IH07
CitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4o
U2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKK3N0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFs
aXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMp
XTsKKworc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGlu
Zm8sIHZvaWQqIG1jb250ZXh0KQoreworICAgIFNpZ25hbCBzaWduYWwgPSBmcm9tU3lzdGVtU2ln
bmFsKHNpZyk7CisKKyAgICBhdXRvIHJlc3RvcmVEZWZhdWx0ID0gWyZdIHsKKyAgICAgICAgc3Ry
dWN0IHNpZ2FjdGlvbiBkZWZhdWx0QWN0aW9uOworICAgICAgICBkZWZhdWx0QWN0aW9uLnNhX2hh
bmRsZXIgPSBTSUdfREZMOworICAgICAgICBzaWdmaWxsc2V0KCZkZWZhdWx0QWN0aW9uLnNhX21h
c2spOworICAgICAgICBkZWZhdWx0QWN0aW9uLnNhX2ZsYWdzID0gMDsKKyAgICAgICAgc2lnYWN0
aW9uKHNpZywgJmRlZmF1bHRBY3Rpb24sIG51bGxwdHIpOworICAgIH07CisKKyAgICAvLyBUaGlz
IHNob3VsZG4ndCBoYXBwZW4gYnV0IHdlIG1pZ2h0IGFzIHdlbGwgYmUgY2FyZWZ1bC4KKyAgICBp
ZiAoc2lnbmFsID09IFNpZ25hbDo6VW5rbm93bikgeworICAgICAgICBkYXRhTG9nTG4oIldlIHNv
bWVob3cgZ290IGNhbGxlZCBmb3IgYW4gdW5rbm93biBzaWduYWwgIiwgc2lnLCAiLCBoYWxwLiIp
OworICAgICAgICByZXN0b3JlRGVmYXVsdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsKKyAgICBib29sIHJlc3RvcmVEZWZhdWx0SGFuZGxl
ciA9IGZhbHNlOworICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0uaXRl
cmF0ZShbJl0gKGNvbnN0IFNpZ25hbEhhbmRsZXImIGhhbmRsZXIpIHsKKyAgICAgICAgc3dpdGNo
IChoYW5kbGVyKHNpZywgaW5mbywgbWNvbnRleHQpKSB7CisgICAgICAgIGNhc2UgU2lnbmFsQWN0
aW9uOjpIYW5kbGVkOgorICAgICAgICAgICAgZGlkSGFuZGxlID0gdHJ1ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFNpZ25hbEFjdGlvbjo6Rm9yY2VEZWZhdWx0OgorICAgICAg
ICAgICAgcmVzdG9yZURlZmF1bHRIYW5kbGVyID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KTsK
KworICAgIGlmIChyZXN0b3JlRGVmYXVsdEhhbmRsZXIpIHsKKyAgICAgICAgcmVzdG9yZURlZmF1
bHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0cnVjdCBzaWdhY3Rpb24mIG9s
ZEFjdGlvbiA9IG9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXTsKKyAgICBp
ZiAoc2lnbmFsID09IFNpZ25hbDo6VXNyKSB7CisgICAgICAgIGlmIChvbGRBY3Rpb24uc2Ffc2ln
YWN0aW9uKQorICAgICAgICAgICAgb2xkQWN0aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGluZm8sIG1j
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZGlkSGFuZGxlKSB7
CisgICAgICAgIGlmIChvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKSB7CisgICAgICAgICAgICBvbGRB
Y3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgbWNvbnRleHQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgcmVzdG9yZURlZmF1bHQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KK30KKwordm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWwgc2lnbmFs
LCBTaWduYWxIYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBBU1NFUlQoc2lnbmFsIDwgU2lnbmFs
OjpVbmtub3duKTsKKyAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLmFk
ZChXVEZNb3ZlKGhhbmRsZXIpKTsKKworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNl
RmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSwgWyZdIHsKKyAgICAgICAgc3RydWN0
IHNpZ2FjdGlvbiBhY3Rpb247CisgICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBqc2NTaWdu
YWxIYW5kbGVyOworICAgICAgICBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7CisgICAgICAg
IGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87CisgICAgICAgIHNpZ2FjdGlvbih0b1N5c3Rl
bVNpZ25hbChzaWduYWwpLCAmYWN0aW9uLCAmb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+
KHNpZ25hbCldKTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25h
bHMuaCBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzYTFk
MmU1ODA4ODFiYWU5MzM5ZTE2NzgxOGE3YjllZjFiODBmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaApAQCAtMCwwICsxLDk3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoUFRIUkVBRFMpCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb24uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2VudW0gY2xhc3MgU2lnbmFsIHsKKyAgICAv
LyBVc3Igd2lsbCBhbHdheXMgY2hhaW4gdG8gYW55IG5vbi1kZWZhdWx0IGhhbmRsZXIgaW5zdGFs
bCBiZWZvcmUgdXMuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byBrbm93CisgICAgLy8gaWYgYSBz
aWduYWwgd2FzIGludGVuZGVkIGV4Y2x1c2l2ZWx5IGZvciB1cy4KKyAgICBVc3IsCisKKyAgICAv
LyBUaGVzZSBzaWduYWxzIHdpbGwgb25seSBjaGFpbiBpZiB3ZSBkb24ndCBoYXZlIGEgaGFuZGxl
ciB0aGF0IGNhbiBwcm9jZXNzIHRoZW0uIElmIHRoZXJlIGlzIG5vdGhpbmcKKyAgICAvLyB0byBj
aGFpbiB0byB3ZSByZXN0b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIgYW5kIGNyYXNoLgorICAgIFRy
YXAsCisgICAgSWxsLAorICAgIFNlZ1YsCisgICAgQnVzLAorICAgIE51bWJlck9mU2lnbmFscywK
KyAgICBVbmtub3duID0gTnVtYmVyT2ZTaWduYWxzCit9OworCitpbmxpbmUgaW50IHRvU3lzdGVt
U2lnbmFsKFNpZ25hbCBzaWduYWwpCit7CisgICAgc3dpdGNoIChzaWduYWwpIHsKKyAgICBjYXNl
IFNpZ25hbDo6U2VnVjogcmV0dXJuIFNJR1NFR1Y7CisgICAgY2FzZSBTaWduYWw6OkJ1czogcmV0
dXJuIFNJR0JVUzsKKyAgICBjYXNlIFNpZ25hbDo6SWxsOiByZXR1cm4gU0lHSUxMOworICAgIGNh
c2UgU2lnbmFsOjpVc3I6IHJldHVybiBTSUdVU1IyOworICAgIGNhc2UgU2lnbmFsOjpUcmFwOiBy
ZXR1cm4gU0lHVFJBUDsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworaW5saW5lIFNpZ25hbCBmcm9tU3lzdGVtU2lnbmFs
KGludCBzaWduYWwpCit7CisgICAgc3dpdGNoIChzaWduYWwpIHsKKyAgICBjYXNlIFNJR1NFR1Y6
IHJldHVybiBTaWduYWw6OlNlZ1Y7CisgICAgY2FzZSBTSUdCVVM6IHJldHVybiBTaWduYWw6OkJ1
czsKKyAgICBjYXNlIFNJR0lMTDogcmV0dXJuIFNpZ25hbDo6SWxsOworICAgIGNhc2UgU0lHVVNS
MjogcmV0dXJuIFNpZ25hbDo6VXNyOworICAgIGNhc2UgU0lHVFJBUDogcmV0dXJuIFNpZ25hbDo6
VHJhcDsKKyAgICBkZWZhdWx0OiByZXR1cm4gU2lnbmFsOjpVbmtub3duOworICAgIH0KK30KKwor
ZW51bSBjbGFzcyBTaWduYWxBY3Rpb24geworICAgIEhhbmRsZWQsCisgICAgTm90SGFuZGxlZCwK
KyAgICBGb3JjZURlZmF1bHQKK307CisKK3VzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxT
aWduYWxBY3Rpb24oaW50LCBzaWdpbmZvX3QqLCB2b2lkKik+OworCisvLyBDYWxsIHRoaXMgbWV0
aG9kIHdoZW5ldmVyIHlvdSB3YW50IHRvIGluc3RhbGwgYSBzaWduYWwgaGFuZGxlci4gSXQncyBv
ayB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbGF6aWx5LgorLy8gTm90ZTogWW91ciBzaWduYWwgaGFu
ZGxlciB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBoYW5kbGVyIGZvciB0aGUgZGVzaXJl
ZCBzaWduYWwgaXMgY2FsbGVkLgorLy8gVGh1cyBpdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRv
IGRpc2Nlcm4gaWYgdGhlIHNpZ25hbCBmaXJlZCB3YXMgeW91cnMuCisvLyBUaGlzIGZ1bmN0aW9u
IGlzIGN1cnJlbnRseSBhIG9uZSB3YXkgc3RyZWV0IGkuZS4gb25jZSBpbnN0YWxsZWQsIGEgc2ln
bmFsIGhhbmRsZXIgY2Fubm90IGJlIHVuaW5zdGFsbGVkLgordm9pZCBpbnN0YWxsU2lnbmFsSGFu
ZGxlcihTaWduYWwsIFNpZ25hbEhhbmRsZXImJik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OlNpZ25hbDsKK3VzaW5nIFdURjo6dG9TeXN0ZW1TaWduYWw7Cit1c2luZyBXVEY6
OmZyb21TeXN0ZW1TaWduYWw7Cit1c2luZyBXVEY6OlNpZ25hbEFjdGlvbjsKK3VzaW5nIFdURjo6
aW5zdGFsbFNpZ25hbEhhbmRsZXI7CisKKyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjU2MTc1OWJmNGNk
NjQ2NWY3YjJjNmQzOGU1YzcyYTM0ZTQ3MDRiMC4uMGU4MjlhZWIyOWMyNzFhMDAwNzZhODk5NDA3
MmRhNTkyMzNlNGViMCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA0LTIwICBLZWl0aCBNaWxsZXIgIDxrZWl0
aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzaWduYWxpbmcgQVBJCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA5NzYKKworICAgICAg
ICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBBZGQgdGVzdHMgZm9yIFRocmVh
ZE1lc3NhZ2VzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
VGhyZWFkTWVzc2FnZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHJ1blRocmVhZE1lc3NhZ2VUZXN0
KToKKyAgICAgICAgKFRFU1QpOgorCiAyMDE3LTA0LTIxICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVkdWNlIGNvcGllcyBhbmQgYWxsb2Nh
dGlvbnMgaW4gU2hhcmVkQnVmZmVyOjphcHBlbmQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
MGQ4NWIyYjQ4Y2Y1Y2M4MzVmODdkNjY5ODE1NmRjNzMxZTRkYjQ3NC4uNjM3OGI2ZGEwMTJhNjc2
ZjBmMTRhOGJlZGI4N2U1ZmVkMjYyMmFkOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3
NCw2ICsxNzQsNyBAQAogCQk1MkI4Q0Y5ODE1ODY4RDkxMDAyODEwNTMgLyogU2V0RG9jdW1lbnRV
UkkuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkI4Q0Y5NDE1ODY4Q0YwMDAyODEwNTMgLyogU2V0RG9jdW1lbnRVUkkuaHRtbCAqLzsg
fTsKIAkJNTJENjczRUUxQUZCMTI3MzAwRkExOUZFIC8qIFdLUGFnZUNvcHlTZXNzaW9uU3RhdGVX
aXRoRmlsdGVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyRDY3M0VDMUFGQjEyNjgwMEZBMTlGRSAvKiBXS1BhZ2VDb3B5U2Vzc2lvblN0YXRl
V2l0aEZpbHRlcmluZy5jcHAgKi87IH07CiAJCTUyRTVDRTQ5MTREMjFFQUIwMDNCMkJEOCAvKiBQ
YXJlbnRGcmFtZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJFNUNFNDgxNEQyMUVBQjAwM0IyQkQ4IC8qIFBhcmVudEZyYW1lX0J1bmRs
ZS5jcHAgKi87IH07CisJCTUzMTFCRDVFMUVBOTQ5MEUwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdl
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzEx
QkQ1RDFFQTk0OTBEMDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZXMuY3BwICovOyB9OwogCQk1MzFD
MUQ4RTFERjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzFDMUQ4RDFERjhFRjcyMDA2RTk3OUYgLyog
TEVCRGVjb2Rlci5jcHAgKi87IH07CiAJCTUzNjc3MDM0MUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJT
Y3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBXZWJTY3JpcHRPYmpl
Y3REZXNjcmlwdGlvbi5tbSAqLzsgfTsKIAkJNTM2NzcwMzYxQ0M4MUI2MTAwRDQyNUIxIC8qIFdl
YlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIxIC8qIFdl
YlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi87IH07CkBAIC0xMTE2LDYgKzExMTcsNyBA
QAogCQk1MkQ2NzNFQzFBRkIxMjY4MDBGQTE5RkUgLyogV0tQYWdlQ29weVNlc3Npb25TdGF0ZVdp
dGhGaWx0ZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tQ
YWdlQ29weVNlc3Npb25TdGF0ZVdpdGhGaWx0ZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MkU1Q0U0NTE0RDIxRTlEMDAzQjJCRDggLyogUGFyZW50RnJhbWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyZW50RnJhbWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkU1Q0U0ODE0RDIxRUFCMDAzQjJCRDggLyogUGFy
ZW50RnJhbWVfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBhcmVudEZyYW1lX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUz
MTFCRDVEMUVBOTQ5MEQwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzMUMxRDhEMURGOEVGNzIwMDZFOTc5RiAvKiBMRUJEZWNvZGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExFQkRlY29kZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzY3NzAzMzFDQzgwMjI4MDBENDI1QjEg
LyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIxIC8qIFdlYlNjcmlw
dE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBXZWJT
Y3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjE3Nyw2ICsyMTc5LDcgQEAKIAkJCQk3Qzc0RDQyRDE4ODIyOEYzMDBFNUVENTcgLyogU3Ry
aW5nVmlldy5jcHAgKi8sCiAJCQkJNTU5N0Y4MzQxRDk1OTZDODAwNjZCQzIxIC8qIFN5bmNocm9u
aXplZEZpeGVkUXVldWUuY3BwICovLAogCQkJCTkzMjlBQTI4MURFM0Y4MUUwMDNBQkQwNyAvKiBU
ZXh0QnJlYWtJdGVyYXRvci5jcHAgKi8sCisJCQkJNTMxMUJENUQxRUE5NDkwRDAwNTI1MjgxIC8q
IFRocmVhZE1lc3NhZ2VzLmNwcCAqLywKIAkJCQkwRjJDMjBCNzFEQ0Q1NDQ4MDA1NDJEOUUgLyog
VGltZS5jcHAgKi8sCiAJCQkJNUM1RTYzM0QxRDBCNjc5NDAwODVBMDI1IC8qIFVuaXF1ZVJlZi5j
cHAgKi8sCiAJCQkJN0NEMEQ1QUExRDU1MzRERTAwMENDOUUxIC8qIFZhcmlhbnQuY3BwICovLApA
QCAtMjY5Nyw2ICsyNzAwLDcgQEAKIAkJCQk3QzgzREVFMDFEMEE1OTBDMDBGRUJDRjMgLyogSW50
ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MzFDMUQ4RTFE
RjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Qzgz
REVFODFEMEE1OTBDMDBGRUJDRjMgLyogTGlzdEhhc2hTZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTMxMUJENUUxRUE5NDkwRTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2VzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDODNERjFEMUQwQTU5MEMwMEZFQkNGMyAvKiBMb2NrLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDODNERUVEMUQwQTU5MEMwMEZFQkNGMyAvKiBNYXRoRXh0cmFzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdDODNERUVGMUQwQTU5MEMwMEZFQkNGMyAvKiBNRDUuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9U
aHJlYWRNZXNzYWdlcy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRN
ZXNzYWdlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDlhMjc3M2YyMzQxYWM5YTM2ZDViNGQ0NTVhNzMzNmJk
MGY1YjY0MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1RocmVhZE1lc3NhZ2VzLmNwcApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2luY2x1ZGUgPHd0Zi9E
YXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorCitzdGF0aWMgdm9pZCBydW5UaHJl
YWRNZXNzYWdlVGVzdCh1bnNpZ25lZCBudW1TZW5kZXJzLCB1bnNpZ25lZCBudW1NZXNzYWdlcykK
K3sKKyAgICBib29sIHJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmcgPSB0cnVlOworICAgIGRhdGFM
b2dMbigic3RhcnRpbmciKTsKKyAgICBSZWZQdHI8VGhyZWFkPiByZWNlaXZlclRocmVhZCA9IFRo
cmVhZDo6Y3JlYXRlKCJUaHJlYWRNZXNzYWdlIHJlY2VpdmVyIiwgWyZyZWNlaXZlclNob3VsZEtl
ZXBSdW5uaW5nXSAoKSB7CisgICAgICAgIHdoaWxlIChyZWNlaXZlclNob3VsZEtlZXBSdW5uaW5n
KSB7IH0KKyAgICB9KTsKKyAgICBBU1NFUlRfVFJVRShyZWNlaXZlclRocmVhZCk7CisKKyAgICBW
ZWN0b3I8UmVmUHRyPFRocmVhZD4+IHNlbmRlclRocmVhZHMobnVtU2VuZGVycyk7CisgICAgVmVj
dG9yPHVuc2lnbmVkPiBtZXNzYWdlc1J1bihudW1TZW5kZXJzKTsKKyAgICBWZWN0b3I8dW5zaWdu
ZWQ+IGhhbmRsZXJzUnVuKG51bVNlbmRlcnMpOworICAgIG1lc3NhZ2VzUnVuLmZpbGwoMCk7Cisg
ICAgaGFuZGxlcnNSdW4uZmlsbCgwKTsKKworICAgIGZvciAodW5zaWduZWQgc2VuZGVySUQgPSAw
OyBzZW5kZXJJRCA8IG51bVNlbmRlcnM7ICsrc2VuZGVySUQpIHsKKyAgICAgICAgc2VuZGVyVGhy
ZWFkc1tzZW5kZXJJRF0gPSBUaHJlYWQ6OmNyZWF0ZSgiVGhyZWFkTWVzc2FnZSBzZW5kZXIiLCBb
c2VuZGVySUQsIG51bU1lc3NhZ2VzLCByZWNlaXZlclRocmVhZCwgJm1lc3NhZ2VzUnVuLCAmaGFu
ZGxlcnNSdW5dICgpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1N
ZXNzYWdlczsgKytpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZW5kTWVzc2Fn
ZSgqcmVjZWl2ZXJUaHJlYWQuZ2V0KCksIFtzZW5kZXJJRCwgJmhhbmRsZXJzUnVuXSAoc2lnaW5m
b190KiwgdWNvbnRleHRfdCopIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnNSdW5bc2Vu
ZGVySURdKys7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RS
VUUocmVzdWx0ID09IFdURjo6TWVzc2FnZVN0YXR1czo6TWVzc2FnZVJhbik7CisgICAgICAgICAg
ICAgICAgbWVzc2FnZXNSdW5bc2VuZGVySURdKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgICAgICBBU1NFUlRfVFJVRShzZW5kZXJUaHJlYWRzW3NlbmRlcklEXSk7CisgICAgfQor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVNlbmRlcnM7ICsraSkKKyAgICAgICAg
c2VuZGVyVGhyZWFkc1tpXS0+d2FpdEZvckNvbXBsZXRpb24oKTsKKworICAgIHJlY2VpdmVyU2hv
dWxkS2VlcFJ1bm5pbmcgPSBmYWxzZTsKKyAgICByZWNlaXZlclRocmVhZC0+d2FpdEZvckNvbXBs
ZXRpb24oKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1TZW5kZXJzOyArK2kp
IHsKKyAgICAgICAgRVhQRUNUX0VRKG51bU1lc3NhZ2VzLCBtZXNzYWdlc1J1bltpXSk7CisgICAg
ICAgIEVYUEVDVF9FUShudW1NZXNzYWdlcywgaGFuZGxlcnNSdW5baV0pOworICAgIH0KK30KKwor
VEVTVChUaHJlYWRNZXNzYWdlLCBCYXNpYykKK3sKKyAgICBydW5UaHJlYWRNZXNzYWdlVGVzdCgx
LCAxKTsKKyAgICBydW5UaHJlYWRNZXNzYWdlVGVzdCgxLCAxMDApOworfQorCitURVNUKFRocmVh
ZE1lc3NhZ2UsIE11bHRpcGxlU2VuZGVycykKK3sKKyAgICBydW5UaHJlYWRNZXNzYWdlVGVzdCgx
MCwgMSk7CisgICAgcnVuVGhyZWFkTWVzc2FnZVRlc3QoMTAsIDEwMCk7CisgICAgcnVuVGhyZWFk
TWVzc2FnZVRlc3QoMTAsIDEwMDAwKTsKK30KKworY2xhc3MgUmVmbGVjdGVkVGhyZWFkIDogcHVi
bGljIFRocmVhZCB7CitwdWJsaWM6CisgICAgdXNpbmcgVGhyZWFkOjptX211dGV4OworICAgIHVz
aW5nIFRocmVhZDo6bV9oYW5kbGU7CisgICAgdXNpbmcgVGhyZWFkOjpoYXNFeGl0ZWQ7Cit9Owor
CitURVNUKFRocmVhZE1lc3NhZ2UsIFNpZ25hbHNXb3JrT25FeGl0KQoreworICAgIHN0YXRpYyBi
b29sIGhhbmRsZXJSYW4gPSBmYWxzZTsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6
OlVzciwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCopIC0+IFNpZ25hbEFjdGlvbiB7CisgICAg
ICAgIGRhdGFMb2dMbigiaGVyZSIpOworICAgICAgICBoYW5kbGVyUmFuID0gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsKKyAgICB9KTsKKworICAgIGJvb2wgcmVj
ZWl2ZXJTaG91bGRLZWVwUnVubmluZyA9IHRydWU7CisgICAgUmVmUHRyPFRocmVhZD4gcmVjZWl2
ZXJUaHJlYWQgPSAoVGhyZWFkOjpjcmVhdGUoIlRocmVhZE1lc3NhZ2UgcmVjZWl2ZXIiLAorICAg
ICAgICBbJnJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmddICgpIHsKKyAgICAgICAgICAgIHdoaWxl
IChyZWNlaXZlclNob3VsZEtlZXBSdW5uaW5nKSB7IH0KKyAgICB9KSk7CisgICAgQVNTRVJUX1RS
VUUocmVjZWl2ZXJUaHJlYWQpOworCisgICAgYm9vbCBzaWduYWxGaXJlZDsKKyAgICB7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHN0YXRpY19jYXN0PFJlZmxl
Y3RlZFRocmVhZCo+KHJlY2VpdmVyVGhyZWFkLmdldCgpKS0+bV9tdXRleCk7CisgICAgICAgIHJl
Y2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHN0
YXRpY19jYXN0PFJlZmxlY3RlZFRocmVhZCo+KHJlY2VpdmVyVGhyZWFkLmdldCgpKS0+aGFzRXhp
dGVkKCkpOworICAgICAgICBzbGVlcCgxKTsKKyAgICAgICAgc2lnbmFsRmlyZWQgPSAhcHRocmVh
ZF9raWxsKHN0YXRpY19jYXN0PFJlZmxlY3RlZFRocmVhZCo+KHJlY2VpdmVyVGhyZWFkLmdldCgp
KS0+bV9oYW5kbGUsIHRvU3lzdGVtU2lnbmFsKFNpZ25hbDo6VXNyKSk7CisgICAgfQorCisgICAg
cmVjZWl2ZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgRVhQRUNUX1RSVUUoaGFu
ZGxlclJhbiB8fCAhc2lnbmFsRmlyZWQpOworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307751</attachid>
            <date>2017-04-21 10:54:16 -0700</date>
            <delta_ts>2017-04-21 11:20:35 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170976-20170421135414.patch</filename>
            <type>text/plain</type>
            <size>62116</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NTE3ZjQ2Y2JiMzdhZjUwMjQ4YmI0YzIxMDYyNTVkOWUwYmIyNzI2Li5lMDk2YzBjNDkyZGRjNDlh
ZmNhZmI1OGJlMTkyYTdhNGViNjFlZDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxNy0wNC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgc2lnbmFsaW5nIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RmlsaXAgUGl6bG8uCisKKyAgICAgICAgVXBkYXRlIHZhcmlvdXMgdXNlcyBvZiBzaWdhY3Rpb24g
dG8gdXNlIHRoZSBuZXcgc2lnbmFsaW5nIEFQSS4KKyAgICAgICAgQWxzbyBzd2l0Y2ggVk1UcmFw
cyB0byB1c2UgdGhlIHRocmVhZCBtZXNzYWdlIHN5c3RlbSBpbnN0ZWFkIG9mCisgICAgICAgIHJv
bGxpbmcgaXQncyBvd24uCisKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgor
ICAgICAgICAoSlNDOjppc0pJVFBDKToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgor
ICAgICAgICAoSlNDOjppbnN0YWxsU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChKU0M6OlZNVHJh
cHM6OlZNVHJhcHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQp
OgorICAgICAgICAoSlNDOjpoYW5kbGVTaWd1c3IxKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
aGFuZGxlU2lndHJhcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Omluc3RhbGxTaWduYWxIYW5k
bGVycyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmg6CisgICAgICAgICog
dG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA6CisgICAgICAgIChKU0M6Omluc3RhbGxDcmFz
aEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpoYW5kbGVDcmFzaCk6IERlbGV0ZWQuCisgICAgICAg
ICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjplbmFibGVGYXN0TWVtb3J5KToKKwog
MjAxNy0wNC0yMCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAg
ICAgICAgW2NtYWtlXSBEZWZpbmUgRk9SV0FSRElOR19IRUFERVJTX0RJUiBpbiBXZWJLaXRGUyBh
bmQgdXNlIGl0IGV2ZXJ5d2hlcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggY2RkMjc4MTcwNDJkNzFhNTkxZTU1OGEwMjljZGUz
ZjMxZjlkNDVmOS4uM2I1YjgxODIzZmZlYmU0NzkzOTVlOTVjMWNhYTVmYmY3NWViYjQ4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw3NiBAQAorMjAxNy0wNC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVy
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc2lnbmFsaW5nIEFQSQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTc2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgYnVuY2ggb2Yg
bmV3IGZ1bmN0aW9uYWxpdHkgdG8gV1RGLiBGaXJzdCwgaXQgYWRkCisgICAgICAgIGEgbmV3IGRh
dGEgc3RydWN0dXJlIG9mIGEgbG9ja2xlc3MgYmFnLiBUaGUgTG9ja2xlc3NCYWcgY2xhc3MgY2Fu
CisgICAgICAgIGJlIHVzZWQgYXMgZWl0aGVyIGEgbXVsdGktd3JpdGVyIG11bHRpLXJlYWRlciBs
b2NrbGVzcyBiYWcgb3IgYQorICAgICAgICBtdWx0aS13cml0ZXIgc2luZ2xlIGNvbnN1bWVyIGxv
Y2tsZXNzIGJhZy4KKworICAgICAgICBOZXh0LCB0aGlzIHBhdGNoIGFkZHMgYW4gYWJzdHJhY3Rp
b24gYXJvdW5kIHNpZ2FjdGlvbiBpbiBXVEYuCisgICAgICAgIEJhc2ljYWxseSwgeW91IGNhbiBh
ZGQgYSBoYW5kbGVyLCB3aGljaCBjYW4gYmUgYW4gYXJiaXRyYXJ5CisgICAgICAgIGxhbWJkYS4g
QWx0aG91Z2ggaXQgc2hvdWxkIHN0aWxsIGJlIHNhZmUgZm9yIHRoZSBzaWduYWwgeW91IGFyZQor
ICAgICAgICBoYW5kbGluZy4gIHRoZSBzaWduYWwgaGFuZGxlciBtYW5hZ2VyIHdpbGwgdGhlbiBk
byBhbGwgdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIGhhbmRsaW5nIG9mIGNoYWluaW5nOgorCisg
ICAgICAgIEluIHRoZSBTSUdVU1IgY2FzZSB3ZSBhbHdheXMgZm9yd2FyZCB0aGUgc2lnbmFsIHRv
IGFueSBvdGhlcgorICAgICAgICBub24tZGVmYXVsdCBoYW5kbGVyIGluc3RhbGxlZCBiZWZvcmUg
dXMuIFdlIG5lZWQgdG8gZG8gdGhpcywKKyAgICAgICAgb3RoZXJ3aXNlLCBzaW5jZSBpdCdzIG5v
dCBwb3NzaWJsZSB0byB0ZWxsIGlmIGEgU0lHVVNSIHdhcworICAgICAgICBpbnRlbmRlZCBleGx1
c2l2ZWx5IGZvciBvdXIgaGFuZGxlcnMuIFNpZ25hbCBoYW5kbGVycyBkb24ndCByZWNvcmQKKyAg
ICAgICAgaG93IG1hbnkgdGltZXMgdGhleSB3ZXJlIHNlbnQgb25seSB0aGF0IHRoZXJlIGlzIGF0
IGxlYXN0IG9uZQorICAgICAgICB1bmhhbmRsZWQgc2lnbmFsLgorCisgICAgICAgIEluIHRoZSBm
YXVsdGluZyBjYXNlcyB3ZSByZXF1aXJlIHRoYXQgZXZlcnkgaGFuZGxlIGJlIGFibGUgdG8KKyAg
ICAgICAgcmVjb2duaXNlIGEgZmF1bHQgdGhleSBpbnN0YWxsZWQsIHZzIGNyYXNoZXMuIElmIG5v
bmUgb2Ygb3VyCisgICAgICAgIGhhbmRsZXJzIGNsYWltIHRvIGhhdmUgaGFuZGxlZCB0aGUgZmF1
bHQgd2Ugd2lsbCBmb3J3YXJkIHRoZQorICAgICAgICBmYXVsdC4gSWYgYSBoYW5kbGVyIHdhcyBp
bnN0YWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBmYXVsdCBoYW5kbGVyCisgICAgICAgIHdlIHNpbXBs
eSBjYWxsIHRoYXQgaGFuZGxlciBhbmQgcmVseSBvbiB0aGVtIHRvIHRha2UgdGhlCisgICAgICAg
IGFwcHJvcHJpYXRlIGFjdGlvbi4gSWYgbm8gaGFuZGxlciB3YXMgaW5zdGFsbGVkIGJlZm9yZSBv
dXIgZmlyc3QKKyAgICAgICAgaGFuZGxlciB3ZSByZXN0b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIg
YW5kIGFsbG93IHRoZSBmYXVsdCB0bworICAgICAgICBoYXBwZW4gYWdhaW4uCisKKyAgICAgICAg
RmluYWxseSwgdGhpcyBwYXRjaCBhZGRzIGEgc2lnbmFsIGJhc2VkIG1lc3NhZ2luZyBzeXN0ZW0u
ICBUaGlzCisgICAgICAgIHN5c3RlbSBhbGxvd3MgdGhlIHVzZXIgdG8gcnVuIGFuIGFyYml0cmFy
eSBsYW1iZGEgZnJvbSB0aGUgU0lHVVNSMgorICAgICAgICBzaWduYWwgaGFuZGxlciBvZiBhbnkg
dGFyZ2V0IFdURjo6VGhyZWFkLiBUaGlzIGlzIGFscmVhZHkgaW4gdXNlCisgICAgICAgIGZvciB0
aGUgVk1UcmFwcyBBUEkgd2hpY2ggYWxsb3dzIHVzIHRvIGtpbGwgcm9ndWUgVk1zIGJ5IHNlbmRp
bmcKKyAgICAgICAgdGhlIFZNJ3MgcnVubmluZyBXVEY6OlRocmVhZCBhIFNJR1VTUiBhbmQgcmVx
dWVzdGluZyBpdCBqZXRpc29uCisgICAgICAgIGFsbCBvcHRpbWl6ZWQgY29kZSBhbmQgdGhyb3cg
YW4gdW5jYXRjaGFibGUgZXhjZXB0aW9uIGZyb20gYWxsCisgICAgICAgIGZ1bmN0aW9uIGVudHJp
ZXMvbG9vcCBiYWNrZWRnZXMuICBJbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGFsc28gdXNlCisgICAg
ICAgIHRoaXMgQVBJIGZvciBXYXNtIHRvIHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZXMgaW4g
Y3VycmVudGx5CisgICAgICAgIGV4ZWN1dGluZyBXYXNtIHRocmVhZHMuCisKKyAgICAgICAgKiBX
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgor
ICAgICAgICAoV1RGOjpBdG9taWM6OkF0b21pYyk6CisgICAgICAgICogd3RmL0xvY2tsZXNzQmFn
Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6TG9ja2xlc3NCYWcpOgorICAg
ICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6YWRkKToKKyAgICAgICAgKFdURjo6TG9ja2xlc3NCYWc6
Oml0ZXJhdGUpOgorICAgICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6Y29uc3VtZUFsbCk6CisgICAg
ICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VGhyZWFk
TWVzc2FnZURhdGE6OlRocmVhZE1lc3NhZ2VEYXRhKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6
ZVRocmVhZE1lc3NhZ2VzKToKKyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2VTY29wZWQpOgorICAg
ICAgICAqIHd0Zi9UaHJlYWRNZXNzYWdlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpzZW5kTWVz
c2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OmluaXRp
YWxpemVUaHJlYWRpbmcpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjp0aHJlYWRNZXNzYWdlcyk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJl
YWRzLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWwp
OgorICAgICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6anNjU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChXVEY6Omluc3RhbGxTaWduYWxIYW5kbGVy
KToKKyAgICAgICAgKiB3dGYvdGhyZWFkcy9TaWduYWxzLmg6IEFkZGVkLgorICAgICAgICAoV1RG
Ojp0b1N5c3RlbVNpZ25hbCk6CisgICAgICAgIChXVEY6OmZyb21TeXN0ZW1TaWduYWwpOgorCiAy
MDE3LTA0LTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSBu
b3RGb3VuZCBpbnRvIGl0cyBvd24gZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAppbmRleCA2ZWU2ZmUyODE4N2I5YWE0OWRlYTNjMjM3MWUz
Y2NiYzQzNDcxMDExLi4xMGUxNDQyYWUxMjliYmU0Y2Y0NTI2MThjYmM5ZmM1ZTUzOTMwNDhjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaApA
QCAtODEsNiArODEsMTIgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBleGVjdXRhYmxlUG9vbFJlc2Vy
dmF0aW9uRnJhY3Rpb24gPSAwLjI1OwogZXh0ZXJuIEpTX0VYUE9SVERBVEEgdWludHB0cl90IHN0
YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sOwogZXh0ZXJuIEpTX0VYUE9SVERBVEEgdWlu
dHB0cl90IGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbDsKIAoraW5saW5lIGJvb2wgaXNK
SVRQQyh2b2lkKiBwYykKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3Rh
cnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpIDw9IHBjCisgICAgICAgICYmIHBjIDwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKTsKK30K
KwogdHlwZWRlZiB2b2lkICgqSklUV3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24pKG9mZl90LCBj
b25zdCB2b2lkKiwgc2l6ZV90KTsKIGV4dGVybiBKU19FWFBPUlREQVRBIEpJVFdyaXRlU2VwYXJh
dGVIZWFwc0Z1bmN0aW9uIGppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IGU2Mjg1YTMwYzIyMmE1YWNh
ZGMzOGYwYzliMWI3YWU3YTQ3N2U3ODUuLjlmYzhmMGY3ZTM5MjdjM2ViY2ZjM2RlNWE0YzlkNjE5
NGFjZjQ4ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJh
cHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBA
IC00Miw3ICs0Miw4IEBACiAjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgogCiAjaWYgT1MoREFS
V0lOKQotI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+
CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtNTQsOSArNTUsNiBAQCBBTFdBWVNfSU5MSU5FIFZNJiBWTVRyYXBzOjp2bSgpIGNv
bnN0CiAKICNpZiBFTkFCTEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBTKQogCi1zdHJ1Y3Qgc2lnYWN0
aW9uIG9yaWdpbmFsU2lndXNyMUFjdGlvbjsKLXN0cnVjdCBzaWdhY3Rpb24gb3JpZ2luYWxTaWd0
cmFwQWN0aW9uOwotCiBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgU2lnbmFsQ29udGV4dCht
Y29udGV4dF90JiBtY29udGV4dCkKICAgICAgICAgOiBtY29udGV4dChtY29udGV4dCkKQEAgLTEz
Miw4NyArMTMwLDM1IEBAIHN0YXRpYyBFeHBlY3RlZDxWTUFuZFN0YWNrQm91bmRzLCBWTVRyYXBz
OjpFcnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoU2lnCiAgICAgcmV0dXJuIFZNQW5k
U3RhY2tCb3VuZHMgeyBhY3RpdmVWTSwgc3RhY2tCb3VuZHMgfTsKIH0KIAotc3RhdGljIHZvaWQg
aGFuZGxlU2lndXNyMShpbnQgc2lnbmFsTnVtYmVyLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIHVh
cCkKK3N0YXRpYyB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKCkKIHsKLSAgICBTaWduYWxDb250
ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0KTsK
LSAgICBhdXRvIGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMgPSBmaW5kQWN0aXZlVk1BbmRTdGFja0Jv
dW5kcyhjb250ZXh0KTsKLSAgICBpZiAoYWN0aXZlVk1BbmRTdGFja0JvdW5kcykgeworICAgIGlu
c3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VHJhcCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9p
ZCogdWFwKSAtPiBTaWduYWxBY3Rpb24geworICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQo
c3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0KTsKKworICAgICAgICBp
ZiAoIWlzSklUUEMoY29udGV4dC50cmFwUEMpKQorICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFj
dGlvbjo6Tm90SGFuZGxlZDsKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50bHkgZWF0
cyBhbGwgdHJhcHMgaW5jbHVkaW5nIGppdCBhc3NlcnRzIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhp
cworICAgICAgICAvLyBhbHdheXMgd29ya3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzEwMzkKKyAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0g
ZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoY29udGV4dCk7CisgICAgICAgIGlmICghYWN0aXZl
Vk1BbmRTdGFja0JvdW5kcykKKyAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRs
ZWQ7IC8vIExldCB0aGUgU2lnbmFsU2VuZGVyIHRyeSBhZ2FpbiBsYXRlci4KKwogICAgICAgICBW
TSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07CiAgICAgICAgIGlmICh2
bSkgewotICAgICAgICAgICAgU3RhY2tCb3VuZHMgc3RhY2tCb3VuZHMgPSBhY3RpdmVWTUFuZFN0
YWNrQm91bmRzLnZhbHVlKCkuc3RhY2tCb3VuZHM7CiAgICAgICAgICAgICBWTVRyYXBzJiB0cmFw
cyA9IHZtLT50cmFwcygpOwotICAgICAgICAgICAgaWYgKHRyYXBzLm5lZWRUcmFwSGFuZGxpbmco
KSkKLSAgICAgICAgICAgICAgICB0cmFwcy50cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKGNvbnRl
eHQsIHN0YWNrQm91bmRzKTsKKyAgICAgICAgICAgIGlmICghdHJhcHMubmVlZFRyYXBIYW5kbGlu
ZygpKQorICAgICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7IC8vIFRo
ZSBwb2xsaW5nIGNvZGUgYmVhdCB1cyB0byBoYW5kbGluZyB0aGUgdHJhcCBhbHJlYWR5LgorCisg
ICAgICAgICAgICBhdXRvIGV4cGVjdGVkU3VjY2VzcyA9IHRyYXBzLnRyeUpldHRpc29uQ29kZUJs
b2Nrc09uU3RhY2soY29udGV4dCk7CisgICAgICAgICAgICBpZiAoIWV4cGVjdGVkU3VjY2VzcykK
KyAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOyAvLyBMZXQgdGhl
IFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRT
dWNjZXNzLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFu
ZGxlZDsgLy8gV2UndmUgc3VjY2VzcyBqZXR0aXNvbiB0aGUgY29kZUJsb2Nrcy4KICAgICAgICAg
fQotICAgIH0KLQotICAgIGF1dG8gb3JpZ2luYWxBY3Rpb24gPSBvcmlnaW5hbFNpZ3VzcjFBY3Rp
b24uc2Ffc2lnYWN0aW9uOwotICAgIGlmIChvcmlnaW5hbEFjdGlvbikKLSAgICAgICAgb3JpZ2lu
YWxBY3Rpb24oc2lnbmFsTnVtYmVyLCBpbmZvLCB1YXApOwotfQotCi1zdGF0aWMgdm9pZCBoYW5k
bGVTaWd0cmFwKGludCBzaWduYWxOdW1iZXIsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogdWFwKQot
ewotICAgIFNpZ25hbENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFw
KS0+dWNfbWNvbnRleHQpOwotICAgIGF1dG8gYWN0aXZlVk1BbmRTdGFja0JvdW5kcyA9IGZpbmRB
Y3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRleHQpOwotICAgIGlmICghYWN0aXZlVk1BbmRTdGFj
a0JvdW5kcykKLSAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdh
aW4gbGF0ZXIuCi0KLSAgICBWTSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCku
dm07Ci0gICAgaWYgKHZtKSB7Ci0gICAgICAgIFZNVHJhcHMmIHRyYXBzID0gdm0tPnRyYXBzKCk7
Ci0gICAgICAgIGlmICghdHJhcHMubmVlZFRyYXBIYW5kbGluZygpKQotICAgICAgICAgICAgcmV0
dXJuOyAvLyBUaGUgcG9sbGluZyBjb2RlIGJlYXQgdXMgdG8gaGFuZGxpbmcgdGhlIHRyYXAgYWxy
ZWFkeS4KIAotICAgICAgICBhdXRvIGV4cGVjdGVkU3VjY2VzcyA9IHRyYXBzLnRyeUpldHRpc29u
Q29kZUJsb2Nrc09uU3RhY2soY29udGV4dCk7Ci0gICAgICAgIGlmICghZXhwZWN0ZWRTdWNjZXNz
KQotICAgICAgICAgICAgcmV0dXJuOyAvLyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4g
bGF0ZXIuCi0gICAgICAgIGlmIChleHBlY3RlZFN1Y2Nlc3MudmFsdWUoKSkKLSAgICAgICAgICAg
IHJldHVybjsgLy8gV2UndmUgc3VjY2VzcyBqZXR0aXNvbiB0aGUgY29kZUJsb2Nrcy4KLSAgICB9
Ci0KLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlbiB0aGlzIFNJR1RSQVAgaXMgbm90IGR1ZSB0
byBhIFZNVHJhcC4gTGV0J3MgZG8gdGhlIGRlZmF1bHQgYWN0aW9uLgotICAgIGF1dG8gb3JpZ2lu
YWxBY3Rpb24gPSBvcmlnaW5hbFNpZ3RyYXBBY3Rpb24uc2Ffc2lnYWN0aW9uOwotICAgIGlmIChv
cmlnaW5hbEFjdGlvbikgewotICAgICAgICAvLyBJdCBpcyBhbHdheXMgc2FmZSB0byBqdXN0IGlu
dm9rZSB0aGUgb3JpZ2luYWwgaGFuZGxlciB1c2luZyB0aGUgc2Ffc2lnYWN0aW9uIGZvcm0KLSAg
ICAgICAgLy8gd2l0aG91dCBjaGVja2luZyBmb3IgdGhlIFNBX1NJR0lORk8gZmxhZy4gSWYgdGhl
IG9yaWdpbmFsIGhhbmRsZXIgaXMgb2YgdGhlCi0gICAgICAgIC8vIHNhX2hhbmRsZXIgZm9ybSwg
aXQgd2lsbCBqdXN0IGlnbm9yZSB0aGUgMm5kIGFuZCAzcmQgYXJndW1lbnRzIHNpbmNlIHNhX2hh
bmRsZXIgaXMgYQotICAgICAgICAvLyBzdWJzZXQgb2Ygc2Ffc2lnYWN0aW9uLiBUaGlzIGlzIHdo
YXQgdGhlIG1hbiBwYWdlcyBzYXlzIHRoZSBPUyBkb2VzIGFueXdheS4KLSAgICAgICAgb3JpZ2lu
YWxBY3Rpb24oc2lnbmFsTnVtYmVyLCBpbmZvLCB1YXApOwotICAgIH0KLSAgICAKLSAgICAvLyBQ
cmUtZW1wdGl2ZWx5IHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBidXQgd2UgbWF5IHJvbGwg
aXQgYmFjayBiZWxvdy4KLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGN1cnJlbnRBY3Rpb247Ci0gICAg
c3RydWN0IHNpZ2FjdGlvbiBkZWZhdWx0QWN0aW9uOwotICAgIGRlZmF1bHRBY3Rpb24uc2FfaGFu
ZGxlciA9IFNJR19ERkw7Ci0gICAgc2lnZmlsbHNldCgmZGVmYXVsdEFjdGlvbi5zYV9tYXNrKTsK
LSAgICBkZWZhdWx0QWN0aW9uLnNhX2ZsYWdzID0gMDsKLSAgICBzaWdhY3Rpb24oU0lHVFJBUCwg
JmRlZmF1bHRBY3Rpb24sICZjdXJyZW50QWN0aW9uKTsKLSAgICAKLSAgICBpZiAoY3VycmVudEFj
dGlvbi5zYV9zaWdhY3Rpb24gIT0gaGFuZGxlU2lndHJhcCkgewotICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgdGhlcmUncyBhIGNsaWVudCBoYW5kbGVyIGluc3RhbGxlZCBhZnRlciB1cy4gVGhp
cyBhbHNvIG1lYW5zCi0gICAgICAgIC8vIHRoYXQgdGhlIGNsaWVudCBoYW5kbGVyIHRoaW5rcyBp
dCB3YXMgYWJsZSB0byByZWNvdmVyIGZyb20gdGhlIFNJR1RSQVAsIGFuZAotICAgICAgICAvLyBk
aWQgbm90IHVuaW5zdGFsbCBpdHNlbGYuIFdlIGNhbid0IGFyZ3VlIHdpdGggdGhpcyBiZWNhdXNl
IHRoZSBzaWduYWwgaXNuJ3QKLSAgICAgICAgLy8ga25vd24gdG8gYmUgZnJvbSBhIFZNVHJhcHMg
c2lnbmFsLiBIZW5jZSwgcmVzdG9yZSB0aGUgY2xpZW50IGhhbmRsZXIKLSAgICAgICAgLy8gYW5k
IGtlZXAgZ29pbmcuCi0gICAgICAgIHNpZ2FjdGlvbihTSUdUUkFQLCAmY3VycmVudEFjdGlvbiwg
bnVsbHB0cik7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcnMo
KQotewotICAgIHR5cGVkZWYgdm9pZCAoKiBTaWdhY3Rpb25IYW5kbGVyKShpbnQsIHNpZ2luZm9f
dCAqLCB2b2lkICopOwotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotCi0gICAgYWN0aW9u
LnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2lnYWN0aW9uSGFuZGxlcj4oaGFuZGxl
U2lndXNyMSk7Ci0gICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5z
YV9mbGFncyA9IFNBX1NJR0lORk87Ci0gICAgc2lnYWN0aW9uKFNJR1VTUjEsICZhY3Rpb24sICZv
cmlnaW5hbFNpZ3VzcjFBY3Rpb24pOwotCi0gICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8U2lnYWN0aW9uSGFuZGxlcj4oaGFuZGxlU2lndHJhcCk7Ci0gICAgc2lnZmls
bHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87
Ci0gICAgc2lnYWN0aW9uKFNJR1RSQVAsICZhY3Rpb24sICZvcmlnaW5hbFNpZ3RyYXBBY3Rpb24p
OworICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOworICAgIH0pOwogfQogCiBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBDYWxsRnJhbWUqIHNhbml0aXplZFRvcENhbGxGcmFtZShDYWxs
RnJhbWUqIHRvcENhbGxGcmFtZSkKQEAgLTQwMCw3ICszNDYsNyBAQCBWTVRyYXBzOjpWTVRyYXBz
KCkKICAgICBpZiAoIU9wdGlvbnM6OnVzZVBvbGxpbmdUcmFwcygpKSB7CiAgICAgICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlOwogICAgICAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7
Ci0gICAgICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcnMoKTsKKyAgICAgICAgICAgIGluc3Rh
bGxTaWduYWxIYW5kbGVyKCk7CiAgICAgICAgIH0pOwogICAgIH0KICNlbmRpZgpAQCAtNDYwLDcg
KzQwNiwxOSBAQCB2b2lkIFZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6c2VuZCgpCiAgICAgICAgICAg
ICBWTSYgdm0gPSAqbV92bTsKICAgICAgICAgICAgIGF1dG8gb3B0aW9uYWxPd25lclRocmVhZCA9
IHZtLm93bmVyVGhyZWFkKCk7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxPd25lclRocmVhZCkg
ewotICAgICAgICAgICAgICAgIG9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS0+c2lnbmFsKFNJ
R1VTUjEpOworICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKCpvcHRpb25hbE93bmVyVGhyZWFk
LnZhbHVlKCkuZ2V0KCksIFtdIChzaWdpbmZvX3QqLCB1Y29udGV4dF90KiB1Y29udGV4dCkgLT4g
dm9pZCB7CisgICAgICAgICAgICAgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dCh1Y29udGV4
dC0+dWNfbWNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGFjdGl2ZVZNQW5kU3Rh
Y2tCb3VuZHMgPSBmaW5kQWN0aXZlVk1BbmRTdGFja0JvdW5kcyhjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZNKiB2bSA9IGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMudmFsdWUoKS52bTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2bSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzID0gYWN0aXZlVk1BbmRTdGFja0JvdW5kcy52YWx1
ZSgpLnN0YWNrQm91bmRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZNVHJhcHMmIHRy
YXBzID0gdm0tPnRyYXBzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYXBz
Lm5lZWRUcmFwSGFuZGxpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJh
cHMudHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhjb250ZXh0LCBzdGFja0JvdW5kcyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5oCmluZGV4IGZkYmEyYWZkODMxZjAwZGJlMmJi
NTU2YWJhMTNjNWFkYmQ4MTBiMTYuLjU0MjViMTg4MzMyN2ZhZDgzZWM2MDI0MjZhZTk2ODEzNWZj
YjA1ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmgKQEAgLTQyLDcg
KzQyLDggQEAgY2xhc3MgVk1UcmFwcyB7CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBFcnJvciB7
CiAgICAgICAgIE5vbmUsCi0gICAgICAgIExvY2tVbmF2YWlsYWJsZQorICAgICAgICBMb2NrVW5h
dmFpbGFibGUsCisgICAgICAgIE5vdEpJVENvZGUKICAgICB9OwogCiAgICAgZW51bSBFdmVudFR5
cGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNo
QW5hbHl6ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwCmluZGV4IDI2NWM2NjE1NWQxYWRiOGRhOThiZDc4OTQyMDI5Mjk4M2Q2MTI3M2Qu
LmViODZlZTQwYzJlNTAyM2NiMGU2ZmExMTg1MzYzNmE0MWJhZDJjNmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKQEAgLTM3
LDkgKzM3LDcgQEAKICNpbmNsdWRlICJBNjRET3Bjb2RlLmgiCiAjZW5kaWYKIAotI2lmIEhBVkUo
U0lHTkFMX0gpCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvdGhy
ZWFkcy9TaWduYWxzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNDEsNjAgKzEzOSwxOSBA
QCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwogfTsKIAot
c3RydWN0IHNpZ2FjdGlvbiBvcmlnaW5hbFNpZ0lsbEFjdGlvbjsKLQotc3RhdGljIHZvaWQgaGFu
ZGxlQ3Jhc2goaW50IHNpZ25hbE51bWJlciwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1YXApCi17
Ci0gICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXAp
LT51Y19tY29udGV4dCk7Ci0gICAgU2lnaWxsQ3Jhc2hBbmFseXplciYgYW5hbHl6ZXIgPSBTaWdp
bGxDcmFzaEFuYWx5emVyOjppbnN0YW5jZSgpOwotICAgIGF1dG8gY3Jhc2hTb3VyY2UgPSBhbmFs
eXplci5hbmFseXplKGNvbnRleHQpOwotCi0gICAgYXV0byBvcmlnaW5hbEFjdGlvbiA9IG9yaWdp
bmFsU2lnSWxsQWN0aW9uLnNhX3NpZ2FjdGlvbjsKLSAgICBpZiAob3JpZ2luYWxBY3Rpb24pIHsK
LSAgICAgICAgLy8gSXQgaXMgYWx3YXlzIHNhZmUgdG8ganVzdCBpbnZva2UgdGhlIG9yaWdpbmFs
IGhhbmRsZXIgdXNpbmcgdGhlIHNhX3NpZ2FjdGlvbiBmb3JtCi0gICAgICAgIC8vIHdpdGhvdXQg
Y2hlY2tpbmcgZm9yIHRoZSBTQV9TSUdJTkZPIGZsYWcuIElmIHRoZSBvcmlnaW5hbCBoYW5kbGVy
IGlzIG9mIHRoZQotICAgICAgICAvLyBzYV9oYW5kbGVyIGZvcm0sIGl0IHdpbGwganVzdCBpZ25v
cmUgdGhlIDJuZCBhbmQgM3JkIGFyZ3VtZW50cyBzaW5jZSBzYV9oYW5kbGVyIGlzIGEKLSAgICAg
ICAgLy8gc3Vic2V0IG9mIHNhX3NpZ2FjdGlvbi4gVGhpcyBpcyB3aGF0IHRoZSBtYW4gcGFnZXMg
c2F5cyB0aGUgT1MgZG9lcyBhbnl3YXkuCi0gICAgICAgIG9yaWdpbmFsQWN0aW9uKHNpZ25hbE51
bWJlciwgaW5mbywgdWFwKTsKLSAgICB9Ci0KLSAgICBpZiAoY3Jhc2hTb3VyY2UgPT0gU2lnaWxs
Q3Jhc2hBbmFseXplcjo6Q3Jhc2hTb3VyY2U6OkphdmFTY3JpcHRDb3JlKSB7Ci0gICAgICAgIC8v
IFJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBzbyB0aGF0IHdlIGNhbiBnZXQgYSBjb3JlIGR1
bXAuCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gZGVmYXVsdEFjdGlvbjsKLSAgICAgICAgZGVm
YXVsdEFjdGlvbi5zYV9oYW5kbGVyID0gU0lHX0RGTDsKLSAgICAgICAgc2lnZmlsbHNldCgmZGVm
YXVsdEFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgZGVmYXVsdEFjdGlvbi5zYV9mbGFncyA9IDA7
Ci0gICAgICAgIHNpZ2FjdGlvbihTSUdJTEwsICZkZWZhdWx0QWN0aW9uLCBudWxscHRyKTsKLSAg
ICB9IGVsc2UgaWYgKCFvcmlnaW5hbEFjdGlvbikgewotICAgICAgICAvLyBQcmUtZW1wdGl2ZWx5
IHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciBidXQgd2UgbWF5IHJvbGwgaXQgYmFjayBiZWxv
dy4KLSAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBjdXJyZW50QWN0aW9uOwotICAgICAgICBzdHJ1
Y3Qgc2lnYWN0aW9uIGRlZmF1bHRBY3Rpb247Ci0gICAgICAgIGRlZmF1bHRBY3Rpb24uc2FfaGFu
ZGxlciA9IFNJR19ERkw7Ci0gICAgICAgIHNpZ2ZpbGxzZXQoJmRlZmF1bHRBY3Rpb24uc2FfbWFz
ayk7Ci0gICAgICAgIGRlZmF1bHRBY3Rpb24uc2FfZmxhZ3MgPSAwOwotICAgICAgICBzaWdhY3Rp
b24oU0lHSUxMLCAmZGVmYXVsdEFjdGlvbiwgJmN1cnJlbnRBY3Rpb24pOwotCi0gICAgICAgIGlm
IChjdXJyZW50QWN0aW9uLnNhX3NpZ2FjdGlvbiAhPSBoYW5kbGVDcmFzaCkgewotICAgICAgICAg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZXJlJ3MgYSBjbGllbnQgaGFuZGxlciBpbnN0YWxsZWQg
YWZ0ZXIgdXMuIFRoaXMgYWxzbyBtZWFucwotICAgICAgICAgICAgLy8gdGhhdCB0aGUgY2xpZW50
IGhhbmRsZXIgdGhpbmtzIGl0IHdhcyBhYmxlIHRvIHJlY292ZXIgZnJvbSB0aGUgU0lHSUxMLCBh
bmQKLSAgICAgICAgICAgIC8vIGRpZCBub3QgdW5pbnN0YWxsIGl0c2VsZi4gV2UgY2FuJ3QgYXJn
dWUgd2l0aCB0aGlzIGJlY2F1c2UgdGhlIGNyYXNoIGlzbid0Ci0gICAgICAgICAgICAvLyBrbm93
biB0byBiZSBmcm9tIGEgSmF2YVNjcmlwdENvcmUgc291cmNlLiBIZW5jZSwgcmVzdG9yZSB0aGUg
Y2xpZW50IGhhbmRsZXIKLSAgICAgICAgICAgIC8vIGFuZCBrZWVwIGdvaW5nLgotICAgICAgICAg
ICAgc2lnYWN0aW9uKFNJR0lMTCwgJmN1cnJlbnRBY3Rpb24sIG51bGxwdHIpOwotICAgICAgICB9
Ci0gICAgfQotfQotCiBzdGF0aWMgdm9pZCBpbnN0YWxsQ3Jhc2hIYW5kbGVyKCkKIHsKICNpZiBD
UFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Ci0g
ICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAoKikoaW50LCBz
aWdpbmZvX3QgKiwgdm9pZCAqKT4oaGFuZGxlQ3Jhc2gpOwotICAgIHNpZ2ZpbGxzZXQoJmFjdGlv
bi5zYV9tYXNrKTsKLSAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOwotICAgIHNpZ2Fj
dGlvbihTSUdJTEwsICZhY3Rpb24sICZvcmlnaW5hbFNpZ0lsbEFjdGlvbik7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShoYW5kbGVDcmFzaCk7CisgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2ln
bmFsOjpJbGwsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkgeworICAgICAgICBTaWdu
YWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250
ZXh0KTsKKworICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4dC5tYWNoaW5lUEMpKQorICAgICAg
ICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKKworICAgICAgICBTaWdpbGxD
cmFzaEFuYWx5emVyJiBhbmFseXplciA9IFNpZ2lsbENyYXNoQW5hbHl6ZXI6Omluc3RhbmNlKCk7
CisgICAgICAgIGFuYWx5emVyLmFuYWx5emUoY29udGV4dCk7CisgICAgICAgIHJldHVybiBTaWdu
YWxBY3Rpb246Ok5vdEhhbmRsZWQ7CisgICAgfSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAppbmRl
eCA4OTgxMDRiZDQ4YWRiMTE4ODY1YTljOGRlZTViNTZmNGU2NmJlYTgyLi4yZTBjOTlhMzliZWJk
MzE3OGI5MTQ4ZDk1OGZlNTNlNTdhNjIyOTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcApAQCAtMzUsOSArMzUsOSBA
QAogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRlICJXYXNtVGh1bmtzLmgiCiAKLSNp
bmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNTAsMTEgKzUwLDkgQEAgc3RhdGlj
IExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPj4+IGNv
ZGVMb2NhdGlvbnM7IC8vICgKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9GQVNUX01FTU9SWSkK
IAotc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkU2lnQnVzSGFuZGxlcjsKLXN0YXRpYyBzdHJ1
Y3Qgc2lnYWN0aW9uIG9sZFNpZ1NlZ3ZIYW5kbGVyOwogc3RhdGljIGJvb2wgZmFzdEhhbmRsZXJJ
bnN0YWxsZWQgeyBmYWxzZSB9OwogCi1zdGF0aWMgdm9pZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFs
LCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQorc3RhdGljIFNpZ25hbEFjdGlv
biB0cmFwSGFuZGxlcihpbnQsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpCiB7
CiAgICAgbWNvbnRleHRfdCYgY29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1Y29u
dGV4dCktPnVjX21jb250ZXh0OwogICAgIHZvaWQqIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPSBNYWNo
aW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpOwpAQCAtNjMsOSArNjEsNyBA
QCBzdGF0aWMgdm9pZCB0cmFwSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8s
IHZvaWQqIHVjb250ZXh0KQogICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJKSVQgbWVtb3J5IHN0
YXJ0OiAiLCBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXJ0T2ZGaXhlZEV4
ZWN1dGFibGVNZW1vcnlQb29sKSksICIgZW5kOiAiLCBSYXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCkpKTsKICAgICAvLyBGaXJz
dCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gSklUIGNvZGUgYmVmb3JlIHdlIGNhbiBh
cXVpcmUgYW55IGxvY2tzLiBPdGhlcndpc2UsCiAgICAgLy8gd2UgbWlnaHQgaGF2ZSBjcmFzaGVk
IGluIGNvZGUgdGhhdCBpcyBhbHJlYWR5IGhvbGRpbmcgb25lIG9mIHRoZSBsb2NrcyB3ZSB3YW50
IHRvIGFxdWlyZS4KLSAgICBpZiAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RhcnRPZkZpeGVk
RXhlY3V0YWJsZU1lbW9yeVBvb2wpIDw9IGZhdWx0aW5nSW5zdHJ1Y3Rpb24KLSAgICAgICAgJiYg
ZmF1bHRpbmdJbnN0cnVjdGlvbiA8IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVuZE9mRml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbCkpIHsKLQorICAgIGlmIChpc0pJVFBDKGZhdWx0aW5nSW5zdHJ1
Y3Rpb24pKSB7CiAgICAgICAgIGJvb2wgZmF1bHRlZEluQWN0aXZlRmFzdE1lbW9yeSA9IGZhbHNl
OwogICAgICAgICB7CiAgICAgICAgICAgICB2b2lkKiBmYXVsdGluZ0FkZHJlc3MgPSBzaWdJbmZv
LT5zaV9hZGRyOwpAQCAtODksMTcgKzg1LDEyIEBAIHN0YXRpYyB2b2lkIHRyYXBIYW5kbGVyKGlu
dCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpCiAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJmb3VuZCBzdHViOiAiLCBSYXdQb2ludGVy
KGV4Y2VwdGlvblN0dWIuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAgICAgICAg
ICAgICAgICAgTWFjaGluZUNvbnRleHQ6OmFyZ3VtZW50UG9pbnRlcjwxPihjb250ZXh0KSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNj
ZXNzKTsKICAgICAgICAgICAgICAgICAgICAgTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9p
bnRlcihjb250ZXh0KSA9IGV4Y2VwdGlvblN0dWIuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICAvLyBTaW5jZSB3ZSBvbmx5IHVzZSBmYXN0IG1lbW9y
eSBpbiBwcm9jZXNzZXMgd2UgY29udHJvbCwgaWYgd2UgcmVzdG9yZSB3ZSB3aWxsIGp1c3QgZmFs
bCBiYWNrIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIuCi0gICAgaWYgKHNpZ25hbCA9PSBTSUdCVVMp
Ci0gICAgICAgIHNpZ2FjdGlvbihzaWduYWwsICZvbGRTaWdCdXNIYW5kbGVyLCBudWxscHRyKTsK
LSAgICBlbHNlCi0gICAgICAgIHNpZ2FjdGlvbihzaWduYWwsICZvbGRTaWdTZWd2SGFuZGxlciwg
bnVsbHB0cik7CisgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKIH0KIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWV9GQVNUX01FTU9SWSkKQEAgLTEzMywyMiArMTI0LDEz
IEBAIHZvaWQgZW5hYmxlRmFzdE1lbW9yeSgpCiAgICAgICAgICAgICByZXR1cm47CiAKICNpZiBF
TkFCTEUoV0VCQVNTRU1CTFlfRkFTVF9NRU1PUlkpCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24g
YWN0aW9uOwotCi0gICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSB0cmFwSGFuZGxlcjsKLSAg
ICAgICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgICAgICBhY3Rpb24uc2FfZmxh
Z3MgPSBTQV9TSUdJTkZPOwotICAgICAgICAKLSAgICAgICAgLy8gSW5zdGFsbGluZyBzaWduYWwg
aGFuZGxlcnMgZmFpbHMgd2hlbgotICAgICAgICAvLyAxLiBzcGVjaWZpY2llZCBzaWcgaXMgaW5j
b3JyZWN0IChpbnZhbGlkIHZhbHVlcyBvciBzaWduYWwgbnVtYmVycyB3aGljaCBjYW5ub3QgYmUg
aGFuZGxlZCksIG9yCi0gICAgICAgIC8vIDIuIHNlY29uZCBvciB0aGlyZCBwYXJhbWV0ZXIgcG9p
bnRzIGluY29ycmVjdCBwb2ludGVycy4KLSAgICAgICAgLy8gVGh1cywgd2UgbXVzdCBub3QgZmFp
bCBpbiB0aGUgZm9sbG93aW5nIGF0dGVtcHRzLgotICAgICAgICBpbnQgcmV0ID0gMDsKLSAgICAg
ICAgcmV0ID0gc2lnYWN0aW9uKFNJR0JVUywgJmFjdGlvbiwgJm9sZFNpZ0J1c0hhbmRsZXIpOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmV0KTsKLQotICAgICAgICByZXQgPSBzaWdhY3Rpb24o
U0lHU0VHViwgJmFjdGlvbiwgJm9sZFNpZ1NlZ3ZIYW5kbGVyKTsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIXJldCk7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6QnVzLCBb
XSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRyYXBIYW5kbGVyKHNpZ25hbCwgc2lnSW5mbywgdWNvbnRleHQpOwor
ICAgICAgICB9KTsKKworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OlNlZ1Ys
IFtdIChpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KSB7Cisg
ICAgICAgICAgICByZXR1cm4gdHJhcEhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCB1Y29udGV4dCk7
CisgICAgICAgIH0pOwogCiAgICAgICAgIGNvZGVMb2NhdGlvbnMuY29uc3RydWN0KCk7CiAgICAg
ICAgIGZhc3RIYW5kbGVySW5zdGFsbGVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDk0YzExNmJmMTIzMTRhYjAwMTg2OWM2N2EwNTkwMWEwMTY4
MGZiZmMuLmZiN2E5MDFmYTI3MzE0ODNmNGUzNmFkY2YzMmFlZTgzZWZmZDI0MWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ5LDYgKzE0OSwxMSBAQAog
CQk1MTVGNzk1MDFDRkM5RjRBMDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRUYXNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVGNzk0RDFDRkM5RjRBMDBD
Q0VEOTMgLyogQ3Jvc3NUaHJlYWRUYXNrLmggKi87IH07CiAJCTUxNUY3OTU2MUNGRDNBNjkwMEND
RUQ5MyAvKiBDcm9zc1RocmVhZFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTVGNzk1NTFDRkQzQTY5MDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRR
dWV1ZS5oICovOyB9OwogCQk1MjE4MzAxMkM5OUU0NzZBODRFRUJFQTggLyogU3ltYm9sSW1wbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNzJCQkRC
MTA3RkE0MjQ4ODYxNzhCOUUgLyogU3ltYm9sSW1wbC5jcHAgKi87IH07CisJCTUzMTFCRDUzMUVB
NzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDUxMUVBNzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNw
cCAqLzsgfTsKKwkJNTMxMUJENTYxRUE3RTE1QTAwNTI1MjgxIC8qIExvY2tsZXNzQmFnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1NTFFQTdF
MTVBMDA1MjUyODEgLyogTG9ja2xlc3NCYWcuaCAqLzsgfTsKKwkJNTMxMUJENTgxRUE3RTFBMTAw
NTI1MjgxIC8qIFNpZ25hbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4MSAvKiBTaWduYWxzLmggKi87IH07CisJ
CTUzMTFCRDVBMUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1OTFFQTgxQTk2MDA1MjUy
ODEgLyogVGhyZWFkTWVzc2FnZS5oICovOyB9OworCQk1MzExQkQ1QzFFQTgyMkY5MDA1MjUyODEg
LyogVGhyZWFkTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAg
Ki87IH07CiAJCTUzOUVCMDYzMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjA2MjFENTUyODQy
MDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovOyB9OwogCQk1M0VDMjUzRTFFOTVBRDMwMDAwODMx
QjkgLyogUHJpb3JpdHlRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAq
LzsgfTsKIAkJNTUzMDcxQ0ExQzQwNDI3MjAwMzg0ODk4IC8qIFRpbnlMUlVDYWNoZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUzMDcxQzkxQzQwNDI3
MjAwMzg0ODk4IC8qIFRpbnlMUlVDYWNoZS5oICovOyB9OwpAQCAtNTQ4LDYgKzU1MywxMSBAQAog
CQk1MTVGNzk0QzFDRkM5RjRBMDBDQ0VEOTMgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRDb3BpZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1Rjc5NEQxQ0ZDOUY0QTAwQ0NFRDkzIC8qIENyb3NzVGhy
ZWFkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFRh
c2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NF
RDkzIC8qIENyb3NzVGhyZWFkUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ3Jvc3NUaHJlYWRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzEx
QkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTaWduYWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTMxMUJENTUxRUE3RTE1QTAwNTI1MjgxIC8qIExvY2tsZXNzQmFnLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tsZXNzQmFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4MSAvKiBTaWduYWxzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpZ25hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVz
c2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNz
YWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwNjIxRDU1Mjg0MjAw
QzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TEVCRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VDMjUzQzFFOTVB
RDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQcmlvcml0eVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1
MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGlueUxSVUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMDY0LDYgKzEwNzQsNyBAQAogCQkJCTBGNjBGMzJEMURGQ0JEMUIwMDQxNkQ2QyAv
KiBMb2NrZWRQcmludFN0cmVhbS5jcHAgKi8sCiAJCQkJMEY2MEYzMkUxREZDQkQxQjAwNDE2RDZD
IC8qIExvY2tlZFByaW50U3RyZWFtLmggKi8sCiAJCQkJQThBNDcyQzMxNTFBODI1QTAwNDEyM0ZG
IC8qIExvY2tlci5oICovLAorCQkJCTUzMTFCRDU1MUVBN0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVz
c0JhZy5oICovLAogCQkJCTUxM0UxNzBBMUNEN0Q1QkYwMEUzNjUwQiAvKiBMb2dnaW5nQWNjdW11
bGF0b3IuaCAqLywKIAkJCQkwRjMwQkE4QzFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hJ
RC5oICovLAogCQkJCTBGMzBCQThEMUU3ODcwOEUwMDJDQTg0NyAvKiBMb2dnaW5nSGFzaE1hcC5o
ICovLApAQCAtMTE4OSw2ICsxMjAwLDggQEAKIAkJCQlFMzIwMEFCNTFFOUE1MzZEMDAzQjU5RDIg
LyogVGhyZWFkSG9sZGVyLmNwcCAqLywKIAkJCQlFMzIwMEFCNjFFOUE1MzZEMDAzQjU5RDIgLyog
VGhyZWFkSG9sZGVyLmggKi8sCiAJCQkJQThBNDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZEhvbGRlclB0aHJlYWRzLmNwcCAqLywKKwkJCQk1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyog
VGhyZWFkTWVzc2FnZS5jcHAgKi8sCisJCQkJNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRo
cmVhZE1lc3NhZ2UuaCAqLywKIAkJCQlBOEE0NzMzMjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
aW5nLmNwcCAqLywKIAkJCQlBOEE0NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmgg
Ki8sCiAJCQkJQThBNDczMzUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMu
aCAqLywKQEAgLTEzMTYsNiArMTMyOSw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQlBOEE0NzMz
QTE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmNwcCAqLywKIAkJCQlBOEE0NzMz
QjE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggKi8sCisJCQkJNTMxMUJENTEx
RUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwICovLAorCQkJCTUzMTFCRDU3MUVBN0UxQTEw
MDUyNTI4MSAvKiBTaWduYWxzLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHRocmVhZHM7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTQ2MSw2ICsxNDc2LDcgQEAKIAkJCQlERTVBMDlG
QzFCQTM2OTkyMDAzRDQ0MjQgLyogQ29tbW9uQ3J5cHRvU1BJLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjhGMkI5MTE3MkUwMEZDMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3Mzk4MTUxQTgyNUIwMDQxMjNGRiAvKiBDb21waWxlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTMxMUJENTYxRUE3RTE1QTAwNTI1MjgxIC8qIExvY2tsZXNzQmFnLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkRCNjk4RTFCN0M2NDNBMDAwQzEwNzggLyogQ29uZGl0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ4QzE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmln
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMkI5QzE3MkYyNTk2MDA3REJEQTUgLyogQ29udmVy
c2lvbk1vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMTUyNiw2ICsxNTQyLDcgQEAKIAkJCQlBNzBE
QTA4NDE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQky
NjE0N0IwQTE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0NERDdGRjgxODZEMjkxRTAwNzQzM0NEIC8qIEl0ZXJhdG9yQWRh
cHRvcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMTFCRDU4MUVBN0UxQTEwMDUyNTI4MSAvKiBT
aWduYWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0REN0ZGQTE4NkQyQTU0MDA3NDMzQ0QgLyog
SXRlcmF0b3JSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNBQzkxQTgxODk0MkZDNDAwMjQ0
OTM5IC8qIExDaGFyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlFQjA2MzFENTUyODQyMDBDODJF
RjcgLyogTEVCRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjMzLDYgKzE2NTAsNyBAQAog
CQkJCUE3NDg3NDU0MTdBMEJEQUUwMEZBMDRDQiAvKiBTdHJpbmdIYXNoRHVtcENvbnRleHQuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQxMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBs
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0MjE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5n
T3BlcmF0b3JzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzExQkQ1QTFFQTgxQTk2MDA1MjUyODEg
LyogVGhyZWFkTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQTgxNjY2REZBMzAw
QzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTZFQjFF
MDE4N0QwQkQzMDAzMDEyNkYgLyogU3RyaW5nVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDczQjgxNTFBODI1QjAwNDEyM0ZGIC8qIHN0cnRvZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODU3
LDggKzE4NzUsMTAgQEAKIAkJCQlGRURBQ0QzRDE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQzQzE1MUE4MjVCMDA0MTIzRkYgLyogU3Ry
aW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVGQjE4MjQzNUE2MDBBODJF
NjkgLyogU3RyaW5nQ0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMxMUJENUMxRUE4MjJGOTAw
NTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NDAx
NTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVC
QTE1RkMxODI0MzVBNjAwQTgyRTY5IC8qIFN0cmluZ0ltcGxDRi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUJBMTVGNTE4MjQzNDgwMDBBODJFNjkgLyogU3RyaW5nSW1wbE1hYy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCUE1QkExNUYzMTgyNDMzQTkwMEE4MkU2OSAvKiBTdHJpbmdNYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQkwRkREQkZBNzE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJp
bnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9B
dG9taWNzLmggYi9Tb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKaW5kZXggNzcyZTZmZWJiZDJlNzE2
OWQ0M2Q1MDc5NWMxZWFmYzU4ZWE2OGQxOC4uOTkwN2IzMmJmNGU0YmMzNDA2YTA1YjM5ODBhYzdk
M2MwNjNjZmQyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQXRvbWljcy5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0F0b21pY3MuaApAQCAtMTc0LDYgKzE3NCwxMiBAQCBzdHJ1Y3QgQXRvbWlj
IHsKICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uKGZ1bmMsIHN0ZDo6bWVtb3J5X29yZGVyX3Jl
bGF4ZWQsIGFib3J0TGlrZWxpaG9vZCk7CiAgICAgfQogCisgICAgQXRvbWljKCkgPSBkZWZhdWx0
OworICAgIGNvbnN0ZXhwciBBdG9taWMoVCBpbml0aWFsKQorICAgICAgICA6IHZhbHVlKHN0ZDo6
Zm9yd2FyZDxUPihpbml0aWFsKSkKKyAgICB7CisgICAgfQorCiAgICAgc3RkOjphdG9taWM8VD4g
dmFsdWU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IDFiYWUzYmI5MGIzNzEyMGE1MWM0
ODk5ZDk4N2Q4YTM0MTI1NDBkNjcuLjcxMjNhNmUwM2NlODgwZjE3ZGMwNDJiMTRkOTFjZDBiYmE3
ZTFhNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC02Miw2ICs2Miw3IEBAIHNldChXVEZfSEVB
REVSUwogICAgIExvY2tBbGdvcml0aG0uaAogICAgIExvY2tlZFByaW50U3RyZWFtLmgKICAgICBM
b2NrZXIuaAorICAgIExvY2tsZXNzQmFnLmgKICAgICBMb2dnaW5nSGFzaElELmgKICAgICBMb2dn
aW5nSGFzaE1hcC5oCiAgICAgTG9nZ2luZ0hhc2hTZXQuaApAQCAtMTMwLDYgKzEzMSw3IEBAIHNl
dChXVEZfSEVBREVSUwogICAgIFN0cmluZ1ByaW50U3RyZWFtLmgKICAgICBTeXN0ZW1UcmFjaW5n
LmgKICAgICBUaHJlYWRIb2xkZXIuY3BwCisgICAgVGhyZWFkTWVzc2FnZS5oCiAgICAgVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaAogICAgIFRocmVhZFNwZWNpZmljLmgKICAgICBUaHJlYWRpbmcuaApA
QCAtMTg1LDYgKzE4Nyw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIHRleHQvaWN1L1VUZXh0UHJv
dmlkZXJVVEYxNi5oCiAKICAgICB0aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oCisgICAgdGhyZWFk
cy9TaWduYWxzLmgKIAogICAgIHVuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaAogICAgIHVuaWNvZGUv
Q29sbGF0b3IuaApAQCAtMjM5LDYgKzI0Miw3IEBAIHNldChXVEZfU09VUkNFUwogICAgIFN0YWNr
Qm91bmRzLmNwcAogICAgIFN0YWNrU3RhdHMuY3BwCiAgICAgU3RyaW5nUHJpbnRTdHJlYW0uY3Bw
CisgICAgVGhyZWFkTWVzc2FnZS5jcHAKICAgICBUaHJlYWRpbmcuY3BwCiAgICAgVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmNwcAogICAgIFdURlRocmVhZERhdGEuY3BwCkBAIC0yNzksNiArMjgz
LDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgdGV4dC9pY3UvVVRleHRQcm92aWRlclVURjE2LmNw
cAogCiAgICAgdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuY3BwCisgICAgdGhyZWFkcy9TaWduYWxz
LmNwcAogCiAgICAgdW5pY29kZS9VVEY4LmNwcAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvTG9ja2xlc3NCYWcuaCBiL1NvdXJjZS9XVEYvd3RmL0xvY2tsZXNzQmFnLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTljYWMwMzJkYmU5Zjc4NWI3M2RkNjIxYmVjZGM4MmRlMzAzNjAyNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0xvY2tsZXNzQmFnLmgKQEAgLTAsMCArMSw5NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQXRvbWljcy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBhIHNp
bXBsZSBzaW5nbGUgY29uc3VtZXIsIG11bHRpcGxlIHByb2R1Y2VyIEJhZyBkYXRhIHN0cnVjdHVy
ZS4KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIExvY2tsZXNzQmFnIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShMb2NrbGVzc0JhZyk7CisKKyAgICBzdHJ1Y3QgTm9kZSB7CisgICAg
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgVCBkYXRh
OworICAgICAgICBOb2RlKiBuZXh0OworICAgIH07CitwdWJsaWM6CisgICAgTG9ja2xlc3NCYWco
KQorICAgICAgICA6IG1faGVhZChudWxscHRyKQorICAgIHsKKyAgICB9CisKKyAgICBlbnVtIFB1
c2hSZXN1bHQgeyBFbXB0eSwgTm9uRW1wdHkgfTsKKyAgICBQdXNoUmVzdWx0IGFkZChUJiYgZWxl
bWVudCkKKyAgICB7CisgICAgICAgIE5vZGUqIG5ld05vZGUgPSBuZXcgTm9kZSgpOworICAgICAg
ICBuZXdOb2RlLT5kYXRhID0gc3RkOjpmb3J3YXJkPFQ+KGVsZW1lbnQpOworCisgICAgICAgIE5v
ZGUqIG9sZEhlYWQ7CisgICAgICAgIG1faGVhZC50cmFuc2FjdGlvbihbJl0gKE5vZGUqJiBoZWFk
KSB7CisgICAgICAgICAgICBvbGRIZWFkID0gaGVhZDsKKyAgICAgICAgICAgIG5ld05vZGUtPm5l
eHQgPSBoZWFkOworICAgICAgICAgICAgaGVhZCA9IG5ld05vZGU7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIG9sZEhlYWQgPT0gbnVsbHB0
ciA/IEVtcHR5IDogTm9uRW1wdHk7CisgICAgfQorCisgICAgLy8gQ09OU1VNRVIgRlVOQ1RJT05T
OiBFdmVyeXRoaW5nIGJlbG93IGhlcmUgaXMgb25seSBzYWZlIHRvIGNhbGwgZnJvbSB0aGUgY29u
c3VtZXIgdGhyZWFkLgorCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBzYWZlIHRv
IGNhbGwgZnJvbSBtb3JlIHRoYW4gb25lIHRocmVhZCwgYnV0IE9OTFkgaWYgbm8gdGhyZWFkIGNh
biBjYWxsIGNvbnN1bWVBbGwuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2
b2lkIGl0ZXJhdGUoY29uc3QgRnVuY3RvciYgZnVuYykKKyAgICB7CisgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2hlYWQubG9hZCgpOworICAgICAgICB3aGlsZSAobm9kZSkgeworICAgICAgICAgICAg
Y29uc3QgVCYgZGF0YSA9IG5vZGUtPmRhdGE7CisgICAgICAgICAgICBmdW5jKGRhdGEpOworICAg
ICAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgY29uc3VtZUFsbChjb25zdCBGdW5jdG9y
JiBmdW5jKQorICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1faGVhZC5leGNoYW5nZShudWxs
cHRyKTsKKyAgICAgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgICAgIGZ1bmMoV1RGTW92ZShu
b2RlLT5kYXRhKSk7CisgICAgICAgICAgICBOb2RlKiBvbGROb2RlID0gbm9kZTsKKyAgICAgICAg
ICAgIG5vZGUgPSBub2RlLT5uZXh0OworICAgICAgICAgICAgZGVsZXRlIG9sZE5vZGU7CisgICAg
ICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXRvbWljPE5vZGUqPiBtX2hlYWQ7Cit9Owor
ICAgIAorfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRNZXNzYWdlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYyZjhhN2IyMjVlY2ZjNjMxNzE0MzY2ZWFhNjdmZTViOTkxNmQ4ZWMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcApAQCAtMCwwICsxLDE1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUaHJlYWRNZXNzYWdlLmgiCisKKyNpZiBVU0UoUFRIUkVB
RFMpCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9M
b2NrZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CisKKworbmFtZXNwYWNl
IFdURiB7CisKK2NsYXNzIFRocmVhZE1lc3NhZ2VEYXRhIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBUaHJlYWRNZXNzYWdlRGF0YShjb25zdCBUaHJlYWRNZXNz
YWdlJiBtKQorICAgICAgICA6IHJhbihmYWxzZSkKKyAgICAgICAgLCBtZXNzYWdlKG0pCisgICAg
eworICAgIH0KKworICAgIEF0b21pYzxib29sPiByYW47CisgICAgY29uc3QgVGhyZWFkTWVzc2Fn
ZSYgbWVzc2FnZTsKK307CisKK2VudW0gRmlsZURlc2NyaXB0b3IgeworICAgIFJlYWQsCisgICAg
V3JpdGUsCisgICAgTnVtYmVyT2ZGaWxlRGVzY3JpcHRvcnMsCit9OworCitzdGF0aWMgaW50IGZp
bGVEZXNjcmlwdG9yc1tOdW1iZXJPZkZpbGVEZXNjcmlwdG9yc107CitzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgbWFnaWNCeXRlID0gImQiOworCisKK3ZvaWQgaW5pdGlhbGl6ZVRocmVhZE1lc3Nh
Z2VzKCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gcGlwZShmaWxlRGVzY3JpcHRvcnMpOworICAgIFJF
TEVBU0VfQVNTRVJUKCFyZXN1bHQpOworCisgICAgaW50IGZsYWdzID0gZmNudGwoZmlsZURlc2Ny
aXB0b3JzW1dyaXRlXSwgRl9HRVRGTCk7CisgICAgcmVzdWx0ID0gZmNudGwoZmlsZURlc2NyaXB0
b3JzW1dyaXRlXSwgRl9TRVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLIHwgT19BUFBFTkQpOworICAg
IGZsYWdzID0gZmNudGwoZmlsZURlc2NyaXB0b3JzW1dyaXRlXSwgRl9HRVRGTCk7CisgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0ICE9IC0xKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgoZmxhZ3MgJiBP
X05PTkJMT0NLKSAmJiAoZmxhZ3MgJiBPX0FQUEVORCkpOworCisgICAgZmxhZ3MgPSBmY250bChm
aWxlRGVzY3JpcHRvcnNbUmVhZF0sIEZfR0VURkwpOworICAgIHJlc3VsdCA9IGZjbnRsKGZpbGVE
ZXNjcmlwdG9yc1tSZWFkXSwgRl9TRVRGTCwgZmxhZ3MgJiB+T19OT05CTE9DSyk7CisgICAgZmxh
Z3MgPSBmY250bChmaWxlRGVzY3JpcHRvcnNbUmVhZF0sIEZfR0VURkwpOworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlc3VsdCAhPSAtMSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIShmbGFncyAmIE9fTk9O
QkxPQ0spKTsKK30KKworU1VQUFJFU1NfQVNBTgorTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNj
b3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3sKKyAg
ICBjb25zdGV4cHIgU2lnbmFsIHNpZ25hbCA9IFNpZ25hbDo6VXNyOworICAgIHN0YXRpYyBzdGQ6
Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKKyAgICAgICAg
aW5zdGFsbFNpZ25hbEhhbmRsZXIoc2lnbmFsLCBbXSAoaW50LCBzaWdpbmZvX3QqIGluZm8sIHZv
aWQqIHVhcCkgeworICAgICAgICAgICAgVGhyZWFkKiB0aHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnRN
YXlCZU51bGwoKTsKKworICAgICAgICAgICAgaWYgKCF0aHJlYWQpIHsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nTG4oIldlIHNvbWVob3cgZ290IGEgbWVzc2FnZSBvbiBhIHRocmVhZCB0aGF0IGRp
ZG4ndCBoYXZlIGEgV1RGOjpUaHJlYWQgaW5pdGlhbGl6ZWQsIHdlIHByb2JhYmx5IGRlYWRsb2Nr
ZWQsIGhhbHAuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFu
ZGxlZDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhyZWFkLT50aHJlYWRNZXNzYWdl
cygpLmNvbnN1bWVBbGwoWyZdIChUaHJlYWRNZXNzYWdlRGF0YSogZGF0YSkgeworICAgICAgICAg
ICAgICAgIGRhdGEtPm1lc3NhZ2UoaW5mbywgc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCkp
OworICAgICAgICAgICAgICAgIGRhdGEtPnJhbi5zdG9yZSh0cnVlKTsKKyAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICB3aGlsZSAod3JpdGUoZmlsZURlc2NyaXB0b3JzW1dyaXRlXSwgbWFn
aWNCeXRlLCAxKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBBU1NFUlQoZXJybm8gPT0gRUFHQUlO
KTsKKworICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsKKyAgICAgICAg
fSk7CisgICAgfSk7CisKKworICAgIC8vIFNpbmNlIHdlIGFyZSBndWFyZW50ZWVkIG5vdCB0byBy
ZXR1cm4gdW50aWwgd2UgZ2V0IGEgcmVzcG9uc2UgZnJvbSB0aGUgb3RoZXIgdGhyZWFkIHRoaXMg
aXMgb2suCisgICAgVGhyZWFkTWVzc2FnZURhdGEgZGF0YShtZXNzYWdlKTsKKworICAgIHRocmVh
ZC50aHJlYWRNZXNzYWdlcygpLmFkZCgmZGF0YSk7CisgICAgYm9vbCByZXN1bHQgPSB0aHJlYWQu
c2lnbmFsKHRvU3lzdGVtU2lnbmFsKHNpZ25hbCkpOworICAgIGlmICghcmVzdWx0KQorICAgICAg
ICByZXR1cm4gTWVzc2FnZVN0YXR1czo6VGhyZWFkRXhpdGVkOworICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdCk7CisKKyAgICBzdGF0aWMgU3RhdGljTG9jayByZWFkTG9jazsKKyAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihyZWFkTG9jayk7CisgICAgICAgIGNv
bnN0ZXhwciBzaXplX3QgYnVmZmVyU2l6ZSA9IDE2OworICAgICAgICBjaGFyIGJ1ZmZlcltidWZm
ZXJTaXplXTsKKworICAgICAgICAvLyBJdCdzIGFsd2F5cyBzYWZlIHRvIGNsZWFyIHRoZSBwaXBl
IGJlY2F1c2Ugb25seSBvbmUgdGhyZWFkIGNhbiBldmVyIGJsb2NrIHRyeWluZyB0byByZWFkCisg
ICAgICAgIC8vIGZyb20gdGhlIHBpcGUuIFRodXMsIGVhY2ggYnl0ZSB3ZSBjbGVhciBmcm9tIHRo
ZSBwaXBlIGFjdHVhbGx5IGp1c3QgY29ycmVzcG9uZHMgdG8gc29tZSB0YXNrCisgICAgICAgIC8v
IHRoYXQgaGFzIGFscmVhZHkgZmluaXNoZWQuIFdlIGFjdGl2ZWx5IHdhbnQgdG8gZW5zdXJlIHRo
YXQgdGhlIHBpcGUgZG9lcyBub3Qgb3ZlcmZpbGwgYmVjYXVzZQorICAgICAgICAvLyBvdGhlcndp
c2Ugb3VyIHdyaXRlcnMgbWlnaHQgc3BpbiB0cnlpbmcgdG8gd3JpdGUuCisgICAgICAgIGF1dG8g
Y2xlYXJQaXBlID0gWyZdIHsKKyAgICAgICAgICAgIGludCBmbGFncyA9IGZjbnRsKGZpbGVEZXNj
cmlwdG9yc1tSZWFkXSwgRl9HRVRGTCk7CisgICAgICAgICAgICBBU1NFUlQoIShmbGFncyAmIE9f
Tk9OQkxPQ0spKTsKKyAgICAgICAgICAgIGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tSZWFkXSwgRl9T
RVRGTCwgZmxhZ3MgfCBPX05PTkJMT0NLKTsKKworICAgICAgICAgICAgd2hpbGUgKHJlYWQoZmls
ZURlc2NyaXB0b3JzW1JlYWRdLCBidWZmZXIsIGJ1ZmZlclNpemUpICE9IC0xKSB7IH0KKyAgICAg
ICAgICAgIEFTU0VSVChlcnJubyA9PSBFQUdBSU4pOworCisgICAgICAgICAgICBmY250bChmaWxl
RGVzY3JpcHRvcnNbUmVhZF0sIEZfU0VURkwsIGZsYWdzKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBpZiAoZGF0YS5yYW4ubG9hZCgpKSB7CisgICAgICAgICAgICBjbGVhclBpcGUoKTsKKyAgICAg
ICAgICAgIHJldHVybiBNZXNzYWdlU3RhdHVzOjpNZXNzYWdlUmFuOworICAgICAgICB9CisKKyAg
ICAgICAgcmVhZChmaWxlRGVzY3JpcHRvcnNbUmVhZF0sIGJ1ZmZlciwgMSk7CisgICAgICAgIEFT
U0VSVChidWZmZXJbMF0gPT0gbWFnaWNCeXRlWzBdKTsKKyAgICAgICAgY2xlYXJQaXBlKCk7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCisjZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkTWVzc2FnZS5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjlhZTUzZjI5Y2Y3ZThmYjAwZWY5MjExZDE2Y2UyY2RlZDYwM2VjMWIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKQEAgLTAsMCArMSw2
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1i
ZGEuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBVU0UoUFRIUkVBRFMpCisK
K25hbWVzcGFjZSBXVEYgeworCit2b2lkIGluaXRpYWxpemVUaHJlYWRNZXNzYWdlcygpOworCitj
bGFzcyBUaHJlYWRNZXNzYWdlRGF0YTsKK3VzaW5nIFRocmVhZE1lc3NhZ2UgPSBTY29wZWRMYW1i
ZGE8dm9pZChzaWdpbmZvX3QqLCB1Y29udGV4dF90Kik+OworCitlbnVtIGNsYXNzIE1lc3NhZ2VT
dGF0dXMgeworICAgIE1lc3NhZ2VSYW4sCisgICAgVGhyZWFkRXhpdGVkLAorfTsKKworLy8gVGhp
cyBtZXRob2QgYWxsb3dzIHVzIHRvIHNlbmQgYSBtZXNzYWdlIHdoaWNoIHdpbGwgYmUgcnVuIGlu
IGEgc2lnbmFsIGhhbmRsZXIgb24gdGhlIGRlc2lyZWQgdGhyZWFkLgorLy8gVGhlcmUgYXJlIHNl
dmVyYWwgY2F2ZWF0ZXMgdG8gdGhpcyBtZXRob2QgaG93ZXZlciwgVGhpcyBmdW5jdGlvbiB1c2Vz
IHNpZ25hbHMgc28geW91ciBtZXNzYWdlIHNob3VsZAorLy8gYmUgc3luYyBzaWduYWwgc2FmZS4K
K01lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiwgY29uc3QgVGhyZWFkTWVz
c2FnZSYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorTWVzc2FnZVN0YXR1cyBzZW5k
TWVzc2FnZShUaHJlYWQmIHRhcmdldFRocmVhZCwgY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAg
ICBhdXRvIGxhbWJkYSA9IHNjb3BlZExhbWJkYVJlZjx2b2lkKHNpZ2luZm9fdCosIHVjb250ZXh0
X3QqKT4oZnVuYyk7CisgICAgcmV0dXJuIHNlbmRNZXNzYWdlU2NvcGVkKHRhcmdldFRocmVhZCwg
bGFtYmRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6c2VuZE1lc3Nh
Z2U7CisKKyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAppbmRleCBmZWY1
ODExYTdkNTdiYjg5ZGMwMzc1ZjkxMTIyZDVhMjQ4Y2IyMjg2Li4xNWE1YzY4OWFlODUxYjZmZmE5
MzgzYzUxYzY2ZjgxNTU3ZDQxODM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVy
U2VlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRIb2xkZXIuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkTWVzc2FnZS5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCkBAIC0xNzgsNiArMTc5LDkgQEAgdm9pZCBpbml0aWFs
aXplVGhyZWFkaW5nKCkKICAgICAgICAgd3RmVGhyZWFkRGF0YSgpOwogICAgICAgICBpbml0aWFs
aXplRGF0ZXMoKTsKICAgICAgICAgVGhyZWFkOjppbml0aWFsaXplUGxhdGZvcm1UaHJlYWRpbmco
KTsKKyNpZiBVU0UoUFRIUkVBRFMpCisgICAgICAgIGluaXRpYWxpemVUaHJlYWRNZXNzYWdlcygp
OworI2VuZGlmCiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKaW5kZXggYmQxZjhmMzNlMmFhYjVi
NWNkZmI0Y2NiNDY5Yjg1ODVlOWEyNDY0ZS4uYzIwYTY1ZTIyYmZkNTAzZDZiNTY1MTVkOTQ4NDY3
MDY2NjI4MTE2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKKysrIGIv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDx3
dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9M
b2NrZXIuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2xlc3NCYWcuaD4KICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm1SZWdpc3RlcnMuaD4KICNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KQEAgLTU2LDYgKzU3LDggQEAKIAogbmFtZXNwYWNlIFdURiB7
CiAKK2NsYXNzIFRocmVhZE1lc3NhZ2VEYXRhOworCiB1c2luZyBUaHJlYWRJZGVudGlmaWVyID0g
dWludDMyX3Q7CiB0eXBlZGVmIHZvaWQgKCpUaHJlYWRGdW5jdGlvbikodm9pZCogYXJndW1lbnQp
OwogCkBAIC03NSw2ICs3OCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFJldHVybnMgVGhyZWFkIG9i
amVjdC4KICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRocmVhZCYgY3VycmVudCgpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhyZWFkKiBjdXJyZW50TWF5QmVOdWxsKCk7
CiAKICAgICAvLyBSZXR1cm5zIFRocmVhZElkZW50aWZpZXIgZGlyZWN0bHkuIEl0IGlzIHVzZWZ1
bCBpZiB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IGlkZW50aXR5CiAgICAgLy8gb2YgdGhyZWFk
cy4gQXQgdGhhdCB0aW1lLCB1c2VycyBzaG91bGQga25vdyB0aGF0IGhvbGRpbmcgdGhpcyBUaHJl
YWRJZGVudGlmaWVyIGRvZXMgbm90IGVuc3VyZQpAQCAtMTMyLDcgKzEzNiwxMSBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplUGxhdGZvcm1UaHJlYWRpbmcoKTsKIAotcHJp
dmF0ZToKKyNpZiBVU0UoUFRIUkVBRFMpCisgICAgTG9ja2xlc3NCYWc8VGhyZWFkTWVzc2FnZURh
dGEqPiYgdGhyZWFkTWVzc2FnZXMoKSB7IHJldHVybiBtX3RocmVhZE1lc3NhZ2VzOyB9CisjZW5k
aWYKKworcHJvdGVjdGVkOgogICAgIFRocmVhZCgpOwogCiAgICAgLy8gSW50ZXJuYWwgcGxhdGZv
cm0tc3BlY2lmaWMgVGhyZWFkOjpjcmVhdGUgaW1wbGVtZW50YXRpb24uCkBAIC0xNzcsNiArMTg1
LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlkRXhpdCB7IGZhbHNlIH07CiAjaWYgVVNFKFBU
SFJFQURTKQogICAgIHB0aHJlYWRfdCBtX2hhbmRsZTsKKworICAgIExvY2tsZXNzQmFnPFRocmVh
ZE1lc3NhZ2VEYXRhKj4gbV90aHJlYWRNZXNzYWdlczsKICNpZiBPUyhEQVJXSU4pCiAgICAgbWFj
aF9wb3J0X3QgbV9wbGF0Zm9ybVRocmVhZDsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhy
ZWFkcy5jcHAKaW5kZXggM2VlOWE1ZjU0NWVhZjEyODk5MGU1YTlhM2MwMTU0ODg1MjViZmZkNy4u
MWE1ZDk5ZjYxNGY1ZDk1YWNmNjE3MWVmMDFkMDNkMTRjMjFjN2ZkMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZGluZ1B0aHJlYWRzLmNwcApAQCAtMjY0LDExICsyNjQsMTggQEAgdm9pZCBUaHJlYWQ6OmRl
dGFjaCgpCiAgICAgICAgIGRpZEJlY29tZURldGFjaGVkKCk7CiB9CiAKLVRocmVhZCYgVGhyZWFk
OjpjdXJyZW50KCkKK1RocmVhZCogVGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKCkKIHsKICAgICBU
aHJlYWRIb2xkZXIqIGRhdGEgPSBUaHJlYWRIb2xkZXI6OmN1cnJlbnQoKTsKICAgICBpZiAoZGF0
YSkKLSAgICAgICAgcmV0dXJuIGRhdGEtPnRocmVhZCgpOworICAgICAgICByZXR1cm4gJmRhdGEt
PnRocmVhZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitUaHJlYWQmIFRocmVhZDo6Y3Vy
cmVudCgpCit7CisgICAgaWYgKFRocmVhZCogY3VycmVudCA9IGN1cnJlbnRNYXlCZU51bGwoKSkK
KyAgICAgICAgcmV0dXJuICpjdXJyZW50OwogCiAgICAgLy8gTm90IGEgV1RGLWNyZWF0ZWQgdGhy
ZWFkLCBUaHJlYWRJZGVudGlmaWVyIGlzIG5vdCBlc3RhYmxpc2hlZCB5ZXQuCiAgICAgUmVmUHRy
PFRocmVhZD4gdGhyZWFkID0gYWRvcHRSZWYobmV3IFRocmVhZCgpKTsKQEAgLTI4Niw2ICsyOTMs
OCBAQCBUaHJlYWRJZGVudGlmaWVyIFRocmVhZDo6Y3VycmVudElEKCkKIGJvb2wgVGhyZWFkOjpz
aWduYWwoaW50IHNpZ25hbE51bWJlcikKIHsKICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0
ZXg+IGxvY2tlcihtX211dGV4KTsKKyAgICBpZiAoaGFzRXhpdGVkKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpbnQgZXJyTm8gPSBwdGhyZWFkX2tpbGwobV9oYW5kbGUsIHNpZ25hbE51
bWJlcik7CiAgICAgcmV0dXJuICFlcnJObzsgLy8gQSAwIGVyck5vIG1lYW5zIHN1Y2Nlc3MuCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwIGIvU291cmNl
L1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOGM1M2RjZGEyMjIzYzQ3
MmU5MmM0NjJjODYzNjkzNDkyMTU4NDMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvdGhyZWFkcy9TaWduYWxzLmNwcApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTaWduYWxzLmgiCisKKyNpZiBVU0UoUFRIUkVBRFMpCisKKyNpbmNsdWRlIDxtdXRleD4K
KyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUg
PHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tsZXNzQmFnLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCitzdGF0aWMgTG9ja2xlc3NCYWc8U2lnbmFsSGFuZGxlcj4gaGFuZGxlcnNbc3Rh
dGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldID0geyB9Oworc3RhdGlj
IHN0cnVjdCBzaWdhY3Rpb24gb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6
TnVtYmVyT2ZTaWduYWxzKV07CitzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2VG
bGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07CisKK3N0
YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lk
KiBtY29udGV4dCkKK3sKKyAgICBTaWduYWwgc2lnbmFsID0gZnJvbVN5c3RlbVNpZ25hbChzaWcp
OworCisgICAgYXV0byByZXN0b3JlRGVmYXVsdCA9IFsmXSB7CisgICAgICAgIHN0cnVjdCBzaWdh
Y3Rpb24gZGVmYXVsdEFjdGlvbjsKKyAgICAgICAgZGVmYXVsdEFjdGlvbi5zYV9oYW5kbGVyID0g
U0lHX0RGTDsKKyAgICAgICAgc2lnZmlsbHNldCgmZGVmYXVsdEFjdGlvbi5zYV9tYXNrKTsKKyAg
ICAgICAgZGVmYXVsdEFjdGlvbi5zYV9mbGFncyA9IDA7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
c2lnYWN0aW9uKHNpZywgJmRlZmF1bHRBY3Rpb24sIG51bGxwdHIpOworICAgICAgICBkYXRhTG9n
TG5JZighcmVzdWx0LCAiVW5hYmxlIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciB3aGls
ZSBwcm9jY2Vzc2luZyBzaWduYWwgIiwgc2lnLCAiIHRoZSBwcm9jZXNzIGlzIHByb2JhYmx5IGRl
YWRsb2NrZWQuIik7CisgICAgfTsKKworICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBidXQg
d2UgbWlnaHQgYXMgd2VsbCBiZSBjYXJlZnVsLgorICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpV
bmtub3duKSB7CisgICAgICAgIGRhdGFMb2dMbigiV2Ugc29tZWhvdyBnb3QgY2FsbGVkIGZvciBh
biB1bmtub3duIHNpZ25hbCAiLCBzaWcsICIsIGhhbHAuIik7CisgICAgICAgIHJlc3RvcmVEZWZh
dWx0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGRpZEhhbmRsZSA9IGZh
bHNlOworICAgIGJvb2wgcmVzdG9yZURlZmF1bHRIYW5kbGVyID0gZmFsc2U7CisgICAgaGFuZGxl
cnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS5pdGVyYXRlKFsmXSAoY29uc3QgU2lnbmFs
SGFuZGxlciYgaGFuZGxlcikgeworICAgICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnLCBpbmZvLCBt
Y29udGV4dCkpIHsKKyAgICAgICAgY2FzZSBTaWduYWxBY3Rpb246OkhhbmRsZWQ6CisgICAgICAg
ICAgICBkaWRIYW5kbGUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U2lnbmFsQWN0aW9uOjpGb3JjZURlZmF1bHQ6CisgICAgICAgICAgICByZXN0b3JlRGVmYXVsdEhh
bmRsZXIgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgaWYgKHJlc3RvcmVEZWZh
dWx0SGFuZGxlcikgeworICAgICAgICByZXN0b3JlRGVmYXVsdCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgc3RydWN0IHNpZ2FjdGlvbiYgb2xkQWN0aW9uID0gb2xkQWN0aW9uc1tz
dGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldOworICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpV
c3IpIHsKKyAgICAgICAgaWYgKG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24pCisgICAgICAgICAgICBv
bGRBY3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgbWNvbnRleHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFkaWRIYW5kbGUpIHsKKyAgICAgICAgaWYgKG9sZEFjdGlv
bi5zYV9zaWdhY3Rpb24pIHsKKyAgICAgICAgICAgIG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24oc2ln
LCBpbmZvLCBtY29udGV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICByZXN0b3JlRGVmYXVsdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lk
IGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCBzaWduYWwsIFNpZ25hbEhhbmRsZXImJiBoYW5k
bGVyKQoreworICAgIEFTU0VSVChzaWduYWwgPCBTaWduYWw6OlVua25vd24pOworICAgIGhhbmRs
ZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0uYWRkKFdURk1vdmUoaGFuZGxlcikpOwor
CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXpl
X3Q+KHNpZ25hbCldLCBbJl0geworICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKyAg
ICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7CisgICAgICAgIGF1
dG8gcmVzdWx0ID0gc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOworICAgICAgICBSRUxFQVNF
X0FTU0VSVCghcmVzdWx0KTsKKyAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsK
KyAgICAgICAgcmVzdWx0ID0gc2lnYWN0aW9uKHRvU3lzdGVtU2lnbmFsKHNpZ25hbCksICZhY3Rp
b24sICZvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0pOworICAgICAgICBS
RUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90
aHJlYWRzL1NpZ25hbHMuaCBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjAzYTFkMmU1ODA4ODFiYWU5MzM5ZTE2NzgxOGE3YjllZjFiODBmYzIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaApAQCAtMCwwICsxLDk3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoUFRIUkVBRFMpCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNs
dWRlIDx3dGYvRnVuY3Rpb24uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2VudW0gY2xhc3MgU2ln
bmFsIHsKKyAgICAvLyBVc3Igd2lsbCBhbHdheXMgY2hhaW4gdG8gYW55IG5vbi1kZWZhdWx0IGhh
bmRsZXIgaW5zdGFsbCBiZWZvcmUgdXMuIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byBrbm93Cisg
ICAgLy8gaWYgYSBzaWduYWwgd2FzIGludGVuZGVkIGV4Y2x1c2l2ZWx5IGZvciB1cy4KKyAgICBV
c3IsCisKKyAgICAvLyBUaGVzZSBzaWduYWxzIHdpbGwgb25seSBjaGFpbiBpZiB3ZSBkb24ndCBo
YXZlIGEgaGFuZGxlciB0aGF0IGNhbiBwcm9jZXNzIHRoZW0uIElmIHRoZXJlIGlzIG5vdGhpbmcK
KyAgICAvLyB0byBjaGFpbiB0byB3ZSByZXN0b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIgYW5kIGNy
YXNoLgorICAgIFRyYXAsCisgICAgSWxsLAorICAgIFNlZ1YsCisgICAgQnVzLAorICAgIE51bWJl
ck9mU2lnbmFscywKKyAgICBVbmtub3duID0gTnVtYmVyT2ZTaWduYWxzCit9OworCitpbmxpbmUg
aW50IHRvU3lzdGVtU2lnbmFsKFNpZ25hbCBzaWduYWwpCit7CisgICAgc3dpdGNoIChzaWduYWwp
IHsKKyAgICBjYXNlIFNpZ25hbDo6U2VnVjogcmV0dXJuIFNJR1NFR1Y7CisgICAgY2FzZSBTaWdu
YWw6OkJ1czogcmV0dXJuIFNJR0JVUzsKKyAgICBjYXNlIFNpZ25hbDo6SWxsOiByZXR1cm4gU0lH
SUxMOworICAgIGNhc2UgU2lnbmFsOjpVc3I6IHJldHVybiBTSUdVU1IyOworICAgIGNhc2UgU2ln
bmFsOjpUcmFwOiByZXR1cm4gU0lHVFJBUDsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworaW5saW5lIFNpZ25hbCBmcm9t
U3lzdGVtU2lnbmFsKGludCBzaWduYWwpCit7CisgICAgc3dpdGNoIChzaWduYWwpIHsKKyAgICBj
YXNlIFNJR1NFR1Y6IHJldHVybiBTaWduYWw6OlNlZ1Y7CisgICAgY2FzZSBTSUdCVVM6IHJldHVy
biBTaWduYWw6OkJ1czsKKyAgICBjYXNlIFNJR0lMTDogcmV0dXJuIFNpZ25hbDo6SWxsOworICAg
IGNhc2UgU0lHVVNSMjogcmV0dXJuIFNpZ25hbDo6VXNyOworICAgIGNhc2UgU0lHVFJBUDogcmV0
dXJuIFNpZ25hbDo6VHJhcDsKKyAgICBkZWZhdWx0OiByZXR1cm4gU2lnbmFsOjpVbmtub3duOwor
ICAgIH0KK30KKworZW51bSBjbGFzcyBTaWduYWxBY3Rpb24geworICAgIEhhbmRsZWQsCisgICAg
Tm90SGFuZGxlZCwKKyAgICBGb3JjZURlZmF1bHQKK307CisKK3VzaW5nIFNpZ25hbEhhbmRsZXIg
PSBGdW5jdGlvbjxTaWduYWxBY3Rpb24oaW50LCBzaWdpbmZvX3QqLCB2b2lkKik+OworCisvLyBD
YWxsIHRoaXMgbWV0aG9kIHdoZW5ldmVyIHlvdSB3YW50IHRvIGluc3RhbGwgYSBzaWduYWwgaGFu
ZGxlci4gSXQncyBvayB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbGF6aWx5LgorLy8gTm90ZTogWW91
ciBzaWduYWwgaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBoYW5kbGVyIGZv
ciB0aGUgZGVzaXJlZCBzaWduYWwgaXMgY2FsbGVkLgorLy8gVGh1cyBpdCBpcyB5b3VyIHJlc3Bv
bnNpYmlsaXR5IHRvIGRpc2Nlcm4gaWYgdGhlIHNpZ25hbCBmaXJlZCB3YXMgeW91cnMuCisvLyBU
aGlzIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBhIG9uZSB3YXkgc3RyZWV0IGkuZS4gb25jZSBpbnN0
YWxsZWQsIGEgc2lnbmFsIGhhbmRsZXIgY2Fubm90IGJlIHVuaW5zdGFsbGVkLgordm9pZCBpbnN0
YWxsU2lnbmFsSGFuZGxlcihTaWduYWwsIFNpZ25hbEhhbmRsZXImJik7CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCit1c2luZyBXVEY6OlNpZ25hbDsKK3VzaW5nIFdURjo6dG9TeXN0ZW1TaWduYWw7
Cit1c2luZyBXVEY6OmZyb21TeXN0ZW1TaWduYWw7Cit1c2luZyBXVEY6OlNpZ25hbEFjdGlvbjsK
K3VzaW5nIFdURjo6aW5zdGFsbFNpZ25hbEhhbmRsZXI7CisKKyNlbmRpZiAvLyBVU0UoUFRIUkVB
RFMpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
ZjU2MTc1OWJmNGNkNjQ2NWY3YjJjNmQzOGU1YzcyYTM0ZTQ3MDRiMC4uMGU4MjlhZWIyOWMyNzFh
MDAwNzZhODk5NDA3MmRhNTkyMzNlNGViMCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA0LTIwICBLZWl0aCBN
aWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzaWduYWxpbmcg
QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA5
NzYKKworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBBZGQgdGVz
dHMgZm9yIFRocmVhZE1lc3NhZ2VzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHJ1blRocmVh
ZE1lc3NhZ2VUZXN0KToKKyAgICAgICAgKFRFU1QpOgorCiAyMDE3LTA0LTIxICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVkdWNlIGNvcGll
cyBhbmQgYWxsb2NhdGlvbnMgaW4gU2hhcmVkQnVmZmVyOjphcHBlbmQKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggMGQ4NWIyYjQ4Y2Y1Y2M4MzVmODdkNjY5ODE1NmRjNzMxZTRkYjQ3NC4uNjM3
OGI2ZGEwMTJhNjc2ZjBmMTRhOGJlZGI4N2U1ZmVkMjYyMmFkOCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTE3NCw2ICsxNzQsNyBAQAogCQk1MkI4Q0Y5ODE1ODY4RDkxMDAyODEwNTMgLyog
U2V0RG9jdW1lbnRVUkkuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkI4Q0Y5NDE1ODY4Q0YwMDAyODEwNTMgLyogU2V0RG9jdW1lbnRV
UkkuaHRtbCAqLzsgfTsKIAkJNTJENjczRUUxQUZCMTI3MzAwRkExOUZFIC8qIFdLUGFnZUNvcHlT
ZXNzaW9uU3RhdGVXaXRoRmlsdGVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDY3M0VDMUFGQjEyNjgwMEZBMTlGRSAvKiBXS1BhZ2VDb3B5
U2Vzc2lvblN0YXRlV2l0aEZpbHRlcmluZy5jcHAgKi87IH07CiAJCTUyRTVDRTQ5MTREMjFFQUIw
MDNCMkJEOCAvKiBQYXJlbnRGcmFtZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJFNUNFNDgxNEQyMUVBQjAwM0IyQkQ4IC8qIFBhcmVu
dEZyYW1lX0J1bmRsZS5jcHAgKi87IH07CisJCTUzMTFCRDVFMUVBOTQ5MEUwMDUyNTI4MSAvKiBU
aHJlYWRNZXNzYWdlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzExQkQ1RDFFQTk0OTBEMDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZXMuY3BwICov
OyB9OwogCQk1MzFDMUQ4RTFERjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzFDMUQ4RDFERjhFRjcy
MDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgKi87IH07CiAJCTUzNjc3MDM0MUNDODAyMjgwMEQ0
MjVCMSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNjc3MDMzMUNDODAyMjgwMEQ0MjVCMSAvKiBX
ZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5tbSAqLzsgfTsKIAkJNTM2NzcwMzYxQ0M4MUI2MTAw
RDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM2NzcwMzUxQ0M4MTJGOTAw
RDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi87IH07CkBAIC0xMTE2
LDYgKzExMTcsNyBAQAogCQk1MkQ2NzNFQzFBRkIxMjY4MDBGQTE5RkUgLyogV0tQYWdlQ29weVNl
c3Npb25TdGF0ZVdpdGhGaWx0ZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0tQYWdlQ29weVNlc3Npb25TdGF0ZVdpdGhGaWx0ZXJpbmcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MkU1Q0U0NTE0RDIxRTlEMDAzQjJCRDggLyogUGFyZW50
RnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyZW50RnJh
bWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkU1Q0U0ODE0RDIxRUFCMDAz
QjJCRDggLyogUGFyZW50RnJhbWVfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBhcmVudEZyYW1lX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUzMTFCRDVEMUVBOTQ5MEQwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdlcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMUMxRDhEMURGOEVGNzIwMDZFOTc5RiAv
KiBMRUJEZWNvZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExF
QkRlY29kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzY3NzAzMzFDQzgw
MjI4MDBENDI1QjEgLyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24ubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM2NzcwMzUxQ0M4MTJGOTAwRDQyNUIx
IC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7
IHBhdGggPSBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1sOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjE3Nyw2ICsyMTc5LDcgQEAKIAkJCQk3Qzc0RDQyRDE4ODIyOEYzMDBF
NUVENTcgLyogU3RyaW5nVmlldy5jcHAgKi8sCiAJCQkJNTU5N0Y4MzQxRDk1OTZDODAwNjZCQzIx
IC8qIFN5bmNocm9uaXplZEZpeGVkUXVldWUuY3BwICovLAogCQkJCTkzMjlBQTI4MURFM0Y4MUUw
MDNBQkQwNyAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgKi8sCisJCQkJNTMxMUJENUQxRUE5NDkw
RDAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2VzLmNwcCAqLywKIAkJCQkwRjJDMjBCNzFEQ0Q1NDQ4
MDA1NDJEOUUgLyogVGltZS5jcHAgKi8sCiAJCQkJNUM1RTYzM0QxRDBCNjc5NDAwODVBMDI1IC8q
IFVuaXF1ZVJlZi5jcHAgKi8sCiAJCQkJN0NEMEQ1QUExRDU1MzRERTAwMENDOUUxIC8qIFZhcmlh
bnQuY3BwICovLApAQCAtMjY5Nyw2ICsyNzAwLDcgQEAKIAkJCQk3QzgzREVFMDFEMEE1OTBDMDBG
RUJDRjMgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MzFDMUQ4RTFERjhFRjcyMDA2RTk3OUYgLyogTEVCRGVjb2Rlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3QzgzREVFODFEMEE1OTBDMDBGRUJDRjMgLyogTGlzdEhhc2hTZXQuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNTMxMUJENUUxRUE5NDkwRTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2Vz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjFEMUQwQTU5MEMwMEZFQkNGMyAvKiBMb2Nr
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUVEMUQwQTU5MEMwMEZFQkNGMyAvKiBNYXRo
RXh0cmFzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUVGMUQwQTU5MEMwMEZFQkNGMyAv
KiBNRDUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9UaHJlYWRNZXNzYWdlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDlhMjc3M2YyMzQxYWM5YTM2ZDVi
NGQ0NTVhNzMzNmJkMGY1YjY0MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorI2lu
Y2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorCitzdGF0aWMg
dm9pZCBydW5UaHJlYWRNZXNzYWdlVGVzdCh1bnNpZ25lZCBudW1TZW5kZXJzLCB1bnNpZ25lZCBu
dW1NZXNzYWdlcykKK3sKKyAgICBib29sIHJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmcgPSB0cnVl
OworICAgIGRhdGFMb2dMbigic3RhcnRpbmciKTsKKyAgICBSZWZQdHI8VGhyZWFkPiByZWNlaXZl
clRocmVhZCA9IFRocmVhZDo6Y3JlYXRlKCJUaHJlYWRNZXNzYWdlIHJlY2VpdmVyIiwgWyZyZWNl
aXZlclNob3VsZEtlZXBSdW5uaW5nXSAoKSB7CisgICAgICAgIHdoaWxlIChyZWNlaXZlclNob3Vs
ZEtlZXBSdW5uaW5nKSB7IH0KKyAgICB9KTsKKyAgICBBU1NFUlRfVFJVRShyZWNlaXZlclRocmVh
ZCk7CisKKyAgICBWZWN0b3I8UmVmUHRyPFRocmVhZD4+IHNlbmRlclRocmVhZHMobnVtU2VuZGVy
cyk7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBtZXNzYWdlc1J1bihudW1TZW5kZXJzKTsKKyAgICBW
ZWN0b3I8dW5zaWduZWQ+IGhhbmRsZXJzUnVuKG51bVNlbmRlcnMpOworICAgIG1lc3NhZ2VzUnVu
LmZpbGwoMCk7CisgICAgaGFuZGxlcnNSdW4uZmlsbCgwKTsKKworICAgIGZvciAodW5zaWduZWQg
c2VuZGVySUQgPSAwOyBzZW5kZXJJRCA8IG51bVNlbmRlcnM7ICsrc2VuZGVySUQpIHsKKyAgICAg
ICAgc2VuZGVyVGhyZWFkc1tzZW5kZXJJRF0gPSBUaHJlYWQ6OmNyZWF0ZSgiVGhyZWFkTWVzc2Fn
ZSBzZW5kZXIiLCBbc2VuZGVySUQsIG51bU1lc3NhZ2VzLCByZWNlaXZlclRocmVhZCwgJm1lc3Nh
Z2VzUnVuLCAmaGFuZGxlcnNSdW5dICgpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1NZXNzYWdlczsgKytpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBzZW5kTWVzc2FnZSgqcmVjZWl2ZXJUaHJlYWQuZ2V0KCksIFtzZW5kZXJJRCwgJmhhbmRsZXJz
UnVuXSAoc2lnaW5mb190KiwgdWNvbnRleHRfdCopIHsKKyAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlcnNSdW5bc2VuZGVySURdKys7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgRVhQRUNUX1RSVUUocmVzdWx0ID09IFdURjo6TWVzc2FnZVN0YXR1czo6TWVzc2FnZVJhbik7
CisgICAgICAgICAgICAgICAgbWVzc2FnZXNSdW5bc2VuZGVySURdKys7CisgICAgICAgICAgICB9
CisgICAgICAgIH0pOworICAgICAgICBBU1NFUlRfVFJVRShzZW5kZXJUaHJlYWRzW3NlbmRlcklE
XSk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVNlbmRlcnM7ICsr
aSkKKyAgICAgICAgc2VuZGVyVGhyZWFkc1tpXS0+d2FpdEZvckNvbXBsZXRpb24oKTsKKworICAg
IHJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmcgPSBmYWxzZTsKKyAgICByZWNlaXZlclRocmVhZC0+
d2FpdEZvckNvbXBsZXRpb24oKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1T
ZW5kZXJzOyArK2kpIHsKKyAgICAgICAgRVhQRUNUX0VRKG51bU1lc3NhZ2VzLCBtZXNzYWdlc1J1
bltpXSk7CisgICAgICAgIEVYUEVDVF9FUShudW1NZXNzYWdlcywgaGFuZGxlcnNSdW5baV0pOwor
ICAgIH0KK30KKworVEVTVChUaHJlYWRNZXNzYWdlLCBCYXNpYykKK3sKKyAgICBydW5UaHJlYWRN
ZXNzYWdlVGVzdCgxLCAxKTsKKyAgICBydW5UaHJlYWRNZXNzYWdlVGVzdCgxLCAxMDApOworfQor
CitURVNUKFRocmVhZE1lc3NhZ2UsIE11bHRpcGxlU2VuZGVycykKK3sKKyAgICBydW5UaHJlYWRN
ZXNzYWdlVGVzdCgxMCwgMSk7CisgICAgcnVuVGhyZWFkTWVzc2FnZVRlc3QoMTAsIDEwMCk7Cisg
ICAgcnVuVGhyZWFkTWVzc2FnZVRlc3QoMTAsIDEwMDAwKTsKK30KKworY2xhc3MgUmVmbGVjdGVk
VGhyZWFkIDogcHVibGljIFRocmVhZCB7CitwdWJsaWM6CisgICAgdXNpbmcgVGhyZWFkOjptX211
dGV4OworICAgIHVzaW5nIFRocmVhZDo6bV9oYW5kbGU7CisgICAgdXNpbmcgVGhyZWFkOjpoYXNF
eGl0ZWQ7Cit9OworCitURVNUKFRocmVhZE1lc3NhZ2UsIFNpZ25hbHNXb3JrT25FeGl0KQorewor
ICAgIHN0YXRpYyBib29sIGhhbmRsZXJSYW4gPSBmYWxzZTsKKyAgICBpbnN0YWxsU2lnbmFsSGFu
ZGxlcihTaWduYWw6OlVzciwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCopIC0+IFNpZ25hbEFj
dGlvbiB7CisgICAgICAgIGRhdGFMb2dMbigiaGVyZSIpOworICAgICAgICBoYW5kbGVyUmFuID0g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsKKyAgICB9KTsKKwor
ICAgIGJvb2wgcmVjZWl2ZXJTaG91bGRLZWVwUnVubmluZyA9IHRydWU7CisgICAgUmVmUHRyPFRo
cmVhZD4gcmVjZWl2ZXJUaHJlYWQgPSAoVGhyZWFkOjpjcmVhdGUoIlRocmVhZE1lc3NhZ2UgcmVj
ZWl2ZXIiLAorICAgICAgICBbJnJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmddICgpIHsKKyAgICAg
ICAgICAgIHdoaWxlIChyZWNlaXZlclNob3VsZEtlZXBSdW5uaW5nKSB7IH0KKyAgICB9KSk7Cisg
ICAgQVNTRVJUX1RSVUUocmVjZWl2ZXJUaHJlYWQpOworCisgICAgYm9vbCBzaWduYWxGaXJlZDsK
KyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHN0YXRp
Y19jYXN0PFJlZmxlY3RlZFRocmVhZCo+KHJlY2VpdmVyVGhyZWFkLmdldCgpKS0+bV9tdXRleCk7
CisgICAgICAgIHJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKHN0YXRpY19jYXN0PFJlZmxlY3RlZFRocmVhZCo+KHJlY2VpdmVyVGhyZWFkLmdl
dCgpKS0+aGFzRXhpdGVkKCkpOworICAgICAgICBzbGVlcCgxKTsKKyAgICAgICAgc2lnbmFsRmly
ZWQgPSAhcHRocmVhZF9raWxsKHN0YXRpY19jYXN0PFJlZmxlY3RlZFRocmVhZCo+KHJlY2VpdmVy
VGhyZWFkLmdldCgpKS0+bV9oYW5kbGUsIHRvU3lzdGVtU2lnbmFsKFNpZ25hbDo6VXNyKSk7Cisg
ICAgfQorCisgICAgcmVjZWl2ZXJUaHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7CisgICAgRVhQ
RUNUX1RSVUUoaGFuZGxlclJhbiB8fCAhc2lnbmFsRmlyZWQpOworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307755</attachid>
            <date>2017-04-21 11:20:39 -0700</date>
            <delta_ts>2017-04-21 13:31:27 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170976-20170421142037.patch</filename>
            <type>text/plain</type>
            <size>62168</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NTE3ZjQ2Y2JiMzdhZjUwMjQ4YmI0YzIxMDYyNTVkOWUwYmIyNzI2Li5lMDk2YzBjNDkyZGRjNDlh
ZmNhZmI1OGJlMTkyYTdhNGViNjFlZDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxNy0wNC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgc2lnbmFsaW5nIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RmlsaXAgUGl6bG8uCisKKyAgICAgICAgVXBkYXRlIHZhcmlvdXMgdXNlcyBvZiBzaWdhY3Rpb24g
dG8gdXNlIHRoZSBuZXcgc2lnbmFsaW5nIEFQSS4KKyAgICAgICAgQWxzbyBzd2l0Y2ggVk1UcmFw
cyB0byB1c2UgdGhlIHRocmVhZCBtZXNzYWdlIHN5c3RlbSBpbnN0ZWFkIG9mCisgICAgICAgIHJv
bGxpbmcgaXQncyBvd24uCisKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgor
ICAgICAgICAoSlNDOjppc0pJVFBDKToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgor
ICAgICAgICAoSlNDOjppbnN0YWxsU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChKU0M6OlZNVHJh
cHM6OlZNVHJhcHMpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQp
OgorICAgICAgICAoSlNDOjpoYW5kbGVTaWd1c3IxKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
aGFuZGxlU2lndHJhcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Omluc3RhbGxTaWduYWxIYW5k
bGVycyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmg6CisgICAgICAgICog
dG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA6CisgICAgICAgIChKU0M6Omluc3RhbGxDcmFz
aEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpoYW5kbGVDcmFzaCk6IERlbGV0ZWQuCisgICAgICAg
ICogd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
dHJhcEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjplbmFibGVGYXN0TWVtb3J5KToKKwog
MjAxNy0wNC0yMCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAg
ICAgICAgW2NtYWtlXSBEZWZpbmUgRk9SV0FSRElOR19IRUFERVJTX0RJUiBpbiBXZWJLaXRGUyBh
bmQgdXNlIGl0IGV2ZXJ5d2hlcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggY2RkMjc4MTcwNDJkNzFhNTkxZTU1OGEwMjljZGUz
ZjMxZjlkNDVmOS4uM2I1YjgxODIzZmZlYmU0NzkzOTVlOTVjMWNhYTVmYmY3NWViYjQ4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw3NiBAQAorMjAxNy0wNC0yMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVy
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc2lnbmFsaW5nIEFQSQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTc2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgYnVuY2ggb2Yg
bmV3IGZ1bmN0aW9uYWxpdHkgdG8gV1RGLiBGaXJzdCwgaXQgYWRkCisgICAgICAgIGEgbmV3IGRh
dGEgc3RydWN0dXJlIG9mIGEgbG9ja2xlc3MgYmFnLiBUaGUgTG9ja2xlc3NCYWcgY2xhc3MgY2Fu
CisgICAgICAgIGJlIHVzZWQgYXMgZWl0aGVyIGEgbXVsdGktd3JpdGVyIG11bHRpLXJlYWRlciBs
b2NrbGVzcyBiYWcgb3IgYQorICAgICAgICBtdWx0aS13cml0ZXIgc2luZ2xlIGNvbnN1bWVyIGxv
Y2tsZXNzIGJhZy4KKworICAgICAgICBOZXh0LCB0aGlzIHBhdGNoIGFkZHMgYW4gYWJzdHJhY3Rp
b24gYXJvdW5kIHNpZ2FjdGlvbiBpbiBXVEYuCisgICAgICAgIEJhc2ljYWxseSwgeW91IGNhbiBh
ZGQgYSBoYW5kbGVyLCB3aGljaCBjYW4gYmUgYW4gYXJiaXRyYXJ5CisgICAgICAgIGxhbWJkYS4g
QWx0aG91Z2ggaXQgc2hvdWxkIHN0aWxsIGJlIHNhZmUgZm9yIHRoZSBzaWduYWwgeW91IGFyZQor
ICAgICAgICBoYW5kbGluZy4gIHRoZSBzaWduYWwgaGFuZGxlciBtYW5hZ2VyIHdpbGwgdGhlbiBk
byBhbGwgdGhlCisgICAgICAgIGFwcHJvcHJpYXRlIGhhbmRsaW5nIG9mIGNoYWluaW5nOgorCisg
ICAgICAgIEluIHRoZSBTSUdVU1IgY2FzZSB3ZSBhbHdheXMgZm9yd2FyZCB0aGUgc2lnbmFsIHRv
IGFueSBvdGhlcgorICAgICAgICBub24tZGVmYXVsdCBoYW5kbGVyIGluc3RhbGxlZCBiZWZvcmUg
dXMuIFdlIG5lZWQgdG8gZG8gdGhpcywKKyAgICAgICAgb3RoZXJ3aXNlLCBzaW5jZSBpdCdzIG5v
dCBwb3NzaWJsZSB0byB0ZWxsIGlmIGEgU0lHVVNSIHdhcworICAgICAgICBpbnRlbmRlZCBleGx1
c2l2ZWx5IGZvciBvdXIgaGFuZGxlcnMuIFNpZ25hbCBoYW5kbGVycyBkb24ndCByZWNvcmQKKyAg
ICAgICAgaG93IG1hbnkgdGltZXMgdGhleSB3ZXJlIHNlbnQgb25seSB0aGF0IHRoZXJlIGlzIGF0
IGxlYXN0IG9uZQorICAgICAgICB1bmhhbmRsZWQgc2lnbmFsLgorCisgICAgICAgIEluIHRoZSBm
YXVsdGluZyBjYXNlcyB3ZSByZXF1aXJlIHRoYXQgZXZlcnkgaGFuZGxlIGJlIGFibGUgdG8KKyAg
ICAgICAgcmVjb2duaXNlIGEgZmF1bHQgdGhleSBpbnN0YWxsZWQsIHZzIGNyYXNoZXMuIElmIG5v
bmUgb2Ygb3VyCisgICAgICAgIGhhbmRsZXJzIGNsYWltIHRvIGhhdmUgaGFuZGxlZCB0aGUgZmF1
bHQgd2Ugd2lsbCBmb3J3YXJkIHRoZQorICAgICAgICBmYXVsdC4gSWYgYSBoYW5kbGVyIHdhcyBp
bnN0YWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBmYXVsdCBoYW5kbGVyCisgICAgICAgIHdlIHNpbXBs
eSBjYWxsIHRoYXQgaGFuZGxlciBhbmQgcmVseSBvbiB0aGVtIHRvIHRha2UgdGhlCisgICAgICAg
IGFwcHJvcHJpYXRlIGFjdGlvbi4gSWYgbm8gaGFuZGxlciB3YXMgaW5zdGFsbGVkIGJlZm9yZSBv
dXIgZmlyc3QKKyAgICAgICAgaGFuZGxlciB3ZSByZXN0b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIg
YW5kIGFsbG93IHRoZSBmYXVsdCB0bworICAgICAgICBoYXBwZW4gYWdhaW4uCisKKyAgICAgICAg
RmluYWxseSwgdGhpcyBwYXRjaCBhZGRzIGEgc2lnbmFsIGJhc2VkIG1lc3NhZ2luZyBzeXN0ZW0u
ICBUaGlzCisgICAgICAgIHN5c3RlbSBhbGxvd3MgdGhlIHVzZXIgdG8gcnVuIGFuIGFyYml0cmFy
eSBsYW1iZGEgZnJvbSB0aGUgU0lHVVNSMgorICAgICAgICBzaWduYWwgaGFuZGxlciBvZiBhbnkg
dGFyZ2V0IFdURjo6VGhyZWFkLiBUaGlzIGlzIGFscmVhZHkgaW4gdXNlCisgICAgICAgIGZvciB0
aGUgVk1UcmFwcyBBUEkgd2hpY2ggYWxsb3dzIHVzIHRvIGtpbGwgcm9ndWUgVk1zIGJ5IHNlbmRp
bmcKKyAgICAgICAgdGhlIFZNJ3MgcnVubmluZyBXVEY6OlRocmVhZCBhIFNJR1VTUiBhbmQgcmVx
dWVzdGluZyBpdCBqZXRpc29uCisgICAgICAgIGFsbCBvcHRpbWl6ZWQgY29kZSBhbmQgdGhyb3cg
YW4gdW5jYXRjaGFibGUgZXhjZXB0aW9uIGZyb20gYWxsCisgICAgICAgIGZ1bmN0aW9uIGVudHJp
ZXMvbG9vcCBiYWNrZWRnZXMuICBJbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGFsc28gdXNlCisgICAg
ICAgIHRoaXMgQVBJIGZvciBXYXNtIHRvIHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZXMgaW4g
Y3VycmVudGx5CisgICAgICAgIGV4ZWN1dGluZyBXYXNtIHRocmVhZHMuCisKKyAgICAgICAgKiBX
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgor
ICAgICAgICAoV1RGOjpBdG9taWM6OkF0b21pYyk6CisgICAgICAgICogd3RmL0xvY2tsZXNzQmFn
Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6TG9ja2xlc3NCYWcpOgorICAg
ICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6YWRkKToKKyAgICAgICAgKFdURjo6TG9ja2xlc3NCYWc6
Oml0ZXJhdGUpOgorICAgICAgICAoV1RGOjpMb2NrbGVzc0JhZzo6Y29uc3VtZUFsbCk6CisgICAg
ICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6VGhyZWFk
TWVzc2FnZURhdGE6OlRocmVhZE1lc3NhZ2VEYXRhKToKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6
ZVRocmVhZE1lc3NhZ2VzKToKKyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2VTY29wZWQpOgorICAg
ICAgICAqIHd0Zi9UaHJlYWRNZXNzYWdlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpzZW5kTWVz
c2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5jcHA6CisgICAgICAgIChXVEY6OmluaXRp
YWxpemVUaHJlYWRpbmcpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjp0aHJlYWRNZXNzYWdlcyk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1B0aHJl
YWRzLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpjdXJyZW50KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjpzaWduYWwp
OgorICAgICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6anNjU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChXVEY6Omluc3RhbGxTaWduYWxIYW5kbGVy
KToKKyAgICAgICAgKiB3dGYvdGhyZWFkcy9TaWduYWxzLmg6IEFkZGVkLgorICAgICAgICAoV1RG
Ojp0b1N5c3RlbVNpZ25hbCk6CisgICAgICAgIChXVEY6OmZyb21TeXN0ZW1TaWduYWwpOgorCiAy
MDE3LTA0LTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSBu
b3RGb3VuZCBpbnRvIGl0cyBvd24gZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAppbmRleCA2ZWU2ZmUyODE4N2I5YWE0OWRlYTNjMjM3MWUz
Y2NiYzQzNDcxMDExLi4xMGUxNDQyYWUxMjliYmU0Y2Y0NTI2MThjYmM5ZmM1ZTUzOTMwNDhjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaApA
QCAtODEsNiArODEsMTIgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBleGVjdXRhYmxlUG9vbFJlc2Vy
dmF0aW9uRnJhY3Rpb24gPSAwLjI1OwogZXh0ZXJuIEpTX0VYUE9SVERBVEEgdWludHB0cl90IHN0
YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sOwogZXh0ZXJuIEpTX0VYUE9SVERBVEEgdWlu
dHB0cl90IGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbDsKIAoraW5saW5lIGJvb2wgaXNK
SVRQQyh2b2lkKiBwYykKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3Rh
cnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpIDw9IHBjCisgICAgICAgICYmIHBjIDwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKTsKK30K
KwogdHlwZWRlZiB2b2lkICgqSklUV3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24pKG9mZl90LCBj
b25zdCB2b2lkKiwgc2l6ZV90KTsKIGV4dGVybiBKU19FWFBPUlREQVRBIEpJVFdyaXRlU2VwYXJh
dGVIZWFwc0Z1bmN0aW9uIGppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IGU2Mjg1YTMwYzIyMmE1YWNh
ZGMzOGYwYzliMWI3YWU3YTQ3N2U3ODUuLjkwNWU2YzllNzdhNzljMzAwYmI5MWNlZTJjZGM3OTIx
ODQ4ODg5Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJh
cHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBA
IC00MCwxMCArNDAsOCBAQAogI2luY2x1ZGUgIlZNSW5zcGVjdG9yLmgiCiAjaW5jbHVkZSAiV2F0
Y2hkb2cuaCIKICNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+Ci0KLSNpZiBPUyhEQVJXSU4pCi0j
aW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvVGhyZWFkTWVzc2FnZS5o
PgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTU0LDkgKzUyLDYgQEAgQUxXQVlTX0lOTElORSBWTSYgVk1UcmFwczo6dm0oKSBjb25zdAog
CiAjaWYgRU5BQkxFKFNJR05BTF9CQVNFRF9WTV9UUkFQUykKIAotc3RydWN0IHNpZ2FjdGlvbiBv
cmlnaW5hbFNpZ3VzcjFBY3Rpb247Ci1zdHJ1Y3Qgc2lnYWN0aW9uIG9yaWdpbmFsU2lndHJhcEFj
dGlvbjsKLQogc3RydWN0IFNpZ25hbENvbnRleHQgewogICAgIFNpZ25hbENvbnRleHQobWNvbnRl
eHRfdCYgbWNvbnRleHQpCiAgICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCkBAIC0xMzIsODcg
KzEyNywzNSBAQCBzdGF0aWMgRXhwZWN0ZWQ8Vk1BbmRTdGFja0JvdW5kcywgVk1UcmFwczo6RXJy
b3I+IGZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKFNpZwogICAgIHJldHVybiBWTUFuZFN0YWNr
Qm91bmRzIHsgYWN0aXZlVk0sIHN0YWNrQm91bmRzIH07CiB9CiAKLXN0YXRpYyB2b2lkIGhhbmRs
ZVNpZ3VzcjEoaW50IHNpZ25hbE51bWJlciwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1YXApCitz
dGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcigpCiB7Ci0gICAgU2lnbmFsQ29udGV4dCBj
b250ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dCk7Ci0gICAg
YXV0byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMo
Y29udGV4dCk7Ci0gICAgaWYgKGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMpIHsKKyAgICBpbnN0YWxs
U2lnbmFsSGFuZGxlcihTaWduYWw6OlRyYXAsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVh
cCkgLT4gU2lnbmFsQWN0aW9uIHsKKyAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRp
Y19jYXN0PHVjb250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dCk7CisKKyAgICAgICAgaWYgKCFp
c0pJVFBDKGNvbnRleHQudHJhcFBDKSkKKyAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246
Ok5vdEhhbmRsZWQ7CisKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY3VycmVudGx5IGVhdHMgYWxs
IHRyYXBzIGluY2x1ZGluZyBqaXQgYXNzZXJ0cyB3ZSBzaG91bGQgbWFrZSBzdXJlIHRoaXMKKyAg
ICAgICAgLy8gYWx3YXlzIHdvcmtzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxMDM5CisgICAgICAgIGF1dG8gYWN0aXZlVk1BbmRTdGFja0JvdW5kcyA9IGZpbmRB
Y3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRleHQpOworICAgICAgICBpZiAoIWFjdGl2ZVZNQW5k
U3RhY2tCb3VuZHMpCisgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOyAv
LyBMZXQgdGhlIFNpZ25hbFNlbmRlciB0cnkgYWdhaW4gbGF0ZXIuCisKICAgICAgICAgVk0qIHZt
ID0gYWN0aXZlVk1BbmRTdGFja0JvdW5kcy52YWx1ZSgpLnZtOwogICAgICAgICBpZiAodm0pIHsK
LSAgICAgICAgICAgIFN0YWNrQm91bmRzIHN0YWNrQm91bmRzID0gYWN0aXZlVk1BbmRTdGFja0Jv
dW5kcy52YWx1ZSgpLnN0YWNrQm91bmRzOwogICAgICAgICAgICAgVk1UcmFwcyYgdHJhcHMgPSB2
bS0+dHJhcHMoKTsKLSAgICAgICAgICAgIGlmICh0cmFwcy5uZWVkVHJhcEhhbmRsaW5nKCkpCi0g
ICAgICAgICAgICAgICAgdHJhcHMudHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyhjb250ZXh0LCBz
dGFja0JvdW5kcyk7CisgICAgICAgICAgICBpZiAoIXRyYXBzLm5lZWRUcmFwSGFuZGxpbmcoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOyAvLyBUaGUgcG9s
bGluZyBjb2RlIGJlYXQgdXMgdG8gaGFuZGxpbmcgdGhlIHRyYXAgYWxyZWFkeS4KKworICAgICAg
ICAgICAgYXV0byBleHBlY3RlZFN1Y2Nlc3MgPSB0cmFwcy50cnlKZXR0aXNvbkNvZGVCbG9ja3NP
blN0YWNrKGNvbnRleHQpOworICAgICAgICAgICAgaWYgKCFleHBlY3RlZFN1Y2Nlc3MpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsgLy8gTGV0IHRoZSBTaWdu
YWxTZW5kZXIgdHJ5IGFnYWluIGxhdGVyLgorICAgICAgICAgICAgaWYgKGV4cGVjdGVkU3VjY2Vz
cy52YWx1ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7
IC8vIFdlJ3ZlIHN1Y2Nlc3MgamV0dGlzb24gdGhlIGNvZGVCbG9ja3MuCiAgICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBhdXRvIG9yaWdpbmFsQWN0aW9uID0gb3JpZ2luYWxTaWd1c3IxQWN0aW9uLnNh
X3NpZ2FjdGlvbjsKLSAgICBpZiAob3JpZ2luYWxBY3Rpb24pCi0gICAgICAgIG9yaWdpbmFsQWN0
aW9uKHNpZ25hbE51bWJlciwgaW5mbywgdWFwKTsKLX0KLQotc3RhdGljIHZvaWQgaGFuZGxlU2ln
dHJhcChpbnQgc2lnbmFsTnVtYmVyLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIHVhcCkKLXsKLSAg
ICBTaWduYWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVj
X21jb250ZXh0KTsKLSAgICBhdXRvIGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMgPSBmaW5kQWN0aXZl
Vk1BbmRTdGFja0JvdW5kcyhjb250ZXh0KTsKLSAgICBpZiAoIWFjdGl2ZVZNQW5kU3RhY2tCb3Vu
ZHMpCi0gICAgICAgIHJldHVybjsgLy8gTGV0IHRoZSBTaWduYWxTZW5kZXIgdHJ5IGFnYWluIGxh
dGVyLgogCi0gICAgVk0qIHZtID0gYWN0aXZlVk1BbmRTdGFja0JvdW5kcy52YWx1ZSgpLnZtOwot
ICAgIGlmICh2bSkgewotICAgICAgICBWTVRyYXBzJiB0cmFwcyA9IHZtLT50cmFwcygpOwotICAg
ICAgICBpZiAoIXRyYXBzLm5lZWRUcmFwSGFuZGxpbmcoKSkKLSAgICAgICAgICAgIHJldHVybjsg
Ly8gVGhlIHBvbGxpbmcgY29kZSBiZWF0IHVzIHRvIGhhbmRsaW5nIHRoZSB0cmFwIGFscmVhZHku
Ci0KLSAgICAgICAgYXV0byBleHBlY3RlZFN1Y2Nlc3MgPSB0cmFwcy50cnlKZXR0aXNvbkNvZGVC
bG9ja3NPblN0YWNrKGNvbnRleHQpOwotICAgICAgICBpZiAoIWV4cGVjdGVkU3VjY2VzcykKLSAg
ICAgICAgICAgIHJldHVybjsgLy8gTGV0IHRoZSBTaWduYWxTZW5kZXIgdHJ5IGFnYWluIGxhdGVy
LgotICAgICAgICBpZiAoZXhwZWN0ZWRTdWNjZXNzLnZhbHVlKCkpCi0gICAgICAgICAgICByZXR1
cm47IC8vIFdlJ3ZlIHN1Y2Nlc3MgamV0dGlzb24gdGhlIGNvZGVCbG9ja3MuCi0gICAgfQotCi0g
ICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHRoZW4gdGhpcyBTSUdUUkFQIGlzIG5vdCBkdWUgdG8gYSBW
TVRyYXAuIExldCdzIGRvIHRoZSBkZWZhdWx0IGFjdGlvbi4KLSAgICBhdXRvIG9yaWdpbmFsQWN0
aW9uID0gb3JpZ2luYWxTaWd0cmFwQWN0aW9uLnNhX3NpZ2FjdGlvbjsKLSAgICBpZiAob3JpZ2lu
YWxBY3Rpb24pIHsKLSAgICAgICAgLy8gSXQgaXMgYWx3YXlzIHNhZmUgdG8ganVzdCBpbnZva2Ug
dGhlIG9yaWdpbmFsIGhhbmRsZXIgdXNpbmcgdGhlIHNhX3NpZ2FjdGlvbiBmb3JtCi0gICAgICAg
IC8vIHdpdGhvdXQgY2hlY2tpbmcgZm9yIHRoZSBTQV9TSUdJTkZPIGZsYWcuIElmIHRoZSBvcmln
aW5hbCBoYW5kbGVyIGlzIG9mIHRoZQotICAgICAgICAvLyBzYV9oYW5kbGVyIGZvcm0sIGl0IHdp
bGwganVzdCBpZ25vcmUgdGhlIDJuZCBhbmQgM3JkIGFyZ3VtZW50cyBzaW5jZSBzYV9oYW5kbGVy
IGlzIGEKLSAgICAgICAgLy8gc3Vic2V0IG9mIHNhX3NpZ2FjdGlvbi4gVGhpcyBpcyB3aGF0IHRo
ZSBtYW4gcGFnZXMgc2F5cyB0aGUgT1MgZG9lcyBhbnl3YXkuCi0gICAgICAgIG9yaWdpbmFsQWN0
aW9uKHNpZ25hbE51bWJlciwgaW5mbywgdWFwKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUHJlLWVt
cHRpdmVseSByZXN0b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIgYnV0IHdlIG1heSByb2xsIGl0IGJh
Y2sgYmVsb3cuCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBjdXJyZW50QWN0aW9uOwotICAgIHN0cnVj
dCBzaWdhY3Rpb24gZGVmYXVsdEFjdGlvbjsKLSAgICBkZWZhdWx0QWN0aW9uLnNhX2hhbmRsZXIg
PSBTSUdfREZMOwotICAgIHNpZ2ZpbGxzZXQoJmRlZmF1bHRBY3Rpb24uc2FfbWFzayk7Ci0gICAg
ZGVmYXVsdEFjdGlvbi5zYV9mbGFncyA9IDA7Ci0gICAgc2lnYWN0aW9uKFNJR1RSQVAsICZkZWZh
dWx0QWN0aW9uLCAmY3VycmVudEFjdGlvbik7Ci0gICAgCi0gICAgaWYgKGN1cnJlbnRBY3Rpb24u
c2Ffc2lnYWN0aW9uICE9IGhhbmRsZVNpZ3RyYXApIHsKLSAgICAgICAgLy8gVGhpcyBtZWFucyB0
aGF0IHRoZXJlJ3MgYSBjbGllbnQgaGFuZGxlciBpbnN0YWxsZWQgYWZ0ZXIgdXMuIFRoaXMgYWxz
byBtZWFucwotICAgICAgICAvLyB0aGF0IHRoZSBjbGllbnQgaGFuZGxlciB0aGlua3MgaXQgd2Fz
IGFibGUgdG8gcmVjb3ZlciBmcm9tIHRoZSBTSUdUUkFQLCBhbmQKLSAgICAgICAgLy8gZGlkIG5v
dCB1bmluc3RhbGwgaXRzZWxmLiBXZSBjYW4ndCBhcmd1ZSB3aXRoIHRoaXMgYmVjYXVzZSB0aGUg
c2lnbmFsIGlzbid0Ci0gICAgICAgIC8vIGtub3duIHRvIGJlIGZyb20gYSBWTVRyYXBzIHNpZ25h
bC4gSGVuY2UsIHJlc3RvcmUgdGhlIGNsaWVudCBoYW5kbGVyCi0gICAgICAgIC8vIGFuZCBrZWVw
IGdvaW5nLgotICAgICAgICBzaWdhY3Rpb24oU0lHVFJBUCwgJmN1cnJlbnRBY3Rpb24sIG51bGxw
dHIpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgaW5zdGFsbFNpZ25hbEhhbmRsZXJzKCkKLXsK
LSAgICB0eXBlZGVmIHZvaWQgKCogU2lnYWN0aW9uSGFuZGxlcikoaW50LCBzaWdpbmZvX3QgKiwg
dm9pZCAqKTsKLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLQotICAgIGFjdGlvbi5zYV9z
aWdhY3Rpb24gPSByZWludGVycHJldF9jYXN0PFNpZ2FjdGlvbkhhbmRsZXI+KGhhbmRsZVNpZ3Vz
cjEpOwotICAgIHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICBhY3Rpb24uc2FfZmxh
Z3MgPSBTQV9TSUdJTkZPOwotICAgIHNpZ2FjdGlvbihTSUdVU1IxLCAmYWN0aW9uLCAmb3JpZ2lu
YWxTaWd1c3IxQWN0aW9uKTsKLQotICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSByZWludGVycHJl
dF9jYXN0PFNpZ2FjdGlvbkhhbmRsZXI+KGhhbmRsZVNpZ3RyYXApOwotICAgIHNpZ2ZpbGxzZXQo
JmFjdGlvbi5zYV9tYXNrKTsKLSAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOwotICAg
IHNpZ2FjdGlvbihTSUdUUkFQLCAmYWN0aW9uLCAmb3JpZ2luYWxTaWd0cmFwQWN0aW9uKTsKKyAg
ICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsKKyAgICB9KTsKIH0KIAogQUxXQVlT
X0lOTElORSBzdGF0aWMgQ2FsbEZyYW1lKiBzYW5pdGl6ZWRUb3BDYWxsRnJhbWUoQ2FsbEZyYW1l
KiB0b3BDYWxsRnJhbWUpCkBAIC00MDAsNyArMzQzLDcgQEAgVk1UcmFwczo6Vk1UcmFwcygpCiAg
ICAgaWYgKCFPcHRpb25zOjp1c2VQb2xsaW5nVHJhcHMoKSkgewogICAgICAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgb25jZTsKICAgICAgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgW10gewotICAg
ICAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXJzKCk7CisgICAgICAgICAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcigpOwogICAgICAgICB9KTsKICAgICB9CiAjZW5kaWYKQEAgLTQ2MCw3ICs0MDMs
MTkgQEAgdm9pZCBWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQoKQogICAgICAgICAgICAgVk0m
IHZtID0gKm1fdm07CiAgICAgICAgICAgICBhdXRvIG9wdGlvbmFsT3duZXJUaHJlYWQgPSB2bS5v
d25lclRocmVhZCgpOwogICAgICAgICAgICAgaWYgKG9wdGlvbmFsT3duZXJUaHJlYWQpIHsKLSAg
ICAgICAgICAgICAgICBvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCktPnNpZ25hbChTSUdVU1Ix
KTsKKyAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZSgqb3B0aW9uYWxPd25lclRocmVhZC52YWx1
ZSgpLmdldCgpLCBbXSAoc2lnaW5mb190KiwgdWNvbnRleHRfdCogdWNvbnRleHQpIC0+IHZvaWQg
eworICAgICAgICAgICAgICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQodWNvbnRleHQtPnVj
X21jb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91
bmRzID0gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoY29udGV4dCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChhY3RpdmVWTUFuZFN0YWNrQm91bmRzKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBWTSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodm0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
dGFja0JvdW5kcyBzdGFja0JvdW5kcyA9IGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMudmFsdWUoKS5z
dGFja0JvdW5kczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWTVRyYXBzJiB0cmFwcyA9
IHZtLT50cmFwcygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFwcy5uZWVk
VHJhcEhhbmRsaW5nKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYXBzLnRy
eUluc3RhbGxUcmFwQnJlYWtwb2ludHMoY29udGV4dCwgc3RhY2tCb3VuZHMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuaAppbmRleCBmZGJhMmFmZDgzMWYwMGRiZTJiYjU1NmFi
YTEzYzVhZGJkODEwYjE2Li41NDI1YjE4ODMzMjdmYWQ4M2VjNjAyNDI2YWU5NjgxMzVmY2IwNTgx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5oCkBAIC00Miw3ICs0Miw4
IEBAIGNsYXNzIFZNVHJhcHMgewogcHVibGljOgogICAgIGVudW0gY2xhc3MgRXJyb3IgewogICAg
ICAgICBOb25lLAotICAgICAgICBMb2NrVW5hdmFpbGFibGUKKyAgICAgICAgTG9ja1VuYXZhaWxh
YmxlLAorICAgICAgICBOb3RKSVRDb2RlCiAgICAgfTsKIAogICAgIGVudW0gRXZlbnRUeXBlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5
emVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVy
LmNwcAppbmRleCAyNjVjNjYxNTVkMWFkYjhkYTk4YmQ3ODk0MjAyOTI5ODNkNjEyNzNkLi5lYjg2
ZWU0MGMyZTUwMjNjYjBlNmZhMTE4NTM2MzZhNDFiYWQyYzZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCkBAIC0zNyw5ICsz
Nyw3IEBACiAjaW5jbHVkZSAiQTY0RE9wY29kZS5oIgogI2VuZGlmCiAKLSNpZiBIQVZFKFNJR05B
TF9IKQotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2VuZGlmCisjaW5jbHVkZSA8d3RmL3RocmVhZHMv
U2lnbmFscy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTQxLDYwICsxMzksMTkgQEAgc3Ry
dWN0IFNpZ25hbENvbnRleHQgewogICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKIH07CiAKLXN0cnVj
dCBzaWdhY3Rpb24gb3JpZ2luYWxTaWdJbGxBY3Rpb247Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZUNy
YXNoKGludCBzaWduYWxOdW1iZXIsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogdWFwKQotewotICAg
IFNpZ25hbENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNf
bWNvbnRleHQpOwotICAgIFNpZ2lsbENyYXNoQW5hbHl6ZXImIGFuYWx5emVyID0gU2lnaWxsQ3Jh
c2hBbmFseXplcjo6aW5zdGFuY2UoKTsKLSAgICBhdXRvIGNyYXNoU291cmNlID0gYW5hbHl6ZXIu
YW5hbHl6ZShjb250ZXh0KTsKLQotICAgIGF1dG8gb3JpZ2luYWxBY3Rpb24gPSBvcmlnaW5hbFNp
Z0lsbEFjdGlvbi5zYV9zaWdhY3Rpb247Ci0gICAgaWYgKG9yaWdpbmFsQWN0aW9uKSB7Ci0gICAg
ICAgIC8vIEl0IGlzIGFsd2F5cyBzYWZlIHRvIGp1c3QgaW52b2tlIHRoZSBvcmlnaW5hbCBoYW5k
bGVyIHVzaW5nIHRoZSBzYV9zaWdhY3Rpb24gZm9ybQotICAgICAgICAvLyB3aXRob3V0IGNoZWNr
aW5nIGZvciB0aGUgU0FfU0lHSU5GTyBmbGFnLiBJZiB0aGUgb3JpZ2luYWwgaGFuZGxlciBpcyBv
ZiB0aGUKLSAgICAgICAgLy8gc2FfaGFuZGxlciBmb3JtLCBpdCB3aWxsIGp1c3QgaWdub3JlIHRo
ZSAybmQgYW5kIDNyZCBhcmd1bWVudHMgc2luY2Ugc2FfaGFuZGxlciBpcyBhCi0gICAgICAgIC8v
IHN1YnNldCBvZiBzYV9zaWdhY3Rpb24uIFRoaXMgaXMgd2hhdCB0aGUgbWFuIHBhZ2VzIHNheXMg
dGhlIE9TIGRvZXMgYW55d2F5LgotICAgICAgICBvcmlnaW5hbEFjdGlvbihzaWduYWxOdW1iZXIs
IGluZm8sIHVhcCk7Ci0gICAgfQotCi0gICAgaWYgKGNyYXNoU291cmNlID09IFNpZ2lsbENyYXNo
QW5hbHl6ZXI6OkNyYXNoU291cmNlOjpKYXZhU2NyaXB0Q29yZSkgewotICAgICAgICAvLyBSZXN0
b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIgc28gdGhhdCB3ZSBjYW4gZ2V0IGEgY29yZSBkdW1wLgot
ICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGRlZmF1bHRBY3Rpb247Ci0gICAgICAgIGRlZmF1bHRB
Y3Rpb24uc2FfaGFuZGxlciA9IFNJR19ERkw7Ci0gICAgICAgIHNpZ2ZpbGxzZXQoJmRlZmF1bHRB
Y3Rpb24uc2FfbWFzayk7Ci0gICAgICAgIGRlZmF1bHRBY3Rpb24uc2FfZmxhZ3MgPSAwOwotICAg
ICAgICBzaWdhY3Rpb24oU0lHSUxMLCAmZGVmYXVsdEFjdGlvbiwgbnVsbHB0cik7Ci0gICAgfSBl
bHNlIGlmICghb3JpZ2luYWxBY3Rpb24pIHsKLSAgICAgICAgLy8gUHJlLWVtcHRpdmVseSByZXN0
b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIgYnV0IHdlIG1heSByb2xsIGl0IGJhY2sgYmVsb3cuCi0g
ICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gY3VycmVudEFjdGlvbjsKLSAgICAgICAgc3RydWN0IHNp
Z2FjdGlvbiBkZWZhdWx0QWN0aW9uOwotICAgICAgICBkZWZhdWx0QWN0aW9uLnNhX2hhbmRsZXIg
PSBTSUdfREZMOwotICAgICAgICBzaWdmaWxsc2V0KCZkZWZhdWx0QWN0aW9uLnNhX21hc2spOwot
ICAgICAgICBkZWZhdWx0QWN0aW9uLnNhX2ZsYWdzID0gMDsKLSAgICAgICAgc2lnYWN0aW9uKFNJ
R0lMTCwgJmRlZmF1bHRBY3Rpb24sICZjdXJyZW50QWN0aW9uKTsKLQotICAgICAgICBpZiAoY3Vy
cmVudEFjdGlvbi5zYV9zaWdhY3Rpb24gIT0gaGFuZGxlQ3Jhc2gpIHsKLSAgICAgICAgICAgIC8v
IFRoaXMgbWVhbnMgdGhhdCB0aGVyZSdzIGEgY2xpZW50IGhhbmRsZXIgaW5zdGFsbGVkIGFmdGVy
IHVzLiBUaGlzIGFsc28gbWVhbnMKLSAgICAgICAgICAgIC8vIHRoYXQgdGhlIGNsaWVudCBoYW5k
bGVyIHRoaW5rcyBpdCB3YXMgYWJsZSB0byByZWNvdmVyIGZyb20gdGhlIFNJR0lMTCwgYW5kCi0g
ICAgICAgICAgICAvLyBkaWQgbm90IHVuaW5zdGFsbCBpdHNlbGYuIFdlIGNhbid0IGFyZ3VlIHdp
dGggdGhpcyBiZWNhdXNlIHRoZSBjcmFzaCBpc24ndAotICAgICAgICAgICAgLy8ga25vd24gdG8g
YmUgZnJvbSBhIEphdmFTY3JpcHRDb3JlIHNvdXJjZS4gSGVuY2UsIHJlc3RvcmUgdGhlIGNsaWVu
dCBoYW5kbGVyCi0gICAgICAgICAgICAvLyBhbmQga2VlcCBnb2luZy4KLSAgICAgICAgICAgIHNp
Z2FjdGlvbihTSUdJTEwsICZjdXJyZW50QWN0aW9uLCBudWxscHRyKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQogc3RhdGljIHZvaWQgaW5zdGFsbENyYXNoSGFuZGxlcigpCiB7CiAjaWYgQ1BVKFg4
Nl82NCkgfHwgQ1BVKEFSTTY0KQotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotICAgIGFj
dGlvbi5zYV9zaWdhY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQgKCopKGludCwgc2lnaW5m
b190ICosIHZvaWQgKik+KGhhbmRsZUNyYXNoKTsKLSAgICBzaWdmaWxsc2V0KCZhY3Rpb24uc2Ff
bWFzayk7Ci0gICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKLSAgICBzaWdhY3Rpb24o
U0lHSUxMLCAmYWN0aW9uLCAmb3JpZ2luYWxTaWdJbGxBY3Rpb24pOwotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oaGFuZGxlQ3Jhc2gpOworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6
SWxsLCBbXSAoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1YXApIHsKKyAgICAgICAgU2lnbmFsQ29u
dGV4dCBjb250ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dCk7
CisKKyAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQubWFjaGluZVBDKSkKKyAgICAgICAgICAg
IHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CisKKyAgICAgICAgU2lnaWxsQ3Jhc2hB
bmFseXplciYgYW5hbHl6ZXIgPSBTaWdpbGxDcmFzaEFuYWx5emVyOjppbnN0YW5jZSgpOworICAg
ICAgICBhbmFseXplci5hbmFseXplKGNvbnRleHQpOworICAgICAgICByZXR1cm4gU2lnbmFsQWN0
aW9uOjpOb3RIYW5kbGVkOworICAgIH0pOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggODk4
MTA0YmQ0OGFkYjExODg2NWE5YzhkZWU1YjU2ZjRlNjZiZWE4Mi4uMmUwYzk5YTM5YmViZDMxNzhi
OTE0OGQ5NThmZTUzZTU3YTYyMjk3ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKQEAgLTM1LDkgKzM1LDkgQEAKICNp
bmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2FzbVRodW5rcy5oIgogCi0jaW5jbHVk
ZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTUwLDExICs1MCw5IEBAIHN0YXRpYyBMYXp5
TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4+PiBjb2RlTG9j
YXRpb25zOyAvLyAoCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfRkFTVF9NRU1PUlkpCiAKLXN0
YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ0J1c0hhbmRsZXI7Ci1zdGF0aWMgc3RydWN0IHNp
Z2FjdGlvbiBvbGRTaWdTZWd2SGFuZGxlcjsKIHN0YXRpYyBib29sIGZhc3RIYW5kbGVySW5zdGFs
bGVkIHsgZmFsc2UgfTsKIAotc3RhdGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2ln
aW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKK3N0YXRpYyBTaWduYWxBY3Rpb24gdHJh
cEhhbmRsZXIoaW50LCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQogewogICAg
IG1jb250ZXh0X3QmIGNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQp
LT51Y19tY29udGV4dDsKICAgICB2b2lkKiBmYXVsdGluZ0luc3RydWN0aW9uID0gTWFjaGluZUNv
bnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihjb250ZXh0KTsKQEAgLTYzLDkgKzYxLDcgQEAgc3Rh
dGljIHZvaWQgdHJhcEhhbmRsZXIoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lk
KiB1Y29udGV4dCkKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSklUIG1lbW9yeSBzdGFydDog
IiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihzdGFydE9mRml4ZWRFeGVjdXRh
YmxlTWVtb3J5UG9vbCkpLCAiIGVuZDogIiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZv
aWQqPihlbmRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpKSk7CiAgICAgLy8gRmlyc3Qgd2Ug
bmVlZCB0byBtYWtlIHN1cmUgd2UgYXJlIGluIEpJVCBjb2RlIGJlZm9yZSB3ZSBjYW4gYXF1aXJl
IGFueSBsb2Nrcy4gT3RoZXJ3aXNlLAogICAgIC8vIHdlIG1pZ2h0IGhhdmUgY3Jhc2hlZCBpbiBj
b2RlIHRoYXQgaXMgYWxyZWFkeSBob2xkaW5nIG9uZSBvZiB0aGUgbG9ja3Mgd2Ugd2FudCB0byBh
cXVpcmUuCi0gICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXJ0T2ZGaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sKSA8PSBmYXVsdGluZ0luc3RydWN0aW9uCi0gICAgICAgICYmIGZhdWx0
aW5nSW5zdHJ1Y3Rpb24gPCByZWludGVycHJldF9jYXN0PHZvaWQqPihlbmRPZkZpeGVkRXhlY3V0
YWJsZU1lbW9yeVBvb2wpKSB7Ci0KKyAgICBpZiAoaXNKSVRQQyhmYXVsdGluZ0luc3RydWN0aW9u
KSkgewogICAgICAgICBib29sIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSBmYWxzZTsKICAg
ICAgICAgewogICAgICAgICAgICAgdm9pZCogZmF1bHRpbmdBZGRyZXNzID0gc2lnSW5mby0+c2lf
YWRkcjsKQEAgLTg5LDE3ICs4NSwxMiBAQCBzdGF0aWMgdm9pZCB0cmFwSGFuZGxlcihpbnQgc2ln
bmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQogICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiZm91bmQgc3R1YjogIiwgUmF3UG9pbnRlcihleGNl
cHRpb25TdHViLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIE1hY2hpbmVDb250ZXh0Ojphcmd1bWVudFBvaW50ZXI8MT4oY29udGV4dCkgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7
CiAgICAgICAgICAgICAgICAgICAgIE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIo
Y29udGV4dCkgPSBleGNlcHRpb25TdHViLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaWdu
YWxBY3Rpb246OkhhbmRsZWQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQotCi0gICAgLy8gU2luY2Ugd2Ugb25seSB1c2UgZmFzdCBtZW1vcnkgaW4g
cHJvY2Vzc2VzIHdlIGNvbnRyb2wsIGlmIHdlIHJlc3RvcmUgd2Ugd2lsbCBqdXN0IGZhbGwgYmFj
ayB0byB0aGUgZGVmYXVsdCBoYW5kbGVyLgotICAgIGlmIChzaWduYWwgPT0gU0lHQlVTKQotICAg
ICAgICBzaWdhY3Rpb24oc2lnbmFsLCAmb2xkU2lnQnVzSGFuZGxlciwgbnVsbHB0cik7Ci0gICAg
ZWxzZQotICAgICAgICBzaWdhY3Rpb24oc2lnbmFsLCAmb2xkU2lnU2VndkhhbmRsZXIsIG51bGxw
dHIpOworICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CiB9CiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFlfRkFTVF9NRU1PUlkpCkBAIC0xMzMsMjIgKzEyNCwxMyBAQCB2
b2lkIGVuYWJsZUZhc3RNZW1vcnkoKQogICAgICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZX0ZBU1RfTUVNT1JZKQotICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlv
bjsKLQotICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gdHJhcEhhbmRsZXI7Ci0gICAgICAg
IHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0g
U0FfU0lHSU5GTzsKLSAgICAgICAgCi0gICAgICAgIC8vIEluc3RhbGxpbmcgc2lnbmFsIGhhbmRs
ZXJzIGZhaWxzIHdoZW4KLSAgICAgICAgLy8gMS4gc3BlY2lmaWNpZWQgc2lnIGlzIGluY29ycmVj
dCAoaW52YWxpZCB2YWx1ZXMgb3Igc2lnbmFsIG51bWJlcnMgd2hpY2ggY2Fubm90IGJlIGhhbmRs
ZWQpLCBvcgotICAgICAgICAvLyAyLiBzZWNvbmQgb3IgdGhpcmQgcGFyYW1ldGVyIHBvaW50cyBp
bmNvcnJlY3QgcG9pbnRlcnMuCi0gICAgICAgIC8vIFRodXMsIHdlIG11c3Qgbm90IGZhaWwgaW4g
dGhlIGZvbGxvd2luZyBhdHRlbXB0cy4KLSAgICAgICAgaW50IHJldCA9IDA7Ci0gICAgICAgIHJl
dCA9IHNpZ2FjdGlvbihTSUdCVVMsICZhY3Rpb24sICZvbGRTaWdCdXNIYW5kbGVyKTsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIXJldCk7Ci0KLSAgICAgICAgcmV0ID0gc2lnYWN0aW9uKFNJR1NF
R1YsICZhY3Rpb24sICZvbGRTaWdTZWd2SGFuZGxlcik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFyZXQpOworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OkJ1cywgW10gKGlu
dCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWwsIHNpZ0luZm8sIHVjb250ZXh0KTsKKyAgICAg
ICAgfSk7CisKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpTZWdWLCBbXSAo
aW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRyYXBIYW5kbGVyKHNpZ25hbCwgc2lnSW5mbywgdWNvbnRleHQpOworICAg
ICAgICB9KTsKIAogICAgICAgICBjb2RlTG9jYXRpb25zLmNvbnN0cnVjdCgpOwogICAgICAgICBm
YXN0SGFuZGxlckluc3RhbGxlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA5NGMxMTZiZjEyMzE0YWIwMDE4NjljNjdhMDU5MDFhMDE2ODBmYmZj
Li5mYjdhOTAxZmEyNzMxNDgzZjRlMzZhZGNmMzJhZWU4M2VmZmQyNDFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0OSw2ICsxNDksMTEgQEAKIAkJNTE1
Rjc5NTAxQ0ZDOUY0QTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkVGFzay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1Rjc5NEQxQ0ZDOUY0QTAwQ0NFRDkz
IC8qIENyb3NzVGhyZWFkVGFzay5oICovOyB9OwogCQk1MTVGNzk1NjFDRkQzQTY5MDBDQ0VEOTMg
LyogQ3Jvc3NUaHJlYWRRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE1Rjc5NTUxQ0ZEM0E2OTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkUXVldWUu
aCAqLzsgfTsKIAkJNTIxODMwMTJDOTlFNDc2QTg0RUVCRUE4IC8qIFN5bWJvbEltcGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjcyQkJEQjEwN0ZB
NDI0ODg2MTc4QjlFIC8qIFN5bWJvbEltcGwuY3BwICovOyB9OworCQk1MzExQkQ1MzFFQTcxQ0FE
MDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgKi87
IH07CisJCTUzMTFCRDU2MUVBN0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVzc0JhZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENTUxRUE3RTE1QTAw
NTI1MjgxIC8qIExvY2tsZXNzQmFnLmggKi87IH07CisJCTUzMTFCRDU4MUVBN0UxQTEwMDUyNTI4
MSAvKiBTaWduYWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzExQkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oICovOyB9OworCQk1MzEx
QkQ1QTFFQTgxQTk2MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8q
IFRocmVhZE1lc3NhZ2UuaCAqLzsgfTsKKwkJNTMxMUJENUMxRUE4MjJGOTAwNTI1MjgxIC8qIFRo
cmVhZE1lc3NhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwICovOyB9
OwogCQk1MzlFQjA2MzFENTUyODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5RUIwNjIxRDU1Mjg0MjAwQzgy
RUY3IC8qIExFQkRlY29kZXIuaCAqLzsgfTsKIAkJNTNFQzI1M0UxRTk1QUQzMDAwMDgzMUI5IC8q
IFByaW9yaXR5UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzRUMyNTNDMUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggKi87IH07
CiAJCTU1MzA3MUNBMUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MzA3MUM5MUM0MDQyNzIwMDM4
NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLzsgfTsKQEAgLTU0OCw2ICs1NTMsMTEgQEAKIAkJNTE1
Rjc5NEMxQ0ZDOUY0QTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkQ29waWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxNUY3OTREMUNGQzlGNEEwMENDRUQ5MyAvKiBDcm9zc1RocmVhZFRh
c2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRUYXNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNUY3OTU1MUNGRDNBNjkwMENDRUQ5MyAv
KiBDcm9zc1RocmVhZFF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENy
b3NzVGhyZWFkUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMxMUJENTEx
RUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2lnbmFscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUz
MTFCRDU1MUVBN0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVzc0JhZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMb2NrbGVzc0JhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MzExQkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTaWduYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUzMTFCRDU5MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVG
NyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRl
Y29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFQzI1M0MxRTk1QUQzMDAw
MDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFD
OTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTA2NCw2ICsxMDc0LDcgQEAKIAkJCQkwRjYwRjMyRDFERkNCRDFCMDA0MTZENkMgLyogTG9j
a2VkUHJpbnRTdHJlYW0uY3BwICovLAogCQkJCTBGNjBGMzJFMURGQ0JEMUIwMDQxNkQ2QyAvKiBM
b2NrZWRQcmludFN0cmVhbS5oICovLAogCQkJCUE4QTQ3MkMzMTUxQTgyNUEwMDQxMjNGRiAvKiBM
b2NrZXIuaCAqLywKKwkJCQk1MzExQkQ1NTFFQTdFMTVBMDA1MjUyODEgLyogTG9ja2xlc3NCYWcu
aCAqLywKIAkJCQk1MTNFMTcwQTFDRDdENUJGMDBFMzY1MEIgLyogTG9nZ2luZ0FjY3VtdWxhdG9y
LmggKi8sCiAJCQkJMEYzMEJBOEMxRTc4NzA4RTAwMkNBODQ3IC8qIExvZ2dpbmdIYXNoSUQuaCAq
LywKIAkJCQkwRjMwQkE4RDFFNzg3MDhFMDAyQ0E4NDcgLyogTG9nZ2luZ0hhc2hNYXAuaCAqLywK
QEAgLTExODksNiArMTIwMCw4IEBACiAJCQkJRTMyMDBBQjUxRTlBNTM2RDAwM0I1OUQyIC8qIFRo
cmVhZEhvbGRlci5jcHAgKi8sCiAJCQkJRTMyMDBBQjYxRTlBNTM2RDAwM0I1OUQyIC8qIFRocmVh
ZEhvbGRlci5oICovLAogCQkJCUE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xk
ZXJQdGhyZWFkcy5jcHAgKi8sCisJCQkJNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVh
ZE1lc3NhZ2UuY3BwICovLAorCQkJCTUzMTFCRDU5MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRN
ZXNzYWdlLmggKi8sCiAJCQkJQThBNDczMzIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5j
cHAgKi8sCiAJCQkJQThBNDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oICovLAog
CQkJCUE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi8s
CkBAIC0xMzE2LDYgKzEzMjksOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQThBNDczM0ExNTFB
ODI1QjAwNDEyM0ZGIC8qIEJpbmFyeVNlbWFwaG9yZS5jcHAgKi8sCiAJCQkJQThBNDczM0IxNTFB
ODI1QjAwNDEyM0ZGIC8qIEJpbmFyeVNlbWFwaG9yZS5oICovLAorCQkJCTUzMTFCRDUxMUVBNzFD
QUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCAqLywKKwkJCQk1MzExQkQ1NzFFQTdFMUExMDA1MjUy
ODEgLyogU2lnbmFscy5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0aHJlYWRzOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE0NjEsNiArMTQ3Niw3IEBACiAJCQkJREU1QTA5RkMxQkEz
Njk5MjAwM0Q0NDI0IC8qIENvbW1vbkNyeXB0b1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4
RjJCOTExNzJFMDBGQzAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzM5ODE1MUE4MjVCMDA0MTIzRkYgLyogQ29tcGlsZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzMTFCRDU2MUVBN0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVzc0JhZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZEQjY5OEUxQjdDNjQzQTAwMEMxMDc4IC8qIENvbmRpdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0OEMxNTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY4RjJCOUMxNzJGMjU5NjAwN0RCREE1IC8qIENvbnZlcnNpb25N
b2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTE1MjYsNiArMTU0Miw3IEBACiAJCQkJQTcwREEwODQx
Nzk5RjA0RDAwNTI5QTlCIC8qIEluc2VydGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYxNDdC
MEExNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdDREQ3RkY4MTg2RDI5MUUwMDc0MzNDRCAvKiBJdGVyYXRvckFkYXB0b3Jz
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzExQkQ1ODFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFs
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NERDdGRkExODZEMkE1NDAwNzQzM0NEIC8qIEl0ZXJh
dG9yUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQUM5MUE4MTg5NDJGQzQwMDI0NDkzOSAv
KiBMQ2hhci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5RUIwNjMxRDU1Mjg0MjAwQzgyRUY3IC8q
IExFQkRlY29kZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTYzMyw2ICsxNjUwLDcgQEAKIAkJCQlB
NzQ4NzQ1NDE3QTBCREFFMDBGQTA0Q0IgLyogU3RyaW5nSGFzaER1bXBDb250ZXh0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzQ0MTE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSW1wbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDIxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ09wZXJh
dG9ycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMxMUJENUExRUE4MUE5NjAwNTI1MjgxIC8qIFRo
cmVhZE1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRERCRkE4MTY2NkRGQTMwMEM1NUZF
RiAvKiBTdHJpbmdQcmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2RUIxRTAxODdE
MEJEMzAwMzAxMjZGIC8qIFN0cmluZ1ZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0I4
MTUxQTgyNUIwMDQxMjNGRiAvKiBzdHJ0b2QuaCBpbiBIZWFkZXJzICovLApAQCAtMTg1Nyw4ICsx
ODc1LDEwIEBACiAJCQkJRkVEQUNEM0QxNjMwRjgzRjAwQzY5NjM0IC8qIFN0YWNrU3RhdHMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0M0MxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0J1
aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RkIxODI0MzVBNjAwQTgyRTY5IC8q
IFN0cmluZ0NGLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMTFCRDVDMUVBODIyRjkwMDUyNTI4
MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDQwMTUxQTgy
NUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUZD
MTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdJbXBsQ0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTMxMUJENTMxRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTVCQTE1RjUxODI0MzQ4MDAwQTgyRTY5IC8qIFN0cmluZ0ltcGxNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQlBNUJBMTVGMzE4MjQzM0E5MDBBODJFNjkgLyogU3RyaW5nTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3Ry
ZWFtLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQXRvbWlj
cy5oIGIvU291cmNlL1dURi93dGYvQXRvbWljcy5oCmluZGV4IDc3MmU2ZmViYmQyZTcxNjlkNDNk
NTA3OTVjMWVhZmM1OGVhNjhkMTguLjk5MDdiMzJiZjRlNGJjMzQwNmEwNWIzOTgwYWM3ZDNjMDYz
Y2ZkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9BdG9taWNzLmgKQEAgLTE3NCw2ICsxNzQsMTIgQEAgc3RydWN0IEF0b21pYyB7CiAg
ICAgICAgIHJldHVybiB0cmFuc2FjdGlvbihmdW5jLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVk
LCBhYm9ydExpa2VsaWhvb2QpOwogICAgIH0KIAorICAgIEF0b21pYygpID0gZGVmYXVsdDsKKyAg
ICBjb25zdGV4cHIgQXRvbWljKFQgaW5pdGlhbCkKKyAgICAgICAgOiB2YWx1ZShzdGQ6OmZvcndh
cmQ8VD4oaW5pdGlhbCkpCisgICAgeworICAgIH0KKwogICAgIHN0ZDo6YXRvbWljPFQ+IHZhbHVl
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCAxYmFlM2JiOTBiMzcxMjBhNTFjNDg5OWQ5
ODdkOGEzNDEyNTQwZDY3Li43MTIzYTZlMDNjZTg4MGYxN2RjMDQyYjE0ZDkxY2QwYmJhN2UxYTRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtNjIsNiArNjIsNyBAQCBzZXQoV1RGX0hFQURFUlMK
ICAgICBMb2NrQWxnb3JpdGhtLmgKICAgICBMb2NrZWRQcmludFN0cmVhbS5oCiAgICAgTG9ja2Vy
LmgKKyAgICBMb2NrbGVzc0JhZy5oCiAgICAgTG9nZ2luZ0hhc2hJRC5oCiAgICAgTG9nZ2luZ0hh
c2hNYXAuaAogICAgIExvZ2dpbmdIYXNoU2V0LmgKQEAgLTEzMCw2ICsxMzEsNyBAQCBzZXQoV1RG
X0hFQURFUlMKICAgICBTdHJpbmdQcmludFN0cmVhbS5oCiAgICAgU3lzdGVtVHJhY2luZy5oCiAg
ICAgVGhyZWFkSG9sZGVyLmNwcAorICAgIFRocmVhZE1lc3NhZ2UuaAogICAgIFRocmVhZFNhZmVS
ZWZDb3VudGVkLmgKICAgICBUaHJlYWRTcGVjaWZpYy5oCiAgICAgVGhyZWFkaW5nLmgKQEAgLTE4
NSw2ICsxODcsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICB0ZXh0L2ljdS9VVGV4dFByb3ZpZGVy
VVRGMTYuaAogCiAgICAgdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaAorICAgIHRocmVhZHMvU2ln
bmFscy5oCiAKICAgICB1bmljb2RlL0NoYXJhY3Rlck5hbWVzLmgKICAgICB1bmljb2RlL0NvbGxh
dG9yLmgKQEAgLTIzOSw2ICsyNDIsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBTdGFja0JvdW5k
cy5jcHAKICAgICBTdGFja1N0YXRzLmNwcAogICAgIFN0cmluZ1ByaW50U3RyZWFtLmNwcAorICAg
IFRocmVhZE1lc3NhZ2UuY3BwCiAgICAgVGhyZWFkaW5nLmNwcAogICAgIFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZS5jcHAKICAgICBXVEZUaHJlYWREYXRhLmNwcApAQCAtMjc5LDYgKzI4Myw3IEBA
IHNldChXVEZfU09VUkNFUwogICAgIHRleHQvaWN1L1VUZXh0UHJvdmlkZXJVVEYxNi5jcHAKIAog
ICAgIHRocmVhZHMvQmluYXJ5U2VtYXBob3JlLmNwcAorICAgIHRocmVhZHMvU2lnbmFscy5jcHAK
IAogICAgIHVuaWNvZGUvVVRGOC5jcHAKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0xv
Y2tsZXNzQmFnLmggYi9Tb3VyY2UvV1RGL3d0Zi9Mb2NrbGVzc0JhZy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5
Y2FjMDMyZGJlOWY3ODViNzNkZDYyMWJlY2RjODJkZTMwMzYwMjUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9Mb2NrbGVzc0JhZy5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkF0b21pY3MuaCIKKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgYSBzaW1wbGUg
c2luZ2xlIGNvbnN1bWVyLCBtdWx0aXBsZSBwcm9kdWNlciBCYWcgZGF0YSBzdHJ1Y3R1cmUuCisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBMb2NrbGVzc0JhZyB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoTG9ja2xlc3NCYWcpOworCisgICAgc3RydWN0IE5vZGUgeworICAgICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIFQgZGF0YTsKKyAg
ICAgICAgTm9kZSogbmV4dDsKKyAgICB9OworcHVibGljOgorICAgIExvY2tsZXNzQmFnKCkKKyAg
ICAgICAgOiBtX2hlYWQobnVsbHB0cikKKyAgICB7CisgICAgfQorCisgICAgZW51bSBQdXNoUmVz
dWx0IHsgRW1wdHksIE5vbkVtcHR5IH07CisgICAgUHVzaFJlc3VsdCBhZGQoVCYmIGVsZW1lbnQp
CisgICAgeworICAgICAgICBOb2RlKiBuZXdOb2RlID0gbmV3IE5vZGUoKTsKKyAgICAgICAgbmV3
Tm9kZS0+ZGF0YSA9IHN0ZDo6Zm9yd2FyZDxUPihlbGVtZW50KTsKKworICAgICAgICBOb2RlKiBv
bGRIZWFkOworICAgICAgICBtX2hlYWQudHJhbnNhY3Rpb24oWyZdIChOb2RlKiYgaGVhZCkgewor
ICAgICAgICAgICAgb2xkSGVhZCA9IGhlYWQ7CisgICAgICAgICAgICBuZXdOb2RlLT5uZXh0ID0g
aGVhZDsKKyAgICAgICAgICAgIGhlYWQgPSBuZXdOb2RlOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBvbGRIZWFkID09IG51bGxwdHIgPyBF
bXB0eSA6IE5vbkVtcHR5OworICAgIH0KKworICAgIC8vIENPTlNVTUVSIEZVTkNUSU9OUzogRXZl
cnl0aGluZyBiZWxvdyBoZXJlIGlzIG9ubHkgc2FmZSB0byBjYWxsIGZyb20gdGhlIGNvbnN1bWVy
IHRocmVhZC4KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgc2FmZSB0byBjYWxs
IGZyb20gbW9yZSB0aGFuIG9uZSB0aHJlYWQsIGJ1dCBPTkxZIGlmIG5vIHRocmVhZCBjYW4gY2Fs
bCBjb25zdW1lQWxsLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBp
dGVyYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0g
bV9oZWFkLmxvYWQoKTsKKyAgICAgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgICAgIGNvbnN0
IFQmIGRhdGEgPSBub2RlLT5kYXRhOworICAgICAgICAgICAgZnVuYyhkYXRhKTsKKyAgICAgICAg
ICAgIG5vZGUgPSBub2RlLT5uZXh0OworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGNvbnN1bWVBbGwoY29uc3QgRnVuY3RvciYgZnVu
YykKKyAgICB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX2hlYWQuZXhjaGFuZ2UobnVsbHB0cik7
CisgICAgICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgICAgICBmdW5jKFdURk1vdmUobm9kZS0+
ZGF0YSkpOworICAgICAgICAgICAgTm9kZSogb2xkTm9kZSA9IG5vZGU7CisgICAgICAgICAgICBu
b2RlID0gbm9kZS0+bmV4dDsKKyAgICAgICAgICAgIGRlbGV0ZSBvbGROb2RlOworICAgICAgICB9
CisgICAgfQorCitwcml2YXRlOgorICAgIEF0b21pYzxOb2RlKj4gbV9oZWFkOworfTsKKyAgICAK
K30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVz
c2FnZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
MmY4YTdiMjI1ZWNmYzYzMTcxNDM2NmVhYTY3ZmU1Yjk5MTZkOGVjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKQEAgLTAsMCArMSwxNTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGhyZWFkTWVzc2FnZS5oIgorCisjaWYgVVNFKFBUSFJFQURTKQor
CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2Vy
Lmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorCisKK25hbWVzcGFjZSBXVEYg
eworCitjbGFzcyBUaHJlYWRNZXNzYWdlRGF0YSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgVGhyZWFkTWVzc2FnZURhdGEoY29uc3QgVGhyZWFkTWVzc2FnZSYg
bSkKKyAgICAgICAgOiByYW4oZmFsc2UpCisgICAgICAgICwgbWVzc2FnZShtKQorICAgIHsKKyAg
ICB9CisKKyAgICBBdG9taWM8Ym9vbD4gcmFuOworICAgIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1l
c3NhZ2U7Cit9OworCitlbnVtIEZpbGVEZXNjcmlwdG9yIHsKKyAgICBSZWFkLAorICAgIFdyaXRl
LAorICAgIE51bWJlck9mRmlsZURlc2NyaXB0b3JzLAorfTsKKworc3RhdGljIGludCBmaWxlRGVz
Y3JpcHRvcnNbTnVtYmVyT2ZGaWxlRGVzY3JpcHRvcnNdOworc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IG1hZ2ljQnl0ZSA9ICJkIjsKKworCit2b2lkIGluaXRpYWxpemVUaHJlYWRNZXNzYWdlcygp
Cit7CisgICAgaW50IHJlc3VsdCA9IHBpcGUoZmlsZURlc2NyaXB0b3JzKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghcmVzdWx0KTsKKworICAgIGludCBmbGFncyA9IGZjbnRsKGZpbGVEZXNjcmlwdG9y
c1tXcml0ZV0sIEZfR0VURkwpOworICAgIHJlc3VsdCA9IGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tX
cml0ZV0sIEZfU0VURkwsIGZsYWdzIHwgT19OT05CTE9DSyB8IE9fQVBQRU5EKTsKKyAgICBmbGFn
cyA9IGZjbnRsKGZpbGVEZXNjcmlwdG9yc1tXcml0ZV0sIEZfR0VURkwpOworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlc3VsdCAhPSAtMSk7CisgICAgUkVMRUFTRV9BU1NFUlQoKGZsYWdzICYgT19OT05C
TE9DSykgJiYgKGZsYWdzICYgT19BUFBFTkQpKTsKKworICAgIGZsYWdzID0gZmNudGwoZmlsZURl
c2NyaXB0b3JzW1JlYWRdLCBGX0dFVEZMKTsKKyAgICByZXN1bHQgPSBmY250bChmaWxlRGVzY3Jp
cHRvcnNbUmVhZF0sIEZfU0VURkwsIGZsYWdzICYgfk9fTk9OQkxPQ0spOworICAgIGZsYWdzID0g
ZmNudGwoZmlsZURlc2NyaXB0b3JzW1JlYWRdLCBGX0dFVEZMKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQgIT0gLTEpOworICAgIFJFTEVBU0VfQVNTRVJUKCEoZmxhZ3MgJiBPX05PTkJMT0NL
KSk7Cit9CisKK1NVUFBSRVNTX0FTQU4KK01lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQo
VGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7CisgICAgY29u
c3RleHByIFNpZ25hbCBzaWduYWwgPSBTaWduYWw6OlVzcjsKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIGluc3Rh
bGxTaWduYWxIYW5kbGVyKHNpZ25hbCwgW10gKGludCwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1
YXApIHsKKyAgICAgICAgICAgIFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpjdXJyZW50TWF5QmVO
dWxsKCk7CisKKyAgICAgICAgICAgIGlmICghdGhyZWFkKSB7CisgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJXZSBzb21laG93IGdvdCBhIG1lc3NhZ2Ugb24gYSB0aHJlYWQgdGhhdCBkaWRuJ3Qg
aGF2ZSBhIFdURjo6VGhyZWFkIGluaXRpYWxpemVkLCB3ZSBwcm9iYWJseSBkZWFkbG9ja2VkLCBo
YWxwLiIpOworICAgICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRocmVhZC0+dGhyZWFkTWVzc2FnZXMoKS5j
b25zdW1lQWxsKFsmXSAoVGhyZWFkTWVzc2FnZURhdGEqIGRhdGEpIHsKKyAgICAgICAgICAgICAg
ICBkYXRhLT5tZXNzYWdlKGluZm8sIHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXApKTsKKyAg
ICAgICAgICAgICAgICBkYXRhLT5yYW4uc3RvcmUodHJ1ZSk7CisgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgd2hpbGUgKHdyaXRlKGZpbGVEZXNjcmlwdG9yc1tXcml0ZV0sIG1hZ2ljQnl0
ZSwgMSkgPT0gLTEpCisgICAgICAgICAgICAgICAgQVNTRVJUKGVycm5vID09IEVBR0FJTik7CisK
KyAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7CisgICAgICAgIH0pOwor
ICAgIH0pOworCisKKyAgICAvLyBTaW5jZSB3ZSBhcmUgZ3VhcmVudGVlZCBub3QgdG8gcmV0dXJu
IHVudGlsIHdlIGdldCBhIHJlc3BvbnNlIGZyb20gdGhlIG90aGVyIHRocmVhZCB0aGlzIGlzIG9r
LgorICAgIFRocmVhZE1lc3NhZ2VEYXRhIGRhdGEobWVzc2FnZSk7CisKKyAgICB0aHJlYWQudGhy
ZWFkTWVzc2FnZXMoKS5hZGQoJmRhdGEpOworICAgIGJvb2wgcmVzdWx0ID0gdGhyZWFkLnNpZ25h
bCh0b1N5c3RlbVNpZ25hbChzaWduYWwpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0
dXJuIE1lc3NhZ2VTdGF0dXM6OlRocmVhZEV4aXRlZDsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQpOworCisgICAgc3RhdGljIFN0YXRpY0xvY2sgcmVhZExvY2s7CisgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocmVhZExvY2spOworICAgICAgICBjb25zdGV4
cHIgc2l6ZV90IGJ1ZmZlclNpemUgPSAxNjsKKyAgICAgICAgY2hhciBidWZmZXJbYnVmZmVyU2l6
ZV07CisKKyAgICAgICAgLy8gSXQncyBhbHdheXMgc2FmZSB0byBjbGVhciB0aGUgcGlwZSBiZWNh
dXNlIG9ubHkgb25lIHRocmVhZCBjYW4gZXZlciBibG9jayB0cnlpbmcgdG8gcmVhZAorICAgICAg
ICAvLyBmcm9tIHRoZSBwaXBlLiBUaHVzLCBlYWNoIGJ5dGUgd2UgY2xlYXIgZnJvbSB0aGUgcGlw
ZSBhY3R1YWxseSBqdXN0IGNvcnJlc3BvbmRzIHRvIHNvbWUgdGFzaworICAgICAgICAvLyB0aGF0
IGhhcyBhbHJlYWR5IGZpbmlzaGVkLiBXZSBhY3RpdmVseSB3YW50IHRvIGVuc3VyZSB0aGF0IHRo
ZSBwaXBlIGRvZXMgbm90IG92ZXJmaWxsIGJlY2F1c2UKKyAgICAgICAgLy8gb3RoZXJ3aXNlIG91
ciB3cml0ZXJzIG1pZ2h0IHNwaW4gdHJ5aW5nIHRvIHdyaXRlLgorICAgICAgICBhdXRvIGNsZWFy
UGlwZSA9IFsmXSB7CisgICAgICAgICAgICBpbnQgZmxhZ3MgPSBmY250bChmaWxlRGVzY3JpcHRv
cnNbUmVhZF0sIEZfR0VURkwpOworICAgICAgICAgICAgQVNTRVJUKCEoZmxhZ3MgJiBPX05PTkJM
T0NLKSk7CisgICAgICAgICAgICBmY250bChmaWxlRGVzY3JpcHRvcnNbUmVhZF0sIEZfU0VURkws
IGZsYWdzIHwgT19OT05CTE9DSyk7CisKKyAgICAgICAgICAgIHdoaWxlIChyZWFkKGZpbGVEZXNj
cmlwdG9yc1tSZWFkXSwgYnVmZmVyLCBidWZmZXJTaXplKSAhPSAtMSkgeyB9CisgICAgICAgICAg
ICBBU1NFUlQoZXJybm8gPT0gRUFHQUlOKTsKKworICAgICAgICAgICAgZmNudGwoZmlsZURlc2Ny
aXB0b3JzW1JlYWRdLCBGX1NFVEZMLCBmbGFncyk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYg
KGRhdGEucmFuLmxvYWQoKSkgeworICAgICAgICAgICAgY2xlYXJQaXBlKCk7CisgICAgICAgICAg
ICByZXR1cm4gTWVzc2FnZVN0YXR1czo6TWVzc2FnZVJhbjsKKyAgICAgICAgfQorCisgICAgICAg
IHJlYWQoZmlsZURlc2NyaXB0b3JzW1JlYWRdLCBidWZmZXIsIDEpOworICAgICAgICBBU1NFUlQo
YnVmZmVyWzBdID09IG1hZ2ljQnl0ZVswXSk7CisgICAgICAgIGNsZWFyUGlwZSgpOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZE1lc3NhZ2UuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45YWU1M2YyOWNmN2U4ZmIwMGVmOTIxMWQxNmNlMmNkZWQ2MDNlYzFiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCkBAIC0wLDAgKzEsNjIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgVVNFKFBUSFJFQURTKQorCituYW1l
c3BhY2UgV1RGIHsKKwordm9pZCBpbml0aWFsaXplVGhyZWFkTWVzc2FnZXMoKTsKKworY2xhc3Mg
VGhyZWFkTWVzc2FnZURhdGE7Cit1c2luZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVkTGFtYmRhPHZv
aWQoc2lnaW5mb190KiwgdWNvbnRleHRfdCopPjsKKworZW51bSBjbGFzcyBNZXNzYWdlU3RhdHVz
IHsKKyAgICBNZXNzYWdlUmFuLAorICAgIFRocmVhZEV4aXRlZCwKK307CisKKy8vIFRoaXMgbWV0
aG9kIGFsbG93cyB1cyB0byBzZW5kIGEgbWVzc2FnZSB3aGljaCB3aWxsIGJlIHJ1biBpbiBhIHNp
Z25hbCBoYW5kbGVyIG9uIHRoZSBkZXNpcmVkIHRocmVhZC4KKy8vIFRoZXJlIGFyZSBzZXZlcmFs
IGNhdmVhdGVzIHRvIHRoaXMgbWV0aG9kIGhvd2V2ZXIsIFRoaXMgZnVuY3Rpb24gdXNlcyBzaWdu
YWxzIHNvIHlvdXIgbWVzc2FnZSBzaG91bGQKKy8vIGJlIHN5bmMgc2lnbmFsIHNhZmUuCitNZXNz
YWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYsIGNvbnN0IFRocmVhZE1lc3NhZ2Um
KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK01lc3NhZ2VTdGF0dXMgc2VuZE1lc3Nh
Z2UoVGhyZWFkJiB0YXJnZXRUaHJlYWQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCit7CisgICAgYXV0
byBsYW1iZGEgPSBzY29wZWRMYW1iZGFSZWY8dm9pZChzaWdpbmZvX3QqLCB1Y29udGV4dF90Kik+
KGZ1bmMpOworICAgIHJldHVybiBzZW5kTWVzc2FnZVNjb3BlZCh0YXJnZXRUaHJlYWQsIGxhbWJk
YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OnNlbmRNZXNzYWdlOwor
CisjZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhy
ZWFkaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKaW5kZXggZmVmNTgxMWE3
ZDU3YmI4OWRjMDM3NWY5MTEyMmQ1YTI0OGNiMjI4Ni4uMTVhNWM2ODlhZTg1MWI2ZmZhOTM4M2M1
MWM2NmY4MTU1N2Q0MTgzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL1JhbmRvbU51bWJlclNlZWQu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkSG9sZGVyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZE1l
c3NhZ2UuaD4KICNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ1ZpZXcuaD4KIApAQCAtMTc4LDYgKzE3OSw5IEBAIHZvaWQgaW5pdGlhbGl6ZVRo
cmVhZGluZygpCiAgICAgICAgIHd0ZlRocmVhZERhdGEoKTsKICAgICAgICAgaW5pdGlhbGl6ZURh
dGVzKCk7CiAgICAgICAgIFRocmVhZDo6aW5pdGlhbGl6ZVBsYXRmb3JtVGhyZWFkaW5nKCk7Cisj
aWYgVVNFKFBUSFJFQURTKQorICAgICAgICBpbml0aWFsaXplVGhyZWFkTWVzc2FnZXMoKTsKKyNl
bmRpZgogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IGJkMWY4ZjMzZTJhYWI1YjVjZGZi
NGNjYjQ2OWI4NTg1ZTlhMjQ2NGUuLmMyMGE2NWUyMmJmZDUwM2Q2YjU2NTE1ZDk0ODQ2NzA2NjYy
ODExNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZy5oCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8d3RmL0F0
b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2Vy
Lmg+CisjaW5jbHVkZSA8d3RmL0xvY2tsZXNzQmFnLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg+CiAjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CkBAIC01Niw2ICs1Nyw4IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitj
bGFzcyBUaHJlYWRNZXNzYWdlRGF0YTsKKwogdXNpbmcgVGhyZWFkSWRlbnRpZmllciA9IHVpbnQz
Ml90OwogdHlwZWRlZiB2b2lkICgqVGhyZWFkRnVuY3Rpb24pKHZvaWQqIGFyZ3VtZW50KTsKIApA
QCAtNzUsNiArNzgsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIFRocmVhZCBvYmplY3Qu
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWQmIGN1cnJlbnQoKTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRocmVhZCogY3VycmVudE1heUJlTnVsbCgpOwogCiAg
ICAgLy8gUmV0dXJucyBUaHJlYWRJZGVudGlmaWVyIGRpcmVjdGx5LiBJdCBpcyB1c2VmdWwgaWYg
dGhlIHVzZXIgb25seSBjYXJlcyBhYm91dCBpZGVudGl0eQogICAgIC8vIG9mIHRocmVhZHMuIEF0
IHRoYXQgdGltZSwgdXNlcnMgc2hvdWxkIGtub3cgdGhhdCBob2xkaW5nIHRoaXMgVGhyZWFkSWRl
bnRpZmllciBkb2VzIG5vdCBlbnN1cmUKQEAgLTEzMiw3ICsxMzYsMTEgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVBsYXRmb3JtVGhyZWFkaW5nKCk7CiAKLXByaXZhdGU6
CisjaWYgVVNFKFBUSFJFQURTKQorICAgIExvY2tsZXNzQmFnPFRocmVhZE1lc3NhZ2VEYXRhKj4m
IHRocmVhZE1lc3NhZ2VzKCkgeyByZXR1cm4gbV90aHJlYWRNZXNzYWdlczsgfQorI2VuZGlmCisK
K3Byb3RlY3RlZDoKICAgICBUaHJlYWQoKTsKIAogICAgIC8vIEludGVybmFsIHBsYXRmb3JtLXNw
ZWNpZmljIFRocmVhZDo6Y3JlYXRlIGltcGxlbWVudGF0aW9uLgpAQCAtMTc3LDYgKzE4NSw4IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2RpZEV4aXQgeyBmYWxzZSB9OwogI2lmIFVTRShQVEhSRUFE
UykKICAgICBwdGhyZWFkX3QgbV9oYW5kbGU7CisKKyAgICBMb2NrbGVzc0JhZzxUaHJlYWRNZXNz
YWdlRGF0YSo+IG1fdGhyZWFkTWVzc2FnZXM7CiAjaWYgT1MoREFSV0lOKQogICAgIG1hY2hfcG9y
dF90IG1fcGxhdGZvcm1UaHJlYWQ7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
VGhyZWFkaW5nUHRocmVhZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMu
Y3BwCmluZGV4IDNlZTlhNWY1NDVlYWYxMjg5OTBlNWE5YTNjMDE1NDg4NTI1YmZmZDcuLjFhNWQ5
OWY2MTRmNWQ5NWFjZjYxNzFlZjAxZDAzZDE0YzIxYzdmZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdQdGhyZWFkcy5jcHAKQEAgLTI2NCwxMSArMjY0LDE4IEBAIHZvaWQgVGhyZWFkOjpkZXRhY2go
KQogICAgICAgICBkaWRCZWNvbWVEZXRhY2hlZCgpOwogfQogCi1UaHJlYWQmIFRocmVhZDo6Y3Vy
cmVudCgpCitUaHJlYWQqIFRocmVhZDo6Y3VycmVudE1heUJlTnVsbCgpCiB7CiAgICAgVGhyZWFk
SG9sZGVyKiBkYXRhID0gVGhyZWFkSG9sZGVyOjpjdXJyZW50KCk7CiAgICAgaWYgKGRhdGEpCi0g
ICAgICAgIHJldHVybiBkYXRhLT50aHJlYWQoKTsKKyAgICAgICAgcmV0dXJuICZkYXRhLT50aHJl
YWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQo
KQoreworICAgIGlmIChUaHJlYWQqIGN1cnJlbnQgPSBjdXJyZW50TWF5QmVOdWxsKCkpCisgICAg
ICAgIHJldHVybiAqY3VycmVudDsKIAogICAgIC8vIE5vdCBhIFdURi1jcmVhdGVkIHRocmVhZCwg
VGhyZWFkSWRlbnRpZmllciBpcyBub3QgZXN0YWJsaXNoZWQgeWV0LgogICAgIFJlZlB0cjxUaHJl
YWQ+IHRocmVhZCA9IGFkb3B0UmVmKG5ldyBUaHJlYWQoKSk7CkBAIC0yODYsNiArMjkzLDggQEAg
VGhyZWFkSWRlbnRpZmllciBUaHJlYWQ6OmN1cnJlbnRJRCgpCiBib29sIFRocmVhZDo6c2lnbmFs
KGludCBzaWduYWxOdW1iZXIpCiB7CiAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBs
b2NrZXIobV9tdXRleCk7CisgICAgaWYgKGhhc0V4aXRlZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaW50IGVyck5vID0gcHRocmVhZF9raWxsKG1faGFuZGxlLCBzaWduYWxOdW1iZXIp
OwogICAgIHJldHVybiAhZXJyTm87IC8vIEEgMCBlcnJObyBtZWFucyBzdWNjZXNzLgogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL3RocmVhZHMvU2lnbmFscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjhjNTNkY2RhMjIyM2M0NzJlOTJj
NDYyYzg2MzY5MzQ5MjE1ODQzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Ro
cmVhZHMvU2lnbmFscy5jcHAKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U2lnbmFscy5oIgorCisjaWYgVVNFKFBUSFJFQURTKQorCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5j
bHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYv
RGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrbGVzc0JhZy5oPgorCituYW1lc3BhY2UgV1RG
IHsKKworc3RhdGljIExvY2tsZXNzQmFnPFNpZ25hbEhhbmRsZXI+IGhhbmRsZXJzW3N0YXRpY19j
YXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXSA9IHsgfTsKK3N0YXRpYyBzdHJ1
Y3Qgc2lnYWN0aW9uIG9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJl
ck9mU2lnbmFscyldOworc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlRmxhZ3Nb
c3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOworCitzdGF0aWMg
dm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogbWNv
bnRleHQpCit7CisgICAgU2lnbmFsIHNpZ25hbCA9IGZyb21TeXN0ZW1TaWduYWwoc2lnKTsKKwor
ICAgIGF1dG8gcmVzdG9yZURlZmF1bHQgPSBbJl0geworICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9u
IGRlZmF1bHRBY3Rpb247CisgICAgICAgIGRlZmF1bHRBY3Rpb24uc2FfaGFuZGxlciA9IFNJR19E
Rkw7CisgICAgICAgIHNpZ2ZpbGxzZXQoJmRlZmF1bHRBY3Rpb24uc2FfbWFzayk7CisgICAgICAg
IGRlZmF1bHRBY3Rpb24uc2FfZmxhZ3MgPSAwOworICAgICAgICBhdXRvIHJlc3VsdCA9IHNpZ2Fj
dGlvbihzaWcsICZkZWZhdWx0QWN0aW9uLCBudWxscHRyKTsKKyAgICAgICAgZGF0YUxvZ0xuSWYo
IXJlc3VsdCwgIlVuYWJsZSB0byByZXN0b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIgd2hpbGUgcHJv
Y2Nlc3Npbmcgc2lnbmFsICIsIHNpZywgIiB0aGUgcHJvY2VzcyBpcyBwcm9iYWJseSBkZWFkbG9j
a2VkLiIpOworICAgIH07CisKKyAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYnV0IHdlIG1p
Z2h0IGFzIHdlbGwgYmUgY2FyZWZ1bC4KKyAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6VW5rbm93
bikgeworICAgICAgICBkYXRhTG9nTG4oIldlIHNvbWVob3cgZ290IGNhbGxlZCBmb3IgYW4gdW5r
bm93biBzaWduYWwgIiwgc2lnLCAiLCBoYWxwLiIpOworICAgICAgICByZXN0b3JlRGVmYXVsdCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsK
KyAgICBib29sIHJlc3RvcmVEZWZhdWx0SGFuZGxlciA9IGZhbHNlOworICAgIGhhbmRsZXJzW3N0
YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0uaXRlcmF0ZShbJl0gKGNvbnN0IFNpZ25hbEhhbmRs
ZXImIGhhbmRsZXIpIHsKKyAgICAgICAgc3dpdGNoIChoYW5kbGVyKHNpZywgaW5mbywgbWNvbnRl
eHQpKSB7CisgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgorICAgICAgICAgICAg
ZGlkSGFuZGxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNpZ25h
bEFjdGlvbjo6Rm9yY2VEZWZhdWx0OgorICAgICAgICAgICAgcmVzdG9yZURlZmF1bHRIYW5kbGVy
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGlmIChyZXN0b3JlRGVmYXVsdEhh
bmRsZXIpIHsKKyAgICAgICAgcmVzdG9yZURlZmF1bHQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHN0cnVjdCBzaWdhY3Rpb24mIG9sZEFjdGlvbiA9IG9sZEFjdGlvbnNbc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzaWduYWwpXTsKKyAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6VXNyKSB7
CisgICAgICAgIGlmIChvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKQorICAgICAgICAgICAgb2xkQWN0
aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGluZm8sIG1jb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghZGlkSGFuZGxlKSB7CisgICAgICAgIGlmIChvbGRBY3Rpb24uc2Ff
c2lnYWN0aW9uKSB7CisgICAgICAgICAgICBvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5m
bywgbWNvbnRleHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
cmVzdG9yZURlZmF1bHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBpbnN0
YWxsU2lnbmFsSGFuZGxlcihTaWduYWwgc2lnbmFsLCBTaWduYWxIYW5kbGVyJiYgaGFuZGxlcikK
K3sKKyAgICBBU1NFUlQoc2lnbmFsIDwgU2lnbmFsOjpVbmtub3duKTsKKyAgICBoYW5kbGVyc1tz
dGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsKKworICAg
IHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
aWduYWwpXSwgWyZdIHsKKyAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CisgICAgICAg
IGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBqc2NTaWduYWxIYW5kbGVyOworICAgICAgICBhdXRvIHJl
c3VsdCA9IHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIXJlc3VsdCk7CisgICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87CisgICAg
ICAgIHJlc3VsdCA9IHNpZ2FjdGlvbih0b1N5c3RlbVNpZ25hbChzaWduYWwpLCAmYWN0aW9uLCAm
b2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIXJlc3VsdCk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGhyZWFk
cy9TaWduYWxzLmggYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wM2ExZDJlNTgwODgxYmFlOTMzOWUxNjc4MThhN2I5ZWYxYjgwZmMyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmgKQEAgLTAsMCArMSw5NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgVVNFKFBUSFJFQURTKQorCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitlbnVtIGNsYXNzIFNpZ25hbCB7
CisgICAgLy8gVXNyIHdpbGwgYWx3YXlzIGNoYWluIHRvIGFueSBub24tZGVmYXVsdCBoYW5kbGVy
IGluc3RhbGwgYmVmb3JlIHVzLiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8ga25vdworICAgIC8v
IGlmIGEgc2lnbmFsIHdhcyBpbnRlbmRlZCBleGNsdXNpdmVseSBmb3IgdXMuCisgICAgVXNyLAor
CisgICAgLy8gVGhlc2Ugc2lnbmFscyB3aWxsIG9ubHkgY2hhaW4gaWYgd2UgZG9uJ3QgaGF2ZSBh
IGhhbmRsZXIgdGhhdCBjYW4gcHJvY2VzcyB0aGVtLiBJZiB0aGVyZSBpcyBub3RoaW5nCisgICAg
Ly8gdG8gY2hhaW4gdG8gd2UgcmVzdG9yZSB0aGUgZGVmYXVsdCBoYW5kbGVyIGFuZCBjcmFzaC4K
KyAgICBUcmFwLAorICAgIElsbCwKKyAgICBTZWdWLAorICAgIEJ1cywKKyAgICBOdW1iZXJPZlNp
Z25hbHMsCisgICAgVW5rbm93biA9IE51bWJlck9mU2lnbmFscworfTsKKworaW5saW5lIGludCB0
b1N5c3RlbVNpZ25hbChTaWduYWwgc2lnbmFsKQoreworICAgIHN3aXRjaCAoc2lnbmFsKSB7Cisg
ICAgY2FzZSBTaWduYWw6OlNlZ1Y6IHJldHVybiBTSUdTRUdWOworICAgIGNhc2UgU2lnbmFsOjpC
dXM6IHJldHVybiBTSUdCVVM7CisgICAgY2FzZSBTaWduYWw6OklsbDogcmV0dXJuIFNJR0lMTDsK
KyAgICBjYXNlIFNpZ25hbDo6VXNyOiByZXR1cm4gU0lHVVNSMjsKKyAgICBjYXNlIFNpZ25hbDo6
VHJhcDogcmV0dXJuIFNJR1RSQVA7CisgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2lubGluZSBTaWduYWwgZnJvbVN5c3Rl
bVNpZ25hbChpbnQgc2lnbmFsKQoreworICAgIHN3aXRjaCAoc2lnbmFsKSB7CisgICAgY2FzZSBT
SUdTRUdWOiByZXR1cm4gU2lnbmFsOjpTZWdWOworICAgIGNhc2UgU0lHQlVTOiByZXR1cm4gU2ln
bmFsOjpCdXM7CisgICAgY2FzZSBTSUdJTEw6IHJldHVybiBTaWduYWw6OklsbDsKKyAgICBjYXNl
IFNJR1VTUjI6IHJldHVybiBTaWduYWw6OlVzcjsKKyAgICBjYXNlIFNJR1RSQVA6IHJldHVybiBT
aWduYWw6OlRyYXA7CisgICAgZGVmYXVsdDogcmV0dXJuIFNpZ25hbDo6VW5rbm93bjsKKyAgICB9
Cit9CisKK2VudW0gY2xhc3MgU2lnbmFsQWN0aW9uIHsKKyAgICBIYW5kbGVkLAorICAgIE5vdEhh
bmRsZWQsCisgICAgRm9yY2VEZWZhdWx0Cit9OworCit1c2luZyBTaWduYWxIYW5kbGVyID0gRnVu
Y3Rpb248U2lnbmFsQWN0aW9uKGludCwgc2lnaW5mb190Kiwgdm9pZCopPjsKKworLy8gQ2FsbCB0
aGlzIG1ldGhvZCB3aGVuZXZlciB5b3Ugd2FudCB0byBpbnN0YWxsIGEgc2lnbmFsIGhhbmRsZXIu
IEl0J3Mgb2sgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGxhemlseS4KKy8vIE5vdGU6IFlvdXIgc2ln
bmFsIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgZXZlcnkgdGltZSB0aGUgaGFuZGxlciBmb3IgdGhl
IGRlc2lyZWQgc2lnbmFsIGlzIGNhbGxlZC4KKy8vIFRodXMgaXQgaXMgeW91ciByZXNwb25zaWJp
bGl0eSB0byBkaXNjZXJuIGlmIHRoZSBzaWduYWwgZmlyZWQgd2FzIHlvdXJzLgorLy8gVGhpcyBm
dW5jdGlvbiBpcyBjdXJyZW50bHkgYSBvbmUgd2F5IHN0cmVldCBpLmUuIG9uY2UgaW5zdGFsbGVk
LCBhIHNpZ25hbCBoYW5kbGVyIGNhbm5vdCBiZSB1bmluc3RhbGxlZC4KK3ZvaWQgaW5zdGFsbFNp
Z25hbEhhbmRsZXIoU2lnbmFsLCBTaWduYWxIYW5kbGVyJiYpOworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwordXNpbmcgV1RGOjpTaWduYWw7Cit1c2luZyBXVEY6OnRvU3lzdGVtU2lnbmFsOwordXNp
bmcgV1RGOjpmcm9tU3lzdGVtU2lnbmFsOwordXNpbmcgV1RGOjpTaWduYWxBY3Rpb247Cit1c2lu
ZyBXVEY6Omluc3RhbGxTaWduYWxIYW5kbGVyOworCisjZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGY1NjE3
NTliZjRjZDY0NjVmN2IyYzZkMzhlNWM3MmEzNGU0NzA0YjAuLjBlODI5YWViMjljMjcxYTAwMDc2
YTg5OTQwNzJkYTU5MjMzZTRlYjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNy0wNC0yMCAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc2lnbmFsaW5nIEFQSQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTc2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgQWRkIHRlc3RzIGZv
ciBUaHJlYWRNZXNzYWdlcy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcDogQWRkZWQuCisgICAgICAgIChydW5UaHJlYWRNZXNz
YWdlVGVzdCk6CisgICAgICAgIChURVNUKToKKwogMjAxNy0wNC0yMSAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlZHVjZSBjb3BpZXMgYW5k
IGFsbG9jYXRpb25zIGluIFNoYXJlZEJ1ZmZlcjo6YXBwZW5kCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDBkODViMmI0OGNmNWNjODM1Zjg3ZDY2OTgxNTZkYzczMWU0ZGI0NzQuLjYzNzhiNmRh
MDEyYTY3NmYwZjE0YThiZWRiODdlNWZlZDI2MjJhZDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xNzQsNiArMTc0LDcgQEAKIAkJNTJCOENGOTgxNTg2OEQ5MTAwMjgxMDUzIC8qIFNldERv
Y3VtZW50VVJJLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJCOENGOTQxNTg2OENGMDAwMjgxMDUzIC8qIFNldERvY3VtZW50VVJJLmh0
bWwgKi87IH07CiAJCTUyRDY3M0VFMUFGQjEyNzMwMEZBMTlGRSAvKiBXS1BhZ2VDb3B5U2Vzc2lv
blN0YXRlV2l0aEZpbHRlcmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkQ2NzNFQzFBRkIxMjY4MDBGQTE5RkUgLyogV0tQYWdlQ29weVNlc3Np
b25TdGF0ZVdpdGhGaWx0ZXJpbmcuY3BwICovOyB9OwogCQk1MkU1Q0U0OTE0RDIxRUFCMDAzQjJC
RDggLyogUGFyZW50RnJhbWVfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyRTVDRTQ4MTREMjFFQUIwMDNCMkJEOCAvKiBQYXJlbnRGcmFt
ZV9CdW5kbGUuY3BwICovOyB9OworCQk1MzExQkQ1RTFFQTk0OTBFMDA1MjUyODEgLyogVGhyZWFk
TWVzc2FnZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTMxMUJENUQxRUE5NDkwRDAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2VzLmNwcCAqLzsgfTsK
IAkJNTMxQzFEOEUxREY4RUY3MjAwNkU5NzlGIC8qIExFQkRlY29kZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxQzFEOEQxREY4RUY3MjAwNkU5
NzlGIC8qIExFQkRlY29kZXIuY3BwICovOyB9OwogCQk1MzY3NzAzNDFDQzgwMjI4MDBENDI1QjEg
LyogV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzY3NzAzMzFDQzgwMjI4MDBENDI1QjEgLyogV2ViU2Ny
aXB0T2JqZWN0RGVzY3JpcHRpb24ubW0gKi87IH07CiAJCTUzNjc3MDM2MUNDODFCNjEwMEQ0MjVC
MSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1sIGluIENvcHkgUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNjc3MDM1MUNDODEyRjkwMEQ0MjVC
MSAvKiBXZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1sICovOyB9OwpAQCAtMTExNiw2ICsx
MTE3LDcgQEAKIAkJNTJENjczRUMxQUZCMTI2ODAwRkExOUZFIC8qIFdLUGFnZUNvcHlTZXNzaW9u
U3RhdGVXaXRoRmlsdGVyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdLUGFnZUNvcHlTZXNzaW9uU3RhdGVXaXRoRmlsdGVyaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTJFNUNFNDUxNEQyMUU5RDAwM0IyQkQ4IC8qIFBhcmVudEZyYW1l
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcmVudEZyYW1lLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJFNUNFNDgxNEQyMUVBQjAwM0IyQkQ4
IC8qIFBhcmVudEZyYW1lX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYXJlbnRGcmFtZV9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MzExQkQ1RDFFQTk0OTBEMDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTWVzc2FnZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzFDMUQ4RDFERjhFRjcyMDA2RTk3OUYgLyogTEVC
RGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMRUJEZWNv
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM2NzcwMzMxQ0M4MDIyODAw
RDQyNUIxIC8qIFdlYlNjcmlwdE9iamVjdERlc2NyaXB0aW9uLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24ubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNjc3MDM1MUNDODEyRjkwMEQ0MjVCMSAvKiBX
ZWJTY3JpcHRPYmplY3REZXNjcmlwdGlvbi5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRo
ID0gV2ViU2NyaXB0T2JqZWN0RGVzY3JpcHRpb24uaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIxNzcsNiArMjE3OSw3IEBACiAJCQkJN0M3NEQ0MkQxODgyMjhGMzAwRTVFRDU3
IC8qIFN0cmluZ1ZpZXcuY3BwICovLAogCQkJCTU1OTdGODM0MUQ5NTk2QzgwMDY2QkMyMSAvKiBT
eW5jaHJvbml6ZWRGaXhlZFF1ZXVlLmNwcCAqLywKIAkJCQk5MzI5QUEyODFERTNGODFFMDAzQUJE
MDcgLyogVGV4dEJyZWFrSXRlcmF0b3IuY3BwICovLAorCQkJCTUzMTFCRDVEMUVBOTQ5MEQwMDUy
NTI4MSAvKiBUaHJlYWRNZXNzYWdlcy5jcHAgKi8sCiAJCQkJMEYyQzIwQjcxRENENTQ0ODAwNTQy
RDlFIC8qIFRpbWUuY3BwICovLAogCQkJCTVDNUU2MzNEMUQwQjY3OTQwMDg1QTAyNSAvKiBVbmlx
dWVSZWYuY3BwICovLAogCQkJCTdDRDBENUFBMUQ1NTM0REUwMDBDQzlFMSAvKiBWYXJpYW50LmNw
cCAqLywKQEAgLTI2OTcsNiArMjcwMCw3IEBACiAJCQkJN0M4M0RFRTAxRDBBNTkwQzAwRkVCQ0Yz
IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTMx
QzFEOEUxREY4RUY3MjAwNkU5NzlGIC8qIExFQkRlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJN0M4M0RFRTgxRDBBNTkwQzAwRkVCQ0YzIC8qIExpc3RIYXNoU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTUzMTFCRDVFMUVBOTQ5MEUwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYxRDFEMEE1OTBDMDBGRUJDRjMgLyogTG9jay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVFRDFEMEE1OTBDMDBGRUJDRjMgLyogTWF0aEV4dHJh
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVFRjFEMEE1OTBDMDBGRUJDRjMgLyogTUQ1
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
VGhyZWFkTWVzc2FnZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA5YTI3NzNmMjM0MWFjOWEzNmQ1YjRkNDU1
YTczMzZiZDBmNWI2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHAKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRl
IDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KKworc3RhdGljIHZvaWQg
cnVuVGhyZWFkTWVzc2FnZVRlc3QodW5zaWduZWQgbnVtU2VuZGVycywgdW5zaWduZWQgbnVtTWVz
c2FnZXMpCit7CisgICAgYm9vbCByZWNlaXZlclNob3VsZEtlZXBSdW5uaW5nID0gdHJ1ZTsKKyAg
ICBkYXRhTG9nTG4oInN0YXJ0aW5nIik7CisgICAgUmVmUHRyPFRocmVhZD4gcmVjZWl2ZXJUaHJl
YWQgPSBUaHJlYWQ6OmNyZWF0ZSgiVGhyZWFkTWVzc2FnZSByZWNlaXZlciIsIFsmcmVjZWl2ZXJT
aG91bGRLZWVwUnVubmluZ10gKCkgeworICAgICAgICB3aGlsZSAocmVjZWl2ZXJTaG91bGRLZWVw
UnVubmluZykgeyB9CisgICAgfSk7CisgICAgQVNTRVJUX1RSVUUocmVjZWl2ZXJUaHJlYWQpOwor
CisgICAgVmVjdG9yPFJlZlB0cjxUaHJlYWQ+PiBzZW5kZXJUaHJlYWRzKG51bVNlbmRlcnMpOwor
ICAgIFZlY3Rvcjx1bnNpZ25lZD4gbWVzc2FnZXNSdW4obnVtU2VuZGVycyk7CisgICAgVmVjdG9y
PHVuc2lnbmVkPiBoYW5kbGVyc1J1bihudW1TZW5kZXJzKTsKKyAgICBtZXNzYWdlc1J1bi5maWxs
KDApOworICAgIGhhbmRsZXJzUnVuLmZpbGwoMCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHNlbmRl
cklEID0gMDsgc2VuZGVySUQgPCBudW1TZW5kZXJzOyArK3NlbmRlcklEKSB7CisgICAgICAgIHNl
bmRlclRocmVhZHNbc2VuZGVySURdID0gVGhyZWFkOjpjcmVhdGUoIlRocmVhZE1lc3NhZ2Ugc2Vu
ZGVyIiwgW3NlbmRlcklELCBudW1NZXNzYWdlcywgcmVjZWl2ZXJUaHJlYWQsICZtZXNzYWdlc1J1
biwgJmhhbmRsZXJzUnVuXSAoKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtTWVzc2FnZXM7ICsraSkgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2Vu
ZE1lc3NhZ2UoKnJlY2VpdmVyVGhyZWFkLmdldCgpLCBbc2VuZGVySUQsICZoYW5kbGVyc1J1bl0g
KHNpZ2luZm9fdCosIHVjb250ZXh0X3QqKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJz
UnVuW3NlbmRlcklEXSsrOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIEVY
UEVDVF9UUlVFKHJlc3VsdCA9PSBXVEY6Ok1lc3NhZ2VTdGF0dXM6Ok1lc3NhZ2VSYW4pOworICAg
ICAgICAgICAgICAgIG1lc3NhZ2VzUnVuW3NlbmRlcklEXSsrOworICAgICAgICAgICAgfQorICAg
ICAgICB9KTsKKyAgICAgICAgQVNTRVJUX1RSVUUoc2VuZGVyVGhyZWFkc1tzZW5kZXJJRF0pOwor
ICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1TZW5kZXJzOyArK2kpCisg
ICAgICAgIHNlbmRlclRocmVhZHNbaV0tPndhaXRGb3JDb21wbGV0aW9uKCk7CisKKyAgICByZWNl
aXZlclNob3VsZEtlZXBSdW5uaW5nID0gZmFsc2U7CisgICAgcmVjZWl2ZXJUaHJlYWQtPndhaXRG
b3JDb21wbGV0aW9uKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU2VuZGVy
czsgKytpKSB7CisgICAgICAgIEVYUEVDVF9FUShudW1NZXNzYWdlcywgbWVzc2FnZXNSdW5baV0p
OworICAgICAgICBFWFBFQ1RfRVEobnVtTWVzc2FnZXMsIGhhbmRsZXJzUnVuW2ldKTsKKyAgICB9
Cit9CisKK1RFU1QoVGhyZWFkTWVzc2FnZSwgQmFzaWMpCit7CisgICAgcnVuVGhyZWFkTWVzc2Fn
ZVRlc3QoMSwgMSk7CisgICAgcnVuVGhyZWFkTWVzc2FnZVRlc3QoMSwgMTAwKTsKK30KKworVEVT
VChUaHJlYWRNZXNzYWdlLCBNdWx0aXBsZVNlbmRlcnMpCit7CisgICAgcnVuVGhyZWFkTWVzc2Fn
ZVRlc3QoMTAsIDEpOworICAgIHJ1blRocmVhZE1lc3NhZ2VUZXN0KDEwLCAxMDApOworICAgIHJ1
blRocmVhZE1lc3NhZ2VUZXN0KDEwLCAxMDAwMCk7Cit9CisKK2NsYXNzIFJlZmxlY3RlZFRocmVh
ZCA6IHB1YmxpYyBUaHJlYWQgeworcHVibGljOgorICAgIHVzaW5nIFRocmVhZDo6bV9tdXRleDsK
KyAgICB1c2luZyBUaHJlYWQ6Om1faGFuZGxlOworICAgIHVzaW5nIFRocmVhZDo6aGFzRXhpdGVk
OworfTsKKworVEVTVChUaHJlYWRNZXNzYWdlLCBTaWduYWxzV29ya09uRXhpdCkKK3sKKyAgICBz
dGF0aWMgYm9vbCBoYW5kbGVyUmFuID0gZmFsc2U7CisgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIo
U2lnbmFsOjpVc3IsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqKSAtPiBTaWduYWxBY3Rpb24g
eworICAgICAgICBkYXRhTG9nTG4oImhlcmUiKTsKKyAgICAgICAgaGFuZGxlclJhbiA9IHRydWU7
CisgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7CisgICAgfSk7CisKKyAgICBi
b29sIHJlY2VpdmVyU2hvdWxkS2VlcFJ1bm5pbmcgPSB0cnVlOworICAgIFJlZlB0cjxUaHJlYWQ+
IHJlY2VpdmVyVGhyZWFkID0gKFRocmVhZDo6Y3JlYXRlKCJUaHJlYWRNZXNzYWdlIHJlY2VpdmVy
IiwKKyAgICAgICAgWyZyZWNlaXZlclNob3VsZEtlZXBSdW5uaW5nXSAoKSB7CisgICAgICAgICAg
ICB3aGlsZSAocmVjZWl2ZXJTaG91bGRLZWVwUnVubmluZykgeyB9CisgICAgfSkpOworICAgIEFT
U0VSVF9UUlVFKHJlY2VpdmVyVGhyZWFkKTsKKworICAgIGJvb2wgc2lnbmFsRmlyZWQ7CisgICAg
eworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihzdGF0aWNfY2Fz
dDxSZWZsZWN0ZWRUaHJlYWQqPihyZWNlaXZlclRocmVhZC5nZXQoKSktPm1fbXV0ZXgpOworICAg
ICAgICByZWNlaXZlclNob3VsZEtlZXBSdW5uaW5nID0gZmFsc2U7CisgICAgICAgIEVYUEVDVF9G
QUxTRShzdGF0aWNfY2FzdDxSZWZsZWN0ZWRUaHJlYWQqPihyZWNlaXZlclRocmVhZC5nZXQoKSkt
Pmhhc0V4aXRlZCgpKTsKKyAgICAgICAgc2xlZXAoMSk7CisgICAgICAgIHNpZ25hbEZpcmVkID0g
IXB0aHJlYWRfa2lsbChzdGF0aWNfY2FzdDxSZWZsZWN0ZWRUaHJlYWQqPihyZWNlaXZlclRocmVh
ZC5nZXQoKSktPm1faGFuZGxlLCB0b1N5c3RlbVNpZ25hbChTaWduYWw6OlVzcikpOworICAgIH0K
KworICAgIHJlY2VpdmVyVGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOworICAgIEVYUEVDVF9U
UlVFKGhhbmRsZXJSYW4gfHwgIXNpZ25hbEZpcmVkKTsKK30KKwo=
</data>
<flag name="commit-queue"
          id="328988"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>