<?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>150888</bug_id>
          
          <creation_ts>2015-11-04 02:58:22 -0800</creation_ts>
          <short_desc>[GStreamer] Do not use GThreadSafeMainLoopSource to send notifications to the main thread in MediaPlayerPrivateGStreamer</short_desc>
          <delta_ts>2015-11-06 04:57:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150889</blocked>
    
    <blocked>150890</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>pnormand</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1139307</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-04 02:58:22 -0800</bug_when>
    <thetext>Analyzing how the main loop sources were used in GST code I&apos;ve noticed that in most of the cases they are used to send notifications to the main thread. The way it works in those cases is that some state is updated in whatever thread and we notify the main thread to use the new state. There&apos;s no data passed to the main thread, they are just notifications. I&apos;ve also noticed that we are not doing this exactly as expected in several of those cases. GThreadSafeMainLoopSource cancels the current source when a new one is scheduled, and that was done this way because previous code in GST using GSources directly did it that way. But that&apos;s not what we want, if there&apos;s a notification pending, since the state is updated, we can just wait for it to happen instead of cancelling and scheduling a new one. I&apos;ve also noticed that in most of the cases where we schedule notifications to the main thread, we can be already in the main thread, so we could avoid the schedule entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139309</commentid>
    <comment_count>1</comment_count>
      <attachid>264786</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-04 03:09:05 -0800</bug_when>
    <thetext>Created attachment 264786
Patch

We can use RunLoop::dispatch() to send notifications to the main thread, but there&apos;s no way to cancel those tasks. This patch adds a new helper class MainThreadNotifier that uses an enum of flags to handle different kind of notifications. It uses RunLoop::dispatch() to send notifications to the main thread, but only if there isn&apos;t one pending for the given type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139310</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-04 03:10:47 -0800</bug_when>
    <thetext>Attachment 264786 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:326:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:378:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/MainThreadNotifier.h:36:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:615:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:660:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:674:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:720:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 7 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139573</commentid>
    <comment_count>3</comment_count>
      <attachid>264786</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-11-05 03:02:21 -0800</bug_when>
    <thetext>Comment on attachment 264786
Patch

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

Again, please have Phil review the patch as well.

