<?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>74931</bug_id>
          
          <creation_ts>2011-12-20 07:40:10 -0800</creation_ts>
          <short_desc>[Qt][WK2] Implement custom URL schemes defined in QML.</short_desc>
          <delta_ts>2012-01-05 12:05:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>74932</dependson>
          <blocked>74933</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zeno Albisser">zeno</reporter>
          <assigned_to name="Zeno Albisser">zeno</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>gustavo</cc>
    
    <cc>jesus</cc>
    
    <cc>kenneth</cc>
    
    <cc>luiz</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>524612</commentid>
    <comment_count>0</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-12-20 07:40:10 -0800</bug_when>
    <thetext>Implement an experimental feature to allow defining custom URL schemes in QML.
The URL schemes should then be handled in QML/JS as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524639</commentid>
    <comment_count>1</comment_count>
      <attachid>120034</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-12-20 09:02:32 -0800</bug_when>
    <thetext>Created attachment 120034
patch for feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525209</commentid>
    <comment_count>2</comment_count>
      <attachid>120034</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-21 03:33:59 -0800</bug_when>
    <thetext>Comment on attachment 120034
patch for feedback.

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

just some preliminary comments, as i am not so much into networking

&gt; Source/WebKit2/Shared/qt/NetworkReplyData.h:37
&gt; +#include &quot;KURL.h&quot;
&gt; +#include &quot;Noncopyable.h&quot;
&gt; +#include &quot;SharedMemory.h&quot;
&gt; +#include &quot;WebCoreArgumentCoders.h&quot;
&gt; +
&gt; +#include &lt;QNetworkAccessManager&gt;
&gt; +#include &lt;QNetworkRequest&gt;
&gt; +#include &lt;wtf/text/WTFString.h&gt;

Why are these separated in two groups?

&gt; Source/WebKit2/Shared/qt/NetworkReplyData.h:41
&gt; +struct NetworkReplyData {

Should this be called NetworkReplyDataQt?

&gt; Source/WebKit2/Shared/qt/NetworkReplyData.h:95
&gt; +    WTF::String m_url;

urlString?

&gt; Source/WebKit2/Shared/qt/NetworkRequestData.h:45
&gt; +    NetworkRequestData(const QNetworkRequest&amp; req, QNetworkReply* rep)

rep? why not spell these out?

&gt; Source/WebKit2/Shared/qt/NetworkRequestData.h:53
&gt; +        // We store a pointer to the reply as an integer value.
&gt; +        // This value can be used as uid in the UIProcess and
&gt; +        // it serves as a pointer to the QNetworkReply when we receive
&gt; +        // the asynchronous NetworkReplyData in the WebProcess.
&gt; +        m_reply = reinterpret_cast&lt;size_t&gt;(rep);

Maybe this could be better reflected in the variable name?

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:29
&gt; +#include &quot;NetworkReplyData.h&quot;
&gt; +#include &quot;NetworkRequestData.h&quot;
&gt; +#include &quot;qquickwebview_p.h&quot;
&gt; +#include &quot;qwebkitglobal.h&quot;
&gt; +
&gt; +#include &lt;QDateTime&gt;

I think these are supposed to be in the same group

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:42
&gt; +}
&gt; +void QQuickNetworkReply::setContentType(const QString&amp; contentType)

Missing newline

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:136
&gt; +    uint64_t smLength = sizeof(UChar)*data.length();

spaces around *

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:142
&gt; +    RefPtr&lt;SharedMemory&gt; sm = SharedMemory::create(smLength);
&gt; +    if (!sm)
&gt; +        return;
&gt; +    memset(sm-&gt;data(), 0, sm-&gt;size());
&gt; +    memcpy(sm-&gt;data(), ucharData, smLength);

Is there a case where smLength != sm-&gt;size()?

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:154
&gt; +    QQuickWebViewExperimental* experimentalWebView = qobject_cast&lt;QQuickWebViewExperimental*&gt;(schemeParent-&gt;parent());

it is not the webview that is experimental :-) but some of the API of the webview

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:171
&gt; +    // We copy the size_t value that identifies the QQuickNetworkReply
&gt; +    // to the NetworkReplyData structure. So we have it available as
&gt; +    // a pointer in the WebProcess again.
&gt; +    m_networkReplyData-&gt;m_reply = data-&gt;m_reply;

why isnt that variable called soemthing with *identifier?

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply_p.h:43
&gt; +    QQuickNetworkReply(QObject* parent = 0);

When will this have a parent and when will it not?

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply_p.h:57
&gt; +    void setUserAgent(const QString&amp;);

setUserAgentString?

&gt; Source/WebKit2/UIProcess/API/qt/qquickurlscheme_p.h:31
&gt; +class QWEBKIT_EXPORT QQuickUrlScheme : public QObject {

Why isnt this called somethign with Delegate? If you dont know the api, UrlScheme sounds weird and it is hard to know what it is.

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:659
&gt; +QQuickUrlScheme* QQuickWebViewExperimental::schemeDelegatesAt(QDeclarativeListProperty&lt;QQuickUrlScheme&gt;* prop, int index)

prop*s*

schemeDelegateAt (without s?)

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:683
&gt; +void QQuickWebViewExperimental::schemeDelegatesClear(QDeclarativeListProperty&lt;QQuickUrlScheme&gt;* prop)

Wouldn&apos;t removeAllSchemeDelegates be more Qtish?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:204
&gt; +    static void schemeDelegatesAppend(QDeclarativeListProperty&lt;QQuickUrlScheme&gt;*, QQuickUrlScheme*);

Is it important that the use knows that it is appended? It sounds like an impl detail

&gt; Source/WebKit2/UIProcess/qt/WebPageProxyQt.cpp:55
&gt; +void WebPageProxy::registerApplicationScheme(const String&amp; scheme)

I wonder if it is always an application that handles this, ie. maybe registerSchemeHandler makes more sense?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/qt/PagePointerWrapper.h:37
&gt; +class PagePointerWrapper : public QObject {
&gt; +    Q_OBJECT
&gt; +public:
&gt; +    PagePointerWrapper(WebKit::WebPage*);
&gt; +    WebKit::WebPage* page() const;
&gt; +private:
&gt; +    WebKit::WebPage* m_page;
&gt; +};

What is the purpose of this? Maybe the name could reflect this better

&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp:46
&gt; +QtNetworkAccessManager::QtNetworkAccessManager(QObject * parent)

style

&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp:52
&gt; +QNetworkReply* QtNetworkAccessManager::createRequest(Operation operation, const QNetworkRequest &amp; request, QIODevice* outgoingData)

outData?

&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.h:41
&gt; +    QtNetworkAccessManager(QObject * parent = 0);

style

&gt; Source/WebKit2/WebProcess/qt/QtNetworkReply.cpp:41
&gt; +    : QNetworkReply((QObject*)parent)

static_cast?

&gt; Source/WebKit2/WebProcess/qt/QtNetworkReply.cpp:84
&gt; +qint64 QtNetworkReply::readData(char *data, qint64 maxlen)

style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525235</commentid>
    <comment_count>3</comment_count>
      <attachid>120034</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-12-21 06:05:38 -0800</bug_when>
    <thetext>Comment on attachment 120034
patch for feedback.

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

Will upload a revised version soon. Thank you very much for the feedback! :-)

&gt;&gt; Source/WebKit2/Shared/qt/NetworkReplyData.h:37
&gt;&gt; +#include &lt;wtf/text/WTFString.h&gt;
&gt; 
&gt; Why are these separated in two groups?

fixed.

&gt;&gt; Source/WebKit2/Shared/qt/NetworkReplyData.h:41
&gt;&gt; +struct NetworkReplyData {
&gt; 
&gt; Should this be called NetworkReplyDataQt?

I&apos;m not sure. Should it? This class is Qt only. Afaik the Qt suffix is usually for a platform specific implementation of a general webkit class. Or am i wrong about that?

&gt;&gt; Source/WebKit2/Shared/qt/NetworkReplyData.h:95
&gt;&gt; +    WTF::String m_url;
&gt; 
&gt; urlString?

done.

&gt;&gt; Source/WebKit2/Shared/qt/NetworkRequestData.h:45
&gt;&gt; +    NetworkRequestData(const QNetworkRequest&amp; req, QNetworkReply* rep)
&gt; 
&gt; rep? why not spell these out?

right - fixed.

&gt;&gt; Source/WebKit2/Shared/qt/NetworkRequestData.h:53
&gt;&gt; +        m_reply = reinterpret_cast&lt;size_t&gt;(rep);
&gt; 
&gt; Maybe this could be better reflected in the variable name?

got rid of that, in favor of a Uuid.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:29
&gt;&gt; +#include &lt;QDateTime&gt;
&gt; 
&gt; I think these are supposed to be in the same group

done.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:42
&gt;&gt; +void QQuickNetworkReply::setContentType(const QString&amp; contentType)
&gt; 
&gt; Missing newline

fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:136
&gt;&gt; +    uint64_t smLength = sizeof(UChar)*data.length();
&gt; 
&gt; spaces around *

done.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:142
&gt;&gt; +    memcpy(sm-&gt;data(), ucharData, smLength);
&gt; 
&gt; Is there a case where smLength != sm-&gt;size()?

Yes, at least on mac the actual size of the shared memory is rounded to pages. So sm-&gt;size() will usually be bigger then smLength.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:154
&gt;&gt; +    QQuickWebViewExperimental* experimentalWebView = qobject_cast&lt;QQuickWebViewExperimental*&gt;(schemeParent-&gt;parent());
&gt; 
&gt; it is not the webview that is experimental :-) but some of the API of the webview

good point :-) - i&apos;ll rename it to webViewExperimental.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:171
&gt;&gt; +    m_networkReplyData-&gt;m_reply = data-&gt;m_reply;
&gt; 
&gt; why isnt that variable called soemthing with *identifier?

replaced with m_replyUuid.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply_p.h:43
&gt;&gt; +    QQuickNetworkReply(QObject* parent = 0);
&gt; 
&gt; When will this have a parent and when will it not?

This is instantiated from QML... so it should always have a parent.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply_p.h:57
&gt;&gt; +    void setUserAgent(const QString&amp;);
&gt; 
&gt; setUserAgentString?

Is there a reason for that? We are leaving out parameter names if they do not add information. What information would changing this to setUserAgentString add? I think the function signature clearly shows that a string is expected.
Actually this is only supposed to be called as a property in QML anyway.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickurlscheme_p.h:31
&gt;&gt; +class QWEBKIT_EXPORT QQuickUrlScheme : public QObject {
&gt; 
&gt; Why isnt this called somethign with Delegate? If you dont know the api, UrlScheme sounds weird and it is hard to know what it is.

Hm... yeah i see that from the C++ side of the API this is not really obvious.
Although UrlScheme is the right name i believe, and QQuick prefix is descriptive as well. So i think i will just make it QQuickUrlSchemeDelegate.
I am also wondering how the QML API should look like. Currently it&apos;s a list like:
schemeDelegates: [
    UrlScheme {
        scheme: &quot;something&quot; 
        ... },
     ]
It seems to me there is quite a bit of redundancy in the naming. Any ideas how to improve that?

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:659
&gt;&gt; +QQuickUrlScheme* QQuickWebViewExperimental::schemeDelegatesAt(QDeclarativeListProperty&lt;QQuickUrlScheme&gt;* prop, int index)
&gt; 
&gt; prop*s*
&gt; 
&gt; schemeDelegateAt (without s?)

renamed prop to property.
I would prefer to leave schemeDelegatesAt etc. (see also qdeclarativewebview.cpp).
Because this function actually is returning the scheme delegate at a certain position in the &quot;schemeDelegates list&quot;. Which in fact not is a real list in this case, but that&apos;s not the point.
In Qt we would usually call the function schemeDelegates_At(..). But since webkit style doesn&apos;t like underscores in function names, this brings us to schemeDelegatesAt again.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:683
&gt;&gt; +void QQuickWebViewExperimental::schemeDelegatesClear(QDeclarativeListProperty&lt;QQuickUrlScheme&gt;* prop)
&gt; 
&gt; Wouldn&apos;t removeAllSchemeDelegates be more Qtish?

No, i don&apos;t think so. This is the way this is usually done for a QDeclarativeListProperty. (see previous comment)

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:204
&gt;&gt; +    static void schemeDelegatesAppend(QDeclarativeListProperty&lt;QQuickUrlScheme&gt;*, QQuickUrlScheme*);
&gt; 
&gt; Is it important that the use knows that it is appended? It sounds like an impl detail

I don&apos;t follow what you mean here... but i believe that is how it is usually done.

&gt;&gt; Source/WebKit2/UIProcess/qt/WebPageProxyQt.cpp:55
&gt;&gt; +void WebPageProxy::registerApplicationScheme(const String&amp; scheme)
&gt; 
&gt; I wonder if it is always an application that handles this, ie. maybe registerSchemeHandler makes more sense?

I am calling this one &quot;ApplicationScheme&quot; to clearly mention that it is coming from the application side.
There is also the concept of Custom schemes, which is similar but limited to some standardized schemes. (see also: http://www.w3.org/TR/html5/timers.html#custom-handlers)
Afaik this is currently under development and tracked here: https://bugs.webkit.org/show_bug.cgi?id=73176.

&gt;&gt; Source/WebKit2/WebProcess/WebCoreSupport/qt/PagePointerWrapper.h:37
&gt;&gt; +};
&gt; 
&gt; What is the purpose of this? Maybe the name could reflect this better

The purpose of this is to be able to pass a WebKit::WebPage* to WebFrameNetworkingContext::setOriginatingObject(QObject*) which takes a QObject*.
The setter function i defined in WebFrameNetworkingContext. This class nevertheless already had the QObject* m_originatingObject pointer which was unused in WebKit2 so far, but unfortunately is used in WebKit1.
A possible nicer way to solve this would be, to change the pointer to a void* and cast the pointers in WebKit1. - Shall we go with this approach instead? Like that we would not need the PagePointerWrapper class.

&gt;&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp:46
&gt;&gt; +QtNetworkAccessManager::QtNetworkAccessManager(QObject * parent)
&gt; 
&gt; style

done.

&gt;&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp:52
&gt;&gt; +QNetworkReply* QtNetworkAccessManager::createRequest(Operation operation, const QNetworkRequest &amp; request, QIODevice* outgoingData)
&gt; 
&gt; outData?

ok

&gt;&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.h:41
&gt;&gt; +    QtNetworkAccessManager(QObject * parent = 0);
&gt; 
&gt; style

fixed.

&gt;&gt; Source/WebKit2/WebProcess/qt/QtNetworkReply.cpp:41
&gt;&gt; +    : QNetworkReply((QObject*)parent)
&gt; 
&gt; static_cast?

oops... that&apos;s a leftover. I don&apos;t think that actually needs a cast at all.

&gt;&gt; Source/WebKit2/WebProcess/qt/QtNetworkReply.cpp:84
&gt;&gt; +qint64 QtNetworkReply::readData(char *data, qint64 maxlen)
&gt; 
&gt; style

fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525240</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-21 06:22:47 -0800</bug_when>
    <thetext>&gt; Should this be called NetworkReplyDataQt?

&gt;I&apos;m not sure. Should it? This class is Qt only. Afaik the Qt suffix is usually &gt;for a platform specific implementation of a general webkit class. Or am i wrong &gt;about that?

I meant to say QtNetworkReplyData! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525241</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-21 06:30:41 -0800</bug_when>
    <thetext>&gt; Is there a case where smLength != sm-&gt;size()?

&gt;Yes, at least on mac the actual size of the shared memory is rounded to pages. So sm-&gt;size() will usually be bigger then smLength.

Comment please :-)

&gt;&gt; +    QQuickNetworkReply(QObject* parent = 0);
&gt;
&gt; When will this have a parent and when will it not?

&gt;This is instantiated from QML... so it should always have a parent.

leave out the = 0 then

schemeDelegates: [
   UrlScheme {
       scheme: &quot;something&quot;
       ... },
    ]

seems weird to me. Yes there is dedundency there but it is inconsistent.

The following is also dedundent but at least it is consistent

urlSchemeDelegates: [
   UrlSchemeDelegate {
       scheme: &quot;something&quot;
       ... },
    ]

&gt;A possible nicer way to solve this would be, to change the pointer to a void* and cast the pointers in WebKit1. - Shall we go with this approach instead? &gt;Like that we would not need the PagePointerWrapper class.

I think that would be ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525246</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-21 06:40:52 -0800</bug_when>
    <thetext>&gt;In Qt we would usually call the function schemeDelegates_At(..). But since webkit style doesn&apos;t like underscores in function names, this brings us to schemeDelegatesAt again.

If this is a Qt only class that is fine to use _At. The style guide is educational (it is a guideline) and not strictly enforced. Exceptions to the style scripts could also be made, like allow _At in classes containing Qt in the name or similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525249</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-21 06:43:40 -0800</bug_when>
    <thetext>&gt; +    memset(sm-&gt;data(), 0, sm-&gt;size());
&gt; +    memcpy(sm-&gt;data(), ucharData, smLength);

&gt;Is there a case where smLength != sm-&gt;size()?

Why not just null the length difference? ie (data + smLength, size - smLength) ? or is that slower? just wondering</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525885</commentid>
    <comment_count>8</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-12-21 17:42:21 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; Should this be called NetworkReplyDataQt?
&gt; 
&gt; &gt;I&apos;m not sure. Should it? This class is Qt only. Afaik the Qt suffix is usually &gt;for a platform specific implementation of a general webkit class. Or am i wrong &gt;about that?
&gt; 
&gt; I meant to say QtNetworkReplyData! :-)

okay.


(In reply to comment #5)
&gt; Comment please :-)

done.

&gt; 
&gt; &gt;&gt; +    QQuickNetworkReply(QObject* parent = 0);
&gt; &gt;
&gt; &gt; When will this have a parent and when will it not?
&gt; 
&gt; &gt;This is instantiated from QML... so it should always have a parent.
&gt; 
&gt; leave out the = 0 then

No that does not work, cause QML actually creates the item without a parent, and then sets the parent afterwards. Sorry my first reply was not really precise.

&gt; urlSchemeDelegates: [
&gt;    UrlSchemeDelegate {
&gt;        scheme: &quot;something&quot;
&gt;        ... },
&gt;     ]
&gt;

Sounds good to me. I&apos;ll change that accordingly.
 
&gt; &gt;A possible nicer way to solve this would be, to change the pointer to a void* and cast the pointers in WebKit1. - Shall we go with this approach instead? &gt;Like that we would not need the PagePointerWrapper class.
&gt; 
&gt; I think that would be ok.
I took a look at this again. And what i described above does not work. Even if we change the pointer type in the NetworkingContext the QNetworkRequest that receives the originatingObject from the NetworkingContext actually requires a QObject pointer. So unless we want to change that in Qt, we have to wrap the Page pointer with a QObject. That is what the PagePointerWrapper is doing. But we can of course rename this class if we find a better name.


(In reply to comment #6)
&gt; If this is a Qt only class that is fine to use _At. The style guide is educational (it is a guideline) and not strictly enforced. Exceptions to the style scripts could also be made, like allow _At in classes containing Qt in the name or similar.
Let&apos;s do it the same way as it is in qdeclarativewebview.cpp.


(In reply to comment #7)
&gt; &gt; +    memset(sm-&gt;data(), 0, sm-&gt;size());
&gt; &gt; +    memcpy(sm-&gt;data(), ucharData, smLength);
&gt; 
&gt; &gt;Is there a case where smLength != sm-&gt;size()?
&gt; 
&gt; Why not just null the length difference? ie (data + smLength, size - smLength) ? or is that slower? just wondering
Actually we do not need to null it at all. It always seems to be a good idea to initialize memory properly. But since we always know the exact length of data that we want to transmit we do not rely on any kind of null termination. I&apos;ll simply remove the memset(..).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526191</commentid>
    <comment_count>9</comment_count>
      <attachid>120308</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-12-22 05:02:16 -0800</bug_when>
    <thetext>Created attachment 120308
patch for review. - fixed previously issues as commented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526206</commentid>
    <comment_count>10</comment_count>
      <attachid>120308</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-22 05:50:17 -0800</bug_when>
    <thetext>Comment on attachment 120308
patch for review. - fixed previously issues as commented.

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

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:570
&gt; +    This signal is emitted for every navigation request. The request object contains url, button and modifiers propertyerties

huh?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/qt/PagePointerWrapper.h:30
&gt; +class PagePointerWrapper : public QObject {

It seems more like a QObjectWrapping to me :-)

Alternatively, can&apos;t you just create a QObject and set the page as a property? At least it would avoid this class and be very clear in the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526207</commentid>
    <comment_count>11</comment_count>
      <attachid>120308</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-12-22 05:50:32 -0800</bug_when>
    <thetext>Comment on attachment 120308
patch for review. - fixed previously issues as commented.

Attachment 120308 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10986475</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526335</commentid>
    <comment_count>12</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-12-22 10:04:01 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 120308 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120308&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:570
&gt; &gt; +    This signal is emitted for every navigation request. The request object contains url, button and modifiers propertyerties
&gt; 
&gt; huh?
I blame vi for that! ;-) I&apos;ll fix it.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/qt/PagePointerWrapper.h:30
&gt; &gt; +class PagePointerWrapper : public QObject {
&gt; 
&gt; It seems more like a QObjectWrapping to me :-)
Ahm... no. It clearly derives from QObject (what is the point of the whole thing) and it clearly wraps a WebKit::WebPage pointer.
&gt; 
&gt; Alternatively, can&apos;t you just create a QObject and set the page as a property? At least it would avoid this class and be very clear in the code.
That could work, and would indeed be nicer if i can get it to work with not too much ugly casting. I&apos;ll give it a shot and post a revised patch afterwards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526786</commentid>
    <comment_count>13</comment_count>
      <attachid>120445</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-12-23 02:28:14 -0800</bug_when>
    <thetext>Created attachment 120445
patch for review. - replaced PagePointerWrapper with QObject property</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526801</commentid>
    <comment_count>14</comment_count>
      <attachid>120445</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-23 03:14:31 -0800</bug_when>
    <thetext>Comment on attachment 120445
patch for review. - replaced PagePointerWrapper with QObject property

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

Looks pretty good

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:35
&gt; +    , m_networkReplyData(new WebKit::QtNetworkReplyData) { }

Why is responsible for deleting this? should it be a smart pointer? comment?

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:130
&gt; +
&gt; +void QQuickNetworkReply::setData(const QString&amp; data)
&gt; +{

can this be called multiple times? so that it might already have a shared memory region associated? guard? comment? assert?

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply_p.h:43
&gt; +    QQuickNetworkReply(QObject* parent = 0);

If this is supposed to always have a parent, I suggest removing the = 0 and adding an assert(parent) in the ctor

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkrequest_p.h:35
&gt; +    QQuickNetworkRequest(QObject* parent = 0)
&gt; +        : QObject(parent) { }

same here

&gt; Source/WebKit2/UIProcess/API/qt/qquickurlschemedelegate.cpp:28
&gt; +{ }

ASSERT(parent) ?

&gt; Source/WebKit2/UIProcess/API/qt/qquickurlschemedelegate_p.h:38
&gt; +    QQuickUrlSchemeDelegate(QObject* parent = 0);

same?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:702
&gt; +QQuickUrlSchemeDelegate* QQuickWebViewExperimental::schemeDelegatesAt(QDeclarativeListProperty&lt;QQuickUrlSchemeDelegate&gt;* property, int index)

Didnt you want to add the _At ?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:714
&gt; +    QQuickWebViewExperimental* webView = qobject_cast&lt;QQuickWebViewExperimental*&gt;(property-&gt;object-&gt;parent());

why not webViewExperimental here?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:750
&gt; +        QQuickUrlSchemeDelegate* urlScheme = qobject_cast&lt;QQuickUrlSchemeDelegate*&gt;(children.at(index));
&gt; +        if (!urlScheme)

I think &quot;delegate&quot; would be a better local name than urlScheme

&gt; Source/WebKit2/UIProcess/qt/QtPageClient.cpp:106
&gt; +{
&gt; +    m_webView-&gt;experimental()-&gt;invokeApplicationSchemeHandler(requestData);
&gt; +}

you check whether the experimental exists elsewhere but not here, why?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:1448
&gt; +    // We encapsulate the WebPage pointer as a property of a QObject,
&gt; +    // because the networking context only accepts a QObject as originating object.
&gt; +    QObject* pagePointerWrapper = new QObject;
&gt; +    pagePointerWrapper-&gt;setProperty(&quot;PagePointer&quot;, QVariant::fromValue(static_cast&lt;void*&gt;(m_frame-&gt;page())));
&gt; +    pagePointerWrapper-&gt;setProperty(&quot;deleteWithContext&quot;, QVariant::fromValue(true));
&gt; +    context-&gt;setOriginatingObject(pagePointerWrapper);

Very clear!

&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp:56
&gt; +    if (pagePtrWrapper) {
&gt; +        QVariant pagePtr = pagePtrWrapper-&gt;property(&quot;PagePointer&quot;);
&gt; +        if (pagePtr.isValid() &amp;&amp; pagePtr.canConvert&lt;void*&gt;()) {
&gt; +            WebPage* webPage = static_cast&lt;WebPage*&gt;(pagePtr.value&lt;void*&gt;());

ASSERT instead? or as well?

&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.h:41
&gt; +    QtNetworkAccessManager(QObject* parent = 0);

=0 ?

&gt; Source/WebKit2/WebProcess/qt/QtNetworkReply.cpp:109
&gt; +bool QtNetworkReply::canReadLine () const { return true; }
&gt; +
&gt; +
&gt; +void QtNetworkReply::finalize()

double newline

&gt; Source/WebKit2/WebProcess/qt/QtNetworkReply.h:53
&gt; +    // reimplemented from QNetworkReply / QIODevice

use proper sensentes (Starts with capital, ...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529546</commentid>
    <comment_count>15</comment_count>
      <attachid>120445</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-04 08:43:38 -0800</bug_when>
    <thetext>Comment on attachment 120445
patch for review. - replaced PagePointerWrapper with QObject property

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

i will upload a revised patch asap.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:35
&gt;&gt; +    , m_networkReplyData(new WebKit::QtNetworkReplyData) { }
&gt; 
&gt; Why is responsible for deleting this? should it be a smart pointer? comment?

I will solve that with a RefPtr.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:130
&gt;&gt; +{
&gt; 
&gt; can this be called multiple times? so that it might already have a shared memory region associated? guard? comment? assert?

This can be called multiple times. The SharedMemory dies with the last SharedMemory reference or SharedMemory handle. (last file descriptor to the shared memory on unix... but this is platform dependent.)
 - adding a comment.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply_p.h:43
&gt;&gt; +    QQuickNetworkReply(QObject* parent = 0);
&gt; 
&gt; If this is supposed to always have a parent, I suggest removing the = 0 and adding an assert(parent) in the ctor

You&apos;re right, i&apos;ll change that.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkrequest_p.h:35
&gt;&gt; +        : QObject(parent) { }
&gt; 
&gt; same here

done.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickurlschemedelegate.cpp:28
&gt;&gt; +{ }
&gt; 
&gt; ASSERT(parent) ?

Nope. - We can&apos;t do that here. The delegate is created from QML and later on reparented by the declarative engine.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickurlschemedelegate_p.h:38
&gt;&gt; +    QQuickUrlSchemeDelegate(QObject* parent = 0);
&gt; 
&gt; same?

No. - necessary.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:702
&gt;&gt; +QQuickUrlSchemeDelegate* QQuickWebViewExperimental::schemeDelegatesAt(QDeclarativeListProperty&lt;QQuickUrlSchemeDelegate&gt;* property, int index)
&gt; 
&gt; Didnt you want to add the _At ?

No, i wanted to do it the same way as it is in WebKit/qt/declarative/qdeclarativewebview.cpp. But since you insist... yes i will change it.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:714
&gt;&gt; +    QQuickWebViewExperimental* webView = qobject_cast&lt;QQuickWebViewExperimental*&gt;(property-&gt;object-&gt;parent());
&gt; 
&gt; why not webViewExperimental here?

done.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:750
&gt;&gt; +        if (!urlScheme)
&gt; 
&gt; I think &quot;delegate&quot; would be a better local name than urlScheme

done.

&gt;&gt; Source/WebKit2/UIProcess/qt/QtPageClient.cpp:106
&gt;&gt; +}
&gt; 
&gt; you check whether the experimental exists elsewhere but not here, why?

I was only checking after casting. And QQuickWebView always creates a QQuickWebViewExperimental in it&apos;s initializer list. But i just realized that m_webView is 0 in case that QtPageClient was not initialized. Even though this should not happen... some extra checking cannot be wrong i think. I&apos;ll add that.

&gt;&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:1448
&gt;&gt; +    context-&gt;setOriginatingObject(pagePointerWrapper);
&gt; 
&gt; Very clear!

yes. - or was that ironic?

&gt;&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp:56
&gt;&gt; +            WebPage* webPage = static_cast&lt;WebPage*&gt;(pagePtr.value&lt;void*&gt;());
&gt; 
&gt; ASSERT instead? or as well?

done.

&gt;&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.h:41
&gt;&gt; +    QtNetworkAccessManager(QObject* parent = 0);
&gt; 
&gt; =0 ?

done.

&gt;&gt; Source/WebKit2/WebProcess/qt/QtNetworkReply.cpp:109
&gt;&gt; +void QtNetworkReply::finalize()
&gt; 
&gt; double newline

removed.

&gt;&gt; Source/WebKit2/WebProcess/qt/QtNetworkReply.h:53
&gt;&gt; +    // reimplemented from QNetworkReply / QIODevice
&gt; 
&gt; use proper sensentes (Starts with capital, ...)

removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530176</commentid>
    <comment_count>16</comment_count>
      <attachid>121258</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-05 04:10:12 -0800</bug_when>
    <thetext>Created attachment 121258
patch for review. - using RefPtr for networkRequestData and networkReplyData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530178</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-05 04:12:41 -0800</bug_when>
    <thetext>Attachment 121258 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit/qt/ChangeLog&apos;,...&quot; exit_code: 1

Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:217:  schemeDelegates_At is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:218:  schemeDelegates_Append is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:219:  schemeDelegates_Count is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:220:  schemeDelegates_Clear is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:703:  QQuickWebViewExperimental::schemeDelegates_At is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:711:  QQuickWebViewExperimental::schemeDelegates_Append is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:722:  QQuickWebViewExperimental::schemeDelegates_Count is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:727:  QQuickWebViewExperimental::schemeDelegates_Clear is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 8 in 35 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>530192</commentid>
    <comment_count>18</comment_count>
      <attachid>121258</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-05 04:41:40 -0800</bug_when>
    <thetext>Comment on attachment 121258
patch for review. - using RefPtr for networkRequestData and networkReplyData.

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

&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp:49
&gt; +

Why not make a 

static WebPage* obtainOriginatingWebPage(const QNetworkRequest&amp; request)
{
    QObject* originatingObject = request.originatingObject();
    if (!originatingObject)
        return 0;

    QVariant var = originatingObject-&gt;property(&quot;PagePointer&quot;);
    if (!var.isValid() || !var.canConvert&lt;void*&gt;())
        return 0;

    WebPage* webPage = static_cast&lt;WebPage*&gt;(var.value&lt;void*&gt;());
    ASSERT(webPage);
    return webPage;
}


then ...

WebPage* origin = obtainOriginatingWebPage(request);
if (m_applicationSchemes.contains(origin, request.url().scheme().toLower())) {
    ...
}
return ...

&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp:50
&gt; +QNetworkReply* QtNetworkAccessManager::createRequest(Operation operation, const QNetworkRequest &amp; request, QIODevice* outData)

style

&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp:53
&gt; +    QObject* pagePtrWrapper = request.originatingObject();
&gt; +    if (pagePtrWrapper) {

I would merge those two lines

&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.h:46
&gt; +    virtual QNetworkReply* createRequest(Operation, const QNetworkRequest &amp;, QIODevice* outgoingData = 0);

style. Also remember that we use OVERRIDE macro and nullptr in webkit today</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530278</commentid>
    <comment_count>19</comment_count>
      <attachid>121258</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-05 07:45:30 -0800</bug_when>
    <thetext>Comment on attachment 121258
patch for review. - using RefPtr for networkRequestData and networkReplyData.

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

thanks for the reviews. :-)
i&apos;ll post an update again.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:217
&gt;&gt; +    static QQuickUrlSchemeDelegate* schemeDelegates_At(QDeclarativeListProperty&lt;QQuickUrlSchemeDelegate&gt;*, int index);
&gt; 
&gt; schemeDelegates_At is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]

do we need to do anything about these???

&gt;&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp:49
&gt;&gt; +
&gt; 
&gt; Why not make a 
&gt; 
&gt; static WebPage* obtainOriginatingWebPage(const QNetworkRequest&amp; request)
&gt; {
&gt;     QObject* originatingObject = request.originatingObject();
&gt;     if (!originatingObject)
&gt;         return 0;
&gt; 
&gt;     QVariant var = originatingObject-&gt;property(&quot;PagePointer&quot;);
&gt;     if (!var.isValid() || !var.canConvert&lt;void*&gt;())
&gt;         return 0;
&gt; 
&gt;     WebPage* webPage = static_cast&lt;WebPage*&gt;(var.value&lt;void*&gt;());
&gt;     ASSERT(webPage);
&gt;     return webPage;
&gt; }
&gt; 
&gt; 
&gt; then ...
&gt; 
&gt; WebPage* origin = obtainOriginatingWebPage(request);
&gt; if (m_applicationSchemes.contains(origin, request.url().scheme().toLower())) {
&gt;     ...
&gt; }
&gt; return ...

good point. :)

&gt;&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp:50
&gt;&gt; +QNetworkReply* QtNetworkAccessManager::createRequest(Operation operation, const QNetworkRequest &amp; request, QIODevice* outData)
&gt; 
&gt; style

done.

&gt;&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.cpp:53
&gt;&gt; +    if (pagePtrWrapper) {
&gt; 
&gt; I would merge those two lines

replaced with previous change.

&gt;&gt; Source/WebKit2/WebProcess/qt/QtNetworkAccessManager.h:46
&gt;&gt; +    virtual QNetworkReply* createRequest(Operation, const QNetworkRequest &amp;, QIODevice* outgoingData = 0);
&gt; 
&gt; style. Also remember that we use OVERRIDE macro and nullptr in webkit today

style fixed.
i don&apos;t think you can use nullptr here. nullptr is of type std::nullptr_t, therefore you would have to cast it to QIODevice* afterwards, which would be pretty ugly.
I think you meant to use it for RefPtrs ... cause these actually have a ctor taking an std::nullptr_t argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530292</commentid>
    <comment_count>20</comment_count>
      <attachid>121280</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-05 08:03:37 -0800</bug_when>
    <thetext>Created attachment 121280
patch for review. - extracted obtainOriginatingWebPage code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530299</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-05 08:08:51 -0800</bug_when>
    <thetext>Attachment 121280 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit/qt/ChangeLog&apos;,...&quot; exit_code: 1

Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:219:  schemeDelegates_At is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:220:  schemeDelegates_Append is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:221:  schemeDelegates_Count is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:222:  schemeDelegates_Clear is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:703:  QQuickWebViewExperimental::schemeDelegates_At is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:711:  QQuickWebViewExperimental::schemeDelegates_Append is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:722:  QQuickWebViewExperimental::schemeDelegates_Count is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:727:  QQuickWebViewExperimental::schemeDelegates_Clear is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 8 in 35 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>530316</commentid>
    <comment_count>22</comment_count>
      <attachid>121280</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-05 08:39:07 -0800</bug_when>
    <thetext>Comment on attachment 121280
patch for review. - extracted obtainOriginatingWebPage code.

Nice, good work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530319</commentid>
    <comment_count>23</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-05 08:41:32 -0800</bug_when>
    <thetext>
&gt; &gt; schemeDelegates_At is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; 
&gt; do we need to do anything about these???

Ignore :-) the style is educational only.

&gt; style fixed.
&gt; i don&apos;t think you can use nullptr here. nullptr is of type std::nullptr_t, therefore you would have to cast it to QIODevice* afterwards, which would be pretty ugly.
&gt; I think you meant to use it for RefPtrs ... cause these actually have a ctor taking an std::nullptr_t argument.

It was more like a general comment to keep in mind in the future</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530438</commentid>
    <comment_count>24</comment_count>
      <attachid>121301</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-05 11:00:16 -0800</bug_when>
    <thetext>Created attachment 121301
rebased patch after r104168.

I had to change the originatingObject mechanism, because after r104168 the WebFrameNetworkingContext always creates a QObject for the originating object on its own.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530441</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-05 11:02:36 -0800</bug_when>
    <thetext>Attachment 121301 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit/qt/ChangeLog&apos;,...&quot; exit_code: 1

Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:219:  schemeDelegates_At is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:220:  schemeDelegates_Append is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:221:  schemeDelegates_Count is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:222:  schemeDelegates_Clear is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:703:  QQuickWebViewExperimental::schemeDelegates_At is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:711:  QQuickWebViewExperimental::schemeDelegates_Append is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:722:  QQuickWebViewExperimental::schemeDelegates_Count is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:727:  QQuickWebViewExperimental::schemeDelegates_Clear is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 8 in 35 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>530444</commentid>
    <comment_count>26</comment_count>
      <attachid>121301</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-05 11:06:19 -0800</bug_when>
    <thetext>Comment on attachment 121301
rebased patch after r104168.

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

Just highlighting changes after r104168, to make the life of our dear reviewers more easy. :)

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:1443
&gt; +    // We encapsulate the WebPage pointer as a property of the originating QObject.

We are now using the object that is created implicit by WebFrameNetworkingContext, instead of creating one on our own.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.h:36
&gt; +    virtual QObject* originatingObject() const;

We want to access that from WebFrameLoaderClient::createNetworkingContext().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530510</commentid>
    <comment_count>27</comment_count>
      <attachid>121301</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-05 12:04:50 -0800</bug_when>
    <thetext>Comment on attachment 121301
rebased patch after r104168.

Clearing flags on attachment: 121301

Committed r104193: &lt;http://trac.webkit.org/changeset/104193&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530511</commentid>
    <comment_count>28</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-05 12:05:06 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120034</attachid>
            <date>2011-12-20 09:02:32 -0800</date>
            <delta_ts>2011-12-23 02:28:14 -0800</delta_ts>
            <desc>patch for feedback.</desc>
            <filename>74932_20111220-180036.patch</filename>
            <type>text/plain</type>
            <size>65846</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAyMDkzNmU4Li5hZjg4NjNh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTEtMTItMjAgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
W1F0XVtXSzJdIEltcGxlbWVudCBjdXN0b20gVVJMIHNjaGVtZXMgZGVmaW5lZCBpbiBRTUwuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkzMQorCisg
ICAgICAgIEFkZCBuZXcgY2xhc3NlcyB0byB0aGUgZXhwb3J0IG1hcC4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9xdHdlYmtpdC1leHBv
cnQubWFwOgorCiAyMDExLTEyLTE2ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBs
ZS5jb20+CiAKICAgICAgICAgRGUtdmlydHVhbGl6ZSBkZXN0cnVjdG9ycwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpp
bmRleCA4MGVkZGU0Li4wZjlhZmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDExLTEyLTIwICBaZW5vIEFsYmlzc2VyICA8emVub0B3ZWJraXQub3JnPgorCisgICAgICAgIFtR
dF1bV0syXSBJbXBsZW1lbnQgY3VzdG9tIFVSTCBzY2hlbWVzIGRlZmluZWQgaW4gUU1MLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MzEKKworICAg
ICAgICBNYWtlIGNsYXNzZXMgUVF1aWNrVXJsU2NoZW1lLCBRUXVpY2tOZXR3b3JrUmVxdWVzdAor
ICAgICAgICBhbmQgUVF1aWNrTmV0d29ya1JlcGx5IGFjY2Vzc2libGUgZnJvbSBRTUwuCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkZWNsYXJhdGl2
ZS9leHBlcmltZW50YWwvcGx1Z2luLmNwcDoKKwogMjAxMS0xMi0xNiAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW5hbWUgcmVnaXN0ZXJDb21tYW5kRm9yKFVu
ZG98UmVkbykgdG8gcmVnaXN0ZXIoVW5kb3xSZWRvKVN0ZXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVudGFsL3BsdWdpbi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVnaW4uY3BwCmluZGV4IGQ4ODFlYjgu
Ljk3YWNlZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJp
bWVudGFsL3BsdWdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9leHBl
cmltZW50YWwvcGx1Z2luLmNwcApAQCAtNTIsNiArNTIsMTEgQEAgcHVibGljOgogICAgICAgICAg
ICAgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgUVF1aWNr
V2ViVmlld0V4cGVyaW1lbnRhbCIpKTsKICAgICAgICAgcW1sUmVnaXN0ZXJVbmNyZWF0YWJsZVR5
cGU8UVdlYlZpZXdwb3J0SW5mbz4odXJpLCAzLCAwLCAiUVdlYlZpZXdwb3J0SW5mbyIsCiAgICAg
ICAgICAgICBRT2JqZWN0Ojp0cigiQ2Fubm90IGNyZWF0ZSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiBR
V2ViVmlld3BvcnRJbmZvIikpOworICAgICAgICBxbWxSZWdpc3RlclR5cGU8UVF1aWNrVXJsU2No
ZW1lPih1cmksIDMsIDAsICJVcmxTY2hlbWUiKTsKKyAgICAgICAgcW1sUmVnaXN0ZXJVbmNyZWF0
YWJsZVR5cGU8UVF1aWNrTmV0d29ya1JlcXVlc3Q+KHVyaSwgMywgMCwgIk5ldHdvcmtSZXF1ZXN0
IiwKKyAgICAgICAgICAgIFFPYmplY3Q6OnRyKCJOZXR3b3JrUmVxdWVzdCBzaG91bGQgbm90IGJl
IGNyZWF0ZWQgZnJvbSBRTUwiKSk7CisgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVUeXBl
PFFRdWlja05ldHdvcmtSZXBseT4odXJpLCAzLCAwLCAiTmV0d29ya1JlcGx5IiwKKyAgICAgICAg
ICAgIFFPYmplY3Q6OnRyKCJOZXR3b3JrUmVwbHkgc2hvdWxkIG5vdCBiZSBjcmVhdGVkIGZyb20g
UU1MIikpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA2YTViNDU5Li41MzYwNThiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDUgKzEsMTE3IEBACiAyMDExLTEyLTIwICBaZW5vIEFsYmlzc2VyICA8emVu
b0B3ZWJraXQub3JnPgogCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQgY3VzdG9tIFVSTCBz
Y2hlbWVzIGRlZmluZWQgaW4gUU1MLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzQ5MzEKKworICAgICAgICBBbGxvdyBjcmVhdGlvbiBvZiBjdXN0b20g
VXJsU2NoZW1lcyBmcm9tIFFNTC4KKyAgICAgICAgQSBVcmxTY2hlbWUgY29udGFpbnMgYSBoYW5k
bGVyIHNpZ25hbCB0aGF0IGlzIHRyaWdnZXJlZAorICAgICAgICB3aGVuIGEgdXJsIG1hdGNoaW5n
IHRoZSBkZWZpbmVkIHNjaGVtZSBpcyByZXF1ZXN0ZWQuCisgICAgICAgIFRvIGFsbG93IGZvciB0
aGlzIGEgZGVyaXZhdGlvbiBvZiBRTmV0d29ya0FjY2Vzc01hbmFnZXIKKyAgICAgICAgaXMgbmVj
ZXNzYXJ5LgorICAgICAgICBUaGUgcmVxdWVzdCBpcyB0aGVuIGhhbmRsZWQgaW4gUU1ML0pTIGFu
ZCBhIHJlcGx5CisgICAgICAgIGlzIHNlbnQgYmFjayBmcm9tIHRoZSBVSVByb2Nlc3MgdG8gdGhl
IFdlYlByb2Nlc3MuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTaGFyZWQvcXQvTmV0d29ya1JlcGx5RGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1JlcGx5RGF0YTo6TmV0d29ya1JlcGx5RGF0YSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtSZXBseURhdGE6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtS
ZXBseURhdGE6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL3F0L05ldHdvcmtSZXF1ZXN0RGF0
YS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JlcXVlc3REYXRhOjpOZXR3b3Jr
UmVxdWVzdERhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVxdWVzdERhdGE6OmVuY29k
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXF1ZXN0RGF0YTo6ZGVjb2RlKToKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29y
a3JlcGx5LmNwcDogQWRkZWQuCisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OlFRdWlja05l
dHdvcmtSZXBseSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OmNvbnRlbnRUeXBlKToK
KyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29udGVudFR5cGUpOgorICAgICAgICAo
UVF1aWNrTmV0d29ya1JlcGx5OjpvcGVyYXRpb24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1Jl
cGx5OjpzZXRPcGVyYXRpb24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5Ojpjb250ZW50
RGlzcG9zaXRpb24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb250ZW50RGlz
cG9zaXRpb24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5Ojpsb2NhdGlvbik6CisgICAg
ICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldExvY2F0aW9uKToKKyAgICAgICAgKFFRdWlja05l
dHdvcmtSZXBseTo6bGFzdE1vZGlmaWVkKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6
c2V0TGFzdE1vZGlmaWVkKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6Y29va2llKToK
KyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29va2llKToKKyAgICAgICAgKFFRdWlj
a05ldHdvcmtSZXBseTo6dXNlckFnZW50KToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6
c2V0VXNlckFnZW50KToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2VydmVyKToKKyAg
ICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0U2VydmVyKToKKyAgICAgICAgKFFRdWlja05l
dHdvcmtSZXBseTo6ZGF0YSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldERhdGEp
OgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZW5kKToKKyAgICAgICAgKFFRdWlja05l
dHdvcmtSZXBseTo6bmV0d29ya1JlcXVlc3REYXRhKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtS
ZXBseTo6c2V0TmV0d29ya1JlcXVlc3REYXRhKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBs
eTo6bmV0d29ya1JlcGx5RGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tu
ZXR3b3JrcmVwbHlfcC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a25ldHdvcmtyZXF1ZXN0X3AuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t1cmxzY2hlbWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFRdWlja1VybFNjaGVtZTo6UVF1
aWNrVXJsU2NoZW1lKToKKyAgICAgICAgKFFRdWlja1VybFNjaGVtZTo6c2NoZW1lKToKKyAgICAg
ICAgKFFRdWlja1VybFNjaGVtZTo6c2V0U2NoZW1lKToKKyAgICAgICAgKFFRdWlja1VybFNjaGVt
ZTo6cmVxdWVzdCk6CisgICAgICAgIChRUXVpY2tVcmxTY2hlbWU6OnJlcGx5KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZV9wLmg6IEFkZGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHA6CisgICAgICAgIChRUXVpY2tXZWJW
aWV3RXhwZXJpbWVudGFsOjpRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsKToKKyAgICAgICAgKFFR
dWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURlbGVnYXRlc19hdCk6CisgICAgICAgIChR
UXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVEZWxlZ2F0ZXNfYXBwZW5kKToKKyAgICAg
ICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURlbGVnYXRlc19jb3VudCk6Cisg
ICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVEZWxlZ2F0ZXNfY2xlYXIp
OgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzKToK
KyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6Omludm9rZUFwcGxpY2F0aW9uU2No
ZW1lSGFuZGxlcik6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZW5kQXBw
bGljYXRpb25TY2hlbWVSZXBseSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJ2aWV3X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nl
c3MvcXQvUXRQYWdlQ2xpZW50LmNwcDoKKyAgICAgICAgKFF0UGFnZUNsaWVudDo6aGFuZGxlQXBw
bGljYXRpb25TY2hlbWVSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQYWdlQ2xp
ZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXNvbHZlQXBwbGljYXRpb25TY2hlbWVSZXF1
ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZW5kQXBwbGljYXRpb25TY2hl
bWVSZXBseSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50Ojpj
cmVhdGVOZXR3b3JraW5nQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9xdC9QYWdlUG9pbnRlcldyYXBwZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBhZ2VQb2lu
dGVyV3JhcHBlcjo6UGFnZVBvaW50ZXJXcmFwcGVyKToKKyAgICAgICAgKFBhZ2VQb2ludGVyV3Jh
cHBlcjo6cGFnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9QYWdl
UG9pbnRlcldyYXBwZXIuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldE9yaWdpbmF0aW5nT2JqZWN0KToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpyZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
cmVjZWl2ZWRBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjphcHBsaWNhdGlvblNjaGVtZVJlcGx5KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1F0
TmV0d29ya0FjY2Vzc01hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UXROZXR3
b3JrQWNjZXNzTWFuYWdlcjo6UXROZXR3b3JrQWNjZXNzTWFuYWdlcik6CisgICAgICAgIChXZWJL
aXQ6OlF0TmV0d29ya0FjY2Vzc01hbmFnZXI6OmNyZWF0ZVJlcXVlc3QpOgorICAgICAgICAoV2Vi
S2l0OjpRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpyZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5OjpRdE5ldHdvcmtSZXBseSk6CisgICAgICAgIChXZWJL
aXQ6OlF0TmV0d29ya1JlcGx5OjpzZXREYXRhKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3Jr
UmVwbHk6OnNldFJlcGx5RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5Ojpy
ZWFkRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5OjpieXRlc0F2YWlsYWJs
ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5OjpzZXRIZWFkZXIpOgorICAgICAg
ICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6YWJvcnQpOgorICAgICAgICAoV2ViS2l0OjpRdE5l
dHdvcmtSZXBseTo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6c2V0
UmVhZEJ1ZmZlclNpemUpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6Y2FuUmVh
ZExpbmUpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6ZmluYWxpemUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVwbHkuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorCisyMDExLTEyLTIwICBaZW5vIEFsYmlz
c2VyICA8emVub0B3ZWJraXQub3JnPgorCiAgICAgICAgIFtRdF1bV0syXSBBZGQgQXJndW1lbnRD
b2RlciBmdW5jdGlvbnMgZm9yIHNpemVfdC4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTc0OTMyCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9xdC9OZXR3b3JrUmVwbHlEYXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTmV0
d29ya1JlcGx5RGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0Mjlm
M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTmV0d29ya1Jl
cGx5RGF0YS5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFpl
bm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3Jr
UmVwbHlEYXRhX2gKKyNkZWZpbmUgTmV0d29ya1JlcGx5RGF0YV9oCisKKyNpbmNsdWRlICJBcmd1
bWVudENvZGVyc1F0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vbmNvcHlhYmxl
LmgiCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiCisKKyNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+CisjaW5jbHVkZSA8
UU5ldHdvcmtSZXF1ZXN0PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworc3RydWN0IE5ldHdvcmtSZXBseURhdGEgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKE5ldHdvcmtSZXBseURhdGEpOworcHVibGljOgorICAgIE5ldHdvcmtSZXBs
eURhdGEoKQorICAgICAgICA6IG1fY29udGVudExlbmd0aCgwKQorICAgICAgICAsIG1fbGFzdE1v
ZGlmaWVkKDApCisgICAgICAgICwgbV9yZXBseSgwKQorICAgIHsgfQorCisgICAgdm9pZCBlbmNv
ZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlKG1fdXJsKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bSht
X29wZXJhdGlvbik7CisgICAgICAgIGVuY29kZXItPmVuY29kZShtX2NvbnRlbnREaXNwb3NpdGlv
bik7CisgICAgICAgIGVuY29kZXItPmVuY29kZShtX2NvbnRlbnRUeXBlKTsKKyAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlVUludDY0KG1fY29udGVudExlbmd0aCk7CisgICAgICAgIGVuY29kZXItPmVu
Y29kZShtX2xvY2F0aW9uKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlVUludDY0KG1fbGFzdE1v
ZGlmaWVkKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKG1fY29va2llKTsKKyAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlKG1fdXNlckFnZW50KTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKG1fc2Vy
dmVyKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKG1fcmVwbHkpOworICAgICAgICBlbmNvZGVy
LT5lbmNvZGUobV9kYXRhSGFuZGxlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUo
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBOZXR3b3JrUmVwbHlEYXRhJiBkZXN0
aW5hdGlvbikKKyAgICB7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9u
Lm1fdXJsKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGVFbnVtKGRlc3RpbmF0aW9uLm1fb3BlcmF0aW9uKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9jb250
ZW50RGlzcG9zaXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IWRlY29kZXItPmRlY29kZShkZXN0aW5hdGlvbi5tX2NvbnRlbnRUeXBlKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50NjQoZGVzdGlu
YXRpb24ubV9jb250ZW50TGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9sb2NhdGlvbikpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDY0KGRl
c3RpbmF0aW9uLm1fbGFzdE1vZGlmaWVkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9jb29raWUpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShkZXN0aW5h
dGlvbi5tX3VzZXJBZ2VudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fc2VydmVyKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9y
ZXBseSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKGRlc3RpbmF0aW9uLm1fZGF0YUhhbmRsZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFdURjo6U3RyaW5nIG1fdXJs
OworCisgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gbV9vcGVyYXRpb247Cisg
ICAgV1RGOjpTdHJpbmcgbV9jb250ZW50RGlzcG9zaXRpb247CisgICAgV1RGOjpTdHJpbmcgbV9j
b250ZW50VHlwZTsKKyAgICB1aW50NjRfdCBtX2NvbnRlbnRMZW5ndGg7CisgICAgV1RGOjpTdHJp
bmcgbV9sb2NhdGlvbjsKKyAgICB1aW50NjRfdCBtX2xhc3RNb2RpZmllZDsKKyAgICBXVEY6OlN0
cmluZyBtX2Nvb2tpZTsKKyAgICBXVEY6OlN0cmluZyBtX3VzZXJBZ2VudDsKKyAgICBXVEY6OlN0
cmluZyBtX3NlcnZlcjsKKyAgICBzaXplX3QgbV9yZXBseTsKKworICAgIFNoYXJlZE1lbW9yeTo6
SGFuZGxlIG1fZGF0YUhhbmRsZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gTmV0d29ya1JlcGx5RGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvcXQvTmV0d29ya1JlcXVlc3REYXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvTmV0
d29ya1JlcXVlc3REYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhi
MmNhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9OZXR3b3Jr
UmVxdWVzdERhdGEuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3
b3JrUmVxdWVzdERhdGFfaAorI2RlZmluZSBOZXR3b3JrUmVxdWVzdERhdGFfaAorCisjaW5jbHVk
ZSAiQXJndW1lbnRDb2RlcnNRdC5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybS5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorCisjaW5jbHVkZSA8
UU5ldHdvcmtSZXBseT4KKyNpbmNsdWRlIDxRTmV0d29ya1JlcXVlc3Q+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgTmV0d29y
a1JlcXVlc3REYXRhIHsKKyAgICBOZXR3b3JrUmVxdWVzdERhdGEoKQorICAgICAgICA6IG1fcmVw
bHkoMCkKKyAgICB7IH0KKworICAgIE5ldHdvcmtSZXF1ZXN0RGF0YShjb25zdCBRTmV0d29ya1Jl
cXVlc3QmIHJlcSwgUU5ldHdvcmtSZXBseSogcmVwKQorICAgIHsKKyAgICAgICAgbV9zY2hlbWUg
PSByZXEudXJsKCkuc2NoZW1lKCk7CisgICAgICAgIG1fdXJsID0gcmVxLnVybCgpLnRvU3RyaW5n
KCk7CisgICAgICAgIC8vIFdlIHN0b3JlIGEgcG9pbnRlciB0byB0aGUgcmVwbHkgYXMgYW4gaW50
ZWdlciB2YWx1ZS4KKyAgICAgICAgLy8gVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCBhcyB1aWQgaW4g
dGhlIFVJUHJvY2VzcyBhbmQKKyAgICAgICAgLy8gaXQgc2VydmVzIGFzIGEgcG9pbnRlciB0byB0
aGUgUU5ldHdvcmtSZXBseSB3aGVuIHdlIHJlY2VpdmUKKyAgICAgICAgLy8gdGhlIGFzeW5jaHJv
bm91cyBOZXR3b3JrUmVwbHlEYXRhIGluIHRoZSBXZWJQcm9jZXNzLgorICAgICAgICBtX3JlcGx5
ID0gcmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KHJlcCk7CisgICAgfQorCisgICAgdm9pZCBlbmNv
ZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlKG1fc2NoZW1lKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKG1f
dXJsKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKG1fcmVwbHkpOworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIE5ldHdv
cmtSZXF1ZXN0RGF0YSYgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShkZXN0aW5hdGlvbi5tX3NjaGVtZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fdXJsKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGlu
YXRpb24ubV9yZXBseSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIFN0cmluZyBtX3NjaGVtZTsKKyAgICBTdHJpbmcgbV91cmw7
CisgICAgc2l6ZV90IG1fcmVwbHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIE5ldHdvcmtSZXF1ZXN0RGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9U
YXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCBjZjE1ZGNmLi44YmQ3
MzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1RhcmdldC5wcmkKQEAgLTE4NCw2ICsxODQsOSBAQCBIRUFERVJTICs9IFwKICAgICBV
SVByb2Nlc3MvQVBJL3F0L3F3ZWJuYXZpZ2F0aW9uaGlzdG9yeV9wX3AuaCBcCiAgICAgVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJ2aWV3X3BfcC5oIFwKKyAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBs
eV9wLmggXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcXVlc3RfcC5oIFwK
KyAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZV9wLmggXAogICAgIFVJUHJvY2Vz
cy9BUEkvcXQvcXdlYnZpZXdwb3J0aW5mb19wLmggXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNh
dGlvbi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9BdXRo
ZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuaCBcCkBAIC0zNDMsNiAr
MzQ2LDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
b3B1cE1lbnUuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTZWFyY2hQb3B1
cE1lbnUuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0LmggXAorICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvUGFnZVBv
aW50ZXJXcmFwcGVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmggXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuaCBcCkBAIC0zNTgsNyArMzYyLDEwIEBAIEhFQURF
UlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViQ29ubmVjdGlvblRvVUlQcm9jZXNzLmggXAogICAg
IFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oIFwKICAgICBXZWJQcm9jZXNzL3F0L1F0QnVpbHRpbkJ1
bmRsZS5oIFwKLSAgICBXZWJQcm9jZXNzL3F0L1F0QnVpbHRpbkJ1bmRsZVBhZ2UuaAorICAgIFdl
YlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlUGFnZS5oIFwKKyAgICBXZWJQcm9jZXNzL3F0L1F0
TmV0d29ya0FjY2Vzc01hbmFnZXIuaCBcCisgICAgV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBs
eS5oIFwKKyAgICBXZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcXVlc3QuaAogCiBTT1VSQ0VTICs9
IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmNwcCBcCkBAIC01MDMsNiAr
NTEwLDggQEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdl
LmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2VibmF2aWdhdGlvbmhpc3RvcnkuY3BwIFwK
ICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIFwKKyAgICBVSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHAgXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrdXJsc2NoZW1lLmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXMu
Y3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJ2aWV3cG9ydGluZm8uY3BwIFwKICAgICBV
SVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHAg
XApAQCAtNjg1LDYgKzY5NCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvcXQvV2ViRXJyb3JzUXQuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L3F0L1dlYkRyYWdDbGllbnRRdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvcXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvcXQvUGFnZVBvaW50ZXJXcmFwcGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9xdC9XZWJQb3B1cE1lbnVRdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9EZWNvZGVyQWRhcHRlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5n
QXJlYS5jcHAgXApAQCAtNzExLDYgKzcyMSw4IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5jcHAgXAogICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlLmNw
cCBcCiAgICAgV2ViUHJvY2Vzcy9xdC9RdEJ1aWx0aW5CdW5kbGVQYWdlLmNwcCBcCisgICAgV2Vi
UHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9x
dC9RdE5ldHdvcmtSZXBseS5jcHAgXAogICAgIFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5R
dC5jcHAgXAogICAgIFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNwcAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxZGE1MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5
LmNwcApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBaZW5vIEFs
Ymlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAicXF1aWNrbmV0d29ya3JlcGx5X3AuaCIKKworI2luY2x1ZGUgIk5ldHdvcmtSZXBseURhdGEu
aCIKKyNpbmNsdWRlICJOZXR3b3JrUmVxdWVzdERhdGEuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJ2
aWV3X3AuaCIKKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisKKyNpbmNsdWRlIDxRRGF0ZVRp
bWU+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK1FRdWlja05ldHdvcmtSZXBseTo6UVF1
aWNrTmV0d29ya1JlcGx5KFFPYmplY3QqIHBhcmVudCkKKyAgICA6IFFPYmplY3QocGFyZW50KQor
ICAgICwgbV9uZXR3b3JrUmVxdWVzdERhdGEoMCkKKyAgICAsIG1fbmV0d29ya1JlcGx5RGF0YShu
ZXcgV2ViS2l0OjpOZXR3b3JrUmVwbHlEYXRhKSB7IH0KKworUVN0cmluZyBRUXVpY2tOZXR3b3Jr
UmVwbHk6OmNvbnRlbnRUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlE
YXRhLT5tX2NvbnRlbnRUeXBlOworfQordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldENvbnRl
bnRUeXBlKGNvbnN0IFFTdHJpbmcmIGNvbnRlbnRUeXBlKQoreworICAgIG1fbmV0d29ya1JlcGx5
RGF0YS0+bV9jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlOworfQorCitRTmV0d29ya0FjY2Vzc01h
bmFnZXI6Ok9wZXJhdGlvbiBRUXVpY2tOZXR3b3JrUmVwbHk6Om9wZXJhdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9vcGVyYXRpb247Cit9CisKK3ZvaWQg
UVF1aWNrTmV0d29ya1JlcGx5OjpzZXRPcGVyYXRpb24oUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpP
cGVyYXRpb24gb3BlcmF0aW9uKQoreworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9vcGVyYXRp
b24gPSBvcGVyYXRpb247Cit9CisKK1FTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5Ojpjb250ZW50
RGlzcG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPm1f
Y29udGVudERpc3Bvc2l0aW9uOworfQorCit2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29u
dGVudERpc3Bvc2l0aW9uKGNvbnN0IFFTdHJpbmcmIGRpc3Bvc2l0aW9uKQoreworICAgIG1fbmV0
d29ya1JlcGx5RGF0YS0+bV9jb250ZW50RGlzcG9zaXRpb24gPSBkaXNwb3NpdGlvbjsKK30KKwor
UVN0cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6OmxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2xvY2F0aW9uOworfQorCit2b2lkIFFRdWlja05ldHdv
cmtSZXBseTo6c2V0TG9jYXRpb24oY29uc3QgUVN0cmluZyYgbG9jYXRpb24pCit7CisgICAgbV9u
ZXR3b3JrUmVwbHlEYXRhLT5tX2xvY2F0aW9uID0gbG9jYXRpb247Cit9CisKK1FTdHJpbmcgUVF1
aWNrTmV0d29ya1JlcGx5OjpsYXN0TW9kaWZpZWQoKSBjb25zdAoreworICAgIHJldHVybiBRRGF0
ZVRpbWU6OmZyb21NU2Vjc1NpbmNlRXBvY2gobV9uZXR3b3JrUmVwbHlEYXRhLT5tX2xhc3RNb2Rp
ZmllZCkudG9TdHJpbmcoUXQ6OklTT0RhdGUpOworfQorCit2b2lkIFFRdWlja05ldHdvcmtSZXBs
eTo6c2V0TGFzdE1vZGlmaWVkKGNvbnN0IFFTdHJpbmcmIGxhc3RNb2RpZmllZCkKK3sKKyAgICBt
X25ldHdvcmtSZXBseURhdGEtPm1fbGFzdE1vZGlmaWVkID0gUURhdGVUaW1lOjpmcm9tU3RyaW5n
KGxhc3RNb2RpZmllZCwgUXQ6OklTT0RhdGUpLnRvTVNlY3NTaW5jZUVwb2NoKCk7Cit9CisKK1FT
dHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5Ojpjb29raWUoKSBjb25zdAoreworICAgIHJldHVybiBt
X25ldHdvcmtSZXBseURhdGEtPm1fY29va2llOworfQorCit2b2lkIFFRdWlja05ldHdvcmtSZXBs
eTo6c2V0Q29va2llKGNvbnN0IFFTdHJpbmcmIGNvb2tpZSkKK3sKKyAgICBtX25ldHdvcmtSZXBs
eURhdGEtPm1fY29va2llID0gY29va2llOworfQorCitRU3RyaW5nIFFRdWlja05ldHdvcmtSZXBs
eTo6dXNlckFnZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5t
X3VzZXJBZ2VudDsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldFVzZXJBZ2VudChj
b25zdCBRU3RyaW5nJiB1c2VyQWdlbnQpCit7CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5tX3Vz
ZXJBZ2VudCA9IHVzZXJBZ2VudDsKK30KKworUVN0cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6OnNl
cnZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9zZXJ2ZXI7
Cit9CisKK3ZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRTZXJ2ZXIoY29uc3QgUVN0cmluZyYg
c2VydmVyKQoreworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9zZXJ2ZXIgPSBzZXJ2ZXI7Cit9
CisKK1FTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5OjpkYXRhKCkgY29uc3QKK3sKKyAgICBpZiAo
bV9uZXR3b3JrUmVwbHlEYXRhLT5tX2RhdGFIYW5kbGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBRU3RyaW5nKCk7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc20gPSBTaGFyZWRNZW1vcnk6
OmNyZWF0ZShtX25ldHdvcmtSZXBseURhdGEtPm1fZGF0YUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpS
ZWFkT25seSk7CisgICAgaWYgKCFzbSkKKyAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKKworICAg
IHVpbnQ2NF90IHN0cmluZ0xlbmd0aCA9IG1fbmV0d29ya1JlcGx5RGF0YS0+bV9jb250ZW50TGVu
Z3RoIC8gc2l6ZW9mKFVDaGFyKTsKKyAgICByZXR1cm4gUVN0cmluZyhyZWludGVycHJldF9jYXN0
PGNvbnN0IFFDaGFyKj4oc20tPmRhdGEoKSksIHN0cmluZ0xlbmd0aCk7Cit9CisKK3ZvaWQgUVF1
aWNrTmV0d29ya1JlcGx5OjpzZXREYXRhKGNvbnN0IFFTdHJpbmcmIGRhdGEpCit7CisgICAgbV9u
ZXR3b3JrUmVwbHlEYXRhLT5tX2NvbnRlbnRMZW5ndGggPSAwOworCisgICAgaWYgKGRhdGEuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCBVQ2hhciogdWNoYXJEYXRhID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KGRhdGEuY29uc3REYXRhKCkpOworICAgIHVpbnQ2
NF90IHNtTGVuZ3RoID0gc2l6ZW9mKFVDaGFyKSpkYXRhLmxlbmd0aCgpOworCisgICAgUmVmUHRy
PFNoYXJlZE1lbW9yeT4gc20gPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShzbUxlbmd0aCk7CisgICAg
aWYgKCFzbSkKKyAgICAgICAgcmV0dXJuOworICAgIG1lbXNldChzbS0+ZGF0YSgpLCAwLCBzbS0+
c2l6ZSgpKTsKKyAgICBtZW1jcHkoc20tPmRhdGEoKSwgdWNoYXJEYXRhLCBzbUxlbmd0aCk7CisK
KyAgICBpZiAoIXNtLT5jcmVhdGVIYW5kbGUobV9uZXR3b3JrUmVwbHlEYXRhLT5tX2RhdGFIYW5k
bGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpKQorICAgICAgICByZXR1cm47CisgICAgbV9uZXR3
b3JrUmVwbHlEYXRhLT5tX2NvbnRlbnRMZW5ndGggPSBzbUxlbmd0aDsKK30KKwordm9pZCBRUXVp
Y2tOZXR3b3JrUmVwbHk6OnNlbmQoKQoreworICAgIFFPYmplY3QqIHNjaGVtZVBhcmVudCA9IHBh
cmVudCgpLT5wYXJlbnQoKTsKKyAgICBpZiAoIXNjaGVtZVBhcmVudCkKKyAgICAgICAgcmV0dXJu
OworICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqIGV4cGVyaW1lbnRhbFdlYlZpZXcgPSBx
b2JqZWN0X2Nhc3Q8UVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCo+KHNjaGVtZVBhcmVudC0+cGFy
ZW50KCkpOworICAgIGlmICghZXhwZXJpbWVudGFsV2ViVmlldykKKyAgICAgICAgcmV0dXJuOwor
ICAgIGV4cGVyaW1lbnRhbFdlYlZpZXctPnNlbmRBcHBsaWNhdGlvblNjaGVtZVJlcGx5KHRoaXMp
OworfQorCitXZWJLaXQ6Ok5ldHdvcmtSZXF1ZXN0RGF0YSogUVF1aWNrTmV0d29ya1JlcGx5Ojpu
ZXR3b3JrUmVxdWVzdERhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtSZXF1ZXN0
RGF0YTsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldE5ldHdvcmtSZXF1ZXN0RGF0
YShXZWJLaXQ6Ok5ldHdvcmtSZXF1ZXN0RGF0YSogZGF0YSkKK3sKKyAgICBtX25ldHdvcmtSZXF1
ZXN0RGF0YSA9IGRhdGE7CisgICAgLy8gV2UgY29weSB0aGUgc2l6ZV90IHZhbHVlIHRoYXQgaWRl
bnRpZmllcyB0aGUgUVF1aWNrTmV0d29ya1JlcGx5CisgICAgLy8gdG8gdGhlIE5ldHdvcmtSZXBs
eURhdGEgc3RydWN0dXJlLiBTbyB3ZSBoYXZlIGl0IGF2YWlsYWJsZSBhcworICAgIC8vIGEgcG9p
bnRlciBpbiB0aGUgV2ViUHJvY2VzcyBhZ2Fpbi4KKyAgICBtX25ldHdvcmtSZXBseURhdGEtPm1f
cmVwbHkgPSBkYXRhLT5tX3JlcGx5OworfQorCitXZWJLaXQ6Ok5ldHdvcmtSZXBseURhdGEqIFFR
dWlja05ldHdvcmtSZXBseTo6bmV0d29ya1JlcGx5RGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbmV0d29ya1JlcGx5RGF0YTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHlfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHlfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjA3YzM0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseV9wLmgKQEAgLTAsMCArMSw3OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5v
cmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaWZuZGVmIHFxdWlja25ldHdvcmtyZXBseV9wX2gKKyNkZWZpbmUgcXF1aWNrbmV0
d29ya3JlcGx5X3BfaAorCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorCisjaW5jbHVkZSA8
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8UXRE
ZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmVsaXN0Lmg+CisjaW5jbHVkZSA8UXRRdWljay9xcXVpY2tp
dGVtLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgTmV0d29ya1JlcXVlc3REYXRhOwor
Y2xhc3MgTmV0d29ya1JlcGx5RGF0YTsKK30KKworY2xhc3MgUVdFQktJVF9FWFBPUlQgUVF1aWNr
TmV0d29ya1JlcGx5IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisgICAgUV9QUk9Q
RVJUWShRU3RyaW5nIGNvbnRlbnRUeXBlIFJFQUQgY29udGVudFR5cGUgV1JJVEUgc2V0Q29udGVu
dFR5cGUpCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIGRhdGEgUkVBRCBkYXRhIFdSSVRFIHNldERh
dGEpCisgICAgUV9FTlVNUyhRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbikKKworcHVi
bGljOgorICAgIFFRdWlja05ldHdvcmtSZXBseShRT2JqZWN0KiBwYXJlbnQgPSAwKTsKKyAgICBR
U3RyaW5nIGNvbnRlbnRUeXBlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250ZW50VHlwZShjb25z
dCBRU3RyaW5nJik7CisgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gb3BlcmF0
aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRPcGVyYXRpb24oUU5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
OjpPcGVyYXRpb24pOworICAgIFFTdHJpbmcgY29udGVudERpc3Bvc2l0aW9uKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRDb250ZW50RGlzcG9zaXRpb24oY29uc3QgUVN0cmluZyYpOworICAgIFFTdHJp
bmcgbG9jYXRpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IFFTdHJpbmcm
KTsKKyAgICBRU3RyaW5nIGxhc3RNb2RpZmllZCgpIGNvbnN0OworICAgIHZvaWQgc2V0TGFzdE1v
ZGlmaWVkKGNvbnN0IFFTdHJpbmcmKTsKKyAgICBRU3RyaW5nIGNvb2tpZSgpIGNvbnN0OworICAg
IHZvaWQgc2V0Q29va2llKGNvbnN0IFFTdHJpbmcmKTsKKyAgICBRU3RyaW5nIHVzZXJBZ2VudCgp
IGNvbnN0OworICAgIHZvaWQgc2V0VXNlckFnZW50KGNvbnN0IFFTdHJpbmcmKTsKKyAgICBRU3Ry
aW5nIHNlcnZlcigpIGNvbnN0OworICAgIHZvaWQgc2V0U2VydmVyKGNvbnN0IFFTdHJpbmcmKTsK
KworICAgIFFTdHJpbmcgZGF0YSgpIGNvbnN0OworICAgIHZvaWQgc2V0RGF0YShjb25zdCBRU3Ry
aW5nJiBkYXRhKTsKKworICAgIFdlYktpdDo6TmV0d29ya1JlcXVlc3REYXRhKiBuZXR3b3JrUmVx
dWVzdERhdGEoKSBjb25zdDsKKyAgICB2b2lkIHNldE5ldHdvcmtSZXF1ZXN0RGF0YShXZWJLaXQ6
Ok5ldHdvcmtSZXF1ZXN0RGF0YSogZGF0YSk7CisgICAgV2ViS2l0OjpOZXR3b3JrUmVwbHlEYXRh
KiBuZXR3b3JrUmVwbHlEYXRhKCkgY29uc3Q7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZvaWQg
c2VuZCgpOworCitwcml2YXRlOgorICAgIFdlYktpdDo6TmV0d29ya1JlcXVlc3REYXRhKiBtX25l
dHdvcmtSZXF1ZXN0RGF0YTsKKyAgICBXZWJLaXQ6Ok5ldHdvcmtSZXBseURhdGEqIG1fbmV0d29y
a1JlcGx5RGF0YTsKK307CisKK1FNTF9ERUNMQVJFX1RZUEUoUVF1aWNrTmV0d29ya1JlcGx5KQor
CisjZW5kaWYgLy8gcXF1aWNrbmV0d29ya3JlcGx5X3BfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0X3AuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcXVlc3RfcC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NTMwN2UKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0X3Au
aApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNz
ZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgcXF1aWNrbmV0d29ya3JlcXVlc3RfcF9o
CisjZGVmaW5lIHFxdWlja25ldHdvcmtyZXF1ZXN0X3BfaAorCisjaW5jbHVkZSAicXdlYmtpdGds
b2JhbC5oIgorI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xZGVj
bGFyYXRpdmVsaXN0Lmg+CisjaW5jbHVkZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+CisKK2NsYXNz
IFFXRUJLSVRfRVhQT1JUIFFRdWlja05ldHdvcmtSZXF1ZXN0IDogcHVibGljIFFPYmplY3Qgewor
ICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHVybCBSRUFEIHVybCkKKworcHVi
bGljOgorICAgIFFRdWlja05ldHdvcmtSZXF1ZXN0KFFPYmplY3QqIHBhcmVudCA9IDApCisgICAg
ICAgIDogUU9iamVjdChwYXJlbnQpIHsgfQorICAgIFFTdHJpbmcgdXJsKCkgY29uc3QgeyByZXR1
cm4gbV91cmw7IH0KKyAgICB2b2lkIHNldFVybChjb25zdCBRU3RyaW5nJiB1cmwpIHsgbV91cmwg
PSB1cmw7IH0KKworcHJpdmF0ZToKKyAgICBRU3RyaW5nIG1fdXJsOworfTsKKworUU1MX0RFQ0xB
UkVfVFlQRShRUXVpY2tOZXR3b3JrUmVxdWVzdCkKKworI2VuZGlmIC8vIHFxdWlja25ldHdvcmty
ZXF1ZXN0X3BfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3VybHNjaGVtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3VybHNjaGVtZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdl
NTVlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrdXJsc2NoZW1lLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJxcXVpY2t1cmxzY2hlbWVfcC5oIgorCitRUXVpY2tVcmxTY2hlbWU6
OlFRdWlja1VybFNjaGVtZShRT2JqZWN0KiBwYXJlbnQpCisgICAgOiBRT2JqZWN0KHBhcmVudCkK
KyAgICAsIG1fcmVxdWVzdChuZXcgUVF1aWNrTmV0d29ya1JlcXVlc3QodGhpcykpCisgICAgLCBt
X3JlcGx5KG5ldyBRUXVpY2tOZXR3b3JrUmVwbHkodGhpcykpCit7IH0KKworUVN0cmluZyBRUXVp
Y2tVcmxTY2hlbWU6OnNjaGVtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NoZW1lOworfQor
Cit2b2lkIFFRdWlja1VybFNjaGVtZTo6c2V0U2NoZW1lKGNvbnN0IFFTdHJpbmcmIHNjaGVtZSkK
K3sKKyAgICBtX3NjaGVtZSA9IHNjaGVtZTsKKyAgICBlbWl0IHNjaGVtZUNoYW5nZWQoKTsKK30K
KworUVF1aWNrTmV0d29ya1JlcXVlc3QqIFFRdWlja1VybFNjaGVtZTo6cmVxdWVzdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcmVxdWVzdDsKK30KKworUVF1aWNrTmV0d29ya1JlcGx5KiBRUXVp
Y2tVcmxTY2hlbWU6OnJlcGx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZXBseTsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t1cmxzY2hl
bWVfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t1cmxzY2hlbWVf
cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhM2VjYmMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVt
ZV9wLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBaZW5vIEFs
Ymlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIHFxdWlja3VybHNjaGVtZV9wX2gK
KyNkZWZpbmUgcXF1aWNrdXJsc2NoZW1lX3BfaAorCisjaW5jbHVkZSAicXF1aWNrbmV0d29ya3Jl
cGx5X3AuaCIKKyNpbmNsdWRlICJxcXVpY2tuZXR3b3JrcmVxdWVzdF9wLmgiCisjaW5jbHVkZSAi
cXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8UXRRdWljay9x
cXVpY2tpdGVtLmg+CisKKworY2xhc3MgUVdFQktJVF9FWFBPUlQgUVF1aWNrVXJsU2NoZW1lIDog
cHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHNj
aGVtZSBSRUFEIHNjaGVtZSBXUklURSBzZXRTY2hlbWUgTk9USUZZIHNjaGVtZUNoYW5nZWQpCisg
ICAgUV9QUk9QRVJUWShRUXVpY2tOZXR3b3JrUmVxdWVzdCogcmVxdWVzdCBSRUFEIHJlcXVlc3Qp
CisgICAgUV9QUk9QRVJUWShRUXVpY2tOZXR3b3JrUmVwbHkqIHJlcGx5IFJFQUQgcmVwbHkpCisK
K3B1YmxpYzoKKyAgICBRUXVpY2tVcmxTY2hlbWUoUU9iamVjdCogcGFyZW50ID0gMCk7CisgICAg
UVN0cmluZyBzY2hlbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldFNjaGVtZShjb25zdCBRU3RyaW5n
JiBzY2hlbWUpOworICAgIFFRdWlja05ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KCkgY29uc3Q7Cisg
ICAgUVF1aWNrTmV0d29ya1JlcGx5KiByZXBseSgpIGNvbnN0OworCitRX1NJR05BTFM6CisgICAg
dm9pZCBzY2hlbWVDaGFuZ2VkKCk7CisgICAgdm9pZCByZWNlaXZlZFJlcXVlc3QoKTsKKworcHJp
dmF0ZToKKyAgICBRU3RyaW5nIG1fc2NoZW1lOworICAgIFFRdWlja05ldHdvcmtSZXF1ZXN0KiBt
X3JlcXVlc3Q7CisgICAgUVF1aWNrTmV0d29ya1JlcGx5KiBtX3JlcGx5OworfTsKKworUU1MX0RF
Q0xBUkVfVFlQRShRUXVpY2tVcmxTY2hlbWUpCisKKyNlbmRpZiAvLyBxcXVpY2t1cmxzY2hlbWVf
cF9oCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
dmlldy5jcHAKaW5kZXggYWE3NDRjMi4uYjE3YzhkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCkBAIC01NTIsNiArNTUyLDcgQEAg
UVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6UVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbChRUXVp
Y2tXZWJWaWV3ICp3ZWJWaWV3KQogICAgIDogUU9iamVjdCh3ZWJWaWV3KQogICAgICwgcV9wdHIo
d2ViVmlldykKICAgICAsIGRfcHRyKHdlYlZpZXctPmRfcHRyLmRhdGEoKSkKKyAgICAsIHNjaGVt
ZVBhcmVudChuZXcgUU9iamVjdCh0aGlzKSkKICAgICAsIG1fdmlld3BvcnRJbmZvKG5ldyBRV2Vi
Vmlld3BvcnRJbmZvKHdlYlZpZXctPmRfcHRyLmRhdGEoKSwgdGhpcykpCiB7CiB9CkBAIC02NTUs
NiArNjU2LDY5IEBAIGJvb2wgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6dXNlVHJhZGl0aW9u
YWxEZXNrdG9wQmVoYXZpb3VyKCkgY29uc3QKICAgICByZXR1cm4gZC0+dXNlVHJhZGl0aW9uYWxE
ZXNrdG9wQmVoYXZpb3VyOwogfQogCitRUXVpY2tVcmxTY2hlbWUqIFFRdWlja1dlYlZpZXdFeHBl
cmltZW50YWw6OnNjaGVtZURlbGVnYXRlc0F0KFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVp
Y2tVcmxTY2hlbWU+KiBwcm9wLCBpbnQgaW5kZXgpCit7CisgICAgY29uc3QgUU9iamVjdExpc3Qg
Y2hpbGRyZW4gPSBwcm9wLT5vYmplY3QtPmNoaWxkcmVuKCk7CisgICAgaWYgKGluZGV4IDwgY2hp
bGRyZW4uY291bnQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFFRdWlja1VybFNjaGVt
ZSo+KGNoaWxkcmVuLmF0KGluZGV4KSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUVF1aWNr
V2ViVmlld0V4cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzQXBwZW5kKFFEZWNsYXJhdGl2ZUxp
c3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWU+KiBwcm9wLCBRUXVpY2tVcmxTY2hlbWUgKnNjaGVt
ZSkKK3sKKyAgICBRT2JqZWN0KiBzY2hlbWVQYXJlbnQgPSBwcm9wLT5vYmplY3Q7CisgICAgc2No
ZW1lLT5zZXRQYXJlbnQoc2NoZW1lUGFyZW50KTsKKyAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVu
dGFsKiB3ZWJWaWV3ID0gcW9iamVjdF9jYXN0PFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqPihw
cm9wLT5vYmplY3QtPnBhcmVudCgpKTsKKyAgICBpZiAoIXdlYlZpZXcpCisgICAgICAgIHJldHVy
bjsKKyAgICBRUXVpY2tXZWJWaWV3UHJpdmF0ZSogZCA9IHdlYlZpZXctPmRfZnVuYygpOworICAg
IGQtPndlYlBhZ2VQcm94eS0+cmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZShzY2hlbWUtPnNjaGVt
ZSgpKTsKK30KKworaW50IFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURlbGVnYXRl
c0NvdW50KFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWU+KiBwcm9wKQor
eworICAgIHJldHVybiBwcm9wLT5vYmplY3QtPmNoaWxkcmVuKCkuY291bnQoKTsKK30KKwordm9p
ZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVEZWxlZ2F0ZXNDbGVhcihRRGVjbGFy
YXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lPiogcHJvcCkKK3sKKyAgICBjb25zdCBR
T2JqZWN0TGlzdCBjaGlsZHJlbiA9IHByb3AtPm9iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICBmb3Ig
KGludCBpbmRleCA9IDA7IGluZGV4IDwgY2hpbGRyZW4uY291bnQoKTsgaW5kZXgrKykgeworICAg
ICAgICBRT2JqZWN0KiBjaGlsZCA9IGNoaWxkcmVuLmF0KGluZGV4KTsKKyAgICAgICAgY2hpbGQt
PnNldFBhcmVudCgwKTsKKyAgICAgICAgZGVsZXRlIGNoaWxkOworICAgIH0KK30KKworUURlY2xh
cmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVtZT4gUVF1aWNrV2ViVmlld0V4cGVyaW1l
bnRhbDo6c2NoZW1lRGVsZWdhdGVzKCkKK3sKKyAgICByZXR1cm4gUURlY2xhcmF0aXZlTGlzdFBy
b3BlcnR5PFFRdWlja1VybFNjaGVtZT4oc2NoZW1lUGFyZW50LCAwLAorICAgICAgICAgICAgUVF1
aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzQXBwZW5kLAorICAgICAgICAg
ICAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzQ291bnQsCisgICAg
ICAgICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVEZWxlZ2F0ZXNBdCwKKyAg
ICAgICAgICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURlbGVnYXRlc0NsZWFy
KTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjppbnZva2VBcHBsaWNhdGlv
blNjaGVtZUhhbmRsZXIoTmV0d29ya1JlcXVlc3REYXRhKiByZXF1ZXN0KQoreworICAgIGNvbnN0
IFFPYmplY3RMaXN0IGNoaWxkcmVuID0gc2NoZW1lUGFyZW50LT5jaGlsZHJlbigpOworICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBjaGlsZHJlbi5jb3VudCgpOyBpbmRleCsrKSB7Cisg
ICAgICAgIFFRdWlja1VybFNjaGVtZSogdXJsU2NoZW1lID0gcW9iamVjdF9jYXN0PFFRdWlja1Vy
bFNjaGVtZSo+KGNoaWxkcmVuLmF0KGluZGV4KSk7CisgICAgICAgIGlmICghdXJsU2NoZW1lKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghdXJsU2NoZW1lLT5zY2hlbWUoKS5j
b21wYXJlKFFTdHJpbmcocmVxdWVzdC0+bV9zY2hlbWUpLCBRdDo6Q2FzZUluc2Vuc2l0aXZlKSkg
eworICAgICAgICAgICAgdXJsU2NoZW1lLT5yZXBseSgpLT5zZXROZXR3b3JrUmVxdWVzdERhdGEo
cmVxdWVzdCk7CisgICAgICAgICAgICBlbWl0IHVybFNjaGVtZS0+cmVjZWl2ZWRSZXF1ZXN0KCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUVF1aWNr
V2ViVmlld0V4cGVyaW1lbnRhbDo6c2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoUVF1aWNrTmV0
d29ya1JlcGx5KiByZXBseSkKK3sKKyAgICBkX3B0ci0+d2ViUGFnZVByb3h5LT5zZW5kQXBwbGlj
YXRpb25TY2hlbWVSZXBseShyZXBseSk7Cit9CisKIHZvaWQgUVF1aWNrV2ViVmlld0V4cGVyaW1l
bnRhbDo6Z29Gb3J3YXJkVG8oaW50IGluZGV4KQogewogICAgIGRfcHRyLT5uYXZpZ2F0aW9uSGlz
dG9yeS0+ZC0+Z29Gb3J3YXJkVG8oaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKaW5kZXggZTQ0ODQzNy4uMjk0OWNhZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3Au
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5o
CkBAIC0yMSw3ICsyMSwxMSBAQAogI2lmbmRlZiBxcXVpY2t3ZWJ2aWV3X3BfaAogI2RlZmluZSBx
cXVpY2t3ZWJ2aWV3X3BfaAogCisjaW5jbHVkZSAicXF1aWNrbmV0d29ya3JlcGx5X3AuaCIKKyNp
bmNsdWRlICJxcXVpY2tuZXR3b3JrcmVxdWVzdF9wLmgiCisjaW5jbHVkZSAicXF1aWNrdXJsc2No
ZW1lX3AuaCIKICNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSA8UXREZWNsYXJh
dGl2ZS9xZGVjbGFyYXRpdmVsaXN0Lmg+CiAjaW5jbHVkZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+
CiAKIGNsYXNzIFFXZWJOYXZpZ2F0aW9uUmVxdWVzdDsKQEAgLTE3NCw2ICsxNzgsNyBAQCBjbGFz
cyBRV0VCS0lUX0VYUE9SVCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsIDogcHVibGljIFFPYmpl
Y3QgewogICAgIFFfUFJPUEVSVFkoUVdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNlcyBSRUFEIHBy
ZWZlcmVuY2VzIENPTlNUQU5UIEZJTkFMKQogICAgIFFfUFJPUEVSVFkoYm9vbCB1c2VUcmFkaXRp
b25hbERlc2t0b3BCZWhhdmlvdXIgUkVBRCB1c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIg
V1JJVEUgc2V0VXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKQogICAgIFFfUFJPUEVSVFko
UVdlYlZpZXdwb3J0SW5mbyogdmlld3BvcnRJbmZvIFJFQUQgdmlld3BvcnRJbmZvIENPTlNUQU5U
IEZJTkFMKQorICAgIFFfUFJPUEVSVFkoUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1Vy
bFNjaGVtZT4gc2NoZW1lRGVsZWdhdGVzIFJFQUQgc2NoZW1lRGVsZWdhdGVzKQogCiBwdWJsaWM6
CiAgICAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbChRUXVpY2tXZWJWaWV3KiB3ZWJWaWV3KTsK
QEAgLTE5NSw2ICsyMDAsMTQgQEAgcHVibGljOgogICAgIFFXZWJOYXZpZ2F0aW9uSGlzdG9yeSog
bmF2aWdhdGlvbkhpc3RvcnkoKSBjb25zdDsKICAgICBRUXVpY2tXZWJQYWdlKiBwYWdlKCk7CiAK
KyAgICBzdGF0aWMgUVF1aWNrVXJsU2NoZW1lKiBzY2hlbWVEZWxlZ2F0ZXNBdChRRGVjbGFyYXRp
dmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lPiosIGludCBpbmRleCk7CisgICAgc3RhdGlj
IHZvaWQgc2NoZW1lRGVsZWdhdGVzQXBwZW5kKFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVp
Y2tVcmxTY2hlbWU+KiwgUVF1aWNrVXJsU2NoZW1lKik7CisgICAgc3RhdGljIGludCBzY2hlbWVE
ZWxlZ2F0ZXNDb3VudChRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lPiop
OworICAgIHN0YXRpYyB2b2lkIHNjaGVtZURlbGVnYXRlc0NsZWFyKFFEZWNsYXJhdGl2ZUxpc3RQ
cm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWU+Kik7CisgICAgUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5
PFFRdWlja1VybFNjaGVtZT4gc2NoZW1lRGVsZWdhdGVzKCk7CisgICAgdm9pZCBpbnZva2VBcHBs
aWNhdGlvblNjaGVtZUhhbmRsZXIoV2ViS2l0OjpOZXR3b3JrUmVxdWVzdERhdGEqKTsKKyAgICB2
b2lkIHNlbmRBcHBsaWNhdGlvblNjaGVtZVJlcGx5KFFRdWlja05ldHdvcmtSZXBseSopOworCiBw
dWJsaWMgUV9TTE9UUzoKICAgICB2b2lkIHNldFVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91
cihib29sIGVuYWJsZSk7CiAgICAgdm9pZCBnb0JhY2tUbyhpbnQgaW5kZXgpOwpAQCAtMjEzLDYg
KzIyNiw3IEBAIFFfU0lHTkFMUzoKIHByaXZhdGU6CiAgICAgUVF1aWNrV2ViVmlldyogcV9wdHI7
CiAgICAgUVF1aWNrV2ViVmlld1ByaXZhdGUqIGRfcHRyOworICAgIFFPYmplY3QqIHNjaGVtZVBh
cmVudDsKICAgICBRV2ViVmlld3BvcnRJbmZvKiBtX3ZpZXdwb3J0SW5mbzsKIAogICAgIGZyaWVu
ZCBjbGFzcyBRdFdlYlBhZ2VVSUNsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAppbmRleCA0N2ZjZDZjLi42YTU2OTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCkBAIC0zNiw2ICszNiw5IEBACiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKICNpbmNsdWRlICJOYXRpdmVXZWJUb3VjaEV2ZW50LmgiCiAjZW5kaWYKKyNpZiBQTEFURk9S
TShRVCkKKyNpbmNsdWRlICJOZXR3b3JrUmVxdWVzdERhdGEuaCIKKyNlbmRpZgogI2luY2x1ZGUg
Ik5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24u
aCIKQEAgLTkyLDYgKzk1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBzdHJ1Y3QgV2lu
ZG93RmVhdHVyZXM7CiB9CiAKKyNpZiBQTEFURk9STShRVCkKK2NsYXNzIFFRdWlja05ldHdvcmtS
ZXBseTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFDKQogI2lmZGVmIF9fT0JKQ19fCiBAY2xh
c3MgV0tWaWV3OwpAQCAtMzAzLDYgKzMxMCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBt
YWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbnRhaW5zSW5h
Y3RpdmVTZWxlY3Rpb247IH0KICAgICB2b2lkIHNldE1haW50YWluc0luYWN0aXZlU2VsZWN0aW9u
KGJvb2wpOworI2lmIFBMQVRGT1JNKFFUKQorICAgIHZvaWQgcmVnaXN0ZXJBcHBsaWNhdGlvblNj
aGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSk7CisgICAgdm9pZCByZXNvbHZlQXBwbGljYXRpb25T
Y2hlbWVSZXF1ZXN0KE5ldHdvcmtSZXF1ZXN0RGF0YSk7CisgICAgdm9pZCBzZW5kQXBwbGljYXRp
b25TY2hlbWVSZXBseShjb25zdCBRUXVpY2tOZXR3b3JrUmVwbHkqKTsKKyNlbmRpZgogCiAjaWYg
UExBVEZPUk0oTUFDKQogICAgIHZvaWQgdXBkYXRlV2luZG93SXNWaXNpYmxlKGJvb2wgd2luZG93
SXNWaXNpYmxlKTsKQEAgLTk3Niw2ICs5ODgsMTAgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgV0tQ
YWdlRGVidWdQYWludEZsYWdzIHNfZGVidWdQYWludEZsYWdzOwogCiAgICAgYm9vbCBtX3Nob3Vs
ZFNlbmRFdmVudHNTeW5jaHJvbm91c2x5OworCisjaWYgUExBVEZPUk0oUVQpCisgICAgUVNldDxO
ZXR3b3JrUmVxdWVzdERhdGEqPiBtX2FwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdHM7CisjZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggNWUzZDY5OC4uOTIzZDI4NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmlu
CkBAIC0xMjMsNiArMTIzLDEwIEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgRGlk
UmVjZWl2ZUNvbnRlbnRMZW5ndGhGb3JSZXNvdXJjZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRf
dCByZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IGNvbnRlbnRMZW5ndGgpCiAgICAgRGlkRmlu
aXNoTG9hZEZvclJlc291cmNlKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHJlc291cmNlSWRl
bnRpZmllcikKICAgICBEaWRGYWlsTG9hZEZvclJlc291cmNlKHVpbnQ2NF90IGZyYW1lSUQsIHVp
bnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvcikK
KyNpZiBQTEFURk9STShRVCkKKyAgICBSZXNvbHZlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KFdl
YktpdDo6TmV0d29ya1JlcXVlc3REYXRhIHJlcXVlc3QpCisjZW5kaWYKKwogCiAgICAgIyBDdXN0
b20gcmVwcmVzZW50YXRpb25zCiAgICAgRGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXBy
ZXNlbnRhdGlvbihXVEY6OlN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSwgQ29yZUlQQzo6RGF0YVJl
ZmVyZW5jZSBkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
UGFnZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50
LmNwcAppbmRleCA0MTUzNTA1Li5iMDgzYjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRQYWdlQ2xpZW50LmNwcApAQCAtMTAwLDYgKzEwMCwxMSBAQCB2b2lkIFF0UGFnZUNs
aWVudDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQogICAg
IFFRdWlja1dlYlZpZXdQcml2YXRlOjpnZXQobV93ZWJWaWV3KS0+aGFuZGxlRG93bmxvYWRSZXF1
ZXN0KGRvd25sb2FkKTsKIH0KIAordm9pZCBRdFBhZ2VDbGllbnQ6OmhhbmRsZUFwcGxpY2F0aW9u
U2NoZW1lUmVxdWVzdChOZXR3b3JrUmVxdWVzdERhdGEqIHJlcXVlc3REYXRhKQoreworICAgIG1f
d2ViVmlldy0+ZXhwZXJpbWVudGFsKCktPmludm9rZUFwcGxpY2F0aW9uU2NoZW1lSGFuZGxlcihy
ZXF1ZXN0RGF0YSk7Cit9CisKIHZvaWQgUXRQYWdlQ2xpZW50OjpzZXRDdXJzb3IoY29uc3QgV2Vi
Q29yZTo6Q3Vyc29yJiBjdXJzb3IpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jh
cnkgZml4IHVudGlsIHdlIGdldCBjdXJzb3Igc3VwcG9ydCBpbiBRTUwgaXRlbXMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmgKaW5kZXggNmU3MjYwMy4uMWRjMDk1
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuaApAQCAtNTMs
NiArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlbGF1bmNoUHJvY2Vzcygp
OwogICAgIHZpcnR1YWwgUGFzc093blB0cjxEcmF3aW5nQXJlYVByb3h5PiBjcmVhdGVEcmF3aW5n
QXJlYVByb3h5KCk7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3du
bG9hZFByb3h5Kik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUFwcGxpY2F0aW9uU2NoZW1lUmVx
dWVzdChOZXR3b3JrUmVxdWVzdERhdGEqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5Vmll
dygpOwogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcAppbmRleCBmOTcx
NGZiLi40N2ZlNmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2Vi
UGFnZVByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJQYWdl
UHJveHlRdC5jcHAKQEAgLTI2LDcgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrUmVwbHlEYXRhLmgiCiAj
aW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIlF0UGFnZUNsaWVudC5oIgorI2luY2x1
ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2lu
Y2x1ZGUgInFxdWlja25ldHdvcmtyZXBseV9wLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBs
ZW1lbnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQ3LDQgKzUyLDI5IEBAIHZvaWQg
V2ViUGFnZVByb3h5Ojpsb2FkUmVjZW50U2VhcmNoZXMoY29uc3QgU3RyaW5nJiwgVmVjdG9yPFN0
cmluZz4mKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5Ojpy
ZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQoreworICAgIHBy
b2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVt
ZShzY2hlbWUpLCBtX3BhZ2VJRCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZXNvbHZlQXBw
bGljYXRpb25TY2hlbWVSZXF1ZXN0KE5ldHdvcmtSZXF1ZXN0RGF0YSByZXF1ZXN0KQoreworICAg
IE5ldHdvcmtSZXF1ZXN0RGF0YSogcmVxdWVzdERhdGEgPSBuZXcgTmV0d29ya1JlcXVlc3REYXRh
KHJlcXVlc3QpOworICAgIG1fYXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0cy5pbnNlcnQocmVxdWVz
dERhdGEpOworICAgIHN0YXRpY19jYXN0PFF0UGFnZUNsaWVudCo+KG1fcGFnZUNsaWVudCktPmhh
bmRsZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdChyZXF1ZXN0RGF0YSk7Cit9CisKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseShjb25zdCBRUXVpY2tOZXR3b3Jr
UmVwbHkqIHJlcGx5KQoreworICAgIFdlYktpdDo6TmV0d29ya1JlcXVlc3REYXRhKiByZXF1ZXN0
RGF0YSA9IHJlcGx5LT5uZXR3b3JrUmVxdWVzdERhdGEoKTsKKyAgICBpZiAobV9hcHBsaWNhdGlv
blNjaGVtZVJlcXVlc3RzLmNvbnRhaW5zKHJlcXVlc3REYXRhKSkgeworICAgICAgICBXZWJLaXQ6
Ok5ldHdvcmtSZXBseURhdGEqIHJlcGx5RGF0YSA9IHJlcGx5LT5uZXR3b3JrUmVwbHlEYXRhKCk7
CisgICAgICAgIGlmICghcmVwbHlEYXRhLT5tX3JlcGx5KQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFwcGxpY2F0aW9uU2No
ZW1lUmVwbHkoKnJlcGx5RGF0YSksIHBhZ2VJRCgpKTsKKyAgICAgICAgbV9hcHBsaWNhdGlvblNj
aGVtZVJlcXVlc3RzLnJlbW92ZShyZXF1ZXN0RGF0YSk7CisgICAgICAgIGRlbGV0ZSByZXF1ZXN0
RGF0YTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmNwcAppbmRleCA0ZGQ1Njk5Li5iOGJkNjkwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50LmNwcApAQCAtNjksNiArNjksMTAgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L1dpZGdldC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93RmVhdHVyZXMuaD4KIAorI2lmIFBM
QVRGT1JNKFFUKQorI2luY2x1ZGUgIlBhZ2VQb2ludGVyV3JhcHBlci5oIgorI2VuZGlmCisKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTE0MzgsNyAr
MTQ0MiwxMSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRDaGFuZ2VTY3JvbGxPZmZz
ZXQoKQogCiBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjpjcmVhdGVOZXR3b3JraW5nQ29udGV4dCgpCiB7Ci0gICAgcmV0dXJuIFdlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQ6OmNyZWF0ZShtX2ZyYW1lLT5jb3JlRnJhbWUoKSk7CisgICAgUmVm
UHRyPFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IGNvbnRleHQgPSBXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0OjpjcmVhdGUobV9mcmFtZS0+Y29yZUZyYW1lKCkpOworI2lmIFBMQVRGT1JNKFFU
KQorICAgIGNvbnRleHQtPnNldE9yaWdpbmF0aW5nT2JqZWN0KG5ldyBQYWdlUG9pbnRlcldyYXBw
ZXIobV9mcmFtZS0+cGFnZSgpKSk7CisjZW5kaWYKKyAgICByZXR1cm4gY29udGV4dC5yZWxlYXNl
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9QYWdlUG9pbnRlcldyYXBwZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9QYWdlUG9pbnRlcldy
YXBwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZjU0MDcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L3F0L1BhZ2VQb2ludGVyV3JhcHBlci5jcHAKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZVBvaW50ZXJXcmFwcGVyLmgiCisKK1BhZ2VQb2lu
dGVyV3JhcHBlcjo6UGFnZVBvaW50ZXJXcmFwcGVyKFdlYktpdDo6V2ViUGFnZSogcGFnZSkKKyAg
ICA6IG1fcGFnZShwYWdlKSB7IH0KKworV2ViS2l0OjpXZWJQYWdlKiBQYWdlUG9pbnRlcldyYXBw
ZXI6OnBhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2U7Cit9CisKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9QYWdlUG9pbnRl
cldyYXBwZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQv
UGFnZVBvaW50ZXJXcmFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
N2FmNDY1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvcXQvUGFnZVBvaW50ZXJXcmFwcGVyLmgKQEAgLTAsMCArMSwzOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIFBhZ2VQb2ludGVyV3JhcHBlcl9oCisjZGVmaW5lIFBhZ2VQb2ludGVyV3JhcHBl
cl9oCisKKyNpbmNsdWRlIDxRT2JqZWN0PgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdl
YlBhZ2U7Cit9OworCitjbGFzcyBQYWdlUG9pbnRlcldyYXBwZXIgOiBwdWJsaWMgUU9iamVjdCB7
CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBQYWdlUG9pbnRlcldyYXBwZXIoV2ViS2l0OjpX
ZWJQYWdlKik7CisgICAgV2ViS2l0OjpXZWJQYWdlKiBwYWdlKCkgY29uc3Q7Citwcml2YXRlOgor
ICAgIFdlYktpdDo6V2ViUGFnZSogbV9wYWdlOworfTsKKworI2VuZGlmIC8vIFBhZ2VQb2ludGVy
V3JhcHBlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNw
cAppbmRleCBhNmYzYWFiLi5iNmRmYTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5jcHAKQEAgLTM4LDYgKzM4LDExIEBAIFBhc3NSZWZQdHI8V2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dD4gV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKEZy
YW1lKiBmCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
KGZyYW1lKSk7CiB9CiAKK3ZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0T3JpZ2lu
YXRpbmdPYmplY3QoUU9iamVjdCogb3JpZ2luKQoreworICAgIG1fb3JpZ2luYXRpbmdPYmplY3Qg
PSBvcmlnaW47Cit9CisKIFFPYmplY3QqIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6Om9yaWdp
bmF0aW5nT2JqZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9vcmlnaW5hdGluZ09iamVjdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQv
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKaW5kZXggMTBjMzQx
YS4uNDI1MTYwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
LmgKQEAgLTI3LDYgKzI3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dCA6IHB1YmxpYyBGcmFtZU5ldHdvcmtpbmdDb250ZXh0IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBjcmVh
dGUoRnJhbWUqKTsKKyAgICB2b2lkIHNldE9yaWdpbmF0aW5nT2JqZWN0KFFPYmplY3QqKTsKIAog
cHJpdmF0ZToKICAgICBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KEZyYW1lKik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBjYjJlOWYzLi5kODI0
Y2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAg
LTYwLDYgKzYwLDEyIEBACiAKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlICJBcmd1bWVudENv
ZGVyc1F0LmgiCisjaW5jbHVkZSAiTmV0d29ya1JlcGx5RGF0YS5oIgorI2luY2x1ZGUgIk5ldHdv
cmtSZXF1ZXN0RGF0YS5oIgorI2luY2x1ZGUgIlF0TmV0d29ya0FjY2Vzc01hbmFnZXIuaCIKKyNp
bmNsdWRlICJRdE5ldHdvcmtSZXBseS5oIgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+CisjaW5j
bHVkZSA8UU5ldHdvcmtSZXF1ZXN0PgogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCkBAIC00
NjIsNiArNDY4LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29udGV4dE1lbnVTaG93aW5nKCkg
eyBtX2lzU2hvd2luZ0NvbnRleHRNZW51ID0gdHJ1ZTsgfQogCisjaWYgUExBVEZPUk0oUVQpCisg
ICAgdm9pZCByZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKTsK
KyAgICB2b2lkIGFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoY29uc3QgTmV0d29ya1JlcGx5RGF0YSYp
OworICAgIHZvaWQgcmVjZWl2ZWRBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QoY29uc3QgUU5ldHdv
cmtSZXF1ZXN0JiwgUXROZXR3b3JrUmVwbHkqKTsKKyNlbmRpZgogICAgIHZvaWQgd2hlZWxFdmVu
dChjb25zdCBXZWJXaGVlbEV2ZW50Jik7CiAKIHByaXZhdGU6CkBAIC03MjEsNiArNzMyLDkgQEAg
cHJpdmF0ZToKICNpZiBQTEFURk9STShXSU4pCiAgICAgYm9vbCBtX2dlc3R1cmVSZWFjaGVkU2Ny
b2xsaW5nTGltaXQ7CiAjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyAgICBIYXNoU2V0PHNpemVf
dD4gbV9hcHBsaWNhdGlvblNjaGVtZVJlcXVlc3RVaWQ7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCAyYWNjZmEwLi42YTU5YjBhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgpAQCAtNjMsNiArNjMsOSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBSZWxvYWQoYm9v
bCByZWxvYWRGcm9tT3JpZ2luKQogICAgIFN0b3BMb2FkaW5nKCkKIAorICAgIEFwcGxpY2F0aW9u
U2NoZW1lUmVwbHkoV2ViS2l0OjpOZXR3b3JrUmVwbHlEYXRhIHJlcGx5KQorICAgIFJlZ2lzdGVy
QXBwbGljYXRpb25TY2hlbWUoV1RGOjpTdHJpbmcgc2NoZW1lKQorCiAgICAgU3RvcExvYWRpbmdG
cmFtZSh1aW50NjRfdCBmcmFtZUlEKQogICAgIAogICAgIFJlc3RvcmVTZXNzaW9uKFdlYktpdDo6
U2Vzc2lvblN0YXRlIHN0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvcXQvV2ViUGFnZVF0LmNwcAppbmRleCBkMjZjMTI2Li44MmRkY2FmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvV2ViUGFnZVF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvV2ViUGFnZVF0LmNwcApAQCAt
MjksNiArMjksOCBAQAogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJX
ZWJFdmVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAi
V2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5o
PgpAQCAtMzAwLDQgKzMwMiwzMSBAQCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gV2ViUGFnZTo6
Y2FjaGVkUmVzcG9uc2VEYXRhRm9yVVJMKGNvbnN0IEtVUkwmKQogICAgIHJldHVybiAwOwogfQog
Cit2b2lkIFdlYlBhZ2U6OnJlZ2lzdGVyQXBwbGljYXRpb25TY2hlbWUoY29uc3QgU3RyaW5nJiBz
Y2hlbWUpCit7CisgICAgUXROZXR3b3JrQWNjZXNzTWFuYWdlciogcW5hbSA9IHFvYmplY3RfY2Fz
dDxRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKj4oV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Fj
Y2Vzc01hbmFnZXIoKSk7CisgICAgaWYgKCFxbmFtKQorICAgICAgICByZXR1cm47CisgICAgcW5h
bS0+cmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZSh0aGlzLCBRU3RyaW5nKHNjaGVtZSkpOworfQor
Cit2b2lkIFdlYlBhZ2U6OnJlY2VpdmVkQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KGNvbnN0IFFO
ZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCwgUXROZXR3b3JrUmVwbHkqIHJlcGx5KQoreworICAgIE5l
dHdvcmtSZXF1ZXN0RGF0YSByZXF1ZXN0RGF0YShyZXF1ZXN0LCByZXBseSk7CisgICAgbV9hcHBs
aWNhdGlvblNjaGVtZVJlcXVlc3RVaWQuYWRkKHJlcXVlc3REYXRhLm1fcmVwbHkpOworICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVzb2x2ZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVz
dChyZXF1ZXN0RGF0YSkpOworfQorCit2b2lkIFdlYlBhZ2U6OmFwcGxpY2F0aW9uU2NoZW1lUmVw
bHkoY29uc3QgTmV0d29ya1JlcGx5RGF0YSYgcmVwbHlEYXRhKQoreworICAgIC8vIFRoaXMgaXMg
b25seSBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoYXQgbm8gbWFsaWNpb3VzIGFkZHJlc3Mgd2FzIGlu
amVjdGVkLgorICAgIGlmICghbV9hcHBsaWNhdGlvblNjaGVtZVJlcXVlc3RVaWQuY29udGFpbnMo
cmVwbHlEYXRhLm1fcmVwbHkpKQorICAgICAgICByZXR1cm47CisgICAgbV9hcHBsaWNhdGlvblNj
aGVtZVJlcXVlc3RVaWQucmVtb3ZlKHJlcGx5RGF0YS5tX3JlcGx5KTsKKworICAgIFF0TmV0d29y
a1JlcGx5KiBuZXR3b3JrUmVwbHkgPSByZWludGVycHJldF9jYXN0PFF0TmV0d29ya1JlcGx5Kj4o
cmVwbHlEYXRhLm1fcmVwbHkpOworICAgIG5ldHdvcmtSZXBseS0+c2V0UmVwbHlEYXRhKHJlcGx5
RGF0YSk7CisgICAgbmV0d29ya1JlcGx5LT5maW5hbGl6ZSgpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3
b3JrQWNjZXNzTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0
d29ya0FjY2Vzc01hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmNlN2Q2MTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0
L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuY3BwCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgWmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXROZXR3b3JrQWNjZXNzTWFuYWdlci5o
IgorCisjaW5jbHVkZSAiUGFnZVBvaW50ZXJXcmFwcGVyLmgiCisjaW5jbHVkZSAiU2hhcmVkTWVt
b3J5LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgorI2luY2x1ZGUg
IldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisKKyNpbmNsdWRlIDxRTmV0d29y
a1JlcGx5PgorI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1F0TmV0d29ya0FjY2Vzc01hbmFnZXI6OlF0TmV0d29ya0FjY2Vzc01hbmFnZXIoV2ViUHJv
Y2Vzcyogd2ViUHJvY2VzcykKKyAgICA6IFFOZXR3b3JrQWNjZXNzTWFuYWdlcigpCisgICAgLCBt
X3dlYlByb2Nlc3Mod2ViUHJvY2VzcykKK3sKK30KKworUXROZXR3b3JrQWNjZXNzTWFuYWdlcjo6
UXROZXR3b3JrQWNjZXNzTWFuYWdlcihRT2JqZWN0ICogcGFyZW50KQorICAgIDogUU5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyKHBhcmVudCkKKyAgICAsIG1fd2ViUHJvY2VzcygwKQoreworfQorCitRTmV0
d29ya1JlcGx5KiBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpjcmVhdGVSZXF1ZXN0KE9wZXJhdGlv
biBvcGVyYXRpb24sIGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmIHJlcXVlc3QsIFFJT0RldmljZSog
b3V0Z29pbmdEYXRhKQoreworICAgIFBhZ2VQb2ludGVyV3JhcHBlciogcGFnZVB0cldyYXBwZXIg
PSBxb2JqZWN0X2Nhc3Q8UGFnZVBvaW50ZXJXcmFwcGVyKj4ocmVxdWVzdC5vcmlnaW5hdGluZ09i
amVjdCgpKTsKKyAgICBpZiAocGFnZVB0cldyYXBwZXIpIHsKKyAgICAgICAgV2ViUGFnZSogd2Vi
UGFnZSA9IHBhZ2VQdHJXcmFwcGVyLT5wYWdlKCk7CisgICAgICAgIGlmIChtX2FwcGxpY2F0aW9u
U2NoZW1lcy5jb250YWlucyh3ZWJQYWdlLCByZXF1ZXN0LnVybCgpLnNjaGVtZSgpLnRvTG93ZXIo
KSkpIHsKKyAgICAgICAgICAgIFF0TmV0d29ya1JlcGx5KiByZXBseSA9IG5ldyBRdE5ldHdvcmtS
ZXBseShyZXF1ZXN0LCB0aGlzKTsKKyAgICAgICAgICAgIHdlYlBhZ2UtPnJlY2VpdmVkQXBwbGlj
YXRpb25TY2hlbWVSZXF1ZXN0KHJlcXVlc3QsIHJlcGx5KTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXBseTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBRTmV0d29ya0FjY2Vzc01hbmFn
ZXI6OmNyZWF0ZVJlcXVlc3Qob3BlcmF0aW9uLCByZXF1ZXN0LCBvdXRnb2luZ0RhdGEpOworfQor
Cit2b2lkIFF0TmV0d29ya0FjY2Vzc01hbmFnZXI6OnJlZ2lzdGVyQXBwbGljYXRpb25TY2hlbWUo
Y29uc3QgV2ViUGFnZSogcGFnZSwgY29uc3QgUVN0cmluZyYgc2NoZW1lKQoreworICAgIG1fYXBw
bGljYXRpb25TY2hlbWVzLmluc2VydChwYWdlLCBzY2hlbWUudG9Mb3dlcigpKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nlc3NN
YW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya0FjY2Vzc01h
bmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGEzZTg0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nl
c3NNYW5hZ2VyLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBa
ZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUXROZXR3
b3JrQWNjZXNzTWFuYWdlcl9oCisjZGVmaW5lIFF0TmV0d29ya0FjY2Vzc01hbmFnZXJfaAorCisj
aW5jbHVkZSA8UU11bHRpSGFzaD4KKyNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+Cisj
aW5jbHVkZSA8UVN0cmluZz4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7
CitjbGFzcyBXZWJQcm9jZXNzOworCitjbGFzcyBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyIDogcHVi
bGljIFFOZXR3b3JrQWNjZXNzTWFuYWdlciB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBR
dE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKFFPYmplY3QgKiBwYXJlbnQgPSAwKTsKKyAgICBRdE5ldHdv
cmtBY2Nlc3NNYW5hZ2VyKFdlYlByb2Nlc3MqKTsKKyAgICB2b2lkIHJlZ2lzdGVyQXBwbGljYXRp
b25TY2hlbWUoY29uc3QgV2ViUGFnZSosIGNvbnN0IFFTdHJpbmcmIHNjaGVtZSk7CisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIFFOZXR3b3JrUmVwbHkqIGNyZWF0ZVJlcXVlc3QoT3BlcmF0aW9u
LCBjb25zdCBRTmV0d29ya1JlcXVlc3QgJiwgUUlPRGV2aWNlKiBvdXRnb2luZ0RhdGEgPSAwKTsK
KworcHJpdmF0ZToKKyAgICBRTXVsdGlIYXNoPGNvbnN0IFdlYlBhZ2UqLCBRU3RyaW5nPiBtX2Fw
cGxpY2F0aW9uU2NoZW1lczsKKyAgICBXZWJQcm9jZXNzKiBtX3dlYlByb2Nlc3M7CisKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUXROZXR3b3JrQWNjZXNzTWFuYWdl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1Jl
cGx5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVwbHkuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNmRmOGEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmNwcApA
QCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBaZW5vIEFsYmlzc2Vy
IDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJRdE5ldHdvcmtSZXBseS5oIgorCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5j
bHVkZSAiV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIK
KyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisKKyNpbmNsdWRlIDxRTmV0d29ya0Nvb2tpZT4KKyNp
bmNsdWRlIDxRTmV0d29ya1JlcGx5PgorI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1F0TmV0d29ya1JlcGx5OjpRdE5ldHdvcmtSZXBseShjb25zdCBR
TmV0d29ya1JlcXVlc3QmIHJlcSwgUXROZXR3b3JrQWNjZXNzTWFuYWdlciogcGFyZW50KQorICAg
IDogUU5ldHdvcmtSZXBseSgoUU9iamVjdCopcGFyZW50KQorICAgICwgbV9ieXRlc0F2YWlsYWJs
ZSgwKQorICAgICwgbV9zaGFyZWRNZW1vcnlTaXplKDApCit7CisgICAgc2V0UmVxdWVzdChyZXEp
OworICAgIHNldE9wZXJhdGlvbihRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkdldE9wZXJhdGlvbik7
CisgICAgc2V0VXJsKHJlcS51cmwoKSk7CisgICAgc2V0T3Blbk1vZGUoUUlPRGV2aWNlOjpSZWFk
T25seSk7CisgICAgc2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudFR5cGVIZWFkZXIs
IFFWYXJpYW50KFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoInRleHQvaHRtbDsgY2hhcnNldD1VVEYt
MTYiKSkpOworfQorCit2b2lkIFF0TmV0d29ya1JlcGx5OjpzZXREYXRhKGNvbnN0IFNoYXJlZE1l
bW9yeTo6SGFuZGxlJiBoYW5kbGUsIHFpbnQ2NCBkYXRhU2l6ZSkKK3sKKyAgICBtX3NoYXJlZE1l
bW9yeSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25s
eSk7CisgICAgaWYgKCFtX3NoYXJlZE1lbW9yeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9i
eXRlc0F2YWlsYWJsZSA9IGRhdGFTaXplOworICAgIG1fc2hhcmVkTWVtb3J5U2l6ZSA9IGRhdGFT
aXplOworfQorCit2b2lkIFF0TmV0d29ya1JlcGx5OjpzZXRSZXBseURhdGEoY29uc3QgTmV0d29y
a1JlcGx5RGF0YSYgcmVwbHlEYXRhKQoreworICAgIGlmIChyZXBseURhdGEubV9vcGVyYXRpb24p
CisgICAgICAgIHNldE9wZXJhdGlvbihyZXBseURhdGEubV9vcGVyYXRpb24pOworICAgIGlmICgh
cmVwbHlEYXRhLm1fY29udGVudERpc3Bvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICBzZXRIZWFk
ZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50RGlzcG9zaXRpb25IZWFkZXIsIFFTdHJpbmcocmVw
bHlEYXRhLm1fY29udGVudERpc3Bvc2l0aW9uKSk7CisgICAgaWYgKCFyZXBseURhdGEubV9jb250
ZW50VHlwZS5pc051bGwoKSkKKyAgICAgICAgc2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29u
dGVudFR5cGVIZWFkZXIsIFFTdHJpbmcocmVwbHlEYXRhLm1fY29udGVudFR5cGUpKTsKKyAgICBp
ZiAoIXJlcGx5RGF0YS5tX2xvY2F0aW9uLmlzTnVsbCgpKQorICAgICAgICBzZXRIZWFkZXIoUU5l
dHdvcmtSZXF1ZXN0OjpMb2NhdGlvbkhlYWRlciwgUVN0cmluZyhyZXBseURhdGEubV9sb2NhdGlv
bikpOworICAgIGlmIChyZXBseURhdGEubV9sYXN0TW9kaWZpZWQpCisgICAgICAgIHNldEhlYWRl
cihRTmV0d29ya1JlcXVlc3Q6Okxhc3RNb2RpZmllZEhlYWRlciwgUURhdGVUaW1lOjpmcm9tTVNl
Y3NTaW5jZUVwb2NoKHJlcGx5RGF0YS5tX2xhc3RNb2RpZmllZCkpOworICAgIGlmICghcmVwbHlE
YXRhLm1fY29va2llLmlzTnVsbCgpKQorICAgICAgICBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0
OjpTZXRDb29raWVIZWFkZXIsIFFWYXJpYW50Ojpmcm9tVmFsdWUoUU5ldHdvcmtDb29raWU6OnBh
cnNlQ29va2llcyhRU3RyaW5nKHJlcGx5RGF0YS5tX2Nvb2tpZSkudG9Bc2NpaSgpKSkpOworICAg
IGlmICghcmVwbHlEYXRhLm1fdXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBzZXRIZWFkZXIo
UU5ldHdvcmtSZXF1ZXN0OjpVc2VyQWdlbnRIZWFkZXIsIFFTdHJpbmcocmVwbHlEYXRhLm1fdXNl
ckFnZW50KSk7CisgICAgaWYgKCFyZXBseURhdGEubV9zZXJ2ZXIuaXNOdWxsKCkpCisgICAgICAg
IHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OlNlcnZlckhlYWRlciwgUVN0cmluZyhyZXBseURh
dGEubV9zZXJ2ZXIpKTsKKyAgICBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50TGVu
Z3RoSGVhZGVyLCBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlcGx5RGF0YS5tX2NvbnRlbnRMZW5ndGgp
KTsKKyAgICBzZXREYXRhKHJlcGx5RGF0YS5tX2RhdGFIYW5kbGUsIHJlcGx5RGF0YS5tX2NvbnRl
bnRMZW5ndGgpOworfQorCitxaW50NjQgUXROZXR3b3JrUmVwbHk6OnJlYWREYXRhKGNoYXIgKmRh
dGEsIHFpbnQ2NCBtYXhsZW4pCit7CisgICAgcWludDY0IGJ5dGVzUmVhZCA9IG1heGxlbiA8IG1f
Ynl0ZXNBdmFpbGFibGUgPyBtYXhsZW4gOiBtX2J5dGVzQXZhaWxhYmxlOworICAgIGlmIChxTWVt
Q29weShkYXRhLCBzdGF0aWNfY2FzdDxjaGFyKj4obV9zaGFyZWRNZW1vcnktPmRhdGEoKSkgKyBt
X3NoYXJlZE1lbW9yeVNpemUgLSBtX2J5dGVzQXZhaWxhYmxlLCBieXRlc1JlYWQpKSB7CisgICAg
ICAgIG1fYnl0ZXNBdmFpbGFibGUgLT0gYnl0ZXNSZWFkOworICAgICAgICByZXR1cm4gYnl0ZXNS
ZWFkOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworcWludDY0IFF0TmV0d29ya1JlcGx5Ojpi
eXRlc0F2YWlsYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYnl0ZXNBdmFpbGFibGUgKyBR
TmV0d29ya1JlcGx5OjpieXRlc0F2YWlsYWJsZSgpOworfQorCit2b2lkIFF0TmV0d29ya1JlcGx5
OjpzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpLbm93bkhlYWRlcnMgaGVhZGVyLCBjb25zdCBR
VmFyaWFudCAmdmFsdWUpCit7CisgICAgUU5ldHdvcmtSZXBseTo6c2V0SGVhZGVyKGhlYWRlciwg
dmFsdWUpOworfQorCit2b2lkIFF0TmV0d29ya1JlcGx5OjphYm9ydCgpIHsgfQordm9pZCBRdE5l
dHdvcmtSZXBseTo6Y2xvc2UoKSB7IH0KK3ZvaWQgUXROZXR3b3JrUmVwbHk6OnNldFJlYWRCdWZm
ZXJTaXplKHFpbnQ2NCBzaXplKSB7IH0KK2Jvb2wgUXROZXR3b3JrUmVwbHk6OmNhblJlYWRMaW5l
ICgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworCit2b2lkIFF0TmV0d29ya1JlcGx5OjpmaW5h
bGl6ZSgpCit7CisgICAgUU5ldHdvcmtSZXBseTo6c2V0RmluaXNoZWQodHJ1ZSk7CisgICAgZW1p
dCByZWFkeVJlYWQoKTsKKyAgICBlbWl0IGZpbmlzaGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0
d29ya1JlcGx5LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlZjRlNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVwbHkuaApA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIg
PHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBRdE5ldHdvcmtSZXBseV9oCisj
ZGVmaW5lIFF0TmV0d29ya1JlcGx5X2gKKworI2luY2x1ZGUgIk5ldHdvcmtSZXBseURhdGEuaCIK
KyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKworI2luY2x1ZGUgPFFCeXRlQXJyYXk+CisjaW5j
bHVkZSA8UURhdGVUaW1lPgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyOworCitjbGFzcyBRdE5ldHdv
cmtSZXBseSA6IHB1YmxpYyBRTmV0d29ya1JlcGx5IHsKK3B1YmxpYzoKKyAgICBRdE5ldHdvcmtS
ZXBseShjb25zdCBRTmV0d29ya1JlcXVlc3QmLCBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBwYXJl
bnQpOworCisgICAgdmlydHVhbCBxaW50NjQgcmVhZERhdGEoY2hhciAqZGF0YSwgcWludDY0IG1h
eGxlbik7CisgICAgdmlydHVhbCBxaW50NjQgYnl0ZXNBdmFpbGFibGUoKSBjb25zdDsKKyAgICB2
b2lkIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6Oktub3duSGVhZGVycywgY29uc3QgUVZhcmlh
bnQgJnZhbHVlKTsKKyAgICB2b2lkIHNldERhdGEoY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUm
LCBxaW50NjQgZGF0YVNpemUpOworICAgIHZvaWQgc2V0UmVwbHlEYXRhKGNvbnN0IE5ldHdvcmtS
ZXBseURhdGEmKTsKKyAgICB2b2lkIGZpbmFsaXplKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgYWJvcnQoKTsKKworICAgIC8vIHJlaW1wbGVtZW50ZWQgZnJvbSBRTmV0d29ya1Jl
cGx5IC8gUUlPRGV2aWNlCisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CisgICAgdmlydHVhbCB2
b2lkIHNldFJlYWRCdWZmZXJTaXplKHFpbnQ2NCk7CisgICAgdmlydHVhbCBib29sIGNhblJlYWRM
aW5lKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgcWludDY0IG1fYnl0ZXNBdmFpbGFibGU7Cisg
ICAgUUJ5dGVBcnJheSBtX2J1ZmZlcjsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBtX3NoYXJl
ZE1lbW9yeTsKKyAgICBxaW50NjQgbV9zaGFyZWRNZW1vcnlTaXplOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBRdE5ldHdvcmtSZXBseV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAKaW5kZXggZDk0OTIwNi4uYTJiZWFj
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNwcApA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKICNpbmNsdWRl
ICJRdEJ1aWx0aW5CdW5kbGUuaCIKKyNpbmNsdWRlICJRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmgi
CiAjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oIgogCkBAIC02Nyw3ICs2OCw3IEBAIHN0YXRpYyB2b2lkIHBhcmVudFBy
b2Nlc3NEaWVkQ2FsbGJhY2sodm9pZCopCiAKIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplV2ViUHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJh
bWV0ZXJzLCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKIHsKLSAgICBtX25l
dHdvcmtBY2Nlc3NNYW5hZ2VyID0gbmV3IFFOZXR3b3JrQWNjZXNzTWFuYWdlcjsKKyAgICBtX25l
dHdvcmtBY2Nlc3NNYW5hZ2VyID0gbmV3IFF0TmV0d29ya0FjY2Vzc01hbmFnZXIodGhpcyk7CiAg
ICAgQVNTRVJUKCFwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpICYm
ICFwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpOwogICAgIFdlYkNv
cmU6OlNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBXZWJDb3JlOjpTaGFyZWRDb29raWVKYXJRdDo6
Y3JlYXRlKHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeSk7CiAgICAgbV9uZXR3b3Jr
QWNjZXNzTWFuYWdlci0+c2V0Q29va2llSmFyKGphcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvcXR3
ZWJraXQtZXhwb3J0Lm1hcCBiL1NvdXJjZS9xdHdlYmtpdC1leHBvcnQubWFwCmluZGV4IDgzMjA1
YzguLmU5MGM4YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9xdHdlYmtpdC1leHBvcnQubWFwCisrKyBi
L1NvdXJjZS9xdHdlYmtpdC1leHBvcnQubWFwCkBAIC0xNDIsNiArMTQyLDEyIEBAIHF3a18xLjAg
ewogICAgICAgICAqUVdlYk5hdmlnYXRpb25SZXF1ZXN0OwogICAgICAgICBub24tdmlydHVhbD90
aHVuaz90bz9RV2ViTmF2aWdhdGlvblJlcXVlc3QqOwogICAgICAgICBRV2ViTmF2aWdhdGlvblJl
cXVlc3Q6Oio7CisgICAgICAgICpRUXVpY2tVcmxTY2hlbWU7CisgICAgICAgIFFRdWlja1VybFNj
aGVtZTo6KjsKKyAgICAgICAgKlFRdWlja05ldHdvcmtSZXF1ZXN0OworICAgICAgICBRUXVpY2tO
ZXR3b3JrUmVxdWVzdDo6KjsKKyAgICAgICAgKlFRdWlja05ldHdvcmtSZXBseTsKKyAgICAgICAg
UVF1aWNrTmV0d29ya1JlcGx5OjoqOwogCiAKICAgICAgICAgIyBXZWJLaXQgMiBDIEFQSSBtYW5n
bGVkIGluIEMrKwo=
</data>
<flag name="review"
          id="120192"
          type_id="1"
          status="-"
          setter="zeno"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120308</attachid>
            <date>2011-12-22 05:02:16 -0800</date>
            <delta_ts>2011-12-23 02:28:14 -0800</delta_ts>
            <desc>patch for review. - fixed previously issues as commented.</desc>
            <filename>74931_20111222-140100.patch</filename>
            <type>text/plain</type>
            <size>67122</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAwNzhkMGY2Li5iNzVkZTM0
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTEtMTItMjAgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
W1F0XVtXSzJdIEltcGxlbWVudCBjdXN0b20gVVJMIHNjaGVtZXMgZGVmaW5lZCBpbiBRTUwuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkzMQorCisg
ICAgICAgIEFkZCBuZXcgY2xhc3NlcyB0byB0aGUgZXhwb3J0IG1hcC4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9xdHdlYmtpdC1leHBv
cnQubWFwOgorCiAyMDExLTEyLTIwICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBlbWFjczogdW5yZXZpZXdlZC4gYWRkIHNldHRpbmdzIGZvciBlZGl0
aW5nIGpzIGZpbGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAyOTI4YmNkLi5mOGRiNmRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTEyLTIwICBaZW5vIEFsYmlzc2VyICA8emVu
b0B3ZWJraXQub3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQgY3VzdG9tIFVSTCBz
Y2hlbWVzIGRlZmluZWQgaW4gUU1MLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzQ5MzEKKworICAgICAgICBNYWtlIGNsYXNzZXMgUVF1aWNrVXJsU2No
ZW1lRGVsZWdhdGUsIFFRdWlja05ldHdvcmtSZXF1ZXN0CisgICAgICAgIGFuZCBRUXVpY2tOZXR3
b3JrUmVwbHkgYWNjZXNzaWJsZSBmcm9tIFFNTC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGRlY2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVnaW4u
Y3BwOgorCiAyMDExLTEyLTIwICBSYWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3Nz
YS5vcmc+CiAKICAgICAgICAgW1F0XSBFeHRlbmQgUVF1aWNrV2Vidmlldzo6bmF2aWdhdGlvblJl
cXVlc3RlZCBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhw
ZXJpbWVudGFsL3BsdWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVy
aW1lbnRhbC9wbHVnaW4uY3BwCmluZGV4IGQyODkyMjkuLjIyNWY2YjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVudGFsL3BsdWdpbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9leHBlcmltZW50YWwvcGx1Z2luLmNwcApAQCAt
NTIsNiArNTIsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgUU9iamVjdDo6dHIoIkNhbm5vdCBj
cmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgV2ViVmlld0V4cGVyaW1lbnRhbCIpKTsKICAgICAg
ICAgcW1sUmVnaXN0ZXJVbmNyZWF0YWJsZVR5cGU8UVdlYlZpZXdwb3J0SW5mbz4odXJpLCAzLCAw
LCAiUVdlYlZpZXdwb3J0SW5mbyIsCiAgICAgICAgICAgICBRT2JqZWN0Ojp0cigiQ2Fubm90IGNy
ZWF0ZSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiBRV2ViVmlld3BvcnRJbmZvIikpOworICAgICAgICBx
bWxSZWdpc3RlclR5cGU8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+KHVyaSwgMywgMCwgIlVybFNj
aGVtZURlbGVnYXRlIik7CisgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVUeXBlPFFRdWlj
a05ldHdvcmtSZXF1ZXN0Pih1cmksIDMsIDAsICJOZXR3b3JrUmVxdWVzdCIsCisgICAgICAgICAg
ICBRT2JqZWN0Ojp0cigiTmV0d29ya1JlcXVlc3Qgc2hvdWxkIG5vdCBiZSBjcmVhdGVkIGZyb20g
UU1MIikpOworICAgICAgICBxbWxSZWdpc3RlclVuY3JlYXRhYmxlVHlwZTxRUXVpY2tOZXR3b3Jr
UmVwbHk+KHVyaSwgMywgMCwgIk5ldHdvcmtSZXBseSIsCisgICAgICAgICAgICBRT2JqZWN0Ojp0
cigiTmV0d29ya1JlcGx5IHNob3VsZCBub3QgYmUgY3JlYXRlZCBmcm9tIFFNTCIpKTsKICAgICB9
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggNTAzMTBlNy4uYjUzYzg0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDExNSBAQAorMjAxMS0xMi0yMiAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4K
KworICAgICAgICBbUXRdW1dLMl0gSW1wbGVtZW50IGN1c3RvbSBVUkwgc2NoZW1lcyBkZWZpbmVk
IGluIFFNTC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc0OTMxCisKKyAgICAgICAgQWxsb3cgY3JlYXRpb24gb2YgY3VzdG9tIFVybFNjaGVtZURlbGVn
YXRlcyBmcm9tIFFNTC4KKyAgICAgICAgQSBVcmxTY2hlbWVEZWxlZ2F0ZSBjb250YWlucyBhIGhh
bmRsZXIgc2lnbmFsIHRoYXQgaXMgdHJpZ2dlcmVkCisgICAgICAgIHdoZW4gYSB1cmwgbWF0Y2hp
bmcgdGhlIGRlZmluZWQgc2NoZW1lIGlzIHJlcXVlc3RlZC4KKyAgICAgICAgVG8gYWxsb3cgZm9y
IHRoaXMgYSBkZXJpdmF0aW9uIG9mIFFOZXR3b3JrQWNjZXNzTWFuYWdlcgorICAgICAgICBpcyBu
ZWNlc3NhcnkuCisgICAgICAgIFRoZSByZXF1ZXN0IGlzIHRoZW4gaGFuZGxlZCBpbiBRTUwvSlMg
YW5kIGEgcmVwbHkKKyAgICAgICAgaXMgc2VudCBiYWNrIGZyb20gdGhlIFVJUHJvY2VzcyB0byB0
aGUgV2ViUHJvY2Vzcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFNoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5RGF0YTo6UXROZXR3b3JrUmVwbHlEYXRhKToKKyAgICAg
ICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpRdE5ldHdvcmtSZXBseURhdGE6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL3F0L1F0TmV0
d29ya1JlcXVlc3REYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXF1
ZXN0RGF0YTo6UXROZXR3b3JrUmVxdWVzdERhdGEpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdv
cmtSZXF1ZXN0RGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVxdWVz
dERhdGE6OmRlY29kZSk6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHA6IEFkZGVkLgorICAgICAgICAoUVF1aWNr
TmV0d29ya1JlcGx5OjpRUXVpY2tOZXR3b3JrUmVwbHkpOgorICAgICAgICAoUVF1aWNrTmV0d29y
a1JlcGx5Ojpjb250ZW50VHlwZSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldENv
bnRlbnRUeXBlKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6b3BlcmF0aW9uKToKKyAg
ICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0T3BlcmF0aW9uKToKKyAgICAgICAgKFFRdWlj
a05ldHdvcmtSZXBseTo6Y29udGVudERpc3Bvc2l0aW9uKToKKyAgICAgICAgKFFRdWlja05ldHdv
cmtSZXBseTo6c2V0Q29udGVudERpc3Bvc2l0aW9uKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtS
ZXBseTo6bG9jYXRpb24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRMb2NhdGlv
bik6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6Omxhc3RNb2RpZmllZCk6CisgICAgICAg
IChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldExhc3RNb2RpZmllZCk6CisgICAgICAgIChRUXVpY2tO
ZXR3b3JrUmVwbHk6OmNvb2tpZSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldENv
b2tpZSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnVzZXJBZ2VudCk6CisgICAgICAg
IChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldFVzZXJBZ2VudCk6CisgICAgICAgIChRUXVpY2tOZXR3
b3JrUmVwbHk6OnNlcnZlcik6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldFNlcnZl
cik6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OmRhdGEpOgorICAgICAgICAoUVF1aWNr
TmV0d29ya1JlcGx5OjpzZXREYXRhKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2Vu
ZCk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6Om5ldHdvcmtSZXF1ZXN0RGF0YSk6Cisg
ICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldE5ldHdvcmtSZXF1ZXN0RGF0YSk6CisgICAg
ICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6Om5ldHdvcmtSZXBseURhdGEpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5X3AuaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVxdWVzdF9wLmg6IEFkZGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFFRdWlja1VybFNjaGVtZURlbGVnYXRlOjpRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0
ZSk6CisgICAgICAgIChRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZTo6c2NoZW1lKToKKyAgICAgICAg
KFFRdWlja1VybFNjaGVtZURlbGVnYXRlOjpzZXRTY2hlbWUpOgorICAgICAgICAoUVF1aWNrVXJs
U2NoZW1lRGVsZWdhdGU6OnJlcXVlc3QpOgorICAgICAgICAoUVF1aWNrVXJsU2NoZW1lRGVsZWdh
dGU6OnJlcGx5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRl
bGVnYXRlX3AuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3LmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OlFRdWlja1dlYlZp
ZXdFeHBlcmltZW50YWwpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2No
ZW1lRGVsZWdhdGVzQXQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2No
ZW1lRGVsZWdhdGVzQXBwZW5kKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6
OnNjaGVtZURlbGVnYXRlc0NvdW50KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50
YWw6OnNjaGVtZURlbGVnYXRlc0NsZWFyKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmlt
ZW50YWw6OnNjaGVtZURlbGVnYXRlcyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVu
dGFsOjppbnZva2VBcHBsaWNhdGlvblNjaGVtZUhhbmRsZXIpOgorICAgICAgICAoUVF1aWNrV2Vi
Vmlld0V4cGVyaW1lbnRhbDo6c2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5jcHA6CisgICAgICAg
IChRdFBhZ2VDbGllbnQ6OmhhbmRsZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdCk6CisgICAgICAg
ICogVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9X
ZWJQYWdlUHJveHlRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVnaXN0
ZXJBcHBsaWNhdGlvblNjaGVtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVz
b2x2ZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6c2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlTmV0d29ya2luZ0NvbnRleHQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvUGFnZVBvaW50ZXJXcmFwcGVyLmNwcDog
QWRkZWQuCisgICAgICAgIChQYWdlUG9pbnRlcldyYXBwZXI6OlBhZ2VQb2ludGVyV3JhcHBlcik6
CisgICAgICAgIChQYWdlUG9pbnRlcldyYXBwZXI6OnBhZ2UpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvcXQvUGFnZVBvaW50ZXJXcmFwcGVyLmg6IEFkZGVkLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRP
cmlnaW5hdGluZ09iamVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9x
dC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvcXQvV2ViUGFnZVF0LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlY2VpdmVkQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YXBwbGljYXRpb25TY2hlbWVSZXBseSk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya0FjY2Vzc01hbmFnZXI6OlF0TmV0d29ya0FjY2Vz
c01hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpjcmVh
dGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrQWNjZXNzTWFuYWdlcjo6cmVn
aXN0ZXJBcHBsaWNhdGlvblNjaGVtZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9RdE5ldHdv
cmtBY2Nlc3NNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvcXQvUXROZXR3
b3JrUmVwbHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OlF0
TmV0d29ya1JlcGx5KToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OnNldERhdGEp
OgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6c2V0UmVwbHlEYXRhKToKKyAgICAg
ICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OnJlYWREYXRhKToKKyAgICAgICAgKFdlYktpdDo6
UXROZXR3b3JrUmVwbHk6OmJ5dGVzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3
b3JrUmVwbHk6OnNldEhlYWRlcik6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5Ojph
Ym9ydCk6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5OjpjbG9zZSk6CisgICAgICAg
IChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5OjpzZXRSZWFkQnVmZmVyU2l6ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlF0TmV0d29ya1JlcGx5OjpjYW5SZWFkTGluZSk6CisgICAgICAgIChXZWJLaXQ6OlF0
TmV0d29ya1JlcGx5OjpmaW5hbGl6ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9RdE5ldHdv
cmtSZXBseS5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlBy
b2Nlc3MpOgorCiAyMDExLTEyLTIwICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5v
a2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dLMl0gUmVtb3ZlIHN0YXR1c0Jhck1lc3NhZ2VDaGFu
Z2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlE
YXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRhLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzYWM0MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEuaApAQCAtMCww
ICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5v
QHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUXROZXR3b3JrUmVwbHlEYXRhX2gKKyNk
ZWZpbmUgUXROZXR3b3JrUmVwbHlEYXRhX2gKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzUXQu
aCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm9uY29weWFibGUuaCIKKyNpbmNsdWRl
ICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNp
bmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+CisjaW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
Kworc3RydWN0IFF0TmV0d29ya1JlcGx5RGF0YSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
UXROZXR3b3JrUmVwbHlEYXRhKTsKK3B1YmxpYzoKKyAgICBRdE5ldHdvcmtSZXBseURhdGEoKQor
ICAgICAgICA6IG1fY29udGVudExlbmd0aCgwKQorICAgICAgICAsIG1fbGFzdE1vZGlmaWVkKDAp
CisgICAgeyB9CisKKyAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVu
Y29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBlbmNvZGVyLT5lbmNvZGUobV91cmxTdHJpbmcp
OworICAgICAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKG1fb3BlcmF0aW9uKTsKKyAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlKG1fY29udGVudERpc3Bvc2l0aW9uKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5j
b2RlKG1fY29udGVudFR5cGUpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGVVSW50NjQobV9jb250
ZW50TGVuZ3RoKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKG1fbG9jYXRpb24pOworICAgICAg
ICBlbmNvZGVyLT5lbmNvZGVVSW50NjQobV9sYXN0TW9kaWZpZWQpOworICAgICAgICBlbmNvZGVy
LT5lbmNvZGUobV9jb29raWUpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGUobV91c2VyQWdlbnQp
OworICAgICAgICBlbmNvZGVyLT5lbmNvZGUobV9zZXJ2ZXIpOworICAgICAgICBlbmNvZGVyLT5l
bmNvZGUobV9yZXBseVV1aWQpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGUobV9kYXRhSGFuZGxl
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiBkZWNvZGVyLCBRdE5ldHdvcmtSZXBseURhdGEmIGRlc3RpbmF0aW9uKQorICAgIHsKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV91cmxTdHJpbmcpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZUVudW0o
ZGVzdGluYXRpb24ubV9vcGVyYXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpZiAoIWRlY29kZXItPmRlY29kZShkZXN0aW5hdGlvbi5tX2NvbnRlbnREaXNwb3NpdGlv
bikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVj
b2RlKGRlc3RpbmF0aW9uLm1fY29udGVudFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQ2NChkZXN0aW5hdGlvbi5tX2NvbnRl
bnRMZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShkZXN0aW5hdGlvbi5tX2xvY2F0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50NjQoZGVzdGluYXRpb24ubV9s
YXN0TW9kaWZpZWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRl
Y29kZXItPmRlY29kZShkZXN0aW5hdGlvbi5tX2Nvb2tpZSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fdXNlckFn
ZW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoZGVzdGluYXRpb24ubV9zZXJ2ZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShkZXN0aW5hdGlvbi5tX3JlcGx5VXVpZCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRl
c3RpbmF0aW9uLm1fZGF0YUhhbmRsZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFdURjo6U3RyaW5nIG1fdXJsU3RyaW5nOwor
CisgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gbV9vcGVyYXRpb247CisgICAg
V1RGOjpTdHJpbmcgbV9jb250ZW50RGlzcG9zaXRpb247CisgICAgV1RGOjpTdHJpbmcgbV9jb250
ZW50VHlwZTsKKyAgICB1aW50NjRfdCBtX2NvbnRlbnRMZW5ndGg7CisgICAgV1RGOjpTdHJpbmcg
bV9sb2NhdGlvbjsKKyAgICB1aW50NjRfdCBtX2xhc3RNb2RpZmllZDsKKyAgICBXVEY6OlN0cmlu
ZyBtX2Nvb2tpZTsKKyAgICBXVEY6OlN0cmluZyBtX3VzZXJBZ2VudDsKKyAgICBXVEY6OlN0cmlu
ZyBtX3NlcnZlcjsKKyAgICBTdHJpbmcgbV9yZXBseVV1aWQ7CisKKyAgICBTaGFyZWRNZW1vcnk6
OkhhbmRsZSBtX2RhdGFIYW5kbGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFF0TmV0d29ya1JlcGx5RGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9x
dC9RdE5ldHdvcmtSZXF1ZXN0RGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjc4YzNkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQv
UXROZXR3b3JrUmVxdWVzdERhdGEuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBseXJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFF0TmV0d29ya1JlcXVlc3REYXRhX2gKKyNkZWZpbmUgUXROZXR3b3JrUmVxdWVzdERh
dGFfaAorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNRdC5oIgorI2luY2x1ZGUgIktVUkwuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybS5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5o
IgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+CisjaW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0Pgor
I2luY2x1ZGUgPFFVdWlkPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFF0TmV0d29ya1JlcXVlc3REYXRhIHsKKyAgICBRdE5l
dHdvcmtSZXF1ZXN0RGF0YSgpCisgICAgeyB9CisKKyAgICBRdE5ldHdvcmtSZXF1ZXN0RGF0YShj
b25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3QsIFFOZXR3b3JrUmVwbHkqIHJlcGx5KQorICAg
IHsKKyAgICAgICAgbV9zY2hlbWUgPSByZXF1ZXN0LnVybCgpLnNjaGVtZSgpOworICAgICAgICBt
X3VybFN0cmluZyA9IHJlcXVlc3QudXJsKCkudG9TdHJpbmcoKTsKKyAgICAgICAgbV9yZXBseVV1
aWQgPSBRVXVpZDo6Y3JlYXRlVXVpZCgpLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgdm9pZCBl
bmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlKG1fc2NoZW1lKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2Rl
KG1fdXJsU3RyaW5nKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKG1fcmVwbHlVdWlkKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBRdE5ldHdvcmtSZXF1ZXN0RGF0YSYgZGVzdGluYXRpb24pCisgICAgeworICAgICAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShkZXN0aW5hdGlvbi5tX3NjaGVtZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9u
Lm1fdXJsU3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9yZXBseVV1aWQpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBTdHJpbmcgbV9z
Y2hlbWU7CisgICAgU3RyaW5nIG1fdXJsU3RyaW5nOworICAgIFN0cmluZyBtX3JlcGx5VXVpZDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUXROZXR3b3JrUmVxdWVz
dERhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9X
ZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggMmE0ZmU3NS4uNWJhMmI2OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBA
IC0xMzIsNiArMTMyLDggQEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVkL3F0L0FyZ3VtZW50Q29k
ZXJzUXQuaCBcCiAgICAgU2hhcmVkL3F0L1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmggXAogICAg
IFNoYXJlZC9xdC9XZWJFdmVudEZhY3RvcnlRdC5oIFwKKyAgICBTaGFyZWQvcXQvUXROZXR3b3Jr
UmVwbHlEYXRhLmggXAorICAgIFNoYXJlZC9xdC9RdE5ldHdvcmtSZXF1ZXN0RGF0YS5oIFwKICAg
ICBVSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmggXAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggXAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS0F1dGhlbnRp
Y2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oIFwKQEAgLTE4Myw2ICsxODUsOSBAQCBIRUFERVJTICs9
IFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJuYXZpZ2F0aW9uaGlzdG9yeV9wX3AuaCBcCiAg
ICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBcCiAgICAgVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oIFwKKyAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja25l
dHdvcmtyZXBseV9wLmggXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcXVl
c3RfcC5oIFwKKyAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlX3Au
aCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2Vidmlld3BvcnRpbmZvX3AuaCBcCiAgICAgVUlQ
cm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCBcCiAg
ICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5l
ci5oIFwKQEAgLTM0Myw2ICszNDgsNyBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYlNlYXJjaFBvcHVwTWVudS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCBcCisgICAgV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9xdC9QYWdlUG9pbnRlcldyYXBwZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwu
aCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oIFwKQEAgLTM1OCw3
ICszNjQsMTAgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb25uZWN0aW9uVG9V
SVByb2Nlc3MuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmggXAogICAgIFdlYlByb2Nl
c3MvcXQvUXRCdWlsdGluQnVuZGxlLmggXAotICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVu
ZGxlUGFnZS5oCisgICAgV2ViUHJvY2Vzcy9xdC9RdEJ1aWx0aW5CdW5kbGVQYWdlLmggXAorICAg
IFdlYlByb2Nlc3MvcXQvUXROZXR3b3JrQWNjZXNzTWFuYWdlci5oIFwKKyAgICBXZWJQcm9jZXNz
L3F0L1F0TmV0d29ya1JlcGx5LmggXAorICAgIFdlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVxdWVz
dC5oCiAKIFNPVVJDRVMgKz0gXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMu
Y3BwIFwKQEAgLTUwNCw2ICs1MTMsOCBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJuYXZpZ2F0aW9uaGlzdG9yeS5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlldy5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFnZXByb3Zp
ZGVyLmNwcCBcCisgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHkuY3BwIFwK
KyAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlLmNwcCBcCiAgICAg
VUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXMuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJ2aWV3cG9ydGluZm8uY3BwIFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24v
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5jcHAgXApAQCAtNjg3LDYgKzY5OCw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRXJyb3JzUXQu
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkRyYWdDbGllbnRRdC5j
cHAgXAogICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dC5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvUGFnZVBvaW50
ZXJXcmFwcGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJQb3B1
cE1lbnVRdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EZWNvZGVyQWRhcHRlci5jcHAg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAgXApAQCAtNzEzLDYgKzcy
NSw4IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgXAogICAg
IFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9xdC9R
dEJ1aWx0aW5CdW5kbGVQYWdlLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nl
c3NNYW5hZ2VyLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5jcHAgXAog
ICAgIFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAgXAogICAgIFdlYlByb2Nlc3Mv
cXQvV2ViUHJvY2Vzc1F0LmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOWViNTUwZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5LmNwcApAQCAtMCwwICsxLDE3NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicXF1aWNrbmV0d29ya3JlcGx5X3Au
aCIKKworI2luY2x1ZGUgIlF0TmV0d29ya1JlcGx5RGF0YS5oIgorI2luY2x1ZGUgIlF0TmV0d29y
a1JlcXVlc3REYXRhLmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCisjaW5jbHVkZSAi
cXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFFEYXRlVGltZT4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKKworUVF1aWNrTmV0d29ya1JlcGx5OjpRUXVpY2tOZXR3b3JrUmVwbHkoUU9iamVj
dCogcGFyZW50KQorICAgIDogUU9iamVjdChwYXJlbnQpCisgICAgLCBtX25ldHdvcmtSZXF1ZXN0
RGF0YSgwKQorICAgICwgbV9uZXR3b3JrUmVwbHlEYXRhKG5ldyBXZWJLaXQ6OlF0TmV0d29ya1Jl
cGx5RGF0YSkgeyB9CisKK1FTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5Ojpjb250ZW50VHlwZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9jb250ZW50VHlwZTsK
K30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldENvbnRlbnRUeXBlKGNvbnN0IFFTdHJp
bmcmIGNvbnRlbnRUeXBlKQoreworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9jb250ZW50VHlw
ZSA9IGNvbnRlbnRUeXBlOworfQorCitRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBR
UXVpY2tOZXR3b3JrUmVwbHk6Om9wZXJhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0
d29ya1JlcGx5RGF0YS0+bV9vcGVyYXRpb247Cit9CisKK3ZvaWQgUVF1aWNrTmV0d29ya1JlcGx5
OjpzZXRPcGVyYXRpb24oUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gb3BlcmF0aW9u
KQoreworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9vcGVyYXRpb24gPSBvcGVyYXRpb247Cit9
CisKK1FTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5Ojpjb250ZW50RGlzcG9zaXRpb24oKSBjb25z
dAoreworICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPm1fY29udGVudERpc3Bvc2l0aW9u
OworfQorCit2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29udGVudERpc3Bvc2l0aW9uKGNv
bnN0IFFTdHJpbmcmIGRpc3Bvc2l0aW9uKQoreworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9j
b250ZW50RGlzcG9zaXRpb24gPSBkaXNwb3NpdGlvbjsKK30KKworUVN0cmluZyBRUXVpY2tOZXR3
b3JrUmVwbHk6OmxvY2F0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlE
YXRhLT5tX2xvY2F0aW9uOworfQorCit2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0TG9jYXRp
b24oY29uc3QgUVN0cmluZyYgbG9jYXRpb24pCit7CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5t
X2xvY2F0aW9uID0gbG9jYXRpb247Cit9CisKK1FTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5Ojps
YXN0TW9kaWZpZWQoKSBjb25zdAoreworICAgIHJldHVybiBRRGF0ZVRpbWU6OmZyb21NU2Vjc1Np
bmNlRXBvY2gobV9uZXR3b3JrUmVwbHlEYXRhLT5tX2xhc3RNb2RpZmllZCkudG9TdHJpbmcoUXQ6
OklTT0RhdGUpOworfQorCit2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0TGFzdE1vZGlmaWVk
KGNvbnN0IFFTdHJpbmcmIGxhc3RNb2RpZmllZCkKK3sKKyAgICBtX25ldHdvcmtSZXBseURhdGEt
Pm1fbGFzdE1vZGlmaWVkID0gUURhdGVUaW1lOjpmcm9tU3RyaW5nKGxhc3RNb2RpZmllZCwgUXQ6
OklTT0RhdGUpLnRvTVNlY3NTaW5jZUVwb2NoKCk7Cit9CisKK1FTdHJpbmcgUVF1aWNrTmV0d29y
a1JlcGx5Ojpjb29raWUoKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEt
Pm1fY29va2llOworfQorCit2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29va2llKGNvbnN0
IFFTdHJpbmcmIGNvb2tpZSkKK3sKKyAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fY29va2llID0g
Y29va2llOworfQorCitRU3RyaW5nIFFRdWlja05ldHdvcmtSZXBseTo6dXNlckFnZW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5tX3VzZXJBZ2VudDsKK30KKwor
dm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldFVzZXJBZ2VudChjb25zdCBRU3RyaW5nJiB1c2Vy
QWdlbnQpCit7CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5tX3VzZXJBZ2VudCA9IHVzZXJBZ2Vu
dDsKK30KKworUVN0cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6OnNlcnZlcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9zZXJ2ZXI7Cit9CisKK3ZvaWQgUVF1aWNr
TmV0d29ya1JlcGx5OjpzZXRTZXJ2ZXIoY29uc3QgUVN0cmluZyYgc2VydmVyKQoreworICAgIG1f
bmV0d29ya1JlcGx5RGF0YS0+bV9zZXJ2ZXIgPSBzZXJ2ZXI7Cit9CisKK1FTdHJpbmcgUVF1aWNr
TmV0d29ya1JlcGx5OjpkYXRhKCkgY29uc3QKK3sKKyAgICBpZiAobV9uZXR3b3JrUmVwbHlEYXRh
LT5tX2RhdGFIYW5kbGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBRU3RyaW5nKCk7CisgICAg
UmVmUHRyPFNoYXJlZE1lbW9yeT4gc20gPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShtX25ldHdvcmtS
ZXBseURhdGEtPm1fZGF0YUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgaWYg
KCFzbSkKKyAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKKworICAgIHVpbnQ2NF90IHN0cmluZ0xl
bmd0aCA9IG1fbmV0d29ya1JlcGx5RGF0YS0+bV9jb250ZW50TGVuZ3RoIC8gc2l6ZW9mKFVDaGFy
KTsKKyAgICByZXR1cm4gUVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oc20t
PmRhdGEoKSksIHN0cmluZ0xlbmd0aCk7Cit9CisKK3ZvaWQgUVF1aWNrTmV0d29ya1JlcGx5Ojpz
ZXREYXRhKGNvbnN0IFFTdHJpbmcmIGRhdGEpCit7CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5t
X2NvbnRlbnRMZW5ndGggPSAwOworCisgICAgaWYgKGRhdGEuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBjb25zdCBVQ2hhciogdWNoYXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBVQ2hhcio+KGRhdGEuY29uc3REYXRhKCkpOworICAgIHVpbnQ2NF90IHNtTGVuZ3RoID0gc2l6
ZW9mKFVDaGFyKSAqIGRhdGEubGVuZ3RoKCk7CisKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBz
bSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNtTGVuZ3RoKTsKKyAgICBpZiAoIXNtKQorICAgICAg
ICByZXR1cm47CisgICAgLy8gVGhlIHNpemUgb2YgdGhlIGFsbG9jYXRlZCBzaGFyZWQgbWVtb3J5
IGNhbiBiZSBiaWdnZXIgdGhhbiByZXF1ZXN0ZWQuCisgICAgLy8gVXN1YWxseSB0aGUgc2l6ZSB3
aWxsIGJlIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgYSBwYWdlIHNpemUuCisg
ICAgbWVtY3B5KHNtLT5kYXRhKCksIHVjaGFyRGF0YSwgc21MZW5ndGgpOworCisgICAgaWYgKCFz
bS0+Y3JlYXRlSGFuZGxlKG1fbmV0d29ya1JlcGx5RGF0YS0+bV9kYXRhSGFuZGxlLCBTaGFyZWRN
ZW1vcnk6OlJlYWRPbmx5KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbmV0d29ya1JlcGx5RGF0
YS0+bV9jb250ZW50TGVuZ3RoID0gc21MZW5ndGg7Cit9CisKK3ZvaWQgUVF1aWNrTmV0d29ya1Jl
cGx5OjpzZW5kKCkKK3sKKyAgICBRT2JqZWN0KiBzY2hlbWVQYXJlbnQgPSBwYXJlbnQoKS0+cGFy
ZW50KCk7CisgICAgaWYgKCFzY2hlbWVQYXJlbnQpCisgICAgICAgIHJldHVybjsKKyAgICBRUXVp
Y2tXZWJWaWV3RXhwZXJpbWVudGFsKiB3ZWJWaWV3RXhwZXJpbWVudGFsID0gcW9iamVjdF9jYXN0
PFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqPihzY2hlbWVQYXJlbnQtPnBhcmVudCgpKTsKKyAg
ICBpZiAoIXdlYlZpZXdFeHBlcmltZW50YWwpCisgICAgICAgIHJldHVybjsKKyAgICB3ZWJWaWV3
RXhwZXJpbWVudGFsLT5zZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseSh0aGlzKTsKK30KKworV2Vi
S2l0OjpRdE5ldHdvcmtSZXF1ZXN0RGF0YSogUVF1aWNrTmV0d29ya1JlcGx5OjpuZXR3b3JrUmVx
dWVzdERhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtSZXF1ZXN0RGF0YTsKK30K
Kwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldE5ldHdvcmtSZXF1ZXN0RGF0YShXZWJLaXQ6
OlF0TmV0d29ya1JlcXVlc3REYXRhKiBkYXRhKQoreworICAgIG1fbmV0d29ya1JlcXVlc3REYXRh
ID0gZGF0YTsKKyAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fcmVwbHlVdWlkID0gZGF0YS0+bV9y
ZXBseVV1aWQ7Cit9CisKK1dlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhKiBRUXVpY2tOZXR3b3Jr
UmVwbHk6Om5ldHdvcmtSZXBseURhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtS
ZXBseURhdGE7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrbmV0d29ya3JlcGx5X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrbmV0d29ya3JlcGx5X3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42NGQ5ODE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHlfcC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgWmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lm
bmRlZiBxcXVpY2tuZXR3b3JrcmVwbHlfcF9oCisjZGVmaW5lIHFxdWlja25ldHdvcmtyZXBseV9w
X2gKKworI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKworI2luY2x1ZGUgPFFOZXR3b3JrQWNj
ZXNzTWFuYWdlcj4KKyNpbmNsdWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUv
cWRlY2xhcmF0aXZlbGlzdC5oPgorI2luY2x1ZGUgPFF0UXVpY2svcXF1aWNraXRlbS5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFF0TmV0d29ya1JlcXVlc3REYXRhOworY2xhc3MgUXRO
ZXR3b3JrUmVwbHlEYXRhOworfQorCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVpY2tOZXR3b3Jr
UmVwbHkgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKyAgICBRX1BST1BFUlRZKFFT
dHJpbmcgY29udGVudFR5cGUgUkVBRCBjb250ZW50VHlwZSBXUklURSBzZXRDb250ZW50VHlwZSkK
KyAgICBRX1BST1BFUlRZKFFTdHJpbmcgZGF0YSBSRUFEIGRhdGEgV1JJVEUgc2V0RGF0YSkKKyAg
ICBRX0VOVU1TKFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0aW9uKQorCitwdWJsaWM6Cisg
ICAgUVF1aWNrTmV0d29ya1JlcGx5KFFPYmplY3QqIHBhcmVudCA9IDApOworICAgIFFTdHJpbmcg
Y29udGVudFR5cGUoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRUeXBlKGNvbnN0IFFTdHJp
bmcmKTsKKyAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBvcGVyYXRpb24oKSBj
b25zdDsKKyAgICB2b2lkIHNldE9wZXJhdGlvbihRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJh
dGlvbik7CisgICAgUVN0cmluZyBjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdDsKKyAgICB2b2lk
IHNldENvbnRlbnREaXNwb3NpdGlvbihjb25zdCBRU3RyaW5nJik7CisgICAgUVN0cmluZyBsb2Nh
dGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgUVN0cmluZyYpOworICAg
IFFTdHJpbmcgbGFzdE1vZGlmaWVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRMYXN0TW9kaWZpZWQo
Y29uc3QgUVN0cmluZyYpOworICAgIFFTdHJpbmcgY29va2llKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRDb29raWUoY29uc3QgUVN0cmluZyYpOworICAgIFFTdHJpbmcgdXNlckFnZW50KCkgY29uc3Q7
CisgICAgdm9pZCBzZXRVc2VyQWdlbnQoY29uc3QgUVN0cmluZyYpOworICAgIFFTdHJpbmcgc2Vy
dmVyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTZXJ2ZXIoY29uc3QgUVN0cmluZyYpOworCisgICAg
UVN0cmluZyBkYXRhKCkgY29uc3Q7CisgICAgdm9pZCBzZXREYXRhKGNvbnN0IFFTdHJpbmcmIGRh
dGEpOworCisgICAgV2ViS2l0OjpRdE5ldHdvcmtSZXF1ZXN0RGF0YSogbmV0d29ya1JlcXVlc3RE
YXRhKCkgY29uc3Q7CisgICAgdm9pZCBzZXROZXR3b3JrUmVxdWVzdERhdGEoV2ViS2l0OjpRdE5l
dHdvcmtSZXF1ZXN0RGF0YSogZGF0YSk7CisgICAgV2ViS2l0OjpRdE5ldHdvcmtSZXBseURhdGEq
IG5ldHdvcmtSZXBseURhdGEoKSBjb25zdDsKKworcHVibGljIFFfU0xPVFM6CisgICAgdm9pZCBz
ZW5kKCk7CisKK3ByaXZhdGU6CisgICAgV2ViS2l0OjpRdE5ldHdvcmtSZXF1ZXN0RGF0YSogbV9u
ZXR3b3JrUmVxdWVzdERhdGE7CisgICAgV2ViS2l0OjpRdE5ldHdvcmtSZXBseURhdGEqIG1fbmV0
d29ya1JlcGx5RGF0YTsKK307CisKK1FNTF9ERUNMQVJFX1RZUEUoUVF1aWNrTmV0d29ya1JlcGx5
KQorCisjZW5kaWYgLy8gcXF1aWNrbmV0d29ya3JlcGx5X3BfaAorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0X3AuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcXVlc3RfcC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NTMwN2UKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0
X3AuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxi
aXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgcXF1aWNrbmV0d29ya3JlcXVlc3Rf
cF9oCisjZGVmaW5lIHFxdWlja25ldHdvcmtyZXF1ZXN0X3BfaAorCisjaW5jbHVkZSAicXdlYmtp
dGdsb2JhbC5oIgorI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9x
ZGVjbGFyYXRpdmVsaXN0Lmg+CisjaW5jbHVkZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+CisKK2Ns
YXNzIFFXRUJLSVRfRVhQT1JUIFFRdWlja05ldHdvcmtSZXF1ZXN0IDogcHVibGljIFFPYmplY3Qg
eworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHVybCBSRUFEIHVybCkKKwor
cHVibGljOgorICAgIFFRdWlja05ldHdvcmtSZXF1ZXN0KFFPYmplY3QqIHBhcmVudCA9IDApCisg
ICAgICAgIDogUU9iamVjdChwYXJlbnQpIHsgfQorICAgIFFTdHJpbmcgdXJsKCkgY29uc3QgeyBy
ZXR1cm4gbV91cmw7IH0KKyAgICB2b2lkIHNldFVybChjb25zdCBRU3RyaW5nJiB1cmwpIHsgbV91
cmwgPSB1cmw7IH0KKworcHJpdmF0ZToKKyAgICBRU3RyaW5nIG1fdXJsOworfTsKKworUU1MX0RF
Q0xBUkVfVFlQRShRUXVpY2tOZXR3b3JrUmVxdWVzdCkKKworI2VuZGlmIC8vIHFxdWlja25ldHdv
cmtyZXF1ZXN0X3BfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjc2MzAyMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlLmNwcApAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9Ad2Vi
a2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJxcXVpY2t1cmxzY2hl
bWVkZWxlZ2F0ZV9wLmgiCisKK1FRdWlja1VybFNjaGVtZURlbGVnYXRlOjpRUXVpY2tVcmxTY2hl
bWVEZWxlZ2F0ZShRT2JqZWN0KiBwYXJlbnQpCisgICAgOiBRT2JqZWN0KHBhcmVudCkKKyAgICAs
IG1fcmVxdWVzdChuZXcgUVF1aWNrTmV0d29ya1JlcXVlc3QodGhpcykpCisgICAgLCBtX3JlcGx5
KG5ldyBRUXVpY2tOZXR3b3JrUmVwbHkodGhpcykpCit7IH0KKworUVN0cmluZyBRUXVpY2tVcmxT
Y2hlbWVEZWxlZ2F0ZTo6c2NoZW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY2hlbWU7Cit9
CisKK3ZvaWQgUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU6OnNldFNjaGVtZShjb25zdCBRU3RyaW5n
JiBzY2hlbWUpCit7CisgICAgbV9zY2hlbWUgPSBzY2hlbWU7CisgICAgZW1pdCBzY2hlbWVDaGFu
Z2VkKCk7Cit9CisKK1FRdWlja05ldHdvcmtSZXF1ZXN0KiBRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0
ZTo6cmVxdWVzdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVxdWVzdDsKK30KKworUVF1aWNr
TmV0d29ya1JlcGx5KiBRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZTo6cmVwbHkoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3JlcGx5OworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlX3AuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGVfcC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZWFhZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlX3AuaApA
QCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIg
PHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGVfcF9o
CisjZGVmaW5lIHFxdWlja3VybHNjaGVtZWRlbGVnYXRlX3BfaAorCisjaW5jbHVkZSAicXF1aWNr
bmV0d29ya3JlcGx5X3AuaCIKKyNpbmNsdWRlICJxcXVpY2tuZXR3b3JrcmVxdWVzdF9wLmgiCisj
aW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8
UXRRdWljay9xcXVpY2tpdGVtLmg+CisKKworY2xhc3MgUVdFQktJVF9FWFBPUlQgUVF1aWNrVXJs
U2NoZW1lRGVsZWdhdGUgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKyAgICBRX1BS
T1BFUlRZKFFTdHJpbmcgc2NoZW1lIFJFQUQgc2NoZW1lIFdSSVRFIHNldFNjaGVtZSBOT1RJRlkg
c2NoZW1lQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKFFRdWlja05ldHdvcmtSZXF1ZXN0KiByZXF1
ZXN0IFJFQUQgcmVxdWVzdCkKKyAgICBRX1BST1BFUlRZKFFRdWlja05ldHdvcmtSZXBseSogcmVw
bHkgUkVBRCByZXBseSkKKworcHVibGljOgorICAgIFFRdWlja1VybFNjaGVtZURlbGVnYXRlKFFP
YmplY3QqIHBhcmVudCA9IDApOworICAgIFFTdHJpbmcgc2NoZW1lKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRTY2hlbWUoY29uc3QgUVN0cmluZyYgc2NoZW1lKTsKKyAgICBRUXVpY2tOZXR3b3JrUmVx
dWVzdCogcmVxdWVzdCgpIGNvbnN0OworICAgIFFRdWlja05ldHdvcmtSZXBseSogcmVwbHkoKSBj
b25zdDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgc2NoZW1lQ2hhbmdlZCgpOworICAgIHZvaWQg
cmVjZWl2ZWRSZXF1ZXN0KCk7CisKK3ByaXZhdGU6CisgICAgUVN0cmluZyBtX3NjaGVtZTsKKyAg
ICBRUXVpY2tOZXR3b3JrUmVxdWVzdCogbV9yZXF1ZXN0OworICAgIFFRdWlja05ldHdvcmtSZXBs
eSogbV9yZXBseTsKK307CisKK1FNTF9ERUNMQVJFX1RZUEUoUVF1aWNrVXJsU2NoZW1lRGVsZWdh
dGUpCisKKyNlbmRpZiAvLyBxcXVpY2t1cmxzY2hlbWVkZWxlZ2F0ZV9wX2gKKworCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAppbmRleCA0
ZGJmOTM4Li4xNWE1MjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrd2Vidmlldy5jcHAKQEAgLTU2Nyw3ICs1NjcsNyBAQCB2b2lkIFFRdWlja1dlYlZp
ZXdQcml2YXRlOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21OYXZpZ2F0b3JRdE9iamVjdChjb25zdCBT
dHJpbmcmCiAvKiEKICAgICBccW1sc2lnbmFsIFdlYlZpZXc6Om9uTmF2aWdhdGlvblJlcXVlc3Rl
ZChyZXF1ZXN0KQogCi0gICAgVGhpcyBzaWduYWwgaXMgZW1pdHRlZCBmb3IgZXZlcnkgbmF2aWdh
dGlvbiByZXF1ZXN0LiBUaGUgcmVxdWVzdCBvYmplY3QgY29udGFpbnMgdXJsLCBidXR0b24gYW5k
IG1vZGlmaWVycyBwcm9wZXJ0aWVzCisgICAgVGhpcyBzaWduYWwgaXMgZW1pdHRlZCBmb3IgZXZl
cnkgbmF2aWdhdGlvbiByZXF1ZXN0LiBUaGUgcmVxdWVzdCBvYmplY3QgY29udGFpbnMgdXJsLCBi
dXR0b24gYW5kIG1vZGlmaWVycyBwcm9wZXJ0eWVydGllcwogICAgIGRlc2NyaWJpbmcgdGhlIG5h
dmlnYXRpb24gYWN0aW9uLCBlLmcuICJhIG1pZGRsZSBjbGljayB3aXRoIHNoaWZ0IGtleSBwcmVz
c2VkIHRvICdodHRwOi8vcXQtcHJvamVjdC5vcmcnIi4KIAogICAgIFRoZSBuYXZpZ2F0aW9uIHdp
bGwgYmUgYWNjZXB0ZWQgYnkgZGVmYXVsdC4gVG8gY2hhbmdlIHRoYXQsIG9uZSBjYW4gc2V0IHRo
ZSBhY3Rpb24gcHJvcGVydHkgdG8gV2ViVmlldy5JZ25vcmVSZXF1ZXN0IHRvIHJlamVjdApAQCAt
NTk1LDYgKzU5NSw3IEBAIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OlFRdWlja1dlYlZpZXdF
eHBlcmltZW50YWwoUVF1aWNrV2ViVmlldyAqd2ViVmlldykKICAgICA6IFFPYmplY3Qod2ViVmll
dykKICAgICAsIHFfcHRyKHdlYlZpZXcpCiAgICAgLCBkX3B0cih3ZWJWaWV3LT5kX3B0ci5kYXRh
KCkpCisgICAgLCBzY2hlbWVQYXJlbnQobmV3IFFPYmplY3QodGhpcykpCiAgICAgLCBtX3ZpZXdw
b3J0SW5mbyhuZXcgUVdlYlZpZXdwb3J0SW5mbyh3ZWJWaWV3LT5kX3B0ci5kYXRhKCksIHRoaXMp
KQogewogfQpAQCAtNjk4LDYgKzY5OSw2OSBAQCBib29sIFFRdWlja1dlYlZpZXdFeHBlcmltZW50
YWw6OnVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cigpIGNvbnN0CiAgICAgcmV0dXJuIGQt
PnVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cjsKIH0KIAorUVF1aWNrVXJsU2NoZW1lRGVs
ZWdhdGUqIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURlbGVnYXRlc0F0KFFEZWNs
YXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4qIHByb3BlcnR5LCBp
bnQgaW5kZXgpCit7CisgICAgY29uc3QgUU9iamVjdExpc3QgY2hpbGRyZW4gPSBwcm9wZXJ0eS0+
b2JqZWN0LT5jaGlsZHJlbigpOworICAgIGlmIChpbmRleCA8IGNoaWxkcmVuLmNvdW50KCkpCisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZSo+KGNoaWxk
cmVuLmF0KGluZGV4KSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld0V4
cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzQXBwZW5kKFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0
eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4qIHByb3BlcnR5LCBRUXVpY2tVcmxTY2hlbWVEZWxl
Z2F0ZSAqc2NoZW1lKQoreworICAgIFFPYmplY3QqIHNjaGVtZVBhcmVudCA9IHByb3BlcnR5LT5v
YmplY3Q7CisgICAgc2NoZW1lLT5zZXRQYXJlbnQoc2NoZW1lUGFyZW50KTsKKyAgICBRUXVpY2tX
ZWJWaWV3RXhwZXJpbWVudGFsKiB3ZWJWaWV3ID0gcW9iamVjdF9jYXN0PFFRdWlja1dlYlZpZXdF
eHBlcmltZW50YWwqPihwcm9wZXJ0eS0+b2JqZWN0LT5wYXJlbnQoKSk7CisgICAgaWYgKCF3ZWJW
aWV3KQorICAgICAgICByZXR1cm47CisgICAgUVF1aWNrV2ViVmlld1ByaXZhdGUqIGQgPSB3ZWJW
aWV3LT5kX2Z1bmMoKTsKKyAgICBkLT53ZWJQYWdlUHJveHktPnJlZ2lzdGVyQXBwbGljYXRpb25T
Y2hlbWUoc2NoZW1lLT5zY2hlbWUoKSk7Cit9CisKK2ludCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVu
dGFsOjpzY2hlbWVEZWxlZ2F0ZXNDb3VudChRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNr
VXJsU2NoZW1lRGVsZWdhdGU+KiBwcm9wZXJ0eSkKK3sKKyAgICByZXR1cm4gcHJvcGVydHktPm9i
amVjdC0+Y2hpbGRyZW4oKS5jb3VudCgpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdFeHBlcmlt
ZW50YWw6OnNjaGVtZURlbGVnYXRlc0NsZWFyKFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVp
Y2tVcmxTY2hlbWVEZWxlZ2F0ZT4qIHByb3BlcnR5KQoreworICAgIGNvbnN0IFFPYmplY3RMaXN0
IGNoaWxkcmVuID0gcHJvcGVydHktPm9iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICBmb3IgKGludCBp
bmRleCA9IDA7IGluZGV4IDwgY2hpbGRyZW4uY291bnQoKTsgaW5kZXgrKykgeworICAgICAgICBR
T2JqZWN0KiBjaGlsZCA9IGNoaWxkcmVuLmF0KGluZGV4KTsKKyAgICAgICAgY2hpbGQtPnNldFBh
cmVudCgwKTsKKyAgICAgICAgZGVsZXRlIGNoaWxkOworICAgIH0KK30KKworUURlY2xhcmF0aXZl
TGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiBRUXVpY2tXZWJWaWV3RXhwZXJp
bWVudGFsOjpzY2hlbWVEZWxlZ2F0ZXMoKQoreworICAgIHJldHVybiBRRGVjbGFyYXRpdmVMaXN0
UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+KHNjaGVtZVBhcmVudCwgMCwKKyAgICAg
ICAgICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURlbGVnYXRlc0FwcGVuZCwK
KyAgICAgICAgICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURlbGVnYXRlc0Nv
dW50LAorICAgICAgICAgICAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdh
dGVzQXQsCisgICAgICAgICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVEZWxl
Z2F0ZXNDbGVhcik7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6aW52b2tl
QXBwbGljYXRpb25TY2hlbWVIYW5kbGVyKFF0TmV0d29ya1JlcXVlc3REYXRhKiByZXF1ZXN0KQor
eworICAgIGNvbnN0IFFPYmplY3RMaXN0IGNoaWxkcmVuID0gc2NoZW1lUGFyZW50LT5jaGlsZHJl
bigpOworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBjaGlsZHJlbi5jb3VudCgpOyBp
bmRleCsrKSB7CisgICAgICAgIFFRdWlja1VybFNjaGVtZURlbGVnYXRlKiB1cmxTY2hlbWUgPSBx
b2JqZWN0X2Nhc3Q8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUqPihjaGlsZHJlbi5hdChpbmRleCkp
OworICAgICAgICBpZiAoIXVybFNjaGVtZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAoIXVybFNjaGVtZS0+c2NoZW1lKCkuY29tcGFyZShRU3RyaW5nKHJlcXVlc3QtPm1fc2No
ZW1lKSwgUXQ6OkNhc2VJbnNlbnNpdGl2ZSkpIHsKKyAgICAgICAgICAgIHVybFNjaGVtZS0+cmVw
bHkoKS0+c2V0TmV0d29ya1JlcXVlc3REYXRhKHJlcXVlc3QpOworICAgICAgICAgICAgZW1pdCB1
cmxTY2hlbWUtPnJlY2VpdmVkUmVxdWVzdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNlbmRBcHBs
aWNhdGlvblNjaGVtZVJlcGx5KFFRdWlja05ldHdvcmtSZXBseSogcmVwbHkpCit7CisgICAgZF9w
dHItPndlYlBhZ2VQcm94eS0+c2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkocmVwbHkpOworfQor
CiB2b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmdvRm9yd2FyZFRvKGludCBpbmRleCkK
IHsKICAgICBkX3B0ci0+bmF2aWdhdGlvbkhpc3RvcnktPmQtPmdvRm9yd2FyZFRvKGluZGV4KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
d19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5o
CmluZGV4IDQyMDQ1M2QuLmJiNzQ3ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaApAQCAtMjEsNyArMjEsMTEgQEAKICNpZm5kZWYg
cXF1aWNrd2Vidmlld19wX2gKICNkZWZpbmUgcXF1aWNrd2Vidmlld19wX2gKIAorI2luY2x1ZGUg
InFxdWlja25ldHdvcmtyZXBseV9wLmgiCisjaW5jbHVkZSAicXF1aWNrbmV0d29ya3JlcXVlc3Rf
cC5oIgorI2luY2x1ZGUgInFxdWlja3VybHNjaGVtZWRlbGVnYXRlX3AuaCIKICNpbmNsdWRlICJx
d2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmVsaXN0
Lmg+CiAjaW5jbHVkZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+CiAKIGNsYXNzIFFXZWJOYXZpZ2F0
aW9uUmVxdWVzdDsKQEAgLTE3Niw2ICsxODAsNyBAQCBjbGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVp
Y2tXZWJWaWV3RXhwZXJpbWVudGFsIDogcHVibGljIFFPYmplY3QgewogICAgIFFfUFJPUEVSVFko
UVdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNlcyBSRUFEIHByZWZlcmVuY2VzIENPTlNUQU5UIEZJ
TkFMKQogICAgIFFfUFJPUEVSVFkoYm9vbCB1c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIg
UkVBRCB1c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIgV1JJVEUgc2V0VXNlVHJhZGl0aW9u
YWxEZXNrdG9wQmVoYXZpb3VyKQogICAgIFFfUFJPUEVSVFkoUVdlYlZpZXdwb3J0SW5mbyogdmll
d3BvcnRJbmZvIFJFQUQgdmlld3BvcnRJbmZvIENPTlNUQU5UIEZJTkFMKQorICAgIFFfUFJPUEVS
VFkoUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiB1cmxT
Y2hlbWVEZWxlZ2F0ZXMgUkVBRCBzY2hlbWVEZWxlZ2F0ZXMpCiAgICAgUV9FTlVNUyhOYXZpZ2F0
aW9uUmVxdWVzdEFjdGlvbikKIAogcHVibGljOgpAQCAtMjAyLDYgKzIwNywxNCBAQCBwdWJsaWM6
CiAgICAgUVdlYk5hdmlnYXRpb25IaXN0b3J5KiBuYXZpZ2F0aW9uSGlzdG9yeSgpIGNvbnN0Owog
ICAgIFFRdWlja1dlYlBhZ2UqIHBhZ2UoKTsKIAorICAgIHN0YXRpYyBRUXVpY2tVcmxTY2hlbWVE
ZWxlZ2F0ZSogc2NoZW1lRGVsZWdhdGVzQXQoUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlj
a1VybFNjaGVtZURlbGVnYXRlPiosIGludCBpbmRleCk7CisgICAgc3RhdGljIHZvaWQgc2NoZW1l
RGVsZWdhdGVzQXBwZW5kKFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVE
ZWxlZ2F0ZT4qLCBRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZSopOworICAgIHN0YXRpYyBpbnQgc2No
ZW1lRGVsZWdhdGVzQ291bnQoUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVt
ZURlbGVnYXRlPiopOworICAgIHN0YXRpYyB2b2lkIHNjaGVtZURlbGVnYXRlc0NsZWFyKFFEZWNs
YXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4qKTsKKyAgICBRRGVj
bGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+IHNjaGVtZURlbGVn
YXRlcygpOworICAgIHZvaWQgaW52b2tlQXBwbGljYXRpb25TY2hlbWVIYW5kbGVyKFdlYktpdDo6
UXROZXR3b3JrUmVxdWVzdERhdGEqKTsKKyAgICB2b2lkIHNlbmRBcHBsaWNhdGlvblNjaGVtZVJl
cGx5KFFRdWlja05ldHdvcmtSZXBseSopOworCiBwdWJsaWMgUV9TTE9UUzoKICAgICB2b2lkIHNl
dFVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cihib29sIGVuYWJsZSk7CiAgICAgdm9pZCBn
b0JhY2tUbyhpbnQgaW5kZXgpOwpAQCAtMjIwLDYgKzIzMyw3IEBAIFFfU0lHTkFMUzoKIHByaXZh
dGU6CiAgICAgUVF1aWNrV2ViVmlldyogcV9wdHI7CiAgICAgUVF1aWNrV2ViVmlld1ByaXZhdGUq
IGRfcHRyOworICAgIFFPYmplY3QqIHNjaGVtZVBhcmVudDsKICAgICBRV2ViVmlld3BvcnRJbmZv
KiBtX3ZpZXdwb3J0SW5mbzsKIAogICAgIGZyaWVuZCBjbGFzcyBRdFdlYlBhZ2VVSUNsaWVudDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAwODM2YjAwLi5kYzBj
OThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0zNiw2ICsz
Niw5IEBACiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICNpbmNsdWRlICJOYXRpdmVXZWJUb3Vj
aEV2ZW50LmgiCiAjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlICJRdE5ldHdvcmtS
ZXF1ZXN0RGF0YS5oIgorI2VuZGlmCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
LmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgpAQCAtOTIsNiArOTUsMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIHN0cnVjdCBXaW5kb3dGZWF0dXJlczsKIH0KIAorI2lmIFBM
QVRGT1JNKFFUKQorY2xhc3MgUVF1aWNrTmV0d29ya1JlcGx5OworI2VuZGlmCisKICNpZiBQTEFU
Rk9STShNQUMpCiAjaWZkZWYgX19PQkpDX18KIEBjbGFzcyBXS1ZpZXc7CkBAIC0zMDMsNiArMzEw
LDExIEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIG1haW50YWluc0luYWN0aXZlU2VsZWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9tYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbjsgfQogICAgIHZv
aWQgc2V0TWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb24oYm9vbCk7CisjaWYgUExBVEZPUk0oUVQp
CisgICAgdm9pZCByZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1l
KTsKKyAgICB2b2lkIHJlc29sdmVBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QoUXROZXR3b3JrUmVx
dWVzdERhdGEpOworICAgIHZvaWQgc2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoY29uc3QgUVF1
aWNrTmV0d29ya1JlcGx5Kik7CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgIHZvaWQg
c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9z
aXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50
NjRfdCBzZWxlY3Rpb25FbmQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0
X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCk7CkBAIC05ODIsNiArOTk0LDEwIEBAIHByaXZhdGU6CiAg
ICAgc3RhdGljIFdLUGFnZURlYnVnUGFpbnRGbGFncyBzX2RlYnVnUGFpbnRGbGFnczsKIAogICAg
IGJvb2wgbV9zaG91bGRTZW5kRXZlbnRzU3luY2hyb25vdXNseTsKKworI2lmIFBMQVRGT1JNKFFU
KQorICAgIFFTZXQ8UXROZXR3b3JrUmVxdWVzdERhdGEqPiBtX2FwcGxpY2F0aW9uU2NoZW1lUmVx
dWVzdHM7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggMGJmMWZi
ZC4uNWMyMTMzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lm1lc3NhZ2VzLmluCkBAIC0xMjMsNiArMTIzLDEwIEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQ
cm94eSB7CiAgICAgRGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhGb3JSZXNvdXJjZSh1aW50NjRfdCBm
cmFtZUlELCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IGNvbnRlbnRMZW5n
dGgpCiAgICAgRGlkRmluaXNoTG9hZEZvclJlc291cmNlKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2
NF90IHJlc291cmNlSWRlbnRpZmllcikKICAgICBEaWRGYWlsTG9hZEZvclJlc291cmNlKHVpbnQ2
NF90IGZyYW1lSUQsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciBlcnJvcikKKyNpZiBQTEFURk9STShRVCkKKyAgICBSZXNvbHZlQXBwbGljYXRpb25T
Y2hlbWVSZXF1ZXN0KFdlYktpdDo6UXROZXR3b3JrUmVxdWVzdERhdGEgcmVxdWVzdCkKKyNlbmRp
ZgorCiAKICAgICAjIEN1c3RvbSByZXByZXNlbnRhdGlvbnMKICAgICBEaWRGaW5pc2hMb2FkaW5n
RGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKFdURjo6U3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1l
LCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFBhZ2VDbGllbnQuY3BwCmluZGV4IDQxNTM1MDUuLjBlYzJiNzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwCkBAIC0xMDAsNiArMTAwLDEx
IEBAIHZvaWQgUXRQYWdlQ2xpZW50OjpoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94
eSogZG93bmxvYWQpCiAgICAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmdldChtX3dlYlZpZXcpLT5o
YW5kbGVEb3dubG9hZFJlcXVlc3QoZG93bmxvYWQpOwogfQogCit2b2lkIFF0UGFnZUNsaWVudDo6
aGFuZGxlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KFF0TmV0d29ya1JlcXVlc3REYXRhKiByZXF1
ZXN0RGF0YSkKK3sKKyAgICBtX3dlYlZpZXctPmV4cGVyaW1lbnRhbCgpLT5pbnZva2VBcHBsaWNh
dGlvblNjaGVtZUhhbmRsZXIocmVxdWVzdERhdGEpOworfQorCiB2b2lkIFF0UGFnZUNsaWVudDo6
c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vyc29yKQogewogICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGZpeCB1bnRpbCB3ZSBnZXQgY3Vyc29yIHN1cHBvcnQgaW4g
UU1MIGl0ZW1zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFn
ZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5oCmlu
ZGV4IDZlNzI2MDMuLjM4MTNiYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFBhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQ
YWdlQ2xpZW50LmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWxhdW5jaFByb2Nlc3MoKTsKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQ
cm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVE
b3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVB
cHBsaWNhdGlvblNjaGVtZVJlcXVlc3QoUXROZXR3b3JrUmVxdWVzdERhdGEqKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkaXNwbGF5VmlldygpOwogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxWaWV3KGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHNjcm9sbE9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
V2ViUGFnZVByb3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYlBhZ2VQ
cm94eVF0LmNwcAppbmRleCA0NTgyZTE2Li43Y2ViOWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9XZWJQYWdlUHJveHlRdC5jcHAKQEAgLTI3LDYgKzI3LDkgQEAKICNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKIAogI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRl
ICJRdE5ldHdvcmtSZXBseURhdGEuaCIKKyNpbmNsdWRlICJRdFBhZ2VDbGllbnQuaCIKKyNpbmNs
dWRlICJxcXVpY2tuZXR3b3JrcmVwbHlfcC5oIgogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRWRpdG9y
Lmg+CkBAIC03Nyw0ICs4MCwyNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2FuY2VsQ29tcG9zaXRp
b24oKQogICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2FuY2VsQ29tcG9z
aXRpb24oKSwgbV9wYWdlSUQpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJBcHBs
aWNhdGlvblNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKK3sKKyAgICBwcm9jZXNzKCktPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlJlZ2lzdGVyQXBwbGljYXRpb25TY2hlbWUoc2NoZW1lKSwg
bV9wYWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVzb2x2ZUFwcGxpY2F0aW9uU2No
ZW1lUmVxdWVzdChRdE5ldHdvcmtSZXF1ZXN0RGF0YSByZXF1ZXN0KQoreworICAgIFF0TmV0d29y
a1JlcXVlc3REYXRhKiByZXF1ZXN0RGF0YSA9IG5ldyBRdE5ldHdvcmtSZXF1ZXN0RGF0YShyZXF1
ZXN0KTsKKyAgICBtX2FwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdHMuaW5zZXJ0KHJlcXVlc3REYXRh
KTsKKyAgICBzdGF0aWNfY2FzdDxRdFBhZ2VDbGllbnQqPihtX3BhZ2VDbGllbnQpLT5oYW5kbGVB
cHBsaWNhdGlvblNjaGVtZVJlcXVlc3QocmVxdWVzdERhdGEpOworfQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6c2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoY29uc3QgUVF1aWNrTmV0d29ya1JlcGx5
KiByZXBseSkKK3sKKyAgICBRdE5ldHdvcmtSZXF1ZXN0RGF0YSogcmVxdWVzdERhdGEgPSByZXBs
eS0+bmV0d29ya1JlcXVlc3REYXRhKCk7CisgICAgaWYgKG1fYXBwbGljYXRpb25TY2hlbWVSZXF1
ZXN0cy5jb250YWlucyhyZXF1ZXN0RGF0YSkpIHsKKyAgICAgICAgUXROZXR3b3JrUmVwbHlEYXRh
KiByZXBseURhdGEgPSByZXBseS0+bmV0d29ya1JlcGx5RGF0YSgpOworICAgICAgICBwcm9jZXNz
KCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoKnJlcGx5
RGF0YSksIHBhZ2VJRCgpKTsKKyAgICAgICAgbV9hcHBsaWNhdGlvblNjaGVtZVJlcXVlc3RzLnJl
bW92ZShyZXF1ZXN0RGF0YSk7CisgICAgICAgIGRlbGV0ZSByZXF1ZXN0RGF0YTsKKyAgICB9Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNw
cAppbmRleCA0ZGQ1Njk5Li5iOGJkNjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmNwcApAQCAtNjksNiArNjksMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1dpZGdldC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvV2luZG93RmVhdHVyZXMuaD4KIAorI2lmIFBMQVRGT1JNKFFUKQorI2lu
Y2x1ZGUgIlBhZ2VQb2ludGVyV3JhcHBlci5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTE0MzgsNyArMTQ0MiwxMSBAQCB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKQogCiBQYXNzUmVm
UHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVO
ZXR3b3JraW5nQ29udGV4dCgpCiB7Ci0gICAgcmV0dXJuIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQ6OmNyZWF0ZShtX2ZyYW1lLT5jb3JlRnJhbWUoKSk7CisgICAgUmVmUHRyPFdlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQ+IGNvbnRleHQgPSBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpjcmVh
dGUobV9mcmFtZS0+Y29yZUZyYW1lKCkpOworI2lmIFBMQVRGT1JNKFFUKQorICAgIGNvbnRleHQt
PnNldE9yaWdpbmF0aW5nT2JqZWN0KG5ldyBQYWdlUG9pbnRlcldyYXBwZXIobV9mcmFtZS0+cGFn
ZSgpKSk7CisjZW5kaWYKKyAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9xdC9QYWdlUG9pbnRlcldyYXBwZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9QYWdlUG9pbnRlcldyYXBwZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZjU0MDcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1BhZ2VQb2ludGVy
V3JhcHBlci5jcHAKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBa
ZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGFnZVBvaW50ZXJXcmFwcGVyLmgiCisKK1BhZ2VQb2ludGVyV3JhcHBlcjo6UGFn
ZVBvaW50ZXJXcmFwcGVyKFdlYktpdDo6V2ViUGFnZSogcGFnZSkKKyAgICA6IG1fcGFnZShwYWdl
KSB7IH0KKworV2ViS2l0OjpXZWJQYWdlKiBQYWdlUG9pbnRlcldyYXBwZXI6OnBhZ2UoKSBjb25z
dAoreworICAgIHJldHVybiBtX3BhZ2U7Cit9CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9QYWdlUG9pbnRlcldyYXBwZXIuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvUGFnZVBvaW50ZXJXcmFw
cGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmNDY1OQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQv
UGFnZVBvaW50ZXJXcmFwcGVyLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFBhZ2VQ
b2ludGVyV3JhcHBlcl9oCisjZGVmaW5lIFBhZ2VQb2ludGVyV3JhcHBlcl9oCisKKyNpbmNsdWRl
IDxRT2JqZWN0PgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlBhZ2U7Cit9OworCitj
bGFzcyBQYWdlUG9pbnRlcldyYXBwZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QK
K3B1YmxpYzoKKyAgICBQYWdlUG9pbnRlcldyYXBwZXIoV2ViS2l0OjpXZWJQYWdlKik7CisgICAg
V2ViS2l0OjpXZWJQYWdlKiBwYWdlKCkgY29uc3Q7Citwcml2YXRlOgorICAgIFdlYktpdDo6V2Vi
UGFnZSogbV9wYWdlOworfTsKKworI2VuZGlmIC8vIFBhZ2VQb2ludGVyV3JhcHBlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAppbmRleCBhNmYzYWFi
Li5iNmRmYTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5jcHAKQEAgLTM4LDYgKzM4LDExIEBAIFBhc3NSZWZQdHI8V2ViRnJhbWVOZXR3b3JraW5nQ29u
dGV4dD4gV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKEZyYW1lKiBmCiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KGZyYW1lKSk7CiB9CiAK
K3ZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0T3JpZ2luYXRpbmdPYmplY3QoUU9i
amVjdCogb3JpZ2luKQoreworICAgIG1fb3JpZ2luYXRpbmdPYmplY3QgPSBvcmlnaW47Cit9CisK
IFFPYmplY3QqIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6Om9yaWdpbmF0aW5nT2JqZWN0KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9vcmlnaW5hdGluZ09iamVjdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9x
dC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKaW5kZXggMTBjMzQxYS4uNDI1MTYwMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKQEAgLTI3LDYgKzI3
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dCA6IHB1YmxpYyBGcmFtZU5ldHdvcmtpbmdDb250ZXh0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBjcmVhdGUoRnJhbWUqKTsKKyAg
ICB2b2lkIHNldE9yaWdpbmF0aW5nT2JqZWN0KFFPYmplY3QqKTsKIAogcHJpdmF0ZToKICAgICBX
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0KEZyYW1lKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCAwNWM0YjVmLi5jMWJkNDM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTYwLDYgKzYwLDEyIEBA
CiAKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlICJBcmd1bWVudENvZGVyc1F0LmgiCisjaW5j
bHVkZSAiUXROZXR3b3JrQWNjZXNzTWFuYWdlci5oIgorI2luY2x1ZGUgIlF0TmV0d29ya1JlcGx5
LmgiCisjaW5jbHVkZSAiUXROZXR3b3JrUmVwbHlEYXRhLmgiCisjaW5jbHVkZSAiUXROZXR3b3Jr
UmVxdWVzdERhdGEuaCIKKyNpbmNsdWRlIDxRTmV0d29ya1JlcGx5PgorI2luY2x1ZGUgPFFOZXR3
b3JrUmVxdWVzdD4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQpAQCAtNDY4LDYgKzQ3NCwx
MSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNvbnRleHRNZW51U2hvd2luZygpIHsgbV9pc1Nob3dp
bmdDb250ZXh0TWVudSA9IHRydWU7IH0KIAorI2lmIFBMQVRGT1JNKFFUKQorICAgIHZvaWQgcmVn
aXN0ZXJBcHBsaWNhdGlvblNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSk7CisgICAgdm9pZCBh
cHBsaWNhdGlvblNjaGVtZVJlcGx5KGNvbnN0IFF0TmV0d29ya1JlcGx5RGF0YSYpOworICAgIHZv
aWQgcmVjZWl2ZWRBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QoY29uc3QgUU5ldHdvcmtSZXF1ZXN0
JiwgUXROZXR3b3JrUmVwbHkqKTsKKyNlbmRpZgogICAgIHZvaWQgd2hlZWxFdmVudChjb25zdCBX
ZWJXaGVlbEV2ZW50Jik7CiAjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQogICAgIHZvaWQgZ2Vz
dHVyZUV2ZW50KGNvbnN0IFdlYkdlc3R1cmVFdmVudCYpOwpAQCAtNzI3LDYgKzczOCw5IEBAIHBy
aXZhdGU6CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIGJvb2wgbV9nZXN0dXJlUmVhY2hlZFNjcm9s
bGluZ0xpbWl0OwogI2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisgICAgSGFzaE1hcDxTdHJpbmcs
IFF0TmV0d29ya1JlcGx5Kj4gbV9hcHBsaWNhdGlvblNjaGVtZVJlcGxpZXM7CisjZW5kaWYKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCAwZWIwZjZiLi43YzM1YjQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5t
ZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgpAQCAtNjAsNiArNjAsOSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAg
ICBSZWxvYWQoYm9vbCByZWxvYWRGcm9tT3JpZ2luKQogICAgIFN0b3BMb2FkaW5nKCkKIAorICAg
IEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoV2ViS2l0OjpRdE5ldHdvcmtSZXBseURhdGEgcmVwbHkp
CisgICAgUmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZShXVEY6OlN0cmluZyBzY2hlbWUpCisKICAg
ICBTdG9wTG9hZGluZ0ZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpCiAgICAgCiAgICAgUmVzdG9yZVNl
c3Npb24oV2ViS2l0OjpTZXNzaW9uU3RhdGUgc3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvV2ViUGFnZVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwCmluZGV4IDMxOGRhMjMuLjU1MDgw
ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQ
YWdlUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQ
YWdlUXQuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlICJXZWJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgorI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgpAQCAtMzg4LDQgKzM5
MCwyOSBAQCB2b2lkIFdlYlBhZ2U6OmNhbmNlbENvbXBvc2l0aW9uKCkKICAgICAvLyBGSVhNRTog
c3RhdGljX2Nhc3Q8V2ViRWRpdG9yQ2xpZW50Kj4odGFyZ2V0RnJhbWUtPmVkaXRvcigpLT5jbGll
bnQoKSktPnNlbmRTZWxlY3Rpb25DaGFuZ2VkTWVzc2FnZSgpOwogfQogCit2b2lkIFdlYlBhZ2U6
OnJlZ2lzdGVyQXBwbGljYXRpb25TY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCit7CisgICAg
UXROZXR3b3JrQWNjZXNzTWFuYWdlciogcW5hbSA9IHFvYmplY3RfY2FzdDxRdE5ldHdvcmtBY2Nl
c3NNYW5hZ2VyKj4oV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0FjY2Vzc01hbmFnZXIoKSk7
CisgICAgaWYgKCFxbmFtKQorICAgICAgICByZXR1cm47CisgICAgcW5hbS0+cmVnaXN0ZXJBcHBs
aWNhdGlvblNjaGVtZSh0aGlzLCBRU3RyaW5nKHNjaGVtZSkpOworfQorCit2b2lkIFdlYlBhZ2U6
OnJlY2VpdmVkQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYg
cmVxdWVzdCwgUXROZXR3b3JrUmVwbHkqIHJlcGx5KQoreworICAgIFF0TmV0d29ya1JlcXVlc3RE
YXRhIHJlcXVlc3REYXRhKHJlcXVlc3QsIHJlcGx5KTsKKyAgICBtX2FwcGxpY2F0aW9uU2NoZW1l
UmVwbGllcy5hZGQocmVxdWVzdERhdGEubV9yZXBseVV1aWQsIHJlcGx5KTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlc29sdmVBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QocmVx
dWVzdERhdGEpKTsKK30KKwordm9pZCBXZWJQYWdlOjphcHBsaWNhdGlvblNjaGVtZVJlcGx5KGNv
bnN0IFF0TmV0d29ya1JlcGx5RGF0YSYgcmVwbHlEYXRhKQoreworICAgIGlmICghbV9hcHBsaWNh
dGlvblNjaGVtZVJlcGxpZXMuY29udGFpbnMocmVwbHlEYXRhLm1fcmVwbHlVdWlkKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUXROZXR3b3JrUmVwbHkqIG5ldHdvcmtSZXBseSA9IG1fYXBwbGlj
YXRpb25TY2hlbWVSZXBsaWVzLnRha2UocmVwbHlEYXRhLm1fcmVwbHlVdWlkKTsKKyAgICBuZXR3
b3JrUmVwbHktPnNldFJlcGx5RGF0YShyZXBseURhdGEpOworICAgIG5ldHdvcmtSZXBseS0+Zmlu
YWxpemUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWU0NTgyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmNwcApA
QCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIg
PHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlF0TmV0d29ya0FjY2Vzc01hbmFnZXIuaCIKKworI2luY2x1ZGUgIlBhZ2VQb2ludGVyV3Jh
cHBlci5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUgIldlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUHJv
Y2Vzcy5oIgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+CisjaW5jbHVkZSA8UU5ldHdvcmtSZXF1
ZXN0PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUXROZXR3b3JrQWNjZXNzTWFuYWdlcjo6UXRO
ZXR3b3JrQWNjZXNzTWFuYWdlcihXZWJQcm9jZXNzKiB3ZWJQcm9jZXNzKQorICAgIDogUU5ldHdv
cmtBY2Nlc3NNYW5hZ2VyKCkKKyAgICAsIG1fd2ViUHJvY2Vzcyh3ZWJQcm9jZXNzKQoreworfQor
CitRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKFFPYmplY3Qq
IHBhcmVudCkKKyAgICA6IFFOZXR3b3JrQWNjZXNzTWFuYWdlcihwYXJlbnQpCisgICAgLCBtX3dl
YlByb2Nlc3MoMCkKK3sKK30KKworUU5ldHdvcmtSZXBseSogUXROZXR3b3JrQWNjZXNzTWFuYWdl
cjo6Y3JlYXRlUmVxdWVzdChPcGVyYXRpb24gb3BlcmF0aW9uLCBjb25zdCBRTmV0d29ya1JlcXVl
c3QgJiByZXF1ZXN0LCBRSU9EZXZpY2UqIG91dERhdGEpCit7CisgICAgUGFnZVBvaW50ZXJXcmFw
cGVyKiBwYWdlUHRyV3JhcHBlciA9IHFvYmplY3RfY2FzdDxQYWdlUG9pbnRlcldyYXBwZXIqPihy
ZXF1ZXN0Lm9yaWdpbmF0aW5nT2JqZWN0KCkpOworICAgIGlmIChwYWdlUHRyV3JhcHBlcikgewor
ICAgICAgICBXZWJQYWdlKiB3ZWJQYWdlID0gcGFnZVB0cldyYXBwZXItPnBhZ2UoKTsKKyAgICAg
ICAgaWYgKG1fYXBwbGljYXRpb25TY2hlbWVzLmNvbnRhaW5zKHdlYlBhZ2UsIHJlcXVlc3QudXJs
KCkuc2NoZW1lKCkudG9Mb3dlcigpKSkgeworICAgICAgICAgICAgUXROZXR3b3JrUmVwbHkqIHJl
cGx5ID0gbmV3IFF0TmV0d29ya1JlcGx5KHJlcXVlc3QsIHRoaXMpOworICAgICAgICAgICAgd2Vi
UGFnZS0+cmVjZWl2ZWRBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QocmVxdWVzdCwgcmVwbHkpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlcGx5OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6Y3JlYXRlUmVxdWVzdChvcGVyYXRpb24sIHJlcXVlc3Qs
IG91dERhdGEpOworfQorCit2b2lkIFF0TmV0d29ya0FjY2Vzc01hbmFnZXI6OnJlZ2lzdGVyQXBw
bGljYXRpb25TY2hlbWUoY29uc3QgV2ViUGFnZSogcGFnZSwgY29uc3QgUVN0cmluZyYgc2NoZW1l
KQoreworICAgIG1fYXBwbGljYXRpb25TY2hlbWVzLmluc2VydChwYWdlLCBzY2hlbWUudG9Mb3dl
cigpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9R
dE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0
TmV0d29ya0FjY2Vzc01hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44ZmUxYzkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9x
dC9RdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgUXROZXR3b3JrQWNjZXNzTWFuYWdlcl9oCisjZGVmaW5lIFF0TmV0d29ya0FjY2Vz
c01hbmFnZXJfaAorCisjaW5jbHVkZSA8UU11bHRpSGFzaD4KKyNpbmNsdWRlIDxRTmV0d29ya0Fj
Y2Vzc01hbmFnZXI+CisjaW5jbHVkZSA8UVN0cmluZz4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYlBhZ2U7CitjbGFzcyBXZWJQcm9jZXNzOworCitjbGFzcyBRdE5ldHdvcmtBY2Nl
c3NNYW5hZ2VyIDogcHVibGljIFFOZXR3b3JrQWNjZXNzTWFuYWdlciB7CisgICAgUV9PQkpFQ1QK
K3B1YmxpYzoKKyAgICBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKFFPYmplY3QqIHBhcmVudCA9IDAp
OworICAgIFF0TmV0d29ya0FjY2Vzc01hbmFnZXIoV2ViUHJvY2VzcyopOworICAgIHZvaWQgcmVn
aXN0ZXJBcHBsaWNhdGlvblNjaGVtZShjb25zdCBXZWJQYWdlKiwgY29uc3QgUVN0cmluZyYgc2No
ZW1lKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgUU5ldHdvcmtSZXBseSogY3JlYXRlUmVx
dWVzdChPcGVyYXRpb24sIGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmLCBRSU9EZXZpY2UqIG91dGdv
aW5nRGF0YSA9IDApOworCitwcml2YXRlOgorICAgIFFNdWx0aUhhc2g8Y29uc3QgV2ViUGFnZSos
IFFTdHJpbmc+IG1fYXBwbGljYXRpb25TY2hlbWVzOworICAgIFdlYlByb2Nlc3MqIG1fd2ViUHJv
Y2VzczsKKworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBRdE5ldHdv
cmtBY2Nlc3NNYW5hZ2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
cXQvUXROZXR3b3JrUmVwbHkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5l
dHdvcmtSZXBseS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE5NDFk
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3
b3JrUmVwbHkuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlF0TmV0d29ya1JlcGx5LmgiCisKKyNpbmNsdWRlICJTaGFyZWRN
ZW1vcnkuaCIKKyNpbmNsdWRlICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCisjaW5jbHVk
ZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxRTmV0d29y
a0Nvb2tpZT4KKyNpbmNsdWRlIDxRTmV0d29ya1JlcGx5PgorI2luY2x1ZGUgPFFOZXR3b3JrUmVx
dWVzdD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1F0TmV0d29ya1JlcGx5OjpRdE5ldHdvcmtS
ZXBseShjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcSwgUXROZXR3b3JrQWNjZXNzTWFuYWdlciog
cGFyZW50KQorICAgIDogUU5ldHdvcmtSZXBseShwYXJlbnQpCisgICAgLCBtX2J5dGVzQXZhaWxh
YmxlKDApCisgICAgLCBtX3NoYXJlZE1lbW9yeVNpemUoMCkKK3sKKyAgICBzZXRSZXF1ZXN0KHJl
cSk7CisgICAgc2V0T3BlcmF0aW9uKFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6R2V0T3BlcmF0aW9u
KTsKKyAgICBzZXRVcmwocmVxLnVybCgpKTsKKyAgICBzZXRPcGVuTW9kZShRSU9EZXZpY2U6OlJl
YWRPbmx5KTsKKyAgICBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50VHlwZUhlYWRl
ciwgUVZhcmlhbnQoUVN0cmluZzo6ZnJvbUxvY2FsOEJpdCgidGV4dC9odG1sOyBjaGFyc2V0PVVU
Ri0xNiIpKSk7Cit9CisKK3ZvaWQgUXROZXR3b3JrUmVwbHk6OnNldERhdGEoY29uc3QgU2hhcmVk
TWVtb3J5OjpIYW5kbGUmIGhhbmRsZSwgcWludDY0IGRhdGFTaXplKQoreworICAgIG1fc2hhcmVk
TWVtb3J5ID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRP
bmx5KTsKKyAgICBpZiAoIW1fc2hhcmVkTWVtb3J5KQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2J5dGVzQXZhaWxhYmxlID0gZGF0YVNpemU7CisgICAgbV9zaGFyZWRNZW1vcnlTaXplID0gZGF0
YVNpemU7Cit9CisKK3ZvaWQgUXROZXR3b3JrUmVwbHk6OnNldFJlcGx5RGF0YShjb25zdCBRdE5l
dHdvcmtSZXBseURhdGEmIHJlcGx5RGF0YSkKK3sKKyAgICBpZiAocmVwbHlEYXRhLm1fb3BlcmF0
aW9uKQorICAgICAgICBzZXRPcGVyYXRpb24ocmVwbHlEYXRhLm1fb3BlcmF0aW9uKTsKKyAgICBp
ZiAoIXJlcGx5RGF0YS5tX2NvbnRlbnREaXNwb3NpdGlvbi5pc051bGwoKSkKKyAgICAgICAgc2V0
SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudERpc3Bvc2l0aW9uSGVhZGVyLCBRU3RyaW5n
KHJlcGx5RGF0YS5tX2NvbnRlbnREaXNwb3NpdGlvbikpOworICAgIGlmICghcmVwbHlEYXRhLm1f
Y29udGVudFR5cGUuaXNOdWxsKCkpCisgICAgICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6
OkNvbnRlbnRUeXBlSGVhZGVyLCBRU3RyaW5nKHJlcGx5RGF0YS5tX2NvbnRlbnRUeXBlKSk7Cisg
ICAgaWYgKCFyZXBseURhdGEubV9sb2NhdGlvbi5pc051bGwoKSkKKyAgICAgICAgc2V0SGVhZGVy
KFFOZXR3b3JrUmVxdWVzdDo6TG9jYXRpb25IZWFkZXIsIFFTdHJpbmcocmVwbHlEYXRhLm1fbG9j
YXRpb24pKTsKKyAgICBpZiAocmVwbHlEYXRhLm1fbGFzdE1vZGlmaWVkKQorICAgICAgICBzZXRI
ZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpMYXN0TW9kaWZpZWRIZWFkZXIsIFFEYXRlVGltZTo6ZnJv
bU1TZWNzU2luY2VFcG9jaChyZXBseURhdGEubV9sYXN0TW9kaWZpZWQpKTsKKyAgICBpZiAoIXJl
cGx5RGF0YS5tX2Nvb2tpZS5pc051bGwoKSkKKyAgICAgICAgc2V0SGVhZGVyKFFOZXR3b3JrUmVx
dWVzdDo6U2V0Q29va2llSGVhZGVyLCBRVmFyaWFudDo6ZnJvbVZhbHVlKFFOZXR3b3JrQ29va2ll
OjpwYXJzZUNvb2tpZXMoUVN0cmluZyhyZXBseURhdGEubV9jb29raWUpLnRvQXNjaWkoKSkpKTsK
KyAgICBpZiAoIXJlcGx5RGF0YS5tX3VzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgc2V0SGVh
ZGVyKFFOZXR3b3JrUmVxdWVzdDo6VXNlckFnZW50SGVhZGVyLCBRU3RyaW5nKHJlcGx5RGF0YS5t
X3VzZXJBZ2VudCkpOworICAgIGlmICghcmVwbHlEYXRhLm1fc2VydmVyLmlzTnVsbCgpKQorICAg
ICAgICBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpTZXJ2ZXJIZWFkZXIsIFFTdHJpbmcocmVw
bHlEYXRhLm1fc2VydmVyKSk7CisgICAgc2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29udGVu
dExlbmd0aEhlYWRlciwgUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXBseURhdGEubV9jb250ZW50TGVu
Z3RoKSk7CisgICAgc2V0RGF0YShyZXBseURhdGEubV9kYXRhSGFuZGxlLCByZXBseURhdGEubV9j
b250ZW50TGVuZ3RoKTsKK30KKworcWludDY0IFF0TmV0d29ya1JlcGx5OjpyZWFkRGF0YShjaGFy
KiBkYXRhLCBxaW50NjQgbWF4bGVuKQoreworICAgIHFpbnQ2NCBieXRlc1JlYWQgPSBtYXhsZW4g
PCBtX2J5dGVzQXZhaWxhYmxlID8gbWF4bGVuIDogbV9ieXRlc0F2YWlsYWJsZTsKKyAgICBpZiAo
cU1lbUNvcHkoZGF0YSwgc3RhdGljX2Nhc3Q8Y2hhcio+KG1fc2hhcmVkTWVtb3J5LT5kYXRhKCkp
ICsgbV9zaGFyZWRNZW1vcnlTaXplIC0gbV9ieXRlc0F2YWlsYWJsZSwgYnl0ZXNSZWFkKSkgewor
ICAgICAgICBtX2J5dGVzQXZhaWxhYmxlIC09IGJ5dGVzUmVhZDsKKyAgICAgICAgcmV0dXJuIGJ5
dGVzUmVhZDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3FpbnQ2NCBRdE5ldHdvcmtSZXBs
eTo6Ynl0ZXNBdmFpbGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2J5dGVzQXZhaWxhYmxl
ICsgUU5ldHdvcmtSZXBseTo6Ynl0ZXNBdmFpbGFibGUoKTsKK30KKwordm9pZCBRdE5ldHdvcmtS
ZXBseTo6c2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6S25vd25IZWFkZXJzIGhlYWRlciwgY29u
c3QgUVZhcmlhbnQgJnZhbHVlKQoreworICAgIFFOZXR3b3JrUmVwbHk6OnNldEhlYWRlcihoZWFk
ZXIsIHZhbHVlKTsKK30KKwordm9pZCBRdE5ldHdvcmtSZXBseTo6YWJvcnQoKSB7IH0KK3ZvaWQg
UXROZXR3b3JrUmVwbHk6OmNsb3NlKCkgeyB9Cit2b2lkIFF0TmV0d29ya1JlcGx5OjpzZXRSZWFk
QnVmZmVyU2l6ZShxaW50NjQgc2l6ZSkgeyB9Citib29sIFF0TmV0d29ya1JlcGx5OjpjYW5SZWFk
TGluZSAoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKwordm9pZCBRdE5ldHdvcmtSZXBseTo6
ZmluYWxpemUoKQoreworICAgIFFOZXR3b3JrUmVwbHk6OnNldEZpbmlzaGVkKHRydWUpOworICAg
IGVtaXQgcmVhZHlSZWFkKCk7CisgICAgZW1pdCBmaW5pc2hlZCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9R
dE5ldHdvcmtSZXBseS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtS
ZXBseS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1OWY4ZTEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5
LmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBaZW5vIEFsYmlz
c2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUXROZXR3b3JrUmVwbHlf
aAorI2RlZmluZSBRdE5ldHdvcmtSZXBseV9oCisKKyNpbmNsdWRlICJRdE5ldHdvcmtSZXBseURh
dGEuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlIDxRQnl0ZUFycmF5Pgor
I2luY2x1ZGUgPFFEYXRlVGltZT4KKyNpbmNsdWRlIDxRTmV0d29ya1JlcGx5PgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgUXROZXR3b3JrQWNjZXNzTWFuYWdlcjsKKworY2xhc3MgUXRO
ZXR3b3JrUmVwbHkgOiBwdWJsaWMgUU5ldHdvcmtSZXBseSB7CitwdWJsaWM6CisgICAgUXROZXR3
b3JrUmVwbHkoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiwgUXROZXR3b3JrQWNjZXNzTWFuYWdlciog
cGFyZW50KTsKKworICAgIHZpcnR1YWwgcWludDY0IHJlYWREYXRhKGNoYXIgKmRhdGEsIHFpbnQ2
NCBtYXhsZW4pOworICAgIHZpcnR1YWwgcWludDY0IGJ5dGVzQXZhaWxhYmxlKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpLbm93bkhlYWRlcnMsIGNvbnN0IFFW
YXJpYW50ICZ2YWx1ZSk7CisgICAgdm9pZCBzZXREYXRhKGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFu
ZGxlJiwgcWludDY0IGRhdGFTaXplKTsKKyAgICB2b2lkIHNldFJlcGx5RGF0YShjb25zdCBRdE5l
dHdvcmtSZXBseURhdGEmKTsKKyAgICB2b2lkIGZpbmFsaXplKCk7CisKK3Byb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKKworICAgIC8vIHJlaW1wbGVtZW50ZWQgZnJvbSBRTmV0
d29ya1JlcGx5IC8gUUlPRGV2aWNlCisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CisgICAgdmly
dHVhbCB2b2lkIHNldFJlYWRCdWZmZXJTaXplKHFpbnQ2NCk7CisgICAgdmlydHVhbCBib29sIGNh
blJlYWRMaW5lKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgcWludDY0IG1fYnl0ZXNBdmFpbGFi
bGU7CisgICAgUUJ5dGVBcnJheSBtX2J1ZmZlcjsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBt
X3NoYXJlZE1lbW9yeTsKKyAgICBxaW50NjQgbV9zaGFyZWRNZW1vcnlTaXplOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBRdE5ldHdvcmtSZXBseV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAKaW5kZXggZDk0OTIwNi4u
YTJiZWFjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9j
ZXNzUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0
LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKICNp
bmNsdWRlICJRdEJ1aWx0aW5CdW5kbGUuaCIKKyNpbmNsdWRlICJRdE5ldHdvcmtBY2Nlc3NNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oIgogCkBAIC02Nyw3ICs2OCw3IEBAIHN0YXRpYyB2b2lkIHBh
cmVudFByb2Nlc3NEaWVkQ2FsbGJhY2sodm9pZCopCiAKIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplV2ViUHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzLCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykKIHsKLSAg
ICBtX25ldHdvcmtBY2Nlc3NNYW5hZ2VyID0gbmV3IFFOZXR3b3JrQWNjZXNzTWFuYWdlcjsKKyAg
ICBtX25ldHdvcmtBY2Nlc3NNYW5hZ2VyID0gbmV3IFF0TmV0d29ya0FjY2Vzc01hbmFnZXIodGhp
cyk7CiAgICAgQVNTRVJUKCFwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0
eSgpICYmICFwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpOwogICAg
IFdlYkNvcmU6OlNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBXZWJDb3JlOjpTaGFyZWRDb29raWVK
YXJRdDo6Y3JlYXRlKHBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeSk7CiAgICAgbV9u
ZXR3b3JrQWNjZXNzTWFuYWdlci0+c2V0Q29va2llSmFyKGphcik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvcXR3ZWJraXQtZXhwb3J0Lm1hcCBiL1NvdXJjZS9xdHdlYmtpdC1leHBvcnQubWFwCmluZGV4
IDQ5NThjODUuLjNhZjg0OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9xdHdlYmtpdC1leHBvcnQubWFw
CisrKyBiL1NvdXJjZS9xdHdlYmtpdC1leHBvcnQubWFwCkBAIC0xNDgsNiArMTQ4LDEyIEBAIHF3
a18xLjAgewogICAgICAgICAqUVdlYk5hdmlnYXRpb25SZXF1ZXN0OwogICAgICAgICBub24tdmly
dHVhbD90aHVuaz90bz9RV2ViTmF2aWdhdGlvblJlcXVlc3QqOwogICAgICAgICBRV2ViTmF2aWdh
dGlvblJlcXVlc3Q6Oio7CisgICAgICAgICpRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZTsKKyAgICAg
ICAgUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU6Oio7CisgICAgICAgICpRUXVpY2tOZXR3b3JrUmVx
dWVzdDsKKyAgICAgICAgUVF1aWNrTmV0d29ya1JlcXVlc3Q6Oio7CisgICAgICAgICpRUXVpY2tO
ZXR3b3JrUmVwbHk7CisgICAgICAgIFFRdWlja05ldHdvcmtSZXBseTo6KjsKIAogCiAgICAgICAg
ICMgV2ViS2l0IDIgQyBBUEkgbWFuZ2xlZCBpbiBDKysK
</data>
<flag name="commit-queue"
          id="120561"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120445</attachid>
            <date>2011-12-23 02:28:14 -0800</date>
            <delta_ts>2012-01-05 04:10:12 -0800</delta_ts>
            <desc>patch for review. - replaced PagePointerWrapper with QObject property</desc>
            <filename>74931_20111223-111422.patch</filename>
            <type>text/plain</type>
            <size>63460</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAwNzhkMGY2Li5iNzVkZTM0
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTEtMTItMjAgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
W1F0XVtXSzJdIEltcGxlbWVudCBjdXN0b20gVVJMIHNjaGVtZXMgZGVmaW5lZCBpbiBRTUwuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkzMQorCisg
ICAgICAgIEFkZCBuZXcgY2xhc3NlcyB0byB0aGUgZXhwb3J0IG1hcC4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9xdHdlYmtpdC1leHBv
cnQubWFwOgorCiAyMDExLTEyLTIwICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBlbWFjczogdW5yZXZpZXdlZC4gYWRkIHNldHRpbmdzIGZvciBlZGl0
aW5nIGpzIGZpbGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAyOTI4YmNkLi5mOGRiNmRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTEyLTIwICBaZW5vIEFsYmlzc2VyICA8emVu
b0B3ZWJraXQub3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQgY3VzdG9tIFVSTCBz
Y2hlbWVzIGRlZmluZWQgaW4gUU1MLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzQ5MzEKKworICAgICAgICBNYWtlIGNsYXNzZXMgUVF1aWNrVXJsU2No
ZW1lRGVsZWdhdGUsIFFRdWlja05ldHdvcmtSZXF1ZXN0CisgICAgICAgIGFuZCBRUXVpY2tOZXR3
b3JrUmVwbHkgYWNjZXNzaWJsZSBmcm9tIFFNTC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGRlY2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVnaW4u
Y3BwOgorCiAyMDExLTEyLTIwICBSYWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3Nz
YS5vcmc+CiAKICAgICAgICAgW1F0XSBFeHRlbmQgUVF1aWNrV2Vidmlldzo6bmF2aWdhdGlvblJl
cXVlc3RlZCBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhw
ZXJpbWVudGFsL3BsdWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVy
aW1lbnRhbC9wbHVnaW4uY3BwCmluZGV4IGQyODkyMjkuLjIyNWY2YjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVudGFsL3BsdWdpbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9leHBlcmltZW50YWwvcGx1Z2luLmNwcApAQCAt
NTIsNiArNTIsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgUU9iamVjdDo6dHIoIkNhbm5vdCBj
cmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2YgV2ViVmlld0V4cGVyaW1lbnRhbCIpKTsKICAgICAg
ICAgcW1sUmVnaXN0ZXJVbmNyZWF0YWJsZVR5cGU8UVdlYlZpZXdwb3J0SW5mbz4odXJpLCAzLCAw
LCAiUVdlYlZpZXdwb3J0SW5mbyIsCiAgICAgICAgICAgICBRT2JqZWN0Ojp0cigiQ2Fubm90IGNy
ZWF0ZSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiBRV2ViVmlld3BvcnRJbmZvIikpOworICAgICAgICBx
bWxSZWdpc3RlclR5cGU8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+KHVyaSwgMywgMCwgIlVybFNj
aGVtZURlbGVnYXRlIik7CisgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVUeXBlPFFRdWlj
a05ldHdvcmtSZXF1ZXN0Pih1cmksIDMsIDAsICJOZXR3b3JrUmVxdWVzdCIsCisgICAgICAgICAg
ICBRT2JqZWN0Ojp0cigiTmV0d29ya1JlcXVlc3Qgc2hvdWxkIG5vdCBiZSBjcmVhdGVkIGZyb20g
UU1MIikpOworICAgICAgICBxbWxSZWdpc3RlclVuY3JlYXRhYmxlVHlwZTxRUXVpY2tOZXR3b3Jr
UmVwbHk+KHVyaSwgMywgMCwgIk5ldHdvcmtSZXBseSIsCisgICAgICAgICAgICBRT2JqZWN0Ojp0
cigiTmV0d29ya1JlcGx5IHNob3VsZCBub3QgYmUgY3JlYXRlZCBmcm9tIFFNTCIpKTsKICAgICB9
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggNTAzMTBlNy4uZjAwNWMwOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDExMiBAQAorMjAxMS0xMi0yMiAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9yZz4K
KworICAgICAgICBbUXRdW1dLMl0gSW1wbGVtZW50IGN1c3RvbSBVUkwgc2NoZW1lcyBkZWZpbmVk
IGluIFFNTC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc0OTMxCisKKyAgICAgICAgQWxsb3cgY3JlYXRpb24gb2YgY3VzdG9tIFVybFNjaGVtZURlbGVn
YXRlcyBmcm9tIFFNTC4KKyAgICAgICAgQSBVcmxTY2hlbWVEZWxlZ2F0ZSBjb250YWlucyBhIGhh
bmRsZXIgc2lnbmFsIHRoYXQgaXMgdHJpZ2dlcmVkCisgICAgICAgIHdoZW4gYSB1cmwgbWF0Y2hp
bmcgdGhlIGRlZmluZWQgc2NoZW1lIGlzIHJlcXVlc3RlZC4KKyAgICAgICAgVG8gYWxsb3cgZm9y
IHRoaXMgYSBkZXJpdmF0aW9uIG9mIFFOZXR3b3JrQWNjZXNzTWFuYWdlcgorICAgICAgICBpcyBu
ZWNlc3NhcnkuCisgICAgICAgIFRoZSByZXF1ZXN0IGlzIHRoZW4gaGFuZGxlZCBpbiBRTUwvSlMg
YW5kIGEgcmVwbHkKKyAgICAgICAgaXMgc2VudCBiYWNrIGZyb20gdGhlIFVJUHJvY2VzcyB0byB0
aGUgV2ViUHJvY2Vzcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFNoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5RGF0YTo6UXROZXR3b3JrUmVwbHlEYXRhKToKKyAgICAg
ICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpRdE5ldHdvcmtSZXBseURhdGE6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL3F0L1F0TmV0
d29ya1JlcXVlc3REYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXF1
ZXN0RGF0YTo6UXROZXR3b3JrUmVxdWVzdERhdGEpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdv
cmtSZXF1ZXN0RGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVxdWVz
dERhdGE6OmRlY29kZSk6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHA6IEFkZGVkLgorICAgICAgICAoUVF1aWNr
TmV0d29ya1JlcGx5OjpRUXVpY2tOZXR3b3JrUmVwbHkpOgorICAgICAgICAoUVF1aWNrTmV0d29y
a1JlcGx5Ojpjb250ZW50VHlwZSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldENv
bnRlbnRUeXBlKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6b3BlcmF0aW9uKToKKyAg
ICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0T3BlcmF0aW9uKToKKyAgICAgICAgKFFRdWlj
a05ldHdvcmtSZXBseTo6Y29udGVudERpc3Bvc2l0aW9uKToKKyAgICAgICAgKFFRdWlja05ldHdv
cmtSZXBseTo6c2V0Q29udGVudERpc3Bvc2l0aW9uKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtS
ZXBseTo6bG9jYXRpb24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRMb2NhdGlv
bik6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6Omxhc3RNb2RpZmllZCk6CisgICAgICAg
IChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldExhc3RNb2RpZmllZCk6CisgICAgICAgIChRUXVpY2tO
ZXR3b3JrUmVwbHk6OmNvb2tpZSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldENv
b2tpZSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnVzZXJBZ2VudCk6CisgICAgICAg
IChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldFVzZXJBZ2VudCk6CisgICAgICAgIChRUXVpY2tOZXR3
b3JrUmVwbHk6OnNlcnZlcik6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldFNlcnZl
cik6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OmRhdGEpOgorICAgICAgICAoUVF1aWNr
TmV0d29ya1JlcGx5OjpzZXREYXRhKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2Vu
ZCk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6Om5ldHdvcmtSZXF1ZXN0RGF0YSk6Cisg
ICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldE5ldHdvcmtSZXF1ZXN0RGF0YSk6CisgICAg
ICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6Om5ldHdvcmtSZXBseURhdGEpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5X3AuaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVxdWVzdF9wLmg6IEFkZGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFFRdWlja1VybFNjaGVtZURlbGVnYXRlOjpRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0
ZSk6CisgICAgICAgIChRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZTo6c2NoZW1lKToKKyAgICAgICAg
KFFRdWlja1VybFNjaGVtZURlbGVnYXRlOjpzZXRTY2hlbWUpOgorICAgICAgICAoUVF1aWNrVXJs
U2NoZW1lRGVsZWdhdGU6OnJlcXVlc3QpOgorICAgICAgICAoUVF1aWNrVXJsU2NoZW1lRGVsZWdh
dGU6OnJlcGx5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRl
bGVnYXRlX3AuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3LmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OlFRdWlja1dlYlZp
ZXdFeHBlcmltZW50YWwpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2No
ZW1lRGVsZWdhdGVzQXQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2No
ZW1lRGVsZWdhdGVzQXBwZW5kKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6
OnNjaGVtZURlbGVnYXRlc0NvdW50KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50
YWw6OnNjaGVtZURlbGVnYXRlc0NsZWFyKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmlt
ZW50YWw6OnNjaGVtZURlbGVnYXRlcyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVu
dGFsOjppbnZva2VBcHBsaWNhdGlvblNjaGVtZUhhbmRsZXIpOgorICAgICAgICAoUVF1aWNrV2Vi
Vmlld0V4cGVyaW1lbnRhbDo6c2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmg6CisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5jcHA6CisgICAgICAg
IChRdFBhZ2VDbGllbnQ6OmhhbmRsZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdCk6CisgICAgICAg
ICogVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9X
ZWJQYWdlUHJveHlRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVnaXN0
ZXJBcHBsaWNhdGlvblNjaGVtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVz
b2x2ZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQ
cm94eTo6c2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlTmV0d29ya2luZ0NvbnRleHQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojp+V2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0OjpzZXRPcmlnaW5hdGluZ09iamVjdCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
cXQvV2ViUGFnZVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVnaXN0ZXJBcHBs
aWNhdGlvblNjaGVtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlY2VpdmVkQXBwbGlj
YXRpb25TY2hlbWVSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YXBwbGljYXRp
b25TY2hlbWVSZXBseSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nlc3NN
YW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya0FjY2Vzc01hbmFn
ZXI6OlF0TmV0d29ya0FjY2Vzc01hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyOjpjcmVhdGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3Jr
QWNjZXNzTWFuYWdlcjo6cmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAqIFdl
YlByb2Nlc3MvcXQvUXROZXR3b3JrUmVwbHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
UXROZXR3b3JrUmVwbHk6OlF0TmV0d29ya1JlcGx5KToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3
b3JrUmVwbHk6OnNldERhdGEpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6c2V0
UmVwbHlEYXRhKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OnJlYWREYXRhKToK
KyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OmJ5dGVzQXZhaWxhYmxlKToKKyAgICAg
ICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OnNldEhlYWRlcik6CisgICAgICAgIChXZWJLaXQ6
OlF0TmV0d29ya1JlcGx5OjphYm9ydCk6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5
OjpjbG9zZSk6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5OjpzZXRSZWFkQnVmZmVy
U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5OjpjYW5SZWFkTGluZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5OjpmaW5hbGl6ZSk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L3F0L1dlYlByb2Nlc3NRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRm
b3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorCiAyMDExLTEyLTIwICBTaW1vbiBIYXVzbWFubiAg
PHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dLMl0gUmVtb3ZlIHN0
YXR1c0Jhck1lc3NhZ2VDaGFuZ2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
cXQvUXROZXR3b3JrUmVwbHlEYXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3
b3JrUmVwbHlEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzYWM0
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9RdE5ldHdvcmtS
ZXBseURhdGEuaApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBa
ZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUXROZXR3
b3JrUmVwbHlEYXRhX2gKKyNkZWZpbmUgUXROZXR3b3JrUmVwbHlEYXRhX2gKKworI2luY2x1ZGUg
IkFyZ3VtZW50Q29kZXJzUXQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm9uY29w
eWFibGUuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+CisjaW5jbHVk
ZSA8UU5ldHdvcmtSZXF1ZXN0PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFF0TmV0d29ya1JlcGx5RGF0YSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoUXROZXR3b3JrUmVwbHlEYXRhKTsKK3B1YmxpYzoKKyAgICBRdE5l
dHdvcmtSZXBseURhdGEoKQorICAgICAgICA6IG1fY29udGVudExlbmd0aCgwKQorICAgICAgICAs
IG1fbGFzdE1vZGlmaWVkKDApCisgICAgeyB9CisKKyAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpB
cmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0CisgICAgeworICAgICAgICBlbmNvZGVyLT5l
bmNvZGUobV91cmxTdHJpbmcpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKG1fb3BlcmF0
aW9uKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKG1fY29udGVudERpc3Bvc2l0aW9uKTsKKyAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlKG1fY29udGVudFR5cGUpOworICAgICAgICBlbmNvZGVyLT5l
bmNvZGVVSW50NjQobV9jb250ZW50TGVuZ3RoKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKG1f
bG9jYXRpb24pOworICAgICAgICBlbmNvZGVyLT5lbmNvZGVVSW50NjQobV9sYXN0TW9kaWZpZWQp
OworICAgICAgICBlbmNvZGVyLT5lbmNvZGUobV9jb29raWUpOworICAgICAgICBlbmNvZGVyLT5l
bmNvZGUobV91c2VyQWdlbnQpOworICAgICAgICBlbmNvZGVyLT5lbmNvZGUobV9zZXJ2ZXIpOwor
ICAgICAgICBlbmNvZGVyLT5lbmNvZGUobV9yZXBseVV1aWQpOworICAgICAgICBlbmNvZGVyLT5l
bmNvZGUobV9kYXRhSGFuZGxlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBRdE5ldHdvcmtSZXBseURhdGEmIGRlc3Rp
bmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24u
bV91cmxTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRl
Y29kZXItPmRlY29kZUVudW0oZGVzdGluYXRpb24ubV9vcGVyYXRpb24pKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShkZXN0aW5hdGlvbi5t
X2NvbnRlbnREaXNwb3NpdGlvbikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fY29udGVudFR5cGUpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQ2NChk
ZXN0aW5hdGlvbi5tX2NvbnRlbnRMZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShkZXN0aW5hdGlvbi5tX2xvY2F0aW9uKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50
NjQoZGVzdGluYXRpb24ubV9sYXN0TW9kaWZpZWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShkZXN0aW5hdGlvbi5tX2Nvb2tpZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRl
c3RpbmF0aW9uLm1fdXNlckFnZW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9zZXJ2ZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShkZXN0aW5hdGlv
bi5tX3JlcGx5VXVpZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fZGF0YUhhbmRsZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFdURjo6U3Ry
aW5nIG1fdXJsU3RyaW5nOworCisgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24g
bV9vcGVyYXRpb247CisgICAgV1RGOjpTdHJpbmcgbV9jb250ZW50RGlzcG9zaXRpb247CisgICAg
V1RGOjpTdHJpbmcgbV9jb250ZW50VHlwZTsKKyAgICB1aW50NjRfdCBtX2NvbnRlbnRMZW5ndGg7
CisgICAgV1RGOjpTdHJpbmcgbV9sb2NhdGlvbjsKKyAgICB1aW50NjRfdCBtX2xhc3RNb2RpZmll
ZDsKKyAgICBXVEY6OlN0cmluZyBtX2Nvb2tpZTsKKyAgICBXVEY6OlN0cmluZyBtX3VzZXJBZ2Vu
dDsKKyAgICBXVEY6OlN0cmluZyBtX3NlcnZlcjsKKyAgICBTdHJpbmcgbV9yZXBseVV1aWQ7CisK
KyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBtX2RhdGFIYW5kbGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFF0TmV0d29ya1JlcGx5RGF0YV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuaCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9xdC9RdE5ldHdvcmtSZXF1ZXN0RGF0YS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YzNkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuaApAQCAtMCwwICsxLDc2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9y
Zz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXBseXJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFF0TmV0d29ya1JlcXVlc3REYXRhX2gKKyNkZWZpbmUg
UXROZXR3b3JrUmVxdWVzdERhdGFfaAorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNRdC5oIgor
I2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybS5oIgorI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+CisjaW5jbHVkZSA8
UU5ldHdvcmtSZXF1ZXN0PgorI2luY2x1ZGUgPFFVdWlkPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFF0TmV0d29ya1JlcXVl
c3REYXRhIHsKKyAgICBRdE5ldHdvcmtSZXF1ZXN0RGF0YSgpCisgICAgeyB9CisKKyAgICBRdE5l
dHdvcmtSZXF1ZXN0RGF0YShjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3QsIFFOZXR3b3Jr
UmVwbHkqIHJlcGx5KQorICAgIHsKKyAgICAgICAgbV9zY2hlbWUgPSByZXF1ZXN0LnVybCgpLnNj
aGVtZSgpOworICAgICAgICBtX3VybFN0cmluZyA9IHJlcXVlc3QudXJsKCkudG9TdHJpbmcoKTsK
KyAgICAgICAgbV9yZXBseVV1aWQgPSBRVXVpZDo6Y3JlYXRlVXVpZCgpLnRvU3RyaW5nKCk7Cisg
ICAgfQorCisgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKG1fc2NoZW1lKTsKKyAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlKG1fdXJsU3RyaW5nKTsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2Rl
KG1fcmVwbHlVdWlkKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBRdE5ldHdvcmtSZXF1ZXN0RGF0YSYgZGVzdGluYXRp
b24pCisgICAgeworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShkZXN0aW5hdGlvbi5tX3Nj
aGVtZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKGRlc3RpbmF0aW9uLm1fdXJsU3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9yZXBseVV1aWQp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBTdHJpbmcgbV9zY2hlbWU7CisgICAgU3RyaW5nIG1fdXJsU3RyaW5nOworICAgIFN0
cmluZyBtX3JlcGx5VXVpZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gUXROZXR3b3JrUmVxdWVzdERhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFy
Z2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggMmE0ZmU3NS4uN2NlNTNi
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9UYXJnZXQucHJpCkBAIC0xMzIsNiArMTMyLDggQEAgSEVBREVSUyArPSBcCiAgICAgU2hh
cmVkL3F0L0FyZ3VtZW50Q29kZXJzUXQuaCBcCiAgICAgU2hhcmVkL3F0L1BsYXRmb3JtQ2VydGlm
aWNhdGVJbmZvLmggXAogICAgIFNoYXJlZC9xdC9XZWJFdmVudEZhY3RvcnlRdC5oIFwKKyAgICBT
aGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRhLmggXAorICAgIFNoYXJlZC9xdC9RdE5ldHdvcmtS
ZXF1ZXN0RGF0YS5oIFwKICAgICBVSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmggXAogICAgIFVJ
UHJvY2Vzcy9BUEkvQy9XS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggXAogICAgIFVJUHJvY2Vz
cy9BUEkvQy9XS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oIFwKQEAgLTE4Myw2ICsx
ODUsOSBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJuYXZpZ2F0aW9u
aGlzdG9yeV9wX3AuaCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBc
CiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oIFwKKyAgICBVSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseV9wLmggXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrbmV0d29ya3JlcXVlc3RfcC5oIFwKKyAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3Vy
bHNjaGVtZWRlbGVnYXRlX3AuaCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2Vidmlld3BvcnRp
bmZvX3AuaCBcCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0
aW9uRGVjaXNpb25MaXN0ZW5lci5oIFwKQEAgLTM1OCw3ICszNjMsMTAgQEAgSEVBREVSUyArPSBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJDb25uZWN0aW9uVG9VSVByb2Nlc3MuaCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmggXAogICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlLmgg
XAotICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlUGFnZS5oCisgICAgV2ViUHJvY2Vz
cy9xdC9RdEJ1aWx0aW5CdW5kbGVQYWdlLmggXAorICAgIFdlYlByb2Nlc3MvcXQvUXROZXR3b3Jr
QWNjZXNzTWFuYWdlci5oIFwKKyAgICBXZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmggXAor
ICAgIFdlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVxdWVzdC5oCiAKIFNPVVJDRVMgKz0gXAogICAg
IFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRDb2RlcnMuY3BwIFwKQEAgLTUwNCw2ICs1MTIsOCBA
QCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJuYXZpZ2F0aW9uaGlzdG9y
eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgXAogICAgIFVJ
UHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFnZXByb3ZpZGVyLmNwcCBcCisgICAgVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHkuY3BwIFwKKyAgICBVSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3VybHNjaGVtZWRlbGVnYXRlLmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJl
ZmVyZW5jZXMuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJ2aWV3cG9ydGluZm8uY3Bw
IFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQ
cm94eS5jcHAgXApAQCAtNzEzLDYgKzcyMyw4IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5jcHAgXAogICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlLmNw
cCBcCiAgICAgV2ViUHJvY2Vzcy9xdC9RdEJ1aWx0aW5CdW5kbGVQYWdlLmNwcCBcCisgICAgV2Vi
UHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9x
dC9RdE5ldHdvcmtSZXBseS5jcHAgXAogICAgIFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5R
dC5jcHAgXAogICAgIFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNwcAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWViNTUwZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5
LmNwcApAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBaZW5vIEFs
Ymlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAicXF1aWNrbmV0d29ya3JlcGx5X3AuaCIKKworI2luY2x1ZGUgIlF0TmV0d29ya1JlcGx5RGF0
YS5oIgorI2luY2x1ZGUgIlF0TmV0d29ya1JlcXVlc3REYXRhLmgiCisjaW5jbHVkZSAicXF1aWNr
d2Vidmlld19wLmgiCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFFEYXRl
VGltZT4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworUVF1aWNrTmV0d29ya1JlcGx5OjpR
UXVpY2tOZXR3b3JrUmVwbHkoUU9iamVjdCogcGFyZW50KQorICAgIDogUU9iamVjdChwYXJlbnQp
CisgICAgLCBtX25ldHdvcmtSZXF1ZXN0RGF0YSgwKQorICAgICwgbV9uZXR3b3JrUmVwbHlEYXRh
KG5ldyBXZWJLaXQ6OlF0TmV0d29ya1JlcGx5RGF0YSkgeyB9CisKK1FTdHJpbmcgUVF1aWNrTmV0
d29ya1JlcGx5Ojpjb250ZW50VHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1Jl
cGx5RGF0YS0+bV9jb250ZW50VHlwZTsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNl
dENvbnRlbnRUeXBlKGNvbnN0IFFTdHJpbmcmIGNvbnRlbnRUeXBlKQoreworICAgIG1fbmV0d29y
a1JlcGx5RGF0YS0+bV9jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlOworfQorCitRTmV0d29ya0Fj
Y2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBRUXVpY2tOZXR3b3JrUmVwbHk6Om9wZXJhdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9vcGVyYXRpb247Cit9CisK
K3ZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRPcGVyYXRpb24oUU5ldHdvcmtBY2Nlc3NNYW5h
Z2VyOjpPcGVyYXRpb24gb3BlcmF0aW9uKQoreworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9v
cGVyYXRpb24gPSBvcGVyYXRpb247Cit9CisKK1FTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5Ojpj
b250ZW50RGlzcG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtSZXBseURh
dGEtPm1fY29udGVudERpc3Bvc2l0aW9uOworfQorCit2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6
c2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFFTdHJpbmcmIGRpc3Bvc2l0aW9uKQoreworICAg
IG1fbmV0d29ya1JlcGx5RGF0YS0+bV9jb250ZW50RGlzcG9zaXRpb24gPSBkaXNwb3NpdGlvbjsK
K30KKworUVN0cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6OmxvY2F0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2xvY2F0aW9uOworfQorCit2b2lkIFFRdWlj
a05ldHdvcmtSZXBseTo6c2V0TG9jYXRpb24oY29uc3QgUVN0cmluZyYgbG9jYXRpb24pCit7Cisg
ICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2xvY2F0aW9uID0gbG9jYXRpb247Cit9CisKK1FTdHJp
bmcgUVF1aWNrTmV0d29ya1JlcGx5OjpsYXN0TW9kaWZpZWQoKSBjb25zdAoreworICAgIHJldHVy
biBRRGF0ZVRpbWU6OmZyb21NU2Vjc1NpbmNlRXBvY2gobV9uZXR3b3JrUmVwbHlEYXRhLT5tX2xh
c3RNb2RpZmllZCkudG9TdHJpbmcoUXQ6OklTT0RhdGUpOworfQorCit2b2lkIFFRdWlja05ldHdv
cmtSZXBseTo6c2V0TGFzdE1vZGlmaWVkKGNvbnN0IFFTdHJpbmcmIGxhc3RNb2RpZmllZCkKK3sK
KyAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fbGFzdE1vZGlmaWVkID0gUURhdGVUaW1lOjpmcm9t
U3RyaW5nKGxhc3RNb2RpZmllZCwgUXQ6OklTT0RhdGUpLnRvTVNlY3NTaW5jZUVwb2NoKCk7Cit9
CisKK1FTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5Ojpjb29raWUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX25ldHdvcmtSZXBseURhdGEtPm1fY29va2llOworfQorCit2b2lkIFFRdWlja05ldHdv
cmtSZXBseTo6c2V0Q29va2llKGNvbnN0IFFTdHJpbmcmIGNvb2tpZSkKK3sKKyAgICBtX25ldHdv
cmtSZXBseURhdGEtPm1fY29va2llID0gY29va2llOworfQorCitRU3RyaW5nIFFRdWlja05ldHdv
cmtSZXBseTo6dXNlckFnZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlE
YXRhLT5tX3VzZXJBZ2VudDsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldFVzZXJB
Z2VudChjb25zdCBRU3RyaW5nJiB1c2VyQWdlbnQpCit7CisgICAgbV9uZXR3b3JrUmVwbHlEYXRh
LT5tX3VzZXJBZ2VudCA9IHVzZXJBZ2VudDsKK30KKworUVN0cmluZyBRUXVpY2tOZXR3b3JrUmVw
bHk6OnNlcnZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9z
ZXJ2ZXI7Cit9CisKK3ZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRTZXJ2ZXIoY29uc3QgUVN0
cmluZyYgc2VydmVyKQoreworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9zZXJ2ZXIgPSBzZXJ2
ZXI7Cit9CisKK1FTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5OjpkYXRhKCkgY29uc3QKK3sKKyAg
ICBpZiAobV9uZXR3b3JrUmVwbHlEYXRhLT5tX2RhdGFIYW5kbGUuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiBRU3RyaW5nKCk7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc20gPSBTaGFyZWRN
ZW1vcnk6OmNyZWF0ZShtX25ldHdvcmtSZXBseURhdGEtPm1fZGF0YUhhbmRsZSwgU2hhcmVkTWVt
b3J5OjpSZWFkT25seSk7CisgICAgaWYgKCFzbSkKKyAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsK
KworICAgIHVpbnQ2NF90IHN0cmluZ0xlbmd0aCA9IG1fbmV0d29ya1JlcGx5RGF0YS0+bV9jb250
ZW50TGVuZ3RoIC8gc2l6ZW9mKFVDaGFyKTsKKyAgICByZXR1cm4gUVN0cmluZyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IFFDaGFyKj4oc20tPmRhdGEoKSksIHN0cmluZ0xlbmd0aCk7Cit9CisKK3Zv
aWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXREYXRhKGNvbnN0IFFTdHJpbmcmIGRhdGEpCit7Cisg
ICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2NvbnRlbnRMZW5ndGggPSAwOworCisgICAgaWYgKGRh
dGEuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCBVQ2hhciogdWNoYXJEYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KGRhdGEuY29uc3REYXRhKCkpOworICAg
IHVpbnQ2NF90IHNtTGVuZ3RoID0gc2l6ZW9mKFVDaGFyKSAqIGRhdGEubGVuZ3RoKCk7CisKKyAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzbSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNtTGVuZ3Ro
KTsKKyAgICBpZiAoIXNtKQorICAgICAgICByZXR1cm47CisgICAgLy8gVGhlIHNpemUgb2YgdGhl
IGFsbG9jYXRlZCBzaGFyZWQgbWVtb3J5IGNhbiBiZSBiaWdnZXIgdGhhbiByZXF1ZXN0ZWQuCisg
ICAgLy8gVXN1YWxseSB0aGUgc2l6ZSB3aWxsIGJlIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgbXVs
dGlwbGUgb2YgYSBwYWdlIHNpemUuCisgICAgbWVtY3B5KHNtLT5kYXRhKCksIHVjaGFyRGF0YSwg
c21MZW5ndGgpOworCisgICAgaWYgKCFzbS0+Y3JlYXRlSGFuZGxlKG1fbmV0d29ya1JlcGx5RGF0
YS0+bV9kYXRhSGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9jb250ZW50TGVuZ3RoID0gc21MZW5ndGg7Cit9
CisKK3ZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZW5kKCkKK3sKKyAgICBRT2JqZWN0KiBzY2hl
bWVQYXJlbnQgPSBwYXJlbnQoKS0+cGFyZW50KCk7CisgICAgaWYgKCFzY2hlbWVQYXJlbnQpCisg
ICAgICAgIHJldHVybjsKKyAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsKiB3ZWJWaWV3RXhw
ZXJpbWVudGFsID0gcW9iamVjdF9jYXN0PFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqPihzY2hl
bWVQYXJlbnQtPnBhcmVudCgpKTsKKyAgICBpZiAoIXdlYlZpZXdFeHBlcmltZW50YWwpCisgICAg
ICAgIHJldHVybjsKKyAgICB3ZWJWaWV3RXhwZXJpbWVudGFsLT5zZW5kQXBwbGljYXRpb25TY2hl
bWVSZXBseSh0aGlzKTsKK30KKworV2ViS2l0OjpRdE5ldHdvcmtSZXF1ZXN0RGF0YSogUVF1aWNr
TmV0d29ya1JlcGx5OjpuZXR3b3JrUmVxdWVzdERhdGEoKSBjb25zdAoreworICAgIHJldHVybiBt
X25ldHdvcmtSZXF1ZXN0RGF0YTsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldE5l
dHdvcmtSZXF1ZXN0RGF0YShXZWJLaXQ6OlF0TmV0d29ya1JlcXVlc3REYXRhKiBkYXRhKQorewor
ICAgIG1fbmV0d29ya1JlcXVlc3REYXRhID0gZGF0YTsKKyAgICBtX25ldHdvcmtSZXBseURhdGEt
Pm1fcmVwbHlVdWlkID0gZGF0YS0+bV9yZXBseVV1aWQ7Cit9CisKK1dlYktpdDo6UXROZXR3b3Jr
UmVwbHlEYXRhKiBRUXVpY2tOZXR3b3JrUmVwbHk6Om5ldHdvcmtSZXBseURhdGEoKSBjb25zdAor
eworICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGE7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5X3AuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5X3AuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGQ5ODE2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHlfcC5oCkBA
IC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgWmVubyBBbGJpc3NlciA8
emVub0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBxcXVpY2tuZXR3b3JrcmVwbHlfcF9oCisjZGVm
aW5lIHFxdWlja25ldHdvcmtyZXBseV9wX2gKKworI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIK
KworI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KKyNpbmNsdWRlIDxRT2JqZWN0Pgor
I2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlbGlzdC5oPgorI2luY2x1ZGUgPFF0
UXVpY2svcXF1aWNraXRlbS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFF0TmV0d29y
a1JlcXVlc3REYXRhOworY2xhc3MgUXROZXR3b3JrUmVwbHlEYXRhOworfQorCitjbGFzcyBRV0VC
S0lUX0VYUE9SVCBRUXVpY2tOZXR3b3JrUmVwbHkgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9P
QkpFQ1QKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgY29udGVudFR5cGUgUkVBRCBjb250ZW50VHlw
ZSBXUklURSBzZXRDb250ZW50VHlwZSkKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgZGF0YSBSRUFE
IGRhdGEgV1JJVEUgc2V0RGF0YSkKKyAgICBRX0VOVU1TKFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6
T3BlcmF0aW9uKQorCitwdWJsaWM6CisgICAgUVF1aWNrTmV0d29ya1JlcGx5KFFPYmplY3QqIHBh
cmVudCA9IDApOworICAgIFFTdHJpbmcgY29udGVudFR5cGUoKSBjb25zdDsKKyAgICB2b2lkIHNl
dENvbnRlbnRUeXBlKGNvbnN0IFFTdHJpbmcmKTsKKyAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXI6
Ok9wZXJhdGlvbiBvcGVyYXRpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldE9wZXJhdGlvbihRTmV0
d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbik7CisgICAgUVN0cmluZyBjb250ZW50RGlzcG9z
aXRpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnREaXNwb3NpdGlvbihjb25zdCBRU3Ry
aW5nJik7CisgICAgUVN0cmluZyBsb2NhdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0TG9jYXRp
b24oY29uc3QgUVN0cmluZyYpOworICAgIFFTdHJpbmcgbGFzdE1vZGlmaWVkKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRMYXN0TW9kaWZpZWQoY29uc3QgUVN0cmluZyYpOworICAgIFFTdHJpbmcgY29v
a2llKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb29raWUoY29uc3QgUVN0cmluZyYpOworICAgIFFT
dHJpbmcgdXNlckFnZW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXRVc2VyQWdlbnQoY29uc3QgUVN0
cmluZyYpOworICAgIFFTdHJpbmcgc2VydmVyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTZXJ2ZXIo
Y29uc3QgUVN0cmluZyYpOworCisgICAgUVN0cmluZyBkYXRhKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXREYXRhKGNvbnN0IFFTdHJpbmcmIGRhdGEpOworCisgICAgV2ViS2l0OjpRdE5ldHdvcmtSZXF1
ZXN0RGF0YSogbmV0d29ya1JlcXVlc3REYXRhKCkgY29uc3Q7CisgICAgdm9pZCBzZXROZXR3b3Jr
UmVxdWVzdERhdGEoV2ViS2l0OjpRdE5ldHdvcmtSZXF1ZXN0RGF0YSogZGF0YSk7CisgICAgV2Vi
S2l0OjpRdE5ldHdvcmtSZXBseURhdGEqIG5ldHdvcmtSZXBseURhdGEoKSBjb25zdDsKKworcHVi
bGljIFFfU0xPVFM6CisgICAgdm9pZCBzZW5kKCk7CisKK3ByaXZhdGU6CisgICAgV2ViS2l0OjpR
dE5ldHdvcmtSZXF1ZXN0RGF0YSogbV9uZXR3b3JrUmVxdWVzdERhdGE7CisgICAgV2ViS2l0OjpR
dE5ldHdvcmtSZXBseURhdGEqIG1fbmV0d29ya1JlcGx5RGF0YTsKK307CisKK1FNTF9ERUNMQVJF
X1RZUEUoUVF1aWNrTmV0d29ya1JlcGx5KQorCisjZW5kaWYgLy8gcXF1aWNrbmV0d29ya3JlcGx5
X3BfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a25ldHdvcmtyZXF1ZXN0X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrbmV0d29ya3JlcXVlc3RfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
Ljc3NTMwN2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0X3AuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5k
ZWYgcXF1aWNrbmV0d29ya3JlcXVlc3RfcF9oCisjZGVmaW5lIHFxdWlja25ldHdvcmtyZXF1ZXN0
X3BfaAorCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFFPYmplY3Q+Cisj
aW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmVsaXN0Lmg+CisjaW5jbHVkZSA8UXRR
dWljay9xcXVpY2tpdGVtLmg+CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFRdWlja05ldHdvcmtS
ZXF1ZXN0IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShR
U3RyaW5nIHVybCBSRUFEIHVybCkKKworcHVibGljOgorICAgIFFRdWlja05ldHdvcmtSZXF1ZXN0
KFFPYmplY3QqIHBhcmVudCA9IDApCisgICAgICAgIDogUU9iamVjdChwYXJlbnQpIHsgfQorICAg
IFFTdHJpbmcgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KKyAgICB2b2lkIHNldFVybChj
b25zdCBRU3RyaW5nJiB1cmwpIHsgbV91cmwgPSB1cmw7IH0KKworcHJpdmF0ZToKKyAgICBRU3Ry
aW5nIG1fdXJsOworfTsKKworUU1MX0RFQ0xBUkVfVFlQRShRUXVpY2tOZXR3b3JrUmVxdWVzdCkK
KworI2VuZGlmIC8vIHFxdWlja25ldHdvcmtyZXF1ZXN0X3BfaAorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MzAyMTgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVt
ZWRlbGVnYXRlLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJxcXVpY2t1cmxzY2hlbWVkZWxlZ2F0ZV9wLmgiCisKK1FRdWlja1VybFNjaGVt
ZURlbGVnYXRlOjpRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZShRT2JqZWN0KiBwYXJlbnQpCisgICAg
OiBRT2JqZWN0KHBhcmVudCkKKyAgICAsIG1fcmVxdWVzdChuZXcgUVF1aWNrTmV0d29ya1JlcXVl
c3QodGhpcykpCisgICAgLCBtX3JlcGx5KG5ldyBRUXVpY2tOZXR3b3JrUmVwbHkodGhpcykpCit7
IH0KKworUVN0cmluZyBRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZTo6c2NoZW1lKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zY2hlbWU7Cit9CisKK3ZvaWQgUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU6
OnNldFNjaGVtZShjb25zdCBRU3RyaW5nJiBzY2hlbWUpCit7CisgICAgbV9zY2hlbWUgPSBzY2hl
bWU7CisgICAgZW1pdCBzY2hlbWVDaGFuZ2VkKCk7Cit9CisKK1FRdWlja05ldHdvcmtSZXF1ZXN0
KiBRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZTo6cmVxdWVzdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcmVxdWVzdDsKK30KKworUVF1aWNrTmV0d29ya1JlcGx5KiBRUXVpY2tVcmxTY2hlbWVEZWxl
Z2F0ZTo6cmVwbHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlcGx5OworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVn
YXRlX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1l
ZGVsZWdhdGVfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZWFhZDMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3VybHNjaGVtZWRlbGVnYXRlX3AuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgcXF1
aWNrdXJsc2NoZW1lZGVsZWdhdGVfcF9oCisjZGVmaW5lIHFxdWlja3VybHNjaGVtZWRlbGVnYXRl
X3BfaAorCisjaW5jbHVkZSAicXF1aWNrbmV0d29ya3JlcGx5X3AuaCIKKyNpbmNsdWRlICJxcXVp
Y2tuZXR3b3JrcmVxdWVzdF9wLmgiCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1
ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+CisKKworY2xhc3Mg
UVdFQktJVF9FWFBPUlQgUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUgOiBwdWJsaWMgUU9iamVjdCB7
CisgICAgUV9PQkpFQ1QKKyAgICBRX1BST1BFUlRZKFFTdHJpbmcgc2NoZW1lIFJFQUQgc2NoZW1l
IFdSSVRFIHNldFNjaGVtZSBOT1RJRlkgc2NoZW1lQ2hhbmdlZCkKKyAgICBRX1BST1BFUlRZKFFR
dWlja05ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0IFJFQUQgcmVxdWVzdCkKKyAgICBRX1BST1BFUlRZ
KFFRdWlja05ldHdvcmtSZXBseSogcmVwbHkgUkVBRCByZXBseSkKKworcHVibGljOgorICAgIFFR
dWlja1VybFNjaGVtZURlbGVnYXRlKFFPYmplY3QqIHBhcmVudCA9IDApOworICAgIFFTdHJpbmcg
c2NoZW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTY2hlbWUoY29uc3QgUVN0cmluZyYgc2NoZW1l
KTsKKyAgICBRUXVpY2tOZXR3b3JrUmVxdWVzdCogcmVxdWVzdCgpIGNvbnN0OworICAgIFFRdWlj
a05ldHdvcmtSZXBseSogcmVwbHkoKSBjb25zdDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgc2No
ZW1lQ2hhbmdlZCgpOworICAgIHZvaWQgcmVjZWl2ZWRSZXF1ZXN0KCk7CisKK3ByaXZhdGU6Cisg
ICAgUVN0cmluZyBtX3NjaGVtZTsKKyAgICBRUXVpY2tOZXR3b3JrUmVxdWVzdCogbV9yZXF1ZXN0
OworICAgIFFRdWlja05ldHdvcmtSZXBseSogbV9yZXBseTsKK307CisKK1FNTF9ERUNMQVJFX1RZ
UEUoUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUpCisKKyNlbmRpZiAvLyBxcXVpY2t1cmxzY2hlbWVk
ZWxlZ2F0ZV9wX2gKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3LmNwcAppbmRleCA0ZGJmOTM4Li41N2NmZWUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKQEAgLTU5NSw2ICs1
OTUsNyBAQCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpRUXVpY2tXZWJWaWV3RXhwZXJpbWVu
dGFsKFFRdWlja1dlYlZpZXcgKndlYlZpZXcpCiAgICAgOiBRT2JqZWN0KHdlYlZpZXcpCiAgICAg
LCBxX3B0cih3ZWJWaWV3KQogICAgICwgZF9wdHIod2ViVmlldy0+ZF9wdHIuZGF0YSgpKQorICAg
ICwgc2NoZW1lUGFyZW50KG5ldyBRT2JqZWN0KHRoaXMpKQogICAgICwgbV92aWV3cG9ydEluZm8o
bmV3IFFXZWJWaWV3cG9ydEluZm8od2ViVmlldy0+ZF9wdHIuZGF0YSgpLCB0aGlzKSkKIHsKIH0K
QEAgLTY5OCw2ICs2OTksNjkgQEAgYm9vbCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjp1c2VU
cmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIoKSBjb25zdAogICAgIHJldHVybiBkLT51c2VUcmFk
aXRpb25hbERlc2t0b3BCZWhhdmlvdXI7CiB9CiAKK1FRdWlja1VybFNjaGVtZURlbGVnYXRlKiBR
UXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVEZWxlZ2F0ZXNBdChRRGVjbGFyYXRpdmVM
aXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+KiBwcm9wZXJ0eSwgaW50IGluZGV4
KQoreworICAgIGNvbnN0IFFPYmplY3RMaXN0IGNoaWxkcmVuID0gcHJvcGVydHktPm9iamVjdC0+
Y2hpbGRyZW4oKTsKKyAgICBpZiAoaW5kZXggPCBjaGlsZHJlbi5jb3VudCgpKQorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUqPihjaGlsZHJlbi5hdChp
bmRleCkpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50
YWw6OnNjaGVtZURlbGVnYXRlc0FwcGVuZChRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNr
VXJsU2NoZW1lRGVsZWdhdGU+KiBwcm9wZXJ0eSwgUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUgKnNj
aGVtZSkKK3sKKyAgICBRT2JqZWN0KiBzY2hlbWVQYXJlbnQgPSBwcm9wZXJ0eS0+b2JqZWN0Owor
ICAgIHNjaGVtZS0+c2V0UGFyZW50KHNjaGVtZVBhcmVudCk7CisgICAgUVF1aWNrV2ViVmlld0V4
cGVyaW1lbnRhbCogd2ViVmlldyA9IHFvYmplY3RfY2FzdDxRUXVpY2tXZWJWaWV3RXhwZXJpbWVu
dGFsKj4ocHJvcGVydHktPm9iamVjdC0+cGFyZW50KCkpOworICAgIGlmICghd2ViVmlldykKKyAg
ICAgICAgcmV0dXJuOworICAgIFFRdWlja1dlYlZpZXdQcml2YXRlKiBkID0gd2ViVmlldy0+ZF9m
dW5jKCk7CisgICAgZC0+d2ViUGFnZVByb3h5LT5yZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKHNj
aGVtZS0+c2NoZW1lKCkpOworfQorCitpbnQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2No
ZW1lRGVsZWdhdGVzQ291bnQoUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVt
ZURlbGVnYXRlPiogcHJvcGVydHkpCit7CisgICAgcmV0dXJuIHByb3BlcnR5LT5vYmplY3QtPmNo
aWxkcmVuKCkuY291bnQoKTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpz
Y2hlbWVEZWxlZ2F0ZXNDbGVhcihRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2No
ZW1lRGVsZWdhdGU+KiBwcm9wZXJ0eSkKK3sKKyAgICBjb25zdCBRT2JqZWN0TGlzdCBjaGlsZHJl
biA9IHByb3BlcnR5LT5vYmplY3QtPmNoaWxkcmVuKCk7CisgICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IGNoaWxkcmVuLmNvdW50KCk7IGluZGV4KyspIHsKKyAgICAgICAgUU9iamVjdCog
Y2hpbGQgPSBjaGlsZHJlbi5hdChpbmRleCk7CisgICAgICAgIGNoaWxkLT5zZXRQYXJlbnQoMCk7
CisgICAgICAgIGRlbGV0ZSBjaGlsZDsKKyAgICB9Cit9CisKK1FEZWNsYXJhdGl2ZUxpc3RQcm9w
ZXJ0eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4gUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6
c2NoZW1lRGVsZWdhdGVzKCkKK3sKKyAgICByZXR1cm4gUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5
PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPihzY2hlbWVQYXJlbnQsIDAsCisgICAgICAgICAgICBR
UXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVEZWxlZ2F0ZXNBcHBlbmQsCisgICAgICAg
ICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVEZWxlZ2F0ZXNDb3VudCwKKyAg
ICAgICAgICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURlbGVnYXRlc0F0LAor
ICAgICAgICAgICAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzQ2xl
YXIpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6Omludm9rZUFwcGxpY2F0
aW9uU2NoZW1lSGFuZGxlcihRdE5ldHdvcmtSZXF1ZXN0RGF0YSogcmVxdWVzdCkKK3sKKyAgICBj
b25zdCBRT2JqZWN0TGlzdCBjaGlsZHJlbiA9IHNjaGVtZVBhcmVudC0+Y2hpbGRyZW4oKTsKKyAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgY2hpbGRyZW4uY291bnQoKTsgaW5kZXgrKykg
eworICAgICAgICBRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZSogdXJsU2NoZW1lID0gcW9iamVjdF9j
YXN0PFFRdWlja1VybFNjaGVtZURlbGVnYXRlKj4oY2hpbGRyZW4uYXQoaW5kZXgpKTsKKyAgICAg
ICAgaWYgKCF1cmxTY2hlbWUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCF1
cmxTY2hlbWUtPnNjaGVtZSgpLmNvbXBhcmUoUVN0cmluZyhyZXF1ZXN0LT5tX3NjaGVtZSksIFF0
OjpDYXNlSW5zZW5zaXRpdmUpKSB7CisgICAgICAgICAgICB1cmxTY2hlbWUtPnJlcGx5KCktPnNl
dE5ldHdvcmtSZXF1ZXN0RGF0YShyZXF1ZXN0KTsKKyAgICAgICAgICAgIGVtaXQgdXJsU2NoZW1l
LT5yZWNlaXZlZFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZW5kQXBwbGljYXRpb25T
Y2hlbWVSZXBseShRUXVpY2tOZXR3b3JrUmVwbHkqIHJlcGx5KQoreworICAgIGRfcHRyLT53ZWJQ
YWdlUHJveHktPnNlbmRBcHBsaWNhdGlvblNjaGVtZVJlcGx5KHJlcGx5KTsKK30KKwogdm9pZCBR
UXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpnb0ZvcndhcmRUbyhpbnQgaW5kZXgpCiB7CiAgICAg
ZF9wdHItPm5hdmlnYXRpb25IaXN0b3J5LT5kLT5nb0ZvcndhcmRUbyhpbmRleCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaAppbmRleCA0
MjA0NTNkLi5iYjc0N2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnZpZXdfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrd2Vidmlld19wLmgKQEAgLTIxLDcgKzIxLDExIEBACiAjaWZuZGVmIHFxdWlja3dl
YnZpZXdfcF9oCiAjZGVmaW5lIHFxdWlja3dlYnZpZXdfcF9oCiAKKyNpbmNsdWRlICJxcXVpY2tu
ZXR3b3JrcmVwbHlfcC5oIgorI2luY2x1ZGUgInFxdWlja25ldHdvcmtyZXF1ZXN0X3AuaCIKKyNp
bmNsdWRlICJxcXVpY2t1cmxzY2hlbWVkZWxlZ2F0ZV9wLmgiCiAjaW5jbHVkZSAicXdlYmtpdGds
b2JhbC5oIgorI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlbGlzdC5oPgogI2lu
Y2x1ZGUgPFF0UXVpY2svcXF1aWNraXRlbS5oPgogCiBjbGFzcyBRV2ViTmF2aWdhdGlvblJlcXVl
c3Q7CkBAIC0xNzYsNiArMTgwLDcgQEAgY2xhc3MgUVdFQktJVF9FWFBPUlQgUVF1aWNrV2ViVmll
d0V4cGVyaW1lbnRhbCA6IHB1YmxpYyBRT2JqZWN0IHsKICAgICBRX1BST1BFUlRZKFFXZWJQcmVm
ZXJlbmNlcyogcHJlZmVyZW5jZXMgUkVBRCBwcmVmZXJlbmNlcyBDT05TVEFOVCBGSU5BTCkKICAg
ICBRX1BST1BFUlRZKGJvb2wgdXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyIFJFQUQgdXNl
VHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyIFdSSVRFIHNldFVzZVRyYWRpdGlvbmFsRGVza3Rv
cEJlaGF2aW91cikKICAgICBRX1BST1BFUlRZKFFXZWJWaWV3cG9ydEluZm8qIHZpZXdwb3J0SW5m
byBSRUFEIHZpZXdwb3J0SW5mbyBDT05TVEFOVCBGSU5BTCkKKyAgICBRX1BST1BFUlRZKFFEZWNs
YXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4gdXJsU2NoZW1lRGVs
ZWdhdGVzIFJFQUQgc2NoZW1lRGVsZWdhdGVzKQogICAgIFFfRU5VTVMoTmF2aWdhdGlvblJlcXVl
c3RBY3Rpb24pCiAKIHB1YmxpYzoKQEAgLTIwMiw2ICsyMDcsMTQgQEAgcHVibGljOgogICAgIFFX
ZWJOYXZpZ2F0aW9uSGlzdG9yeSogbmF2aWdhdGlvbkhpc3RvcnkoKSBjb25zdDsKICAgICBRUXVp
Y2tXZWJQYWdlKiBwYWdlKCk7CiAKKyAgICBzdGF0aWMgUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUq
IHNjaGVtZURlbGVnYXRlc0F0KFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hl
bWVEZWxlZ2F0ZT4qLCBpbnQgaW5kZXgpOworICAgIHN0YXRpYyB2b2lkIHNjaGVtZURlbGVnYXRl
c0FwcGVuZChRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+
KiwgUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUqKTsKKyAgICBzdGF0aWMgaW50IHNjaGVtZURlbGVn
YXRlc0NvdW50KFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0
ZT4qKTsKKyAgICBzdGF0aWMgdm9pZCBzY2hlbWVEZWxlZ2F0ZXNDbGVhcihRRGVjbGFyYXRpdmVM
aXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+Kik7CisgICAgUURlY2xhcmF0aXZl
TGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiBzY2hlbWVEZWxlZ2F0ZXMoKTsK
KyAgICB2b2lkIGludm9rZUFwcGxpY2F0aW9uU2NoZW1lSGFuZGxlcihXZWJLaXQ6OlF0TmV0d29y
a1JlcXVlc3REYXRhKik7CisgICAgdm9pZCBzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseShRUXVp
Y2tOZXR3b3JrUmVwbHkqKTsKKwogcHVibGljIFFfU0xPVFM6CiAgICAgdm9pZCBzZXRVc2VUcmFk
aXRpb25hbERlc2t0b3BCZWhhdmlvdXIoYm9vbCBlbmFibGUpOwogICAgIHZvaWQgZ29CYWNrVG8o
aW50IGluZGV4KTsKQEAgLTIyMCw2ICsyMzMsNyBAQCBRX1NJR05BTFM6CiBwcml2YXRlOgogICAg
IFFRdWlja1dlYlZpZXcqIHFfcHRyOwogICAgIFFRdWlja1dlYlZpZXdQcml2YXRlKiBkX3B0cjsK
KyAgICBRT2JqZWN0KiBzY2hlbWVQYXJlbnQ7CiAgICAgUVdlYlZpZXdwb3J0SW5mbyogbV92aWV3
cG9ydEluZm87CiAKICAgICBmcmllbmQgY2xhc3MgUXRXZWJQYWdlVUlDbGllbnQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggMDgzNmIwMC4uZGMwYzk4ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMzYsNiArMzYsOSBAQAog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAjaW5jbHVkZSAiTmF0aXZlV2ViVG91Y2hFdmVudC5o
IgogI2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSAiUXROZXR3b3JrUmVxdWVzdERh
dGEuaCIKKyNlbmRpZgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFu
YWdlclByb3h5LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgogI2lu
Y2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKQEAgLTkyLDYgKzk1LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBzdHJ1Y3QgV2luZG93RmVhdHVyZXM7CiB9CiAKKyNpZiBQTEFURk9STShR
VCkKK2NsYXNzIFFRdWlja05ldHdvcmtSZXBseTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFD
KQogI2lmZGVmIF9fT0JKQ19fCiBAY2xhc3MgV0tWaWV3OwpAQCAtMzAzLDYgKzMxMCwxMSBAQCBw
dWJsaWM6CiAgICAgCiAgICAgYm9vbCBtYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb247IH0KICAgICB2b2lkIHNldE1h
aW50YWluc0luYWN0aXZlU2VsZWN0aW9uKGJvb2wpOworI2lmIFBMQVRGT1JNKFFUKQorICAgIHZv
aWQgcmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSk7CisgICAg
dm9pZCByZXNvbHZlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KFF0TmV0d29ya1JlcXVlc3REYXRh
KTsKKyAgICB2b2lkIHNlbmRBcHBsaWNhdGlvblNjaGVtZVJlcGx5KGNvbnN0IFFRdWlja05ldHdv
cmtSZXBseSopOworI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKICAgICB2b2lkIHNldENvbXBv
c2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5k
ZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgdWludDY0X3Qgc2Vs
ZWN0aW9uRW5kLCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxh
Y2VtZW50UmFuZ2VFbmQpOwpAQCAtOTgyLDYgKzk5NCwxMCBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyBXS1BhZ2VEZWJ1Z1BhaW50RmxhZ3Mgc19kZWJ1Z1BhaW50RmxhZ3M7CiAKICAgICBib29sIG1f
c2hvdWxkU2VuZEV2ZW50c1N5bmNocm9ub3VzbHk7CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBR
U2V0PFF0TmV0d29ya1JlcXVlc3REYXRhKj4gbV9hcHBsaWNhdGlvblNjaGVtZVJlcXVlc3RzOwor
I2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDBiZjFmYmQuLjVjMjEz
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbgpAQCAtMTIzLDYgKzEyMywxMCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewog
ICAgIERpZFJlY2VpdmVDb250ZW50TGVuZ3RoRm9yUmVzb3VyY2UodWludDY0X3QgZnJhbWVJRCwg
dWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRfdCBjb250ZW50TGVuZ3RoKQogICAg
IERpZEZpbmlzaExvYWRGb3JSZXNvdXJjZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCByZXNv
dXJjZUlkZW50aWZpZXIpCiAgICAgRGlkRmFpbExvYWRGb3JSZXNvdXJjZSh1aW50NjRfdCBmcmFt
ZUlELCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIsIFdlYkNvcmU6OlJlc291cmNlRXJyb3Ig
ZXJyb3IpCisjaWYgUExBVEZPUk0oUVQpCisgICAgUmVzb2x2ZUFwcGxpY2F0aW9uU2NoZW1lUmVx
dWVzdChXZWJLaXQ6OlF0TmV0d29ya1JlcXVlc3REYXRhIHJlcXVlc3QpCisjZW5kaWYKKwogCiAg
ICAgIyBDdXN0b20gcmVwcmVzZW50YXRpb25zCiAgICAgRGlkRmluaXNoTG9hZGluZ0RhdGFGb3JD
dXN0b21SZXByZXNlbnRhdGlvbihXVEY6OlN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSwgQ29yZUlQ
Qzo6RGF0YVJlZmVyZW5jZSBkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0UGFnZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQ
YWdlQ2xpZW50LmNwcAppbmRleCA0MTUzNTA1Li4wZWMyYjcwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmNwcApAQCAtMTAwLDYgKzEwMCwxMSBAQCB2b2lk
IFF0UGFnZUNsaWVudDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRvd25s
b2FkKQogICAgIFFRdWlja1dlYlZpZXdQcml2YXRlOjpnZXQobV93ZWJWaWV3KS0+aGFuZGxlRG93
bmxvYWRSZXF1ZXN0KGRvd25sb2FkKTsKIH0KIAordm9pZCBRdFBhZ2VDbGllbnQ6OmhhbmRsZUFw
cGxpY2F0aW9uU2NoZW1lUmVxdWVzdChRdE5ldHdvcmtSZXF1ZXN0RGF0YSogcmVxdWVzdERhdGEp
Cit7CisgICAgbV93ZWJWaWV3LT5leHBlcmltZW50YWwoKS0+aW52b2tlQXBwbGljYXRpb25TY2hl
bWVIYW5kbGVyKHJlcXVlc3REYXRhKTsKK30KKwogdm9pZCBRdFBhZ2VDbGllbnQ6OnNldEN1cnNv
cihjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcikKIHsKICAgICAvLyBGSVhNRTogVGhpcyBp
cyBhIHRlbXBvcmFyeSBmaXggdW50aWwgd2UgZ2V0IGN1cnNvciBzdXBwb3J0IGluIFFNTCBpdGVt
cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuaAppbmRleCA2ZTcy
NjAzLi4zODEzYmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQ
YWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVu
dC5oCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVu
Y2hQcm9jZXNzKCk7CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IGNy
ZWF0ZURyYXdpbmdBcmVhUHJveHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRS
ZXF1ZXN0KERvd25sb2FkUHJveHkqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQXBwbGljYXRp
b25TY2hlbWVSZXF1ZXN0KFF0TmV0d29ya1JlcXVlc3REYXRhKik7CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGxheVZpZXcoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVmlldyhjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxP
ZmZzZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYlBhZ2VQ
cm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJQYWdlUHJveHlRdC5j
cHAKaW5kZXggNDU4MmUxNi4uN2NlYjllOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvV2ViUGFnZVByb3h5UXQuY3BwCkBAIC0yNyw2ICsyNyw5IEBACiAjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5LmgiCiAKICNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUXROZXR3
b3JrUmVwbHlEYXRhLmgiCisjaW5jbHVkZSAiUXRQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAicXF1
aWNrbmV0d29ya3JlcGx5X3AuaCIKICNpbmNsdWRlICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0VkaXRvci5oPgpAQCAt
NzcsNCArODAsMjcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNhbmNlbENvbXBvc2l0aW9uKCkKICAg
ICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNhbmNlbENvbXBvc2l0aW9uKCks
IG1fcGFnZUlEKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OnJlZ2lzdGVyQXBwbGljYXRpb25T
Y2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCit7CisgICAgcHJvY2VzcygpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpSZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKHNjaGVtZSksIG1fcGFnZUlE
KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnJlc29sdmVBcHBsaWNhdGlvblNjaGVtZVJlcXVl
c3QoUXROZXR3b3JrUmVxdWVzdERhdGEgcmVxdWVzdCkKK3sKKyAgICBRdE5ldHdvcmtSZXF1ZXN0
RGF0YSogcmVxdWVzdERhdGEgPSBuZXcgUXROZXR3b3JrUmVxdWVzdERhdGEocmVxdWVzdCk7Cisg
ICAgbV9hcHBsaWNhdGlvblNjaGVtZVJlcXVlc3RzLmluc2VydChyZXF1ZXN0RGF0YSk7CisgICAg
c3RhdGljX2Nhc3Q8UXRQYWdlQ2xpZW50Kj4obV9wYWdlQ2xpZW50KS0+aGFuZGxlQXBwbGljYXRp
b25TY2hlbWVSZXF1ZXN0KHJlcXVlc3REYXRhKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnNl
bmRBcHBsaWNhdGlvblNjaGVtZVJlcGx5KGNvbnN0IFFRdWlja05ldHdvcmtSZXBseSogcmVwbHkp
Cit7CisgICAgUXROZXR3b3JrUmVxdWVzdERhdGEqIHJlcXVlc3REYXRhID0gcmVwbHktPm5ldHdv
cmtSZXF1ZXN0RGF0YSgpOworICAgIGlmIChtX2FwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdHMuY29u
dGFpbnMocmVxdWVzdERhdGEpKSB7CisgICAgICAgIFF0TmV0d29ya1JlcGx5RGF0YSogcmVwbHlE
YXRhID0gcmVwbHktPm5ldHdvcmtSZXBseURhdGEoKTsKKyAgICAgICAgcHJvY2VzcygpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpBcHBsaWNhdGlvblNjaGVtZVJlcGx5KCpyZXBseURhdGEpLCBw
YWdlSUQoKSk7CisgICAgICAgIG1fYXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0cy5yZW1vdmUocmVx
dWVzdERhdGEpOworICAgICAgICBkZWxldGUgcmVxdWVzdERhdGE7CisgICAgfQorfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKaW5kZXgg
NGRkNTY5OS4uYjFkZWI3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKQEAg
LTE0MzgsNyArMTQzOCwxNiBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRDaGFuZ2VT
Y3JvbGxPZmZzZXQoKQogCiBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVOZXR3b3JraW5nQ29udGV4dCgpCiB7Ci0gICAgcmV0dXJu
IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmNyZWF0ZShtX2ZyYW1lLT5jb3JlRnJhbWUoKSk7
CisgICAgUmVmUHRyPFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IGNvbnRleHQgPSBXZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0OjpjcmVhdGUobV9mcmFtZS0+Y29yZUZyYW1lKCkpOworI2lmIFBM
QVRGT1JNKFFUKQorICAgIC8vIFdlIGVuY2Fwc3VsYXRlIHRoZSBXZWJQYWdlIHBvaW50ZXIgYXMg
YSBwcm9wZXJ0eSBvZiBhIFFPYmplY3QsCisgICAgLy8gYmVjYXVzZSB0aGUgbmV0d29ya2luZyBj
b250ZXh0IG9ubHkgYWNjZXB0cyBhIFFPYmplY3QgYXMgb3JpZ2luYXRpbmcgb2JqZWN0LgorICAg
IFFPYmplY3QqIHBhZ2VQb2ludGVyV3JhcHBlciA9IG5ldyBRT2JqZWN0OworICAgIHBhZ2VQb2lu
dGVyV3JhcHBlci0+c2V0UHJvcGVydHkoIlBhZ2VQb2ludGVyIiwgUVZhcmlhbnQ6OmZyb21WYWx1
ZShzdGF0aWNfY2FzdDx2b2lkKj4obV9mcmFtZS0+cGFnZSgpKSkpOworICAgIHBhZ2VQb2ludGVy
V3JhcHBlci0+c2V0UHJvcGVydHkoImRlbGV0ZVdpdGhDb250ZXh0IiwgUVZhcmlhbnQ6OmZyb21W
YWx1ZSh0cnVlKSk7CisgICAgY29udGV4dC0+c2V0T3JpZ2luYXRpbmdPYmplY3QocGFnZVBvaW50
ZXJXcmFwcGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0LmNwcAppbmRleCBhNmYzYWFiLi5lNjk5NTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
cXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNs
dWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgogI2lu
Y2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8UVZhcmlhbnQ+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMzMsMTEgKzM0LDI0IEBAIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OldlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHQoRnJhbWUqIGZyYW1lKQogewogfQogCitXZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0Ojp+V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCgpCit7CisgICAgaWYgKG1f
b3JpZ2luYXRpbmdPYmplY3QgJiYgbV9vcmlnaW5hdGluZ09iamVjdC0+cHJvcGVydHkoImRlbGV0
ZVdpdGhDb250ZXh0IikudG9Cb29sKCkpIHsKKyAgICAgICAgZGVsZXRlIG1fb3JpZ2luYXRpbmdP
YmplY3Q7CisgICAgICAgIG1fb3JpZ2luYXRpbmdPYmplY3QgPSAwOworICAgIH0KK30KKwogUGFz
c1JlZlB0cjxXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0OjpjcmVhdGUoRnJhbWUqIGZyYW1lKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dChmcmFtZSkpOwogfQogCit2b2lkIFdlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQ6OnNldE9yaWdpbmF0aW5nT2JqZWN0KFFPYmplY3QqIG9yaWdpbikKK3sKKyAg
ICBtX29yaWdpbmF0aW5nT2JqZWN0ID0gb3JpZ2luOworfQorCiBRT2JqZWN0KiBXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0OjpvcmlnaW5hdGluZ09iamVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fb3JpZ2luYXRpbmdPYmplY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dC5oCmluZGV4IDEwYzM0MWEuLjVmOTU1NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCkBAIC0yNyw2ICsyNyw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQgOiBwdWJsaWMgRnJhbWVOZXR3
b3JraW5nQ29udGV4dCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dD4gY3JlYXRlKEZyYW1lKik7CisgICAgdm9pZCBzZXRPcmlnaW5hdGlu
Z09iamVjdChRT2JqZWN0Kik7CisKKyAgICB+V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCgpOwog
CiBwcml2YXRlOgogICAgIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQoRnJhbWUqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDA1YzRiNWYuLmMx
YmQ0MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApA
QCAtNjAsNiArNjAsMTIgQEAKIAogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgIkFyZ3VtZW50
Q29kZXJzUXQuaCIKKyNpbmNsdWRlICJRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmgiCisjaW5jbHVk
ZSAiUXROZXR3b3JrUmVwbHkuaCIKKyNpbmNsdWRlICJRdE5ldHdvcmtSZXBseURhdGEuaCIKKyNp
bmNsdWRlICJRdE5ldHdvcmtSZXF1ZXN0RGF0YS5oIgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+
CisjaW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0PgogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEsp
CkBAIC00NjgsNiArNDc0LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29udGV4dE1lbnVTaG93
aW5nKCkgeyBtX2lzU2hvd2luZ0NvbnRleHRNZW51ID0gdHJ1ZTsgfQogCisjaWYgUExBVEZPUk0o
UVQpCisgICAgdm9pZCByZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKGNvbnN0IFN0cmluZyYgc2No
ZW1lKTsKKyAgICB2b2lkIGFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoY29uc3QgUXROZXR3b3JrUmVw
bHlEYXRhJik7CisgICAgdm9pZCByZWNlaXZlZEFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdChjb25z
dCBRTmV0d29ya1JlcXVlc3QmLCBRdE5ldHdvcmtSZXBseSopOworI2VuZGlmCiAgICAgdm9pZCB3
aGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVO
VFMpCiAgICAgdm9pZCBnZXN0dXJlRXZlbnQoY29uc3QgV2ViR2VzdHVyZUV2ZW50Jik7CkBAIC03
MjcsNiArNzM4LDkgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShXSU4pCiAgICAgYm9vbCBtX2dl
c3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGltaXQ7CiAjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyAg
ICBIYXNoTWFwPFN0cmluZywgUXROZXR3b3JrUmVwbHkqPiBtX2FwcGxpY2F0aW9uU2NoZW1lUmVw
bGllczsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4
IDBlYjBmNmIuLjhkNThiY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC02MCw2ICs2MCwxMSBAQCBtZXNzYWdl
cyAtPiBXZWJQYWdlIHsKICAgICBSZWxvYWQoYm9vbCByZWxvYWRGcm9tT3JpZ2luKQogICAgIFN0
b3BMb2FkaW5nKCkKIAorI2lmIFBMQVRGT1JNKFFUKQorICAgIEFwcGxpY2F0aW9uU2NoZW1lUmVw
bHkoV2ViS2l0OjpRdE5ldHdvcmtSZXBseURhdGEgcmVwbHkpCisgICAgUmVnaXN0ZXJBcHBsaWNh
dGlvblNjaGVtZShXVEY6OlN0cmluZyBzY2hlbWUpCisjZW5kaWYKKwogICAgIFN0b3BMb2FkaW5n
RnJhbWUodWludDY0X3QgZnJhbWVJRCkKICAgICAKICAgICBSZXN0b3JlU2Vzc2lvbihXZWJLaXQ6
OlNlc3Npb25TdGF0ZSBzdGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAKaW5kZXggMzE4ZGEyMy4uNTUwODBkMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAKQEAg
LTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldl
YkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIldlYkV2ZW50LmgiCisjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CkBAIC0zODgsNCArMzkwLDI5IEBAIHZvaWQg
V2ViUGFnZTo6Y2FuY2VsQ29tcG9zaXRpb24oKQogICAgIC8vIEZJWE1FOiBzdGF0aWNfY2FzdDxX
ZWJFZGl0b3JDbGllbnQqPih0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPmNsaWVudCgpKS0+c2VuZFNl
bGVjdGlvbkNoYW5nZWRNZXNzYWdlKCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6cmVnaXN0ZXJBcHBs
aWNhdGlvblNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKK3sKKyAgICBRdE5ldHdvcmtBY2Nl
c3NNYW5hZ2VyKiBxbmFtID0gcW9iamVjdF9jYXN0PFF0TmV0d29ya0FjY2Vzc01hbmFnZXIqPihX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQWNjZXNzTWFuYWdlcigpKTsKKyAgICBpZiAoIXFu
YW0pCisgICAgICAgIHJldHVybjsKKyAgICBxbmFtLT5yZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1l
KHRoaXMsIFFTdHJpbmcoc2NoZW1lKSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cmVjZWl2ZWRBcHBs
aWNhdGlvblNjaGVtZVJlcXVlc3QoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBRdE5l
dHdvcmtSZXBseSogcmVwbHkpCit7CisgICAgUXROZXR3b3JrUmVxdWVzdERhdGEgcmVxdWVzdERh
dGEocmVxdWVzdCwgcmVwbHkpOworICAgIG1fYXBwbGljYXRpb25TY2hlbWVSZXBsaWVzLmFkZChy
ZXF1ZXN0RGF0YS5tX3JlcGx5VXVpZCwgcmVwbHkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6UmVzb2x2ZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdChyZXF1ZXN0RGF0YSkpOwor
fQorCit2b2lkIFdlYlBhZ2U6OmFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoY29uc3QgUXROZXR3b3Jr
UmVwbHlEYXRhJiByZXBseURhdGEpCit7CisgICAgaWYgKCFtX2FwcGxpY2F0aW9uU2NoZW1lUmVw
bGllcy5jb250YWlucyhyZXBseURhdGEubV9yZXBseVV1aWQpKQorICAgICAgICByZXR1cm47CisK
KyAgICBRdE5ldHdvcmtSZXBseSogbmV0d29ya1JlcGx5ID0gbV9hcHBsaWNhdGlvblNjaGVtZVJl
cGxpZXMudGFrZShyZXBseURhdGEubV9yZXBseVV1aWQpOworICAgIG5ldHdvcmtSZXBseS0+c2V0
UmVwbHlEYXRhKHJlcGx5RGF0YSk7CisgICAgbmV0d29ya1JlcGx5LT5maW5hbGl6ZSgpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvcXQvUXROZXR3b3JrQWNjZXNzTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL3F0L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjQyYjVlMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuY3BwCkBAIC0wLDAgKzEsNzMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgWmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQu
b3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXROZXR3b3Jr
QWNjZXNzTWFuYWdlci5oIgorCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSAi
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNs
dWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8UU5ldHdvcmtSZXBseT4KKyNpbmNsdWRlIDxR
TmV0d29ya1JlcXVlc3Q+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitRdE5ldHdvcmtBY2Nlc3NN
YW5hZ2VyOjpRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKFdlYlByb2Nlc3MqIHdlYlByb2Nlc3MpCisg
ICAgOiBRTmV0d29ya0FjY2Vzc01hbmFnZXIoKQorICAgICwgbV93ZWJQcm9jZXNzKHdlYlByb2Nl
c3MpCit7Cit9CisKK1F0TmV0d29ya0FjY2Vzc01hbmFnZXI6OlF0TmV0d29ya0FjY2Vzc01hbmFn
ZXIoUU9iamVjdCogcGFyZW50KQorICAgIDogUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKHBhcmVudCkK
KyAgICAsIG1fd2ViUHJvY2VzcygwKQoreworfQorCitRTmV0d29ya1JlcGx5KiBRdE5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyOjpjcmVhdGVSZXF1ZXN0KE9wZXJhdGlvbiBvcGVyYXRpb24sIGNvbnN0IFFO
ZXR3b3JrUmVxdWVzdCAmIHJlcXVlc3QsIFFJT0RldmljZSogb3V0RGF0YSkKK3sKKyAgICBRT2Jq
ZWN0KiBwYWdlUHRyV3JhcHBlciA9IHJlcXVlc3Qub3JpZ2luYXRpbmdPYmplY3QoKTsKKyAgICBp
ZiAocGFnZVB0cldyYXBwZXIpIHsKKyAgICAgICAgUVZhcmlhbnQgcGFnZVB0ciA9IHBhZ2VQdHJX
cmFwcGVyLT5wcm9wZXJ0eSgiUGFnZVBvaW50ZXIiKTsKKyAgICAgICAgaWYgKHBhZ2VQdHIuaXNW
YWxpZCgpICYmIHBhZ2VQdHIuY2FuQ29udmVydDx2b2lkKj4oKSkgeworICAgICAgICAgICAgV2Vi
UGFnZSogd2ViUGFnZSA9IHN0YXRpY19jYXN0PFdlYlBhZ2UqPihwYWdlUHRyLnZhbHVlPHZvaWQq
PigpKTsKKyAgICAgICAgICAgIGlmIChtX2FwcGxpY2F0aW9uU2NoZW1lcy5jb250YWlucyh3ZWJQ
YWdlLCByZXF1ZXN0LnVybCgpLnNjaGVtZSgpLnRvTG93ZXIoKSkpIHsKKyAgICAgICAgICAgICAg
ICBRdE5ldHdvcmtSZXBseSogcmVwbHkgPSBuZXcgUXROZXR3b3JrUmVwbHkocmVxdWVzdCwgdGhp
cyk7CisgICAgICAgICAgICAgICAgd2ViUGFnZS0+cmVjZWl2ZWRBcHBsaWNhdGlvblNjaGVtZVJl
cXVlc3QocmVxdWVzdCwgcmVwbHkpOworICAgICAgICAgICAgICAgIHJldHVybiByZXBseTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBRTmV0d29ya0FjY2Vz
c01hbmFnZXI6OmNyZWF0ZVJlcXVlc3Qob3BlcmF0aW9uLCByZXF1ZXN0LCBvdXREYXRhKTsKK30K
Kwordm9pZCBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpyZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1l
KGNvbnN0IFdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcmIHNjaGVtZSkKK3sKKyAgICBtX2Fw
cGxpY2F0aW9uU2NoZW1lcy5pbnNlcnQocGFnZSwgc2NoZW1lLnRvTG93ZXIoKSk7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3JrQWNjZXNz
TWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nlc3NN
YW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZlMWM5MQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3JrQWNj
ZXNzTWFuYWdlci5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
WmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFF0TmV0
d29ya0FjY2Vzc01hbmFnZXJfaAorI2RlZmluZSBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyX2gKKwor
I2luY2x1ZGUgPFFNdWx0aUhhc2g+CisjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgor
I2luY2x1ZGUgPFFTdHJpbmc+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdl
OworY2xhc3MgV2ViUHJvY2VzczsKKworY2xhc3MgUXROZXR3b3JrQWNjZXNzTWFuYWdlciA6IHB1
YmxpYyBRTmV0d29ya0FjY2Vzc01hbmFnZXIgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAg
UXROZXR3b3JrQWNjZXNzTWFuYWdlcihRT2JqZWN0KiBwYXJlbnQgPSAwKTsKKyAgICBRdE5ldHdv
cmtBY2Nlc3NNYW5hZ2VyKFdlYlByb2Nlc3MqKTsKKyAgICB2b2lkIHJlZ2lzdGVyQXBwbGljYXRp
b25TY2hlbWUoY29uc3QgV2ViUGFnZSosIGNvbnN0IFFTdHJpbmcmIHNjaGVtZSk7CisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIFFOZXR3b3JrUmVwbHkqIGNyZWF0ZVJlcXVlc3QoT3BlcmF0aW9u
LCBjb25zdCBRTmV0d29ya1JlcXVlc3QgJiwgUUlPRGV2aWNlKiBvdXRnb2luZ0RhdGEgPSAwKTsK
KworcHJpdmF0ZToKKyAgICBRTXVsdGlIYXNoPGNvbnN0IFdlYlBhZ2UqLCBRU3RyaW5nPiBtX2Fw
cGxpY2F0aW9uU2NoZW1lczsKKyAgICBXZWJQcm9jZXNzKiBtX3dlYlByb2Nlc3M7CisKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUXROZXR3b3JrQWNjZXNzTWFuYWdl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1Jl
cGx5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVwbHkuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOTQxZGIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmNwcApA
QCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBaZW5vIEFsYmlzc2Vy
IDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJRdE5ldHdvcmtSZXBseS5oIgorCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5j
bHVkZSAiV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIK
KyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8UU5ldHdvcmtDb29raWU+CisjaW5j
bHVkZSA8UU5ldHdvcmtSZXBseT4KKyNpbmNsdWRlIDxRTmV0d29ya1JlcXVlc3Q+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitRdE5ldHdvcmtSZXBseTo6UXROZXR3b3JrUmVwbHkoY29uc3QgUU5l
dHdvcmtSZXF1ZXN0JiByZXEsIFF0TmV0d29ya0FjY2Vzc01hbmFnZXIqIHBhcmVudCkKKyAgICA6
IFFOZXR3b3JrUmVwbHkocGFyZW50KQorICAgICwgbV9ieXRlc0F2YWlsYWJsZSgwKQorICAgICwg
bV9zaGFyZWRNZW1vcnlTaXplKDApCit7CisgICAgc2V0UmVxdWVzdChyZXEpOworICAgIHNldE9w
ZXJhdGlvbihRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkdldE9wZXJhdGlvbik7CisgICAgc2V0VXJs
KHJlcS51cmwoKSk7CisgICAgc2V0T3Blbk1vZGUoUUlPRGV2aWNlOjpSZWFkT25seSk7CisgICAg
c2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudFR5cGVIZWFkZXIsIFFWYXJpYW50KFFT
dHJpbmc6OmZyb21Mb2NhbDhCaXQoInRleHQvaHRtbDsgY2hhcnNldD1VVEYtMTYiKSkpOworfQor
Cit2b2lkIFF0TmV0d29ya1JlcGx5OjpzZXREYXRhKGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxl
JiBoYW5kbGUsIHFpbnQ2NCBkYXRhU2l6ZSkKK3sKKyAgICBtX3NoYXJlZE1lbW9yeSA9IFNoYXJl
ZE1lbW9yeTo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgaWYg
KCFtX3NoYXJlZE1lbW9yeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9ieXRlc0F2YWlsYWJs
ZSA9IGRhdGFTaXplOworICAgIG1fc2hhcmVkTWVtb3J5U2l6ZSA9IGRhdGFTaXplOworfQorCit2
b2lkIFF0TmV0d29ya1JlcGx5OjpzZXRSZXBseURhdGEoY29uc3QgUXROZXR3b3JrUmVwbHlEYXRh
JiByZXBseURhdGEpCit7CisgICAgaWYgKHJlcGx5RGF0YS5tX29wZXJhdGlvbikKKyAgICAgICAg
c2V0T3BlcmF0aW9uKHJlcGx5RGF0YS5tX29wZXJhdGlvbik7CisgICAgaWYgKCFyZXBseURhdGEu
bV9jb250ZW50RGlzcG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHNldEhlYWRlcihRTmV0d29y
a1JlcXVlc3Q6OkNvbnRlbnREaXNwb3NpdGlvbkhlYWRlciwgUVN0cmluZyhyZXBseURhdGEubV9j
b250ZW50RGlzcG9zaXRpb24pKTsKKyAgICBpZiAoIXJlcGx5RGF0YS5tX2NvbnRlbnRUeXBlLmlz
TnVsbCgpKQorICAgICAgICBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50VHlwZUhl
YWRlciwgUVN0cmluZyhyZXBseURhdGEubV9jb250ZW50VHlwZSkpOworICAgIGlmICghcmVwbHlE
YXRhLm1fbG9jYXRpb24uaXNOdWxsKCkpCisgICAgICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVl
c3Q6OkxvY2F0aW9uSGVhZGVyLCBRU3RyaW5nKHJlcGx5RGF0YS5tX2xvY2F0aW9uKSk7CisgICAg
aWYgKHJlcGx5RGF0YS5tX2xhc3RNb2RpZmllZCkKKyAgICAgICAgc2V0SGVhZGVyKFFOZXR3b3Jr
UmVxdWVzdDo6TGFzdE1vZGlmaWVkSGVhZGVyLCBRRGF0ZVRpbWU6OmZyb21NU2Vjc1NpbmNlRXBv
Y2gocmVwbHlEYXRhLm1fbGFzdE1vZGlmaWVkKSk7CisgICAgaWYgKCFyZXBseURhdGEubV9jb29r
aWUuaXNOdWxsKCkpCisgICAgICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OlNldENvb2tp
ZUhlYWRlciwgUVZhcmlhbnQ6OmZyb21WYWx1ZShRTmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVz
KFFTdHJpbmcocmVwbHlEYXRhLm1fY29va2llKS50b0FzY2lpKCkpKSk7CisgICAgaWYgKCFyZXBs
eURhdGEubV91c2VyQWdlbnQuaXNOdWxsKCkpCisgICAgICAgIHNldEhlYWRlcihRTmV0d29ya1Jl
cXVlc3Q6OlVzZXJBZ2VudEhlYWRlciwgUVN0cmluZyhyZXBseURhdGEubV91c2VyQWdlbnQpKTsK
KyAgICBpZiAoIXJlcGx5RGF0YS5tX3NlcnZlci5pc051bGwoKSkKKyAgICAgICAgc2V0SGVhZGVy
KFFOZXR3b3JrUmVxdWVzdDo6U2VydmVySGVhZGVyLCBRU3RyaW5nKHJlcGx5RGF0YS5tX3NlcnZl
cikpOworICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvbnRlbnRMZW5ndGhIZWFkZXIs
IFFWYXJpYW50Ojpmcm9tVmFsdWUocmVwbHlEYXRhLm1fY29udGVudExlbmd0aCkpOworICAgIHNl
dERhdGEocmVwbHlEYXRhLm1fZGF0YUhhbmRsZSwgcmVwbHlEYXRhLm1fY29udGVudExlbmd0aCk7
Cit9CisKK3FpbnQ2NCBRdE5ldHdvcmtSZXBseTo6cmVhZERhdGEoY2hhciogZGF0YSwgcWludDY0
IG1heGxlbikKK3sKKyAgICBxaW50NjQgYnl0ZXNSZWFkID0gbWF4bGVuIDwgbV9ieXRlc0F2YWls
YWJsZSA/IG1heGxlbiA6IG1fYnl0ZXNBdmFpbGFibGU7CisgICAgaWYgKHFNZW1Db3B5KGRhdGEs
IHN0YXRpY19jYXN0PGNoYXIqPihtX3NoYXJlZE1lbW9yeS0+ZGF0YSgpKSArIG1fc2hhcmVkTWVt
b3J5U2l6ZSAtIG1fYnl0ZXNBdmFpbGFibGUsIGJ5dGVzUmVhZCkpIHsKKyAgICAgICAgbV9ieXRl
c0F2YWlsYWJsZSAtPSBieXRlc1JlYWQ7CisgICAgICAgIHJldHVybiBieXRlc1JlYWQ7CisgICAg
fQorICAgIHJldHVybiAwOworfQorCitxaW50NjQgUXROZXR3b3JrUmVwbHk6OmJ5dGVzQXZhaWxh
YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ieXRlc0F2YWlsYWJsZSArIFFOZXR3b3JrUmVw
bHk6OmJ5dGVzQXZhaWxhYmxlKCk7Cit9CisKK3ZvaWQgUXROZXR3b3JrUmVwbHk6OnNldEhlYWRl
cihRTmV0d29ya1JlcXVlc3Q6Oktub3duSGVhZGVycyBoZWFkZXIsIGNvbnN0IFFWYXJpYW50ICZ2
YWx1ZSkKK3sKKyAgICBRTmV0d29ya1JlcGx5OjpzZXRIZWFkZXIoaGVhZGVyLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgUXROZXR3b3JrUmVwbHk6OmFib3J0KCkgeyB9Cit2b2lkIFF0TmV0d29ya1JlcGx5
OjpjbG9zZSgpIHsgfQordm9pZCBRdE5ldHdvcmtSZXBseTo6c2V0UmVhZEJ1ZmZlclNpemUocWlu
dDY0IHNpemUpIHsgfQorYm9vbCBRdE5ldHdvcmtSZXBseTo6Y2FuUmVhZExpbmUgKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCisKK3ZvaWQgUXROZXR3b3JrUmVwbHk6OmZpbmFsaXplKCkKK3sK
KyAgICBRTmV0d29ya1JlcGx5OjpzZXRGaW5pc2hlZCh0cnVlKTsKKyAgICBlbWl0IHJlYWR5UmVh
ZCgpOworICAgIGVtaXQgZmluaXNoZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVwbHku
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVwbHkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTlmOGUxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5oCkBAIC0wLDAgKzEs
NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgWmVubyBBbGJpc3NlciA8emVub0B3ZWJr
aXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFF0TmV0d29ya1JlcGx5X2gKKyNkZWZpbmUgUXRO
ZXR3b3JrUmVwbHlfaAorCisjaW5jbHVkZSAiUXROZXR3b3JrUmVwbHlEYXRhLmgiCisjaW5jbHVk
ZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSA8UUJ5dGVBcnJheT4KKyNpbmNsdWRlIDxRRGF0
ZVRpbWU+CisjaW5jbHVkZSA8UU5ldHdvcmtSZXBseT4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFF0TmV0d29ya0FjY2Vzc01hbmFnZXI7CisKK2NsYXNzIFF0TmV0d29ya1JlcGx5IDog
cHVibGljIFFOZXR3b3JrUmVwbHkgeworcHVibGljOgorICAgIFF0TmV0d29ya1JlcGx5KGNvbnN0
IFFOZXR3b3JrUmVxdWVzdCYsIFF0TmV0d29ya0FjY2Vzc01hbmFnZXIqIHBhcmVudCk7CisKKyAg
ICB2aXJ0dWFsIHFpbnQ2NCByZWFkRGF0YShjaGFyICpkYXRhLCBxaW50NjQgbWF4bGVuKTsKKyAg
ICB2aXJ0dWFsIHFpbnQ2NCBieXRlc0F2YWlsYWJsZSgpIGNvbnN0OworICAgIHZvaWQgc2V0SGVh
ZGVyKFFOZXR3b3JrUmVxdWVzdDo6S25vd25IZWFkZXJzLCBjb25zdCBRVmFyaWFudCAmdmFsdWUp
OworICAgIHZvaWQgc2V0RGF0YShjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYsIHFpbnQ2NCBk
YXRhU2l6ZSk7CisgICAgdm9pZCBzZXRSZXBseURhdGEoY29uc3QgUXROZXR3b3JrUmVwbHlEYXRh
Jik7CisgICAgdm9pZCBmaW5hbGl6ZSgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lk
IGFib3J0KCk7CisKKyAgICAvLyByZWltcGxlbWVudGVkIGZyb20gUU5ldHdvcmtSZXBseSAvIFFJ
T0RldmljZQorICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRS
ZWFkQnVmZmVyU2l6ZShxaW50NjQpOworICAgIHZpcnR1YWwgYm9vbCBjYW5SZWFkTGluZSgpIGNv
bnN0OworCitwcml2YXRlOgorICAgIHFpbnQ2NCBtX2J5dGVzQXZhaWxhYmxlOworICAgIFFCeXRl
QXJyYXkgbV9idWZmZXI7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9zaGFyZWRNZW1vcnk7
CisgICAgcWludDY0IG1fc2hhcmVkTWVtb3J5U2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gUXROZXR3b3JrUmVwbHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwCmluZGV4IGQ5NDkyMDYuLmEyYmVhYzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVkZSAiUXRCdWls
dGluQnVuZGxlLmgiCisjaW5jbHVkZSAiUXROZXR3b3JrQWNjZXNzTWFuYWdlci5oIgogI2luY2x1
ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaCIKIApAQCAtNjcsNyArNjgsNyBAQCBzdGF0aWMgdm9pZCBwYXJlbnRQcm9jZXNzRGll
ZENhbGxiYWNrKHZvaWQqKQogCiB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdl
YlByb2Nlc3MoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycywg
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7Ci0gICAgbV9uZXR3b3JrQWNj
ZXNzTWFuYWdlciA9IG5ldyBRTmV0d29ya0FjY2Vzc01hbmFnZXI7CisgICAgbV9uZXR3b3JrQWNj
ZXNzTWFuYWdlciA9IG5ldyBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKHRoaXMpOwogICAgIEFTU0VS
VCghcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSAmJiAhcGFyYW1l
dGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKTsKICAgICBXZWJDb3JlOjpTaGFy
ZWRDb29raWVKYXJRdCogamFyID0gV2ViQ29yZTo6U2hhcmVkQ29va2llSmFyUXQ6OmNyZWF0ZShw
YXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkpOwogICAgIG1fbmV0d29ya0FjY2Vzc01h
bmFnZXItPnNldENvb2tpZUphcihqYXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL3F0d2Via2l0LWV4
cG9ydC5tYXAgYi9Tb3VyY2UvcXR3ZWJraXQtZXhwb3J0Lm1hcAppbmRleCA0OTU4Yzg1Li4zYWY4
NDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvcXR3ZWJraXQtZXhwb3J0Lm1hcAorKysgYi9Tb3VyY2Uv
cXR3ZWJraXQtZXhwb3J0Lm1hcApAQCAtMTQ4LDYgKzE0OCwxMiBAQCBxd2tfMS4wIHsKICAgICAg
ICAgKlFXZWJOYXZpZ2F0aW9uUmVxdWVzdDsKICAgICAgICAgbm9uLXZpcnR1YWw/dGh1bms/dG8/
UVdlYk5hdmlnYXRpb25SZXF1ZXN0KjsKICAgICAgICAgUVdlYk5hdmlnYXRpb25SZXF1ZXN0Ojoq
OworICAgICAgICAqUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU7CisgICAgICAgIFFRdWlja1VybFNj
aGVtZURlbGVnYXRlOjoqOworICAgICAgICAqUVF1aWNrTmV0d29ya1JlcXVlc3Q7CisgICAgICAg
IFFRdWlja05ldHdvcmtSZXF1ZXN0OjoqOworICAgICAgICAqUVF1aWNrTmV0d29ya1JlcGx5Owor
ICAgICAgICBRUXVpY2tOZXR3b3JrUmVwbHk6Oio7CiAKIAogICAgICAgICAjIFdlYktpdCAyIEMg
QVBJIG1hbmdsZWQgaW4gQysrCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121258</attachid>
            <date>2012-01-05 04:10:12 -0800</date>
            <delta_ts>2012-01-05 08:03:37 -0800</delta_ts>
            <desc>patch for review. - using RefPtr for networkRequestData and networkReplyData.</desc>
            <filename>74931_20120105-130731.patch</filename>
            <type>text/plain</type>
            <size>71441</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmMzllMGQ1Li44YTIyYzRh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTItMDEtMDUgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
W1F0XVtXSzJdIEltcGxlbWVudCBjdXN0b20gVVJMIHNjaGVtZXMgZGVmaW5lZCBpbiBRTUwuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkzMQorCisg
ICAgICAgIEFkZCBuZXcgY2xhc3NlcyB0byB0aGUgZXhwb3J0IG1hcC4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9xdHdlYmtpdC1leHBv
cnQubWFwOgorCiAyMDEyLTAxLTA0ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBNb3ZlIFdlYk1pbWVSZWdpc3RyeSBhbmQgZGVwZW5k
ZW5jaWVzIHRvIFNvdXJjZS9QbGF0Zm9ybQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA0YmYzYzBmLi5mZmE4
YWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAxLTA1ICBaZW5vIEFs
Ymlzc2VyICA8emVub0B3ZWJraXQub3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQg
Y3VzdG9tIFVSTCBzY2hlbWVzIGRlZmluZWQgaW4gUU1MLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MzEKKworICAgICAgICBNYWtlIGNsYXNzZXMg
UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUsIFFRdWlja05ldHdvcmtSZXF1ZXN0CisgICAgICAgIGFu
ZCBRUXVpY2tOZXR3b3JrUmVwbHkgYWNjZXNzaWJsZSBmcm9tIFFNTC4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRlY2xhcmF0aXZlL2V4cGVyaW1l
bnRhbC9leHBlcmltZW50YWwucHJpOgorICAgICAgICAqIGRlY2xhcmF0aXZlL2V4cGVyaW1lbnRh
bC9wbHVnaW4uY3BwOgorICAgICAgICAqIGRlY2xhcmF0aXZlL3B1YmxpYy5wcmk6CisKIDIwMTIt
MDEtMDQgIFRvciBBcm5lIFZlc3Riw7ggIDx0b3IuYXJuZS52ZXN0Ym9Abm9raWEuY29tPgogCiAg
ICAgICAgIFtRdF0gSW50cm9kdWNlIG5ldyBxbWFrZSB2YXJpYWJsZSAnV0VCS0lUJyBmb3Igc2ln
bmFsaW5nIGRlcGVuZGVuY2llcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJh
dGl2ZS9leHBlcmltZW50YWwvZXhwZXJpbWVudGFsLnByaSBiL1NvdXJjZS9XZWJLaXQvcXQvZGVj
bGFyYXRpdmUvZXhwZXJpbWVudGFsL2V4cGVyaW1lbnRhbC5wcmkKaW5kZXggNDk0Mzg4YS4uNDlm
NDYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9leHBlcmltZW50
YWwvZXhwZXJpbWVudGFsLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4
cGVyaW1lbnRhbC9leHBlcmltZW50YWwucHJpCkBAIC0zNiw3ICszNiwxNiBAQCBSUEFUSERJUl9S
RUxBVElWRV9UT19ERVNURElSID0gLi4vLi4vbGliCiBTT1VSQ0VTICs9IHBsdWdpbi5jcHAKIAog
REVGSU5FUyArPSBIQVZFX1dFQktJVDIKLUlOQ0xVREVQQVRIICs9IC4uLy4uLy4uLy4uL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdAorCitJTkNMVURFUEFUSCArPSBcCisgICAgLi4vLi4vLi4vLi4v
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0IFwKKyAgICAuLi8uLi8uLi8uLi9XZWJLaXQyL1NoYXJl
ZC9xdCBcCisgICAgLi4vLi4vLi4vLi4vSmF2YVNjcmlwdENvcmUgXAorICAgIC4uLy4uLy4uLy4u
L0phdmFTY3JpcHRDb3JlL3d0ZiBcCisgICAgLi4vLi4vLi4vLi4vSmF2YVNjcmlwdENvcmUvd3Rm
L3VuaWNvZGUgXAorICAgIC4uLy4uLy4uLy4uL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUgXAorICAg
IC4uLy4uLy4uLy4uL1dlYktpdDIvUGxhdGZvcm0gXAorICAgIC4uLy4uLy4uLy4uL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQwogCiB0YXJnZXQucGF0aCA9ICQkW1FUX0lOU1RBTExfSU1QT1JUU10v
JCR7VEFSR0VULm1vZHVsZV9uYW1lfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2Rl
Y2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9kZWNs
YXJhdGl2ZS9leHBlcmltZW50YWwvcGx1Z2luLmNwcAppbmRleCBkMjg5MjI5Li5jYWIwZmJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVn
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVudGFsL3Bs
dWdpbi5jcHAKQEAgLTE3LDYgKzE3LDEwIEBACiAgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCiAqLwogCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJxcXVpY2tuZXR3b3Jr
cmVwbHlfcC5oIgorI2luY2x1ZGUgInFxdWlja25ldHdvcmtyZXF1ZXN0X3AuaCIKICNpbmNsdWRl
ICJxcXVpY2t3ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKICNpbmNs
dWRlICJxd2ViZG93bmxvYWRpdGVtX3AuaCIKQEAgLTUyLDYgKzU2LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRlIGluc3RhbmNlIG9m
IFdlYlZpZXdFeHBlcmltZW50YWwiKSk7CiAgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVU
eXBlPFFXZWJWaWV3cG9ydEluZm8+KHVyaSwgMywgMCwgIlFXZWJWaWV3cG9ydEluZm8iLAogICAg
ICAgICAgICAgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2Yg
UVdlYlZpZXdwb3J0SW5mbyIpKTsKKyAgICAgICAgcW1sUmVnaXN0ZXJUeXBlPFFRdWlja1VybFNj
aGVtZURlbGVnYXRlPih1cmksIDMsIDAsICJVcmxTY2hlbWVEZWxlZ2F0ZSIpOworICAgICAgICBx
bWxSZWdpc3RlclVuY3JlYXRhYmxlVHlwZTxRUXVpY2tOZXR3b3JrUmVxdWVzdD4odXJpLCAzLCAw
LCAiTmV0d29ya1JlcXVlc3QiLAorICAgICAgICAgICAgUU9iamVjdDo6dHIoIk5ldHdvcmtSZXF1
ZXN0IHNob3VsZCBub3QgYmUgY3JlYXRlZCBmcm9tIFFNTCIpKTsKKyAgICAgICAgcW1sUmVnaXN0
ZXJVbmNyZWF0YWJsZVR5cGU8UVF1aWNrTmV0d29ya1JlcGx5Pih1cmksIDMsIDAsICJOZXR3b3Jr
UmVwbHkiLAorICAgICAgICAgICAgUU9iamVjdDo6dHIoIk5ldHdvcmtSZXBseSBzaG91bGQgbm90
IGJlIGNyZWF0ZWQgZnJvbSBRTUwiKSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wdWJsaWMucHJpIGIvU291cmNlL1dlYktpdC9xdC9kZWNs
YXJhdGl2ZS9wdWJsaWMucHJpCmluZGV4IDI5YmQ5MDMuLjNlMmZiNDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0
L3F0L2RlY2xhcmF0aXZlL3B1YmxpYy5wcmkKQEAgLTM4LDYgKzM4LDEyIEBAIERFU1RESVIgPSAk
JHtST09UX0JVSUxEX0RJUn0vaW1wb3J0cy8kJHtUQVJHRVQubW9kdWxlX25hbWV9CiBDT05GSUcg
Kz0gcnBhdGgKIFJQQVRIRElSX1JFTEFUSVZFX1RPX0RFU1RESVIgPSAuLi8uLi9saWIKIAorSU5D
TFVERVBBVEggKz0gXAorICAgIC4uLy4uLy4uL1dlYktpdDIvU2hhcmVkL3F0IFwKKyAgICAuLi8u
Li8uLi9KYXZhU2NyaXB0Q29yZSBcCisgICAgLi4vLi4vLi4vSmF2YVNjcmlwdENvcmUvcnVudGlt
ZSBcCisgICAgLi4vLi4vLi4vSmF2YVNjcmlwdENvcmUvd3RmCisKIFNPVVJDRVMgKz0gcWRlY2xh
cmF0aXZld2Vidmlldy5jcHAgcGx1Z2luLmNwcAogSEVBREVSUyArPSBxZGVjbGFyYXRpdmV3ZWJ2
aWV3X3AuaAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNGZmMTY3Ni4uMWFmZmYwMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDExNCBAQAorMjAxMi0wMS0wNSAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9y
Zz4KKworICAgICAgICBbUXRdW1dLMl0gSW1wbGVtZW50IGN1c3RvbSBVUkwgc2NoZW1lcyBkZWZp
bmVkIGluIFFNTC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc0OTMxCisKKyAgICAgICAgQWxsb3cgY3JlYXRpb24gb2YgY3VzdG9tIFVybFNjaGVtZURl
bGVnYXRlcyBmcm9tIFFNTC4KKyAgICAgICAgQSBVcmxTY2hlbWVEZWxlZ2F0ZSBjb250YWlucyBh
IGhhbmRsZXIgc2lnbmFsIHRoYXQgaXMgdHJpZ2dlcmVkCisgICAgICAgIHdoZW4gYSB1cmwgbWF0
Y2hpbmcgdGhlIGRlZmluZWQgc2NoZW1lIGlzIHJlcXVlc3RlZC4KKyAgICAgICAgVG8gYWxsb3cg
Zm9yIHRoaXMgYSBkZXJpdmF0aW9uIG9mIFFOZXR3b3JrQWNjZXNzTWFuYWdlcgorICAgICAgICBp
cyBuZWNlc3NhcnkuCisgICAgICAgIFRoZSByZXF1ZXN0IGlzIHRoZW4gaGFuZGxlZCBpbiBRTUwv
SlMgYW5kIGEgcmVwbHkKKyAgICAgICAgaXMgc2VudCBiYWNrIGZyb20gdGhlIFVJUHJvY2VzcyB0
byB0aGUgV2ViUHJvY2Vzcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFNoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhOjpRdE5ldHdvcmtSZXBseURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseURhdGE6OmVuY29kZSk6CisgICAgICAgIChX
ZWJLaXQ6OlF0TmV0d29ya1JlcGx5RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvcXQv
UXROZXR3b3JrUmVwbHlEYXRhLmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9xdC9RdE5ldHdv
cmtSZXF1ZXN0RGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXF1
ZXN0RGF0YTo6UXROZXR3b3JrUmVxdWVzdERhdGEpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdv
cmtSZXF1ZXN0RGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVxdWVz
dERhdGE6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRh
Lmg6IEFkZGVkLgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2tuZXR3b3JrcmVwbHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFRdWlja05ldHdv
cmtSZXBseTo6UVF1aWNrTmV0d29ya1JlcGx5KToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBs
eTo6Y29udGVudFR5cGUpOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb250ZW50
VHlwZSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6Om9wZXJhdGlvbik6CisgICAgICAg
IChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldE9wZXJhdGlvbik6CisgICAgICAgIChRUXVpY2tOZXR3
b3JrUmVwbHk6OmNvbnRlbnREaXNwb3NpdGlvbik6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVw
bHk6OnNldENvbnRlbnREaXNwb3NpdGlvbik6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6
OmxvY2F0aW9uKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0TG9jYXRpb24pOgor
ICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpsYXN0TW9kaWZpZWQpOgorICAgICAgICAoUVF1
aWNrTmV0d29ya1JlcGx5OjpzZXRMYXN0TW9kaWZpZWQpOgorICAgICAgICAoUVF1aWNrTmV0d29y
a1JlcGx5Ojpjb29raWUpOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb29raWUp
OgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5Ojp1c2VyQWdlbnQpOgorICAgICAgICAoUVF1
aWNrTmV0d29ya1JlcGx5OjpzZXRVc2VyQWdlbnQpOgorICAgICAgICAoUVF1aWNrTmV0d29ya1Jl
cGx5OjpzZXJ2ZXIpOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRTZXJ2ZXIpOgor
ICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpkYXRhKToKKyAgICAgICAgKFFRdWlja05ldHdv
cmtSZXBseTo6c2V0RGF0YSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNlbmQpOgor
ICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpuZXR3b3JrUmVxdWVzdERhdGEpOgorICAgICAg
ICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXROZXR3b3JrUmVxdWVzdERhdGEpOgorICAgICAgICAo
UVF1aWNrTmV0d29ya1JlcGx5OjpuZXR3b3JrUmVwbHlEYXRhKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseV9wLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcXVlc3RfcC5oOiBBZGRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlLmNwcDogQWRkZWQuCisgICAg
ICAgIChRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZTo6UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUpOgor
ICAgICAgICAoUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU6OnNjaGVtZSk6CisgICAgICAgIChRUXVp
Y2tVcmxTY2hlbWVEZWxlZ2F0ZTo6c2V0U2NoZW1lKToKKyAgICAgICAgKFFRdWlja1VybFNjaGVt
ZURlbGVnYXRlOjpyZXF1ZXN0KToKKyAgICAgICAgKFFRdWlja1VybFNjaGVtZURlbGVnYXRlOjpy
ZXBseSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t1cmxzY2hlbWVkZWxlZ2F0
ZV9wLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5j
cHA6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpRUXVpY2tXZWJWaWV3RXhw
ZXJpbWVudGFsKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURl
bGVnYXRlc19BdCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVE
ZWxlZ2F0ZXNfQXBwZW5kKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNj
aGVtZURlbGVnYXRlc19Db3VudCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFs
OjpzY2hlbWVEZWxlZ2F0ZXNfQ2xlYXIpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1l
bnRhbDo6c2NoZW1lRGVsZWdhdGVzKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50
YWw6Omludm9rZUFwcGxpY2F0aW9uU2NoZW1lSGFuZGxlcik6CisgICAgICAgIChRUXVpY2tXZWJW
aWV3RXhwZXJpbWVudGFsOjpzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmNwcDoKKyAgICAgICAg
KFF0UGFnZUNsaWVudDo6aGFuZGxlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1dl
YlBhZ2VQcm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWdpc3Rl
ckFwcGxpY2F0aW9uU2NoZW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXNv
bHZlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVOZXR3b3JraW5nQ29udGV4dCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6On5XZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQ6OnNldE9yaWdpbmF0aW5nT2JqZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9x
dC9XZWJQYWdlUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZWdpc3RlckFwcGxp
Y2F0aW9uU2NoZW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVjZWl2ZWRBcHBsaWNh
dGlvblNjaGVtZVJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphcHBsaWNhdGlv
blNjaGVtZVJlcGx5KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1F0TmV0d29ya0FjY2Vzc01h
bmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrQWNjZXNzTWFuYWdl
cjo6UXROZXR3b3JrQWNjZXNzTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya0Fj
Y2Vzc01hbmFnZXI6OmNyZWF0ZVJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyOjpyZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL3F0L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuaDogQWRkZWQuCisgICAgICAgICogV2Vi
UHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpR
dE5ldHdvcmtSZXBseTo6UXROZXR3b3JrUmVwbHkpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdv
cmtSZXBseTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5OjpzZXRS
ZXBseURhdGEpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6cmVhZERhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6Ynl0ZXNBdmFpbGFibGUpOgorICAgICAg
ICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6c2V0SGVhZGVyKToKKyAgICAgICAgKFdlYktpdDo6
UXROZXR3b3JrUmVwbHk6OmFib3J0KToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6
OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OnNldFJlYWRCdWZmZXJT
aXplKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OmNhblJlYWRMaW5lKToKKyAg
ICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OmZpbmFsaXplKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
cXQvV2ViUHJvY2Vzc1F0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6CisKIDIwMTItMDEtMDUgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFJlbmFtZSB3ZWJraXRf
d2ViX3ZpZXdfbG9hZF9hbHRlcm5hdGVfaHRtbCBhcyB3ZWJraXRfd2ViX3ZpZXdfcmVwbGFjZV9j
b250ZW50IGluIFdlYktpdDIgR1RLKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L3F0L1F0TmV0d29ya1JlcGx5RGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXRO
ZXR3b3JrUmVwbHlEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
MmU1ODA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0
d29ya1JlcGx5RGF0YS5jcHAKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJRdE5ldHdvcmtSZXBseURhdGEuaCIKKworI2luY2x1ZGUg
IkFyZ3VtZW50Q29kZXJzUXQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTm9uY29w
eWFibGUuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+CisjaW5jbHVk
ZSA8UU5ldHdvcmtSZXF1ZXN0PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworUXROZXR3b3JrUmVwbHlEYXRhOjpRdE5ldHdvcmtSZXBseURh
dGEoKQorICAgIDogbV9jb250ZW50TGVuZ3RoKDApCisgICAgLCBtX2xhc3RNb2RpZmllZCgwKQor
eyB9CisKK3ZvaWQgUXROZXR3b3JrUmVwbHlEYXRhOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRF
bmNvZGVyKiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXItPmVuY29kZShtX3VybFN0cmlu
Zyk7CisgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShtX29wZXJhdGlvbik7CisgICAgZW5jb2Rlci0+
ZW5jb2RlKG1fY29udGVudERpc3Bvc2l0aW9uKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUobV9jb250
ZW50VHlwZSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDY0KG1fY29udGVudExlbmd0aCk7Cisg
ICAgZW5jb2Rlci0+ZW5jb2RlKG1fbG9jYXRpb24pOworICAgIGVuY29kZXItPmVuY29kZVVJbnQ2
NChtX2xhc3RNb2RpZmllZCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fY29va2llKTsKKyAgICBl
bmNvZGVyLT5lbmNvZGUobV91c2VyQWdlbnQpOworICAgIGVuY29kZXItPmVuY29kZShtX3NlcnZl
cik7CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fcmVwbHlVdWlkKTsKKyAgICBlbmNvZGVyLT5lbmNv
ZGUobV9kYXRhSGFuZGxlKTsKK30KKworYm9vbCBRdE5ldHdvcmtSZXBseURhdGE6OmRlY29kZShD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFF0TmV0d29ya1JlcGx5RGF0YSYgZGVz
dGluYXRpb24pCit7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV91cmxT
dHJpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVF
bnVtKGRlc3RpbmF0aW9uLm1fb3BlcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fY29udGVudERpc3Bvc2l0aW9uKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0
aW9uLm1fY29udGVudFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGVVSW50NjQoZGVzdGluYXRpb24ubV9jb250ZW50TGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fbG9j
YXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVV
SW50NjQoZGVzdGluYXRpb24ubV9sYXN0TW9kaWZpZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9jb29raWUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV91
c2VyQWdlbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUoZGVzdGluYXRpb24ubV9zZXJ2ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9yZXBseVV1aWQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9kYXRhSGFu
ZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
cXQvUXROZXR3b3JrUmVwbHlEYXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3
b3JrUmVwbHlEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc0YjQy
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9RdE5ldHdvcmtS
ZXBseURhdGEuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFpl
bm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBRdE5ldHdv
cmtSZXBseURhdGFfaAorI2RlZmluZSBRdE5ldHdvcmtSZXBseURhdGFfaAorCisjaW5jbHVkZSAi
Tm9uY29weWFibGUuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiU2hhcmVk
TWVtb3J5LmgiCisjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgQ29yZUlQQyB7CitjbGFzcyBBcmd1bWVu
dEVuY29kZXI7CitjbGFzcyBBcmd1bWVudERlY29kZXI7Cit9OworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworc3RydWN0IFF0TmV0d29ya1JlcGx5RGF0YSA6IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWQ8
UXROZXR3b3JrUmVwbHlEYXRhPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUXROZXR3b3Jr
UmVwbHlEYXRhKTsKK3B1YmxpYzoKKyAgICBRdE5ldHdvcmtSZXBseURhdGEoKTsKKworICAgIHZv
aWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciopIGNvbnN0OworICAgIHN0YXRpYyBi
b29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBRdE5ldHdvcmtSZXBseURhdGEm
KTsKKworICAgIFdURjo6U3RyaW5nIG1fdXJsU3RyaW5nOworCisgICAgUU5ldHdvcmtBY2Nlc3NN
YW5hZ2VyOjpPcGVyYXRpb24gbV9vcGVyYXRpb247CisgICAgV1RGOjpTdHJpbmcgbV9jb250ZW50
RGlzcG9zaXRpb247CisgICAgV1RGOjpTdHJpbmcgbV9jb250ZW50VHlwZTsKKyAgICB1aW50NjRf
dCBtX2NvbnRlbnRMZW5ndGg7CisgICAgV1RGOjpTdHJpbmcgbV9sb2NhdGlvbjsKKyAgICB1aW50
NjRfdCBtX2xhc3RNb2RpZmllZDsKKyAgICBXVEY6OlN0cmluZyBtX2Nvb2tpZTsKKyAgICBXVEY6
OlN0cmluZyBtX3VzZXJBZ2VudDsKKyAgICBXVEY6OlN0cmluZyBtX3NlcnZlcjsKKyAgICBTdHJp
bmcgbV9yZXBseVV1aWQ7CisKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBtX2RhdGFIYW5kbGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFF0TmV0d29ya1JlcGx5
RGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVx
dWVzdERhdGEuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3RE
YXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmVhNmUzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3RE
YXRhLmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8g
QWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBseXJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUXROZXR3b3JrUmVxdWVzdERhdGEuaCIKKworI2luY2x1ZGUgIkFyZ3Vt
ZW50Q29kZXJzUXQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybS5oIgorI2luY2x1ZGUgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+CisjaW5jbHVkZSA8UU5l
dHdvcmtSZXF1ZXN0PgorI2luY2x1ZGUgPFFVdWlkPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUXROZXR3b3JrUmVxdWVzdERhdGE6OlF0
TmV0d29ya1JlcXVlc3REYXRhKCkKK3sgfQorCitRdE5ldHdvcmtSZXF1ZXN0RGF0YTo6UXROZXR3
b3JrUmVxdWVzdERhdGEoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBRTmV0d29ya1Jl
cGx5KiByZXBseSkKK3sKKyAgICBtX3NjaGVtZSA9IHJlcXVlc3QudXJsKCkuc2NoZW1lKCk7Cisg
ICAgbV91cmxTdHJpbmcgPSByZXF1ZXN0LnVybCgpLnRvU3RyaW5nKCk7CisgICAgbV9yZXBseVV1
aWQgPSBRVXVpZDo6Y3JlYXRlVXVpZCgpLnRvU3RyaW5nKCk7Cit9CisKK1F0TmV0d29ya1JlcXVl
c3REYXRhOjpRdE5ldHdvcmtSZXF1ZXN0RGF0YShjb25zdCBRdE5ldHdvcmtSZXF1ZXN0RGF0YSYg
b3JpZ2luKQorICAgIDogUmVmQ291bnRlZDxRdE5ldHdvcmtSZXF1ZXN0RGF0YT4oKSwKKyAgICBt
X3NjaGVtZShvcmlnaW4ubV9zY2hlbWUpLAorICAgIG1fdXJsU3RyaW5nKG9yaWdpbi5tX3VybFN0
cmluZyksCisgICAgbV9yZXBseVV1aWQob3JpZ2luLm1fcmVwbHlVdWlkKQoreworfQorCit2b2lk
IFF0TmV0d29ya1JlcXVlc3REYXRhOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBl
bmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXItPmVuY29kZShtX3NjaGVtZSk7CisgICAgZW5j
b2Rlci0+ZW5jb2RlKG1fdXJsU3RyaW5nKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUobV9yZXBseVV1
aWQpOworfQorCitib29sIFF0TmV0d29ya1JlcXVlc3REYXRhOjpkZWNvZGUoQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyKiBkZWNvZGVyLCBRdE5ldHdvcmtSZXF1ZXN0RGF0YSYgZGVzdGluYXRpb24p
Cit7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9zY2hlbWUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24u
bV91cmxTdHJpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoZGVzdGluYXRpb24ubV9yZXBseVV1aWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuaCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9xdC9RdE5ldHdvcmtSZXF1ZXN0RGF0YS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Njc5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuaApAQCAtMCwwICsxLDU3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9y
Zz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXBseXJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFF0TmV0d29ya1JlcXVlc3REYXRhX2gKKyNkZWZpbmUg
UXROZXR3b3JrUmVxdWVzdERhdGFfaAorCisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgQ29yZUlQQyB7CitjbGFzcyBB
cmd1bWVudEVuY29kZXI7CitjbGFzcyBBcmd1bWVudERlY29kZXI7Cit9OworCitjbGFzcyBRTmV0
d29ya1JlcXVlc3Q7CitjbGFzcyBRTmV0d29ya1JlcGx5OworCituYW1lc3BhY2UgV2ViS2l0IHsK
Kworc3RydWN0IFF0TmV0d29ya1JlcXVlc3REYXRhIDogcHVibGljIFdURjo6UmVmQ291bnRlZDxR
dE5ldHdvcmtSZXF1ZXN0RGF0YT4geworICAgIFF0TmV0d29ya1JlcXVlc3REYXRhKCk7CisgICAg
UXROZXR3b3JrUmVxdWVzdERhdGEoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiwgUU5ldHdvcmtSZXBs
eSopOworICAgIFF0TmV0d29ya1JlcXVlc3REYXRhKGNvbnN0IFF0TmV0d29ya1JlcXVlc3REYXRh
Jik7CisKKyAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBjb25zdDsK
KyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgUXROZXR3
b3JrUmVxdWVzdERhdGEmKTsKKworICAgIFN0cmluZyBtX3NjaGVtZTsKKyAgICBTdHJpbmcgbV91
cmxTdHJpbmc7CisgICAgU3RyaW5nIG1fcmVwbHlVdWlkOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBRdE5ldHdvcmtSZXF1ZXN0RGF0YV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRl
eCA5ODU3YmZkLi43MzM0NjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTEyNyw2ICsxMjcsOCBAQCBIRUFE
RVJTICs9IFwKICAgICBTaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5oIFwKICAgICBTaGFyZWQv
cXQvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCBcCiAgICAgU2hhcmVkL3F0L1dlYkV2ZW50RmFj
dG9yeVF0LmggXAorICAgIFNoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEuaCBcCisgICAgU2hh
cmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRhLmggXAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS0FQ
SUNhc3QuaCBcCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uu
aCBcCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVy
LmggXApAQCAtMTc4LDYgKzE4MCw5IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9BUEkv
cXQvcXdlYm5hdmlnYXRpb25oaXN0b3J5X3BfcC5oIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnZpZXdfcC5oIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9w
LmggXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5X3AuaCBcCisgICAg
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVxdWVzdF9wLmggXAorICAgIFVJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGVfcC5oIFwKICAgICBVSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJ2aWV3cG9ydGluZm9fcC5oIFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24v
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGlj
YXRpb24vQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmggXApAQCAtMzUzLDcgKzM1OCw5
IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViQ29ubmVjdGlvblRvVUlQcm9jZXNz
LmggXAogICAgIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oIFwKICAgICBXZWJQcm9jZXNzL3F0L1F0
QnVpbHRpbkJ1bmRsZS5oIFwKLSAgICBXZWJQcm9jZXNzL3F0L1F0QnVpbHRpbkJ1bmRsZVBhZ2Uu
aAorICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlUGFnZS5oIFwKKyAgICBXZWJQcm9j
ZXNzL3F0L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuaCBcCisgICAgV2ViUHJvY2Vzcy9xdC9RdE5l
dHdvcmtSZXBseS5oCiAKIFNPVVJDRVMgKz0gXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1l
bnRDb2RlcnMuY3BwIFwKQEAgLTQ2MCw2ICs0NjcsOCBAQCBTT1VSQ0VTICs9IFwKICAgICBTaGFy
ZWQvcXQvTmF0aXZlV2ViV2hlZWxFdmVudFF0LmNwcCBcCiAgICAgU2hhcmVkL3F0L1dlYkNvcmVB
cmd1bWVudENvZGVyc1F0LmNwcCBcCiAgICAgU2hhcmVkL3F0L1dlYkV2ZW50RmFjdG9yeVF0LmNw
cCBcCisgICAgU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5jcHAgXAorICAgIFNoYXJlZC9x
dC9RdE5ldHdvcmtSZXF1ZXN0RGF0YS5jcHAgXAogICAgIFNoYXJlZC9xdC9XZWJVUkxSZXF1ZXN0
UXQuY3BwIFwKICAgICBTaGFyZWQvcXQvV2ViVVJMUmVzcG9uc2VRdC5jcHAgXAogICAgIFVJUHJv
Y2Vzcy9BUEkvQy9XS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmNwcCBcCkBAIC00OTksNiArNTA4
LDggQEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2VibmF2aWdhdGlvbmhp
c3RvcnkuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIFwKICAg
ICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlci5jcHAgXAorICAgIFVJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5LmNwcCBcCisgICAgVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t1cmxzY2hlbWVkZWxlZ2F0ZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdl
YnByZWZlcmVuY2VzLmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2Vidmlld3BvcnRpbmZv
LmNwcCBcCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlUHJveHkuY3BwIFwKQEAgLTcwOCw2ICs3MTksOCBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuY3BwIFwKICAgICBXZWJQcm9jZXNzL3F0L1F0QnVpbHRpbkJ1bmRs
ZS5jcHAgXAogICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlUGFnZS5jcHAgXAorICAg
IFdlYlByb2Nlc3MvcXQvUXROZXR3b3JrQWNjZXNzTWFuYWdlci5jcHAgXAorICAgIFdlYlByb2Nl
c3MvcXQvUXROZXR3b3JrUmVwbHkuY3BwIFwKICAgICBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NN
YWluUXQuY3BwIFwKICAgICBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHku
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlODgxMDMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmty
ZXBseS5jcHAKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgWmVu
byBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgInFxdWlja25ldHdvcmtyZXBseV9wLmgiCisKKyNpbmNsdWRlICJRdE5ldHdvcmtSZXBs
eURhdGEuaCIKKyNpbmNsdWRlICJRdE5ldHdvcmtSZXF1ZXN0RGF0YS5oIgorI2luY2x1ZGUgInFx
dWlja3dlYnZpZXdfcC5oIgorI2luY2x1ZGUgPFFEYXRlVGltZT4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKKworUVF1aWNrTmV0d29ya1JlcGx5OjpRUXVpY2tOZXR3b3JrUmVwbHkoUU9iamVj
dCogcGFyZW50KQorICAgIDogUU9iamVjdChwYXJlbnQpCisgICAgLCBtX25ldHdvcmtSZXBseURh
dGEoYWRvcHRSZWYobmV3IFdlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhKSkKK3sKKyAgICBRX0FT
U0VSVChwYXJlbnQpOworfQorCitRU3RyaW5nIFFRdWlja05ldHdvcmtSZXBseTo6Y29udGVudFR5
cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPm1fY29udGVudFR5
cGU7Cit9CisKK3ZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb250ZW50VHlwZShjb25zdCBR
U3RyaW5nJiBjb250ZW50VHlwZSkKK3sKKyAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fY29udGVu
dFR5cGUgPSBjb250ZW50VHlwZTsKK30KKworUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRp
b24gUVF1aWNrTmV0d29ya1JlcGx5OjpvcGVyYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBt
X25ldHdvcmtSZXBseURhdGEtPm1fb3BlcmF0aW9uOworfQorCit2b2lkIFFRdWlja05ldHdvcmtS
ZXBseTo6c2V0T3BlcmF0aW9uKFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0aW9uIG9wZXJh
dGlvbikKK3sKKyAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fb3BlcmF0aW9uID0gb3BlcmF0aW9u
OworfQorCitRU3RyaW5nIFFRdWlja05ldHdvcmtSZXBseTo6Y29udGVudERpc3Bvc2l0aW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2NvbnRlbnREaXNwb3Np
dGlvbjsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldENvbnRlbnREaXNwb3NpdGlv
bihjb25zdCBRU3RyaW5nJiBkaXNwb3NpdGlvbikKK3sKKyAgICBtX25ldHdvcmtSZXBseURhdGEt
Pm1fY29udGVudERpc3Bvc2l0aW9uID0gZGlzcG9zaXRpb247Cit9CisKK1FTdHJpbmcgUVF1aWNr
TmV0d29ya1JlcGx5Ojpsb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1Jl
cGx5RGF0YS0+bV9sb2NhdGlvbjsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldExv
Y2F0aW9uKGNvbnN0IFFTdHJpbmcmIGxvY2F0aW9uKQoreworICAgIG1fbmV0d29ya1JlcGx5RGF0
YS0+bV9sb2NhdGlvbiA9IGxvY2F0aW9uOworfQorCitRU3RyaW5nIFFRdWlja05ldHdvcmtSZXBs
eTo6bGFzdE1vZGlmaWVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUURhdGVUaW1lOjpmcm9tTVNl
Y3NTaW5jZUVwb2NoKG1fbmV0d29ya1JlcGx5RGF0YS0+bV9sYXN0TW9kaWZpZWQpLnRvU3RyaW5n
KFF0OjpJU09EYXRlKTsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldExhc3RNb2Rp
ZmllZChjb25zdCBRU3RyaW5nJiBsYXN0TW9kaWZpZWQpCit7CisgICAgbV9uZXR3b3JrUmVwbHlE
YXRhLT5tX2xhc3RNb2RpZmllZCA9IFFEYXRlVGltZTo6ZnJvbVN0cmluZyhsYXN0TW9kaWZpZWQs
IFF0OjpJU09EYXRlKS50b01TZWNzU2luY2VFcG9jaCgpOworfQorCitRU3RyaW5nIFFRdWlja05l
dHdvcmtSZXBseTo6Y29va2llKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlE
YXRhLT5tX2Nvb2tpZTsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldENvb2tpZShj
b25zdCBRU3RyaW5nJiBjb29raWUpCit7CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2Nvb2tp
ZSA9IGNvb2tpZTsKK30KKworUVN0cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6OnVzZXJBZ2VudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+bV91c2VyQWdlbnQ7Cit9
CisKK3ZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRVc2VyQWdlbnQoY29uc3QgUVN0cmluZyYg
dXNlckFnZW50KQoreworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV91c2VyQWdlbnQgPSB1c2Vy
QWdlbnQ7Cit9CisKK1FTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXJ2ZXIoKSBjb25zdAor
eworICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPm1fc2VydmVyOworfQorCit2b2lkIFFR
dWlja05ldHdvcmtSZXBseTo6c2V0U2VydmVyKGNvbnN0IFFTdHJpbmcmIHNlcnZlcikKK3sKKyAg
ICBtX25ldHdvcmtSZXBseURhdGEtPm1fc2VydmVyID0gc2VydmVyOworfQorCitRU3RyaW5nIFFR
dWlja05ldHdvcmtSZXBseTo6ZGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKG1fbmV0d29ya1JlcGx5
RGF0YS0+bV9kYXRhSGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gUVN0cmluZygpOwor
ICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNtID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUobV9uZXR3
b3JrUmVwbHlEYXRhLT5tX2RhdGFIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOworICAg
IGlmICghc20pCisgICAgICAgIHJldHVybiBRU3RyaW5nKCk7CisKKyAgICB1aW50NjRfdCBzdHJp
bmdMZW5ndGggPSBtX25ldHdvcmtSZXBseURhdGEtPm1fY29udGVudExlbmd0aCAvIHNpemVvZihV
Q2hhcik7CisgICAgcmV0dXJuIFFTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+
KHNtLT5kYXRhKCkpLCBzdHJpbmdMZW5ndGgpOworfQorCit2b2lkIFFRdWlja05ldHdvcmtSZXBs
eTo6c2V0RGF0YShjb25zdCBRU3RyaW5nJiBkYXRhKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24g
Y2FuIGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzLiBJbiB0aGlzIGNhc2UgdGhlIHByZXZpb3VzIFNo
YXJlZE1lbW9yeSBoYW5kbGVzCisgICAgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBhbmQgdGhlIHBy
ZXZpb3VzbHkgYWxsb2NhdGVkIFNoYXJlZE1lbW9yeSB3aWxsIGRpZSB3aXRoIHRoZSBsYXN0IGhh
bmRsZS4KKyAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fY29udGVudExlbmd0aCA9IDA7CisKKyAg
ICBpZiAoZGF0YS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvbnN0IFVDaGFyKiB1
Y2hhckRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oZGF0YS5jb25zdERhdGEo
KSk7CisgICAgdWludDY0X3Qgc21MZW5ndGggPSBzaXplb2YoVUNoYXIpICogZGF0YS5sZW5ndGgo
KTsKKworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNtID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUo
c21MZW5ndGgpOworICAgIGlmICghc20pCisgICAgICAgIHJldHVybjsKKyAgICAvLyBUaGUgc2l6
ZSBvZiB0aGUgYWxsb2NhdGVkIHNoYXJlZCBtZW1vcnkgY2FuIGJlIGJpZ2dlciB0aGFuIHJlcXVl
c3RlZC4KKyAgICAvLyBVc3VhbGx5IHRoZSBzaXplIHdpbGwgYmUgcm91bmRlZCB1cCB0byB0aGUg
bmV4dCBtdWx0aXBsZSBvZiBhIHBhZ2Ugc2l6ZS4KKyAgICBtZW1jcHkoc20tPmRhdGEoKSwgdWNo
YXJEYXRhLCBzbUxlbmd0aCk7CisKKyAgICBpZiAoIXNtLT5jcmVhdGVIYW5kbGUobV9uZXR3b3Jr
UmVwbHlEYXRhLT5tX2RhdGFIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2NvbnRlbnRMZW5ndGggPSBzbUxl
bmd0aDsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNlbmQoKQoreworICAgIFFPYmpl
Y3QqIHNjaGVtZVBhcmVudCA9IHBhcmVudCgpLT5wYXJlbnQoKTsKKyAgICBpZiAoIXNjaGVtZVBh
cmVudCkKKyAgICAgICAgcmV0dXJuOworICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqIHdl
YlZpZXdFeHBlcmltZW50YWwgPSBxb2JqZWN0X2Nhc3Q8UVF1aWNrV2ViVmlld0V4cGVyaW1lbnRh
bCo+KHNjaGVtZVBhcmVudC0+cGFyZW50KCkpOworICAgIGlmICghd2ViVmlld0V4cGVyaW1lbnRh
bCkKKyAgICAgICAgcmV0dXJuOworICAgIHdlYlZpZXdFeHBlcmltZW50YWwtPnNlbmRBcHBsaWNh
dGlvblNjaGVtZVJlcGx5KHRoaXMpOworfQorCitXVEY6OlJlZlB0cjxXZWJLaXQ6OlF0TmV0d29y
a1JlcXVlc3REYXRhPiBRUXVpY2tOZXR3b3JrUmVwbHk6Om5ldHdvcmtSZXF1ZXN0RGF0YSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcXVlc3REYXRhOworfQorCit2b2lkIFFRdWlj
a05ldHdvcmtSZXBseTo6c2V0TmV0d29ya1JlcXVlc3REYXRhKFdURjo6UmVmUHRyPFdlYktpdDo6
UXROZXR3b3JrUmVxdWVzdERhdGE+IGRhdGEpCit7CisgICAgbV9uZXR3b3JrUmVxdWVzdERhdGEg
PSBkYXRhOworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9yZXBseVV1aWQgPSBkYXRhLT5tX3Jl
cGx5VXVpZDsKK30KKworV1RGOjpSZWZQdHI8V2ViS2l0OjpRdE5ldHdvcmtSZXBseURhdGE+IFFR
dWlja05ldHdvcmtSZXBseTo6bmV0d29ya1JlcGx5RGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbmV0d29ya1JlcGx5RGF0YTsKK30KKworI2luY2x1ZGUgIm1vY19xcXVpY2tuZXR3b3JrcmVw
bHlfcC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja25ldHdvcmtyZXBseV9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja25ldHdvcmtyZXBseV9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZmZlNDVmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrbmV0d29ya3JlcGx5X3AuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYg
cXF1aWNrbmV0d29ya3JlcGx5X3BfaAorI2RlZmluZSBxcXVpY2tuZXR3b3JrcmVwbHlfcF9oCisK
KyNpbmNsdWRlICJRdE5ldHdvcmtSZXBseURhdGEuaCIKKyNpbmNsdWRlICJRdE5ldHdvcmtSZXF1
ZXN0RGF0YS5oIgorI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNpbmNsdWRlIDxRTmV0d29y
a0FjY2Vzc01hbmFnZXI+CisjaW5jbHVkZSA8UU9iamVjdD4KKyNpbmNsdWRlIDxRdERlY2xhcmF0
aXZlL3FkZWNsYXJhdGl2ZWxpc3QuaD4KKyNpbmNsdWRlIDxRdFF1aWNrL3FxdWlja2l0ZW0uaD4K
KworY2xhc3MgUVdFQktJVF9FWFBPUlQgUVF1aWNrTmV0d29ya1JlcGx5IDogcHVibGljIFFPYmpl
Y3QgeworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIGNvbnRlbnRUeXBlIFJF
QUQgY29udGVudFR5cGUgV1JJVEUgc2V0Q29udGVudFR5cGUpCisgICAgUV9QUk9QRVJUWShRU3Ry
aW5nIGRhdGEgUkVBRCBkYXRhIFdSSVRFIHNldERhdGEpCisgICAgUV9FTlVNUyhRTmV0d29ya0Fj
Y2Vzc01hbmFnZXI6Ok9wZXJhdGlvbikKKworcHVibGljOgorICAgIFFRdWlja05ldHdvcmtSZXBs
eShRT2JqZWN0KiBwYXJlbnQpOworICAgIFFTdHJpbmcgY29udGVudFR5cGUoKSBjb25zdDsKKyAg
ICB2b2lkIHNldENvbnRlbnRUeXBlKGNvbnN0IFFTdHJpbmcmKTsKKyAgICBRTmV0d29ya0FjY2Vz
c01hbmFnZXI6Ok9wZXJhdGlvbiBvcGVyYXRpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldE9wZXJh
dGlvbihRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbik7CisgICAgUVN0cmluZyBjb250
ZW50RGlzcG9zaXRpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnREaXNwb3NpdGlvbihj
b25zdCBRU3RyaW5nJik7CisgICAgUVN0cmluZyBsb2NhdGlvbigpIGNvbnN0OworICAgIHZvaWQg
c2V0TG9jYXRpb24oY29uc3QgUVN0cmluZyYpOworICAgIFFTdHJpbmcgbGFzdE1vZGlmaWVkKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRMYXN0TW9kaWZpZWQoY29uc3QgUVN0cmluZyYpOworICAgIFFT
dHJpbmcgY29va2llKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb29raWUoY29uc3QgUVN0cmluZyYp
OworICAgIFFTdHJpbmcgdXNlckFnZW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXRVc2VyQWdlbnQo
Y29uc3QgUVN0cmluZyYpOworICAgIFFTdHJpbmcgc2VydmVyKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRTZXJ2ZXIoY29uc3QgUVN0cmluZyYpOworCisgICAgUVN0cmluZyBkYXRhKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXREYXRhKGNvbnN0IFFTdHJpbmcmIGRhdGEpOworCisgICAgV1RGOjpSZWZQdHI8
V2ViS2l0OjpRdE5ldHdvcmtSZXF1ZXN0RGF0YT4gbmV0d29ya1JlcXVlc3REYXRhKCkgY29uc3Q7
CisgICAgdm9pZCBzZXROZXR3b3JrUmVxdWVzdERhdGEoV1RGOjpSZWZQdHI8V2ViS2l0OjpRdE5l
dHdvcmtSZXF1ZXN0RGF0YT4gZGF0YSk7CisgICAgV1RGOjpSZWZQdHI8V2ViS2l0OjpRdE5ldHdv
cmtSZXBseURhdGE+IG5ldHdvcmtSZXBseURhdGEoKSBjb25zdDsKKworcHVibGljIFFfU0xPVFM6
CisgICAgdm9pZCBzZW5kKCk7CisKK3ByaXZhdGU6CisgICAgV1RGOjpSZWZQdHI8V2ViS2l0OjpR
dE5ldHdvcmtSZXF1ZXN0RGF0YT4gbV9uZXR3b3JrUmVxdWVzdERhdGE7CisgICAgV1RGOjpSZWZQ
dHI8V2ViS2l0OjpRdE5ldHdvcmtSZXBseURhdGE+IG1fbmV0d29ya1JlcGx5RGF0YTsKK307CisK
K1FNTF9ERUNMQVJFX1RZUEUoUVF1aWNrTmV0d29ya1JlcGx5KQorCisjZW5kaWYgLy8gcXF1aWNr
bmV0d29ya3JlcGx5X3BfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcXVlc3RfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjExMzExNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0X3AuaApAQCAtMCwwICsxLDUwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9y
Zz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgcXF1aWNrbmV0d29ya3JlcXVlc3RfcF9oCisjZGVmaW5lIHFxdWlja25l
dHdvcmtyZXF1ZXN0X3BfaAorCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUg
PFFPYmplY3Q+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmVsaXN0Lmg+Cisj
aW5jbHVkZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFR
dWlja05ldHdvcmtSZXF1ZXN0IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisgICAg
UV9QUk9QRVJUWShRU3RyaW5nIHVybCBSRUFEIHVybCkKKworcHVibGljOgorICAgIFFRdWlja05l
dHdvcmtSZXF1ZXN0KFFPYmplY3QqIHBhcmVudCkKKyAgICAgICAgOiBRT2JqZWN0KHBhcmVudCkK
KyAgICB7CisgICAgICAgIFFfQVNTRVJUKHBhcmVudCk7CisgICAgfQorCisgICAgUVN0cmluZyB1
cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQorICAgIHZvaWQgc2V0VXJsKGNvbnN0IFFTdHJp
bmcmIHVybCkgeyBtX3VybCA9IHVybDsgfQorCitwcml2YXRlOgorICAgIFFTdHJpbmcgbV91cmw7
Cit9OworCitRTUxfREVDTEFSRV9UWVBFKFFRdWlja05ldHdvcmtSZXF1ZXN0KQorCisjZW5kaWYg
Ly8gcXF1aWNrbmV0d29ya3JlcXVlc3RfcF9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGUuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t1cmxzY2hlbWVkZWxlZ2F0ZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVkNjMwNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGUu
Y3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgWmVubyBBbGJp
c3NlciA8emVub0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
InFxdWlja3VybHNjaGVtZWRlbGVnYXRlX3AuaCIKKworI2luY2x1ZGUgInFxdWlja25ldHdvcmty
ZXBseV9wLmgiCisjaW5jbHVkZSAicXF1aWNrbmV0d29ya3JlcXVlc3RfcC5oIgorCitRUXVpY2tV
cmxTY2hlbWVEZWxlZ2F0ZTo6UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUoUU9iamVjdCogcGFyZW50
KQorICAgIDogUU9iamVjdChwYXJlbnQpCisgICAgLCBtX3JlcXVlc3QobmV3IFFRdWlja05ldHdv
cmtSZXF1ZXN0KHRoaXMpKQorICAgICwgbV9yZXBseShuZXcgUVF1aWNrTmV0d29ya1JlcGx5KHRo
aXMpKQoreyB9CisKK1FTdHJpbmcgUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU6OnNjaGVtZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fc2NoZW1lOworfQorCit2b2lkIFFRdWlja1VybFNjaGVtZURl
bGVnYXRlOjpzZXRTY2hlbWUoY29uc3QgUVN0cmluZyYgc2NoZW1lKQoreworICAgIG1fc2NoZW1l
ID0gc2NoZW1lOworICAgIGVtaXQgc2NoZW1lQ2hhbmdlZCgpOworfQorCitRUXVpY2tOZXR3b3Jr
UmVxdWVzdCogUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU6OnJlcXVlc3QoKSBjb25zdAoreworICAg
IHJldHVybiBtX3JlcXVlc3Q7Cit9CisKK1FRdWlja05ldHdvcmtSZXBseSogUVF1aWNrVXJsU2No
ZW1lRGVsZWdhdGU6OnJlcGx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZXBseTsKK30KKwor
I2luY2x1ZGUgIm1vY19xcXVpY2t1cmxzY2hlbWVkZWxlZ2F0ZV9wLmNwcCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGVf
cC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t1cmxzY2hlbWVkZWxl
Z2F0ZV9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlNjAyNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJs
c2NoZW1lZGVsZWdhdGVfcC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgWmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBxcXVpY2t1
cmxzY2hlbWVkZWxlZ2F0ZV9wX2gKKyNkZWZpbmUgcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGVfcF9o
CisKKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSA8UU9iamVjdD4KKyNpbmNs
dWRlIDxRdFF1aWNrL3FxdWlja2l0ZW0uaD4KKworY2xhc3MgUVF1aWNrTmV0d29ya1JlcXVlc3Q7
CitjbGFzcyBRUXVpY2tOZXR3b3JrUmVwbHk7CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFRdWlj
a1VybFNjaGVtZURlbGVnYXRlIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisgICAg
UV9QUk9QRVJUWShRU3RyaW5nIHNjaGVtZSBSRUFEIHNjaGVtZSBXUklURSBzZXRTY2hlbWUgTk9U
SUZZIHNjaGVtZUNoYW5nZWQpCisgICAgUV9QUk9QRVJUWShRUXVpY2tOZXR3b3JrUmVxdWVzdCog
cmVxdWVzdCBSRUFEIHJlcXVlc3QpCisgICAgUV9QUk9QRVJUWShRUXVpY2tOZXR3b3JrUmVwbHkq
IHJlcGx5IFJFQUQgcmVwbHkpCisKK3B1YmxpYzoKKyAgICBRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0
ZShRT2JqZWN0KiBwYXJlbnQgPSAwKTsKKyAgICBRU3RyaW5nIHNjaGVtZSgpIGNvbnN0OworICAg
IHZvaWQgc2V0U2NoZW1lKGNvbnN0IFFTdHJpbmcmIHNjaGVtZSk7CisgICAgUVF1aWNrTmV0d29y
a1JlcXVlc3QqIHJlcXVlc3QoKSBjb25zdDsKKyAgICBRUXVpY2tOZXR3b3JrUmVwbHkqIHJlcGx5
KCkgY29uc3Q7CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIHNjaGVtZUNoYW5nZWQoKTsKKyAgICB2
b2lkIHJlY2VpdmVkUmVxdWVzdCgpOworCitwcml2YXRlOgorICAgIFFTdHJpbmcgbV9zY2hlbWU7
CisgICAgUVF1aWNrTmV0d29ya1JlcXVlc3QqIG1fcmVxdWVzdDsKKyAgICBRUXVpY2tOZXR3b3Jr
UmVwbHkqIG1fcmVwbHk7Cit9OworCitRTUxfREVDTEFSRV9UWVBFKFFRdWlja1VybFNjaGVtZURl
bGVnYXRlKQorCisjZW5kaWYgLy8gcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGVfcF9oCisKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKaW5k
ZXggNGRiZjkzOC4uNTQ2NjNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiV2Vi
UGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKIAorI2luY2x1ZGUgInFx
dWlja25ldHdvcmtyZXBseV9wLmgiCiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wX3AuaCIKICNp
bmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3BfcC5oIgogI2luY2x1ZGUgInF3ZWJkb3dubG9hZGl0ZW1f
cF9wLmgiCkBAIC01OTUsNiArNTk2LDcgQEAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6UVF1
aWNrV2ViVmlld0V4cGVyaW1lbnRhbChRUXVpY2tXZWJWaWV3ICp3ZWJWaWV3KQogICAgIDogUU9i
amVjdCh3ZWJWaWV3KQogICAgICwgcV9wdHIod2ViVmlldykKICAgICAsIGRfcHRyKHdlYlZpZXct
PmRfcHRyLmRhdGEoKSkKKyAgICAsIHNjaGVtZVBhcmVudChuZXcgUU9iamVjdCh0aGlzKSkKICAg
ICAsIG1fdmlld3BvcnRJbmZvKG5ldyBRV2ViVmlld3BvcnRJbmZvKHdlYlZpZXctPmRfcHRyLmRh
dGEoKSwgdGhpcykpCiB7CiB9CkBAIC02OTgsNiArNzAwLDY5IEBAIGJvb2wgUVF1aWNrV2ViVmll
d0V4cGVyaW1lbnRhbDo6dXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKCkgY29uc3QKICAg
ICByZXR1cm4gZC0+dXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyOwogfQogCitRUXVpY2tV
cmxTY2hlbWVEZWxlZ2F0ZSogUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdh
dGVzX0F0KFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4q
IHByb3BlcnR5LCBpbnQgaW5kZXgpCit7CisgICAgY29uc3QgUU9iamVjdExpc3QgY2hpbGRyZW4g
PSBwcm9wZXJ0eS0+b2JqZWN0LT5jaGlsZHJlbigpOworICAgIGlmIChpbmRleCA8IGNoaWxkcmVu
LmNvdW50KCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRUXVpY2tVcmxTY2hlbWVEZWxl
Z2F0ZSo+KGNoaWxkcmVuLmF0KGluZGV4KSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUVF1
aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzX0FwcGVuZChRRGVjbGFyYXRp
dmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+KiBwcm9wZXJ0eSwgUVF1aWNr
VXJsU2NoZW1lRGVsZWdhdGUgKnNjaGVtZSkKK3sKKyAgICBRT2JqZWN0KiBzY2hlbWVQYXJlbnQg
PSBwcm9wZXJ0eS0+b2JqZWN0OworICAgIHNjaGVtZS0+c2V0UGFyZW50KHNjaGVtZVBhcmVudCk7
CisgICAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCogd2ViVmlld0V4cGVyaW1lbnRhbCA9IHFv
YmplY3RfY2FzdDxRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsKj4ocHJvcGVydHktPm9iamVjdC0+
cGFyZW50KCkpOworICAgIGlmICghd2ViVmlld0V4cGVyaW1lbnRhbCkKKyAgICAgICAgcmV0dXJu
OworICAgIFFRdWlja1dlYlZpZXdQcml2YXRlKiBkID0gd2ViVmlld0V4cGVyaW1lbnRhbC0+ZF9m
dW5jKCk7CisgICAgZC0+d2ViUGFnZVByb3h5LT5yZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKHNj
aGVtZS0+c2NoZW1lKCkpOworfQorCitpbnQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2No
ZW1lRGVsZWdhdGVzX0NvdW50KFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hl
bWVEZWxlZ2F0ZT4qIHByb3BlcnR5KQoreworICAgIHJldHVybiBwcm9wZXJ0eS0+b2JqZWN0LT5j
aGlsZHJlbigpLmNvdW50KCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6
c2NoZW1lRGVsZWdhdGVzX0NsZWFyKFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxT
Y2hlbWVEZWxlZ2F0ZT4qIHByb3BlcnR5KQoreworICAgIGNvbnN0IFFPYmplY3RMaXN0IGNoaWxk
cmVuID0gcHJvcGVydHktPm9iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICBmb3IgKGludCBpbmRleCA9
IDA7IGluZGV4IDwgY2hpbGRyZW4uY291bnQoKTsgaW5kZXgrKykgeworICAgICAgICBRT2JqZWN0
KiBjaGlsZCA9IGNoaWxkcmVuLmF0KGluZGV4KTsKKyAgICAgICAgY2hpbGQtPnNldFBhcmVudCgw
KTsKKyAgICAgICAgZGVsZXRlIGNoaWxkOworICAgIH0KK30KKworUURlY2xhcmF0aXZlTGlzdFBy
b3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFs
OjpzY2hlbWVEZWxlZ2F0ZXMoKQoreworICAgIHJldHVybiBRRGVjbGFyYXRpdmVMaXN0UHJvcGVy
dHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+KHNjaGVtZVBhcmVudCwgMCwKKyAgICAgICAgICAg
IFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURlbGVnYXRlc19BcHBlbmQsCisgICAg
ICAgICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVEZWxlZ2F0ZXNfQ291bnQs
CisgICAgICAgICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVEZWxlZ2F0ZXNf
QXQsCisgICAgICAgICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVEZWxlZ2F0
ZXNfQ2xlYXIpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6Omludm9rZUFw
cGxpY2F0aW9uU2NoZW1lSGFuZGxlcihQYXNzUmVmUHRyPFF0TmV0d29ya1JlcXVlc3REYXRhPiBy
ZXF1ZXN0KQoreworICAgIGNvbnN0IFFPYmplY3RMaXN0IGNoaWxkcmVuID0gc2NoZW1lUGFyZW50
LT5jaGlsZHJlbigpOworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBjaGlsZHJlbi5j
b3VudCgpOyBpbmRleCsrKSB7CisgICAgICAgIFFRdWlja1VybFNjaGVtZURlbGVnYXRlKiBkZWxl
Z2F0ZSA9IHFvYmplY3RfY2FzdDxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZSo+KGNoaWxkcmVuLmF0
KGluZGV4KSk7CisgICAgICAgIGlmICghZGVsZWdhdGUpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKCFkZWxlZ2F0ZS0+c2NoZW1lKCkuY29tcGFyZShRU3RyaW5nKHJlcXVlc3Qt
Pm1fc2NoZW1lKSwgUXQ6OkNhc2VJbnNlbnNpdGl2ZSkpIHsKKyAgICAgICAgICAgIGRlbGVnYXRl
LT5yZXBseSgpLT5zZXROZXR3b3JrUmVxdWVzdERhdGEocmVxdWVzdCk7CisgICAgICAgICAgICBl
bWl0IGRlbGVnYXRlLT5yZWNlaXZlZFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZW5k
QXBwbGljYXRpb25TY2hlbWVSZXBseShRUXVpY2tOZXR3b3JrUmVwbHkqIHJlcGx5KQoreworICAg
IGRfcHRyLT53ZWJQYWdlUHJveHktPnNlbmRBcHBsaWNhdGlvblNjaGVtZVJlcGx5KHJlcGx5KTsK
K30KKwogdm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpnb0ZvcndhcmRUbyhpbnQgaW5k
ZXgpCiB7CiAgICAgZF9wdHItPm5hdmlnYXRpb25IaXN0b3J5LT5kLT5nb0ZvcndhcmRUbyhpbmRl
eCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnZpZXdfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
X3AuaAppbmRleCA0MjA0NTNkLi5lNTQyMDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKQEAgLTIxLDcgKzIxLDkgQEAKICNpZm5k
ZWYgcXF1aWNrd2Vidmlld19wX2gKICNkZWZpbmUgcXF1aWNrd2Vidmlld19wX2gKIAorI2luY2x1
ZGUgInFxdWlja3VybHNjaGVtZWRlbGVnYXRlX3AuaCIKICNpbmNsdWRlICJxd2Via2l0Z2xvYmFs
LmgiCisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmVsaXN0Lmg+CiAjaW5jbHVk
ZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+CiAKIGNsYXNzIFFXZWJOYXZpZ2F0aW9uUmVxdWVzdDsK
QEAgLTM1LDExICszNywyMCBAQCBjbGFzcyBRV2ViTmF2aWdhdGlvbkhpc3Rvcnk7CiBjbGFzcyBR
V2ViUHJlZmVyZW5jZXM7CiBjbGFzcyBRV2ViUGVybWlzc2lvblJlcXVlc3Q7CiBjbGFzcyBRV2Vi
Vmlld3BvcnRJbmZvOworY2xhc3MgUVF1aWNrTmV0d29ya1JlcGx5OwogCiBuYW1lc3BhY2UgV1RS
IHsKIGNsYXNzIFBsYXRmb3JtV2ViVmlldzsKIH0KIAorbmFtZXNwYWNlIFdlYktpdCB7CitjbGFz
cyBRdE5ldHdvcmtSZXF1ZXN0RGF0YTsKK30KKworbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0ZTxj
bGFzcyBUPiBjbGFzcyBQYXNzUmVmUHRyOworfQorCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFx
dWVXS0NvbnRleHQqIFdLQ29udGV4dFJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdL
UGFnZUdyb3VwKiBXS1BhZ2VHcm91cFJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdL
UGFnZSogV0tQYWdlUmVmOwpAQCAtMTc2LDYgKzE4Nyw3IEBAIGNsYXNzIFFXRUJLSVRfRVhQT1JU
IFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwgOiBwdWJsaWMgUU9iamVjdCB7CiAgICAgUV9QUk9Q
RVJUWShRV2ViUHJlZmVyZW5jZXMqIHByZWZlcmVuY2VzIFJFQUQgcHJlZmVyZW5jZXMgQ09OU1RB
TlQgRklOQUwpCiAgICAgUV9QUk9QRVJUWShib29sIHVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2
aW91ciBSRUFEIHVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91ciBXUklURSBzZXRVc2VUcmFk
aXRpb25hbERlc2t0b3BCZWhhdmlvdXIpCiAgICAgUV9QUk9QRVJUWShRV2ViVmlld3BvcnRJbmZv
KiB2aWV3cG9ydEluZm8gUkVBRCB2aWV3cG9ydEluZm8gQ09OU1RBTlQgRklOQUwpCisgICAgUV9Q
Uk9QRVJUWShRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+
IHVybFNjaGVtZURlbGVnYXRlcyBSRUFEIHNjaGVtZURlbGVnYXRlcykKICAgICBRX0VOVU1TKE5h
dmlnYXRpb25SZXF1ZXN0QWN0aW9uKQogCiBwdWJsaWM6CkBAIC0yMDIsNiArMjE0LDE0IEBAIHB1
YmxpYzoKICAgICBRV2ViTmF2aWdhdGlvbkhpc3RvcnkqIG5hdmlnYXRpb25IaXN0b3J5KCkgY29u
c3Q7CiAgICAgUVF1aWNrV2ViUGFnZSogcGFnZSgpOwogCisgICAgc3RhdGljIFFRdWlja1VybFNj
aGVtZURlbGVnYXRlKiBzY2hlbWVEZWxlZ2F0ZXNfQXQoUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5
PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiosIGludCBpbmRleCk7CisgICAgc3RhdGljIHZvaWQg
c2NoZW1lRGVsZWdhdGVzX0FwcGVuZChRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJs
U2NoZW1lRGVsZWdhdGU+KiwgUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUqKTsKKyAgICBzdGF0aWMg
aW50IHNjaGVtZURlbGVnYXRlc19Db3VudChRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNr
VXJsU2NoZW1lRGVsZWdhdGU+Kik7CisgICAgc3RhdGljIHZvaWQgc2NoZW1lRGVsZWdhdGVzX0Ns
ZWFyKFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4qKTsK
KyAgICBRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+IHNj
aGVtZURlbGVnYXRlcygpOworICAgIHZvaWQgaW52b2tlQXBwbGljYXRpb25TY2hlbWVIYW5kbGVy
KFdURjo6UGFzc1JlZlB0cjxXZWJLaXQ6OlF0TmV0d29ya1JlcXVlc3REYXRhPik7CisgICAgdm9p
ZCBzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseShRUXVpY2tOZXR3b3JrUmVwbHkqKTsKKwogcHVi
bGljIFFfU0xPVFM6CiAgICAgdm9pZCBzZXRVc2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIo
Ym9vbCBlbmFibGUpOwogICAgIHZvaWQgZ29CYWNrVG8oaW50IGluZGV4KTsKQEAgLTIyMCw2ICsy
NDAsNyBAQCBRX1NJR05BTFM6CiBwcml2YXRlOgogICAgIFFRdWlja1dlYlZpZXcqIHFfcHRyOwog
ICAgIFFRdWlja1dlYlZpZXdQcml2YXRlKiBkX3B0cjsKKyAgICBRT2JqZWN0KiBzY2hlbWVQYXJl
bnQ7CiAgICAgUVdlYlZpZXdwb3J0SW5mbyogbV92aWV3cG9ydEluZm87CiAKICAgICBmcmllbmQg
Y2xhc3MgUXRXZWJQYWdlVUlDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKaW5kZXggY2VlNzUxNC4uNDJhMThmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaApAQCAtMzYsNiArMzYsOSBAQAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CiAjaW5jbHVkZSAiTmF0aXZlV2ViVG91Y2hFdmVudC5oIgogI2VuZGlmCisjaWYgUExBVEZPUk0o
UVQpCisjaW5jbHVkZSAiUXROZXR3b3JrUmVxdWVzdERhdGEuaCIKKyNlbmRpZgogI2luY2x1ZGUg
Ik5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24u
aCIKQEAgLTkyLDYgKzk1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBzdHJ1Y3QgV2lu
ZG93RmVhdHVyZXM7CiB9CiAKKyNpZiBQTEFURk9STShRVCkKK2NsYXNzIFFRdWlja05ldHdvcmtS
ZXBseTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFDKQogI2lmZGVmIF9fT0JKQ19fCiBAY2xh
c3MgV0tWaWV3OwpAQCAtMzAzLDYgKzMxMCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBt
YWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbnRhaW5zSW5h
Y3RpdmVTZWxlY3Rpb247IH0KICAgICB2b2lkIHNldE1haW50YWluc0luYWN0aXZlU2VsZWN0aW9u
KGJvb2wpOworI2lmIFBMQVRGT1JNKFFUKQorICAgIHZvaWQgcmVnaXN0ZXJBcHBsaWNhdGlvblNj
aGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSk7CisgICAgdm9pZCByZXNvbHZlQXBwbGljYXRpb25T
Y2hlbWVSZXF1ZXN0KFF0TmV0d29ya1JlcXVlc3REYXRhKTsKKyAgICB2b2lkIHNlbmRBcHBsaWNh
dGlvblNjaGVtZVJlcGx5KGNvbnN0IFFRdWlja05ldHdvcmtSZXBseSopOworI2VuZGlmCiAKICNp
ZiBQTEFURk9STShRVCkKICAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4
dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50
NjRfdCBzZWxlY3Rpb25TdGFydCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRfdCByZXBs
YWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQpOwpAQCAtOTg0
LDYgKzk5NiwxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBXS1BhZ2VEZWJ1Z1BhaW50RmxhZ3Mg
c19kZWJ1Z1BhaW50RmxhZ3M7CiAKICAgICBib29sIG1fc2hvdWxkU2VuZEV2ZW50c1N5bmNocm9u
b3VzbHk7CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBXVEY6Okhhc2hTZXQ8UmVmUHRyPFF0TmV0
d29ya1JlcXVlc3REYXRhPiA+IG1fYXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0czsKKyNlbmRpZgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCAwYmYxZmJkLi41YzIxMzNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmlu
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4K
QEAgLTEyMyw2ICsxMjMsMTAgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBEaWRS
ZWNlaXZlQ29udGVudExlbmd0aEZvclJlc291cmNlKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90
IHJlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgY29udGVudExlbmd0aCkKICAgICBEaWRGaW5p
c2hMb2FkRm9yUmVzb3VyY2UodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcmVzb3VyY2VJZGVu
dGlmaWVyKQogICAgIERpZEZhaWxMb2FkRm9yUmVzb3VyY2UodWludDY0X3QgZnJhbWVJRCwgdWlu
dDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGVycm9yKQor
I2lmIFBMQVRGT1JNKFFUKQorICAgIFJlc29sdmVBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QoV2Vi
S2l0OjpRdE5ldHdvcmtSZXF1ZXN0RGF0YSByZXF1ZXN0KQorI2VuZGlmCisKIAogICAgICMgQ3Vz
dG9tIHJlcHJlc2VudGF0aW9ucwogICAgIERpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVw
cmVzZW50YXRpb24oV1RGOjpTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUsIENvcmVJUEM6OkRhdGFS
ZWZlcmVuY2UgZGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFBhZ2VDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVu
dC5jcHAKaW5kZXggNDE1MzUwNS4uYjE3Mzc3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0UGFnZUNsaWVudC5jcHAKQEAgLTEwMCw2ICsxMDAsMTMgQEAgdm9pZCBRdFBhZ2VD
bGllbnQ6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKICAg
ICBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6Z2V0KG1fd2ViVmlldyktPmhhbmRsZURvd25sb2FkUmVx
dWVzdChkb3dubG9hZCk7CiB9CiAKK3ZvaWQgUXRQYWdlQ2xpZW50OjpoYW5kbGVBcHBsaWNhdGlv
blNjaGVtZVJlcXVlc3QoUGFzc1JlZlB0cjxRdE5ldHdvcmtSZXF1ZXN0RGF0YT4gcmVxdWVzdERh
dGEpCit7CisgICAgaWYgKCFtX3dlYlZpZXcgfHwgIW1fd2ViVmlldy0+ZXhwZXJpbWVudGFsKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtX3dlYlZpZXctPmV4cGVyaW1lbnRhbCgpLT5pbnZva2VB
cHBsaWNhdGlvblNjaGVtZUhhbmRsZXIocmVxdWVzdERhdGEuZ2V0KCkpOworfQorCiB2b2lkIFF0
UGFnZUNsaWVudDo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vyc29yKQogewog
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGZpeCB1bnRpbCB3ZSBnZXQgY3Vyc29y
IHN1cHBvcnQgaW4gUU1MIGl0ZW1zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0UGFnZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFn
ZUNsaWVudC5oCmluZGV4IDZlNzI2MDMuLmEzMTQ5YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWxhdW5jaFByb2Nlc3MoKTsKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
RHJhd2luZ0FyZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOwogICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopOworICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QoUGFzc1JlZlB0cjxRdE5ldHdvcmtS
ZXF1ZXN0RGF0YT4pOwogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BsYXlWaWV3KCk7CiAgICAgdmly
dHVhbCB2b2lkIHNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJQYWdlUHJveHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQuY3BwCmluZGV4IDQ1ODJlMTYuLmFjOWZkZTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJQYWdlUHJveHlRdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcApA
QCAtMjcsNiArMjcsOSBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogCiAjaW5jbHVkZSAi
UGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIlF0TmV0d29ya1JlcGx5RGF0YS5oIgorI2luY2x1ZGUg
IlF0UGFnZUNsaWVudC5oIgorI2luY2x1ZGUgInFxdWlja25ldHdvcmtyZXBseV9wLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KQEAgLTc3LDQgKzgwLDI2IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpjYW5jZWxDb21wb3NpdGlvbigpCiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpDYW5jZWxDb21wb3NpdGlvbigpLCBtX3BhZ2VJRCk7CiB9CiAKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpyZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1l
KQoreworICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UmVnaXN0ZXJBcHBs
aWNhdGlvblNjaGVtZShzY2hlbWUpLCBtX3BhZ2VJRCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5
OjpyZXNvbHZlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KFF0TmV0d29ya1JlcXVlc3REYXRhIHJl
cXVlc3QpCit7CisgICAgUmVmUHRyPFF0TmV0d29ya1JlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSA9
IGFkb3B0UmVmKG5ldyBRdE5ldHdvcmtSZXF1ZXN0RGF0YShyZXF1ZXN0KSk7CisgICAgbV9hcHBs
aWNhdGlvblNjaGVtZVJlcXVlc3RzLmFkZChyZXF1ZXN0RGF0YSk7CisgICAgc3RhdGljX2Nhc3Q8
UXRQYWdlQ2xpZW50Kj4obV9wYWdlQ2xpZW50KS0+aGFuZGxlQXBwbGljYXRpb25TY2hlbWVSZXF1
ZXN0KHJlcXVlc3REYXRhKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnNlbmRBcHBsaWNhdGlv
blNjaGVtZVJlcGx5KGNvbnN0IFFRdWlja05ldHdvcmtSZXBseSogcmVwbHkpCit7CisgICAgUmVm
UHRyPFF0TmV0d29ya1JlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSA9IHJlcGx5LT5uZXR3b3JrUmVx
dWVzdERhdGEoKTsKKyAgICBpZiAobV9hcHBsaWNhdGlvblNjaGVtZVJlcXVlc3RzLmNvbnRhaW5z
KHJlcXVlc3REYXRhKSkgeworICAgICAgICBSZWZQdHI8UXROZXR3b3JrUmVwbHlEYXRhPiByZXBs
eURhdGEgPSByZXBseS0+bmV0d29ya1JlcGx5RGF0YSgpOworICAgICAgICBwcm9jZXNzKCktPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoKnJlcGx5RGF0YSks
IHBhZ2VJRCgpKTsKKyAgICAgICAgbV9hcHBsaWNhdGlvblNjaGVtZVJlcXVlc3RzLnJlbW92ZShy
ZXF1ZXN0RGF0YSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKaW5kZXggYzc3NDQ2OC4uODUwODQxZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKQEAgLTE0MzgsNyArMTQzOCwxNiBAQCB2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKQogCiBQYXNzUmVmUHRy
PEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVOZXR3
b3JraW5nQ29udGV4dCgpCiB7Ci0gICAgcmV0dXJuIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6
OmNyZWF0ZShtX2ZyYW1lLT5jb3JlRnJhbWUoKSk7CisgICAgUmVmUHRyPFdlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQ+IGNvbnRleHQgPSBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpjcmVhdGUo
bV9mcmFtZS0+Y29yZUZyYW1lKCkpOworI2lmIFBMQVRGT1JNKFFUKQorICAgIC8vIFdlIGVuY2Fw
c3VsYXRlIHRoZSBXZWJQYWdlIHBvaW50ZXIgYXMgYSBwcm9wZXJ0eSBvZiBhIFFPYmplY3QsCisg
ICAgLy8gYmVjYXVzZSB0aGUgbmV0d29ya2luZyBjb250ZXh0IG9ubHkgYWNjZXB0cyBhIFFPYmpl
Y3QgYXMgb3JpZ2luYXRpbmcgb2JqZWN0LgorICAgIFFPYmplY3QqIHBhZ2VQb2ludGVyV3JhcHBl
ciA9IG5ldyBRT2JqZWN0OworICAgIHBhZ2VQb2ludGVyV3JhcHBlci0+c2V0UHJvcGVydHkoIlBh
Z2VQb2ludGVyIiwgUVZhcmlhbnQ6OmZyb21WYWx1ZShzdGF0aWNfY2FzdDx2b2lkKj4obV9mcmFt
ZS0+cGFnZSgpKSkpOworICAgIHBhZ2VQb2ludGVyV3JhcHBlci0+c2V0UHJvcGVydHkoImRlbGV0
ZVdpdGhDb250ZXh0IiwgUVZhcmlhbnQ6OmZyb21WYWx1ZSh0cnVlKSk7CisgICAgY29udGV4dC0+
c2V0T3JpZ2luYXRpbmdPYmplY3QocGFnZVBvaW50ZXJXcmFwcGVyKTsKKyNlbmRpZgorICAgIHJl
dHVybiBjb250ZXh0LnJlbGVhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAppbmRleCBhNmYzYWFi
Li5lNjk5NTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVk
ZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgogI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8
UVZhcmlhbnQ+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzMsMTEgKzM0LDI0IEBAIFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQoRnJhbWUq
IGZyYW1lKQogewogfQogCitXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojp+V2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dCgpCit7CisgICAgaWYgKG1fb3JpZ2luYXRpbmdPYmplY3QgJiYgbV9vcmln
aW5hdGluZ09iamVjdC0+cHJvcGVydHkoImRlbGV0ZVdpdGhDb250ZXh0IikudG9Cb29sKCkpIHsK
KyAgICAgICAgZGVsZXRlIG1fb3JpZ2luYXRpbmdPYmplY3Q7CisgICAgICAgIG1fb3JpZ2luYXRp
bmdPYmplY3QgPSAwOworICAgIH0KK30KKwogUGFzc1JlZlB0cjxXZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0PiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpjcmVhdGUoRnJhbWUqIGZyYW1lKQog
ewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dChmcmFt
ZSkpOwogfQogCit2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldE9yaWdpbmF0aW5n
T2JqZWN0KFFPYmplY3QqIG9yaWdpbikKK3sKKyAgICBtX29yaWdpbmF0aW5nT2JqZWN0ID0gb3Jp
Z2luOworfQorCiBRT2JqZWN0KiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpvcmlnaW5hdGlu
Z09iamVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fb3JpZ2luYXRpbmdPYmplY3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCmluZGV4IDEwYzM0MWEuLjVm
OTU1NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvcXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCkBA
IC0yNyw2ICsyNyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFdlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQgOiBwdWJsaWMgRnJhbWVOZXR3b3JraW5nQ29udGV4dCB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dD4gY3JlYXRlKEZy
YW1lKik7CisgICAgdm9pZCBzZXRPcmlnaW5hdGluZ09iamVjdChRT2JqZWN0Kik7CisKKyAgICB+
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCgpOwogCiBwcml2YXRlOgogICAgIFdlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQoRnJhbWUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oCmluZGV4IDM1NzNkZDYuLjQwMDcyY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNjAsNiArNjAsMTIgQEAKIAogI2lmIFBM
QVRGT1JNKFFUKQogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzUXQuaCIKKyNpbmNsdWRlICJRdE5l
dHdvcmtBY2Nlc3NNYW5hZ2VyLmgiCisjaW5jbHVkZSAiUXROZXR3b3JrUmVwbHkuaCIKKyNpbmNs
dWRlICJRdE5ldHdvcmtSZXBseURhdGEuaCIKKyNpbmNsdWRlICJRdE5ldHdvcmtSZXF1ZXN0RGF0
YS5oIgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+CisjaW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0
PgogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCkBAIC00NjgsNiArNDc0LDExIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgY29udGV4dE1lbnVTaG93aW5nKCkgeyBtX2lzU2hvd2luZ0NvbnRleHRN
ZW51ID0gdHJ1ZTsgfQogCisjaWYgUExBVEZPUk0oUVQpCisgICAgdm9pZCByZWdpc3RlckFwcGxp
Y2F0aW9uU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKTsKKyAgICB2b2lkIGFwcGxpY2F0aW9u
U2NoZW1lUmVwbHkoY29uc3QgUXROZXR3b3JrUmVwbHlEYXRhJik7CisgICAgdm9pZCByZWNlaXZl
ZEFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdChjb25zdCBRTmV0d29ya1JlcXVlc3QmLCBRdE5ldHdv
cmtSZXBseSopOworI2VuZGlmCiAgICAgdm9pZCB3aGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZl
bnQmKTsKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCiAgICAgdm9pZCBnZXN0dXJlRXZlbnQo
Y29uc3QgV2ViR2VzdHVyZUV2ZW50Jik7CkBAIC03MjcsNiArNzM4LDkgQEAgcHJpdmF0ZToKICNp
ZiBQTEFURk9STShXSU4pCiAgICAgYm9vbCBtX2dlc3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGltaXQ7
CiAjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyAgICBIYXNoTWFwPFN0cmluZywgUXROZXR3b3Jr
UmVwbHkqPiBtX2FwcGxpY2F0aW9uU2NoZW1lUmVwbGllczsKKyNlbmRpZgogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDQ1ZWQ3Y2MuLjVhM2JiNDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluCkBAIC02MCw2ICs2MCwxMSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBSZWxvYWQo
Ym9vbCByZWxvYWRGcm9tT3JpZ2luKQogICAgIFN0b3BMb2FkaW5nKCkKIAorI2lmIFBMQVRGT1JN
KFFUKQorICAgIEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoV2ViS2l0OjpRdE5ldHdvcmtSZXBseURh
dGEgcmVwbHkpCisgICAgUmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZShXVEY6OlN0cmluZyBzY2hl
bWUpCisjZW5kaWYKKwogICAgIFN0b3BMb2FkaW5nRnJhbWUodWludDY0X3QgZnJhbWVJRCkKICAg
ICAKICAgICBSZXN0b3JlU2Vzc2lvbihXZWJLaXQ6OlNlc3Npb25TdGF0ZSBzdGF0ZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAKaW5k
ZXggMzE4ZGEyMy4uNTUwODBkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldlYkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUg
IldlYkV2ZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRl
ICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50
Lmg+CkBAIC0zODgsNCArMzkwLDI5IEBAIHZvaWQgV2ViUGFnZTo6Y2FuY2VsQ29tcG9zaXRpb24o
KQogICAgIC8vIEZJWE1FOiBzdGF0aWNfY2FzdDxXZWJFZGl0b3JDbGllbnQqPih0YXJnZXRGcmFt
ZS0+ZWRpdG9yKCktPmNsaWVudCgpKS0+c2VuZFNlbGVjdGlvbkNoYW5nZWRNZXNzYWdlKCk7CiB9
CiAKK3ZvaWQgV2ViUGFnZTo6cmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZShjb25zdCBTdHJpbmcm
IHNjaGVtZSkKK3sKKyAgICBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBxbmFtID0gcW9iamVjdF9j
YXN0PFF0TmV0d29ya0FjY2Vzc01hbmFnZXIqPihXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3Jr
QWNjZXNzTWFuYWdlcigpKTsKKyAgICBpZiAoIXFuYW0pCisgICAgICAgIHJldHVybjsKKyAgICBx
bmFtLT5yZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKHRoaXMsIFFTdHJpbmcoc2NoZW1lKSk7Cit9
CisKK3ZvaWQgV2ViUGFnZTo6cmVjZWl2ZWRBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QoY29uc3Qg
UU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBRdE5ldHdvcmtSZXBseSogcmVwbHkpCit7CisgICAg
UXROZXR3b3JrUmVxdWVzdERhdGEgcmVxdWVzdERhdGEocmVxdWVzdCwgcmVwbHkpOworICAgIG1f
YXBwbGljYXRpb25TY2hlbWVSZXBsaWVzLmFkZChyZXF1ZXN0RGF0YS5tX3JlcGx5VXVpZCwgcmVw
bHkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVzb2x2ZUFwcGxpY2F0aW9u
U2NoZW1lUmVxdWVzdChyZXF1ZXN0RGF0YSkpOworfQorCit2b2lkIFdlYlBhZ2U6OmFwcGxpY2F0
aW9uU2NoZW1lUmVwbHkoY29uc3QgUXROZXR3b3JrUmVwbHlEYXRhJiByZXBseURhdGEpCit7Cisg
ICAgaWYgKCFtX2FwcGxpY2F0aW9uU2NoZW1lUmVwbGllcy5jb250YWlucyhyZXBseURhdGEubV9y
ZXBseVV1aWQpKQorICAgICAgICByZXR1cm47CisKKyAgICBRdE5ldHdvcmtSZXBseSogbmV0d29y
a1JlcGx5ID0gbV9hcHBsaWNhdGlvblNjaGVtZVJlcGxpZXMudGFrZShyZXBseURhdGEubV9yZXBs
eVV1aWQpOworICAgIG5ldHdvcmtSZXBseS0+c2V0UmVwbHlEYXRhKHJlcGx5RGF0YSk7CisgICAg
bmV0d29ya1JlcGx5LT5maW5hbGl6ZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3JrQWNjZXNzTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya0FjY2Vzc01h
bmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MDg0ZTUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya0Fj
Y2Vzc01hbmFnZXIuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgWmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUXROZXR3b3JrQWNjZXNzTWFuYWdlci5oIgorCisjaW5jbHVk
ZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5o
IgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVk
ZSA8UU5ldHdvcmtSZXBseT4KKyNpbmNsdWRlIDxRTmV0d29ya1JlcXVlc3Q+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpRdE5ldHdvcmtBY2Nlc3NNYW5h
Z2VyKFdlYlByb2Nlc3MqIHdlYlByb2Nlc3MpCisgICAgOiBRTmV0d29ya0FjY2Vzc01hbmFnZXIo
KQorICAgICwgbV93ZWJQcm9jZXNzKHdlYlByb2Nlc3MpCit7Cit9CisKK1F0TmV0d29ya0FjY2Vz
c01hbmFnZXI6OlF0TmV0d29ya0FjY2Vzc01hbmFnZXIoUU9iamVjdCogcGFyZW50KQorICAgIDog
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKHBhcmVudCkKKyAgICAsIG1fd2ViUHJvY2VzcygwKQorewor
fQorCitRTmV0d29ya1JlcGx5KiBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpjcmVhdGVSZXF1ZXN0
KE9wZXJhdGlvbiBvcGVyYXRpb24sIGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmIHJlcXVlc3QsIFFJ
T0RldmljZSogb3V0RGF0YSkKK3sKKyAgICBRT2JqZWN0KiBwYWdlUHRyV3JhcHBlciA9IHJlcXVl
c3Qub3JpZ2luYXRpbmdPYmplY3QoKTsKKyAgICBpZiAocGFnZVB0cldyYXBwZXIpIHsKKyAgICAg
ICAgUVZhcmlhbnQgcGFnZVB0ciA9IHBhZ2VQdHJXcmFwcGVyLT5wcm9wZXJ0eSgiUGFnZVBvaW50
ZXIiKTsKKyAgICAgICAgaWYgKHBhZ2VQdHIuaXNWYWxpZCgpICYmIHBhZ2VQdHIuY2FuQ29udmVy
dDx2b2lkKj4oKSkgeworICAgICAgICAgICAgV2ViUGFnZSogd2ViUGFnZSA9IHN0YXRpY19jYXN0
PFdlYlBhZ2UqPihwYWdlUHRyLnZhbHVlPHZvaWQqPigpKTsKKyAgICAgICAgICAgIFFfQVNTRVJU
KHdlYlBhZ2UpOworICAgICAgICAgICAgaWYgKG1fYXBwbGljYXRpb25TY2hlbWVzLmNvbnRhaW5z
KHdlYlBhZ2UsIHJlcXVlc3QudXJsKCkuc2NoZW1lKCkudG9Mb3dlcigpKSkgeworICAgICAgICAg
ICAgICAgIFF0TmV0d29ya1JlcGx5KiByZXBseSA9IG5ldyBRdE5ldHdvcmtSZXBseShyZXF1ZXN0
LCB0aGlzKTsKKyAgICAgICAgICAgICAgICB3ZWJQYWdlLT5yZWNlaXZlZEFwcGxpY2F0aW9uU2No
ZW1lUmVxdWVzdChyZXF1ZXN0LCByZXBseSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlcGx5
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFFOZXR3b3Jr
QWNjZXNzTWFuYWdlcjo6Y3JlYXRlUmVxdWVzdChvcGVyYXRpb24sIHJlcXVlc3QsIG91dERhdGEp
OworfQorCit2b2lkIFF0TmV0d29ya0FjY2Vzc01hbmFnZXI6OnJlZ2lzdGVyQXBwbGljYXRpb25T
Y2hlbWUoY29uc3QgV2ViUGFnZSogcGFnZSwgY29uc3QgUVN0cmluZyYgc2NoZW1lKQoreworICAg
IG1fYXBwbGljYXRpb25TY2hlbWVzLmluc2VydChwYWdlLCBzY2hlbWUudG9Mb3dlcigpKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya0Fj
Y2Vzc01hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTYxYWFl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdv
cmtBY2Nlc3NNYW5hZ2VyLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
UXROZXR3b3JrQWNjZXNzTWFuYWdlcl9oCisjZGVmaW5lIFF0TmV0d29ya0FjY2Vzc01hbmFnZXJf
aAorCisjaW5jbHVkZSA8UU11bHRpSGFzaD4KKyNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFn
ZXI+CisjaW5jbHVkZSA8UVN0cmluZz4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdl
YlBhZ2U7CitjbGFzcyBXZWJQcm9jZXNzOworCitjbGFzcyBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
IDogcHVibGljIFFOZXR3b3JrQWNjZXNzTWFuYWdlciB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoK
KyAgICBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKFFPYmplY3QqIHBhcmVudCk7CisgICAgUXROZXR3
b3JrQWNjZXNzTWFuYWdlcihXZWJQcm9jZXNzKik7CisgICAgdm9pZCByZWdpc3RlckFwcGxpY2F0
aW9uU2NoZW1lKGNvbnN0IFdlYlBhZ2UqLCBjb25zdCBRU3RyaW5nJiBzY2hlbWUpOworCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCBRTmV0d29ya1JlcGx5KiBjcmVhdGVSZXF1ZXN0KE9wZXJhdGlv
biwgY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICYsIFFJT0RldmljZSogb3V0Z29pbmdEYXRhID0gMCk7
CisKK3ByaXZhdGU6CisgICAgUU11bHRpSGFzaDxjb25zdCBXZWJQYWdlKiwgUVN0cmluZz4gbV9h
cHBsaWNhdGlvblNjaGVtZXM7CisgICAgV2ViUHJvY2VzcyogbV93ZWJQcm9jZXNzOworCit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFF0TmV0d29ya0FjY2Vzc01hbmFn
ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtS
ZXBseS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDBmNWNiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5jcHAK
QEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgWmVubyBBbGJpc3Nl
ciA8emVub0B3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUXROZXR3b3JrUmVwbHkuaCIKKworI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2lu
Y2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgi
CisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFFOZXR3b3JrQ29va2llPgorI2lu
Y2x1ZGUgPFFOZXR3b3JrUmVwbHk+CisjaW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0PgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworUXROZXR3b3JrUmVwbHk6OlF0TmV0d29ya1JlcGx5KGNvbnN0IFFO
ZXR3b3JrUmVxdWVzdCYgcmVxLCBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBwYXJlbnQpCisgICAg
OiBRTmV0d29ya1JlcGx5KHBhcmVudCkKKyAgICAsIG1fYnl0ZXNBdmFpbGFibGUoMCkKKyAgICAs
IG1fc2hhcmVkTWVtb3J5U2l6ZSgwKQoreworICAgIHNldFJlcXVlc3QocmVxKTsKKyAgICBzZXRP
cGVyYXRpb24oUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpHZXRPcGVyYXRpb24pOworICAgIHNldFVy
bChyZXEudXJsKCkpOworICAgIHNldE9wZW5Nb2RlKFFJT0RldmljZTo6UmVhZE9ubHkpOworICAg
IHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvbnRlbnRUeXBlSGVhZGVyLCBRVmFyaWFudChR
U3RyaW5nOjpmcm9tTG9jYWw4Qml0KCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTE2IikpKTsKK30K
Kwordm9pZCBRdE5ldHdvcmtSZXBseTo6c2V0RGF0YShjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRs
ZSYgaGFuZGxlLCBxaW50NjQgZGF0YVNpemUpCit7CisgICAgbV9zaGFyZWRNZW1vcnkgPSBTaGFy
ZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOworICAgIGlm
ICghbV9zaGFyZWRNZW1vcnkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYnl0ZXNBdmFpbGFi
bGUgPSBkYXRhU2l6ZTsKKyAgICBtX3NoYXJlZE1lbW9yeVNpemUgPSBkYXRhU2l6ZTsKK30KKwor
dm9pZCBRdE5ldHdvcmtSZXBseTo6c2V0UmVwbHlEYXRhKGNvbnN0IFF0TmV0d29ya1JlcGx5RGF0
YSYgcmVwbHlEYXRhKQoreworICAgIGlmIChyZXBseURhdGEubV9vcGVyYXRpb24pCisgICAgICAg
IHNldE9wZXJhdGlvbihyZXBseURhdGEubV9vcGVyYXRpb24pOworICAgIGlmICghcmVwbHlEYXRh
Lm1fY29udGVudERpc3Bvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICBzZXRIZWFkZXIoUU5ldHdv
cmtSZXF1ZXN0OjpDb250ZW50RGlzcG9zaXRpb25IZWFkZXIsIFFTdHJpbmcocmVwbHlEYXRhLm1f
Y29udGVudERpc3Bvc2l0aW9uKSk7CisgICAgaWYgKCFyZXBseURhdGEubV9jb250ZW50VHlwZS5p
c051bGwoKSkKKyAgICAgICAgc2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudFR5cGVI
ZWFkZXIsIFFTdHJpbmcocmVwbHlEYXRhLm1fY29udGVudFR5cGUpKTsKKyAgICBpZiAoIXJlcGx5
RGF0YS5tX2xvY2F0aW9uLmlzTnVsbCgpKQorICAgICAgICBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1
ZXN0OjpMb2NhdGlvbkhlYWRlciwgUVN0cmluZyhyZXBseURhdGEubV9sb2NhdGlvbikpOworICAg
IGlmIChyZXBseURhdGEubV9sYXN0TW9kaWZpZWQpCisgICAgICAgIHNldEhlYWRlcihRTmV0d29y
a1JlcXVlc3Q6Okxhc3RNb2RpZmllZEhlYWRlciwgUURhdGVUaW1lOjpmcm9tTVNlY3NTaW5jZUVw
b2NoKHJlcGx5RGF0YS5tX2xhc3RNb2RpZmllZCkpOworICAgIGlmICghcmVwbHlEYXRhLm1fY29v
a2llLmlzTnVsbCgpKQorICAgICAgICBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpTZXRDb29r
aWVIZWFkZXIsIFFWYXJpYW50Ojpmcm9tVmFsdWUoUU5ldHdvcmtDb29raWU6OnBhcnNlQ29va2ll
cyhRU3RyaW5nKHJlcGx5RGF0YS5tX2Nvb2tpZSkudG9Bc2NpaSgpKSkpOworICAgIGlmICghcmVw
bHlEYXRhLm1fdXNlckFnZW50LmlzTnVsbCgpKQorICAgICAgICBzZXRIZWFkZXIoUU5ldHdvcmtS
ZXF1ZXN0OjpVc2VyQWdlbnRIZWFkZXIsIFFTdHJpbmcocmVwbHlEYXRhLm1fdXNlckFnZW50KSk7
CisgICAgaWYgKCFyZXBseURhdGEubV9zZXJ2ZXIuaXNOdWxsKCkpCisgICAgICAgIHNldEhlYWRl
cihRTmV0d29ya1JlcXVlc3Q6OlNlcnZlckhlYWRlciwgUVN0cmluZyhyZXBseURhdGEubV9zZXJ2
ZXIpKTsKKyAgICBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50TGVuZ3RoSGVhZGVy
LCBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlcGx5RGF0YS5tX2NvbnRlbnRMZW5ndGgpKTsKKyAgICBz
ZXREYXRhKHJlcGx5RGF0YS5tX2RhdGFIYW5kbGUsIHJlcGx5RGF0YS5tX2NvbnRlbnRMZW5ndGgp
OworfQorCitxaW50NjQgUXROZXR3b3JrUmVwbHk6OnJlYWREYXRhKGNoYXIqIGRhdGEsIHFpbnQ2
NCBtYXhsZW4pCit7CisgICAgcWludDY0IGJ5dGVzUmVhZCA9IG1heGxlbiA8IG1fYnl0ZXNBdmFp
bGFibGUgPyBtYXhsZW4gOiBtX2J5dGVzQXZhaWxhYmxlOworICAgIGlmIChxTWVtQ29weShkYXRh
LCBzdGF0aWNfY2FzdDxjaGFyKj4obV9zaGFyZWRNZW1vcnktPmRhdGEoKSkgKyBtX3NoYXJlZE1l
bW9yeVNpemUgLSBtX2J5dGVzQXZhaWxhYmxlLCBieXRlc1JlYWQpKSB7CisgICAgICAgIG1fYnl0
ZXNBdmFpbGFibGUgLT0gYnl0ZXNSZWFkOworICAgICAgICByZXR1cm4gYnl0ZXNSZWFkOworICAg
IH0KKyAgICByZXR1cm4gMDsKK30KKworcWludDY0IFF0TmV0d29ya1JlcGx5OjpieXRlc0F2YWls
YWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYnl0ZXNBdmFpbGFibGUgKyBRTmV0d29ya1Jl
cGx5OjpieXRlc0F2YWlsYWJsZSgpOworfQorCit2b2lkIFF0TmV0d29ya1JlcGx5OjpzZXRIZWFk
ZXIoUU5ldHdvcmtSZXF1ZXN0OjpLbm93bkhlYWRlcnMgaGVhZGVyLCBjb25zdCBRVmFyaWFudCAm
dmFsdWUpCit7CisgICAgUU5ldHdvcmtSZXBseTo6c2V0SGVhZGVyKGhlYWRlciwgdmFsdWUpOwor
fQorCit2b2lkIFF0TmV0d29ya1JlcGx5OjphYm9ydCgpIHsgfQordm9pZCBRdE5ldHdvcmtSZXBs
eTo6Y2xvc2UoKSB7IH0KK3ZvaWQgUXROZXR3b3JrUmVwbHk6OnNldFJlYWRCdWZmZXJTaXplKHFp
bnQ2NCBzaXplKSB7IH0KK2Jvb2wgUXROZXR3b3JrUmVwbHk6OmNhblJlYWRMaW5lICgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KKwordm9pZCBRdE5ldHdvcmtSZXBseTo6ZmluYWxpemUoKQorewor
ICAgIFFOZXR3b3JrUmVwbHk6OnNldEZpbmlzaGVkKHRydWUpOworICAgIGVtaXQgcmVhZHlSZWFk
KCk7CisgICAgZW1pdCBmaW5pc2hlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZWI3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmgKQEAgLTAsMCArMSw2
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtp
dC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUXROZXR3b3JrUmVwbHlfaAorI2RlZmluZSBRdE5l
dHdvcmtSZXBseV9oCisKKyNpbmNsdWRlICJRdE5ldHdvcmtSZXBseURhdGEuaCIKKyNpbmNsdWRl
ICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlIDxRQnl0ZUFycmF5PgorI2luY2x1ZGUgPFFEYXRl
VGltZT4KKyNpbmNsdWRlIDxRTmV0d29ya1JlcGx5PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgUXROZXR3b3JrQWNjZXNzTWFuYWdlcjsKKworY2xhc3MgUXROZXR3b3JrUmVwbHkgOiBw
dWJsaWMgUU5ldHdvcmtSZXBseSB7CitwdWJsaWM6CisgICAgUXROZXR3b3JrUmVwbHkoY29uc3Qg
UU5ldHdvcmtSZXF1ZXN0JiwgUXROZXR3b3JrQWNjZXNzTWFuYWdlciogcGFyZW50KTsKKworICAg
IHZpcnR1YWwgcWludDY0IHJlYWREYXRhKGNoYXIgKmRhdGEsIHFpbnQ2NCBtYXhsZW4pOworICAg
IHZpcnR1YWwgcWludDY0IGJ5dGVzQXZhaWxhYmxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRIZWFk
ZXIoUU5ldHdvcmtSZXF1ZXN0OjpLbm93bkhlYWRlcnMsIGNvbnN0IFFWYXJpYW50ICZ2YWx1ZSk7
CisgICAgdm9pZCBzZXREYXRhKGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiwgcWludDY0IGRh
dGFTaXplKTsKKyAgICB2b2lkIHNldFJlcGx5RGF0YShjb25zdCBRdE5ldHdvcmtSZXBseURhdGEm
KTsKKyAgICB2b2lkIGZpbmFsaXplKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQg
YWJvcnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
UmVhZEJ1ZmZlclNpemUocWludDY0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUmVhZExpbmUoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBxaW50NjQgbV9ieXRlc0F2YWlsYWJsZTsKKyAgICBRQnl0
ZUFycmF5IG1fYnVmZmVyOworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IG1fc2hhcmVkTWVtb3J5
OworICAgIHFpbnQ2NCBtX3NoYXJlZE1lbW9yeVNpemU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIFF0TmV0d29ya1JlcGx5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNwcAppbmRleCBkOTQ5MjA2Li5hMmJlYWMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgogI2luY2x1ZGUgIlF0QnVp
bHRpbkJ1bmRsZS5oIgorI2luY2x1ZGUgIlF0TmV0d29ya0FjY2Vzc01hbmFnZXIuaCIKICNpbmNs
dWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmgiCiAKQEAgLTY3LDcgKzY4LDcgQEAgc3RhdGljIHZvaWQgcGFyZW50UHJvY2Vzc0Rp
ZWRDYWxsYmFjayh2b2lkKikKIAogdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVX
ZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMs
IENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewotICAgIG1fbmV0d29ya0Fj
Y2Vzc01hbmFnZXIgPSBuZXcgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOworICAgIG1fbmV0d29ya0Fj
Y2Vzc01hbmFnZXIgPSBuZXcgUXROZXR3b3JrQWNjZXNzTWFuYWdlcih0aGlzKTsKICAgICBBU1NF
UlQoIXBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkgJiYgIXBhcmFt
ZXRlcnMuY29va2llU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSk7CiAgICAgV2ViQ29yZTo6U2hh
cmVkQ29va2llSmFyUXQqIGphciA9IFdlYkNvcmU6OlNoYXJlZENvb2tpZUphclF0OjpjcmVhdGUo
cGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5KTsKICAgICBtX25ldHdvcmtBY2Nlc3NN
YW5hZ2VyLT5zZXRDb29raWVKYXIoamFyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9xdHdlYmtpdC1l
eHBvcnQubWFwIGIvU291cmNlL3F0d2Via2l0LWV4cG9ydC5tYXAKaW5kZXggNDk1OGM4NS4uM2Fm
ODQ5MiAxMDA2NDQKLS0tIGEvU291cmNlL3F0d2Via2l0LWV4cG9ydC5tYXAKKysrIGIvU291cmNl
L3F0d2Via2l0LWV4cG9ydC5tYXAKQEAgLTE0OCw2ICsxNDgsMTIgQEAgcXdrXzEuMCB7CiAgICAg
ICAgICpRV2ViTmF2aWdhdGlvblJlcXVlc3Q7CiAgICAgICAgIG5vbi12aXJ0dWFsP3RodW5rP3Rv
P1FXZWJOYXZpZ2F0aW9uUmVxdWVzdCo7CiAgICAgICAgIFFXZWJOYXZpZ2F0aW9uUmVxdWVzdDo6
KjsKKyAgICAgICAgKlFRdWlja1VybFNjaGVtZURlbGVnYXRlOworICAgICAgICBRUXVpY2tVcmxT
Y2hlbWVEZWxlZ2F0ZTo6KjsKKyAgICAgICAgKlFRdWlja05ldHdvcmtSZXF1ZXN0OworICAgICAg
ICBRUXVpY2tOZXR3b3JrUmVxdWVzdDo6KjsKKyAgICAgICAgKlFRdWlja05ldHdvcmtSZXBseTsK
KyAgICAgICAgUVF1aWNrTmV0d29ya1JlcGx5OjoqOwogCiAKICAgICAgICAgIyBXZWJLaXQgMiBD
IEFQSSBtYW5nbGVkIGluIEMrKwo=
</data>
<flag name="review"
          id="121693"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121280</attachid>
            <date>2012-01-05 08:03:37 -0800</date>
            <delta_ts>2012-01-05 11:00:16 -0800</delta_ts>
            <desc>patch for review. - extracted obtainOriginatingWebPage code.</desc>
            <filename>74931_20120105-170236.patch</filename>
            <type>text/plain</type>
            <size>71791</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmMzllMGQ1Li44YTIyYzRh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTItMDEtMDUgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
W1F0XVtXSzJdIEltcGxlbWVudCBjdXN0b20gVVJMIHNjaGVtZXMgZGVmaW5lZCBpbiBRTUwuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkzMQorCisg
ICAgICAgIEFkZCBuZXcgY2xhc3NlcyB0byB0aGUgZXhwb3J0IG1hcC4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9xdHdlYmtpdC1leHBv
cnQubWFwOgorCiAyMDEyLTAxLTA0ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBNb3ZlIFdlYk1pbWVSZWdpc3RyeSBhbmQgZGVwZW5k
ZW5jaWVzIHRvIFNvdXJjZS9QbGF0Zm9ybQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA0YmYzYzBmLi5mZmE4
YWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAxLTA1ICBaZW5vIEFs
Ymlzc2VyICA8emVub0B3ZWJraXQub3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQg
Y3VzdG9tIFVSTCBzY2hlbWVzIGRlZmluZWQgaW4gUU1MLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MzEKKworICAgICAgICBNYWtlIGNsYXNzZXMg
UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUsIFFRdWlja05ldHdvcmtSZXF1ZXN0CisgICAgICAgIGFu
ZCBRUXVpY2tOZXR3b3JrUmVwbHkgYWNjZXNzaWJsZSBmcm9tIFFNTC4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRlY2xhcmF0aXZlL2V4cGVyaW1l
bnRhbC9leHBlcmltZW50YWwucHJpOgorICAgICAgICAqIGRlY2xhcmF0aXZlL2V4cGVyaW1lbnRh
bC9wbHVnaW4uY3BwOgorICAgICAgICAqIGRlY2xhcmF0aXZlL3B1YmxpYy5wcmk6CisKIDIwMTIt
MDEtMDQgIFRvciBBcm5lIFZlc3Riw7ggIDx0b3IuYXJuZS52ZXN0Ym9Abm9raWEuY29tPgogCiAg
ICAgICAgIFtRdF0gSW50cm9kdWNlIG5ldyBxbWFrZSB2YXJpYWJsZSAnV0VCS0lUJyBmb3Igc2ln
bmFsaW5nIGRlcGVuZGVuY2llcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJh
dGl2ZS9leHBlcmltZW50YWwvZXhwZXJpbWVudGFsLnByaSBiL1NvdXJjZS9XZWJLaXQvcXQvZGVj
bGFyYXRpdmUvZXhwZXJpbWVudGFsL2V4cGVyaW1lbnRhbC5wcmkKaW5kZXggNDk0Mzg4YS4uNDlm
NDYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9leHBlcmltZW50
YWwvZXhwZXJpbWVudGFsLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4
cGVyaW1lbnRhbC9leHBlcmltZW50YWwucHJpCkBAIC0zNiw3ICszNiwxNiBAQCBSUEFUSERJUl9S
RUxBVElWRV9UT19ERVNURElSID0gLi4vLi4vbGliCiBTT1VSQ0VTICs9IHBsdWdpbi5jcHAKIAog
REVGSU5FUyArPSBIQVZFX1dFQktJVDIKLUlOQ0xVREVQQVRIICs9IC4uLy4uLy4uLy4uL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdAorCitJTkNMVURFUEFUSCArPSBcCisgICAgLi4vLi4vLi4vLi4v
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0IFwKKyAgICAuLi8uLi8uLi8uLi9XZWJLaXQyL1NoYXJl
ZC9xdCBcCisgICAgLi4vLi4vLi4vLi4vSmF2YVNjcmlwdENvcmUgXAorICAgIC4uLy4uLy4uLy4u
L0phdmFTY3JpcHRDb3JlL3d0ZiBcCisgICAgLi4vLi4vLi4vLi4vSmF2YVNjcmlwdENvcmUvd3Rm
L3VuaWNvZGUgXAorICAgIC4uLy4uLy4uLy4uL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUgXAorICAg
IC4uLy4uLy4uLy4uL1dlYktpdDIvUGxhdGZvcm0gXAorICAgIC4uLy4uLy4uLy4uL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQwogCiB0YXJnZXQucGF0aCA9ICQkW1FUX0lOU1RBTExfSU1QT1JUU10v
JCR7VEFSR0VULm1vZHVsZV9uYW1lfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2Rl
Y2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9kZWNs
YXJhdGl2ZS9leHBlcmltZW50YWwvcGx1Z2luLmNwcAppbmRleCBkMjg5MjI5Li5jYWIwZmJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVn
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVudGFsL3Bs
dWdpbi5jcHAKQEAgLTE3LDYgKzE3LDEwIEBACiAgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCiAqLwogCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJxcXVpY2tuZXR3b3Jr
cmVwbHlfcC5oIgorI2luY2x1ZGUgInFxdWlja25ldHdvcmtyZXF1ZXN0X3AuaCIKICNpbmNsdWRl
ICJxcXVpY2t3ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKICNpbmNs
dWRlICJxd2ViZG93bmxvYWRpdGVtX3AuaCIKQEAgLTUyLDYgKzU2LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRlIGluc3RhbmNlIG9m
IFdlYlZpZXdFeHBlcmltZW50YWwiKSk7CiAgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVU
eXBlPFFXZWJWaWV3cG9ydEluZm8+KHVyaSwgMywgMCwgIlFXZWJWaWV3cG9ydEluZm8iLAogICAg
ICAgICAgICAgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2Yg
UVdlYlZpZXdwb3J0SW5mbyIpKTsKKyAgICAgICAgcW1sUmVnaXN0ZXJUeXBlPFFRdWlja1VybFNj
aGVtZURlbGVnYXRlPih1cmksIDMsIDAsICJVcmxTY2hlbWVEZWxlZ2F0ZSIpOworICAgICAgICBx
bWxSZWdpc3RlclVuY3JlYXRhYmxlVHlwZTxRUXVpY2tOZXR3b3JrUmVxdWVzdD4odXJpLCAzLCAw
LCAiTmV0d29ya1JlcXVlc3QiLAorICAgICAgICAgICAgUU9iamVjdDo6dHIoIk5ldHdvcmtSZXF1
ZXN0IHNob3VsZCBub3QgYmUgY3JlYXRlZCBmcm9tIFFNTCIpKTsKKyAgICAgICAgcW1sUmVnaXN0
ZXJVbmNyZWF0YWJsZVR5cGU8UVF1aWNrTmV0d29ya1JlcGx5Pih1cmksIDMsIDAsICJOZXR3b3Jr
UmVwbHkiLAorICAgICAgICAgICAgUU9iamVjdDo6dHIoIk5ldHdvcmtSZXBseSBzaG91bGQgbm90
IGJlIGNyZWF0ZWQgZnJvbSBRTUwiKSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wdWJsaWMucHJpIGIvU291cmNlL1dlYktpdC9xdC9kZWNs
YXJhdGl2ZS9wdWJsaWMucHJpCmluZGV4IDI5YmQ5MDMuLjNlMmZiNDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0
L3F0L2RlY2xhcmF0aXZlL3B1YmxpYy5wcmkKQEAgLTM4LDYgKzM4LDEyIEBAIERFU1RESVIgPSAk
JHtST09UX0JVSUxEX0RJUn0vaW1wb3J0cy8kJHtUQVJHRVQubW9kdWxlX25hbWV9CiBDT05GSUcg
Kz0gcnBhdGgKIFJQQVRIRElSX1JFTEFUSVZFX1RPX0RFU1RESVIgPSAuLi8uLi9saWIKIAorSU5D
TFVERVBBVEggKz0gXAorICAgIC4uLy4uLy4uL1dlYktpdDIvU2hhcmVkL3F0IFwKKyAgICAuLi8u
Li8uLi9KYXZhU2NyaXB0Q29yZSBcCisgICAgLi4vLi4vLi4vSmF2YVNjcmlwdENvcmUvcnVudGlt
ZSBcCisgICAgLi4vLi4vLi4vSmF2YVNjcmlwdENvcmUvd3RmCisKIFNPVVJDRVMgKz0gcWRlY2xh
cmF0aXZld2Vidmlldy5jcHAgcGx1Z2luLmNwcAogSEVBREVSUyArPSBxZGVjbGFyYXRpdmV3ZWJ2
aWV3X3AuaAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNGZmMTY3Ni4uODIwZjZjNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDExNSBAQAorMjAxMi0wMS0wNSAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9y
Zz4KKworICAgICAgICBbUXRdW1dLMl0gSW1wbGVtZW50IGN1c3RvbSBVUkwgc2NoZW1lcyBkZWZp
bmVkIGluIFFNTC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc0OTMxCisKKyAgICAgICAgQWxsb3cgY3JlYXRpb24gb2YgY3VzdG9tIFVybFNjaGVtZURl
bGVnYXRlcyBmcm9tIFFNTC4KKyAgICAgICAgQSBVcmxTY2hlbWVEZWxlZ2F0ZSBjb250YWlucyBh
IGhhbmRsZXIgc2lnbmFsIHRoYXQgaXMgdHJpZ2dlcmVkCisgICAgICAgIHdoZW4gYSB1cmwgbWF0
Y2hpbmcgdGhlIGRlZmluZWQgc2NoZW1lIGlzIHJlcXVlc3RlZC4KKyAgICAgICAgVG8gYWxsb3cg
Zm9yIHRoaXMgYSBkZXJpdmF0aW9uIG9mIFFOZXR3b3JrQWNjZXNzTWFuYWdlcgorICAgICAgICBp
cyBuZWNlc3NhcnkuCisgICAgICAgIFRoZSByZXF1ZXN0IGlzIHRoZW4gaGFuZGxlZCBpbiBRTUwv
SlMgYW5kIGEgcmVwbHkKKyAgICAgICAgaXMgc2VudCBiYWNrIGZyb20gdGhlIFVJUHJvY2VzcyB0
byB0aGUgV2ViUHJvY2Vzcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFNoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhOjpRdE5ldHdvcmtSZXBseURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseURhdGE6OmVuY29kZSk6CisgICAgICAgIChX
ZWJLaXQ6OlF0TmV0d29ya1JlcGx5RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvcXQv
UXROZXR3b3JrUmVwbHlEYXRhLmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9xdC9RdE5ldHdv
cmtSZXF1ZXN0RGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXF1
ZXN0RGF0YTo6UXROZXR3b3JrUmVxdWVzdERhdGEpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdv
cmtSZXF1ZXN0RGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVxdWVz
dERhdGE6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRh
Lmg6IEFkZGVkLgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2tuZXR3b3JrcmVwbHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFRdWlja05ldHdv
cmtSZXBseTo6UVF1aWNrTmV0d29ya1JlcGx5KToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBs
eTo6Y29udGVudFR5cGUpOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb250ZW50
VHlwZSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6Om9wZXJhdGlvbik6CisgICAgICAg
IChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldE9wZXJhdGlvbik6CisgICAgICAgIChRUXVpY2tOZXR3
b3JrUmVwbHk6OmNvbnRlbnREaXNwb3NpdGlvbik6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVw
bHk6OnNldENvbnRlbnREaXNwb3NpdGlvbik6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6
OmxvY2F0aW9uKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0TG9jYXRpb24pOgor
ICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpsYXN0TW9kaWZpZWQpOgorICAgICAgICAoUVF1
aWNrTmV0d29ya1JlcGx5OjpzZXRMYXN0TW9kaWZpZWQpOgorICAgICAgICAoUVF1aWNrTmV0d29y
a1JlcGx5Ojpjb29raWUpOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb29raWUp
OgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5Ojp1c2VyQWdlbnQpOgorICAgICAgICAoUVF1
aWNrTmV0d29ya1JlcGx5OjpzZXRVc2VyQWdlbnQpOgorICAgICAgICAoUVF1aWNrTmV0d29ya1Jl
cGx5OjpzZXJ2ZXIpOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRTZXJ2ZXIpOgor
ICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpkYXRhKToKKyAgICAgICAgKFFRdWlja05ldHdv
cmtSZXBseTo6c2V0RGF0YSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNlbmQpOgor
ICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpuZXR3b3JrUmVxdWVzdERhdGEpOgorICAgICAg
ICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXROZXR3b3JrUmVxdWVzdERhdGEpOgorICAgICAgICAo
UVF1aWNrTmV0d29ya1JlcGx5OjpuZXR3b3JrUmVwbHlEYXRhKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseV9wLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcXVlc3RfcC5oOiBBZGRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlLmNwcDogQWRkZWQuCisgICAg
ICAgIChRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZTo6UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUpOgor
ICAgICAgICAoUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU6OnNjaGVtZSk6CisgICAgICAgIChRUXVp
Y2tVcmxTY2hlbWVEZWxlZ2F0ZTo6c2V0U2NoZW1lKToKKyAgICAgICAgKFFRdWlja1VybFNjaGVt
ZURlbGVnYXRlOjpyZXF1ZXN0KToKKyAgICAgICAgKFFRdWlja1VybFNjaGVtZURlbGVnYXRlOjpy
ZXBseSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t1cmxzY2hlbWVkZWxlZ2F0
ZV9wLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5j
cHA6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpRUXVpY2tXZWJWaWV3RXhw
ZXJpbWVudGFsKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURl
bGVnYXRlc19BdCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVE
ZWxlZ2F0ZXNfQXBwZW5kKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNj
aGVtZURlbGVnYXRlc19Db3VudCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFs
OjpzY2hlbWVEZWxlZ2F0ZXNfQ2xlYXIpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1l
bnRhbDo6c2NoZW1lRGVsZWdhdGVzKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50
YWw6Omludm9rZUFwcGxpY2F0aW9uU2NoZW1lSGFuZGxlcik6CisgICAgICAgIChRUXVpY2tXZWJW
aWV3RXhwZXJpbWVudGFsOjpzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmNwcDoKKyAgICAgICAg
KFF0UGFnZUNsaWVudDo6aGFuZGxlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1dl
YlBhZ2VQcm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWdpc3Rl
ckFwcGxpY2F0aW9uU2NoZW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXNv
bHZlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVOZXR3b3JraW5nQ29udGV4dCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6On5XZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQ6OnNldE9yaWdpbmF0aW5nT2JqZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9x
dC9XZWJQYWdlUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZWdpc3RlckFwcGxp
Y2F0aW9uU2NoZW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVjZWl2ZWRBcHBsaWNh
dGlvblNjaGVtZVJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphcHBsaWNhdGlv
blNjaGVtZVJlcGx5KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1F0TmV0d29ya0FjY2Vzc01h
bmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrQWNjZXNzTWFuYWdl
cjo6UXROZXR3b3JrQWNjZXNzTWFuYWdlcik6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya0Fj
Y2Vzc01hbmFnZXI6Om9idGFpbk9yaWdpbmF0aW5nV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6
OlF0TmV0d29ya0FjY2Vzc01hbmFnZXI6OmNyZWF0ZVJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0
OjpRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpyZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL3F0L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuaDogQWRkZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6UXROZXR3b3JrUmVwbHkpOgorICAgICAgICAoV2Vi
S2l0OjpRdE5ldHdvcmtSZXBseTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29y
a1JlcGx5OjpzZXRSZXBseURhdGEpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6
cmVhZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6Ynl0ZXNBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6c2V0SGVhZGVyKToKKyAgICAg
ICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OmFib3J0KToKKyAgICAgICAgKFdlYktpdDo6UXRO
ZXR3b3JrUmVwbHk6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OnNl
dFJlYWRCdWZmZXJTaXplKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OmNhblJl
YWRMaW5lKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OmZpbmFsaXplKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5Lmg6IEFkZGVkLgorICAgICAgICAq
IFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6CisKIDIwMTItMDEtMDUgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFJl
bmFtZSB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9hbHRlcm5hdGVfaHRtbCBhcyB3ZWJraXRfd2ViX3Zp
ZXdfcmVwbGFjZV9jb250ZW50IGluIFdlYktpdDIgR1RLKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42MmU1ODA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5jcHAKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJRdE5ldHdvcmtSZXBseURhdGEuaCIK
KworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzUXQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5j
bHVkZSAiTm9uY29weWFibGUuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRl
ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFn
ZXI+CisjaW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUXROZXR3b3JrUmVwbHlEYXRhOjpRdE5l
dHdvcmtSZXBseURhdGEoKQorICAgIDogbV9jb250ZW50TGVuZ3RoKDApCisgICAgLCBtX2xhc3RN
b2RpZmllZCgwKQoreyB9CisKK3ZvaWQgUXROZXR3b3JrUmVwbHlEYXRhOjplbmNvZGUoQ29yZUlQ
Qzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXItPmVuY29k
ZShtX3VybFN0cmluZyk7CisgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShtX29wZXJhdGlvbik7Cisg
ICAgZW5jb2Rlci0+ZW5jb2RlKG1fY29udGVudERpc3Bvc2l0aW9uKTsKKyAgICBlbmNvZGVyLT5l
bmNvZGUobV9jb250ZW50VHlwZSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDY0KG1fY29udGVu
dExlbmd0aCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fbG9jYXRpb24pOworICAgIGVuY29kZXIt
PmVuY29kZVVJbnQ2NChtX2xhc3RNb2RpZmllZCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fY29v
a2llKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUobV91c2VyQWdlbnQpOworICAgIGVuY29kZXItPmVu
Y29kZShtX3NlcnZlcik7CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fcmVwbHlVdWlkKTsKKyAgICBl
bmNvZGVyLT5lbmNvZGUobV9kYXRhSGFuZGxlKTsKK30KKworYm9vbCBRdE5ldHdvcmtSZXBseURh
dGE6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFF0TmV0d29ya1Jl
cGx5RGF0YSYgZGVzdGluYXRpb24pCit7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGlu
YXRpb24ubV91cmxTdHJpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGVFbnVtKGRlc3RpbmF0aW9uLm1fb3BlcmF0aW9uKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fY29udGVudERp
c3Bvc2l0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVj
b2RlKGRlc3RpbmF0aW9uLm1fY29udGVudFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50NjQoZGVzdGluYXRpb24ubV9jb250ZW50TGVuZ3Ro
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3Rp
bmF0aW9uLm1fbG9jYXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGVVSW50NjQoZGVzdGluYXRpb24ubV9sYXN0TW9kaWZpZWQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9jb29r
aWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVz
dGluYXRpb24ubV91c2VyQWdlbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9zZXJ2ZXIpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9yZXBseVV1aWQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRp
b24ubV9kYXRhSGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZDc0YjQyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9x
dC9RdE5ldHdvcmtSZXBseURhdGEuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBRdE5ldHdvcmtSZXBseURhdGFfaAorI2RlZmluZSBRdE5ldHdvcmtSZXBseURhdGFfaAor
CisjaW5jbHVkZSAiTm9uY29weWFibGUuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5j
bHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgQ29yZUlQQyB7Citj
bGFzcyBBcmd1bWVudEVuY29kZXI7CitjbGFzcyBBcmd1bWVudERlY29kZXI7Cit9OworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFF0TmV0d29ya1JlcGx5RGF0YSA6IHB1YmxpYyBXVEY6
OlJlZkNvdW50ZWQ8UXROZXR3b3JrUmVwbHlEYXRhPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUXROZXR3b3JrUmVwbHlEYXRhKTsKK3B1YmxpYzoKKyAgICBRdE5ldHdvcmtSZXBseURhdGEo
KTsKKworICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciopIGNvbnN0Owor
ICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBRdE5ldHdv
cmtSZXBseURhdGEmKTsKKworICAgIFdURjo6U3RyaW5nIG1fdXJsU3RyaW5nOworCisgICAgUU5l
dHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gbV9vcGVyYXRpb247CisgICAgV1RGOjpTdHJp
bmcgbV9jb250ZW50RGlzcG9zaXRpb247CisgICAgV1RGOjpTdHJpbmcgbV9jb250ZW50VHlwZTsK
KyAgICB1aW50NjRfdCBtX2NvbnRlbnRMZW5ndGg7CisgICAgV1RGOjpTdHJpbmcgbV9sb2NhdGlv
bjsKKyAgICB1aW50NjRfdCBtX2xhc3RNb2RpZmllZDsKKyAgICBXVEY6OlN0cmluZyBtX2Nvb2tp
ZTsKKyAgICBXVEY6OlN0cmluZyBtX3VzZXJBZ2VudDsKKyAgICBXVEY6OlN0cmluZyBtX3NlcnZl
cjsKKyAgICBTdHJpbmcgbV9yZXBseVV1aWQ7CisKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBt
X2RhdGFIYW5kbGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFF0
TmV0d29ya1JlcGx5RGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQv
UXROZXR3b3JrUmVxdWVzdERhdGEuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0
d29ya1JlcXVlc3REYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j
NmVhNmUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0
d29ya1JlcXVlc3REYXRhLmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBseXJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXROZXR3b3JrUmVxdWVzdERhdGEuaCIKKworI2lu
Y2x1ZGUgIkFyZ3VtZW50Q29kZXJzUXQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybS5oIgorI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+Cisj
aW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0PgorI2luY2x1ZGUgPFFVdWlkPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUXROZXR3b3JrUmVx
dWVzdERhdGE6OlF0TmV0d29ya1JlcXVlc3REYXRhKCkKK3sgfQorCitRdE5ldHdvcmtSZXF1ZXN0
RGF0YTo6UXROZXR3b3JrUmVxdWVzdERhdGEoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0
LCBRTmV0d29ya1JlcGx5KiByZXBseSkKK3sKKyAgICBtX3NjaGVtZSA9IHJlcXVlc3QudXJsKCku
c2NoZW1lKCk7CisgICAgbV91cmxTdHJpbmcgPSByZXF1ZXN0LnVybCgpLnRvU3RyaW5nKCk7Cisg
ICAgbV9yZXBseVV1aWQgPSBRVXVpZDo6Y3JlYXRlVXVpZCgpLnRvU3RyaW5nKCk7Cit9CisKK1F0
TmV0d29ya1JlcXVlc3REYXRhOjpRdE5ldHdvcmtSZXF1ZXN0RGF0YShjb25zdCBRdE5ldHdvcmtS
ZXF1ZXN0RGF0YSYgb3JpZ2luKQorICAgIDogUmVmQ291bnRlZDxRdE5ldHdvcmtSZXF1ZXN0RGF0
YT4oKSwKKyAgICBtX3NjaGVtZShvcmlnaW4ubV9zY2hlbWUpLAorICAgIG1fdXJsU3RyaW5nKG9y
aWdpbi5tX3VybFN0cmluZyksCisgICAgbV9yZXBseVV1aWQob3JpZ2luLm1fcmVwbHlVdWlkKQor
eworfQorCit2b2lkIFF0TmV0d29ya1JlcXVlc3REYXRhOjplbmNvZGUoQ29yZUlQQzo6QXJndW1l
bnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXItPmVuY29kZShtX3NjaGVt
ZSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fdXJsU3RyaW5nKTsKKyAgICBlbmNvZGVyLT5lbmNv
ZGUobV9yZXBseVV1aWQpOworfQorCitib29sIFF0TmV0d29ya1JlcXVlc3REYXRhOjpkZWNvZGUo
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBRdE5ldHdvcmtSZXF1ZXN0RGF0YSYg
ZGVzdGluYXRpb24pCit7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9z
Y2hlbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
ZGVzdGluYXRpb24ubV91cmxTdHJpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUoZGVzdGluYXRpb24ubV9yZXBseVV1aWQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERh
dGEuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9RdE5ldHdvcmtSZXF1ZXN0RGF0YS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Njc5NjQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuaApAQCAt
MCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHpl
bm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXBseXJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFF0TmV0d29ya1JlcXVlc3REYXRh
X2gKKyNkZWZpbmUgUXROZXR3b3JrUmVxdWVzdERhdGFfaAorCisjaW5jbHVkZSAiUmVmQ291bnRl
ZC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgQ29yZUlQ
QyB7CitjbGFzcyBBcmd1bWVudEVuY29kZXI7CitjbGFzcyBBcmd1bWVudERlY29kZXI7Cit9Owor
CitjbGFzcyBRTmV0d29ya1JlcXVlc3Q7CitjbGFzcyBRTmV0d29ya1JlcGx5OworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworc3RydWN0IFF0TmV0d29ya1JlcXVlc3REYXRhIDogcHVibGljIFdURjo6
UmVmQ291bnRlZDxRdE5ldHdvcmtSZXF1ZXN0RGF0YT4geworICAgIFF0TmV0d29ya1JlcXVlc3RE
YXRhKCk7CisgICAgUXROZXR3b3JrUmVxdWVzdERhdGEoY29uc3QgUU5ldHdvcmtSZXF1ZXN0Jiwg
UU5ldHdvcmtSZXBseSopOworICAgIFF0TmV0d29ya1JlcXVlc3REYXRhKGNvbnN0IFF0TmV0d29y
a1JlcXVlc3REYXRhJik7CisKKyAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29k
ZXIqKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiwgUXROZXR3b3JrUmVxdWVzdERhdGEmKTsKKworICAgIFN0cmluZyBtX3NjaGVtZTsKKyAg
ICBTdHJpbmcgbV91cmxTdHJpbmc7CisgICAgU3RyaW5nIG1fcmVwbHlVdWlkOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBRdE5ldHdvcmtSZXF1ZXN0RGF0YV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFy
Z2V0LnByaQppbmRleCA5ODU3YmZkLi43MzM0NjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTEyNyw2ICsx
MjcsOCBAQCBIRUFERVJTICs9IFwKICAgICBTaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5oIFwK
ICAgICBTaGFyZWQvcXQvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCBcCiAgICAgU2hhcmVkL3F0
L1dlYkV2ZW50RmFjdG9yeVF0LmggXAorICAgIFNoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEu
aCBcCisgICAgU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRhLmggXAogICAgIFVJUHJvY2Vz
cy9BUEkvQy9XS0FQSUNhc3QuaCBcCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UuaCBcCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLQXV0aGVudGljYXRpb25EZWNp
c2lvbkxpc3RlbmVyLmggXApAQCAtMTc4LDYgKzE4MCw5IEBAIEhFQURFUlMgKz0gXAogICAgIFVJ
UHJvY2Vzcy9BUEkvcXQvcXdlYm5hdmlnYXRpb25oaXN0b3J5X3BfcC5oIFwKICAgICBVSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnZpZXdfcF9wLmggXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5
X3AuaCBcCisgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVxdWVzdF9wLmggXAor
ICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGVfcC5oIFwKICAgICBV
SVByb2Nlc3MvQVBJL3F0L3F3ZWJ2aWV3cG9ydGluZm9fcC5oIFwKICAgICBVSVByb2Nlc3MvQXV0
aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIFwKICAgICBVSVByb2Nl
c3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmggXApAQCAt
MzUzLDcgKzM1OCw5IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViQ29ubmVjdGlv
blRvVUlQcm9jZXNzLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oIFwKICAgICBXZWJQ
cm9jZXNzL3F0L1F0QnVpbHRpbkJ1bmRsZS5oIFwKLSAgICBXZWJQcm9jZXNzL3F0L1F0QnVpbHRp
bkJ1bmRsZVBhZ2UuaAorICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlUGFnZS5oIFwK
KyAgICBXZWJQcm9jZXNzL3F0L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuaCBcCisgICAgV2ViUHJv
Y2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5oCiAKIFNPVVJDRVMgKz0gXAogICAgIFBsYXRmb3JtL0Nv
cmVJUEMvQXJndW1lbnRDb2RlcnMuY3BwIFwKQEAgLTQ2MCw2ICs0NjcsOCBAQCBTT1VSQ0VTICs9
IFwKICAgICBTaGFyZWQvcXQvTmF0aXZlV2ViV2hlZWxFdmVudFF0LmNwcCBcCiAgICAgU2hhcmVk
L3F0L1dlYkNvcmVBcmd1bWVudENvZGVyc1F0LmNwcCBcCiAgICAgU2hhcmVkL3F0L1dlYkV2ZW50
RmFjdG9yeVF0LmNwcCBcCisgICAgU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5jcHAgXAor
ICAgIFNoYXJlZC9xdC9RdE5ldHdvcmtSZXF1ZXN0RGF0YS5jcHAgXAogICAgIFNoYXJlZC9xdC9X
ZWJVUkxSZXF1ZXN0UXQuY3BwIFwKICAgICBTaGFyZWQvcXQvV2ViVVJMUmVzcG9uc2VRdC5jcHAg
XAogICAgIFVJUHJvY2Vzcy9BUEkvQy9XS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmNwcCBcCkBA
IC00OTksNiArNTA4LDggQEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2Vi
bmF2aWdhdGlvbmhpc3RvcnkuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXcuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlci5jcHAg
XAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5LmNwcCBcCisgICAgVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t1cmxzY2hlbWVkZWxlZ2F0ZS5jcHAgXAogICAgIFVJUHJvY2Vz
cy9BUEkvcXQvcXdlYnByZWZlcmVuY2VzLmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2Vi
dmlld3BvcnRpbmZvLmNwcCBcCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlUHJveHkuY3BwIFwKQEAgLTcwOCw2ICs3MTksOCBAQCBTT1VSQ0VTICs9
IFwKICAgICBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIFwKICAgICBXZWJQcm9jZXNzL3F0L1F0
QnVpbHRpbkJ1bmRsZS5jcHAgXAogICAgIFdlYlByb2Nlc3MvcXQvUXRCdWlsdGluQnVuZGxlUGFn
ZS5jcHAgXAorICAgIFdlYlByb2Nlc3MvcXQvUXROZXR3b3JrQWNjZXNzTWFuYWdlci5jcHAgXAor
ICAgIFdlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVwbHkuY3BwIFwKICAgICBXZWJQcm9jZXNzL3F0
L1dlYlByb2Nlc3NNYWluUXQuY3BwIFwKICAgICBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5j
cHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tu
ZXR3b3JrcmVwbHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tu
ZXR3b3JrcmVwbHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlODgx
MDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja25ldHdvcmtyZXBseS5jcHAKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgWmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgInFxdWlja25ldHdvcmtyZXBseV9wLmgiCisKKyNpbmNsdWRlICJR
dE5ldHdvcmtSZXBseURhdGEuaCIKKyNpbmNsdWRlICJRdE5ldHdvcmtSZXF1ZXN0RGF0YS5oIgor
I2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgorI2luY2x1ZGUgPFFEYXRlVGltZT4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKKworUVF1aWNrTmV0d29ya1JlcGx5OjpRUXVpY2tOZXR3b3Jr
UmVwbHkoUU9iamVjdCogcGFyZW50KQorICAgIDogUU9iamVjdChwYXJlbnQpCisgICAgLCBtX25l
dHdvcmtSZXBseURhdGEoYWRvcHRSZWYobmV3IFdlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhKSkK
K3sKKyAgICBRX0FTU0VSVChwYXJlbnQpOworfQorCitRU3RyaW5nIFFRdWlja05ldHdvcmtSZXBs
eTo6Y29udGVudFR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEt
Pm1fY29udGVudFR5cGU7Cit9CisKK3ZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb250ZW50
VHlwZShjb25zdCBRU3RyaW5nJiBjb250ZW50VHlwZSkKK3sKKyAgICBtX25ldHdvcmtSZXBseURh
dGEtPm1fY29udGVudFR5cGUgPSBjb250ZW50VHlwZTsKK30KKworUU5ldHdvcmtBY2Nlc3NNYW5h
Z2VyOjpPcGVyYXRpb24gUVF1aWNrTmV0d29ya1JlcGx5OjpvcGVyYXRpb24oKSBjb25zdAorewor
ICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPm1fb3BlcmF0aW9uOworfQorCit2b2lkIFFR
dWlja05ldHdvcmtSZXBseTo6c2V0T3BlcmF0aW9uKFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3Bl
cmF0aW9uIG9wZXJhdGlvbikKK3sKKyAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fb3BlcmF0aW9u
ID0gb3BlcmF0aW9uOworfQorCitRU3RyaW5nIFFRdWlja05ldHdvcmtSZXBseTo6Y29udGVudERp
c3Bvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2Nv
bnRlbnREaXNwb3NpdGlvbjsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldENvbnRl
bnREaXNwb3NpdGlvbihjb25zdCBRU3RyaW5nJiBkaXNwb3NpdGlvbikKK3sKKyAgICBtX25ldHdv
cmtSZXBseURhdGEtPm1fY29udGVudERpc3Bvc2l0aW9uID0gZGlzcG9zaXRpb247Cit9CisKK1FT
dHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5Ojpsb2NhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbmV0d29ya1JlcGx5RGF0YS0+bV9sb2NhdGlvbjsKK30KKwordm9pZCBRUXVpY2tOZXR3b3Jr
UmVwbHk6OnNldExvY2F0aW9uKGNvbnN0IFFTdHJpbmcmIGxvY2F0aW9uKQoreworICAgIG1fbmV0
d29ya1JlcGx5RGF0YS0+bV9sb2NhdGlvbiA9IGxvY2F0aW9uOworfQorCitRU3RyaW5nIFFRdWlj
a05ldHdvcmtSZXBseTo6bGFzdE1vZGlmaWVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUURhdGVU
aW1lOjpmcm9tTVNlY3NTaW5jZUVwb2NoKG1fbmV0d29ya1JlcGx5RGF0YS0+bV9sYXN0TW9kaWZp
ZWQpLnRvU3RyaW5nKFF0OjpJU09EYXRlKTsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6
OnNldExhc3RNb2RpZmllZChjb25zdCBRU3RyaW5nJiBsYXN0TW9kaWZpZWQpCit7CisgICAgbV9u
ZXR3b3JrUmVwbHlEYXRhLT5tX2xhc3RNb2RpZmllZCA9IFFEYXRlVGltZTo6ZnJvbVN0cmluZyhs
YXN0TW9kaWZpZWQsIFF0OjpJU09EYXRlKS50b01TZWNzU2luY2VFcG9jaCgpOworfQorCitRU3Ry
aW5nIFFRdWlja05ldHdvcmtSZXBseTo6Y29va2llKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9u
ZXR3b3JrUmVwbHlEYXRhLT5tX2Nvb2tpZTsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6
OnNldENvb2tpZShjb25zdCBRU3RyaW5nJiBjb29raWUpCit7CisgICAgbV9uZXR3b3JrUmVwbHlE
YXRhLT5tX2Nvb2tpZSA9IGNvb2tpZTsKK30KKworUVN0cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6
OnVzZXJBZ2VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+bV91
c2VyQWdlbnQ7Cit9CisKK3ZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRVc2VyQWdlbnQoY29u
c3QgUVN0cmluZyYgdXNlckFnZW50KQoreworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV91c2Vy
QWdlbnQgPSB1c2VyQWdlbnQ7Cit9CisKK1FTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXJ2
ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPm1fc2VydmVyOwor
fQorCit2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0U2VydmVyKGNvbnN0IFFTdHJpbmcmIHNl
cnZlcikKK3sKKyAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fc2VydmVyID0gc2VydmVyOworfQor
CitRU3RyaW5nIFFRdWlja05ldHdvcmtSZXBseTo6ZGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKG1f
bmV0d29ya1JlcGx5RGF0YS0+bV9kYXRhSGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
UVN0cmluZygpOworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNtID0gU2hhcmVkTWVtb3J5Ojpj
cmVhdGUobV9uZXR3b3JrUmVwbHlEYXRhLT5tX2RhdGFIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVh
ZE9ubHkpOworICAgIGlmICghc20pCisgICAgICAgIHJldHVybiBRU3RyaW5nKCk7CisKKyAgICB1
aW50NjRfdCBzdHJpbmdMZW5ndGggPSBtX25ldHdvcmtSZXBseURhdGEtPm1fY29udGVudExlbmd0
aCAvIHNpemVvZihVQ2hhcik7CisgICAgcmV0dXJuIFFTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBRQ2hhcio+KHNtLT5kYXRhKCkpLCBzdHJpbmdMZW5ndGgpOworfQorCit2b2lkIFFRdWlj
a05ldHdvcmtSZXBseTo6c2V0RGF0YShjb25zdCBRU3RyaW5nJiBkYXRhKQoreworICAgIC8vIFRo
aXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzLiBJbiB0aGlzIGNhc2UgdGhl
IHByZXZpb3VzIFNoYXJlZE1lbW9yeSBoYW5kbGVzCisgICAgLy8gd2lsbCBiZSBvdmVyd3JpdHRl
biBhbmQgdGhlIHByZXZpb3VzbHkgYWxsb2NhdGVkIFNoYXJlZE1lbW9yeSB3aWxsIGRpZSB3aXRo
IHRoZSBsYXN0IGhhbmRsZS4KKyAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fY29udGVudExlbmd0
aCA9IDA7CisKKyAgICBpZiAoZGF0YS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNv
bnN0IFVDaGFyKiB1Y2hhckRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oZGF0
YS5jb25zdERhdGEoKSk7CisgICAgdWludDY0X3Qgc21MZW5ndGggPSBzaXplb2YoVUNoYXIpICog
ZGF0YS5sZW5ndGgoKTsKKworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNtID0gU2hhcmVkTWVt
b3J5OjpjcmVhdGUoc21MZW5ndGgpOworICAgIGlmICghc20pCisgICAgICAgIHJldHVybjsKKyAg
ICAvLyBUaGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGVkIHNoYXJlZCBtZW1vcnkgY2FuIGJlIGJpZ2dl
ciB0aGFuIHJlcXVlc3RlZC4KKyAgICAvLyBVc3VhbGx5IHRoZSBzaXplIHdpbGwgYmUgcm91bmRl
ZCB1cCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiBhIHBhZ2Ugc2l6ZS4KKyAgICBtZW1jcHkoc20t
PmRhdGEoKSwgdWNoYXJEYXRhLCBzbUxlbmd0aCk7CisKKyAgICBpZiAoIXNtLT5jcmVhdGVIYW5k
bGUobV9uZXR3b3JrUmVwbHlEYXRhLT5tX2RhdGFIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9u
bHkpKQorICAgICAgICByZXR1cm47CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2NvbnRlbnRM
ZW5ndGggPSBzbUxlbmd0aDsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNlbmQoKQor
eworICAgIFFPYmplY3QqIHNjaGVtZVBhcmVudCA9IHBhcmVudCgpLT5wYXJlbnQoKTsKKyAgICBp
ZiAoIXNjaGVtZVBhcmVudCkKKyAgICAgICAgcmV0dXJuOworICAgIFFRdWlja1dlYlZpZXdFeHBl
cmltZW50YWwqIHdlYlZpZXdFeHBlcmltZW50YWwgPSBxb2JqZWN0X2Nhc3Q8UVF1aWNrV2ViVmll
d0V4cGVyaW1lbnRhbCo+KHNjaGVtZVBhcmVudC0+cGFyZW50KCkpOworICAgIGlmICghd2ViVmll
d0V4cGVyaW1lbnRhbCkKKyAgICAgICAgcmV0dXJuOworICAgIHdlYlZpZXdFeHBlcmltZW50YWwt
PnNlbmRBcHBsaWNhdGlvblNjaGVtZVJlcGx5KHRoaXMpOworfQorCitXVEY6OlJlZlB0cjxXZWJL
aXQ6OlF0TmV0d29ya1JlcXVlc3REYXRhPiBRUXVpY2tOZXR3b3JrUmVwbHk6Om5ldHdvcmtSZXF1
ZXN0RGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcXVlc3REYXRhOworfQor
Cit2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0TmV0d29ya1JlcXVlc3REYXRhKFdURjo6UmVm
UHRyPFdlYktpdDo6UXROZXR3b3JrUmVxdWVzdERhdGE+IGRhdGEpCit7CisgICAgbV9uZXR3b3Jr
UmVxdWVzdERhdGEgPSBkYXRhOworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9yZXBseVV1aWQg
PSBkYXRhLT5tX3JlcGx5VXVpZDsKK30KKworV1RGOjpSZWZQdHI8V2ViS2l0OjpRdE5ldHdvcmtS
ZXBseURhdGE+IFFRdWlja05ldHdvcmtSZXBseTo6bmV0d29ya1JlcGx5RGF0YSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YTsKK30KKworI2luY2x1ZGUgIm1vY19xcXVp
Y2tuZXR3b3JrcmVwbHlfcC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseV9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseV9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZmZlNDVmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5X3AuaApAQCAtMCwwICsxLDc1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpZm5kZWYgcXF1aWNrbmV0d29ya3JlcGx5X3BfaAorI2RlZmluZSBxcXVpY2tuZXR3b3Jr
cmVwbHlfcF9oCisKKyNpbmNsdWRlICJRdE5ldHdvcmtSZXBseURhdGEuaCIKKyNpbmNsdWRlICJR
dE5ldHdvcmtSZXF1ZXN0RGF0YS5oIgorI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNpbmNs
dWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+CisjaW5jbHVkZSA8UU9iamVjdD4KKyNpbmNsdWRl
IDxRdERlY2xhcmF0aXZlL3FkZWNsYXJhdGl2ZWxpc3QuaD4KKyNpbmNsdWRlIDxRdFF1aWNrL3Fx
dWlja2l0ZW0uaD4KKworY2xhc3MgUVdFQktJVF9FWFBPUlQgUVF1aWNrTmV0d29ya1JlcGx5IDog
cHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIGNv
bnRlbnRUeXBlIFJFQUQgY29udGVudFR5cGUgV1JJVEUgc2V0Q29udGVudFR5cGUpCisgICAgUV9Q
Uk9QRVJUWShRU3RyaW5nIGRhdGEgUkVBRCBkYXRhIFdSSVRFIHNldERhdGEpCisgICAgUV9FTlVN
UyhRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbikKKworcHVibGljOgorICAgIFFRdWlj
a05ldHdvcmtSZXBseShRT2JqZWN0KiBwYXJlbnQpOworICAgIFFTdHJpbmcgY29udGVudFR5cGUo
KSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRUeXBlKGNvbnN0IFFTdHJpbmcmKTsKKyAgICBR
TmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBvcGVyYXRpb24oKSBjb25zdDsKKyAgICB2
b2lkIHNldE9wZXJhdGlvbihRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbik7CisgICAg
UVN0cmluZyBjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRE
aXNwb3NpdGlvbihjb25zdCBRU3RyaW5nJik7CisgICAgUVN0cmluZyBsb2NhdGlvbigpIGNvbnN0
OworICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgUVN0cmluZyYpOworICAgIFFTdHJpbmcgbGFz
dE1vZGlmaWVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRMYXN0TW9kaWZpZWQoY29uc3QgUVN0cmlu
ZyYpOworICAgIFFTdHJpbmcgY29va2llKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb29raWUoY29u
c3QgUVN0cmluZyYpOworICAgIFFTdHJpbmcgdXNlckFnZW50KCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRVc2VyQWdlbnQoY29uc3QgUVN0cmluZyYpOworICAgIFFTdHJpbmcgc2VydmVyKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRTZXJ2ZXIoY29uc3QgUVN0cmluZyYpOworCisgICAgUVN0cmluZyBkYXRh
KCkgY29uc3Q7CisgICAgdm9pZCBzZXREYXRhKGNvbnN0IFFTdHJpbmcmIGRhdGEpOworCisgICAg
V1RGOjpSZWZQdHI8V2ViS2l0OjpRdE5ldHdvcmtSZXF1ZXN0RGF0YT4gbmV0d29ya1JlcXVlc3RE
YXRhKCkgY29uc3Q7CisgICAgdm9pZCBzZXROZXR3b3JrUmVxdWVzdERhdGEoV1RGOjpSZWZQdHI8
V2ViS2l0OjpRdE5ldHdvcmtSZXF1ZXN0RGF0YT4gZGF0YSk7CisgICAgV1RGOjpSZWZQdHI8V2Vi
S2l0OjpRdE5ldHdvcmtSZXBseURhdGE+IG5ldHdvcmtSZXBseURhdGEoKSBjb25zdDsKKworcHVi
bGljIFFfU0xPVFM6CisgICAgdm9pZCBzZW5kKCk7CisKK3ByaXZhdGU6CisgICAgV1RGOjpSZWZQ
dHI8V2ViS2l0OjpRdE5ldHdvcmtSZXF1ZXN0RGF0YT4gbV9uZXR3b3JrUmVxdWVzdERhdGE7Cisg
ICAgV1RGOjpSZWZQdHI8V2ViS2l0OjpRdE5ldHdvcmtSZXBseURhdGE+IG1fbmV0d29ya1JlcGx5
RGF0YTsKK307CisKK1FNTF9ERUNMQVJFX1RZUEUoUVF1aWNrTmV0d29ya1JlcGx5KQorCisjZW5k
aWYgLy8gcXF1aWNrbmV0d29ya3JlcGx5X3BfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0X3AuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcXVlc3RfcC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMzExNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0X3AuaApAQCAt
MCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHpl
bm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgcXF1aWNrbmV0d29ya3JlcXVlc3RfcF9oCisjZGVm
aW5lIHFxdWlja25ldHdvcmtyZXF1ZXN0X3BfaAorCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5o
IgorI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRp
dmVsaXN0Lmg+CisjaW5jbHVkZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+CisKK2NsYXNzIFFXRUJL
SVRfRVhQT1JUIFFRdWlja05ldHdvcmtSZXF1ZXN0IDogcHVibGljIFFPYmplY3QgeworICAgIFFf
T0JKRUNUCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHVybCBSRUFEIHVybCkKKworcHVibGljOgor
ICAgIFFRdWlja05ldHdvcmtSZXF1ZXN0KFFPYmplY3QqIHBhcmVudCkKKyAgICAgICAgOiBRT2Jq
ZWN0KHBhcmVudCkKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKHBhcmVudCk7CisgICAgfQorCisg
ICAgUVN0cmluZyB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQorICAgIHZvaWQgc2V0VXJs
KGNvbnN0IFFTdHJpbmcmIHVybCkgeyBtX3VybCA9IHVybDsgfQorCitwcml2YXRlOgorICAgIFFT
dHJpbmcgbV91cmw7Cit9OworCitRTUxfREVDTEFSRV9UWVBFKFFRdWlja05ldHdvcmtSZXF1ZXN0
KQorCisjZW5kaWYgLy8gcXF1aWNrbmV0d29ya3JlcXVlc3RfcF9oCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGUuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t1cmxzY2hlbWVkZWxlZ2F0
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVkNjMwNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2No
ZW1lZGVsZWdhdGUuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgWmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgInFxdWlja3VybHNjaGVtZWRlbGVnYXRlX3AuaCIKKworI2luY2x1ZGUgInFx
dWlja25ldHdvcmtyZXBseV9wLmgiCisjaW5jbHVkZSAicXF1aWNrbmV0d29ya3JlcXVlc3RfcC5o
IgorCitRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZTo6UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUoUU9i
amVjdCogcGFyZW50KQorICAgIDogUU9iamVjdChwYXJlbnQpCisgICAgLCBtX3JlcXVlc3QobmV3
IFFRdWlja05ldHdvcmtSZXF1ZXN0KHRoaXMpKQorICAgICwgbV9yZXBseShuZXcgUVF1aWNrTmV0
d29ya1JlcGx5KHRoaXMpKQoreyB9CisKK1FTdHJpbmcgUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU6
OnNjaGVtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NoZW1lOworfQorCit2b2lkIFFRdWlj
a1VybFNjaGVtZURlbGVnYXRlOjpzZXRTY2hlbWUoY29uc3QgUVN0cmluZyYgc2NoZW1lKQorewor
ICAgIG1fc2NoZW1lID0gc2NoZW1lOworICAgIGVtaXQgc2NoZW1lQ2hhbmdlZCgpOworfQorCitR
UXVpY2tOZXR3b3JrUmVxdWVzdCogUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU6OnJlcXVlc3QoKSBj
b25zdAoreworICAgIHJldHVybiBtX3JlcXVlc3Q7Cit9CisKK1FRdWlja05ldHdvcmtSZXBseSog
UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU6OnJlcGx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9y
ZXBseTsKK30KKworI2luY2x1ZGUgIm1vY19xcXVpY2t1cmxzY2hlbWVkZWxlZ2F0ZV9wLmNwcCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2No
ZW1lZGVsZWdhdGVfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t1
cmxzY2hlbWVkZWxlZ2F0ZV9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NmVlNjAyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGVfcC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgWmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lm
bmRlZiBxcXVpY2t1cmxzY2hlbWVkZWxlZ2F0ZV9wX2gKKyNkZWZpbmUgcXF1aWNrdXJsc2NoZW1l
ZGVsZWdhdGVfcF9oCisKKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSA8UU9i
amVjdD4KKyNpbmNsdWRlIDxRdFF1aWNrL3FxdWlja2l0ZW0uaD4KKworY2xhc3MgUVF1aWNrTmV0
d29ya1JlcXVlc3Q7CitjbGFzcyBRUXVpY2tOZXR3b3JrUmVwbHk7CisKK2NsYXNzIFFXRUJLSVRf
RVhQT1JUIFFRdWlja1VybFNjaGVtZURlbGVnYXRlIDogcHVibGljIFFPYmplY3QgeworICAgIFFf
T0JKRUNUCisgICAgUV9QUk9QRVJUWShRU3RyaW5nIHNjaGVtZSBSRUFEIHNjaGVtZSBXUklURSBz
ZXRTY2hlbWUgTk9USUZZIHNjaGVtZUNoYW5nZWQpCisgICAgUV9QUk9QRVJUWShRUXVpY2tOZXR3
b3JrUmVxdWVzdCogcmVxdWVzdCBSRUFEIHJlcXVlc3QpCisgICAgUV9QUk9QRVJUWShRUXVpY2tO
ZXR3b3JrUmVwbHkqIHJlcGx5IFJFQUQgcmVwbHkpCisKK3B1YmxpYzoKKyAgICBRUXVpY2tVcmxT
Y2hlbWVEZWxlZ2F0ZShRT2JqZWN0KiBwYXJlbnQgPSAwKTsKKyAgICBRU3RyaW5nIHNjaGVtZSgp
IGNvbnN0OworICAgIHZvaWQgc2V0U2NoZW1lKGNvbnN0IFFTdHJpbmcmIHNjaGVtZSk7CisgICAg
UVF1aWNrTmV0d29ya1JlcXVlc3QqIHJlcXVlc3QoKSBjb25zdDsKKyAgICBRUXVpY2tOZXR3b3Jr
UmVwbHkqIHJlcGx5KCkgY29uc3Q7CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIHNjaGVtZUNoYW5n
ZWQoKTsKKyAgICB2b2lkIHJlY2VpdmVkUmVxdWVzdCgpOworCitwcml2YXRlOgorICAgIFFTdHJp
bmcgbV9zY2hlbWU7CisgICAgUVF1aWNrTmV0d29ya1JlcXVlc3QqIG1fcmVxdWVzdDsKKyAgICBR
UXVpY2tOZXR3b3JrUmVwbHkqIG1fcmVwbHk7Cit9OworCitRTUxfREVDTEFSRV9UWVBFKFFRdWlj
a1VybFNjaGVtZURlbGVnYXRlKQorCisjZW5kaWYgLy8gcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGVf
cF9oCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
dmlldy5jcHAKaW5kZXggNGRiZjkzOC4uNTQ2NjNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKIAor
I2luY2x1ZGUgInFxdWlja25ldHdvcmtyZXBseV9wLmgiCiAjaW5jbHVkZSAicXF1aWNrd2VicGFn
ZV9wX3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3BfcC5oIgogI2luY2x1ZGUgInF3ZWJk
b3dubG9hZGl0ZW1fcF9wLmgiCkBAIC01OTUsNiArNTk2LDcgQEAgUVF1aWNrV2ViVmlld0V4cGVy
aW1lbnRhbDo6UVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbChRUXVpY2tXZWJWaWV3ICp3ZWJWaWV3
KQogICAgIDogUU9iamVjdCh3ZWJWaWV3KQogICAgICwgcV9wdHIod2ViVmlldykKICAgICAsIGRf
cHRyKHdlYlZpZXctPmRfcHRyLmRhdGEoKSkKKyAgICAsIHNjaGVtZVBhcmVudChuZXcgUU9iamVj
dCh0aGlzKSkKICAgICAsIG1fdmlld3BvcnRJbmZvKG5ldyBRV2ViVmlld3BvcnRJbmZvKHdlYlZp
ZXctPmRfcHRyLmRhdGEoKSwgdGhpcykpCiB7CiB9CkBAIC02OTgsNiArNzAwLDY5IEBAIGJvb2wg
UVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6dXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3Vy
KCkgY29uc3QKICAgICByZXR1cm4gZC0+dXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyOwog
fQogCitRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZSogUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6
c2NoZW1lRGVsZWdhdGVzX0F0KFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hl
bWVEZWxlZ2F0ZT4qIHByb3BlcnR5LCBpbnQgaW5kZXgpCit7CisgICAgY29uc3QgUU9iamVjdExp
c3QgY2hpbGRyZW4gPSBwcm9wZXJ0eS0+b2JqZWN0LT5jaGlsZHJlbigpOworICAgIGlmIChpbmRl
eCA8IGNoaWxkcmVuLmNvdW50KCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRUXVpY2tV
cmxTY2hlbWVEZWxlZ2F0ZSo+KGNoaWxkcmVuLmF0KGluZGV4KSk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzX0FwcGVu
ZChRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+KiBwcm9w
ZXJ0eSwgUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUgKnNjaGVtZSkKK3sKKyAgICBRT2JqZWN0KiBz
Y2hlbWVQYXJlbnQgPSBwcm9wZXJ0eS0+b2JqZWN0OworICAgIHNjaGVtZS0+c2V0UGFyZW50KHNj
aGVtZVBhcmVudCk7CisgICAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCogd2ViVmlld0V4cGVy
aW1lbnRhbCA9IHFvYmplY3RfY2FzdDxRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsKj4ocHJvcGVy
dHktPm9iamVjdC0+cGFyZW50KCkpOworICAgIGlmICghd2ViVmlld0V4cGVyaW1lbnRhbCkKKyAg
ICAgICAgcmV0dXJuOworICAgIFFRdWlja1dlYlZpZXdQcml2YXRlKiBkID0gd2ViVmlld0V4cGVy
aW1lbnRhbC0+ZF9mdW5jKCk7CisgICAgZC0+d2ViUGFnZVByb3h5LT5yZWdpc3RlckFwcGxpY2F0
aW9uU2NoZW1lKHNjaGVtZS0+c2NoZW1lKCkpOworfQorCitpbnQgUVF1aWNrV2ViVmlld0V4cGVy
aW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzX0NvdW50KFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxR
UXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4qIHByb3BlcnR5KQoreworICAgIHJldHVybiBwcm9wZXJ0
eS0+b2JqZWN0LT5jaGlsZHJlbigpLmNvdW50KCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld0V4
cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzX0NsZWFyKFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0
eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4qIHByb3BlcnR5KQoreworICAgIGNvbnN0IFFPYmpl
Y3RMaXN0IGNoaWxkcmVuID0gcHJvcGVydHktPm9iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICBmb3Ig
KGludCBpbmRleCA9IDA7IGluZGV4IDwgY2hpbGRyZW4uY291bnQoKTsgaW5kZXgrKykgeworICAg
ICAgICBRT2JqZWN0KiBjaGlsZCA9IGNoaWxkcmVuLmF0KGluZGV4KTsKKyAgICAgICAgY2hpbGQt
PnNldFBhcmVudCgwKTsKKyAgICAgICAgZGVsZXRlIGNoaWxkOworICAgIH0KK30KKworUURlY2xh
cmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiBRUXVpY2tXZWJWaWV3
RXhwZXJpbWVudGFsOjpzY2hlbWVEZWxlZ2F0ZXMoKQoreworICAgIHJldHVybiBRRGVjbGFyYXRp
dmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+KHNjaGVtZVBhcmVudCwgMCwK
KyAgICAgICAgICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURlbGVnYXRlc19B
cHBlbmQsCisgICAgICAgICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVEZWxl
Z2F0ZXNfQ291bnQsCisgICAgICAgICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hl
bWVEZWxlZ2F0ZXNfQXQsCisgICAgICAgICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpz
Y2hlbWVEZWxlZ2F0ZXNfQ2xlYXIpOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50
YWw6Omludm9rZUFwcGxpY2F0aW9uU2NoZW1lSGFuZGxlcihQYXNzUmVmUHRyPFF0TmV0d29ya1Jl
cXVlc3REYXRhPiByZXF1ZXN0KQoreworICAgIGNvbnN0IFFPYmplY3RMaXN0IGNoaWxkcmVuID0g
c2NoZW1lUGFyZW50LT5jaGlsZHJlbigpOworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBjaGlsZHJlbi5jb3VudCgpOyBpbmRleCsrKSB7CisgICAgICAgIFFRdWlja1VybFNjaGVtZURl
bGVnYXRlKiBkZWxlZ2F0ZSA9IHFvYmplY3RfY2FzdDxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZSo+
KGNoaWxkcmVuLmF0KGluZGV4KSk7CisgICAgICAgIGlmICghZGVsZWdhdGUpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFkZWxlZ2F0ZS0+c2NoZW1lKCkuY29tcGFyZShRU3Ry
aW5nKHJlcXVlc3QtPm1fc2NoZW1lKSwgUXQ6OkNhc2VJbnNlbnNpdGl2ZSkpIHsKKyAgICAgICAg
ICAgIGRlbGVnYXRlLT5yZXBseSgpLT5zZXROZXR3b3JrUmVxdWVzdERhdGEocmVxdWVzdCk7Cisg
ICAgICAgICAgICBlbWl0IGRlbGVnYXRlLT5yZWNlaXZlZFJlcXVlc3QoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJp
bWVudGFsOjpzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseShRUXVpY2tOZXR3b3JrUmVwbHkqIHJl
cGx5KQoreworICAgIGRfcHRyLT53ZWJQYWdlUHJveHktPnNlbmRBcHBsaWNhdGlvblNjaGVtZVJl
cGx5KHJlcGx5KTsKK30KKwogdm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpnb0Zvcndh
cmRUbyhpbnQgaW5kZXgpCiB7CiAgICAgZF9wdHItPm5hdmlnYXRpb25IaXN0b3J5LT5kLT5nb0Zv
cndhcmRUbyhpbmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnZpZXdfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3X3AuaAppbmRleCA0MjA0NTNkLi5lNTQyMDU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKQEAgLTIxLDcgKzIx
LDkgQEAKICNpZm5kZWYgcXF1aWNrd2Vidmlld19wX2gKICNkZWZpbmUgcXF1aWNrd2Vidmlld19w
X2gKIAorI2luY2x1ZGUgInFxdWlja3VybHNjaGVtZWRlbGVnYXRlX3AuaCIKICNpbmNsdWRlICJx
d2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmVsaXN0
Lmg+CiAjaW5jbHVkZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+CiAKIGNsYXNzIFFXZWJOYXZpZ2F0
aW9uUmVxdWVzdDsKQEAgLTM1LDExICszNywyMCBAQCBjbGFzcyBRV2ViTmF2aWdhdGlvbkhpc3Rv
cnk7CiBjbGFzcyBRV2ViUHJlZmVyZW5jZXM7CiBjbGFzcyBRV2ViUGVybWlzc2lvblJlcXVlc3Q7
CiBjbGFzcyBRV2ViVmlld3BvcnRJbmZvOworY2xhc3MgUVF1aWNrTmV0d29ya1JlcGx5OwogCiBu
YW1lc3BhY2UgV1RSIHsKIGNsYXNzIFBsYXRmb3JtV2ViVmlldzsKIH0KIAorbmFtZXNwYWNlIFdl
YktpdCB7CitjbGFzcyBRdE5ldHdvcmtSZXF1ZXN0RGF0YTsKK30KKworbmFtZXNwYWNlIFdURiB7
Cit0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBQYXNzUmVmUHRyOworfQorCiB0eXBlZGVmIGNvbnN0
IHN0cnVjdCBPcGFxdWVXS0NvbnRleHQqIFdLQ29udGV4dFJlZjsKIHR5cGVkZWYgY29uc3Qgc3Ry
dWN0IE9wYXF1ZVdLUGFnZUdyb3VwKiBXS1BhZ2VHcm91cFJlZjsKIHR5cGVkZWYgY29uc3Qgc3Ry
dWN0IE9wYXF1ZVdLUGFnZSogV0tQYWdlUmVmOwpAQCAtMTc2LDYgKzE4Nyw3IEBAIGNsYXNzIFFX
RUJLSVRfRVhQT1JUIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwgOiBwdWJsaWMgUU9iamVjdCB7
CiAgICAgUV9QUk9QRVJUWShRV2ViUHJlZmVyZW5jZXMqIHByZWZlcmVuY2VzIFJFQUQgcHJlZmVy
ZW5jZXMgQ09OU1RBTlQgRklOQUwpCiAgICAgUV9QUk9QRVJUWShib29sIHVzZVRyYWRpdGlvbmFs
RGVza3RvcEJlaGF2aW91ciBSRUFEIHVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91ciBXUklU
RSBzZXRVc2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIpCiAgICAgUV9QUk9QRVJUWShRV2Vi
Vmlld3BvcnRJbmZvKiB2aWV3cG9ydEluZm8gUkVBRCB2aWV3cG9ydEluZm8gQ09OU1RBTlQgRklO
QUwpCisgICAgUV9QUk9QRVJUWShRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2No
ZW1lRGVsZWdhdGU+IHVybFNjaGVtZURlbGVnYXRlcyBSRUFEIHNjaGVtZURlbGVnYXRlcykKICAg
ICBRX0VOVU1TKE5hdmlnYXRpb25SZXF1ZXN0QWN0aW9uKQogCiBwdWJsaWM6CkBAIC0yMDIsNiAr
MjE0LDE0IEBAIHB1YmxpYzoKICAgICBRV2ViTmF2aWdhdGlvbkhpc3RvcnkqIG5hdmlnYXRpb25I
aXN0b3J5KCkgY29uc3Q7CiAgICAgUVF1aWNrV2ViUGFnZSogcGFnZSgpOwogCisgICAgc3RhdGlj
IFFRdWlja1VybFNjaGVtZURlbGVnYXRlKiBzY2hlbWVEZWxlZ2F0ZXNfQXQoUURlY2xhcmF0aXZl
TGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiosIGludCBpbmRleCk7CisgICAg
c3RhdGljIHZvaWQgc2NoZW1lRGVsZWdhdGVzX0FwcGVuZChRRGVjbGFyYXRpdmVMaXN0UHJvcGVy
dHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+KiwgUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUqKTsK
KyAgICBzdGF0aWMgaW50IHNjaGVtZURlbGVnYXRlc19Db3VudChRRGVjbGFyYXRpdmVMaXN0UHJv
cGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+Kik7CisgICAgc3RhdGljIHZvaWQgc2NoZW1l
RGVsZWdhdGVzX0NsZWFyKFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVE
ZWxlZ2F0ZT4qKTsKKyAgICBRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1l
RGVsZWdhdGU+IHNjaGVtZURlbGVnYXRlcygpOworICAgIHZvaWQgaW52b2tlQXBwbGljYXRpb25T
Y2hlbWVIYW5kbGVyKFdURjo6UGFzc1JlZlB0cjxXZWJLaXQ6OlF0TmV0d29ya1JlcXVlc3REYXRh
Pik7CisgICAgdm9pZCBzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseShRUXVpY2tOZXR3b3JrUmVw
bHkqKTsKKwogcHVibGljIFFfU0xPVFM6CiAgICAgdm9pZCBzZXRVc2VUcmFkaXRpb25hbERlc2t0
b3BCZWhhdmlvdXIoYm9vbCBlbmFibGUpOwogICAgIHZvaWQgZ29CYWNrVG8oaW50IGluZGV4KTsK
QEAgLTIyMCw2ICsyNDAsNyBAQCBRX1NJR05BTFM6CiBwcml2YXRlOgogICAgIFFRdWlja1dlYlZp
ZXcqIHFfcHRyOwogICAgIFFRdWlja1dlYlZpZXdQcml2YXRlKiBkX3B0cjsKKyAgICBRT2JqZWN0
KiBzY2hlbWVQYXJlbnQ7CiAgICAgUVdlYlZpZXdwb3J0SW5mbyogbV92aWV3cG9ydEluZm87CiAK
ICAgICBmcmllbmQgY2xhc3MgUXRXZWJQYWdlVUlDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKaW5kZXggY2VlNzUxNC4uNDJhMThmMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMzYsNiArMzYsOSBAQAogI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCiAjaW5jbHVkZSAiTmF0aXZlV2ViVG91Y2hFdmVudC5oIgogI2VuZGlmCisj
aWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSAiUXROZXR3b3JrUmVxdWVzdERhdGEuaCIKKyNlbmRp
ZgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Lmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlNhbmRi
b3hFeHRlbnNpb24uaCIKQEAgLTkyLDYgKzk1LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBzdHJ1Y3QgV2luZG93RmVhdHVyZXM7CiB9CiAKKyNpZiBQTEFURk9STShRVCkKK2NsYXNzIFFR
dWlja05ldHdvcmtSZXBseTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oTUFDKQogI2lmZGVmIF9f
T0JKQ19fCiBAY2xhc3MgV0tWaWV3OwpAQCAtMzAzLDYgKzMxMCwxMSBAQCBwdWJsaWM6CiAgICAg
CiAgICAgYm9vbCBtYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
bWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb247IH0KICAgICB2b2lkIHNldE1haW50YWluc0luYWN0
aXZlU2VsZWN0aW9uKGJvb2wpOworI2lmIFBMQVRGT1JNKFFUKQorICAgIHZvaWQgcmVnaXN0ZXJB
cHBsaWNhdGlvblNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSk7CisgICAgdm9pZCByZXNvbHZl
QXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KFF0TmV0d29ya1JlcXVlc3REYXRhKTsKKyAgICB2b2lk
IHNlbmRBcHBsaWNhdGlvblNjaGVtZVJlcGx5KGNvbnN0IFFRdWlja05ldHdvcmtSZXBseSopOwor
I2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKICAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0
IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRl
cmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kLCB1
aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VF
bmQpOwpAQCAtOTg0LDYgKzk5NiwxMCBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBXS1BhZ2VEZWJ1
Z1BhaW50RmxhZ3Mgc19kZWJ1Z1BhaW50RmxhZ3M7CiAKICAgICBib29sIG1fc2hvdWxkU2VuZEV2
ZW50c1N5bmNocm9ub3VzbHk7CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBXVEY6Okhhc2hTZXQ8
UmVmUHRyPFF0TmV0d29ya1JlcXVlc3REYXRhPiA+IG1fYXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0
czsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCAwYmYxZmJkLi41
YzIxMzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
bWVzc2FnZXMuaW4KQEAgLTEyMyw2ICsxMjMsMTAgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5
IHsKICAgICBEaWRSZWNlaXZlQ29udGVudExlbmd0aEZvclJlc291cmNlKHVpbnQ2NF90IGZyYW1l
SUQsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgdWludDY0X3QgY29udGVudExlbmd0aCkK
ICAgICBEaWRGaW5pc2hMb2FkRm9yUmVzb3VyY2UodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3Qg
cmVzb3VyY2VJZGVudGlmaWVyKQogICAgIERpZEZhaWxMb2FkRm9yUmVzb3VyY2UodWludDY0X3Qg
ZnJhbWVJRCwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yIGVycm9yKQorI2lmIFBMQVRGT1JNKFFUKQorICAgIFJlc29sdmVBcHBsaWNhdGlvblNjaGVt
ZVJlcXVlc3QoV2ViS2l0OjpRdE5ldHdvcmtSZXF1ZXN0RGF0YSByZXF1ZXN0KQorI2VuZGlmCisK
IAogICAgICMgQ3VzdG9tIHJlcHJlc2VudGF0aW9ucwogICAgIERpZEZpbmlzaExvYWRpbmdEYXRh
Rm9yQ3VzdG9tUmVwcmVzZW50YXRpb24oV1RGOjpTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUsIENv
cmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0UGFnZUNsaWVudC5jcHAKaW5kZXggNDE1MzUwNS4uYjE3Mzc3NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5jcHAKQEAgLTEwMCw2ICsxMDAsMTMgQEAg
dm9pZCBRdFBhZ2VDbGllbnQ6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBk
b3dubG9hZCkKICAgICBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6Z2V0KG1fd2ViVmlldyktPmhhbmRs
ZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7CiB9CiAKK3ZvaWQgUXRQYWdlQ2xpZW50OjpoYW5k
bGVBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QoUGFzc1JlZlB0cjxRdE5ldHdvcmtSZXF1ZXN0RGF0
YT4gcmVxdWVzdERhdGEpCit7CisgICAgaWYgKCFtX3dlYlZpZXcgfHwgIW1fd2ViVmlldy0+ZXhw
ZXJpbWVudGFsKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3dlYlZpZXctPmV4cGVyaW1lbnRh
bCgpLT5pbnZva2VBcHBsaWNhdGlvblNjaGVtZUhhbmRsZXIocmVxdWVzdERhdGEuZ2V0KCkpOwor
fQorCiB2b2lkIFF0UGFnZUNsaWVudDo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYg
Y3Vyc29yKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGZpeCB1bnRpbCB3
ZSBnZXQgY3Vyc29yIHN1cHBvcnQgaW4gUU1MIGl0ZW1zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0UGFnZUNsaWVudC5oCmluZGV4IDZlNzI2MDMuLmEzMTQ5YjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWxhdW5jaFByb2Nlc3MoKTsKICAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4gY3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopOwor
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QoUGFzc1JlZlB0
cjxRdE5ldHdvcmtSZXF1ZXN0RGF0YT4pOwogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BsYXlWaWV3
KCk7CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
c2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJQYWdlUHJveHlRdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQuY3BwCmluZGV4IDQ1ODJl
MTYuLmFjOWZkZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJQ
YWdlUHJveHlRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYlBhZ2VQ
cm94eVF0LmNwcApAQCAtMjcsNiArMjcsOSBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgog
CiAjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIlF0TmV0d29ya1JlcGx5RGF0YS5o
IgorI2luY2x1ZGUgIlF0UGFnZUNsaWVudC5oIgorI2luY2x1ZGUgInFxdWlja25ldHdvcmtyZXBs
eV9wLmgiCiAjaW5jbHVkZSAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vz
c1Byb3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KQEAgLTc3LDQgKzgwLDI2IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpjYW5jZWxDb21wb3NpdGlvbigpCiAgICAgcHJvY2VzcygpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDYW5jZWxDb21wb3NpdGlvbigpLCBtX3BhZ2VJRCk7CiB9
CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpyZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKGNvbnN0IFN0
cmluZyYgc2NoZW1lKQoreworICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
UmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZShzY2hlbWUpLCBtX3BhZ2VJRCk7Cit9CisKK3ZvaWQg
V2ViUGFnZVByb3h5OjpyZXNvbHZlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KFF0TmV0d29ya1Jl
cXVlc3REYXRhIHJlcXVlc3QpCit7CisgICAgUmVmUHRyPFF0TmV0d29ya1JlcXVlc3REYXRhPiBy
ZXF1ZXN0RGF0YSA9IGFkb3B0UmVmKG5ldyBRdE5ldHdvcmtSZXF1ZXN0RGF0YShyZXF1ZXN0KSk7
CisgICAgbV9hcHBsaWNhdGlvblNjaGVtZVJlcXVlc3RzLmFkZChyZXF1ZXN0RGF0YSk7CisgICAg
c3RhdGljX2Nhc3Q8UXRQYWdlQ2xpZW50Kj4obV9wYWdlQ2xpZW50KS0+aGFuZGxlQXBwbGljYXRp
b25TY2hlbWVSZXF1ZXN0KHJlcXVlc3REYXRhKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OnNl
bmRBcHBsaWNhdGlvblNjaGVtZVJlcGx5KGNvbnN0IFFRdWlja05ldHdvcmtSZXBseSogcmVwbHkp
Cit7CisgICAgUmVmUHRyPFF0TmV0d29ya1JlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSA9IHJlcGx5
LT5uZXR3b3JrUmVxdWVzdERhdGEoKTsKKyAgICBpZiAobV9hcHBsaWNhdGlvblNjaGVtZVJlcXVl
c3RzLmNvbnRhaW5zKHJlcXVlc3REYXRhKSkgeworICAgICAgICBSZWZQdHI8UXROZXR3b3JrUmVw
bHlEYXRhPiByZXBseURhdGEgPSByZXBseS0+bmV0d29ya1JlcGx5RGF0YSgpOworICAgICAgICBw
cm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFwcGxpY2F0aW9uU2NoZW1lUmVwbHko
KnJlcGx5RGF0YSksIHBhZ2VJRCgpKTsKKyAgICAgICAgbV9hcHBsaWNhdGlvblNjaGVtZVJlcXVl
c3RzLnJlbW92ZShyZXF1ZXN0RGF0YSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKaW5kZXggYzc3NDQ2OC4uODUwODQx
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKQEAgLTE0MzgsNyArMTQzOCwx
NiBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKQog
CiBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpjcmVhdGVOZXR3b3JraW5nQ29udGV4dCgpCiB7Ci0gICAgcmV0dXJuIFdlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQ6OmNyZWF0ZShtX2ZyYW1lLT5jb3JlRnJhbWUoKSk7CisgICAgUmVmUHRyPFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IGNvbnRleHQgPSBXZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0OjpjcmVhdGUobV9mcmFtZS0+Y29yZUZyYW1lKCkpOworI2lmIFBMQVRGT1JNKFFUKQorICAg
IC8vIFdlIGVuY2Fwc3VsYXRlIHRoZSBXZWJQYWdlIHBvaW50ZXIgYXMgYSBwcm9wZXJ0eSBvZiBh
IFFPYmplY3QsCisgICAgLy8gYmVjYXVzZSB0aGUgbmV0d29ya2luZyBjb250ZXh0IG9ubHkgYWNj
ZXB0cyBhIFFPYmplY3QgYXMgb3JpZ2luYXRpbmcgb2JqZWN0LgorICAgIFFPYmplY3QqIHBhZ2VQ
b2ludGVyV3JhcHBlciA9IG5ldyBRT2JqZWN0OworICAgIHBhZ2VQb2ludGVyV3JhcHBlci0+c2V0
UHJvcGVydHkoIlBhZ2VQb2ludGVyIiwgUVZhcmlhbnQ6OmZyb21WYWx1ZShzdGF0aWNfY2FzdDx2
b2lkKj4obV9mcmFtZS0+cGFnZSgpKSkpOworICAgIHBhZ2VQb2ludGVyV3JhcHBlci0+c2V0UHJv
cGVydHkoImRlbGV0ZVdpdGhDb250ZXh0IiwgUVZhcmlhbnQ6OmZyb21WYWx1ZSh0cnVlKSk7Cisg
ICAgY29udGV4dC0+c2V0T3JpZ2luYXRpbmdPYmplY3QocGFnZVBvaW50ZXJXcmFwcGVyKTsKKyNl
bmRpZgorICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcApp
bmRleCBhNmYzYWFiLi5lNjk5NTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJXZWJQcm9jZXNz
LmgiCiAjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgogI2luY2x1ZGUgPFFPYmplY3Q+
CisjaW5jbHVkZSA8UVZhcmlhbnQ+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzMsMTEg
KzM0LDI0IEBAIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OldlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQoRnJhbWUqIGZyYW1lKQogewogfQogCitXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojp+
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCgpCit7CisgICAgaWYgKG1fb3JpZ2luYXRpbmdPYmpl
Y3QgJiYgbV9vcmlnaW5hdGluZ09iamVjdC0+cHJvcGVydHkoImRlbGV0ZVdpdGhDb250ZXh0Iiku
dG9Cb29sKCkpIHsKKyAgICAgICAgZGVsZXRlIG1fb3JpZ2luYXRpbmdPYmplY3Q7CisgICAgICAg
IG1fb3JpZ2luYXRpbmdPYmplY3QgPSAwOworICAgIH0KK30KKwogUGFzc1JlZlB0cjxXZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0PiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpjcmVhdGUoRnJh
bWUqIGZyYW1lKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dChmcmFtZSkpOwogfQogCit2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNl
dE9yaWdpbmF0aW5nT2JqZWN0KFFPYmplY3QqIG9yaWdpbikKK3sKKyAgICBtX29yaWdpbmF0aW5n
T2JqZWN0ID0gb3JpZ2luOworfQorCiBRT2JqZWN0KiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
OjpvcmlnaW5hdGluZ09iamVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fb3JpZ2luYXRpbmdP
YmplY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L3F0L1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCmluZGV4
IDEwYzM0MWEuLjVmOTU1NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3b3JraW5n
Q29udGV4dC5oCkBAIC0yNyw2ICsyNyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQgOiBwdWJsaWMgRnJhbWVOZXR3b3JraW5nQ29udGV4dCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dD4gY3JlYXRlKEZyYW1lKik7CisgICAgdm9pZCBzZXRPcmlnaW5hdGluZ09iamVjdChRT2JqZWN0
Kik7CisKKyAgICB+V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dCgpOwogCiBwcml2YXRlOgogICAg
IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQoRnJhbWUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDM1NzNkZDYuLjQwMDcyY2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNjAsNiArNjAsMTIg
QEAKIAogI2lmIFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzUXQuaCIKKyNp
bmNsdWRlICJRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmgiCisjaW5jbHVkZSAiUXROZXR3b3JrUmVw
bHkuaCIKKyNpbmNsdWRlICJRdE5ldHdvcmtSZXBseURhdGEuaCIKKyNpbmNsdWRlICJRdE5ldHdv
cmtSZXF1ZXN0RGF0YS5oIgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+CisjaW5jbHVkZSA8UU5l
dHdvcmtSZXF1ZXN0PgogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCkBAIC00NjgsNiArNDc0
LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29udGV4dE1lbnVTaG93aW5nKCkgeyBtX2lzU2hv
d2luZ0NvbnRleHRNZW51ID0gdHJ1ZTsgfQogCisjaWYgUExBVEZPUk0oUVQpCisgICAgdm9pZCBy
ZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKTsKKyAgICB2b2lk
IGFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoY29uc3QgUXROZXR3b3JrUmVwbHlEYXRhJik7CisgICAg
dm9pZCByZWNlaXZlZEFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdChjb25zdCBRTmV0d29ya1JlcXVl
c3QmLCBRdE5ldHdvcmtSZXBseSopOworI2VuZGlmCiAgICAgdm9pZCB3aGVlbEV2ZW50KGNvbnN0
IFdlYldoZWVsRXZlbnQmKTsKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCiAgICAgdm9pZCBn
ZXN0dXJlRXZlbnQoY29uc3QgV2ViR2VzdHVyZUV2ZW50Jik7CkBAIC03MjcsNiArNzM4LDkgQEAg
cHJpdmF0ZToKICNpZiBQTEFURk9STShXSU4pCiAgICAgYm9vbCBtX2dlc3R1cmVSZWFjaGVkU2Ny
b2xsaW5nTGltaXQ7CiAjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyAgICBIYXNoTWFwPFN0cmlu
ZywgUXROZXR3b3JrUmVwbHkqPiBtX2FwcGxpY2F0aW9uU2NoZW1lUmVwbGllczsKKyNlbmRpZgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDQ1ZWQ3Y2MuLjVhM2Ji
NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluCkBAIC02MCw2ICs2MCwxMSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsK
ICAgICBSZWxvYWQoYm9vbCByZWxvYWRGcm9tT3JpZ2luKQogICAgIFN0b3BMb2FkaW5nKCkKIAor
I2lmIFBMQVRGT1JNKFFUKQorICAgIEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoV2ViS2l0OjpRdE5l
dHdvcmtSZXBseURhdGEgcmVwbHkpCisgICAgUmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZShXVEY6
OlN0cmluZyBzY2hlbWUpCisjZW5kaWYKKwogICAgIFN0b3BMb2FkaW5nRnJhbWUodWludDY0X3Qg
ZnJhbWVJRCkKICAgICAKICAgICBSZXN0b3JlU2Vzc2lvbihXZWJLaXQ6OlNlc3Npb25TdGF0ZSBz
dGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9X
ZWJQYWdlUXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYlBh
Z2VRdC5jcHAKaW5kZXggMzE4ZGEyMy4uNTUwODBkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL3F0L1dlYlBhZ2VRdC5jcHAKQEAgLTMwLDYgKzMwLDggQEAK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldlYkVkaXRvckNsaWVudC5o
IgogI2luY2x1ZGUgIldlYkV2ZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMu
aCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRy
b2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9L
ZXlib2FyZEV2ZW50Lmg+CkBAIC0zODgsNCArMzkwLDI5IEBAIHZvaWQgV2ViUGFnZTo6Y2FuY2Vs
Q29tcG9zaXRpb24oKQogICAgIC8vIEZJWE1FOiBzdGF0aWNfY2FzdDxXZWJFZGl0b3JDbGllbnQq
Pih0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPmNsaWVudCgpKS0+c2VuZFNlbGVjdGlvbkNoYW5nZWRN
ZXNzYWdlKCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6cmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZShj
b25zdCBTdHJpbmcmIHNjaGVtZSkKK3sKKyAgICBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBxbmFt
ID0gcW9iamVjdF9jYXN0PFF0TmV0d29ya0FjY2Vzc01hbmFnZXIqPihXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5uZXR3b3JrQWNjZXNzTWFuYWdlcigpKTsKKyAgICBpZiAoIXFuYW0pCisgICAgICAgIHJl
dHVybjsKKyAgICBxbmFtLT5yZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKHRoaXMsIFFTdHJpbmco
c2NoZW1lKSk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cmVjZWl2ZWRBcHBsaWNhdGlvblNjaGVtZVJl
cXVlc3QoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBRdE5ldHdvcmtSZXBseSogcmVw
bHkpCit7CisgICAgUXROZXR3b3JrUmVxdWVzdERhdGEgcmVxdWVzdERhdGEocmVxdWVzdCwgcmVw
bHkpOworICAgIG1fYXBwbGljYXRpb25TY2hlbWVSZXBsaWVzLmFkZChyZXF1ZXN0RGF0YS5tX3Jl
cGx5VXVpZCwgcmVwbHkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVzb2x2
ZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdChyZXF1ZXN0RGF0YSkpOworfQorCit2b2lkIFdlYlBh
Z2U6OmFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoY29uc3QgUXROZXR3b3JrUmVwbHlEYXRhJiByZXBs
eURhdGEpCit7CisgICAgaWYgKCFtX2FwcGxpY2F0aW9uU2NoZW1lUmVwbGllcy5jb250YWlucyhy
ZXBseURhdGEubV9yZXBseVV1aWQpKQorICAgICAgICByZXR1cm47CisKKyAgICBRdE5ldHdvcmtS
ZXBseSogbmV0d29ya1JlcGx5ID0gbV9hcHBsaWNhdGlvblNjaGVtZVJlcGxpZXMudGFrZShyZXBs
eURhdGEubV9yZXBseVV1aWQpOworICAgIG5ldHdvcmtSZXBseS0+c2V0UmVwbHlEYXRhKHJlcGx5
RGF0YSk7CisgICAgbmV0d29ya1JlcGx5LT5maW5hbGl6ZSgpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3
b3JrQWNjZXNzTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0
d29ya0FjY2Vzc01hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjU3Yjk1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0
L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgWmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXROZXR3b3JrQWNjZXNzTWFuYWdlci5o
IgorCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNz
LmgiCisjaW5jbHVkZSA8UU5ldHdvcmtSZXBseT4KKyNpbmNsdWRlIDxRTmV0d29ya1JlcXVlc3Q+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpRdE5ldHdv
cmtBY2Nlc3NNYW5hZ2VyKFdlYlByb2Nlc3MqIHdlYlByb2Nlc3MpCisgICAgOiBRTmV0d29ya0Fj
Y2Vzc01hbmFnZXIoKQorICAgICwgbV93ZWJQcm9jZXNzKHdlYlByb2Nlc3MpCit7Cit9CisKK1F0
TmV0d29ya0FjY2Vzc01hbmFnZXI6OlF0TmV0d29ya0FjY2Vzc01hbmFnZXIoUU9iamVjdCogcGFy
ZW50KQorICAgIDogUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKHBhcmVudCkKKyAgICAsIG1fd2ViUHJv
Y2VzcygwKQoreworfQorCitXZWJQYWdlKiBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpvYnRhaW5P
cmlnaW5hdGluZ1dlYlBhZ2UoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0KQoreworICAg
IFFPYmplY3QqIG9yaWdpbmF0aW5nT2JqZWN0ID0gcmVxdWVzdC5vcmlnaW5hdGluZ09iamVjdCgp
OworICAgIGlmICghb3JpZ2luYXRpbmdPYmplY3QpCisgICAgICAgIHJldHVybiAwOworCisgICAg
UVZhcmlhbnQgcGFnZVB0ciA9IG9yaWdpbmF0aW5nT2JqZWN0LT5wcm9wZXJ0eSgiUGFnZVBvaW50
ZXIiKTsKKyAgICBpZiAoIXBhZ2VQdHIuaXNWYWxpZCgpIHx8ICFwYWdlUHRyLmNhbkNvbnZlcnQ8
dm9pZCo+KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgV2ViUGFnZSogd2ViUGFnZSA9IHN0
YXRpY19jYXN0PFdlYlBhZ2UqPihwYWdlUHRyLnZhbHVlPHZvaWQqPigpKTsKKyAgICBRX0FTU0VS
VCh3ZWJQYWdlKTsKKyAgICByZXR1cm4gd2ViUGFnZTsKK30KKworUU5ldHdvcmtSZXBseSogUXRO
ZXR3b3JrQWNjZXNzTWFuYWdlcjo6Y3JlYXRlUmVxdWVzdChPcGVyYXRpb24gb3BlcmF0aW9uLCBj
b25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3QsIFFJT0RldmljZSogb3V0RGF0YSkKK3sKKyAg
ICBXZWJQYWdlKiB3ZWJQYWdlID0gb2J0YWluT3JpZ2luYXRpbmdXZWJQYWdlKHJlcXVlc3QpOwor
ICAgIGlmICh3ZWJQYWdlICYmIG1fYXBwbGljYXRpb25TY2hlbWVzLmNvbnRhaW5zKHdlYlBhZ2Us
IHJlcXVlc3QudXJsKCkuc2NoZW1lKCkudG9Mb3dlcigpKSkgeworICAgICAgICBRdE5ldHdvcmtS
ZXBseSogcmVwbHkgPSBuZXcgUXROZXR3b3JrUmVwbHkocmVxdWVzdCwgdGhpcyk7CisgICAgICAg
IHdlYlBhZ2UtPnJlY2VpdmVkQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KHJlcXVlc3QsIHJlcGx5
KTsKKyAgICAgICAgcmV0dXJuIHJlcGx5OworICAgIH0KKworICAgIHJldHVybiBRTmV0d29ya0Fj
Y2Vzc01hbmFnZXI6OmNyZWF0ZVJlcXVlc3Qob3BlcmF0aW9uLCByZXF1ZXN0LCBvdXREYXRhKTsK
K30KKwordm9pZCBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpyZWdpc3RlckFwcGxpY2F0aW9uU2No
ZW1lKGNvbnN0IFdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFFTdHJpbmcmIHNjaGVtZSkKK3sKKyAgICBt
X2FwcGxpY2F0aW9uU2NoZW1lcy5pbnNlcnQocGFnZSwgc2NoZW1lLnRvTG93ZXIoKSk7Cit9CisK
K30KKworI2luY2x1ZGUgIm1vY19RdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmNwcCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3JrQWNjZXNzTWFuYWdlci5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5ZWIxZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3JrQWNjZXNzTWFuYWdl
ci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgWmVubyBBbGJp
c3NlciA8emVub0B3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFF0TmV0d29ya0FjY2Vz
c01hbmFnZXJfaAorI2RlZmluZSBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyX2gKKworI2luY2x1ZGUg
PFFNdWx0aUhhc2g+CisjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUg
PFFTdHJpbmc+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdlOworY2xhc3Mg
V2ViUHJvY2VzczsKKworY2xhc3MgUXROZXR3b3JrQWNjZXNzTWFuYWdlciA6IHB1YmxpYyBRTmV0
d29ya0FjY2Vzc01hbmFnZXIgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUXROZXR3b3Jr
QWNjZXNzTWFuYWdlcihRT2JqZWN0KiBwYXJlbnQpOworICAgIFF0TmV0d29ya0FjY2Vzc01hbmFn
ZXIoV2ViUHJvY2VzcyopOworICAgIHZvaWQgcmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZShjb25z
dCBXZWJQYWdlKiwgY29uc3QgUVN0cmluZyYgc2NoZW1lKTsKKworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgUU5ldHdvcmtSZXBseSogY3JlYXRlUmVxdWVzdChPcGVyYXRpb24sIGNvbnN0IFFOZXR3
b3JrUmVxdWVzdCYsIFFJT0RldmljZSogb3V0Z29pbmdEYXRhID0gMCkgT1ZFUlJJREU7CisgICAg
c3RhdGljIFdlYlBhZ2UqIG9idGFpbk9yaWdpbmF0aW5nV2ViUGFnZShjb25zdCBRTmV0d29ya1Jl
cXVlc3QmKTsKKworcHJpdmF0ZToKKyAgICBRTXVsdGlIYXNoPGNvbnN0IFdlYlBhZ2UqLCBRU3Ry
aW5nPiBtX2FwcGxpY2F0aW9uU2NoZW1lczsKKyAgICBXZWJQcm9jZXNzKiBtX3dlYlByb2Nlc3M7
CisKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUXROZXR3b3JrQWNj
ZXNzTWFuYWdlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0
TmV0d29ya1JlcGx5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3Jr
UmVwbHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMGY1Y2IKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1Jl
cGx5LmNwcApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBaZW5v
IEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJRdE5ldHdvcmtSZXBseS5oIgorCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5
LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldl
YlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8UU5ldHdvcmtDb29r
aWU+CisjaW5jbHVkZSA8UU5ldHdvcmtSZXBseT4KKyNpbmNsdWRlIDxRTmV0d29ya1JlcXVlc3Q+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitRdE5ldHdvcmtSZXBseTo6UXROZXR3b3JrUmVwbHko
Y29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXEsIFF0TmV0d29ya0FjY2Vzc01hbmFnZXIqIHBhcmVu
dCkKKyAgICA6IFFOZXR3b3JrUmVwbHkocGFyZW50KQorICAgICwgbV9ieXRlc0F2YWlsYWJsZSgw
KQorICAgICwgbV9zaGFyZWRNZW1vcnlTaXplKDApCit7CisgICAgc2V0UmVxdWVzdChyZXEpOwor
ICAgIHNldE9wZXJhdGlvbihRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkdldE9wZXJhdGlvbik7Cisg
ICAgc2V0VXJsKHJlcS51cmwoKSk7CisgICAgc2V0T3Blbk1vZGUoUUlPRGV2aWNlOjpSZWFkT25s
eSk7CisgICAgc2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudFR5cGVIZWFkZXIsIFFW
YXJpYW50KFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoInRleHQvaHRtbDsgY2hhcnNldD1VVEYtMTYi
KSkpOworfQorCit2b2lkIFF0TmV0d29ya1JlcGx5OjpzZXREYXRhKGNvbnN0IFNoYXJlZE1lbW9y
eTo6SGFuZGxlJiBoYW5kbGUsIHFpbnQ2NCBkYXRhU2l6ZSkKK3sKKyAgICBtX3NoYXJlZE1lbW9y
eSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7
CisgICAgaWYgKCFtX3NoYXJlZE1lbW9yeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9ieXRl
c0F2YWlsYWJsZSA9IGRhdGFTaXplOworICAgIG1fc2hhcmVkTWVtb3J5U2l6ZSA9IGRhdGFTaXpl
OworfQorCit2b2lkIFF0TmV0d29ya1JlcGx5OjpzZXRSZXBseURhdGEoY29uc3QgUXROZXR3b3Jr
UmVwbHlEYXRhJiByZXBseURhdGEpCit7CisgICAgaWYgKHJlcGx5RGF0YS5tX29wZXJhdGlvbikK
KyAgICAgICAgc2V0T3BlcmF0aW9uKHJlcGx5RGF0YS5tX29wZXJhdGlvbik7CisgICAgaWYgKCFy
ZXBseURhdGEubV9jb250ZW50RGlzcG9zaXRpb24uaXNOdWxsKCkpCisgICAgICAgIHNldEhlYWRl
cihRTmV0d29ya1JlcXVlc3Q6OkNvbnRlbnREaXNwb3NpdGlvbkhlYWRlciwgUVN0cmluZyhyZXBs
eURhdGEubV9jb250ZW50RGlzcG9zaXRpb24pKTsKKyAgICBpZiAoIXJlcGx5RGF0YS5tX2NvbnRl
bnRUeXBlLmlzTnVsbCgpKQorICAgICAgICBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250
ZW50VHlwZUhlYWRlciwgUVN0cmluZyhyZXBseURhdGEubV9jb250ZW50VHlwZSkpOworICAgIGlm
ICghcmVwbHlEYXRhLm1fbG9jYXRpb24uaXNOdWxsKCkpCisgICAgICAgIHNldEhlYWRlcihRTmV0
d29ya1JlcXVlc3Q6OkxvY2F0aW9uSGVhZGVyLCBRU3RyaW5nKHJlcGx5RGF0YS5tX2xvY2F0aW9u
KSk7CisgICAgaWYgKHJlcGx5RGF0YS5tX2xhc3RNb2RpZmllZCkKKyAgICAgICAgc2V0SGVhZGVy
KFFOZXR3b3JrUmVxdWVzdDo6TGFzdE1vZGlmaWVkSGVhZGVyLCBRRGF0ZVRpbWU6OmZyb21NU2Vj
c1NpbmNlRXBvY2gocmVwbHlEYXRhLm1fbGFzdE1vZGlmaWVkKSk7CisgICAgaWYgKCFyZXBseURh
dGEubV9jb29raWUuaXNOdWxsKCkpCisgICAgICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6
OlNldENvb2tpZUhlYWRlciwgUVZhcmlhbnQ6OmZyb21WYWx1ZShRTmV0d29ya0Nvb2tpZTo6cGFy
c2VDb29raWVzKFFTdHJpbmcocmVwbHlEYXRhLm1fY29va2llKS50b0FzY2lpKCkpKSk7CisgICAg
aWYgKCFyZXBseURhdGEubV91c2VyQWdlbnQuaXNOdWxsKCkpCisgICAgICAgIHNldEhlYWRlcihR
TmV0d29ya1JlcXVlc3Q6OlVzZXJBZ2VudEhlYWRlciwgUVN0cmluZyhyZXBseURhdGEubV91c2Vy
QWdlbnQpKTsKKyAgICBpZiAoIXJlcGx5RGF0YS5tX3NlcnZlci5pc051bGwoKSkKKyAgICAgICAg
c2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6U2VydmVySGVhZGVyLCBRU3RyaW5nKHJlcGx5RGF0
YS5tX3NlcnZlcikpOworICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvbnRlbnRMZW5n
dGhIZWFkZXIsIFFWYXJpYW50Ojpmcm9tVmFsdWUocmVwbHlEYXRhLm1fY29udGVudExlbmd0aCkp
OworICAgIHNldERhdGEocmVwbHlEYXRhLm1fZGF0YUhhbmRsZSwgcmVwbHlEYXRhLm1fY29udGVu
dExlbmd0aCk7Cit9CisKK3FpbnQ2NCBRdE5ldHdvcmtSZXBseTo6cmVhZERhdGEoY2hhciogZGF0
YSwgcWludDY0IG1heGxlbikKK3sKKyAgICBxaW50NjQgYnl0ZXNSZWFkID0gbWF4bGVuIDwgbV9i
eXRlc0F2YWlsYWJsZSA/IG1heGxlbiA6IG1fYnl0ZXNBdmFpbGFibGU7CisgICAgaWYgKHFNZW1D
b3B5KGRhdGEsIHN0YXRpY19jYXN0PGNoYXIqPihtX3NoYXJlZE1lbW9yeS0+ZGF0YSgpKSArIG1f
c2hhcmVkTWVtb3J5U2l6ZSAtIG1fYnl0ZXNBdmFpbGFibGUsIGJ5dGVzUmVhZCkpIHsKKyAgICAg
ICAgbV9ieXRlc0F2YWlsYWJsZSAtPSBieXRlc1JlYWQ7CisgICAgICAgIHJldHVybiBieXRlc1Jl
YWQ7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitxaW50NjQgUXROZXR3b3JrUmVwbHk6OmJ5
dGVzQXZhaWxhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ieXRlc0F2YWlsYWJsZSArIFFO
ZXR3b3JrUmVwbHk6OmJ5dGVzQXZhaWxhYmxlKCk7Cit9CisKK3ZvaWQgUXROZXR3b3JrUmVwbHk6
OnNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6Oktub3duSGVhZGVycyBoZWFkZXIsIGNvbnN0IFFW
YXJpYW50ICZ2YWx1ZSkKK3sKKyAgICBRTmV0d29ya1JlcGx5OjpzZXRIZWFkZXIoaGVhZGVyLCB2
YWx1ZSk7Cit9CisKK3ZvaWQgUXROZXR3b3JrUmVwbHk6OmFib3J0KCkgeyB9Cit2b2lkIFF0TmV0
d29ya1JlcGx5OjpjbG9zZSgpIHsgfQordm9pZCBRdE5ldHdvcmtSZXBseTo6c2V0UmVhZEJ1ZmZl
clNpemUocWludDY0IHNpemUpIHsgfQorYm9vbCBRdE5ldHdvcmtSZXBseTo6Y2FuUmVhZExpbmUg
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCit2b2lkIFF0TmV0d29ya1JlcGx5OjpmaW5hbGl6
ZSgpCit7CisgICAgUU5ldHdvcmtSZXBseTo6c2V0RmluaXNoZWQodHJ1ZSk7CisgICAgZW1pdCBy
ZWFkeVJlYWQoKTsKKyAgICBlbWl0IGZpbmlzaGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29y
a1JlcGx5LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNlYjc5MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVwbHkuaApAQCAt
MCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHpl
bm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBRdE5ldHdvcmtSZXBseV9oCisjZGVm
aW5lIFF0TmV0d29ya1JlcGx5X2gKKworI2luY2x1ZGUgIlF0TmV0d29ya1JlcGx5RGF0YS5oIgor
I2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUgPFFCeXRlQXJyYXk+CisjaW5jbHVk
ZSA8UURhdGVUaW1lPgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyOworCitjbGFzcyBRdE5ldHdvcmtS
ZXBseSA6IHB1YmxpYyBRTmV0d29ya1JlcGx5IHsKK3B1YmxpYzoKKyAgICBRdE5ldHdvcmtSZXBs
eShjb25zdCBRTmV0d29ya1JlcXVlc3QmLCBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBwYXJlbnQp
OworCisgICAgdmlydHVhbCBxaW50NjQgcmVhZERhdGEoY2hhciAqZGF0YSwgcWludDY0IG1heGxl
bik7CisgICAgdmlydHVhbCBxaW50NjQgYnl0ZXNBdmFpbGFibGUoKSBjb25zdDsKKyAgICB2b2lk
IHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6Oktub3duSGVhZGVycywgY29uc3QgUVZhcmlhbnQg
JnZhbHVlKTsKKyAgICB2b2lkIHNldERhdGEoY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmLCBx
aW50NjQgZGF0YVNpemUpOworICAgIHZvaWQgc2V0UmVwbHlEYXRhKGNvbnN0IFF0TmV0d29ya1Jl
cGx5RGF0YSYpOworICAgIHZvaWQgZmluYWxpemUoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdm9pZCBhYm9ydCgpOworICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRSZWFkQnVmZmVyU2l6ZShxaW50NjQpOworICAgIHZpcnR1YWwgYm9vbCBjYW5SZWFk
TGluZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHFpbnQ2NCBtX2J5dGVzQXZhaWxhYmxlOwor
ICAgIFFCeXRlQXJyYXkgbV9idWZmZXI7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gbV9zaGFy
ZWRNZW1vcnk7CisgICAgcWludDY0IG1fc2hhcmVkTWVtb3J5U2l6ZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUXROZXR3b3JrUmVwbHlfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwCmluZGV4IGQ5NDkyMDYuLmEyYmVh
YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCiAjaW5jbHVk
ZSAiUXRCdWlsdGluQnVuZGxlLmgiCisjaW5jbHVkZSAiUXROZXR3b3JrQWNjZXNzTWFuYWdlci5o
IgogI2luY2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaCIKIApAQCAtNjcsNyArNjgsNyBAQCBzdGF0aWMgdm9pZCBwYXJlbnRQ
cm9jZXNzRGllZENhbGxiYWNrKHZvaWQqKQogCiB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5p
dGlhbGl6ZVdlYlByb2Nlc3MoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFy
YW1ldGVycywgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7Ci0gICAgbV9u
ZXR3b3JrQWNjZXNzTWFuYWdlciA9IG5ldyBRTmV0d29ya0FjY2Vzc01hbmFnZXI7CisgICAgbV9u
ZXR3b3JrQWNjZXNzTWFuYWdlciA9IG5ldyBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKHRoaXMpOwog
ICAgIEFTU0VSVCghcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSAm
JiAhcGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzTnVsbCgpKTsKICAgICBXZWJD
b3JlOjpTaGFyZWRDb29raWVKYXJRdCogamFyID0gV2ViQ29yZTo6U2hhcmVkQ29va2llSmFyUXQ6
OmNyZWF0ZShwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkpOwogICAgIG1fbmV0d29y
a0FjY2Vzc01hbmFnZXItPnNldENvb2tpZUphcihqYXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL3F0
d2Via2l0LWV4cG9ydC5tYXAgYi9Tb3VyY2UvcXR3ZWJraXQtZXhwb3J0Lm1hcAppbmRleCA0OTU4
Yzg1Li4zYWY4NDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvcXR3ZWJraXQtZXhwb3J0Lm1hcAorKysg
Yi9Tb3VyY2UvcXR3ZWJraXQtZXhwb3J0Lm1hcApAQCAtMTQ4LDYgKzE0OCwxMiBAQCBxd2tfMS4w
IHsKICAgICAgICAgKlFXZWJOYXZpZ2F0aW9uUmVxdWVzdDsKICAgICAgICAgbm9uLXZpcnR1YWw/
dGh1bms/dG8/UVdlYk5hdmlnYXRpb25SZXF1ZXN0KjsKICAgICAgICAgUVdlYk5hdmlnYXRpb25S
ZXF1ZXN0OjoqOworICAgICAgICAqUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU7CisgICAgICAgIFFR
dWlja1VybFNjaGVtZURlbGVnYXRlOjoqOworICAgICAgICAqUVF1aWNrTmV0d29ya1JlcXVlc3Q7
CisgICAgICAgIFFRdWlja05ldHdvcmtSZXF1ZXN0OjoqOworICAgICAgICAqUVF1aWNrTmV0d29y
a1JlcGx5OworICAgICAgICBRUXVpY2tOZXR3b3JrUmVwbHk6Oio7CiAKIAogICAgICAgICAjIFdl
YktpdCAyIEMgQVBJIG1hbmdsZWQgaW4gQysrCg==
</data>
<flag name="review"
          id="121727"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121301</attachid>
            <date>2012-01-05 11:00:16 -0800</date>
            <delta_ts>2012-01-05 12:04:50 -0800</delta_ts>
            <desc>rebased patch after r104168.</desc>
            <filename>74931_20120105-195516.patch</filename>
            <type>text/plain</type>
            <size>71018</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBmMzllMGQ1Li44YTIyYzRh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTItMDEtMDUgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
W1F0XVtXSzJdIEltcGxlbWVudCBjdXN0b20gVVJMIHNjaGVtZXMgZGVmaW5lZCBpbiBRTUwuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkzMQorCisg
ICAgICAgIEFkZCBuZXcgY2xhc3NlcyB0byB0aGUgZXhwb3J0IG1hcC4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9xdHdlYmtpdC1leHBv
cnQubWFwOgorCiAyMDEyLTAxLTA0ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBNb3ZlIFdlYk1pbWVSZWdpc3RyeSBhbmQgZGVwZW5k
ZW5jaWVzIHRvIFNvdXJjZS9QbGF0Zm9ybQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA0YmYzYzBmLi5mZmE4
YWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTAxLTA1ICBaZW5vIEFs
Ymlzc2VyICA8emVub0B3ZWJraXQub3JnPgorCisgICAgICAgIFtRdF1bV0syXSBJbXBsZW1lbnQg
Y3VzdG9tIFVSTCBzY2hlbWVzIGRlZmluZWQgaW4gUU1MLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MzEKKworICAgICAgICBNYWtlIGNsYXNzZXMg
UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUsIFFRdWlja05ldHdvcmtSZXF1ZXN0CisgICAgICAgIGFu
ZCBRUXVpY2tOZXR3b3JrUmVwbHkgYWNjZXNzaWJsZSBmcm9tIFFNTC4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRlY2xhcmF0aXZlL2V4cGVyaW1l
bnRhbC9leHBlcmltZW50YWwucHJpOgorICAgICAgICAqIGRlY2xhcmF0aXZlL2V4cGVyaW1lbnRh
bC9wbHVnaW4uY3BwOgorICAgICAgICAqIGRlY2xhcmF0aXZlL3B1YmxpYy5wcmk6CisKIDIwMTIt
MDEtMDQgIFRvciBBcm5lIFZlc3Riw7ggIDx0b3IuYXJuZS52ZXN0Ym9Abm9raWEuY29tPgogCiAg
ICAgICAgIFtRdF0gSW50cm9kdWNlIG5ldyBxbWFrZSB2YXJpYWJsZSAnV0VCS0lUJyBmb3Igc2ln
bmFsaW5nIGRlcGVuZGVuY2llcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJh
dGl2ZS9leHBlcmltZW50YWwvZXhwZXJpbWVudGFsLnByaSBiL1NvdXJjZS9XZWJLaXQvcXQvZGVj
bGFyYXRpdmUvZXhwZXJpbWVudGFsL2V4cGVyaW1lbnRhbC5wcmkKaW5kZXggNDk0Mzg4YS4uNDlm
NDYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9leHBlcmltZW50
YWwvZXhwZXJpbWVudGFsLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4
cGVyaW1lbnRhbC9leHBlcmltZW50YWwucHJpCkBAIC0zNiw3ICszNiwxNiBAQCBSUEFUSERJUl9S
RUxBVElWRV9UT19ERVNURElSID0gLi4vLi4vbGliCiBTT1VSQ0VTICs9IHBsdWdpbi5jcHAKIAog
REVGSU5FUyArPSBIQVZFX1dFQktJVDIKLUlOQ0xVREVQQVRIICs9IC4uLy4uLy4uLy4uL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdAorCitJTkNMVURFUEFUSCArPSBcCisgICAgLi4vLi4vLi4vLi4v
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0IFwKKyAgICAuLi8uLi8uLi8uLi9XZWJLaXQyL1NoYXJl
ZC9xdCBcCisgICAgLi4vLi4vLi4vLi4vSmF2YVNjcmlwdENvcmUgXAorICAgIC4uLy4uLy4uLy4u
L0phdmFTY3JpcHRDb3JlL3d0ZiBcCisgICAgLi4vLi4vLi4vLi4vSmF2YVNjcmlwdENvcmUvd3Rm
L3VuaWNvZGUgXAorICAgIC4uLy4uLy4uLy4uL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUgXAorICAg
IC4uLy4uLy4uLy4uL1dlYktpdDIvUGxhdGZvcm0gXAorICAgIC4uLy4uLy4uLy4uL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQwogCiB0YXJnZXQucGF0aCA9ICQkW1FUX0lOU1RBTExfSU1QT1JUU10v
JCR7VEFSR0VULm1vZHVsZV9uYW1lfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2Rl
Y2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdC9xdC9kZWNs
YXJhdGl2ZS9leHBlcmltZW50YWwvcGx1Z2luLmNwcAppbmRleCBkMjg5MjI5Li5jYWIwZmJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9wbHVn
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVudGFsL3Bs
dWdpbi5jcHAKQEAgLTE3LDYgKzE3LDEwIEBACiAgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCiAqLwogCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJxcXVpY2tuZXR3b3Jr
cmVwbHlfcC5oIgorI2luY2x1ZGUgInFxdWlja25ldHdvcmtyZXF1ZXN0X3AuaCIKICNpbmNsdWRl
ICJxcXVpY2t3ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKICNpbmNs
dWRlICJxd2ViZG93bmxvYWRpdGVtX3AuaCIKQEAgLTUyLDYgKzU2LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIFFPYmplY3Q6OnRyKCJDYW5ub3QgY3JlYXRlIHNlcGFyYXRlIGluc3RhbmNlIG9m
IFdlYlZpZXdFeHBlcmltZW50YWwiKSk7CiAgICAgICAgIHFtbFJlZ2lzdGVyVW5jcmVhdGFibGVU
eXBlPFFXZWJWaWV3cG9ydEluZm8+KHVyaSwgMywgMCwgIlFXZWJWaWV3cG9ydEluZm8iLAogICAg
ICAgICAgICAgUU9iamVjdDo6dHIoIkNhbm5vdCBjcmVhdGUgc2VwYXJhdGUgaW5zdGFuY2Ugb2Yg
UVdlYlZpZXdwb3J0SW5mbyIpKTsKKyAgICAgICAgcW1sUmVnaXN0ZXJUeXBlPFFRdWlja1VybFNj
aGVtZURlbGVnYXRlPih1cmksIDMsIDAsICJVcmxTY2hlbWVEZWxlZ2F0ZSIpOworICAgICAgICBx
bWxSZWdpc3RlclVuY3JlYXRhYmxlVHlwZTxRUXVpY2tOZXR3b3JrUmVxdWVzdD4odXJpLCAzLCAw
LCAiTmV0d29ya1JlcXVlc3QiLAorICAgICAgICAgICAgUU9iamVjdDo6dHIoIk5ldHdvcmtSZXF1
ZXN0IHNob3VsZCBub3QgYmUgY3JlYXRlZCBmcm9tIFFNTCIpKTsKKyAgICAgICAgcW1sUmVnaXN0
ZXJVbmNyZWF0YWJsZVR5cGU8UVF1aWNrTmV0d29ya1JlcGx5Pih1cmksIDMsIDAsICJOZXR3b3Jr
UmVwbHkiLAorICAgICAgICAgICAgUU9iamVjdDo6dHIoIk5ldHdvcmtSZXBseSBzaG91bGQgbm90
IGJlIGNyZWF0ZWQgZnJvbSBRTUwiKSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wdWJsaWMucHJpIGIvU291cmNlL1dlYktpdC9xdC9kZWNs
YXJhdGl2ZS9wdWJsaWMucHJpCmluZGV4IDI5YmQ5MDMuLjNlMmZiNDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0
L3F0L2RlY2xhcmF0aXZlL3B1YmxpYy5wcmkKQEAgLTM4LDYgKzM4LDEyIEBAIERFU1RESVIgPSAk
JHtST09UX0JVSUxEX0RJUn0vaW1wb3J0cy8kJHtUQVJHRVQubW9kdWxlX25hbWV9CiBDT05GSUcg
Kz0gcnBhdGgKIFJQQVRIRElSX1JFTEFUSVZFX1RPX0RFU1RESVIgPSAuLi8uLi9saWIKIAorSU5D
TFVERVBBVEggKz0gXAorICAgIC4uLy4uLy4uL1dlYktpdDIvU2hhcmVkL3F0IFwKKyAgICAuLi8u
Li8uLi9KYXZhU2NyaXB0Q29yZSBcCisgICAgLi4vLi4vLi4vSmF2YVNjcmlwdENvcmUvcnVudGlt
ZSBcCisgICAgLi4vLi4vLi4vSmF2YVNjcmlwdENvcmUvd3RmCisKIFNPVVJDRVMgKz0gcWRlY2xh
cmF0aXZld2Vidmlldy5jcHAgcGx1Z2luLmNwcAogSEVBREVSUyArPSBxZGVjbGFyYXRpdmV3ZWJ2
aWV3X3AuaAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGMwYWYyYy4uYjY5ODYwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDExMyBAQAorMjAxMi0wMS0wNSAgWmVubyBBbGJpc3NlciAgPHplbm9Ad2Via2l0Lm9y
Zz4KKworICAgICAgICBbUXRdW1dLMl0gSW1wbGVtZW50IGN1c3RvbSBVUkwgc2NoZW1lcyBkZWZp
bmVkIGluIFFNTC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc0OTMxCisKKyAgICAgICAgQWxsb3cgY3JlYXRpb24gb2YgY3VzdG9tIFVybFNjaGVtZURl
bGVnYXRlcyBmcm9tIFFNTC4KKyAgICAgICAgQSBVcmxTY2hlbWVEZWxlZ2F0ZSBjb250YWlucyBh
IGhhbmRsZXIgc2lnbmFsIHRoYXQgaXMgdHJpZ2dlcmVkCisgICAgICAgIHdoZW4gYSB1cmwgbWF0
Y2hpbmcgdGhlIGRlZmluZWQgc2NoZW1lIGlzIHJlcXVlc3RlZC4KKyAgICAgICAgVG8gYWxsb3cg
Zm9yIHRoaXMgYSBkZXJpdmF0aW9uIG9mIFFOZXR3b3JrQWNjZXNzTWFuYWdlcgorICAgICAgICBp
cyBuZWNlc3NhcnkuCisgICAgICAgIFRoZSByZXF1ZXN0IGlzIHRoZW4gaGFuZGxlZCBpbiBRTUwv
SlMgYW5kIGEgcmVwbHkKKyAgICAgICAgaXMgc2VudCBiYWNrIGZyb20gdGhlIFVJUHJvY2VzcyB0
byB0aGUgV2ViUHJvY2Vzcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFNoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhOjpRdE5ldHdvcmtSZXBseURhdGEpOgor
ICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseURhdGE6OmVuY29kZSk6CisgICAgICAgIChX
ZWJLaXQ6OlF0TmV0d29ya1JlcGx5RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvcXQv
UXROZXR3b3JrUmVwbHlEYXRhLmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9xdC9RdE5ldHdv
cmtSZXF1ZXN0RGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXF1
ZXN0RGF0YTo6UXROZXR3b3JrUmVxdWVzdERhdGEpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdv
cmtSZXF1ZXN0RGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVxdWVz
dERhdGE6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRh
Lmg6IEFkZGVkLgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2tuZXR3b3JrcmVwbHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFRdWlja05ldHdv
cmtSZXBseTo6UVF1aWNrTmV0d29ya1JlcGx5KToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBs
eTo6Y29udGVudFR5cGUpOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb250ZW50
VHlwZSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6Om9wZXJhdGlvbik6CisgICAgICAg
IChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldE9wZXJhdGlvbik6CisgICAgICAgIChRUXVpY2tOZXR3
b3JrUmVwbHk6OmNvbnRlbnREaXNwb3NpdGlvbik6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVw
bHk6OnNldENvbnRlbnREaXNwb3NpdGlvbik6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6
OmxvY2F0aW9uKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0TG9jYXRpb24pOgor
ICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpsYXN0TW9kaWZpZWQpOgorICAgICAgICAoUVF1
aWNrTmV0d29ya1JlcGx5OjpzZXRMYXN0TW9kaWZpZWQpOgorICAgICAgICAoUVF1aWNrTmV0d29y
a1JlcGx5Ojpjb29raWUpOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb29raWUp
OgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5Ojp1c2VyQWdlbnQpOgorICAgICAgICAoUVF1
aWNrTmV0d29ya1JlcGx5OjpzZXRVc2VyQWdlbnQpOgorICAgICAgICAoUVF1aWNrTmV0d29ya1Jl
cGx5OjpzZXJ2ZXIpOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRTZXJ2ZXIpOgor
ICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpkYXRhKToKKyAgICAgICAgKFFRdWlja05ldHdv
cmtSZXBseTo6c2V0RGF0YSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNlbmQpOgor
ICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpuZXR3b3JrUmVxdWVzdERhdGEpOgorICAgICAg
ICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXROZXR3b3JrUmVxdWVzdERhdGEpOgorICAgICAgICAo
UVF1aWNrTmV0d29ya1JlcGx5OjpuZXR3b3JrUmVwbHlEYXRhKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseV9wLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcXVlc3RfcC5oOiBBZGRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlLmNwcDogQWRkZWQuCisgICAg
ICAgIChRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZTo6UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUpOgor
ICAgICAgICAoUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU6OnNjaGVtZSk6CisgICAgICAgIChRUXVp
Y2tVcmxTY2hlbWVEZWxlZ2F0ZTo6c2V0U2NoZW1lKToKKyAgICAgICAgKFFRdWlja1VybFNjaGVt
ZURlbGVnYXRlOjpyZXF1ZXN0KToKKyAgICAgICAgKFFRdWlja1VybFNjaGVtZURlbGVnYXRlOjpy
ZXBseSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t1cmxzY2hlbWVkZWxlZ2F0
ZV9wLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5j
cHA6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpRUXVpY2tXZWJWaWV3RXhw
ZXJpbWVudGFsKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURl
bGVnYXRlc19BdCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVE
ZWxlZ2F0ZXNfQXBwZW5kKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNj
aGVtZURlbGVnYXRlc19Db3VudCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFs
OjpzY2hlbWVEZWxlZ2F0ZXNfQ2xlYXIpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1l
bnRhbDo6c2NoZW1lRGVsZWdhdGVzKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBlcmltZW50
YWw6Omludm9rZUFwcGxpY2F0aW9uU2NoZW1lSGFuZGxlcik6CisgICAgICAgIChRUXVpY2tXZWJW
aWV3RXhwZXJpbWVudGFsOjpzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmNwcDoKKyAgICAgICAg
KFF0UGFnZUNsaWVudDo6aGFuZGxlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1dl
YlBhZ2VQcm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWdpc3Rl
ckFwcGxpY2F0aW9uU2NoZW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXNv
bHZlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVOZXR3b3JraW5nQ29udGV4dCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpyZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cmVjZWl2ZWRBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjphcHBsaWNhdGlvblNjaGVtZVJlcGx5KToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL3F0L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6UXROZXR3b3JrQWNjZXNzTWFuYWdlcjo6UXROZXR3b3JrQWNjZXNzTWFuYWdlcik6Cisg
ICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya0FjY2Vzc01hbmFnZXI6Om9idGFpbk9yaWdpbmF0aW5n
V2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya0FjY2Vzc01hbmFnZXI6OmNyZWF0
ZVJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpyZWdp
c3RlckFwcGxpY2F0aW9uU2NoZW1lKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1F0TmV0d29y
a0FjY2Vzc01hbmFnZXIuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9RdE5ldHdv
cmtSZXBseS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6UXRO
ZXR3b3JrUmVwbHkpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6c2V0RGF0YSk6
CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5OjpzZXRSZXBseURhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBseTo6cmVhZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpR
dE5ldHdvcmtSZXBseTo6Ynl0ZXNBdmFpbGFibGUpOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdv
cmtSZXBseTo6c2V0SGVhZGVyKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OmFi
b3J0KToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OmNsb3NlKToKKyAgICAgICAg
KFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OnNldFJlYWRCdWZmZXJTaXplKToKKyAgICAgICAgKFdl
YktpdDo6UXROZXR3b3JrUmVwbHk6OmNhblJlYWRMaW5lKToKKyAgICAgICAgKFdlYktpdDo6UXRO
ZXR3b3JrUmVwbHk6OmZpbmFsaXplKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL3F0L1F0TmV0d29y
a1JlcGx5Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJv
Y2Vzcyk6CisKIDIwMTItMDEtMDUgIEFsZXhhbmRlciBGw6Zyw7h5ICA8YWxleGFuZGVyLmZhZXJv
eUBub2tpYS5jb20+CiAKICAgICAgICAgUGFzcyBXZWJGcmFtZSBpbnN0ZWFkIG9mIFdlYkNvcmU6
OkZyYW1lIHRvIHRoZSBXZWJLaXQyIHNwZWNpZmljIEZyYW1lTmV0d29ya2luZ0NvbnRleHQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEuY3Bw
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlNTgwNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEuY3BwCkBAIC0wLDAg
KzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgWmVubyBBbGJpc3NlciA8emVub0B3
ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXRO
ZXR3b3JrUmVwbHlEYXRhLmgiCisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVyc1F0LmgiCisjaW5j
bHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCisjaW5jbHVkZSAiU2hhcmVk
TWVtb3J5LmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1F0TmV0
d29ya1JlcGx5RGF0YTo6UXROZXR3b3JrUmVwbHlEYXRhKCkKKyAgICA6IG1fY29udGVudExlbmd0
aCgwKQorICAgICwgbV9sYXN0TW9kaWZpZWQoMCkKK3sgfQorCit2b2lkIFF0TmV0d29ya1JlcGx5
RGF0YTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKK3sK
KyAgICBlbmNvZGVyLT5lbmNvZGUobV91cmxTdHJpbmcpOworICAgIGVuY29kZXItPmVuY29kZUVu
dW0obV9vcGVyYXRpb24pOworICAgIGVuY29kZXItPmVuY29kZShtX2NvbnRlbnREaXNwb3NpdGlv
bik7CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fY29udGVudFR5cGUpOworICAgIGVuY29kZXItPmVu
Y29kZVVJbnQ2NChtX2NvbnRlbnRMZW5ndGgpOworICAgIGVuY29kZXItPmVuY29kZShtX2xvY2F0
aW9uKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVVSW50NjQobV9sYXN0TW9kaWZpZWQpOworICAgIGVu
Y29kZXItPmVuY29kZShtX2Nvb2tpZSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fdXNlckFnZW50
KTsKKyAgICBlbmNvZGVyLT5lbmNvZGUobV9zZXJ2ZXIpOworICAgIGVuY29kZXItPmVuY29kZSht
X3JlcGx5VXVpZCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fZGF0YUhhbmRsZSk7Cit9CisKK2Jv
b2wgUXROZXR3b3JrUmVwbHlEYXRhOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBRdE5ldHdvcmtSZXBseURhdGEmIGRlc3RpbmF0aW9uKQoreworICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fdXJsU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bShkZXN0aW5hdGlvbi5tX29wZXJhdGlv
bikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShkZXN0
aW5hdGlvbi5tX2NvbnRlbnREaXNwb3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShkZXN0aW5hdGlvbi5tX2NvbnRlbnRUeXBlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDY0KGRlc3RpbmF0
aW9uLm1fY29udGVudExlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRl
Y29kZXItPmRlY29kZShkZXN0aW5hdGlvbi5tX2xvY2F0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDY0KGRlc3RpbmF0aW9uLm1fbGFzdE1v
ZGlmaWVkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
KGRlc3RpbmF0aW9uLm1fY29va2llKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fdXNlckFnZW50KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fc2VydmVyKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0
aW9uLm1fcmVwbHlVdWlkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fZGF0YUhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NGI0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRhLmgKQEAgLTAsMCArMSw2OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5v
cmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgUXROZXR3b3JrUmVwbHlEYXRhX2gKKyNkZWZpbmUgUXRO
ZXR3b3JrUmVwbHlEYXRhX2gKKworI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCisjaW5jbHVkZSAi
UmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUgPFFOZXR3
b3JrQWNjZXNzTWFuYWdlcj4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIENvcmVJUEMgeworY2xhc3MgQXJndW1lbnRFbmNvZGVyOworY2xhc3MgQXJndW1lbnRE
ZWNvZGVyOworfTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBRdE5ldHdvcmtSZXBs
eURhdGEgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkPFF0TmV0d29ya1JlcGx5RGF0YT4geworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFF0TmV0d29ya1JlcGx5RGF0YSk7CitwdWJsaWM6CisgICAg
UXROZXR3b3JrUmVwbHlEYXRhKCk7CisKKyAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVu
dEVuY29kZXIqKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKiwgUXROZXR3b3JrUmVwbHlEYXRhJik7CisKKyAgICBXVEY6OlN0cmluZyBtX3Vy
bFN0cmluZzsKKworICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0aW9uIG1fb3BlcmF0
aW9uOworICAgIFdURjo6U3RyaW5nIG1fY29udGVudERpc3Bvc2l0aW9uOworICAgIFdURjo6U3Ry
aW5nIG1fY29udGVudFR5cGU7CisgICAgdWludDY0X3QgbV9jb250ZW50TGVuZ3RoOworICAgIFdU
Rjo6U3RyaW5nIG1fbG9jYXRpb247CisgICAgdWludDY0X3QgbV9sYXN0TW9kaWZpZWQ7CisgICAg
V1RGOjpTdHJpbmcgbV9jb29raWU7CisgICAgV1RGOjpTdHJpbmcgbV91c2VyQWdlbnQ7CisgICAg
V1RGOjpTdHJpbmcgbV9zZXJ2ZXI7CisgICAgU3RyaW5nIG1fcmVwbHlVdWlkOworCisgICAgU2hh
cmVkTWVtb3J5OjpIYW5kbGUgbV9kYXRhSGFuZGxlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBRdE5ldHdvcmtSZXBseURhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRhLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9xdC9RdE5ldHdvcmtSZXF1ZXN0RGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYzZlYTZlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9xdC9RdE5ldHdvcmtSZXF1ZXN0RGF0YS5jcHAKQEAgLTAsMCArMSw3NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwbHlyb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlF0TmV0d29ya1Jl
cXVlc3REYXRhLmgiCisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVyc1F0LmgiCisjaW5jbHVkZSAi
UGxhdGZvcm0uaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRl
IDxRTmV0d29ya1JlcGx5PgorI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KKyNpbmNsdWRlIDxR
VXVpZD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1F0TmV0d29ya1JlcXVlc3REYXRhOjpRdE5ldHdvcmtSZXF1ZXN0RGF0YSgpCit7IH0K
KworUXROZXR3b3JrUmVxdWVzdERhdGE6OlF0TmV0d29ya1JlcXVlc3REYXRhKGNvbnN0IFFOZXR3
b3JrUmVxdWVzdCYgcmVxdWVzdCwgUU5ldHdvcmtSZXBseSogcmVwbHkpCit7CisgICAgbV9zY2hl
bWUgPSByZXF1ZXN0LnVybCgpLnNjaGVtZSgpOworICAgIG1fdXJsU3RyaW5nID0gcmVxdWVzdC51
cmwoKS50b1N0cmluZygpOworICAgIG1fcmVwbHlVdWlkID0gUVV1aWQ6OmNyZWF0ZVV1aWQoKS50
b1N0cmluZygpOworfQorCitRdE5ldHdvcmtSZXF1ZXN0RGF0YTo6UXROZXR3b3JrUmVxdWVzdERh
dGEoY29uc3QgUXROZXR3b3JrUmVxdWVzdERhdGEmIG9yaWdpbikKKyAgICA6IFJlZkNvdW50ZWQ8
UXROZXR3b3JrUmVxdWVzdERhdGE+KCksCisgICAgbV9zY2hlbWUob3JpZ2luLm1fc2NoZW1lKSwK
KyAgICBtX3VybFN0cmluZyhvcmlnaW4ubV91cmxTdHJpbmcpLAorICAgIG1fcmVwbHlVdWlkKG9y
aWdpbi5tX3JlcGx5VXVpZCkKK3sKK30KKwordm9pZCBRdE5ldHdvcmtSZXF1ZXN0RGF0YTo6ZW5j
b2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNv
ZGVyLT5lbmNvZGUobV9zY2hlbWUpOworICAgIGVuY29kZXItPmVuY29kZShtX3VybFN0cmluZyk7
CisgICAgZW5jb2Rlci0+ZW5jb2RlKG1fcmVwbHlVdWlkKTsKK30KKworYm9vbCBRdE5ldHdvcmtS
ZXF1ZXN0RGF0YTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUXRO
ZXR3b3JrUmVxdWVzdERhdGEmIGRlc3RpbmF0aW9uKQoreworICAgIGlmICghZGVjb2Rlci0+ZGVj
b2RlKGRlc3RpbmF0aW9uLm1fc2NoZW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fdXJsU3RyaW5nKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRlc3RpbmF0aW9uLm1fcmVwbHlV
dWlkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0
L1F0TmV0d29ya1JlcXVlc3REYXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3
b3JrUmVxdWVzdERhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTY3
OTY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29y
a1JlcXVlc3REYXRhLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwbHlyb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBR
dE5ldHdvcmtSZXF1ZXN0RGF0YV9oCisjZGVmaW5lIFF0TmV0d29ya1JlcXVlc3REYXRhX2gKKwor
I2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIENvcmVJUEMgeworY2xhc3MgQXJndW1lbnRFbmNvZGVyOworY2xhc3MgQXJn
dW1lbnREZWNvZGVyOworfTsKKworY2xhc3MgUU5ldHdvcmtSZXF1ZXN0OworY2xhc3MgUU5ldHdv
cmtSZXBseTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBRdE5ldHdvcmtSZXF1ZXN0
RGF0YSA6IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWQ8UXROZXR3b3JrUmVxdWVzdERhdGE+IHsKKyAg
ICBRdE5ldHdvcmtSZXF1ZXN0RGF0YSgpOworICAgIFF0TmV0d29ya1JlcXVlc3REYXRhKGNvbnN0
IFFOZXR3b3JrUmVxdWVzdCYsIFFOZXR3b3JrUmVwbHkqKTsKKyAgICBRdE5ldHdvcmtSZXF1ZXN0
RGF0YShjb25zdCBRdE5ldHdvcmtSZXF1ZXN0RGF0YSYpOworCisgICAgdm9pZCBlbmNvZGUoQ29y
ZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIFF0TmV0d29ya1JlcXVlc3REYXRhJik7CisKKyAgICBT
dHJpbmcgbV9zY2hlbWU7CisgICAgU3RyaW5nIG1fdXJsU3RyaW5nOworICAgIFN0cmluZyBtX3Jl
cGx5VXVpZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUXROZXR3
b3JrUmVxdWVzdERhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBi
L1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggOTg1N2JmZC4uNzMzNDY5ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJn
ZXQucHJpCkBAIC0xMjcsNiArMTI3LDggQEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVkL3F0L0Fy
Z3VtZW50Q29kZXJzUXQuaCBcCiAgICAgU2hhcmVkL3F0L1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZv
LmggXAogICAgIFNoYXJlZC9xdC9XZWJFdmVudEZhY3RvcnlRdC5oIFwKKyAgICBTaGFyZWQvcXQv
UXROZXR3b3JrUmVwbHlEYXRhLmggXAorICAgIFNoYXJlZC9xdC9RdE5ldHdvcmtSZXF1ZXN0RGF0
YS5oIFwKICAgICBVSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmggXAogICAgIFVJUHJvY2Vzcy9B
UEkvQy9XS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggXAogICAgIFVJUHJvY2Vzcy9BUEkvQy9X
S0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oIFwKQEAgLTE3OCw2ICsxODAsOSBAQCBI
RUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJuYXZpZ2F0aW9uaGlzdG9yeV9w
X3AuaCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBcCiAgICAgVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oIFwKKyAgICBVSVByb2Nlc3MvQVBJL3F0
L3FxdWlja25ldHdvcmtyZXBseV9wLmggXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0
d29ya3JlcXVlc3RfcC5oIFwKKyAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRl
bGVnYXRlX3AuaCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2Vidmlld3BvcnRpbmZvX3AuaCBc
CiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJv
eHkuaCBcCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uRGVjaXNp
b25MaXN0ZW5lci5oIFwKQEAgLTM1Myw3ICszNTgsOSBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQ
cm9jZXNzL1dlYkNvbm5lY3Rpb25Ub1VJUHJvY2Vzcy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuaCBcCiAgICAgV2ViUHJvY2Vzcy9xdC9RdEJ1aWx0aW5CdW5kbGUuaCBcCi0gICAgV2Vi
UHJvY2Vzcy9xdC9RdEJ1aWx0aW5CdW5kbGVQYWdlLmgKKyAgICBXZWJQcm9jZXNzL3F0L1F0QnVp
bHRpbkJ1bmRsZVBhZ2UuaCBcCisgICAgV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nlc3NNYW5h
Z2VyLmggXAorICAgIFdlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVwbHkuaAogCiBTT1VSQ0VTICs9
IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmNwcCBcCkBAIC00NjAsNiAr
NDY3LDggQEAgU09VUkNFUyArPSBcCiAgICAgU2hhcmVkL3F0L05hdGl2ZVdlYldoZWVsRXZlbnRR
dC5jcHAgXAogICAgIFNoYXJlZC9xdC9XZWJDb3JlQXJndW1lbnRDb2RlcnNRdC5jcHAgXAogICAg
IFNoYXJlZC9xdC9XZWJFdmVudEZhY3RvcnlRdC5jcHAgXAorICAgIFNoYXJlZC9xdC9RdE5ldHdv
cmtSZXBseURhdGEuY3BwIFwKKyAgICBTaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuY3Bw
IFwKICAgICBTaGFyZWQvcXQvV2ViVVJMUmVxdWVzdFF0LmNwcCBcCiAgICAgU2hhcmVkL3F0L1dl
YlVSTFJlc3BvbnNlUXQuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL0MvV0tBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZS5jcHAgXApAQCAtNDk5LDYgKzUwOCw4IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJ
UHJvY2Vzcy9BUEkvcXQvcXdlYm5hdmlnYXRpb25oaXN0b3J5LmNwcCBcCiAgICAgVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2ViaWNv
bmltYWdlcHJvdmlkZXIuY3BwIFwKKyAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmty
ZXBseS5jcHAgXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGUu
Y3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHAgXAogICAgIFVJ
UHJvY2Vzcy9BUEkvcXQvcXdlYnZpZXdwb3J0aW5mby5jcHAgXAogICAgIFVJUHJvY2Vzcy9BdXRo
ZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmNwcCBcCkBAIC03MDgsNiAr
NzE5LDggQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBcCiAg
ICAgV2ViUHJvY2Vzcy9xdC9RdEJ1aWx0aW5CdW5kbGUuY3BwIFwKICAgICBXZWJQcm9jZXNzL3F0
L1F0QnVpbHRpbkJ1bmRsZVBhZ2UuY3BwIFwKKyAgICBXZWJQcm9jZXNzL3F0L1F0TmV0d29ya0Fj
Y2Vzc01hbmFnZXIuY3BwIFwKKyAgICBXZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmNwcCBc
CiAgICAgV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcCBcCiAgICAgV2ViUHJvY2Vz
cy9xdC9XZWJQcm9jZXNzUXQuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi40ZTg4MTAzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHkuY3BwCkBAIC0wLDAgKzEsMTgwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9y
Zz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJxcXVpY2tuZXR3b3JrcmVwbHlf
cC5oIgorCisjaW5jbHVkZSAiUXROZXR3b3JrUmVwbHlEYXRhLmgiCisjaW5jbHVkZSAiUXROZXR3
b3JrUmVxdWVzdERhdGEuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKKyNpbmNsdWRl
IDxRRGF0ZVRpbWU+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK1FRdWlja05ldHdvcmtS
ZXBseTo6UVF1aWNrTmV0d29ya1JlcGx5KFFPYmplY3QqIHBhcmVudCkKKyAgICA6IFFPYmplY3Qo
cGFyZW50KQorICAgICwgbV9uZXR3b3JrUmVwbHlEYXRhKGFkb3B0UmVmKG5ldyBXZWJLaXQ6OlF0
TmV0d29ya1JlcGx5RGF0YSkpCit7CisgICAgUV9BU1NFUlQocGFyZW50KTsKK30KKworUVN0cmlu
ZyBRUXVpY2tOZXR3b3JrUmVwbHk6OmNvbnRlbnRUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9uZXR3b3JrUmVwbHlEYXRhLT5tX2NvbnRlbnRUeXBlOworfQorCit2b2lkIFFRdWlja05ldHdv
cmtSZXBseTo6c2V0Q29udGVudFR5cGUoY29uc3QgUVN0cmluZyYgY29udGVudFR5cGUpCit7Cisg
ICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2NvbnRlbnRUeXBlID0gY29udGVudFR5cGU7Cit9CisK
K1FOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0aW9uIFFRdWlja05ldHdvcmtSZXBseTo6b3Bl
cmF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5tX29wZXJh
dGlvbjsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldE9wZXJhdGlvbihRTmV0d29y
a0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBvcGVyYXRpb24pCit7CisgICAgbV9uZXR3b3JrUmVw
bHlEYXRhLT5tX29wZXJhdGlvbiA9IG9wZXJhdGlvbjsKK30KKworUVN0cmluZyBRUXVpY2tOZXR3
b3JrUmVwbHk6OmNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0
d29ya1JlcGx5RGF0YS0+bV9jb250ZW50RGlzcG9zaXRpb247Cit9CisKK3ZvaWQgUVF1aWNrTmV0
d29ya1JlcGx5OjpzZXRDb250ZW50RGlzcG9zaXRpb24oY29uc3QgUVN0cmluZyYgZGlzcG9zaXRp
b24pCit7CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2NvbnRlbnREaXNwb3NpdGlvbiA9IGRp
c3Bvc2l0aW9uOworfQorCitRU3RyaW5nIFFRdWlja05ldHdvcmtSZXBseTo6bG9jYXRpb24oKSBj
b25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPm1fbG9jYXRpb247Cit9CisK
K3ZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRMb2NhdGlvbihjb25zdCBRU3RyaW5nJiBsb2Nh
dGlvbikKK3sKKyAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fbG9jYXRpb24gPSBsb2NhdGlvbjsK
K30KKworUVN0cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6Omxhc3RNb2RpZmllZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFFEYXRlVGltZTo6ZnJvbU1TZWNzU2luY2VFcG9jaChtX25ldHdvcmtSZXBs
eURhdGEtPm1fbGFzdE1vZGlmaWVkKS50b1N0cmluZyhRdDo6SVNPRGF0ZSk7Cit9CisKK3ZvaWQg
UVF1aWNrTmV0d29ya1JlcGx5OjpzZXRMYXN0TW9kaWZpZWQoY29uc3QgUVN0cmluZyYgbGFzdE1v
ZGlmaWVkKQoreworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9sYXN0TW9kaWZpZWQgPSBRRGF0
ZVRpbWU6OmZyb21TdHJpbmcobGFzdE1vZGlmaWVkLCBRdDo6SVNPRGF0ZSkudG9NU2Vjc1NpbmNl
RXBvY2goKTsKK30KKworUVN0cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6OmNvb2tpZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9jb29raWU7Cit9CisKK3ZvaWQg
UVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb29raWUoY29uc3QgUVN0cmluZyYgY29va2llKQorewor
ICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9jb29raWUgPSBjb29raWU7Cit9CisKK1FTdHJpbmcg
UVF1aWNrTmV0d29ya1JlcGx5Ojp1c2VyQWdlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX25l
dHdvcmtSZXBseURhdGEtPm1fdXNlckFnZW50OworfQorCit2b2lkIFFRdWlja05ldHdvcmtSZXBs
eTo6c2V0VXNlckFnZW50KGNvbnN0IFFTdHJpbmcmIHVzZXJBZ2VudCkKK3sKKyAgICBtX25ldHdv
cmtSZXBseURhdGEtPm1fdXNlckFnZW50ID0gdXNlckFnZW50OworfQorCitRU3RyaW5nIFFRdWlj
a05ldHdvcmtSZXBseTo6c2VydmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXR3b3JrUmVw
bHlEYXRhLT5tX3NlcnZlcjsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldFNlcnZl
cihjb25zdCBRU3RyaW5nJiBzZXJ2ZXIpCit7CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5tX3Nl
cnZlciA9IHNlcnZlcjsKK30KKworUVN0cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6OmRhdGEoKSBj
b25zdAoreworICAgIGlmIChtX25ldHdvcmtSZXBseURhdGEtPm1fZGF0YUhhbmRsZS5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBz
bSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKG1fbmV0d29ya1JlcGx5RGF0YS0+bV9kYXRhSGFuZGxl
LCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKKyAgICBpZiAoIXNtKQorICAgICAgICByZXR1cm4g
UVN0cmluZygpOworCisgICAgdWludDY0X3Qgc3RyaW5nTGVuZ3RoID0gbV9uZXR3b3JrUmVwbHlE
YXRhLT5tX2NvbnRlbnRMZW5ndGggLyBzaXplb2YoVUNoYXIpOworICAgIHJldHVybiBRU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihzbS0+ZGF0YSgpKSwgc3RyaW5nTGVuZ3Ro
KTsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldERhdGEoY29uc3QgUVN0cmluZyYg
ZGF0YSkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1l
cy4gSW4gdGhpcyBjYXNlIHRoZSBwcmV2aW91cyBTaGFyZWRNZW1vcnkgaGFuZGxlcworICAgIC8v
IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYW5kIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBTaGFyZWRN
ZW1vcnkgd2lsbCBkaWUgd2l0aCB0aGUgbGFzdCBoYW5kbGUuCisgICAgbV9uZXR3b3JrUmVwbHlE
YXRhLT5tX2NvbnRlbnRMZW5ndGggPSAwOworCisgICAgaWYgKGRhdGEuaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBjb25zdCBVQ2hhciogdWNoYXJEYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBVQ2hhcio+KGRhdGEuY29uc3REYXRhKCkpOworICAgIHVpbnQ2NF90IHNtTGVuZ3Ro
ID0gc2l6ZW9mKFVDaGFyKSAqIGRhdGEubGVuZ3RoKCk7CisKKyAgICBSZWZQdHI8U2hhcmVkTWVt
b3J5PiBzbSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNtTGVuZ3RoKTsKKyAgICBpZiAoIXNtKQor
ICAgICAgICByZXR1cm47CisgICAgLy8gVGhlIHNpemUgb2YgdGhlIGFsbG9jYXRlZCBzaGFyZWQg
bWVtb3J5IGNhbiBiZSBiaWdnZXIgdGhhbiByZXF1ZXN0ZWQuCisgICAgLy8gVXN1YWxseSB0aGUg
c2l6ZSB3aWxsIGJlIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgYSBwYWdlIHNp
emUuCisgICAgbWVtY3B5KHNtLT5kYXRhKCksIHVjaGFyRGF0YSwgc21MZW5ndGgpOworCisgICAg
aWYgKCFzbS0+Y3JlYXRlSGFuZGxlKG1fbmV0d29ya1JlcGx5RGF0YS0+bV9kYXRhSGFuZGxlLCBT
aGFyZWRNZW1vcnk6OlJlYWRPbmx5KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbmV0d29ya1Jl
cGx5RGF0YS0+bV9jb250ZW50TGVuZ3RoID0gc21MZW5ndGg7Cit9CisKK3ZvaWQgUVF1aWNrTmV0
d29ya1JlcGx5OjpzZW5kKCkKK3sKKyAgICBRT2JqZWN0KiBzY2hlbWVQYXJlbnQgPSBwYXJlbnQo
KS0+cGFyZW50KCk7CisgICAgaWYgKCFzY2hlbWVQYXJlbnQpCisgICAgICAgIHJldHVybjsKKyAg
ICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsKiB3ZWJWaWV3RXhwZXJpbWVudGFsID0gcW9iamVj
dF9jYXN0PFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqPihzY2hlbWVQYXJlbnQtPnBhcmVudCgp
KTsKKyAgICBpZiAoIXdlYlZpZXdFeHBlcmltZW50YWwpCisgICAgICAgIHJldHVybjsKKyAgICB3
ZWJWaWV3RXhwZXJpbWVudGFsLT5zZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseSh0aGlzKTsKK30K
KworV1RGOjpSZWZQdHI8V2ViS2l0OjpRdE5ldHdvcmtSZXF1ZXN0RGF0YT4gUVF1aWNrTmV0d29y
a1JlcGx5OjpuZXR3b3JrUmVxdWVzdERhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdv
cmtSZXF1ZXN0RGF0YTsKK30KKwordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldE5ldHdvcmtS
ZXF1ZXN0RGF0YShXVEY6OlJlZlB0cjxXZWJLaXQ6OlF0TmV0d29ya1JlcXVlc3REYXRhPiBkYXRh
KQoreworICAgIG1fbmV0d29ya1JlcXVlc3REYXRhID0gZGF0YTsKKyAgICBtX25ldHdvcmtSZXBs
eURhdGEtPm1fcmVwbHlVdWlkID0gZGF0YS0+bV9yZXBseVV1aWQ7Cit9CisKK1dURjo6UmVmUHRy
PFdlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhPiBRUXVpY2tOZXR3b3JrUmVwbHk6Om5ldHdvcmtS
ZXBseURhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGE7Cit9CisK
KyNpbmNsdWRlICJtb2NfcXF1aWNrbmV0d29ya3JlcGx5X3AuY3BwIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHlfcC5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHlfcC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZTQ1ZjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseV9wLmgK
QEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBaZW5vIEFsYmlzc2Vy
IDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIHFxdWlja25ldHdvcmtyZXBseV9wX2gKKyNk
ZWZpbmUgcXF1aWNrbmV0d29ya3JlcGx5X3BfaAorCisjaW5jbHVkZSAiUXROZXR3b3JrUmVwbHlE
YXRhLmgiCisjaW5jbHVkZSAiUXROZXR3b3JrUmVxdWVzdERhdGEuaCIKKyNpbmNsdWRlICJxd2Vi
a2l0Z2xvYmFsLmgiCisjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUg
PFFPYmplY3Q+CisjaW5jbHVkZSA8UXREZWNsYXJhdGl2ZS9xZGVjbGFyYXRpdmVsaXN0Lmg+Cisj
aW5jbHVkZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFR
dWlja05ldHdvcmtSZXBseSA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorICAgIFFf
UFJPUEVSVFkoUVN0cmluZyBjb250ZW50VHlwZSBSRUFEIGNvbnRlbnRUeXBlIFdSSVRFIHNldENv
bnRlbnRUeXBlKQorICAgIFFfUFJPUEVSVFkoUVN0cmluZyBkYXRhIFJFQUQgZGF0YSBXUklURSBz
ZXREYXRhKQorICAgIFFfRU5VTVMoUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24pCisK
K3B1YmxpYzoKKyAgICBRUXVpY2tOZXR3b3JrUmVwbHkoUU9iamVjdCogcGFyZW50KTsKKyAgICBR
U3RyaW5nIGNvbnRlbnRUeXBlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb250ZW50VHlwZShjb25z
dCBRU3RyaW5nJik7CisgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gb3BlcmF0
aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRPcGVyYXRpb24oUU5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
OjpPcGVyYXRpb24pOworICAgIFFTdHJpbmcgY29udGVudERpc3Bvc2l0aW9uKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRDb250ZW50RGlzcG9zaXRpb24oY29uc3QgUVN0cmluZyYpOworICAgIFFTdHJp
bmcgbG9jYXRpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IFFTdHJpbmcm
KTsKKyAgICBRU3RyaW5nIGxhc3RNb2RpZmllZCgpIGNvbnN0OworICAgIHZvaWQgc2V0TGFzdE1v
ZGlmaWVkKGNvbnN0IFFTdHJpbmcmKTsKKyAgICBRU3RyaW5nIGNvb2tpZSgpIGNvbnN0OworICAg
IHZvaWQgc2V0Q29va2llKGNvbnN0IFFTdHJpbmcmKTsKKyAgICBRU3RyaW5nIHVzZXJBZ2VudCgp
IGNvbnN0OworICAgIHZvaWQgc2V0VXNlckFnZW50KGNvbnN0IFFTdHJpbmcmKTsKKyAgICBRU3Ry
aW5nIHNlcnZlcigpIGNvbnN0OworICAgIHZvaWQgc2V0U2VydmVyKGNvbnN0IFFTdHJpbmcmKTsK
KworICAgIFFTdHJpbmcgZGF0YSgpIGNvbnN0OworICAgIHZvaWQgc2V0RGF0YShjb25zdCBRU3Ry
aW5nJiBkYXRhKTsKKworICAgIFdURjo6UmVmUHRyPFdlYktpdDo6UXROZXR3b3JrUmVxdWVzdERh
dGE+IG5ldHdvcmtSZXF1ZXN0RGF0YSgpIGNvbnN0OworICAgIHZvaWQgc2V0TmV0d29ya1JlcXVl
c3REYXRhKFdURjo6UmVmUHRyPFdlYktpdDo6UXROZXR3b3JrUmVxdWVzdERhdGE+IGRhdGEpOwor
ICAgIFdURjo6UmVmUHRyPFdlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhPiBuZXR3b3JrUmVwbHlE
YXRhKCkgY29uc3Q7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZvaWQgc2VuZCgpOworCitwcml2
YXRlOgorICAgIFdURjo6UmVmUHRyPFdlYktpdDo6UXROZXR3b3JrUmVxdWVzdERhdGE+IG1fbmV0
d29ya1JlcXVlc3REYXRhOworICAgIFdURjo6UmVmUHRyPFdlYktpdDo6UXROZXR3b3JrUmVwbHlE
YXRhPiBtX25ldHdvcmtSZXBseURhdGE7Cit9OworCitRTUxfREVDTEFSRV9UWVBFKFFRdWlja05l
dHdvcmtSZXBseSkKKworI2VuZGlmIC8vIHFxdWlja25ldHdvcmtyZXBseV9wX2gKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVxdWVz
dF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXF1
ZXN0X3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTMxMTRjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3
b3JrcmVxdWVzdF9wLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIHFxdWlja25ldHdv
cmtyZXF1ZXN0X3BfaAorI2RlZmluZSBxcXVpY2tuZXR3b3JrcmVxdWVzdF9wX2gKKworI2luY2x1
ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNpbmNsdWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPFF0RGVj
bGFyYXRpdmUvcWRlY2xhcmF0aXZlbGlzdC5oPgorI2luY2x1ZGUgPFF0UXVpY2svcXF1aWNraXRl
bS5oPgorCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVpY2tOZXR3b3JrUmVxdWVzdCA6IHB1Ymxp
YyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorICAgIFFfUFJPUEVSVFkoUVN0cmluZyB1cmwgUkVB
RCB1cmwpCisKK3B1YmxpYzoKKyAgICBRUXVpY2tOZXR3b3JrUmVxdWVzdChRT2JqZWN0KiBwYXJl
bnQpCisgICAgICAgIDogUU9iamVjdChwYXJlbnQpCisgICAgeworICAgICAgICBRX0FTU0VSVChw
YXJlbnQpOworICAgIH0KKworICAgIFFTdHJpbmcgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7
IH0KKyAgICB2b2lkIHNldFVybChjb25zdCBRU3RyaW5nJiB1cmwpIHsgbV91cmwgPSB1cmw7IH0K
KworcHJpdmF0ZToKKyAgICBRU3RyaW5nIG1fdXJsOworfTsKKworUU1MX0RFQ0xBUkVfVFlQRShR
UXVpY2tOZXR3b3JrUmVxdWVzdCkKKworI2VuZGlmIC8vIHFxdWlja25ldHdvcmtyZXF1ZXN0X3Bf
aAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3Vy
bHNjaGVtZWRlbGVnYXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrdXJsc2NoZW1lZGVsZWdhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmU1ZDYzMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlLmNwcApAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJxcXVpY2t1cmxzY2hlbWVkZWxlZ2F0ZV9w
LmgiCisKKyNpbmNsdWRlICJxcXVpY2tuZXR3b3JrcmVwbHlfcC5oIgorI2luY2x1ZGUgInFxdWlj
a25ldHdvcmtyZXF1ZXN0X3AuaCIKKworUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU6OlFRdWlja1Vy
bFNjaGVtZURlbGVnYXRlKFFPYmplY3QqIHBhcmVudCkKKyAgICA6IFFPYmplY3QocGFyZW50KQor
ICAgICwgbV9yZXF1ZXN0KG5ldyBRUXVpY2tOZXR3b3JrUmVxdWVzdCh0aGlzKSkKKyAgICAsIG1f
cmVwbHkobmV3IFFRdWlja05ldHdvcmtSZXBseSh0aGlzKSkKK3sgfQorCitRU3RyaW5nIFFRdWlj
a1VybFNjaGVtZURlbGVnYXRlOjpzY2hlbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3NjaGVt
ZTsKK30KKwordm9pZCBRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZTo6c2V0U2NoZW1lKGNvbnN0IFFT
dHJpbmcmIHNjaGVtZSkKK3sKKyAgICBtX3NjaGVtZSA9IHNjaGVtZTsKKyAgICBlbWl0IHNjaGVt
ZUNoYW5nZWQoKTsKK30KKworUVF1aWNrTmV0d29ya1JlcXVlc3QqIFFRdWlja1VybFNjaGVtZURl
bGVnYXRlOjpyZXF1ZXN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZXF1ZXN0OworfQorCitR
UXVpY2tOZXR3b3JrUmVwbHkqIFFRdWlja1VybFNjaGVtZURlbGVnYXRlOjpyZXBseSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcmVwbHk7Cit9CisKKyNpbmNsdWRlICJtb2NfcXF1aWNrdXJsc2No
ZW1lZGVsZWdhdGVfcC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGVfcC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjZlZTYwMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlX3AuaApAQCAtMCww
ICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9A
d2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpZm5kZWYgcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGVfcF9oCisjZGVm
aW5lIHFxdWlja3VybHNjaGVtZWRlbGVnYXRlX3BfaAorCisjaW5jbHVkZSAicXdlYmtpdGdsb2Jh
bC5oIgorI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+
CisKK2NsYXNzIFFRdWlja05ldHdvcmtSZXF1ZXN0OworY2xhc3MgUVF1aWNrTmV0d29ya1JlcGx5
OworCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZSA6IHB1Ymxp
YyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorICAgIFFfUFJPUEVSVFkoUVN0cmluZyBzY2hlbWUg
UkVBRCBzY2hlbWUgV1JJVEUgc2V0U2NoZW1lIE5PVElGWSBzY2hlbWVDaGFuZ2VkKQorICAgIFFf
UFJPUEVSVFkoUVF1aWNrTmV0d29ya1JlcXVlc3QqIHJlcXVlc3QgUkVBRCByZXF1ZXN0KQorICAg
IFFfUFJPUEVSVFkoUVF1aWNrTmV0d29ya1JlcGx5KiByZXBseSBSRUFEIHJlcGx5KQorCitwdWJs
aWM6CisgICAgUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUoUU9iamVjdCogcGFyZW50ID0gMCk7Cisg
ICAgUVN0cmluZyBzY2hlbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldFNjaGVtZShjb25zdCBRU3Ry
aW5nJiBzY2hlbWUpOworICAgIFFRdWlja05ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KCkgY29uc3Q7
CisgICAgUVF1aWNrTmV0d29ya1JlcGx5KiByZXBseSgpIGNvbnN0OworCitRX1NJR05BTFM6Cisg
ICAgdm9pZCBzY2hlbWVDaGFuZ2VkKCk7CisgICAgdm9pZCByZWNlaXZlZFJlcXVlc3QoKTsKKwor
cHJpdmF0ZToKKyAgICBRU3RyaW5nIG1fc2NoZW1lOworICAgIFFRdWlja05ldHdvcmtSZXF1ZXN0
KiBtX3JlcXVlc3Q7CisgICAgUVF1aWNrTmV0d29ya1JlcGx5KiBtX3JlcGx5OworfTsKKworUU1M
X0RFQ0xBUkVfVFlQRShRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZSkKKworI2VuZGlmIC8vIHFxdWlj
a3VybHNjaGVtZWRlbGVnYXRlX3BfaAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCmluZGV4IDIzYmNhYmIuLjdiYmVmOTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIldl
YlByZWZlcmVuY2VzLmgiCiAKKyNpbmNsdWRlICJxcXVpY2tuZXR3b3JrcmVwbHlfcC5oIgogI2lu
Y2x1ZGUgInFxdWlja3dlYnBhZ2VfcF9wLmgiCiAjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wX3Au
aCIKICNpbmNsdWRlICJxd2ViZG93bmxvYWRpdGVtX3BfcC5oIgpAQCAtNTk1LDYgKzU5Niw3IEBA
IFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OlFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwoUVF1
aWNrV2ViVmlldyAqd2ViVmlldykKICAgICA6IFFPYmplY3Qod2ViVmlldykKICAgICAsIHFfcHRy
KHdlYlZpZXcpCiAgICAgLCBkX3B0cih3ZWJWaWV3LT5kX3B0ci5kYXRhKCkpCisgICAgLCBzY2hl
bWVQYXJlbnQobmV3IFFPYmplY3QodGhpcykpCiAgICAgLCBtX3ZpZXdwb3J0SW5mbyhuZXcgUVdl
YlZpZXdwb3J0SW5mbyh3ZWJWaWV3LT5kX3B0ci5kYXRhKCksIHRoaXMpKQogewogfQpAQCAtNjk4
LDYgKzcwMCw2OSBAQCBib29sIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnVzZVRyYWRpdGlv
bmFsRGVza3RvcEJlaGF2aW91cigpIGNvbnN0CiAgICAgcmV0dXJuIGQtPnVzZVRyYWRpdGlvbmFs
RGVza3RvcEJlaGF2aW91cjsKIH0KIAorUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUqIFFRdWlja1dl
YlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURlbGVnYXRlc19BdChRRGVjbGFyYXRpdmVMaXN0UHJv
cGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+KiBwcm9wZXJ0eSwgaW50IGluZGV4KQorewor
ICAgIGNvbnN0IFFPYmplY3RMaXN0IGNoaWxkcmVuID0gcHJvcGVydHktPm9iamVjdC0+Y2hpbGRy
ZW4oKTsKKyAgICBpZiAoaW5kZXggPCBjaGlsZHJlbi5jb3VudCgpKQorICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUqPihjaGlsZHJlbi5hdChpbmRleCkp
OworICAgIHJldHVybiAwOworfQorCit2b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNj
aGVtZURlbGVnYXRlc19BcHBlbmQoUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1VybFNj
aGVtZURlbGVnYXRlPiogcHJvcGVydHksIFFRdWlja1VybFNjaGVtZURlbGVnYXRlICpzY2hlbWUp
Cit7CisgICAgUU9iamVjdCogc2NoZW1lUGFyZW50ID0gcHJvcGVydHktPm9iamVjdDsKKyAgICBz
Y2hlbWUtPnNldFBhcmVudChzY2hlbWVQYXJlbnQpOworICAgIFFRdWlja1dlYlZpZXdFeHBlcmlt
ZW50YWwqIHdlYlZpZXdFeHBlcmltZW50YWwgPSBxb2JqZWN0X2Nhc3Q8UVF1aWNrV2ViVmlld0V4
cGVyaW1lbnRhbCo+KHByb3BlcnR5LT5vYmplY3QtPnBhcmVudCgpKTsKKyAgICBpZiAoIXdlYlZp
ZXdFeHBlcmltZW50YWwpCisgICAgICAgIHJldHVybjsKKyAgICBRUXVpY2tXZWJWaWV3UHJpdmF0
ZSogZCA9IHdlYlZpZXdFeHBlcmltZW50YWwtPmRfZnVuYygpOworICAgIGQtPndlYlBhZ2VQcm94
eS0+cmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZShzY2hlbWUtPnNjaGVtZSgpKTsKK30KKworaW50
IFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURlbGVnYXRlc19Db3VudChRRGVjbGFy
YXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+KiBwcm9wZXJ0eSkKK3sK
KyAgICByZXR1cm4gcHJvcGVydHktPm9iamVjdC0+Y2hpbGRyZW4oKS5jb3VudCgpOworfQorCit2
b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaGVtZURlbGVnYXRlc19DbGVhcihRRGVj
bGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+KiBwcm9wZXJ0eSkK
K3sKKyAgICBjb25zdCBRT2JqZWN0TGlzdCBjaGlsZHJlbiA9IHByb3BlcnR5LT5vYmplY3QtPmNo
aWxkcmVuKCk7CisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNoaWxkcmVuLmNvdW50
KCk7IGluZGV4KyspIHsKKyAgICAgICAgUU9iamVjdCogY2hpbGQgPSBjaGlsZHJlbi5hdChpbmRl
eCk7CisgICAgICAgIGNoaWxkLT5zZXRQYXJlbnQoMCk7CisgICAgICAgIGRlbGV0ZSBjaGlsZDsK
KyAgICB9Cit9CisKK1FEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVEZWxl
Z2F0ZT4gUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzKCkKK3sKKyAg
ICByZXR1cm4gUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRl
PihzY2hlbWVQYXJlbnQsIDAsCisgICAgICAgICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFs
OjpzY2hlbWVEZWxlZ2F0ZXNfQXBwZW5kLAorICAgICAgICAgICAgUVF1aWNrV2ViVmlld0V4cGVy
aW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzX0NvdW50LAorICAgICAgICAgICAgUVF1aWNrV2ViVmll
d0V4cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzX0F0LAorICAgICAgICAgICAgUVF1aWNrV2Vi
Vmlld0V4cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzX0NsZWFyKTsKK30KKwordm9pZCBRUXVp
Y2tXZWJWaWV3RXhwZXJpbWVudGFsOjppbnZva2VBcHBsaWNhdGlvblNjaGVtZUhhbmRsZXIoUGFz
c1JlZlB0cjxRdE5ldHdvcmtSZXF1ZXN0RGF0YT4gcmVxdWVzdCkKK3sKKyAgICBjb25zdCBRT2Jq
ZWN0TGlzdCBjaGlsZHJlbiA9IHNjaGVtZVBhcmVudC0+Y2hpbGRyZW4oKTsKKyAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgY2hpbGRyZW4uY291bnQoKTsgaW5kZXgrKykgeworICAgICAg
ICBRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZSogZGVsZWdhdGUgPSBxb2JqZWN0X2Nhc3Q8UVF1aWNr
VXJsU2NoZW1lRGVsZWdhdGUqPihjaGlsZHJlbi5hdChpbmRleCkpOworICAgICAgICBpZiAoIWRl
bGVnYXRlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghZGVsZWdhdGUtPnNj
aGVtZSgpLmNvbXBhcmUoUVN0cmluZyhyZXF1ZXN0LT5tX3NjaGVtZSksIFF0OjpDYXNlSW5zZW5z
aXRpdmUpKSB7CisgICAgICAgICAgICBkZWxlZ2F0ZS0+cmVwbHkoKS0+c2V0TmV0d29ya1JlcXVl
c3REYXRhKHJlcXVlc3QpOworICAgICAgICAgICAgZW1pdCBkZWxlZ2F0ZS0+cmVjZWl2ZWRSZXF1
ZXN0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
UVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoUVF1
aWNrTmV0d29ya1JlcGx5KiByZXBseSkKK3sKKyAgICBkX3B0ci0+d2ViUGFnZVByb3h5LT5zZW5k
QXBwbGljYXRpb25TY2hlbWVSZXBseShyZXBseSk7Cit9CisKIHZvaWQgUVF1aWNrV2ViVmlld0V4
cGVyaW1lbnRhbDo6Z29Gb3J3YXJkVG8oaW50IGluZGV4KQogewogICAgIGRfcHRyLT5uYXZpZ2F0
aW9uSGlzdG9yeS0+ZC0+Z29Gb3J3YXJkVG8oaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKaW5kZXggZjFiNGNiYi4uZTVkM2Yx
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3X3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXdfcC5oCkBAIC0yMSw3ICsyMSw5IEBACiAjaWZuZGVmIHFxdWlja3dlYnZpZXdfcF9oCiAjZGVm
aW5lIHFxdWlja3dlYnZpZXdfcF9oCiAKKyNpbmNsdWRlICJxcXVpY2t1cmxzY2hlbWVkZWxlZ2F0
ZV9wLmgiCiAjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgPFF0RGVjbGFyYXRp
dmUvcWRlY2xhcmF0aXZlbGlzdC5oPgogI2luY2x1ZGUgPFF0UXVpY2svcXF1aWNraXRlbS5oPgog
CiBjbGFzcyBRV2ViTmF2aWdhdGlvblJlcXVlc3Q7CkBAIC0zNSwxMSArMzcsMjAgQEAgY2xhc3Mg
UVdlYk5hdmlnYXRpb25IaXN0b3J5OwogY2xhc3MgUVdlYlByZWZlcmVuY2VzOwogY2xhc3MgUVdl
YlBlcm1pc3Npb25SZXF1ZXN0OwogY2xhc3MgUVdlYlZpZXdwb3J0SW5mbzsKK2NsYXNzIFFRdWlj
a05ldHdvcmtSZXBseTsKIAogbmFtZXNwYWNlIFdUUiB7CiBjbGFzcyBQbGF0Zm9ybVdlYlZpZXc7
CiB9CiAKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgUXROZXR3b3JrUmVxdWVzdERhdGE7Cit9
CisKK25hbWVzcGFjZSBXVEYgewordGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgUGFzc1JlZlB0cjsK
K30KKwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tDb250ZXh0KiBXS0NvbnRleHRSZWY7
CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS1BhZ2VHcm91cCogV0tQYWdlR3JvdXBSZWY7
CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS1BhZ2UqIFdLUGFnZVJlZjsKQEAgLTE3OCw2
ICsxODksNyBAQCBjbGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFs
IDogcHVibGljIFFPYmplY3QgewogICAgIFFfUFJPUEVSVFkoUVdlYlByZWZlcmVuY2VzKiBwcmVm
ZXJlbmNlcyBSRUFEIHByZWZlcmVuY2VzIENPTlNUQU5UIEZJTkFMKQogICAgIFFfUFJPUEVSVFko
Ym9vbCB1c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIgUkVBRCB1c2VUcmFkaXRpb25hbERl
c2t0b3BCZWhhdmlvdXIgV1JJVEUgc2V0VXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKQog
ICAgIFFfUFJPUEVSVFkoUVdlYlZpZXdwb3J0SW5mbyogdmlld3BvcnRJbmZvIFJFQUQgdmlld3Bv
cnRJbmZvIENPTlNUQU5UIEZJTkFMKQorICAgIFFfUFJPUEVSVFkoUURlY2xhcmF0aXZlTGlzdFBy
b3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiB1cmxTY2hlbWVEZWxlZ2F0ZXMgUkVBRCBz
Y2hlbWVEZWxlZ2F0ZXMpCiAgICAgUV9FTlVNUyhOYXZpZ2F0aW9uUmVxdWVzdEFjdGlvbikKIAog
cHVibGljOgpAQCAtMjA0LDYgKzIxNiwxNCBAQCBwdWJsaWM6CiAgICAgUVdlYk5hdmlnYXRpb25I
aXN0b3J5KiBuYXZpZ2F0aW9uSGlzdG9yeSgpIGNvbnN0OwogICAgIFFRdWlja1dlYlBhZ2UqIHBh
Z2UoKTsKIAorICAgIHN0YXRpYyBRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZSogc2NoZW1lRGVsZWdh
dGVzX0F0KFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4q
LCBpbnQgaW5kZXgpOworICAgIHN0YXRpYyB2b2lkIHNjaGVtZURlbGVnYXRlc19BcHBlbmQoUURl
Y2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiosIFFRdWlja1Vy
bFNjaGVtZURlbGVnYXRlKik7CisgICAgc3RhdGljIGludCBzY2hlbWVEZWxlZ2F0ZXNfQ291bnQo
UURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiopOworICAg
IHN0YXRpYyB2b2lkIHNjaGVtZURlbGVnYXRlc19DbGVhcihRRGVjbGFyYXRpdmVMaXN0UHJvcGVy
dHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+Kik7CisgICAgUURlY2xhcmF0aXZlTGlzdFByb3Bl
cnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiBzY2hlbWVEZWxlZ2F0ZXMoKTsKKyAgICB2b2lk
IGludm9rZUFwcGxpY2F0aW9uU2NoZW1lSGFuZGxlcihXVEY6OlBhc3NSZWZQdHI8V2ViS2l0OjpR
dE5ldHdvcmtSZXF1ZXN0RGF0YT4pOworICAgIHZvaWQgc2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVw
bHkoUVF1aWNrTmV0d29ya1JlcGx5Kik7CisKIHB1YmxpYyBRX1NMT1RTOgogICAgIHZvaWQgc2V0
VXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKGJvb2wgZW5hYmxlKTsKICAgICB2b2lkIGdv
QmFja1RvKGludCBpbmRleCk7CkBAIC0yMjIsNiArMjQyLDcgQEAgUV9TSUdOQUxTOgogcHJpdmF0
ZToKICAgICBRUXVpY2tXZWJWaWV3KiBxX3B0cjsKICAgICBRUXVpY2tXZWJWaWV3UHJpdmF0ZSog
ZF9wdHI7CisgICAgUU9iamVjdCogc2NoZW1lUGFyZW50OwogICAgIFFXZWJWaWV3cG9ydEluZm8q
IG1fdmlld3BvcnRJbmZvOwogCiAgICAgZnJpZW5kIGNsYXNzIFF0V2ViUGFnZVVJQ2xpZW50Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IGNlZTc1MTQuLjQyYTE4
ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTM2LDYgKzM2
LDkgQEAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogI2luY2x1ZGUgIk5hdGl2ZVdlYlRvdWNo
RXZlbnQuaCIKICNlbmRpZgorI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgIlF0TmV0d29ya1Jl
cXVlc3REYXRhLmgiCisjZW5kaWYKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIu
aCIKICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCkBAIC05Miw2ICs5NSwxMCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgc3RydWN0IFdpbmRvd0ZlYXR1cmVzOwogfQogCisjaWYgUExB
VEZPUk0oUVQpCitjbGFzcyBRUXVpY2tOZXR3b3JrUmVwbHk7CisjZW5kaWYKKwogI2lmIFBMQVRG
T1JNKE1BQykKICNpZmRlZiBfX09CSkNfXwogQGNsYXNzIFdLVmlldzsKQEAgLTMwMyw2ICszMTAs
MTEgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX21haW50YWluc0luYWN0aXZlU2VsZWN0aW9uOyB9CiAgICAgdm9p
ZCBzZXRNYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbihib29sKTsKKyNpZiBQTEFURk9STShRVCkK
KyAgICB2b2lkIHJlZ2lzdGVyQXBwbGljYXRpb25TY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUp
OworICAgIHZvaWQgcmVzb2x2ZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdChRdE5ldHdvcmtSZXF1
ZXN0RGF0YSk7CisgICAgdm9pZCBzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseShjb25zdCBRUXVp
Y2tOZXR3b3JrUmVwbHkqKTsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgdm9pZCBz
ZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJDb3JlOjpDb21wb3Np
dGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2
NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCB1aW50NjRf
dCByZXBsYWNlbWVudFJhbmdlRW5kKTsKQEAgLTk4NCw2ICs5OTYsMTAgQEAgcHJpdmF0ZToKICAg
ICBzdGF0aWMgV0tQYWdlRGVidWdQYWludEZsYWdzIHNfZGVidWdQYWludEZsYWdzOwogCiAgICAg
Ym9vbCBtX3Nob3VsZFNlbmRFdmVudHNTeW5jaHJvbm91c2x5OworCisjaWYgUExBVEZPUk0oUVQp
CisgICAgV1RGOjpIYXNoU2V0PFJlZlB0cjxRdE5ldHdvcmtSZXF1ZXN0RGF0YT4gPiBtX2FwcGxp
Y2F0aW9uU2NoZW1lUmVxdWVzdHM7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW4KaW5kZXggMGJmMWZiZC4uNWMyMTMzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xMjMsNiArMTIzLDEwIEBAIG1lc3Nh
Z2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgRGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhGb3JSZXNv
dXJjZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2
NF90IGNvbnRlbnRMZW5ndGgpCiAgICAgRGlkRmluaXNoTG9hZEZvclJlc291cmNlKHVpbnQ2NF90
IGZyYW1lSUQsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllcikKICAgICBEaWRGYWlsTG9hZEZv
clJlc291cmNlKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwg
V2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvcikKKyNpZiBQTEFURk9STShRVCkKKyAgICBSZXNv
bHZlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KFdlYktpdDo6UXROZXR3b3JrUmVxdWVzdERhdGEg
cmVxdWVzdCkKKyNlbmRpZgorCiAKICAgICAjIEN1c3RvbSByZXByZXNlbnRhdGlvbnMKICAgICBE
aWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbVJlcHJlc2VudGF0aW9uKFdURjo6U3RyaW5nIHN1
Z2dlc3RlZEZpbGVuYW1lLCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwCmluZGV4IDQxNTM1MDUuLmIxNzM3
NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwCkBA
IC0xMDAsNiArMTAwLDEzIEBAIHZvaWQgUXRQYWdlQ2xpZW50OjpoYW5kbGVEb3dubG9hZFJlcXVl
c3QoRG93bmxvYWRQcm94eSogZG93bmxvYWQpCiAgICAgUVF1aWNrV2ViVmlld1ByaXZhdGU6Omdl
dChtX3dlYlZpZXcpLT5oYW5kbGVEb3dubG9hZFJlcXVlc3QoZG93bmxvYWQpOwogfQogCit2b2lk
IFF0UGFnZUNsaWVudDo6aGFuZGxlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KFBhc3NSZWZQdHI8
UXROZXR3b3JrUmVxdWVzdERhdGE+IHJlcXVlc3REYXRhKQoreworICAgIGlmICghbV93ZWJWaWV3
IHx8ICFtX3dlYlZpZXctPmV4cGVyaW1lbnRhbCgpKQorICAgICAgICByZXR1cm47CisgICAgbV93
ZWJWaWV3LT5leHBlcmltZW50YWwoKS0+aW52b2tlQXBwbGljYXRpb25TY2hlbWVIYW5kbGVyKHJl
cXVlc3REYXRhLmdldCgpKTsKK30KKwogdm9pZCBRdFBhZ2VDbGllbnQ6OnNldEN1cnNvcihjb25z
dCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcikKIHsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRl
bXBvcmFyeSBmaXggdW50aWwgd2UgZ2V0IGN1cnNvciBzdXBwb3J0IGluIFFNTCBpdGVtcy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuaAppbmRleCA2ZTcyNjAzLi5h
MzE0OWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYWdlQ2xp
ZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5oCkBA
IC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVuY2hQcm9j
ZXNzKCk7CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IGNyZWF0ZURy
YXdpbmdBcmVhUHJveHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0
KERvd25sb2FkUHJveHkqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQXBwbGljYXRpb25TY2hl
bWVSZXF1ZXN0KFBhc3NSZWZQdHI8UXROZXR3b3JrUmVxdWVzdERhdGE+KTsKIAogICAgIHZpcnR1
YWwgdm9pZCBkaXNwbGF5VmlldygpOwogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxWaWV3KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNj
cm9sbE9mZnNldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2Vi
UGFnZVByb3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYlBhZ2VQcm94
eVF0LmNwcAppbmRleCA0NTgyZTE2Li5hYzlmZGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9XZWJQYWdlUHJveHlRdC5jcHAKQEAgLTI3LDYgKzI3LDkgQEAKICNpbmNsdWRl
ICJXZWJQYWdlUHJveHkuaCIKIAogI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJR
dE5ldHdvcmtSZXBseURhdGEuaCIKKyNpbmNsdWRlICJRdFBhZ2VDbGllbnQuaCIKKyNpbmNsdWRl
ICJxcXVpY2tuZXR3b3JrcmVwbHlfcC5oIgogI2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRWRpdG9yLmg+
CkBAIC03Nyw0ICs4MCwyNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2FuY2VsQ29tcG9zaXRpb24o
KQogICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2FuY2VsQ29tcG9zaXRp
b24oKSwgbV9wYWdlSUQpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJBcHBsaWNh
dGlvblNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKK3sKKyAgICBwcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlJlZ2lzdGVyQXBwbGljYXRpb25TY2hlbWUoc2NoZW1lKSwgbV9w
YWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVzb2x2ZUFwcGxpY2F0aW9uU2NoZW1l
UmVxdWVzdChRdE5ldHdvcmtSZXF1ZXN0RGF0YSByZXF1ZXN0KQoreworICAgIFJlZlB0cjxRdE5l
dHdvcmtSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEgPSBhZG9wdFJlZihuZXcgUXROZXR3b3JrUmVx
dWVzdERhdGEocmVxdWVzdCkpOworICAgIG1fYXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0cy5hZGQo
cmVxdWVzdERhdGEpOworICAgIHN0YXRpY19jYXN0PFF0UGFnZUNsaWVudCo+KG1fcGFnZUNsaWVu
dCktPmhhbmRsZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdChyZXF1ZXN0RGF0YSk7Cit9CisKK3Zv
aWQgV2ViUGFnZVByb3h5OjpzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseShjb25zdCBRUXVpY2tO
ZXR3b3JrUmVwbHkqIHJlcGx5KQoreworICAgIFJlZlB0cjxRdE5ldHdvcmtSZXF1ZXN0RGF0YT4g
cmVxdWVzdERhdGEgPSByZXBseS0+bmV0d29ya1JlcXVlc3REYXRhKCk7CisgICAgaWYgKG1fYXBw
bGljYXRpb25TY2hlbWVSZXF1ZXN0cy5jb250YWlucyhyZXF1ZXN0RGF0YSkpIHsKKyAgICAgICAg
UmVmUHRyPFF0TmV0d29ya1JlcGx5RGF0YT4gcmVwbHlEYXRhID0gcmVwbHktPm5ldHdvcmtSZXBs
eURhdGEoKTsKKyAgICAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpBcHBs
aWNhdGlvblNjaGVtZVJlcGx5KCpyZXBseURhdGEpLCBwYWdlSUQoKSk7CisgICAgICAgIG1fYXBw
bGljYXRpb25TY2hlbWVSZXF1ZXN0cy5yZW1vdmUocmVxdWVzdERhdGEpOworICAgIH0KK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmlu
ZGV4IDdjNTQ0ZDYuLjNkMGUyMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3Bw
CkBAIC0xNDM4LDcgKzE0MzgsMTQgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkQ2hh
bmdlU2Nyb2xsT2Zmc2V0KCkKIAogUGFzc1JlZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlTmV0d29ya2luZ0NvbnRleHQoKQogewotICAgIHJl
dHVybiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpjcmVhdGUobV9mcmFtZSk7CisgICAgUmVm
UHRyPFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IGNvbnRleHQgPSBXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0OjpjcmVhdGUobV9mcmFtZSk7CisjaWYgUExBVEZPUk0oUVQpCisgICAgLy8gV2Ug
ZW5jYXBzdWxhdGUgdGhlIFdlYlBhZ2UgcG9pbnRlciBhcyBhIHByb3BlcnR5IG9mIHRoZSBvcmln
aW5hdGluZyBRT2JqZWN0LgorICAgIFFPYmplY3QqIG9yaWdpbmF0aW5nT2JqZWN0ID0gY29udGV4
dC0+b3JpZ2luYXRpbmdPYmplY3QoKTsKKyAgICBBU1NFUlQob3JpZ2luYXRpbmdPYmplY3QpOwor
ICAgIG9yaWdpbmF0aW5nT2JqZWN0LT5zZXRQcm9wZXJ0eSgiUGFnZVBvaW50ZXIiLCBRVmFyaWFu
dDo6ZnJvbVZhbHVlKHN0YXRpY19jYXN0PHZvaWQqPihtX2ZyYW1lLT5wYWdlKCkpKSk7CisjZW5k
aWYKKyAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKaW5k
ZXggMmI3NjIzOC4uMDcwZDQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5o
IgogI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KICNpbmNsdWRlIDxRT2JqZWN0Pgor
I2luY2x1ZGUgPFFWYXJpYW50PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKaW5kZXggNDkwOGI2OC4uN2VjNjI2NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9X
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9xdC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgKQEAgLTMzLDEy
ICszMywxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBXZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0IDogcHVibGljIEZyYW1lTmV0d29ya2luZ0NvbnRleHQgewogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IGNyZWF0ZShXZWJLaXQ6
OldlYkZyYW1lKik7CisgICAgdmlydHVhbCBRT2JqZWN0KiBvcmlnaW5hdGluZ09iamVjdCgpIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQoV2ViS2l0OjpX
ZWJGcmFtZSopOwogICAgIHZpcnR1YWwgfldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQoKTsKIAot
ICAgIHZpcnR1YWwgUU9iamVjdCogb3JpZ2luYXRpbmdPYmplY3QoKSBjb25zdDsKICAgICB2aXJ0
dWFsIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbmV0d29ya0FjY2Vzc01hbmFnZXIoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgbWltZVNuaWZmaW5nRW5hYmxlZCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCB0aGlyZFBhcnR5Q29va2llUG9saWN5UGVybWlzc2lvbihjb25zdCBRVXJsJikgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCAz
NTczZGQ2Li40MDA3MmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgKQEAgLTYwLDYgKzYwLDEyIEBACiAKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRl
ICJBcmd1bWVudENvZGVyc1F0LmgiCisjaW5jbHVkZSAiUXROZXR3b3JrQWNjZXNzTWFuYWdlci5o
IgorI2luY2x1ZGUgIlF0TmV0d29ya1JlcGx5LmgiCisjaW5jbHVkZSAiUXROZXR3b3JrUmVwbHlE
YXRhLmgiCisjaW5jbHVkZSAiUXROZXR3b3JrUmVxdWVzdERhdGEuaCIKKyNpbmNsdWRlIDxRTmV0
d29ya1JlcGx5PgorI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oR1RLKQpAQCAtNDY4LDYgKzQ3NCwxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNvbnRl
eHRNZW51U2hvd2luZygpIHsgbV9pc1Nob3dpbmdDb250ZXh0TWVudSA9IHRydWU7IH0KIAorI2lm
IFBMQVRGT1JNKFFUKQorICAgIHZvaWQgcmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZShjb25zdCBT
dHJpbmcmIHNjaGVtZSk7CisgICAgdm9pZCBhcHBsaWNhdGlvblNjaGVtZVJlcGx5KGNvbnN0IFF0
TmV0d29ya1JlcGx5RGF0YSYpOworICAgIHZvaWQgcmVjZWl2ZWRBcHBsaWNhdGlvblNjaGVtZVJl
cXVlc3QoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiwgUXROZXR3b3JrUmVwbHkqKTsKKyNlbmRpZgog
ICAgIHZvaWQgd2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50Jik7CiAjaWYgRU5BQkxFKEdF
U1RVUkVfRVZFTlRTKQogICAgIHZvaWQgZ2VzdHVyZUV2ZW50KGNvbnN0IFdlYkdlc3R1cmVFdmVu
dCYpOwpAQCAtNzI3LDYgKzczOCw5IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oV0lOKQogICAg
IGJvb2wgbV9nZXN0dXJlUmVhY2hlZFNjcm9sbGluZ0xpbWl0OwogI2VuZGlmCisjaWYgUExBVEZP
Uk0oUVQpCisgICAgSGFzaE1hcDxTdHJpbmcsIFF0TmV0d29ya1JlcGx5Kj4gbV9hcHBsaWNhdGlv
blNjaGVtZVJlcGxpZXM7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbgppbmRleCA0NWVkN2NjLi41YTNiYjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtNjAsNiArNjAsMTEg
QEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7CiAgICAgUmVsb2FkKGJvb2wgcmVsb2FkRnJvbU9yaWdp
bikKICAgICBTdG9wTG9hZGluZygpCiAKKyNpZiBQTEFURk9STShRVCkKKyAgICBBcHBsaWNhdGlv
blNjaGVtZVJlcGx5KFdlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhIHJlcGx5KQorICAgIFJlZ2lz
dGVyQXBwbGljYXRpb25TY2hlbWUoV1RGOjpTdHJpbmcgc2NoZW1lKQorI2VuZGlmCisKICAgICBT
dG9wTG9hZGluZ0ZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpCiAgICAgCiAgICAgUmVzdG9yZVNlc3Np
b24oV2ViS2l0OjpTZXNzaW9uU3RhdGUgc3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvcXQvV2ViUGFnZVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdlUXQuY3BwCmluZGV4IDMxOGRhMjMuLjU1MDgwZDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdl
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9xdC9XZWJQYWdl
UXQuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNp
bmNsdWRlICJXZWJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgorI2luY2x1
ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgpAQCAtMzg4LDQgKzM5MCwy
OSBAQCB2b2lkIFdlYlBhZ2U6OmNhbmNlbENvbXBvc2l0aW9uKCkKICAgICAvLyBGSVhNRTogc3Rh
dGljX2Nhc3Q8V2ViRWRpdG9yQ2xpZW50Kj4odGFyZ2V0RnJhbWUtPmVkaXRvcigpLT5jbGllbnQo
KSktPnNlbmRTZWxlY3Rpb25DaGFuZ2VkTWVzc2FnZSgpOwogfQogCit2b2lkIFdlYlBhZ2U6OnJl
Z2lzdGVyQXBwbGljYXRpb25TY2hlbWUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCit7CisgICAgUXRO
ZXR3b3JrQWNjZXNzTWFuYWdlciogcW5hbSA9IHFvYmplY3RfY2FzdDxRdE5ldHdvcmtBY2Nlc3NN
YW5hZ2VyKj4oV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0FjY2Vzc01hbmFnZXIoKSk7Cisg
ICAgaWYgKCFxbmFtKQorICAgICAgICByZXR1cm47CisgICAgcW5hbS0+cmVnaXN0ZXJBcHBsaWNh
dGlvblNjaGVtZSh0aGlzLCBRU3RyaW5nKHNjaGVtZSkpOworfQorCit2b2lkIFdlYlBhZ2U6OnJl
Y2VpdmVkQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVx
dWVzdCwgUXROZXR3b3JrUmVwbHkqIHJlcGx5KQoreworICAgIFF0TmV0d29ya1JlcXVlc3REYXRh
IHJlcXVlc3REYXRhKHJlcXVlc3QsIHJlcGx5KTsKKyAgICBtX2FwcGxpY2F0aW9uU2NoZW1lUmVw
bGllcy5hZGQocmVxdWVzdERhdGEubV9yZXBseVV1aWQsIHJlcGx5KTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlJlc29sdmVBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QocmVxdWVz
dERhdGEpKTsKK30KKwordm9pZCBXZWJQYWdlOjphcHBsaWNhdGlvblNjaGVtZVJlcGx5KGNvbnN0
IFF0TmV0d29ya1JlcGx5RGF0YSYgcmVwbHlEYXRhKQoreworICAgIGlmICghbV9hcHBsaWNhdGlv
blNjaGVtZVJlcGxpZXMuY29udGFpbnMocmVwbHlEYXRhLm1fcmVwbHlVdWlkKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUXROZXR3b3JrUmVwbHkqIG5ldHdvcmtSZXBseSA9IG1fYXBwbGljYXRp
b25TY2hlbWVSZXBsaWVzLnRha2UocmVwbHlEYXRhLm1fcmVwbHlVdWlkKTsKKyAgICBuZXR3b3Jr
UmVwbHktPnNldFJlcGx5RGF0YShyZXBseURhdGEpOworICAgIG5ldHdvcmtSZXBseS0+ZmluYWxp
emUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2I5NTNmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyLmNwcApAQCAt
MCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHpl
bm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlF0TmV0d29ya0FjY2Vzc01hbmFnZXIuaCIKKworI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgor
I2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJQYWdl
LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+Cisj
aW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUXROZXR3
b3JrQWNjZXNzTWFuYWdlcjo6UXROZXR3b3JrQWNjZXNzTWFuYWdlcihXZWJQcm9jZXNzKiB3ZWJQ
cm9jZXNzKQorICAgIDogUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkKKyAgICAsIG1fd2ViUHJvY2Vz
cyh3ZWJQcm9jZXNzKQoreworfQorCitRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpRdE5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyKFFPYmplY3QqIHBhcmVudCkKKyAgICA6IFFOZXR3b3JrQWNjZXNzTWFuYWdl
cihwYXJlbnQpCisgICAgLCBtX3dlYlByb2Nlc3MoMCkKK3sKK30KKworV2ViUGFnZSogUXROZXR3
b3JrQWNjZXNzTWFuYWdlcjo6b2J0YWluT3JpZ2luYXRpbmdXZWJQYWdlKGNvbnN0IFFOZXR3b3Jr
UmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBRT2JqZWN0KiBvcmlnaW5hdGluZ09iamVjdCA9IHJl
cXVlc3Qub3JpZ2luYXRpbmdPYmplY3QoKTsKKyAgICBpZiAoIW9yaWdpbmF0aW5nT2JqZWN0KQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIFFWYXJpYW50IHBhZ2VQdHIgPSBvcmlnaW5hdGluZ09i
amVjdC0+cHJvcGVydHkoIlBhZ2VQb2ludGVyIik7CisgICAgaWYgKCFwYWdlUHRyLmlzVmFsaWQo
KSB8fCAhcGFnZVB0ci5jYW5Db252ZXJ0PHZvaWQqPigpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIFdlYlBhZ2UqIHdlYlBhZ2UgPSBzdGF0aWNfY2FzdDxXZWJQYWdlKj4ocGFnZVB0ci52YWx1
ZTx2b2lkKj4oKSk7CisgICAgUV9BU1NFUlQod2ViUGFnZSk7CisgICAgcmV0dXJuIHdlYlBhZ2U7
Cit9CisKK1FOZXR3b3JrUmVwbHkqIFF0TmV0d29ya0FjY2Vzc01hbmFnZXI6OmNyZWF0ZVJlcXVl
c3QoT3BlcmF0aW9uIG9wZXJhdGlvbiwgY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBR
SU9EZXZpY2UqIG91dERhdGEpCit7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9IG9idGFpbk9yaWdp
bmF0aW5nV2ViUGFnZShyZXF1ZXN0KTsKKyAgICBpZiAod2ViUGFnZSAmJiBtX2FwcGxpY2F0aW9u
U2NoZW1lcy5jb250YWlucyh3ZWJQYWdlLCByZXF1ZXN0LnVybCgpLnNjaGVtZSgpLnRvTG93ZXIo
KSkpIHsKKyAgICAgICAgUXROZXR3b3JrUmVwbHkqIHJlcGx5ID0gbmV3IFF0TmV0d29ya1JlcGx5
KHJlcXVlc3QsIHRoaXMpOworICAgICAgICB3ZWJQYWdlLT5yZWNlaXZlZEFwcGxpY2F0aW9uU2No
ZW1lUmVxdWVzdChyZXF1ZXN0LCByZXBseSk7CisgICAgICAgIHJldHVybiByZXBseTsKKyAgICB9
CisKKyAgICByZXR1cm4gUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpjcmVhdGVSZXF1ZXN0KG9wZXJh
dGlvbiwgcmVxdWVzdCwgb3V0RGF0YSk7Cit9CisKK3ZvaWQgUXROZXR3b3JrQWNjZXNzTWFuYWdl
cjo6cmVnaXN0ZXJBcHBsaWNhdGlvblNjaGVtZShjb25zdCBXZWJQYWdlKiBwYWdlLCBjb25zdCBR
U3RyaW5nJiBzY2hlbWUpCit7CisgICAgbV9hcHBsaWNhdGlvblNjaGVtZXMuaW5zZXJ0KHBhZ2Us
IHNjaGVtZS50b0xvd2VyKCkpOworfQorCit9CisKKyNpbmNsdWRlICJtb2NfUXROZXR3b3JrQWNj
ZXNzTWFuYWdlci5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0
L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQv
UXROZXR3b3JrQWNjZXNzTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjhkOWViMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L3F0L1F0TmV0d29ya0FjY2Vzc01hbmFnZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIFplbm8gQWxiaXNzZXIgPHplbm9Ad2Via2l0Lm9yZz4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyX2gKKyNkZWZpbmUgUXROZXR3b3JrQWNj
ZXNzTWFuYWdlcl9oCisKKyNpbmNsdWRlIDxRTXVsdGlIYXNoPgorI2luY2x1ZGUgPFFOZXR3b3Jr
QWNjZXNzTWFuYWdlcj4KKyNpbmNsdWRlIDxRU3RyaW5nPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViUGFnZTsKK2NsYXNzIFdlYlByb2Nlc3M7CisKK2NsYXNzIFF0TmV0d29ya0Fj
Y2Vzc01hbmFnZXIgOiBwdWJsaWMgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyIHsKKyAgICBRX09CSkVD
VAorcHVibGljOgorICAgIFF0TmV0d29ya0FjY2Vzc01hbmFnZXIoUU9iamVjdCogcGFyZW50KTsK
KyAgICBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKFdlYlByb2Nlc3MqKTsKKyAgICB2b2lkIHJlZ2lz
dGVyQXBwbGljYXRpb25TY2hlbWUoY29uc3QgV2ViUGFnZSosIGNvbnN0IFFTdHJpbmcmIHNjaGVt
ZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFFOZXR3b3JrUmVwbHkqIGNyZWF0ZVJlcXVl
c3QoT3BlcmF0aW9uLCBjb25zdCBRTmV0d29ya1JlcXVlc3QmLCBRSU9EZXZpY2UqIG91dGdvaW5n
RGF0YSA9IDApIE9WRVJSSURFOworICAgIHN0YXRpYyBXZWJQYWdlKiBvYnRhaW5PcmlnaW5hdGlu
Z1dlYlBhZ2UoY29uc3QgUU5ldHdvcmtSZXF1ZXN0Jik7CisKK3ByaXZhdGU6CisgICAgUU11bHRp
SGFzaDxjb25zdCBXZWJQYWdlKiwgUVN0cmluZz4gbV9hcHBsaWNhdGlvblNjaGVtZXM7CisgICAg
V2ViUHJvY2VzcyogbV93ZWJQcm9jZXNzOworCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFF0TmV0d29ya0FjY2Vzc01hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5mZDBmNWNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5jcHAKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgWmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXROZXR3b3JrUmVwbHkuaCIK
KworI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgorI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5o
IgorI2luY2x1ZGUgPFFOZXR3b3JrQ29va2llPgorI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+Cisj
aW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUXROZXR3
b3JrUmVwbHk6OlF0TmV0d29ya1JlcGx5KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxLCBRdE5l
dHdvcmtBY2Nlc3NNYW5hZ2VyKiBwYXJlbnQpCisgICAgOiBRTmV0d29ya1JlcGx5KHBhcmVudCkK
KyAgICAsIG1fYnl0ZXNBdmFpbGFibGUoMCkKKyAgICAsIG1fc2hhcmVkTWVtb3J5U2l6ZSgwKQor
eworICAgIHNldFJlcXVlc3QocmVxKTsKKyAgICBzZXRPcGVyYXRpb24oUU5ldHdvcmtBY2Nlc3NN
YW5hZ2VyOjpHZXRPcGVyYXRpb24pOworICAgIHNldFVybChyZXEudXJsKCkpOworICAgIHNldE9w
ZW5Nb2RlKFFJT0RldmljZTo6UmVhZE9ubHkpOworICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVl
c3Q6OkNvbnRlbnRUeXBlSGVhZGVyLCBRVmFyaWFudChRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KCJ0
ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTE2IikpKTsKK30KKwordm9pZCBRdE5ldHdvcmtSZXBseTo6
c2V0RGF0YShjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaGFuZGxlLCBxaW50NjQgZGF0YVNp
emUpCit7CisgICAgbV9zaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUs
IFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOworICAgIGlmICghbV9zaGFyZWRNZW1vcnkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fYnl0ZXNBdmFpbGFibGUgPSBkYXRhU2l6ZTsKKyAgICBtX3No
YXJlZE1lbW9yeVNpemUgPSBkYXRhU2l6ZTsKK30KKwordm9pZCBRdE5ldHdvcmtSZXBseTo6c2V0
UmVwbHlEYXRhKGNvbnN0IFF0TmV0d29ya1JlcGx5RGF0YSYgcmVwbHlEYXRhKQoreworICAgIGlm
IChyZXBseURhdGEubV9vcGVyYXRpb24pCisgICAgICAgIHNldE9wZXJhdGlvbihyZXBseURhdGEu
bV9vcGVyYXRpb24pOworICAgIGlmICghcmVwbHlEYXRhLm1fY29udGVudERpc3Bvc2l0aW9uLmlz
TnVsbCgpKQorICAgICAgICBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50RGlzcG9z
aXRpb25IZWFkZXIsIFFTdHJpbmcocmVwbHlEYXRhLm1fY29udGVudERpc3Bvc2l0aW9uKSk7Cisg
ICAgaWYgKCFyZXBseURhdGEubV9jb250ZW50VHlwZS5pc051bGwoKSkKKyAgICAgICAgc2V0SGVh
ZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudFR5cGVIZWFkZXIsIFFTdHJpbmcocmVwbHlEYXRh
Lm1fY29udGVudFR5cGUpKTsKKyAgICBpZiAoIXJlcGx5RGF0YS5tX2xvY2F0aW9uLmlzTnVsbCgp
KQorICAgICAgICBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpMb2NhdGlvbkhlYWRlciwgUVN0
cmluZyhyZXBseURhdGEubV9sb2NhdGlvbikpOworICAgIGlmIChyZXBseURhdGEubV9sYXN0TW9k
aWZpZWQpCisgICAgICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6Okxhc3RNb2RpZmllZEhl
YWRlciwgUURhdGVUaW1lOjpmcm9tTVNlY3NTaW5jZUVwb2NoKHJlcGx5RGF0YS5tX2xhc3RNb2Rp
ZmllZCkpOworICAgIGlmICghcmVwbHlEYXRhLm1fY29va2llLmlzTnVsbCgpKQorICAgICAgICBz
ZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpTZXRDb29raWVIZWFkZXIsIFFWYXJpYW50Ojpmcm9t
VmFsdWUoUU5ldHdvcmtDb29raWU6OnBhcnNlQ29va2llcyhRU3RyaW5nKHJlcGx5RGF0YS5tX2Nv
b2tpZSkudG9Bc2NpaSgpKSkpOworICAgIGlmICghcmVwbHlEYXRhLm1fdXNlckFnZW50LmlzTnVs
bCgpKQorICAgICAgICBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpVc2VyQWdlbnRIZWFkZXIs
IFFTdHJpbmcocmVwbHlEYXRhLm1fdXNlckFnZW50KSk7CisgICAgaWYgKCFyZXBseURhdGEubV9z
ZXJ2ZXIuaXNOdWxsKCkpCisgICAgICAgIHNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OlNlcnZl
ckhlYWRlciwgUVN0cmluZyhyZXBseURhdGEubV9zZXJ2ZXIpKTsKKyAgICBzZXRIZWFkZXIoUU5l
dHdvcmtSZXF1ZXN0OjpDb250ZW50TGVuZ3RoSGVhZGVyLCBRVmFyaWFudDo6ZnJvbVZhbHVlKHJl
cGx5RGF0YS5tX2NvbnRlbnRMZW5ndGgpKTsKKyAgICBzZXREYXRhKHJlcGx5RGF0YS5tX2RhdGFI
YW5kbGUsIHJlcGx5RGF0YS5tX2NvbnRlbnRMZW5ndGgpOworfQorCitxaW50NjQgUXROZXR3b3Jr
UmVwbHk6OnJlYWREYXRhKGNoYXIqIGRhdGEsIHFpbnQ2NCBtYXhsZW4pCit7CisgICAgcWludDY0
IGJ5dGVzUmVhZCA9IG1heGxlbiA8IG1fYnl0ZXNBdmFpbGFibGUgPyBtYXhsZW4gOiBtX2J5dGVz
QXZhaWxhYmxlOworICAgIGlmIChxTWVtQ29weShkYXRhLCBzdGF0aWNfY2FzdDxjaGFyKj4obV9z
aGFyZWRNZW1vcnktPmRhdGEoKSkgKyBtX3NoYXJlZE1lbW9yeVNpemUgLSBtX2J5dGVzQXZhaWxh
YmxlLCBieXRlc1JlYWQpKSB7CisgICAgICAgIG1fYnl0ZXNBdmFpbGFibGUgLT0gYnl0ZXNSZWFk
OworICAgICAgICByZXR1cm4gYnl0ZXNSZWFkOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwor
cWludDY0IFF0TmV0d29ya1JlcGx5OjpieXRlc0F2YWlsYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fYnl0ZXNBdmFpbGFibGUgKyBRTmV0d29ya1JlcGx5OjpieXRlc0F2YWlsYWJsZSgpOwor
fQorCit2b2lkIFF0TmV0d29ya1JlcGx5OjpzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpLbm93
bkhlYWRlcnMgaGVhZGVyLCBjb25zdCBRVmFyaWFudCAmdmFsdWUpCit7CisgICAgUU5ldHdvcmtS
ZXBseTo6c2V0SGVhZGVyKGhlYWRlciwgdmFsdWUpOworfQorCit2b2lkIFF0TmV0d29ya1JlcGx5
OjphYm9ydCgpIHsgfQordm9pZCBRdE5ldHdvcmtSZXBseTo6Y2xvc2UoKSB7IH0KK3ZvaWQgUXRO
ZXR3b3JrUmVwbHk6OnNldFJlYWRCdWZmZXJTaXplKHFpbnQ2NCBzaXplKSB7IH0KK2Jvb2wgUXRO
ZXR3b3JrUmVwbHk6OmNhblJlYWRMaW5lICgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKwordm9p
ZCBRdE5ldHdvcmtSZXBseTo6ZmluYWxpemUoKQoreworICAgIFFOZXR3b3JrUmVwbHk6OnNldEZp
bmlzaGVkKHRydWUpOworICAgIGVtaXQgcmVhZHlSZWFkKCk7CisgICAgZW1pdCBmaW5pc2hlZCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjhjZWI3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L3F0L1F0TmV0d29ya1JlcGx5LmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUXROZXR3b3JrUmVwbHlfaAorI2RlZmluZSBRdE5ldHdvcmtSZXBseV9oCisKKyNpbmNsdWRl
ICJRdE5ldHdvcmtSZXBseURhdGEuaCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNs
dWRlIDxRQnl0ZUFycmF5PgorI2luY2x1ZGUgPFFEYXRlVGltZT4KKyNpbmNsdWRlIDxRTmV0d29y
a1JlcGx5PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUXROZXR3b3JrQWNjZXNzTWFu
YWdlcjsKKworY2xhc3MgUXROZXR3b3JrUmVwbHkgOiBwdWJsaWMgUU5ldHdvcmtSZXBseSB7Citw
dWJsaWM6CisgICAgUXROZXR3b3JrUmVwbHkoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiwgUXROZXR3
b3JrQWNjZXNzTWFuYWdlciogcGFyZW50KTsKKworICAgIHZpcnR1YWwgcWludDY0IHJlYWREYXRh
KGNoYXIgKmRhdGEsIHFpbnQ2NCBtYXhsZW4pOworICAgIHZpcnR1YWwgcWludDY0IGJ5dGVzQXZh
aWxhYmxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRIZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpLbm93
bkhlYWRlcnMsIGNvbnN0IFFWYXJpYW50ICZ2YWx1ZSk7CisgICAgdm9pZCBzZXREYXRhKGNvbnN0
IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiwgcWludDY0IGRhdGFTaXplKTsKKyAgICB2b2lkIHNldFJl
cGx5RGF0YShjb25zdCBRdE5ldHdvcmtSZXBseURhdGEmKTsKKyAgICB2b2lkIGZpbmFsaXplKCk7
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xvc2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVhZEJ1ZmZlclNpemUocWludDY0KTsK
KyAgICB2aXJ0dWFsIGJvb2wgY2FuUmVhZExpbmUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBx
aW50NjQgbV9ieXRlc0F2YWlsYWJsZTsKKyAgICBRQnl0ZUFycmF5IG1fYnVmZmVyOworICAgIFJl
ZlB0cjxTaGFyZWRNZW1vcnk+IG1fc2hhcmVkTWVtb3J5OworICAgIHFpbnQ2NCBtX3NoYXJlZE1l
bW9yeVNpemU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFF0TmV0
d29ya1JlcGx5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2Vi
UHJvY2Vzc1F0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc1F0
LmNwcAppbmRleCBkOTQ5MjA2Li5hMmJlYWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9xdC9XZWJQcm9jZXNzUXQuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJJ
bmplY3RlZEJ1bmRsZS5oIgogI2luY2x1ZGUgIlF0QnVpbHRpbkJ1bmRsZS5oIgorI2luY2x1ZGUg
IlF0TmV0d29ya0FjY2Vzc01hbmFnZXIuaCIKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAKQEAgLTY3LDcgKzY4
LDcgQEAgc3RhdGljIHZvaWQgcGFyZW50UHJvY2Vzc0RpZWRDYWxsYmFjayh2b2lkKikKIAogdm9p
ZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciogYXJndW1lbnRzKQogewotICAgIG1fbmV0d29ya0FjY2Vzc01hbmFnZXIgPSBuZXcgUU5ldHdv
cmtBY2Nlc3NNYW5hZ2VyOworICAgIG1fbmV0d29ya0FjY2Vzc01hbmFnZXIgPSBuZXcgUXROZXR3
b3JrQWNjZXNzTWFuYWdlcih0aGlzKTsKICAgICBBU1NFUlQoIXBhcmFtZXRlcnMuY29va2llU3Rv
cmFnZURpcmVjdG9yeS5pc0VtcHR5KCkgJiYgIXBhcmFtZXRlcnMuY29va2llU3RvcmFnZURpcmVj
dG9yeS5pc051bGwoKSk7CiAgICAgV2ViQ29yZTo6U2hhcmVkQ29va2llSmFyUXQqIGphciA9IFdl
YkNvcmU6OlNoYXJlZENvb2tpZUphclF0OjpjcmVhdGUocGFyYW1ldGVycy5jb29raWVTdG9yYWdl
RGlyZWN0b3J5KTsKICAgICBtX25ldHdvcmtBY2Nlc3NNYW5hZ2VyLT5zZXRDb29raWVKYXIoamFy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9xdHdlYmtpdC1leHBvcnQubWFwIGIvU291cmNlL3F0d2Vi
a2l0LWV4cG9ydC5tYXAKaW5kZXggNDk1OGM4NS4uM2FmODQ5MiAxMDA2NDQKLS0tIGEvU291cmNl
L3F0d2Via2l0LWV4cG9ydC5tYXAKKysrIGIvU291cmNlL3F0d2Via2l0LWV4cG9ydC5tYXAKQEAg
LTE0OCw2ICsxNDgsMTIgQEAgcXdrXzEuMCB7CiAgICAgICAgICpRV2ViTmF2aWdhdGlvblJlcXVl
c3Q7CiAgICAgICAgIG5vbi12aXJ0dWFsP3RodW5rP3RvP1FXZWJOYXZpZ2F0aW9uUmVxdWVzdCo7
CiAgICAgICAgIFFXZWJOYXZpZ2F0aW9uUmVxdWVzdDo6KjsKKyAgICAgICAgKlFRdWlja1VybFNj
aGVtZURlbGVnYXRlOworICAgICAgICBRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZTo6KjsKKyAgICAg
ICAgKlFRdWlja05ldHdvcmtSZXF1ZXN0OworICAgICAgICBRUXVpY2tOZXR3b3JrUmVxdWVzdDo6
KjsKKyAgICAgICAgKlFRdWlja05ldHdvcmtSZXBseTsKKyAgICAgICAgUVF1aWNrTmV0d29ya1Jl
cGx5OjoqOwogCiAKICAgICAgICAgIyBXZWJLaXQgMiBDIEFQSSBtYW5nbGVkIGluIEMrKwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>