<?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>76700</bug_id>
          
          <creation_ts>2012-01-20 04:51:52 -0800</creation_ts>
          <short_desc>[Qt][WK2] Application URL schemes cause asserts when using debug.</short_desc>
          <delta_ts>2012-01-24 02:04:22 -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>WebKit Qt</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zeno Albisser">zeno</reporter>
          <assigned_to name="Zeno Albisser">zeno</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>jesus</cc>
    
    <cc>kenneth</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>539426</commentid>
    <comment_count>0</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-20 04:51:52 -0800</bug_when>
    <thetext>QtNetworkRequestData derives from RefCounted. Therefore it has to be used with RefPtr because otherwise ref() and deref() functions are not being called.
The purpose of QtNetworkRequestData and QtNetworkReplyData is to transfer network request/reply data over IPC. Therefore it must be allowed to construct / copy instances of these classes without using RefPtr.

Currently, whenever a QtNetworkRequestData object that was created on the stack runs out of scope, an ASSERT will trigger because ref()/deref() were never called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539442</commentid>
    <comment_count>1</comment_count>
      <attachid>123297</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-20 05:49:35 -0800</bug_when>
    <thetext>Created attachment 123297
patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540305</commentid>
    <comment_count>2</comment_count>
      <attachid>123297</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-22 11:50:16 -0800</bug_when>
    <thetext>Comment on attachment 123297
patch for review.

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

&gt; Source/WebKit2/ChangeLog:16
&gt; +        Instances of QtNetworkRequestData / QtNetworkReplyData are meant
&gt; +        to be used for transfering data over IPC. To allow transferring
&gt; +        instances of these classes over IPC they need to be copyable,
&gt; +        and it must be possible to create such instances on the stack.
&gt; +        Because classes that inherit from RefCounted always need to be
&gt; +        used in connection with RefPtr, QtNetworkRequestData and
&gt; +        QtNetworkReplyData cannot inherit directly from RefCounted.
&gt; +
&gt; +        Deleting an object that inherits from RefCounted, without
&gt; +        the proper sequence of ref()/deref() being called by it&apos;s
&gt; +        RefPtr, causes asserts when running a debug version.

You dont explain why we need to ref count or why we cannot do it manually if needed.