&gt; Source/WebCore/platform/graphics/gstreamer/MainThreadNotifier.h:29
&gt; +template &lt;typename T&gt;
&gt; +class MainThreadNotifier {

Neat implementation.

&gt; Source/WebCore/platform/graphics/gstreamer/MainThreadNotifier.h:46
&gt; +            if (!weakThis)
&gt; +                return;
&gt; +            if (weakThis-&gt;removePendingNotitifation(notificationType))
&gt; +                callback();

Can this be a two-liner?

&gt; if (weakThis &amp;&amp; weakThis-&gt;removePendingNotification(notificationType))
&gt;     callback();

&gt; Source/WebCore/platform/graphics/gstreamer/MainThreadNotifier.h:61
&gt; +    bool addPendingNotitifation(T notificationType)

Typo: notitifation.

&gt; Source/WebCore/platform/graphics/gstreamer/MainThreadNotifier.h:70
&gt; +    bool removePendingNotitifation(T notificationType)

Ditto re: typo.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:615
&gt; +    if (isMainThread())
&gt; +        player-&gt;notifyPlayerOfVideo();
&gt; +    else
&gt; +        player-&gt;m_notifier.notify(MainThreadNotification::VideoChanged, [player] { player-&gt;notifyPlayerOfVideo(); });

This isMainThread() check and the conditional immediate execution could be rolled up into the notifier class. Would save some lines.

MainThreadNotifier::notify() would accept a templated functor as the second parameter, invoke it immediately if on the main thread, or wrap it in std::function&lt;&gt; and dispatch it onto the main thread via RunLoop otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139580</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-05 04:19:47 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 264786 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264786&amp;action=review
&gt; 
&gt; Again, please have Phil review the patch as well.

Sure.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MainThreadNotifier.h:29
&gt; &gt; +template &lt;typename T&gt;
&gt; &gt; +class MainThreadNotifier {
&gt; 
&gt; Neat implementation.

:-)

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MainThreadNotifier.h:46
&gt; &gt; +            if (!weakThis)
&gt; &gt; +                return;
&gt; &gt; +            if (weakThis-&gt;removePendingNotitifation(notificationType))
&gt; &gt; +                callback();
&gt; 
&gt; Can this be a two-liner?

Sure.

&gt; &gt; if (weakThis &amp;&amp; weakThis-&gt;removePendingNotification(notificationType))
&gt; &gt;     callback();
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MainThreadNotifier.h:61
&gt; &gt; +    bool addPendingNotitifation(T notificationType)
&gt; 
&gt; Typo: notitifation.

Oops

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MainThreadNotifier.h:70
&gt; &gt; +    bool removePendingNotitifation(T notificationType)
&gt; 
&gt; Ditto re: typo.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:615
&gt; &gt; +    if (isMainThread())
&gt; &gt; +        player-&gt;notifyPlayerOfVideo();
&gt; &gt; +    else
&gt; &gt; +        player-&gt;m_notifier.notify(MainThreadNotification::VideoChanged, [player] { player-&gt;notifyPlayerOfVideo(); });
&gt; 
&gt; This isMainThread() check and the conditional immediate execution could be
&gt; rolled up into the notifier class. Would save some lines.
&gt; 
&gt; MainThreadNotifier::notify() would accept a templated functor as the second
&gt; parameter, invoke it immediately if on the main thread, or wrap it in
&gt; std::function&lt;&gt; and dispatch it onto the main thread via RunLoop otherwise.

I thought about that, but decided to do it in callers to avoid the function creation just to invoke a member method. But I&apos;m not sure if creating the function would have any real impact in the end, what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139903</commentid>
    <comment_count>5</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-11-06 00:55:45 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:615
&gt; &gt; &gt; +    if (isMainThread())
&gt; &gt; &gt; +        player-&gt;notifyPlayerOfVideo();
&gt; &gt; &gt; +    else
&gt; &gt; &gt; +        player-&gt;m_notifier.notify(MainThreadNotification::VideoChanged, [player] { player-&gt;notifyPlayerOfVideo(); });
&gt; &gt; 
&gt; &gt; This isMainThread() check and the conditional immediate execution could be
&gt; &gt; rolled up into the notifier class. Would save some lines.
&gt; &gt; 
&gt; &gt; MainThreadNotifier::notify() would accept a templated functor as the second
&gt; &gt; parameter, invoke it immediately if on the main thread, or wrap it in
&gt; &gt; std::function&lt;&gt; and dispatch it onto the main thread via RunLoop otherwise.
&gt; 
&gt; I thought about that, but decided to do it in callers to avoid the function
&gt; creation just to invoke a member method. But I&apos;m not sure if creating the
&gt; function would have any real impact in the end, what do you think?

You wouldn&apos;t create a std::function&lt;&gt; object until you know you&apos;re not on the main thread and have to use the RunLoop dispatch instead.

    template&lt;typename F&gt;
    void notify(T notificationType, const F&amp; callbackFunctor)
    {
        if (!addPendingNotitifation(notificationType))
            return;

        if (!isMainThread()) {
            auto weakThis = m_weakPtrFactory.createWeakPtr();
            std::function&lt;void ()&gt; callback(callbackFunctor);
            RunLoop::main().dispatch([weakThis, notificationType, callback] {
                if (weakThis &amp;&amp; weakThis-&gt;removePendingNotitifation(notificationType))
                    callback();
            });
        } else
            callbackFunctor();
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139931</commentid>
    <comment_count>6</comment_count>
      <attachid>264932</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-06 03:32:18 -0800</bug_when>
    <thetext>Created attachment 264932
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139932</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-06 03:33:50 -0800</bug_when>
    <thetext>Attachment 264932 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:323:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:372:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/MainThreadNotifier.h:50:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:612:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:654:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:665:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:708:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 7 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139934</commentid>
    <comment_count>8</comment_count>
      <attachid>264932</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-11-06 04:12:25 -0800</bug_when>
    <thetext>Comment on attachment 264932
Updated patch

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

r=me if Phil doesn&apos;t object.

&gt; Source/WebCore/ChangeLog:38
&gt; +        (WebCore::MainThreadNotifier::addPendingNotitifation):
&gt; +        (WebCore::MainThreadNotifier::removePendingNotitifation):

Update this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139939</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-06 04:57:04 -0800</bug_when>
    <thetext>Committed r192099: &lt;http://trac.webkit.org/changeset/192099&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264786</attachid>
            <date>2015-11-04 03:09:05 -0800</date>
            <delta_ts>2015-11-06 03:32:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-gst-main-thread-notifier.diff</filename>
            <type>text/plain</type>
            <size>30469</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiZTg4ZjNjLi44YjJlZmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzgg
QEAKKzIwMTUtMTEtMDQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHU3RyZWFtZXJdIERvIG5vdCB1c2UgR1RocmVhZFNhZmVNYWluTG9vcFNv
dXJjZSB0byBzZW5kIG5vdGlmaWNhdGlvbnMgdG8gdGhlIG1haW4gdGhyZWFkIGluIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUwODg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQW5hbHl6aW5nIGhvdyB0aGUgbWFpbiBsb29wIHNvdXJjZXMgd2VyZSB1c2Vk
IGluIEdTVCBjb2RlIEkndmUKKyAgICAgICAgbm90aWNlZCB0aGF0IGluIG1vc3Qgb2YgdGhlIGNh
c2VzIHRoZXkgYXJlIHVzZWQgdG8gc2VuZAorICAgICAgICBub3RpZmljYXRpb25zIHRvIHRoZSBt
YWluIHRocmVhZC4gVGhlIHdheSBpdCB3b3JrcyBpbiB0aG9zZSBjYXNlcworICAgICAgICBpcyB0
aGF0IHNvbWUgc3RhdGUgaXMgdXBkYXRlZCBpbiB3aGF0ZXZlciB0aHJlYWQgYW5kIHdlIG5vdGlm
eSB0aGUKKyAgICAgICAgbWFpbiB0aHJlYWQgdG8gdXNlIHRoZSBuZXcgc3RhdGUuIFRoZXJlJ3Mg
bm8gZGF0YSBwYXNzZWQgdG8gdGhlCisgICAgICAgIG1haW4gdGhyZWFkLCB0aGV5IGFyZSBqdXN0
IG5vdGlmaWNhdGlvbnMuIEkndmUgYWxzbyBub3RpY2VkIHRoYXQKKyAgICAgICAgd2UgYXJlIG5v
dCBkb2luZyB0aGlzIGV4YWN0bHkgYXMgZXhwZWN0ZWQgaW4gc2V2ZXJhbCBvZiB0aG9zZQorICAg
ICAgICBjYXNlcy4gR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBjYW5jZWxzIHRoZSBjdXJyZW50
IHNvdXJjZSB3aGVuIGEKKyAgICAgICAgbmV3IG9uZSBpcyBzY2hlZHVsZWQsIGFuZCB0aGF0IHdh
cyBkb25lIHRoaXMgd2F5IGJlY2F1c2UgcHJldmlvdXMKKyAgICAgICAgY29kZSBpbiBHU1QgdXNp
bmcgR1NvdXJjZXMgZGlyZWN0bHkgZGlkIGl0IHRoYXQgd2F5LiBCdXQgdGhhdCdzCisgICAgICAg
IG5vdCB3aGF0IHdlIHdhbnQsIGlmIHRoZXJlJ3MgYSBub3RpZmljYXRpb24gcGVuZGluZywgc2lu
Y2UgdGhlCisgICAgICAgIHN0YXRlIGlzIHVwZGF0ZWQsIHdlIGNhbiBqdXN0IHdhaXQgZm9yIGl0
IHRvIGhhcHBlbiBpbnN0ZWFkIG9mCisgICAgICAgIGNhbmNlbGxpbmcgYW5kIHNjaGVkdWxpbmcg
YSBuZXcgb25lLiBJJ3ZlIGFsc28gbm90aWNlZCB0aGF0IGluCisgICAgICAgIG1vc3Qgb2YgdGhl
IGNhc2VzIHdoZXJlIHdlIHNjaGVkdWxlIG5vdGlmaWNhdGlvbnMgdG8gdGhlIG1haW4KKyAgICAg
ICAgdGhyZWFkLCB3ZSBjYW4gYmUgYWxyZWFkeSBpbiB0aGUgbWFpbiB0aHJlYWQsIHNvIHdlIGNv
dWxkIGF2b2lkCisgICAgICAgIHRoZSBzY2hlZHVsZSBlbnRpcmVseS4KKyAgICAgICAgV2UgY2Fu
IHVzZSBSdW5Mb29wOjpkaXNwYXRjaCgpIHRvIHNlbmQgbm90aWZpY2F0aW9ucyB0byB0aGUgbWFp
bgorICAgICAgICB0aHJlYWQsIGJ1dCB0aGVyZSdzIG5vIHdheSB0byBjYW5jZWwgdGhvc2UgdGFz
a3MuIFRoaXMgcGF0Y2ggYWRkcworICAgICAgICBhIG5ldyBoZWxwZXIgY2xhc3MgTWFpblRocmVh
ZE5vdGlmaWVyIHRoYXQgdXNlcyBhbiBlbnVtIG9mIGZsYWdzIHRvCisgICAgICAgIGhhbmRsZSBk
aWZmZXJlbnQga2luZCBvZiBub3RpZmljYXRpb25zLiBJdCB1c2VzCisgICAgICAgIFJ1bkxvb3A6
OmRpc3BhdGNoKCkgdG8gc2VuZCBub3RpZmljYXRpb25zIHRvIHRoZSBtYWluIHRocmVhZCwgYnV0
CisgICAgICAgIG9ubHkgaWYgdGhlcmUgaXNuJ3Qgb25lIHBlbmRpbmcgZm9yIHRoZSBnaXZlbiB0
eXBlLgorICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMgc2lnbmFsIGNhbGxiYWNrcyBzdGF0
aWMgbWVtYmVycyB0byBiZSBhYmxlCisgICAgICAgIHRvIG1ha2UgdGhlIHByaXZhdGUgbWV0aG9k
cyBhY3R1YWxseSBwcml2YXRlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01haW5UaHJlYWROb3RpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1haW5U
aHJlYWROb3RpZmllcjo6TWFpblRocmVhZE5vdGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1h
aW5UaHJlYWROb3RpZmllcjo6bm90aWZ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRO
b3RpZmllcjo6Y2FuY2VsUGVuZGluZ05vdGlmaWNhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
TWFpblRocmVhZE5vdGlmaWVyOjphZGRQZW5kaW5nTm90aXRpZmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1haW5UaHJlYWROb3RpZmllcjo6cmVtb3ZlUGVuZGluZ05vdGl0aWZhdGlvbik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnNldEF1ZGlvU3RyZWFtUHJvcGVydGllc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVv
Q2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6dmlkZW9TaW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvQ2hhbmdlZENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dGV4dENoYW5nZWRD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
Om5ld1RleHRTYW1wbGVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnNvdXJjZUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUF1ZGlvU2luayk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4p
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRBdWRp
b1N0cmVhbVByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWdpc3Rlck1lZGlhRW5naW5lKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6bG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW8pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5UGxheWVyT2ZUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y2FuU2F2ZU1lZGlhRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6On5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZvbHVtZUNoYW5n
ZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjptdXRlQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlcGFpbnRDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpkcmF3Q2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y3JlYXRlVmlk
ZW9TaW5rKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2U6OnNldFN0cmVhbVZvbHVtZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlOjpzZXRQaXBlbGluZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlOjpoYW5kbGVTeW5jTWVzc2FnZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjptdXRlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
Ojp1cGRhdGVUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRyb3BwZWRGcmFtZUNvdW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZTo6c2V0VmlzaWJsZSk6IERlbGV0ZWQuCisKIDIwMTUtMTEtMDMgIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJdIFVzZSBS
dW5Mb29wOjpUaW1lciBpbnN0ZWFkIG9mIEdNYWluTG9vcFNvdXJjZSBpbiB2aWRlbyBzaW5rCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWFp
blRocmVhZE5vdGlmaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWFpblRocmVhZE5vdGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNmEwMzBiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NYWluVGhyZWFkTm90aWZpZXIuaApAQCAtMCwwICsxLDg4IEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaWZuZGVmIE1haW5UaHJlYWROb3RpZmllcl9oCisjZGVmaW5lIE1h
aW5UaHJlYWROb3RpZmllcl9oCisKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIE1haW5UaHJlYWROb3RpZmllciB7
CitwdWJsaWM6CisgICAgTWFpblRocmVhZE5vdGlmaWVyKCkKKyAgICAgICAgOiBtX3dlYWtQdHJG
YWN0b3J5KHRoaXMpCisgICAgeworICAgIH0KKworICAgIHZvaWQgbm90aWZ5KFQgbm90aWZpY2F0
aW9uVHlwZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjYWxsYmFjaykKKyAgICB7CisgICAgICAg
IGlmICghYWRkUGVuZGluZ05vdGl0aWZhdGlvbihub3RpZmljYXRpb25UeXBlKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHdlYWtUaGlzID0gbV93ZWFrUHRyRmFjdG9yeS5j
cmVhdGVXZWFrUHRyKCk7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1Ro
aXMsIG5vdGlmaWNhdGlvblR5cGUsIGNhbGxiYWNrXSB7CisgICAgICAgICAgICBpZiAoIXdlYWtU
aGlzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmICh3ZWFrVGhpcy0+
cmVtb3ZlUGVuZGluZ05vdGl0aWZhdGlvbihub3RpZmljYXRpb25UeXBlKSkKKyAgICAgICAgICAg
ICAgICBjYWxsYmFjaygpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICB2b2lkIGNhbmNlbFBl
bmRpbmdOb3RpZmljYXRpb25zKHVuc2lnbmVkIG1hc2sgPSAwKQorICAgIHsKKyAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9wZW5kaW5nTm90aWZpY2F0aW9uc0xvY2spOworICAgICAgICBpZiAo
bWFzaykKKyAgICAgICAgICAgIG1fcGVuZGluZ05vdGlmaWNhdGlvbnMgJj0gfm1hc2s7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGVuZGluZ05vdGlmaWNhdGlvbnMgPSAwOworICAgIH0K
KworcHJpdmF0ZToKKworICAgIGJvb2wgYWRkUGVuZGluZ05vdGl0aWZhdGlvbihUIG5vdGlmaWNh
dGlvblR5cGUpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BlbmRpbmdOb3Rp
ZmljYXRpb25zTG9jayk7CisgICAgICAgIGlmIChub3RpZmljYXRpb25UeXBlICYgbV9wZW5kaW5n
Tm90aWZpY2F0aW9ucykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9wZW5k
aW5nTm90aWZpY2F0aW9ucyB8PSBub3RpZmljYXRpb25UeXBlOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBib29sIHJlbW92ZVBlbmRpbmdOb3RpdGlmYXRpb24oVCBub3RpZmlj
YXRpb25UeXBlKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wZW5kaW5nTm90
aWZpY2F0aW9uc0xvY2spOworICAgICAgICBpZiAobm90aWZpY2F0aW9uVHlwZSAmIG1fcGVuZGlu
Z05vdGlmaWNhdGlvbnMpIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ05vdGlmaWNhdGlvbnMgJj0g
fm5vdGlmaWNhdGlvblR5cGU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgV2Vha1B0ckZhY3Rvcnk8TWFpblRo
cmVhZE5vdGlmaWVyPiBtX3dlYWtQdHJGYWN0b3J5OworICAgIExvY2sgbV9wZW5kaW5nTm90aWZp
Y2F0aW9uc0xvY2s7CisgICAgdW5zaWduZWQgbV9wZW5kaW5nTm90aWZpY2F0aW9ucyB7IDAgfTsK
K307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTWFpblRocmVhZE5v
dGlmaWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAKaW5kZXggMTdiMjJhNi4uNDAyM2E4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTc2LDQ1ICs3NiwxMSBAQCB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2b2lkIG1lZGlhUGxheWVy
UHJpdmF0ZVNvdXJjZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyosIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQotewotICAgIHBsYXllci0+c291cmNlQ2hh
bmdlZCgpOwotfQotCi1zdGF0aWMgdm9pZCBtZWRpYVBsYXllclByaXZhdGVWaWRlb1NpbmtDYXBz
Q2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyKiBwbGF5ZXIpCi17Ci0gICAgcGxheWVyLT52aWRlb0NhcHNDaGFuZ2VkKCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZVZpZGVvQ2hhbmdlZENhbGxiYWNrKEdP
YmplY3QqLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKLXsKLSAgICBwbGF5
ZXItPnZpZGVvQ2hhbmdlZCgpOwotfQotCi1zdGF0aWMgdm9pZCBtZWRpYVBsYXllclByaXZhdGVB
dWRpb0NoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
KiBwbGF5ZXIpCi17Ci0gICAgcGxheWVyLT5hdWRpb0NoYW5nZWQoKTsKLX0KLQotc3RhdGljIHZv
aWQgc2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzQ2FsbGJhY2soR3N0Q2hpbGRQcm94eSosIEdPYmpl
Y3QqIG9iamVjdCwgZ2NoYXIqLAotICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxh
eWVyKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldEF1ZGlvU3RyZWFtUHJv
cGVydGllc0NhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyLCBHT2Jq
ZWN0KiBvYmplY3QpCiB7CiAgICAgcGxheWVyLT5zZXRBdWRpb1N0cmVhbVByb3BlcnRpZXMob2Jq
ZWN0KTsKIH0KIAotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLXN0YXRpYyB2b2lkIG1lZGlhUGxh
eWVyUHJpdmF0ZVRleHRDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCosIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lciogcGxheWVyKQotewotICAgIHBsYXllci0+dGV4dENoYW5nZWQoKTsKLX0KLQot
c3RhdGljIEdzdEZsb3dSZXR1cm4gbWVkaWFQbGF5ZXJQcml2YXRlTmV3VGV4dFNhbXBsZUNhbGxi
YWNrKEdPYmplY3QqLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKLXsKLSAg
ICBwbGF5ZXItPm5ld1RleHRTYW1wbGUoKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0j
ZW5kaWYKLQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldEF1ZGlvU3RyZWFt
UHJvcGVydGllcyhHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgaWYgKGdfc3RyY21wMChHX09CSkVD
VF9UWVBFX05BTUUob2JqZWN0KSwgIkdzdFB1bHNlU2luayIpKQpAQCAtMjQ0LDIxICsyMTAsMTMg
QEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKCkKICAgICAgICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxp
bmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkpKTsKICAgICAgICAgQVNT
RVJUKGJ1cyk7CiAgICAgICAgIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcihidXMuZ2V0KCksIG51
bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOwotCi0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rp
c2Nvbm5lY3RfYnlfZnVuYyhtX3BpcGVsaW5lLmdldCgpLCByZWludGVycHJldF9jYXN0PGdwb2lu
dGVyPihtZWRpYVBsYXllclByaXZhdGVTb3VyY2VDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fcGlwZWxpbmUuZ2V0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KG1lZGlhUGxheWVyUHJpdmF0ZVZpZGVvQ2hh
bmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5l
Y3RfYnlfZnVuYyhtX3BpcGVsaW5lLmdldCgpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPiht
ZWRpYVBsYXllclByaXZhdGVBdWRpb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotI2lmIEVOQUJM
RShWSURFT19UUkFDSykKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9m
dW5jKG1fcGlwZWxpbmUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KG1lZGlhUGxh
eWVyUHJpdmF0ZU5ld1RleHRTYW1wbGVDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25h
bF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9waXBlbGluZS5nZXQoKSwgcmVpbnRlcnBy
ZXRfY2FzdDxncG9pbnRlcj4obWVkaWFQbGF5ZXJQcml2YXRlVGV4dENoYW5nZWRDYWxsYmFjayks
IHRoaXMpOwotI2VuZGlmCi0KKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9t
YXRjaGVkKG1fcGlwZWxpbmUuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxw
dHIsIG51bGxwdHIsIHRoaXMpOwogICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBl
bGluZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOwogICAgIH0KIAogICAgIGlmIChtX3ZpZGVvU2lu
aykgewogICAgICAgICBHUmVmUHRyPEdzdFBhZD4gdmlkZW9TaW5rUGFkID0gYWRvcHRHUmVmKGdz
dF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fdmlkZW9TaW5rLmdldCgpLCAic2luayIpKTsKLSAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHZpZGVvU2lua1BhZC5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4obWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9T
aW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmModmlkZW9TaW5rUGFkLmdldCgpLCByZWludGVycHJldF9jYXN0
PGdwb2ludGVyPih2aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAgICAgfQog
fQogCkBAIC02NDksMTYgKzYwNywxMiBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2Vla2luZygpIGNvbnN0CiAgICAgcmV0dXJuIG1fc2Vla2luZzsKIH0KIAotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVvQ2hhbmdlZCgpCi17Ci0gICAgbV92aWRlb1Rp
bWVySGFuZGxlci5zY2hlZHVsZSgiW1dlYktpdF0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojp2aWRlb0NoYW5nZWQiLAotICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oW3RoaXNdIHsg
bm90aWZ5UGxheWVyT2ZWaWRlbygpOyB9KSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp2aWRlb0NhcHNDaGFuZ2VkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp2aWRlb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIq
IHBsYXllcikKIHsKLSAgICBtX3ZpZGVvQ2Fwc1RpbWVySGFuZGxlci5zY2hlZHVsZSgiW1dlYktp
dF0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRlb0NhcHNDaGFuZ2VkIiwKLSAgICAg
ICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KFt0aGlzXSB7IG5vdGlmeVBsYXllck9mVmlkZW9DYXBz
KCk7IH0pKTsKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpCisgICAgICAgIHBsYXllci0+bm90aWZ5
UGxheWVyT2ZWaWRlbygpOworICAgIGVsc2UKKyAgICAgICAgcGxheWVyLT5tX25vdGlmaWVyLm5v
dGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpWaWRlb0NoYW5nZWQsIFtwbGF5ZXJdIHsgcGxh
eWVyLT5ub3RpZnlQbGF5ZXJPZlZpZGVvKCk7IH0pOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlbygpCkBAIC02OTgsMTYgKzY1MiwyNiBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlbygp
CiAgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyRW5naW5lVXBkYXRlZChtX3BsYXll
cik7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRlb1NpbmtDYXBz
Q2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQorewor
ICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAgICAgICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZlZp
ZGVvQ2FwcygpOworICAgIGVsc2UKKyAgICAgICAgcGxheWVyLT5tX25vdGlmaWVyLm5vdGlmeShN
YWluVGhyZWFkTm90aWZpY2F0aW9uOjpWaWRlb0NhcHNDaGFuZ2VkLCBbcGxheWVyXSB7IHBsYXll
ci0+bm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMoKTsgfSk7Cit9CisKIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvQ2FwcygpCiB7CiAgICAgbV92aWRl
b1NpemUgPSBJbnRTaXplKCk7CiAgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyRW5n
aW5lVXBkYXRlZChtX3BsYXllcik7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjphdWRpb0NoYW5nZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1
ZGlvQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQog
ewotICAgIG1fYXVkaW9UaW1lckhhbmRsZXIuc2NoZWR1bGUoIltXZWJLaXRdIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9DaGFuZ2VkIiwKLSAgICAgICAgc3RkOjpmdW5jdGlvbjx2
b2lkKCk+KFt0aGlzXSB7IG5vdGlmeVBsYXllck9mQXVkaW8oKTsgfSkpOworICAgIGlmIChpc01h
aW5UaHJlYWQoKSkKKyAgICAgICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZkF1ZGlvKCk7CisgICAg
ZWxzZQorICAgICAgICBwbGF5ZXItPm1fbm90aWZpZXIubm90aWZ5KE1haW5UaHJlYWROb3RpZmlj
YXRpb246OkF1ZGlvQ2hhbmdlZCwgW3BsYXllcl0geyBwbGF5ZXItPm5vdGlmeVBsYXllck9mQXVk
aW8oKTsgfSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQ
bGF5ZXJPZkF1ZGlvKCkKQEAgLTc0OCwxMCArNzEyLDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKCkKIH0KIAogI2lmIEVOQUJMRShWSURF
T19UUkFDSykKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0ZXh0Q2hhbmdlZCgp
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dGV4dENoYW5nZWRDYWxsYmFjayhN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKIHsKLSAgICBtX3RleHRUaW1lckhh
bmRsZXIuc2NoZWR1bGUoIltXZWJLaXRdIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dGV4
dENoYW5nZWQiLAotICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oW3RoaXNdIHsgbm90aWZ5
UGxheWVyT2ZUZXh0KCk7IH0pKTsKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpCisgICAgICAgIHBs
YXllci0+bm90aWZ5UGxheWVyT2ZUZXh0KCk7CisgICAgZWxzZQorICAgICAgICBwbGF5ZXItPm1f
bm90aWZpZXIubm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlRleHRDaGFuZ2VkLCBbcGxh
eWVyXSB7IHBsYXllci0+bm90aWZ5UGxheWVyT2ZUZXh0KCk7IH0pOwogfQogCiB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KCkKQEAgLTc4NSw2ICs3
NTEsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9m
VGV4dCgpCiAgICAgfQogfQogCitHc3RGbG93UmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bmV3VGV4dFNhbXBsZUNhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciog
cGxheWVyKQoreworICAgIHBsYXllci0+bmV3VGV4dFNhbXBsZSgpOworICAgIHJldHVybiBHU1Rf
RkxPV19PSzsKK30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1RleHRT
YW1wbGUoKQogewogICAgIGlmICghbV90ZXh0QXBwU2luaykKQEAgLTEzMTgsNiArMTI5MCwxMSBA
QCB1bnNpZ25lZCBsb25nIGxvbmcgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0b3RhbEJ5
dGVzKCkgY29uc3QKICAgICByZXR1cm4gbV90b3RhbEJ5dGVzOwogfQogCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lciogcGxheWVyKQoreworICAgIHBsYXllci0+c291cmNlQ2hhbmdlZCgpOwor
fQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlQ2hhbmdlZCgpCiB7
CiAgICAgbV9zb3VyY2UuY2xlYXIoKTsKQEAgLTE4NjgsNyArMTg0NSw3IEBAIEdzdEVsZW1lbnQq
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlQXVkaW9TaW5rKCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgZ19zaWduYWxfY29ubmVjdChtX2F1dG9BdWRp
b1NpbmsuZ2V0KCksICJjaGlsZC1hZGRlZCIsIEdfQ0FMTEJBQ0soc2V0QXVkaW9TdHJlYW1Qcm9w
ZXJ0aWVzQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9h
dXRvQXVkaW9TaW5rLmdldCgpLCAiY2hpbGQtYWRkZWQiLCBHX0NBTExCQUNLKHNldEF1ZGlvU3Ry
ZWFtUHJvcGVydGllc0NhbGxiYWNrKSwgdGhpcyk7CiAKICAgICBHc3RFbGVtZW50KiBhdWRpb1Np
bmtCaW47CiAKQEAgLTE5NjAsMTIgKzE5MzcsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oKQogCiAgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxp
bmUuZ2V0KCksICJtdXRlIiwgbV9wbGF5ZXItPm11dGVkKCksIG51bGxwdHIpOwogCi0gICAgZ19z
aWduYWxfY29ubmVjdChtX3BpcGVsaW5lLmdldCgpLCAibm90aWZ5Ojpzb3VyY2UiLCBHX0NBTExC
QUNLKG1lZGlhUGxheWVyUHJpdmF0ZVNvdXJjZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9waXBlbGluZS5nZXQoKSwgInZpZGVvLWNoYW5nZWQiLCBHX0NB
TExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVZpZGVvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0g
ICAgZ19zaWduYWxfY29ubmVjdChtX3BpcGVsaW5lLmdldCgpLCAiYXVkaW8tY2hhbmdlZCIsIEdf
Q0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlQXVkaW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5nZXQoKSwgIm5vdGlmeTo6
c291cmNlIiwgR19DQUxMQkFDSyhzb3VyY2VDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5nZXQoKSwgInZpZGVvLWNoYW5nZWQi
LCBHX0NBTExCQUNLKHZpZGVvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKG1fcGlwZWxpbmUuZ2V0KCksICJhdWRpby1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhhdWRpb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogI2lmIEVOQUJMRShWSURFT19UUkFD
SykKICAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDEsIDIpKSB7Ci0gICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV9waXBlbGluZS5nZXQoKSwgInRleHQtY2hhbmdlZCIsIEdfQ0FMTEJB
Q0sobWVkaWFQbGF5ZXJQcml2YXRlVGV4dENoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5nZXQoKSwgInRleHQtY2hhbmdl
ZCIsIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogCiAgICAgICAgIEdz
dEVsZW1lbnQqIHRleHRDb21iaW5lciA9IHdlYmtpdFRleHRDb21iaW5lck5ldygpOwogICAgICAg
ICBBU1NFUlQodGV4dENvbWJpbmVyKTsKQEAgLTE5NzgsNyArMTk1NSw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKCkKICAgICAgICAgQVNTRVJU
KG1fdGV4dEFwcFNpbmtQYWQpOwogCiAgICAgICAgIGdfb2JqZWN0X3NldChtX3RleHRBcHBTaW5r
LmdldCgpLCAiZW1pdC1zaWduYWxzIiwgdHJ1ZSwgImVuYWJsZS1sYXN0LXNhbXBsZSIsIGZhbHNl
LCAiY2FwcyIsIGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInRleHQvdnR0IiksIE5VTEwpOwot
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fdGV4dEFwcFNpbmsuZ2V0KCksICJuZXctc2FtcGxl
IiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVOZXdUZXh0U2FtcGxlQ2FsbGJhY2spLCB0
aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fdGV4dEFwcFNpbmsuZ2V0
KCksICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSyhuZXdUZXh0U2FtcGxlQ2FsbGJhY2spLCB0aGlz
KTsKIAogICAgICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgInRleHQtc2luayIs
IG1fdGV4dEFwcFNpbmsuZ2V0KCksIE5VTEwpOwogICAgIH0KQEAgLTIwMDAsNyArMTk3Nyw3IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKCkKIAog
ICAgIEdSZWZQdHI8R3N0UGFkPiB2aWRlb1NpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQobV92aWRlb1NpbmsuZ2V0KCksICJzaW5rIikpOwogICAgIGlmICh2aWRl
b1NpbmtQYWQpCi0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QodmlkZW9TaW5rUGFkLmdldCgpLCAi
bm90aWZ5OjpjYXBzIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVWaWRlb1NpbmtDYXBz
Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBl
ZCh2aWRlb1NpbmtQYWQuZ2V0KCksICJub3RpZnk6OmNhcHMiLCBHX0NBTExCQUNLKHZpZGVvU2lu
a0NhcHNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IGFlOWFiYjcuLmY4NTFiOGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTM1LDcg
KzM1LDYgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29w
Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HVGhyZWFk
U2FmZU1haW5Mb29wU291cmNlLmg+CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYmIFVTRShH
U1RSRUFNRVJfTVBFR1RTKQogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4K
QEAgLTExNSwyNiArMTE0LDkgQEAgcHVibGljOgogICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCk7
CiAgICAgdm9pZCBsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUpOwogCi0g
ICAgdm9pZCB2aWRlb0NoYW5nZWQoKTsKLSAgICB2b2lkIHZpZGVvQ2Fwc0NoYW5nZWQoKTsKLSAg
ICB2b2lkIGF1ZGlvQ2hhbmdlZCgpOwotICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZWaWRlbygpOwot
ICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMoKTsKLSAgICB2b2lkIG5vdGlmeVBsYXll
ck9mQXVkaW8oKTsKLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICB2b2lkIHRleHRDaGFu
Z2VkKCk7Ci0gICAgdm9pZCBub3RpZnlQbGF5ZXJPZlRleHQoKTsKLQotICAgIHZvaWQgbmV3VGV4
dFNhbXBsZSgpOwotICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZOZXdUZXh0U2FtcGxlKCk7Ci0jZW5k
aWYKLQogICAgIHZvaWQgc291cmNlQ2hhbmdlZCgpOwogICAgIEdzdEVsZW1lbnQqIGF1ZGlvU2lu
aygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXMo
R09iamVjdCopOwotCiAgICAgdm9pZCBzaW11bGF0ZUF1ZGlvSW50ZXJydXB0aW9uKCkgb3ZlcnJp
ZGU7CiAKICAgICBib29sIGNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUpOwpAQCAtMTkxLDYg
KzE3MywyOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCByZWFkeVRpbWVyRmlyZWQoKTsKIAorICAg
IHZvaWQgbm90aWZ5UGxheWVyT2ZWaWRlbygpOworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZWaWRl
b0NhcHMoKTsKKyAgICB2b2lkIG5vdGlmeVBsYXllck9mQXVkaW8oKTsKKworI2lmIEVOQUJMRShW
SURFT19UUkFDSykKKyAgICB2b2lkIG5vdGlmeVBsYXllck9mVGV4dCgpOworICAgIHZvaWQgbmV3
VGV4dFNhbXBsZSgpOworI2VuZGlmCisKKyAgICB2b2lkIHNldEF1ZGlvU3RyZWFtUHJvcGVydGll
cyhHT2JqZWN0Kik7CisKKyAgICBzdGF0aWMgdm9pZCBzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXND
YWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqLCBHT2JqZWN0Kik7CisKKyAgICBz
dGF0aWMgdm9pZCBzb3VyY2VDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKik7CisgICAgc3RhdGljIHZvaWQgdmlkZW9DaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKik7CisgICAgc3RhdGljIHZvaWQgdmlkZW9TaW5rQ2Fwc0NoYW5nZWRD
YWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBh
dWRpb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKKyNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCisgICAgc3RhdGljIHZvaWQgdGV4dENoYW5nZWRDYWxsYmFjayhN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBzdGF0aWMgR3N0Rmxvd1JldHVybiBu
ZXdUZXh0U2FtcGxlQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CisjZW5k
aWYKKwogICAgIFdlYWtQdHJGYWN0b3J5PE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4gbV93
ZWFrUHRyRmFjdG9yeTsKIAogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9zb3VyY2U7CkBAIC0y
MjgsMTAgKzIzMiw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3ZvbHVtZUFuZE11dGVJbml0aWFs
aXplZDsKICAgICBib29sIG1faGFzVmlkZW87CiAgICAgYm9vbCBtX2hhc0F1ZGlvOwotICAgIEdU
aHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV9hdWRpb1RpbWVySGFuZGxlcjsKLSAgICBHVGhyZWFk
U2FmZU1haW5Mb29wU291cmNlIG1fdGV4dFRpbWVySGFuZGxlcjsKLSAgICBHVGhyZWFkU2FmZU1h
aW5Mb29wU291cmNlIG1fdmlkZW9UaW1lckhhbmRsZXI7Ci0gICAgR1RocmVhZFNhZmVNYWluTG9v
cFNvdXJjZSBtX3ZpZGVvQ2Fwc1RpbWVySGFuZGxlcjsKICAgICBSdW5Mb29wOjpUaW1lcjxNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI+IG1fcmVhZHlUaW1lckhhbmRsZXI7CiAgICAgbXV0YWJs
ZSB1bnNpZ25lZCBsb25nIGxvbmcgbV90b3RhbEJ5dGVzOwogICAgIFVSTCBtX3VybDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAppbmRl
eCAwZTA1NWU0Li41Y2VlOGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCkBAIC0xMDIsNDAgKzEwMiwxMSBAQCBzdGF0aWMgaW50
IGdyZWF0ZXN0Q29tbW9uRGl2aXNvcihpbnQgYSwgaW50IGIpCiAgICAgcmV0dXJuIEFCUyhhKTsK
IH0KIAotc3RhdGljIHZvaWQgbWVkaWFQbGF5ZXJQcml2YXRlVm9sdW1lQ2hhbmdlZENhbGxiYWNr
KEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSog
cGxheWVyKQotewotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gbV92b2x1bWVFbGVtZW50IHJl
Y2VpdmVzIHRoZSBub3RpZnk6OnZvbHVtZSBzaWduYWwuCi0gICAgTE9HX01FRElBX01FU1NBR0Uo
IlZvbHVtZSBjaGFuZ2VkIHRvOiAlZiIsIHBsYXllci0+dm9sdW1lKCkpOwotICAgIHBsYXllci0+
dm9sdW1lQ2hhbmdlZCgpOwotfQotCi1zdGF0aWMgdm9pZCBtZWRpYVBsYXllclByaXZhdGVNdXRl
Q2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZSogcGxheWVyKQotewotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gbV92
b2x1bWVFbGVtZW50IHJlY2VpdmVzIHRoZSBub3RpZnk6Om11dGUgc2lnbmFsLgotICAgIHBsYXll
ci0+bXV0ZUNoYW5nZWQoKTsKLX0KLQotc3RhdGljIHZvaWQgbWVkaWFQbGF5ZXJQcml2YXRlUmVw
YWludENhbGxiYWNrKFdlYktpdFZpZGVvU2luayosIEdzdFNhbXBsZSogc2FtcGxlLCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXJQcml2YXRlKQotewotICAgIHBsYXllclBy
aXZhdGUtPnRyaWdnZXJSZXBhaW50KHNhbXBsZSk7Ci19Ci0KLSNpZiBVU0UoR1NUUkVBTUVSX0dM
KQotc3RhdGljIGdib29sZWFuIG1lZGlhUGxheWVyUHJpdmF0ZURyYXdDYWxsYmFjayhHc3RFbGVt
ZW50KiwgR3N0Q29udGV4dCosIEdzdFNhbXBsZSogc2FtcGxlLCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlKiBwbGF5ZXJQcml2YXRlKQotewotICAgIHBsYXllclByaXZhdGUtPnRyaWdn
ZXJSZXBhaW50KHNhbXBsZSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0jZW5kaWYKLQogTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZShNZWRpYVBsYXllciogcGxheWVyKQogICAgIDogbV9wbGF5ZXIocGxheWVyKQogICAgICwgbV9m
cHNTaW5rKDApCiAgICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQog
ICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQotICAgICwgbV9yZXBhaW50
SGFuZGxlcigwKQotICAgICwgbV92b2x1bWVTaWduYWxIYW5kbGVyKDApCi0gICAgLCBtX211dGVT
aWduYWxIYW5kbGVyKDApCiAgICAgLCBtX3VzaW5nRmFsbGJhY2tWaWRlb1NpbmsoZmFsc2UpCiB7
CiAgICAgZ19tdXRleF9pbml0KCZtX3NhbXBsZU11dGV4KTsKQEAgLTE0NywyNCArMTE4LDE1IEBA
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2UoTWVkaWFQbGF5ZXIqIHBsCiAKIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2U6On5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKCkKIHsKLSAgICBpZiAobV9yZXBh
aW50SGFuZGxlcikgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV92aWRl
b1NpbmsuZ2V0KCksIG1fcmVwYWludEhhbmRsZXIpOwotICAgICAgICBtX3JlcGFpbnRIYW5kbGVy
ID0gMDsKLSAgICB9CisgICAgbV9ub3RpZmllci5jYW5jZWxQZW5kaW5nTm90aWZpY2F0aW9ucygp
OworCisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fdmlkZW9TaW5r
LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlz
KTsKIAogICAgIGdfbXV0ZXhfY2xlYXIoJm1fc2FtcGxlTXV0ZXgpOwogCiAgICAgbV9wbGF5ZXIg
PSAwOwogCi0gICAgaWYgKG1fdm9sdW1lU2lnbmFsSGFuZGxlcikgewotICAgICAgICBnX3NpZ25h
bF9oYW5kbGVyX2Rpc2Nvbm5lY3QobV92b2x1bWVFbGVtZW50LmdldCgpLCBtX3ZvbHVtZVNpZ25h
bEhhbmRsZXIpOwotICAgICAgICBtX3ZvbHVtZVNpZ25hbEhhbmRsZXIgPSAwOwotICAgIH0KLQot
ICAgIGlmIChtX211dGVTaWduYWxIYW5kbGVyKSB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJf
ZGlzY29ubmVjdChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksIG1fbXV0ZVNpZ25hbEhhbmRsZXIpOwot
ICAgICAgICBtX211dGVTaWduYWxIYW5kbGVyID0gMDsKLSAgICB9CisgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgR19TSUdOQUxf
TUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7CiAKICNpZiBVU0UoR1NU
UkVBTUVSX0dMKQogICAgIGdfY29uZF9jbGVhcigmbV9kcmF3Q29uZGl0aW9uKTsKQEAgLTM1Mywx
MCArMzE1LDE1IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bm90aWZ5
UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKQogICAgIG1fcGxheWVyLT52b2x1bWVDaGFuZ2VkKHN0YXRp
Y19jYXN0PGZsb2F0Pih2b2x1bWUpKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjp2b2x1bWVDaGFuZ2VkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6dm9sdW1lQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UqIHBsYXllcikKIHsKLSAgICBtX3ZvbHVtZVRpbWVySGFuZGxlci5zY2hlZHVsZSgiW1dl
YktpdF0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dm9sdW1lQ2hhbmdlZCIsCi0g
ICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPihbdGhpc10geyBub3RpZnlQbGF5ZXJPZlZvbHVt
ZUNoYW5nZSgpOyB9KSk7CisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBtX3ZvbHVtZUVsZW1l
bnQgcmVjZWl2ZXMgdGhlIG5vdGlmeTo6dm9sdW1lIHNpZ25hbC4KKyAgICBMT0dfTUVESUFfTUVT
U0FHRSgiVm9sdW1lIGNoYW5nZWQgdG86ICVmIiwgcGxheWVyLT52b2x1bWUoKSk7CisKKyAgICBp
ZiAoaXNNYWluVGhyZWFkKCkpCisgICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZWb2x1bWVD
aGFuZ2UoKTsKKyAgICBlbHNlCisgICAgICAgIHBsYXllci0+bV9ub3RpZmllci5ub3RpZnkoTWFp
blRocmVhZE5vdGlmaWNhdGlvbjo6Vm9sdW1lQ2hhbmdlZCwgW3BsYXllcl0geyBwbGF5ZXItPm5v
dGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7IH0pOwogfQogCiBNZWRpYVBsYXllcjo6TmV0d29y
a1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5ldHdvcmtTdGF0ZSgpIGNv
bnN0CkBAIC00MDIsMTAgKzM2OSwxMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6Om5vdGlmeVBsYXllck9mTXV0ZSgpCiAgICAgbV9wbGF5ZXItPm11dGVDaGFuZ2VkKHN0
YXRpY19jYXN0PGJvb2w+KG11dGVkKSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6bXV0ZUNoYW5nZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjptdXRlQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2UqIHBsYXllcikKIHsKLSAgICBtX211dGVUaW1lckhhbmRsZXIuc2NoZWR1bGUoIltXZWJLaXRd
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om11dGVDaGFuZ2VkIiwKLSAgICAgICAg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+KFt0aGlzXSB7IG5vdGlmeVBsYXllck9mTXV0ZSgpOyB9KSk7
CisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBtX3ZvbHVtZUVsZW1lbnQgcmVjZWl2ZXMgdGhl
IG5vdGlmeTo6bXV0ZSBzaWduYWwuCisgICAgaWYgKGlzTWFpblRocmVhZCgpKQorICAgICAgICBw
bGF5ZXItPm5vdGlmeVBsYXllck9mTXV0ZSgpOworICAgIGVsc2UKKyAgICAgICAgcGxheWVyLT5t
X25vdGlmaWVyLm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpNdXRlQ2hhbmdlZCwgW3Bs
YXllcl0geyBwbGF5ZXItPm5vdGlmeVBsYXllck9mTXV0ZSgpOyB9KTsKIH0KIAogI2lmIFVTRShU
RVhUVVJFX01BUFBFUl9HTCkgJiYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKQEAgLTQ5Myw2
ICs0NjMsMTkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp0cmlnZ2Vy
UmVwYWludChHc3RTYW1wbGUqIHNhbXBsZSkKICAgICBtX3BsYXllci0+cmVwYWludCgpOwogfQog
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlcGFpbnRDYWxsYmFjayhN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIsIEdzdFNhbXBsZSogc2FtcGxl
KQoreworICAgIHBsYXllci0+dHJpZ2dlclJlcGFpbnQoc2FtcGxlKTsKK30KKworI2lmIFVTRShH
U1RSRUFNRVJfR0wpCitnYm9vbGVhbiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpk
cmF3Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyLCBHc3RD
b250ZXh0KiwgR3N0U2FtcGxlKiBzYW1wbGUpCit7CisgICAgcGxheWVyLT50cmlnZ2VyUmVwYWlu
dChzYW1wbGUpOworICAgIHJldHVybiBUUlVFOworfQorI2VuZGlmCisKIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewog
ICAgIG1fc2l6ZSA9IHNpemU7CkBAIC01OTIsNyArNTc1LDcgQEAgR3N0RWxlbWVudCogTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y3JlYXRlVmlkZW9TaW5rKCkKICAgICBpZiAod2Vi
a2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDUsIDApKSB7CiAgICAgICAgIG1fdmlkZW9TaW5rID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJnbGltYWdlc2luayIsIG51bGxwdHIpOwogICAgICAgICBp
ZiAobV92aWRlb1NpbmspIHsKLSAgICAgICAgICAgIG1fcmVwYWludEhhbmRsZXIgPSBnX3NpZ25h
bF9jb25uZWN0KG1fdmlkZW9TaW5rLmdldCgpLCAiY2xpZW50LWRyYXciLCBHX0NBTExCQUNLKG1l
ZGlhUGxheWVyUHJpdmF0ZURyYXdDYWxsYmFjayksIHRoaXMpOworICAgICAgICAgICAgZ19zaWdu
YWxfY29ubmVjdF9zd2FwcGVkKG1fdmlkZW9TaW5rLmdldCgpLCAiY2xpZW50LWRyYXciLCBHX0NB
TExCQUNLKGRyYXdDYWxsYmFjayksIHRoaXMpOwogICAgICAgICAgICAgdmlkZW9TaW5rID0gbV92
aWRlb1NpbmsuZ2V0KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC02MDEsNyArNTg0LDcgQEAgR3N0
RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y3JlYXRlVmlkZW9TaW5r
KCkKICAgICBpZiAoIW1fdmlkZW9TaW5rKSB7CiAgICAgICAgIG1fdXNpbmdGYWxsYmFja1ZpZGVv
U2luayA9IHRydWU7CiAgICAgICAgIG1fdmlkZW9TaW5rID0gd2Via2l0VmlkZW9TaW5rTmV3KCk7
Ci0gICAgICAgIG1fcmVwYWludEhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KG1fdmlkZW9TaW5r
LmdldCgpLCAicmVwYWludC1yZXF1ZXN0ZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0
ZVJlcGFpbnRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBw
ZWQobV92aWRlb1NpbmsuZ2V0KCksICJyZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJBQ0socmVw
YWludENhbGxiYWNrKSwgdGhpcyk7CiAgICAgfQogCiAgICAgbV9mcHNTaW5rID0gZ3N0X2VsZW1l
bnRfZmFjdG9yeV9tYWtlKCJmcHNkaXNwbGF5c2luayIsICJzaW5rIik7CkBAIC02NDcsOCArNjMw
LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRTdHJlYW1Wb2x1
bWVFbGVtZW50KEdzdFN0cmVhbVZvbHVtZSogdm8KICAgICBMT0dfTUVESUFfTUVTU0FHRSgiU2V0
dGluZyBzdHJlYW0gbXV0ZWQgJWQiLCAgbV9wbGF5ZXItPm11dGVkKCkpOwogICAgIGdfb2JqZWN0
X3NldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgbV9wbGF5ZXItPm11dGVkKCksIE5V
TEwpOwogCi0gICAgbV92b2x1bWVTaWduYWxIYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdChtX3Zv
bHVtZUVsZW1lbnQuZ2V0KCksICJub3RpZnk6OnZvbHVtZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5
ZXJQcml2YXRlVm9sdW1lQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgbV9tdXRlU2lnbmFs
SGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3QobV92b2x1bWVFbGVtZW50LmdldCgpLCAibm90aWZ5
OjptdXRlIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVNdXRlQ2hhbmdlZENhbGxiYWNr
KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fdm9sdW1lRWxlbWVudC5n
ZXQoKSwgIm5vdGlmeTo6dm9sdW1lIiwgR19DQUxMQkFDSyh2b2x1bWVDaGFuZ2VkQ2FsbGJhY2sp
LCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV92b2x1bWVFbGVtZW50Lmdl
dCgpLCAibm90aWZ5OjptdXRlIiwgR19DQUxMQkFDSyhtdXRlQ2hhbmdlZENhbGxiYWNrKSwgdGhp
cyk7CiB9CiAKIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRlY29k
ZWRGcmFtZUNvdW50KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZS5oCmluZGV4IDZkNmQ3OGIuLmEwYzkyZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaApAQCAtMjUsMTAgKzI1
LDkgQEAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCiAKICNpbmNsdWRlICJH
UmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWFpblRocmVhZE5vdGlmaWVyLmgiCiAjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCi0KICNpbmNsdWRlIDxnbGliLmg+Ci0KICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dUaHJlYWRTYWZlTWFpbkxv
b3BTb3VyY2UuaD4KIApAQCAtNjAsOCArNTksNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFZv
bHVtZShmbG9hdCk7CiAgICAgZmxvYXQgdm9sdW1lKCkgY29uc3Q7Ci0gICAgdm9pZCB2b2x1bWVD
aGFuZ2VkKCk7Ci0gICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpOwogCiAjaWYg
VVNFKEdTVFJFQU1FUl9HTCkKICAgICBib29sIGVuc3VyZUdzdEdMQ29udGV4dCgpOwpAQCAtNzAs
OCArNjcsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzdXBwb3J0c011dGluZygpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KICAgICB2b2lkIHNldE11dGVkKGJvb2wpOwogICAgIGJvb2wgbXV0ZWQoKSBj
b25zdDsKLSAgICB2b2lkIG11dGVDaGFuZ2VkKCk7Ci0gICAgdm9pZCBub3RpZnlQbGF5ZXJPZk11
dGUoKTsKIAogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29u
c3Q7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OwpAQCAt
ODAsNyArNzUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsK
ICAgICB2b2lkIHNpemVDaGFuZ2VkKCk7CiAKLSAgICB2b2lkIHRyaWdnZXJSZXBhaW50KEdzdFNh
bXBsZSopOwogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CkBAIC0xMjIsNiArMTE2LDMxIEBAIHByb3RlY3RlZDoKIAogICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKik7CiAKKyAgICB2b2lkIHRy
aWdnZXJSZXBhaW50KEdzdFNhbXBsZSopOworCisgICAgc3RhdGljIHZvaWQgcmVwYWludENhbGxi
YWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqLCBHc3RTYW1wbGUqKTsKKyNpZiBV
U0UoR1NUUkVBTUVSX0dMKQorICAgIHN0YXRpYyBnYm9vbGVhbiBkcmF3Q2FsbGJhY2soTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSosIEdzdENvbnRleHQqLCBHc3RTYW1wbGUqKTsKKyNl
bmRpZgorCisgICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpOworICAgIHZvaWQg
bm90aWZ5UGxheWVyT2ZNdXRlKCk7CisKKyAgICBzdGF0aWMgdm9pZCB2b2x1bWVDaGFuZ2VkQ2Fs
bGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSopOworICAgIHN0YXRpYyB2b2lk
IG11dGVDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSopOwor
CisgICAgZW51bSBNYWluVGhyZWFkTm90aWZpY2F0aW9uIHsKKyAgICAgICAgVmlkZW9DaGFuZ2Vk
ID0gMSA8PCAwLAorICAgICAgICBWaWRlb0NhcHNDaGFuZ2VkID0gMSA8PCAxLAorICAgICAgICBB
dWRpb0NoYW5nZWQgPSAxIDw8IDIsCisgICAgICAgIFZvbHVtZUNoYW5nZWQgPSAxIDw8IDMsCisg
ICAgICAgIE11dGVDaGFuZ2VkID0gMSA8PCA0LAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAg
ICAgICAgVGV4dENoYW5nZWQgPSAxIDw8IDUsCisjZW5kaWYKKyAgICB9OworCisgICAgTWFpblRo
cmVhZE5vdGlmaWVyPE1haW5UaHJlYWROb3RpZmljYXRpb24+IG1fbm90aWZpZXI7CiAgICAgTWVk
aWFQbGF5ZXIqIG1fcGxheWVyOwogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsK
ICAgICBHUmVmUHRyPEdzdFN0cmVhbVZvbHVtZT4gbV92b2x1bWVFbGVtZW50OwpAQCAtMTMyLDE2
ICsxNTEsMTEgQEAgcHJvdGVjdGVkOgogICAgIEludFNpemUgbV9zaXplOwogICAgIG11dGFibGUg
R011dGV4IG1fc2FtcGxlTXV0ZXg7CiAgICAgR1JlZlB0cjxHc3RTYW1wbGU+IG1fc2FtcGxlOwot
ICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV92b2x1bWVUaW1lckhhbmRsZXI7Ci0gICAg
R1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX211dGVUaW1lckhhbmRsZXI7CiAjaWYgVVNFKEdT
VFJFQU1FUl9HTCkKICAgICBHVGhyZWFkU2FmZU1haW5Mb29wU291cmNlIG1fZHJhd1RpbWVySGFu
ZGxlcjsKICAgICBHQ29uZCBtX2RyYXdDb25kaXRpb247CiAgICAgR011dGV4IG1fZHJhd011dGV4
OwogI2VuZGlmCi0gICAgdW5zaWduZWQgbG9uZyBtX3JlcGFpbnRIYW5kbGVyOwotICAgIHVuc2ln
bmVkIGxvbmcgbV92b2x1bWVTaWduYWxIYW5kbGVyOwotICAgIHVuc2lnbmVkIGxvbmcgbV9tdXRl
U2lnbmFsSGFuZGxlcjsKICAgICBtdXRhYmxlIEZsb2F0U2l6ZSBtX3ZpZGVvU2l6ZTsKICAgICBi
b29sIG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luazsKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
ICYmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264932</attachid>
            <date>2015-11-06 03:32:18 -0800</date>
            <delta_ts>2015-11-06 04:12:25 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wcore-gst-main-thread-notifier.diff</filename>
            <type>text/plain</type>
            <size>30205</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0NGE2NzgyLi5kYWRmY2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzgg
QEAKKzIwMTUtMTEtMDQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHU3RyZWFtZXJdIERvIG5vdCB1c2UgR1RocmVhZFNhZmVNYWluTG9vcFNv
dXJjZSB0byBzZW5kIG5vdGlmaWNhdGlvbnMgdG8gdGhlIG1haW4gdGhyZWFkIGluIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUwODg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQW5hbHl6aW5nIGhvdyB0aGUgbWFpbiBsb29wIHNvdXJjZXMgd2VyZSB1c2Vk
IGluIEdTVCBjb2RlIEkndmUKKyAgICAgICAgbm90aWNlZCB0aGF0IGluIG1vc3Qgb2YgdGhlIGNh
c2VzIHRoZXkgYXJlIHVzZWQgdG8gc2VuZAorICAgICAgICBub3RpZmljYXRpb25zIHRvIHRoZSBt
YWluIHRocmVhZC4gVGhlIHdheSBpdCB3b3JrcyBpbiB0aG9zZSBjYXNlcworICAgICAgICBpcyB0
aGF0IHNvbWUgc3RhdGUgaXMgdXBkYXRlZCBpbiB3aGF0ZXZlciB0aHJlYWQgYW5kIHdlIG5vdGlm
eSB0aGUKKyAgICAgICAgbWFpbiB0aHJlYWQgdG8gdXNlIHRoZSBuZXcgc3RhdGUuIFRoZXJlJ3Mg
bm8gZGF0YSBwYXNzZWQgdG8gdGhlCisgICAgICAgIG1haW4gdGhyZWFkLCB0aGV5IGFyZSBqdXN0
IG5vdGlmaWNhdGlvbnMuIEkndmUgYWxzbyBub3RpY2VkIHRoYXQKKyAgICAgICAgd2UgYXJlIG5v
dCBkb2luZyB0aGlzIGV4YWN0bHkgYXMgZXhwZWN0ZWQgaW4gc2V2ZXJhbCBvZiB0aG9zZQorICAg
ICAgICBjYXNlcy4gR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBjYW5jZWxzIHRoZSBjdXJyZW50
IHNvdXJjZSB3aGVuIGEKKyAgICAgICAgbmV3IG9uZSBpcyBzY2hlZHVsZWQsIGFuZCB0aGF0IHdh
cyBkb25lIHRoaXMgd2F5IGJlY2F1c2UgcHJldmlvdXMKKyAgICAgICAgY29kZSBpbiBHU1QgdXNp
bmcgR1NvdXJjZXMgZGlyZWN0bHkgZGlkIGl0IHRoYXQgd2F5LiBCdXQgdGhhdCdzCisgICAgICAg
IG5vdCB3aGF0IHdlIHdhbnQsIGlmIHRoZXJlJ3MgYSBub3RpZmljYXRpb24gcGVuZGluZywgc2lu
Y2UgdGhlCisgICAgICAgIHN0YXRlIGlzIHVwZGF0ZWQsIHdlIGNhbiBqdXN0IHdhaXQgZm9yIGl0
IHRvIGhhcHBlbiBpbnN0ZWFkIG9mCisgICAgICAgIGNhbmNlbGxpbmcgYW5kIHNjaGVkdWxpbmcg
YSBuZXcgb25lLiBJJ3ZlIGFsc28gbm90aWNlZCB0aGF0IGluCisgICAgICAgIG1vc3Qgb2YgdGhl
IGNhc2VzIHdoZXJlIHdlIHNjaGVkdWxlIG5vdGlmaWNhdGlvbnMgdG8gdGhlIG1haW4KKyAgICAg
ICAgdGhyZWFkLCB3ZSBjYW4gYmUgYWxyZWFkeSBpbiB0aGUgbWFpbiB0aHJlYWQsIHNvIHdlIGNv
dWxkIGF2b2lkCisgICAgICAgIHRoZSBzY2hlZHVsZSBlbnRpcmVseS4KKyAgICAgICAgV2UgY2Fu
IHVzZSBSdW5Mb29wOjpkaXNwYXRjaCgpIHRvIHNlbmQgbm90aWZpY2F0aW9ucyB0byB0aGUgbWFp
bgorICAgICAgICB0aHJlYWQsIGJ1dCB0aGVyZSdzIG5vIHdheSB0byBjYW5jZWwgdGhvc2UgdGFz
a3MuIFRoaXMgcGF0Y2ggYWRkcworICAgICAgICBhIG5ldyBoZWxwZXIgY2xhc3MgTWFpblRocmVh
ZE5vdGlmaWVyIHRoYXQgdXNlcyBhbiBlbnVtIG9mIGZsYWdzIHRvCisgICAgICAgIGhhbmRsZSBk
aWZmZXJlbnQga2luZCBvZiBub3RpZmljYXRpb25zLiBJdCB1c2VzCisgICAgICAgIFJ1bkxvb3A6
OmRpc3BhdGNoKCkgdG8gc2VuZCBub3RpZmljYXRpb25zIHRvIHRoZSBtYWluIHRocmVhZCwgYnV0
CisgICAgICAgIG9ubHkgaWYgdGhlcmUgaXNuJ3Qgb25lIHBlbmRpbmcgZm9yIHRoZSBnaXZlbiB0
eXBlLgorICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMgc2lnbmFsIGNhbGxiYWNrcyBzdGF0
aWMgbWVtYmVycyB0byBiZSBhYmxlCisgICAgICAgIHRvIG1ha2UgdGhlIHByaXZhdGUgbWV0aG9k
cyBhY3R1YWxseSBwcml2YXRlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01haW5UaHJlYWROb3RpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1haW5U
aHJlYWROb3RpZmllcjo6TWFpblRocmVhZE5vdGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1h
aW5UaHJlYWROb3RpZmllcjo6bm90aWZ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRO
b3RpZmllcjo6Y2FuY2VsUGVuZGluZ05vdGlmaWNhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
TWFpblRocmVhZE5vdGlmaWVyOjphZGRQZW5kaW5nTm90aXRpZmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1haW5UaHJlYWROb3RpZmllcjo6cmVtb3ZlUGVuZGluZ05vdGl0aWZhdGlvbik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnNldEF1ZGlvU3RyZWFtUHJvcGVydGllc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVv
Q2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6dmlkZW9TaW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvQ2hhbmdlZENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dGV4dENoYW5nZWRD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
Om5ld1RleHRTYW1wbGVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnNvdXJjZUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUF1ZGlvU2luayk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4p
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRBdWRp
b1N0cmVhbVByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWdpc3Rlck1lZGlhRW5naW5lKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6bG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW8pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5UGxheWVyT2ZUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y2FuU2F2ZU1lZGlhRGF0YSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6On5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZvbHVtZUNoYW5n
ZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjptdXRlQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlcGFpbnRDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpkcmF3Q2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y3JlYXRlVmlk
ZW9TaW5rKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2U6OnNldFN0cmVhbVZvbHVtZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlOjpzZXRQaXBlbGluZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlOjpoYW5kbGVTeW5jTWVzc2FnZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjptdXRlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
Ojp1cGRhdGVUZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRyb3BwZWRGcmFtZUNvdW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZTo6c2V0VmlzaWJsZSk6IERlbGV0ZWQuCisKIDIwMTUtMTEtMDUgIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJdIFVzZSBS
dW5Mb29wOjpUaW1lciBpbnN0ZWFkIG9mIEdNYWluTG9vcFNvdXJjZSBpbiB2aWRlbyBzaW5rCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWFp
blRocmVhZE5vdGlmaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWFpblRocmVhZE5vdGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uODYyYzQxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9NYWluVGhyZWFkTm90aWZpZXIuaApAQCAtMCwwICsxLDk1IEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaWZuZGVmIE1haW5UaHJlYWROb3RpZmllcl9oCisjZGVmaW5lIE1h
aW5UaHJlYWROb3RpZmllcl9oCisKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYv
V2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorY2xhc3MgTWFpblRocmVhZE5vdGlmaWVyIHsKK3B1YmxpYzoKKyAgICBNYWluVGhyZWFkTm90
aWZpZXIoKQorICAgICAgICA6IG1fd2Vha1B0ckZhY3RvcnkodGhpcykKKyAgICB7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRj4KKyAgICB2b2lkIG5vdGlmeShUIG5vdGlmaWNhdGlv
blR5cGUsIGNvbnN0IEYmIGNhbGxiYWNrRnVuY3RvcikKKyAgICB7CisgICAgICAgIGlmIChpc01h
aW5UaHJlYWQoKSkgeworICAgICAgICAgICAgcmVtb3ZlUGVuZGluZ05vdGlmaWNhdGlvbihub3Rp
ZmljYXRpb25UeXBlKTsKKyAgICAgICAgICAgIGNhbGxiYWNrRnVuY3RvcigpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFhZGRQZW5kaW5nTm90aWZpY2F0
aW9uKG5vdGlmaWNhdGlvblR5cGUpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1
dG8gd2Vha1RoaXMgPSBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsKKyAgICAgICAg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjYWxsYmFjayhjYWxsYmFja0Z1bmN0b3IpOworICAgICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzLCBub3RpZmljYXRpb25UeXBlLCBj
YWxsYmFja10geworICAgICAgICAgICAgaWYgKHdlYWtUaGlzICYmIHdlYWtUaGlzLT5yZW1vdmVQ
ZW5kaW5nTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvblR5cGUpKQorICAgICAgICAgICAgICAgIGNh
bGxiYWNrKCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHZvaWQgY2FuY2VsUGVuZGluZ05v
dGlmaWNhdGlvbnModW5zaWduZWQgbWFzayA9IDApCisgICAgeworICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX3BlbmRpbmdOb3RpZmljYXRpb25zTG9jayk7CisgICAgICAgIGlmIChtYXNrKQor
ICAgICAgICAgICAgbV9wZW5kaW5nTm90aWZpY2F0aW9ucyAmPSB+bWFzazsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9wZW5kaW5nTm90aWZpY2F0aW9ucyA9IDA7CisgICAgfQorCitwcml2
YXRlOgorCisgICAgYm9vbCBhZGRQZW5kaW5nTm90aWZpY2F0aW9uKFQgbm90aWZpY2F0aW9uVHlw
ZSkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGVuZGluZ05vdGlmaWNhdGlv
bnNMb2NrKTsKKyAgICAgICAgaWYgKG5vdGlmaWNhdGlvblR5cGUgJiBtX3BlbmRpbmdOb3RpZmlj
YXRpb25zKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX3BlbmRpbmdOb3Rp
ZmljYXRpb25zIHw9IG5vdGlmaWNhdGlvblR5cGU7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGJvb2wgcmVtb3ZlUGVuZGluZ05vdGlmaWNhdGlvbihUIG5vdGlmaWNhdGlvblR5
cGUpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BlbmRpbmdOb3RpZmljYXRp
b25zTG9jayk7CisgICAgICAgIGlmIChub3RpZmljYXRpb25UeXBlICYgbV9wZW5kaW5nTm90aWZp
Y2F0aW9ucykgeworICAgICAgICAgICAgbV9wZW5kaW5nTm90aWZpY2F0aW9ucyAmPSB+bm90aWZp
Y2F0aW9uVHlwZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBXZWFrUHRyRmFjdG9yeTxNYWluVGhyZWFkTm90
aWZpZXI+IG1fd2Vha1B0ckZhY3Rvcnk7CisgICAgTG9jayBtX3BlbmRpbmdOb3RpZmljYXRpb25z
TG9jazsKKyAgICB1bnNpZ25lZCBtX3BlbmRpbmdOb3RpZmljYXRpb25zIHsgMCB9OworfTsKKwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBNYWluVGhyZWFkTm90aWZpZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRl
eCAxN2IyMmE2Li4zMjljMjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcApAQCAtNzYsNDUgKzc2LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHZvaWQgbWVkaWFQbGF5ZXJQcml2YXRl
U291cmNlQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCi17Ci0gICAgcGxheWVyLT5zb3VyY2VDaGFuZ2VkKCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZVZpZGVvU2lua0NhcHNDaGFuZ2Vk
Q2FsbGJhY2soR09iamVjdCosIEdQYXJhbVNwZWMqLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIqIHBsYXllcikKLXsKLSAgICBwbGF5ZXItPnZpZGVvQ2Fwc0NoYW5nZWQoKTsKLX0KLQotc3Rh
dGljIHZvaWQgbWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9DaGFuZ2VkQ2FsbGJhY2soR09iamVjdCos
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQotewotICAgIHBsYXllci0+dmlk
ZW9DaGFuZ2VkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZUF1ZGlvQ2hh
bmdlZENhbGxiYWNrKEdPYmplY3QqLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXll
cikKLXsKLSAgICBwbGF5ZXItPmF1ZGlvQ2hhbmdlZCgpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRB
dWRpb1N0cmVhbVByb3BlcnRpZXNDYWxsYmFjayhHc3RDaGlsZFByb3h5KiwgR09iamVjdCogb2Jq
ZWN0LCBnY2hhciosCi0gICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVz
Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIsIEdPYmplY3QqIG9i
amVjdCkKIHsKICAgICBwbGF5ZXItPnNldEF1ZGlvU3RyZWFtUHJvcGVydGllcyhvYmplY3QpOwog
fQogCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotc3RhdGljIHZvaWQgbWVkaWFQbGF5ZXJQcml2
YXRlVGV4dENoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKiBwbGF5ZXIpCi17Ci0gICAgcGxheWVyLT50ZXh0Q2hhbmdlZCgpOwotfQotCi1zdGF0aWMg
R3N0Rmxvd1JldHVybiBtZWRpYVBsYXllclByaXZhdGVOZXdUZXh0U2FtcGxlQ2FsbGJhY2soR09i
amVjdCosIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQotewotICAgIHBsYXll
ci0+bmV3VGV4dFNhbXBsZSgpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLSNlbmRpZgot
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0QXVkaW9TdHJlYW1Qcm9wZXJ0
aWVzKEdPYmplY3QqIG9iamVjdCkKIHsKICAgICBpZiAoZ19zdHJjbXAwKEdfT0JKRUNUX1RZUEVf
TkFNRShvYmplY3QpLCAiR3N0UHVsc2VTaW5rIikpCkBAIC0yNDQsMjEgKzIxMCwxMyBAQCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoKQog
ICAgICAgICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9nZXRf
YnVzKEdTVF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgpKSkpOwogICAgICAgICBBU1NFUlQoYnVz
KTsKICAgICAgICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQoKSwgbnVsbHB0ciwg
bnVsbHB0ciwgbnVsbHB0cik7Ci0KLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jKG1fcGlwZWxpbmUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KG1l
ZGlhUGxheWVyUHJpdmF0ZVNvdXJjZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9waXBlbGluZS5nZXQoKSwgcmVp
bnRlcnByZXRfY2FzdDxncG9pbnRlcj4obWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9DaGFuZ2VkQ2Fs
bGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9m
dW5jKG1fcGlwZWxpbmUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KG1lZGlhUGxh
eWVyUHJpdmF0ZUF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0jaWYgRU5BQkxFKFZJREVP
X1RSQUNLKQotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9w
aXBlbGluZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4obWVkaWFQbGF5ZXJQcml2
YXRlTmV3VGV4dFNhbXBsZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3BpcGVsaW5lLmdldCgpLCByZWludGVycHJldF9jYXN0
PGdwb2ludGVyPihtZWRpYVBsYXllclByaXZhdGVUZXh0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7
Ci0jZW5kaWYKLQorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQo
bV9waXBlbGluZS5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVs
bHB0ciwgdGhpcyk7CiAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdl
dCgpLCBHU1RfU1RBVEVfTlVMTCk7CiAgICAgfQogCiAgICAgaWYgKG1fdmlkZW9TaW5rKSB7CiAg
ICAgICAgIEdSZWZQdHI8R3N0UGFkPiB2aWRlb1NpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1l
bnRfZ2V0X3N0YXRpY19wYWQobV92aWRlb1NpbmsuZ2V0KCksICJzaW5rIikpOwotICAgICAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmModmlkZW9TaW5rUGFkLmdldCgpLCBy
ZWludGVycHJldF9jYXN0PGdwb2ludGVyPihtZWRpYVBsYXllclByaXZhdGVWaWRlb1NpbmtDYXBz
Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfYnlfZnVuYyh2aWRlb1NpbmtQYWQuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50
ZXI+KHZpZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICB9CiB9CiAKQEAg
LTY0OSwxNiArNjA3LDkgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNlZWtp
bmcoKSBjb25zdAogICAgIHJldHVybiBtX3NlZWtpbmc7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjp2aWRlb0NoYW5nZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnZpZGVvQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ciogcGxheWVyKQogewotICAgIG1fdmlkZW9UaW1lckhhbmRsZXIuc2NoZWR1bGUoIltXZWJLaXRd
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DaGFuZ2VkIiwKLSAgICAgICAgc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+KFt0aGlzXSB7IG5vdGlmeVBsYXllck9mVmlkZW8oKTsgfSkpOwot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DYXBzQ2hhbmdlZCgp
Ci17Ci0gICAgbV92aWRlb0NhcHNUaW1lckhhbmRsZXIuc2NoZWR1bGUoIltXZWJLaXRdIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DYXBzQ2hhbmdlZCIsCi0gICAgICAgIHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPihbdGhpc10geyBub3RpZnlQbGF5ZXJPZlZpZGVvQ2FwcygpOyB9KSk7
CisgICAgcGxheWVyLT5tX25vdGlmaWVyLm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpW
aWRlb0NoYW5nZWQsIFtwbGF5ZXJdIHsgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZlZpZGVvKCk7IH0p
OwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZW
aWRlbygpCkBAIC02OTgsMTYgKzY0OSwyMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlbygpCiAgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlh
UGxheWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjp2aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lciogcGxheWVyKQoreworICAgIHBsYXllci0+bV9ub3RpZmllci5ub3RpZnko
TWFpblRocmVhZE5vdGlmaWNhdGlvbjo6VmlkZW9DYXBzQ2hhbmdlZCwgW3BsYXllcl0geyBwbGF5
ZXItPm5vdGlmeVBsYXllck9mVmlkZW9DYXBzKCk7IH0pOworfQorCiB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMoKQogewogICAgIG1fdmlk
ZW9TaXplID0gSW50U2l6ZSgpOwogICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVu
Z2luZVVwZGF0ZWQobV9wbGF5ZXIpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6YXVkaW9DaGFuZ2VkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjph
dWRpb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikK
IHsKLSAgICBtX2F1ZGlvVGltZXJIYW5kbGVyLnNjaGVkdWxlKCJbV2ViS2l0XSBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvQ2hhbmdlZCIsCi0gICAgICAgIHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPihbdGhpc10geyBub3RpZnlQbGF5ZXJPZkF1ZGlvKCk7IH0pKTsKKyAgICBwbGF5ZXIt
Pm1fbm90aWZpZXIubm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OkF1ZGlvQ2hhbmdlZCwg
W3BsYXllcl0geyBwbGF5ZXItPm5vdGlmeVBsYXllck9mQXVkaW8oKTsgfSk7CiB9CiAKIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKCkKQEAgLTc0
OCwxMCArNzAzLDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBs
YXllck9mQXVkaW8oKQogfQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnRleHRDaGFuZ2VkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjp0ZXh0Q2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lciogcGxheWVyKQogewotICAgIG1fdGV4dFRpbWVySGFuZGxlci5zY2hlZHVsZSgiW1dlYktp
dF0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0ZXh0Q2hhbmdlZCIsCi0gICAgICAgIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPihbdGhpc10geyBub3RpZnlQbGF5ZXJPZlRleHQoKTsgfSkpOwor
ICAgIHBsYXllci0+bV9ub3RpZmllci5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6VGV4
dENoYW5nZWQsIFtwbGF5ZXJdIHsgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZlRleHQoKTsgfSk7CiB9
CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlRleHQo
KQpAQCAtNzg1LDYgKzczOSwxMiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bm90aWZ5UGxheWVyT2ZUZXh0KCkKICAgICB9CiB9CiAKK0dzdEZsb3dSZXR1cm4gTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdUZXh0U2FtcGxlQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgcGxheWVyLT5uZXdUZXh0U2FtcGxlKCk7Cisg
ICAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bmV3VGV4dFNhbXBsZSgpCiB7CiAgICAgaWYgKCFtX3RleHRBcHBTaW5rKQpAQCAtMTMx
OCw2ICsxMjc4LDExIEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnRvdGFsQnl0ZXMoKSBjb25zdAogICAgIHJldHVybiBtX3RvdGFsQnl0ZXM7CiB9CiAK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VDaGFuZ2VkQ2FsbGJhY2so
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgcGxheWVyLT5zb3Vy
Y2VDaGFuZ2VkKCk7Cit9CisKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3Vy
Y2VDaGFuZ2VkKCkKIHsKICAgICBtX3NvdXJjZS5jbGVhcigpOwpAQCAtMTg2OCw3ICsxODMzLDcg
QEAgR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVBdWRpb1Np
bmsoKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fYXV0b0F1ZGlvU2luay5nZXQoKSwgImNoaWxkLWFkZGVkIiwgR19DQUxMQkFDSyhzZXRB
dWRpb1N0cmVhbVByb3BlcnRpZXNDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChtX2F1dG9BdWRpb1NpbmsuZ2V0KCksICJjaGlsZC1hZGRlZCIsIEdfQ0FMTEJB
Q0soc2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzQ2FsbGJhY2spLCB0aGlzKTsKIAogICAgIEdzdEVs
ZW1lbnQqIGF1ZGlvU2lua0JpbjsKIApAQCAtMTk2MCwxMiArMTkyNSwxMiBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbigpCiAKICAgICBnX29iamVj
dF9zZXQobV9waXBlbGluZS5nZXQoKSwgIm11dGUiLCBtX3BsYXllci0+bXV0ZWQoKSwgbnVsbHB0
cik7CiAKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGlwZWxpbmUuZ2V0KCksICJub3RpZnk6OnNv
dXJjZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlU291cmNlQ2hhbmdlZENhbGxiYWNr
KSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX3BpcGVsaW5lLmdldCgpLCAidmlkZW8t
Y2hhbmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9DaGFuZ2VkQ2FsbGJh
Y2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGlwZWxpbmUuZ2V0KCksICJhdWRp
by1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVBdWRpb0NoYW5nZWRDYWxs
YmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5lLmdl
dCgpLCAibm90aWZ5Ojpzb3VyY2UiLCBHX0NBTExCQUNLKHNvdXJjZUNoYW5nZWRDYWxsYmFjayks
IHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5lLmdldCgpLCAi
dmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodmlkZW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5nZXQoKSwgImF1ZGlvLWNo
YW5nZWQiLCBHX0NBTExCQUNLKGF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQogICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMSwgMikp
IHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3BpcGVsaW5lLmdldCgpLCAidGV4dC1jaGFu
Z2VkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVUZXh0Q2hhbmdlZENhbGxiYWNrKSwg
dGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5lLmdldCgp
LCAidGV4dC1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7
CiAKICAgICAgICAgR3N0RWxlbWVudCogdGV4dENvbWJpbmVyID0gd2Via2l0VGV4dENvbWJpbmVy
TmV3KCk7CiAgICAgICAgIEFTU0VSVCh0ZXh0Q29tYmluZXIpOwpAQCAtMTk3OCw3ICsxOTQzLDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oKQog
ICAgICAgICBBU1NFUlQobV90ZXh0QXBwU2lua1BhZCk7CiAKICAgICAgICAgZ19vYmplY3Rfc2V0
KG1fdGV4dEFwcFNpbmsuZ2V0KCksICJlbWl0LXNpZ25hbHMiLCB0cnVlLCAiZW5hYmxlLWxhc3Qt
c2FtcGxlIiwgZmFsc2UsICJjYXBzIiwgZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSgidGV4dC92
dHQiKSwgTlVMTCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV90ZXh0QXBwU2luay5nZXQo
KSwgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZU5ld1RleHRTYW1w
bGVDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV90
ZXh0QXBwU2luay5nZXQoKSwgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKG5ld1RleHRTYW1wbGVD
YWxsYmFjayksIHRoaXMpOwogCiAgICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgp
LCAidGV4dC1zaW5rIiwgbV90ZXh0QXBwU2luay5nZXQoKSwgTlVMTCk7CiAgICAgfQpAQCAtMjAw
MCw3ICsxOTY1LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdT
VFBsYXlCaW4oKQogCiAgICAgR1JlZlB0cjxHc3RQYWQ+IHZpZGVvU2lua1BhZCA9IGFkb3B0R1Jl
Zihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3ZpZGVvU2luay5nZXQoKSwgInNpbmsiKSk7
CiAgICAgaWYgKHZpZGVvU2lua1BhZCkKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdCh2aWRlb1Np
bmtQYWQuZ2V0KCksICJub3RpZnk6OmNhcHMiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0
ZVZpZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKHZpZGVvU2lua1BhZC5nZXQoKSwgIm5vdGlmeTo6Y2FwcyIsIEdfQ0FM
TEJBQ0sodmlkZW9TaW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogfQogCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2ltdWxhdGVBdWRpb0ludGVycnVwdGlvbigpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggYWU5YWJi
Ny4uZjg1MWI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuaApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgotI2luY2x1ZGUgPHd0
Zi9nbGliL0dUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UuaD4KIAogI2lmIEVOQUJMRShWSURFT19U
UkFDSykgJiYgVVNFKEdTVFJFQU1FUl9NUEVHVFMpCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWlj
U3RyaW5nSGFzaC5oPgpAQCAtMTE1LDI2ICsxMTQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdXJh
dGlvbkNoYW5nZWQoKTsKICAgICB2b2lkIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdv
cmtTdGF0ZSk7CiAKLSAgICB2b2lkIHZpZGVvQ2hhbmdlZCgpOwotICAgIHZvaWQgdmlkZW9DYXBz
Q2hhbmdlZCgpOwotICAgIHZvaWQgYXVkaW9DaGFuZ2VkKCk7Ci0gICAgdm9pZCBub3RpZnlQbGF5
ZXJPZlZpZGVvKCk7Ci0gICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZpZGVvQ2FwcygpOwotICAgIHZv
aWQgbm90aWZ5UGxheWVyT2ZBdWRpbygpOwotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAg
IHZvaWQgdGV4dENoYW5nZWQoKTsKLSAgICB2b2lkIG5vdGlmeVBsYXllck9mVGV4dCgpOwotCi0g
ICAgdm9pZCBuZXdUZXh0U2FtcGxlKCk7Ci0gICAgdm9pZCBub3RpZnlQbGF5ZXJPZk5ld1RleHRT
YW1wbGUoKTsKLSNlbmRpZgotCiAgICAgdm9pZCBzb3VyY2VDaGFuZ2VkKCk7CiAgICAgR3N0RWxl
bWVudCogYXVkaW9TaW5rKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldEF1ZGlvU3Ry
ZWFtUHJvcGVydGllcyhHT2JqZWN0Kik7Ci0KICAgICB2b2lkIHNpbXVsYXRlQXVkaW9JbnRlcnJ1
cHRpb24oKSBvdmVycmlkZTsKIAogICAgIGJvb2wgY2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0
ZSk7CkBAIC0xOTEsNiArMTczLDI4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlYWR5VGltZXJG
aXJlZCgpOwogCisgICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZpZGVvKCk7CisgICAgdm9pZCBub3Rp
ZnlQbGF5ZXJPZlZpZGVvQ2FwcygpOworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZBdWRpbygpOwor
CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZUZXh0KCk7
CisgICAgdm9pZCBuZXdUZXh0U2FtcGxlKCk7CisjZW5kaWYKKworICAgIHZvaWQgc2V0QXVkaW9T
dHJlYW1Qcm9wZXJ0aWVzKEdPYmplY3QqKTsKKworICAgIHN0YXRpYyB2b2lkIHNldEF1ZGlvU3Ry
ZWFtUHJvcGVydGllc0NhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciosIEdPYmpl
Y3QqKTsKKworICAgIHN0YXRpYyB2b2lkIHNvdXJjZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBzdGF0aWMgdm9pZCB2aWRlb0NoYW5nZWRDYWxsYmFj
ayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBzdGF0aWMgdm9pZCB2aWRlb1Np
bmtDYXBzQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOworICAg
IHN0YXRpYyB2b2lkIGF1ZGlvQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lciopOworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBzdGF0aWMgdm9pZCB0ZXh0Q2hh
bmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOworICAgIHN0YXRpYyBH
c3RGbG93UmV0dXJuIG5ld1RleHRTYW1wbGVDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIqKTsKKyNlbmRpZgorCiAgICAgV2Vha1B0ckZhY3Rvcnk8TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyPiBtX3dlYWtQdHJGYWN0b3J5OwogCiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBt
X3NvdXJjZTsKQEAgLTIyOCwxMCArMjMyLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdm9sdW1l
QW5kTXV0ZUluaXRpYWxpemVkOwogICAgIGJvb2wgbV9oYXNWaWRlbzsKICAgICBib29sIG1faGFz
QXVkaW87Ci0gICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX2F1ZGlvVGltZXJIYW5kbGVy
OwotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV90ZXh0VGltZXJIYW5kbGVyOwotICAg
IEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV92aWRlb1RpbWVySGFuZGxlcjsKLSAgICBHVGhy
ZWFkU2FmZU1haW5Mb29wU291cmNlIG1fdmlkZW9DYXBzVGltZXJIYW5kbGVyOwogICAgIFJ1bkxv
b3A6OlRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4gbV9yZWFkeVRpbWVySGFuZGxl
cjsKICAgICBtdXRhYmxlIHVuc2lnbmVkIGxvbmcgbG9uZyBtX3RvdGFsQnl0ZXM7CiAgICAgVVJM
IG1fdXJsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UuY3BwCmluZGV4IDBlMDU1ZTQuLjZjZWQ2MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKQEAgLTEwMiw0MCArMTAyLDEx
IEBAIHN0YXRpYyBpbnQgZ3JlYXRlc3RDb21tb25EaXZpc29yKGludCBhLCBpbnQgYikKICAgICBy
ZXR1cm4gQUJTKGEpOwogfQogCi1zdGF0aWMgdm9pZCBtZWRpYVBsYXllclByaXZhdGVWb2x1bWVD
aGFuZ2VkQ2FsbGJhY2soR09iamVjdCosIEdQYXJhbVNwZWMqLCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlKiBwbGF5ZXIpCi17Ci0gICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBtX3Zv
bHVtZUVsZW1lbnQgcmVjZWl2ZXMgdGhlIG5vdGlmeTo6dm9sdW1lIHNpZ25hbC4KLSAgICBMT0df
TUVESUFfTUVTU0FHRSgiVm9sdW1lIGNoYW5nZWQgdG86ICVmIiwgcGxheWVyLT52b2x1bWUoKSk7
Ci0gICAgcGxheWVyLT52b2x1bWVDaGFuZ2VkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1lZGlhUGxh
eWVyUHJpdmF0ZU11dGVDaGFuZ2VkQ2FsbGJhY2soR09iamVjdCosIEdQYXJhbVNwZWMqLCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIpCi17Ci0gICAgLy8gVGhpcyBpcyBj
YWxsZWQgd2hlbiBtX3ZvbHVtZUVsZW1lbnQgcmVjZWl2ZXMgdGhlIG5vdGlmeTo6bXV0ZSBzaWdu
YWwuCi0gICAgcGxheWVyLT5tdXRlQ2hhbmdlZCgpOwotfQotCi1zdGF0aWMgdm9pZCBtZWRpYVBs
YXllclByaXZhdGVSZXBhaW50Q2FsbGJhY2soV2ViS2l0VmlkZW9TaW5rKiwgR3N0U2FtcGxlKiBz
YW1wbGUsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllclByaXZhdGUpCi17
Ci0gICAgcGxheWVyUHJpdmF0ZS0+dHJpZ2dlclJlcGFpbnQoc2FtcGxlKTsKLX0KLQotI2lmIFVT
RShHU1RSRUFNRVJfR0wpCi1zdGF0aWMgZ2Jvb2xlYW4gbWVkaWFQbGF5ZXJQcml2YXRlRHJhd0Nh
bGxiYWNrKEdzdEVsZW1lbnQqLCBHc3RDb250ZXh0KiwgR3N0U2FtcGxlKiBzYW1wbGUsIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllclByaXZhdGUpCi17Ci0gICAgcGxheWVy
UHJpdmF0ZS0+dHJpZ2dlclJlcGFpbnQoc2FtcGxlKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLSNl
bmRpZgotCiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCiAgICAgOiBtX3BsYXllcihwbGF5
ZXIpCiAgICAgLCBtX2Zwc1NpbmsoMCkKICAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6
SGF2ZU5vdGhpbmcpCiAgICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCi0g
ICAgLCBtX3JlcGFpbnRIYW5kbGVyKDApCi0gICAgLCBtX3ZvbHVtZVNpZ25hbEhhbmRsZXIoMCkK
LSAgICAsIG1fbXV0ZVNpZ25hbEhhbmRsZXIoMCkKICAgICAsIG1fdXNpbmdGYWxsYmFja1ZpZGVv
U2luayhmYWxzZSkKIHsKICAgICBnX211dGV4X2luaXQoJm1fc2FtcGxlTXV0ZXgpOwpAQCAtMTQ3
LDI0ICsxMTgsMTUgQEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZShNZWRpYVBsYXllciogcGwKIAogTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UoKQogewot
ICAgIGlmIChtX3JlcGFpbnRIYW5kbGVyKSB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlz
Y29ubmVjdChtX3ZpZGVvU2luay5nZXQoKSwgbV9yZXBhaW50SGFuZGxlcik7Ci0gICAgICAgIG1f
cmVwYWludEhhbmRsZXIgPSAwOwotICAgIH0KKyAgICBtX25vdGlmaWVyLmNhbmNlbFBlbmRpbmdO
b3RpZmljYXRpb25zKCk7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNo
ZWQobV92aWRlb1NpbmsuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIs
IG51bGxwdHIsIHRoaXMpOwogCiAgICAgZ19tdXRleF9jbGVhcigmbV9zYW1wbGVNdXRleCk7CiAK
ICAgICBtX3BsYXllciA9IDA7CiAKLSAgICBpZiAobV92b2x1bWVTaWduYWxIYW5kbGVyKSB7Ci0g
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCks
IG1fdm9sdW1lU2lnbmFsSGFuZGxlcik7Ci0gICAgICAgIG1fdm9sdW1lU2lnbmFsSGFuZGxlciA9
IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fbXV0ZVNpZ25hbEhhbmRsZXIpIHsKLSAgICAgICAgZ19z
aWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgbV9tdXRlU2ln
bmFsSGFuZGxlcik7Ci0gICAgICAgIG1fbXV0ZVNpZ25hbEhhbmRsZXIgPSAwOwotICAgIH0KKyAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV92b2x1bWVFbGVtZW50Lmdl
dCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsK
IAogI2lmIFVTRShHU1RSRUFNRVJfR0wpCiAgICAgZ19jb25kX2NsZWFyKCZtX2RyYXdDb25kaXRp
b24pOwpAQCAtMzUzLDEwICszMTUsMTIgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpCiAgICAgbV9wbGF5ZXItPnZvbHVt
ZUNoYW5nZWQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZvbHVtZSkpOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZvbHVtZUNoYW5nZWQoKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlOjp2b2x1bWVDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyKQogewotICAgIG1fdm9sdW1lVGltZXJIYW5kbGVy
LnNjaGVkdWxlKCJbV2ViS2l0XSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp2b2x1
bWVDaGFuZ2VkIiwKLSAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KFt0aGlzXSB7IG5vdGlm
eVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7IH0pKTsKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVu
IG1fdm9sdW1lRWxlbWVudCByZWNlaXZlcyB0aGUgbm90aWZ5Ojp2b2x1bWUgc2lnbmFsLgorICAg
IExPR19NRURJQV9NRVNTQUdFKCJWb2x1bWUgY2hhbmdlZCB0bzogJWYiLCBwbGF5ZXItPnZvbHVt
ZSgpKTsKKworICAgIHBsYXllci0+bV9ub3RpZmllci5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNh
dGlvbjo6Vm9sdW1lQ2hhbmdlZCwgW3BsYXllcl0geyBwbGF5ZXItPm5vdGlmeVBsYXllck9mVm9s
dW1lQ2hhbmdlKCk7IH0pOwogfQogCiBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5ldHdvcmtTdGF0ZSgpIGNvbnN0CkBAIC00MDIsMTAg
KzM2NiwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5vdGlmeVBs
YXllck9mTXV0ZSgpCiAgICAgbV9wbGF5ZXItPm11dGVDaGFuZ2VkKHN0YXRpY19jYXN0PGJvb2w+
KG11dGVkKSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bXV0
ZUNoYW5nZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjptdXRlQ2hh
bmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllcikKIHsK
LSAgICBtX211dGVUaW1lckhhbmRsZXIuc2NoZWR1bGUoIltXZWJLaXRdIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2U6Om11dGVDaGFuZ2VkIiwKLSAgICAgICAgc3RkOjpmdW5jdGlvbjx2
b2lkKCk+KFt0aGlzXSB7IG5vdGlmeVBsYXllck9mTXV0ZSgpOyB9KSk7CisgICAgLy8gVGhpcyBp
cyBjYWxsZWQgd2hlbiBtX3ZvbHVtZUVsZW1lbnQgcmVjZWl2ZXMgdGhlIG5vdGlmeTo6bXV0ZSBz
aWduYWwuCisgICAgcGxheWVyLT5tX25vdGlmaWVyLm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0
aW9uOjpNdXRlQ2hhbmdlZCwgW3BsYXllcl0geyBwbGF5ZXItPm5vdGlmeVBsYXllck9mTXV0ZSgp
OyB9KTsKIH0KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgIVVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKQEAgLTQ5Myw2ICs0NTcsMTkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjp0cmlnZ2VyUmVwYWludChHc3RTYW1wbGUqIHNhbXBsZSkKICAgICBtX3Bs
YXllci0+cmVwYWludCgpOwogfQogCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2U6OnJlcGFpbnRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5
ZXIsIEdzdFNhbXBsZSogc2FtcGxlKQoreworICAgIHBsYXllci0+dHJpZ2dlclJlcGFpbnQoc2Ft
cGxlKTsKK30KKworI2lmIFVTRShHU1RSRUFNRVJfR0wpCitnYm9vbGVhbiBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjpkcmF3Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZSogcGxheWVyLCBHc3RDb250ZXh0KiwgR3N0U2FtcGxlKiBzYW1wbGUpCit7CisgICAg
cGxheWVyLT50cmlnZ2VyUmVwYWludChzYW1wbGUpOworICAgIHJldHVybiBUUlVFOworfQorI2Vu
ZGlmCisKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0U2l6ZShjb25z
dCBJbnRTaXplJiBzaXplKQogewogICAgIG1fc2l6ZSA9IHNpemU7CkBAIC01OTIsNyArNTY5LDcg
QEAgR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y3JlYXRlVmlk
ZW9TaW5rKCkKICAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDUsIDApKSB7CiAgICAg
ICAgIG1fdmlkZW9TaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJnbGltYWdlc2luayIs
IG51bGxwdHIpOwogICAgICAgICBpZiAobV92aWRlb1NpbmspIHsKLSAgICAgICAgICAgIG1fcmVw
YWludEhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KG1fdmlkZW9TaW5rLmdldCgpLCAiY2xpZW50
LWRyYXciLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZURyYXdDYWxsYmFjayksIHRoaXMp
OworICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fdmlkZW9TaW5rLmdldCgp
LCAiY2xpZW50LWRyYXciLCBHX0NBTExCQUNLKGRyYXdDYWxsYmFjayksIHRoaXMpOwogICAgICAg
ICAgICAgdmlkZW9TaW5rID0gbV92aWRlb1NpbmsuZ2V0KCk7CiAgICAgICAgIH0KICAgICB9CkBA
IC02MDEsNyArNTc4LDcgQEAgR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZTo6Y3JlYXRlVmlkZW9TaW5rKCkKICAgICBpZiAoIW1fdmlkZW9TaW5rKSB7CiAgICAgICAg
IG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luayA9IHRydWU7CiAgICAgICAgIG1fdmlkZW9TaW5rID0g
d2Via2l0VmlkZW9TaW5rTmV3KCk7Ci0gICAgICAgIG1fcmVwYWludEhhbmRsZXIgPSBnX3NpZ25h
bF9jb25uZWN0KG1fdmlkZW9TaW5rLmdldCgpLCAicmVwYWludC1yZXF1ZXN0ZWQiLCBHX0NBTExC
QUNLKG1lZGlhUGxheWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV92aWRlb1NpbmsuZ2V0KCksICJyZXBhaW50LXJlcXVl
c3RlZCIsIEdfQ0FMTEJBQ0socmVwYWludENhbGxiYWNrKSwgdGhpcyk7CiAgICAgfQogCiAgICAg
bV9mcHNTaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJmcHNkaXNwbGF5c2luayIsICJz
aW5rIik7CkBAIC02NDcsOCArNjI0LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpzZXRTdHJlYW1Wb2x1bWVFbGVtZW50KEdzdFN0cmVhbVZvbHVtZSogdm8KICAgICBM
T0dfTUVESUFfTUVTU0FHRSgiU2V0dGluZyBzdHJlYW0gbXV0ZWQgJWQiLCAgbV9wbGF5ZXItPm11
dGVkKCkpOwogICAgIGdfb2JqZWN0X3NldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwg
bV9wbGF5ZXItPm11dGVkKCksIE5VTEwpOwogCi0gICAgbV92b2x1bWVTaWduYWxIYW5kbGVyID0g
Z19zaWduYWxfY29ubmVjdChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJub3RpZnk6OnZvbHVtZSIs
IEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlVm9sdW1lQ2hhbmdlZENhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgbV9tdXRlU2lnbmFsSGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3QobV92b2x1bWVF
bGVtZW50LmdldCgpLCAibm90aWZ5OjptdXRlIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZh
dGVNdXRlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2Fw
cGVkKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm5vdGlmeTo6dm9sdW1lIiwgR19DQUxMQkFDSyh2
b2x1bWVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBw
ZWQobV92b2x1bWVFbGVtZW50LmdldCgpLCAibm90aWZ5OjptdXRlIiwgR19DQUxMQkFDSyhtdXRl
Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiB9CiAKIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OmRlY29kZWRGcmFtZUNvdW50KCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oCmluZGV4IDZkNmQ3OGIuLmEw
YzkyZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UuaApAQCAtMjUsMTAgKzI1LDkgQEAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RS
RUFNRVIpCiAKICNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWFpblRo
cmVhZE5vdGlmaWVyLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCi0KICNpbmNs
dWRlIDxnbGliLmg+Ci0KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9n
bGliL0dUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UuaD4KIApAQCAtNjAsOCArNTksNiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHNldFZvbHVtZShmbG9hdCk7CiAgICAgZmxvYXQgdm9sdW1lKCkgY29u
c3Q7Ci0gICAgdm9pZCB2b2x1bWVDaGFuZ2VkKCk7Ci0gICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZv
bHVtZUNoYW5nZSgpOwogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKICAgICBib29sIGVuc3VyZUdz
dEdMQ29udGV4dCgpOwpAQCAtNzAsOCArNjcsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzdXBwb3J0
c011dGluZygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2b2lkIHNldE11dGVkKGJvb2wp
OwogICAgIGJvb2wgbXV0ZWQoKSBjb25zdDsKLSAgICB2b2lkIG11dGVDaGFuZ2VkKCk7Ci0gICAg
dm9pZCBub3RpZnlQbGF5ZXJPZk11dGUoKTsKIAogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3Rh
dGUgbmV0d29ya1N0YXRlKCkgY29uc3Q7CiAgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVh
ZHlTdGF0ZSgpIGNvbnN0OwpAQCAtODAsNyArNzUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRT
aXplKGNvbnN0IEludFNpemUmKTsKICAgICB2b2lkIHNpemVDaGFuZ2VkKCk7CiAKLSAgICB2b2lk
IHRyaWdnZXJSZXBhaW50KEdzdFNhbXBsZSopOwogICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2luZ2xlU2Vj
dXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC0xMjIsNiArMTE2LDMxIEBA
IHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNz
YWdlKik7CiAKKyAgICB2b2lkIHRyaWdnZXJSZXBhaW50KEdzdFNhbXBsZSopOworCisgICAgc3Rh
dGljIHZvaWQgcmVwYWludENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Uq
LCBHc3RTYW1wbGUqKTsKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorICAgIHN0YXRpYyBnYm9vbGVh
biBkcmF3Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSosIEdzdENvbnRl
eHQqLCBHc3RTYW1wbGUqKTsKKyNlbmRpZgorCisgICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZvbHVt
ZUNoYW5nZSgpOworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZNdXRlKCk7CisKKyAgICBzdGF0aWMg
dm9pZCB2b2x1bWVDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZSopOworICAgIHN0YXRpYyB2b2lkIG11dGVDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZSopOworCisgICAgZW51bSBNYWluVGhyZWFkTm90aWZpY2F0aW9uIHsK
KyAgICAgICAgVmlkZW9DaGFuZ2VkID0gMSA8PCAwLAorICAgICAgICBWaWRlb0NhcHNDaGFuZ2Vk
ID0gMSA8PCAxLAorICAgICAgICBBdWRpb0NoYW5nZWQgPSAxIDw8IDIsCisgICAgICAgIFZvbHVt
ZUNoYW5nZWQgPSAxIDw8IDMsCisgICAgICAgIE11dGVDaGFuZ2VkID0gMSA8PCA0LAorI2lmIEVO
QUJMRShWSURFT19UUkFDSykKKyAgICAgICAgVGV4dENoYW5nZWQgPSAxIDw8IDUsCisjZW5kaWYK
KyAgICB9OworCisgICAgTWFpblRocmVhZE5vdGlmaWVyPE1haW5UaHJlYWROb3RpZmljYXRpb24+
IG1fbm90aWZpZXI7CiAgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwogICAgIEdSZWZQdHI8R3N0
RWxlbWVudD4gbV9waXBlbGluZTsKICAgICBHUmVmUHRyPEdzdFN0cmVhbVZvbHVtZT4gbV92b2x1
bWVFbGVtZW50OwpAQCAtMTMyLDE2ICsxNTEsMTEgQEAgcHJvdGVjdGVkOgogICAgIEludFNpemUg
bV9zaXplOwogICAgIG11dGFibGUgR011dGV4IG1fc2FtcGxlTXV0ZXg7CiAgICAgR1JlZlB0cjxH
c3RTYW1wbGU+IG1fc2FtcGxlOwotICAgIEdUaHJlYWRTYWZlTWFpbkxvb3BTb3VyY2UgbV92b2x1
bWVUaW1lckhhbmRsZXI7Ci0gICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBtX211dGVUaW1l
ckhhbmRsZXI7CiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKICAgICBHVGhyZWFkU2FmZU1haW5Mb29w
U291cmNlIG1fZHJhd1RpbWVySGFuZGxlcjsKICAgICBHQ29uZCBtX2RyYXdDb25kaXRpb247CiAg
ICAgR011dGV4IG1fZHJhd011dGV4OwogI2VuZGlmCi0gICAgdW5zaWduZWQgbG9uZyBtX3JlcGFp
bnRIYW5kbGVyOwotICAgIHVuc2lnbmVkIGxvbmcgbV92b2x1bWVTaWduYWxIYW5kbGVyOwotICAg
IHVuc2lnbmVkIGxvbmcgbV9tdXRlU2lnbmFsSGFuZGxlcjsKICAgICBtdXRhYmxlIEZsb2F0U2l6
ZSBtX3ZpZGVvU2l6ZTsKICAgICBib29sIG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luazsKICNpZiBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCg==
</data>
<flag name="review"
          id="290043"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>