&gt; Source/WebKit2/Shared/qt/QtNetworkRequestData.h:53
&gt; +struct QtRefCountedNetworkRequestData : public WTF::RefCounted&lt;QtRefCountedNetworkRequestData&gt; {

It seems that you want to use the ref counted data on each side but transfer only the data itself. Would a name like

QtNetworkRequestDataHandle make more sense?

The name here are a bit confusing.. we could also got for QtNetworkRequestData and then have a QtNetworkRequestDataImpl, Private, Internal or similar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540461</commentid>
    <comment_count>3</comment_count>
      <attachid>123297</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-23 03:12:50 -0800</bug_when>
    <thetext>Comment on attachment 123297
patch for review.

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

&gt;&gt; Source/WebKit2/ChangeLog:16
&gt;&gt; +        RefPtr, causes asserts when running a debug version.
&gt; 
&gt; You dont explain why we need to ref count or why we cannot do it manually if needed.

The IPC transfer infrastructure / messaging mostly consists of generated code. So there is no easy way to fix the refcounting manually in there.
Further i would personally consider it pretty hackish to adjust ref counters manually. I think it would be pretty opposite to the expected behavior.

&gt;&gt; Source/WebKit2/Shared/qt/QtNetworkRequestData.h:53
&gt;&gt; +struct QtRefCountedNetworkRequestData : public WTF::RefCounted&lt;QtRefCountedNetworkRequestData&gt; {
&gt; 
&gt; It seems that you want to use the ref counted data on each side but transfer only the data itself. Would a name like
&gt; 
&gt; QtNetworkRequestDataHandle make more sense?
&gt; 
&gt; The name here are a bit confusing.. we could also got for QtNetworkRequestData and then have a QtNetworkRequestDataImpl, Private, Internal or similar

My first local implementation was actually using QtNetworkRequestData/QtNetworkReqestDataImpl, but then i decided to rename these classes to QtRefCountedNetworkRequestData/QtNetworkRequestData.
My impression is that QtNetworkRequestData is clearly describing this class of objects containing the data of a QtNetworkRequest. Appending Impl somehow sounded like a pleonasm to me. Further we would then also need to change the filenames to QtNetworkRequestDataImpl.h because the generated IPC code expects the class name of the transfered structure to match the filename.
Then again it seems to me, that the name QtRefCountedNetworkRequestData describes its purpose very well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540472</commentid>
    <comment_count>4</comment_count>
      <attachid>123297</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-01-23 04:03:58 -0800</bug_when>
    <thetext>Comment on attachment 123297
patch for review.

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

Looks good in general, but I think a few fixes need to be applied to the refptr handling. See also http://www.webkit.org/coding/RefPtr.html. Setters that take ownership should take a PassRefPtr. Similarly for getters unless ownership is transferred the return type should be a raw pointer.

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkrequest_p.h:38
&gt; +    void setNetworkRequestData(WTF::RefPtr&lt;WebKit::QtRefCountedNetworkRequestData&gt; data);

Shouldn&apos;t this be a PassRefPtr?

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkrequest_p.h:39
&gt; +    WTF::RefPtr&lt;WebKit::QtRefCountedNetworkRequestData&gt; networkRequestData() const;

I believe this should return a raw pointer, as ownership is not transferred.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540499</commentid>
    <comment_count>5</comment_count>
      <attachid>123297</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-23 05:40:11 -0800</bug_when>
    <thetext>Comment on attachment 123297
patch for review.

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

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkrequest_p.h:38
&gt;&gt; +    void setNetworkRequestData(WTF::RefPtr&lt;WebKit::QtRefCountedNetworkRequestData&gt; data);
&gt; 
&gt; Shouldn&apos;t this be a PassRefPtr?

Yes. - fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkrequest_p.h:39
&gt;&gt; +    WTF::RefPtr&lt;WebKit::QtRefCountedNetworkRequestData&gt; networkRequestData() const;
&gt; 
&gt; I believe this should return a raw pointer, as ownership is not transferred.

I just figured out, i can actually remove this function. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540500</commentid>
    <comment_count>6</comment_count>
      <attachid>123545</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-23 05:42:16 -0800</bug_when>
    <thetext>Created attachment 123545
patch for review. - updated as commented previously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540750</commentid>
    <comment_count>7</comment_count>
      <attachid>123545</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-01-23 12:45:58 -0800</bug_when>
    <thetext>Comment on attachment 123545
patch for review. - updated as commented previously.

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

Sorry, not all RefPtrs are used correctly yet :)

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:125
&gt; +    uint64_t stringLength = m_dataLength / sizeof(UChar);
&gt; +    return QString(reinterpret_cast&lt;const QChar*&gt;(m_sharedMemory-&gt;data()), stringLength);

I see a wild mix of UChar and QChar here, assuming that they are of the same size. While that is indeed given, I think the code would be cleaner if it was using one type only.

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:137
&gt;      const UChar* ucharData = reinterpret_cast&lt;const UChar*&gt;(data.constData());
&gt;      uint64_t smLength = sizeof(UChar) * data.length();

Why bother with UChar at all? If the goal is to serialize the string, then why not simply copy the QChar data straight into it and also use sizeof(QChar)?

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply_p.h:63
&gt; +    WTF::RefPtr&lt;WebKit::QtRefCountedNetworkRequestData&gt; networkRequestData() const;
&gt; +    void setNetworkRequestData(WTF::RefPtr&lt;WebKit::QtRefCountedNetworkRequestData&gt; data);
&gt; +    WTF::RefPtr&lt;WebKit::QtRefCountedNetworkReplyData&gt; networkReplyData() const;

See my earlier comment, these functions should follow the refptr guidelines.

&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkrequest_p.h:33
&gt;      Q_PROPERTY(QString url READ url)

Any particular reason the url is a string instead of a QUrl?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540942</commentid>
    <comment_count>8</comment_count>
      <attachid>123545</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-23 16:22:36 -0800</bug_when>
    <thetext>Comment on attachment 123545
patch for review. - updated as commented previously.

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

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:125
&gt;&gt; +    return QString(reinterpret_cast&lt;const QChar*&gt;(m_sharedMemory-&gt;data()), stringLength);
&gt; 
&gt; I see a wild mix of UChar and QChar here, assuming that they are of the same size. While that is indeed given, I think the code would be cleaner if it was using one type only.

fixed.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp:137
&gt;&gt;      uint64_t smLength = sizeof(UChar) * data.length();
&gt; 
&gt; Why bother with UChar at all? If the goal is to serialize the string, then why not simply copy the QChar data straight into it and also use sizeof(QChar)?

replaced all UChar with QChar, simplified copying.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkreply_p.h:63
&gt;&gt; +    WTF::RefPtr&lt;WebKit::QtRefCountedNetworkReplyData&gt; networkReplyData() const;
&gt; 
&gt; See my earlier comment, these functions should follow the refptr guidelines.

fixed. - returning raw pointers, using PassRefPtr for setter.

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquicknetworkrequest_p.h:33
&gt;&gt;      Q_PROPERTY(QString url READ url)
&gt; 
&gt; Any particular reason the url is a string instead of a QUrl?

changed this to use QUrl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540945</commentid>
    <comment_count>9</comment_count>
      <attachid>123650</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-23 16:24:47 -0800</bug_when>
    <thetext>Created attachment 123650
patch for review. - updated according to previous comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541189</commentid>
    <comment_count>10</comment_count>
      <attachid>123650</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-24 02:04:12 -0800</bug_when>
    <thetext>Comment on attachment 123650
patch for review. - updated according to previous comments.

Clearing flags on attachment: 123650

Committed r105711: &lt;http://trac.webkit.org/changeset/105711&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541190</commentid>
    <comment_count>11</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-01-24 02:04:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123297</attachid>
            <date>2012-01-20 05:49:35 -0800</date>
            <delta_ts>2012-01-23 05:42:16 -0800</delta_ts>
            <desc>patch for review.</desc>
            <filename>76700_20120120-144405.patch</filename>
            <type>text/plain</type>
            <size>26363</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBhNjFlYmI2Li5mODM3MzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzQg
QEAKKzIwMTItMDEtMjAgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW1F0XVtXSzJdIEFwcGxpY2F0aW9uIFVSTCBzY2hlbWVzIGNhdXNlIGFzc2VydHMgd2hlbiB1
c2luZyBkZWJ1Zy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc2NzAwCisKKyAgICAgICAgSW5zdGFuY2VzIG9mIFF0TmV0d29ya1JlcXVlc3REYXRhIC8g
UXROZXR3b3JrUmVwbHlEYXRhIGFyZSBtZWFudAorICAgICAgICB0byBiZSB1c2VkIGZvciB0cmFu
c2ZlcmluZyBkYXRhIG92ZXIgSVBDLiBUbyBhbGxvdyB0cmFuc2ZlcnJpbmcKKyAgICAgICAgaW5z
dGFuY2VzIG9mIHRoZXNlIGNsYXNzZXMgb3ZlciBJUEMgdGhleSBuZWVkIHRvIGJlIGNvcHlhYmxl
LAorICAgICAgICBhbmQgaXQgbXVzdCBiZSBwb3NzaWJsZSB0byBjcmVhdGUgc3VjaCBpbnN0YW5j
ZXMgb24gdGhlIHN0YWNrLgorICAgICAgICBCZWNhdXNlIGNsYXNzZXMgdGhhdCBpbmhlcml0IGZy
b20gUmVmQ291bnRlZCBhbHdheXMgbmVlZCB0byBiZQorICAgICAgICB1c2VkIGluIGNvbm5lY3Rp
b24gd2l0aCBSZWZQdHIsIFF0TmV0d29ya1JlcXVlc3REYXRhIGFuZAorICAgICAgICBRdE5ldHdv
cmtSZXBseURhdGEgY2Fubm90IGluaGVyaXQgZGlyZWN0bHkgZnJvbSBSZWZDb3VudGVkLgorCisg
ICAgICAgIERlbGV0aW5nIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gUmVmQ291bnRlZCwg
d2l0aG91dAorICAgICAgICB0aGUgcHJvcGVyIHNlcXVlbmNlIG9mIHJlZigpL2RlcmVmKCkgYmVp
bmcgY2FsbGVkIGJ5IGl0J3MKKyAgICAgICAgUmVmUHRyLCBjYXVzZXMgYXNzZXJ0cyB3aGVuIHJ1
bm5pbmcgYSBkZWJ1ZyB2ZXJzaW9uLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5oOgorICAgICAg
ICAoV2ViS2l0OjpRdFJlZkNvdW50ZWROZXR3b3JrUmVwbHlEYXRhOjpkYXRhKToKKyAgICAgICAg
KiBTaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpR
dFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE6OlF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0
RGF0YSk6CisgICAgICAgICogU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRhLmg6CisgICAg
ICAgIChXZWJLaXQ6OlF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YTo6ZGF0YSk6CisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdv
cmtyZXBseS5jcHA6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OlFRdWlja05ldHdvcmtS
ZXBseSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OmNvbnRlbnRUeXBlKToKKyAgICAg
ICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29udGVudFR5cGUpOgorICAgICAgICAoUVF1aWNr
TmV0d29ya1JlcGx5OjpvcGVyYXRpb24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5Ojpz
ZXRPcGVyYXRpb24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5Ojpjb250ZW50RGlzcG9z
aXRpb24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb250ZW50RGlzcG9zaXRp
b24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5Ojpsb2NhdGlvbik6CisgICAgICAgIChR
UXVpY2tOZXR3b3JrUmVwbHk6OnNldExvY2F0aW9uKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtS
ZXBseTo6bGFzdE1vZGlmaWVkKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0TGFz
dE1vZGlmaWVkKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6Y29va2llKToKKyAgICAg
ICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29va2llKToKKyAgICAgICAgKFFRdWlja05ldHdv
cmtSZXBseTo6dXNlckFnZW50KToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0VXNl
ckFnZW50KToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2VydmVyKToKKyAgICAgICAg
KFFRdWlja05ldHdvcmtSZXBseTo6c2V0U2VydmVyKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtS
ZXBseTo6ZGF0YSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldERhdGEpOgorICAg
ICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZW5kKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtS
ZXBseTo6bmV0d29ya1JlcXVlc3REYXRhKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6
c2V0TmV0d29ya1JlcXVlc3REYXRhKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6bmV0
d29ya1JlcGx5RGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3Jr
cmVwbHlfcC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcXVl
c3QuY3BwOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcXVlc3Q6OlFRdWlja05ldHdvcmtSZXF1
ZXN0KToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXF1ZXN0OjpzZXROZXR3b3JrUmVxdWVzdERh
dGEpOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcXVlc3Q6Om5ldHdvcmtSZXF1ZXN0RGF0YSk6
CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVxdWVzdDo6dXJsKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1l
bnRhbDo6aW52b2tlQXBwbGljYXRpb25TY2hlbWVIYW5kbGVyKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFF0UGFnZUNsaWVudDo6aGFuZGxlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0
L1dlYlBhZ2VQcm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXNv
bHZlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9x
dC9RdE5ldHdvcmtSZXBseS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5Ojpz
ZXREYXRhKToKKyAgICAgICAgKFdlYktpdDo6UXROZXR3b3JrUmVwbHk6OnJlYWREYXRhKToKKwog
MjAxMi0wMS0yMCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwNTQ5Ny4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEuaCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEuaAppbmRleCBkNzRiNDIyLi5jMzlhNDhm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRh
LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5oCkBA
IC0zOSw5ICszOSw3IEBAIGNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLXN0cnVjdCBRdE5ldHdvcmtSZXBseURhdGEgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVk
PFF0TmV0d29ya1JlcGx5RGF0YT4gewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFF0TmV0d29y
a1JlcGx5RGF0YSk7Ci1wdWJsaWM6CitzdHJ1Y3QgUXROZXR3b3JrUmVwbHlEYXRhIHsKICAgICBR
dE5ldHdvcmtSZXBseURhdGEoKTsKIAogICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50
RW5jb2RlciopIGNvbnN0OwpAQCAtNjMsNiArNjEsMTMgQEAgcHVibGljOgogICAgIFNoYXJlZE1l
bW9yeTo6SGFuZGxlIG1fZGF0YUhhbmRsZTsKIH07CiAKK3N0cnVjdCBRdFJlZkNvdW50ZWROZXR3
b3JrUmVwbHlEYXRhIDogcHVibGljIFdURjo6UmVmQ291bnRlZDxRdFJlZkNvdW50ZWROZXR3b3Jr
UmVwbHlEYXRhPiB7CisgICAgUXROZXR3b3JrUmVwbHlEYXRhJiBkYXRhKCkgeyByZXR1cm4gbV9k
YXRhOyB9Citwcml2YXRlOgorICAgIFF0TmV0d29ya1JlcGx5RGF0YSBtX2RhdGE7Cit9OworCisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gUXROZXR3b3JrUmVwbHlEYXRhX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9RdE5ldHdvcmtSZXF1ZXN0RGF0
YS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuY3Bw
CmluZGV4IGM2ZWE2ZTMuLmYyMTA2NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9xdC9RdE5ldHdvcmtSZXF1ZXN0RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L3F0L1F0TmV0d29ya1JlcXVlc3REYXRhLmNwcApAQCAtMzYsNiArMzYsMTAgQEAKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKK1F0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YTo6UXRSZWZDb3Vu
dGVkTmV0d29ya1JlcXVlc3REYXRhKGNvbnN0IFF0TmV0d29ya1JlcXVlc3REYXRhJiBkYXRhKQor
ICAgIDogbV9kYXRhKGRhdGEpCit7IH0KKwogUXROZXR3b3JrUmVxdWVzdERhdGE6OlF0TmV0d29y
a1JlcXVlc3REYXRhKCkKIHsgfQogCkBAIC00NiwxNCArNTAsNiBAQCBRdE5ldHdvcmtSZXF1ZXN0
RGF0YTo6UXROZXR3b3JrUmVxdWVzdERhdGEoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0
LCBRTmV0dwogICAgIG1fcmVwbHlVdWlkID0gUVV1aWQ6OmNyZWF0ZVV1aWQoKS50b1N0cmluZygp
OwogfQogCi1RdE5ldHdvcmtSZXF1ZXN0RGF0YTo6UXROZXR3b3JrUmVxdWVzdERhdGEoY29uc3Qg
UXROZXR3b3JrUmVxdWVzdERhdGEmIG9yaWdpbikKLSAgICA6IFJlZkNvdW50ZWQ8UXROZXR3b3Jr
UmVxdWVzdERhdGE+KCksCi0gICAgbV9zY2hlbWUob3JpZ2luLm1fc2NoZW1lKSwKLSAgICBtX3Vy
bFN0cmluZyhvcmlnaW4ubV91cmxTdHJpbmcpLAotICAgIG1fcmVwbHlVdWlkKG9yaWdpbi5tX3Jl
cGx5VXVpZCkKLXsKLX0KLQogdm9pZCBRdE5ldHdvcmtSZXF1ZXN0RGF0YTo6ZW5jb2RlKENvcmVJ
UEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyLT5lbmNv
ZGUobV9zY2hlbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0
d29ya1JlcXVlc3REYXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVx
dWVzdERhdGEuaAppbmRleCAxNTY3OTY0Li4wODJkNDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuaApAQCAtMzksMTEgKzM5LDkgQEAgY2xh
c3MgUU5ldHdvcmtSZXBseTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0cnVjdCBRdE5ldHdv
cmtSZXF1ZXN0RGF0YSA6IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWQ8UXROZXR3b3JrUmVxdWVzdERh
dGE+IHsKK3N0cnVjdCBRdE5ldHdvcmtSZXF1ZXN0RGF0YSB7CiAgICAgUXROZXR3b3JrUmVxdWVz
dERhdGEoKTsKICAgICBRdE5ldHdvcmtSZXF1ZXN0RGF0YShjb25zdCBRTmV0d29ya1JlcXVlc3Qm
LCBRTmV0d29ya1JlcGx5Kik7Ci0gICAgUXROZXR3b3JrUmVxdWVzdERhdGEoY29uc3QgUXROZXR3
b3JrUmVxdWVzdERhdGEmKTsKLQogICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5j
b2RlciopIGNvbnN0OwogICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqLCBRdE5ldHdvcmtSZXF1ZXN0RGF0YSYpOwogCkBAIC01Miw2ICs1MCwxMyBAQCBzdHJ1
Y3QgUXROZXR3b3JrUmVxdWVzdERhdGEgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkPFF0TmV0d29y
a1JlcXVlc3REYXRhPiB7CiAgICAgU3RyaW5nIG1fcmVwbHlVdWlkOwogfTsKIAorc3RydWN0IFF0
UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YSA6IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWQ8UXRS
ZWZDb3VudGVkTmV0d29ya1JlcXVlc3REYXRhPiB7CisgICAgUXRSZWZDb3VudGVkTmV0d29ya1Jl
cXVlc3REYXRhKGNvbnN0IFF0TmV0d29ya1JlcXVlc3REYXRhJik7CisgICAgUXROZXR3b3JrUmVx
dWVzdERhdGEmIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KK3ByaXZhdGU6CisgICAgUXROZXR3
b3JrUmVxdWVzdERhdGEgbV9kYXRhOworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZiAvLyBRdE5ldHdvcmtSZXF1ZXN0RGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCA1ZWUyNzk3Li42
NzA0Y2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTUwNyw2ICs1MDcsNyBAQCBTT1VSQ0VTICs9IFwKICAg
ICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrbmV0d29ya3JlcGx5LmNwcCBcCisgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3Jr
cmVxdWVzdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdh
dGUuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJwcmVmZXJlbmNlcy5jcHAgXAogICAg
IFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnZpZXdwb3J0aW5mby5jcHAgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHkuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHkuY3BwCmluZGV4
IDRlODgxMDMuLjM3MjhlZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHAKQEAgLTMwLDEyOCArMzAsMTI3IEBAIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIFFRdWlja05ldHdvcmtSZXBseTo6UVF1aWNrTmV0d29y
a1JlcGx5KFFPYmplY3QqIHBhcmVudCkKICAgICA6IFFPYmplY3QocGFyZW50KQotICAgICwgbV9u
ZXR3b3JrUmVwbHlEYXRhKGFkb3B0UmVmKG5ldyBXZWJLaXQ6OlF0TmV0d29ya1JlcGx5RGF0YSkp
CisgICAgLCBtX25ldHdvcmtSZXBseURhdGEoYWRvcHRSZWYobmV3IFdlYktpdDo6UXRSZWZDb3Vu
dGVkTmV0d29ya1JlcGx5RGF0YSkpCisgICAgLCBtX2RhdGFMZW5ndGgoMCkKIHsKICAgICBRX0FT
U0VSVChwYXJlbnQpOwogfQogCiBRU3RyaW5nIFFRdWlja05ldHdvcmtSZXBseTo6Y29udGVudFR5
cGUoKSBjb25zdAogewotICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPm1fY29udGVudFR5
cGU7CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1fY29udGVudFR5cGU7
CiB9CiAKIHZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb250ZW50VHlwZShjb25zdCBRU3Ry
aW5nJiBjb250ZW50VHlwZSkKIHsKLSAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fY29udGVudFR5
cGUgPSBjb250ZW50VHlwZTsKKyAgICBtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX2NvbnRl
bnRUeXBlID0gY29udGVudFR5cGU7CiB9CiAKIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0
aW9uIFFRdWlja05ldHdvcmtSZXBseTo6b3BlcmF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9uZXR3b3JrUmVwbHlEYXRhLT5tX29wZXJhdGlvbjsKKyAgICByZXR1cm4gbV9uZXR3b3JrUmVw
bHlEYXRhLT5kYXRhKCkubV9vcGVyYXRpb247CiB9CiAKIHZvaWQgUVF1aWNrTmV0d29ya1JlcGx5
OjpzZXRPcGVyYXRpb24oUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gb3BlcmF0aW9u
KQogewotICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9vcGVyYXRpb24gPSBvcGVyYXRpb247Cisg
ICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV9vcGVyYXRpb24gPSBvcGVyYXRpb247CiB9
CiAKIFFTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5Ojpjb250ZW50RGlzcG9zaXRpb24oKSBjb25z
dAogewotICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPm1fY29udGVudERpc3Bvc2l0aW9u
OworICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX2NvbnRlbnREaXNwb3Np
dGlvbjsKIH0KIAogdm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldENvbnRlbnREaXNwb3NpdGlv
bihjb25zdCBRU3RyaW5nJiBkaXNwb3NpdGlvbikKIHsKLSAgICBtX25ldHdvcmtSZXBseURhdGEt
Pm1fY29udGVudERpc3Bvc2l0aW9uID0gZGlzcG9zaXRpb247CisgICAgbV9uZXR3b3JrUmVwbHlE
YXRhLT5kYXRhKCkubV9jb250ZW50RGlzcG9zaXRpb24gPSBkaXNwb3NpdGlvbjsKIH0KIAogUVN0
cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6OmxvY2F0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9uZXR3b3JrUmVwbHlEYXRhLT5tX2xvY2F0aW9uOworICAgIHJldHVybiBtX25ldHdvcmtSZXBs
eURhdGEtPmRhdGEoKS5tX2xvY2F0aW9uOwogfQogCiB2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6
c2V0TG9jYXRpb24oY29uc3QgUVN0cmluZyYgbG9jYXRpb24pCiB7Ci0gICAgbV9uZXR3b3JrUmVw
bHlEYXRhLT5tX2xvY2F0aW9uID0gbG9jYXRpb247CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5k
YXRhKCkubV9sb2NhdGlvbiA9IGxvY2F0aW9uOwogfQogCiBRU3RyaW5nIFFRdWlja05ldHdvcmtS
ZXBseTo6bGFzdE1vZGlmaWVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gUURhdGVUaW1lOjpmcm9t
TVNlY3NTaW5jZUVwb2NoKG1fbmV0d29ya1JlcGx5RGF0YS0+bV9sYXN0TW9kaWZpZWQpLnRvU3Ry
aW5nKFF0OjpJU09EYXRlKTsKKyAgICByZXR1cm4gUURhdGVUaW1lOjpmcm9tTVNlY3NTaW5jZUVw
b2NoKG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1fbGFzdE1vZGlmaWVkKS50b1N0cmluZyhR
dDo6SVNPRGF0ZSk7CiB9CiAKIHZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRMYXN0TW9kaWZp
ZWQoY29uc3QgUVN0cmluZyYgbGFzdE1vZGlmaWVkKQogewotICAgIG1fbmV0d29ya1JlcGx5RGF0
YS0+bV9sYXN0TW9kaWZpZWQgPSBRRGF0ZVRpbWU6OmZyb21TdHJpbmcobGFzdE1vZGlmaWVkLCBR
dDo6SVNPRGF0ZSkudG9NU2Vjc1NpbmNlRXBvY2goKTsKKyAgICBtX25ldHdvcmtSZXBseURhdGEt
PmRhdGEoKS5tX2xhc3RNb2RpZmllZCA9IFFEYXRlVGltZTo6ZnJvbVN0cmluZyhsYXN0TW9kaWZp
ZWQsIFF0OjpJU09EYXRlKS50b01TZWNzU2luY2VFcG9jaCgpOwogfQogCiBRU3RyaW5nIFFRdWlj
a05ldHdvcmtSZXBseTo6Y29va2llKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9uZXR3b3JrUmVw
bHlEYXRhLT5tX2Nvb2tpZTsKKyAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCku
bV9jb29raWU7CiB9CiAKIHZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb29raWUoY29uc3Qg
UVN0cmluZyYgY29va2llKQogewotICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9jb29raWUgPSBj
b29raWU7CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV9jb29raWUgPSBjb29raWU7
CiB9CiAKIFFTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5Ojp1c2VyQWdlbnQoKSBjb25zdAogewot
ICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPm1fdXNlckFnZW50OworICAgIHJldHVybiBt
X25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX3VzZXJBZ2VudDsKIH0KIAogdm9pZCBRUXVpY2tO
ZXR3b3JrUmVwbHk6OnNldFVzZXJBZ2VudChjb25zdCBRU3RyaW5nJiB1c2VyQWdlbnQpCiB7Ci0g
ICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5tX3VzZXJBZ2VudCA9IHVzZXJBZ2VudDsKKyAgICBtX25l
dHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX3VzZXJBZ2VudCA9IHVzZXJBZ2VudDsKIH0KIAogUVN0
cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6OnNlcnZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
bmV0d29ya1JlcGx5RGF0YS0+bV9zZXJ2ZXI7CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0
YS0+ZGF0YSgpLm1fc2VydmVyOwogfQogCiB2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0U2Vy
dmVyKGNvbnN0IFFTdHJpbmcmIHNlcnZlcikKIHsKLSAgICBtX25ldHdvcmtSZXBseURhdGEtPm1f
c2VydmVyID0gc2VydmVyOworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1fc2VydmVy
ID0gc2VydmVyOwogfQogCiBRU3RyaW5nIFFRdWlja05ldHdvcmtSZXBseTo6ZGF0YSgpIGNvbnN0
CiB7Ci0gICAgaWYgKG1fbmV0d29ya1JlcGx5RGF0YS0+bV9kYXRhSGFuZGxlLmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4gUVN0cmluZygpOwotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNtID0g
U2hhcmVkTWVtb3J5OjpjcmVhdGUobV9uZXR3b3JrUmVwbHlEYXRhLT5tX2RhdGFIYW5kbGUsIFNo
YXJlZE1lbW9yeTo6UmVhZE9ubHkpOwotICAgIGlmICghc20pCisgICAgaWYgKCFtX3NoYXJlZE1l
bW9yeSkKICAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKIAotICAgIHVpbnQ2NF90IHN0cmluZ0xl
bmd0aCA9IG1fbmV0d29ya1JlcGx5RGF0YS0+bV9jb250ZW50TGVuZ3RoIC8gc2l6ZW9mKFVDaGFy
KTsKLSAgICByZXR1cm4gUVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4oc20t
PmRhdGEoKSksIHN0cmluZ0xlbmd0aCk7CisgICAgdWludDY0X3Qgc3RyaW5nTGVuZ3RoID0gbV9k
YXRhTGVuZ3RoIC8gc2l6ZW9mKFVDaGFyKTsKKyAgICByZXR1cm4gUVN0cmluZyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IFFDaGFyKj4obV9zaGFyZWRNZW1vcnktPmRhdGEoKSksIHN0cmluZ0xlbmd0
aCk7CiB9CiAKIHZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXREYXRhKGNvbnN0IFFTdHJpbmcm
IGRhdGEpCiB7Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHNldmVyYWwgdGlt
ZXMuIEluIHRoaXMgY2FzZSB0aGUgcHJldmlvdXMgU2hhcmVkTWVtb3J5IGhhbmRsZXMKLSAgICAv
LyB3aWxsIGJlIG92ZXJ3cml0dGVuIGFuZCB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgU2hhcmVk
TWVtb3J5IHdpbGwgZGllIHdpdGggdGhlIGxhc3QgaGFuZGxlLgotICAgIG1fbmV0d29ya1JlcGx5
RGF0YS0+bV9jb250ZW50TGVuZ3RoID0gMDsKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBj
YWxsZWQgc2V2ZXJhbCB0aW1lcy4gSW4gdGhpcyBjYXNlIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRl
ZCBTaGFyZWRNZW1vcnkKKyAgICAvLyB3aWxsIGJlIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHkgYW5k
IG5ldyBtZW1vcnkgd2lsbCBiZSBhbGxvY2F0ZWQuCisgICAgbV9kYXRhTGVuZ3RoID0gMDsKIAog
ICAgIGlmIChkYXRhLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAgICAgY29uc3QgVUNoYXIq
IHVjaGFyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihkYXRhLmNvbnN0RGF0
YSgpKTsKICAgICB1aW50NjRfdCBzbUxlbmd0aCA9IHNpemVvZihVQ2hhcikgKiBkYXRhLmxlbmd0
aCgpOwogCi0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc20gPSBTaGFyZWRNZW1vcnk6OmNyZWF0
ZShzbUxlbmd0aCk7Ci0gICAgaWYgKCFzbSkKKyAgICBtX3NoYXJlZE1lbW9yeSA9IFNoYXJlZE1l
bW9yeTo6Y3JlYXRlKHNtTGVuZ3RoKTsKKyAgICBpZiAoIW1fc2hhcmVkTWVtb3J5KQogICAgICAg
ICByZXR1cm47CiAgICAgLy8gVGhlIHNpemUgb2YgdGhlIGFsbG9jYXRlZCBzaGFyZWQgbWVtb3J5
IGNhbiBiZSBiaWdnZXIgdGhhbiByZXF1ZXN0ZWQuCiAgICAgLy8gVXN1YWxseSB0aGUgc2l6ZSB3
aWxsIGJlIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgYSBwYWdlIHNpemUuCi0g
ICAgbWVtY3B5KHNtLT5kYXRhKCksIHVjaGFyRGF0YSwgc21MZW5ndGgpOwotCi0gICAgaWYgKCFz
bS0+Y3JlYXRlSGFuZGxlKG1fbmV0d29ya1JlcGx5RGF0YS0+bV9kYXRhSGFuZGxlLCBTaGFyZWRN
ZW1vcnk6OlJlYWRPbmx5KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fbmV0d29ya1JlcGx5RGF0
YS0+bV9jb250ZW50TGVuZ3RoID0gc21MZW5ndGg7CisgICAgbWVtY3B5KG1fc2hhcmVkTWVtb3J5
LT5kYXRhKCksIHVjaGFyRGF0YSwgc21MZW5ndGgpOworICAgIG1fZGF0YUxlbmd0aCA9IHNtTGVu
Z3RoOwogfQogCiB2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2VuZCgpCiB7CisgICAgaWYgKCFt
X3NoYXJlZE1lbW9yeSB8fCAhbV9zaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRsZShtX25ldHdvcmtS
ZXBseURhdGEtPmRhdGEoKS5tX2RhdGFIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpKQor
ICAgICAgICByZXR1cm47CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV9jb250ZW50
TGVuZ3RoID0gbV9kYXRhTGVuZ3RoOworCiAgICAgUU9iamVjdCogc2NoZW1lUGFyZW50ID0gcGFy
ZW50KCktPnBhcmVudCgpOwogICAgIGlmICghc2NoZW1lUGFyZW50KQogICAgICAgICByZXR1cm47
CkBAIC0xNTksMjAgKzE1OCwyNCBAQCB2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2VuZCgpCiAg
ICAgaWYgKCF3ZWJWaWV3RXhwZXJpbWVudGFsKQogICAgICAgICByZXR1cm47CiAgICAgd2ViVmll
d0V4cGVyaW1lbnRhbC0+c2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkodGhpcyk7CisKKyAgICAv
LyBBZnRlciBzZW5kaW5nIHRoZSByZXBseSBkYXRhLCB3ZSBoYXZlIHRvIHJlaW5pdGlhbGl6ZSB0
aGUgbV9uZXR3b3JrUmVwbHlEYXRhLAorICAgIC8vIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgZnJl
c2ggU2hhcmVzTWVtb3J5OjpIYW5kbGUuCisgICAgbV9uZXR3b3JrUmVwbHlEYXRhID0gYWRvcHRS
ZWYobmV3IFdlYktpdDo6UXRSZWZDb3VudGVkTmV0d29ya1JlcGx5RGF0YSk7CiB9CiAKLVdURjo6
UmVmUHRyPFdlYktpdDo6UXROZXR3b3JrUmVxdWVzdERhdGE+IFFRdWlja05ldHdvcmtSZXBseTo6
bmV0d29ya1JlcXVlc3REYXRhKCkgY29uc3QKK1dURjo6UmVmUHRyPFdlYktpdDo6UXRSZWZDb3Vu
dGVkTmV0d29ya1JlcXVlc3REYXRhPiBRUXVpY2tOZXR3b3JrUmVwbHk6Om5ldHdvcmtSZXF1ZXN0
RGF0YSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbmV0d29ya1JlcXVlc3REYXRhOwogfQogCi12
b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0TmV0d29ya1JlcXVlc3REYXRhKFdURjo6UmVmUHRy
PFdlYktpdDo6UXROZXR3b3JrUmVxdWVzdERhdGE+IGRhdGEpCit2b2lkIFFRdWlja05ldHdvcmtS
ZXBseTo6c2V0TmV0d29ya1JlcXVlc3REYXRhKFdURjo6UmVmUHRyPFdlYktpdDo6UXRSZWZDb3Vu
dGVkTmV0d29ya1JlcXVlc3REYXRhPiBkYXRhKQogewogICAgIG1fbmV0d29ya1JlcXVlc3REYXRh
ID0gZGF0YTsKLSAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fcmVwbHlVdWlkID0gZGF0YS0+bV9y
ZXBseVV1aWQ7CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV9yZXBseVV1aWQgPSBk
YXRhLT5kYXRhKCkubV9yZXBseVV1aWQ7CiB9CiAKLVdURjo6UmVmUHRyPFdlYktpdDo6UXROZXR3
b3JrUmVwbHlEYXRhPiBRUXVpY2tOZXR3b3JrUmVwbHk6Om5ldHdvcmtSZXBseURhdGEoKSBjb25z
dAorV1RGOjpSZWZQdHI8V2ViS2l0OjpRdFJlZkNvdW50ZWROZXR3b3JrUmVwbHlEYXRhPiBRUXVp
Y2tOZXR3b3JrUmVwbHk6Om5ldHdvcmtSZXBseURhdGEoKSBjb25zdAogewogICAgIHJldHVybiBt
X25ldHdvcmtSZXBseURhdGE7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseV9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseV9wLmgKaW5kZXggZmZlNDVmMy4uODEzNzEyYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3Jr
cmVwbHlfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0
d29ya3JlcGx5X3AuaApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiUXROZXR3b3JrUmVw
bHlEYXRhLmgiCiAjaW5jbHVkZSAiUXROZXR3b3JrUmVxdWVzdERhdGEuaCIKKyNpbmNsdWRlICJT
aGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCiAjaW5jbHVkZSA8UU5l
dHdvcmtBY2Nlc3NNYW5hZ2VyPgogI2luY2x1ZGUgPFFPYmplY3Q+CkBAIC01NywxNiArNTgsMTgg
QEAgcHVibGljOgogICAgIFFTdHJpbmcgZGF0YSgpIGNvbnN0OwogICAgIHZvaWQgc2V0RGF0YShj
b25zdCBRU3RyaW5nJiBkYXRhKTsKIAotICAgIFdURjo6UmVmUHRyPFdlYktpdDo6UXROZXR3b3Jr
UmVxdWVzdERhdGE+IG5ldHdvcmtSZXF1ZXN0RGF0YSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TmV0
d29ya1JlcXVlc3REYXRhKFdURjo6UmVmUHRyPFdlYktpdDo6UXROZXR3b3JrUmVxdWVzdERhdGE+
IGRhdGEpOwotICAgIFdURjo6UmVmUHRyPFdlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhPiBuZXR3
b3JrUmVwbHlEYXRhKCkgY29uc3Q7CisgICAgV1RGOjpSZWZQdHI8V2ViS2l0OjpRdFJlZkNvdW50
ZWROZXR3b3JrUmVxdWVzdERhdGE+IG5ldHdvcmtSZXF1ZXN0RGF0YSgpIGNvbnN0OworICAgIHZv
aWQgc2V0TmV0d29ya1JlcXVlc3REYXRhKFdURjo6UmVmUHRyPFdlYktpdDo6UXRSZWZDb3VudGVk
TmV0d29ya1JlcXVlc3REYXRhPiBkYXRhKTsKKyAgICBXVEY6OlJlZlB0cjxXZWJLaXQ6OlF0UmVm
Q291bnRlZE5ldHdvcmtSZXBseURhdGE+IG5ldHdvcmtSZXBseURhdGEoKSBjb25zdDsKIAogcHVi
bGljIFFfU0xPVFM6CiAgICAgdm9pZCBzZW5kKCk7CiAKIHByaXZhdGU6Ci0gICAgV1RGOjpSZWZQ
dHI8V2ViS2l0OjpRdE5ldHdvcmtSZXF1ZXN0RGF0YT4gbV9uZXR3b3JrUmVxdWVzdERhdGE7Ci0g
ICAgV1RGOjpSZWZQdHI8V2ViS2l0OjpRdE5ldHdvcmtSZXBseURhdGE+IG1fbmV0d29ya1JlcGx5
RGF0YTsKKyAgICBXVEY6OlJlZlB0cjxXZWJLaXQ6OlF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0
RGF0YT4gbV9uZXR3b3JrUmVxdWVzdERhdGE7CisgICAgV1RGOjpSZWZQdHI8V2ViS2l0OjpRdFJl
ZkNvdW50ZWROZXR3b3JrUmVwbHlEYXRhPiBtX25ldHdvcmtSZXBseURhdGE7CisgICAgV1RGOjpS
ZWZQdHI8V2ViS2l0OjpTaGFyZWRNZW1vcnk+IG1fc2hhcmVkTWVtb3J5OworICAgIHVpbnQ2NF90
IG1fZGF0YUxlbmd0aDsKIH07CiAKIFFNTF9ERUNMQVJFX1RZUEUoUVF1aWNrTmV0d29ya1JlcGx5
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3
b3JrcmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25l
dHdvcmtyZXF1ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzAw
ODRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2tuZXR3b3JrcmVxdWVzdC5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBaZW5vIEFsYmlzc2VyIDx6ZW5vQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAicXF1aWNrbmV0d29ya3JlcXVlc3RfcC5oIgorCisjaW5jbHVk
ZSAiUXROZXR3b3JrUmVxdWVzdERhdGEuaCIKKyNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIK
KwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworUVF1aWNrTmV0d29ya1JlcXVlc3Q6OlFRdWlj
a05ldHdvcmtSZXF1ZXN0KFFPYmplY3QqIHBhcmVudCkKKyAgICA6IFFPYmplY3QocGFyZW50KQor
eworICAgIFFfQVNTRVJUKHBhcmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrTmV0d29ya1JlcXVlc3Q6
OnNldE5ldHdvcmtSZXF1ZXN0RGF0YShXVEY6OlJlZlB0cjxXZWJLaXQ6OlF0UmVmQ291bnRlZE5l
dHdvcmtSZXF1ZXN0RGF0YT4gZGF0YSkKK3sKKyAgICBtX25ldHdvcmtSZXF1ZXN0RGF0YSA9IGRh
dGE7Cit9CisKK1dURjo6UmVmUHRyPFdlYktpdDo6UXRSZWZDb3VudGVkTmV0d29ya1JlcXVlc3RE
YXRhPiBRUXVpY2tOZXR3b3JrUmVxdWVzdDo6bmV0d29ya1JlcXVlc3REYXRhKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9uZXR3b3JrUmVxdWVzdERhdGE7Cit9CisKK1FTdHJpbmcgUVF1aWNrTmV0
d29ya1JlcXVlc3Q6OnVybCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbmV0d29ya1JlcXVlc3REYXRh
KQorICAgICAgIHJldHVybiBRU3RyaW5nKG1fbmV0d29ya1JlcXVlc3REYXRhLT5kYXRhKCkubV91
cmxTdHJpbmcpOworICAgIHJldHVybiBRU3RyaW5nKCk7Cit9CisKKyNpbmNsdWRlICJtb2NfcXF1
aWNrbmV0d29ya3JlcXVlc3RfcC5jcHAiCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcXVlc3RfcC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVxdWVzdF9wLmgKaW5kZXggMTEzMTE0Yy4u
MmU2Y2NjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2tuZXR3b3JrcmVxdWVzdF9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2tuZXR3b3JrcmVxdWVzdF9wLmgKQEAgLTIxLDYgKzIxLDggQEAKICNpZm5kZWYgcXF1
aWNrbmV0d29ya3JlcXVlc3RfcF9oCiAjZGVmaW5lIHFxdWlja25ldHdvcmtyZXF1ZXN0X3BfaAog
CisjaW5jbHVkZSAiUXROZXR3b3JrUmVxdWVzdERhdGEuaCIKKyNpbmNsdWRlICJSZWZQdHIuaCIK
ICNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCiAjaW5jbHVkZSA8UU9iamVjdD4KICNpbmNsdWRl
IDxRdERlY2xhcmF0aXZlL3FkZWNsYXJhdGl2ZWxpc3QuaD4KQEAgLTMxLDE3ICszMywxNSBAQCBj
bGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVpY2tOZXR3b3JrUmVxdWVzdCA6IHB1YmxpYyBRT2JqZWN0
IHsKICAgICBRX1BST1BFUlRZKFFTdHJpbmcgdXJsIFJFQUQgdXJsKQogCiBwdWJsaWM6Ci0gICAg
UVF1aWNrTmV0d29ya1JlcXVlc3QoUU9iamVjdCogcGFyZW50KQotICAgICAgICA6IFFPYmplY3Qo
cGFyZW50KQotICAgIHsKLSAgICAgICAgUV9BU1NFUlQocGFyZW50KTsKLSAgICB9CisgICAgUVF1
aWNrTmV0d29ya1JlcXVlc3QoUU9iamVjdCogcGFyZW50KTsKIAotICAgIFFTdHJpbmcgdXJsKCkg
Y29uc3QgeyByZXR1cm4gbV91cmw7IH0KLSAgICB2b2lkIHNldFVybChjb25zdCBRU3RyaW5nJiB1
cmwpIHsgbV91cmwgPSB1cmw7IH0KKyAgICB2b2lkIHNldE5ldHdvcmtSZXF1ZXN0RGF0YShXVEY6
OlJlZlB0cjxXZWJLaXQ6OlF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YT4gZGF0YSk7Cisg
ICAgV1RGOjpSZWZQdHI8V2ViS2l0OjpRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE+IG5l
dHdvcmtSZXF1ZXN0RGF0YSgpIGNvbnN0OworCisgICAgUVN0cmluZyB1cmwoKSBjb25zdDsKIAog
cHJpdmF0ZToKLSAgICBRU3RyaW5nIG1fdXJsOworICAgIFdURjo6UmVmUHRyPFdlYktpdDo6UXRS
ZWZDb3VudGVkTmV0d29ya1JlcXVlc3REYXRhPiBtX25ldHdvcmtSZXF1ZXN0RGF0YTsKIH07CiAK
IFFNTF9ERUNMQVJFX1RZUEUoUVF1aWNrTmV0d29ya1JlcXVlc3QpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAppbmRleCA1NTk2NzUwLi5m
ZjcyZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2Vidmlldy5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5o
IgogCiAjaW5jbHVkZSAicXF1aWNrbmV0d29ya3JlcGx5X3AuaCIKKyNpbmNsdWRlICJxcXVpY2tu
ZXR3b3JrcmVxdWVzdF9wLmgiCiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wX3AuaCIKICNpbmNs
dWRlICJxcXVpY2t3ZWJ2aWV3X3BfcC5oIgogI2luY2x1ZGUgInF3ZWJkb3dubG9hZGl0ZW1fcF9w
LmgiCkBAIC03ODgsMTUgKzc4OSwxNyBAQCBRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNr
VXJsU2NoZW1lRGVsZWdhdGU+IFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaAogICAgICAg
ICAgICAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzX0NsZWFyKTsK
IH0KIAotdm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjppbnZva2VBcHBsaWNhdGlvblNj
aGVtZUhhbmRsZXIoUGFzc1JlZlB0cjxRdE5ldHdvcmtSZXF1ZXN0RGF0YT4gcmVxdWVzdCkKK3Zv
aWQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6aW52b2tlQXBwbGljYXRpb25TY2hlbWVIYW5k
bGVyKFBhc3NSZWZQdHI8UXRSZWZDb3VudGVkTmV0d29ya1JlcXVlc3REYXRhPiByZXF1ZXN0KQog
eworICAgIFJlZlB0cjxRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE+IHJlcSA9IHJlcXVl
c3Q7CiAgICAgY29uc3QgUU9iamVjdExpc3QgY2hpbGRyZW4gPSBzY2hlbWVQYXJlbnQtPmNoaWxk
cmVuKCk7CiAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNoaWxkcmVuLmNvdW50KCk7
IGluZGV4KyspIHsKICAgICAgICAgUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUqIGRlbGVnYXRlID0g
cW9iamVjdF9jYXN0PFFRdWlja1VybFNjaGVtZURlbGVnYXRlKj4oY2hpbGRyZW4uYXQoaW5kZXgp
KTsKICAgICAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoIWRlbGVnYXRlLT5zY2hlbWUoKS5jb21wYXJlKFFTdHJpbmcocmVxdWVzdC0+bV9zY2hl
bWUpLCBRdDo6Q2FzZUluc2Vuc2l0aXZlKSkgewotICAgICAgICAgICAgZGVsZWdhdGUtPnJlcGx5
KCktPnNldE5ldHdvcmtSZXF1ZXN0RGF0YShyZXF1ZXN0KTsKKyAgICAgICAgaWYgKCFkZWxlZ2F0
ZS0+c2NoZW1lKCkuY29tcGFyZShRU3RyaW5nKHJlcS0+ZGF0YSgpLm1fc2NoZW1lKSwgUXQ6OkNh
c2VJbnNlbnNpdGl2ZSkpIHsKKyAgICAgICAgICAgIGRlbGVnYXRlLT5yZXF1ZXN0KCktPnNldE5l
dHdvcmtSZXF1ZXN0RGF0YShyZXEpOworICAgICAgICAgICAgZGVsZWdhdGUtPnJlcGx5KCktPnNl
dE5ldHdvcmtSZXF1ZXN0RGF0YShyZXEpOwogICAgICAgICAgICAgZW1pdCBkZWxlZ2F0ZS0+cmVj
ZWl2ZWRSZXF1ZXN0KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCmluZGV4IDE1
NWU5NjAuLjMwYzljZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrd2Vidmlld19wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJ2aWV3X3AuaApAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBQbGF0Zm9ybVdlYlZp
ZXc7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgUXROZXR3b3JrUmVxdWVzdERhdGE7
CitjbGFzcyBRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE7CiB9CiAKIG5hbWVzcGFjZSBX
VEYgewpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgaW50IHNjaGVtZURl
bGVnYXRlc19Db3VudChRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVs
ZWdhdGU+Kik7CiAgICAgc3RhdGljIHZvaWQgc2NoZW1lRGVsZWdhdGVzX0NsZWFyKFFEZWNsYXJh
dGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4qKTsKICAgICBRRGVjbGFy
YXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+IHNjaGVtZURlbGVnYXRl
cygpOwotICAgIHZvaWQgaW52b2tlQXBwbGljYXRpb25TY2hlbWVIYW5kbGVyKFdURjo6UGFzc1Jl
ZlB0cjxXZWJLaXQ6OlF0TmV0d29ya1JlcXVlc3REYXRhPik7CisgICAgdm9pZCBpbnZva2VBcHBs
aWNhdGlvblNjaGVtZUhhbmRsZXIoV1RGOjpQYXNzUmVmUHRyPFdlYktpdDo6UXRSZWZDb3VudGVk
TmV0d29ya1JlcXVlc3REYXRhPik7CiAgICAgdm9pZCBzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBs
eShRUXVpY2tOZXR3b3JrUmVwbHkqKTsKIAogcHVibGljIFFfU0xPVFM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggNjljZTk4Yi4uNWNlZGMwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMTAxNyw3ICsxMDE3LDcgQEAgcHJp
dmF0ZToKICAgICBmbG9hdCBtX21lZGlhVm9sdW1lOwogCiAjaWYgUExBVEZPUk0oUVQpCi0gICAg
V1RGOjpIYXNoU2V0PFJlZlB0cjxRdE5ldHdvcmtSZXF1ZXN0RGF0YT4gPiBtX2FwcGxpY2F0aW9u
U2NoZW1lUmVxdWVzdHM7CisgICAgV1RGOjpIYXNoU2V0PFJlZlB0cjxRdFJlZkNvdW50ZWROZXR3
b3JrUmVxdWVzdERhdGE+ID4gbV9hcHBsaWNhdGlvblNjaGVtZVJlcXVlc3RzOwogI2VuZGlmCiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwCmluZGV4
IDBhZDE1MmQuLmJkODA4YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFBhZ2VDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBh
Z2VDbGllbnQuY3BwCkBAIC0xMDAsMTEgKzEwMCwxMSBAQCB2b2lkIFF0UGFnZUNsaWVudDo6aGFu
ZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQogICAgIFFRdWlja1dl
YlZpZXdQcml2YXRlOjpnZXQobV93ZWJWaWV3KS0+aGFuZGxlRG93bmxvYWRSZXF1ZXN0KGRvd25s
b2FkKTsKIH0KIAotdm9pZCBRdFBhZ2VDbGllbnQ6OmhhbmRsZUFwcGxpY2F0aW9uU2NoZW1lUmVx
dWVzdChQYXNzUmVmUHRyPFF0TmV0d29ya1JlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSkKK3ZvaWQg
UXRQYWdlQ2xpZW50OjpoYW5kbGVBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QoUGFzc1JlZlB0cjxR
dFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE+IHJlcXVlc3REYXRhKQogewogICAgIGlmICgh
bV93ZWJWaWV3IHx8ICFtX3dlYlZpZXctPmV4cGVyaW1lbnRhbCgpKQogICAgICAgICByZXR1cm47
Ci0gICAgbV93ZWJWaWV3LT5leHBlcmltZW50YWwoKS0+aW52b2tlQXBwbGljYXRpb25TY2hlbWVI
YW5kbGVyKHJlcXVlc3REYXRhLmdldCgpKTsKKyAgICBtX3dlYlZpZXctPmV4cGVyaW1lbnRhbCgp
LT5pbnZva2VBcHBsaWNhdGlvblNjaGVtZUhhbmRsZXIocmVxdWVzdERhdGEpOwogfQogCiB2b2lk
IFF0UGFnZUNsaWVudDo6aGFuZGxlQXV0aGVudGljYXRpb25SZXF1aXJlZFJlcXVlc3QoY29uc3Qg
U3RyaW5nJiBob3N0bmFtZSwgY29uc3QgU3RyaW5nJiByZWFsbSwgY29uc3QgU3RyaW5nJiBwcmVm
aWxsZWRVc2VybmFtZSwgU3RyaW5nJiB1c2VybmFtZSwgU3RyaW5nJiBwYXNzd29yZCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuaAppbmRleCAxNTc1MThhLi5mMDE0
MDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5oCkBAIC01
Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVuY2hQcm9jZXNz
KCk7CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IGNyZWF0ZURyYXdp
bmdBcmVhUHJveHkoKTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERv
d25sb2FkUHJveHkqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQXBwbGljYXRpb25TY2hlbWVS
ZXF1ZXN0KFBhc3NSZWZQdHI8UXROZXR3b3JrUmVxdWVzdERhdGE+KTsKKyAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KFBhc3NSZWZQdHI8UXRSZWZDb3VudGVk
TmV0d29ya1JlcXVlc3REYXRhPik7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUF1dGhlbnRpY2F0
aW9uUmVxdWlyZWRSZXF1ZXN0KGNvbnN0IFN0cmluZyYgaG9zdG5hbWUsIGNvbnN0IFN0cmluZyYg
cmVhbG0sIGNvbnN0IFN0cmluZyYgcHJlZmlsbGVkVXNlcm5hbWUsIFN0cmluZyYgdXNlcm5hbWUs
IFN0cmluZyYgcGFzc3dvcmQpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BsYXlWaWV3KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcAppbmRleCBh
YzlmZGU0Li5iZjg2ZWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
V2ViUGFnZVByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJQ
YWdlUHJveHlRdC5jcHAKQEAgLTg3LDE3ICs4NywxNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVn
aXN0ZXJBcHBsaWNhdGlvblNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKIAogdm9pZCBXZWJQ
YWdlUHJveHk6OnJlc29sdmVBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QoUXROZXR3b3JrUmVxdWVz
dERhdGEgcmVxdWVzdCkKIHsKLSAgICBSZWZQdHI8UXROZXR3b3JrUmVxdWVzdERhdGE+IHJlcXVl
c3REYXRhID0gYWRvcHRSZWYobmV3IFF0TmV0d29ya1JlcXVlc3REYXRhKHJlcXVlc3QpKTsKKyAg
ICBSZWZQdHI8UXRSZWZDb3VudGVkTmV0d29ya1JlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSA9IGFk
b3B0UmVmKG5ldyBRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGEocmVxdWVzdCkpOwogICAg
IG1fYXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0cy5hZGQocmVxdWVzdERhdGEpOwogICAgIHN0YXRp
Y19jYXN0PFF0UGFnZUNsaWVudCo+KG1fcGFnZUNsaWVudCktPmhhbmRsZUFwcGxpY2F0aW9uU2No
ZW1lUmVxdWVzdChyZXF1ZXN0RGF0YSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZW5kQXBw
bGljYXRpb25TY2hlbWVSZXBseShjb25zdCBRUXVpY2tOZXR3b3JrUmVwbHkqIHJlcGx5KQogewot
ICAgIFJlZlB0cjxRdE5ldHdvcmtSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEgPSByZXBseS0+bmV0
d29ya1JlcXVlc3REYXRhKCk7CisgICAgUmVmUHRyPFF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0
RGF0YT4gcmVxdWVzdERhdGEgPSByZXBseS0+bmV0d29ya1JlcXVlc3REYXRhKCk7CiAgICAgaWYg
KG1fYXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0cy5jb250YWlucyhyZXF1ZXN0RGF0YSkpIHsKLSAg
ICAgICAgUmVmUHRyPFF0TmV0d29ya1JlcGx5RGF0YT4gcmVwbHlEYXRhID0gcmVwbHktPm5ldHdv
cmtSZXBseURhdGEoKTsKLSAgICAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpBcHBsaWNhdGlvblNjaGVtZVJlcGx5KCpyZXBseURhdGEpLCBwYWdlSUQoKSk7CisgICAgICAg
IFJlZlB0cjxRdFJlZkNvdW50ZWROZXR3b3JrUmVwbHlEYXRhPiByZXBseURhdGEgPSByZXBseS0+
bmV0d29ya1JlcGx5RGF0YSgpOworICAgICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OkFwcGxpY2F0aW9uU2NoZW1lUmVwbHkocmVwbHlEYXRhLT5kYXRhKCkpLCBwYWdlSUQo
KSk7CiAgICAgICAgIG1fYXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0cy5yZW1vdmUocmVxdWVzdERh
dGEpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQv
UXROZXR3b3JrUmVwbHkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdv
cmtSZXBseS5jcHAKaW5kZXggZmQwZjVjYi4uOTkwNDExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5jcHAKQEAgLTUwLDYgKzUwLDggQEAgUXRO
ZXR3b3JrUmVwbHk6OlF0TmV0d29ya1JlcGx5KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxLCBR
dE5ldHdvcmtBY2Nlc3NNYW5hZ2UKIAogdm9pZCBRdE5ldHdvcmtSZXBseTo6c2V0RGF0YShjb25z
dCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaGFuZGxlLCBxaW50NjQgZGF0YVNpemUpCiB7CisgICAg
aWYgKGhhbmRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fc2hhcmVkTWVtb3J5
ID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsK
ICAgICBpZiAoIW1fc2hhcmVkTWVtb3J5KQogICAgICAgICByZXR1cm47CkBAIC04Miw2ICs4NCw5
IEBAIHZvaWQgUXROZXR3b3JrUmVwbHk6OnNldFJlcGx5RGF0YShjb25zdCBRdE5ldHdvcmtSZXBs
eURhdGEmIHJlcGx5RGF0YSkKIAogcWludDY0IFF0TmV0d29ya1JlcGx5OjpyZWFkRGF0YShjaGFy
KiBkYXRhLCBxaW50NjQgbWF4bGVuKQogeworICAgIGlmICghbV9zaGFyZWRNZW1vcnkpCisgICAg
ICAgIHJldHVybiAwOworCiAgICAgcWludDY0IGJ5dGVzUmVhZCA9IG1heGxlbiA8IG1fYnl0ZXNB
dmFpbGFibGUgPyBtYXhsZW4gOiBtX2J5dGVzQXZhaWxhYmxlOwogICAgIGlmIChxTWVtQ29weShk
YXRhLCBzdGF0aWNfY2FzdDxjaGFyKj4obV9zaGFyZWRNZW1vcnktPmRhdGEoKSkgKyBtX3NoYXJl
ZE1lbW9yeVNpemUgLSBtX2J5dGVzQXZhaWxhYmxlLCBieXRlc1JlYWQpKSB7CiAgICAgICAgIG1f
Ynl0ZXNBdmFpbGFibGUgLT0gYnl0ZXNSZWFkOwo=
</data>
<flag name="review"
          id="124331"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123545</attachid>
            <date>2012-01-23 05:42:16 -0800</date>
            <delta_ts>2012-01-23 16:24:47 -0800</delta_ts>
            <desc>patch for review. - updated as commented previously.</desc>
            <filename>76700_20120123-143550.patch</filename>
            <type>text/plain</type>
            <size>26089</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBhNjFlYmI2Li40Zjc1OGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMg
QEAKKzIwMTItMDEtMjMgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW1F0XVtXSzJdIEFwcGxpY2F0aW9uIFVSTCBzY2hlbWVzIGNhdXNlIGFzc2VydHMgd2hlbiB1
c2luZyBkZWJ1Zy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc2NzAwCisKKyAgICAgICAgSW5zdGFuY2VzIG9mIFF0TmV0d29ya1JlcXVlc3REYXRhIC8g
UXROZXR3b3JrUmVwbHlEYXRhIGFyZSBtZWFudAorICAgICAgICB0byBiZSB1c2VkIGZvciB0cmFu
c2ZlcmluZyBkYXRhIG92ZXIgSVBDLiBUbyBhbGxvdyB0cmFuc2ZlcnJpbmcKKyAgICAgICAgaW5z
dGFuY2VzIG9mIHRoZXNlIGNsYXNzZXMgb3ZlciBJUEMgdGhleSBuZWVkIHRvIGJlIGNvcHlhYmxl
LAorICAgICAgICBhbmQgaXQgbXVzdCBiZSBwb3NzaWJsZSB0byBjcmVhdGUgc3VjaCBpbnN0YW5j
ZXMgb24gdGhlIHN0YWNrLgorICAgICAgICBCZWNhdXNlIGNsYXNzZXMgdGhhdCBpbmhlcml0IGZy
b20gUmVmQ291bnRlZCBhbHdheXMgbmVlZCB0byBiZQorICAgICAgICB1c2VkIGluIGNvbm5lY3Rp
b24gd2l0aCBSZWZQdHIsIFF0TmV0d29ya1JlcXVlc3REYXRhIGFuZAorICAgICAgICBRdE5ldHdv
cmtSZXBseURhdGEgY2Fubm90IGluaGVyaXQgZGlyZWN0bHkgZnJvbSBSZWZDb3VudGVkLgorCisg
ICAgICAgIERlbGV0aW5nIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gUmVmQ291bnRlZCwg
d2l0aG91dAorICAgICAgICB0aGUgcHJvcGVyIHNlcXVlbmNlIG9mIHJlZigpL2RlcmVmKCkgYmVp
bmcgY2FsbGVkIGJ5IGl0J3MKKyAgICAgICAgUmVmUHRyLCBjYXVzZXMgYXNzZXJ0cyB3aGVuIHJ1
bm5pbmcgYSBkZWJ1ZyB2ZXJzaW9uLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5oOgorICAgICAg
ICAoV2ViS2l0OjpRdFJlZkNvdW50ZWROZXR3b3JrUmVwbHlEYXRhOjpkYXRhKToKKyAgICAgICAg
KiBTaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpR
dFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE6OlF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0
RGF0YSk6CisgICAgICAgICogU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRhLmg6CisgICAg
ICAgIChXZWJLaXQ6OlF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YTo6ZGF0YSk6CisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdv
cmtyZXBseS5jcHA6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OlFRdWlja05ldHdvcmtS
ZXBseSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OmNvbnRlbnRUeXBlKToKKyAgICAg
ICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29udGVudFR5cGUpOgorICAgICAgICAoUVF1aWNr
TmV0d29ya1JlcGx5OjpvcGVyYXRpb24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5Ojpz
ZXRPcGVyYXRpb24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5Ojpjb250ZW50RGlzcG9z
aXRpb24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb250ZW50RGlzcG9zaXRp
b24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5Ojpsb2NhdGlvbik6CisgICAgICAgIChR
UXVpY2tOZXR3b3JrUmVwbHk6OnNldExvY2F0aW9uKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtS
ZXBseTo6bGFzdE1vZGlmaWVkKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0TGFz
dE1vZGlmaWVkKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6Y29va2llKToKKyAgICAg
ICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29va2llKToKKyAgICAgICAgKFFRdWlja05ldHdv
cmtSZXBseTo6dXNlckFnZW50KToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0VXNl
ckFnZW50KToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2VydmVyKToKKyAgICAgICAg
KFFRdWlja05ldHdvcmtSZXBseTo6c2V0U2VydmVyKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtS
ZXBseTo6ZGF0YSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldERhdGEpOgorICAg
ICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZW5kKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtS
ZXBseTo6bmV0d29ya1JlcXVlc3REYXRhKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6
c2V0TmV0d29ya1JlcXVlc3REYXRhKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6bmV0
d29ya1JlcGx5RGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3Jr
cmVwbHlfcC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcXVl
c3QuY3BwOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcXVlc3Q6OlFRdWlja05ldHdvcmtSZXF1
ZXN0KToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXF1ZXN0OjpzZXROZXR3b3JrUmVxdWVzdERh
dGEpOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcXVlc3Q6OnVybCk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVxdWVzdF9wLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBl
cmltZW50YWw6Omludm9rZUFwcGxpY2F0aW9uU2NoZW1lSGFuZGxlcik6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5jcHA6Cisg
ICAgICAgIChRdFBhZ2VDbGllbnQ6OmhhbmRsZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9XZWJQYWdlUHJveHlRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
cmVzb2x2ZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6c2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvcXQvUXROZXR3b3JrUmVwbHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBs
eTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5OjpyZWFkRGF0YSk6
CisKIDIwMTItMDEtMjAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDU0OTcuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRhLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRhLmgKaW5kZXggZDc0YjQyMi4uYzM5
YTQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5
RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEu
aApAQCAtMzksOSArMzksNyBAQCBjbGFzcyBBcmd1bWVudERlY29kZXI7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1zdHJ1Y3QgUXROZXR3b3JrUmVwbHlEYXRhIDogcHVibGljIFdURjo6UmVmQ291
bnRlZDxRdE5ldHdvcmtSZXBseURhdGE+IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShRdE5l
dHdvcmtSZXBseURhdGEpOwotcHVibGljOgorc3RydWN0IFF0TmV0d29ya1JlcGx5RGF0YSB7CiAg
ICAgUXROZXR3b3JrUmVwbHlEYXRhKCk7CiAKICAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1
bWVudEVuY29kZXIqKSBjb25zdDsKQEAgLTYzLDYgKzYxLDEzIEBAIHB1YmxpYzoKICAgICBTaGFy
ZWRNZW1vcnk6OkhhbmRsZSBtX2RhdGFIYW5kbGU7CiB9OwogCitzdHJ1Y3QgUXRSZWZDb3VudGVk
TmV0d29ya1JlcGx5RGF0YSA6IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWQ8UXRSZWZDb3VudGVkTmV0
d29ya1JlcGx5RGF0YT4geworICAgIFF0TmV0d29ya1JlcGx5RGF0YSYgZGF0YSgpIHsgcmV0dXJu
IG1fZGF0YTsgfQorcHJpdmF0ZToKKyAgICBRdE5ldHdvcmtSZXBseURhdGEgbV9kYXRhOworfTsK
KworCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFF0TmV0d29ya1JlcGx5RGF0
YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVz
dERhdGEuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRh
LmNwcAppbmRleCBjNmVhNmUzLi5mMjEwNjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9xdC9RdE5ldHdvcmtSZXF1ZXN0RGF0YS5jcHAKQEAgLTM2LDYgKzM2LDEwIEBACiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCitRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE6OlF0UmVm
Q291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YShjb25zdCBRdE5ldHdvcmtSZXF1ZXN0RGF0YSYgZGF0
YSkKKyAgICA6IG1fZGF0YShkYXRhKQoreyB9CisKIFF0TmV0d29ya1JlcXVlc3REYXRhOjpRdE5l
dHdvcmtSZXF1ZXN0RGF0YSgpCiB7IH0KIApAQCAtNDYsMTQgKzUwLDYgQEAgUXROZXR3b3JrUmVx
dWVzdERhdGE6OlF0TmV0d29ya1JlcXVlc3REYXRhKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVx
dWVzdCwgUU5ldHcKICAgICBtX3JlcGx5VXVpZCA9IFFVdWlkOjpjcmVhdGVVdWlkKCkudG9TdHJp
bmcoKTsKIH0KIAotUXROZXR3b3JrUmVxdWVzdERhdGE6OlF0TmV0d29ya1JlcXVlc3REYXRhKGNv
bnN0IFF0TmV0d29ya1JlcXVlc3REYXRhJiBvcmlnaW4pCi0gICAgOiBSZWZDb3VudGVkPFF0TmV0
d29ya1JlcXVlc3REYXRhPigpLAotICAgIG1fc2NoZW1lKG9yaWdpbi5tX3NjaGVtZSksCi0gICAg
bV91cmxTdHJpbmcob3JpZ2luLm1fdXJsU3RyaW5nKSwKLSAgICBtX3JlcGx5VXVpZChvcmlnaW4u
bV9yZXBseVV1aWQpCi17Ci19Ci0KIHZvaWQgUXROZXR3b3JrUmVxdWVzdERhdGE6OmVuY29kZShD
b3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2Rlci0+
ZW5jb2RlKG1fc2NoZW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9R
dE5ldHdvcmtSZXF1ZXN0RGF0YS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29y
a1JlcXVlc3REYXRhLmgKaW5kZXggMTU2Nzk2NC4uMDgyZDQ5OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRhLmgKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRhLmgKQEAgLTM5LDExICszOSw5IEBA
IGNsYXNzIFFOZXR3b3JrUmVwbHk7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdHJ1Y3QgUXRO
ZXR3b3JrUmVxdWVzdERhdGEgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkPFF0TmV0d29ya1JlcXVl
c3REYXRhPiB7CitzdHJ1Y3QgUXROZXR3b3JrUmVxdWVzdERhdGEgewogICAgIFF0TmV0d29ya1Jl
cXVlc3REYXRhKCk7CiAgICAgUXROZXR3b3JrUmVxdWVzdERhdGEoY29uc3QgUU5ldHdvcmtSZXF1
ZXN0JiwgUU5ldHdvcmtSZXBseSopOwotICAgIFF0TmV0d29ya1JlcXVlc3REYXRhKGNvbnN0IFF0
TmV0d29ya1JlcXVlc3REYXRhJik7Ci0KICAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVu
dEVuY29kZXIqKSBjb25zdDsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKiwgUXROZXR3b3JrUmVxdWVzdERhdGEmKTsKIApAQCAtNTIsNiArNTAsMTMgQEAg
c3RydWN0IFF0TmV0d29ya1JlcXVlc3REYXRhIDogcHVibGljIFdURjo6UmVmQ291bnRlZDxRdE5l
dHdvcmtSZXF1ZXN0RGF0YT4gewogICAgIFN0cmluZyBtX3JlcGx5VXVpZDsKIH07CiAKK3N0cnVj
dCBRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGEgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVk
PFF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YT4geworICAgIFF0UmVmQ291bnRlZE5ldHdv
cmtSZXF1ZXN0RGF0YShjb25zdCBRdE5ldHdvcmtSZXF1ZXN0RGF0YSYpOworICAgIFF0TmV0d29y
a1JlcXVlc3REYXRhJiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9Citwcml2YXRlOgorICAgIFF0
TmV0d29ya1JlcXVlc3REYXRhIG1fZGF0YTsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
CiAjZW5kaWYgLy8gUXROZXR3b3JrUmVxdWVzdERhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggNWVlMjc5
Ny4uNjcwNGNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC01MDcsNiArNTA3LDcgQEAgU09VUkNFUyArPSBc
CiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBcCiAgICAgVUlQcm9jZXNz
L0FQSS9xdC9xd2ViaWNvbmltYWdlcHJvdmlkZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0
L3FxdWlja25ldHdvcmtyZXBseS5jcHAgXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0
d29ya3JlcXVlc3QuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRl
bGVnYXRlLmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXMuY3BwIFwK
ICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJ2aWV3cG9ydGluZm8uY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5LmNwcApp
bmRleCA0ZTg4MTAzLi4zNzI4ZWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHkuY3BwCkBAIC0zMCwxMjggKzMwLDEyNyBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBRUXVpY2tOZXR3b3JrUmVwbHk6OlFRdWlja05l
dHdvcmtSZXBseShRT2JqZWN0KiBwYXJlbnQpCiAgICAgOiBRT2JqZWN0KHBhcmVudCkKLSAgICAs
IG1fbmV0d29ya1JlcGx5RGF0YShhZG9wdFJlZihuZXcgV2ViS2l0OjpRdE5ldHdvcmtSZXBseURh
dGEpKQorICAgICwgbV9uZXR3b3JrUmVwbHlEYXRhKGFkb3B0UmVmKG5ldyBXZWJLaXQ6OlF0UmVm
Q291bnRlZE5ldHdvcmtSZXBseURhdGEpKQorICAgICwgbV9kYXRhTGVuZ3RoKDApCiB7CiAgICAg
UV9BU1NFUlQocGFyZW50KTsKIH0KIAogUVN0cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6OmNvbnRl
bnRUeXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2NvbnRl
bnRUeXBlOworICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX2NvbnRlbnRU
eXBlOwogfQogCiB2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29udGVudFR5cGUoY29uc3Qg
UVN0cmluZyYgY29udGVudFR5cGUpCiB7Ci0gICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2NvbnRl
bnRUeXBlID0gY29udGVudFR5cGU7CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV9j
b250ZW50VHlwZSA9IGNvbnRlbnRUeXBlOwogfQogCiBRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9w
ZXJhdGlvbiBRUXVpY2tOZXR3b3JrUmVwbHk6Om9wZXJhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9vcGVyYXRpb247CisgICAgcmV0dXJuIG1fbmV0d29y
a1JlcGx5RGF0YS0+ZGF0YSgpLm1fb3BlcmF0aW9uOwogfQogCiB2b2lkIFFRdWlja05ldHdvcmtS
ZXBseTo6c2V0T3BlcmF0aW9uKFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0aW9uIG9wZXJh
dGlvbikKIHsKLSAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fb3BlcmF0aW9uID0gb3BlcmF0aW9u
OworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1fb3BlcmF0aW9uID0gb3BlcmF0aW9u
OwogfQogCiBRU3RyaW5nIFFRdWlja05ldHdvcmtSZXBseTo6Y29udGVudERpc3Bvc2l0aW9uKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2NvbnRlbnREaXNwb3Np
dGlvbjsKKyAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV9jb250ZW50RGlz
cG9zaXRpb247CiB9CiAKIHZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb250ZW50RGlzcG9z
aXRpb24oY29uc3QgUVN0cmluZyYgZGlzcG9zaXRpb24pCiB7Ci0gICAgbV9uZXR3b3JrUmVwbHlE
YXRhLT5tX2NvbnRlbnREaXNwb3NpdGlvbiA9IGRpc3Bvc2l0aW9uOworICAgIG1fbmV0d29ya1Jl
cGx5RGF0YS0+ZGF0YSgpLm1fY29udGVudERpc3Bvc2l0aW9uID0gZGlzcG9zaXRpb247CiB9CiAK
IFFTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5Ojpsb2NhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9sb2NhdGlvbjsKKyAgICByZXR1cm4gbV9uZXR3b3Jr
UmVwbHlEYXRhLT5kYXRhKCkubV9sb2NhdGlvbjsKIH0KIAogdm9pZCBRUXVpY2tOZXR3b3JrUmVw
bHk6OnNldExvY2F0aW9uKGNvbnN0IFFTdHJpbmcmIGxvY2F0aW9uKQogewotICAgIG1fbmV0d29y
a1JlcGx5RGF0YS0+bV9sb2NhdGlvbiA9IGxvY2F0aW9uOworICAgIG1fbmV0d29ya1JlcGx5RGF0
YS0+ZGF0YSgpLm1fbG9jYXRpb24gPSBsb2NhdGlvbjsKIH0KIAogUVN0cmluZyBRUXVpY2tOZXR3
b3JrUmVwbHk6Omxhc3RNb2RpZmllZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFFEYXRlVGltZTo6
ZnJvbU1TZWNzU2luY2VFcG9jaChtX25ldHdvcmtSZXBseURhdGEtPm1fbGFzdE1vZGlmaWVkKS50
b1N0cmluZyhRdDo6SVNPRGF0ZSk7CisgICAgcmV0dXJuIFFEYXRlVGltZTo6ZnJvbU1TZWNzU2lu
Y2VFcG9jaChtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX2xhc3RNb2RpZmllZCkudG9TdHJp
bmcoUXQ6OklTT0RhdGUpOwogfQogCiB2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0TGFzdE1v
ZGlmaWVkKGNvbnN0IFFTdHJpbmcmIGxhc3RNb2RpZmllZCkKIHsKLSAgICBtX25ldHdvcmtSZXBs
eURhdGEtPm1fbGFzdE1vZGlmaWVkID0gUURhdGVUaW1lOjpmcm9tU3RyaW5nKGxhc3RNb2RpZmll
ZCwgUXQ6OklTT0RhdGUpLnRvTVNlY3NTaW5jZUVwb2NoKCk7CisgICAgbV9uZXR3b3JrUmVwbHlE
YXRhLT5kYXRhKCkubV9sYXN0TW9kaWZpZWQgPSBRRGF0ZVRpbWU6OmZyb21TdHJpbmcobGFzdE1v
ZGlmaWVkLCBRdDo6SVNPRGF0ZSkudG9NU2Vjc1NpbmNlRXBvY2goKTsKIH0KIAogUVN0cmluZyBR
UXVpY2tOZXR3b3JrUmVwbHk6OmNvb2tpZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbmV0d29y
a1JlcGx5RGF0YS0+bV9jb29raWU7CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0
YSgpLm1fY29va2llOwogfQogCiB2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29va2llKGNv
bnN0IFFTdHJpbmcmIGNvb2tpZSkKIHsKLSAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fY29va2ll
ID0gY29va2llOworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1fY29va2llID0gY29v
a2llOwogfQogCiBRU3RyaW5nIFFRdWlja05ldHdvcmtSZXBseTo6dXNlckFnZW50KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5tX3VzZXJBZ2VudDsKKyAgICByZXR1
cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV91c2VyQWdlbnQ7CiB9CiAKIHZvaWQgUVF1
aWNrTmV0d29ya1JlcGx5OjpzZXRVc2VyQWdlbnQoY29uc3QgUVN0cmluZyYgdXNlckFnZW50KQog
ewotICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV91c2VyQWdlbnQgPSB1c2VyQWdlbnQ7CisgICAg
bV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV91c2VyQWdlbnQgPSB1c2VyQWdlbnQ7CiB9CiAK
IFFTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXJ2ZXIoKSBjb25zdAogewotICAgIHJldHVy
biBtX25ldHdvcmtSZXBseURhdGEtPm1fc2VydmVyOworICAgIHJldHVybiBtX25ldHdvcmtSZXBs
eURhdGEtPmRhdGEoKS5tX3NlcnZlcjsKIH0KIAogdm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNl
dFNlcnZlcihjb25zdCBRU3RyaW5nJiBzZXJ2ZXIpCiB7Ci0gICAgbV9uZXR3b3JrUmVwbHlEYXRh
LT5tX3NlcnZlciA9IHNlcnZlcjsKKyAgICBtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX3Nl
cnZlciA9IHNlcnZlcjsKIH0KIAogUVN0cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6OmRhdGEoKSBj
b25zdAogewotICAgIGlmIChtX25ldHdvcmtSZXBseURhdGEtPm1fZGF0YUhhbmRsZS5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBz
bSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKG1fbmV0d29ya1JlcGx5RGF0YS0+bV9kYXRhSGFuZGxl
LCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKLSAgICBpZiAoIXNtKQorICAgIGlmICghbV9zaGFy
ZWRNZW1vcnkpCiAgICAgICAgIHJldHVybiBRU3RyaW5nKCk7CiAKLSAgICB1aW50NjRfdCBzdHJp
bmdMZW5ndGggPSBtX25ldHdvcmtSZXBseURhdGEtPm1fY29udGVudExlbmd0aCAvIHNpemVvZihV
Q2hhcik7Ci0gICAgcmV0dXJuIFFTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+
KHNtLT5kYXRhKCkpLCBzdHJpbmdMZW5ndGgpOworICAgIHVpbnQ2NF90IHN0cmluZ0xlbmd0aCA9
IG1fZGF0YUxlbmd0aCAvIHNpemVvZihVQ2hhcik7CisgICAgcmV0dXJuIFFTdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KG1fc2hhcmVkTWVtb3J5LT5kYXRhKCkpLCBzdHJpbmdM
ZW5ndGgpOwogfQogCiB2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0RGF0YShjb25zdCBRU3Ry
aW5nJiBkYXRhKQogewotICAgIC8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBzZXZlcmFs
IHRpbWVzLiBJbiB0aGlzIGNhc2UgdGhlIHByZXZpb3VzIFNoYXJlZE1lbW9yeSBoYW5kbGVzCi0g
ICAgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBhbmQgdGhlIHByZXZpb3VzbHkgYWxsb2NhdGVkIFNo
YXJlZE1lbW9yeSB3aWxsIGRpZSB3aXRoIHRoZSBsYXN0IGhhbmRsZS4KLSAgICBtX25ldHdvcmtS
ZXBseURhdGEtPm1fY29udGVudExlbmd0aCA9IDA7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBjYW4g
YmUgY2FsbGVkIHNldmVyYWwgdGltZXMuIEluIHRoaXMgY2FzZSB0aGUgcHJldmlvdXNseSBhbGxv
Y2F0ZWQgU2hhcmVkTWVtb3J5CisgICAgLy8gd2lsbCBiZSByZWxlYXNlZCBhdXRvbWF0aWNhbGx5
IGFuZCBuZXcgbWVtb3J5IHdpbGwgYmUgYWxsb2NhdGVkLgorICAgIG1fZGF0YUxlbmd0aCA9IDA7
CiAKICAgICBpZiAoZGF0YS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGNvbnN0IFVD
aGFyKiB1Y2hhckRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oZGF0YS5jb25z
dERhdGEoKSk7CiAgICAgdWludDY0X3Qgc21MZW5ndGggPSBzaXplb2YoVUNoYXIpICogZGF0YS5s
ZW5ndGgoKTsKIAotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNtID0gU2hhcmVkTWVtb3J5Ojpj
cmVhdGUoc21MZW5ndGgpOwotICAgIGlmICghc20pCisgICAgbV9zaGFyZWRNZW1vcnkgPSBTaGFy
ZWRNZW1vcnk6OmNyZWF0ZShzbUxlbmd0aCk7CisgICAgaWYgKCFtX3NoYXJlZE1lbW9yeSkKICAg
ICAgICAgcmV0dXJuOwogICAgIC8vIFRoZSBzaXplIG9mIHRoZSBhbGxvY2F0ZWQgc2hhcmVkIG1l
bW9yeSBjYW4gYmUgYmlnZ2VyIHRoYW4gcmVxdWVzdGVkLgogICAgIC8vIFVzdWFsbHkgdGhlIHNp
emUgd2lsbCBiZSByb3VuZGVkIHVwIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9mIGEgcGFnZSBzaXpl
LgotICAgIG1lbWNweShzbS0+ZGF0YSgpLCB1Y2hhckRhdGEsIHNtTGVuZ3RoKTsKLQotICAgIGlm
ICghc20tPmNyZWF0ZUhhbmRsZShtX25ldHdvcmtSZXBseURhdGEtPm1fZGF0YUhhbmRsZSwgU2hh
cmVkTWVtb3J5OjpSZWFkT25seSkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX25ldHdvcmtSZXBs
eURhdGEtPm1fY29udGVudExlbmd0aCA9IHNtTGVuZ3RoOworICAgIG1lbWNweShtX3NoYXJlZE1l
bW9yeS0+ZGF0YSgpLCB1Y2hhckRhdGEsIHNtTGVuZ3RoKTsKKyAgICBtX2RhdGFMZW5ndGggPSBz
bUxlbmd0aDsKIH0KIAogdm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNlbmQoKQogeworICAgIGlm
ICghbV9zaGFyZWRNZW1vcnkgfHwgIW1fc2hhcmVkTWVtb3J5LT5jcmVhdGVIYW5kbGUobV9uZXR3
b3JrUmVwbHlEYXRhLT5kYXRhKCkubV9kYXRhSGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1fY29u
dGVudExlbmd0aCA9IG1fZGF0YUxlbmd0aDsKKwogICAgIFFPYmplY3QqIHNjaGVtZVBhcmVudCA9
IHBhcmVudCgpLT5wYXJlbnQoKTsKICAgICBpZiAoIXNjaGVtZVBhcmVudCkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTU5LDIwICsxNTgsMjQgQEAgdm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNlbmQo
KQogICAgIGlmICghd2ViVmlld0V4cGVyaW1lbnRhbCkKICAgICAgICAgcmV0dXJuOwogICAgIHdl
YlZpZXdFeHBlcmltZW50YWwtPnNlbmRBcHBsaWNhdGlvblNjaGVtZVJlcGx5KHRoaXMpOworCisg
ICAgLy8gQWZ0ZXIgc2VuZGluZyB0aGUgcmVwbHkgZGF0YSwgd2UgaGF2ZSB0byByZWluaXRpYWxp
emUgdGhlIG1fbmV0d29ya1JlcGx5RGF0YSwKKyAgICAvLyB0byBtYWtlIHN1cmUgd2UgaGF2ZSBh
IGZyZXNoIFNoYXJlc01lbW9yeTo6SGFuZGxlLgorICAgIG1fbmV0d29ya1JlcGx5RGF0YSA9IGFk
b3B0UmVmKG5ldyBXZWJLaXQ6OlF0UmVmQ291bnRlZE5ldHdvcmtSZXBseURhdGEpOwogfQogCi1X
VEY6OlJlZlB0cjxXZWJLaXQ6OlF0TmV0d29ya1JlcXVlc3REYXRhPiBRUXVpY2tOZXR3b3JrUmVw
bHk6Om5ldHdvcmtSZXF1ZXN0RGF0YSgpIGNvbnN0CitXVEY6OlJlZlB0cjxXZWJLaXQ6OlF0UmVm
Q291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YT4gUVF1aWNrTmV0d29ya1JlcGx5OjpuZXR3b3JrUmVx
dWVzdERhdGEoKSBjb25zdAogewogICAgIHJldHVybiBtX25ldHdvcmtSZXF1ZXN0RGF0YTsKIH0K
IAotdm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldE5ldHdvcmtSZXF1ZXN0RGF0YShXVEY6OlJl
ZlB0cjxXZWJLaXQ6OlF0TmV0d29ya1JlcXVlc3REYXRhPiBkYXRhKQordm9pZCBRUXVpY2tOZXR3
b3JrUmVwbHk6OnNldE5ldHdvcmtSZXF1ZXN0RGF0YShXVEY6OlJlZlB0cjxXZWJLaXQ6OlF0UmVm
Q291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YT4gZGF0YSkKIHsKICAgICBtX25ldHdvcmtSZXF1ZXN0
RGF0YSA9IGRhdGE7Ci0gICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5tX3JlcGx5VXVpZCA9IGRhdGEt
Pm1fcmVwbHlVdWlkOworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1fcmVwbHlVdWlk
ID0gZGF0YS0+ZGF0YSgpLm1fcmVwbHlVdWlkOwogfQogCi1XVEY6OlJlZlB0cjxXZWJLaXQ6OlF0
TmV0d29ya1JlcGx5RGF0YT4gUVF1aWNrTmV0d29ya1JlcGx5OjpuZXR3b3JrUmVwbHlEYXRhKCkg
Y29uc3QKK1dURjo6UmVmUHRyPFdlYktpdDo6UXRSZWZDb3VudGVkTmV0d29ya1JlcGx5RGF0YT4g
UVF1aWNrTmV0d29ya1JlcGx5OjpuZXR3b3JrUmVwbHlEYXRhKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9uZXR3b3JrUmVwbHlEYXRhOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHlfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHlfcC5oCmluZGV4IGZmZTQ1ZjMuLjgxMzcx
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0
d29ya3JlcGx5X3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a25ldHdvcmtyZXBseV9wLmgKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIlF0TmV0d29y
a1JlcGx5RGF0YS5oIgogI2luY2x1ZGUgIlF0TmV0d29ya1JlcXVlc3REYXRhLmgiCisjaW5jbHVk
ZSAiU2hhcmVkTWVtb3J5LmgiCiAjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgogI2luY2x1ZGUg
PFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KICNpbmNsdWRlIDxRT2JqZWN0PgpAQCAtNTcsMTYgKzU4
LDE4IEBAIHB1YmxpYzoKICAgICBRU3RyaW5nIGRhdGEoKSBjb25zdDsKICAgICB2b2lkIHNldERh
dGEoY29uc3QgUVN0cmluZyYgZGF0YSk7CiAKLSAgICBXVEY6OlJlZlB0cjxXZWJLaXQ6OlF0TmV0
d29ya1JlcXVlc3REYXRhPiBuZXR3b3JrUmVxdWVzdERhdGEoKSBjb25zdDsKLSAgICB2b2lkIHNl
dE5ldHdvcmtSZXF1ZXN0RGF0YShXVEY6OlJlZlB0cjxXZWJLaXQ6OlF0TmV0d29ya1JlcXVlc3RE
YXRhPiBkYXRhKTsKLSAgICBXVEY6OlJlZlB0cjxXZWJLaXQ6OlF0TmV0d29ya1JlcGx5RGF0YT4g
bmV0d29ya1JlcGx5RGF0YSgpIGNvbnN0OworICAgIFdURjo6UmVmUHRyPFdlYktpdDo6UXRSZWZD
b3VudGVkTmV0d29ya1JlcXVlc3REYXRhPiBuZXR3b3JrUmVxdWVzdERhdGEoKSBjb25zdDsKKyAg
ICB2b2lkIHNldE5ldHdvcmtSZXF1ZXN0RGF0YShXVEY6OlJlZlB0cjxXZWJLaXQ6OlF0UmVmQ291
bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YT4gZGF0YSk7CisgICAgV1RGOjpSZWZQdHI8V2ViS2l0OjpR
dFJlZkNvdW50ZWROZXR3b3JrUmVwbHlEYXRhPiBuZXR3b3JrUmVwbHlEYXRhKCkgY29uc3Q7CiAK
IHB1YmxpYyBRX1NMT1RTOgogICAgIHZvaWQgc2VuZCgpOwogCiBwcml2YXRlOgotICAgIFdURjo6
UmVmUHRyPFdlYktpdDo6UXROZXR3b3JrUmVxdWVzdERhdGE+IG1fbmV0d29ya1JlcXVlc3REYXRh
OwotICAgIFdURjo6UmVmUHRyPFdlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhPiBtX25ldHdvcmtS
ZXBseURhdGE7CisgICAgV1RGOjpSZWZQdHI8V2ViS2l0OjpRdFJlZkNvdW50ZWROZXR3b3JrUmVx
dWVzdERhdGE+IG1fbmV0d29ya1JlcXVlc3REYXRhOworICAgIFdURjo6UmVmUHRyPFdlYktpdDo6
UXRSZWZDb3VudGVkTmV0d29ya1JlcGx5RGF0YT4gbV9uZXR3b3JrUmVwbHlEYXRhOworICAgIFdU
Rjo6UmVmUHRyPFdlYktpdDo6U2hhcmVkTWVtb3J5PiBtX3NoYXJlZE1lbW9yeTsKKyAgICB1aW50
NjRfdCBtX2RhdGFMZW5ndGg7CiB9OwogCiBRTUxfREVDTEFSRV9UWVBFKFFRdWlja05ldHdvcmtS
ZXBseSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
bmV0d29ya3JlcXVlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2tuZXR3b3JrcmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MmFmODU4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrbmV0d29ya3JlcXVlc3QuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgWmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInFxdWlja25ldHdvcmtyZXF1ZXN0X3AuaCIKKworI2lu
Y2x1ZGUgIlF0TmV0d29ya1JlcXVlc3REYXRhLmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmlld19w
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK1FRdWlja05ldHdvcmtSZXF1ZXN0OjpR
UXVpY2tOZXR3b3JrUmVxdWVzdChRT2JqZWN0KiBwYXJlbnQpCisgICAgOiBRT2JqZWN0KHBhcmVu
dCkKK3sKKyAgICBRX0FTU0VSVChwYXJlbnQpOworfQorCit2b2lkIFFRdWlja05ldHdvcmtSZXF1
ZXN0OjpzZXROZXR3b3JrUmVxdWVzdERhdGEoV1RGOjpQYXNzUmVmUHRyPFdlYktpdDo6UXRSZWZD
b3VudGVkTmV0d29ya1JlcXVlc3REYXRhPiBkYXRhKQoreworICAgIG1fbmV0d29ya1JlcXVlc3RE
YXRhID0gZGF0YTsKK30KKworUVN0cmluZyBRUXVpY2tOZXR3b3JrUmVxdWVzdDo6dXJsKCkgY29u
c3QKK3sKKyAgICBpZiAobV9uZXR3b3JrUmVxdWVzdERhdGEpCisgICAgICAgcmV0dXJuIFFTdHJp
bmcobV9uZXR3b3JrUmVxdWVzdERhdGEtPmRhdGEoKS5tX3VybFN0cmluZyk7CisgICAgcmV0dXJu
IFFTdHJpbmcoKTsKK30KKworI2luY2x1ZGUgIm1vY19xcXVpY2tuZXR3b3JrcmVxdWVzdF9wLmNw
cCIKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tu
ZXR3b3JrcmVxdWVzdF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a25ldHdvcmtyZXF1ZXN0X3AuaAppbmRleCAxMTMxMTRjLi5mNmUzNTNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0X3AuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0
X3AuaApAQCAtMjEsNiArMjEsOCBAQAogI2lmbmRlZiBxcXVpY2tuZXR3b3JrcmVxdWVzdF9wX2gK
ICNkZWZpbmUgcXF1aWNrbmV0d29ya3JlcXVlc3RfcF9oCiAKKyNpbmNsdWRlICJRdE5ldHdvcmtS
ZXF1ZXN0RGF0YS5oIgorI2luY2x1ZGUgIlJlZlB0ci5oIgogI2luY2x1ZGUgInF3ZWJraXRnbG9i
YWwuaCIKICNpbmNsdWRlIDxRT2JqZWN0PgogI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xh
cmF0aXZlbGlzdC5oPgpAQCAtMzEsMTcgKzMzLDE0IEBAIGNsYXNzIFFXRUJLSVRfRVhQT1JUIFFR
dWlja05ldHdvcmtSZXF1ZXN0IDogcHVibGljIFFPYmplY3QgewogICAgIFFfUFJPUEVSVFkoUVN0
cmluZyB1cmwgUkVBRCB1cmwpCiAKIHB1YmxpYzoKLSAgICBRUXVpY2tOZXR3b3JrUmVxdWVzdChR
T2JqZWN0KiBwYXJlbnQpCi0gICAgICAgIDogUU9iamVjdChwYXJlbnQpCi0gICAgewotICAgICAg
ICBRX0FTU0VSVChwYXJlbnQpOwotICAgIH0KKyAgICBRUXVpY2tOZXR3b3JrUmVxdWVzdChRT2Jq
ZWN0KiBwYXJlbnQpOwogCi0gICAgUVN0cmluZyB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsg
fQotICAgIHZvaWQgc2V0VXJsKGNvbnN0IFFTdHJpbmcmIHVybCkgeyBtX3VybCA9IHVybDsgfQor
ICAgIHZvaWQgc2V0TmV0d29ya1JlcXVlc3REYXRhKFdURjo6UGFzc1JlZlB0cjxXZWJLaXQ6OlF0
UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YT4gZGF0YSk7CisKKyAgICBRU3RyaW5nIHVybCgp
IGNvbnN0OwogCiBwcml2YXRlOgotICAgIFFTdHJpbmcgbV91cmw7CisgICAgV1RGOjpSZWZQdHI8
V2ViS2l0OjpRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE+IG1fbmV0d29ya1JlcXVlc3RE
YXRhOwogfTsKIAogUU1MX0RFQ0xBUkVfVFlQRShRUXVpY2tOZXR3b3JrUmVxdWVzdCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCmluZGV4
IDU1OTY3NTAuLmZmNzJkMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIldlYlBy
ZWZlcmVuY2VzLmgiCiAKICNpbmNsdWRlICJxcXVpY2tuZXR3b3JrcmVwbHlfcC5oIgorI2luY2x1
ZGUgInFxdWlja25ldHdvcmtyZXF1ZXN0X3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3Bf
cC5oIgogI2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcF9wLmgiCiAjaW5jbHVkZSAicXdlYmRvd25s
b2FkaXRlbV9wX3AuaCIKQEAgLTc4OCwxNSArNzg5LDE3IEBAIFFEZWNsYXJhdGl2ZUxpc3RQcm9w
ZXJ0eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4gUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6
c2NoCiAgICAgICAgICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzY2hlbWVEZWxlZ2F0
ZXNfQ2xlYXIpOwogfQogCi12b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6Omludm9rZUFw
cGxpY2F0aW9uU2NoZW1lSGFuZGxlcihQYXNzUmVmUHRyPFF0TmV0d29ya1JlcXVlc3REYXRhPiBy
ZXF1ZXN0KQordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjppbnZva2VBcHBsaWNhdGlv
blNjaGVtZUhhbmRsZXIoUGFzc1JlZlB0cjxRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE+
IHJlcXVlc3QpCiB7CisgICAgUmVmUHRyPFF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YT4g
cmVxID0gcmVxdWVzdDsKICAgICBjb25zdCBRT2JqZWN0TGlzdCBjaGlsZHJlbiA9IHNjaGVtZVBh
cmVudC0+Y2hpbGRyZW4oKTsKICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgY2hpbGRy
ZW4uY291bnQoKTsgaW5kZXgrKykgewogICAgICAgICBRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZSog
ZGVsZWdhdGUgPSBxb2JqZWN0X2Nhc3Q8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUqPihjaGlsZHJl
bi5hdChpbmRleCkpOwogICAgICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGlmICghZGVsZWdhdGUtPnNjaGVtZSgpLmNvbXBhcmUoUVN0cmluZyhyZXF1
ZXN0LT5tX3NjaGVtZSksIFF0OjpDYXNlSW5zZW5zaXRpdmUpKSB7Ci0gICAgICAgICAgICBkZWxl
Z2F0ZS0+cmVwbHkoKS0+c2V0TmV0d29ya1JlcXVlc3REYXRhKHJlcXVlc3QpOworICAgICAgICBp
ZiAoIWRlbGVnYXRlLT5zY2hlbWUoKS5jb21wYXJlKFFTdHJpbmcocmVxLT5kYXRhKCkubV9zY2hl
bWUpLCBRdDo6Q2FzZUluc2Vuc2l0aXZlKSkgeworICAgICAgICAgICAgZGVsZWdhdGUtPnJlcXVl
c3QoKS0+c2V0TmV0d29ya1JlcXVlc3REYXRhKHJlcSk7CisgICAgICAgICAgICBkZWxlZ2F0ZS0+
cmVwbHkoKS0+c2V0TmV0d29ya1JlcXVlc3REYXRhKHJlcSk7CiAgICAgICAgICAgICBlbWl0IGRl
bGVnYXRlLT5yZWNlaXZlZFJlcXVlc3QoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19w
LmgKaW5kZXggMTU1ZTk2MC4uMzBjOWNkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIFBs
YXRmb3JtV2ViVmlldzsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBRdE5ldHdvcmtS
ZXF1ZXN0RGF0YTsKK2NsYXNzIFF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YTsKIH0KIAog
bmFtZXNwYWNlIFdURiB7CkBAIC0yNDcsNyArMjQ3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBp
bnQgc2NoZW1lRGVsZWdhdGVzX0NvdW50KFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tV
cmxTY2hlbWVEZWxlZ2F0ZT4qKTsKICAgICBzdGF0aWMgdm9pZCBzY2hlbWVEZWxlZ2F0ZXNfQ2xl
YXIoUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiopOwog
ICAgIFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4gc2No
ZW1lRGVsZWdhdGVzKCk7Ci0gICAgdm9pZCBpbnZva2VBcHBsaWNhdGlvblNjaGVtZUhhbmRsZXIo
V1RGOjpQYXNzUmVmUHRyPFdlYktpdDo6UXROZXR3b3JrUmVxdWVzdERhdGE+KTsKKyAgICB2b2lk
IGludm9rZUFwcGxpY2F0aW9uU2NoZW1lSGFuZGxlcihXVEY6OlBhc3NSZWZQdHI8V2ViS2l0OjpR
dFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE+KTsKICAgICB2b2lkIHNlbmRBcHBsaWNhdGlv
blNjaGVtZVJlcGx5KFFRdWlja05ldHdvcmtSZXBseSopOwogCiBwdWJsaWMgUV9TTE9UUzoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA2OWNlOThiLi41Y2VkYzA1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xMDE3LDcgKzEw
MTcsNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fbWVkaWFWb2x1bWU7CiAKICNpZiBQTEFURk9S
TShRVCkKLSAgICBXVEY6Okhhc2hTZXQ8UmVmUHRyPFF0TmV0d29ya1JlcXVlc3REYXRhPiA+IG1f
YXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0czsKKyAgICBXVEY6Okhhc2hTZXQ8UmVmUHRyPFF0UmVm
Q291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YT4gPiBtX2FwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdHM7
CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFBhZ2VDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVu
dC5jcHAKaW5kZXggMGFkMTUyZC4uYmQ4MDhhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0UGFnZUNsaWVudC5jcHAKQEAgLTEwMCwxMSArMTAwLDExIEBAIHZvaWQgUXRQYWdl
Q2xpZW50OjpoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSogZG93bmxvYWQpCiAg
ICAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmdldChtX3dlYlZpZXcpLT5oYW5kbGVEb3dubG9hZFJl
cXVlc3QoZG93bmxvYWQpOwogfQogCi12b2lkIFF0UGFnZUNsaWVudDo6aGFuZGxlQXBwbGljYXRp
b25TY2hlbWVSZXF1ZXN0KFBhc3NSZWZQdHI8UXROZXR3b3JrUmVxdWVzdERhdGE+IHJlcXVlc3RE
YXRhKQordm9pZCBRdFBhZ2VDbGllbnQ6OmhhbmRsZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdChQ
YXNzUmVmUHRyPFF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEpCiB7
CiAgICAgaWYgKCFtX3dlYlZpZXcgfHwgIW1fd2ViVmlldy0+ZXhwZXJpbWVudGFsKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBtX3dlYlZpZXctPmV4cGVyaW1lbnRhbCgpLT5pbnZva2VBcHBsaWNh
dGlvblNjaGVtZUhhbmRsZXIocmVxdWVzdERhdGEuZ2V0KCkpOworICAgIG1fd2ViVmlldy0+ZXhw
ZXJpbWVudGFsKCktPmludm9rZUFwcGxpY2F0aW9uU2NoZW1lSGFuZGxlcihyZXF1ZXN0RGF0YSk7
CiB9CiAKIHZvaWQgUXRQYWdlQ2xpZW50OjpoYW5kbGVBdXRoZW50aWNhdGlvblJlcXVpcmVkUmVx
dWVzdChjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCBjb25zdCBTdHJpbmcmIHJlYWxtLCBjb25zdCBT
dHJpbmcmIHByZWZpbGxlZFVzZXJuYW1lLCBTdHJpbmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3
b3JkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVu
dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5oCmluZGV4IDE1
NzUxOGEuLmYwMTQwNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFBhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYWdlQ2xp
ZW50LmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWxh
dW5jaFByb2Nlc3MoKTsKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8RHJhd2luZ0FyZWFQcm94eT4g
Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVEb3dubG9h
ZFJlcXVlc3QoRG93bmxvYWRQcm94eSopOwotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVBcHBsaWNh
dGlvblNjaGVtZVJlcXVlc3QoUGFzc1JlZlB0cjxRdE5ldHdvcmtSZXF1ZXN0RGF0YT4pOworICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QoUGFzc1JlZlB0cjxR
dFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE+KTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
QXV0aGVudGljYXRpb25SZXF1aXJlZFJlcXVlc3QoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgY29u
c3QgU3RyaW5nJiByZWFsbSwgY29uc3QgU3RyaW5nJiBwcmVmaWxsZWRVc2VybmFtZSwgU3RyaW5n
JiB1c2VybmFtZSwgU3RyaW5nJiBwYXNzd29yZCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGxh
eVZpZXcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJQYWdl
UHJveHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQu
Y3BwCmluZGV4IGFjOWZkZTQuLmJmODZlZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9XZWJQYWdlUHJveHlRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcApAQCAtODcsMTcgKzg3LDE3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpyZWdpc3RlckFwcGxpY2F0aW9uU2NoZW1lKGNvbnN0IFN0cmluZyYgc2NoZW1lKQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVzb2x2ZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdChRdE5l
dHdvcmtSZXF1ZXN0RGF0YSByZXF1ZXN0KQogewotICAgIFJlZlB0cjxRdE5ldHdvcmtSZXF1ZXN0
RGF0YT4gcmVxdWVzdERhdGEgPSBhZG9wdFJlZihuZXcgUXROZXR3b3JrUmVxdWVzdERhdGEocmVx
dWVzdCkpOworICAgIFJlZlB0cjxRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE+IHJlcXVl
c3REYXRhID0gYWRvcHRSZWYobmV3IFF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YShyZXF1
ZXN0KSk7CiAgICAgbV9hcHBsaWNhdGlvblNjaGVtZVJlcXVlc3RzLmFkZChyZXF1ZXN0RGF0YSk7
CiAgICAgc3RhdGljX2Nhc3Q8UXRQYWdlQ2xpZW50Kj4obV9wYWdlQ2xpZW50KS0+aGFuZGxlQXBw
bGljYXRpb25TY2hlbWVSZXF1ZXN0KHJlcXVlc3REYXRhKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJv
eHk6OnNlbmRBcHBsaWNhdGlvblNjaGVtZVJlcGx5KGNvbnN0IFFRdWlja05ldHdvcmtSZXBseSog
cmVwbHkpCiB7Ci0gICAgUmVmUHRyPFF0TmV0d29ya1JlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSA9
IHJlcGx5LT5uZXR3b3JrUmVxdWVzdERhdGEoKTsKKyAgICBSZWZQdHI8UXRSZWZDb3VudGVkTmV0
d29ya1JlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSA9IHJlcGx5LT5uZXR3b3JrUmVxdWVzdERhdGEo
KTsKICAgICBpZiAobV9hcHBsaWNhdGlvblNjaGVtZVJlcXVlc3RzLmNvbnRhaW5zKHJlcXVlc3RE
YXRhKSkgewotICAgICAgICBSZWZQdHI8UXROZXR3b3JrUmVwbHlEYXRhPiByZXBseURhdGEgPSBy
ZXBseS0+bmV0d29ya1JlcGx5RGF0YSgpOwotICAgICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoKnJlcGx5RGF0YSksIHBhZ2VJRCgp
KTsKKyAgICAgICAgUmVmUHRyPFF0UmVmQ291bnRlZE5ldHdvcmtSZXBseURhdGE+IHJlcGx5RGF0
YSA9IHJlcGx5LT5uZXR3b3JrUmVwbHlEYXRhKCk7CisgICAgICAgIHByb2Nlc3MoKS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6QXBwbGljYXRpb25TY2hlbWVSZXBseShyZXBseURhdGEtPmRhdGEo
KSksIHBhZ2VJRCgpKTsKICAgICAgICAgbV9hcHBsaWNhdGlvblNjaGVtZVJlcXVlc3RzLnJlbW92
ZShyZXF1ZXN0RGF0YSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L3F0L1F0TmV0d29ya1JlcGx5LmNwcAppbmRleCBmZDBmNWNiLi45OTA0MTEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1F0TmV0d29ya1JlcGx5LmNwcApAQCAtNTAsNiAr
NTAsOCBAQCBRdE5ldHdvcmtSZXBseTo6UXROZXR3b3JrUmVwbHkoY29uc3QgUU5ldHdvcmtSZXF1
ZXN0JiByZXEsIFF0TmV0d29ya0FjY2Vzc01hbmFnZQogCiB2b2lkIFF0TmV0d29ya1JlcGx5Ojpz
ZXREYXRhKGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBoYW5kbGUsIHFpbnQ2NCBkYXRhU2l6
ZSkKIHsKKyAgICBpZiAoaGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CiAgICAgbV9z
aGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6
UmVhZE9ubHkpOwogICAgIGlmICghbV9zaGFyZWRNZW1vcnkpCiAgICAgICAgIHJldHVybjsKQEAg
LTgyLDYgKzg0LDkgQEAgdm9pZCBRdE5ldHdvcmtSZXBseTo6c2V0UmVwbHlEYXRhKGNvbnN0IFF0
TmV0d29ya1JlcGx5RGF0YSYgcmVwbHlEYXRhKQogCiBxaW50NjQgUXROZXR3b3JrUmVwbHk6OnJl
YWREYXRhKGNoYXIqIGRhdGEsIHFpbnQ2NCBtYXhsZW4pCiB7CisgICAgaWYgKCFtX3NoYXJlZE1l
bW9yeSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBxaW50NjQgYnl0ZXNSZWFkID0gbWF4bGVu
IDwgbV9ieXRlc0F2YWlsYWJsZSA/IG1heGxlbiA6IG1fYnl0ZXNBdmFpbGFibGU7CiAgICAgaWYg
KHFNZW1Db3B5KGRhdGEsIHN0YXRpY19jYXN0PGNoYXIqPihtX3NoYXJlZE1lbW9yeS0+ZGF0YSgp
KSArIG1fc2hhcmVkTWVtb3J5U2l6ZSAtIG1fYnl0ZXNBdmFpbGFibGUsIGJ5dGVzUmVhZCkpIHsK
ICAgICAgICAgbV9ieXRlc0F2YWlsYWJsZSAtPSBieXRlc1JlYWQ7Cg==
</data>
<flag name="review"
          id="124613"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123650</attachid>
            <date>2012-01-23 16:24:47 -0800</date>
            <delta_ts>2012-01-24 02:04:12 -0800</delta_ts>
            <desc>patch for review. - updated according to previous comments.</desc>
            <filename>76700_20120124-011129.patch</filename>
            <type>text/plain</type>
            <size>26291</size>
            <attacher name="Zeno Albisser">zeno</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBhNjFlYmI2Li40Zjc1OGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMg
QEAKKzIwMTItMDEtMjMgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgW1F0XVtXSzJdIEFwcGxpY2F0aW9uIFVSTCBzY2hlbWVzIGNhdXNlIGFzc2VydHMgd2hlbiB1
c2luZyBkZWJ1Zy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc2NzAwCisKKyAgICAgICAgSW5zdGFuY2VzIG9mIFF0TmV0d29ya1JlcXVlc3REYXRhIC8g
UXROZXR3b3JrUmVwbHlEYXRhIGFyZSBtZWFudAorICAgICAgICB0byBiZSB1c2VkIGZvciB0cmFu
c2ZlcmluZyBkYXRhIG92ZXIgSVBDLiBUbyBhbGxvdyB0cmFuc2ZlcnJpbmcKKyAgICAgICAgaW5z
dGFuY2VzIG9mIHRoZXNlIGNsYXNzZXMgb3ZlciBJUEMgdGhleSBuZWVkIHRvIGJlIGNvcHlhYmxl
LAorICAgICAgICBhbmQgaXQgbXVzdCBiZSBwb3NzaWJsZSB0byBjcmVhdGUgc3VjaCBpbnN0YW5j
ZXMgb24gdGhlIHN0YWNrLgorICAgICAgICBCZWNhdXNlIGNsYXNzZXMgdGhhdCBpbmhlcml0IGZy
b20gUmVmQ291bnRlZCBhbHdheXMgbmVlZCB0byBiZQorICAgICAgICB1c2VkIGluIGNvbm5lY3Rp
b24gd2l0aCBSZWZQdHIsIFF0TmV0d29ya1JlcXVlc3REYXRhIGFuZAorICAgICAgICBRdE5ldHdv
cmtSZXBseURhdGEgY2Fubm90IGluaGVyaXQgZGlyZWN0bHkgZnJvbSBSZWZDb3VudGVkLgorCisg
ICAgICAgIERlbGV0aW5nIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gUmVmQ291bnRlZCwg
d2l0aG91dAorICAgICAgICB0aGUgcHJvcGVyIHNlcXVlbmNlIG9mIHJlZigpL2RlcmVmKCkgYmVp
bmcgY2FsbGVkIGJ5IGl0J3MKKyAgICAgICAgUmVmUHRyLCBjYXVzZXMgYXNzZXJ0cyB3aGVuIHJ1
bm5pbmcgYSBkZWJ1ZyB2ZXJzaW9uLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5oOgorICAgICAg
ICAoV2ViS2l0OjpRdFJlZkNvdW50ZWROZXR3b3JrUmVwbHlEYXRhOjpkYXRhKToKKyAgICAgICAg
KiBTaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpR
dFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE6OlF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0
RGF0YSk6CisgICAgICAgICogU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRhLmg6CisgICAg
ICAgIChXZWJLaXQ6OlF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YTo6ZGF0YSk6CisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdv
cmtyZXBseS5jcHA6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OlFRdWlja05ldHdvcmtS
ZXBseSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OmNvbnRlbnRUeXBlKToKKyAgICAg
ICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29udGVudFR5cGUpOgorICAgICAgICAoUVF1aWNr
TmV0d29ya1JlcGx5OjpvcGVyYXRpb24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5Ojpz
ZXRPcGVyYXRpb24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5Ojpjb250ZW50RGlzcG9z
aXRpb24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb250ZW50RGlzcG9zaXRp
b24pOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcGx5Ojpsb2NhdGlvbik6CisgICAgICAgIChR
UXVpY2tOZXR3b3JrUmVwbHk6OnNldExvY2F0aW9uKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtS
ZXBseTo6bGFzdE1vZGlmaWVkKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0TGFz
dE1vZGlmaWVkKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6Y29va2llKToKKyAgICAg
ICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29va2llKToKKyAgICAgICAgKFFRdWlja05ldHdv
cmtSZXBseTo6dXNlckFnZW50KToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2V0VXNl
ckFnZW50KToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6c2VydmVyKToKKyAgICAgICAg
KFFRdWlja05ldHdvcmtSZXBseTo6c2V0U2VydmVyKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtS
ZXBseTo6ZGF0YSk6CisgICAgICAgIChRUXVpY2tOZXR3b3JrUmVwbHk6OnNldERhdGEpOgorICAg
ICAgICAoUVF1aWNrTmV0d29ya1JlcGx5OjpzZW5kKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtS
ZXBseTo6bmV0d29ya1JlcXVlc3REYXRhKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6
c2V0TmV0d29ya1JlcXVlc3REYXRhKToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXBseTo6bmV0
d29ya1JlcGx5RGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3Jr
cmVwbHlfcC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcXVl
c3QuY3BwOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcXVlc3Q6OlFRdWlja05ldHdvcmtSZXF1
ZXN0KToKKyAgICAgICAgKFFRdWlja05ldHdvcmtSZXF1ZXN0OjpzZXROZXR3b3JrUmVxdWVzdERh
dGEpOgorICAgICAgICAoUVF1aWNrTmV0d29ya1JlcXVlc3Q6OnVybCk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVxdWVzdF9wLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlZpZXdFeHBl
cmltZW50YWw6Omludm9rZUFwcGxpY2F0aW9uU2NoZW1lSGFuZGxlcik6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5jcHA6Cisg
ICAgICAgIChRdFBhZ2VDbGllbnQ6OmhhbmRsZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9XZWJQYWdlUHJveHlRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
cmVzb2x2ZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6c2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvcXQvUXROZXR3b3JrUmVwbHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpRdE5ldHdvcmtSZXBs
eTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlF0TmV0d29ya1JlcGx5OjpyZWFkRGF0YSk6
CisKIDIwMTItMDEtMjAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDU0OTcuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRhLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVwbHlEYXRhLmgKaW5kZXggZDc0YjQyMi4uYzM5
YTQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5
RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9RdE5ldHdvcmtSZXBseURhdGEu
aApAQCAtMzksOSArMzksNyBAQCBjbGFzcyBBcmd1bWVudERlY29kZXI7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1zdHJ1Y3QgUXROZXR3b3JrUmVwbHlEYXRhIDogcHVibGljIFdURjo6UmVmQ291
bnRlZDxRdE5ldHdvcmtSZXBseURhdGE+IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShRdE5l
dHdvcmtSZXBseURhdGEpOwotcHVibGljOgorc3RydWN0IFF0TmV0d29ya1JlcGx5RGF0YSB7CiAg
ICAgUXROZXR3b3JrUmVwbHlEYXRhKCk7CiAKICAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1
bWVudEVuY29kZXIqKSBjb25zdDsKQEAgLTYzLDYgKzYxLDEzIEBAIHB1YmxpYzoKICAgICBTaGFy
ZWRNZW1vcnk6OkhhbmRsZSBtX2RhdGFIYW5kbGU7CiB9OwogCitzdHJ1Y3QgUXRSZWZDb3VudGVk
TmV0d29ya1JlcGx5RGF0YSA6IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWQ8UXRSZWZDb3VudGVkTmV0
d29ya1JlcGx5RGF0YT4geworICAgIFF0TmV0d29ya1JlcGx5RGF0YSYgZGF0YSgpIHsgcmV0dXJu
IG1fZGF0YTsgfQorcHJpdmF0ZToKKyAgICBRdE5ldHdvcmtSZXBseURhdGEgbV9kYXRhOworfTsK
KworCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIFF0TmV0d29ya1JlcGx5RGF0
YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXROZXR3b3JrUmVxdWVz
dERhdGEuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRh
LmNwcAppbmRleCBjNmVhNmUzLi5mMjEwNjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9xdC9RdE5ldHdvcmtSZXF1ZXN0RGF0YS5jcHAKQEAgLTM2LDYgKzM2LDEwIEBACiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCitRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE6OlF0UmVm
Q291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YShjb25zdCBRdE5ldHdvcmtSZXF1ZXN0RGF0YSYgZGF0
YSkKKyAgICA6IG1fZGF0YShkYXRhKQoreyB9CisKIFF0TmV0d29ya1JlcXVlc3REYXRhOjpRdE5l
dHdvcmtSZXF1ZXN0RGF0YSgpCiB7IH0KIApAQCAtNDYsMTQgKzUwLDYgQEAgUXROZXR3b3JrUmVx
dWVzdERhdGE6OlF0TmV0d29ya1JlcXVlc3REYXRhKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVx
dWVzdCwgUU5ldHcKICAgICBtX3JlcGx5VXVpZCA9IFFVdWlkOjpjcmVhdGVVdWlkKCkudG9TdHJp
bmcoKTsKIH0KIAotUXROZXR3b3JrUmVxdWVzdERhdGE6OlF0TmV0d29ya1JlcXVlc3REYXRhKGNv
bnN0IFF0TmV0d29ya1JlcXVlc3REYXRhJiBvcmlnaW4pCi0gICAgOiBSZWZDb3VudGVkPFF0TmV0
d29ya1JlcXVlc3REYXRhPigpLAotICAgIG1fc2NoZW1lKG9yaWdpbi5tX3NjaGVtZSksCi0gICAg
bV91cmxTdHJpbmcob3JpZ2luLm1fdXJsU3RyaW5nKSwKLSAgICBtX3JlcGx5VXVpZChvcmlnaW4u
bV9yZXBseVV1aWQpCi17Ci19Ci0KIHZvaWQgUXROZXR3b3JrUmVxdWVzdERhdGE6OmVuY29kZShD
b3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgZW5jb2Rlci0+
ZW5jb2RlKG1fc2NoZW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9R
dE5ldHdvcmtSZXF1ZXN0RGF0YS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29y
a1JlcXVlc3REYXRhLmgKaW5kZXggMTU2Nzk2NC4uMDgyZDQ5OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRhLmgKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL3F0L1F0TmV0d29ya1JlcXVlc3REYXRhLmgKQEAgLTM5LDExICszOSw5IEBA
IGNsYXNzIFFOZXR3b3JrUmVwbHk7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdHJ1Y3QgUXRO
ZXR3b3JrUmVxdWVzdERhdGEgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkPFF0TmV0d29ya1JlcXVl
c3REYXRhPiB7CitzdHJ1Y3QgUXROZXR3b3JrUmVxdWVzdERhdGEgewogICAgIFF0TmV0d29ya1Jl
cXVlc3REYXRhKCk7CiAgICAgUXROZXR3b3JrUmVxdWVzdERhdGEoY29uc3QgUU5ldHdvcmtSZXF1
ZXN0JiwgUU5ldHdvcmtSZXBseSopOwotICAgIFF0TmV0d29ya1JlcXVlc3REYXRhKGNvbnN0IFF0
TmV0d29ya1JlcXVlc3REYXRhJik7Ci0KICAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVu
dEVuY29kZXIqKSBjb25zdDsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKiwgUXROZXR3b3JrUmVxdWVzdERhdGEmKTsKIApAQCAtNTIsNiArNTAsMTMgQEAg
c3RydWN0IFF0TmV0d29ya1JlcXVlc3REYXRhIDogcHVibGljIFdURjo6UmVmQ291bnRlZDxRdE5l
dHdvcmtSZXF1ZXN0RGF0YT4gewogICAgIFN0cmluZyBtX3JlcGx5VXVpZDsKIH07CiAKK3N0cnVj
dCBRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGEgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVk
PFF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YT4geworICAgIFF0UmVmQ291bnRlZE5ldHdv
cmtSZXF1ZXN0RGF0YShjb25zdCBRdE5ldHdvcmtSZXF1ZXN0RGF0YSYpOworICAgIFF0TmV0d29y
a1JlcXVlc3REYXRhJiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9Citwcml2YXRlOgorICAgIFF0
TmV0d29ya1JlcXVlc3REYXRhIG1fZGF0YTsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
CiAjZW5kaWYgLy8gUXROZXR3b3JrUmVxdWVzdERhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggNWVlMjc5
Ny4uNjcwNGNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC01MDcsNiArNTA3LDcgQEAgU09VUkNFUyArPSBc
CiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBcCiAgICAgVUlQcm9jZXNz
L0FQSS9xdC9xd2ViaWNvbmltYWdlcHJvdmlkZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0
L3FxdWlja25ldHdvcmtyZXBseS5jcHAgXAorICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0
d29ya3JlcXVlc3QuY3BwIFwKICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRl
bGVnYXRlLmNwcCBcCiAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2VicHJlZmVyZW5jZXMuY3BwIFwK
ICAgICBVSVByb2Nlc3MvQVBJL3F0L3F3ZWJ2aWV3cG9ydGluZm8uY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5LmNwcApp
bmRleCA0ZTg4MTAzLi5jNjk0ODZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVwbHkuY3BwCkBAIC0zMCwxMjggKzMwLDEyNyBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBRUXVpY2tOZXR3b3JrUmVwbHk6OlFRdWlja05l
dHdvcmtSZXBseShRT2JqZWN0KiBwYXJlbnQpCiAgICAgOiBRT2JqZWN0KHBhcmVudCkKLSAgICAs
IG1fbmV0d29ya1JlcGx5RGF0YShhZG9wdFJlZihuZXcgV2ViS2l0OjpRdE5ldHdvcmtSZXBseURh
dGEpKQorICAgICwgbV9uZXR3b3JrUmVwbHlEYXRhKGFkb3B0UmVmKG5ldyBXZWJLaXQ6OlF0UmVm
Q291bnRlZE5ldHdvcmtSZXBseURhdGEpKQorICAgICwgbV9kYXRhTGVuZ3RoKDApCiB7CiAgICAg
UV9BU1NFUlQocGFyZW50KTsKIH0KIAogUVN0cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6OmNvbnRl
bnRUeXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2NvbnRl
bnRUeXBlOworICAgIHJldHVybiBtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX2NvbnRlbnRU
eXBlOwogfQogCiB2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29udGVudFR5cGUoY29uc3Qg
UVN0cmluZyYgY29udGVudFR5cGUpCiB7Ci0gICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2NvbnRl
bnRUeXBlID0gY29udGVudFR5cGU7CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV9j
b250ZW50VHlwZSA9IGNvbnRlbnRUeXBlOwogfQogCiBRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9w
ZXJhdGlvbiBRUXVpY2tOZXR3b3JrUmVwbHk6Om9wZXJhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9vcGVyYXRpb247CisgICAgcmV0dXJuIG1fbmV0d29y
a1JlcGx5RGF0YS0+ZGF0YSgpLm1fb3BlcmF0aW9uOwogfQogCiB2b2lkIFFRdWlja05ldHdvcmtS
ZXBseTo6c2V0T3BlcmF0aW9uKFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0aW9uIG9wZXJh
dGlvbikKIHsKLSAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fb3BlcmF0aW9uID0gb3BlcmF0aW9u
OworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1fb3BlcmF0aW9uID0gb3BlcmF0aW9u
OwogfQogCiBRU3RyaW5nIFFRdWlja05ldHdvcmtSZXBseTo6Y29udGVudERpc3Bvc2l0aW9uKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5tX2NvbnRlbnREaXNwb3Np
dGlvbjsKKyAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV9jb250ZW50RGlz
cG9zaXRpb247CiB9CiAKIHZvaWQgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXRDb250ZW50RGlzcG9z
aXRpb24oY29uc3QgUVN0cmluZyYgZGlzcG9zaXRpb24pCiB7Ci0gICAgbV9uZXR3b3JrUmVwbHlE
YXRhLT5tX2NvbnRlbnREaXNwb3NpdGlvbiA9IGRpc3Bvc2l0aW9uOworICAgIG1fbmV0d29ya1Jl
cGx5RGF0YS0+ZGF0YSgpLm1fY29udGVudERpc3Bvc2l0aW9uID0gZGlzcG9zaXRpb247CiB9CiAK
IFFTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5Ojpsb2NhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+bV9sb2NhdGlvbjsKKyAgICByZXR1cm4gbV9uZXR3b3Jr
UmVwbHlEYXRhLT5kYXRhKCkubV9sb2NhdGlvbjsKIH0KIAogdm9pZCBRUXVpY2tOZXR3b3JrUmVw
bHk6OnNldExvY2F0aW9uKGNvbnN0IFFTdHJpbmcmIGxvY2F0aW9uKQogewotICAgIG1fbmV0d29y
a1JlcGx5RGF0YS0+bV9sb2NhdGlvbiA9IGxvY2F0aW9uOworICAgIG1fbmV0d29ya1JlcGx5RGF0
YS0+ZGF0YSgpLm1fbG9jYXRpb24gPSBsb2NhdGlvbjsKIH0KIAogUVN0cmluZyBRUXVpY2tOZXR3
b3JrUmVwbHk6Omxhc3RNb2RpZmllZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFFEYXRlVGltZTo6
ZnJvbU1TZWNzU2luY2VFcG9jaChtX25ldHdvcmtSZXBseURhdGEtPm1fbGFzdE1vZGlmaWVkKS50
b1N0cmluZyhRdDo6SVNPRGF0ZSk7CisgICAgcmV0dXJuIFFEYXRlVGltZTo6ZnJvbU1TZWNzU2lu
Y2VFcG9jaChtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX2xhc3RNb2RpZmllZCkudG9TdHJp
bmcoUXQ6OklTT0RhdGUpOwogfQogCiB2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0TGFzdE1v
ZGlmaWVkKGNvbnN0IFFTdHJpbmcmIGxhc3RNb2RpZmllZCkKIHsKLSAgICBtX25ldHdvcmtSZXBs
eURhdGEtPm1fbGFzdE1vZGlmaWVkID0gUURhdGVUaW1lOjpmcm9tU3RyaW5nKGxhc3RNb2RpZmll
ZCwgUXQ6OklTT0RhdGUpLnRvTVNlY3NTaW5jZUVwb2NoKCk7CisgICAgbV9uZXR3b3JrUmVwbHlE
YXRhLT5kYXRhKCkubV9sYXN0TW9kaWZpZWQgPSBRRGF0ZVRpbWU6OmZyb21TdHJpbmcobGFzdE1v
ZGlmaWVkLCBRdDo6SVNPRGF0ZSkudG9NU2Vjc1NpbmNlRXBvY2goKTsKIH0KIAogUVN0cmluZyBR
UXVpY2tOZXR3b3JrUmVwbHk6OmNvb2tpZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbmV0d29y
a1JlcGx5RGF0YS0+bV9jb29raWU7CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0
YSgpLm1fY29va2llOwogfQogCiB2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0Q29va2llKGNv
bnN0IFFTdHJpbmcmIGNvb2tpZSkKIHsKLSAgICBtX25ldHdvcmtSZXBseURhdGEtPm1fY29va2ll
ID0gY29va2llOworICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+ZGF0YSgpLm1fY29va2llID0gY29v
a2llOwogfQogCiBRU3RyaW5nIFFRdWlja05ldHdvcmtSZXBseTo6dXNlckFnZW50KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5tX3VzZXJBZ2VudDsKKyAgICByZXR1
cm4gbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV91c2VyQWdlbnQ7CiB9CiAKIHZvaWQgUVF1
aWNrTmV0d29ya1JlcGx5OjpzZXRVc2VyQWdlbnQoY29uc3QgUVN0cmluZyYgdXNlckFnZW50KQog
ewotICAgIG1fbmV0d29ya1JlcGx5RGF0YS0+bV91c2VyQWdlbnQgPSB1c2VyQWdlbnQ7CisgICAg
bV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRhKCkubV91c2VyQWdlbnQgPSB1c2VyQWdlbnQ7CiB9CiAK
IFFTdHJpbmcgUVF1aWNrTmV0d29ya1JlcGx5OjpzZXJ2ZXIoKSBjb25zdAogewotICAgIHJldHVy
biBtX25ldHdvcmtSZXBseURhdGEtPm1fc2VydmVyOworICAgIHJldHVybiBtX25ldHdvcmtSZXBs
eURhdGEtPmRhdGEoKS5tX3NlcnZlcjsKIH0KIAogdm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNl
dFNlcnZlcihjb25zdCBRU3RyaW5nJiBzZXJ2ZXIpCiB7Ci0gICAgbV9uZXR3b3JrUmVwbHlEYXRh
LT5tX3NlcnZlciA9IHNlcnZlcjsKKyAgICBtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX3Nl
cnZlciA9IHNlcnZlcjsKIH0KIAogUVN0cmluZyBRUXVpY2tOZXR3b3JrUmVwbHk6OmRhdGEoKSBj
b25zdAogewotICAgIGlmIChtX25ldHdvcmtSZXBseURhdGEtPm1fZGF0YUhhbmRsZS5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKLSAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBz
bSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKG1fbmV0d29ya1JlcGx5RGF0YS0+bV9kYXRhSGFuZGxl
LCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKLSAgICBpZiAoIXNtKQorICAgIGlmICghbV9zaGFy
ZWRNZW1vcnkpCiAgICAgICAgIHJldHVybiBRU3RyaW5nKCk7CiAKLSAgICB1aW50NjRfdCBzdHJp
bmdMZW5ndGggPSBtX25ldHdvcmtSZXBseURhdGEtPm1fY29udGVudExlbmd0aCAvIHNpemVvZihV
Q2hhcik7Ci0gICAgcmV0dXJuIFFTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+
KHNtLT5kYXRhKCkpLCBzdHJpbmdMZW5ndGgpOworICAgIHVpbnQ2NF90IHN0cmluZ0xlbmd0aCA9
IG1fZGF0YUxlbmd0aCAvIHNpemVvZihRQ2hhcik7CisgICAgcmV0dXJuIFFTdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KG1fc2hhcmVkTWVtb3J5LT5kYXRhKCkpLCBzdHJpbmdM
ZW5ndGgpOwogfQogCiB2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2V0RGF0YShjb25zdCBRU3Ry
aW5nJiBkYXRhKQogewotICAgIC8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBzZXZlcmFs
IHRpbWVzLiBJbiB0aGlzIGNhc2UgdGhlIHByZXZpb3VzIFNoYXJlZE1lbW9yeSBoYW5kbGVzCi0g
ICAgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBhbmQgdGhlIHByZXZpb3VzbHkgYWxsb2NhdGVkIFNo
YXJlZE1lbW9yeSB3aWxsIGRpZSB3aXRoIHRoZSBsYXN0IGhhbmRsZS4KLSAgICBtX25ldHdvcmtS
ZXBseURhdGEtPm1fY29udGVudExlbmd0aCA9IDA7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBjYW4g
YmUgY2FsbGVkIHNldmVyYWwgdGltZXMuIEluIHRoaXMgY2FzZSB0aGUgcHJldmlvdXNseSBhbGxv
Y2F0ZWQgU2hhcmVkTWVtb3J5CisgICAgLy8gd2lsbCBiZSByZWxlYXNlZCBhdXRvbWF0aWNhbGx5
IGFuZCBuZXcgbWVtb3J5IHdpbGwgYmUgYWxsb2NhdGVkLgorICAgIG1fZGF0YUxlbmd0aCA9IDA7
CiAKICAgICBpZiAoZGF0YS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IFVD
aGFyKiB1Y2hhckRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oZGF0YS5jb25z
dERhdGEoKSk7Ci0gICAgdWludDY0X3Qgc21MZW5ndGggPSBzaXplb2YoVUNoYXIpICogZGF0YS5s
ZW5ndGgoKTsKIAotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNtID0gU2hhcmVkTWVtb3J5Ojpj
cmVhdGUoc21MZW5ndGgpOwotICAgIGlmICghc20pCisgICAgdWludDY0X3Qgc21MZW5ndGggPSBz
aXplb2YoUUNoYXIpICogZGF0YS5sZW5ndGgoKTsKKyAgICBtX3NoYXJlZE1lbW9yeSA9IFNoYXJl
ZE1lbW9yeTo6Y3JlYXRlKHNtTGVuZ3RoKTsKKyAgICBpZiAoIW1fc2hhcmVkTWVtb3J5KQogICAg
ICAgICByZXR1cm47CisKICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGVkIHNoYXJlZCBt
ZW1vcnkgY2FuIGJlIGJpZ2dlciB0aGFuIHJlcXVlc3RlZC4KICAgICAvLyBVc3VhbGx5IHRoZSBz
aXplIHdpbGwgYmUgcm91bmRlZCB1cCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiBhIHBhZ2Ugc2l6
ZS4KLSAgICBtZW1jcHkoc20tPmRhdGEoKSwgdWNoYXJEYXRhLCBzbUxlbmd0aCk7Ci0KLSAgICBp
ZiAoIXNtLT5jcmVhdGVIYW5kbGUobV9uZXR3b3JrUmVwbHlEYXRhLT5tX2RhdGFIYW5kbGUsIFNo
YXJlZE1lbW9yeTo6UmVhZE9ubHkpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9uZXR3b3JrUmVw
bHlEYXRhLT5tX2NvbnRlbnRMZW5ndGggPSBzbUxlbmd0aDsKKyAgICBtZW1jcHkobV9zaGFyZWRN
ZW1vcnktPmRhdGEoKSwgZGF0YS5jb25zdERhdGEoKSwgc21MZW5ndGgpOworICAgIG1fZGF0YUxl
bmd0aCA9IHNtTGVuZ3RoOwogfQogCiB2b2lkIFFRdWlja05ldHdvcmtSZXBseTo6c2VuZCgpCiB7
CisgICAgaWYgKCFtX3NoYXJlZE1lbW9yeSB8fCAhbV9zaGFyZWRNZW1vcnktPmNyZWF0ZUhhbmRs
ZShtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX2RhdGFIYW5kbGUsIFNoYXJlZE1lbW9yeTo6
UmVhZE9ubHkpKQorICAgICAgICByZXR1cm47CisgICAgbV9uZXR3b3JrUmVwbHlEYXRhLT5kYXRh
KCkubV9jb250ZW50TGVuZ3RoID0gbV9kYXRhTGVuZ3RoOworCiAgICAgUU9iamVjdCogc2NoZW1l
UGFyZW50ID0gcGFyZW50KCktPnBhcmVudCgpOwogICAgIGlmICghc2NoZW1lUGFyZW50KQogICAg
ICAgICByZXR1cm47CkBAIC0xNTksMjIgKzE1OCwyNiBAQCB2b2lkIFFRdWlja05ldHdvcmtSZXBs
eTo6c2VuZCgpCiAgICAgaWYgKCF3ZWJWaWV3RXhwZXJpbWVudGFsKQogICAgICAgICByZXR1cm47
CiAgICAgd2ViVmlld0V4cGVyaW1lbnRhbC0+c2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkodGhp
cyk7CisKKyAgICAvLyBBZnRlciBzZW5kaW5nIHRoZSByZXBseSBkYXRhLCB3ZSBoYXZlIHRvIHJl
aW5pdGlhbGl6ZSB0aGUgbV9uZXR3b3JrUmVwbHlEYXRhLAorICAgIC8vIHRvIG1ha2Ugc3VyZSB3
ZSBoYXZlIGEgZnJlc2ggU2hhcmVzTWVtb3J5OjpIYW5kbGUuCisgICAgbV9uZXR3b3JrUmVwbHlE
YXRhID0gYWRvcHRSZWYobmV3IFdlYktpdDo6UXRSZWZDb3VudGVkTmV0d29ya1JlcGx5RGF0YSk7
CiB9CiAKLVdURjo6UmVmUHRyPFdlYktpdDo6UXROZXR3b3JrUmVxdWVzdERhdGE+IFFRdWlja05l
dHdvcmtSZXBseTo6bmV0d29ya1JlcXVlc3REYXRhKCkgY29uc3QKK1dlYktpdDo6UXRSZWZDb3Vu
dGVkTmV0d29ya1JlcXVlc3REYXRhKiBRUXVpY2tOZXR3b3JrUmVwbHk6Om5ldHdvcmtSZXF1ZXN0
RGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbmV0d29ya1JlcXVlc3REYXRhOworICAgIHJl
dHVybiBtX25ldHdvcmtSZXF1ZXN0RGF0YS5nZXQoKTsKIH0KIAotdm9pZCBRUXVpY2tOZXR3b3Jr
UmVwbHk6OnNldE5ldHdvcmtSZXF1ZXN0RGF0YShXVEY6OlJlZlB0cjxXZWJLaXQ6OlF0TmV0d29y
a1JlcXVlc3REYXRhPiBkYXRhKQordm9pZCBRUXVpY2tOZXR3b3JrUmVwbHk6OnNldE5ldHdvcmtS
ZXF1ZXN0RGF0YShXVEY6OlBhc3NSZWZQdHI8V2ViS2l0OjpRdFJlZkNvdW50ZWROZXR3b3JrUmVx
dWVzdERhdGE+IGRhdGEpCiB7CiAgICAgbV9uZXR3b3JrUmVxdWVzdERhdGEgPSBkYXRhOwotICAg
IG1fbmV0d29ya1JlcGx5RGF0YS0+bV9yZXBseVV1aWQgPSBkYXRhLT5tX3JlcGx5VXVpZDsKKyAg
ICBtX25ldHdvcmtSZXBseURhdGEtPmRhdGEoKS5tX3JlcGx5VXVpZCA9IG1fbmV0d29ya1JlcXVl
c3REYXRhLT5kYXRhKCkubV9yZXBseVV1aWQ7CiB9CiAKLVdURjo6UmVmUHRyPFdlYktpdDo6UXRO
ZXR3b3JrUmVwbHlEYXRhPiBRUXVpY2tOZXR3b3JrUmVwbHk6Om5ldHdvcmtSZXBseURhdGEoKSBj
b25zdAorV2ViS2l0OjpRdFJlZkNvdW50ZWROZXR3b3JrUmVwbHlEYXRhKiBRUXVpY2tOZXR3b3Jr
UmVwbHk6Om5ldHdvcmtSZXBseURhdGEoKSBjb25zdAogewotICAgIHJldHVybiBtX25ldHdvcmtS
ZXBseURhdGE7CisgICAgcmV0dXJuIG1fbmV0d29ya1JlcGx5RGF0YS5nZXQoKTsKIH0KIAogI2lu
Y2x1ZGUgIm1vY19xcXVpY2tuZXR3b3JrcmVwbHlfcC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseV9wLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXBseV9wLmgKaW5kZXggZmZl
NDVmMy4uNTllYjdmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2tuZXR3b3JrcmVwbHlfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrbmV0d29ya3JlcGx5X3AuaApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVk
ZSAiUXROZXR3b3JrUmVwbHlEYXRhLmgiCiAjaW5jbHVkZSAiUXROZXR3b3JrUmVxdWVzdERhdGEu
aCIKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgi
CiAjaW5jbHVkZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgogI2luY2x1ZGUgPFFPYmplY3Q+CkBA
IC01NywxNiArNTgsMTggQEAgcHVibGljOgogICAgIFFTdHJpbmcgZGF0YSgpIGNvbnN0OwogICAg
IHZvaWQgc2V0RGF0YShjb25zdCBRU3RyaW5nJiBkYXRhKTsKIAotICAgIFdURjo6UmVmUHRyPFdl
YktpdDo6UXROZXR3b3JrUmVxdWVzdERhdGE+IG5ldHdvcmtSZXF1ZXN0RGF0YSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0TmV0d29ya1JlcXVlc3REYXRhKFdURjo6UmVmUHRyPFdlYktpdDo6UXROZXR3
b3JrUmVxdWVzdERhdGE+IGRhdGEpOwotICAgIFdURjo6UmVmUHRyPFdlYktpdDo6UXROZXR3b3Jr
UmVwbHlEYXRhPiBuZXR3b3JrUmVwbHlEYXRhKCkgY29uc3Q7CisgICAgV2ViS2l0OjpRdFJlZkNv
dW50ZWROZXR3b3JrUmVxdWVzdERhdGEqIG5ldHdvcmtSZXF1ZXN0RGF0YSgpIGNvbnN0OworICAg
IHZvaWQgc2V0TmV0d29ya1JlcXVlc3REYXRhKFdURjo6UGFzc1JlZlB0cjxXZWJLaXQ6OlF0UmVm
Q291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YT4gZGF0YSk7CisgICAgV2ViS2l0OjpRdFJlZkNvdW50
ZWROZXR3b3JrUmVwbHlEYXRhKiBuZXR3b3JrUmVwbHlEYXRhKCkgY29uc3Q7CiAKIHB1YmxpYyBR
X1NMT1RTOgogICAgIHZvaWQgc2VuZCgpOwogCiBwcml2YXRlOgotICAgIFdURjo6UmVmUHRyPFdl
YktpdDo6UXROZXR3b3JrUmVxdWVzdERhdGE+IG1fbmV0d29ya1JlcXVlc3REYXRhOwotICAgIFdU
Rjo6UmVmUHRyPFdlYktpdDo6UXROZXR3b3JrUmVwbHlEYXRhPiBtX25ldHdvcmtSZXBseURhdGE7
CisgICAgV1RGOjpSZWZQdHI8V2ViS2l0OjpRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE+
IG1fbmV0d29ya1JlcXVlc3REYXRhOworICAgIFdURjo6UmVmUHRyPFdlYktpdDo6UXRSZWZDb3Vu
dGVkTmV0d29ya1JlcGx5RGF0YT4gbV9uZXR3b3JrUmVwbHlEYXRhOworICAgIFdURjo6UmVmUHRy
PFdlYktpdDo6U2hhcmVkTWVtb3J5PiBtX3NoYXJlZE1lbW9yeTsKKyAgICB1aW50NjRfdCBtX2Rh
dGFMZW5ndGg7CiB9OwogCiBRTUxfREVDTEFSRV9UWVBFKFFRdWlja05ldHdvcmtSZXBseSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrbmV0d29ya3Jl
cXVlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3Jr
cmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUyZWY0ZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
bmV0d29ya3JlcXVlc3QuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgWmVubyBBbGJpc3NlciA8emVub0B3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgInFxdWlja25ldHdvcmtyZXF1ZXN0X3AuaCIKKworI2luY2x1ZGUgIlF0
TmV0d29ya1JlcXVlc3REYXRhLmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK1FRdWlja05ldHdvcmtSZXF1ZXN0OjpRUXVpY2tOZXR3
b3JrUmVxdWVzdChRT2JqZWN0KiBwYXJlbnQpCisgICAgOiBRT2JqZWN0KHBhcmVudCkKK3sKKyAg
ICBRX0FTU0VSVChwYXJlbnQpOworfQorCit2b2lkIFFRdWlja05ldHdvcmtSZXF1ZXN0OjpzZXRO
ZXR3b3JrUmVxdWVzdERhdGEoV1RGOjpQYXNzUmVmUHRyPFdlYktpdDo6UXRSZWZDb3VudGVkTmV0
d29ya1JlcXVlc3REYXRhPiBkYXRhKQoreworICAgIG1fbmV0d29ya1JlcXVlc3REYXRhID0gZGF0
YTsKK30KKworUVVybCBRUXVpY2tOZXR3b3JrUmVxdWVzdDo6dXJsKCkgY29uc3QKK3sKKyAgICBp
ZiAobV9uZXR3b3JrUmVxdWVzdERhdGEpCisgICAgICAgcmV0dXJuIFFVcmwobV9uZXR3b3JrUmVx
dWVzdERhdGEtPmRhdGEoKS5tX3VybFN0cmluZyk7CisgICAgcmV0dXJuIFFVcmwoKTsKK30KKwor
I2luY2x1ZGUgIm1vY19xcXVpY2tuZXR3b3JrcmVxdWVzdF9wLmNwcCIKKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2tuZXR3b3JrcmVxdWVzdF9wLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0X3Au
aAppbmRleCAxMTMxMTRjLi43ZGY2NmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0X3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0X3AuaApAQCAtMjEsNiArMjEs
OCBAQAogI2lmbmRlZiBxcXVpY2tuZXR3b3JrcmVxdWVzdF9wX2gKICNkZWZpbmUgcXF1aWNrbmV0
d29ya3JlcXVlc3RfcF9oCiAKKyNpbmNsdWRlICJRdE5ldHdvcmtSZXF1ZXN0RGF0YS5oIgorI2lu
Y2x1ZGUgIlJlZlB0ci5oIgogI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKICNpbmNsdWRlIDxR
T2JqZWN0PgogI2luY2x1ZGUgPFF0RGVjbGFyYXRpdmUvcWRlY2xhcmF0aXZlbGlzdC5oPgpAQCAt
MjgsMjAgKzMwLDE3IEBACiAKIGNsYXNzIFFXRUJLSVRfRVhQT1JUIFFRdWlja05ldHdvcmtSZXF1
ZXN0IDogcHVibGljIFFPYmplY3QgewogICAgIFFfT0JKRUNUCi0gICAgUV9QUk9QRVJUWShRU3Ry
aW5nIHVybCBSRUFEIHVybCkKKyAgICBRX1BST1BFUlRZKFFVcmwgdXJsIFJFQUQgdXJsKQogCiBw
dWJsaWM6Ci0gICAgUVF1aWNrTmV0d29ya1JlcXVlc3QoUU9iamVjdCogcGFyZW50KQotICAgICAg
ICA6IFFPYmplY3QocGFyZW50KQotICAgIHsKLSAgICAgICAgUV9BU1NFUlQocGFyZW50KTsKLSAg
ICB9CisgICAgUVF1aWNrTmV0d29ya1JlcXVlc3QoUU9iamVjdCogcGFyZW50KTsKIAotICAgIFFT
dHJpbmcgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KLSAgICB2b2lkIHNldFVybChjb25z
dCBRU3RyaW5nJiB1cmwpIHsgbV91cmwgPSB1cmw7IH0KKyAgICB2b2lkIHNldE5ldHdvcmtSZXF1
ZXN0RGF0YShXVEY6OlBhc3NSZWZQdHI8V2ViS2l0OjpRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVz
dERhdGE+IGRhdGEpOworCisgICAgUVVybCB1cmwoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBR
U3RyaW5nIG1fdXJsOworICAgIFdURjo6UmVmUHRyPFdlYktpdDo6UXRSZWZDb3VudGVkTmV0d29y
a1JlcXVlc3REYXRhPiBtX25ldHdvcmtSZXF1ZXN0RGF0YTsKIH07CiAKIFFNTF9ERUNMQVJFX1RZ
UEUoUVF1aWNrTmV0d29ya1JlcXVlc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAppbmRleCA1NTk2NzUwLi5mZjcyZDAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgogCiAjaW5jbHVkZSAi
cXF1aWNrbmV0d29ya3JlcGx5X3AuaCIKKyNpbmNsdWRlICJxcXVpY2tuZXR3b3JrcmVxdWVzdF9w
LmgiCiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wX3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2
aWV3X3BfcC5oIgogI2luY2x1ZGUgInF3ZWJkb3dubG9hZGl0ZW1fcF9wLmgiCkBAIC03ODgsMTUg
Kzc4OSwxNyBAQCBRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdh
dGU+IFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNjaAogICAgICAgICAgICAgUVF1aWNrV2Vi
Vmlld0V4cGVyaW1lbnRhbDo6c2NoZW1lRGVsZWdhdGVzX0NsZWFyKTsKIH0KIAotdm9pZCBRUXVp
Y2tXZWJWaWV3RXhwZXJpbWVudGFsOjppbnZva2VBcHBsaWNhdGlvblNjaGVtZUhhbmRsZXIoUGFz
c1JlZlB0cjxRdE5ldHdvcmtSZXF1ZXN0RGF0YT4gcmVxdWVzdCkKK3ZvaWQgUVF1aWNrV2ViVmll
d0V4cGVyaW1lbnRhbDo6aW52b2tlQXBwbGljYXRpb25TY2hlbWVIYW5kbGVyKFBhc3NSZWZQdHI8
UXRSZWZDb3VudGVkTmV0d29ya1JlcXVlc3REYXRhPiByZXF1ZXN0KQogeworICAgIFJlZlB0cjxR
dFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE+IHJlcSA9IHJlcXVlc3Q7CiAgICAgY29uc3Qg
UU9iamVjdExpc3QgY2hpbGRyZW4gPSBzY2hlbWVQYXJlbnQtPmNoaWxkcmVuKCk7CiAgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNoaWxkcmVuLmNvdW50KCk7IGluZGV4KyspIHsKICAg
ICAgICAgUVF1aWNrVXJsU2NoZW1lRGVsZWdhdGUqIGRlbGVnYXRlID0gcW9iamVjdF9jYXN0PFFR
dWlja1VybFNjaGVtZURlbGVnYXRlKj4oY2hpbGRyZW4uYXQoaW5kZXgpKTsKICAgICAgICAgaWYg
KCFkZWxlZ2F0ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWRlbGVnYXRl
LT5zY2hlbWUoKS5jb21wYXJlKFFTdHJpbmcocmVxdWVzdC0+bV9zY2hlbWUpLCBRdDo6Q2FzZUlu
c2Vuc2l0aXZlKSkgewotICAgICAgICAgICAgZGVsZWdhdGUtPnJlcGx5KCktPnNldE5ldHdvcmtS
ZXF1ZXN0RGF0YShyZXF1ZXN0KTsKKyAgICAgICAgaWYgKCFkZWxlZ2F0ZS0+c2NoZW1lKCkuY29t
cGFyZShRU3RyaW5nKHJlcS0+ZGF0YSgpLm1fc2NoZW1lKSwgUXQ6OkNhc2VJbnNlbnNpdGl2ZSkp
IHsKKyAgICAgICAgICAgIGRlbGVnYXRlLT5yZXF1ZXN0KCktPnNldE5ldHdvcmtSZXF1ZXN0RGF0
YShyZXEpOworICAgICAgICAgICAgZGVsZWdhdGUtPnJlcGx5KCktPnNldE5ldHdvcmtSZXF1ZXN0
RGF0YShyZXEpOwogICAgICAgICAgICAgZW1pdCBkZWxlZ2F0ZS0+cmVjZWl2ZWRSZXF1ZXN0KCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCmluZGV4IDE1NWU5NjAuLjMwYzljZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
d19wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
X3AuaApAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBQbGF0Zm9ybVdlYlZpZXc7CiB9CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewotY2xhc3MgUXROZXR3b3JrUmVxdWVzdERhdGE7CitjbGFzcyBRdFJlZkNv
dW50ZWROZXR3b3JrUmVxdWVzdERhdGE7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMjQ3LDcg
KzI0Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgaW50IHNjaGVtZURlbGVnYXRlc19Db3VudChR
RGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+Kik7CiAgICAg
c3RhdGljIHZvaWQgc2NoZW1lRGVsZWdhdGVzX0NsZWFyKFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0
eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4qKTsKICAgICBRRGVjbGFyYXRpdmVMaXN0UHJvcGVy
dHk8UVF1aWNrVXJsU2NoZW1lRGVsZWdhdGU+IHNjaGVtZURlbGVnYXRlcygpOwotICAgIHZvaWQg
aW52b2tlQXBwbGljYXRpb25TY2hlbWVIYW5kbGVyKFdURjo6UGFzc1JlZlB0cjxXZWJLaXQ6OlF0
TmV0d29ya1JlcXVlc3REYXRhPik7CisgICAgdm9pZCBpbnZva2VBcHBsaWNhdGlvblNjaGVtZUhh
bmRsZXIoV1RGOjpQYXNzUmVmUHRyPFdlYktpdDo6UXRSZWZDb3VudGVkTmV0d29ya1JlcXVlc3RE
YXRhPik7CiAgICAgdm9pZCBzZW5kQXBwbGljYXRpb25TY2hlbWVSZXBseShRUXVpY2tOZXR3b3Jr
UmVwbHkqKTsKIAogcHVibGljIFFfU0xPVFM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKaW5kZXggNjljZTk4Yi4uNWNlZGMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaApAQCAtMTAxNyw3ICsxMDE3LDcgQEAgcHJpdmF0ZToKICAgICBmbG9h
dCBtX21lZGlhVm9sdW1lOwogCiAjaWYgUExBVEZPUk0oUVQpCi0gICAgV1RGOjpIYXNoU2V0PFJl
ZlB0cjxRdE5ldHdvcmtSZXF1ZXN0RGF0YT4gPiBtX2FwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdHM7
CisgICAgV1RGOjpIYXNoU2V0PFJlZlB0cjxRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE+
ID4gbV9hcHBsaWNhdGlvblNjaGVtZVJlcXVlc3RzOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwCmluZGV4IDBhZDE1MmQuLmJkODA4
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwCkBA
IC0xMDAsMTEgKzEwMCwxMSBAQCB2b2lkIFF0UGFnZUNsaWVudDo6aGFuZGxlRG93bmxvYWRSZXF1
ZXN0KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQogICAgIFFRdWlja1dlYlZpZXdQcml2YXRlOjpn
ZXQobV93ZWJWaWV3KS0+aGFuZGxlRG93bmxvYWRSZXF1ZXN0KGRvd25sb2FkKTsKIH0KIAotdm9p
ZCBRdFBhZ2VDbGllbnQ6OmhhbmRsZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdChQYXNzUmVmUHRy
PFF0TmV0d29ya1JlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSkKK3ZvaWQgUXRQYWdlQ2xpZW50Ojpo
YW5kbGVBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QoUGFzc1JlZlB0cjxRdFJlZkNvdW50ZWROZXR3
b3JrUmVxdWVzdERhdGE+IHJlcXVlc3REYXRhKQogewogICAgIGlmICghbV93ZWJWaWV3IHx8ICFt
X3dlYlZpZXctPmV4cGVyaW1lbnRhbCgpKQogICAgICAgICByZXR1cm47Ci0gICAgbV93ZWJWaWV3
LT5leHBlcmltZW50YWwoKS0+aW52b2tlQXBwbGljYXRpb25TY2hlbWVIYW5kbGVyKHJlcXVlc3RE
YXRhLmdldCgpKTsKKyAgICBtX3dlYlZpZXctPmV4cGVyaW1lbnRhbCgpLT5pbnZva2VBcHBsaWNh
dGlvblNjaGVtZUhhbmRsZXIocmVxdWVzdERhdGEpOwogfQogCiB2b2lkIFF0UGFnZUNsaWVudDo6
aGFuZGxlQXV0aGVudGljYXRpb25SZXF1aXJlZFJlcXVlc3QoY29uc3QgU3RyaW5nJiBob3N0bmFt
ZSwgY29uc3QgU3RyaW5nJiByZWFsbSwgY29uc3QgU3RyaW5nJiBwcmVmaWxsZWRVc2VybmFtZSwg
U3RyaW5nJiB1c2VybmFtZSwgU3RyaW5nJiBwYXNzd29yZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFBhZ2VDbGllbnQuaAppbmRleCAxNTc1MThhLi5mMDE0MDU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5oCkBAIC01Myw3ICs1Myw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVuY2hQcm9jZXNzKCk7CiAgICAgdmlydHVh
bCBQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IGNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0KFBhc3NSZWZQ
dHI8UXROZXR3b3JrUmVxdWVzdERhdGE+KTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQXBwbGlj
YXRpb25TY2hlbWVSZXF1ZXN0KFBhc3NSZWZQdHI8UXRSZWZDb3VudGVkTmV0d29ya1JlcXVlc3RE
YXRhPik7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUF1dGhlbnRpY2F0aW9uUmVxdWlyZWRSZXF1
ZXN0KGNvbnN0IFN0cmluZyYgaG9zdG5hbWUsIGNvbnN0IFN0cmluZyYgcmVhbG0sIGNvbnN0IFN0
cmluZyYgcHJlZmlsbGVkVXNlcm5hbWUsIFN0cmluZyYgdXNlcm5hbWUsIFN0cmluZyYgcGFzc3dv
cmQpOwogCiAgICAgdmlydHVhbCB2b2lkIGRpc3BsYXlWaWV3KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcAppbmRleCBhYzlmZGU0Li5iZjg2ZWRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViUGFnZVByb3h5UXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJQYWdlUHJveHlRdC5jcHAK
QEAgLTg3LDE3ICs4NywxNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJBcHBsaWNhdGlv
blNjaGVtZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKIAogdm9pZCBXZWJQYWdlUHJveHk6OnJlc29s
dmVBcHBsaWNhdGlvblNjaGVtZVJlcXVlc3QoUXROZXR3b3JrUmVxdWVzdERhdGEgcmVxdWVzdCkK
IHsKLSAgICBSZWZQdHI8UXROZXR3b3JrUmVxdWVzdERhdGE+IHJlcXVlc3REYXRhID0gYWRvcHRS
ZWYobmV3IFF0TmV0d29ya1JlcXVlc3REYXRhKHJlcXVlc3QpKTsKKyAgICBSZWZQdHI8UXRSZWZD
b3VudGVkTmV0d29ya1JlcXVlc3REYXRhPiByZXF1ZXN0RGF0YSA9IGFkb3B0UmVmKG5ldyBRdFJl
ZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGEocmVxdWVzdCkpOwogICAgIG1fYXBwbGljYXRpb25T
Y2hlbWVSZXF1ZXN0cy5hZGQocmVxdWVzdERhdGEpOwogICAgIHN0YXRpY19jYXN0PFF0UGFnZUNs
aWVudCo+KG1fcGFnZUNsaWVudCktPmhhbmRsZUFwcGxpY2F0aW9uU2NoZW1lUmVxdWVzdChyZXF1
ZXN0RGF0YSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZW5kQXBwbGljYXRpb25TY2hlbWVS
ZXBseShjb25zdCBRUXVpY2tOZXR3b3JrUmVwbHkqIHJlcGx5KQogewotICAgIFJlZlB0cjxRdE5l
dHdvcmtSZXF1ZXN0RGF0YT4gcmVxdWVzdERhdGEgPSByZXBseS0+bmV0d29ya1JlcXVlc3REYXRh
KCk7CisgICAgUmVmUHRyPFF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YT4gcmVxdWVzdERh
dGEgPSByZXBseS0+bmV0d29ya1JlcXVlc3REYXRhKCk7CiAgICAgaWYgKG1fYXBwbGljYXRpb25T
Y2hlbWVSZXF1ZXN0cy5jb250YWlucyhyZXF1ZXN0RGF0YSkpIHsKLSAgICAgICAgUmVmUHRyPFF0
TmV0d29ya1JlcGx5RGF0YT4gcmVwbHlEYXRhID0gcmVwbHktPm5ldHdvcmtSZXBseURhdGEoKTsK
LSAgICAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpBcHBsaWNhdGlvblNj
aGVtZVJlcGx5KCpyZXBseURhdGEpLCBwYWdlSUQoKSk7CisgICAgICAgIFJlZlB0cjxRdFJlZkNv
dW50ZWROZXR3b3JrUmVwbHlEYXRhPiByZXBseURhdGEgPSByZXBseS0+bmV0d29ya1JlcGx5RGF0
YSgpOworICAgICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkFwcGxpY2F0
aW9uU2NoZW1lUmVwbHkocmVwbHlEYXRhLT5kYXRhKCkpLCBwYWdlSUQoKSk7CiAgICAgICAgIG1f
YXBwbGljYXRpb25TY2hlbWVSZXF1ZXN0cy5yZW1vdmUocmVxdWVzdERhdGEpOwogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvUXROZXR3b3JrUmVwbHku
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9RdE5ldHdvcmtSZXBseS5jcHAKaW5k
ZXggZmQwZjVjYi4uOTkwNDExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9xdC9RdE5ldHdvcmtSZXBseS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9x
dC9RdE5ldHdvcmtSZXBseS5jcHAKQEAgLTUwLDYgKzUwLDggQEAgUXROZXR3b3JrUmVwbHk6OlF0
TmV0d29ya1JlcGx5KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxLCBRdE5ldHdvcmtBY2Nlc3NN
YW5hZ2UKIAogdm9pZCBRdE5ldHdvcmtSZXBseTo6c2V0RGF0YShjb25zdCBTaGFyZWRNZW1vcnk6
OkhhbmRsZSYgaGFuZGxlLCBxaW50NjQgZGF0YVNpemUpCiB7CisgICAgaWYgKGhhbmRsZS5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5
OjpjcmVhdGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKICAgICBpZiAoIW1fc2hh
cmVkTWVtb3J5KQogICAgICAgICByZXR1cm47CkBAIC04Miw2ICs4NCw5IEBAIHZvaWQgUXROZXR3
b3JrUmVwbHk6OnNldFJlcGx5RGF0YShjb25zdCBRdE5ldHdvcmtSZXBseURhdGEmIHJlcGx5RGF0
YSkKIAogcWludDY0IFF0TmV0d29ya1JlcGx5OjpyZWFkRGF0YShjaGFyKiBkYXRhLCBxaW50NjQg
bWF4bGVuKQogeworICAgIGlmICghbV9zaGFyZWRNZW1vcnkpCisgICAgICAgIHJldHVybiAwOwor
CiAgICAgcWludDY0IGJ5dGVzUmVhZCA9IG1heGxlbiA8IG1fYnl0ZXNBdmFpbGFibGUgPyBtYXhs
ZW4gOiBtX2J5dGVzQXZhaWxhYmxlOwogICAgIGlmIChxTWVtQ29weShkYXRhLCBzdGF0aWNfY2Fz
dDxjaGFyKj4obV9zaGFyZWRNZW1vcnktPmRhdGEoKSkgKyBtX3NoYXJlZE1lbW9yeVNpemUgLSBt
X2J5dGVzQXZhaWxhYmxlLCBieXRlc1JlYWQpKSB7CiAgICAgICAgIG1fYnl0ZXNBdmFpbGFibGUg
LT0gYnl0ZXNSZWFkOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>