<?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>163777</bug_id>
          
          <creation_ts>2016-10-21 03:11:36 -0700</creation_ts>
          <short_desc>NetworkSession: switch to use subclasses for NetworkSession and NetworkDataTask implementations</short_desc>
          <delta_ts>2016-10-25 14:43:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Soup</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>krollin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1242830</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-21 03:11:36 -0700</bug_when>
    <thetext>The subclass model allows us to choose the implementation at run time, so we could add other implementations like a mock network class to measure performance, and even one for blobs and finally get rid of ResourceHandle in WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242831</commentid>
    <comment_count>1</comment_count>
      <attachid>292336</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-21 03:14:11 -0700</bug_when>
    <thetext>Created attachment 292336
Patch for EWS

Not asking r? yet because I&apos;m not sure I did the XCode changes right and even in that case I bet it won&apos;t build on mac at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242837</commentid>
    <comment_count>2</comment_count>
      <attachid>292337</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-21 03:38:53 -0700</bug_when>
    <thetext>Created attachment 292337
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242841</commentid>
    <comment_count>3</comment_count>
      <attachid>292340</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-21 03:59:04 -0700</bug_when>
    <thetext>Created attachment 292340
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242842</commentid>
    <comment_count>4</comment_count>
      <attachid>292341</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-21 04:07:51 -0700</bug_when>
    <thetext>Created attachment 292341
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242848</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-21 04:59:09 -0700</bug_when>
    <thetext>Remaining issues are link failures, but I have no idea how to fix those. It complains about static memebers that are implemente din mm files. Maybe the xcdoe changes were not correct in the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243169</commentid>
    <comment_count>6</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-10-21 17:06:55 -0700</bug_when>
    <thetext>I&apos;m looking into the iOS build issues. I get the linker errors in the release build. In the debug build, I get the error below. I&apos;ve not looked into the source or fix for either of these yet, but I can do that next. I&apos;ve not tried the macOS builds.

In file included from /Volumes/Data/dev/WebKit/branches/network_session/OpenSource/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:27:
In file included from /Volumes/Data/dev/WebKit/branches/network_session/OpenSource/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.h:30:
In file included from /Volumes/Data/dev/WebKit/branches/network_session/OpenSource/Source/WebKit2/NetworkProcess/NetworkDataTask.h:30:
In file included from /Volumes/Data/dev/WebKit/branches/network_session/OpenSource/Source/WebKit2/NetworkProcess/Downloads/DownloadID.h:30:
In file included from /Volumes/Data/dev/WebKit/branches/network_session/OpenSource/Source/WebKit2/Platform/IPC/Decoder.h:30:
In file included from /Volumes/Data/dev/WebKit/branches/network_session/OpenSource/Source/WebKit2/Platform/IPC/StringReference.h:31:
In file included from /Volumes/Data/dev/WebKit/branches/network_session/OpenSource/WebKitBuild/Debug-iphoneos/usr/local/include/wtf/HashTraits.h:26:
In file included from /Volumes/Data/dev/WebKit/branches/network_session/OpenSource/WebKitBuild/Debug-iphoneos/usr/local/include/wtf/HashFunctions.h:26:
In file included from /Volumes/Data/dev/WebKit/branches/network_session/OpenSource/WebKitBuild/Debug-iphoneos/usr/local/include/wtf/RefPtr.h:30:
In file included from /Volumes/Data/dev/WebKit/branches/network_session/OpenSource/WebKitBuild/Debug-iphoneos/usr/local/include/wtf/PassRefPtr.h:24:
In file included from /Volumes/Data/dev/WebKit/branches/network_session/OpenSource/WebKitBuild/Debug-iphoneos/usr/local/include/wtf/Ref.h:33:
/Volumes/Data/dev/WebKit/branches/network_session/OpenSource/WebKitBuild/Debug-iphoneos/usr/local/include/wtf/TypeCasts.h:42:9: error: static_assert failed &quot;Missing TypeCastTraits specialization&quot;
/Volumes/Data/dev/WebKit/branches/network_session/OpenSource/WebKitBuild/Debug-iphoneos/usr/local/include/wtf/TypeCasts.h:59:63: note: in instantiation of member function &apos;WTF::TypeCastTraits&lt;const WebKit::NetworkSessionCocoa, const WebKit::NetworkSession, false&gt;::isOfType&apos; requested here
/Volumes/Data/dev/WebKit/branches/network_session/OpenSource/WebKitBuild/Debug-iphoneos/usr/local/include/wtf/TypeCasts.h:81:38: note: in instantiation of function template specialization &apos;WTF::is&lt;WebKit::NetworkSessionCocoa, WebKit::NetworkSession&gt;&apos; requested here
/Volumes/Data/dev/WebKit/branches/network_session/OpenSource/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:93:19: note: in instantiation of function template specialization &apos;WTF::downcast&lt;WebKit::NetworkSessionCocoa, WebKit::NetworkSession&gt;&apos; requested here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243180</commentid>
    <comment_count>7</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-10-21 17:25:22 -0700</bug_when>
    <thetext>Some of the build output made it look like there may have been an issue with how the files were added to the project. I can&apos;t read an Xcode project file so I didn&apos;t try to figure out what (if anything) might be wrong. What I did instead was to revert the changes to the Xcode project and then re-add the new files. That&apos;s had some effect to the release build; I&apos;m now getting the following error. The debug build still emits the same error reported above.

/Volumes/Data/dev/WebKit/branches/network_session/OpenSource/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm:302:143: error: &apos;suggestedFilename&apos; is a private member of &apos;WebKit::NetworkDataTaskCocoa&apos;
In file included from /Volumes/Data/dev/WebKit/branches/network_session/OpenSource/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm:27:
In file included from /Volumes/Data/dev/WebKit/branches/network_session/OpenSource/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.h:35:
/Volumes/Data/dev/WebKit/branches/network_session/OpenSource/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.h:70:12: note: declared private here
/Volumes/Data/dev/WebKit/branches/network_session/OpenSource/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm:463:22: error: expected the class name after &apos;~&apos; to name the enclosing class
NetworkSessionCocoa::~NetworkSession()
2 errors generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243186</commentid>
    <comment_count>8</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-10-21 17:31:32 -0700</bug_when>
    <thetext>Regarding the Xcode project, I&apos;ve compared the original patch to my local changed. I think the problem is around line 5465:

 5465   5C20CB9E1BB0DD1800895BB1 /* NetworkSession.cpp */,

In my version, in this vicinity, I have both new implementation files:

+ 532159511DBAE6FC0054AA3C /* NetworkDataTask.cpp */,
+ 532159521DBAE6FC0054AA3C /* NetworkSession.cpp */,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243209</commentid>
    <comment_count>9</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-10-21 18:15:12 -0700</bug_when>
    <thetext>I&apos;ve addressed the compilation errors noted here and one or two others. I&apos;ll upload a patch to overlay your patch in a few hours.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243292</commentid>
    <comment_count>10</comment_count>
      <attachid>292471</attachid>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-10-21 22:50:59 -0700</bug_when>
    <thetext>Created attachment 292471
Patch to be applied after the main patch

The attached patch should be applied after applying the patch in comment #4. This patch, however, might need a few tweaks before being acceptable for inclusion in the main patch:

* The change to NetworkDataTaskCocoa.h was meant merely to get the build to work. It&apos;s possible that the final change would be to move the affected private functions into the public section.

* The downcast&lt;&gt;() in NetworkDataTaskCocoa.mm was changed to a reinterpret_cast&lt;&gt;(). The downcast&lt;&gt;() wasn&apos;t working and I didn&apos;t know enough about that facility to get it to work. A real solution might to be get downcast&lt;&gt;() to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243498</commentid>
    <comment_count>11</comment_count>
      <attachid>292471</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-23 02:18:36 -0700</bug_when>
    <thetext>Comment on attachment 292471
Patch to be applied after the main patch

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

&gt; network_session/OpenSource/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.h:64
&gt; +public:

This is not correct, I think, the problem is that NetworkSessionCocoa is using NetworkDataTaskCocoa::suggestedFilename() directly, so the solution would be to cast there to use NetworkDataTask::suggestedFilename() instead. I think these overrides should remain private.

&gt; network_session/OpenSource/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:-95
&gt; +    auto&amp; cocoaSession = reinterpret_cast&lt;NetworkSessionCocoa&amp;&gt;(m_session.get()); // downcast&lt;NetworkSessionCocoa&gt;(m_session.get());
&gt;      if (storedCredentials == WebCore::AllowStoredCredentials) {
&gt; -        m_task = [downcast&lt;NetworkSessionCocoa&gt;(m_session.get()).m_sessionWithCredentialStorage dataTaskWithRequest:nsRequest];
&gt; -        ASSERT(!downcast&lt;NetworkSessionCocoa&gt;(m_session.get()).m_dataTaskMapWithCredentials.contains([m_task taskIdentifier]));
&gt; -        downcast&lt;NetworkSessionCocoa&gt;(m_session.get()).m_dataTaskMapWithCredentials.add([m_task taskIdentifier], this);

I don&apos;t know why it worked for Soup, though. I guess we need to either add type traits (adding a pure virtual type() or several isFoo() methods to NetworkSession) or simply use reinterpret_cast since here the network session should always be NetworkSessionCocoa.

&gt; network_session/OpenSource/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm:463
&gt; -NetworkSessionCocoa::~NetworkSession()
&gt; +NetworkSessionCocoa::~NetworkSessionCocoa()

Oops, I forgot this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243601</commentid>
    <comment_count>12</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-10-23 21:27:32 -0700</bug_when>
    <thetext>&gt; I think these overrides should remain private.

I&apos;m curious about your desire for this. This is an idiom that I&apos;ve not seen used before. It seems to me that it could be problematic (for instance, the actual compilation problem I encountered). Others seem to feel the same way: &lt;http://stackoverflow.com/questions/484592/overriding-public-virtual-functions-with-private-functions-in-c&gt;. That article (in part) refers to &lt;https://isocpp.org/wiki/faq/proper-inheritance#hiding-inherited-public&gt;.

So how do you come down on the opposite side of these opinions? What&apos;s being communicated by making public methods private in the derived class?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243634</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-24 00:40:04 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; I think these overrides should remain private.
&gt; 
&gt; I&apos;m curious about your desire for this. This is an idiom that I&apos;ve not seen
&gt; used before. It seems to me that it could be problematic (for instance, the
&gt; actual compilation problem I encountered). Others seem to feel the same way:
&gt; &lt;http://stackoverflow.com/questions/484592/overriding-public-virtual-
&gt; functions-with-private-functions-in-c&gt;. That article (in part) refers to
&gt; &lt;https://isocpp.org/wiki/faq/proper-inheritance#hiding-inherited-public&gt;.
&gt; 
&gt; So how do you come down on the opposite side of these opinions? What&apos;s being
&gt; communicated by making public methods private in the derived class?

In this particular case those methods are pure virtual an expected to be used by NetworkDataTask users who don&apos;t know about Soup/Cocoa implementations. Those overrides are providing the implementation for the base class. I&apos;m pretty sure we do this in WebKit, but still, I don&apos;t have a strong opinion, we can make them public if you think it&apos;s better solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243648</commentid>
    <comment_count>14</comment_count>
      <attachid>292594</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-24 01:31:45 -0700</bug_when>
    <thetext>Created attachment 292594
Patch for EWS

Included xcode fixes, made overrides public in cocoa impl, fixed the NetworkSessionCocoa destructor and switched to use static_cast instead of downcast (I think static_cast should work in this case). Thanks Keith!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243667</commentid>
    <comment_count>15</comment_count>
      <attachid>292600</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-24 03:43:28 -0700</bug_when>
    <thetext>Created attachment 292600
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244040</commentid>
    <comment_count>16</comment_count>
      <attachid>292600</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-24 18:57:23 -0700</bug_when>
    <thetext>Comment on attachment 292600
Patch

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

This is such a huge improvement.  Thanks Carlos! r=me

&gt; Source/WebKit2/NetworkProcess/NetworkSession.cpp:62
&gt; +    ASSERT(isMainThread());

Let&apos;s put this assertion outside the #if PLATFORM?

&gt; Source/WebKit2/NetworkProcess/NetworkSession.h:49
&gt; +    virtual void invalidateAndCancel() { };
&gt; +    virtual void clearCredentials() { };

These should be purely virtual.  Put notImplemented() in Soup&apos;s.  clearCredentials isn&apos;t used yet, but I hope to use it sometime soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244126</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-24 23:29:42 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Comment on attachment 292600 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=292600&amp;action=review
&gt; 
&gt; This is such a huge improvement.  Thanks Carlos! r=me
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/NetworkSession.cpp:62
&gt; &gt; +    ASSERT(isMainThread());
&gt; 
&gt; Let&apos;s put this assertion outside the #if PLATFORM?

I didn&apos;t add the assert for cocoa because NetworkSessionCocoa::defaultSession() already has that assert. It&apos;s unfortunate that this code can&apos;t be common, maybe we can find a different way to handle the custom protocol manager in cocoa that doesn&apos;t require passing it to the constructor.

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkSession.h:49
&gt; &gt; +    virtual void invalidateAndCancel() { };
&gt; &gt; +    virtual void clearCredentials() { };
&gt; 
&gt; These should be purely virtual.  Put notImplemented() in Soup&apos;s. 
&gt; clearCredentials isn&apos;t used yet, but I hope to use it sometime soon.

invalidateAndCancel() should probably be implemented by all implementations, but clearCredentials is different, I&apos;m thinking in blobs for example that I already started to move to network data task btw.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244168</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-25 03:28:30 -0700</bug_when>
    <thetext>Committed r207813: &lt;http://trac.webkit.org/changeset/207813&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244451</commentid>
    <comment_count>19</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-25 14:43:07 -0700</bug_when>
    <thetext>&gt; I&apos;m thinking in blobs for example that I
&gt; already started to move to network data task btw.
Hooray!  I think we&apos;ll have to get rid of PlatformStrategies::blobRegistry to do this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292336</attachid>
            <date>2016-10-21 03:14:11 -0700</date>
            <delta_ts>2016-10-21 03:38:53 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>wk2-network-session-subclass.diff</filename>
            <type>text/plain</type>
            <size>108749</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggMWFjMTA2Yy4uNmJkYTNiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTE4MiwxMCArMTgyLDEyIEBAIGVuZGlmICgpCiAKIHNldChOZXR3b3JrUHJvY2Vz
c19DT01NT05fU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKICAg
ICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3Jt
U3RyYXRlZ2llcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
Y3BwCisgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCiAKICAgICBOZXR3b3Jr
UHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZGE0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCkBAIC0wLDAgKzEsMTE0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtE
YXRhVGFzay5oIgorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKworI2luY2x1ZGUgIk5ldHdv
cmtTZXNzaW9uLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworI2lmIFBMQVRGT1JN
KENPQ09BKQorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCisjZW5kaWYKKyNpZiBV
U0UoU09VUCkKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2tTb3VwLmgiCisjZW5kaWYKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWY8TmV0d29y
a0RhdGFUYXNrPiBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lv
biwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENvbnRlbnRTbmlm
ZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9u
SFRUUFNUb0hUVFBSZWRpcmVjdCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZXR1cm4g
TmV0d29ya0RhdGFUYXNrQ29jb2E6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIHN0
b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QpOworI2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAgcmV0dXJu
IE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIHN0
b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QpOworI2VuZGlmCit9CisKK05ldHdvcmtEYXRhVGFzazo6TmV0
d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGll
bnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxz
LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgYm9vbCBzaG91bGRDbGVhclJl
ZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQorICAgIDogbV9mYWlsdXJlVGltZXIoKnRoaXMs
ICZOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKQorICAgICwgbV9zZXNzaW9uKHNl
c3Npb24pCisgICAgLCBtX2NsaWVudCgmY2xpZW50KQorICAgICwgbV9zdG9yZWRDcmVkZW50aWFs
cyhzdG9yZWRDcmVkZW50aWFscykKKyAgICAsIG1fbGFzdEhUVFBNZXRob2QocmVxdWVzdFdpdGhD
cmVkZW50aWFscy5odHRwTWV0aG9kKCkpCisgICAgLCBtX2ZpcnN0UmVxdWVzdChyZXF1ZXN0V2l0
aENyZWRlbnRpYWxzKQorICAgICwgbV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJl
ZGlyZWN0KHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghcmVxdWVzdFdpdGhDcmVkZW50aWFs
cy51cmwoKS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxG
YWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcG9ydEFsbG93ZWQo
cmVxdWVzdFdpdGhDcmVkZW50aWFscy51cmwoKSkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJl
KEJsb2NrZWRGYWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworTmV0d29ya0Rh
dGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVCghbV9jbGllbnQpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2No
ZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlIHR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUgIT0gTm9G
YWlsdXJlKTsKKyAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gdHlwZTsKKyAgICBtX2ZhaWx1
cmVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpmYWls
dXJlVGltZXJGaXJlZCgpCit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKworICAgIHN3aXRjaCAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSkgeworICAg
IGNhc2UgQmxvY2tlZEZhaWx1cmU6CisgICAgICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBO
b0ZhaWx1cmU7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50LT53
YXNCbG9ja2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludmFsaWRVUkxGYWlsdXJl
OgorICAgICAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJlOworICAgICAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgICAgICBtX2NsaWVudC0+Y2Fubm90U2hvd1VSTCgpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBOb0ZhaWx1cmU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VT
U0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtE
YXRhVGFzay5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmgKaW5kZXggYjYyNzU4Yi4uODFhMDE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKQEAgLTM2LDI1ICszNiwxMSBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgog
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKENPQ09BKQotT0JK
Q19DTEFTUyBOU1VSTFNlc3Npb25EYXRhVGFzazsKLSNlbmRpZgotCi0jaWYgVVNFKFNPVVApCi0j
aW5jbHVkZSA8V2ViQ29yZS9Qcm90ZWN0aW9uU3BhY2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlUmVzcG9uc2UuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0
Zi9nbGliL0dSZWZQdHIuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLWNsYXNzIENyZWRlbnRpYWw7CiBjbGFzcyBSZXNvdXJj
ZUVycm9yOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIH0KQEAgLTg2LDE2ICs3MiwxNCBAQCBwdWJsaWM6CiB9Owog
CiBjbGFzcyBOZXR3b3JrRGF0YVRhc2sgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrRGF0YVRh
c2s+IHsKLSAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nlc3Npb247CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxOZXR3b3JrRGF0YVRhc2s+IGNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwg
TmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlh
bHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJv
b2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFzayhzZXNzaW9uLCBjbGllbnQs
IHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENs
ZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBzdXNwZW5kKCk7Ci0gICAgdm9pZCBjYW5jZWwoKTsKLSAgICB2b2lkIHJlc3VtZSgpOworICAg
IHN0YXRpYyBSZWY8TmV0d29ya0RhdGFUYXNrPiBjcmVhdGUoTmV0d29ya1Nlc3Npb24mLCBOZXR3
b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5LCBi
b29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOworCisgICAgdmly
dHVhbCB+TmV0d29ya0RhdGFUYXNrKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXN1
bWUoKSA9IDA7CiAKICAgICBlbnVtIGNsYXNzIFN0YXRlIHsKICAgICAgICAgUnVubmluZywKQEAg
LTEwMywyNiArODcsMTEgQEAgcHVibGljOgogICAgICAgICBDYW5jZWxpbmcsCiAgICAgICAgIENv
bXBsZXRlZAogICAgIH07Ci0gICAgU3RhdGUgc3RhdGUoKSBjb25zdDsKLQotICAgIHR5cGVkZWYg
dWludDY0X3QgVGFza0lkZW50aWZpZXI7Ci0gICAgCi0gICAgfk5ldHdvcmtEYXRhVGFzaygpOwot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCBkaWRTZW5kRGF0YSh1aW50NjRfdCB0b3Rh
bEJ5dGVzU2VudCwgdWludDY0X3QgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kKTsKLSAgICB2b2lk
IGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYmKTsKLSAgICB2b2lkIGRpZENvbXBsZXRl
V2l0aEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKLSAgICB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFJlc3BvbnNlQ29tcGxl
dGlvbkhhbmRsZXImJik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlRGF0YShSZWY8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPiYmKTsKLSAgICB2b2lkIGRpZEJlY29tZURvd25sb2FkKCk7CisgICAgdmlydHVh
bCBTdGF0ZSBzdGF0ZSgpIGNvbnN0ID0gMDsKIAotICAgIHZvaWQgd2lsbFBlcmZvcm1IVFRQUmVk
aXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmJiwgUmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlciYmKTsKLSAgICB2b2lkIHRyYW5zZmVy
U2FuZGJveEV4dGVuc2lvblRvRG93bmxvYWQoRG93bmxvYWQmKTsKLSNlbmRpZgogICAgIE5ldHdv
cmtEYXRhVGFza0NsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KICAg
ICB2b2lkIGNsZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IG51bGxwdHI7IH0KLSAgICAKKwogICAg
IERvd25sb2FkSUQgcGVuZGluZ0Rvd25sb2FkSUQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdE
b3dubG9hZElEOyB9CiAgICAgUGVuZGluZ0Rvd25sb2FkKiBwZW5kaW5nRG93bmxvYWQoKSBjb25z
dCB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZDsgfQogICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25s
b2FkSUQoRG93bmxvYWRJRCBkb3dubG9hZElEKQpAQCAtMTM2LDg3ICsxMDUsMzEgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlQoIW1fcGVuZGluZ0Rvd25sb2FkKTsKICAgICAgICAgbV9wZW5kaW5n
RG93bmxvYWQgPSAmcGVuZGluZ0Rvd25sb2FkOwogICAgIH0KLSAgICB2b2lkIHNldFBlbmRpbmdE
b3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSYsIGJvb2wgYWxsb3dPdmVyd3JpdGUpOworCisgICAgdmlydHVhbCB2b2lk
IHNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgLyphbGxvd092ZXJ3cml0ZSovKSB7IG1f
cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBmaWxlbmFtZTsgfQogICAgIGNvbnN0IFN0cmluZyYg
cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9h
ZExvY2F0aW9uOyB9CiAgICAgYm9vbCBpc0Rvd25sb2FkKCkgY29uc3QgeyByZXR1cm4gISFtX3Bl
bmRpbmdEb3dubG9hZElELmRvd25sb2FkSUQoKTsgfQogCiAgICAgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiBmaXJzdFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0UmVxdWVz
dDsgfQotICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpOwotICAgIHZvaWQgc2V0U3VnZ2Vz
dGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBhbGxvd3NTcGVjaWZpY0hUVFBT
Q2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Jik7Ci0gICAgCi1wcml2YXRlOgotICAgIE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYs
IE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xp
Y3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CisgICAg
dmlydHVhbCBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUoKSBjb25zdCB7IHJldHVybiBTdHJpbmco
KTsgfQorICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBzdWdnZXN0
ZWROYW1lKSB7IG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWROYW1lOyB9CisgICAgYm9v
bCBhbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNvcmU6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGJvb2wgdHJ5
UGFzc3dvcmRCYXNlZEF1dGhlbnRpY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiwgY29uc3QgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXImKTsKK3Byb3RlY3Rl
ZDoKKyAgICBOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRhc2tD
bGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFscywgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0
KTsKIAotI2lmIFVTRShTT1VQKQotICAgIHZvaWQgdGltZW91dEZpcmVkKCk7Ci0gICAgdm9pZCBz
dGFydFRpbWVvdXQoKTsKLSAgICB2b2lkIHN0b3BUaW1lb3V0KCk7Ci0gICAgdm9pZCBpbnZhbGlk
YXRlQW5kQ2FuY2VsKCk7Ci0gICAgdm9pZCBjcmVhdGVSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOwotICAgIHZvaWQgY2xlYXJSZXF1ZXN0KCk7Ci0gICAgc3RhdGljIHZv
aWQgc2VuZFJlcXVlc3RDYWxsYmFjayhTb3VwUmVxdWVzdCosIEdBc3luY1Jlc3VsdCosIE5ldHdv
cmtEYXRhVGFzayopOwotICAgIHZvaWQgZGlkU2VuZFJlcXVlc3QoR1JlZlB0cjxHSW5wdXRTdHJl
YW0+JiYpOwotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKCk7Ci0gICAgc3RhdGljIHZvaWQg
dGxzRXJyb3JzQ2hhbmdlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiwgR1BhcmFtU3BlYyosIE5ldHdv
cmtEYXRhVGFzayopOwotICAgIHZvaWQgdGxzRXJyb3JzQ2hhbmdlZCgpOwotICAgIHZvaWQgYXBw
bHlBdXRoZW50aWNhdGlvblRvUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKLSAg
ICBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGVDYWxsYmFjayhTb3VwU2Vzc2lvbiosIFNvdXBNZXNz
YWdlKiwgU291cEF1dGgqLCBnYm9vbGVhbiByZXRyeWluZywgTmV0d29ya0RhdGFUYXNrKik7Ci0g
ICAgdm9pZCBhdXRoZW50aWNhdGUoV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJik7
Ci0gICAgdm9pZCBjb250aW51ZUF1dGhlbnRpY2F0ZShXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYmKTsKLSAgICBzdGF0aWMgdm9pZCBza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlv
bkNhbGxiYWNrKEdJbnB1dFN0cmVhbSosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFzayop
OwotICAgIHZvaWQgc2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKLSAgICB2b2lkIGRp
ZEZpbmlzaFNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCk7Ci0gICAgYm9vbCBzaG91bGRT
dGFydEhUVFBSZWRpcmVjdGlvbigpOwotICAgIHZvaWQgY29udGludWVIVFRQUmVkaXJlY3Rpb24o
KTsKLSAgICBzdGF0aWMgdm9pZCByZWFkQ2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVz
dWx0KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCByZWFkKCk7Ci0gICAgdm9pZCBkaWRS
ZWFkKGdzc2l6ZSBieXRlc1JlYWQpOwotICAgIHZvaWQgZGlkRmluaXNoUmVhZCgpOwotICAgIHN0
YXRpYyB2b2lkIHJlcXVlc3ROZXh0UGFydENhbGxiYWNrKFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVh
bSosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFzayopOwotICAgIHZvaWQgcmVxdWVzdE5l
eHRQYXJ0KCk7Ci0gICAgdm9pZCBkaWRSZXF1ZXN0TmV4dFBhcnQoR1JlZlB0cjxHSW5wdXRTdHJl
YW0+JiYpOwotICAgIHZvaWQgZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KCk7Ci0gICAgc3RhdGlj
IHZvaWQgZ290SGVhZGVyc0NhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrKik7
Ci0gICAgdm9pZCBkaWRHZXRIZWFkZXJzKCk7Ci0gICAgc3RhdGljIHZvaWQgd3JvdGVCb2R5RGF0
YUNhbGxiYWNrKFNvdXBNZXNzYWdlKiwgU291cEJ1ZmZlciosIE5ldHdvcmtEYXRhVGFzayopOwot
ICAgIHZvaWQgZGlkV3JpdGVCb2R5RGF0YSh1aW50NjRfdCBieXRlc1NlbnQpOwotICAgIHZvaWQg
ZG93bmxvYWQoKTsKLSAgICBzdGF0aWMgdm9pZCB3cml0ZURvd25sb2FkQ2FsbGJhY2soR091dHB1
dFN0cmVhbSosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFzayopOwotICAgIHZvaWQgd3Jp
dGVEb3dubG9hZCgpOwotICAgIHZvaWQgZGlkV3JpdGVEb3dubG9hZChnc2l6ZSBieXRlc1dyaXR0
ZW4pOwotICAgIHZvaWQgZGlkRmFpbERvd25sb2FkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJy
b3ImKTsKLSAgICB2b2lkIGRpZEZpbmlzaERvd25sb2FkKCk7Ci0gICAgdm9pZCBjbGVhbkRvd25s
b2FkRmlsZXMoKTsKLSAgICB2b2lkIGRpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJv
ciYpOwotI2lmIEVOQUJMRShXRUJfVElNSU5HKQotICAgIHN0YXRpYyB2b2lkIG5ldHdvcmtFdmVu
dENhbGxiYWNrKFNvdXBNZXNzYWdlKiwgR1NvY2tldENsaWVudEV2ZW50LCBHSU9TdHJlYW0qLCBO
ZXR3b3JrRGF0YVRhc2sqKTsKLSAgICB2b2lkIG5ldHdvcmtFdmVudChHU29ja2V0Q2xpZW50RXZl
bnQpOwotI2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA0OSwgOTEpCi0gICAgc3RhdGljIHZvaWQg
c3RhcnRpbmdDYWxsYmFjayhTb3VwTWVzc2FnZSosIE5ldHdvcmtEYXRhVGFzayopOwotI2Vsc2UK
LSAgICBzdGF0aWMgdm9pZCByZXF1ZXN0U3RhcnRlZENhbGxiYWNrKFNvdXBTZXNzaW9uKiwgU291
cE1lc3NhZ2UqLCBTb3VwU29ja2V0KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0jZW5kaWYKLSAgICB2
b2lkIGRpZFN0YXJ0UmVxdWVzdCgpOwotICAgIHN0YXRpYyB2b2lkIHJlc3RhcnRlZENhbGxiYWNr
KFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCBkaWRSZXN0YXJ0KCk7
Ci0jZW5kaWYKLSNlbmRpZgotICAgIAogICAgIGVudW0gRmFpbHVyZVR5cGUgewogICAgICAgICBO
b0ZhaWx1cmUsCiAgICAgICAgIEJsb2NrZWRGYWlsdXJlLAogICAgICAgICBJbnZhbGlkVVJMRmFp
bHVyZQogICAgIH07Ci0gICAgRmFpbHVyZVR5cGUgbV9zY2hlZHVsZWRGYWlsdXJlVHlwZSB7IE5v
RmFpbHVyZSB9OwotICAgIFdlYkNvcmU6OlRpbWVyIG1fZmFpbHVyZVRpbWVyOwogICAgIHZvaWQg
ZmFpbHVyZVRpbWVyRmlyZWQoKTsKICAgICB2b2lkIHNjaGVkdWxlRmFpbHVyZShGYWlsdXJlVHlw
ZSk7Ci0gICAgCi0gICAgUmVmUHRyPE5ldHdvcmtTZXNzaW9uPiBtX3Nlc3Npb247Ci0gICAgTmV0
d29ya0RhdGFUYXNrQ2xpZW50KiBtX2NsaWVudDsKKworICAgIEZhaWx1cmVUeXBlIG1fc2NoZWR1
bGVkRmFpbHVyZVR5cGUgeyBOb0ZhaWx1cmUgfTsKKyAgICBXZWJDb3JlOjpUaW1lciBtX2ZhaWx1
cmVUaW1lcjsKKyAgICBSZWY8TmV0d29ya1Nlc3Npb24+IG1fc2Vzc2lvbjsKKyAgICBOZXR3b3Jr
RGF0YVRhc2tDbGllbnQqIG1fY2xpZW50IHsgbnVsbHB0ciB9OwogICAgIFBlbmRpbmdEb3dubG9h
ZCogbV9wZW5kaW5nRG93bmxvYWQgeyBudWxscHRyIH07CiAgICAgRG93bmxvYWRJRCBtX3BlbmRp
bmdEb3dubG9hZElEOwogICAgIFN0cmluZyBtX3VzZXI7CkBAIC0yMjQsNDYgKzEzNywxNCBAQCBw
cml2YXRlOgogI2lmIFVTRShDUkVERU5USUFMX1NUT1JBR0VfV0lUSF9ORVRXT1JLX1NFU1NJT04p
CiAgICAgV2ViQ29yZTo6Q3JlZGVudGlhbCBtX2luaXRpYWxDcmVkZW50aWFsOwogI2VuZGlmCi0g
ICAgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgbV9zdG9yZWRDcmVkZW50aWFsczsKKyAgICBX
ZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBtX3N0b3JlZENyZWRlbnRpYWxzIHsgV2ViQ29yZTo6
RG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzIH07CiAgICAgU3RyaW5nIG1fbGFzdEhUVFBNZXRo
b2Q7CiAgICAgU3RyaW5nIG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb247CiAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0IG1fZmlyc3RSZXF1ZXN0OwotICAgIGJvb2wgbV9zaG91bGRDbGVhclJl
ZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0OwotICAgIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9u
PiBtX3NhbmRib3hFeHRlbnNpb247Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgUmV0YWluUHRy
PE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBtX3Rhc2s7Ci0jZW5kaWYKLSNpZiBVU0UoU09VUCkKLSAg
ICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlN1c3BlbmRlZCB9OwotICAgIFdlYkNvcmU6OkNvbnRl
bnRTbmlmZmluZ1BvbGljeSBtX3Nob3VsZENvbnRlbnRTbmlmZjsKLSAgICBHUmVmUHRyPFNvdXBS
ZXF1ZXN0PiBtX3NvdXBSZXF1ZXN0OwotICAgIEdSZWZQdHI8U291cE1lc3NhZ2U+IG1fc291cE1l
c3NhZ2U7Ci0gICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07Ci0gICAgR1Jl
ZlB0cjxTb3VwTXVsdGlwYXJ0SW5wdXRTdHJlYW0+IG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW07Ci0g
ICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7Ci0gICAgR1JlZlB0cjxHQXN5
bmNSZXN1bHQ+IG1fcGVuZGluZ1Jlc3VsdDsKLSAgICBXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2Ug
bV9wcm90ZWN0aW9uU3BhY2VGb3JQZXJzaXN0ZW50U3RvcmFnZTsKLSAgICBXZWJDb3JlOjpDcmVk
ZW50aWFsIG1fY3JlZGVudGlhbEZvclBlcnNpc3RlbnRTdG9yYWdlOwotICAgIFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKLSAgICBWZWN0b3I8Y2hhcj4gbV9yZWFkQnVmZmVy
OwotICAgIHVuc2lnbmVkIG1fcmVkaXJlY3RDb3VudCB7IDAgfTsKLSAgICB1aW50NjRfdCBtX2Jv
ZHlEYXRhVG90YWxCeXRlc1NlbnQgeyAwIH07Ci0gICAgR1JlZlB0cjxHRmlsZT4gbV9kb3dubG9h
ZERlc3RpbmF0aW9uRmlsZTsKLSAgICBHUmVmUHRyPEdGaWxlPiBtX2Rvd25sb2FkSW50ZXJtZWRp
YXRlRmlsZTsKLSAgICBHUmVmUHRyPEdPdXRwdXRTdHJlYW0+IG1fZG93bmxvYWRPdXRwdXRTdHJl
YW07Ci0gICAgYm9vbCBtX2FsbG93T3ZlcndyaXRlRG93bmxvYWQgeyBmYWxzZSB9OwotI2lmIEVO
QUJMRShXRUJfVElNSU5HKQotICAgIGRvdWJsZSBtX3N0YXJ0VGltZSB7IDAgfTsKLSNlbmRpZgot
ICAgIFJ1bkxvb3A6OlRpbWVyPE5ldHdvcmtEYXRhVGFzaz4gbV90aW1lb3V0U291cmNlOwotI2Vu
ZGlmCisgICAgYm9vbCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Qg
eyB0cnVlIH07CiAgICAgU3RyaW5nIG1fc3VnZ2VzdGVkRmlsZW5hbWU7CiB9OwogCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi1XZWJDb3JlOjpDcmVkZW50aWFsIHNlcnZlclRydXN0Q3JlZGVudGlhbChj
b25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwotI2VuZGlmCi0gICAgCiB9
CiAKICNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtMb2FkLmgKaW5kZXggM2IxYTA1Zi4uNGU0NmU2OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCkBAIC0zNCw3ICszNCw3IEBA
CiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogI2luY2x1ZGUgIkRvd25sb2FkSUQuaCIKLSNp
bmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KICNlbmRpZgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5k
ZXggOGU5N2YwNy4uMjBiNTZjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtNzQsNiArNzQsMTAgQEAKICNpbmNsdWRlICJOZXR3
b3JrQ2FjaGVDb2RlcnMuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVk
ZSAiTmV0d29ya1Nlc3Npb25Db2NvYS5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwMiw3ICsxMDYsNyBAQCBOZXR3b3JrUHJv
Y2Vzczo6TmV0d29ya1Byb2Nlc3MoKQogICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdl
cj4oKTsKICAgICBhZGRTdXBwbGVtZW50PEN1c3RvbVByb3RvY29sTWFuYWdlcj4oKTsKICNpZiBV
U0UoTkVUV09SS19TRVNTSU9OKSAmJiBQTEFURk9STShDT0NPQSkKLSAgICBOZXR3b3JrU2Vzc2lv
bjo6c2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKHN1cHBsZW1lbnQ8Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyPigpKTsKKyAgICBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRDdXN0b21Qcm90b2NvbE1hbmFn
ZXIoc3VwcGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCkpOwogI2VuZGlmCiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjgxODE5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCkBAIC0w
LDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
TmV0d29ya1Nlc3Npb24uaCIKKworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisKKyNpbmNsdWRl
IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbkNv
Y29hLmgiCisjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNv
dXAuaCIKKyNlbmRpZgorCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworUmVmPE5ldHdvcmtTZXNzaW9uPiBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKFNl
c3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciogY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHJldHVybiBOZXR3b3JrU2Vzc2lv
bkNvY29hOjpjcmVhdGUoc2Vzc2lvbklELCBjdXN0b21Qcm90b2NvbE1hbmFnZXIpOworI2VuZGlm
CisjaWYgVVNFKFNPVVApCisgICAgVU5VU0VEX1BBUkFNKGN1c3RvbVByb3RvY29sTWFuYWdlcik7
CisgICAgcmV0dXJuIE5ldHdvcmtTZXNzaW9uU291cDo6Y3JlYXRlKHNlc3Npb25JRCk7CisjZW5k
aWYKK30KKworTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigp
Cit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJuIE5ldHdvcmtTZXNzaW9uQ29jb2E6
OmRlZmF1bHRTZXNzaW9uKCk7CisjZWxzZQorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uID0gJk5ldHdvcmtTZXNzaW9uOjpjcmVh
dGUoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpLmxlYWtSZWYoKTsKKyAgICByZXR1cm4g
KnNlc3Npb247CisjZW5kaWYKK30KKworTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrU2Vz
c2lvbjo6bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29uc3QKK3sKKyAgICBhdXRvKiBzdG9yYWdl
U2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24obV9zZXNzaW9u
SUQpOworICAgIFJFTEVBU0VfQVNTRVJUKHN0b3JhZ2VTZXNzaW9uKTsKKyAgICByZXR1cm4gKnN0
b3JhZ2VTZXNzaW9uOworfQorCitOZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24oU2Vzc2lv
bklEIHNlc3Npb25JRCkKKyAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKK3sKK30KKworTmV0
d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbigpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCmluZGV4IGIwODgyZjIuLmZlZmQ3YTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9u
LmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaApA
QCAtMjcsMjQgKzI3LDEwIEBACiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi1PQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbjsKLU9CSkNfQ0xBU1MgTlNPcGVy
YXRpb25RdWV1ZTsKLU9CSkNfQ0xBU1MgV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlOwotI2VuZGlm
Ci0KLSNpbmNsdWRlICJEb3dubG9hZElELmgiCi0jaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKLSNpZiBVU0UoU09VUCkKLXR5cGVkZWYgc3RydWN0IF9T
b3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb247CiB9CkBAIC01NCw2MyArNDAsMjEgQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiBjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXI7CiAKIGNsYXNzIE5ldHdv
cmtTZXNzaW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya1Nlc3Npb24+IHsKLSAgICBmcmll
bmQgY2xhc3MgTmV0d29ya0RhdGFUYXNrOwogcHVibGljOgotICAgIGVudW0gY2xhc3MgVHlwZSB7
Ci0gICAgICAgIE5vcm1hbCwKLSAgICAgICAgRXBoZW1lcmFsCi0gICAgfTsKLQotICAgIHN0YXRp
YyBSZWY8TmV0d29ya1Nlc3Npb24+IGNyZWF0ZShUeXBlLCBXZWJDb3JlOjpTZXNzaW9uSUQsIEN1
c3RvbVByb3RvY29sTWFuYWdlciopOworICAgIHN0YXRpYyBSZWY8TmV0d29ya1Nlc3Npb24+IGNy
ZWF0ZShXZWJDb3JlOjpTZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciogPSBudWxscHRy
KTsKICAgICBzdGF0aWMgTmV0d29ya1Nlc3Npb24mIGRlZmF1bHRTZXNzaW9uKCk7Ci0gICAgfk5l
dHdvcmtTZXNzaW9uKCk7CisgICAgdmlydHVhbCB+TmV0d29ya1Nlc3Npb24oKTsKIAotICAgIHZv
aWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlQW5k
Q2FuY2VsKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBjbGVhckNyZWRlbnRpYWxzKCkgeyB9Owog
CiAgICAgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vz
c2lvbklEOyB9Ci0KLSNpZiBVU0UoU09VUCkKLSAgICBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24o
KSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgLy8gTXVzdCBiZSBj
YWxsZWQgYmVmb3JlIGFueSBOZXR3b3JrU2Vzc2lvbiBoYXMgYmVlbiBjcmVhdGVkLgotICAgIHN0
YXRpYyB2b2lkIHNldEN1c3RvbVByb3RvY29sTWFuYWdlcihDdXN0b21Qcm90b2NvbE1hbmFnZXIq
KTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvbkF1ZGl0VG9rZW5EYXRhKFJl
dGFpblB0cjxDRkRhdGFSZWY+JiYpOwotICAgIHN0YXRpYyB2b2lkIHNldFNvdXJjZUFwcGxpY2F0
aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRT
b3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7Ci0jaWYg
UExBVEZPUk0oSU9TKQotICAgIHN0YXRpYyB2b2lkIHNldENURGF0YUNvbm5lY3Rpb25TZXJ2aWNl
VHlwZShjb25zdCBTdHJpbmcmKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICB2b2lkIGNsZWFyQ3Jl
ZGVudGlhbHMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBOZXR3b3JrRGF0YVRhc2sqIGRh
dGFUYXNrRm9ySWRlbnRpZmllcihOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyLCBXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFscyk7Ci0KLSAgICB2b2lkIGFkZERvd25sb2FkSUQoTmV0d29y
a0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgRG93bmxvYWRJRCk7Ci0gICAgRG93bmxvYWRJRCBk
b3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIpOwotICAgIERvd25sb2Fk
SUQgdGFrZURvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllcik7Ci0jZW5k
aWYKLQotcHJpdmF0ZToKLSAgICBOZXR3b3JrU2Vzc2lvbihUeXBlLCBXZWJDb3JlOjpTZXNzaW9u
SUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiYgbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAKLSAgICBXZWJDb3JlOjpT
ZXNzaW9uSUQgbV9zZXNzaW9uSUQ7Citwcm90ZWN0ZWQ6CisgICAgTmV0d29ya1Nlc3Npb24oV2Vi
Q29yZTo6U2Vzc2lvbklEKTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIEhhc2hNYXA8TmV0
d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrKj4gbV9kYXRhVGFz
a01hcFdpdGhDcmVkZW50aWFsczsKLSAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFzazo6VGFza0lk
ZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFzayo+IG1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlh
bHM7Ci0gICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyLCBEb3dubG9h
ZElEPiBtX2Rvd25sb2FkTWFwOwotCi0gICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gbV9zZXNz
aW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlOwotICAgIFJldGFpblB0cjxXS05ldHdvcmtTZXNzaW9u
RGVsZWdhdGU+IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlOwotICAgIFJl
dGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZTsK
LSAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBtX3Nlc3Npb25XaXRob3V0
Q3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZTsKLSNlbGlmIFVTRShTT1VQKQotICAgIEhhc2hTZXQ8
TmV0d29ya0RhdGFUYXNrKj4gbV9kYXRhVGFza1NldDsKLSNlbmRpZgorICAgIFdlYkNvcmU6OlNl
c3Npb25JRCBtX3Nlc3Npb25JRDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3Bl
Y3VsYXRpdmVMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAKaW5kZXggZmM1NTUxMy4uNGFlYmYyOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
U3BlY3VsYXRpdmVMb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZS5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtMb2FkLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1
ZGUgPHd0Zi9SdW5Mb29wLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xZjg2ZGFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaApAQCAtMCwwICsx
LDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQorCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorCitPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbkRhdGFUYXNrOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsKKworY2xhc3MgTmV0d29ya0Rh
dGFUYXNrQ29jb2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya0RhdGFUYXNrIHsKKyAgICBmcmllbmQg
Y2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdv
cmtEYXRhVGFzaz4gY3JlYXRlKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRh
c2tDbGllbnQmIGNsaWVudCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6
Q29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRDbGVh
clJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgTmV0d29ya0RhdGFUYXNrQ29jb2Eoc2Vzc2lvbiwgY2xpZW50LCByZXF1ZXN0
LCBzdG9yZWRDcmVkZW50aWFscywgc2hvdWxkQ29udGVudFNuaWZmLCBzaG91bGRDbGVhclJlZmVy
cmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KSk7CisgICAgfQorCisgICAgfk5ldHdvcmtEYXRhVGFz
a0NvY29hKCk7CisKKyAgICB0eXBlZGVmIHVpbnQ2NF90IFRhc2tJZGVudGlmaWVyOworCisgICAg
dm9pZCBkaWRTZW5kRGF0YSh1aW50NjRfdCB0b3RhbEJ5dGVzU2VudCwgdWludDY0X3QgdG90YWxC
eXRlc0V4cGVjdGVkVG9TZW5kKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3Qg
V2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFu
ZGxlciYmKTsKKyAgICB2b2lkIGRpZENvbXBsZXRlV2l0aEVycm9yKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlRXJyb3ImKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJiYsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXImJik7CisgICAgdm9pZCBk
aWRSZWNlaXZlRGF0YShSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKTsKKyAgICB2b2lkIGRp
ZEJlY29tZURvd25sb2FkKCk7CisKKyAgICB2b2lkIHdpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9u
KFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYs
IFJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXImJik7CisgICAgdm9pZCB0cmFuc2ZlclNhbmRib3hF
eHRlbnNpb25Ub0Rvd25sb2FkKERvd25sb2FkJik7CisKK3ByaXZhdGU6CisgICAgTmV0d29ya0Rh
dGFUYXNrQ29jb2EoTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscywg
V2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5LCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QpOworCisgICAgdm9pZCBzdXNwZW5kKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc3VtZSgpIG92ZXJyaWRlOwor
ICAgIE5ldHdvcmtEYXRhVGFzazo6U3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZTsKKworICAg
IHZvaWQgc2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCAvKmFsbG93T3ZlcndyaXRlKi8pIG92ZXJyaWRl
OworICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
Ym9vbCBhbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNvcmU6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgb3ZlcnJpZGU7CisgICAgYm9vbCB0cnlQYXNzd29y
ZEJhc2VkQXV0aGVudGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmLCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYpOworCisgICAgUmVmUHRyPFNh
bmRib3hFeHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKKyAgICBSZXRhaW5QdHI8TlNVUkxT
ZXNzaW9uRGF0YVRhc2s+IG1fdGFzazsKK307CisKK1dlYkNvcmU6OkNyZWRlbnRpYWwgc2VydmVy
VHJ1c3RDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7
CisKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQpp
bmRleCA2MmNiMGQ3Li4wZDg5ZWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQpAQCAtMjQsNyAr
MjQsNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiTmV0d29ya1Nlc3Np
b24uaCIKKyNpbXBvcnQgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCiAKICNpZiBVU0UoTkVUV09S
S19TRVNTSU9OKQogCkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJEb3dubG9hZFByb3h5TWVz
c2FnZXMuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzLmgi
CisjaW1wb3J0ICJOZXR3b3JrU2Vzc2lvbkNvY29hLmgiCiAjaW1wb3J0ICJTZXNzaW9uVHJhY2tl
ci5oIgogI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW1wb3J0IDxXZWJDb3Jl
L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CkBAIC01MiwyNyArNTMsMTIgQEAgc3RhdGljIHZv
aWQgYXBwbHlCYXNpY0F1dGhvcml6YXRpb25IZWFkZXIoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBjb24KIH0KICNlbmRpZgogCi1OZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRh
VGFzayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGll
bnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50aWFs
cywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIFdlYkNvcmU6
OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xl
YXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKLSAgICA6IG1fZmFpbHVyZVRpbWVyKCp0
aGlzLCAmTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCkKLSAgICAsIG1fc2Vzc2lv
bigmc2Vzc2lvbikKLSAgICAsIG1fY2xpZW50KCZjbGllbnQpCi0gICAgLCBtX3N0b3JlZENyZWRl
bnRpYWxzKHN0b3JlZENyZWRlbnRpYWxzKQotICAgICwgbV9sYXN0SFRUUE1ldGhvZChyZXF1ZXN0
V2l0aENyZWRlbnRpYWxzLmh0dHBNZXRob2QoKSkKLSAgICAsIG1fZmlyc3RSZXF1ZXN0KHJlcXVl
c3RXaXRoQ3JlZGVudGlhbHMpCi0gICAgLCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9I
VFRQUmVkaXJlY3Qoc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKK05l
dHdvcmtEYXRhVGFza0NvY29hOjpOZXR3b3JrRGF0YVRhc2tDb2NvYShOZXR3b3JrU2Vzc2lvbiYg
c2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGlj
eSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hU
VFBSZWRpcmVjdCkKKyAgICA6IE5ldHdvcmtEYXRhVGFzayhzZXNzaW9uLCBjbGllbnQsIHJlcXVl
c3RXaXRoQ3JlZGVudGlhbHMsIHN0b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDbGVhclJlZmVycmVy
T25IVFRQU1RvSFRUUFJlZGlyZWN0KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgCi0gICAgaWYgKCFyZXF1ZXN0V2l0aENyZWRlbnRpYWxzLnVybCgpLmlzVmFsaWQoKSkgewot
ICAgICAgICBzY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIGlmICghcG9ydEFsbG93ZWQocmVxdWVzdFdpdGhDcmVkZW50
aWFscy51cmwoKSkpIHsKLSAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEJsb2NrZWRGYWlsdXJlKTsK
KyAgICBpZiAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpCiAgICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgCisKICAgICBhdXRvIHJlcXVlc3QgPSByZXF1ZXN0V2l0aENyZWRl
bnRpYWxzOwogICAgIGF1dG8gdXJsID0gcmVxdWVzdC51cmwoKTsKICAgICBpZiAoc3RvcmVkQ3Jl
ZGVudGlhbHMgPT0gV2ViQ29yZTo6QWxsb3dTdG9yZWRDcmVkZW50aWFscyAmJiB1cmwucHJvdG9j
b2xJc0luSFRUUEZhbWlseSgpKSB7CkBAIC0xMDQsMTMgKzkwLDEzIEBAIE5ldHdvcmtEYXRhVGFz
azo6TmV0d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRh
c2tDbGllbnQmCiAgICAgfQogCiAgICAgaWYgKHN0b3JlZENyZWRlbnRpYWxzID09IFdlYkNvcmU6
OkFsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsKLSAgICAgICAgbV90YXNrID0gW21fc2Vzc2lvbi0+
bV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlIGRhdGFUYXNrV2l0aFJlcXVlc3Q6bnNSZXF1
ZXN0XTsKLSAgICAgICAgQVNTRVJUKCFtX3Nlc3Npb24tPm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVu
dGlhbHMuY29udGFpbnMoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pKTsKLSAgICAgICAgbV9zZXNz
aW9uLT5tX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLmFkZChbbV90YXNrIHRhc2tJZGVudGlm
aWVyXSwgdGhpcyk7CisgICAgICAgIG1fdGFzayA9IFtkb3duY2FzdDxOZXR3b3JrU2Vzc2lvbkNv
Y29hPihtX3Nlc3Npb24uZ2V0KCkpLm1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSBkYXRh
VGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07CisgICAgICAgIEFTU0VSVCghZG93bmNhc3Q8TmV0
d29ya1Nlc3Npb25Db2NvYT4obV9zZXNzaW9uLmdldCgpKS5tX2RhdGFUYXNrTWFwV2l0aENyZWRl
bnRpYWxzLmNvbnRhaW5zKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSk7CisgICAgICAgIGRvd25j
YXN0PE5ldHdvcmtTZXNzaW9uQ29jb2E+KG1fc2Vzc2lvbi5nZXQoKSkubV9kYXRhVGFza01hcFdp
dGhDcmVkZW50aWFscy5hZGQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIHRoaXMpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIG1fdGFzayA9IFttX3Nlc3Npb24tPm1fc2Vzc2lvbldpdGhvdXRDcmVk
ZW50aWFsU3RvcmFnZSBkYXRhVGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07Ci0gICAgICAgIEFT
U0VSVCghbV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmNvbnRhaW5z
KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSk7Ci0gICAgICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFz
a01hcFdpdGhvdXRDcmVkZW50aWFscy5hZGQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIHRoaXMp
OworICAgICAgICBtX3Rhc2sgPSBbZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Db2NvYT4obV9zZXNz
aW9uLmdldCgpKS5tX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UgZGF0YVRhc2tXaXRo
UmVxdWVzdDpuc1JlcXVlc3RdOworICAgICAgICBBU1NFUlQoIWRvd25jYXN0PE5ldHdvcmtTZXNz
aW9uQ29jb2E+KG1fc2Vzc2lvbi5nZXQoKSkubV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFs
cy5jb250YWlucyhbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkpOworICAgICAgICBkb3duY2FzdDxO
ZXR3b3JrU2Vzc2lvbkNvY29hPihtX3Nlc3Npb24uZ2V0KCkpLm1fZGF0YVRhc2tNYXBXaXRob3V0
Q3JlZGVudGlhbHMuYWRkKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlzKTsKICAgICB9CiAg
ICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiJWxsdSBDcmVhdGluZyBOZXR3b3JrRGF0YVRhc2sgd2l0
aCBVUkwgJXMiLCBbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgbnNSZXF1ZXN0LlVSTC5hYnNvbHV0
ZVN0cmluZy5VVEY4U3RyaW5nKTsKIApAQCAtMTIxLDI3ICsxMDcsMjcgQEAgTmV0d29ya0RhdGFU
YXNrOjpOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRh
VGFza0NsaWVudCYKICNlbmRpZgogfQogCi1OZXR3b3JrRGF0YVRhc2s6On5OZXR3b3JrRGF0YVRh
c2soKQorTmV0d29ya0RhdGFUYXNrQ29jb2E6On5OZXR3b3JrRGF0YVRhc2tDb2NvYSgpCiB7Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV90YXNrKSB7Ci0gICAgICAgIGlm
IChtX3N0b3JlZENyZWRlbnRpYWxzID09IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzOjpBbGxv
d1N0b3JlZENyZWRlbnRpYWxzKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9zZXNzaW9uLT5tX2Rh
dGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLmdldChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkgPT0g
dGhpcyk7Ci0gICAgICAgICAgICBtX3Nlc3Npb24tPm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlh
bHMucmVtb3ZlKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIEFTU0VSVChtX3Nlc3Npb24tPm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlh
bHMuZ2V0KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSA9PSB0aGlzKTsKLSAgICAgICAgICAgIG1f
c2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFscy5yZW1vdmUoW21fdGFzayB0
YXNrSWRlbnRpZmllcl0pOwotICAgICAgICB9CisgICAgaWYgKCFtX3Rhc2spCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX3N0b3JlZENyZWRlbnRpYWxzID09IFdlYkNvcmU6OlN0b3JlZENy
ZWRlbnRpYWxzOjpBbGxvd1N0b3JlZENyZWRlbnRpYWxzKSB7CisgICAgICAgIEFTU0VSVChkb3du
Y2FzdDxOZXR3b3JrU2Vzc2lvbkNvY29hPihtX3Nlc3Npb24uZ2V0KCkpLm1fZGF0YVRhc2tNYXBX
aXRoQ3JlZGVudGlhbHMuZ2V0KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSA9PSB0aGlzKTsKKyAg
ICAgICAgZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Db2NvYT4obV9zZXNzaW9uLmdldCgpKS5tX2Rh
dGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLnJlbW92ZShbbV90YXNrIHRhc2tJZGVudGlmaWVyXSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGRvd25jYXN0PE5ldHdvcmtTZXNzaW9uQ29j
b2E+KG1fc2Vzc2lvbi5nZXQoKSkubV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFscy5nZXQo
W21fdGFzayB0YXNrSWRlbnRpZmllcl0pID09IHRoaXMpOworICAgICAgICBkb3duY2FzdDxOZXR3
b3JrU2Vzc2lvbkNvY29hPihtX3Nlc3Npb24uZ2V0KCkpLm1fZGF0YVRhc2tNYXBXaXRob3V0Q3Jl
ZGVudGlhbHMucmVtb3ZlKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsKICAgICB9CiB9CiAKLXZv
aWQgTmV0d29ya0RhdGFUYXNrOjpkaWRTZW5kRGF0YSh1aW50NjRfdCB0b3RhbEJ5dGVzU2VudCwg
dWludDY0X3QgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kKQordm9pZCBOZXR3b3JrRGF0YVRhc2tD
b2NvYTo6ZGlkU2VuZERhdGEodWludDY0X3QgdG90YWxCeXRlc1NlbnQsIHVpbnQ2NF90IHRvdGFs
Qnl0ZXNFeHBlY3RlZFRvU2VuZCkKIHsKICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgIG1fY2xp
ZW50LT5kaWRTZW5kRGF0YSh0b3RhbEJ5dGVzU2VudCwgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5k
KTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3Qg
V2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgQ2hhbGxlbmdlQ29t
cGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
Q29jb2E6OmRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmIGNoYWxsZW5nZSwgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICAvLyBQcm94eSBhdXRoZW50aWNhdGlvbiBpcyBoYW5kbGVkIGJ5
IENGTmV0d29yayBpbnRlcm5hbGx5LiBXZSBjYW4gZ2V0IGhlcmUgaWYgdGhlIHVzZXIgY2FuY2Vs
cwogICAgIC8vIENGTmV0d29yayBhdXRoZW50aWNhdGlvbiBkaWFsb2csIGFuZCB3ZSBzaG91bGRu
J3QgYXNrIHRoZSBjbGllbnQgdG8gZGlzcGxheSBhbm90aGVyIG9uZSBpbiB0aGF0IGNhc2UuCkBA
IC0xNjEsMTMgKzE0NywxMyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVjZWl2ZUNoYWxs
ZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZQogICAgIH0KIH0KIAot
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZENvbXBsZXRlV2l0aEVycm9yKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlRXJyb3ImIGVycm9yKQordm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6ZGlkQ29t
cGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAg
ICAgaWYgKG1fY2xpZW50KQogICAgICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3Io
ZXJyb3IpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSwgUmVzcG9uc2VDb21wbGV0aW9uSGFu
ZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSwgUmVz
cG9uc2VDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICht
X2NsaWVudCkKICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZU5ldHdvcmtTZXNz
aW9uKFdURk1vdmUocmVzcG9uc2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CkBAIC0x
NzcsMTkgKzE2MywxOSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSwgUgogICAgIH0KIH0KIAotdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVEYXRhKFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI+JiYgZGF0YSkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OmRpZFJlY2VpdmVEYXRhKFJl
ZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgZGF0YSkKIHsKICAgICBpZiAobV9jbGllbnQpCiAg
ICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShXVEZNb3ZlKGRhdGEpKTsKIH0KIAotdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEJlY29tZURvd25sb2FkKCkKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrQ29jb2E6OmRpZEJlY29tZURvd25sb2FkKCkKIHsKICAgICBpZiAobV9jbGllbnQpCiAgICAg
ICAgIG1fY2xpZW50LT5kaWRCZWNvbWVEb3dubG9hZCgpOwogfQogCi12b2lkIE5ldHdvcmtEYXRh
VGFzazo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYmIHJlZGlyZWN0UmVzcG9uc2UsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3Qs
IFJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrQ29jb2E6OndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmJiByZWRpcmVjdFJlc3BvbnNlLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmJiByZXF1ZXN0LCBSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7CiAgICAgaWYgKHJlZGlyZWN0UmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAzMDcg
fHwgcmVkaXJlY3RSZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMwOCkgewogICAgICAgICBB
U1NFUlQobV9sYXN0SFRUUE1ldGhvZCA9PSByZXF1ZXN0Lmh0dHBNZXRob2QoKSk7CkBAIC0yNDAs
NTEgKzIyNiwyMyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6d2lsbFBlcmZvcm1IVFRQUmVkaXJl
Y3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlZAogICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcih7IH0pOwogICAgIH0KIH0KLSAgICAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpzY2hl
ZHVsZUZhaWx1cmUoRmFpbHVyZVR5cGUgdHlwZSkKLXsKLSAgICBBU1NFUlQodHlwZSAhPSBOb0Zh
aWx1cmUpOwotICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSB0eXBlOwotICAgIG1fZmFpbHVy
ZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmZhaWx1
cmVUaW1lckZpcmVkKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OnNldFBlbmRpbmdEb3du
bG9hZExvY2F0aW9uKGNvbnN0IFdURjo6U3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBib29sIGFsbG93T3Zlcndy
aXRlKQogewotICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3QodGhpcyk7Ci0gICAg
Ci0gICAgc3dpdGNoIChtX3NjaGVkdWxlZEZhaWx1cmVUeXBlKSB7Ci0gICAgY2FzZSBCbG9ja2Vk
RmFpbHVyZToKLSAgICAgICAgbV9zY2hlZHVsZWRGYWlsdXJlVHlwZSA9IE5vRmFpbHVyZTsKLSAg
ICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgbV9jbGllbnQtPndhc0Jsb2NrZWQoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW52YWxpZFVSTEZhaWx1cmU6Ci0gICAgICAgIG1f
c2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBOb0ZhaWx1cmU7Ci0gICAgICAgIGlmIChtX2NsaWVudCkK
LSAgICAgICAgICAgIG1fY2xpZW50LT5jYW5ub3RTaG93VVJMKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIE5vRmFpbHVyZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KKyAgICBOZXR3
b3JrRGF0YVRhc2s6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGZpbGVuYW1lLCBzYW5kYm94
RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSk7CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNr
OjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBXVEY6OlN0cmluZyYgZmlsZW5hbWUs
IGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwg
Ym9vbCBhbGxvd092ZXJ3cml0ZSkKLXsKICAgICBBU1NFUlQoIW1fc2FuZGJveEV4dGVuc2lvbik7
CiAgICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlKHNhbmRi
b3hFeHRlbnNpb25IYW5kbGUpOwogICAgIGlmIChtX3NhbmRib3hFeHRlbnNpb24pCiAgICAgICAg
IG1fc2FuZGJveEV4dGVuc2lvbi0+Y29uc3VtZSgpOwogCi0gICAgbV9wZW5kaW5nRG93bmxvYWRM
b2NhdGlvbiA9IGZpbGVuYW1lOwotICAgIG1fdGFzay5nZXQoKS5fcGF0aFRvRG93bmxvYWRUYXNr
RmlsZSA9IGZpbGVuYW1lOworICAgIG1fdGFzay5nZXQoKS5fcGF0aFRvRG93bmxvYWRUYXNrRmls
ZSA9IG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb247CiAKLSAgICBpZiAoYWxsb3dPdmVyd3JpdGUg
JiYgV2ViQ29yZTo6ZmlsZUV4aXN0cyhmaWxlbmFtZSkpCisgICAgaWYgKGFsbG93T3ZlcndyaXRl
ICYmIFdlYkNvcmU6OmZpbGVFeGlzdHMobV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbikpCiAgICAg
ICAgIFdlYkNvcmU6OmRlbGV0ZUZpbGUoZmlsZW5hbWUpOwogfQogCi1ib29sIE5ldHdvcmtEYXRh
VGFzazo6dHJ5UGFzc3dvcmRCYXNlZEF1dGhlbnRpY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIGNvbnN0IENoYWxsZW5nZUNvbXBsZXRpb25I
YW5kbGVyJiBjb21wbGV0aW9uSGFuZGxlcikKK2Jvb2wgTmV0d29ya0RhdGFUYXNrQ29jb2E6OnRy
eVBhc3N3b3JkQmFzZWRBdXRoZW50aWNhdGlvbihjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNl
KCkuaXNQYXNzd29yZEJhc2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMyOSw3ICsy
ODcsNyBAQCBib29sIE5ldHdvcmtEYXRhVGFzazo6dHJ5UGFzc3dvcmRCYXNlZEF1dGhlbnRpY2F0
aW9uKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OnRyYW5zZmVyU2FuZGJveEV4dGVuc2lvblRvRG93bmxvYWQo
RG93bmxvYWQmIGRvd25sb2FkKQordm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6dHJhbnNmZXJT
YW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9hZChEb3dubG9hZCYgZG93bmxvYWQpCiB7CiAgICAgZG93
bmxvYWQuc2V0U2FuZGJveEV4dGVuc2lvbihXVEZNb3ZlKG1fc2FuZGJveEV4dGVuc2lvbikpOwog
fQpAQCAtMzU2LDcgKzMxNCw3IEBAIHN0YXRpYyBib29sIGNlcnRpZmljYXRlc01hdGNoKFNlY1Ry
dXN0UmVmIHRydXN0MSwgU2VjVHJ1c3RSZWYgdHJ1c3QyKQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIE5ldHdvcmtEYXRhVGFzazo6YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9y
SG9zdChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlKQor
Ym9vbCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRpZmljYXRl
Rm9ySG9zdChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdl
KQogewogICAgIGNvbnN0IFN0cmluZyYgaG9zdCA9IGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uo
KS5ob3N0KCk7CiAgICAgTlNBcnJheSAqY2VydGlmaWNhdGVzID0gW05TVVJMUmVxdWVzdCBhbGxv
d3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0Omhvc3RdOwpAQCAtMzc0LDM4ICszMzIs
MzMgQEAgYm9vbCBOZXR3b3JrRGF0YVRhc2s6OmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0
ZUZvckhvc3QoY29uc3QgV2ViQ29yZTo6QXV0aGUKICAgICByZXR1cm4gY2VydGlmaWNhdGVzTWF0
Y2godHJ1c3QuZ2V0KCksIGNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCku
cHJvdGVjdGlvblNwYWNlLnNlcnZlclRydXN0KTsKIH0KIAotU3RyaW5nIE5ldHdvcmtEYXRhVGFz
azo6c3VnZ2VzdGVkRmlsZW5hbWUoKQorU3RyaW5nIE5ldHdvcmtEYXRhVGFza0NvY29hOjpzdWdn
ZXN0ZWRGaWxlbmFtZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3N1Z2dlc3RlZEZpbGVuYW1lLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1fc3VnZ2VzdGVkRmlsZW5hbWU7CiAgICAgcmV0dXJu
IG1fdGFzay5nZXQoKS5yZXNwb25zZS5zdWdnZXN0ZWRGaWxlbmFtZTsKIH0KIAotdm9pZCBOZXR3
b3JrRGF0YVRhc2s6OnNldFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
TmFtZSkKLXsKLSAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkTmFtZTsKLX0KLQot
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNhbmNlbCgpCit2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29h
OjpjYW5jZWwoKQogewogICAgIFttX3Rhc2sgY2FuY2VsXTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0
YVRhc2s6OnJlc3VtZSgpCit2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjpyZXN1bWUoKQogewog
ICAgIGlmIChtX3NjaGVkdWxlZEZhaWx1cmVUeXBlICE9IE5vRmFpbHVyZSkKICAgICAgICAgbV9m
YWlsdXJlVGltZXIuc3RhcnRPbmVTaG90KDApOwogICAgIFttX3Rhc2sgcmVzdW1lXTsKIH0KIAot
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN1c3BlbmQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tDb2Nv
YTo6c3VzcGVuZCgpCiB7CiAgICAgaWYgKG1fZmFpbHVyZVRpbWVyLmlzQWN0aXZlKCkpCiAgICAg
ICAgIG1fZmFpbHVyZVRpbWVyLnN0b3AoKTsKICAgICBbbV90YXNrIHN1c3BlbmRdOwogfQogCi1O
ZXR3b3JrRGF0YVRhc2s6OlN0YXRlIE5ldHdvcmtEYXRhVGFzazo6c3RhdGUoKSBjb25zdAorTmV0
d29ya0RhdGFUYXNrOjpTdGF0ZSBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6c3RhdGUoKSBjb25zdAog
ewogICAgIHN3aXRjaCAoW21fdGFzayBzdGF0ZV0pIHsKICAgICBjYXNlIE5TVVJMU2Vzc2lvblRh
c2tTdGF0ZVJ1bm5pbmc6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQppbmRleCAxMmNiNDUxLi5jZmMyMjYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29h
L05ldHdvcmtQcm9jZXNzQ29jb2EubW0KQEAgLTI5LDcgKzI5LDcgQEAKICNpbXBvcnQgIk5ldHdv
cmtDYWNoZS5oIgogI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIK
ICNpbXBvcnQgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgotI2ltcG9ydCAiTmV0d29ya1Nlc3Np
b24uaCIKKyNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uQ29jb2EuaCIKICNpbXBvcnQgIlNhbmRib3hF
eHRlbnNpb24uaCIKICNpbXBvcnQgIlNlc3Npb25UcmFja2VyLmgiCiAjaW1wb3J0IDxXZWJDb3Jl
L0NGTmV0d29ya1NQSS5oPgpAQCAtODUsMTEgKzg1LDExIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0d29ya1Byb2Nl
c3NDCiAgICAgU2Vzc2lvblRyYWNrZXI6OnNldElkZW50aWZpZXJCYXNlKHBhcmFtZXRlcnMudWlQ
cm9jZXNzQnVuZGxlSWRlbnRpZmllcik7CiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAg
IE5ldHdvcmtTZXNzaW9uOjpzZXRTb3VyY2VBcHBsaWNhdGlvbkF1ZGl0VG9rZW5EYXRhKHNvdXJj
ZUFwcGxpY2F0aW9uQXVkaXREYXRhKCkpOwotICAgIE5ldHdvcmtTZXNzaW9uOjpzZXRTb3VyY2VB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIocGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1
bmRsZUlkZW50aWZpZXIpOwotICAgIE5ldHdvcmtTZXNzaW9uOjpzZXRTb3VyY2VBcHBsaWNhdGlv
blNlY29uZGFyeUlkZW50aWZpZXIocGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFy
eUlkZW50aWZpZXIpOworICAgIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNldFNvdXJjZUFwcGxpY2F0
aW9uQXVkaXRUb2tlbkRhdGEoc291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSk7CisgICAgTmV0
d29ya1Nlc3Npb25Db2NvYTo6c2V0U291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKHBh
cmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKKyAgICBOZXR3b3Jr
U2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIocGFy
YW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIpOwogI2lmIFBMQVRG
T1JNKElPUykKLSAgICBOZXR3b3JrU2Vzc2lvbjo6c2V0Q1REYXRhQ29ubmVjdGlvblNlcnZpY2VU
eXBlKHBhcmFtZXRlcnMuY3REYXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlKTsKKyAgICBOZXR3b3Jr
U2Vzc2lvbkNvY29hOjpzZXRDVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUocGFyYW1ldGVycy5j
dERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUpOwogI2VuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2Nv
YS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25D
b2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZjAwM2MKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
U2Vzc2lvbkNvY29hLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKworT0JKQ19DTEFTUyBOU1VSTFNlc3Npb247
CitPQkpDX0NMQVNTIE5TT3BlcmF0aW9uUXVldWU7CitPQkpDX0NMQVNTIFdLTmV0d29ya1Nlc3Np
b25EZWxlZ2F0ZTsKKworI2luY2x1ZGUgIkRvd25sb2FkSUQuaCIKKyNpbmNsdWRlICJOZXR3b3Jr
RGF0YVRhc2tDb2NvYS5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtTZXNz
aW9uQ29jb2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya1Nlc3Npb24geworICAgIGZyaWVuZCBjbGFz
cyBOZXR3b3JrRGF0YVRhc2tDb2NvYTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtT
ZXNzaW9uPiBjcmVhdGUoV2ViQ29yZTo6U2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIq
KTsKKyAgICB+TmV0d29ya1Nlc3Npb25Db2NvYSgpOworCisgICAgLy8gTXVzdCBiZSBjYWxsZWQg
YmVmb3JlIGFueSBOZXR3b3JrU2Vzc2lvbiBoYXMgYmVlbiBjcmVhdGVkLgorICAgIHN0YXRpYyB2
b2lkIHNldEN1c3RvbVByb3RvY29sTWFuYWdlcihDdXN0b21Qcm90b2NvbE1hbmFnZXIqKTsKKyAg
ICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvbkF1ZGl0VG9rZW5EYXRhKFJldGFpblB0
cjxDRkRhdGFSZWY+JiYpOworICAgIHN0YXRpYyB2b2lkIHNldFNvdXJjZUFwcGxpY2F0aW9uQnVu
ZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VB
cHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CisjaWYgUExBVEZP
Uk0oSU9TKQorICAgIHN0YXRpYyB2b2lkIHNldENURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZShj
b25zdCBTdHJpbmcmKTsKKyNlbmRpZgorCisgICAgTmV0d29ya0RhdGFUYXNrQ29jb2EqIGRhdGFU
YXNrRm9ySWRlbnRpZmllcihOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIFdl
YkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzKTsKKworICAgIHZvaWQgYWRkRG93bmxvYWRJRChOZXR3
b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQpOworICAgIERvd25s
b2FkSUQgZG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIpOwor
ICAgIERvd25sb2FkSUQgdGFrZURvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJ
ZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICBOZXR3b3JrU2Vzc2lvbkNvY29hKFdlYkNvcmU6
OlNlc3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKik7CisKKyAgICB2b2lkIGludmFsaWRh
dGVBbmRDYW5jZWwoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNsZWFyQ3JlZGVudGlhbHMoKSBvdmVy
cmlkZTsKKworICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVy
LCBOZXR3b3JrRGF0YVRhc2tDb2NvYSo+IG1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHM7Cisg
ICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtE
YXRhVGFza0NvY29hKj4gbV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFsczsKKyAgICBIYXNo
TWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgRG93bmxvYWRJRD4gbV9k
b3dubG9hZE1hcDsKKworICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbldpdGhD
cmVkZW50aWFsU3RvcmFnZTsKKyAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRl
PiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZTsKKyAgICBSZXRhaW5QdHI8
TlNVUkxTZXNzaW9uPiBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2U7CisgICAgUmV0
YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9zZXNzaW9uV2l0aG91dENyZWRlbnRp
YWxTdG9yYWdlRGVsZWdhdGU7Cit9OworCisvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KaW5kZXggMDFmMmEzOS4u
ZjEzNDU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Nlc3Npb25Db2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAog
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJOZXR3b3JrU2Vzc2lvbi5oIgorI2ltcG9ydCAi
TmV0d29ya1Nlc3Npb25Db2NvYS5oIgogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKIApAQCAt
ODIsMTcgKzgyLDE3IEBAIHN0YXRpYyBOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRp
b24gdG9OU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpCiB9CiAKIEBpbnRlcmZhY2Ug
V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIDogTlNPYmplY3QgPE5TVVJMU2Vzc2lvbkRhdGFEZWxl
Z2F0ZT4gewotICAgIFJlZlB0cjxXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uPiBfc2Vzc2lvbjsKKyAg
ICBSZWZQdHI8V2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hPiBfc2Vzc2lvbjsKICAgICBib29s
IF93aXRoQ3JlZGVudGlhbHM7CiB9CiAKLS0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdl
YktpdDo6TmV0d29ya1Nlc3Npb24mKXNlc3Npb24gd2l0aENyZWRlbnRpYWxzOihib29sKXdpdGhD
cmVkZW50aWFsczsKKy0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdlYktpdDo6TmV0d29y
a1Nlc3Npb25Db2NvYSYpc2Vzc2lvbiB3aXRoQ3JlZGVudGlhbHM6KGJvb2wpd2l0aENyZWRlbnRp
YWxzOwogCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUK
IAotLSAoaWQpaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjooV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbiYp
c2Vzc2lvbiB3aXRoQ3JlZGVudGlhbHM6KGJvb2wpd2l0aENyZWRlbnRpYWxzCistIChpZClpbml0
V2l0aE5ldHdvcmtTZXNzaW9uOihXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2EmKXNlc3Npb24g
d2l0aENyZWRlbnRpYWxzOihib29sKXdpdGhDcmVkZW50aWFscwogewogICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07CiAgICAgaWYgKCFzZWxmKQpAQCAtMjk2LDcgKzI5Niw3IEBAIHN0YXRpYyBOU1VS
TFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gdG9OU1VSTFNlc3Npb25BdXRoQ2hhbGxl
bmdlRGlzcG9zaXRpCiB7CiAgICAgYXV0byBzdG9yZWRDcmVkZW50aWFscyA9IF93aXRoQ3JlZGVu
dGlhbHMgPyBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsczo6QWxsb3dTdG9yZWRDcmVkZW50aWFs
cyA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzOjpEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlh
bHM7CiAgICAgaWYgKGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IF9zZXNzaW9uLT5kYXRhVGFza0Zv
cklkZW50aWZpZXIoW2RhdGFUYXNrIHRhc2tJZGVudGlmaWVyXSwgc3RvcmVkQ3JlZGVudGlhbHMp
KSB7Ci0gICAgICAgIFJlZjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZE5ldHdvcmtEYXRhVGFz
aygqbmV0d29ya0RhdGFUYXNrKTsKKyAgICAgICAgUmVmPE5ldHdvcmtEYXRhVGFza0NvY29hPiBw
cm90ZWN0ZWROZXR3b3JrRGF0YVRhc2soKm5ldHdvcmtEYXRhVGFzayk7CiAgICAgICAgIGF1dG8g
ZG93bmxvYWRJRCA9IG5ldHdvcmtEYXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsKICAgICAg
ICAgYXV0byYgZG93bmxvYWRNYW5hZ2VyID0gV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2luZ2xl
dG9uKCkuZG93bmxvYWRNYW5hZ2VyKCk7CiAgICAgICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1h
a2VfdW5pcXVlPFdlYktpdDo6RG93bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgZG93bmxvYWRJRCwg
ZG93bmxvYWRUYXNrLCBfc2Vzc2lvbi0+c2Vzc2lvbklEKCksIG5ldHdvcmtEYXRhVGFzay0+c3Vn
Z2VzdGVkRmlsZW5hbWUoKSk7CkBAIC0zMTQsMTQgKzMxNCwxMSBAQCBzdGF0aWMgTlNVUkxTZXNz
aW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uIHRvTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURp
c3Bvc2l0aQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAKLXN0YXRpYyBOU1VSTFNlc3Npb25D
b25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uRm9yVHlwZShOZXR3b3JrU2Vzc2lvbjo6VHlwZSB0
eXBlKQorc3RhdGljIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb25Gb3JT
ZXNzaW9uSUQoY29uc3QgV2ViQ29yZTo6U2Vzc2lvbklEJiBzZXNzaW9uKQogewotICAgIHN3aXRj
aCAodHlwZSkgewotICAgIGNhc2UgTmV0d29ya1Nlc3Npb246OlR5cGU6Ok5vcm1hbDoKLSAgICAg
ICAgcmV0dXJuIFtOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uIGRlZmF1bHRTZXNzaW9uQ29uZmln
dXJhdGlvbl07Ci0gICAgY2FzZSBOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsOgorICAg
IGlmIChzZXNzaW9uLmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHJldHVybiBbTlNVUkxTZXNzaW9u
Q29uZmlndXJhdGlvbiBlcGhlbWVyYWxTZXNzaW9uQ29uZmlndXJhdGlvbl07Ci0gICAgfQorICAg
IHJldHVybiBbTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiBkZWZhdWx0U2Vzc2lvbkNvbmZpZ3Vy
YXRpb25dOwogfQogCiBzdGF0aWMgUmVmUHRyPEN1c3RvbVByb3RvY29sTWFuYWdlcj4mIGdsb2Jh
bEN1c3RvbVByb3RvY29sTWFuYWdlcigpCkBAIC0zNjAsNTIgKzM1Nyw1MiBAQCBzdGF0aWMgU3Ry
aW5nJiBnbG9iYWxDVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUoKQogc3RhdGljIGJvb2wgc2Vz
c2lvbnNDcmVhdGVkID0gZmFsc2U7CiAjZW5kaWYKIAotdm9pZCBOZXR3b3JrU2Vzc2lvbjo6c2V0
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKEN1c3RvbVByb3RvY29sTWFuYWdlciogY3VzdG9tUHJvdG9j
b2xNYW5hZ2VyKQordm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRDdXN0b21Qcm90b2NvbE1h
bmFnZXIoQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBjdXN0b21Qcm90b2NvbE1hbmFnZXIpCiB7CiAg
ICAgQVNTRVJUKCFzZXNzaW9uc0NyZWF0ZWQpOwogICAgIGdsb2JhbEN1c3RvbVByb3RvY29sTWFu
YWdlcigpID0gY3VzdG9tUHJvdG9jb2xNYW5hZ2VyOwogfQogICAgIAotdm9pZCBOZXR3b3JrU2Vz
c2lvbjo6c2V0U291cmNlQXBwbGljYXRpb25BdWRpdFRva2VuRGF0YShSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiYmIGRhdGEpCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNldFNvdXJjZUFwcGxpY2F0
aW9uQXVkaXRUb2tlbkRhdGEoUmV0YWluUHRyPENGRGF0YVJlZj4mJiBkYXRhKQogewogICAgIEFT
U0VSVCghc2Vzc2lvbnNDcmVhdGVkKTsKICAgICBnbG9iYWxTb3VyY2VBcHBsaWNhdGlvbkF1ZGl0
VG9rZW5EYXRhKCkgPSBkYXRhOwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uOjpzZXRTb3VyY2VB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQordm9p
ZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZp
ZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghc2Vzc2lvbnNDcmVh
dGVkKTsKICAgICBnbG9iYWxTb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKSA9IGlk
ZW50aWZpZXI7CiB9CiAKLXZvaWQgTmV0d29ya1Nlc3Npb246OnNldFNvdXJjZUFwcGxpY2F0aW9u
U2Vjb25kYXJ5SWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit2b2lkIE5ldHdv
cmtTZXNzaW9uQ29jb2E6OnNldFNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcihj
b25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFzZXNzaW9uc0NyZWF0ZWQp
OwogICAgIGdsb2JhbFNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigpID0gaWRl
bnRpZmllcjsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKLXZvaWQgTmV0d29ya1Nlc3Npb246OnNl
dENURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit2b2lkIE5l
dHdvcmtTZXNzaW9uQ29jb2E6OnNldENURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZShjb25zdCBT
dHJpbmcmIHR5cGUpCiB7CiAgICAgQVNTRVJUKCFzZXNzaW9uc0NyZWF0ZWQpOwogICAgIGdsb2Jh
bENURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZSgpID0gdHlwZTsKIH0KICNlbmRpZgogCi1SZWY8
TmV0d29ya1Nlc3Npb24+IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoVHlwZSB0eXBlLCBXZWJDb3Jl
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIqIGN1c3RvbVByb3Rv
Y29sTWFuYWdlcikKK1JlZjxOZXR3b3JrU2Vzc2lvbj4gTmV0d29ya1Nlc3Npb25Db2NvYTo6Y3Jl
YXRlKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciog
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdv
cmtTZXNzaW9uKHR5cGUsIHNlc3Npb25JRCwgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya1Nlc3Npb25Db2NvYShzZXNzaW9uSUQsIGN1c3Rv
bVByb3RvY29sTWFuYWdlcikpOwogfQogCi1OZXR3b3JrU2Vzc2lvbiYgTmV0d29ya1Nlc3Npb246
OmRlZmF1bHRTZXNzaW9uKCkKK05ldHdvcmtTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpk
ZWZhdWx0U2Vzc2lvbigpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBzdGF0
aWMgTmV0d29ya1Nlc3Npb24qIHNlc3Npb24gPSAmTmV0d29ya1Nlc3Npb246OmNyZWF0ZShOZXR3
b3JrU2Vzc2lvbjo6VHlwZTo6Tm9ybWFsLCBXZWJDb3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSwgZ2xvYmFsQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKCkuZ2V0KCkpLmxlYWtSZWYoKTsK
KyAgICBzdGF0aWMgTmV0d29ya1Nlc3Npb24qIHNlc3Npb24gPSAmTmV0d29ya1Nlc3Npb25Db2Nv
YTo6Y3JlYXRlKFdlYkNvcmU6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBnbG9iYWxD
dXN0b21Qcm90b2NvbE1hbmFnZXIoKS5nZXQoKSkubGVha1JlZigpOwogICAgIHJldHVybiAqc2Vz
c2lvbjsKIH0KIAotTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZSwgV2Vi
Q29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBjdXN0b21Q
cm90b2NvbE1hbmFnZXIpCi0gICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCitOZXR3b3JrU2Vz
c2lvbkNvY29hOjpOZXR3b3JrU2Vzc2lvbkNvY29hKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKQorICAgIDog
TmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKQogewogICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVu
dCgpOwogCkBAIC00MTMsNyArNDEwLDcgQEAgTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9u
KFR5cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHIKICAgICBz
ZXNzaW9uc0NyZWF0ZWQgPSB0cnVlOwogI2VuZGlmCiAKLSAgICBOU1VSTFNlc3Npb25Db25maWd1
cmF0aW9uICpjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbkZvclR5cGUodHlwZSk7CisgICAg
TlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25G
b3JTZXNzaW9uSUQobV9zZXNzaW9uSUQpOwogCiAgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xl
dG9uKCkuaXNFbmFibGVkKCkpCiAgICAgICAgIGNvbmZpZ3VyYXRpb24uVVJMQ2FjaGUgPSBuaWw7
CkBAIC00NDUsMTEgKzQ0Miw5IEBAIE5ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihUeXBl
IHR5cGUsIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByCiAjZW5kaWYKIAog
ICAgIGlmIChzZXNzaW9uSUQgPT0gV2ViQ29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCkpIHsKLSAgICAgICAgQVNTRVJUKHR5cGUgPT0gVHlwZTo6Tm9ybWFsKTsKICAgICAgICAgaWYg
KENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgc3RvcmFnZSA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY29va2llU3RvcmFnZSgpLmdldCgpKQog
ICAgICAgICAgICAgY29uZmlndXJhdGlvbi5IVFRQQ29va2llU3RvcmFnZSA9IFtbW05TSFRUUENv
b2tpZVN0b3JhZ2UgYWxsb2NdIF9pbml0V2l0aENGSFRUUENvb2tpZVN0b3JhZ2U6c3RvcmFnZV0g
YXV0b3JlbGVhc2VdOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVCh0eXBlID09IFR5cGU6
OkVwaGVtZXJhbCk7CiAgICAgICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdG9yYWdlU2Vzc2lvbik7CiAgICAgICAgIGlmIChDRkhUVFBDb29raWVT
dG9yYWdlUmVmIHN0b3JhZ2UgPSBzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFnZSgpLmdldCgp
KQpAQCAtNDY1LDI1ICs0NjAsMTggQEAgTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5
cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHIKICAgICBMT0co
TmV0d29ya1Nlc3Npb24sICJDcmVhdGVkIE5ldHdvcmtTZXNzaW9uIHdpdGggY29va2llQWNjZXB0
UG9saWN5ICVsdSIsIGNvbmZpZ3VyYXRpb24uSFRUUENvb2tpZVN0b3JhZ2UuY29va2llQWNjZXB0
UG9saWN5KTsKIH0KIAotTmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbigpCitOZXR3b3Jr
U2Vzc2lvbkNvY29hOjp+TmV0d29ya1Nlc3Npb24oKQogewogfQogCi12b2lkIE5ldHdvcmtTZXNz
aW9uOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKK3ZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6aW52
YWxpZGF0ZUFuZENhbmNlbCgpCiB7CiAgICAgW21fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFn
ZSBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsKICAgICBbbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxT
dG9yYWdlIGludmFsaWRhdGVBbmRDYW5jZWxdOwogfQogCiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYgTmV0d29ya1Nlc3Npb246Om5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpIGNvbnN0
Ci17Ci0gICAgYXV0byogc3RvcmFnZVNlc3Npb24gPSBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNl
c3Npb246OnN0b3JhZ2VTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICBSRUxFQVNFX0FTU0VSVChz
dG9yYWdlU2Vzc2lvbik7Ci0gICAgcmV0dXJuICpzdG9yYWdlU2Vzc2lvbjsKLX0KLQotdm9pZCBO
ZXR3b3JrU2Vzc2lvbjo6Y2xlYXJDcmVkZW50aWFscygpCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29j
b2E6OmNsZWFyQ3JlZGVudGlhbHMoKQogewogI2lmICFVU0UoQ1JFREVOVElBTF9TVE9SQUdFX1dJ
VEhfTkVUV09SS19TRVNTSU9OKQogICAgIEFTU0VSVChtX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRp
YWxzLmlzRW1wdHkoKSk7CkBAIC00OTUsNyArNDgzLDcgQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbjo6
Y2xlYXJDcmVkZW50aWFscygpCiAjZW5kaWYKIH0KIAotTmV0d29ya0RhdGFUYXNrKiBOZXR3b3Jr
U2Vzc2lvbjo6ZGF0YVRhc2tGb3JJZGVudGlmaWVyKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50
aWZpZXIgdGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENy
ZWRlbnRpYWxzKQorTmV0d29ya0RhdGFUYXNrQ29jb2EqIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmRh
dGFUYXNrRm9ySWRlbnRpZmllcihOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIg
dGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRp
YWxzKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYgKHN0b3JlZENyZWRl
bnRpYWxzID09IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzOjpBbGxvd1N0b3JlZENyZWRlbnRp
YWxzKQpAQCAtNTAzLDcgKzQ5MSw3IEBAIE5ldHdvcmtEYXRhVGFzayogTmV0d29ya1Nlc3Npb246
OmRhdGFUYXNrRm9ySWRlbnRpZmllcihOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVuCiAgICAgcmV0
dXJuIG1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHMuZ2V0KHRhc2tJZGVudGlmaWVyKTsK
IH0KIAotdm9pZCBOZXR3b3JrU2Vzc2lvbjo6YWRkRG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2s6
OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEIGRvd25sb2FkSUQpCit2
b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmFkZERvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29j
b2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEIGRvd25sb2FkSUQp
CiB7CiAjaWZuZGVmIE5ERUJVRwogICAgIEFTU0VSVCghbV9kb3dubG9hZE1hcC5jb250YWlucyh0
YXNrSWRlbnRpZmllcikpOwpAQCAtNTEzLDEzICs1MDEsMTMgQEAgdm9pZCBOZXR3b3JrU2Vzc2lv
bjo6YWRkRG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVu
dGlmaWUKICAgICBtX2Rvd25sb2FkTWFwLmFkZCh0YXNrSWRlbnRpZmllciwgZG93bmxvYWRJRCk7
CiB9CiAKLURvd25sb2FkSUQgTmV0d29ya1Nlc3Npb246OmRvd25sb2FkSUQoTmV0d29ya0RhdGFU
YXNrOjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmllcikKK0Rvd25sb2FkSUQgTmV0d29ya1Nl
c3Npb25Db2NvYTo6ZG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZp
ZXIgdGFza0lkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKG1fZG93bmxvYWRNYXAuZ2V0KHRhc2tJ
ZGVudGlmaWVyKS5kb3dubG9hZElEKCkpOwogICAgIHJldHVybiBtX2Rvd25sb2FkTWFwLmdldCh0
YXNrSWRlbnRpZmllcik7CiB9CiAKLURvd25sb2FkSUQgTmV0d29ya1Nlc3Npb246OnRha2VEb3du
bG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIpCitE
b3dubG9hZElEIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnRha2VEb3dubG9hZElEKE5ldHdvcmtEYXRh
VGFza0NvY29hOjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmllcikKIHsKICAgICBhdXRvIGRv
d25sb2FkSUQgPSBtX2Rvd25sb2FkTWFwLnRha2UodGFza0lkZW50aWZpZXIpOwogICAgIHJldHVy
biBkb3dubG9hZElEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
bWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCmluZGV4IGNlMGY3M2YuLjg5YTdl
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVO
ZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9t
YWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBSZW1v
dGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9u
SUQgc2Vzc2lvbklEKQogICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZW5zdXJlUHJpdmF0ZUJy
b3dzaW5nU2Vzc2lvbihzZXNzaW9uSUQsIGJhc2UgKyAnLicgKyBTdHJpbmc6Om51bWJlcihzZXNz
aW9uSUQuc2Vzc2lvbklEKCkpKTsKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgYXV0
byBuZXR3b3JrU2Vzc2lvbiA9IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Npb246
OlR5cGU6OkVwaGVtZXJhbCwgc2Vzc2lvbklELCBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCku
c3VwcGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCkpOworICAgIGF1dG8gbmV0d29ya1Nl
c3Npb24gPSBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKHNlc3Npb25JRCwgTmV0d29ya1Byb2Nlc3M6
OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyPigpKTsKICAgICBT
ZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIFdURk1vdmUobmV0d29ya1Nlc3Np
b24pKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKaW5kZXggZTY4NzJlMy4uNmJkYmJh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
RGF0YVRhc2tTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgorI2luY2x1ZGUgIk5l
dHdvcmtEYXRhVGFza1NvdXAuaCIKIAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5o
IgogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRl
ICJEb3dubG9hZFNvdXBFcnJvcnMuaCIKICNpbmNsdWRlICJOZXR3b3JrTG9hZC5oIgogI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNs
dWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKICNpbmNsdWRlICJXZWJFcnJvcnMuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9IVFRQUGFyc2Vycy5oPgpAQCAtNDcsMzAgKzQ3LDE0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBzdGF0aWMgY29uc3Qgc2l6ZV90IGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUgPSA4MTkyOwogCi1O
ZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwg
TmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdFdpdGhDcmVkZW50aWFscywgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMs
IENvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xl
YXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKLSAgICA6IG1fZmFpbHVyZVRpbWVyKCp0
aGlzLCAmTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCkKLSAgICAsIG1fc2Vzc2lv
bigmc2Vzc2lvbikKLSAgICAsIG1fY2xpZW50KCZjbGllbnQpCi0gICAgLCBtX3N0b3JlZENyZWRl
bnRpYWxzKHN0b3JlZENyZWRlbnRpYWxzKQotICAgICwgbV9sYXN0SFRUUE1ldGhvZChyZXF1ZXN0
V2l0aENyZWRlbnRpYWxzLmh0dHBNZXRob2QoKSkKLSAgICAsIG1fZmlyc3RSZXF1ZXN0KHJlcXVl
c3RXaXRoQ3JlZGVudGlhbHMpCi0gICAgLCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9I
VFRQUmVkaXJlY3Qoc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKK05l
dHdvcmtEYXRhVGFza1NvdXA6Ok5ldHdvcmtEYXRhVGFza1NvdXAoTmV0d29ya1Nlc3Npb24mIHNl
c3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRl
bnRpYWxzLCBDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIHNo
b3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCisgICAgOiBOZXR3b3JrRGF0
YVRhc2soc2Vzc2lvbiwgY2xpZW50LCByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBzdG9yZWRDcmVk
ZW50aWFscywgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKICAgICAs
IG1fc2hvdWxkQ29udGVudFNuaWZmKHNob3VsZENvbnRlbnRTbmlmZikKLSAgICAsIG1fdGltZW91
dFNvdXJjZShSdW5Mb29wOjptYWluKCksIHRoaXMsICZOZXR3b3JrRGF0YVRhc2s6OnRpbWVvdXRG
aXJlZCkKKyAgICAsIG1fdGltZW91dFNvdXJjZShSdW5Mb29wOjptYWluKCksIHRoaXMsICZOZXR3
b3JrRGF0YVRhc2tTb3VwOjp0aW1lb3V0RmlyZWQpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLQotICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFza1NldC5hZGQodGhpcyk7Ci0KLSAgICBp
ZiAoIXJlcXVlc3RXaXRoQ3JlZGVudGlhbHMudXJsKCkuaXNWYWxpZCgpKSB7Ci0gICAgICAgIHNj
aGVkdWxlRmFpbHVyZShJbnZhbGlkVVJMRmFpbHVyZSk7CisgICAgZG93bmNhc3Q8TmV0d29ya1Nl
c3Npb25Tb3VwPihtX3Nlc3Npb24uZ2V0KCkpLnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlz
KTsKKyAgICBpZiAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpCiAgICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXBvcnRBbGxvd2VkKHJlcXVlc3RXaXRoQ3JlZGVu
dGlhbHMudXJsKCkpKSB7Ci0gICAgICAgIHNjaGVkdWxlRmFpbHVyZShCbG9ja2VkRmFpbHVyZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBhdXRvIHJlcXVlc3QgPSByZXF1ZXN0V2l0
aENyZWRlbnRpYWxzOwogICAgIGlmIChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1p
bHkoKSkgewpAQCAtOTMsNDQgKzc3LDEzIEBAIE5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFU
YXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmCiAgICAg
Y3JlYXRlUmVxdWVzdChyZXF1ZXN0KTsKIH0KIAotTmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0Rh
dGFUYXNrKCkKK05ldHdvcmtEYXRhVGFza1NvdXA6On5OZXR3b3JrRGF0YVRhc2tTb3VwKCkKIHsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9jbGllbnQpOwogICAg
IGNsZWFyUmVxdWVzdCgpOwotICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFza1NldC5yZW1vdmUodGhp
cyk7Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpzY2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5
cGUgdHlwZSkKLXsKLSAgICBBU1NFUlQodHlwZSAhPSBOb0ZhaWx1cmUpOwotICAgIG1fc2NoZWR1
bGVkRmFpbHVyZVR5cGUgPSB0eXBlOwotICAgIG1fZmFpbHVyZVRpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKLX0KLQotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKCkKLXsKLSAg
ICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCi0gICAgc3dp
dGNoIChtX3NjaGVkdWxlZEZhaWx1cmVUeXBlKSB7Ci0gICAgY2FzZSBCbG9ja2VkRmFpbHVyZToK
LSAgICAgICAgbV9zY2hlZHVsZWRGYWlsdXJlVHlwZSA9IE5vRmFpbHVyZTsKLSAgICAgICAgaWYg
KG1fY2xpZW50KQotICAgICAgICAgICAgbV9jbGllbnQtPndhc0Jsb2NrZWQoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgSW52YWxpZFVSTEZhaWx1cmU6Ci0gICAgICAgIG1fc2NoZWR1bGVk
RmFpbHVyZVR5cGUgPSBOb0ZhaWx1cmU7Ci0gICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAg
ICAgIG1fY2xpZW50LT5jYW5ub3RTaG93VVJMKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IE5vRmFpbHVyZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBkb3duY2FzdDxOZXR3b3Jr
U2Vzc2lvblNvdXA+KG1fc2Vzc2lvbi5nZXQoKSkudW5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygq
dGhpcyk7CiB9CiAKLVN0cmluZyBOZXR3b3JrRGF0YVRhc2s6OnN1Z2dlc3RlZEZpbGVuYW1lKCkK
K1N0cmluZyBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX3N1Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IG1fc3VnZ2VzdGVkRmlsZW5hbWU7CkBAIC0xNDIsMjMgKzk1LDEzIEBAIFN0cmluZyBOZXR3b3Jr
RGF0YVRhc2s6OnN1Z2dlc3RlZEZpbGVuYW1lKCkKICAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKG1fcmVzcG9uc2UudXJsKCkubGFzdFBhdGhDb21wb25lbnQoKSk7CiB9CiAKLXZv
aWQgTmV0d29ya0RhdGFUYXNrOjpzZXRTdWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZE5hbWUpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnNldFBlbmRpbmdEb3dubG9h
ZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYm9vbCBhbGxvd092ZXJ3cml0ZSkKIHsK
LSAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkTmFtZTsKLX0KLQotdm9pZCBOZXR3
b3JrRGF0YVRhc2s6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgYWxsb3dPdmVyd3Jp
dGUpCi17Ci0gICAgbV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbiA9IGZpbGVuYW1lOworICAgIE5l
dHdvcmtEYXRhVGFzazo6c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oZmlsZW5hbWUsIHNhbmRi
b3hFeHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlKTsKICAgICBtX2FsbG93T3ZlcndyaXRl
RG93bmxvYWQgPSBhbGxvd092ZXJ3cml0ZTsKIH0KIAotYm9vbCBOZXR3b3JrRGF0YVRhc2s6OmFs
bG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBOZXR3b3JrRGF0YVRh
c2s6OmNyZWF0ZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQordm9pZCBO
ZXR3b3JrRGF0YVRhc2tTb3VwOjpjcmVhdGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKIHsKICAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IHNvdXBVUkkgPSByZXF1ZXN0LmNy
ZWF0ZVNvdXBVUkkoKTsKICAgICBpZiAoIXNvdXBVUkkpIHsKQEAgLTE2Niw3ICsxMDksNyBAQCB2
b2lkIE5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHUmVmUHRyPFNvdXBSZXF1
ZXN0PiBzb3VwUmVxdWVzdCA9IGFkb3B0R1JlZihzb3VwX3Nlc3Npb25fcmVxdWVzdF91cmkobV9z
ZXNzaW9uLT5zb3VwU2Vzc2lvbigpLCBzb3VwVVJJLmdldCgpLCBudWxscHRyKSk7CisgICAgR1Jl
ZlB0cjxTb3VwUmVxdWVzdD4gc291cFJlcXVlc3QgPSBhZG9wdEdSZWYoc291cF9zZXNzaW9uX3Jl
cXVlc3RfdXJpKGRvd25jYXN0PE5ldHdvcmtTZXNzaW9uU291cD4obV9zZXNzaW9uLmdldCgpKS5z
b3VwU2Vzc2lvbigpLCBzb3VwVVJJLmdldCgpLCBudWxscHRyKSk7CiAgICAgaWYgKCFzb3VwUmVx
dWVzdCkgewogICAgICAgICBzY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOwogICAg
ICAgICByZXR1cm47CkBAIC0yMTgsMTkgKzE2MSwxOSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6
Y3JlYXRlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiAgICAgZ19zaWdu
YWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAibm90aWZ5Ojp0bHMtZXJyb3JzIiwgR19D
QUxMQkFDSyh0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJnb3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soZ290
SGVhZGVyc0NhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNz
YWdlLmdldCgpLCAid3JvdGUtYm9keS1kYXRhIiwgR19DQUxMQkFDSyh3cm90ZUJvZHlEYXRhQ2Fs
bGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fc2Vzc2lvbi0+c291cFNlc3Np
b24oKSwgImF1dGhlbnRpY2F0ZSIsICBHX0NBTExCQUNLKGF1dGhlbnRpY2F0ZUNhbGxiYWNrKSwg
dGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChkb3duY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXA+
KG1fc2Vzc2lvbi5nZXQoKSkuc291cFNlc3Npb24oKSwgImF1dGhlbnRpY2F0ZSIsICBHX0NBTExC
QUNLKGF1dGhlbnRpY2F0ZUNhbGxiYWNrKSwgdGhpcyk7CiAjaWYgRU5BQkxFKFdFQl9USU1JTkcp
CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAibmV0d29yay1ldmVu
dCIsIEdfQ0FMTEJBQ0sobmV0d29ya0V2ZW50Q2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJyZXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHJl
c3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CiAjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5
MSkKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJzdGFydGluZyIs
IEdfQ0FMTEJBQ0soc3RhcnRpbmdDYWxsYmFjayksIHRoaXMpOwogI2Vsc2UKLSAgICBnX3NpZ25h
bF9jb25uZWN0KG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgInJlcXVlc3Qtc3RhcnRlZCIsIEdf
Q0FMTEJBQ0socmVxdWVzdFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwPihtX3Nlc3Npb24uZ2V0KCkpLnNvdXBT
ZXNzaW9uKCksICJyZXF1ZXN0LXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHJlcXVlc3RTdGFydGVkQ2Fs
bGJhY2spLCB0aGlzKTsKICNlbmRpZgogI2VuZGlmCiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNr
OjpjbGVhclJlcXVlc3QoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjbGVhclJlcXVlc3Qo
KQogewogICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCiAgICAgICAgIHJldHVy
bjsKQEAgLTI0NywxMyArMTkwLDEzIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpjbGVhclJlcXVl
c3QoKQogICAgIG1fY2FuY2VsbGFibGUgPSBudWxscHRyOwogICAgIGlmIChtX3NvdXBNZXNzYWdl
KSB7CiAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3NvdXBN
ZXNzYWdlLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRy
LCB0aGlzKTsKLSAgICAgICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlKG1fc2Vzc2lvbi0+
c291cFNlc3Npb24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSwgU09VUF9TVEFUVVNfQ0FOQ0VMTEVE
KTsKKyAgICAgICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlKGRvd25jYXN0PE5ldHdvcmtT
ZXNzaW9uU291cD4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpLCBtX3NvdXBNZXNzYWdl
LmdldCgpLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOwogICAgICAgICBtX3NvdXBNZXNzYWdlID0g
bnVsbHB0cjsKICAgICB9Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVs
bHB0ciwgbnVsbHB0ciwgdGhpcyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9t
YXRjaGVkKGRvd25jYXN0PE5ldHdvcmtTZXNzaW9uU291cD4obV9zZXNzaW9uLmdldCgpKS5zb3Vw
U2Vzc2lvbigpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0
aGlzKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlc3VtZSgpCit2b2lkIE5ldHdvcmtE
YXRhVGFza1NvdXA6OnJlc3VtZSgpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlJ1
bm5pbmcpOwogICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9
PSBTdGF0ZTo6Q29tcGxldGVkKQpAQCAtMjY4LDcgKzIxMSw3IEBAIHZvaWQgTmV0d29ya0RhdGFU
YXNrOjpyZXN1bWUoKQogCiAgICAgc3RhcnRUaW1lb3V0KCk7CiAKLSAgICBSZWZQdHI8TmV0d29y
a0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRh
c2tTb3VwPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIGlmIChtX3NvdXBSZXF1ZXN0ICYmICFt
X2NhbmNlbGxhYmxlKSB7CiAgICAgICAgIG1fY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5j
ZWxsYWJsZV9uZXcoKSk7CiAgICAgICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKG1fc291cFJl
cXVlc3QuZ2V0KCksIG1fY2FuY2VsbGFibGUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5j
UmVhZHlDYWxsYmFjaz4oc2VuZFJlcXVlc3RDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1Jl
ZigpKTsKQEAgLTI4OCw3ICsyMzEsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVzdW1lKCkK
ICAgICB9CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpzdXNwZW5kKCkKK3ZvaWQgTmV0d29y
a0RhdGFUYXNrU291cDo6c3VzcGVuZCgpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6
OlN1c3BlbmRlZCk7CiAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0
YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCkBAIC0yOTgsNyArMjQxLDcgQEAgdm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OnN1c3BlbmQoKQogICAgIHN0b3BUaW1lb3V0KCk7CiB9CiAKLXZvaWQgTmV0d29y
a0RhdGFUYXNrOjpjYW5jZWwoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjYW5jZWwoKQog
ewogICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0
ZTo6Q29tcGxldGVkKQogICAgICAgICByZXR1cm47CkBAIC0zMDYsNyArMjQ5LDcgQEAgdm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OmNhbmNlbCgpCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDYW5jZWxpbmc7
CiAKICAgICBpZiAobV9zb3VwTWVzc2FnZSkKLSAgICAgICAgc291cF9zZXNzaW9uX2NhbmNlbF9t
ZXNzYWdlKG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSwgU09V
UF9TVEFUVVNfQ0FOQ0VMTEVEKTsKKyAgICAgICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdl
KGRvd25jYXN0PE5ldHdvcmtTZXNzaW9uU291cD4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lv
bigpLCBtX3NvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOwogCiAgICAg
Z19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7CiAKQEAgLTMxNCw0MyAr
MjU3LDQzIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpjYW5jZWwoKQogICAgICAgICBjbGVhbkRv
d25sb2FkRmlsZXMoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmludmFsaWRhdGVBbmRD
YW5jZWwoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkK
IHsKICAgICBjYW5jZWwoKTsKICAgICBjbGVhclJlcXVlc3QoKTsKIH0KIAotTmV0d29ya0RhdGFU
YXNrOjpTdGF0ZSBOZXR3b3JrRGF0YVRhc2s6OnN0YXRlKCkgY29uc3QKK05ldHdvcmtEYXRhVGFz
azo6U3RhdGUgTmV0d29ya0RhdGFUYXNrU291cDo6c3RhdGUoKSBjb25zdAogewogICAgIHJldHVy
biBtX3N0YXRlOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6dGltZW91dEZpcmVkKCkKK3Zv
aWQgTmV0d29ya0RhdGFUYXNrU291cDo6dGltZW91dEZpcmVkKCkKIHsKICAgICBpZiAobV9zdGF0
ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAh
bV9jbGllbnQpIHsKICAgICAgICAgY2xlYXJSZXF1ZXN0KCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
ICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAg
IGludmFsaWRhdGVBbmRDYW5jZWwoKTsKICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJy
b3IoUmVzb3VyY2VFcnJvcjo6dGltZW91dEVycm9yKG1fZmlyc3RSZXF1ZXN0LnVybCgpKSk7CiB9
CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpzdGFydFRpbWVvdXQoKQordm9pZCBOZXR3b3JrRGF0
YVRhc2tTb3VwOjpzdGFydFRpbWVvdXQoKQogewogICAgIGlmIChtX2ZpcnN0UmVxdWVzdC50aW1l
b3V0SW50ZXJ2YWwoKSA+IDApCiAgICAgICAgIG1fdGltZW91dFNvdXJjZS5zdGFydE9uZVNob3Qo
bV9maXJzdFJlcXVlc3QudGltZW91dEludGVydmFsKCkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRh
VGFzazo6c3RvcFRpbWVvdXQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzdG9wVGltZW91
dCgpCiB7CiAgICAgbV90aW1lb3V0U291cmNlLnN0b3AoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0
YVRhc2s6OnNlbmRSZXF1ZXN0Q2FsbGJhY2soU291cFJlcXVlc3QqIHNvdXBSZXF1ZXN0LCBHQXN5
bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQordm9pZCBOZXR3b3JrRGF0
YVRhc2tTb3VwOjpzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiBzb3VwUmVxdWVzdCwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCiB7Ci0gICAg
UmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOwor
ICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYo
dGFzayk7CiAgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNr
LT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KSB7CiAgICAg
ICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOwogICAgICAgICByZXR1cm47CkBAIC0zNzEsNyArMzE0
LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnNlbmRSZXF1ZXN0Q2FsbGJhY2soU291cFJlcXVl
c3QqIHNvdXBSZXF1ZXN0LCBHQXN5bmNSZXN1bHQKICAgICAgICAgdGFzay0+ZGlkU2VuZFJlcXVl
c3QoV1RGTW92ZShpbnB1dFN0cmVhbSkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlk
U2VuZFJlcXVlc3QoR1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYgaW5wdXRTdHJlYW0pCit2b2lkIE5l
dHdvcmtEYXRhVGFza1NvdXA6OmRpZFNlbmRSZXF1ZXN0KEdSZWZQdHI8R0lucHV0U3RyZWFtPiYm
IGlucHV0U3RyZWFtKQogewogICAgIGlmIChtX3NvdXBNZXNzYWdlKSB7CiAgICAgICAgIGlmICht
X3Nob3VsZENvbnRlbnRTbmlmZiA9PSBTbmlmZkNvbnRlbnQgJiYgbV9zb3VwTWVzc2FnZS0+c3Rh
dHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfTk9UX01PRElGSUVEKQpAQCAtNDA1LDcgKzM0OCw3IEBA
IHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRTZW5kUmVxdWVzdChHUmVmUHRyPEdJbnB1dFN0cmVh
bT4mJiBpbnB1dFN0cmVhbSkKICAgICBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKIH0KIAotdm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVSZXNwb25zZSgpCit2b2lkIE5ldHdvcmtEYXRhVGFz
a1NvdXA6OmRpZFJlY2VpdmVSZXNwb25zZSgpCiB7CiAgICAgQVNTRVJUKCFtX3Jlc3BvbnNlLmlz
TnVsbCgpKTsKIApAQCAtNDM2LDcgKzM3OSw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRS
ZWNlaXZlUmVzcG9uc2UoKQogICAgIH0pOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6dGxz
RXJyb3JzQ2hhbmdlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgR1BhcmFtU3Bl
YyosIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6dGxz
RXJyb3JzQ2hhbmdlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgR1BhcmFtU3Bl
YyosIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCiB7CiAgICAgaWYgKHRhc2stPnN0YXRlKCkg
PT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQg
fHwgIXRhc2stPm1fY2xpZW50KSB7CiAgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOwpAQCAt
NDQ3LDIwICszOTAsMjAgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnRsc0Vycm9yc0NoYW5nZWRD
YWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIEdQYXJhbVMKICAgICB0YXNrLT50bHNF
cnJvcnNDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFu
Z2VkKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6dGxzRXJyb3JzQ2hhbmdlZCgpCiB7CiAg
ICAgQVNTRVJUKG1fc291cFJlcXVlc3QpOwogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6Y2hlY2tU
TFNFcnJvcnMobV9zb3VwUmVxdWVzdC5nZXQoKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSwgW3RoaXNd
IChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikgewogICAgICAgICBpZiAoZXJyb3IuaXNOdWxs
KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFz
az4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFza1Nv
dXA+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgICAgIGludmFsaWRhdGVBbmRDYW5jZWwoKTsK
ICAgICAgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKGVycm9yKTsKICAgICB9KTsK
IH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3Qo
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjphcHBs
eUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAg
ICAvLyBXZSBhbHdheXMgcHV0IHRoZSBjcmVkZW50aWFscyBpbnRvIHRoZSBVUkwuIEluIHRoZSBD
b2NhIHBvcnQgSFRUUCBmYW1pbHkgY3JlZGVudGlhbHMgYXJlIGFwcGxpZWQgaW4KICAgICAvLyB0
aGUgZGlkUmVjZWl2ZUNoYWxsZW5nZSBjYWxsYmFjaywgYnV0IGxpYnNvdXAgcmVxdWlyZXMgdXMg
dG8gdXNlIHRoaXMgbWV0aG9kIHRvIG92ZXJyaWRlCkBAIC00ODAsOSArNDIzLDkgQEAgdm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OmFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QoUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQogICAgIHJlcXVlc3Quc2V0VVJMKHVybCk7CiB9CiAKLXZvaWQgTmV0d29y
a0RhdGFUYXNrOjphdXRoZW50aWNhdGVDYWxsYmFjayhTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291
cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBTb3VwQXV0aCogc291cEF1dGgsIGdib29sZWFuIHJldHJ5
aW5nLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmF1
dGhlbnRpY2F0ZUNhbGxiYWNrKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogc291
cE1lc3NhZ2UsIFNvdXBBdXRoKiBzb3VwQXV0aCwgZ2Jvb2xlYW4gcmV0cnlpbmcsIE5ldHdvcmtE
YXRhVGFza1NvdXAqIHRhc2spCiB7Ci0gICAgQVNTRVJUKHNlc3Npb24gPT0gdGFzay0+bV9zZXNz
aW9uLT5zb3VwU2Vzc2lvbigpKTsKKyAgICBBU1NFUlQoc2Vzc2lvbiA9PSB0YXNrLT5kb3duY2Fz
dDxOZXR3b3JrU2Vzc2lvblNvdXA+KG1fc2Vzc2lvbi5nZXQoKSkuc291cFNlc3Npb24oKSk7CiAg
ICAgaWYgKHNvdXBNZXNzYWdlICE9IHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCkpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNDk5LDcgKzQ0Miw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0F1dGhl
bnRpY2F0aW9uRmFpbHVyZVN0YXR1c0NvZGUoaW50IGh0dHBTdGF0dXNDb2RlKQogICAgIHJldHVy
biBodHRwU3RhdHVzQ29kZSA9PSBTT1VQX1NUQVRVU19QUk9YWV9BVVRIRU5USUNBVElPTl9SRVFV
SVJFRCB8fCBodHRwU3RhdHVzQ29kZSA9PSBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQ7CiB9CiAK
LXZvaWQgTmV0d29ya0RhdGFUYXNrOjphdXRoZW50aWNhdGUoQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmJiBjaGFsbGVuZ2UpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmF1dGhlbnRpY2F0ZShB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGNoYWxsZW5nZSkKIHsKICAgICBBU1NFUlQobV9zb3Vw
TWVzc2FnZSk7CiAgICAgaWYgKG1fc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVk
ZW50aWFscykgewpAQCAtNTI1LDcgKzQ2OCw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjphdXRo
ZW50aWNhdGUoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBjaGFsbGVuZ2UpCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZShtX3Nlc3Npb24tPnNvdXBT
ZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCkpOworICAgIHNvdXBfc2Vzc2lvbl9wYXVzZV9t
ZXNzYWdlKGRvd25jYXN0PE5ldHdvcmtTZXNzaW9uU291cD4obV9zZXNzaW9uLmdldCgpKS5zb3Vw
U2Vzc2lvbigpLCBtX3NvdXBNZXNzYWdlLmdldCgpKTsKIAogICAgIC8vIFdlIGNvdWxkIGFsc28g
ZG8gdGhpcyBiZWZvcmUgd2UgZXZlbiBzdGFydCB0aGUgcmVxdWVzdCwgYnV0IHRoYXQgd291bGQg
YmUgYXQgdGhlIGV4cGVuc2UKICAgICAvLyBvZiBhbGwgcmVxdWVzdCBsYXRlbmN5LCB2ZXJzdXMg
YSBvbmUtdGltZSBsYXRlbmN5IGZvciB0aGUgc21hbGwgc3Vic2V0IG9mIHJlcXVlc3RzIHRoYXQK
QEAgLTU0Nyw3ICs0OTAsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRlKEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYgY2hhbGxlbmdlKQogICAgICAgICBjb250aW51ZUF1dGhl
bnRpY2F0ZShXVEZNb3ZlKGNoYWxsZW5nZSkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6
Y29udGludWVBdXRoZW50aWNhdGUoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBjaGFsbGVuZ2Up
Cit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNvbnRpbnVlQXV0aGVudGljYXRlKEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiYgY2hhbGxlbmdlKQogewogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZl
Q2hhbGxlbmdlKGNoYWxsZW5nZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgY2hhbGxlbmdlXShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uIGRpc3Bvc2l0
aW9uLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKSB7CiAgICAgICAgIGlmIChtX3N0YXRl
ID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKSB7CkBA
IC01NzksMTMgKzUyMiwxMyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y29udGludWVBdXRoZW50
aWNhdGUoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBjaGFsbGVuZ2UpCiAgICAgICAgICAgICBz
b3VwX2F1dGhfYXV0aGVudGljYXRlKGNoYWxsZW5nZS5zb3VwQXV0aCgpLCBjcmVkZW50aWFsLnVz
ZXIoKS51dGY4KCkuZGF0YSgpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7
CiAgICAgICAgIH0KIAotICAgICAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKG1fc2Vz
c2lvbi0+c291cFNlc3Npb24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSk7CisgICAgICAgIHNvdXBf
c2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UoZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwPihtX3Nl
c3Npb24uZ2V0KCkpLnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCkpOwogICAgIH0p
OwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rp
b25DYWxsYmFjayhHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3Vs
dCwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpza2lw
SW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbkNhbGxiYWNrKEdJbnB1dFN0cmVhbSogaW5wdXRTdHJl
YW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewot
ICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNr
KTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0
UmVmKHRhc2spOwogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwg
dGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewog
ICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjAyLDE1
ICs1NDUsMTUgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnNraXBJbnB1dFN0cmVhbUZvclJlZGly
ZWN0aW9uQ2FsbGJhY2soR0lucHV0U3RyZWFtKiBpbnB1dFMKICAgICAgICAgdGFzay0+ZGlkRmlu
aXNoU2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0
YVRhc2s6OnNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCkKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrU291cDo6c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKQogewogICAgIEFTU0VSVCht
X2lucHV0U3RyZWFtKTsKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwogICAgIGdfaW5wdXRfc3RyZWFtX3NraXBfYXN5bmMobV9pbnB1dFN0cmVhbS5nZXQoKSwg
Z0RlZmF1bHRSZWFkQnVmZmVyU2l6ZSwgR19QUklPUklUWV9ERUZBVUxULCBtX2NhbmNlbGxhYmxl
LmdldCgpLAogICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHNr
aXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uQ2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtS
ZWYoKSk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hTa2lwSW5wdXRTdHJl
YW1Gb3JSZWRpcmVjdGlvbigpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZEZpbmlzaFNr
aXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCkKIHsKICAgICBnX2lucHV0X3N0cmVhbV9jbG9z
ZShtX2lucHV0U3RyZWFtLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKICAgICBjb250aW51ZUhU
VFBSZWRpcmVjdGlvbigpOwpAQCAtNjM3LDcgKzU4MCw3IEBAIHN0YXRpYyBib29sIHNob3VsZFJl
ZGlyZWN0QXNHRVQoU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGJvb2wgY3Jvc3NPcmlnaW4pCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIE5ldHdvcmtEYXRhVGFzazo6c2hvdWxkU3RhcnRIVFRQ
UmVkaXJlY3Rpb24oKQorYm9vbCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzaG91bGRTdGFydEhUVFBS
ZWRpcmVjdGlvbigpCiB7CiAgICAgQVNTRVJUKG1fc291cE1lc3NhZ2UpOwogICAgIEFTU0VSVCgh
bV9yZXNwb25zZS5pc051bGwoKSk7CkBAIC02NTYsNyArNTk5LDcgQEAgYm9vbCBOZXR3b3JrRGF0
YVRhc2s6OnNob3VsZFN0YXJ0SFRUUFJlZGlyZWN0aW9uKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNvbnRpbnVlSFRUUFJlZGlyZWN0aW9uKCkKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrU291cDo6Y29udGludWVIVFRQUmVkaXJlY3Rpb24oKQogewogICAgIEFT
U0VSVChtX3NvdXBNZXNzYWdlKTsKICAgICBBU1NFUlQoIW1fcmVzcG9uc2UuaXNOdWxsKCkpOwpA
QCAtNzI3LDkgKzY3MCw5IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpjb250aW51ZUhUVFBSZWRp
cmVjdGlvbigpCiAgICAgfSk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZWFkQ2FsbGJh
Y2soR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdv
cmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6cmVhZENhbGxiYWNr
KEdJbnB1dFN0cmVhbSogaW5wdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3Jr
RGF0YVRhc2tTb3VwKiB0YXNrKQogewotICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3Rl
Y3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291
cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOwogICAgIGlmICh0YXNrLT5zdGF0ZSgp
ID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVk
IHx8ICghdGFzay0+bV9jbGllbnQgJiYgIXRhc2stPmlzRG93bmxvYWQoKSkpIHsKICAgICAgICAg
dGFzay0+Y2xlYXJSZXF1ZXN0KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTc1MiwxNiArNjk1LDE2
IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZWFkQ2FsbGJhY2soR0lucHV0U3RyZWFtKiBpbnB1
dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1CiAgICAgICAgIHRhc2stPmRpZEZpbmlzaFJlYWQo
KTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlYWQoKQordm9pZCBOZXR3b3JrRGF0YVRh
c2tTb3VwOjpyZWFkKCkKIHsKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOwogICAgIEFTU0VSVChtX2lucHV0U3RyZWFtKTsKICAgICBtX3JlYWRCdWZmZXIuZ3Jv
dyhnRGVmYXVsdFJlYWRCdWZmZXJTaXplKTsKICAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5j
KG1faW5wdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5kYXRhKCksIG1fcmVhZEJ1ZmZlci5z
aXplKCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihyZWFkQ2FsbGJhY2spLCBwcm90
ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZWFk
KGdzc2l6ZSBieXRlc1JlYWQpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFJlYWQoZ3Nz
aXplIGJ5dGVzUmVhZCkKIHsKICAgICBtX3JlYWRCdWZmZXIuc2hyaW5rKGJ5dGVzUmVhZCk7CiAg
ICAgaWYgKG1fZG93bmxvYWRPdXRwdXRTdHJlYW0pIHsKQEAgLTc3NCw3ICs3MTcsNyBAQCB2b2lk
IE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVhZChnc3NpemUgYnl0ZXNSZWFkKQogICAgIH0KIH0KIAot
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFJlYWQoKQordm9pZCBOZXR3b3JrRGF0YVRh
c2tTb3VwOjpkaWRGaW5pc2hSZWFkKCkKIHsKICAgICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7CiAg
ICAgZ19pbnB1dF9zdHJlYW1fY2xvc2UobV9pbnB1dFN0cmVhbS5nZXQoKSwgbnVsbHB0ciwgbnVs
bHB0cik7CkBAIC03OTQsOSArNzM3LDkgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlz
aFJlYWQoKQogICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcih7IH0pOwogfQogCi12
b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2soU291cE11bHRpcGFy
dElucHV0U3RyZWFtKiBtdWx0aXBhcnRJbnB1dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQs
IE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6cmVxdWVz
dE5leHRQYXJ0Q2FsbGJhY2soU291cE11bHRpcGFydElucHV0U3RyZWFtKiBtdWx0aXBhcnRJbnB1
dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2sp
CiB7Ci0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVm
KHRhc2spOworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzID0g
YWRvcHRSZWYodGFzayk7CiAgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGlu
ZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50
KSB7CiAgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOwogICAgICAgICByZXR1cm47CkBAIC04
MTksMTYgKzc2MiwxNiBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVxdWVzdE5leHRQYXJ0Q2Fs
bGJhY2soU291cE11bHRpcGFydElucHV0U3RyZWFtKiBtdWx0aXBhcgogICAgICAgICB0YXNrLT5k
aWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJl
cXVlc3ROZXh0UGFydCgpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlcXVlc3ROZXh0UGFy
dCgpCiB7Ci0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAg
ICBBU1NFUlQobV9tdWx0aXBhcnRJbnB1dFN0cmVhbSk7CiAgICAgQVNTRVJUKCFtX2lucHV0U3Ry
ZWFtKTsKICAgICBzb3VwX211bHRpcGFydF9pbnB1dF9zdHJlYW1fbmV4dF9wYXJ0X2FzeW5jKG1f
bXVsdGlwYXJ0SW5wdXRTdHJlYW0uZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxs
YWJsZS5nZXQoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNr
PihyZXF1ZXN0TmV4dFBhcnRDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKIH0K
IAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlcXVlc3ROZXh0UGFydChHUmVmUHRyPEdJbnB1
dFN0cmVhbT4mJiBpbnB1dFN0cmVhbSkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkUmVx
dWVzdE5leHRQYXJ0KEdSZWZQdHI8R0lucHV0U3RyZWFtPiYmIGlucHV0U3RyZWFtKQogewogICAg
IEFTU0VSVCghbV9pbnB1dFN0cmVhbSk7CiAgICAgbV9pbnB1dFN0cmVhbSA9IFdURk1vdmUoaW5w
dXRTdHJlYW0pOwpAQCAtODM4LDcgKzc4MSw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRS
ZXF1ZXN0TmV4dFBhcnQoR1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYgaW5wdXRTdHJlYW0pCiAgICAg
ZGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5p
c2hSZXF1ZXN0TmV4dFBhcnQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRGaW5pc2hS
ZXF1ZXN0TmV4dFBhcnQoKQogewogICAgIEFTU0VSVCghbV9pbnB1dFN0cmVhbSk7CiAgICAgQVNT
RVJUKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0pOwpAQCAtODQ3LDcgKzc5MCw3IEBAIHZvaWQgTmV0
d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQoKQogICAgIG1fY2xpZW50LT5k
aWRDb21wbGV0ZVdpdGhFcnJvcih7IH0pOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6Z290
SGVhZGVyc0NhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYXNr
KiB0YXNrKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpnb3RIZWFkZXJzQ2FsbGJhY2soU291
cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewogICAg
IGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9
PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewogICAgICAgICB0YXNrLT5j
bGVhclJlcXVlc3QoKTsKQEAgLTg1Nyw3ICs4MDAsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6
Z290SGVhZGVyc0NhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFU
YQogICAgIHRhc2stPmRpZEdldEhlYWRlcnMoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6
OmRpZEdldEhlYWRlcnMoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRHZXRIZWFkZXJz
KCkKIHsKICAgICAvLyBXZSBhcmUgYSBiaXQgbW9yZSBjb25zZXJ2YXRpdmUgd2l0aCB0aGUgcGVy
c2lzdGVudCBjcmVkZW50aWFsIHN0b3JhZ2UgdGhhbiB0aGUgc2Vzc2lvbiBzdG9yZSwKICAgICAv
LyBzaW5jZSB3ZSBhcmUgd2FpdGluZyB1bnRpbCB3ZSBrbm93IHRoYXQgdGhpcyBhdXRoZW50aWNh
dGlvbiBzdWNjZWVkZWQgYmVmb3JlIGFjdHVhbGx5IHN0b3JpbmcuCkBAIC04NzAsNyArODEzLDcg
QEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEdldEhlYWRlcnMoKQogICAgIH0KIH0KIAotdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6Ondyb3RlQm9keURhdGFDYWxsYmFjayhTb3VwTWVzc2FnZSogc291
cE1lc3NhZ2UsIFNvdXBCdWZmZXIqIGJ1ZmZlciwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQordm9p
ZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjp3cm90ZUJvZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2Uq
IHNvdXBNZXNzYWdlLCBTb3VwQnVmZmVyKiBidWZmZXIsIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRh
c2spCiB7CiAgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNr
LT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KSB7CiAgICAg
ICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOwpAQCAtODgwLDE0ICs4MjMsMTQgQEAgdm9pZCBOZXR3
b3JrRGF0YVRhc2s6Ondyb3RlQm9keURhdGFDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3Nh
Z2UsIFNvdXBCdWZmZXIKICAgICB0YXNrLT5kaWRXcml0ZUJvZHlEYXRhKGJ1ZmZlci0+bGVuZ3Ro
KTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFdyaXRlQm9keURhdGEodWludDY0X3Qg
Ynl0ZXNTZW50KQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRXcml0ZUJvZHlEYXRhKHVp
bnQ2NF90IGJ5dGVzU2VudCkKIHsKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOwogICAgIG1fYm9keURhdGFUb3RhbEJ5dGVzU2VudCArPSBieXRlc1NlbnQ7CiAg
ICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKG1fYm9keURhdGFUb3RhbEJ5dGVzU2VudCwgbV9zb3Vw
TWVzc2FnZS0+cmVxdWVzdF9ib2R5LT5sZW5ndGgpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFz
azo6ZG93bmxvYWQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkb3dubG9hZCgpCiB7CiAg
ICAgQVNTRVJUKGlzRG93bmxvYWQoKSk7CiAgICAgQVNTRVJUKG1fcGVuZGluZ0Rvd25sb2FkTG9j
YXRpb24pOwpAQCAtOTMxLDkgKzg3NCw5IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkb3dubG9h
ZCgpCiAgICAgcmVhZCgpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6d3JpdGVEb3dubG9h
ZENhbGxiYWNrKEdPdXRwdXRTdHJlYW0qIG91dHB1dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1
bHQsIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6d3Jp
dGVEb3dubG9hZENhbGxiYWNrKEdPdXRwdXRTdHJlYW0qIG91dHB1dFN0cmVhbSwgR0FzeW5jUmVz
dWx0KiByZXN1bHQsIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCiB7Ci0gICAgUmVmUHRyPE5l
dHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOworICAgIFJlZlB0
cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFzayk7CiAg
ICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgp
ID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPmlzRG93bmxvYWQoKSkgewogICAgICAgICB0
YXNrLT5jbGVhclJlcXVlc3QoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtOTU1LDkgKzg5OCw5IEBA
IHZvaWQgTmV0d29ya0RhdGFUYXNrOjp3cml0ZURvd25sb2FkQ2FsbGJhY2soR091dHB1dFN0cmVh
bSogb3V0cHV0U3RyZWFtLCBHQXN5bmNSCiAgICAgICAgIHRhc2stPmRpZFdyaXRlRG93bmxvYWQo
Ynl0ZXNXcml0dGVuKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OndyaXRlRG93bmxvYWQo
KQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjp3cml0ZURvd25sb2FkKCkKIHsKLSAgICBSZWZQ
dHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxOZXR3
b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogI2lmIEdMSUJfQ0hFQ0tfVkVS
U0lPTigyLCA0NCwgMCkKICAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsX2FzeW5jKG1fZG93
bmxvYWRPdXRwdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5kYXRhKCksIG1fcmVhZEJ1ZmZl
ci5zaXplKCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPih3cml0ZURvd25sb2FkQ2Fs
bGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CkBAIC05NjYsNyArOTA5LDcgQEAgdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OndyaXRlRG93bmxvYWQoKQogICAgICAgICByZWludGVycHJldF9j
YXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHdyaXRlRG93bmxvYWRDYWxsYmFjayksIHByb3RlY3Rl
ZFRoaXMubGVha1JlZigpKSk7CiAgICAgZ190YXNrX3NldF90YXNrX2RhdGEod3JpdGVUYXNrLmdl
dCgpLCB0aGlzLCBudWxscHRyKTsKICAgICBnX3Rhc2tfcnVuX2luX3RocmVhZCh3cml0ZVRhc2su
Z2V0KCksIFtdKEdUYXNrKiB3cml0ZVRhc2ssIGdwb2ludGVyIHNvdXJjZSwgZ3BvaW50ZXIgdXNl
ckRhdGEsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUpIHsKLSAgICAgICAgYXV0byogdGFzayA9
IHN0YXRpY19jYXN0PE5ldHdvcmtEYXRhVGFzayo+KHVzZXJEYXRhKTsKKyAgICAgICAgYXV0byog
dGFzayA9IHN0YXRpY19jYXN0PE5ldHdvcmtEYXRhVGFza1NvdXAqPih1c2VyRGF0YSk7CiAgICAg
ICAgIEdPdXRwdXRTdHJlYW0qIG91dHB1dFN0cmVhbSA9IEdfT1VUUFVUX1NUUkVBTShzb3VyY2Up
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YXNrLT5tX2Rvd25sb2FkT3V0cHV0U3RyZWFtLmdl
dCgpID09IG91dHB1dFN0cmVhbSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhc2stPm1fY2Fu
Y2VsbGFibGUuZ2V0KCkgPT0gY2FuY2VsbGFibGUpOwpAQCAtOTg1LDcgKzkyOCw3IEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrOjp3cml0ZURvd25sb2FkKCkKICNlbmRpZgogfQogCi12b2lkIE5ldHdv
cmtEYXRhVGFzazo6ZGlkV3JpdGVEb3dubG9hZChnc2l6ZSBieXRlc1dyaXR0ZW4pCit2b2lkIE5l
dHdvcmtEYXRhVGFza1NvdXA6OmRpZFdyaXRlRG93bmxvYWQoZ3NpemUgYnl0ZXNXcml0dGVuKQog
ewogICAgIEFTU0VSVChieXRlc1dyaXR0ZW4gPT0gbV9yZWFkQnVmZmVyLnNpemUoKSk7CiAgICAg
YXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5h
Z2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7CkBAIC05OTQsNyArOTM3LDcgQEAg
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFdyaXRlRG93bmxvYWQoZ3NpemUgYnl0ZXNXcml0dGVu
KQogICAgIHJlYWQoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaERvd25s
b2FkKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkRmluaXNoRG93bmxvYWQoKQogewog
ICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7CiAgICAgQVNTRVJUKG1fZG93bmxvYWRP
dXRwdXRTdHJlYW0pOwpAQCAtMTAyMSw3ICs5NjQsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6
ZGlkRmluaXNoRG93bmxvYWQoKQogICAgIGRvd25sb2FkLT5kaWRGaW5pc2goKTsKIH0KIAotdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZhaWxEb3dubG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkRmFpbERvd25sb2FkKGNvbnN0IFJl
c291cmNlRXJyb3ImIGVycm9yKQogewogICAgIGNsZWFyUmVxdWVzdCgpOwogICAgIGNsZWFuRG93
bmxvYWRGaWxlcygpOwpAQCAtMTAzNCw3ICs5NzcsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6
ZGlkRmFpbERvd25sb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogICAgIH0KIH0KIAot
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNsZWFuRG93bmxvYWRGaWxlcygpCit2b2lkIE5ldHdvcmtE
YXRhVGFza1NvdXA6OmNsZWFuRG93bmxvYWRGaWxlcygpCiB7CiAgICAgaWYgKG1fZG93bmxvYWRE
ZXN0aW5hdGlvbkZpbGUpIHsKICAgICAgICAgZ19maWxlX2RlbGV0ZShtX2Rvd25sb2FkRGVzdGlu
YXRpb25GaWxlLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKQEAgLTEwNDYsNyArOTg5LDcgQEAg
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNsZWFuRG93bmxvYWRGaWxlcygpCiAgICAgfQogfQogCi12
b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKIHsKICAgICBpZiAoaXNEb3dubG9hZCgpKSB7CiAgICAgICAgIGRpZEZhaWxEb3dubG9h
ZChwbGF0Zm9ybURvd25sb2FkTmV0d29ya0Vycm9yKGVycm9yLmVycm9yQ29kZSgpLCBlcnJvci5m
YWlsaW5nVVJMKCksIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkpKTsKQEAgLTEwNTksNyAr
MTAwMiw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQogfQogCiAjaWYgRU5BQkxFKFdFQl9USU1JTkcpCi12b2lkIE5ldHdvcmtEYXRh
VGFzazo6bmV0d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBHU29j
a2V0Q2xpZW50RXZlbnQgZXZlbnQsIEdJT1N0cmVhbSosIE5ldHdvcmtEYXRhVGFzayogdGFzaykK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6bmV0d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3Nh
Z2UqIHNvdXBNZXNzYWdlLCBHU29ja2V0Q2xpZW50RXZlbnQgZXZlbnQsIEdJT1N0cmVhbSosIE5l
dHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCiB7CiAgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3Rh
dGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRh
c2stPm1fY2xpZW50KQogICAgICAgICByZXR1cm47CkBAIC0xMDY4LDcgKzEwMTEsNyBAQCB2b2lk
IE5ldHdvcmtEYXRhVGFzazo6bmV0d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBN
ZXNzYWdlLCBHU29ja2V0Q2xpZQogICAgIHRhc2stPm5ldHdvcmtFdmVudChldmVudCk7CiB9CiAK
LXZvaWQgTmV0d29ya0RhdGFUYXNrOjpuZXR3b3JrRXZlbnQoR1NvY2tldENsaWVudEV2ZW50IGV2
ZW50KQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpuZXR3b3JrRXZlbnQoR1NvY2tldENsaWVu
dEV2ZW50IGV2ZW50KQogewogICAgIGRvdWJsZSBkZWx0YVRpbWUgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWVNUygpIC0gbV9zdGFydFRpbWU7CiAgICAgYXV0byYgbG9hZFRpbWluZyA9IG1f
cmVzcG9uc2UubmV0d29ya0xvYWRUaW1pbmcoKTsKQEAgLTExMDUsNyArMTA0OCw3IEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrOjpuZXR3b3JrRXZlbnQoR1NvY2tldENsaWVudEV2ZW50IGV2ZW50KQog
fQogCiAjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjpzdGFydGluZ0NhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0Rh
dGFUYXNrKiB0YXNrKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzdGFydGluZ0NhbGxiYWNr
KFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYXNrU291cCogdGFzaykKIHsK
ICAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRl
KCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpCiAgICAgICAgIHJldHVy
bjsKQEAgLTExMTQsOSArMTA1Nyw5IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpzdGFydGluZ0Nh
bGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYXNrCiAgICAgdGFz
ay0+ZGlkU3RhcnRSZXF1ZXN0KCk7CiB9CiAjZWxzZQotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJl
cXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBz
b3VwTWVzc2FnZSwgU291cFNvY2tldCosIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrU291cDo6cmVxdWVzdFN0YXJ0ZWRDYWxsYmFjayhTb3VwU2Vzc2lvbiogc2Vz
c2lvbiwgU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBTb3VwU29ja2V0KiwgTmV0d29ya0RhdGFU
YXNrU291cCogdGFzaykKIHsKLSAgICBBU1NFUlQoc2Vzc2lvbiA9PSB0YXNrLT5tX3Nlc3Npb24t
PnNvdXBTZXNzaW9uKCkpOworICAgIEFTU0VSVChzZXNzaW9uID09IHRhc2stPmRvd25jYXN0PE5l
dHdvcmtTZXNzaW9uU291cD4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpKTsKICAgICBp
ZiAoc291cE1lc3NhZ2UgIT0gdGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC0xMTI3LDEyICsxMDcwLDEyIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXF1
ZXN0U3RhcnRlZENhbGxiYWNrKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSoKIH0K
ICNlbmRpZgogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkU3RhcnRSZXF1ZXN0KCkKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrU291cDo6ZGlkU3RhcnRSZXF1ZXN0KCkKIHsKICAgICBtX3Jlc3BvbnNl
Lm5ldHdvcmtMb2FkVGltaW5nKCkucmVxdWVzdFN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lTVMoKSAtIG1fc3RhcnRUaW1lOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVz
dGFydGVkQ2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBOZXR3b3JrRGF0YVRhc2sq
IHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlc3RhcnRlZENhbGxiYWNrKFNvdXBN
ZXNzYWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYXNrU291cCogdGFzaykKIHsKICAgICAv
LyBDYWxsZWQgZWFjaCB0aW1lIHRoZSBtZXNzYWdlIGlzIGdvaW5nIHRvIGJlIHNlbnQgYWdhaW4g
ZXhjZXB0IHRoZSBmaXJzdCB0aW1lLgogICAgIC8vIFRoaXMgaGFwcGVucyB3aGVuIGxpYnNvdXAg
aGFuZGxlcyBIVFRQIGF1dGhlbnRpY2F0aW9uLgpAQCAtMTE0Myw3ICsxMDg2LDcgQEAgdm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OnJlc3RhcnRlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2Fn
ZSwgTmV0d29ya0RhdGFUYXMKICAgICB0YXNrLT5kaWRSZXN0YXJ0KCk7CiB9CiAKLXZvaWQgTmV0
d29ya0RhdGFUYXNrOjpkaWRSZXN0YXJ0KCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlk
UmVzdGFydCgpCiB7CiAgICAgbV9zdGFydFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Rp
bWVNUygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jOGZhMWEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2suaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Byb3Rl
Y3Rpb25TcGFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0RhdGFUYXNrU291cCBmaW5hbCA6IHB1
YmxpYyBOZXR3b3JrRGF0YVRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya0Rh
dGFUYXNrPiBjcmVhdGUoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0Ns
aWVudCYgY2xpZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdl
YkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250
ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIHNob3VsZENsZWFyUmVm
ZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBOZXR3b3JrRGF0YVRhc2tTb3VwKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdCwgc3Rv
cmVkQ3JlZGVudGlhbHMsIHNob3VsZENvbnRlbnRTbmlmZiwgc2hvdWxkQ2xlYXJSZWZlcnJlck9u
SFRUUFNUb0hUVFBSZWRpcmVjdCkpOworICAgIH0KKworICAgIH5OZXR3b3JrRGF0YVRhc2tTb3Vw
KCk7CisKKyAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKTsKKworcHJpdmF0ZToKKyAgICBO
ZXR3b3JrRGF0YVRhc2tTb3VwKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50
JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVu
dGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSwgYm9vbCBzaG91bGRDbGVhclJl
ZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKKworICAgIHZvaWQgc3VzcGVuZCgpIG92ZXJy
aWRlOworICAgIHZvaWQgY2FuY2VsKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXN1bWUoKSBvdmVy
cmlkZTsKKyAgICBOZXR3b3JrRGF0YVRhc2s6OlN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgLyphbGxvd092ZXJ3cml0ZSovKSBv
dmVycmlkZTsKKyAgICBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUoKSBjb25zdCBvdmVycmlkZTsK
KworICAgIHZvaWQgdGltZW91dEZpcmVkKCk7CisgICAgdm9pZCBzdGFydFRpbWVvdXQoKTsKKyAg
ICB2b2lkIHN0b3BUaW1lb3V0KCk7CisKKyAgICB2b2lkIGNyZWF0ZVJlcXVlc3QoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdm9pZCBjbGVhclJlcXVlc3QoKTsKKyAgICBz
dGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiwgR0FzeW5jUmVzdWx0
KiwgTmV0d29ya0RhdGFUYXNrU291cCopOworICAgIHZvaWQgZGlkU2VuZFJlcXVlc3QoR1JlZlB0
cjxHSW5wdXRTdHJlYW0+JiYpOworICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisKKyAg
ICBzdGF0aWMgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBHUGFy
YW1TcGVjKiwgTmV0d29ya0RhdGFUYXNrU291cCopOworICAgIHZvaWQgdGxzRXJyb3JzQ2hhbmdl
ZCgpOworCisgICAgdm9pZCBhcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOworICAgIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZUNhbGxiYWNrKFNv
dXBTZXNzaW9uKiwgU291cE1lc3NhZ2UqLCBTb3VwQXV0aCosIGdib29sZWFuIHJldHJ5aW5nLCBO
ZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCBhdXRoZW50aWNhdGUoV2ViQ29yZTo6QXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmJik7CisgICAgdm9pZCBjb250aW51ZUF1dGhlbnRpY2F0ZShX
ZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmKTsKKworICAgIHN0YXRpYyB2b2lkIHNr
aXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uQ2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5j
UmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrU291cCopOworICAgIHZvaWQgc2tpcElucHV0U3RyZWFt
Rm9yUmVkaXJlY3Rpb24oKTsKKyAgICB2b2lkIGRpZEZpbmlzaFNraXBJbnB1dFN0cmVhbUZvclJl
ZGlyZWN0aW9uKCk7CisgICAgYm9vbCBzaG91bGRTdGFydEhUVFBSZWRpcmVjdGlvbigpOworICAg
IHZvaWQgY29udGludWVIVFRQUmVkaXJlY3Rpb24oKTsKKworICAgIHN0YXRpYyB2b2lkIHJlYWRD
YWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5bmNSZXN1bHQqLCBOZXR3b3JrRGF0YVRhc2tTb3Vw
Kik7CisgICAgdm9pZCByZWFkKCk7CisgICAgdm9pZCBkaWRSZWFkKGdzc2l6ZSBieXRlc1JlYWQp
OworICAgIHZvaWQgZGlkRmluaXNoUmVhZCgpOworCisgICAgc3RhdGljIHZvaWQgcmVxdWVzdE5l
eHRQYXJ0Q2FsbGJhY2soU291cE11bHRpcGFydElucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0Kiwg
TmV0d29ya0RhdGFUYXNrU291cCopOworICAgIHZvaWQgcmVxdWVzdE5leHRQYXJ0KCk7CisgICAg
dm9pZCBkaWRSZXF1ZXN0TmV4dFBhcnQoR1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYpOworICAgIHZv
aWQgZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KCk7CisKKyAgICBzdGF0aWMgdm9pZCBnb3RIZWFk
ZXJzQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9p
ZCBkaWRHZXRIZWFkZXJzKCk7CisKKyAgICBzdGF0aWMgdm9pZCB3cm90ZUJvZHlEYXRhQ2FsbGJh
Y2soU291cE1lc3NhZ2UqLCBTb3VwQnVmZmVyKiwgTmV0d29ya0RhdGFUYXNrU291cCopOworICAg
IHZvaWQgZGlkV3JpdGVCb2R5RGF0YSh1aW50NjRfdCBieXRlc1NlbnQpOworCisgICAgdm9pZCBk
b3dubG9hZCgpOworICAgIHN0YXRpYyB2b2lkIHdyaXRlRG93bmxvYWRDYWxsYmFjayhHT3V0cHV0
U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrU291cCopOworICAgIHZvaWQg
d3JpdGVEb3dubG9hZCgpOworICAgIHZvaWQgZGlkV3JpdGVEb3dubG9hZChnc2l6ZSBieXRlc1dy
aXR0ZW4pOworICAgIHZvaWQgZGlkRmFpbERvd25sb2FkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImKTsKKyAgICB2b2lkIGRpZEZpbmlzaERvd25sb2FkKCk7CisgICAgdm9pZCBjbGVhbkRv
d25sb2FkRmlsZXMoKTsKKworICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yJik7CisKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBzdGF0aWMgdm9pZCBuZXR3
b3JrRXZlbnRDYWxsYmFjayhTb3VwTWVzc2FnZSosIEdTb2NrZXRDbGllbnRFdmVudCwgR0lPU3Ry
ZWFtKiwgTmV0d29ya0RhdGFUYXNrU291cCopOworICAgIHZvaWQgbmV0d29ya0V2ZW50KEdTb2Nr
ZXRDbGllbnRFdmVudCk7CisjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKKyAgICBz
dGF0aWMgdm9pZCBzdGFydGluZ0NhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNr
U291cCopOworI2Vsc2UKKyAgICBzdGF0aWMgdm9pZCByZXF1ZXN0U3RhcnRlZENhbGxiYWNrKFNv
dXBTZXNzaW9uKiwgU291cE1lc3NhZ2UqLCBTb3VwU29ja2V0KiwgTmV0d29ya0RhdGFUYXNrU291
cCopOworI2VuZGlmCisgICAgdm9pZCBkaWRTdGFydFJlcXVlc3QoKTsKKyAgICBzdGF0aWMgdm9p
ZCByZXN0YXJ0ZWRDYWxsYmFjayhTb3VwTWVzc2FnZSosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsK
KyAgICB2b2lkIGRpZFJlc3RhcnQoKTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKKwor
ICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07CisgICAgV2ViQ29yZTo6Q29u
dGVudFNuaWZmaW5nUG9saWN5IG1fc2hvdWxkQ29udGVudFNuaWZmOworICAgIEdSZWZQdHI8U291
cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7CisgICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4gbV9zb3Vw
TWVzc2FnZTsKKyAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKKyAgICBH
UmVmUHRyPFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbT4gbV9tdWx0aXBhcnRJbnB1dFN0cmVhbTsK
KyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKKyAgICBHUmVmUHRyPEdB
c3luY1Jlc3VsdD4gbV9wZW5kaW5nUmVzdWx0OworICAgIFdlYkNvcmU6OlByb3RlY3Rpb25TcGFj
ZSBtX3Byb3RlY3Rpb25TcGFjZUZvclBlcnNpc3RlbnRTdG9yYWdlOworICAgIFdlYkNvcmU6OkNy
ZWRlbnRpYWwgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2U7CisgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAgIFZlY3RvcjxjaGFyPiBtX3JlYWRCdWZm
ZXI7CisgICAgdW5zaWduZWQgbV9yZWRpcmVjdENvdW50IHsgMCB9OworICAgIHVpbnQ2NF90IG1f
Ym9keURhdGFUb3RhbEJ5dGVzU2VudCB7IDAgfTsKKyAgICBHUmVmUHRyPEdGaWxlPiBtX2Rvd25s
b2FkRGVzdGluYXRpb25GaWxlOworICAgIEdSZWZQdHI8R0ZpbGU+IG1fZG93bmxvYWRJbnRlcm1l
ZGlhdGVGaWxlOworICAgIEdSZWZQdHI8R091dHB1dFN0cmVhbT4gbV9kb3dubG9hZE91dHB1dFN0
cmVhbTsKKyAgICBib29sIG1fYWxsb3dPdmVyd3JpdGVEb3dubG9hZCB7IGZhbHNlIH07CisjaWYg
RU5BQkxFKFdFQl9USU1JTkcpCisgICAgZG91YmxlIG1fc3RhcnRUaW1lIHsgMCB9OworI2VuZGlm
CisgICAgUnVuTG9vcDo6VGltZXI8TmV0d29ya0RhdGFUYXNrU291cD4gbV90aW1lb3V0U291cmNl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAKaW5kZXggMzRj
MmM3Ny4uYWM4Mjg3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcApAQCAtMjQsOCArMjQsOSBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2lu
Y2x1ZGUgIk5ldHdvcmtTZXNzaW9uU291cC5oIgogCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNr
U291cC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgpAQCAtMzQsNDcgKzM1LDI0IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotUmVmPE5ldHdvcmtTZXNzaW9uPiBOZXR3b3JrU2Vzc2lvbjo6
Y3JlYXRlKFR5cGUgdHlwZSwgU2Vzc2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5h
Z2VyKikKK05ldHdvcmtTZXNzaW9uU291cDo6TmV0d29ya1Nlc3Npb25Tb3VwKFNlc3Npb25JRCBz
ZXNzaW9uSUQpCisgICAgOiBOZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgTmV0d29ya1Nlc3Npb24odHlwZSwgc2Vzc2lvbklELCBudWxscHRyKSk7
CiB9CiAKLU5ldHdvcmtTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKQor
TmV0d29ya1Nlc3Npb25Tb3VwOjp+TmV0d29ya1Nlc3Npb25Tb3VwKCkKIHsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiA9ICZO
ZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpOb3JtYWwsIFNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBudWxscHRyKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJu
ICpzZXNzaW9uOwogfQogCi1OZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpu
ZXR3b3JrU3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9u
ID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoc3RvcmFnZVNlc3Npb24pOwotICAgIHJldHVybiAqc3RvcmFnZVNl
c3Npb247Ci19Ci0KLU5ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihUeXBlIHR5cGUsIFNl
c3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopCi0gICAgOiBtX3Nlc3Np
b25JRChzZXNzaW9uSUQpCi17Ci19Ci0KLU5ldHdvcmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24o
KQotewotfQotCi1Tb3VwU2Vzc2lvbiogTmV0d29ya1Nlc3Npb246OnNvdXBTZXNzaW9uKCkgY29u
c3QKK1NvdXBTZXNzaW9uKiBOZXR3b3JrU2Vzc2lvblNvdXA6OnNvdXBTZXNzaW9uKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdvcmtTZXNzaW9u
KCkuc291cFNlc3Npb24oKTsKIH0KIAotdm9pZCBOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFu
ZENhbmNlbCgpCit2b2lkIE5ldHdvcmtTZXNzaW9uU291cDo6aW52YWxpZGF0ZUFuZENhbmNlbCgp
CiB7CiAgICAgZm9yIChhdXRvKiB0YXNrIDogbV9kYXRhVGFza1NldCkKICAgICAgICAgdGFzay0+
aW52YWxpZGF0ZUFuZENhbmNlbCgpOwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uOjpjbGVhckNy
ZWRlbnRpYWxzKCkKLXsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzVmYjg4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNv
dXAuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24u
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCit0eXBlZGVmIHN0cnVjdCBfU291cFNlc3Np
b24gU291cFNlc3Npb247CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrRGF0
YVRhc2tTb3VwOworCitjbGFzcyBOZXR3b3JrU2Vzc2lvblNvdXAgZmluYWwgOiBwdWJsaWMgTmV0
d29ya1Nlc3Npb24geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya1Nlc3Npb24+IGNy
ZWF0ZShXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgTmV0d29ya1Nlc3Npb25Tb3VwKHNlc3Npb25JRCkpOworICAgIH0KKyAg
ICB+TmV0d29ya1Nlc3Npb25Tb3VwKCk7CisKKyAgICBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24o
KSBjb25zdDsKKworICAgIHZvaWQgcmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soTmV0d29ya0RhdGFU
YXNrU291cCYgdGFzaykgeyBtX2RhdGFUYXNrU2V0LmFkZCgmdGFzayk7IH0KKyAgICB2b2lkIHVu
cmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soTmV0d29ya0RhdGFUYXNrU291cCYgdGFzaykgeyBtX2Rh
dGFUYXNrU2V0LnJlbW92ZSgmdGFzayk7IH0KKworcHJpdmF0ZToKKyAgICBOZXR3b3JrU2Vzc2lv
blNvdXAoV2ViQ29yZTo6U2Vzc2lvbklEKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNl
bCgpIG92ZXJyaWRlOworCisgICAgSGFzaFNldDxOZXR3b3JrRGF0YVRhc2tTb3VwKj4gbV9kYXRh
VGFza1NldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAu
Y3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5n
Q29udGV4dFNvdXAuY3BwCmluZGV4IDhmYjY0ZmEuLjJkYmExMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3Vw
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdv
cmtpbmdDb250ZXh0U291cC5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBSZW1vdGVOZXR3b3Jr
aW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lv
bklEKQogICAgICAgICByZXR1cm47CiAKICAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmVuc3Vy
ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklELCBTdHJpbmc6Om51bWJlcihzZXNzaW9u
SUQuc2Vzc2lvbklEKCkpKTsKLSAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9u
SUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Npb246OlR5cGU6OkVwaGVtZXJh
bCwgc2Vzc2lvbklELCBudWxscHRyKSk7CisgICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24o
c2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKHNlc3Npb25JRCkpOwogfQogCiBOZXR3
b3JrU3RvcmFnZVNlc3Npb24mIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lv
bigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGJhYmYyYTcuLjdkOWEwMzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0yNDksNiArMjQ5LDcgQEAgbGlzdChBUFBF
TkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdv
cmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9zb3VwIgogICAgICIke1dFQktJVDJfRElSfS9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1By
b2Nlc3MvZWZsIgorICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9zb3VwIgogICAg
ICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy91bml4IgogICAgICIke1dFQktJVDJfRElS
fS9QbGF0Zm9ybS9lZmwiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9BUEkvYy9lZmwiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDZmYmRhMjIuLjc1OTU5YTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtR1RLLmNtYWtlCkBAIC04NDUsNiArODQ1LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9J
TkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL0N1
c3RvbVByb3RvY29scy9zb3VwIgogICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvZ3RrIgor
ICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9zb3VwIgogICAgICIke1dFQktJVDJf
RElSfS9OZXR3b3JrUHJvY2Vzcy91bml4IgogICAgICIke1dFQktJVDJfRElSfS9QbGF0Zm9ybS9J
UEMvZ2xpYiIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0FQSS9jL2d0ayIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhN2Vh
NjczLi4zNGIxZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0xMDU1LDEzICsxMDU1LDE3IEBACiAJCTVDMTQyNzEzMUMyM0Y4
OUUwMEQ0MTE4MyAvKiBEb3dubG9hZENvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUMxNDI3MDkxQzIzRjg2OTAwRDQxMTgzIC8qIERvd25sb2Fk
Q29jb2EubW0gKi87IH07CiAJCTVDMTQyNzE4MUMyM0Y4QjcwMEQ0MTE4MyAvKiBDdXN0b21Qcm90
b2NvbE1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVDMTQyNzE0MUMyM0Y4QjAwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXIuaCAq
LzsgfTsKIAkJNUMxNDI3MUQxQzIzRjhDRjAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29sTWFuYWdl
ckNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUMxNDI3MUIxQzIzRjhDQzAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29sTWFuYWdlckNvY29hLm1t
ICovOyB9OworCQk1QzIwQ0JBMDFCQjFFQ0Q4MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb25Db2Nv
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMyMENC
OUUxQkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLzsgfTsKIAkJNUMy
MENCOUQxQkIwRENGQTAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzIwQ0I5QjFCQjBEQ0QyMDA4
OTVCQjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5tbSAqLzsgfTsKIAkJNUMyMENCQTAxQkIxRUNE
ODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1QzIwQ0I5RTFCQjBERDE4MDA4OTVCQjEgLyogTmV0d29ya1Nl
c3Npb24uaCAqLzsgfTsKKwkJNUMyMENCOUQxQkIwRENGQTAwODk1QkIxIC8qIE5ldHdvcmtTZXNz
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
MjBDQjlCMUJCMERDRDIwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgKi87IH07CiAJCTVD
Mjk4REEwMUMzREYwMjEwMDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxvYWQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMjk4RDlFMUMzREVGMjkwMDQ3MEFG
RSAvKiBQZW5kaW5nRG93bmxvYWQuaCAqLzsgfTsKIAkJNUM3NzA2NzQxRDExMzgzODAwMTI3MDBG
IC8qIFdlYlNvY2tldFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDNzcwNjczMUQxMTFEOEIwMDEyNzAwRiAvKiBXZWJTb2NrZXRQcm92
aWRlci5jcHAgKi87IH07CiAJCTVDNzk0MzlCMUQ3NjJENjIwMDMxMDJENCAvKiBXZWJLaXQySW5p
dGlhbGl6ZUNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUM3OTQzOUExRDc2MkNERjAwMzEwMkQ0IC8qIFdlYktpdDJJbml0aWFsaXplQ29jb2Eu
bW0gKi87IH07CiAJCTVDODVDNzg4MUMzRjIzQ0UwMDYxQTRGQSAvKiBQZW5kaW5nRG93bmxvYWQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM4NUM3
ODYxQzNGMjNDNTAwNjFBNEZBIC8qIFBlbmRpbmdEb3dubG9hZC5jcHAgKi87IH07CisJCTVDQkM5
QjhEMUM2NTI3OUMwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCQzlCODkxQzY1MjRBNTAwQThG
RENGIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggKi87IH07CiAJCTVDQkM5QjhEMUM2NTI3OUMw
MEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQkM5QjhCMUM2NTI1NzMwMEE4RkRDRiAvKiBOZXR3
b3JrRGF0YVRhc2tDb2NvYS5tbSAqLzsgfTsKKwkJNUNCQzlCOEQxQzY1Mjc5QzAwQThGRENGIC8q
IE5ldHdvcmtEYXRhVGFzay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1Q0JDOUI4QjFDNjUyNTczMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmNw
cCAqLzsgfTsKIAkJNUNCQzlCOEUxQzY1MkNBMDAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFzay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCQzlCODkx
QzY1MjRBNTAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFzay5oICovOyB9OwogCQk1Q0U4NUIyMDFD
ODhFNjRCMDA3MEJGQ0UgLyogUGluZ0xvYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTg1QjFGMUM4OEU2NDMwMDcwQkZDRSAvKiBQaW5nTG9hZC5o
ICovOyB9OwogCQk2NTAxQkQxQTEyRjEyNDM0MDBFOUYyNDggLyogV0tCdW5kbGVJbnNwZWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODZG
MTcxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCAqLzsgfTsKQEAgLTMx
MzcsMTQgKzMxNDEsMTggQEAKIAkJNUMxNDI3MTQxQzIzRjhCMDAwRDQxMTgzIC8qIEN1c3RvbVBy
b3RvY29sTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDdXN0b21Q
cm90b2NvbE1hbmFnZXIuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9D
dXN0b21Qcm90b2NvbE1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMx
NDI3MTUxQzIzRjhCMDAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29sTWFuYWdlci5tZXNzYWdlcy5p
biAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDdXN0b21Qcm90b2NvbE1hbmFnZXIubWVzc2FnZXMu
aW47IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzE0Mjcx
QjFDMjNGOENDMDBENDExODMgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBDdXN0b21Qcm90b2NvbE1hbmFnZXJD
b2NvYS5tbTsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9Db2NvYS9DdXN0
b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUMyMENCOUUxQkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1QzIwQ0I5QjFCQjBEQ0QyMDA4OTVCQjEgLyogTmV0d29ya1Nlc3Np
b25Db2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdv
cmtTZXNzaW9uQ29jb2EubW07IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vz
c2lvbkNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzIwQ0I5RTFCQjBE
RDE4MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTmV0d29ya1Nlc3Npb24uaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtT
ZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDMjBDQjlCMUJCMERDRDIw
MDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBOZXR3b3JrU2Vzc2lvbi5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrU2Vzc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMjk4RDlF
MUMzREVGMjkwMDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxvYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gUGVuZGluZ0Rvd25sb2FkLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvUGVuZGluZ0Rvd25sb2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVDNzcwNjczMUQxMTFEOEIwMDEyNzAwRiAvKiBXZWJTb2NrZXRQcm92aWRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJTb2NrZXRQcm92aWRlci5jcHA7IHBh
dGggPSBOZXR3b3JrL1dlYlNvY2tldFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNUM3OTQzOUExRDc2MkNERjAwMzEwMkQ0IC8qIFdlYktpdDJJbml0aWFsaXplQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJLaXQySW5p
dGlhbGl6ZUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzdDODhEQzFE
MEY0MUEwMDA5RDJGNkQgLyogV2ViU29ja2V0UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV2ViU29ja2V0UHJvdmlkZXIuaDsgcGF0aCA9IE5ldHdvcmsvV2ViU29j
a2V0UHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM4NUM3ODYxQzNG
MjNDNTAwNjFBNEZBIC8qIFBlbmRpbmdEb3dubG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBQZW5kaW5nRG93bmxvYWQuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTVDQkM5QjhCMUM2NTI1NzMwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0d29ya0RhdGFUYXNrLmNw
cDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVDQkM5Qjg5MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3b3JrRGF0
YVRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0RhdGFUYXNr
Lmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNUNCQzlCODkxQzY1MjRBNTAwQThGRENGIC8qIE5ldHdvcmtEYXRh
VGFza0NvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtEYXRh
VGFza0NvY29hLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tD
b2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0JDOUI4QjFDNjUyNTczMDBB
OEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tDb2NvYS5tbTsgcGF0aCA9IE5ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1Q0U4NUIxRjFDODhFNjQzMDA3MEJGQ0UgLyogUGluZ0xvYWQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGluZ0xvYWQuaDsgcGF0aCA9IE5ldHdvcmtQcm9j
ZXNzL1BpbmdMb2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVENDQyQTU1MTZE
NTg1NjcwMEFDMzMzMSAvKiBQbHVnaW5TZXJ2aWNlLmVudGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gUGx1
Z2luU2VydmljZS5lbnRpdGxlbWVudHM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
NDU0LDYgKzU0NjIsNyBAQAogCQkJCTVDMTQyNkU1MUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3b3Jr
UmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAgKi8sCiAJCQkJNUMxNDI2RTYxQzIzRjgwNTAwRDQx
MTgzIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmggKi8sCiAJCQkJNUMyMENCOUUx
QkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmggKi8sCisJCQkJNUMyMENCOUUxQkIw
REQxODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmNwcCAqLywKIAkJCQk1Q0U4NUIxRjFDODhF
NjQzMDA3MEJGQ0UgLyogUGluZ0xvYWQuaCAqLywKIAkJCQlFMUI3ODQ3MDE2M0YyNDY5MDAwN0I2
OTIgLyogUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCAqLywKIAkJCSk7CkBAIC01ODQ1LDggKzU4
NTQsMTAgQEAKIAkJN0VDNEYwRjgxOEU0QTkyMjAwODA1NkFGIC8qIGNvY29hICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1Q0JDOUI4QjFDNjUyNTczMDBB
OEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EuaCAqLywKIAkJCQk1Q0JDOUI4QjFDNjUyNTcz
MDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gKi8sCiAJCQkJN0VDNEYwRjkxOEU0
QTk0NTAwODA1NkFGIC8qIE5ldHdvcmtQcm9jZXNzQ29jb2EubW0gKi8sCisJCQkJNUMyMENCOUIx
QkIwRENEMjAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLywKIAkJCQk1QzIwQ0I5
QjFCQjBEQ0QyMDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5tbSAqLywKIAkJCSk7CiAJ
CQluYW1lID0gY29jb2E7CkBAIC03NzI4LDYgKzc3MzksNyBAQAogCQkJCTUxM0ExNjREMTYzMEE5
QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTFERDlGMjkxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQkM5QjhFMUM2NTJDQTAw
MEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQkM5QjhF
MUM2NTJDQTAwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODM5OTAyMDMxQkU5QTAyQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4M0Q0NTRENzFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTgzOTE0OTY1MUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3b3Jr
TG9hZFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtNzc0Myw2ICs3NzU1LDcgQEAKIAkJ
CQlFMTUyNTUxQjE3MDExODE5MDAzRDdBREIgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMTQyNkYwMUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMyMENCQTAx
QkIxRUNEODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
QzIwQ0JBMDFCQjFFQ0Q4MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzFBMkVDNTYxNDg5OUMwOTAwODEwRDcxIC8qIE5vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTMxMjYxRjE0OEZGODJDMDBCQTJB
MzkgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMUEyRUM1MjE0ODk5ODE5MDA4MTBENzEgLyogTm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RNYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtOTIwNCw2ICs5MjE3LDcg
QEAKIAkJCQk4MzEwNDI4QzFCRDZCNjZGMDBBNzE1RTQgLyogTmV0d29ya0NhY2hlU3VicmVzb3Vy
Y2VzRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEzQTE2NEMxNjMwQTlCRjAwNUQ3RDIy
IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTUxREQ5RjI4MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0JDOUI4RDFDNjUyNzlD
MDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQkM5
QjhEMUM2NTI3OUMwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTgzOTkwMjAyMUJFOUEwMkIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4MzZFRUI4MDFCRTlFQzlFMDA2QjRCODIgLyogTmV0d29ya0xvYWRN
YWMubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0Lm1tCmluZGV4IDFjYzE1YzYuLjU5YzYwOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9t
YWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vz
c2lvbklEIHNlc3Npb25JRAogCiAgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjplbnN1cmVQcml2
YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25JRCwgYmFzZSArICcuJyArIFN0cmluZzo6bnVtYmVy
KHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpOwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAg
YXV0byBuZXR3b3JrU2Vzc2lvbiA9IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Np
b246OlR5cGU6OkVwaGVtZXJhbCwgc2Vzc2lvbklELCBudWxscHRyKTsKKyAgICBhdXRvIG5ldHdv
cmtTZXNzaW9uID0gTmV0d29ya1Nlc3Npb246OmNyZWF0ZShzZXNzaW9uSUQpOwogICAgIFNlc3Np
b25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgV1RGTW92ZShuZXR3b3JrU2Vzc2lvbikp
OwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29u
dGV4dC5jcHAKaW5kZXggMmY5ODcxYy4uZTZiNTY0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291
cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vz
c2lvbklEIHNlc3Npb25JRAogICAgICAgICByZXR1cm47CiAKICAgICBOZXR3b3JrU3RvcmFnZVNl
c3Npb246OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklELCBTdHJpbmc6Om51
bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKLSAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vz
c2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Npb246OlR5
cGU6OkVwaGVtZXJhbCwgc2Vzc2lvbklELCBudWxscHRyKSk7CisgICAgU2Vzc2lvblRyYWNrZXI6
OnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKHNlc3Npb25JRCkp
OwogfQogCiB2b2lkIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldENvb2tpZUFjY2VwdFBv
bGljeUZvckFsbENvbnRleHRzKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292337</attachid>
            <date>2016-10-21 03:38:53 -0700</date>
            <delta_ts>2016-10-21 03:59:04 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>wk2-network-session-subclass.diff</filename>
            <type>text/plain</type>
            <size>108807</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggMWFjMTA2Yy4uNmJkYTNiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTE4MiwxMCArMTgyLDEyIEBAIGVuZGlmICgpCiAKIHNldChOZXR3b3JrUHJvY2Vz
c19DT01NT05fU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKICAg
ICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3Jt
U3RyYXRlZ2llcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
Y3BwCisgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCiAKICAgICBOZXR3b3Jr
UHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZGE0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCkBAIC0wLDAgKzEsMTE0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtE
YXRhVGFzay5oIgorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKworI2luY2x1ZGUgIk5ldHdv
cmtTZXNzaW9uLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworI2lmIFBMQVRGT1JN
KENPQ09BKQorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCisjZW5kaWYKKyNpZiBV
U0UoU09VUCkKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2tTb3VwLmgiCisjZW5kaWYKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWY8TmV0d29y
a0RhdGFUYXNrPiBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lv
biwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENvbnRlbnRTbmlm
ZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9u
SFRUUFNUb0hUVFBSZWRpcmVjdCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZXR1cm4g
TmV0d29ya0RhdGFUYXNrQ29jb2E6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIHN0
b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QpOworI2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAgcmV0dXJu
IE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIHN0
b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QpOworI2VuZGlmCit9CisKK05ldHdvcmtEYXRhVGFzazo6TmV0
d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGll
bnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxz
LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgYm9vbCBzaG91bGRDbGVhclJl
ZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQorICAgIDogbV9mYWlsdXJlVGltZXIoKnRoaXMs
ICZOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKQorICAgICwgbV9zZXNzaW9uKHNl
c3Npb24pCisgICAgLCBtX2NsaWVudCgmY2xpZW50KQorICAgICwgbV9zdG9yZWRDcmVkZW50aWFs
cyhzdG9yZWRDcmVkZW50aWFscykKKyAgICAsIG1fbGFzdEhUVFBNZXRob2QocmVxdWVzdFdpdGhD
cmVkZW50aWFscy5odHRwTWV0aG9kKCkpCisgICAgLCBtX2ZpcnN0UmVxdWVzdChyZXF1ZXN0V2l0
aENyZWRlbnRpYWxzKQorICAgICwgbV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJl
ZGlyZWN0KHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghcmVxdWVzdFdpdGhDcmVkZW50aWFs
cy51cmwoKS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxG
YWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcG9ydEFsbG93ZWQo
cmVxdWVzdFdpdGhDcmVkZW50aWFscy51cmwoKSkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJl
KEJsb2NrZWRGYWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworTmV0d29ya0Rh
dGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVCghbV9jbGllbnQpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2No
ZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlIHR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUgIT0gTm9G
YWlsdXJlKTsKKyAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gdHlwZTsKKyAgICBtX2ZhaWx1
cmVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpmYWls
dXJlVGltZXJGaXJlZCgpCit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKworICAgIHN3aXRjaCAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSkgeworICAg
IGNhc2UgQmxvY2tlZEZhaWx1cmU6CisgICAgICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBO
b0ZhaWx1cmU7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50LT53
YXNCbG9ja2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludmFsaWRVUkxGYWlsdXJl
OgorICAgICAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJlOworICAgICAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgICAgICBtX2NsaWVudC0+Y2Fubm90U2hvd1VSTCgpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBOb0ZhaWx1cmU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VT
U0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtE
YXRhVGFzay5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmgKaW5kZXggYjYyNzU4Yi4uNGRjMTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKQEAgLTM2LDI1ICszNiwxMSBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgog
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKENPQ09BKQotT0JK
Q19DTEFTUyBOU1VSTFNlc3Npb25EYXRhVGFzazsKLSNlbmRpZgotCi0jaWYgVVNFKFNPVVApCi0j
aW5jbHVkZSA8V2ViQ29yZS9Qcm90ZWN0aW9uU3BhY2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlUmVzcG9uc2UuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0
Zi9nbGliL0dSZWZQdHIuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLWNsYXNzIENyZWRlbnRpYWw7CiBjbGFzcyBSZXNvdXJj
ZUVycm9yOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIH0KQEAgLTg2LDE2ICs3MiwxNCBAQCBwdWJsaWM6CiB9Owog
CiBjbGFzcyBOZXR3b3JrRGF0YVRhc2sgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrRGF0YVRh
c2s+IHsKLSAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nlc3Npb247CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxOZXR3b3JrRGF0YVRhc2s+IGNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwg
TmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlh
bHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJv
b2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFzayhzZXNzaW9uLCBjbGllbnQs
IHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENs
ZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBzdXNwZW5kKCk7Ci0gICAgdm9pZCBjYW5jZWwoKTsKLSAgICB2b2lkIHJlc3VtZSgpOworICAg
IHN0YXRpYyBSZWY8TmV0d29ya0RhdGFUYXNrPiBjcmVhdGUoTmV0d29ya1Nlc3Npb24mLCBOZXR3
b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5LCBi
b29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOworCisgICAgdmly
dHVhbCB+TmV0d29ya0RhdGFUYXNrKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXN1
bWUoKSA9IDA7CiAKICAgICBlbnVtIGNsYXNzIFN0YXRlIHsKICAgICAgICAgUnVubmluZywKQEAg
LTEwMywyNiArODcsMTEgQEAgcHVibGljOgogICAgICAgICBDYW5jZWxpbmcsCiAgICAgICAgIENv
bXBsZXRlZAogICAgIH07Ci0gICAgU3RhdGUgc3RhdGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0
YXRlIHN0YXRlKCkgY29uc3QgPSAwOwogCi0gICAgdHlwZWRlZiB1aW50NjRfdCBUYXNrSWRlbnRp
ZmllcjsKLSAgICAKLSAgICB+TmV0d29ya0RhdGFUYXNrKCk7Ci0KLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICB2b2lkIGRpZFNlbmREYXRhKHVpbnQ2NF90IHRvdGFsQnl0ZXNTZW50LCB1aW50NjRf
dCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQpOwotICAgIHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5n
ZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIENoYWxsZW5nZUNvbXBs
ZXRpb25IYW5kbGVyJiYpOwotICAgIHZvaWQgZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYpOwotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmJiwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciYmKTsKLSAg
ICB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYpOwotICAg
IHZvaWQgZGlkQmVjb21lRG93bmxvYWQoKTsKLQotICAgIHZvaWQgd2lsbFBlcmZvcm1IVFRQUmVk
aXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmJiwgUmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlciYmKTsKLSAgICB2b2lkIHRyYW5zZmVy
U2FuZGJveEV4dGVuc2lvblRvRG93bmxvYWQoRG93bmxvYWQmKTsKLSNlbmRpZgogICAgIE5ldHdv
cmtEYXRhVGFza0NsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KICAg
ICB2b2lkIGNsZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IG51bGxwdHI7IH0KLSAgICAKKwogICAg
IERvd25sb2FkSUQgcGVuZGluZ0Rvd25sb2FkSUQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdE
b3dubG9hZElEOyB9CiAgICAgUGVuZGluZ0Rvd25sb2FkKiBwZW5kaW5nRG93bmxvYWQoKSBjb25z
dCB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZDsgfQogICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25s
b2FkSUQoRG93bmxvYWRJRCBkb3dubG9hZElEKQpAQCAtMTM2LDg3ICsxMDUsMzEgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlQoIW1fcGVuZGluZ0Rvd25sb2FkKTsKICAgICAgICAgbV9wZW5kaW5n
RG93bmxvYWQgPSAmcGVuZGluZ0Rvd25sb2FkOwogICAgIH0KLSAgICB2b2lkIHNldFBlbmRpbmdE
b3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSYsIGJvb2wgYWxsb3dPdmVyd3JpdGUpOworCisgICAgdmlydHVhbCB2b2lk
IHNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgLyphbGxvd092ZXJ3cml0ZSovKSB7IG1f
cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBmaWxlbmFtZTsgfQogICAgIGNvbnN0IFN0cmluZyYg
cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9h
ZExvY2F0aW9uOyB9CiAgICAgYm9vbCBpc0Rvd25sb2FkKCkgY29uc3QgeyByZXR1cm4gISFtX3Bl
bmRpbmdEb3dubG9hZElELmRvd25sb2FkSUQoKTsgfQogCiAgICAgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiBmaXJzdFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0UmVxdWVz
dDsgfQotICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpOwotICAgIHZvaWQgc2V0U3VnZ2Vz
dGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBhbGxvd3NTcGVjaWZpY0hUVFBT
Q2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Jik7Ci0gICAgCi1wcml2YXRlOgotICAgIE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYs
IE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xp
Y3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CisgICAg
dmlydHVhbCBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUoKSBjb25zdCB7IHJldHVybiBTdHJpbmco
KTsgfQorICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBzdWdnZXN0
ZWROYW1lKSB7IG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWROYW1lOyB9CisgICAgdmly
dHVhbCBib29sIGFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAg
Ym9vbCB0cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYpOwor
cHJvdGVjdGVkOgorICAgIE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYsIE5ldHdvcmtE
YXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6
OlN0b3JlZENyZWRlbnRpYWxzLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQ
UmVkaXJlY3QpOwogCi0jaWYgVVNFKFNPVVApCi0gICAgdm9pZCB0aW1lb3V0RmlyZWQoKTsKLSAg
ICB2b2lkIHN0YXJ0VGltZW91dCgpOwotICAgIHZvaWQgc3RvcFRpbWVvdXQoKTsKLSAgICB2b2lk
IGludmFsaWRhdGVBbmRDYW5jZWwoKTsKLSAgICB2b2lkIGNyZWF0ZVJlcXVlc3QoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBjbGVhclJlcXVlc3QoKTsKLSAgICBz
dGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiwgR0FzeW5jUmVzdWx0
KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCBkaWRTZW5kUmVxdWVzdChHUmVmUHRyPEdJ
bnB1dFN0cmVhbT4mJik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKLSAgICBzdGF0
aWMgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBHUGFyYW1TcGVj
KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkKCk7Ci0gICAg
dm9pZCBhcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYpOwotICAgIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZUNhbGxiYWNrKFNvdXBTZXNzaW9uKiwg
U291cE1lc3NhZ2UqLCBTb3VwQXV0aCosIGdib29sZWFuIHJldHJ5aW5nLCBOZXR3b3JrRGF0YVRh
c2sqKTsKLSAgICB2b2lkIGF1dGhlbnRpY2F0ZShXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYmKTsKLSAgICB2b2lkIGNvbnRpbnVlQXV0aGVudGljYXRlKFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiYpOwotICAgIHN0YXRpYyB2b2lkIHNraXBJbnB1dFN0cmVhbUZvclJl
ZGlyZWN0aW9uQ2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0Rh
dGFUYXNrKik7Ci0gICAgdm9pZCBza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOwotICAg
IHZvaWQgZGlkRmluaXNoU2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKLSAgICBib29s
IHNob3VsZFN0YXJ0SFRUUFJlZGlyZWN0aW9uKCk7Ci0gICAgdm9pZCBjb250aW51ZUhUVFBSZWRp
cmVjdGlvbigpOwotICAgIHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBH
QXN5bmNSZXN1bHQqLCBOZXR3b3JrRGF0YVRhc2sqKTsKLSAgICB2b2lkIHJlYWQoKTsKLSAgICB2
b2lkIGRpZFJlYWQoZ3NzaXplIGJ5dGVzUmVhZCk7Ci0gICAgdm9pZCBkaWRGaW5pc2hSZWFkKCk7
Ci0gICAgc3RhdGljIHZvaWQgcmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2soU291cE11bHRpcGFydElu
cHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCBy
ZXF1ZXN0TmV4dFBhcnQoKTsKLSAgICB2b2lkIGRpZFJlcXVlc3ROZXh0UGFydChHUmVmUHRyPEdJ
bnB1dFN0cmVhbT4mJik7Ci0gICAgdm9pZCBkaWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQoKTsKLSAg
ICBzdGF0aWMgdm9pZCBnb3RIZWFkZXJzQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0
YVRhc2sqKTsKLSAgICB2b2lkIGRpZEdldEhlYWRlcnMoKTsKLSAgICBzdGF0aWMgdm9pZCB3cm90
ZUJvZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBTb3VwQnVmZmVyKiwgTmV0d29ya0RhdGFU
YXNrKik7Ci0gICAgdm9pZCBkaWRXcml0ZUJvZHlEYXRhKHVpbnQ2NF90IGJ5dGVzU2VudCk7Ci0g
ICAgdm9pZCBkb3dubG9hZCgpOwotICAgIHN0YXRpYyB2b2lkIHdyaXRlRG93bmxvYWRDYWxsYmFj
ayhHT3V0cHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAg
dm9pZCB3cml0ZURvd25sb2FkKCk7Ci0gICAgdm9pZCBkaWRXcml0ZURvd25sb2FkKGdzaXplIGJ5
dGVzV3JpdHRlbik7Ci0gICAgdm9pZCBkaWRGYWlsRG93bmxvYWQoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciYpOwotICAgIHZvaWQgZGlkRmluaXNoRG93bmxvYWQoKTsKLSAgICB2b2lkIGNs
ZWFuRG93bmxvYWRGaWxlcygpOwotICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yJik7Ci0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgc3RhdGljIHZvaWQgbmV0
d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqLCBHU29ja2V0Q2xpZW50RXZlbnQsIEdJT1N0
cmVhbSosIE5ldHdvcmtEYXRhVGFzayopOwotICAgIHZvaWQgbmV0d29ya0V2ZW50KEdTb2NrZXRD
bGllbnRFdmVudCk7Ci0jaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKLSAgICBzdGF0
aWMgdm9pZCBzdGFydGluZ0NhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrKik7
Ci0jZWxzZQotICAgIHN0YXRpYyB2b2lkIHJlcXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Np
b24qLCBTb3VwTWVzc2FnZSosIFNvdXBTb2NrZXQqLCBOZXR3b3JrRGF0YVRhc2sqKTsKLSNlbmRp
ZgotICAgIHZvaWQgZGlkU3RhcnRSZXF1ZXN0KCk7Ci0gICAgc3RhdGljIHZvaWQgcmVzdGFydGVk
Q2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2sqKTsKLSAgICB2b2lkIGRpZFJl
c3RhcnQoKTsKLSNlbmRpZgotI2VuZGlmCi0gICAgCiAgICAgZW51bSBGYWlsdXJlVHlwZSB7CiAg
ICAgICAgIE5vRmFpbHVyZSwKICAgICAgICAgQmxvY2tlZEZhaWx1cmUsCiAgICAgICAgIEludmFs
aWRVUkxGYWlsdXJlCiAgICAgfTsKLSAgICBGYWlsdXJlVHlwZSBtX3NjaGVkdWxlZEZhaWx1cmVU
eXBlIHsgTm9GYWlsdXJlIH07Ci0gICAgV2ViQ29yZTo6VGltZXIgbV9mYWlsdXJlVGltZXI7CiAg
ICAgdm9pZCBmYWlsdXJlVGltZXJGaXJlZCgpOwogICAgIHZvaWQgc2NoZWR1bGVGYWlsdXJlKEZh
aWx1cmVUeXBlKTsKLSAgICAKLSAgICBSZWZQdHI8TmV0d29ya1Nlc3Npb24+IG1fc2Vzc2lvbjsK
LSAgICBOZXR3b3JrRGF0YVRhc2tDbGllbnQqIG1fY2xpZW50OworCisgICAgRmFpbHVyZVR5cGUg
bV9zY2hlZHVsZWRGYWlsdXJlVHlwZSB7IE5vRmFpbHVyZSB9OworICAgIFdlYkNvcmU6OlRpbWVy
IG1fZmFpbHVyZVRpbWVyOworICAgIFJlZjxOZXR3b3JrU2Vzc2lvbj4gbV9zZXNzaW9uOworICAg
IE5ldHdvcmtEYXRhVGFza0NsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07CiAgICAgUGVuZGlu
Z0Rvd25sb2FkKiBtX3BlbmRpbmdEb3dubG9hZCB7IG51bGxwdHIgfTsKICAgICBEb3dubG9hZElE
IG1fcGVuZGluZ0Rvd25sb2FkSUQ7CiAgICAgU3RyaW5nIG1fdXNlcjsKQEAgLTIyNCw0NiArMTM3
LDE0IEBAIHByaXZhdGU6CiAjaWYgVVNFKENSRURFTlRJQUxfU1RPUkFHRV9XSVRIX05FVFdPUktf
U0VTU0lPTikKICAgICBXZWJDb3JlOjpDcmVkZW50aWFsIG1faW5pdGlhbENyZWRlbnRpYWw7CiAj
ZW5kaWYKLSAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBtX3N0b3JlZENyZWRlbnRpYWxz
OworICAgIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIG1fc3RvcmVkQ3JlZGVudGlhbHMgeyBX
ZWJDb3JlOjpEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgfTsKICAgICBTdHJpbmcgbV9sYXN0
SFRUUE1ldGhvZDsKICAgICBTdHJpbmcgbV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbjsKICAgICBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9maXJzdFJlcXVlc3Q7Ci0gICAgYm9vbCBtX3Nob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Q7Ci0gICAgUmVmUHRyPFNhbmRib3hF
eHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBS
ZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+IG1fdGFzazsKLSNlbmRpZgotI2lmIFVTRShT
T1VQKQotICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07Ci0gICAgV2ViQ29y
ZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IG1fc2hvdWxkQ29udGVudFNuaWZmOwotICAgIEdSZWZQ
dHI8U291cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7Ci0gICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4g
bV9zb3VwTWVzc2FnZTsKLSAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsK
LSAgICBHUmVmUHRyPFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbT4gbV9tdWx0aXBhcnRJbnB1dFN0
cmVhbTsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKLSAgICBHUmVm
UHRyPEdBc3luY1Jlc3VsdD4gbV9wZW5kaW5nUmVzdWx0OwotICAgIFdlYkNvcmU6OlByb3RlY3Rp
b25TcGFjZSBtX3Byb3RlY3Rpb25TcGFjZUZvclBlcnNpc3RlbnRTdG9yYWdlOwotICAgIFdlYkNv
cmU6OkNyZWRlbnRpYWwgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2U7Ci0gICAgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgIFZlY3RvcjxjaGFyPiBtX3Jl
YWRCdWZmZXI7Ci0gICAgdW5zaWduZWQgbV9yZWRpcmVjdENvdW50IHsgMCB9OwotICAgIHVpbnQ2
NF90IG1fYm9keURhdGFUb3RhbEJ5dGVzU2VudCB7IDAgfTsKLSAgICBHUmVmUHRyPEdGaWxlPiBt
X2Rvd25sb2FkRGVzdGluYXRpb25GaWxlOwotICAgIEdSZWZQdHI8R0ZpbGU+IG1fZG93bmxvYWRJ
bnRlcm1lZGlhdGVGaWxlOwotICAgIEdSZWZQdHI8R091dHB1dFN0cmVhbT4gbV9kb3dubG9hZE91
dHB1dFN0cmVhbTsKLSAgICBib29sIG1fYWxsb3dPdmVyd3JpdGVEb3dubG9hZCB7IGZhbHNlIH07
Ci0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgZG91YmxlIG1fc3RhcnRUaW1lIHsgMCB9Owot
I2VuZGlmCi0gICAgUnVuTG9vcDo6VGltZXI8TmV0d29ya0RhdGFUYXNrPiBtX3RpbWVvdXRTb3Vy
Y2U7Ci0jZW5kaWYKKyAgICBib29sIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBS
ZWRpcmVjdCB7IHRydWUgfTsKICAgICBTdHJpbmcgbV9zdWdnZXN0ZWRGaWxlbmFtZTsKIH07CiAK
LSNpZiBQTEFURk9STShDT0NPQSkKLVdlYkNvcmU6OkNyZWRlbnRpYWwgc2VydmVyVHJ1c3RDcmVk
ZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0jZW5kaWYK
LSAgICAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gVVNFKE5FVFdPUktf
U0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtMb2FkLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCmlu
ZGV4IDNiMWEwNWYuLjRlNDZlNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtMb2FkLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0xvYWQuaApAQCAtMzQsNyArMzQsNyBAQAogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lP
TikKICNpbmNsdWRlICJEb3dubG9hZElELmgiCi0jaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIK
KyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2suaCIKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlLmg+CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDhlOTdmMDcuLjIwYjU2YzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAg
LTc0LDYgKzc0LDEwIEBACiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uQ29jb2EuaCIK
KyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CkBAIC0xMDIsNyArMTA2LDcgQEAgTmV0d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9jZXNzKCkKICAg
ICBhZGRTdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxD
dXN0b21Qcm90b2NvbE1hbmFnZXI+KCk7CiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikgJiYgUExB
VEZPUk0oQ09DT0EpCi0gICAgTmV0d29ya1Nlc3Npb246OnNldEN1c3RvbVByb3RvY29sTWFuYWdl
cihzdXBwbGVtZW50PEN1c3RvbVByb3RvY29sTWFuYWdlcj4oKSk7CisgICAgTmV0d29ya1Nlc3Np
b25Db2NvYTo6c2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKHN1cHBsZW1lbnQ8Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyPigpKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMWY4MTgxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtTZXNzaW9uLmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisKKyNpZiBV
U0UoTkVUV09SS19TRVNTSU9OKQorCisjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNl
c3Npb24uaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCisjaWYgUExBVEZPUk0oQ09D
T0EpCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Db2NvYS5oIgorI2VuZGlmCisjaWYgVVNFKFNP
VVApCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Tb3VwLmgiCisjZW5kaWYKKworCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1JlZjxOZXR3b3JrU2Vz
c2lvbj4gTmV0d29ya1Nlc3Npb246OmNyZWF0ZShTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0b21Q
cm90b2NvbE1hbmFnZXIqIGN1c3RvbVByb3RvY29sTWFuYWdlcikKK3sKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICByZXR1cm4gTmV0d29ya1Nlc3Npb25Db2NvYTo6Y3JlYXRlKHNlc3Npb25JRCwg
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyKTsKKyNlbmRpZgorI2lmIFVTRShTT1VQKQorICAgIFVOVVNF
RF9QQVJBTShjdXN0b21Qcm90b2NvbE1hbmFnZXIpOworICAgIHJldHVybiBOZXR3b3JrU2Vzc2lv
blNvdXA6OmNyZWF0ZShzZXNzaW9uSUQpOworI2VuZGlmCit9CisKK05ldHdvcmtTZXNzaW9uJiBO
ZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIHJldHVybiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpkZWZhdWx0U2Vzc2lvbigpOworI2Vsc2UK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiog
c2Vzc2lvbiA9ICZOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuICpzZXNzaW9uOworI2VuZGlmCit9CisKK05l
dHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29ya1Nlc3Npb246Om5ldHdvcmtTdG9yYWdlU2Vzc2lv
bigpIGNvbnN0Cit7CisgICAgYXV0byogc3RvcmFnZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNl
c3Npb246OnN0b3JhZ2VTZXNzaW9uKG1fc2Vzc2lvbklEKTsKKyAgICBSRUxFQVNFX0FTU0VSVChz
dG9yYWdlU2Vzc2lvbik7CisgICAgcmV0dXJuICpzdG9yYWdlU2Vzc2lvbjsKK30KKworTmV0d29y
a1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBtX3Nl
c3Npb25JRChzZXNzaW9uSUQpCit7Cit9CisKK05ldHdvcmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Np
b24oKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShORVRX
T1JLX1NFU1NJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrU2Vzc2lvbi5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nl
c3Npb24uaAppbmRleCBiMDg4MmYyLi5mZWZkN2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKQEAgLTI3LDI0ICsyNywxMCBAQAogCiAjaWYg
VVNFKE5FVFdPUktfU0VTU0lPTikKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotT0JKQ19DTEFTUyBO
U1VSTFNlc3Npb247Ci1PQkpDX0NMQVNTIE5TT3BlcmF0aW9uUXVldWU7Ci1PQkpDX0NMQVNTIFdL
TmV0d29ya1Nlc3Npb25EZWxlZ2F0ZTsKLSNlbmRpZgotCi0jaW5jbHVkZSAiRG93bmxvYWRJRC5o
IgotI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgogI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lv
bklELmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCi0j
aWYgVVNFKFNPVVApCi10eXBlZGVmIHN0cnVjdCBfU291cFNlc3Npb24gU291cFNlc3Npb247Ci0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OwogfQpAQCAtNTQsNjMgKzQwLDIxIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyOwogCiBjbGFzcyBOZXR3b3JrU2Vzc2lvbiA6IHB1YmxpYyBSZWZDb3Vu
dGVkPE5ldHdvcmtTZXNzaW9uPiB7Ci0gICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtEYXRhVGFzazsK
IHB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICBOb3JtYWwsCi0gICAgICAg
IEVwaGVtZXJhbAotICAgIH07Ci0KLSAgICBzdGF0aWMgUmVmPE5ldHdvcmtTZXNzaW9uPiBjcmVh
dGUoVHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIqKTsKKyAg
ICBzdGF0aWMgUmVmPE5ldHdvcmtTZXNzaW9uPiBjcmVhdGUoV2ViQ29yZTo6U2Vzc2lvbklELCBD
dXN0b21Qcm90b2NvbE1hbmFnZXIqID0gbnVsbHB0cik7CiAgICAgc3RhdGljIE5ldHdvcmtTZXNz
aW9uJiBkZWZhdWx0U2Vzc2lvbigpOwotICAgIH5OZXR3b3JrU2Vzc2lvbigpOworICAgIHZpcnR1
YWwgfk5ldHdvcmtTZXNzaW9uKCk7CiAKLSAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpIHsgfTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJDcmVkZW50aWFscygpIHsgfTsKIAogICAgIFdlYkNvcmU6OlNlc3Npb25JRCBz
ZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQotCi0jaWYgVVNFKFNPVVAp
Ci0gICAgU291cFNlc3Npb24qIHNvdXBTZXNzaW9uKCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgIC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgTmV0d29ya1Nl
c3Npb24gaGFzIGJlZW4gY3JlYXRlZC4KLSAgICBzdGF0aWMgdm9pZCBzZXRDdXN0b21Qcm90b2Nv
bE1hbmFnZXIoQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKik7Ci0gICAgc3RhdGljIHZvaWQgc2V0U291
cmNlQXBwbGljYXRpb25BdWRpdFRva2VuRGF0YShSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYmKTsKLSAg
ICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJik7Ci0gICAgc3RhdGljIHZvaWQgc2V0U291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJ
ZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOwotI2lmIFBMQVRGT1JNKElPUykKLSAgICBzdGF0aWMg
dm9pZCBzZXRDVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUoY29uc3QgU3RyaW5nJik7Ci0jZW5k
aWYKLSNlbmRpZgotCi0gICAgdm9pZCBjbGVhckNyZWRlbnRpYWxzKCk7Ci0jaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgTmV0d29ya0RhdGFUYXNrKiBkYXRhVGFza0ZvcklkZW50aWZpZXIoTmV0d29y
a0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMpOwot
Ci0gICAgdm9pZCBhZGREb3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIs
IERvd25sb2FkSUQpOwotICAgIERvd25sb2FkSUQgZG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2s6
OlRhc2tJZGVudGlmaWVyKTsKLSAgICBEb3dubG9hZElEIHRha2VEb3dubG9hZElEKE5ldHdvcmtE
YXRhVGFzazo6VGFza0lkZW50aWZpZXIpOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgTmV0d29y
a1Nlc3Npb24oVHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIq
KTsKICAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIG5ldHdvcmtTdG9yYWdlU2Vz
c2lvbigpIGNvbnN0OwogCi0gICAgV2ViQ29yZTo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOworcHJv
dGVjdGVkOgorICAgIE5ldHdvcmtTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCk7CiAKLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZp
ZXIsIE5ldHdvcmtEYXRhVGFzayo+IG1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHM7Ci0gICAg
SGFzaE1hcDxOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2sq
PiBtX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzOwotICAgIEhhc2hNYXA8TmV0d29ya0Rh
dGFUYXNrOjpUYXNrSWRlbnRpZmllciwgRG93bmxvYWRJRD4gbV9kb3dubG9hZE1hcDsKLQotICAg
IFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZTsK
LSAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBtX3Nlc3Npb25XaXRoQ3Jl
ZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZTsKLSAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX3Nl
c3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2U7Ci0gICAgUmV0YWluUHRyPFdLTmV0d29ya1Nl
c3Npb25EZWxlZ2F0ZT4gbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGU7
Ci0jZWxpZiBVU0UoU09VUCkKLSAgICBIYXNoU2V0PE5ldHdvcmtEYXRhVGFzayo+IG1fZGF0YVRh
c2tTZXQ7Ci0jZW5kaWYKKyAgICBXZWJDb3JlOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQu
Y3BwCmluZGV4IGZjNTU1MTMuLjRhZWJmMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRp
dmVMb2FkLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJOZXR3b3JrQ2FjaGUuaCIKICNpbmNsdWRlICJOZXR3b3JrTG9hZC5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KICNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNr
Q29jb2EuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRh
VGFza0NvY29hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2MDdkNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtEYXRhVGFza0NvY29hLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKworI2luY2x1ZGUgIk5ldHdvcmtE
YXRhVGFzay5oIgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworT0JKQ19DTEFTUyBOU1VS
TFNlc3Npb25EYXRhVGFzazsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtT
ZXNzaW9uQ29jb2E7CisKK2NsYXNzIE5ldHdvcmtEYXRhVGFza0NvY29hIGZpbmFsIDogcHVibGlj
IE5ldHdvcmtEYXRhVGFzayB7CisgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtTZXNzaW9uQ29jb2E7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrRGF0YVRhc2s+IGNyZWF0ZShOZXR3b3Jr
U2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlh
bHMgc3RvcmVkQ3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91
bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFz
a0NvY29hKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIHNob3Vs
ZENvbnRlbnRTbmlmZiwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkp
OworICAgIH0KKworICAgIH5OZXR3b3JrRGF0YVRhc2tDb2NvYSgpOworCisgICAgdHlwZWRlZiB1
aW50NjRfdCBUYXNrSWRlbnRpZmllcjsKKworICAgIHZvaWQgZGlkU2VuZERhdGEodWludDY0X3Qg
dG90YWxCeXRlc1NlbnQsIHVpbnQ2NF90IHRvdGFsQnl0ZXNFeHBlY3RlZFRvU2VuZCk7CisgICAg
dm9pZCBkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJiwgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXImJik7CisgICAgdm9pZCBkaWRDb21w
bGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisgICAgdm9pZCBk
aWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBSZXNwb25zZUNv
bXBsZXRpb25IYW5kbGVyJiYpOworICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVmPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4mJik7CisgICAgdm9pZCBkaWRCZWNvbWVEb3dubG9hZCgpOworCisgICAg
dm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVy
JiYpOworICAgIHZvaWQgdHJhbnNmZXJTYW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9hZChEb3dubG9h
ZCYpOworCitwcml2YXRlOgorICAgIE5ldHdvcmtEYXRhVGFza0NvY29hKE5ldHdvcmtTZXNzaW9u
JiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1Bv
bGljeSwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKKwor
ICAgIHZvaWQgc3VzcGVuZCgpIG92ZXJyaWRlOworICAgIHZvaWQgY2FuY2VsKCkgb3ZlcnJpZGU7
CisgICAgdm9pZCByZXN1bWUoKSBvdmVycmlkZTsKKyAgICBOZXR3b3JrRGF0YVRhc2s6OlN0YXRl
IHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFBlbmRpbmdEb3dubG9hZExv
Y2F0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJv
b2wgLyphbGxvd092ZXJ3cml0ZSovKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgc3VnZ2VzdGVkRmls
ZW5hbWUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIGJvb2wgYWxsb3dzU3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
IG92ZXJyaWRlOworICAgIGJvb2wgdHJ5UGFzc3dvcmRCYXNlZEF1dGhlbnRpY2F0aW9uKGNvbnN0
IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3QgQ2hhbGxlbmdlQ29tcGxl
dGlvbkhhbmRsZXImKTsKKworICAgIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBtX3NhbmRib3hF
eHRlbnNpb247CisgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBtX3Rhc2s7Cit9
OworCitXZWJDb3JlOjpDcmVkZW50aWFsIHNlcnZlclRydXN0Q3JlZGVudGlhbChjb25zdCBXZWJD
b3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCmlu
ZGV4IDYyY2IwZDcuLjBkODllZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCkBAIC0yNCw3ICsy
NCw3IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJOZXR3b3JrU2Vzc2lv
bi5oIgorI2ltcG9ydCAiTmV0d29ya0RhdGFUYXNrQ29jb2EuaCIKIAogI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCiAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgIkRvd25sb2FkUHJveHlNZXNz
YWdlcy5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3MuaCIK
KyNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uQ29jb2EuaCIKICNpbXBvcnQgIlNlc3Npb25UcmFja2Vy
LmgiCiAjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbXBvcnQgPFdlYkNvcmUv
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KQEAgLTUyLDI3ICs1MywxMiBAQCBzdGF0aWMgdm9p
ZCBhcHBseUJhc2ljQXV0aG9yaXphdGlvbkhlYWRlcihXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbgogfQogI2VuZGlmCiAKLU5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFU
YXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVu
dCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxz
LCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6
Q29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRDbGVh
clJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQotICAgIDogbV9mYWlsdXJlVGltZXIoKnRo
aXMsICZOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKQotICAgICwgbV9zZXNzaW9u
KCZzZXNzaW9uKQotICAgICwgbV9jbGllbnQoJmNsaWVudCkKLSAgICAsIG1fc3RvcmVkQ3JlZGVu
dGlhbHMoc3RvcmVkQ3JlZGVudGlhbHMpCi0gICAgLCBtX2xhc3RIVFRQTWV0aG9kKHJlcXVlc3RX
aXRoQ3JlZGVudGlhbHMuaHR0cE1ldGhvZCgpKQotICAgICwgbV9maXJzdFJlcXVlc3QocmVxdWVz
dFdpdGhDcmVkZW50aWFscykKLSAgICAsIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hU
VFBSZWRpcmVjdChzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQorTmV0
d29ya0RhdGFUYXNrQ29jb2E6Ok5ldHdvcmtEYXRhVGFza0NvY29hKE5ldHdvcmtTZXNzaW9uJiBz
ZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBXZWJDb3JlOjpTdG9yZWRDcmVk
ZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5
IHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRU
UFJlZGlyZWN0KQorICAgIDogTmV0d29ya0RhdGFUYXNrKHNlc3Npb24sIGNsaWVudCwgcmVxdWVz
dFdpdGhDcmVkZW50aWFscywgc3RvcmVkQ3JlZGVudGlhbHMsIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICAKLSAgICBpZiAoIXJlcXVlc3RXaXRoQ3JlZGVudGlhbHMudXJsKCkuaXNWYWxpZCgpKSB7Ci0g
ICAgICAgIHNjaGVkdWxlRmFpbHVyZShJbnZhbGlkVVJMRmFpbHVyZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFwb3J0QWxsb3dlZChyZXF1ZXN0V2l0aENyZWRlbnRp
YWxzLnVybCgpKSkgewotICAgICAgICBzY2hlZHVsZUZhaWx1cmUoQmxvY2tlZEZhaWx1cmUpOwor
ICAgIGlmIChtX3NjaGVkdWxlZEZhaWx1cmVUeXBlICE9IE5vRmFpbHVyZSkKICAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKKwogICAgIGF1dG8gcmVxdWVzdCA9IHJlcXVlc3RXaXRoQ3JlZGVu
dGlhbHM7CiAgICAgYXV0byB1cmwgPSByZXF1ZXN0LnVybCgpOwogICAgIGlmIChzdG9yZWRDcmVk
ZW50aWFscyA9PSBXZWJDb3JlOjpBbGxvd1N0b3JlZENyZWRlbnRpYWxzICYmIHVybC5wcm90b2Nv
bElzSW5IVFRQRmFtaWx5KCkpIHsKQEAgLTEwNCwxMyArOTAsMTMgQEAgTmV0d29ya0RhdGFUYXNr
OjpOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFz
a0NsaWVudCYKICAgICB9CiAKICAgICBpZiAoc3RvcmVkQ3JlZGVudGlhbHMgPT0gV2ViQ29yZTo6
QWxsb3dTdG9yZWRDcmVkZW50aWFscykgewotICAgICAgICBtX3Rhc2sgPSBbbV9zZXNzaW9uLT5t
X3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UgZGF0YVRhc2tXaXRoUmVxdWVzdDpuc1JlcXVl
c3RdOwotICAgICAgICBBU1NFUlQoIW1fc2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhDcmVkZW50
aWFscy5jb250YWlucyhbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkpOwotICAgICAgICBtX3Nlc3Np
b24tPm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMuYWRkKFttX3Rhc2sgdGFza0lkZW50aWZp
ZXJdLCB0aGlzKTsKKyAgICAgICAgbV90YXNrID0gW2Rvd25jYXN0PE5ldHdvcmtTZXNzaW9uQ29j
b2E+KG1fc2Vzc2lvbi5nZXQoKSkubV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlIGRhdGFU
YXNrV2l0aFJlcXVlc3Q6bnNSZXF1ZXN0XTsKKyAgICAgICAgQVNTRVJUKCFkb3duY2FzdDxOZXR3
b3JrU2Vzc2lvbkNvY29hPihtX3Nlc3Npb24uZ2V0KCkpLm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVu
dGlhbHMuY29udGFpbnMoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pKTsKKyAgICAgICAgZG93bmNh
c3Q8TmV0d29ya1Nlc3Npb25Db2NvYT4obV9zZXNzaW9uLmdldCgpKS5tX2RhdGFUYXNrTWFwV2l0
aENyZWRlbnRpYWxzLmFkZChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgdGhpcyk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgbV90YXNrID0gW21fc2Vzc2lvbi0+bV9zZXNzaW9uV2l0aG91dENyZWRl
bnRpYWxTdG9yYWdlIGRhdGFUYXNrV2l0aFJlcXVlc3Q6bnNSZXF1ZXN0XTsKLSAgICAgICAgQVNT
RVJUKCFtX3Nlc3Npb24tPm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHMuY29udGFpbnMo
W21fdGFzayB0YXNrSWRlbnRpZmllcl0pKTsKLSAgICAgICAgbV9zZXNzaW9uLT5tX2RhdGFUYXNr
TWFwV2l0aG91dENyZWRlbnRpYWxzLmFkZChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgdGhpcyk7
CisgICAgICAgIG1fdGFzayA9IFtkb3duY2FzdDxOZXR3b3JrU2Vzc2lvbkNvY29hPihtX3Nlc3Np
b24uZ2V0KCkpLm1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZSBkYXRhVGFza1dpdGhS
ZXF1ZXN0Om5zUmVxdWVzdF07CisgICAgICAgIEFTU0VSVCghZG93bmNhc3Q8TmV0d29ya1Nlc3Np
b25Db2NvYT4obV9zZXNzaW9uLmdldCgpKS5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxz
LmNvbnRhaW5zKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSk7CisgICAgICAgIGRvd25jYXN0PE5l
dHdvcmtTZXNzaW9uQ29jb2E+KG1fc2Vzc2lvbi5nZXQoKSkubV9kYXRhVGFza01hcFdpdGhvdXRD
cmVkZW50aWFscy5hZGQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIHRoaXMpOwogICAgIH0KICAg
ICBMT0coTmV0d29ya1Nlc3Npb24sICIlbGx1IENyZWF0aW5nIE5ldHdvcmtEYXRhVGFzayB3aXRo
IFVSTCAlcyIsIFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCBuc1JlcXVlc3QuVVJMLmFic29sdXRl
U3RyaW5nLlVURjhTdHJpbmcpOwogCkBAIC0xMjEsMjcgKzEwNywyNyBAQCBOZXR3b3JrRGF0YVRh
c2s6Ok5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFU
YXNrQ2xpZW50JgogI2VuZGlmCiB9CiAKLU5ldHdvcmtEYXRhVGFzazo6fk5ldHdvcmtEYXRhVGFz
aygpCitOZXR3b3JrRGF0YVRhc2tDb2NvYTo6fk5ldHdvcmtEYXRhVGFza0NvY29hKCkKIHsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX3Rhc2spIHsKLSAgICAgICAgaWYg
KG1fc3RvcmVkQ3JlZGVudGlhbHMgPT0gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHM6OkFsbG93
U3RvcmVkQ3JlZGVudGlhbHMpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3Nlc3Npb24tPm1fZGF0
YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMuZ2V0KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSA9PSB0
aGlzKTsKLSAgICAgICAgICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFs
cy5yZW1vdmUoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgQVNTRVJUKG1fc2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFs
cy5nZXQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pID09IHRoaXMpOwotICAgICAgICAgICAgbV9z
ZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLnJlbW92ZShbbV90YXNrIHRh
c2tJZGVudGlmaWVyXSk7Ci0gICAgICAgIH0KKyAgICBpZiAoIW1fdGFzaykKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fc3RvcmVkQ3JlZGVudGlhbHMgPT0gV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHM6OkFsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsKKyAgICAgICAgQVNTRVJUKGRvd25j
YXN0PE5ldHdvcmtTZXNzaW9uQ29jb2E+KG1fc2Vzc2lvbi5nZXQoKSkubV9kYXRhVGFza01hcFdp
dGhDcmVkZW50aWFscy5nZXQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pID09IHRoaXMpOworICAg
ICAgICBkb3duY2FzdDxOZXR3b3JrU2Vzc2lvbkNvY29hPihtX3Nlc3Npb24uZ2V0KCkpLm1fZGF0
YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMucmVtb3ZlKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Db2Nv
YT4obV9zZXNzaW9uLmdldCgpKS5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmdldChb
bV90YXNrIHRhc2tJZGVudGlmaWVyXSkgPT0gdGhpcyk7CisgICAgICAgIGRvd25jYXN0PE5ldHdv
cmtTZXNzaW9uQ29jb2E+KG1fc2Vzc2lvbi5nZXQoKSkubV9kYXRhVGFza01hcFdpdGhvdXRDcmVk
ZW50aWFscy5yZW1vdmUoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pOwogICAgIH0KIH0KIAotdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFNlbmREYXRhKHVpbnQ2NF90IHRvdGFsQnl0ZXNTZW50LCB1
aW50NjRfdCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQpCit2b2lkIE5ldHdvcmtEYXRhVGFza0Nv
Y29hOjpkaWRTZW5kRGF0YSh1aW50NjRfdCB0b3RhbEJ5dGVzU2VudCwgdWludDY0X3QgdG90YWxC
eXRlc0V4cGVjdGVkVG9TZW5kKQogewogICAgIGlmIChtX2NsaWVudCkKICAgICAgICAgbV9jbGll
bnQtPmRpZFNlbmREYXRhKHRvdGFsQnl0ZXNTZW50LCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQp
OwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBX
ZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBDaGFsbGVuZ2VDb21w
bGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3b3JrRGF0YVRhc2tD
b2NvYTo6ZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYgY2hhbGxlbmdlLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIC8vIFByb3h5IGF1dGhlbnRpY2F0aW9uIGlzIGhhbmRsZWQgYnkg
Q0ZOZXR3b3JrIGludGVybmFsbHkuIFdlIGNhbiBnZXQgaGVyZSBpZiB0aGUgdXNlciBjYW5jZWxz
CiAgICAgLy8gQ0ZOZXR3b3JrIGF1dGhlbnRpY2F0aW9uIGRpYWxvZywgYW5kIHdlIHNob3VsZG4n
dCBhc2sgdGhlIGNsaWVudCB0byBkaXNwbGF5IGFub3RoZXIgb25lIGluIHRoYXQgY2FzZS4KQEAg
LTE2MSwxMyArMTQ3LDEzIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZWNlaXZlQ2hhbGxl
bmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCiAgICAgfQogfQogCi12
b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjpkaWRDb21w
bGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAg
ICBpZiAobV9jbGllbnQpCiAgICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcihl
cnJvcik7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZWNlaXZlUmVzcG9uc2UoV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNlLCBSZXNwb25zZUNvbXBsZXRpb25IYW5k
bGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjpkaWRS
ZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNlLCBSZXNw
b25zZUNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKG1f
Y2xpZW50KQogICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlTmV0d29ya1Nlc3Np
b24oV1RGTW92ZShyZXNwb25zZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTE3
NywxOSArMTYzLDE5IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZWNlaXZlUmVzcG9uc2Uo
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNlLCBSCiAgICAgfQogfQogCi12b2lk
IE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVjZWl2ZURhdGEoUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cj4mJiBkYXRhKQordm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6ZGlkUmVjZWl2ZURhdGEoUmVm
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJiBkYXRhKQogewogICAgIGlmIChtX2NsaWVudCkKICAg
ICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKFdURk1vdmUoZGF0YSkpOwogfQogCi12b2lk
IE5ldHdvcmtEYXRhVGFzazo6ZGlkQmVjb21lRG93bmxvYWQoKQordm9pZCBOZXR3b3JrRGF0YVRh
c2tDb2NvYTo6ZGlkQmVjb21lRG93bmxvYWQoKQogewogICAgIGlmIChtX2NsaWVudCkKICAgICAg
ICAgbV9jbGllbnQtPmRpZEJlY29tZURvd25sb2FkKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjp3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiYgcmVkaXJlY3RSZXNwb25zZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwg
UmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3
b3JrRGF0YVRhc2tDb2NvYTo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYmIHJlZGlyZWN0UmVzcG9uc2UsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYmIHJlcXVlc3QsIFJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBpZiAocmVkaXJlY3RSZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMwNyB8
fCByZWRpcmVjdFJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMzA4KSB7CiAgICAgICAgIEFT
U0VSVChtX2xhc3RIVFRQTWV0aG9kID09IHJlcXVlc3QuaHR0cE1ldGhvZCgpKTsKQEAgLTI0MCw1
MSArMjI2LDIzIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjp3aWxsUGVyZm9ybUhUVFBSZWRpcmVj
dGlvbihXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVkCiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKHsgfSk7CiAgICAgfQogfQotICAgIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnNjaGVk
dWxlRmFpbHVyZShGYWlsdXJlVHlwZSB0eXBlKQotewotICAgIEFTU0VSVCh0eXBlICE9IE5vRmFp
bHVyZSk7Ci0gICAgbV9zY2hlZHVsZWRGYWlsdXJlVHlwZSA9IHR5cGU7Ci0gICAgbV9mYWlsdXJl
VGltZXIuc3RhcnRPbmVTaG90KDApOwotfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZmFpbHVy
ZVRpbWVyRmlyZWQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6c2V0UGVuZGluZ0Rvd25s
b2FkTG9jYXRpb24oY29uc3QgV1RGOjpTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGJvb2wgYWxsb3dPdmVyd3Jp
dGUpCiB7Ci0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdCh0aGlzKTsKLSAgICAK
LSAgICBzd2l0Y2ggKG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUpIHsKLSAgICBjYXNlIEJsb2NrZWRG
YWlsdXJlOgotICAgICAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJlOwotICAg
ICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICBtX2NsaWVudC0+d2FzQmxvY2tlZCgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJbnZhbGlkVVJMRmFpbHVyZToKLSAgICAgICAgbV9z
Y2hlZHVsZWRGYWlsdXJlVHlwZSA9IE5vRmFpbHVyZTsKLSAgICAgICAgaWYgKG1fY2xpZW50KQot
ICAgICAgICAgICAgbV9jbGllbnQtPmNhbm5vdFNob3dVUkwoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgTm9GYWlsdXJlOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQorICAgIE5ldHdv
cmtEYXRhVGFzazo6c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oZmlsZW5hbWUsIHNhbmRib3hF
eHRlbnNpb25IYW5kbGUsIGFsbG93T3ZlcndyaXRlKTsKIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6
OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFdURjo6U3RyaW5nJiBmaWxlbmFtZSwg
Y29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBi
b29sIGFsbG93T3ZlcndyaXRlKQotewogICAgIEFTU0VSVCghbV9zYW5kYm94RXh0ZW5zaW9uKTsK
ICAgICBtX3NhbmRib3hFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZSk7CiAgICAgaWYgKG1fc2FuZGJveEV4dGVuc2lvbikKICAgICAgICAg
bV9zYW5kYm94RXh0ZW5zaW9uLT5jb25zdW1lKCk7CiAKLSAgICBtX3BlbmRpbmdEb3dubG9hZExv
Y2F0aW9uID0gZmlsZW5hbWU7Ci0gICAgbV90YXNrLmdldCgpLl9wYXRoVG9Eb3dubG9hZFRhc2tG
aWxlID0gZmlsZW5hbWU7CisgICAgbV90YXNrLmdldCgpLl9wYXRoVG9Eb3dubG9hZFRhc2tGaWxl
ID0gbV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbjsKIAotICAgIGlmIChhbGxvd092ZXJ3cml0ZSAm
JiBXZWJDb3JlOjpmaWxlRXhpc3RzKGZpbGVuYW1lKSkKKyAgICBpZiAoYWxsb3dPdmVyd3JpdGUg
JiYgV2ViQ29yZTo6ZmlsZUV4aXN0cyhtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uKSkKICAgICAg
ICAgV2ViQ29yZTo6ZGVsZXRlRmlsZShmaWxlbmFtZSk7CiB9CiAKLWJvb2wgTmV0d29ya0RhdGFU
YXNrOjp0cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgY29uc3QgQ2hhbGxlbmdlQ29tcGxldGlvbkhh
bmRsZXImIGNvbXBsZXRpb25IYW5kbGVyKQorYm9vbCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6dHJ5
UGFzc3dvcmRCYXNlZEF1dGhlbnRpY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiBjaGFsbGVuZ2UsIGNvbnN0IENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIWNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uo
KS5pc1Bhc3N3b3JkQmFzZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzI5LDcgKzI4
Nyw3IEBAIGJvb2wgTmV0d29ya0RhdGFUYXNrOjp0cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRp
b24oY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIE5ldHdvcmtEYXRhVGFzazo6dHJhbnNmZXJTYW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9hZChE
b3dubG9hZCYgZG93bmxvYWQpCit2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjp0cmFuc2ZlclNh
bmRib3hFeHRlbnNpb25Ub0Rvd25sb2FkKERvd25sb2FkJiBkb3dubG9hZCkKIHsKICAgICBkb3du
bG9hZC5zZXRTYW5kYm94RXh0ZW5zaW9uKFdURk1vdmUobV9zYW5kYm94RXh0ZW5zaW9uKSk7CiB9
CkBAIC0zNTYsNyArMzE0LDcgQEAgc3RhdGljIGJvb2wgY2VydGlmaWNhdGVzTWF0Y2goU2VjVHJ1
c3RSZWYgdHJ1c3QxLCBTZWNUcnVzdFJlZiB0cnVzdDIpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgTmV0d29ya0RhdGFUYXNrOjphbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JI
b3N0KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCiti
b29sIE5ldHdvcmtEYXRhVGFza0NvY29hOjphbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVG
b3JIb3N0KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2Up
CiB7CiAgICAgY29uc3QgU3RyaW5nJiBob3N0ID0gY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgp
Lmhvc3QoKTsKICAgICBOU0FycmF5ICpjZXJ0aWZpY2F0ZXMgPSBbTlNVUkxSZXF1ZXN0IGFsbG93
c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3Q6aG9zdF07CkBAIC0zNzQsMzggKzMzMiwz
MyBAQCBib29sIE5ldHdvcmtEYXRhVGFzazo6YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRpZmljYXRl
Rm9ySG9zdChjb25zdCBXZWJDb3JlOjpBdXRoZQogICAgIHJldHVybiBjZXJ0aWZpY2F0ZXNNYXRj
aCh0cnVzdC5nZXQoKSwgY2hhbGxlbmdlLm5zVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKS5w
cm90ZWN0aW9uU3BhY2Uuc2VydmVyVHJ1c3QpOwogfQogCi1TdHJpbmcgTmV0d29ya0RhdGFUYXNr
OjpzdWdnZXN0ZWRGaWxlbmFtZSgpCitTdHJpbmcgTmV0d29ya0RhdGFUYXNrQ29jb2E6OnN1Z2dl
c3RlZEZpbGVuYW1lKCkgY29uc3QKIHsKICAgICBpZiAoIW1fc3VnZ2VzdGVkRmlsZW5hbWUuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gbV9zdWdnZXN0ZWRGaWxlbmFtZTsKICAgICByZXR1cm4g
bV90YXNrLmdldCgpLnJlc3BvbnNlLnN1Z2dlc3RlZEZpbGVuYW1lOwogfQogCi12b2lkIE5ldHdv
cmtEYXRhVGFzazo6c2V0U3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRO
YW1lKQotewotICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWROYW1lOwotfQotCi12
b2lkIE5ldHdvcmtEYXRhVGFzazo6Y2FuY2VsKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6
OmNhbmNlbCgpCiB7CiAgICAgW21fdGFzayBjYW5jZWxdOwogfQogCi12b2lkIE5ldHdvcmtEYXRh
VGFzazo6cmVzdW1lKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OnJlc3VtZSgpCiB7CiAg
ICAgaWYgKG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgIT0gTm9GYWlsdXJlKQogICAgICAgICBtX2Zh
aWx1cmVUaW1lci5zdGFydE9uZVNob3QoMCk7CiAgICAgW21fdGFzayByZXN1bWVdOwogfQogCi12
b2lkIE5ldHdvcmtEYXRhVGFzazo6c3VzcGVuZCgpCit2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29h
OjpzdXNwZW5kKCkKIHsKICAgICBpZiAobV9mYWlsdXJlVGltZXIuaXNBY3RpdmUoKSkKICAgICAg
ICAgbV9mYWlsdXJlVGltZXIuc3RvcCgpOwogICAgIFttX3Rhc2sgc3VzcGVuZF07CiB9CiAKLU5l
dHdvcmtEYXRhVGFzazo6U3RhdGUgTmV0d29ya0RhdGFUYXNrOjpzdGF0ZSgpIGNvbnN0CitOZXR3
b3JrRGF0YVRhc2s6OlN0YXRlIE5ldHdvcmtEYXRhVGFza0NvY29hOjpzdGF0ZSgpIGNvbnN0CiB7
CiAgICAgc3dpdGNoIChbbV90YXNrIHN0YXRlXSkgewogICAgIGNhc2UgTlNVUkxTZXNzaW9uVGFz
a1N0YXRlUnVubmluZzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCmluZGV4IDEyY2I0NTEuLmNmYzIyNjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQ
cm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Byb2Nlc3NDb2NvYS5tbQpAQCAtMjksNyArMjksNyBAQAogI2ltcG9ydCAiTmV0d29y
a0NhY2hlLmgiCiAjaW1wb3J0ICJOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgog
I2ltcG9ydCAiTmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCi0jaW1wb3J0ICJOZXR3b3JrU2Vzc2lv
bi5oIgorI2ltcG9ydCAiTmV0d29ya1Nlc3Npb25Db2NvYS5oIgogI2ltcG9ydCAiU2FuZGJveEV4
dGVuc2lvbi5oIgogI2ltcG9ydCAiU2Vzc2lvblRyYWNrZXIuaCIKICNpbXBvcnQgPFdlYkNvcmUv
Q0ZOZXR3b3JrU1BJLmg+CkBAIC04NSwxMSArODUsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vz
c0MKICAgICBTZXNzaW9uVHJhY2tlcjo6c2V0SWRlbnRpZmllckJhc2UocGFyYW1ldGVycy51aVBy
b2Nlc3NCdW5kbGVJZGVudGlmaWVyKTsKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAg
TmV0d29ya1Nlc3Npb246OnNldFNvdXJjZUFwcGxpY2F0aW9uQXVkaXRUb2tlbkRhdGEoc291cmNl
QXBwbGljYXRpb25BdWRpdERhdGEoKSk7Ci0gICAgTmV0d29ya1Nlc3Npb246OnNldFNvdXJjZUFw
cGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihwYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVu
ZGxlSWRlbnRpZmllcik7Ci0gICAgTmV0d29ya1Nlc3Npb246OnNldFNvdXJjZUFwcGxpY2F0aW9u
U2Vjb25kYXJ5SWRlbnRpZmllcihwYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5
SWRlbnRpZmllcik7CisgICAgTmV0d29ya1Nlc3Npb25Db2NvYTo6c2V0U291cmNlQXBwbGljYXRp
b25BdWRpdFRva2VuRGF0YShzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpKTsKKyAgICBOZXR3
b3JrU2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIocGFy
YW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOworICAgIE5ldHdvcmtT
ZXNzaW9uQ29jb2E6OnNldFNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcihwYXJh
bWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcik7CiAjaWYgUExBVEZP
Uk0oSU9TKQotICAgIE5ldHdvcmtTZXNzaW9uOjpzZXRDVERhdGFDb25uZWN0aW9uU2VydmljZVR5
cGUocGFyYW1ldGVycy5jdERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUpOworICAgIE5ldHdvcmtT
ZXNzaW9uQ29jb2E6OnNldENURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZShwYXJhbWV0ZXJzLmN0
RGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZSk7CiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29h
LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNv
Y29hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY5NjVkMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtT
ZXNzaW9uQ29jb2EuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorCitPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbjsK
K09CSkNfQ0xBU1MgTlNPcGVyYXRpb25RdWV1ZTsKK09CSkNfQ0xBU1MgV0tOZXR3b3JrU2Vzc2lv
bkRlbGVnYXRlOworCisjaW5jbHVkZSAiRG93bmxvYWRJRC5oIgorI2luY2x1ZGUgIk5ldHdvcmtE
YXRhVGFza0NvY29hLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya1Nlc3Np
b25Db2NvYSBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrU2Vzc2lvbiB7CisgICAgZnJpZW5kIGNsYXNz
IE5ldHdvcmtEYXRhVGFza0NvY29hOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya1Nl
c3Npb24+IGNyZWF0ZShXZWJDb3JlOjpTZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciop
OworICAgIH5OZXR3b3JrU2Vzc2lvbkNvY29hKCk7CisKKyAgICAvLyBNdXN0IGJlIGNhbGxlZCBi
ZWZvcmUgYW55IE5ldHdvcmtTZXNzaW9uIGhhcyBiZWVuIGNyZWF0ZWQuCisgICAgc3RhdGljIHZv
aWQgc2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKEN1c3RvbVByb3RvY29sTWFuYWdlciopOworICAg
IHN0YXRpYyB2b2lkIHNldFNvdXJjZUFwcGxpY2F0aW9uQXVkaXRUb2tlbkRhdGEoUmV0YWluUHRy
PENGRGF0YVJlZj4mJik7CisgICAgc3RhdGljIHZvaWQgc2V0U291cmNlQXBwbGljYXRpb25CdW5k
bGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB2b2lkIHNldFNvdXJjZUFw
cGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKKyNpZiBQTEFURk9S
TShJT1MpCisgICAgc3RhdGljIHZvaWQgc2V0Q1REYXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlKGNv
bnN0IFN0cmluZyYpOworI2VuZGlmCisKKyAgICBOZXR3b3JrRGF0YVRhc2tDb2NvYSogZGF0YVRh
c2tGb3JJZGVudGlmaWVyKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHMpOworCisgICAgdm9pZCBhZGREb3dubG9hZElEKE5ldHdv
cmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgRG93bmxvYWRJRCk7CisgICAgRG93bmxv
YWRJRCBkb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllcik7Cisg
ICAgRG93bmxvYWRJRCB0YWtlRG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lk
ZW50aWZpZXIpOworCitwcml2YXRlOgorICAgIE5ldHdvcmtTZXNzaW9uQ29jb2EoV2ViQ29yZTo6
U2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIqKTsKKworICAgIHZvaWQgaW52YWxpZGF0
ZUFuZENhbmNlbCgpIG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJDcmVkZW50aWFscygpIG92ZXJy
aWRlOworCisgICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIs
IE5ldHdvcmtEYXRhVGFza0NvY29hKj4gbV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFsczsKKyAg
ICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0Rh
dGFUYXNrQ29jb2EqPiBtX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzOworICAgIEhhc2hN
YXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEPiBtX2Rv
d25sb2FkTWFwOworCisgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gbV9zZXNzaW9uV2l0aENy
ZWRlbnRpYWxTdG9yYWdlOworICAgIFJldGFpblB0cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGU+
IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlOworICAgIFJldGFpblB0cjxO
U1VSTFNlc3Npb24+IG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZTsKKyAgICBSZXRh
aW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlh
bFN0b3JhZ2VEZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCmluZGV4IDAxZjJhMzku
LmYxMzQ1ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29h
L05ldHdvcmtTZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAK
ICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbXBvcnQg
Ik5ldHdvcmtTZXNzaW9uQ29jb2EuaCIKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAKQEAg
LTgyLDE3ICs4MiwxNyBAQCBzdGF0aWMgTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0
aW9uIHRvTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aQogfQogCiBAaW50ZXJmYWNl
IFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSA6IE5TT2JqZWN0IDxOU1VSTFNlc3Npb25EYXRhRGVs
ZWdhdGU+IHsKLSAgICBSZWZQdHI8V2ViS2l0OjpOZXR3b3JrU2Vzc2lvbj4gX3Nlc3Npb247Cisg
ICAgUmVmUHRyPFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYT4gX3Nlc3Npb247CiAgICAgYm9v
bCBfd2l0aENyZWRlbnRpYWxzOwogfQogCi0tIChpZClpbml0V2l0aE5ldHdvcmtTZXNzaW9uOihX
ZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uJilzZXNzaW9uIHdpdGhDcmVkZW50aWFsczooYm9vbCl3aXRo
Q3JlZGVudGlhbHM7CistIChpZClpbml0V2l0aE5ldHdvcmtTZXNzaW9uOihXZWJLaXQ6Ok5ldHdv
cmtTZXNzaW9uQ29jb2EmKXNlc3Npb24gd2l0aENyZWRlbnRpYWxzOihib29sKXdpdGhDcmVkZW50
aWFsczsKIAogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRl
CiAKLS0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdlYktpdDo6TmV0d29ya1Nlc3Npb24m
KXNlc3Npb24gd2l0aENyZWRlbnRpYWxzOihib29sKXdpdGhDcmVkZW50aWFscworLSAoaWQpaW5p
dFdpdGhOZXR3b3JrU2Vzc2lvbjooV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hJilzZXNzaW9u
IHdpdGhDcmVkZW50aWFsczooYm9vbCl3aXRoQ3JlZGVudGlhbHMKIHsKICAgICBzZWxmID0gW3N1
cGVyIGluaXRdOwogICAgIGlmICghc2VsZikKQEAgLTI5Niw3ICsyOTYsNyBAQCBzdGF0aWMgTlNV
UkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uIHRvTlNVUkxTZXNzaW9uQXV0aENoYWxs
ZW5nZURpc3Bvc2l0aQogewogICAgIGF1dG8gc3RvcmVkQ3JlZGVudGlhbHMgPSBfd2l0aENyZWRl
bnRpYWxzID8gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHM6OkFsbG93U3RvcmVkQ3JlZGVudGlh
bHMgOiBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsczo6RG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRp
YWxzOwogICAgIGlmIChhdXRvKiBuZXR3b3JrRGF0YVRhc2sgPSBfc2Vzc2lvbi0+ZGF0YVRhc2tG
b3JJZGVudGlmaWVyKFtkYXRhVGFzayB0YXNrSWRlbnRpZmllcl0sIHN0b3JlZENyZWRlbnRpYWxz
KSkgewotICAgICAgICBSZWY8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWROZXR3b3JrRGF0YVRh
c2soKm5ldHdvcmtEYXRhVGFzayk7CisgICAgICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tDb2NvYT4g
cHJvdGVjdGVkTmV0d29ya0RhdGFUYXNrKCpuZXR3b3JrRGF0YVRhc2spOwogICAgICAgICBhdXRv
IGRvd25sb2FkSUQgPSBuZXR3b3JrRGF0YVRhc2stPnBlbmRpbmdEb3dubG9hZElEKCk7CiAgICAg
ICAgIGF1dG8mIGRvd25sb2FkTWFuYWdlciA9IFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNpbmds
ZXRvbigpLmRvd25sb2FkTWFuYWdlcigpOwogICAgICAgICBhdXRvIGRvd25sb2FkID0gc3RkOjpt
YWtlX3VuaXF1ZTxXZWJLaXQ6OkRvd25sb2FkPihkb3dubG9hZE1hbmFnZXIsIGRvd25sb2FkSUQs
IGRvd25sb2FkVGFzaywgX3Nlc3Npb24tPnNlc3Npb25JRCgpLCBuZXR3b3JrRGF0YVRhc2stPnN1
Z2dlc3RlZEZpbGVuYW1lKCkpOwpAQCAtMzE0LDE0ICszMTQsMTEgQEAgc3RhdGljIE5TVVJMU2Vz
c2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbiB0b05TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VE
aXNwb3NpdGkKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgCi1zdGF0aWMgTlNVUkxTZXNzaW9u
Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbkZvclR5cGUoTmV0d29ya1Nlc3Npb246OlR5cGUg
dHlwZSkKK3N0YXRpYyBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uRm9y
U2Vzc2lvbklEKGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgc2Vzc2lvbikKIHsKLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpOb3JtYWw6Ci0gICAg
ICAgIHJldHVybiBbTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiBkZWZhdWx0U2Vzc2lvbkNvbmZp
Z3VyYXRpb25dOwotICAgIGNhc2UgTmV0d29ya1Nlc3Npb246OlR5cGU6OkVwaGVtZXJhbDoKKyAg
ICBpZiAoc2Vzc2lvbi5pc0VwaGVtZXJhbCgpKQogICAgICAgICByZXR1cm4gW05TVVJMU2Vzc2lv
bkNvbmZpZ3VyYXRpb24gZXBoZW1lcmFsU2Vzc2lvbkNvbmZpZ3VyYXRpb25dOwotICAgIH0KKyAg
ICByZXR1cm4gW05TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gZGVmYXVsdFNlc3Npb25Db25maWd1
cmF0aW9uXTsKIH0KIAogc3RhdGljIFJlZlB0cjxDdXN0b21Qcm90b2NvbE1hbmFnZXI+JiBnbG9i
YWxDdXN0b21Qcm90b2NvbE1hbmFnZXIoKQpAQCAtMzYwLDUyICszNTcsNTIgQEAgc3RhdGljIFN0
cmluZyYgZ2xvYmFsQ1REYXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlKCkKIHN0YXRpYyBib29sIHNl
c3Npb25zQ3JlYXRlZCA9IGZhbHNlOwogI2VuZGlmCiAKLXZvaWQgTmV0d29ya1Nlc3Npb246OnNl
dEN1c3RvbVByb3RvY29sTWFuYWdlcihDdXN0b21Qcm90b2NvbE1hbmFnZXIqIGN1c3RvbVByb3Rv
Y29sTWFuYWdlcikKK3ZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6c2V0Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyKEN1c3RvbVByb3RvY29sTWFuYWdlciogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKQogewog
ICAgIEFTU0VSVCghc2Vzc2lvbnNDcmVhdGVkKTsKICAgICBnbG9iYWxDdXN0b21Qcm90b2NvbE1h
bmFnZXIoKSA9IGN1c3RvbVByb3RvY29sTWFuYWdlcjsKIH0KICAgICAKLXZvaWQgTmV0d29ya1Nl
c3Npb246OnNldFNvdXJjZUFwcGxpY2F0aW9uQXVkaXRUb2tlbkRhdGEoUmV0YWluUHRyPENGRGF0
YVJlZj4mJiBkYXRhKQordm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VBcHBsaWNh
dGlvbkF1ZGl0VG9rZW5EYXRhKFJldGFpblB0cjxDRkRhdGFSZWY+JiYgZGF0YSkKIHsKICAgICBB
U1NFUlQoIXNlc3Npb25zQ3JlYXRlZCk7CiAgICAgZ2xvYmFsU291cmNlQXBwbGljYXRpb25BdWRp
dFRva2VuRGF0YSgpID0gZGF0YTsKIH0KIAotdm9pZCBOZXR3b3JrU2Vzc2lvbjo6c2V0U291cmNl
QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKK3Zv
aWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6c2V0U291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIXNlc3Npb25zQ3Jl
YXRlZCk7CiAgICAgZ2xvYmFsU291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCkgPSBp
ZGVudGlmaWVyOwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uOjpzZXRTb3VyY2VBcHBsaWNhdGlv
blNlY29uZGFyeUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQordm9pZCBOZXR3
b3JrU2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIo
Y29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghc2Vzc2lvbnNDcmVhdGVk
KTsKICAgICBnbG9iYWxTb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKSA9IGlk
ZW50aWZpZXI7CiB9CiAKICNpZiBQTEFURk9STShJT1MpCi12b2lkIE5ldHdvcmtTZXNzaW9uOjpz
ZXRDVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQordm9pZCBO
ZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRDVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUoY29uc3Qg
U3RyaW5nJiB0eXBlKQogewogICAgIEFTU0VSVCghc2Vzc2lvbnNDcmVhdGVkKTsKICAgICBnbG9i
YWxDVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUoKSA9IHR5cGU7CiB9CiAjZW5kaWYKIAotUmVm
PE5ldHdvcmtTZXNzaW9uPiBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKFR5cGUgdHlwZSwgV2ViQ29y
ZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBjdXN0b21Qcm90
b2NvbE1hbmFnZXIpCitSZWY8TmV0d29ya1Nlc3Npb24+IE5ldHdvcmtTZXNzaW9uQ29jb2E6OmNy
ZWF0ZShXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIq
IGN1c3RvbVByb3RvY29sTWFuYWdlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3
b3JrU2Vzc2lvbih0eXBlLCBzZXNzaW9uSUQsIGN1c3RvbVByb3RvY29sTWFuYWdlcikpOworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtTZXNzaW9uQ29jb2Eoc2Vzc2lvbklELCBjdXN0
b21Qcm90b2NvbE1hbmFnZXIpKTsKIH0KIAotTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTZXNzaW9u
OjpkZWZhdWx0U2Vzc2lvbigpCitOZXR3b3JrU2Vzc2lvbiYgTmV0d29ya1Nlc3Npb25Db2NvYTo6
ZGVmYXVsdFNlc3Npb24oKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3Rh
dGljIE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uID0gJk5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0
d29ya1Nlc3Npb246OlR5cGU6Ok5vcm1hbCwgV2ViQ29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCksIGdsb2JhbEN1c3RvbVByb3RvY29sTWFuYWdlcigpLmdldCgpKS5sZWFrUmVmKCk7
CisgICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uID0gJk5ldHdvcmtTZXNzaW9uQ29j
b2E6OmNyZWF0ZShXZWJDb3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgZ2xvYmFs
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKCkuZ2V0KCkpLmxlYWtSZWYoKTsKICAgICByZXR1cm4gKnNl
c3Npb247CiB9CiAKLU5ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihUeXBlIHR5cGUsIFdl
YkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciogY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyKQotICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQorTmV0d29ya1Nl
c3Npb25Db2NvYTo6TmV0d29ya1Nlc3Npb25Db2NvYShXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIqIGN1c3RvbVByb3RvY29sTWFuYWdlcikKKyAgICA6
IE5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkKIHsKICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1l
bnQoKTsKIApAQCAtNDEzLDcgKzQxMCw3IEBAIE5ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lv
bihUeXBlIHR5cGUsIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByCiAgICAg
c2Vzc2lvbnNDcmVhdGVkID0gdHJ1ZTsKICNlbmRpZgogCi0gICAgTlNVUkxTZXNzaW9uQ29uZmln
dXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25Gb3JUeXBlKHR5cGUpOworICAg
IE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9u
Rm9yU2Vzc2lvbklEKG1fc2Vzc2lvbklEKTsKIAogICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNpbmds
ZXRvbigpLmlzRW5hYmxlZCgpKQogICAgICAgICBjb25maWd1cmF0aW9uLlVSTENhY2hlID0gbmls
OwpAQCAtNDQ1LDExICs0NDIsOSBAQCBOZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24oVHlw
ZSB0eXBlLCBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0b21QcgogI2VuZGlmCiAK
ICAgICBpZiAoc2Vzc2lvbklEID09IFdlYkNvcmU6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpKSB7Ci0gICAgICAgIEFTU0VSVCh0eXBlID09IFR5cGU6Ok5vcm1hbCk7CiAgICAgICAgIGlm
IChDRkhUVFBDb29raWVTdG9yYWdlUmVmIHN0b3JhZ2UgPSBXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vzc2lvbigpLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSkK
ICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uSFRUUENvb2tpZVN0b3JhZ2UgPSBbW1tOU0hUVFBD
b29raWVTdG9yYWdlIGFsbG9jXSBfaW5pdFdpdGhDRkhUVFBDb29raWVTdG9yYWdlOnN0b3JhZ2Vd
IGF1dG9yZWxlYXNlXTsKICAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQodHlwZSA9PSBUeXBl
OjpFcGhlbWVyYWwpOwogICAgICAgICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6Ok5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24oc2Vzc2lvbklEKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc3RvcmFnZVNlc3Npb24pOwogICAgICAgICBpZiAoQ0ZIVFRQQ29va2ll
U3RvcmFnZVJlZiBzdG9yYWdlID0gc3RvcmFnZVNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKS5nZXQo
KSkKQEAgLTQ2NSwyNSArNDYwLDE4IEBAIE5ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihU
eXBlIHR5cGUsIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByCiAgICAgTE9H
KE5ldHdvcmtTZXNzaW9uLCAiQ3JlYXRlZCBOZXR3b3JrU2Vzc2lvbiB3aXRoIGNvb2tpZUFjY2Vw
dFBvbGljeSAlbHUiLCBjb25maWd1cmF0aW9uLkhUVFBDb29raWVTdG9yYWdlLmNvb2tpZUFjY2Vw
dFBvbGljeSk7CiB9CiAKLU5ldHdvcmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24oKQorTmV0d29y
a1Nlc3Npb25Db2NvYTo6fk5ldHdvcmtTZXNzaW9uKCkKIHsKIH0KIAotdm9pZCBOZXR3b3JrU2Vz
c2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCgpCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6Omlu
dmFsaWRhdGVBbmRDYW5jZWwoKQogewogICAgIFttX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3Jh
Z2UgaW52YWxpZGF0ZUFuZENhbmNlbF07CiAgICAgW21fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFs
U3RvcmFnZSBpbnZhbGlkYXRlQW5kQ2FuY2VsXTsKIH0KIAogCi1XZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNlc3Npb24oKSBjb25z
dAotewotICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
c3RvcmFnZVNlc3Npb24pOwotICAgIHJldHVybiAqc3RvcmFnZVNlc3Npb247Ci19Ci0KLXZvaWQg
TmV0d29ya1Nlc3Npb246OmNsZWFyQ3JlZGVudGlhbHMoKQordm9pZCBOZXR3b3JrU2Vzc2lvbkNv
Y29hOjpjbGVhckNyZWRlbnRpYWxzKCkKIHsKICNpZiAhVVNFKENSRURFTlRJQUxfU1RPUkFHRV9X
SVRIX05FVFdPUktfU0VTU0lPTikKICAgICBBU1NFUlQobV9kYXRhVGFza01hcFdpdGhDcmVkZW50
aWFscy5pc0VtcHR5KCkpOwpAQCAtNDk1LDcgKzQ4Myw3IEBAIHZvaWQgTmV0d29ya1Nlc3Npb246
OmNsZWFyQ3JlZGVudGlhbHMoKQogI2VuZGlmCiB9CiAKLU5ldHdvcmtEYXRhVGFzayogTmV0d29y
a1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRpZmllcihOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVu
dGlmaWVyIHRhc2tJZGVudGlmaWVyLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRD
cmVkZW50aWFscykKK05ldHdvcmtEYXRhVGFza0NvY29hKiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpk
YXRhVGFza0ZvcklkZW50aWZpZXIoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVy
IHRhc2tJZGVudGlmaWVyLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50
aWFscykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmIChzdG9yZWRDcmVk
ZW50aWFscyA9PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsczo6QWxsb3dTdG9yZWRDcmVkZW50
aWFscykKQEAgLTUwMyw3ICs0OTEsNyBAQCBOZXR3b3JrRGF0YVRhc2sqIE5ldHdvcmtTZXNzaW9u
OjpkYXRhVGFza0ZvcklkZW50aWZpZXIoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbgogICAgIHJl
dHVybiBtX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmdldCh0YXNrSWRlbnRpZmllcik7
CiB9CiAKLXZvaWQgTmV0d29ya1Nlc3Npb246OmFkZERvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNr
OjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmllciwgRG93bmxvYWRJRCBkb3dubG9hZElEKQor
dm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjphZGREb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0Nv
Y29hOjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmllciwgRG93bmxvYWRJRCBkb3dubG9hZElE
KQogewogI2lmbmRlZiBOREVCVUcKICAgICBBU1NFUlQoIW1fZG93bmxvYWRNYXAuY29udGFpbnMo
dGFza0lkZW50aWZpZXIpKTsKQEAgLTUxMywxMyArNTAxLDEzIEBAIHZvaWQgTmV0d29ya1Nlc3Np
b246OmFkZERvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciB0YXNrSWRl
bnRpZmllCiAgICAgbV9kb3dubG9hZE1hcC5hZGQodGFza0lkZW50aWZpZXIsIGRvd25sb2FkSUQp
OwogfQogCi1Eb3dubG9hZElEIE5ldHdvcmtTZXNzaW9uOjpkb3dubG9hZElEKE5ldHdvcmtEYXRh
VGFzazo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIpCitEb3dubG9hZElEIE5ldHdvcmtT
ZXNzaW9uQ29jb2E6OmRvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlm
aWVyIHRhc2tJZGVudGlmaWVyKQogewogICAgIEFTU0VSVChtX2Rvd25sb2FkTWFwLmdldCh0YXNr
SWRlbnRpZmllcikuZG93bmxvYWRJRCgpKTsKICAgICByZXR1cm4gbV9kb3dubG9hZE1hcC5nZXQo
dGFza0lkZW50aWZpZXIpOwogfQogCi1Eb3dubG9hZElEIE5ldHdvcmtTZXNzaW9uOjp0YWtlRG93
bmxvYWRJRChOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyKQor
RG93bmxvYWRJRCBOZXR3b3JrU2Vzc2lvbkNvY29hOjp0YWtlRG93bmxvYWRJRChOZXR3b3JrRGF0
YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIpCiB7CiAgICAgYXV0byBk
b3dubG9hZElEID0gbV9kb3dubG9hZE1hcC50YWtlKHRhc2tJZGVudGlmaWVyKTsKICAgICByZXR1
cm4gZG93bmxvYWRJRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBjZTBmNzNmLi44OWE3
ZWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3Rl
TmV0d29ya2luZ0NvbnRleHQubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
bWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgUmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lv
bklEIHNlc3Npb25JRCkKICAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmVuc3VyZVByaXZhdGVC
cm93c2luZ1Nlc3Npb24oc2Vzc2lvbklELCBiYXNlICsgJy4nICsgU3RyaW5nOjpudW1iZXIoc2Vz
c2lvbklELnNlc3Npb25JRCgpKSk7CiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIGF1
dG8gbmV0d29ya1Nlc3Npb24gPSBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9u
OjpUeXBlOjpFcGhlbWVyYWwsIHNlc3Npb25JRCwgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigp
LnN1cHBsZW1lbnQ8Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyPigpKTsKKyAgICBhdXRvIG5ldHdvcmtT
ZXNzaW9uID0gTmV0d29ya1Nlc3Npb246OmNyZWF0ZShzZXNzaW9uSUQsIE5ldHdvcmtQcm9jZXNz
OjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PEN1c3RvbVByb3RvY29sTWFuYWdlcj4oKSk7CiAgICAg
U2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklELCBXVEZNb3ZlKG5ldHdvcmtTZXNz
aW9uKSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCmluZGV4IGU2ODcyZTMuLjZiZGJi
YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a0RhdGFUYXNrU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcApAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2suaCIKKyNpbmNsdWRlICJO
ZXR3b3JrRGF0YVRhc2tTb3VwLmgiCiAKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbk1hbmFnZXIu
aCIKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVk
ZSAiRG93bmxvYWRTb3VwRXJyb3JzLmgiCiAjaW5jbHVkZSAiTmV0d29ya0xvYWQuaCIKICNpbmNs
dWRlICJOZXR3b3JrUHJvY2Vzcy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5j
bHVkZSAiTmV0d29ya1Nlc3Npb25Tb3VwLmgiCiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSFRUUFBhcnNlcnMuaD4KQEAgLTQ3LDMwICs0NywxNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogc3RhdGljIGNvbnN0IHNpemVfdCBnRGVmYXVsdFJlYWRCdWZmZXJTaXplID0gODE5MjsKIAot
TmV0d29ya0RhdGFUYXNrOjpOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mIHNlc3Npb24s
IE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3RXaXRoQ3JlZGVudGlhbHMsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxz
LCBDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIHNob3VsZENs
ZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCi0gICAgOiBtX2ZhaWx1cmVUaW1lcigq
dGhpcywgJk5ldHdvcmtEYXRhVGFzazo6ZmFpbHVyZVRpbWVyRmlyZWQpCi0gICAgLCBtX3Nlc3Np
b24oJnNlc3Npb24pCi0gICAgLCBtX2NsaWVudCgmY2xpZW50KQotICAgICwgbV9zdG9yZWRDcmVk
ZW50aWFscyhzdG9yZWRDcmVkZW50aWFscykKLSAgICAsIG1fbGFzdEhUVFBNZXRob2QocmVxdWVz
dFdpdGhDcmVkZW50aWFscy5odHRwTWV0aG9kKCkpCi0gICAgLCBtX2ZpcnN0UmVxdWVzdChyZXF1
ZXN0V2l0aENyZWRlbnRpYWxzKQotICAgICwgbV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1Rv
SFRUUFJlZGlyZWN0KHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCitO
ZXR3b3JrRGF0YVRhc2tTb3VwOjpOZXR3b3JrRGF0YVRhc2tTb3VwKE5ldHdvcmtTZXNzaW9uJiBz
ZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVk
ZW50aWFscywgQ29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBz
aG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQorICAgIDogTmV0d29ya0Rh
dGFUYXNrKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgc3RvcmVkQ3Jl
ZGVudGlhbHMsIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCiAgICAg
LCBtX3Nob3VsZENvbnRlbnRTbmlmZihzaG91bGRDb250ZW50U25pZmYpCi0gICAgLCBtX3RpbWVv
dXRTb3VyY2UoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTmV0d29ya0RhdGFUYXNrOjp0aW1lb3V0
RmlyZWQpCisgICAgLCBtX3RpbWVvdXRTb3VyY2UoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTmV0
d29ya0RhdGFUYXNrU291cDo6dGltZW91dEZpcmVkKQogewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0KLSAgICBtX3Nlc3Npb24tPm1fZGF0YVRhc2tTZXQuYWRkKHRoaXMpOwotCi0gICAg
aWYgKCFyZXF1ZXN0V2l0aENyZWRlbnRpYWxzLnVybCgpLmlzVmFsaWQoKSkgewotICAgICAgICBz
Y2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOworICAgIGRvd25jYXN0PE5ldHdvcmtT
ZXNzaW9uU291cD4obV9zZXNzaW9uLmdldCgpKS5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhp
cyk7CisgICAgaWYgKG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgIT0gTm9GYWlsdXJlKQogICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFwb3J0QWxsb3dlZChyZXF1ZXN0V2l0aENyZWRl
bnRpYWxzLnVybCgpKSkgewotICAgICAgICBzY2hlZHVsZUZhaWx1cmUoQmxvY2tlZEZhaWx1cmUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgYXV0byByZXF1ZXN0ID0gcmVxdWVzdFdp
dGhDcmVkZW50aWFsczsKICAgICBpZiAocmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFt
aWx5KCkpIHsKQEAgLTkzLDQ0ICs3NywxMyBAQCBOZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRh
VGFzayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JgogICAg
IGNyZWF0ZVJlcXVlc3QocmVxdWVzdCk7CiB9CiAKLU5ldHdvcmtEYXRhVGFzazo6fk5ldHdvcmtE
YXRhVGFzaygpCitOZXR3b3JrRGF0YVRhc2tTb3VwOjp+TmV0d29ya0RhdGFUYXNrU291cCgpCiB7
Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fY2xpZW50KTsKICAg
ICBjbGVhclJlcXVlc3QoKTsKLSAgICBtX3Nlc3Npb24tPm1fZGF0YVRhc2tTZXQucmVtb3ZlKHRo
aXMpOwotfQotCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6c2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVU
eXBlIHR5cGUpCi17Ci0gICAgQVNTRVJUKHR5cGUgIT0gTm9GYWlsdXJlKTsKLSAgICBtX3NjaGVk
dWxlZEZhaWx1cmVUeXBlID0gdHlwZTsKLSAgICBtX2ZhaWx1cmVUaW1lci5zdGFydE9uZVNob3Qo
MCk7Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCgpCi17Ci0g
ICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLQotICAgIHN3
aXRjaCAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSkgewotICAgIGNhc2UgQmxvY2tlZEZhaWx1cmU6
Ci0gICAgICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBOb0ZhaWx1cmU7Ci0gICAgICAgIGlm
IChtX2NsaWVudCkKLSAgICAgICAgICAgIG1fY2xpZW50LT53YXNCbG9ja2VkKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICBjYXNlIEludmFsaWRVUkxGYWlsdXJlOgotICAgICAgICBtX3NjaGVkdWxl
ZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJlOwotICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAg
ICAgICBtX2NsaWVudC0+Y2Fubm90U2hvd1VSTCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBOb0ZhaWx1cmU6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgZG93bmNhc3Q8TmV0d29y
a1Nlc3Npb25Tb3VwPihtX3Nlc3Npb24uZ2V0KCkpLnVucmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2so
KnRoaXMpOwogfQogCi1TdHJpbmcgTmV0d29ya0RhdGFUYXNrOjpzdWdnZXN0ZWRGaWxlbmFtZSgp
CitTdHJpbmcgTmV0d29ya0RhdGFUYXNrU291cDo6c3VnZ2VzdGVkRmlsZW5hbWUoKSBjb25zdAog
ewogICAgIGlmICghbV9zdWdnZXN0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBtX3N1Z2dlc3RlZEZpbGVuYW1lOwpAQCAtMTQyLDIzICs5NSwxMyBAQCBTdHJpbmcgTmV0d29y
a0RhdGFUYXNrOjpzdWdnZXN0ZWRGaWxlbmFtZSgpCiAgICAgcmV0dXJuIGRlY29kZVVSTEVzY2Fw
ZVNlcXVlbmNlcyhtX3Jlc3BvbnNlLnVybCgpLmxhc3RQYXRoQ29tcG9uZW50KCkpOwogfQogCi12
b2lkIE5ldHdvcmtEYXRhVGFzazo6c2V0U3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWROYW1lKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzZXRQZW5kaW5nRG93bmxv
YWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGJvb2wgYWxsb3dPdmVyd3JpdGUpCiB7
Ci0gICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZE5hbWU7Ci19Ci0KLXZvaWQgTmV0
d29ya0RhdGFUYXNrOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZp
bGVuYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIGFsbG93T3Zlcndy
aXRlKQotewotICAgIG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBmaWxlbmFtZTsKKyAgICBO
ZXR3b3JrRGF0YVRhc2s6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGZpbGVuYW1lLCBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSk7CiAgICAgbV9hbGxvd092ZXJ3cml0
ZURvd25sb2FkID0gYWxsb3dPdmVyd3JpdGU7CiB9CiAKLWJvb2wgTmV0d29ya0RhdGFUYXNrOjph
bGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjpjcmVhdGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrU291cDo6Y3JlYXRlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCiB7CiAgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiBzb3VwVVJJID0gcmVxdWVzdC5j
cmVhdGVTb3VwVVJJKCk7CiAgICAgaWYgKCFzb3VwVVJJKSB7CkBAIC0xNjYsNyArMTA5LDcgQEAg
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR1JlZlB0cjxTb3VwUmVx
dWVzdD4gc291cFJlcXVlc3QgPSBhZG9wdEdSZWYoc291cF9zZXNzaW9uX3JlcXVlc3RfdXJpKG1f
c2Vzc2lvbi0+c291cFNlc3Npb24oKSwgc291cFVSSS5nZXQoKSwgbnVsbHB0cikpOworICAgIEdS
ZWZQdHI8U291cFJlcXVlc3Q+IHNvdXBSZXF1ZXN0ID0gYWRvcHRHUmVmKHNvdXBfc2Vzc2lvbl9y
ZXF1ZXN0X3VyaShkb3duY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXA+KG1fc2Vzc2lvbi5nZXQoKSku
c291cFNlc3Npb24oKSwgc291cFVSSS5nZXQoKSwgbnVsbHB0cikpOwogICAgIGlmICghc291cFJl
cXVlc3QpIHsKICAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjE4LDE5ICsxNjEsMTkgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6
OmNyZWF0ZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV9zb3VwTWVzc2FnZS5nZXQoKSwgIm5vdGlmeTo6dGxzLWVycm9ycyIsIEdf
Q0FMTEJBQ0sodGxzRXJyb3JzQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxf
Y29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAiZ290LWhlYWRlcnMiLCBHX0NBTExCQUNLKGdv
dEhlYWRlcnNDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9zb3VwTWVz
c2FnZS5nZXQoKSwgIndyb3RlLWJvZHktZGF0YSIsIEdfQ0FMTEJBQ0sod3JvdGVCb2R5RGF0YUNh
bGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX3Nlc3Npb24tPnNvdXBTZXNz
aW9uKCksICJhdXRoZW50aWNhdGUiLCAgR19DQUxMQkFDSyhhdXRoZW50aWNhdGVDYWxsYmFjayks
IHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Tb3Vw
PihtX3Nlc3Npb24uZ2V0KCkpLnNvdXBTZXNzaW9uKCksICJhdXRoZW50aWNhdGUiLCAgR19DQUxM
QkFDSyhhdXRoZW50aWNhdGVDYWxsYmFjayksIHRoaXMpOwogI2lmIEVOQUJMRShXRUJfVElNSU5H
KQogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9zb3VwTWVzc2FnZS5nZXQoKSwgIm5ldHdvcmstZXZl
bnQiLCBHX0NBTExCQUNLKG5ldHdvcmtFdmVudENhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWdu
YWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhy
ZXN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOwogI2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA0OSwg
OTEpCiAgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAic3RhcnRpbmci
LCBHX0NBTExCQUNLKHN0YXJ0aW5nQ2FsbGJhY2spLCB0aGlzKTsKICNlbHNlCi0gICAgZ19zaWdu
YWxfY29ubmVjdChtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCksICJyZXF1ZXN0LXN0YXJ0ZWQiLCBH
X0NBTExCQUNLKHJlcXVlc3RTdGFydGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KGRvd25jYXN0PE5ldHdvcmtTZXNzaW9uU291cD4obV9zZXNzaW9uLmdldCgpKS5zb3Vw
U2Vzc2lvbigpLCAicmVxdWVzdC1zdGFydGVkIiwgR19DQUxMQkFDSyhyZXF1ZXN0U3RhcnRlZENh
bGxiYWNrKSwgdGhpcyk7CiAjZW5kaWYKICNlbmRpZgogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFz
azo6Y2xlYXJSZXF1ZXN0KCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y2xlYXJSZXF1ZXN0
KCkKIHsKICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQogICAgICAgICByZXR1
cm47CkBAIC0yNDcsMTMgKzE5MCwxMyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y2xlYXJSZXF1
ZXN0KCkKICAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0cjsKICAgICBpZiAobV9zb3VwTWVzc2Fn
ZSkgewogICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9zb3Vw
TWVzc2FnZS5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0
ciwgdGhpcyk7Ci0gICAgICAgIHNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZShtX3Nlc3Npb24t
PnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfU1RBVFVTX0NBTkNFTExF
RCk7CisgICAgICAgIHNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZShkb3duY2FzdDxOZXR3b3Jr
U2Vzc2lvblNvdXA+KG1fc2Vzc2lvbi5nZXQoKSkuc291cFNlc3Npb24oKSwgbV9zb3VwTWVzc2Fn
ZS5nZXQoKSwgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKICAgICAgICAgbV9zb3VwTWVzc2FnZSA9
IG51bGxwdHI7CiAgICAgfQotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hl
ZChtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51
bGxwdHIsIG51bGxwdHIsIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
bWF0Y2hlZChkb3duY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXA+KG1fc2Vzc2lvbi5nZXQoKSkuc291
cFNlc3Npb24oKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwg
dGhpcyk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXN1bWUoKQordm9pZCBOZXR3b3Jr
RGF0YVRhc2tTb3VwOjpyZXN1bWUoKQogewogICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpS
dW5uaW5nKTsKICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUg
PT0gU3RhdGU6OkNvbXBsZXRlZCkKQEAgLTI2OCw3ICsyMTEsNyBAQCB2b2lkIE5ldHdvcmtEYXRh
VGFzazo6cmVzdW1lKCkKIAogICAgIHN0YXJ0VGltZW91dCgpOwogCi0gICAgUmVmUHRyPE5ldHdv
cmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFU
YXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBpZiAobV9zb3VwUmVxdWVzdCAmJiAh
bV9jYW5jZWxsYWJsZSkgewogICAgICAgICBtX2NhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2Fu
Y2VsbGFibGVfbmV3KCkpOwogICAgICAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhtX3NvdXBS
ZXF1ZXN0LmdldCgpLCBtX2NhbmNlbGxhYmxlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdBc3lu
Y1JlYWR5Q2FsbGJhY2s+KHNlbmRSZXF1ZXN0Q2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtS
ZWYoKSk7CkBAIC0yODgsNyArMjMxLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlc3VtZSgp
CiAgICAgfQogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6c3VzcGVuZCgpCit2b2lkIE5ldHdv
cmtEYXRhVGFza1NvdXA6OnN1c3BlbmQoKQogewogICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRl
OjpTdXNwZW5kZWQpOwogICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9z
dGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQpAQCAtMjk4LDcgKzI0MSw3IEBAIHZvaWQgTmV0d29y
a0RhdGFUYXNrOjpzdXNwZW5kKCkKICAgICBzdG9wVGltZW91dCgpOwogfQogCi12b2lkIE5ldHdv
cmtEYXRhVGFzazo6Y2FuY2VsKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y2FuY2VsKCkK
IHsKICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3Rh
dGU6OkNvbXBsZXRlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzA2LDcgKzI0OSw3IEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrOjpjYW5jZWwoKQogICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q2FuY2VsaW5n
OwogCiAgICAgaWYgKG1fc291cE1lc3NhZ2UpCi0gICAgICAgIHNvdXBfc2Vzc2lvbl9jYW5jZWxf
bWVzc2FnZShtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCksIFNP
VVBfU1RBVFVTX0NBTkNFTExFRCk7CisgICAgICAgIHNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2Fn
ZShkb3duY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXA+KG1fc2Vzc2lvbi5nZXQoKSkuc291cFNlc3Np
b24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSwgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKIAogICAg
IGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOwogCkBAIC0zMTQsNDMg
KzI1Nyw0MyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y2FuY2VsKCkKICAgICAgICAgY2xlYW5E
b3dubG9hZEZpbGVzKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjppbnZhbGlkYXRlQW5k
Q2FuY2VsKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6aW52YWxpZGF0ZUFuZENhbmNlbCgp
CiB7CiAgICAgY2FuY2VsKCk7CiAgICAgY2xlYXJSZXF1ZXN0KCk7CiB9CiAKLU5ldHdvcmtEYXRh
VGFzazo6U3RhdGUgTmV0d29ya0RhdGFUYXNrOjpzdGF0ZSgpIGNvbnN0CitOZXR3b3JrRGF0YVRh
c2s6OlN0YXRlIE5ldHdvcmtEYXRhVGFza1NvdXA6OnN0YXRlKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9zdGF0ZTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnRpbWVvdXRGaXJlZCgpCit2
b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnRpbWVvdXRGaXJlZCgpCiB7CiAgICAgaWYgKG1fc3Rh
dGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwg
IW1fY2xpZW50KSB7CiAgICAgICAgIGNsZWFyUmVxdWVzdCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAg
ICBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CiAgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVy
cm9yKFJlc291cmNlRXJyb3I6OnRpbWVvdXRFcnJvcihtX2ZpcnN0UmVxdWVzdC51cmwoKSkpOwog
fQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6c3RhcnRUaW1lb3V0KCkKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrU291cDo6c3RhcnRUaW1lb3V0KCkKIHsKICAgICBpZiAobV9maXJzdFJlcXVlc3QudGlt
ZW91dEludGVydmFsKCkgPiAwKQogICAgICAgICBtX3RpbWVvdXRTb3VyY2Uuc3RhcnRPbmVTaG90
KG1fZmlyc3RSZXF1ZXN0LnRpbWVvdXRJbnRlcnZhbCgpKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0
YVRhc2s6OnN0b3BUaW1lb3V0KCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c3RvcFRpbWVv
dXQoKQogewogICAgIG1fdGltZW91dFNvdXJjZS5zdG9wKCk7CiB9CiAKLXZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiBzb3VwUmVxdWVzdCwgR0Fz
eW5jUmVzdWx0KiByZXN1bHQsIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrU291cDo6c2VuZFJlcXVlc3RDYWxsYmFjayhTb3VwUmVxdWVzdCogc291cFJlcXVlc3Qs
IEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewotICAg
IFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsK
KyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVm
KHRhc2spOwogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFz
ay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewogICAg
ICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzcxLDcgKzMx
NCw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1
ZXN0KiBzb3VwUmVxdWVzdCwgR0FzeW5jUmVzdWx0CiAgICAgICAgIHRhc2stPmRpZFNlbmRSZXF1
ZXN0KFdURk1vdmUoaW5wdXRTdHJlYW0pKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRp
ZFNlbmRSZXF1ZXN0KEdSZWZQdHI8R0lucHV0U3RyZWFtPiYmIGlucHV0U3RyZWFtKQordm9pZCBO
ZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRTZW5kUmVxdWVzdChHUmVmUHRyPEdJbnB1dFN0cmVhbT4m
JiBpbnB1dFN0cmVhbSkKIHsKICAgICBpZiAobV9zb3VwTWVzc2FnZSkgewogICAgICAgICBpZiAo
bV9zaG91bGRDb250ZW50U25pZmYgPT0gU25pZmZDb250ZW50ICYmIG1fc291cE1lc3NhZ2UtPnN0
YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRCkKQEAgLTQwNSw3ICszNDgsNyBA
QCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkU2VuZFJlcXVlc3QoR1JlZlB0cjxHSW5wdXRTdHJl
YW0+JiYgaW5wdXRTdHJlYW0pCiAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiB9CiAKLXZvaWQg
TmV0d29ya0RhdGFUYXNrOjpkaWRSZWNlaXZlUmVzcG9uc2UoKQordm9pZCBOZXR3b3JrRGF0YVRh
c2tTb3VwOjpkaWRSZWNlaXZlUmVzcG9uc2UoKQogewogICAgIEFTU0VSVCghbV9yZXNwb25zZS5p
c051bGwoKSk7CiAKQEAgLTQzNiw3ICszNzksNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKCkKICAgICB9KTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnRs
c0Vycm9yc0NoYW5nZWRDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIEdQYXJhbVNw
ZWMqLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnRs
c0Vycm9yc0NoYW5nZWRDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIEdQYXJhbVNw
ZWMqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewogICAgIGlmICh0YXNrLT5zdGF0ZSgp
ID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVk
IHx8ICF0YXNrLT5tX2NsaWVudCkgewogICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKQEAg
LTQ0NywyMCArMzkwLDIwIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2Vk
Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBHUGFyYW1TCiAgICAgdGFzay0+dGxz
RXJyb3JzQ2hhbmdlZCgpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6dGxzRXJyb3JzQ2hh
bmdlZCgpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnRsc0Vycm9yc0NoYW5nZWQoKQogewog
ICAgIEFTU0VSVChtX3NvdXBSZXF1ZXN0KTsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OmNoZWNr
VExTRXJyb3JzKG1fc291cFJlcXVlc3QuZ2V0KCksIG1fc291cE1lc3NhZ2UuZ2V0KCksIFt0aGlz
XSAoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpIHsKICAgICAgICAgaWYgKGVycm9yLmlzTnVs
bCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRh
c2s+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tT
b3VwPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgICAgICBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7
CiAgICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcihlcnJvcik7CiAgICAgfSk7
CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjphcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0
KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6YXBw
bHlBdXRoZW50aWNhdGlvblRvUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAg
ICAgLy8gV2UgYWx3YXlzIHB1dCB0aGUgY3JlZGVudGlhbHMgaW50byB0aGUgVVJMLiBJbiB0aGUg
Q29jYSBwb3J0IEhUVFAgZmFtaWx5IGNyZWRlbnRpYWxzIGFyZSBhcHBsaWVkIGluCiAgICAgLy8g
dGhlIGRpZFJlY2VpdmVDaGFsbGVuZ2UgY2FsbGJhY2ssIGJ1dCBsaWJzb3VwIHJlcXVpcmVzIHVz
IHRvIHVzZSB0aGlzIG1ldGhvZCB0byBvdmVycmlkZQpAQCAtNDgwLDkgKzQyMyw5IEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrOjphcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKICAgICByZXF1ZXN0LnNldFVSTCh1cmwpOwogfQogCi12b2lkIE5ldHdv
cmtEYXRhVGFzazo6YXV0aGVudGljYXRlQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNv
dXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cEF1dGgqIHNvdXBBdXRoLCBnYm9vbGVhbiByZXRy
eWluZywgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjph
dXRoZW50aWNhdGVDYWxsYmFjayhTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3NhZ2UqIHNv
dXBNZXNzYWdlLCBTb3VwQXV0aCogc291cEF1dGgsIGdib29sZWFuIHJldHJ5aW5nLCBOZXR3b3Jr
RGF0YVRhc2tTb3VwKiB0YXNrKQogewotICAgIEFTU0VSVChzZXNzaW9uID09IHRhc2stPm1fc2Vz
c2lvbi0+c291cFNlc3Npb24oKSk7CisgICAgQVNTRVJUKHNlc3Npb24gPT0gdGFzay0+ZG93bmNh
c3Q8TmV0d29ya1Nlc3Npb25Tb3VwPihtX3Nlc3Npb24uZ2V0KCkpLnNvdXBTZXNzaW9uKCkpOwog
ICAgIGlmIChzb3VwTWVzc2FnZSAhPSB0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTQ5OSw3ICs0NDIsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNBdXRo
ZW50aWNhdGlvbkZhaWx1cmVTdGF0dXNDb2RlKGludCBodHRwU3RhdHVzQ29kZSkKICAgICByZXR1
cm4gaHR0cFN0YXR1c0NvZGUgPT0gU09VUF9TVEFUVVNfUFJPWFlfQVVUSEVOVElDQVRJT05fUkVR
VUlSRUQgfHwgaHR0cFN0YXR1c0NvZGUgPT0gU09VUF9TVEFUVVNfVU5BVVRIT1JJWkVEOwogfQog
Ci12b2lkIE5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRlKEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiYgY2hhbGxlbmdlKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjphdXRoZW50aWNhdGUo
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBjaGFsbGVuZ2UpCiB7CiAgICAgQVNTRVJUKG1fc291
cE1lc3NhZ2UpOwogICAgIGlmIChtX3N0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMpIHsKQEAgLTUyNSw3ICs0NjgsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6YXV0
aGVudGljYXRlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYgY2hhbGxlbmdlKQogICAgICAgICB9
CiAgICAgfQogCi0gICAgc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2UobV9zZXNzaW9uLT5zb3Vw
U2Vzc2lvbigpLCBtX3NvdXBNZXNzYWdlLmdldCgpKTsKKyAgICBzb3VwX3Nlc3Npb25fcGF1c2Vf
bWVzc2FnZShkb3duY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXA+KG1fc2Vzc2lvbi5nZXQoKSkuc291
cFNlc3Npb24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSk7CiAKICAgICAvLyBXZSBjb3VsZCBhbHNv
IGRvIHRoaXMgYmVmb3JlIHdlIGV2ZW4gc3RhcnQgdGhlIHJlcXVlc3QsIGJ1dCB0aGF0IHdvdWxk
IGJlIGF0IHRoZSBleHBlbnNlCiAgICAgLy8gb2YgYWxsIHJlcXVlc3QgbGF0ZW5jeSwgdmVyc3Vz
IGEgb25lLXRpbWUgbGF0ZW5jeSBmb3IgdGhlIHNtYWxsIHN1YnNldCBvZiByZXF1ZXN0cyB0aGF0
CkBAIC01NDcsNyArNDkwLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmF1dGhlbnRpY2F0ZShB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGNoYWxsZW5nZSkKICAgICAgICAgY29udGludWVBdXRo
ZW50aWNhdGUoV1RGTW92ZShjaGFsbGVuZ2UpKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6
OmNvbnRpbnVlQXV0aGVudGljYXRlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYgY2hhbGxlbmdl
KQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjb250aW51ZUF1dGhlbnRpY2F0ZShBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYmIGNoYWxsZW5nZSkKIHsKICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2
ZUNoYWxsZW5nZShjaGFsbGVuZ2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGNoYWxsZW5nZV0oQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3Np
dGlvbiwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkgewogICAgICAgICBpZiAobV9zdGF0
ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkgewpA
QCAtNTc5LDEzICs1MjIsMTMgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNvbnRpbnVlQXV0aGVu
dGljYXRlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYgY2hhbGxlbmdlKQogICAgICAgICAgICAg
c291cF9hdXRoX2F1dGhlbnRpY2F0ZShjaGFsbGVuZ2Uuc291cEF1dGgoKSwgY3JlZGVudGlhbC51
c2VyKCkudXRmOCgpLmRhdGEoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpLnV0ZjgoKS5kYXRhKCkp
OwogICAgICAgICB9CiAKLSAgICAgICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2FnZShtX3Nl
c3Npb24tPnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCkpOworICAgICAgICBzb3Vw
X3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKGRvd25jYXN0PE5ldHdvcmtTZXNzaW9uU291cD4obV9z
ZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpLCBtX3NvdXBNZXNzYWdlLmdldCgpKTsKICAgICB9
KTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0
aW9uQ2FsbGJhY2soR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1
bHQsIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c2tp
cElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25DYWxsYmFjayhHSW5wdXRTdHJlYW0qIGlucHV0U3Ry
ZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNrU291cCogdGFzaykKIHsK
LSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFz
ayk7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFza1NvdXA+IHByb3RlY3RlZFRoaXMgPSBhZG9w
dFJlZih0YXNrKTsKICAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8
IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpIHsK
ICAgICAgICAgdGFzay0+Y2xlYXJSZXF1ZXN0KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTYwMiwx
NSArNTQ1LDE1IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpza2lwSW5wdXRTdHJlYW1Gb3JSZWRp
cmVjdGlvbkNhbGxiYWNrKEdJbnB1dFN0cmVhbSogaW5wdXRTCiAgICAgICAgIHRhc2stPmRpZEZp
bmlzaFNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCk7CiB9CiAKLXZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpCit2b2lkIE5ldHdvcmtEYXRh
VGFza1NvdXA6OnNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCkKIHsKICAgICBBU1NFUlQo
bV9pbnB1dFN0cmVhbSk7Ci0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKICAgICBnX2lucHV0X3N0cmVhbV9za2lwX2FzeW5jKG1faW5wdXRTdHJlYW0uZ2V0KCks
IGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUsIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJs
ZS5nZXQoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihz
a2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbkNhbGxiYWNrKSwgcHJvdGVjdGVkVGhpcy5sZWFr
UmVmKCkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoU2tpcElucHV0U3Ry
ZWFtRm9yUmVkaXJlY3Rpb24oKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRGaW5pc2hT
a2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpCiB7CiAgICAgZ19pbnB1dF9zdHJlYW1fY2xv
c2UobV9pbnB1dFN0cmVhbS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgY29udGludWVI
VFRQUmVkaXJlY3Rpb24oKTsKQEAgLTYzNyw3ICs1ODAsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRS
ZWRpcmVjdEFzR0VUKFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBib29sIGNyb3NzT3JpZ2luKQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBOZXR3b3JrRGF0YVRhc2s6OnNob3VsZFN0YXJ0SFRU
UFJlZGlyZWN0aW9uKCkKK2Jvb2wgTmV0d29ya0RhdGFUYXNrU291cDo6c2hvdWxkU3RhcnRIVFRQ
UmVkaXJlY3Rpb24oKQogewogICAgIEFTU0VSVChtX3NvdXBNZXNzYWdlKTsKICAgICBBU1NFUlQo
IW1fcmVzcG9uc2UuaXNOdWxsKCkpOwpAQCAtNjU2LDcgKzU5OSw3IEBAIGJvb2wgTmV0d29ya0Rh
dGFUYXNrOjpzaG91bGRTdGFydEhUVFBSZWRpcmVjdGlvbigpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpCit2b2lk
IE5ldHdvcmtEYXRhVGFza1NvdXA6OmNvbnRpbnVlSFRUUFJlZGlyZWN0aW9uKCkKIHsKICAgICBB
U1NFUlQobV9zb3VwTWVzc2FnZSk7CiAgICAgQVNTRVJUKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKTsK
QEAgLTcyNyw5ICs2NzAsOSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y29udGludWVIVFRQUmVk
aXJlY3Rpb24oKQogICAgIH0pOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVhZENhbGxi
YWNrKEdJbnB1dFN0cmVhbSogaW5wdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3
b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlYWRDYWxsYmFj
ayhHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29y
a0RhdGFUYXNrU291cCogdGFzaykKIHsKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90
ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFzayk7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFza1Nv
dXA+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKICAgICBpZiAodGFzay0+c3RhdGUo
KSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRl
ZCB8fCAoIXRhc2stPm1fY2xpZW50ICYmICF0YXNrLT5pc0Rvd25sb2FkKCkpKSB7CiAgICAgICAg
IHRhc2stPmNsZWFyUmVxdWVzdCgpOwogICAgICAgICByZXR1cm47CkBAIC03NTIsMTYgKzY5NSwx
NiBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVhZENhbGxiYWNrKEdJbnB1dFN0cmVhbSogaW5w
dXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdQogICAgICAgICB0YXNrLT5kaWRGaW5pc2hSZWFk
KCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZWFkKCkKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrU291cDo6cmVhZCgpCiB7Ci0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKICAgICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7CiAgICAgbV9yZWFkQnVmZmVyLmdy
b3coZ0RlZmF1bHRSZWFkQnVmZmVyU2l6ZSk7CiAgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3lu
YyhtX2lucHV0U3RyZWFtLmdldCgpLCBtX3JlYWRCdWZmZXIuZGF0YSgpLCBtX3JlYWRCdWZmZXIu
c2l6ZSgpLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCiAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVhZENhbGxiYWNrKSwgcHJv
dGVjdGVkVGhpcy5sZWFrUmVmKCkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVh
ZChnc3NpemUgYnl0ZXNSZWFkKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRSZWFkKGdz
c2l6ZSBieXRlc1JlYWQpCiB7CiAgICAgbV9yZWFkQnVmZmVyLnNocmluayhieXRlc1JlYWQpOwog
ICAgIGlmIChtX2Rvd25sb2FkT3V0cHV0U3RyZWFtKSB7CkBAIC03NzQsNyArNzE3LDcgQEAgdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlYWQoZ3NzaXplIGJ5dGVzUmVhZCkKICAgICB9CiB9CiAK
LXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hSZWFkKCkKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrU291cDo6ZGlkRmluaXNoUmVhZCgpCiB7CiAgICAgQVNTRVJUKG1faW5wdXRTdHJlYW0pOwog
ICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlKG1faW5wdXRTdHJlYW0uZ2V0KCksIG51bGxwdHIsIG51
bGxwdHIpOwpAQCAtNzk0LDkgKzczNyw5IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5p
c2hSZWFkKCkKICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoeyB9KTsKIH0KIAot
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKFNvdXBNdWx0aXBh
cnRJbnB1dFN0cmVhbSogbXVsdGlwYXJ0SW5wdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0
LCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlcXVl
c3ROZXh0UGFydENhbGxiYWNrKFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbSogbXVsdGlwYXJ0SW5w
dXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNr
KQogewotICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJl
Zih0YXNrKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyA9
IGFkb3B0UmVmKHRhc2spOwogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxp
bmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVu
dCkgewogICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKICAgICAgICAgcmV0dXJuOwpAQCAt
ODE5LDE2ICs3NjIsMTYgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENh
bGxiYWNrKFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbSogbXVsdGlwYXIKICAgICAgICAgdGFzay0+
ZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpy
ZXF1ZXN0TmV4dFBhcnQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZXF1ZXN0TmV4dFBh
cnQoKQogewotICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXModGhpcyk7
CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFza1NvdXA+IHByb3RlY3RlZFRoaXModGhpcyk7CiAg
ICAgQVNTRVJUKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0pOwogICAgIEFTU0VSVCghbV9pbnB1dFN0
cmVhbSk7CiAgICAgc291cF9tdWx0aXBhcnRfaW5wdXRfc3RyZWFtX25leHRfcGFydF9hc3luYyht
X211bHRpcGFydElucHV0U3RyZWFtLmdldCgpLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2Vs
bGFibGUuZ2V0KCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFj
az4ocmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CiB9
CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZXF1ZXN0TmV4dFBhcnQoR1JlZlB0cjxHSW5w
dXRTdHJlYW0+JiYgaW5wdXRTdHJlYW0pCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFJl
cXVlc3ROZXh0UGFydChHUmVmUHRyPEdJbnB1dFN0cmVhbT4mJiBpbnB1dFN0cmVhbSkKIHsKICAg
ICBBU1NFUlQoIW1faW5wdXRTdHJlYW0pOwogICAgIG1faW5wdXRTdHJlYW0gPSBXVEZNb3ZlKGlu
cHV0U3RyZWFtKTsKQEAgLTgzOCw3ICs3ODEsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlk
UmVxdWVzdE5leHRQYXJ0KEdSZWZQdHI8R0lucHV0U3RyZWFtPiYmIGlucHV0U3RyZWFtKQogICAg
IGRpZFJlY2VpdmVSZXNwb25zZSgpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmlu
aXNoUmVxdWVzdE5leHRQYXJ0KCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkRmluaXNo
UmVxdWVzdE5leHRQYXJ0KCkKIHsKICAgICBBU1NFUlQoIW1faW5wdXRTdHJlYW0pOwogICAgIEFT
U0VSVChtX211bHRpcGFydElucHV0U3RyZWFtKTsKQEAgLTg0Nyw3ICs3OTAsNyBAQCB2b2lkIE5l
dHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KCkKICAgICBtX2NsaWVudC0+
ZGlkQ29tcGxldGVXaXRoRXJyb3IoeyB9KTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6Omdv
dEhlYWRlcnNDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFz
ayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Z290SGVhZGVyc0NhbGxiYWNrKFNv
dXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYXNrU291cCogdGFzaykKIHsKICAg
ICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkg
PT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpIHsKICAgICAgICAgdGFzay0+
Y2xlYXJSZXF1ZXN0KCk7CkBAIC04NTcsNyArODAwLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6
OmdvdEhlYWRlcnNDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRh
VGEKICAgICB0YXNrLT5kaWRHZXRIZWFkZXJzKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNr
OjpkaWRHZXRIZWFkZXJzKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkR2V0SGVhZGVy
cygpCiB7CiAgICAgLy8gV2UgYXJlIGEgYml0IG1vcmUgY29uc2VydmF0aXZlIHdpdGggdGhlIHBl
cnNpc3RlbnQgY3JlZGVudGlhbCBzdG9yYWdlIHRoYW4gdGhlIHNlc3Npb24gc3RvcmUsCiAgICAg
Ly8gc2luY2Ugd2UgYXJlIHdhaXRpbmcgdW50aWwgd2Uga25vdyB0aGF0IHRoaXMgYXV0aGVudGlj
YXRpb24gc3VjY2VlZGVkIGJlZm9yZSBhY3R1YWxseSBzdG9yaW5nLgpAQCAtODcwLDcgKzgxMyw3
IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRHZXRIZWFkZXJzKCkKICAgICB9CiB9CiAKLXZv
aWQgTmV0d29ya0RhdGFUYXNrOjp3cm90ZUJvZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2UqIHNv
dXBNZXNzYWdlLCBTb3VwQnVmZmVyKiBidWZmZXIsIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3Zv
aWQgTmV0d29ya0RhdGFUYXNrU291cDo6d3JvdGVCb2R5RGF0YUNhbGxiYWNrKFNvdXBNZXNzYWdl
KiBzb3VwTWVzc2FnZSwgU291cEJ1ZmZlciogYnVmZmVyLCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0
YXNrKQogewogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFz
ay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewogICAg
ICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKQEAgLTg4MCwxNCArODIzLDE0IEBAIHZvaWQgTmV0
d29ya0RhdGFUYXNrOjp3cm90ZUJvZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNz
YWdlLCBTb3VwQnVmZmVyCiAgICAgdGFzay0+ZGlkV3JpdGVCb2R5RGF0YShidWZmZXItPmxlbmd0
aCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRXcml0ZUJvZHlEYXRhKHVpbnQ2NF90
IGJ5dGVzU2VudCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkV3JpdGVCb2R5RGF0YSh1
aW50NjRfdCBieXRlc1NlbnQpCiB7Ci0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKICAgICBtX2JvZHlEYXRhVG90YWxCeXRlc1NlbnQgKz0gYnl0ZXNTZW50Owog
ICAgIG1fY2xpZW50LT5kaWRTZW5kRGF0YShtX2JvZHlEYXRhVG90YWxCeXRlc1NlbnQsIG1fc291
cE1lc3NhZ2UtPnJlcXVlc3RfYm9keS0+bGVuZ3RoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRh
c2s6OmRvd25sb2FkKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZG93bmxvYWQoKQogewog
ICAgIEFTU0VSVChpc0Rvd25sb2FkKCkpOwogICAgIEFTU0VSVChtX3BlbmRpbmdEb3dubG9hZExv
Y2F0aW9uKTsKQEAgLTkzMSw5ICs4NzQsOSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZG93bmxv
YWQoKQogICAgIHJlYWQoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OndyaXRlRG93bmxv
YWRDYWxsYmFjayhHT3V0cHV0U3RyZWFtKiBvdXRwdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVz
dWx0LCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6Ondy
aXRlRG93bmxvYWRDYWxsYmFjayhHT3V0cHV0U3RyZWFtKiBvdXRwdXRTdHJlYW0sIEdBc3luY1Jl
c3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewotICAgIFJlZlB0cjxO
ZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBSZWZQ
dHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOwog
ICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUo
KSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5pc0Rvd25sb2FkKCkpIHsKICAgICAgICAg
dGFzay0+Y2xlYXJSZXF1ZXN0KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTk1NSw5ICs4OTgsOSBA
QCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6d3JpdGVEb3dubG9hZENhbGxiYWNrKEdPdXRwdXRTdHJl
YW0qIG91dHB1dFN0cmVhbSwgR0FzeW5jUgogICAgICAgICB0YXNrLT5kaWRXcml0ZURvd25sb2Fk
KGJ5dGVzV3JpdHRlbik7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjp3cml0ZURvd25sb2Fk
KCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6d3JpdGVEb3dubG9hZCgpCiB7Ci0gICAgUmVm
UHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8TmV0
d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICNpZiBHTElCX0NIRUNLX1ZF
UlNJT04oMiwgNDQsIDApCiAgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FsbF9hc3luYyhtX2Rv
d25sb2FkT3V0cHV0U3RyZWFtLmdldCgpLCBtX3JlYWRCdWZmZXIuZGF0YSgpLCBtX3JlYWRCdWZm
ZXIuc2l6ZSgpLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCiAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4od3JpdGVEb3dubG9hZENh
bGxiYWNrKSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOwpAQCAtOTY2LDcgKzkwOSw3IEBAIHZv
aWQgTmV0d29ya0RhdGFUYXNrOjp3cml0ZURvd25sb2FkKCkKICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPih3cml0ZURvd25sb2FkQ2FsbGJhY2spLCBwcm90ZWN0
ZWRUaGlzLmxlYWtSZWYoKSkpOwogICAgIGdfdGFza19zZXRfdGFza19kYXRhKHdyaXRlVGFzay5n
ZXQoKSwgdGhpcywgbnVsbHB0cik7CiAgICAgZ190YXNrX3J1bl9pbl90aHJlYWQod3JpdGVUYXNr
LmdldCgpLCBbXShHVGFzayogd3JpdGVUYXNrLCBncG9pbnRlciBzb3VyY2UsIGdwb2ludGVyIHVz
ZXJEYXRhLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlKSB7Ci0gICAgICAgIGF1dG8qIHRhc2sg
PSBzdGF0aWNfY2FzdDxOZXR3b3JrRGF0YVRhc2sqPih1c2VyRGF0YSk7CisgICAgICAgIGF1dG8q
IHRhc2sgPSBzdGF0aWNfY2FzdDxOZXR3b3JrRGF0YVRhc2tTb3VwKj4odXNlckRhdGEpOwogICAg
ICAgICBHT3V0cHV0U3RyZWFtKiBvdXRwdXRTdHJlYW0gPSBHX09VVFBVVF9TVFJFQU0oc291cmNl
KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFzay0+bV9kb3dubG9hZE91dHB1dFN0cmVhbS5n
ZXQoKSA9PSBvdXRwdXRTdHJlYW0pOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YXNrLT5tX2Nh
bmNlbGxhYmxlLmdldCgpID09IGNhbmNlbGxhYmxlKTsKQEAgLTk4NSw3ICs5MjgsNyBAQCB2b2lk
IE5ldHdvcmtEYXRhVGFzazo6d3JpdGVEb3dubG9hZCgpCiAjZW5kaWYKIH0KIAotdm9pZCBOZXR3
b3JrRGF0YVRhc2s6OmRpZFdyaXRlRG93bmxvYWQoZ3NpemUgYnl0ZXNXcml0dGVuKQordm9pZCBO
ZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRXcml0ZURvd25sb2FkKGdzaXplIGJ5dGVzV3JpdHRlbikK
IHsKICAgICBBU1NFUlQoYnl0ZXNXcml0dGVuID09IG1fcmVhZEJ1ZmZlci5zaXplKCkpOwogICAg
IGF1dG8qIGRvd25sb2FkID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFu
YWdlcigpLmRvd25sb2FkKG1fcGVuZGluZ0Rvd25sb2FkSUQpOwpAQCAtOTk0LDcgKzkzNyw3IEBA
IHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRXcml0ZURvd25sb2FkKGdzaXplIGJ5dGVzV3JpdHRl
bikKICAgICByZWFkKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hEb3du
bG9hZCgpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZEZpbmlzaERvd25sb2FkKCkKIHsK
ICAgICBBU1NFUlQoIW1fcmVzcG9uc2UuaXNOdWxsKCkpOwogICAgIEFTU0VSVChtX2Rvd25sb2Fk
T3V0cHV0U3RyZWFtKTsKQEAgLTEwMjEsNyArOTY0LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6
OmRpZEZpbmlzaERvd25sb2FkKCkKICAgICBkb3dubG9hZC0+ZGlkRmluaXNoKCk7CiB9CiAKLXZv
aWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGYWlsRG93bmxvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYg
ZXJyb3IpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZEZhaWxEb3dubG9hZChjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBjbGVhclJlcXVlc3QoKTsKICAgICBjbGVhbkRv
d25sb2FkRmlsZXMoKTsKQEAgLTEwMzQsNyArOTc3LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6
OmRpZEZhaWxEb3dubG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICB9CiB9CiAK
LXZvaWQgTmV0d29ya0RhdGFUYXNrOjpjbGVhbkRvd25sb2FkRmlsZXMoKQordm9pZCBOZXR3b3Jr
RGF0YVRhc2tTb3VwOjpjbGVhbkRvd25sb2FkRmlsZXMoKQogewogICAgIGlmIChtX2Rvd25sb2Fk
RGVzdGluYXRpb25GaWxlKSB7CiAgICAgICAgIGdfZmlsZV9kZWxldGUobV9kb3dubG9hZERlc3Rp
bmF0aW9uRmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CkBAIC0xMDQ2LDcgKzk4OSw3IEBA
IHZvaWQgTmV0d29ya0RhdGFUYXNrOjpjbGVhbkRvd25sb2FkRmlsZXMoKQogICAgIH0KIH0KIAot
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Ip
Cit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYg
ZXJyb3IpCiB7CiAgICAgaWYgKGlzRG93bmxvYWQoKSkgewogICAgICAgICBkaWRGYWlsRG93bmxv
YWQocGxhdGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihlcnJvci5lcnJvckNvZGUoKSwgZXJyb3Iu
ZmFpbGluZ1VSTCgpLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpKSk7CkBAIC0xMDU5LDcg
KzEwMDIsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcikKIH0KIAogI2lmIEVOQUJMRShXRUJfVElNSU5HKQotdm9pZCBOZXR3b3JrRGF0
YVRhc2s6Om5ldHdvcmtFdmVudENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgR1Nv
Y2tldENsaWVudEV2ZW50IGV2ZW50LCBHSU9TdHJlYW0qLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2sp
Cit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6Om5ldHdvcmtFdmVudENhbGxiYWNrKFNvdXBNZXNz
YWdlKiBzb3VwTWVzc2FnZSwgR1NvY2tldENsaWVudEV2ZW50IGV2ZW50LCBHSU9TdHJlYW0qLCBO
ZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0
YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0
YXNrLT5tX2NsaWVudCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA2OCw3ICsxMDExLDcgQEAgdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6Om5ldHdvcmtFdmVudENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3Vw
TWVzc2FnZSwgR1NvY2tldENsaWUKICAgICB0YXNrLT5uZXR3b3JrRXZlbnQoZXZlbnQpOwogfQog
Ci12b2lkIE5ldHdvcmtEYXRhVGFzazo6bmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCBl
dmVudCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6bmV0d29ya0V2ZW50KEdTb2NrZXRDbGll
bnRFdmVudCBldmVudCkKIHsKICAgICBkb3VibGUgZGVsdGFUaW1lID0gbW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lTVMoKSAtIG1fc3RhcnRUaW1lOwogICAgIGF1dG8mIGxvYWRUaW1pbmcgPSBt
X3Jlc3BvbnNlLm5ldHdvcmtMb2FkVGltaW5nKCk7CkBAIC0xMTA1LDcgKzEwNDgsNyBAQCB2b2lk
IE5ldHdvcmtEYXRhVGFzazo6bmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCBldmVudCkK
IH0KIAogI2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA0OSwgOTEpCi12b2lkIE5ldHdvcmtEYXRh
VGFzazo6c3RhcnRpbmdDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtE
YXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c3RhcnRpbmdDYWxsYmFj
ayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCiB7
CiAgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0
ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KQogICAgICAgICByZXR1
cm47CkBAIC0xMTE0LDkgKzEwNTcsOSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6c3RhcnRpbmdD
YWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFzawogICAgIHRh
c2stPmRpZFN0YXJ0UmVxdWVzdCgpOwogfQogI2Vsc2UKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpy
ZXF1ZXN0U3RhcnRlZENhbGxiYWNrKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSog
c291cE1lc3NhZ2UsIFNvdXBTb2NrZXQqLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5l
dHdvcmtEYXRhVGFza1NvdXA6OnJlcXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Npb24qIHNl
c3Npb24sIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cFNvY2tldCosIE5ldHdvcmtEYXRh
VGFza1NvdXAqIHRhc2spCiB7Ci0gICAgQVNTRVJUKHNlc3Npb24gPT0gdGFzay0+bV9zZXNzaW9u
LT5zb3VwU2Vzc2lvbigpKTsKKyAgICBBU1NFUlQoc2Vzc2lvbiA9PSB0YXNrLT5kb3duY2FzdDxO
ZXR3b3JrU2Vzc2lvblNvdXA+KG1fc2Vzc2lvbi5nZXQoKSkuc291cFNlc3Npb24oKSk7CiAgICAg
aWYgKHNvdXBNZXNzYWdlICE9IHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCkpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMTEyNywxMiArMTA3MCwxMiBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVx
dWVzdFN0YXJ0ZWRDYWxsYmFjayhTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3NhZ2UqCiB9
CiAjZW5kaWYKIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFN0YXJ0UmVxdWVzdCgpCit2b2lk
IE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFN0YXJ0UmVxdWVzdCgpCiB7CiAgICAgbV9yZXNwb25z
ZS5uZXR3b3JrTG9hZFRpbWluZygpLnJlcXVlc3RTdGFydCA9IG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZU1TKCkgLSBtX3N0YXJ0VGltZTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJl
c3RhcnRlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYXNr
KiB0YXNrKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZXN0YXJ0ZWRDYWxsYmFjayhTb3Vw
TWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCiB7CiAgICAg
Ly8gQ2FsbGVkIGVhY2ggdGltZSB0aGUgbWVzc2FnZSBpcyBnb2luZyB0byBiZSBzZW50IGFnYWlu
IGV4Y2VwdCB0aGUgZmlyc3QgdGltZS4KICAgICAvLyBUaGlzIGhhcHBlbnMgd2hlbiBsaWJzb3Vw
IGhhbmRsZXMgSFRUUCBhdXRoZW50aWNhdGlvbi4KQEAgLTExNDMsNyArMTA4Niw3IEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrOjpyZXN0YXJ0ZWRDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3Nh
Z2UsIE5ldHdvcmtEYXRhVGFzCiAgICAgdGFzay0+ZGlkUmVzdGFydCgpOwogfQogCi12b2lkIE5l
dHdvcmtEYXRhVGFzazo6ZGlkUmVzdGFydCgpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRp
ZFJlc3RhcnQoKQogewogICAgIG1fc3RhcnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lTVMoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya0RhdGFUYXNrU291cC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYzhmYTFhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Qcm90
ZWN0aW9uU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNp
bmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtEYXRhVGFza1NvdXAgZmluYWwgOiBw
dWJsaWMgTmV0d29ya0RhdGFUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtE
YXRhVGFzaz4gY3JlYXRlKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tD
bGllbnQmIGNsaWVudCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBX
ZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29u
dGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRDbGVhclJl
ZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgTmV0d29ya0RhdGFUYXNrU291cChzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIHN0
b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QpKTsKKyAgICB9CisKKyAgICB+TmV0d29ya0RhdGFUYXNrU291
cCgpOworCisgICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CisKK3ByaXZhdGU6CisgICAg
TmV0d29ya0RhdGFUYXNrU291cChOZXR3b3JrU2Vzc2lvbiYsIE5ldHdvcmtEYXRhVGFza0NsaWVu
dCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRl
bnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3ksIGJvb2wgc2hvdWxkQ2xlYXJS
ZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CisKKyAgICB2b2lkIHN1c3BlbmQoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGNhbmNlbCgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVzdW1lKCkgb3Zl
cnJpZGU7CisgICAgTmV0d29ya0RhdGFUYXNrOjpTdGF0ZSBzdGF0ZSgpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgdm9pZCBzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmLCBj
b25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIC8qYWxsb3dPdmVyd3JpdGUqLykg
b3ZlcnJpZGU7CisgICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHRpbWVvdXRGaXJlZCgpOworICAgIHZvaWQgc3RhcnRUaW1lb3V0KCk7Cisg
ICAgdm9pZCBzdG9wVGltZW91dCgpOworCisgICAgdm9pZCBjcmVhdGVSZXF1ZXN0KGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgY2xlYXJSZXF1ZXN0KCk7CisgICAg
c3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhTb3VwUmVxdWVzdCosIEdBc3luY1Jlc3Vs
dCosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKKyAgICB2b2lkIGRpZFNlbmRSZXF1ZXN0KEdSZWZQ
dHI8R0lucHV0U3RyZWFtPiYmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSgpOworCisg
ICAgc3RhdGljIHZvaWQgdGxzRXJyb3JzQ2hhbmdlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiwgR1Bh
cmFtU3BlYyosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKKyAgICB2b2lkIHRsc0Vycm9yc0NoYW5n
ZWQoKTsKKworICAgIHZvaWQgYXBwbHlBdXRoZW50aWNhdGlvblRvUmVxdWVzdChXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGVDYWxsYmFjayhT
b3VwU2Vzc2lvbiosIFNvdXBNZXNzYWdlKiwgU291cEF1dGgqLCBnYm9vbGVhbiByZXRyeWluZywg
TmV0d29ya0RhdGFUYXNrU291cCopOworICAgIHZvaWQgYXV0aGVudGljYXRlKFdlYkNvcmU6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYpOworICAgIHZvaWQgY29udGludWVBdXRoZW50aWNhdGUo
V2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJik7CisKKyAgICBzdGF0aWMgdm9pZCBz
a2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbkNhbGxiYWNrKEdJbnB1dFN0cmVhbSosIEdBc3lu
Y1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKKyAgICB2b2lkIHNraXBJbnB1dFN0cmVh
bUZvclJlZGlyZWN0aW9uKCk7CisgICAgdm9pZCBkaWRGaW5pc2hTa2lwSW5wdXRTdHJlYW1Gb3JS
ZWRpcmVjdGlvbigpOworICAgIGJvb2wgc2hvdWxkU3RhcnRIVFRQUmVkaXJlY3Rpb24oKTsKKyAg
ICB2b2lkIGNvbnRpbnVlSFRUUFJlZGlyZWN0aW9uKCk7CisKKyAgICBzdGF0aWMgdm9pZCByZWFk
Q2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrU291
cCopOworICAgIHZvaWQgcmVhZCgpOworICAgIHZvaWQgZGlkUmVhZChnc3NpemUgYnl0ZXNSZWFk
KTsKKyAgICB2b2lkIGRpZEZpbmlzaFJlYWQoKTsKKworICAgIHN0YXRpYyB2b2lkIHJlcXVlc3RO
ZXh0UGFydENhbGxiYWNrKFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbSosIEdBc3luY1Jlc3VsdCos
IE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKKyAgICB2b2lkIHJlcXVlc3ROZXh0UGFydCgpOworICAg
IHZvaWQgZGlkUmVxdWVzdE5leHRQYXJ0KEdSZWZQdHI8R0lucHV0U3RyZWFtPiYmKTsKKyAgICB2
b2lkIGRpZEZpbmlzaFJlcXVlc3ROZXh0UGFydCgpOworCisgICAgc3RhdGljIHZvaWQgZ290SGVh
ZGVyc0NhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrU291cCopOworICAgIHZv
aWQgZGlkR2V0SGVhZGVycygpOworCisgICAgc3RhdGljIHZvaWQgd3JvdGVCb2R5RGF0YUNhbGxi
YWNrKFNvdXBNZXNzYWdlKiwgU291cEJ1ZmZlciosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKKyAg
ICB2b2lkIGRpZFdyaXRlQm9keURhdGEodWludDY0X3QgYnl0ZXNTZW50KTsKKworICAgIHZvaWQg
ZG93bmxvYWQoKTsKKyAgICBzdGF0aWMgdm9pZCB3cml0ZURvd25sb2FkQ2FsbGJhY2soR091dHB1
dFN0cmVhbSosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKKyAgICB2b2lk
IHdyaXRlRG93bmxvYWQoKTsKKyAgICB2b2lkIGRpZFdyaXRlRG93bmxvYWQoZ3NpemUgYnl0ZXNX
cml0dGVuKTsKKyAgICB2b2lkIGRpZEZhaWxEb3dubG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yJik7CisgICAgdm9pZCBkaWRGaW5pc2hEb3dubG9hZCgpOworICAgIHZvaWQgY2xlYW5E
b3dubG9hZEZpbGVzKCk7CisKKyAgICB2b2lkIGRpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciYpOworCisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgc3RhdGljIHZvaWQgbmV0
d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqLCBHU29ja2V0Q2xpZW50RXZlbnQsIEdJT1N0
cmVhbSosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKKyAgICB2b2lkIG5ldHdvcmtFdmVudChHU29j
a2V0Q2xpZW50RXZlbnQpOworI2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA0OSwgOTEpCisgICAg
c3RhdGljIHZvaWQgc3RhcnRpbmdDYWxsYmFjayhTb3VwTWVzc2FnZSosIE5ldHdvcmtEYXRhVGFz
a1NvdXAqKTsKKyNlbHNlCisgICAgc3RhdGljIHZvaWQgcmVxdWVzdFN0YXJ0ZWRDYWxsYmFjayhT
b3VwU2Vzc2lvbiosIFNvdXBNZXNzYWdlKiwgU291cFNvY2tldCosIE5ldHdvcmtEYXRhVGFza1Nv
dXAqKTsKKyNlbmRpZgorICAgIHZvaWQgZGlkU3RhcnRSZXF1ZXN0KCk7CisgICAgc3RhdGljIHZv
aWQgcmVzdGFydGVkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7
CisgICAgdm9pZCBkaWRSZXN0YXJ0KCk7CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCisK
KyAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlN1c3BlbmRlZCB9OworICAgIFdlYkNvcmU6OkNv
bnRlbnRTbmlmZmluZ1BvbGljeSBtX3Nob3VsZENvbnRlbnRTbmlmZjsKKyAgICBHUmVmUHRyPFNv
dXBSZXF1ZXN0PiBtX3NvdXBSZXF1ZXN0OworICAgIEdSZWZQdHI8U291cE1lc3NhZ2U+IG1fc291
cE1lc3NhZ2U7CisgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07CisgICAg
R1JlZlB0cjxTb3VwTXVsdGlwYXJ0SW5wdXRTdHJlYW0+IG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW07
CisgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7CisgICAgR1JlZlB0cjxH
QXN5bmNSZXN1bHQ+IG1fcGVuZGluZ1Jlc3VsdDsKKyAgICBXZWJDb3JlOjpQcm90ZWN0aW9uU3Bh
Y2UgbV9wcm90ZWN0aW9uU3BhY2VGb3JQZXJzaXN0ZW50U3RvcmFnZTsKKyAgICBXZWJDb3JlOjpD
cmVkZW50aWFsIG1fY3JlZGVudGlhbEZvclBlcnNpc3RlbnRTdG9yYWdlOworICAgIFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKyAgICBWZWN0b3I8Y2hhcj4gbV9yZWFkQnVm
ZmVyOworICAgIHVuc2lnbmVkIG1fcmVkaXJlY3RDb3VudCB7IDAgfTsKKyAgICB1aW50NjRfdCBt
X2JvZHlEYXRhVG90YWxCeXRlc1NlbnQgeyAwIH07CisgICAgR1JlZlB0cjxHRmlsZT4gbV9kb3du
bG9hZERlc3RpbmF0aW9uRmlsZTsKKyAgICBHUmVmUHRyPEdGaWxlPiBtX2Rvd25sb2FkSW50ZXJt
ZWRpYXRlRmlsZTsKKyAgICBHUmVmUHRyPEdPdXRwdXRTdHJlYW0+IG1fZG93bmxvYWRPdXRwdXRT
dHJlYW07CisgICAgYm9vbCBtX2FsbG93T3ZlcndyaXRlRG93bmxvYWQgeyBmYWxzZSB9OworI2lm
IEVOQUJMRShXRUJfVElNSU5HKQorICAgIGRvdWJsZSBtX3N0YXJ0VGltZSB7IDAgfTsKKyNlbmRp
ZgorICAgIFJ1bkxvb3A6OlRpbWVyPE5ldHdvcmtEYXRhVGFza1NvdXA+IG1fdGltZW91dFNvdXJj
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCmluZGV4IDM0
YzJjNzcuLmFjODI4NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAKQEAgLTI0LDggKzI0LDkgQEAKICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNp
bmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFz
a1NvdXAuaCIKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvU291cE5ldHdvcmtTZXNzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KQEAgLTM0LDQ3ICszNSwyNCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLVJlZjxOZXR3b3JrU2Vzc2lvbj4gTmV0d29ya1Nlc3Npb246
OmNyZWF0ZShUeXBlIHR5cGUsIFNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFu
YWdlciopCitOZXR3b3JrU2Vzc2lvblNvdXA6Ok5ldHdvcmtTZXNzaW9uU291cChTZXNzaW9uSUQg
c2Vzc2lvbklEKQorICAgIDogTmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKQogewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IE5ldHdvcmtTZXNzaW9uKHR5cGUsIHNlc3Npb25JRCwgbnVsbHB0cikp
OwogfQogCi1OZXR3b3JrU2Vzc2lvbiYgTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkK
K05ldHdvcmtTZXNzaW9uU291cDo6fk5ldHdvcmtTZXNzaW9uU291cCgpCiB7Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBzdGF0aWMgTmV0d29ya1Nlc3Npb24qIHNlc3Npb24gPSAm
TmV0d29ya1Nlc3Npb246OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6Tm9ybWFsLCBTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgbnVsbHB0cikubGVha1JlZigpOwotICAgIHJldHVy
biAqc2Vzc2lvbjsKIH0KIAotTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbjo6
bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29uc3QKLXsKLSAgICBhdXRvKiBzdG9yYWdlU2Vzc2lv
biA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24obV9zZXNzaW9uSUQpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKHN0b3JhZ2VTZXNzaW9uKTsKLSAgICByZXR1cm4gKnN0b3JhZ2VT
ZXNzaW9uOwotfQotCi1OZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24oVHlwZSB0eXBlLCBT
ZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIqKQotICAgIDogbV9zZXNz
aW9uSUQoc2Vzc2lvbklEKQotewotfQotCi1OZXR3b3JrU2Vzc2lvbjo6fk5ldHdvcmtTZXNzaW9u
KCkKLXsKLX0KLQotU291cFNlc3Npb24qIE5ldHdvcmtTZXNzaW9uOjpzb3VwU2Vzc2lvbigpIGNv
bnN0CitTb3VwU2Vzc2lvbiogTmV0d29ya1Nlc3Npb25Tb3VwOjpzb3VwU2Vzc2lvbigpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLnNvdXBOZXR3b3JrU2Vzc2lv
bigpLnNvdXBTZXNzaW9uKCk7CiB9CiAKLXZvaWQgTmV0d29ya1Nlc3Npb246OmludmFsaWRhdGVB
bmRDYW5jZWwoKQordm9pZCBOZXR3b3JrU2Vzc2lvblNvdXA6OmludmFsaWRhdGVBbmRDYW5jZWwo
KQogewogICAgIGZvciAoYXV0byogdGFzayA6IG1fZGF0YVRhc2tTZXQpCiAgICAgICAgIHRhc2st
PmludmFsaWRhdGVBbmRDYW5jZWwoKTsKIH0KIAotdm9pZCBOZXR3b3JrU2Vzc2lvbjo6Y2xlYXJD
cmVkZW50aWFscygpCi17Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuaCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc1ZmI4OAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25T
b3VwLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9u
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNz
aW9uIFNvdXBTZXNzaW9uOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0Rh
dGFUYXNrU291cDsKKworY2xhc3MgTmV0d29ya1Nlc3Npb25Tb3VwIGZpbmFsIDogcHVibGljIE5l
dHdvcmtTZXNzaW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtTZXNzaW9uPiBj
cmVhdGUoV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IE5ldHdvcmtTZXNzaW9uU291cChzZXNzaW9uSUQpKTsKKyAgICB9Cisg
ICAgfk5ldHdvcmtTZXNzaW9uU291cCgpOworCisgICAgU291cFNlc3Npb24qIHNvdXBTZXNzaW9u
KCkgY29uc3Q7CisKKyAgICB2b2lkIHJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtEYXRh
VGFza1NvdXAmIHRhc2spIHsgbV9kYXRhVGFza1NldC5hZGQoJnRhc2spOyB9CisgICAgdm9pZCB1
bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtEYXRhVGFza1NvdXAmIHRhc2spIHsgbV9k
YXRhVGFza1NldC5yZW1vdmUoJnRhc2spOyB9CisKK3ByaXZhdGU6CisgICAgTmV0d29ya1Nlc3Np
b25Tb3VwKFdlYkNvcmU6OlNlc3Npb25JRCk7CisKKyAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5j
ZWwoKSBvdmVycmlkZTsKKworICAgIEhhc2hTZXQ8TmV0d29ya0RhdGFUYXNrU291cCo+IG1fZGF0
YVRhc2tTZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3Vw
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2lu
Z0NvbnRleHRTb3VwLmNwcAppbmRleCA4ZmI2NGZhLi4yZGJhMTA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0U291
cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3
b3JraW5nQ29udGV4dFNvdXAuY3BwCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgUmVtb3RlTmV0d29y
a2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Np
b25JRCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjplbnN1
cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25JRCwgU3RyaW5nOjpudW1iZXIoc2Vzc2lv
bklELnNlc3Npb25JRCgpKSk7Ci0gICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vzc2lv
bklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpFcGhlbWVy
YWwsIHNlc3Npb25JRCwgbnVsbHB0cikpOworICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9u
KHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShzZXNzaW9uSUQpKTsKIH0KIAogTmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6c3RvcmFnZVNlc3Np
b24oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2Ug
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBiYWJmMmE3Li43ZDlhMDM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMjQ5LDYgKzI0OSw3IEBAIGxpc3QoQVBQ
RU5EIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVDJfRElSfS9OZXR3
b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQ
cm9jZXNzL2VmbCIKKyAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3Mvc291cCIKICAg
ICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvdW5peCIKICAgICAiJHtXRUJLSVQyX0RJ
Un0vUGxhdGZvcm0vZWZsIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvQVBJL2MvZWZsIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA2ZmJkYTIyLi43NTk1OWEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUdUSy5jbWFrZQpAQCAtODQ1LDYgKzg0NSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJf
SU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9D
dXN0b21Qcm90b2NvbHMvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL3NvdXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL2d0ayIK
KyAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3Mvc291cCIKICAgICAiJHtXRUJLSVQy
X0RJUn0vTmV0d29ya1Byb2Nlc3MvdW5peCIKICAgICAiJHtXRUJLSVQyX0RJUn0vUGxhdGZvcm0v
SVBDL2dsaWIiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9BUEkvYy9ndGsiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTdl
YTY3My4uMzRiMWRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTA1NSwxMyArMTA1NSwxNyBAQAogCQk1QzE0MjcxMzFDMjNG
ODlFMDBENDExODMgLyogRG93bmxvYWRDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQyNzA5MUMyM0Y4NjkwMEQ0MTE4MyAvKiBEb3dubG9h
ZENvY29hLm1tICovOyB9OwogCQk1QzE0MjcxODFDMjNGOEI3MDBENDExODMgLyogQ3VzdG9tUHJv
dG9jb2xNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1QzE0MjcxNDFDMjNGOEIwMDBENDExODMgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmgg
Ki87IH07CiAJCTVDMTQyNzFEMUMyM0Y4Q0YwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFn
ZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDMTQyNzFCMUMyM0Y4Q0MwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5t
bSAqLzsgfTsKKwkJNUMyMENCQTAxQkIxRUNEODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29j
b2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMjBD
QjlFMUJCMEREMTgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggKi87IH07CiAJCTVD
MjBDQjlEMUJCMERDRkEwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMyMENCOUIxQkIwRENEMjAw
ODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EubW0gKi87IH07CiAJCTVDMjBDQkEwMUJCMUVD
RDgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUMyMENCOUUxQkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtT
ZXNzaW9uLmggKi87IH07CisJCTVDMjBDQjlEMUJCMERDRkEwMDg5NUJCMSAvKiBOZXR3b3JrU2Vz
c2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
QzIwQ0I5QjFCQjBEQ0QyMDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb24uY3BwICovOyB9OwogCQk1
QzI5OERBMDFDM0RGMDIxMDA0NzBBRkUgLyogUGVuZGluZ0Rvd25sb2FkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzI5OEQ5RTFDM0RFRjI5MDA0NzBB
RkUgLyogUGVuZGluZ0Rvd25sb2FkLmggKi87IH07CiAJCTVDNzcwNjc0MUQxMTM4MzgwMDEyNzAw
RiAvKiBXZWJTb2NrZXRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1Qzc3MDY3MzFEMTExRDhCMDAxMjcwMEYgLyogV2ViU29ja2V0UHJv
dmlkZXIuY3BwICovOyB9OwogCQk1Qzc5NDM5QjFENzYyRDYyMDAzMTAyRDQgLyogV2ViS2l0Mklu
aXRpYWxpemVDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVDNzk0MzlBMUQ3NjJDREYwMDMxMDJENCAvKiBXZWJLaXQySW5pdGlhbGl6ZUNvY29h
Lm1tICovOyB9OwogCQk1Qzg1Qzc4ODFDM0YyM0NFMDA2MUE0RkEgLyogUGVuZGluZ0Rvd25sb2Fk
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDODVD
Nzg2MUMzRjIzQzUwMDYxQTRGQSAvKiBQZW5kaW5nRG93bmxvYWQuY3BwICovOyB9OworCQk1Q0JD
OUI4RDFDNjUyNzlDMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQkM5Qjg5MUM2NTI0QTUwMEE4
RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oICovOyB9OwogCQk1Q0JDOUI4RDFDNjUyNzlD
MDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0JDOUI4QjFDNjUyNTczMDBBOEZEQ0YgLyogTmV0
d29ya0RhdGFUYXNrQ29jb2EubW0gKi87IH07CisJCTVDQkM5QjhEMUM2NTI3OUMwMEE4RkRDRiAv
KiBOZXR3b3JrRGF0YVRhc2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUNCQzlCOEIxQzY1MjU3MzAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFzay5j
cHAgKi87IH07CiAJCTVDQkM5QjhFMUM2NTJDQTAwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQkM5Qjg5
MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suaCAqLzsgfTsKIAkJNUNFODVCMjAx
Qzg4RTY0QjAwNzBCRkNFIC8qIFBpbmdMb2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0U4NUIxRjFDODhFNjQzMDA3MEJGQ0UgLyogUGluZ0xvYWQu
aCAqLzsgfTsKIAkJNjUwMUJEMUExMkYxMjQzNDAwRTlGMjQ4IC8qIFdLQnVuZGxlSW5zcGVjdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjg2
RjE3MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5jcHAgKi87IH07CkBAIC0z
MTM3LDE0ICszMTQxLDE4IEBACiAJCTVDMTQyNzE0MUMyM0Y4QjAwMEQ0MTE4MyAvKiBDdXN0b21Q
cm90b2NvbE1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMv
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVD
MTQyNzE1MUMyM0Y4QjAwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXIubWVzc2FnZXMu
aW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLm1lc3NhZ2Vz
LmluOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29s
TWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMxNDI3
MUIxQzIzRjhDQzAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29sTWFuYWdlckNvY29hLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gQ3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
Q29jb2EubW07IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ29jb2EvQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVDMjBDQjlFMUJCMEREMTgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtTZXNzaW9uQ29jb2EuaDsgcGF0aCA9
IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUMyMENCOUIxQkIwRENEMjAwODk1QkIxIC8qIE5ldHdvcmtTZXNz
aW9uQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBOZXR3
b3JrU2Vzc2lvbkNvY29hLm1tOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nl
c3Npb25Db2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMyMENCOUUxQkIw
REQxODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IE5ldHdvcmtTZXNzaW9uLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
U2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzIwQ0I5QjFCQjBEQ0Qy
MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gTmV0d29ya1Nlc3Npb24uY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Nlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzI5OEQ5
RTFDM0RFRjI5MDA0NzBBRkUgLyogUGVuZGluZ0Rvd25sb2FkLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFBlbmRpbmdEb3dubG9hZC5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
RG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1Qzc3MDY3MzFEMTExRDhCMDAxMjcwMEYgLyogV2ViU29ja2V0UHJvdmlkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViU29ja2V0UHJvdmlkZXIuY3BwOyBw
YXRoID0gTmV0d29yay9XZWJTb2NrZXRQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTVDNzk0MzlBMUQ3NjJDREYwMDMxMDJENCAvKiBXZWJLaXQySW5pdGlhbGl6ZUNv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViS2l0Mklu
aXRpYWxpemVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM3Qzg4REMx
RDBGNDFBMDAwOUQyRjZEIC8qIFdlYlNvY2tldFByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFdlYlNvY2tldFByb3ZpZGVyLmg7IHBhdGggPSBOZXR3b3JrL1dlYlNv
Y2tldFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDODVDNzg2MUMz
RjIzQzUwMDYxQTRGQSAvKiBQZW5kaW5nRG93bmxvYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gUGVuZGluZ0Rvd25sb2FkLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxvYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1Q0JDOUI4QjFDNjUyNTczMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFzay5j
cHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1Q0JDOUI4OTFDNjUyNEE1MDBBOEZEQ0YgLyogTmV0d29ya0Rh
dGFUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFz
ay5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTVDQkM5Qjg5MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3b3JrRGF0
YVRhc2tDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrRGF0
YVRhc2tDb2NvYS5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNr
Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNCQzlCOEIxQzY1MjU3MzAw
QThGRENGIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBuYW1lID0gTmV0d29ya0RhdGFUYXNrQ29jb2EubW07IHBhdGggPSBOZXR3b3Jr
UHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUNFODVCMUYxQzg4RTY0MzAwNzBCRkNFIC8qIFBpbmdMb2FkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBpbmdMb2FkLmg7IHBhdGggPSBOZXR3b3JrUHJv
Y2Vzcy9QaW5nTG9hZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDQ0MkE1NTE2
RDU4NTY3MDBBQzMzMzEgLyogUGx1Z2luU2VydmljZS5lbnRpdGxlbWVudHMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9IFBs
dWdpblNlcnZpY2UuZW50aXRsZW1lbnRzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NTQ1NCw2ICs1NDYyLDcgQEAKIAkJCQk1QzE0MjZFNTFDMjNGODA1MDBENDExODMgLyogTmV0d29y
a1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwICovLAogCQkJCTVDMTQyNkU2MUMyM0Y4MDUwMEQ0
MTE4MyAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oICovLAogCQkJCTVDMjBDQjlF
MUJCMEREMTgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5oICovLAorCQkJCTVDMjBDQjlFMUJC
MEREMTgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgKi8sCiAJCQkJNUNFODVCMUYxQzg4
RTY0MzAwNzBCRkNFIC8qIFBpbmdMb2FkLmggKi8sCiAJCQkJRTFCNzg0NzAxNjNGMjQ2OTAwMDdC
NjkyIC8qIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmggKi8sCiAJCQkpOwpAQCAtNTg0NSw4ICs1
ODU0LDEwIEBACiAJCTdFQzRGMEY4MThFNEE5MjIwMDgwNTZBRiAvKiBjb2NvYSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNUNCQzlCOEIxQzY1MjU3MzAw
QThGRENGIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggKi8sCiAJCQkJNUNCQzlCOEIxQzY1MjU3
MzAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLm1tICovLAogCQkJCTdFQzRGMEY5MThF
NEE5NDUwMDgwNTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tICovLAorCQkJCTVDMjBDQjlC
MUJCMERDRDIwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggKi8sCiAJCQkJNUMyMENC
OUIxQkIwRENEMjAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EubW0gKi8sCiAJCQkpOwog
CQkJbmFtZSA9IGNvY29hOwpAQCAtNzcyOCw2ICs3NzM5LDcgQEAKIAkJCQk1MTNBMTY0RDE2MzBB
OUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxREQ5RjI5MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0JDOUI4RTFDNjUyQ0Ew
MDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0JDOUI4
RTFDNjUyQ0EwMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EuaCBpbiBIZWFkZXJzICov
LAogCQkJCTgzOTkwMjAzMUJFOUEwMkIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODNENDU0RDcxQkU5RDNDNDAwNkM5M0JEIC8qIE5ldHdvcmtMb2FkQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzkxNDk2NTFCRUE4Mzg1MDBEMkQ5NTMgLyogTmV0d29y
a0xvYWRQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTc3NDMsNiArNzc1NSw3IEBACiAJ
CQkJRTE1MjU1MUIxNzAxMTgxOTAwM0Q3QURCIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlck1lc3Nh
Z2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzE0MjZGMDFDMjNGODA5MDBENDExODMgLyogTmV0
d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMjBDQkEw
MUJCMUVDRDgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NUMyMENCQTAxQkIxRUNEODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxQTJFQzU2MTQ4OTlDMDkwMDgxMEQ3MSAvKiBOb3RpZmljYXRpb25QZXJt
aXNzaW9uUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEzMTI2MUYxNDhGRjgyQzAwQkEy
QTM5IC8qIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzFBMkVDNTIxNDg5OTgxOTAwODEwRDcxIC8qIE5vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLywKQEAgLTkyMDQsNiArOTIxNyw3
IEBACiAJCQkJODMxMDQyOEMxQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtDYWNoZVN1YnJlc291
cmNlc0VudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxM0ExNjRDMTYzMEE5QkYwMDVEN0Qy
MiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MUREOUYyODE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNCQzlCOEQxQzY1Mjc5
QzAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0JD
OUI4RDFDNjUyNzlDMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gaW4gU291cmNl
cyAqLywKIAkJCQk4Mzk5MDIwMjFCRTlBMDJCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODM2RUVCODAxQkU5RUM5RTAwNkI0QjgyIC8qIE5ldHdvcmtMb2Fk
TWFjLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dC5tbQppbmRleCAxY2MxNWM2Li41OWM2MDljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
bWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0KQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBX
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNl
c3Npb25JRCBzZXNzaW9uSUQKIAogICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZW5zdXJlUHJp
dmF0ZUJyb3dzaW5nU2Vzc2lvbihzZXNzaW9uSUQsIGJhc2UgKyAnLicgKyBTdHJpbmc6Om51bWJl
cihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAg
IGF1dG8gbmV0d29ya1Nlc3Npb24gPSBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKE5ldHdvcmtTZXNz
aW9uOjpUeXBlOjpFcGhlbWVyYWwsIHNlc3Npb25JRCwgbnVsbHB0cik7CisgICAgYXV0byBuZXR3
b3JrU2Vzc2lvbiA9IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoc2Vzc2lvbklEKTsKICAgICBTZXNz
aW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIFdURk1vdmUobmV0d29ya1Nlc3Npb24p
KTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0Nv
bnRleHQuY3BwCmluZGV4IDJmOTg3MWMuLmU2YjU2NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3Nv
dXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBX
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNl
c3Npb25JRCBzZXNzaW9uSUQKICAgICAgICAgcmV0dXJuOwogCiAgICAgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25JRCwgU3RyaW5nOjpu
dW1iZXIoc2Vzc2lvbklELnNlc3Npb25JRCgpKSk7Ci0gICAgU2Vzc2lvblRyYWNrZXI6OnNldFNl
c3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9uOjpU
eXBlOjpFcGhlbWVyYWwsIHNlc3Npb25JRCwgbnVsbHB0cikpOworICAgIFNlc3Npb25UcmFja2Vy
OjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShzZXNzaW9uSUQp
KTsKIH0KIAogdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVBY2NlcHRQ
b2xpY3lGb3JBbGxDb250ZXh0cyhIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292340</attachid>
            <date>2016-10-21 03:59:04 -0700</date>
            <delta_ts>2016-10-21 04:07:51 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>wk2-network-session-subclass.diff</filename>
            <type>text/plain</type>
            <size>109247</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggMWFjMTA2Yy4uNmJkYTNiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTE4MiwxMCArMTgyLDEyIEBAIGVuZGlmICgpCiAKIHNldChOZXR3b3JrUHJvY2Vz
c19DT01NT05fU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKICAg
ICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3Jt
U3RyYXRlZ2llcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
Y3BwCisgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCiAKICAgICBOZXR3b3Jr
UHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZGE0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCkBAIC0wLDAgKzEsMTE0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtE
YXRhVGFzay5oIgorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKworI2luY2x1ZGUgIk5ldHdv
cmtTZXNzaW9uLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworI2lmIFBMQVRGT1JN
KENPQ09BKQorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCisjZW5kaWYKKyNpZiBV
U0UoU09VUCkKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2tTb3VwLmgiCisjZW5kaWYKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWY8TmV0d29y
a0RhdGFUYXNrPiBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lv
biwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENvbnRlbnRTbmlm
ZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9u
SFRUUFNUb0hUVFBSZWRpcmVjdCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZXR1cm4g
TmV0d29ya0RhdGFUYXNrQ29jb2E6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIHN0
b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QpOworI2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAgcmV0dXJu
IE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIHN0
b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QpOworI2VuZGlmCit9CisKK05ldHdvcmtEYXRhVGFzazo6TmV0
d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGll
bnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxz
LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgYm9vbCBzaG91bGRDbGVhclJl
ZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQorICAgIDogbV9mYWlsdXJlVGltZXIoKnRoaXMs
ICZOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKQorICAgICwgbV9zZXNzaW9uKHNl
c3Npb24pCisgICAgLCBtX2NsaWVudCgmY2xpZW50KQorICAgICwgbV9zdG9yZWRDcmVkZW50aWFs
cyhzdG9yZWRDcmVkZW50aWFscykKKyAgICAsIG1fbGFzdEhUVFBNZXRob2QocmVxdWVzdFdpdGhD
cmVkZW50aWFscy5odHRwTWV0aG9kKCkpCisgICAgLCBtX2ZpcnN0UmVxdWVzdChyZXF1ZXN0V2l0
aENyZWRlbnRpYWxzKQorICAgICwgbV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJl
ZGlyZWN0KHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghcmVxdWVzdFdpdGhDcmVkZW50aWFs
cy51cmwoKS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxG
YWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcG9ydEFsbG93ZWQo
cmVxdWVzdFdpdGhDcmVkZW50aWFscy51cmwoKSkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJl
KEJsb2NrZWRGYWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworTmV0d29ya0Rh
dGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVCghbV9jbGllbnQpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2No
ZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlIHR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUgIT0gTm9G
YWlsdXJlKTsKKyAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gdHlwZTsKKyAgICBtX2ZhaWx1
cmVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpmYWls
dXJlVGltZXJGaXJlZCgpCit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKworICAgIHN3aXRjaCAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSkgeworICAg
IGNhc2UgQmxvY2tlZEZhaWx1cmU6CisgICAgICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBO
b0ZhaWx1cmU7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50LT53
YXNCbG9ja2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludmFsaWRVUkxGYWlsdXJl
OgorICAgICAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJlOworICAgICAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgICAgICBtX2NsaWVudC0+Y2Fubm90U2hvd1VSTCgpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBOb0ZhaWx1cmU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VT
U0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtE
YXRhVGFzay5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmgKaW5kZXggYjYyNzU4Yi4uNGRjMTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKQEAgLTM2LDI1ICszNiwxMSBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgog
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKENPQ09BKQotT0JK
Q19DTEFTUyBOU1VSTFNlc3Npb25EYXRhVGFzazsKLSNlbmRpZgotCi0jaWYgVVNFKFNPVVApCi0j
aW5jbHVkZSA8V2ViQ29yZS9Qcm90ZWN0aW9uU3BhY2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlUmVzcG9uc2UuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0
Zi9nbGliL0dSZWZQdHIuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLWNsYXNzIENyZWRlbnRpYWw7CiBjbGFzcyBSZXNvdXJj
ZUVycm9yOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIH0KQEAgLTg2LDE2ICs3MiwxNCBAQCBwdWJsaWM6CiB9Owog
CiBjbGFzcyBOZXR3b3JrRGF0YVRhc2sgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrRGF0YVRh
c2s+IHsKLSAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nlc3Npb247CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxOZXR3b3JrRGF0YVRhc2s+IGNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwg
TmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlh
bHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJv
b2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFzayhzZXNzaW9uLCBjbGllbnQs
IHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENs
ZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBzdXNwZW5kKCk7Ci0gICAgdm9pZCBjYW5jZWwoKTsKLSAgICB2b2lkIHJlc3VtZSgpOworICAg
IHN0YXRpYyBSZWY8TmV0d29ya0RhdGFUYXNrPiBjcmVhdGUoTmV0d29ya1Nlc3Npb24mLCBOZXR3
b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5LCBi
b29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOworCisgICAgdmly
dHVhbCB+TmV0d29ya0RhdGFUYXNrKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXN1
bWUoKSA9IDA7CiAKICAgICBlbnVtIGNsYXNzIFN0YXRlIHsKICAgICAgICAgUnVubmluZywKQEAg
LTEwMywyNiArODcsMTEgQEAgcHVibGljOgogICAgICAgICBDYW5jZWxpbmcsCiAgICAgICAgIENv
bXBsZXRlZAogICAgIH07Ci0gICAgU3RhdGUgc3RhdGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0
YXRlIHN0YXRlKCkgY29uc3QgPSAwOwogCi0gICAgdHlwZWRlZiB1aW50NjRfdCBUYXNrSWRlbnRp
ZmllcjsKLSAgICAKLSAgICB+TmV0d29ya0RhdGFUYXNrKCk7Ci0KLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICB2b2lkIGRpZFNlbmREYXRhKHVpbnQ2NF90IHRvdGFsQnl0ZXNTZW50LCB1aW50NjRf
dCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQpOwotICAgIHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5n
ZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIENoYWxsZW5nZUNvbXBs
ZXRpb25IYW5kbGVyJiYpOwotICAgIHZvaWQgZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYpOwotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmJiwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciYmKTsKLSAg
ICB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYpOwotICAg
IHZvaWQgZGlkQmVjb21lRG93bmxvYWQoKTsKLQotICAgIHZvaWQgd2lsbFBlcmZvcm1IVFRQUmVk
aXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmJiwgUmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlciYmKTsKLSAgICB2b2lkIHRyYW5zZmVy
U2FuZGJveEV4dGVuc2lvblRvRG93bmxvYWQoRG93bmxvYWQmKTsKLSNlbmRpZgogICAgIE5ldHdv
cmtEYXRhVGFza0NsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KICAg
ICB2b2lkIGNsZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IG51bGxwdHI7IH0KLSAgICAKKwogICAg
IERvd25sb2FkSUQgcGVuZGluZ0Rvd25sb2FkSUQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdE
b3dubG9hZElEOyB9CiAgICAgUGVuZGluZ0Rvd25sb2FkKiBwZW5kaW5nRG93bmxvYWQoKSBjb25z
dCB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZDsgfQogICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25s
b2FkSUQoRG93bmxvYWRJRCBkb3dubG9hZElEKQpAQCAtMTM2LDg3ICsxMDUsMzEgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlQoIW1fcGVuZGluZ0Rvd25sb2FkKTsKICAgICAgICAgbV9wZW5kaW5n
RG93bmxvYWQgPSAmcGVuZGluZ0Rvd25sb2FkOwogICAgIH0KLSAgICB2b2lkIHNldFBlbmRpbmdE
b3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSYsIGJvb2wgYWxsb3dPdmVyd3JpdGUpOworCisgICAgdmlydHVhbCB2b2lk
IHNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgLyphbGxvd092ZXJ3cml0ZSovKSB7IG1f
cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBmaWxlbmFtZTsgfQogICAgIGNvbnN0IFN0cmluZyYg
cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9h
ZExvY2F0aW9uOyB9CiAgICAgYm9vbCBpc0Rvd25sb2FkKCkgY29uc3QgeyByZXR1cm4gISFtX3Bl
bmRpbmdEb3dubG9hZElELmRvd25sb2FkSUQoKTsgfQogCiAgICAgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiBmaXJzdFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0UmVxdWVz
dDsgfQotICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpOwotICAgIHZvaWQgc2V0U3VnZ2Vz
dGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBhbGxvd3NTcGVjaWZpY0hUVFBT
Q2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Jik7Ci0gICAgCi1wcml2YXRlOgotICAgIE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYs
IE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xp
Y3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CisgICAg
dmlydHVhbCBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUoKSBjb25zdCB7IHJldHVybiBTdHJpbmco
KTsgfQorICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBzdWdnZXN0
ZWROYW1lKSB7IG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWROYW1lOyB9CisgICAgdmly
dHVhbCBib29sIGFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAg
Ym9vbCB0cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYpOwor
cHJvdGVjdGVkOgorICAgIE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYsIE5ldHdvcmtE
YXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6
OlN0b3JlZENyZWRlbnRpYWxzLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQ
UmVkaXJlY3QpOwogCi0jaWYgVVNFKFNPVVApCi0gICAgdm9pZCB0aW1lb3V0RmlyZWQoKTsKLSAg
ICB2b2lkIHN0YXJ0VGltZW91dCgpOwotICAgIHZvaWQgc3RvcFRpbWVvdXQoKTsKLSAgICB2b2lk
IGludmFsaWRhdGVBbmRDYW5jZWwoKTsKLSAgICB2b2lkIGNyZWF0ZVJlcXVlc3QoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBjbGVhclJlcXVlc3QoKTsKLSAgICBz
dGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiwgR0FzeW5jUmVzdWx0
KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCBkaWRTZW5kUmVxdWVzdChHUmVmUHRyPEdJ
bnB1dFN0cmVhbT4mJik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKLSAgICBzdGF0
aWMgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBHUGFyYW1TcGVj
KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkKCk7Ci0gICAg
dm9pZCBhcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYpOwotICAgIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZUNhbGxiYWNrKFNvdXBTZXNzaW9uKiwg
U291cE1lc3NhZ2UqLCBTb3VwQXV0aCosIGdib29sZWFuIHJldHJ5aW5nLCBOZXR3b3JrRGF0YVRh
c2sqKTsKLSAgICB2b2lkIGF1dGhlbnRpY2F0ZShXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYmKTsKLSAgICB2b2lkIGNvbnRpbnVlQXV0aGVudGljYXRlKFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiYpOwotICAgIHN0YXRpYyB2b2lkIHNraXBJbnB1dFN0cmVhbUZvclJl
ZGlyZWN0aW9uQ2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0Rh
dGFUYXNrKik7Ci0gICAgdm9pZCBza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOwotICAg
IHZvaWQgZGlkRmluaXNoU2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKLSAgICBib29s
IHNob3VsZFN0YXJ0SFRUUFJlZGlyZWN0aW9uKCk7Ci0gICAgdm9pZCBjb250aW51ZUhUVFBSZWRp
cmVjdGlvbigpOwotICAgIHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBH
QXN5bmNSZXN1bHQqLCBOZXR3b3JrRGF0YVRhc2sqKTsKLSAgICB2b2lkIHJlYWQoKTsKLSAgICB2
b2lkIGRpZFJlYWQoZ3NzaXplIGJ5dGVzUmVhZCk7Ci0gICAgdm9pZCBkaWRGaW5pc2hSZWFkKCk7
Ci0gICAgc3RhdGljIHZvaWQgcmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2soU291cE11bHRpcGFydElu
cHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCBy
ZXF1ZXN0TmV4dFBhcnQoKTsKLSAgICB2b2lkIGRpZFJlcXVlc3ROZXh0UGFydChHUmVmUHRyPEdJ
bnB1dFN0cmVhbT4mJik7Ci0gICAgdm9pZCBkaWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQoKTsKLSAg
ICBzdGF0aWMgdm9pZCBnb3RIZWFkZXJzQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0
YVRhc2sqKTsKLSAgICB2b2lkIGRpZEdldEhlYWRlcnMoKTsKLSAgICBzdGF0aWMgdm9pZCB3cm90
ZUJvZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBTb3VwQnVmZmVyKiwgTmV0d29ya0RhdGFU
YXNrKik7Ci0gICAgdm9pZCBkaWRXcml0ZUJvZHlEYXRhKHVpbnQ2NF90IGJ5dGVzU2VudCk7Ci0g
ICAgdm9pZCBkb3dubG9hZCgpOwotICAgIHN0YXRpYyB2b2lkIHdyaXRlRG93bmxvYWRDYWxsYmFj
ayhHT3V0cHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAg
dm9pZCB3cml0ZURvd25sb2FkKCk7Ci0gICAgdm9pZCBkaWRXcml0ZURvd25sb2FkKGdzaXplIGJ5
dGVzV3JpdHRlbik7Ci0gICAgdm9pZCBkaWRGYWlsRG93bmxvYWQoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciYpOwotICAgIHZvaWQgZGlkRmluaXNoRG93bmxvYWQoKTsKLSAgICB2b2lkIGNs
ZWFuRG93bmxvYWRGaWxlcygpOwotICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yJik7Ci0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgc3RhdGljIHZvaWQgbmV0
d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqLCBHU29ja2V0Q2xpZW50RXZlbnQsIEdJT1N0
cmVhbSosIE5ldHdvcmtEYXRhVGFzayopOwotICAgIHZvaWQgbmV0d29ya0V2ZW50KEdTb2NrZXRD
bGllbnRFdmVudCk7Ci0jaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKLSAgICBzdGF0
aWMgdm9pZCBzdGFydGluZ0NhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrKik7
Ci0jZWxzZQotICAgIHN0YXRpYyB2b2lkIHJlcXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Np
b24qLCBTb3VwTWVzc2FnZSosIFNvdXBTb2NrZXQqLCBOZXR3b3JrRGF0YVRhc2sqKTsKLSNlbmRp
ZgotICAgIHZvaWQgZGlkU3RhcnRSZXF1ZXN0KCk7Ci0gICAgc3RhdGljIHZvaWQgcmVzdGFydGVk
Q2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2sqKTsKLSAgICB2b2lkIGRpZFJl
c3RhcnQoKTsKLSNlbmRpZgotI2VuZGlmCi0gICAgCiAgICAgZW51bSBGYWlsdXJlVHlwZSB7CiAg
ICAgICAgIE5vRmFpbHVyZSwKICAgICAgICAgQmxvY2tlZEZhaWx1cmUsCiAgICAgICAgIEludmFs
aWRVUkxGYWlsdXJlCiAgICAgfTsKLSAgICBGYWlsdXJlVHlwZSBtX3NjaGVkdWxlZEZhaWx1cmVU
eXBlIHsgTm9GYWlsdXJlIH07Ci0gICAgV2ViQ29yZTo6VGltZXIgbV9mYWlsdXJlVGltZXI7CiAg
ICAgdm9pZCBmYWlsdXJlVGltZXJGaXJlZCgpOwogICAgIHZvaWQgc2NoZWR1bGVGYWlsdXJlKEZh
aWx1cmVUeXBlKTsKLSAgICAKLSAgICBSZWZQdHI8TmV0d29ya1Nlc3Npb24+IG1fc2Vzc2lvbjsK
LSAgICBOZXR3b3JrRGF0YVRhc2tDbGllbnQqIG1fY2xpZW50OworCisgICAgRmFpbHVyZVR5cGUg
bV9zY2hlZHVsZWRGYWlsdXJlVHlwZSB7IE5vRmFpbHVyZSB9OworICAgIFdlYkNvcmU6OlRpbWVy
IG1fZmFpbHVyZVRpbWVyOworICAgIFJlZjxOZXR3b3JrU2Vzc2lvbj4gbV9zZXNzaW9uOworICAg
IE5ldHdvcmtEYXRhVGFza0NsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07CiAgICAgUGVuZGlu
Z0Rvd25sb2FkKiBtX3BlbmRpbmdEb3dubG9hZCB7IG51bGxwdHIgfTsKICAgICBEb3dubG9hZElE
IG1fcGVuZGluZ0Rvd25sb2FkSUQ7CiAgICAgU3RyaW5nIG1fdXNlcjsKQEAgLTIyNCw0NiArMTM3
LDE0IEBAIHByaXZhdGU6CiAjaWYgVVNFKENSRURFTlRJQUxfU1RPUkFHRV9XSVRIX05FVFdPUktf
U0VTU0lPTikKICAgICBXZWJDb3JlOjpDcmVkZW50aWFsIG1faW5pdGlhbENyZWRlbnRpYWw7CiAj
ZW5kaWYKLSAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBtX3N0b3JlZENyZWRlbnRpYWxz
OworICAgIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIG1fc3RvcmVkQ3JlZGVudGlhbHMgeyBX
ZWJDb3JlOjpEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgfTsKICAgICBTdHJpbmcgbV9sYXN0
SFRUUE1ldGhvZDsKICAgICBTdHJpbmcgbV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbjsKICAgICBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9maXJzdFJlcXVlc3Q7Ci0gICAgYm9vbCBtX3Nob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Q7Ci0gICAgUmVmUHRyPFNhbmRib3hF
eHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBS
ZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+IG1fdGFzazsKLSNlbmRpZgotI2lmIFVTRShT
T1VQKQotICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07Ci0gICAgV2ViQ29y
ZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IG1fc2hvdWxkQ29udGVudFNuaWZmOwotICAgIEdSZWZQ
dHI8U291cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7Ci0gICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4g
bV9zb3VwTWVzc2FnZTsKLSAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsK
LSAgICBHUmVmUHRyPFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbT4gbV9tdWx0aXBhcnRJbnB1dFN0
cmVhbTsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKLSAgICBHUmVm
UHRyPEdBc3luY1Jlc3VsdD4gbV9wZW5kaW5nUmVzdWx0OwotICAgIFdlYkNvcmU6OlByb3RlY3Rp
b25TcGFjZSBtX3Byb3RlY3Rpb25TcGFjZUZvclBlcnNpc3RlbnRTdG9yYWdlOwotICAgIFdlYkNv
cmU6OkNyZWRlbnRpYWwgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2U7Ci0gICAgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgIFZlY3RvcjxjaGFyPiBtX3Jl
YWRCdWZmZXI7Ci0gICAgdW5zaWduZWQgbV9yZWRpcmVjdENvdW50IHsgMCB9OwotICAgIHVpbnQ2
NF90IG1fYm9keURhdGFUb3RhbEJ5dGVzU2VudCB7IDAgfTsKLSAgICBHUmVmUHRyPEdGaWxlPiBt
X2Rvd25sb2FkRGVzdGluYXRpb25GaWxlOwotICAgIEdSZWZQdHI8R0ZpbGU+IG1fZG93bmxvYWRJ
bnRlcm1lZGlhdGVGaWxlOwotICAgIEdSZWZQdHI8R091dHB1dFN0cmVhbT4gbV9kb3dubG9hZE91
dHB1dFN0cmVhbTsKLSAgICBib29sIG1fYWxsb3dPdmVyd3JpdGVEb3dubG9hZCB7IGZhbHNlIH07
Ci0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgZG91YmxlIG1fc3RhcnRUaW1lIHsgMCB9Owot
I2VuZGlmCi0gICAgUnVuTG9vcDo6VGltZXI8TmV0d29ya0RhdGFUYXNrPiBtX3RpbWVvdXRTb3Vy
Y2U7Ci0jZW5kaWYKKyAgICBib29sIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBS
ZWRpcmVjdCB7IHRydWUgfTsKICAgICBTdHJpbmcgbV9zdWdnZXN0ZWRGaWxlbmFtZTsKIH07CiAK
LSNpZiBQTEFURk9STShDT0NPQSkKLVdlYkNvcmU6OkNyZWRlbnRpYWwgc2VydmVyVHJ1c3RDcmVk
ZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0jZW5kaWYK
LSAgICAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gVVNFKE5FVFdPUktf
U0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNw
cAppbmRleCA4ZmQ0YWNkLi45NzkyOTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0xvYWQuY3BwCkBAIC0zOSw2ICszOSwxMCBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAorI2lmIFBM
QVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgKaW5kZXggM2IxYTA1Zi4uNGU0
NmU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xv
YWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCkBA
IC0zNCw3ICszNCw3IEBACiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogI2luY2x1ZGUgIkRv
d25sb2FkSUQuaCIKLSNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIk5ldHdv
cmtEYXRhVGFzay5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uu
aD4KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAKaW5kZXggOGU5N2YwNy4uMjBiNTZjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtNzQsNiArNzQsMTAgQEAK
ICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
Q09DT0EpCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Db2NvYS5oIgorI2VuZGlmCisKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwMiw3ICsxMDYs
NyBAQCBOZXR3b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MoKQogICAgIGFkZFN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlcj4oKTsKICAgICBhZGRTdXBwbGVtZW50PEN1c3RvbVByb3RvY29sTWFu
YWdlcj4oKTsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKSAmJiBQTEFURk9STShDT0NPQSkKLSAg
ICBOZXR3b3JrU2Vzc2lvbjo6c2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKHN1cHBsZW1lbnQ8Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyPigpKTsKKyAgICBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRDdXN0
b21Qcm90b2NvbE1hbmFnZXIoc3VwcGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCkpOwog
I2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtT
ZXNzaW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjgxODE5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nl
c3Npb24uY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKworI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCisKKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgorI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJO
ZXR3b3JrU2Vzc2lvbkNvY29hLmgiCisjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyNpbmNsdWRlICJO
ZXR3b3JrU2Vzc2lvblNvdXAuaCIKKyNlbmRpZgorCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVmPE5ldHdvcmtTZXNzaW9uPiBOZXR3b3JrU2Vz
c2lvbjo6Y3JlYXRlKFNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciog
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHJldHVy
biBOZXR3b3JrU2Vzc2lvbkNvY29hOjpjcmVhdGUoc2Vzc2lvbklELCBjdXN0b21Qcm90b2NvbE1h
bmFnZXIpOworI2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAgVU5VU0VEX1BBUkFNKGN1c3RvbVBy
b3RvY29sTWFuYWdlcik7CisgICAgcmV0dXJuIE5ldHdvcmtTZXNzaW9uU291cDo6Y3JlYXRlKHNl
c3Npb25JRCk7CisjZW5kaWYKK30KKworTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpk
ZWZhdWx0U2Vzc2lvbigpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJuIE5ldHdv
cmtTZXNzaW9uQ29jb2E6OmRlZmF1bHRTZXNzaW9uKCk7CisjZWxzZQorICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uID0gJk5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpLmxlYWtSZWYo
KTsKKyAgICByZXR1cm4gKnNlc3Npb247CisjZW5kaWYKK30KKworTmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29uc3QKK3sKKyAg
ICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNl
c3Npb24obV9zZXNzaW9uSUQpOworICAgIFJFTEVBU0VfQVNTRVJUKHN0b3JhZ2VTZXNzaW9uKTsK
KyAgICByZXR1cm4gKnN0b3JhZ2VTZXNzaW9uOworfQorCitOZXR3b3JrU2Vzc2lvbjo6TmV0d29y
a1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKKyAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25J
RCkKK3sKK30KKworTmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbigpCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCmluZGV4IGIw
ODgyZjIuLmZlZmQ3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Nlc3Npb24uaApAQCAtMjcsMjQgKzI3LDEwIEBACiAKICNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi1PQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbjsKLU9C
SkNfQ0xBU1MgTlNPcGVyYXRpb25RdWV1ZTsKLU9CSkNfQ0xBU1MgV0tOZXR3b3JrU2Vzc2lvbkRl
bGVnYXRlOwotI2VuZGlmCi0KLSNpbmNsdWRlICJEb3dubG9hZElELmgiCi0jaW5jbHVkZSAiTmV0
d29ya0RhdGFUYXNrLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKLSNpZiBVU0UoU09VUCkKLXR5
cGVkZWYgc3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb247CiB9CkBAIC01NCw2MyAr
NDAsMjEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXI7
CiAKIGNsYXNzIE5ldHdvcmtTZXNzaW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya1Nlc3Np
b24+IHsKLSAgICBmcmllbmQgY2xhc3MgTmV0d29ya0RhdGFUYXNrOwogcHVibGljOgotICAgIGVu
dW0gY2xhc3MgVHlwZSB7Ci0gICAgICAgIE5vcm1hbCwKLSAgICAgICAgRXBoZW1lcmFsCi0gICAg
fTsKLQotICAgIHN0YXRpYyBSZWY8TmV0d29ya1Nlc3Npb24+IGNyZWF0ZShUeXBlLCBXZWJDb3Jl
OjpTZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopOworICAgIHN0YXRpYyBSZWY8TmV0
d29ya1Nlc3Npb24+IGNyZWF0ZShXZWJDb3JlOjpTZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFu
YWdlciogPSBudWxscHRyKTsKICAgICBzdGF0aWMgTmV0d29ya1Nlc3Npb24mIGRlZmF1bHRTZXNz
aW9uKCk7Ci0gICAgfk5ldHdvcmtTZXNzaW9uKCk7CisgICAgdmlydHVhbCB+TmV0d29ya1Nlc3Np
b24oKTsKIAotICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpOworICAgIHZpcnR1YWwgdm9p
ZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBjbGVhckNyZWRl
bnRpYWxzKCkgeyB9OwogCiAgICAgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9Ci0KLSNpZiBVU0UoU09VUCkKLSAgICBTb3VwU2Vzc2lv
biogc291cFNlc3Npb24oKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBOZXR3b3JrU2Vzc2lvbiBoYXMgYmVlbiBj
cmVhdGVkLgotICAgIHN0YXRpYyB2b2lkIHNldEN1c3RvbVByb3RvY29sTWFuYWdlcihDdXN0b21Q
cm90b2NvbE1hbmFnZXIqKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvbkF1
ZGl0VG9rZW5EYXRhKFJldGFpblB0cjxDRkRhdGFSZWY+JiYpOwotICAgIHN0YXRpYyB2b2lkIHNl
dFNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKLSAgICBz
dGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJik7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHN0YXRpYyB2b2lkIHNldENURGF0YUNv
bm5lY3Rpb25TZXJ2aWNlVHlwZShjb25zdCBTdHJpbmcmKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAg
ICB2b2lkIGNsZWFyQ3JlZGVudGlhbHMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBOZXR3
b3JrRGF0YVRhc2sqIGRhdGFUYXNrRm9ySWRlbnRpZmllcihOZXR3b3JrRGF0YVRhc2s6OlRhc2tJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyk7Ci0KLSAgICB2b2lkIGFkZERv
d25sb2FkSUQoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgRG93bmxvYWRJRCk7Ci0g
ICAgRG93bmxvYWRJRCBkb3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIp
OwotICAgIERvd25sb2FkSUQgdGFrZURvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRl
bnRpZmllcik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBOZXR3b3JrU2Vzc2lvbihUeXBlLCBX
ZWJDb3JlOjpTZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopOwogICAgIFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAK
LSAgICBXZWJDb3JlOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7Citwcm90ZWN0ZWQ6CisgICAgTmV0
d29ya1Nlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklEKTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFU
YXNrKj4gbV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFsczsKLSAgICBIYXNoTWFwPE5ldHdvcmtE
YXRhVGFzazo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFzayo+IG1fZGF0YVRhc2tNYXBX
aXRob3V0Q3JlZGVudGlhbHM7Ci0gICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVu
dGlmaWVyLCBEb3dubG9hZElEPiBtX2Rvd25sb2FkTWFwOwotCi0gICAgUmV0YWluUHRyPE5TVVJM
U2Vzc2lvbj4gbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlOwotICAgIFJldGFpblB0cjxX
S05ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURl
bGVnYXRlOwotICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbldpdGhvdXRDcmVk
ZW50aWFsU3RvcmFnZTsKLSAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBt
X3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZTsKLSNlbGlmIFVTRShTT1VQ
KQotICAgIEhhc2hTZXQ8TmV0d29ya0RhdGFUYXNrKj4gbV9kYXRhVGFza1NldDsKLSNlbmRpZgor
ICAgIFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAKaW5kZXggZmM1NTUx
My4uNGFlYmYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtMb2FkLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24u
aCIKICNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjYwN2Q3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29j
b2EuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoTkVUV09SS19TRVNTSU9OKQorCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbkRhdGFUYXNr
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsKKwor
Y2xhc3MgTmV0d29ya0RhdGFUYXNrQ29jb2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya0RhdGFUYXNr
IHsKKyAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPE5ldHdvcmtEYXRhVGFzaz4gY3JlYXRlKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9u
LCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50
aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwg
Ym9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0RhdGFUYXNrQ29jb2Eoc2Vzc2lvbiwg
Y2xpZW50LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgc2hvdWxkQ29udGVudFNuaWZmLCBz
aG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KSk7CisgICAgfQorCisgICAg
fk5ldHdvcmtEYXRhVGFza0NvY29hKCk7CisKKyAgICB0eXBlZGVmIHVpbnQ2NF90IFRhc2tJZGVu
dGlmaWVyOworCisgICAgdm9pZCBkaWRTZW5kRGF0YSh1aW50NjRfdCB0b3RhbEJ5dGVzU2VudCwg
dWludDY0X3QgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVD
aGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDaGFsbGVu
Z2VDb21wbGV0aW9uSGFuZGxlciYmKTsKKyAgICB2b2lkIGRpZENvbXBsZXRlV2l0aEVycm9yKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25z
ZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIm
Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYm
KTsKKyAgICB2b2lkIGRpZEJlY29tZURvd25sb2FkKCk7CisKKyAgICB2b2lkIHdpbGxQZXJmb3Jt
SFRUUFJlZGlyZWN0aW9uKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiYsIFJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXImJik7CisgICAgdm9pZCB0
cmFuc2ZlclNhbmRib3hFeHRlbnNpb25Ub0Rvd25sb2FkKERvd25sb2FkJik7CisKK3ByaXZhdGU6
CisgICAgTmV0d29ya0RhdGFUYXNrQ29jb2EoTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRh
c2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5LCBib29sIHNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOworCisgICAgdm9pZCBzdXNwZW5k
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc3Vt
ZSgpIG92ZXJyaWRlOworICAgIE5ldHdvcmtEYXRhVGFzazo6U3RhdGUgc3RhdGUoKSBjb25zdCBv
dmVycmlkZTsKKworICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3Ry
aW5nJiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCAvKmFsbG93T3Zlcndy
aXRlKi8pIG92ZXJyaWRlOworICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgYm9vbCBhbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0
KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgb3ZlcnJpZGU7CisgICAg
Ym9vbCB0cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYpOwor
CisgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKKyAgICBS
ZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+IG1fdGFzazsKK307CisKK1dlYkNvcmU6OkNy
ZWRlbnRpYWwgc2VydmVyVHJ1c3RDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNF
KE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0KaW5kZXggNjJjYjBkNy4uMGQ4
OWVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0
d29ya0RhdGFUYXNrQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0KQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAj
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW1wb3J0ICJO
ZXR3b3JrRGF0YVRhc2tDb2NvYS5oIgogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKIApAQCAt
MzMsNiArMzMsNyBAQAogI2ltcG9ydCAiRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgiCiAjaW1wb3J0
ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJOZXR3b3JrUHJvY2Vzcy5oIgorI2ltcG9ydCAiTmV0d29y
a1Nlc3Npb25Db2NvYS5oIgogI2ltcG9ydCAiU2Vzc2lvblRyYWNrZXIuaCIKICNpbXBvcnQgIldl
YkNvcmVBcmd1bWVudENvZGVycy5oIgogI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oPgpAQCAtNTIsMjcgKzUzLDEyIEBAIHN0YXRpYyB2b2lkIGFwcGx5QmFzaWNBdXRo
b3JpemF0aW9uSGVhZGVyKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uCiB9
CiAjZW5kaWYKIAotTmV0d29ya0RhdGFUYXNrOjpOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Np
b24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIFdlYkNvcmU6OlN0b3Jl
ZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQ
b2xpY3kgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBT
VG9IVFRQUmVkaXJlY3QpCi0gICAgOiBtX2ZhaWx1cmVUaW1lcigqdGhpcywgJk5ldHdvcmtEYXRh
VGFzazo6ZmFpbHVyZVRpbWVyRmlyZWQpCi0gICAgLCBtX3Nlc3Npb24oJnNlc3Npb24pCi0gICAg
LCBtX2NsaWVudCgmY2xpZW50KQotICAgICwgbV9zdG9yZWRDcmVkZW50aWFscyhzdG9yZWRDcmVk
ZW50aWFscykKLSAgICAsIG1fbGFzdEhUVFBNZXRob2QocmVxdWVzdFdpdGhDcmVkZW50aWFscy5o
dHRwTWV0aG9kKCkpCi0gICAgLCBtX2ZpcnN0UmVxdWVzdChyZXF1ZXN0V2l0aENyZWRlbnRpYWxz
KQotICAgICwgbV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KHNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCitOZXR3b3JrRGF0YVRhc2tDb2Nv
YTo6TmV0d29ya0RhdGFUYXNrQ29jb2EoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtE
YXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3RXaXRoQ3JlZGVudGlhbHMsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENy
ZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVudFNu
aWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCisgICAg
OiBOZXR3b3JrRGF0YVRhc2soc2Vzc2lvbiwgY2xpZW50LCByZXF1ZXN0V2l0aENyZWRlbnRpYWxz
LCBzdG9yZWRDcmVkZW50aWFscywgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIAotICAgIGlmICghcmVx
dWVzdFdpdGhDcmVkZW50aWFscy51cmwoKS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgc2NoZWR1bGVG
YWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICBpZiAoIXBvcnRBbGxvd2VkKHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMudXJsKCkpKSB7Ci0g
ICAgICAgIHNjaGVkdWxlRmFpbHVyZShCbG9ja2VkRmFpbHVyZSk7CisgICAgaWYgKG1fc2NoZWR1
bGVkRmFpbHVyZVR5cGUgIT0gTm9GYWlsdXJlKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAorCiAgICAgYXV0byByZXF1ZXN0ID0gcmVxdWVzdFdpdGhDcmVkZW50aWFsczsKICAgICBhdXRv
IHVybCA9IHJlcXVlc3QudXJsKCk7CiAgICAgaWYgKHN0b3JlZENyZWRlbnRpYWxzID09IFdlYkNv
cmU6OkFsbG93U3RvcmVkQ3JlZGVudGlhbHMgJiYgdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHko
KSkgewpAQCAtMTA0LDEzICs5MCwxMyBAQCBOZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFz
ayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JgogICAgIH0K
IAogICAgIGlmIChzdG9yZWRDcmVkZW50aWFscyA9PSBXZWJDb3JlOjpBbGxvd1N0b3JlZENyZWRl
bnRpYWxzKSB7Ci0gICAgICAgIG1fdGFzayA9IFttX3Nlc3Npb24tPm1fc2Vzc2lvbldpdGhDcmVk
ZW50aWFsU3RvcmFnZSBkYXRhVGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07Ci0gICAgICAgIEFT
U0VSVCghbV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLmNvbnRhaW5zKFtt
X3Rhc2sgdGFza0lkZW50aWZpZXJdKSk7Ci0gICAgICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFza01h
cFdpdGhDcmVkZW50aWFscy5hZGQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIHRoaXMpOworICAg
ICAgICBtX3Rhc2sgPSBbZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Db2NvYT4obV9zZXNzaW9uLmdl
dCgpKS5tX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UgZGF0YVRhc2tXaXRoUmVxdWVzdDpu
c1JlcXVlc3RdOworICAgICAgICBBU1NFUlQoIWRvd25jYXN0PE5ldHdvcmtTZXNzaW9uQ29jb2E+
KG1fc2Vzc2lvbi5nZXQoKSkubV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFscy5jb250YWlucyhb
bV90YXNrIHRhc2tJZGVudGlmaWVyXSkpOworICAgICAgICBkb3duY2FzdDxOZXR3b3JrU2Vzc2lv
bkNvY29hPihtX3Nlc3Npb24uZ2V0KCkpLm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMuYWRk
KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlzKTsKICAgICB9IGVsc2UgewotICAgICAgICBt
X3Rhc2sgPSBbbV9zZXNzaW9uLT5tX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UgZGF0
YVRhc2tXaXRoUmVxdWVzdDpuc1JlcXVlc3RdOwotICAgICAgICBBU1NFUlQoIW1fc2Vzc2lvbi0+
bV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFscy5jb250YWlucyhbbV90YXNrIHRhc2tJZGVu
dGlmaWVyXSkpOwotICAgICAgICBtX3Nlc3Npb24tPm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVu
dGlhbHMuYWRkKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlzKTsKKyAgICAgICAgbV90YXNr
ID0gW2Rvd25jYXN0PE5ldHdvcmtTZXNzaW9uQ29jb2E+KG1fc2Vzc2lvbi5nZXQoKSkubV9zZXNz
aW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlIGRhdGFUYXNrV2l0aFJlcXVlc3Q6bnNSZXF1ZXN0
XTsKKyAgICAgICAgQVNTRVJUKCFkb3duY2FzdDxOZXR3b3JrU2Vzc2lvbkNvY29hPihtX3Nlc3Np
b24uZ2V0KCkpLm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHMuY29udGFpbnMoW21fdGFz
ayB0YXNrSWRlbnRpZmllcl0pKTsKKyAgICAgICAgZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Db2Nv
YT4obV9zZXNzaW9uLmdldCgpKS5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmFkZChb
bV90YXNrIHRhc2tJZGVudGlmaWVyXSwgdGhpcyk7CiAgICAgfQogICAgIExPRyhOZXR3b3JrU2Vz
c2lvbiwgIiVsbHUgQ3JlYXRpbmcgTmV0d29ya0RhdGFUYXNrIHdpdGggVVJMICVzIiwgW21fdGFz
ayB0YXNrSWRlbnRpZmllcl0sIG5zUmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmlu
Zyk7CiAKQEAgLTEyMSwyNyArMTA3LDI3IEBAIE5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFU
YXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmCiAjZW5k
aWYKIH0KIAotTmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkKK05ldHdvcmtEYXRh
VGFza0NvY29hOjp+TmV0d29ya0RhdGFUYXNrQ29jb2EoKQogewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgaWYgKG1fdGFzaykgewotICAgICAgICBpZiAobV9zdG9yZWRDcmVkZW50
aWFscyA9PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsczo6QWxsb3dTdG9yZWRDcmVkZW50aWFs
cykgewotICAgICAgICAgICAgQVNTRVJUKG1fc2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhDcmVk
ZW50aWFscy5nZXQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pID09IHRoaXMpOwotICAgICAgICAg
ICAgbV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLnJlbW92ZShbbV90YXNr
IHRhc2tJZGVudGlmaWVyXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQo
bV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmdldChbbV90YXNrIHRh
c2tJZGVudGlmaWVyXSkgPT0gdGhpcyk7Ci0gICAgICAgICAgICBtX3Nlc3Npb24tPm1fZGF0YVRh
c2tNYXBXaXRob3V0Q3JlZGVudGlhbHMucmVtb3ZlKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsK
LSAgICAgICAgfQorICAgIGlmICghbV90YXNrKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9zdG9yZWRDcmVkZW50aWFscyA9PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsczo6QWxsb3dT
dG9yZWRDcmVkZW50aWFscykgeworICAgICAgICBBU1NFUlQoZG93bmNhc3Q8TmV0d29ya1Nlc3Np
b25Db2NvYT4obV9zZXNzaW9uLmdldCgpKS5tX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLmdl
dChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkgPT0gdGhpcyk7CisgICAgICAgIGRvd25jYXN0PE5l
dHdvcmtTZXNzaW9uQ29jb2E+KG1fc2Vzc2lvbi5nZXQoKSkubV9kYXRhVGFza01hcFdpdGhDcmVk
ZW50aWFscy5yZW1vdmUoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChkb3duY2FzdDxOZXR3b3JrU2Vzc2lvbkNvY29hPihtX3Nlc3Npb24uZ2V0
KCkpLm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHMuZ2V0KFttX3Rhc2sgdGFza0lkZW50
aWZpZXJdKSA9PSB0aGlzKTsKKyAgICAgICAgZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Db2NvYT4o
bV9zZXNzaW9uLmdldCgpKS5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLnJlbW92ZShb
bV90YXNrIHRhc2tJZGVudGlmaWVyXSk7CiAgICAgfQogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFz
azo6ZGlkU2VuZERhdGEodWludDY0X3QgdG90YWxCeXRlc1NlbnQsIHVpbnQ2NF90IHRvdGFsQnl0
ZXNFeHBlY3RlZFRvU2VuZCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OmRpZFNlbmREYXRh
KHVpbnQ2NF90IHRvdGFsQnl0ZXNTZW50LCB1aW50NjRfdCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1Nl
bmQpCiB7CiAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICBtX2NsaWVudC0+ZGlkU2VuZERhdGEo
dG90YWxCeXRlc1NlbnQsIHRvdGFsQnl0ZXNFeHBlY3RlZFRvU2VuZCk7CiB9CiAKLXZvaWQgTmV0
d29ya0RhdGFUYXNrOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJiYg
Y29tcGxldGlvbkhhbmRsZXIpCit2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjpkaWRSZWNlaXZl
Q2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVu
Z2UsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgLy8gUHJveHkgYXV0aGVudGljYXRpb24gaXMgaGFuZGxlZCBieSBDRk5ldHdvcmsgaW50ZXJu
YWxseS4gV2UgY2FuIGdldCBoZXJlIGlmIHRoZSB1c2VyIGNhbmNlbHMKICAgICAvLyBDRk5ldHdv
cmsgYXV0aGVudGljYXRpb24gZGlhbG9nLCBhbmQgd2Ugc2hvdWxkbid0IGFzayB0aGUgY2xpZW50
IHRvIGRpc3BsYXkgYW5vdGhlciBvbmUgaW4gdGhhdCBjYXNlLgpAQCAtMTYxLDEzICsxNDcsMTMg
QEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29y
ZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UKICAgICB9CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjpkaWRDb21wbGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBl
cnJvcikKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OmRpZENvbXBsZXRlV2l0aEVycm9yKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQogewogICAgIGlmIChtX2NsaWVudCkK
ICAgICAgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKGVycm9yKTsKIH0KIAotdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiYgcmVzcG9uc2UsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9u
SGFuZGxlcikKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OmRpZFJlY2VpdmVSZXNwb25zZShX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIFJlc3BvbnNlQ29tcGxldGlvbkhh
bmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAobV9jbGllbnQpCiAgICAgICAg
IG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbihXVEZNb3ZlKHJlc3Bv
bnNlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpAQCAtMTc3LDE5ICsxNjMsMTkgQEAg
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiYgcmVzcG9uc2UsIFIKICAgICB9CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNr
OjpkaWRSZWNlaXZlRGF0YShSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIGRhdGEpCit2b2lk
IE5ldHdvcmtEYXRhVGFza0NvY29hOjpkaWRSZWNlaXZlRGF0YShSZWY8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPiYmIGRhdGEpCiB7CiAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICBtX2NsaWVudC0+
ZGlkUmVjZWl2ZURhdGEoV1RGTW92ZShkYXRhKSk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNr
OjpkaWRCZWNvbWVEb3dubG9hZCgpCit2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjpkaWRCZWNv
bWVEb3dubG9hZCgpCiB7CiAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICBtX2NsaWVudC0+ZGlk
QmVjb21lRG93bmxvYWQoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OndpbGxQZXJmb3Jt
SFRUUFJlZGlyZWN0aW9uKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZWRpcmVjdFJlc3Bv
bnNlLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBSZWRpcmVjdENvbXBsZXRp
b25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29h
Ojp3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYg
cmVkaXJlY3RSZXNwb25zZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgUmVk
aXJlY3RDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmIChy
ZWRpcmVjdFJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMzA3IHx8IHJlZGlyZWN0UmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAzMDgpIHsKICAgICAgICAgQVNTRVJUKG1fbGFzdEhUVFBN
ZXRob2QgPT0gcmVxdWVzdC5odHRwTWV0aG9kKCkpOwpAQCAtMjQwLDUxICsyMjYsMjMgQEAgdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmJiByZWQKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKICAg
ICB9CiB9Ci0gICAgCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6c2NoZWR1bGVGYWlsdXJlKEZhaWx1
cmVUeXBlIHR5cGUpCi17Ci0gICAgQVNTRVJUKHR5cGUgIT0gTm9GYWlsdXJlKTsKLSAgICBtX3Nj
aGVkdWxlZEZhaWx1cmVUeXBlID0gdHlwZTsKLSAgICBtX2ZhaWx1cmVUaW1lci5zdGFydE9uZVNo
b3QoMCk7Ci19CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCgpCit2
b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25z
dCBXVEY6OlN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYm9vbCBhbGxvd092ZXJ3cml0ZSkKIHsKLSAgICBSZWZQ
dHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0KHRoaXMpOwotICAgIAotICAgIHN3aXRjaCAobV9z
Y2hlZHVsZWRGYWlsdXJlVHlwZSkgewotICAgIGNhc2UgQmxvY2tlZEZhaWx1cmU6Ci0gICAgICAg
IG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBOb0ZhaWx1cmU7Ci0gICAgICAgIGlmIChtX2NsaWVu
dCkKLSAgICAgICAgICAgIG1fY2xpZW50LT53YXNCbG9ja2VkKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEludmFsaWRVUkxGYWlsdXJlOgotICAgICAgICBtX3NjaGVkdWxlZEZhaWx1cmVU
eXBlID0gTm9GYWlsdXJlOwotICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICBtX2Ns
aWVudC0+Y2Fubm90U2hvd1VSTCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBOb0ZhaWx1
cmU6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19CisgICAgTmV0d29ya0RhdGFUYXNrOjpzZXRQ
ZW5kaW5nRG93bmxvYWRMb2NhdGlvbihmaWxlbmFtZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwg
YWxsb3dPdmVyd3JpdGUpOwogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6c2V0UGVuZGluZ0Rvd25s
b2FkTG9jYXRpb24oY29uc3QgV1RGOjpTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGJvb2wgYWxsb3dPdmVyd3Jp
dGUpCi17CiAgICAgQVNTRVJUKCFtX3NhbmRib3hFeHRlbnNpb24pOwogICAgIG1fc2FuZGJveEV4
dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
KTsKICAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKQogICAgICAgICBtX3NhbmRib3hFeHRlbnNp
b24tPmNvbnN1bWUoKTsKIAotICAgIG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBmaWxlbmFt
ZTsKLSAgICBtX3Rhc2suZ2V0KCkuX3BhdGhUb0Rvd25sb2FkVGFza0ZpbGUgPSBmaWxlbmFtZTsK
KyAgICBtX3Rhc2suZ2V0KCkuX3BhdGhUb0Rvd25sb2FkVGFza0ZpbGUgPSBtX3BlbmRpbmdEb3du
bG9hZExvY2F0aW9uOwogCi0gICAgaWYgKGFsbG93T3ZlcndyaXRlICYmIFdlYkNvcmU6OmZpbGVF
eGlzdHMoZmlsZW5hbWUpKQorICAgIGlmIChhbGxvd092ZXJ3cml0ZSAmJiBXZWJDb3JlOjpmaWxl
RXhpc3RzKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24pKQogICAgICAgICBXZWJDb3JlOjpkZWxl
dGVGaWxlKGZpbGVuYW1lKTsKIH0KIAotYm9vbCBOZXR3b3JrRGF0YVRhc2s6OnRyeVBhc3N3b3Jk
QmFzZWRBdXRoZW50aWNhdGlvbihjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYgY2hhbGxlbmdlLCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYgY29tcGxldGlv
bkhhbmRsZXIpCitib29sIE5ldHdvcmtEYXRhVGFza0NvY29hOjp0cnlQYXNzd29yZEJhc2VkQXV0
aGVudGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxs
ZW5nZSwgY29uc3QgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIGlmICghY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLmlzUGFzc3dvcmRCYXNl
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjksNyArMjg3LDcgQEAgYm9vbCBOZXR3
b3JrRGF0YVRhc2s6OnRyeVBhc3N3b3JkQmFzZWRBdXRoZW50aWNhdGlvbihjb25zdCBXZWJDb3Jl
OjpBdXRoZW50aWNhdGkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjp0cmFuc2ZlclNhbmRib3hFeHRlbnNpb25Ub0Rvd25sb2FkKERvd25sb2FkJiBkb3dubG9h
ZCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OnRyYW5zZmVyU2FuZGJveEV4dGVuc2lvblRv
RG93bmxvYWQoRG93bmxvYWQmIGRvd25sb2FkKQogewogICAgIGRvd25sb2FkLnNldFNhbmRib3hF
eHRlbnNpb24oV1RGTW92ZShtX3NhbmRib3hFeHRlbnNpb24pKTsKIH0KQEAgLTM1Niw3ICszMTQs
NyBAQCBzdGF0aWMgYm9vbCBjZXJ0aWZpY2F0ZXNNYXRjaChTZWNUcnVzdFJlZiB0cnVzdDEsIFNl
Y1RydXN0UmVmIHRydXN0MikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBOZXR3b3JrRGF0
YVRhc2s6OmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ29y
ZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKK2Jvb2wgTmV0d29ya0RhdGFU
YXNrQ29jb2E6OmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKIHsKICAgICBjb25zdCBT
dHJpbmcmIGhvc3QgPSBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkuaG9zdCgpOwogICAgIE5T
QXJyYXkgKmNlcnRpZmljYXRlcyA9IFtOU1VSTFJlcXVlc3QgYWxsb3dzU3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdDpob3N0XTsKQEAgLTM3NCwzOCArMzMyLDMzIEBAIGJvb2wgTmV0d29y
a0RhdGFUYXNrOjphbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdl
YkNvcmU6OkF1dGhlCiAgICAgcmV0dXJuIGNlcnRpZmljYXRlc01hdGNoKHRydXN0LmdldCgpLCBj
aGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpLnByb3RlY3Rpb25TcGFjZS5z
ZXJ2ZXJUcnVzdCk7CiB9CiAKLVN0cmluZyBOZXR3b3JrRGF0YVRhc2s6OnN1Z2dlc3RlZEZpbGVu
YW1lKCkKK1N0cmluZyBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6c3VnZ2VzdGVkRmlsZW5hbWUoKSBj
b25zdAogewogICAgIGlmICghbV9zdWdnZXN0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBtX3N1Z2dlc3RlZEZpbGVuYW1lOwogICAgIHJldHVybiBtX3Rhc2suZ2V0KCkucmVz
cG9uc2Uuc3VnZ2VzdGVkRmlsZW5hbWU7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZXRT
dWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCi17Ci0gICAgbV9z
dWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZE5hbWU7Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjpjYW5jZWwoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6Y2FuY2VsKCkKIHsKICAg
ICBbbV90YXNrIGNhbmNlbF07CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXN1bWUoKQor
dm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6cmVzdW1lKCkKIHsKICAgICBpZiAobV9zY2hlZHVs
ZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpCiAgICAgICAgIG1fZmFpbHVyZVRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKICAgICBbbV90YXNrIHJlc3VtZV07CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjpzdXNwZW5kKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OnN1c3BlbmQoKQogewog
ICAgIGlmIChtX2ZhaWx1cmVUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX2ZhaWx1cmVUaW1l
ci5zdG9wKCk7CiAgICAgW21fdGFzayBzdXNwZW5kXTsKIH0KIAotTmV0d29ya0RhdGFUYXNrOjpT
dGF0ZSBOZXR3b3JrRGF0YVRhc2s6OnN0YXRlKCkgY29uc3QKK05ldHdvcmtEYXRhVGFzazo6U3Rh
dGUgTmV0d29ya0RhdGFUYXNrQ29jb2E6OnN0YXRlKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKFtt
X3Rhc2sgc3RhdGVdKSB7CiAgICAgY2FzZSBOU1VSTFNlc3Npb25UYXNrU3RhdGVSdW5uaW5nOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1By
b2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtQcm9jZXNzQ29jb2EubW0KaW5kZXggMTJjYjQ1MS4uY2ZjMjI2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0Nv
Y29hLm1tCkBAIC0yOSw3ICsyOSw3IEBACiAjaW1wb3J0ICJOZXR3b3JrQ2FjaGUuaCIKICNpbXBv
cnQgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW1wb3J0ICJOZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuaCIKLSNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW1wb3J0ICJO
ZXR3b3JrU2Vzc2lvbkNvY29hLmgiCiAjaW1wb3J0ICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW1w
b3J0ICJTZXNzaW9uVHJhY2tlci5oIgogI2ltcG9ydCA8V2ViQ29yZS9DRk5ldHdvcmtTUEkuaD4K
QEAgLTg1LDExICs4NSwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNlc3Npb25U
cmFja2VyOjpzZXRJZGVudGlmaWVyQmFzZShwYXJhbWV0ZXJzLnVpUHJvY2Vzc0J1bmRsZUlkZW50
aWZpZXIpOwogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBOZXR3b3JrU2Vzc2lvbjo6
c2V0U291cmNlQXBwbGljYXRpb25BdWRpdFRva2VuRGF0YShzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0
RGF0YSgpKTsKLSAgICBOZXR3b3JrU2Vzc2lvbjo6c2V0U291cmNlQXBwbGljYXRpb25CdW5kbGVJ
ZGVudGlmaWVyKHBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsK
LSAgICBOZXR3b3JrU2Vzc2lvbjo6c2V0U291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlm
aWVyKHBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKTsKKyAg
ICBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvbkF1ZGl0VG9rZW5EYXRh
KHNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhKCkpOworICAgIE5ldHdvcmtTZXNzaW9uQ29jb2E6
OnNldFNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihwYXJhbWV0ZXJzLnNvdXJjZUFw
cGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7CisgICAgTmV0d29ya1Nlc3Npb25Db2NvYTo6c2V0
U291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKHBhcmFtZXRlcnMuc291cmNlQXBw
bGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKTsKICNpZiBQTEFURk9STShJT1MpCi0gICAgTmV0
d29ya1Nlc3Npb246OnNldENURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZShwYXJhbWV0ZXJzLmN0
RGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZSk7CisgICAgTmV0d29ya1Nlc3Npb25Db2NvYTo6c2V0
Q1REYXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlKHBhcmFtZXRlcnMuY3REYXRhQ29ubmVjdGlvblNl
cnZpY2VUeXBlKTsKICNlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EuaCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjk2NWQyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oCkBA
IC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShORVRX
T1JLX1NFU1NJT04pCisKK09CSkNfQ0xBU1MgTlNVUkxTZXNzaW9uOworT0JKQ19DTEFTUyBOU09w
ZXJhdGlvblF1ZXVlOworT0JKQ19DTEFTUyBXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGU7CisKKyNp
bmNsdWRlICJEb3dubG9hZElELmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrQ29jb2EuaCIK
KyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrU2Vzc2lvbkNvY29hIGZpbmFsIDog
cHVibGljIE5ldHdvcmtTZXNzaW9uIHsKKyAgICBmcmllbmQgY2xhc3MgTmV0d29ya0RhdGFUYXNr
Q29jb2E7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrU2Vzc2lvbj4gY3JlYXRlKFdl
YkNvcmU6OlNlc3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKik7CisgICAgfk5ldHdvcmtT
ZXNzaW9uQ29jb2EoKTsKKworICAgIC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgTmV0d29y
a1Nlc3Npb24gaGFzIGJlZW4gY3JlYXRlZC4KKyAgICBzdGF0aWMgdm9pZCBzZXRDdXN0b21Qcm90
b2NvbE1hbmFnZXIoQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKik7CisgICAgc3RhdGljIHZvaWQgc2V0
U291cmNlQXBwbGljYXRpb25BdWRpdFRva2VuRGF0YShSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYmKTsK
KyAgICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29u
c3QgU3RyaW5nJik7CisgICAgc3RhdGljIHZvaWQgc2V0U291cmNlQXBwbGljYXRpb25TZWNvbmRh
cnlJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdGF0
aWMgdm9pZCBzZXRDVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUoY29uc3QgU3RyaW5nJik7Cisj
ZW5kaWYKKworICAgIE5ldHdvcmtEYXRhVGFza0NvY29hKiBkYXRhVGFza0ZvcklkZW50aWZpZXIo
TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBXZWJDb3JlOjpTdG9yZWRDcmVk
ZW50aWFscyk7CisKKyAgICB2b2lkIGFkZERvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6
OlRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEKTsKKyAgICBEb3dubG9hZElEIGRvd25sb2FkSUQo
TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyKTsKKyAgICBEb3dubG9hZElEIHRh
a2VEb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllcik7CisKK3By
aXZhdGU6CisgICAgTmV0d29ya1Nlc3Npb25Db2NvYShXZWJDb3JlOjpTZXNzaW9uSUQsIEN1c3Rv
bVByb3RvY29sTWFuYWdlciopOworCisgICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBjbGVhckNyZWRlbnRpYWxzKCkgb3ZlcnJpZGU7CisKKyAgICBIYXNo
TWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNr
Q29jb2EqPiBtX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzOworICAgIEhhc2hNYXA8TmV0d29y
a0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2tDb2NvYSo+IG1f
ZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHM7CisgICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRh
c2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQ+IG1fZG93bmxvYWRNYXA7CisKKyAg
ICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2U7
CisgICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9zZXNzaW9uV2l0aENy
ZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGU7CisgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gbV9z
ZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlOworICAgIFJldGFpblB0cjxXS05ldHdvcmtT
ZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19T
RVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Nlc3Npb25Db2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KaW5kZXggMDFmMmEzOS4uZjEzNDU4MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25D
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
U2Vzc2lvbkNvY29hLm1tCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJOZXR3b3JrU2Vzc2lvbi5oIgorI2ltcG9ydCAiTmV0d29ya1Nlc3Npb25D
b2NvYS5oIgogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKIApAQCAtODIsMTcgKzgyLDE3IEBA
IHN0YXRpYyBOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gdG9OU1VSTFNlc3Np
b25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpCiB9CiAKIEBpbnRlcmZhY2UgV0tOZXR3b3JrU2Vzc2lv
bkRlbGVnYXRlIDogTlNPYmplY3QgPE5TVVJMU2Vzc2lvbkRhdGFEZWxlZ2F0ZT4gewotICAgIFJl
ZlB0cjxXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uPiBfc2Vzc2lvbjsKKyAgICBSZWZQdHI8V2ViS2l0
OjpOZXR3b3JrU2Vzc2lvbkNvY29hPiBfc2Vzc2lvbjsKICAgICBib29sIF93aXRoQ3JlZGVudGlh
bHM7CiB9CiAKLS0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdlYktpdDo6TmV0d29ya1Nl
c3Npb24mKXNlc3Npb24gd2l0aENyZWRlbnRpYWxzOihib29sKXdpdGhDcmVkZW50aWFsczsKKy0g
KGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYSYp
c2Vzc2lvbiB3aXRoQ3JlZGVudGlhbHM6KGJvb2wpd2l0aENyZWRlbnRpYWxzOwogCiBAZW5kCiAK
IEBpbXBsZW1lbnRhdGlvbiBXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUKIAotLSAoaWQpaW5pdFdp
dGhOZXR3b3JrU2Vzc2lvbjooV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbiYpc2Vzc2lvbiB3aXRoQ3Jl
ZGVudGlhbHM6KGJvb2wpd2l0aENyZWRlbnRpYWxzCistIChpZClpbml0V2l0aE5ldHdvcmtTZXNz
aW9uOihXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2EmKXNlc3Npb24gd2l0aENyZWRlbnRpYWxz
Oihib29sKXdpdGhDcmVkZW50aWFscwogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CiAgICAg
aWYgKCFzZWxmKQpAQCAtMjk2LDcgKzI5Niw3IEBAIHN0YXRpYyBOU1VSTFNlc3Npb25BdXRoQ2hh
bGxlbmdlRGlzcG9zaXRpb24gdG9OU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpCiB7
CiAgICAgYXV0byBzdG9yZWRDcmVkZW50aWFscyA9IF93aXRoQ3JlZGVudGlhbHMgPyBXZWJDb3Jl
OjpTdG9yZWRDcmVkZW50aWFsczo6QWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IFdlYkNvcmU6OlN0
b3JlZENyZWRlbnRpYWxzOjpEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CiAgICAgaWYgKGF1
dG8qIG5ldHdvcmtEYXRhVGFzayA9IF9zZXNzaW9uLT5kYXRhVGFza0ZvcklkZW50aWZpZXIoW2Rh
dGFUYXNrIHRhc2tJZGVudGlmaWVyXSwgc3RvcmVkQ3JlZGVudGlhbHMpKSB7Ci0gICAgICAgIFJl
ZjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZE5ldHdvcmtEYXRhVGFzaygqbmV0d29ya0RhdGFU
YXNrKTsKKyAgICAgICAgUmVmPE5ldHdvcmtEYXRhVGFza0NvY29hPiBwcm90ZWN0ZWROZXR3b3Jr
RGF0YVRhc2soKm5ldHdvcmtEYXRhVGFzayk7CiAgICAgICAgIGF1dG8gZG93bmxvYWRJRCA9IG5l
dHdvcmtEYXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsKICAgICAgICAgYXV0byYgZG93bmxv
YWRNYW5hZ2VyID0gV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRN
YW5hZ2VyKCk7CiAgICAgICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYktp
dDo6RG93bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgZG93bmxvYWRJRCwgZG93bmxvYWRUYXNrLCBf
c2Vzc2lvbi0+c2Vzc2lvbklEKCksIG5ldHdvcmtEYXRhVGFzay0+c3VnZ2VzdGVkRmlsZW5hbWUo
KSk7CkBAIC0zMTQsMTQgKzMxNCwxMSBAQCBzdGF0aWMgTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5n
ZURpc3Bvc2l0aW9uIHRvTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aQogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKICAgICAKLXN0YXRpYyBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpj
b25maWd1cmF0aW9uRm9yVHlwZShOZXR3b3JrU2Vzc2lvbjo6VHlwZSB0eXBlKQorc3RhdGljIE5T
VVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb25Gb3JTZXNzaW9uSUQoY29uc3Qg
V2ViQ29yZTo6U2Vzc2lvbklEJiBzZXNzaW9uKQogewotICAgIHN3aXRjaCAodHlwZSkgewotICAg
IGNhc2UgTmV0d29ya1Nlc3Npb246OlR5cGU6Ok5vcm1hbDoKLSAgICAgICAgcmV0dXJuIFtOU1VS
TFNlc3Npb25Db25maWd1cmF0aW9uIGRlZmF1bHRTZXNzaW9uQ29uZmlndXJhdGlvbl07Ci0gICAg
Y2FzZSBOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsOgorICAgIGlmIChzZXNzaW9uLmlz
RXBoZW1lcmFsKCkpCiAgICAgICAgIHJldHVybiBbTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiBl
cGhlbWVyYWxTZXNzaW9uQ29uZmlndXJhdGlvbl07Ci0gICAgfQorICAgIHJldHVybiBbTlNVUkxT
ZXNzaW9uQ29uZmlndXJhdGlvbiBkZWZhdWx0U2Vzc2lvbkNvbmZpZ3VyYXRpb25dOwogfQogCiBz
dGF0aWMgUmVmUHRyPEN1c3RvbVByb3RvY29sTWFuYWdlcj4mIGdsb2JhbEN1c3RvbVByb3RvY29s
TWFuYWdlcigpCkBAIC0zNjAsNTIgKzM1Nyw1MiBAQCBzdGF0aWMgU3RyaW5nJiBnbG9iYWxDVERh
dGFDb25uZWN0aW9uU2VydmljZVR5cGUoKQogc3RhdGljIGJvb2wgc2Vzc2lvbnNDcmVhdGVkID0g
ZmFsc2U7CiAjZW5kaWYKIAotdm9pZCBOZXR3b3JrU2Vzc2lvbjo6c2V0Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyKEN1c3RvbVByb3RvY29sTWFuYWdlciogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKQordm9p
ZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRDdXN0b21Qcm90b2NvbE1hbmFnZXIoQ3VzdG9tUHJv
dG9jb2xNYW5hZ2VyKiBjdXN0b21Qcm90b2NvbE1hbmFnZXIpCiB7CiAgICAgQVNTRVJUKCFzZXNz
aW9uc0NyZWF0ZWQpOwogICAgIGdsb2JhbEN1c3RvbVByb3RvY29sTWFuYWdlcigpID0gY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyOwogfQogICAgIAotdm9pZCBOZXR3b3JrU2Vzc2lvbjo6c2V0U291cmNl
QXBwbGljYXRpb25BdWRpdFRva2VuRGF0YShSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYmIGRhdGEpCit2
b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNldFNvdXJjZUFwcGxpY2F0aW9uQXVkaXRUb2tlbkRh
dGEoUmV0YWluUHRyPENGRGF0YVJlZj4mJiBkYXRhKQogewogICAgIEFTU0VSVCghc2Vzc2lvbnND
cmVhdGVkKTsKICAgICBnbG9iYWxTb3VyY2VBcHBsaWNhdGlvbkF1ZGl0VG9rZW5EYXRhKCkgPSBk
YXRhOwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uOjpzZXRTb3VyY2VBcHBsaWNhdGlvbkJ1bmRs
ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQordm9pZCBOZXR3b3JrU2Vzc2lv
bkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghc2Vzc2lvbnNDcmVhdGVkKTsKICAgICBnbG9i
YWxTb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKSA9IGlkZW50aWZpZXI7CiB9CiAK
LXZvaWQgTmV0d29ya1Nlc3Npb246OnNldFNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRp
Zmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6
OnNldFNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlk
ZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFzZXNzaW9uc0NyZWF0ZWQpOwogICAgIGdsb2JhbFNv
dXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigpID0gaWRlbnRpZmllcjsKIH0KIAog
I2lmIFBMQVRGT1JNKElPUykKLXZvaWQgTmV0d29ya1Nlc3Npb246OnNldENURGF0YUNvbm5lY3Rp
b25TZXJ2aWNlVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29j
b2E6OnNldENURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiB7
CiAgICAgQVNTRVJUKCFzZXNzaW9uc0NyZWF0ZWQpOwogICAgIGdsb2JhbENURGF0YUNvbm5lY3Rp
b25TZXJ2aWNlVHlwZSgpID0gdHlwZTsKIH0KICNlbmRpZgogCi1SZWY8TmV0d29ya1Nlc3Npb24+
IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoVHlwZSB0eXBlLCBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIqIGN1c3RvbVByb3RvY29sTWFuYWdlcikKK1Jl
ZjxOZXR3b3JrU2Vzc2lvbj4gTmV0d29ya1Nlc3Npb25Db2NvYTo6Y3JlYXRlKFdlYkNvcmU6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciogY3VzdG9tUHJvdG9jb2xN
YW5hZ2VyKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtTZXNzaW9uKHR5cGUs
IHNlc3Npb25JRCwgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTmV0d29ya1Nlc3Npb25Db2NvYShzZXNzaW9uSUQsIGN1c3RvbVByb3RvY29sTWFuYWdl
cikpOwogfQogCi1OZXR3b3JrU2Vzc2lvbiYgTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9u
KCkKK05ldHdvcmtTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpkZWZhdWx0U2Vzc2lvbigp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBzdGF0aWMgTmV0d29ya1Nlc3Np
b24qIHNlc3Npb24gPSAmTmV0d29ya1Nlc3Npb246OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbjo6VHlw
ZTo6Tm9ybWFsLCBXZWJDb3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgZ2xvYmFs
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKCkuZ2V0KCkpLmxlYWtSZWYoKTsKKyAgICBzdGF0aWMgTmV0
d29ya1Nlc3Npb24qIHNlc3Npb24gPSAmTmV0d29ya1Nlc3Npb25Db2NvYTo6Y3JlYXRlKFdlYkNv
cmU6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBnbG9iYWxDdXN0b21Qcm90b2NvbE1h
bmFnZXIoKS5nZXQoKSkubGVha1JlZigpOwogICAgIHJldHVybiAqc2Vzc2lvbjsKIH0KIAotTmV0
d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBjdXN0b21Qcm90b2NvbE1hbmFnZXIp
Ci0gICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCitOZXR3b3JrU2Vzc2lvbkNvY29hOjpOZXR3
b3JrU2Vzc2lvbkNvY29hKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByb3Rv
Y29sTWFuYWdlciogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKQorICAgIDogTmV0d29ya1Nlc3Npb24o
c2Vzc2lvbklEKQogewogICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwogCkBAIC00MTMs
NyArNDEwLDcgQEAgTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZSwgV2Vi
Q29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHIKICAgICBzZXNzaW9uc0NyZWF0ZWQg
PSB0cnVlOwogI2VuZGlmCiAKLSAgICBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICpjb25maWd1
cmF0aW9uID0gY29uZmlndXJhdGlvbkZvclR5cGUodHlwZSk7CisgICAgTlNVUkxTZXNzaW9uQ29u
ZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25Gb3JTZXNzaW9uSUQobV9z
ZXNzaW9uSUQpOwogCiAgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVk
KCkpCiAgICAgICAgIGNvbmZpZ3VyYXRpb24uVVJMQ2FjaGUgPSBuaWw7CkBAIC00NDUsMTEgKzQ0
Miw5IEBAIE5ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihUeXBlIHR5cGUsIFdlYkNvcmU6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByCiAjZW5kaWYKIAogICAgIGlmIChzZXNzaW9u
SUQgPT0gV2ViQ29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpIHsKLSAgICAgICAg
QVNTRVJUKHR5cGUgPT0gVHlwZTo6Tm9ybWFsKTsKICAgICAgICAgaWYgKENGSFRUUENvb2tpZVN0
b3JhZ2VSZWYgc3RvcmFnZSA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVs
dFN0b3JhZ2VTZXNzaW9uKCkuY29va2llU3RvcmFnZSgpLmdldCgpKQogICAgICAgICAgICAgY29u
ZmlndXJhdGlvbi5IVFRQQ29va2llU3RvcmFnZSA9IFtbW05TSFRUUENvb2tpZVN0b3JhZ2UgYWxs
b2NdIF9pbml0V2l0aENGSFRUUENvb2tpZVN0b3JhZ2U6c3RvcmFnZV0gYXV0b3JlbGVhc2VdOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVCh0eXBlID09IFR5cGU6OkVwaGVtZXJhbCk7CiAg
ICAgICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dG9yYWdlU2Vzc2lvbik7CiAgICAgICAgIGlmIChDRkhUVFBDb29raWVTdG9yYWdlUmVmIHN0b3Jh
Z2UgPSBzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFnZSgpLmdldCgpKQpAQCAtNDY1LDI1ICs0
NjAsMTggQEAgTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZSwgV2ViQ29y
ZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHIKICAgICBMT0coTmV0d29ya1Nlc3Npb24s
ICJDcmVhdGVkIE5ldHdvcmtTZXNzaW9uIHdpdGggY29va2llQWNjZXB0UG9saWN5ICVsdSIsIGNv
bmZpZ3VyYXRpb24uSFRUUENvb2tpZVN0b3JhZ2UuY29va2llQWNjZXB0UG9saWN5KTsKIH0KIAot
TmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbigpCitOZXR3b3JrU2Vzc2lvbkNvY29hOjp+
TmV0d29ya1Nlc3Npb24oKQogewogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uOjppbnZhbGlkYXRl
QW5kQ2FuY2VsKCkKK3ZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6aW52YWxpZGF0ZUFuZENhbmNl
bCgpCiB7CiAgICAgW21fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSBpbnZhbGlkYXRlQW5k
Q2FuY2VsXTsKICAgICBbbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlIGludmFsaWRh
dGVBbmRDYW5jZWxdOwogfQogCiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0
d29ya1Nlc3Npb246Om5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgYXV0byog
c3RvcmFnZVNlc3Npb24gPSBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VT
ZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICBSRUxFQVNFX0FTU0VSVChzdG9yYWdlU2Vzc2lvbik7
Ci0gICAgcmV0dXJuICpzdG9yYWdlU2Vzc2lvbjsKLX0KLQotdm9pZCBOZXR3b3JrU2Vzc2lvbjo6
Y2xlYXJDcmVkZW50aWFscygpCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmNsZWFyQ3JlZGVu
dGlhbHMoKQogewogI2lmICFVU0UoQ1JFREVOVElBTF9TVE9SQUdFX1dJVEhfTkVUV09SS19TRVNT
SU9OKQogICAgIEFTU0VSVChtX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLmlzRW1wdHkoKSk7
CkBAIC00OTUsNyArNDgzLDcgQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbjo6Y2xlYXJDcmVkZW50aWFs
cygpCiAjZW5kaWYKIH0KIAotTmV0d29ya0RhdGFUYXNrKiBOZXR3b3JrU2Vzc2lvbjo6ZGF0YVRh
c2tGb3JJZGVudGlmaWVyKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50
aWZpZXIsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzKQorTmV0
d29ya0RhdGFUYXNrQ29jb2EqIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmRhdGFUYXNrRm9ySWRlbnRp
ZmllcihOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIs
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYgKHN0b3JlZENyZWRlbnRpYWxzID09IFdlYkNv
cmU6OlN0b3JlZENyZWRlbnRpYWxzOjpBbGxvd1N0b3JlZENyZWRlbnRpYWxzKQpAQCAtNTAzLDcg
KzQ5MSw3IEBAIE5ldHdvcmtEYXRhVGFzayogTmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRl
bnRpZmllcihOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVuCiAgICAgcmV0dXJuIG1fZGF0YVRhc2tN
YXBXaXRob3V0Q3JlZGVudGlhbHMuZ2V0KHRhc2tJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBOZXR3
b3JrU2Vzc2lvbjo6YWRkRG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVy
IHRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEIGRvd25sb2FkSUQpCit2b2lkIE5ldHdvcmtTZXNz
aW9uQ29jb2E6OmFkZERvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlm
aWVyIHRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEIGRvd25sb2FkSUQpCiB7CiAjaWZuZGVmIE5E
RUJVRwogICAgIEFTU0VSVCghbV9kb3dubG9hZE1hcC5jb250YWlucyh0YXNrSWRlbnRpZmllcikp
OwpAQCAtNTEzLDEzICs1MDEsMTMgQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbjo6YWRkRG93bmxvYWRJ
RChOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWUKICAgICBtX2Rv
d25sb2FkTWFwLmFkZCh0YXNrSWRlbnRpZmllciwgZG93bmxvYWRJRCk7CiB9CiAKLURvd25sb2Fk
SUQgTmV0d29ya1Nlc3Npb246OmRvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRp
ZmllciB0YXNrSWRlbnRpZmllcikKK0Rvd25sb2FkSUQgTmV0d29ya1Nlc3Npb25Db2NvYTo6ZG93
bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZp
ZXIpCiB7CiAgICAgQVNTRVJUKG1fZG93bmxvYWRNYXAuZ2V0KHRhc2tJZGVudGlmaWVyKS5kb3du
bG9hZElEKCkpOwogICAgIHJldHVybiBtX2Rvd25sb2FkTWFwLmdldCh0YXNrSWRlbnRpZmllcik7
CiB9CiAKLURvd25sb2FkSUQgTmV0d29ya1Nlc3Npb246OnRha2VEb3dubG9hZElEKE5ldHdvcmtE
YXRhVGFzazo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIpCitEb3dubG9hZElEIE5ldHdv
cmtTZXNzaW9uQ29jb2E6OnRha2VEb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNr
SWRlbnRpZmllciB0YXNrSWRlbnRpZmllcikKIHsKICAgICBhdXRvIGRvd25sb2FkSUQgPSBtX2Rv
d25sb2FkTWFwLnRha2UodGFza0lkZW50aWZpZXIpOwogICAgIHJldHVybiBkb3dubG9hZElEOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdv
cmtpbmdDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90
ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCmluZGV4IGNlMGY3M2YuLjg5YTdlYmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4
dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29y
a2luZ0NvbnRleHQubW0KQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBSZW1vdGVOZXR3b3JraW5nQ29u
dGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQog
ICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihz
ZXNzaW9uSUQsIGJhc2UgKyAnLicgKyBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklE
KCkpKTsKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgYXV0byBuZXR3b3JrU2Vzc2lv
biA9IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Npb246OlR5cGU6OkVwaGVtZXJh
bCwgc2Vzc2lvbklELCBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxDdXN0
b21Qcm90b2NvbE1hbmFnZXI+KCkpOworICAgIGF1dG8gbmV0d29ya1Nlc3Npb24gPSBOZXR3b3Jr
U2Vzc2lvbjo6Y3JlYXRlKHNlc3Npb25JRCwgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLnN1
cHBsZW1lbnQ8Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyPigpKTsKICAgICBTZXNzaW9uVHJhY2tlcjo6
c2V0U2Vzc2lvbihzZXNzaW9uSUQsIFdURk1vdmUobmV0d29ya1Nlc3Npb24pKTsKICNlbmRpZgog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
RGF0YVRhc2tTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya0RhdGFUYXNrU291cC5jcHAKaW5kZXggZTY4NzJlMy4uNmJkYmJhNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFz
a1NvdXAuY3BwCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza1Nv
dXAuaCIKIAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIkRh
dGFSZWZlcmVuY2UuaCIKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJEb3dubG9hZFNvdXBF
cnJvcnMuaCIKICNpbmNsdWRlICJOZXR3b3JrTG9hZC5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vz
c2lvblNvdXAuaCIKICNpbmNsdWRlICJXZWJFcnJvcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUGFyc2Vycy5o
PgpAQCAtNDcsMzAgKzQ3LDE0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgY29uc3Qg
c2l6ZV90IGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUgPSA4MTkyOwogCi1OZXR3b3JrRGF0YVRhc2s6
Ok5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNr
Q2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50
aWFscywgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENvbnRlbnRTbmlmZmlu
Z1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRU
UFNUb0hUVFBSZWRpcmVjdCkKLSAgICA6IG1fZmFpbHVyZVRpbWVyKCp0aGlzLCAmTmV0d29ya0Rh
dGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCkKLSAgICAsIG1fc2Vzc2lvbigmc2Vzc2lvbikKLSAg
ICAsIG1fY2xpZW50KCZjbGllbnQpCi0gICAgLCBtX3N0b3JlZENyZWRlbnRpYWxzKHN0b3JlZENy
ZWRlbnRpYWxzKQotICAgICwgbV9sYXN0SFRUUE1ldGhvZChyZXF1ZXN0V2l0aENyZWRlbnRpYWxz
Lmh0dHBNZXRob2QoKSkKLSAgICAsIG1fZmlyc3RSZXF1ZXN0KHJlcXVlc3RXaXRoQ3JlZGVudGlh
bHMpCi0gICAgLCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Qoc2hv
dWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKK05ldHdvcmtEYXRhVGFza1Nv
dXA6Ok5ldHdvcmtEYXRhVGFza1NvdXAoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtE
YXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3RXaXRo
Q3JlZGVudGlhbHMsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDb250ZW50
U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJy
ZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCisgICAgOiBOZXR3b3JrRGF0YVRhc2soc2Vzc2lvbiwg
Y2xpZW50LCByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBzdG9yZWRDcmVkZW50aWFscywgc2hvdWxk
Q2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKICAgICAsIG1fc2hvdWxkQ29udGVu
dFNuaWZmKHNob3VsZENvbnRlbnRTbmlmZikKLSAgICAsIG1fdGltZW91dFNvdXJjZShSdW5Mb29w
OjptYWluKCksIHRoaXMsICZOZXR3b3JrRGF0YVRhc2s6OnRpbWVvdXRGaXJlZCkKKyAgICAsIG1f
dGltZW91dFNvdXJjZShSdW5Mb29wOjptYWluKCksIHRoaXMsICZOZXR3b3JrRGF0YVRhc2tTb3Vw
Ojp0aW1lb3V0RmlyZWQpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIG1f
c2Vzc2lvbi0+bV9kYXRhVGFza1NldC5hZGQodGhpcyk7Ci0KLSAgICBpZiAoIXJlcXVlc3RXaXRo
Q3JlZGVudGlhbHMudXJsKCkuaXNWYWxpZCgpKSB7Ci0gICAgICAgIHNjaGVkdWxlRmFpbHVyZShJ
bnZhbGlkVVJMRmFpbHVyZSk7CisgICAgZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwPihtX3Nl
c3Npb24uZ2V0KCkpLnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKKyAgICBpZiAobV9z
Y2hlZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpCiAgICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoIXBvcnRBbGxvd2VkKHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMudXJsKCkpKSB7
Ci0gICAgICAgIHNjaGVkdWxlRmFpbHVyZShCbG9ja2VkRmFpbHVyZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CiAKICAgICBhdXRvIHJlcXVlc3QgPSByZXF1ZXN0V2l0aENyZWRlbnRpYWxzOwog
ICAgIGlmIChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgewpAQCAtOTMs
NDQgKzc3LDEzIEBAIE5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNz
aW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmCiAgICAgY3JlYXRlUmVxdWVzdChy
ZXF1ZXN0KTsKIH0KIAotTmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkKK05ldHdv
cmtEYXRhVGFza1NvdXA6On5OZXR3b3JrRGF0YVRhc2tTb3VwKCkKIHsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9jbGllbnQpOwogICAgIGNsZWFyUmVxdWVzdCgp
OwotICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFza1NldC5yZW1vdmUodGhpcyk7Ci19Ci0KLXZvaWQg
TmV0d29ya0RhdGFUYXNrOjpzY2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5cGUgdHlwZSkKLXsKLSAg
ICBBU1NFUlQodHlwZSAhPSBOb0ZhaWx1cmUpOwotICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUg
PSB0eXBlOwotICAgIG1fZmFpbHVyZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKCkKLXsKLSAgICBSZWZQdHI8TmV0d29y
a0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotCi0gICAgc3dpdGNoIChtX3NjaGVkdWxl
ZEZhaWx1cmVUeXBlKSB7Ci0gICAgY2FzZSBCbG9ja2VkRmFpbHVyZToKLSAgICAgICAgbV9zY2hl
ZHVsZWRGYWlsdXJlVHlwZSA9IE5vRmFpbHVyZTsKLSAgICAgICAgaWYgKG1fY2xpZW50KQotICAg
ICAgICAgICAgbV9jbGllbnQtPndhc0Jsb2NrZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgSW52YWxpZFVSTEZhaWx1cmU6Ci0gICAgICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBO
b0ZhaWx1cmU7Ci0gICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgIG1fY2xpZW50LT5j
YW5ub3RTaG93VVJMKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIE5vRmFpbHVyZToKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBkb3duY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXA+KG1f
c2Vzc2lvbi5nZXQoKSkudW5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhpcyk7CiB9CiAKLVN0
cmluZyBOZXR3b3JrRGF0YVRhc2s6OnN1Z2dlc3RlZEZpbGVuYW1lKCkKK1N0cmluZyBOZXR3b3Jr
RGF0YVRhc2tTb3VwOjpzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3N1
Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1fc3VnZ2VzdGVkRmls
ZW5hbWU7CkBAIC0xNDIsMjMgKzk1LDEzIEBAIFN0cmluZyBOZXR3b3JrRGF0YVRhc2s6OnN1Z2dl
c3RlZEZpbGVuYW1lKCkKICAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG1fcmVz
cG9uc2UudXJsKCkubGFzdFBhdGhDb21wb25lbnQoKSk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjpzZXRTdWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCit2
b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZSwgYm9vbCBhbGxvd092ZXJ3cml0ZSkKIHsKLSAgICBtX3N1Z2dlc3Rl
ZEZpbGVuYW1lID0gc3VnZ2VzdGVkTmFtZTsKLX0KLQotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnNl
dFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgYWxsb3dPdmVyd3JpdGUpCi17Ci0gICAgbV9w
ZW5kaW5nRG93bmxvYWRMb2NhdGlvbiA9IGZpbGVuYW1lOworICAgIE5ldHdvcmtEYXRhVGFzazo6
c2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oZmlsZW5hbWUsIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUsIGFsbG93T3ZlcndyaXRlKTsKICAgICBtX2FsbG93T3ZlcndyaXRlRG93bmxvYWQgPSBhbGxv
d092ZXJ3cml0ZTsKIH0KIAotYm9vbCBOZXR3b3JrRGF0YVRhc2s6OmFsbG93c1NwZWNpZmljSFRU
UFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZVJlcXVl
c3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQordm9pZCBOZXR3b3JrRGF0YVRhc2tT
b3VwOjpjcmVhdGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAg
ICBHVW5pcXVlUHRyPFNvdXBVUkk+IHNvdXBVUkkgPSByZXF1ZXN0LmNyZWF0ZVNvdXBVUkkoKTsK
ICAgICBpZiAoIXNvdXBVUkkpIHsKQEAgLTE2Niw3ICsxMDksNyBAQCB2b2lkIE5ldHdvcmtEYXRh
VGFzazo6Y3JlYXRlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHUmVmUHRyPFNvdXBSZXF1ZXN0PiBzb3VwUmVxdWVz
dCA9IGFkb3B0R1JlZihzb3VwX3Nlc3Npb25fcmVxdWVzdF91cmkobV9zZXNzaW9uLT5zb3VwU2Vz
c2lvbigpLCBzb3VwVVJJLmdldCgpLCBudWxscHRyKSk7CisgICAgR1JlZlB0cjxTb3VwUmVxdWVz
dD4gc291cFJlcXVlc3QgPSBhZG9wdEdSZWYoc291cF9zZXNzaW9uX3JlcXVlc3RfdXJpKGRvd25j
YXN0PE5ldHdvcmtTZXNzaW9uU291cD4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpLCBz
b3VwVVJJLmdldCgpLCBudWxscHRyKSk7CiAgICAgaWYgKCFzb3VwUmVxdWVzdCkgewogICAgICAg
ICBzY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOwogICAgICAgICByZXR1cm47CkBA
IC0yMTgsMTkgKzE2MSwxOSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlUmVxdWVzdChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiAgICAgZ19zaWduYWxfY29ubmVjdChtX3Nv
dXBNZXNzYWdlLmdldCgpLCAibm90aWZ5Ojp0bHMtZXJyb3JzIiwgR19DQUxMQkFDSyh0bHNFcnJv
cnNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1l
c3NhZ2UuZ2V0KCksICJnb3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soZ290SGVhZGVyc0NhbGxiYWNr
KSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAid3Jv
dGUtYm9keS1kYXRhIiwgR19DQUxMQkFDSyh3cm90ZUJvZHlEYXRhQ2FsbGJhY2spLCB0aGlzKTsK
LSAgICBnX3NpZ25hbF9jb25uZWN0KG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgImF1dGhlbnRp
Y2F0ZSIsICBHX0NBTExCQUNLKGF1dGhlbnRpY2F0ZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19z
aWduYWxfY29ubmVjdChkb3duY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXA+KG1fc2Vzc2lvbi5nZXQo
KSkuc291cFNlc3Npb24oKSwgImF1dGhlbnRpY2F0ZSIsICBHX0NBTExCQUNLKGF1dGhlbnRpY2F0
ZUNhbGxiYWNrKSwgdGhpcyk7CiAjaWYgRU5BQkxFKFdFQl9USU1JTkcpCiAgICAgZ19zaWduYWxf
Y29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAibmV0d29yay1ldmVudCIsIEdfQ0FMTEJBQ0so
bmV0d29ya0V2ZW50Q2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291
cE1lc3NhZ2UuZ2V0KCksICJyZXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHJlc3RhcnRlZENhbGxiYWNr
KSwgdGhpcyk7CiAjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJzdGFydGluZyIsIEdfQ0FMTEJBQ0soc3Rh
cnRpbmdDYWxsYmFjayksIHRoaXMpOwogI2Vsc2UKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fc2Vz
c2lvbi0+c291cFNlc3Npb24oKSwgInJlcXVlc3Qtc3RhcnRlZCIsIEdfQ0FMTEJBQ0socmVxdWVz
dFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmNhc3Q8
TmV0d29ya1Nlc3Npb25Tb3VwPihtX3Nlc3Npb24uZ2V0KCkpLnNvdXBTZXNzaW9uKCksICJyZXF1
ZXN0LXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHJlcXVlc3RTdGFydGVkQ2FsbGJhY2spLCB0aGlzKTsK
ICNlbmRpZgogI2VuZGlmCiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpjbGVhclJlcXVlc3Qo
KQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjbGVhclJlcXVlc3QoKQogewogICAgIGlmICht
X3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NywxMyAr
MTkwLDEzIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpjbGVhclJlcXVlc3QoKQogICAgIG1fY2Fu
Y2VsbGFibGUgPSBudWxscHRyOwogICAgIGlmIChtX3NvdXBNZXNzYWdlKSB7CiAgICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3NvdXBNZXNzYWdlLmdldCgpLCBH
X1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKLSAgICAg
ICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlKG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwg
bV9zb3VwTWVzc2FnZS5nZXQoKSwgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKKyAgICAgICAgc291
cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlKGRvd25jYXN0PE5ldHdvcmtTZXNzaW9uU291cD4obV9z
ZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpLCBtX3NvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1NU
QVRVU19DQU5DRUxMRUQpOwogICAgICAgICBtX3NvdXBNZXNzYWdlID0gbnVsbHB0cjsKICAgICB9
Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fc2Vzc2lvbi0+c291
cFNlc3Npb24oKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwg
dGhpcyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGRvd25jYXN0
PE5ldHdvcmtTZXNzaW9uU291cD4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpLCBHX1NJ
R05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKIH0KIAotdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OnJlc3VtZSgpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJl
c3VtZSgpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlJ1bm5pbmcpOwogICAgIGlm
IChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxl
dGVkKQpAQCAtMjY4LDcgKzIxMSw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXN1bWUoKQog
CiAgICAgc3RhcnRUaW1lb3V0KCk7CiAKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0
ZWRUaGlzKHRoaXMpOwogICAgIGlmIChtX3NvdXBSZXF1ZXN0ICYmICFtX2NhbmNlbGxhYmxlKSB7
CiAgICAgICAgIG1fY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7
CiAgICAgICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKG1fc291cFJlcXVlc3QuZ2V0KCksIG1f
Y2FuY2VsbGFibGUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4o
c2VuZFJlcXVlc3RDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKQEAgLTI4OCw3
ICsyMzEsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVzdW1lKCkKICAgICB9CiB9CiAKLXZv
aWQgTmV0d29ya0RhdGFUYXNrOjpzdXNwZW5kKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6
c3VzcGVuZCgpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlN1c3BlbmRlZCk7CiAg
ICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpD
b21wbGV0ZWQpCkBAIC0yOTgsNyArMjQxLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN1c3Bl
bmQoKQogICAgIHN0b3BUaW1lb3V0KCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpjYW5j
ZWwoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjYW5jZWwoKQogewogICAgIGlmIChtX3N0
YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQog
ICAgICAgICByZXR1cm47CkBAIC0zMDYsNyArMjQ5LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6
OmNhbmNlbCgpCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDYW5jZWxpbmc7CiAKICAgICBpZiAobV9z
b3VwTWVzc2FnZSkKLSAgICAgICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlKG1fc2Vzc2lv
bi0+c291cFNlc3Npb24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSwgU09VUF9TVEFUVVNfQ0FOQ0VM
TEVEKTsKKyAgICAgICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlKGRvd25jYXN0PE5ldHdv
cmtTZXNzaW9uU291cD4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpLCBtX3NvdXBNZXNz
YWdlLmdldCgpLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOwogCiAgICAgZ19jYW5jZWxsYWJsZV9j
YW5jZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7CiAKQEAgLTMxNCw0MyArMjU3LDQzIEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrOjpjYW5jZWwoKQogICAgICAgICBjbGVhbkRvd25sb2FkRmlsZXMoKTsK
IH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmludmFsaWRhdGVBbmRDYW5jZWwoKQordm9pZCBO
ZXR3b3JrRGF0YVRhc2tTb3VwOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKIHsKICAgICBjYW5jZWwo
KTsKICAgICBjbGVhclJlcXVlc3QoKTsKIH0KIAotTmV0d29ya0RhdGFUYXNrOjpTdGF0ZSBOZXR3
b3JrRGF0YVRhc2s6OnN0YXRlKCkgY29uc3QKK05ldHdvcmtEYXRhVGFzazo6U3RhdGUgTmV0d29y
a0RhdGFUYXNrU291cDo6c3RhdGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0YXRlOwogfQog
Ci12b2lkIE5ldHdvcmtEYXRhVGFzazo6dGltZW91dEZpcmVkKCkKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrU291cDo6dGltZW91dEZpcmVkKCkKIHsKICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2Fu
Y2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhbV9jbGllbnQpIHsKICAg
ICAgICAgY2xlYXJSZXF1ZXN0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQ
dHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxOZXR3
b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIGludmFsaWRhdGVBbmRD
YW5jZWwoKTsKICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoUmVzb3VyY2VFcnJv
cjo6dGltZW91dEVycm9yKG1fZmlyc3RSZXF1ZXN0LnVybCgpKSk7CiB9CiAKLXZvaWQgTmV0d29y
a0RhdGFUYXNrOjpzdGFydFRpbWVvdXQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzdGFy
dFRpbWVvdXQoKQogewogICAgIGlmIChtX2ZpcnN0UmVxdWVzdC50aW1lb3V0SW50ZXJ2YWwoKSA+
IDApCiAgICAgICAgIG1fdGltZW91dFNvdXJjZS5zdGFydE9uZVNob3QobV9maXJzdFJlcXVlc3Qu
dGltZW91dEludGVydmFsKCkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6c3RvcFRpbWVv
dXQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzdG9wVGltZW91dCgpCiB7CiAgICAgbV90
aW1lb3V0U291cmNlLnN0b3AoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnNlbmRSZXF1
ZXN0Q2FsbGJhY2soU291cFJlcXVlc3QqIHNvdXBSZXF1ZXN0LCBHQXN5bmNSZXN1bHQqIHJlc3Vs
dCwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzZW5k
UmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiBzb3VwUmVxdWVzdCwgR0FzeW5jUmVzdWx0KiBy
ZXN1bHQsIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCiB7Ci0gICAgUmVmUHRyPE5ldHdvcmtE
YXRhVGFzaz4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOworICAgIFJlZlB0cjxOZXR3
b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFzayk7CiAgICAgaWYg
KHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0
YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KSB7CiAgICAgICAgIHRhc2stPmNsZWFy
UmVxdWVzdCgpOwogICAgICAgICByZXR1cm47CkBAIC0zNzEsNyArMzE0LDcgQEAgdm9pZCBOZXR3
b3JrRGF0YVRhc2s6OnNlbmRSZXF1ZXN0Q2FsbGJhY2soU291cFJlcXVlc3QqIHNvdXBSZXF1ZXN0
LCBHQXN5bmNSZXN1bHQKICAgICAgICAgdGFzay0+ZGlkU2VuZFJlcXVlc3QoV1RGTW92ZShpbnB1
dFN0cmVhbSkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkU2VuZFJlcXVlc3QoR1Jl
ZlB0cjxHSW5wdXRTdHJlYW0+JiYgaW5wdXRTdHJlYW0pCit2b2lkIE5ldHdvcmtEYXRhVGFza1Nv
dXA6OmRpZFNlbmRSZXF1ZXN0KEdSZWZQdHI8R0lucHV0U3RyZWFtPiYmIGlucHV0U3RyZWFtKQog
ewogICAgIGlmIChtX3NvdXBNZXNzYWdlKSB7CiAgICAgICAgIGlmIChtX3Nob3VsZENvbnRlbnRT
bmlmZiA9PSBTbmlmZkNvbnRlbnQgJiYgbV9zb3VwTWVzc2FnZS0+c3RhdHVzX2NvZGUgIT0gU09V
UF9TVEFUVVNfTk9UX01PRElGSUVEKQpAQCAtNDA1LDcgKzM0OCw3IEBAIHZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpkaWRTZW5kUmVxdWVzdChHUmVmUHRyPEdJbnB1dFN0cmVhbT4mJiBpbnB1dFN0cmVh
bSkKICAgICBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6
OmRpZFJlY2VpdmVSZXNwb25zZSgpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFJlY2Vp
dmVSZXNwb25zZSgpCiB7CiAgICAgQVNTRVJUKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKTsKIApAQCAt
NDM2LDcgKzM3OSw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZWNlaXZlUmVzcG9uc2Uo
KQogICAgIH0pOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6dGxzRXJyb3JzQ2hhbmdlZENh
bGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgR1BhcmFtU3BlYyosIE5ldHdvcmtEYXRh
VGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6dGxzRXJyb3JzQ2hhbmdlZENh
bGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgR1BhcmFtU3BlYyosIE5ldHdvcmtEYXRh
VGFza1NvdXAqIHRhc2spCiB7CiAgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNl
bGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xp
ZW50KSB7CiAgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOwpAQCAtNDQ3LDIwICszOTAsMjAg
QEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnRsc0Vycm9yc0NoYW5nZWRDYWxsYmFjayhTb3VwTWVz
c2FnZSogc291cE1lc3NhZ2UsIEdQYXJhbVMKICAgICB0YXNrLT50bHNFcnJvcnNDaGFuZ2VkKCk7
CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2VkKCkKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrU291cDo6dGxzRXJyb3JzQ2hhbmdlZCgpCiB7CiAgICAgQVNTRVJUKG1fc291
cFJlcXVlc3QpOwogICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6Y2hlY2tUTFNFcnJvcnMobV9zb3Vw
UmVxdWVzdC5nZXQoKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSwgW3RoaXNdIChjb25zdCBSZXNvdXJj
ZUVycm9yJiBlcnJvcikgewogICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKKyAgICAgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFza1NvdXA+IHByb3RlY3RlZFRo
aXModGhpcyk7CiAgICAgICAgIGludmFsaWRhdGVBbmRDYW5jZWwoKTsKICAgICAgICAgbV9jbGll
bnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKGVycm9yKTsKICAgICB9KTsKIH0KIAotdm9pZCBOZXR3
b3JrRGF0YVRhc2s6OmFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0KQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjphcHBseUF1dGhlbnRpY2F0aW9u
VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICAvLyBXZSBhbHdheXMg
cHV0IHRoZSBjcmVkZW50aWFscyBpbnRvIHRoZSBVUkwuIEluIHRoZSBDb2NhIHBvcnQgSFRUUCBm
YW1pbHkgY3JlZGVudGlhbHMgYXJlIGFwcGxpZWQgaW4KICAgICAvLyB0aGUgZGlkUmVjZWl2ZUNo
YWxsZW5nZSBjYWxsYmFjaywgYnV0IGxpYnNvdXAgcmVxdWlyZXMgdXMgdG8gdXNlIHRoaXMgbWV0
aG9kIHRvIG92ZXJyaWRlCkBAIC00ODAsOSArNDIzLDkgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6
OmFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQog
ICAgIHJlcXVlc3Quc2V0VVJMKHVybCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjphdXRo
ZW50aWNhdGVDYWxsYmFjayhTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3NhZ2UqIHNvdXBN
ZXNzYWdlLCBTb3VwQXV0aCogc291cEF1dGgsIGdib29sZWFuIHJldHJ5aW5nLCBOZXR3b3JrRGF0
YVRhc2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmF1dGhlbnRpY2F0ZUNhbGxi
YWNrKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIFNvdXBB
dXRoKiBzb3VwQXV0aCwgZ2Jvb2xlYW4gcmV0cnlpbmcsIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRh
c2spCiB7Ci0gICAgQVNTRVJUKHNlc3Npb24gPT0gdGFzay0+bV9zZXNzaW9uLT5zb3VwU2Vzc2lv
bigpKTsKKyAgICBBU1NFUlQoc2Vzc2lvbiA9PSB0YXNrLT5kb3duY2FzdDxOZXR3b3JrU2Vzc2lv
blNvdXA+KG1fc2Vzc2lvbi5nZXQoKSkuc291cFNlc3Npb24oKSk7CiAgICAgaWYgKHNvdXBNZXNz
YWdlICE9IHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAt
NDk5LDcgKzQ0Miw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0F1dGhlbnRpY2F0aW9uRmFpbHVy
ZVN0YXR1c0NvZGUoaW50IGh0dHBTdGF0dXNDb2RlKQogICAgIHJldHVybiBodHRwU3RhdHVzQ29k
ZSA9PSBTT1VQX1NUQVRVU19QUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCB8fCBodHRwU3Rh
dHVzQ29kZSA9PSBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQ7CiB9CiAKLXZvaWQgTmV0d29ya0Rh
dGFUYXNrOjphdXRoZW50aWNhdGUoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBjaGFsbGVuZ2Up
Cit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmF1dGhlbnRpY2F0ZShBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYmIGNoYWxsZW5nZSkKIHsKICAgICBBU1NFUlQobV9zb3VwTWVzc2FnZSk7CiAgICAg
aWYgKG1fc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscykgewpAQCAt
NTI1LDcgKzQ2OCw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjphdXRoZW50aWNhdGUoQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmJiBjaGFsbGVuZ2UpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBz
b3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZShtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCksIG1fc291
cE1lc3NhZ2UuZ2V0KCkpOworICAgIHNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlKGRvd25jYXN0
PE5ldHdvcmtTZXNzaW9uU291cD4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpLCBtX3Nv
dXBNZXNzYWdlLmdldCgpKTsKIAogICAgIC8vIFdlIGNvdWxkIGFsc28gZG8gdGhpcyBiZWZvcmUg
d2UgZXZlbiBzdGFydCB0aGUgcmVxdWVzdCwgYnV0IHRoYXQgd291bGQgYmUgYXQgdGhlIGV4cGVu
c2UKICAgICAvLyBvZiBhbGwgcmVxdWVzdCBsYXRlbmN5LCB2ZXJzdXMgYSBvbmUtdGltZSBsYXRl
bmN5IGZvciB0aGUgc21hbGwgc3Vic2V0IG9mIHJlcXVlc3RzIHRoYXQKQEAgLTU0Nyw3ICs0OTAs
NyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRlKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJiYgY2hhbGxlbmdlKQogICAgICAgICBjb250aW51ZUF1dGhlbnRpY2F0ZShXVEZNb3Zl
KGNoYWxsZW5nZSkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6Y29udGludWVBdXRoZW50
aWNhdGUoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBjaGFsbGVuZ2UpCit2b2lkIE5ldHdvcmtE
YXRhVGFza1NvdXA6OmNvbnRpbnVlQXV0aGVudGljYXRlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
JiYgY2hhbGxlbmdlKQogewogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQ2hhbGxlbmdlKGNoYWxs
ZW5nZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2hhbGxlbmdlXShB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uLCBjb25zdCBDcmVk
ZW50aWFsJiBjcmVkZW50aWFsKSB7CiAgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5j
ZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKSB7CkBAIC01NzksMTMgKzUyMiwx
MyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y29udGludWVBdXRoZW50aWNhdGUoQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmJiBjaGFsbGVuZ2UpCiAgICAgICAgICAgICBzb3VwX2F1dGhfYXV0aGVu
dGljYXRlKGNoYWxsZW5nZS5zb3VwQXV0aCgpLCBjcmVkZW50aWFsLnVzZXIoKS51dGY4KCkuZGF0
YSgpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKG1fc2Vzc2lvbi0+c291cFNlc3Np
b24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSk7CisgICAgICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNl
X21lc3NhZ2UoZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwPihtX3Nlc3Npb24uZ2V0KCkpLnNv
dXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCkpOwogICAgIH0pOwogfQogCi12b2lkIE5l
dHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25DYWxsYmFjayhHSW5w
dXRTdHJlYW0qIGlucHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFU
YXNrKiB0YXNrKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpza2lwSW5wdXRTdHJlYW1Gb3JS
ZWRpcmVjdGlvbkNhbGxiYWNrKEdJbnB1dFN0cmVhbSogaW5wdXRTdHJlYW0sIEdBc3luY1Jlc3Vs
dCogcmVzdWx0LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewotICAgIFJlZlB0cjxOZXR3
b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBSZWZQdHI8
TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOwogICAg
IGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9
PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewogICAgICAgICB0YXNrLT5j
bGVhclJlcXVlc3QoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjAyLDE1ICs1NDUsMTUgQEAgdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OnNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uQ2FsbGJhY2so
R0lucHV0U3RyZWFtKiBpbnB1dFMKICAgICAgICAgdGFzay0+ZGlkRmluaXNoU2tpcElucHV0U3Ry
ZWFtRm9yUmVkaXJlY3Rpb24oKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnNraXBJbnB1
dFN0cmVhbUZvclJlZGlyZWN0aW9uKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c2tpcElu
cHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKQogewogICAgIEFTU0VSVChtX2lucHV0U3RyZWFtKTsK
LSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJl
ZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIGdfaW5w
dXRfc3RyZWFtX3NraXBfYXN5bmMobV9pbnB1dFN0cmVhbS5nZXQoKSwgZ0RlZmF1bHRSZWFkQnVm
ZmVyU2l6ZSwgR19QUklPUklUWV9ERUZBVUxULCBtX2NhbmNlbGxhYmxlLmdldCgpLAogICAgICAg
ICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHNraXBJbnB1dFN0cmVhbUZv
clJlZGlyZWN0aW9uQ2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CiB9CiAKLXZv
aWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hTa2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlv
bigpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZEZpbmlzaFNraXBJbnB1dFN0cmVhbUZv
clJlZGlyZWN0aW9uKCkKIHsKICAgICBnX2lucHV0X3N0cmVhbV9jbG9zZShtX2lucHV0U3RyZWFt
LmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKICAgICBjb250aW51ZUhUVFBSZWRpcmVjdGlvbigp
OwpAQCAtNjM3LDcgKzU4MCw3IEBAIHN0YXRpYyBib29sIHNob3VsZFJlZGlyZWN0QXNHRVQoU291
cE1lc3NhZ2UqIG1lc3NhZ2UsIGJvb2wgY3Jvc3NPcmlnaW4pCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIE5ldHdvcmtEYXRhVGFzazo6c2hvdWxkU3RhcnRIVFRQUmVkaXJlY3Rpb24oKQor
Ym9vbCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzaG91bGRTdGFydEhUVFBSZWRpcmVjdGlvbigpCiB7
CiAgICAgQVNTRVJUKG1fc291cE1lc3NhZ2UpOwogICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051
bGwoKSk7CkBAIC02NTYsNyArNTk5LDcgQEAgYm9vbCBOZXR3b3JrRGF0YVRhc2s6OnNob3VsZFN0
YXJ0SFRUUFJlZGlyZWN0aW9uKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OmNvbnRpbnVlSFRUUFJlZGlyZWN0aW9uKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
U291cDo6Y29udGludWVIVFRQUmVkaXJlY3Rpb24oKQogewogICAgIEFTU0VSVChtX3NvdXBNZXNz
YWdlKTsKICAgICBBU1NFUlQoIW1fcmVzcG9uc2UuaXNOdWxsKCkpOwpAQCAtNzI3LDkgKzY3MCw5
IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpCiAgICAg
fSk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZWFkQ2FsbGJhY2soR0lucHV0U3RyZWFt
KiBpbnB1dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdvcmtEYXRhVGFzayogdGFz
aykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6cmVhZENhbGxiYWNrKEdJbnB1dFN0cmVhbSog
aW5wdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0
YXNrKQogewotICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9w
dFJlZih0YXNrKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhp
cyA9IGFkb3B0UmVmKHRhc2spOwogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5j
ZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICghdGFzay0+bV9j
bGllbnQgJiYgIXRhc2stPmlzRG93bmxvYWQoKSkpIHsKICAgICAgICAgdGFzay0+Y2xlYXJSZXF1
ZXN0KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTc1MiwxNiArNjk1LDE2IEBAIHZvaWQgTmV0d29y
a0RhdGFUYXNrOjpyZWFkQ2FsbGJhY2soR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSwgR0FzeW5j
UmVzdWx0KiByZXN1CiAgICAgICAgIHRhc2stPmRpZEZpbmlzaFJlYWQoKTsKIH0KIAotdm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OnJlYWQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZWFkKCkK
IHsKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAg
IFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIEFT
U0VSVChtX2lucHV0U3RyZWFtKTsKICAgICBtX3JlYWRCdWZmZXIuZ3JvdyhnRGVmYXVsdFJlYWRC
dWZmZXJTaXplKTsKICAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKG1faW5wdXRTdHJlYW0u
Z2V0KCksIG1fcmVhZEJ1ZmZlci5kYXRhKCksIG1fcmVhZEJ1ZmZlci5zaXplKCksIEdfUFJJT1JJ
VFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxHQXN5bmNSZWFkeUNhbGxiYWNrPihyZWFkQ2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtS
ZWYoKSk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZWFkKGdzc2l6ZSBieXRlc1Jl
YWQpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFJlYWQoZ3NzaXplIGJ5dGVzUmVhZCkK
IHsKICAgICBtX3JlYWRCdWZmZXIuc2hyaW5rKGJ5dGVzUmVhZCk7CiAgICAgaWYgKG1fZG93bmxv
YWRPdXRwdXRTdHJlYW0pIHsKQEAgLTc3NCw3ICs3MTcsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFz
azo6ZGlkUmVhZChnc3NpemUgYnl0ZXNSZWFkKQogICAgIH0KIH0KIAotdm9pZCBOZXR3b3JrRGF0
YVRhc2s6OmRpZEZpbmlzaFJlYWQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRGaW5p
c2hSZWFkKCkKIHsKICAgICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7CiAgICAgZ19pbnB1dF9zdHJl
YW1fY2xvc2UobV9pbnB1dFN0cmVhbS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CkBAIC03OTQs
OSArNzM3LDkgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFJlYWQoKQogICAgIG1f
Y2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcih7IH0pOwogfQogCi12b2lkIE5ldHdvcmtEYXRh
VGFzazo6cmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2soU291cE11bHRpcGFydElucHV0U3RyZWFtKiBt
dWx0aXBhcnRJbnB1dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdvcmtEYXRhVGFz
ayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6cmVxdWVzdE5leHRQYXJ0Q2FsbGJh
Y2soU291cE11bHRpcGFydElucHV0U3RyZWFtKiBtdWx0aXBhcnRJbnB1dFN0cmVhbSwgR0FzeW5j
UmVzdWx0KiByZXN1bHQsIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCiB7Ci0gICAgUmVmUHRy
PE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOworICAgIFJl
ZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFzayk7
CiAgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0
ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KSB7CiAgICAgICAgIHRh
c2stPmNsZWFyUmVxdWVzdCgpOwogICAgICAgICByZXR1cm47CkBAIC04MTksMTYgKzc2MiwxNiBA
QCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2soU291cE11bHRp
cGFydElucHV0U3RyZWFtKiBtdWx0aXBhcgogICAgICAgICB0YXNrLT5kaWRGaW5pc2hSZXF1ZXN0
TmV4dFBhcnQoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydCgp
Cit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlcXVlc3ROZXh0UGFydCgpCiB7Ci0gICAgUmVm
UHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8TmV0
d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBBU1NFUlQobV9tdWx0
aXBhcnRJbnB1dFN0cmVhbSk7CiAgICAgQVNTRVJUKCFtX2lucHV0U3RyZWFtKTsKICAgICBzb3Vw
X211bHRpcGFydF9pbnB1dF9zdHJlYW1fbmV4dF9wYXJ0X2FzeW5jKG1fbXVsdGlwYXJ0SW5wdXRT
dHJlYW0uZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihyZXF1ZXN0TmV4dFBh
cnRDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKIH0KIAotdm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OmRpZFJlcXVlc3ROZXh0UGFydChHUmVmUHRyPEdJbnB1dFN0cmVhbT4mJiBpbnB1
dFN0cmVhbSkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkUmVxdWVzdE5leHRQYXJ0KEdS
ZWZQdHI8R0lucHV0U3RyZWFtPiYmIGlucHV0U3RyZWFtKQogewogICAgIEFTU0VSVCghbV9pbnB1
dFN0cmVhbSk7CiAgICAgbV9pbnB1dFN0cmVhbSA9IFdURk1vdmUoaW5wdXRTdHJlYW0pOwpAQCAt
ODM4LDcgKzc4MSw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZXF1ZXN0TmV4dFBhcnQo
R1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYgaW5wdXRTdHJlYW0pCiAgICAgZGlkUmVjZWl2ZVJlc3Bv
bnNlKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hSZXF1ZXN0TmV4dFBh
cnQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQo
KQogewogICAgIEFTU0VSVCghbV9pbnB1dFN0cmVhbSk7CiAgICAgQVNTRVJUKG1fbXVsdGlwYXJ0
SW5wdXRTdHJlYW0pOwpAQCAtODQ3LDcgKzc5MCw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpk
aWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQoKQogICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhF
cnJvcih7IH0pOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6Z290SGVhZGVyc0NhbGxiYWNr
KFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQordm9pZCBO
ZXR3b3JrRGF0YVRhc2tTb3VwOjpnb3RIZWFkZXJzQ2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBN
ZXNzYWdlLCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewogICAgIGlmICh0YXNrLT5zdGF0
ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxl
dGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewogICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsK
QEAgLTg1Nyw3ICs4MDAsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6Z290SGVhZGVyc0NhbGxi
YWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYQogICAgIHRhc2stPmRp
ZEdldEhlYWRlcnMoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEdldEhlYWRlcnMo
KQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRHZXRIZWFkZXJzKCkKIHsKICAgICAvLyBX
ZSBhcmUgYSBiaXQgbW9yZSBjb25zZXJ2YXRpdmUgd2l0aCB0aGUgcGVyc2lzdGVudCBjcmVkZW50
aWFsIHN0b3JhZ2UgdGhhbiB0aGUgc2Vzc2lvbiBzdG9yZSwKICAgICAvLyBzaW5jZSB3ZSBhcmUg
d2FpdGluZyB1bnRpbCB3ZSBrbm93IHRoYXQgdGhpcyBhdXRoZW50aWNhdGlvbiBzdWNjZWVkZWQg
YmVmb3JlIGFjdHVhbGx5IHN0b3JpbmcuCkBAIC04NzAsNyArODEzLDcgQEAgdm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OmRpZEdldEhlYWRlcnMoKQogICAgIH0KIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRh
c2s6Ondyb3RlQm9keURhdGFDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIFNvdXBC
dWZmZXIqIGJ1ZmZlciwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQordm9pZCBOZXR3b3JrRGF0YVRh
c2tTb3VwOjp3cm90ZUJvZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBT
b3VwQnVmZmVyKiBidWZmZXIsIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCiB7CiAgICAgaWYg
KHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0
YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KSB7CiAgICAgICAgIHRhc2stPmNsZWFy
UmVxdWVzdCgpOwpAQCAtODgwLDE0ICs4MjMsMTQgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6Ondy
b3RlQm9keURhdGFDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIFNvdXBCdWZmZXIK
ICAgICB0YXNrLT5kaWRXcml0ZUJvZHlEYXRhKGJ1ZmZlci0+bGVuZ3RoKTsKIH0KIAotdm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OmRpZFdyaXRlQm9keURhdGEodWludDY0X3QgYnl0ZXNTZW50KQordm9p
ZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRXcml0ZUJvZHlEYXRhKHVpbnQ2NF90IGJ5dGVzU2Vu
dCkKIHsKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
ICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAg
IG1fYm9keURhdGFUb3RhbEJ5dGVzU2VudCArPSBieXRlc1NlbnQ7CiAgICAgbV9jbGllbnQtPmRp
ZFNlbmREYXRhKG1fYm9keURhdGFUb3RhbEJ5dGVzU2VudCwgbV9zb3VwTWVzc2FnZS0+cmVxdWVz
dF9ib2R5LT5sZW5ndGgpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZG93bmxvYWQoKQor
dm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkb3dubG9hZCgpCiB7CiAgICAgQVNTRVJUKGlzRG93
bmxvYWQoKSk7CiAgICAgQVNTRVJUKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24pOwpAQCAtOTMx
LDkgKzg3NCw5IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkb3dubG9hZCgpCiAgICAgcmVhZCgp
OwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6d3JpdGVEb3dubG9hZENhbGxiYWNrKEdPdXRw
dXRTdHJlYW0qIG91dHB1dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdvcmtEYXRh
VGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6d3JpdGVEb3dubG9hZENhbGxi
YWNrKEdPdXRwdXRTdHJlYW0qIG91dHB1dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5l
dHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCiB7Ci0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4g
cHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRh
c2tTb3VwPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFzayk7CiAgICAgaWYgKHRhc2stPnN0
YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21w
bGV0ZWQgfHwgIXRhc2stPmlzRG93bmxvYWQoKSkgewogICAgICAgICB0YXNrLT5jbGVhclJlcXVl
c3QoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtOTU1LDkgKzg5OCw5IEBAIHZvaWQgTmV0d29ya0Rh
dGFUYXNrOjp3cml0ZURvd25sb2FkQ2FsbGJhY2soR091dHB1dFN0cmVhbSogb3V0cHV0U3RyZWFt
LCBHQXN5bmNSCiAgICAgICAgIHRhc2stPmRpZFdyaXRlRG93bmxvYWQoYnl0ZXNXcml0dGVuKTsK
IH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OndyaXRlRG93bmxvYWQoKQordm9pZCBOZXR3b3Jr
RGF0YVRhc2tTb3VwOjp3cml0ZURvd25sb2FkKCkKIHsKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFU
YXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3Vw
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLCA0NCwgMCkK
ICAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsX2FzeW5jKG1fZG93bmxvYWRPdXRwdXRTdHJl
YW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5kYXRhKCksIG1fcmVhZEJ1ZmZlci5zaXplKCksIEdfUFJJ
T1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPih3cml0ZURvd25sb2FkQ2FsbGJhY2spLCBwcm90ZWN0
ZWRUaGlzLmxlYWtSZWYoKSk7CkBAIC05NjYsNyArOTA5LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRh
c2s6OndyaXRlRG93bmxvYWQoKQogICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5
Q2FsbGJhY2s+KHdyaXRlRG93bmxvYWRDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigp
KSk7CiAgICAgZ190YXNrX3NldF90YXNrX2RhdGEod3JpdGVUYXNrLmdldCgpLCB0aGlzLCBudWxs
cHRyKTsKICAgICBnX3Rhc2tfcnVuX2luX3RocmVhZCh3cml0ZVRhc2suZ2V0KCksIFtdKEdUYXNr
KiB3cml0ZVRhc2ssIGdwb2ludGVyIHNvdXJjZSwgZ3BvaW50ZXIgdXNlckRhdGEsIEdDYW5jZWxs
YWJsZSogY2FuY2VsbGFibGUpIHsKLSAgICAgICAgYXV0byogdGFzayA9IHN0YXRpY19jYXN0PE5l
dHdvcmtEYXRhVGFzayo+KHVzZXJEYXRhKTsKKyAgICAgICAgYXV0byogdGFzayA9IHN0YXRpY19j
YXN0PE5ldHdvcmtEYXRhVGFza1NvdXAqPih1c2VyRGF0YSk7CiAgICAgICAgIEdPdXRwdXRTdHJl
YW0qIG91dHB1dFN0cmVhbSA9IEdfT1VUUFVUX1NUUkVBTShzb3VyY2UpOwogICAgICAgICBSRUxF
QVNFX0FTU0VSVCh0YXNrLT5tX2Rvd25sb2FkT3V0cHV0U3RyZWFtLmdldCgpID09IG91dHB1dFN0
cmVhbSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhc2stPm1fY2FuY2VsbGFibGUuZ2V0KCkg
PT0gY2FuY2VsbGFibGUpOwpAQCAtOTg1LDcgKzkyOCw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNr
Ojp3cml0ZURvd25sb2FkKCkKICNlbmRpZgogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlk
V3JpdGVEb3dubG9hZChnc2l6ZSBieXRlc1dyaXR0ZW4pCit2b2lkIE5ldHdvcmtEYXRhVGFza1Nv
dXA6OmRpZFdyaXRlRG93bmxvYWQoZ3NpemUgYnl0ZXNXcml0dGVuKQogewogICAgIEFTU0VSVChi
eXRlc1dyaXR0ZW4gPT0gbV9yZWFkQnVmZmVyLnNpemUoKSk7CiAgICAgYXV0byogZG93bmxvYWQg
PSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQo
bV9wZW5kaW5nRG93bmxvYWRJRCk7CkBAIC05OTQsNyArOTM3LDcgQEAgdm9pZCBOZXR3b3JrRGF0
YVRhc2s6OmRpZFdyaXRlRG93bmxvYWQoZ3NpemUgYnl0ZXNXcml0dGVuKQogICAgIHJlYWQoKTsK
IH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaERvd25sb2FkKCkKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrU291cDo6ZGlkRmluaXNoRG93bmxvYWQoKQogewogICAgIEFTU0VSVCghbV9y
ZXNwb25zZS5pc051bGwoKSk7CiAgICAgQVNTRVJUKG1fZG93bmxvYWRPdXRwdXRTdHJlYW0pOwpA
QCAtMTAyMSw3ICs5NjQsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoRG93bmxv
YWQoKQogICAgIGRvd25sb2FkLT5kaWRGaW5pc2goKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRh
c2s6OmRpZEZhaWxEb3dubG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrU291cDo6ZGlkRmFpbERvd25sb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVy
cm9yKQogewogICAgIGNsZWFyUmVxdWVzdCgpOwogICAgIGNsZWFuRG93bmxvYWRGaWxlcygpOwpA
QCAtMTAzNCw3ICs5NzcsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmFpbERvd25sb2Fk
KGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogICAgIH0KIH0KIAotdm9pZCBOZXR3b3JrRGF0
YVRhc2s6OmNsZWFuRG93bmxvYWRGaWxlcygpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNs
ZWFuRG93bmxvYWRGaWxlcygpCiB7CiAgICAgaWYgKG1fZG93bmxvYWREZXN0aW5hdGlvbkZpbGUp
IHsKICAgICAgICAgZ19maWxlX2RlbGV0ZShtX2Rvd25sb2FkRGVzdGluYXRpb25GaWxlLmdldCgp
LCBudWxscHRyLCBudWxscHRyKTsKQEAgLTEwNDYsNyArOTg5LDcgQEAgdm9pZCBOZXR3b3JrRGF0
YVRhc2s6OmNsZWFuRG93bmxvYWRGaWxlcygpCiAgICAgfQogfQogCi12b2lkIE5ldHdvcmtEYXRh
VGFzazo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrU291cDo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBp
ZiAoaXNEb3dubG9hZCgpKSB7CiAgICAgICAgIGRpZEZhaWxEb3dubG9hZChwbGF0Zm9ybURvd25s
b2FkTmV0d29ya0Vycm9yKGVycm9yLmVycm9yQ29kZSgpLCBlcnJvci5mYWlsaW5nVVJMKCksIGVy
cm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkpKTsKQEAgLTEwNTksNyArMTAwMiw3IEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogfQog
CiAjaWYgRU5BQkxFKFdFQl9USU1JTkcpCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6bmV0d29ya0V2
ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBHU29ja2V0Q2xpZW50RXZlbnQg
ZXZlbnQsIEdJT1N0cmVhbSosIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrU291cDo6bmV0d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdl
LCBHU29ja2V0Q2xpZW50RXZlbnQgZXZlbnQsIEdJT1N0cmVhbSosIE5ldHdvcmtEYXRhVGFza1Nv
dXAqIHRhc2spCiB7CiAgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8
fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KQog
ICAgICAgICByZXR1cm47CkBAIC0xMDY4LDcgKzEwMTEsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFz
azo6bmV0d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBHU29ja2V0
Q2xpZQogICAgIHRhc2stPm5ldHdvcmtFdmVudChldmVudCk7CiB9CiAKLXZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpuZXR3b3JrRXZlbnQoR1NvY2tldENsaWVudEV2ZW50IGV2ZW50KQordm9pZCBOZXR3
b3JrRGF0YVRhc2tTb3VwOjpuZXR3b3JrRXZlbnQoR1NvY2tldENsaWVudEV2ZW50IGV2ZW50KQog
ewogICAgIGRvdWJsZSBkZWx0YVRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygp
IC0gbV9zdGFydFRpbWU7CiAgICAgYXV0byYgbG9hZFRpbWluZyA9IG1fcmVzcG9uc2UubmV0d29y
a0xvYWRUaW1pbmcoKTsKQEAgLTExMDUsNyArMTA0OCw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNr
OjpuZXR3b3JrRXZlbnQoR1NvY2tldENsaWVudEV2ZW50IGV2ZW50KQogfQogCiAjaWYgU09VUF9D
SEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpzdGFydGluZ0Nh
bGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQor
dm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzdGFydGluZ0NhbGxiYWNrKFNvdXBNZXNzYWdlKiBz
b3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYXNrU291cCogdGFzaykKIHsKICAgICBpZiAodGFzay0+
c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNv
bXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTExMTQsOSAr
MTA1Nyw5IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpzdGFydGluZ0NhbGxiYWNrKFNvdXBNZXNz
YWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYXNrCiAgICAgdGFzay0+ZGlkU3RhcnRSZXF1
ZXN0KCk7CiB9CiAjZWxzZQotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3RTdGFydGVkQ2Fs
bGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291
cFNvY2tldCosIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291
cDo6cmVxdWVzdFN0YXJ0ZWRDYWxsYmFjayhTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3Nh
Z2UqIHNvdXBNZXNzYWdlLCBTb3VwU29ja2V0KiwgTmV0d29ya0RhdGFUYXNrU291cCogdGFzaykK
IHsKLSAgICBBU1NFUlQoc2Vzc2lvbiA9PSB0YXNrLT5tX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCkp
OworICAgIEFTU0VSVChzZXNzaW9uID09IHRhc2stPmRvd25jYXN0PE5ldHdvcmtTZXNzaW9uU291
cD4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpKTsKICAgICBpZiAoc291cE1lc3NhZ2Ug
IT0gdGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMTI3
LDEyICsxMDcwLDEyIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0U3RhcnRlZENhbGxi
YWNrKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSoKIH0KICNlbmRpZgogCi12b2lk
IE5ldHdvcmtEYXRhVGFzazo6ZGlkU3RhcnRSZXF1ZXN0KCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
U291cDo6ZGlkU3RhcnRSZXF1ZXN0KCkKIHsKICAgICBtX3Jlc3BvbnNlLm5ldHdvcmtMb2FkVGlt
aW5nKCkucmVxdWVzdFN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSAtIG1f
c3RhcnRUaW1lOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVzdGFydGVkQ2FsbGJhY2so
U291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5l
dHdvcmtEYXRhVGFza1NvdXA6OnJlc3RhcnRlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVz
c2FnZSwgTmV0d29ya0RhdGFUYXNrU291cCogdGFzaykKIHsKICAgICAvLyBDYWxsZWQgZWFjaCB0
aW1lIHRoZSBtZXNzYWdlIGlzIGdvaW5nIHRvIGJlIHNlbnQgYWdhaW4gZXhjZXB0IHRoZSBmaXJz
dCB0aW1lLgogICAgIC8vIFRoaXMgaGFwcGVucyB3aGVuIGxpYnNvdXAgaGFuZGxlcyBIVFRQIGF1
dGhlbnRpY2F0aW9uLgpAQCAtMTE0Myw3ICsxMDg2LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6
OnJlc3RhcnRlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFU
YXMKICAgICB0YXNrLT5kaWRSZXN0YXJ0KCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpk
aWRSZXN0YXJ0KCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkUmVzdGFydCgpCiB7CiAg
ICAgbV9zdGFydFRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRh
c2tTb3VwLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRh
VGFza1NvdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGZhMWEyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3
b3JrRGF0YVRhc2tTb3VwLmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJO
ZXR3b3JrRGF0YVRhc2suaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Byb3RlY3Rpb25TcGFjZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUgPHd0Zi9SdW5M
b29wLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgTmV0d29ya0RhdGFUYXNrU291cCBmaW5hbCA6IHB1YmxpYyBOZXR3b3JrRGF0
YVRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya0RhdGFUYXNrPiBjcmVhdGUo
TmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFdlYkNvcmU6OlN0b3JlZENy
ZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xp
Y3kgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9I
VFRQUmVkaXJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3Jr
RGF0YVRhc2tTb3VwKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMs
IHNob3VsZENvbnRlbnRTbmlmZiwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCkpOworICAgIH0KKworICAgIH5OZXR3b3JrRGF0YVRhc2tTb3VwKCk7CisKKyAgICB2b2lk
IGludmFsaWRhdGVBbmRDYW5jZWwoKTsKKworcHJpdmF0ZToKKyAgICBOZXR3b3JrRGF0YVRhc2tT
b3VwKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMsIFdlYkNvcmU6
OkNvbnRlbnRTbmlmZmluZ1BvbGljeSwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1Rv
SFRUUFJlZGlyZWN0KTsKKworICAgIHZvaWQgc3VzcGVuZCgpIG92ZXJyaWRlOworICAgIHZvaWQg
Y2FuY2VsKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXN1bWUoKSBvdmVycmlkZTsKKyAgICBOZXR3
b3JrRGF0YVRhc2s6OlN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNl
dFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSYsIGJvb2wgLyphbGxvd092ZXJ3cml0ZSovKSBvdmVycmlkZTsKKyAgICBT
dHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgdGlt
ZW91dEZpcmVkKCk7CisgICAgdm9pZCBzdGFydFRpbWVvdXQoKTsKKyAgICB2b2lkIHN0b3BUaW1l
b3V0KCk7CisKKyAgICB2b2lkIGNyZWF0ZVJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0Jik7CisgICAgdm9pZCBjbGVhclJlcXVlc3QoKTsKKyAgICBzdGF0aWMgdm9pZCBzZW5k
UmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFU
YXNrU291cCopOworICAgIHZvaWQgZGlkU2VuZFJlcXVlc3QoR1JlZlB0cjxHSW5wdXRTdHJlYW0+
JiYpOworICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisKKyAgICBzdGF0aWMgdm9pZCB0
bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBHUGFyYW1TcGVjKiwgTmV0d29y
a0RhdGFUYXNrU291cCopOworICAgIHZvaWQgdGxzRXJyb3JzQ2hhbmdlZCgpOworCisgICAgdm9p
ZCBhcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYp
OworICAgIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZUNhbGxiYWNrKFNvdXBTZXNzaW9uKiwgU291
cE1lc3NhZ2UqLCBTb3VwQXV0aCosIGdib29sZWFuIHJldHJ5aW5nLCBOZXR3b3JrRGF0YVRhc2tT
b3VwKik7CisgICAgdm9pZCBhdXRoZW50aWNhdGUoV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmJik7CisgICAgdm9pZCBjb250aW51ZUF1dGhlbnRpY2F0ZShXZWJDb3JlOjpBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYmKTsKKworICAgIHN0YXRpYyB2b2lkIHNraXBJbnB1dFN0cmVhbUZv
clJlZGlyZWN0aW9uQ2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29y
a0RhdGFUYXNrU291cCopOworICAgIHZvaWQgc2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24o
KTsKKyAgICB2b2lkIGRpZEZpbmlzaFNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCk7Cisg
ICAgYm9vbCBzaG91bGRTdGFydEhUVFBSZWRpcmVjdGlvbigpOworICAgIHZvaWQgY29udGludWVI
VFRQUmVkaXJlY3Rpb24oKTsKKworICAgIHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHSW5wdXRT
dHJlYW0qLCBHQXN5bmNSZXN1bHQqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCBy
ZWFkKCk7CisgICAgdm9pZCBkaWRSZWFkKGdzc2l6ZSBieXRlc1JlYWQpOworICAgIHZvaWQgZGlk
RmluaXNoUmVhZCgpOworCisgICAgc3RhdGljIHZvaWQgcmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2so
U291cE11bHRpcGFydElucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNr
U291cCopOworICAgIHZvaWQgcmVxdWVzdE5leHRQYXJ0KCk7CisgICAgdm9pZCBkaWRSZXF1ZXN0
TmV4dFBhcnQoR1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYpOworICAgIHZvaWQgZGlkRmluaXNoUmVx
dWVzdE5leHRQYXJ0KCk7CisKKyAgICBzdGF0aWMgdm9pZCBnb3RIZWFkZXJzQ2FsbGJhY2soU291
cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCBkaWRHZXRIZWFkZXJz
KCk7CisKKyAgICBzdGF0aWMgdm9pZCB3cm90ZUJvZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2Uq
LCBTb3VwQnVmZmVyKiwgTmV0d29ya0RhdGFUYXNrU291cCopOworICAgIHZvaWQgZGlkV3JpdGVC
b2R5RGF0YSh1aW50NjRfdCBieXRlc1NlbnQpOworCisgICAgdm9pZCBkb3dubG9hZCgpOworICAg
IHN0YXRpYyB2b2lkIHdyaXRlRG93bmxvYWRDYWxsYmFjayhHT3V0cHV0U3RyZWFtKiwgR0FzeW5j
UmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrU291cCopOworICAgIHZvaWQgd3JpdGVEb3dubG9hZCgp
OworICAgIHZvaWQgZGlkV3JpdGVEb3dubG9hZChnc2l6ZSBieXRlc1dyaXR0ZW4pOworICAgIHZv
aWQgZGlkRmFpbERvd25sb2FkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKKyAgICB2
b2lkIGRpZEZpbmlzaERvd25sb2FkKCk7CisgICAgdm9pZCBjbGVhbkRvd25sb2FkRmlsZXMoKTsK
KworICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisKKyNp
ZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBzdGF0aWMgdm9pZCBuZXR3b3JrRXZlbnRDYWxsYmFj
ayhTb3VwTWVzc2FnZSosIEdTb2NrZXRDbGllbnRFdmVudCwgR0lPU3RyZWFtKiwgTmV0d29ya0Rh
dGFUYXNrU291cCopOworICAgIHZvaWQgbmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCk7
CisjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKKyAgICBzdGF0aWMgdm9pZCBzdGFy
dGluZ0NhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrU291cCopOworI2Vsc2UK
KyAgICBzdGF0aWMgdm9pZCByZXF1ZXN0U3RhcnRlZENhbGxiYWNrKFNvdXBTZXNzaW9uKiwgU291
cE1lc3NhZ2UqLCBTb3VwU29ja2V0KiwgTmV0d29ya0RhdGFUYXNrU291cCopOworI2VuZGlmCisg
ICAgdm9pZCBkaWRTdGFydFJlcXVlc3QoKTsKKyAgICBzdGF0aWMgdm9pZCByZXN0YXJ0ZWRDYWxs
YmFjayhTb3VwTWVzc2FnZSosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKKyAgICB2b2lkIGRpZFJl
c3RhcnQoKTsKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKKworICAgIFN0YXRlIG1fc3Rh
dGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07CisgICAgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9s
aWN5IG1fc2hvdWxkQ29udGVudFNuaWZmOworICAgIEdSZWZQdHI8U291cFJlcXVlc3Q+IG1fc291
cFJlcXVlc3Q7CisgICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4gbV9zb3VwTWVzc2FnZTsKKyAgICBH
UmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKKyAgICBHUmVmUHRyPFNvdXBNdWx0
aXBhcnRJbnB1dFN0cmVhbT4gbV9tdWx0aXBhcnRJbnB1dFN0cmVhbTsKKyAgICBHUmVmUHRyPEdD
YW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKKyAgICBHUmVmUHRyPEdBc3luY1Jlc3VsdD4gbV9w
ZW5kaW5nUmVzdWx0OworICAgIFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSBtX3Byb3RlY3Rpb25T
cGFjZUZvclBlcnNpc3RlbnRTdG9yYWdlOworICAgIFdlYkNvcmU6OkNyZWRlbnRpYWwgbV9jcmVk
ZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2U7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSBtX3Jlc3BvbnNlOworICAgIFZlY3RvcjxjaGFyPiBtX3JlYWRCdWZmZXI7CisgICAgdW5zaWdu
ZWQgbV9yZWRpcmVjdENvdW50IHsgMCB9OworICAgIHVpbnQ2NF90IG1fYm9keURhdGFUb3RhbEJ5
dGVzU2VudCB7IDAgfTsKKyAgICBHUmVmUHRyPEdGaWxlPiBtX2Rvd25sb2FkRGVzdGluYXRpb25G
aWxlOworICAgIEdSZWZQdHI8R0ZpbGU+IG1fZG93bmxvYWRJbnRlcm1lZGlhdGVGaWxlOworICAg
IEdSZWZQdHI8R091dHB1dFN0cmVhbT4gbV9kb3dubG9hZE91dHB1dFN0cmVhbTsKKyAgICBib29s
IG1fYWxsb3dPdmVyd3JpdGVEb3dubG9hZCB7IGZhbHNlIH07CisjaWYgRU5BQkxFKFdFQl9USU1J
TkcpCisgICAgZG91YmxlIG1fc3RhcnRUaW1lIHsgMCB9OworI2VuZGlmCisgICAgUnVuTG9vcDo6
VGltZXI8TmV0d29ya0RhdGFUYXNrU291cD4gbV90aW1lb3V0U291cmNlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAKaW5kZXggMzRjMmM3Ny4uYWM4Mjg3MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vz
c2lvblNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya1Nlc3Npb25Tb3VwLmNwcApAQCAtMjQsOCArMjQsOSBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIk5ldHdvcmtT
ZXNzaW9uU291cC5oIgogCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrU291cC5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9T
b3VwTmV0d29ya1Nlc3Npb24uaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtMzQs
NDcgKzM1LDI0IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotUmVmPE5ldHdvcmtTZXNzaW9uPiBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKFR5cGUgdHlw
ZSwgU2Vzc2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKikKK05ldHdvcmtT
ZXNzaW9uU291cDo6TmV0d29ya1Nlc3Npb25Tb3VwKFNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAg
OiBOZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
TmV0d29ya1Nlc3Npb24odHlwZSwgc2Vzc2lvbklELCBudWxscHRyKSk7CiB9CiAKLU5ldHdvcmtT
ZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbjo6ZGVmYXVsdFNlc3Npb24oKQorTmV0d29ya1Nlc3Npb25T
b3VwOjp+TmV0d29ya1Nlc3Npb25Tb3VwKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiA9ICZOZXR3b3JrU2Vzc2lvbjo6
Y3JlYXRlKE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpOb3JtYWwsIFNlc3Npb25JRDo6ZGVmYXVsdFNl
c3Npb25JRCgpLCBudWxscHRyKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuICpzZXNzaW9uOwogfQog
Ci1OZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNl
c3Npb24oKSBjb25zdAotewotICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoc3RvcmFnZVNlc3Npb24pOwotICAgIHJldHVybiAqc3RvcmFnZVNlc3Npb247Ci19Ci0KLU5l
dHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihUeXBlIHR5cGUsIFNlc3Npb25JRCBzZXNzaW9u
SUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopCi0gICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQp
Ci17Ci19Ci0KLU5ldHdvcmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24oKQotewotfQotCi1Tb3Vw
U2Vzc2lvbiogTmV0d29ya1Nlc3Npb246OnNvdXBTZXNzaW9uKCkgY29uc3QKK1NvdXBTZXNzaW9u
KiBOZXR3b3JrU2Vzc2lvblNvdXA6OnNvdXBTZXNzaW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24o
KTsKIH0KIAotdm9pZCBOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCgpCit2b2lk
IE5ldHdvcmtTZXNzaW9uU291cDo6aW52YWxpZGF0ZUFuZENhbmNlbCgpCiB7CiAgICAgZm9yIChh
dXRvKiB0YXNrIDogbV9kYXRhVGFza1NldCkKICAgICAgICAgdGFzay0+aW52YWxpZGF0ZUFuZENh
bmNlbCgpOwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uOjpjbGVhckNyZWRlbnRpYWxzKCkKLXsK
LX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5kNzVmYjg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuaApAQCAtMCwwICsx
LDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorCit0eXBlZGVmIHN0cnVjdCBfU291cFNlc3Npb24gU291cFNlc3Npb247
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrRGF0YVRhc2tTb3VwOworCitj
bGFzcyBOZXR3b3JrU2Vzc2lvblNvdXAgZmluYWwgOiBwdWJsaWMgTmV0d29ya1Nlc3Npb24gewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya1Nlc3Npb24+IGNyZWF0ZShXZWJDb3JlOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
TmV0d29ya1Nlc3Npb25Tb3VwKHNlc3Npb25JRCkpOworICAgIH0KKyAgICB+TmV0d29ya1Nlc3Np
b25Tb3VwKCk7CisKKyAgICBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdDsKKworICAg
IHZvaWQgcmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soTmV0d29ya0RhdGFUYXNrU291cCYgdGFzaykg
eyBtX2RhdGFUYXNrU2V0LmFkZCgmdGFzayk7IH0KKyAgICB2b2lkIHVucmVnaXN0ZXJOZXR3b3Jr
RGF0YVRhc2soTmV0d29ya0RhdGFUYXNrU291cCYgdGFzaykgeyBtX2RhdGFUYXNrU2V0LnJlbW92
ZSgmdGFzayk7IH0KKworcHJpdmF0ZToKKyAgICBOZXR3b3JrU2Vzc2lvblNvdXAoV2ViQ29yZTo6
U2Vzc2lvbklEKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpIG92ZXJyaWRlOwor
CisgICAgSGFzaFNldDxOZXR3b3JrRGF0YVRhc2tTb3VwKj4gbV9kYXRhVGFza1NldDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAuY3BwIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAuY3Bw
CmluZGV4IDhmYjY0ZmEuLjJkYmExMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0U291
cC5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5z
dXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmVuc3VyZVByaXZhdGVCcm93c2lu
Z1Nlc3Npb24oc2Vzc2lvbklELCBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkp
KTsKLSAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNz
aW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Npb246OlR5cGU6OkVwaGVtZXJhbCwgc2Vzc2lvbklELCBu
dWxscHRyKSk7CisgICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3
b3JrU2Vzc2lvbjo6Y3JlYXRlKHNlc3Npb25JRCkpOwogfQogCiBOZXR3b3JrU3RvcmFnZVNlc3Np
b24mIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lvbigpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGJhYmYyYTcuLjdkOWEwMzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtRWZsLmNtYWtlCkBAIC0yNDksNiArMjQ5LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNM
VURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL0N1c3Rv
bVByb3RvY29scy9zb3VwIgogICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9Eb3du
bG9hZHMvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvZWZsIgorICAg
ICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9zb3VwIgogICAgICIke1dFQktJVDJfRElS
fS9OZXR3b3JrUHJvY2Vzcy91bml4IgogICAgICIke1dFQktJVDJfRElSfS9QbGF0Zm9ybS9lZmwi
CiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9BUEkvYy9lZmwiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlCmluZGV4IDZmYmRhMjIuLjc1OTU5YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC04NDUsNiArODQ1LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9S
SUVTCiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9z
b3VwIgogICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291cCIK
ICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvZ3RrIgorICAgICIke1dFQktJVDJf
RElSfS9OZXR3b3JrUHJvY2Vzcy9zb3VwIgogICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJv
Y2Vzcy91bml4IgogICAgICIke1dFQktJVDJfRElSfS9QbGF0Zm9ybS9JUEMvZ2xpYiIKICAgICAi
JHtXRUJLSVQyX0RJUn0vU2hhcmVkL0FQSS9jL2d0ayIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhN2VhNjczLi4zNGIxZGFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xMDU1LDEzICsxMDU1LDE3IEBACiAJCTVDMTQyNzEzMUMyM0Y4OUUwMEQ0MTE4MyAvKiBE
b3dubG9hZENvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUMxNDI3MDkxQzIzRjg2OTAwRDQxMTgzIC8qIERvd25sb2FkQ29jb2EubW0gKi87IH07
CiAJCTVDMTQyNzE4MUMyM0Y4QjcwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQyNzE0MUMy
M0Y4QjAwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXIuaCAqLzsgfTsKIAkJNUMxNDI3
MUQxQzIzRjhDRjAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29sTWFuYWdlckNvY29hLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMxNDI3MUIxQzIzRjhD
QzAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29sTWFuYWdlckNvY29hLm1tICovOyB9OworCQk1QzIw
Q0JBMDFCQjFFQ0Q4MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMyMENCOUUxQkIwREQxODAwODk1
QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLzsgfTsKIAkJNUMyMENCOUQxQkIwRENGQTAw
ODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzIwQ0I5QjFCQjBEQ0QyMDA4OTVCQjEgLyogTmV0d29y
a1Nlc3Npb25Db2NvYS5tbSAqLzsgfTsKIAkJNUMyMENCQTAxQkIxRUNEODAwODk1QkIxIC8qIE5l
dHdvcmtTZXNzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1QzIwQ0I5RTFCQjBERDE4MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb24uaCAqLzsgfTsK
KwkJNUMyMENCOUQxQkIwRENGQTAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMjBDQjlCMUJCMERDRDIw
MDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgKi87IH07CiAJCTVDMjk4REEwMUMzREYwMjEw
MDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxvYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDVDMjk4RDlFMUMzREVGMjkwMDQ3MEFGRSAvKiBQZW5kaW5nRG93
bmxvYWQuaCAqLzsgfTsKIAkJNUM3NzA2NzQxRDExMzgzODAwMTI3MDBGIC8qIFdlYlNvY2tldFBy
b3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDNzcwNjczMUQxMTFEOEIwMDEyNzAwRiAvKiBXZWJTb2NrZXRQcm92aWRlci5jcHAgKi87IH07
CiAJCTVDNzk0MzlCMUQ3NjJENjIwMDMxMDJENCAvKiBXZWJLaXQySW5pdGlhbGl6ZUNvY29hLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM3OTQzOUEx
RDc2MkNERjAwMzEwMkQ0IC8qIFdlYktpdDJJbml0aWFsaXplQ29jb2EubW0gKi87IH07CiAJCTVD
ODVDNzg4MUMzRjIzQ0UwMDYxQTRGQSAvKiBQZW5kaW5nRG93bmxvYWQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM4NUM3ODYxQzNGMjNDNTAwNjFB
NEZBIC8qIFBlbmRpbmdEb3dubG9hZC5jcHAgKi87IH07CisJCTVDQkM5QjhEMUM2NTI3OUMwMEE4
RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCQzlCODkxQzY1MjRBNTAwQThGRENGIC8qIE5ldHdvcmtE
YXRhVGFza0NvY29hLmggKi87IH07CiAJCTVDQkM5QjhEMUM2NTI3OUMwMEE4RkRDRiAvKiBOZXR3
b3JrRGF0YVRhc2tDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDQkM5QjhCMUM2NTI1NzMwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2Nv
YS5tbSAqLzsgfTsKKwkJNUNCQzlCOEQxQzY1Mjc5QzAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFz
ay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0JD
OUI4QjFDNjUyNTczMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLzsgfTsKIAkJNUNC
QzlCOEUxQzY1MkNBMDAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFzay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCQzlCODkxQzY1MjRBNTAwQThGRENG
IC8qIE5ldHdvcmtEYXRhVGFzay5oICovOyB9OwogCQk1Q0U4NUIyMDFDODhFNjRCMDA3MEJGQ0Ug
LyogUGluZ0xvYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVDRTg1QjFGMUM4OEU2NDMwMDcwQkZDRSAvKiBQaW5nTG9hZC5oICovOyB9OwogCQk2NTAx
QkQxQTEyRjEyNDM0MDBFOUYyNDggLyogV0tCdW5kbGVJbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODZGMTcxMkYxMUQ3QjAwQjdE
RDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCAqLzsgfTsKQEAgLTMxMzcsMTQgKzMxNDEsMTgg
QEAKIAkJNUMxNDI3MTQxQzIzRjhCMDAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29sTWFuYWdlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDdXN0b21Qcm90b2NvbE1hbmFnZXIu
aDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9DdXN0b21Qcm90b2NvbE1h
bmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMxNDI3MTUxQzIzRjhCMDAw
RDQxMTgzIC8qIEN1c3RvbVByb3RvY29sTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IG5hbWUgPSBDdXN0b21Qcm90b2NvbE1hbmFnZXIubWVzc2FnZXMuaW47IHBhdGggPSBOZXR3
b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLm1lc3NhZ2Vz
LmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzE0MjcxQjFDMjNGOENDMDBENDEx
ODMgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBDdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5tbTsgcGF0aCA9
IE5ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9Db2NvYS9DdXN0b21Qcm90b2NvbE1hbmFn
ZXJDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUMyMENCOUUxQkIwREQx
ODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1QzIwQ0I5QjFCQjBEQ0QyMDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE5ldHdvcmtTZXNzaW9uQ29jb2Eu
bW07IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzIwQ0I5RTFCQjBERDE4MDA4OTVCQjEgLyog
TmV0d29ya1Nlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29y
a1Nlc3Npb24uaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDMjBDQjlCMUJCMERDRDIwMDg5NUJCMSAvKiBOZXR3
b3JrU2Vzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBO
ZXR3b3JrU2Vzc2lvbi5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMjk4RDlFMUMzREVGMjkwMDQ3MEFG
RSAvKiBQZW5kaW5nRG93bmxvYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
UGVuZGluZ0Rvd25sb2FkLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGlu
Z0Rvd25sb2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNzcwNjczMUQxMTFE
OEIwMDEyNzAwRiAvKiBXZWJTb2NrZXRQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBXZWJTb2NrZXRQcm92aWRlci5jcHA7IHBhdGggPSBOZXR3b3JrL1dl
YlNvY2tldFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM3OTQz
OUExRDc2MkNERjAwMzEwMkQ0IC8qIFdlYktpdDJJbml0aWFsaXplQ29jb2EubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJLaXQySW5pdGlhbGl6ZUNvY29hLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzdDODhEQzFEMEY0MUEwMDA5RDJGNkQg
LyogV2ViU29ja2V0UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
V2ViU29ja2V0UHJvdmlkZXIuaDsgcGF0aCA9IE5ldHdvcmsvV2ViU29ja2V0UHJvdmlkZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM4NUM3ODYxQzNGMjNDNTAwNjFBNEZBIC8q
IFBlbmRpbmdEb3dubG9hZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBQZW5kaW5nRG93bmxvYWQuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1Bl
bmRpbmdEb3dubG9hZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQkM5QjhC
MUM2NTI1NzMwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0d29ya0RhdGFUYXNrLmNwcDsgcGF0aCA9IE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTVDQkM5Qjg5MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0RhdGFUYXNrLmg7IHBhdGggPSBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNUNCQzlCODkxQzY1MjRBNTAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFza0NvY29hLmg7IHBh
dGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0JDOUI4QjFDNjUyNTczMDBBOEZEQ0YgLyogTmV0d29y
a0RhdGFUYXNrQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBOZXR3b3JrRGF0YVRhc2tDb2NvYS5tbTsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtEYXRhVGFza0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0U4
NUIxRjFDODhFNjQzMDA3MEJGQ0UgLyogUGluZ0xvYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gUGluZ0xvYWQuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL1BpbmdMb2FkLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVENDQyQTU1MTZENTg1NjcwMEFDMzMzMSAv
KiBQbHVnaW5TZXJ2aWNlLmVudGl0bGVtZW50cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gUGx1Z2luU2VydmljZS5lbnRp
dGxlbWVudHM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDU0LDYgKzU0NjIsNyBA
QAogCQkJCTVDMTQyNkU1MUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkUGFy
YW1ldGVycy5jcHAgKi8sCiAJCQkJNUMxNDI2RTYxQzIzRjgwNTAwRDQxMTgzIC8qIE5ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmggKi8sCiAJCQkJNUMyMENCOUUxQkIwREQxODAwODk1QkIx
IC8qIE5ldHdvcmtTZXNzaW9uLmggKi8sCisJCQkJNUMyMENCOUUxQkIwREQxODAwODk1QkIxIC8q
IE5ldHdvcmtTZXNzaW9uLmNwcCAqLywKIAkJCQk1Q0U4NUIxRjFDODhFNjQzMDA3MEJGQ0UgLyog
UGluZ0xvYWQuaCAqLywKIAkJCQlFMUI3ODQ3MDE2M0YyNDY5MDAwN0I2OTIgLyogUmVtb3RlTmV0
d29ya2luZ0NvbnRleHQuaCAqLywKIAkJCSk7CkBAIC01ODQ1LDggKzU4NTQsMTAgQEAKIAkJN0VD
NEYwRjgxOEU0QTkyMjAwODA1NkFGIC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1Q0JDOUI4QjFDNjUyNTczMDBBOEZEQ0YgLyogTmV0d29y
a0RhdGFUYXNrQ29jb2EuaCAqLywKIAkJCQk1Q0JDOUI4QjFDNjUyNTczMDBBOEZEQ0YgLyogTmV0
d29ya0RhdGFUYXNrQ29jb2EubW0gKi8sCiAJCQkJN0VDNEYwRjkxOEU0QTk0NTAwODA1NkFGIC8q
IE5ldHdvcmtQcm9jZXNzQ29jb2EubW0gKi8sCisJCQkJNUMyMENCOUIxQkIwRENEMjAwODk1QkIx
IC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLywKIAkJCQk1QzIwQ0I5QjFCQjBEQ0QyMDA4OTVC
QjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gY29jb2E7
CkBAIC03NzI4LDYgKzc3MzksNyBAQAogCQkJCTUxM0ExNjREMTYzMEE5QkYwMDVEN0QyMiAvKiBO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFERDlG
MjkxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQkM5QjhFMUM2NTJDQTAwMEE4RkRDRiAvKiBOZXR3
b3JrRGF0YVRhc2suaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQkM5QjhFMUM2NTJDQTAwMEE4RkRD
RiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM5OTAyMDMx
QkU5QTAyQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0Q0
NTRENzFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTgzOTE0OTY1MUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMu
aCBpbiBIZWFkZXJzICovLApAQCAtNzc0Myw2ICs3NzU1LDcgQEAKIAkJCQlFMTUyNTUxQjE3MDEx
ODE5MDAzRDdBREIgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVDMTQyNkYwMUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMyMENCQTAxQkIxRUNEODAwODk1QkIx
IC8qIE5ldHdvcmtTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk1QzIwQ0JBMDFCQjFFQ0Q4
MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFB
MkVDNTYxNDg5OUMwOTAwODEwRDcxIC8qIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTMxMjYxRjE0OEZGODJDMDBCQTJBMzkgLyogTm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUEyRUM1
MjE0ODk5ODE5MDA4MTBENzEgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
UHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtOTIwNCw2ICs5MjE3LDcgQEAKIAkJCQk4MzEwNDI4
QzFCRDZCNjZGMDBBNzE1RTQgLyogTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTEzQTE2NEMxNjMwQTlCRjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxREQ5RjI4MTYzNjdE
QTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZl
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0JDOUI4RDFDNjUyNzlDMDBBOEZEQ0YgLyogTmV0
d29ya0RhdGFUYXNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQkM5QjhEMUM2NTI3OUMwMEE4
RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTgzOTkw
MjAyMUJFOUEwMkIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4MzZFRUI4MDFCRTlFQzlFMDA2QjRCODIgLyogTmV0d29ya0xvYWRNYWMubW0gaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCmlu
ZGV4IDFjYzE1YzYuLjU5YzYwOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0KKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dC5tbQpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFdlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25J
RAogCiAgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNz
aW9uKHNlc3Npb25JRCwgYmFzZSArICcuJyArIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNz
aW9uSUQoKSkpOwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCi0gICAgYXV0byBuZXR3b3JrU2Vz
c2lvbiA9IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Npb246OlR5cGU6OkVwaGVt
ZXJhbCwgc2Vzc2lvbklELCBudWxscHRyKTsKKyAgICBhdXRvIG5ldHdvcmtTZXNzaW9uID0gTmV0
d29ya1Nlc3Npb246OmNyZWF0ZShzZXNzaW9uSUQpOwogICAgIFNlc3Npb25UcmFja2VyOjpzZXRT
ZXNzaW9uKHNlc3Npb25JRCwgV1RGTW92ZShuZXR3b3JrU2Vzc2lvbikpOwogI2VuZGlmCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAv
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKaW5kZXgg
MmY5ODcxYy4uZTZiNTY0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0LmNwcApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIFdlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25J
RAogICAgICAgICByZXR1cm47CiAKICAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmVuc3VyZVBy
aXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklELCBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQu
c2Vzc2lvbklEKCkpKTsKLSAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQs
IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Npb246OlR5cGU6OkVwaGVtZXJhbCwg
c2Vzc2lvbklELCBudWxscHRyKSk7CisgICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vz
c2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKHNlc3Npb25JRCkpOwogfQogCiB2b2lkIFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNldENvb2tpZUFjY2VwdFBvbGljeUZvckFsbENvbnRl
eHRzKEhUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292341</attachid>
            <date>2016-10-21 04:07:51 -0700</date>
            <delta_ts>2016-10-24 01:31:45 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>wk2-network-session-subclass.diff</filename>
            <type>text/plain</type>
            <size>109293</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggMWFjMTA2Yy4uNmJkYTNiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTE4MiwxMCArMTgyLDEyIEBAIGVuZGlmICgpCiAKIHNldChOZXR3b3JrUHJvY2Vz
c19DT01NT05fU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKICAg
ICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3Jt
U3RyYXRlZ2llcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
Y3BwCisgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCiAKICAgICBOZXR3b3Jr
UHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZGE0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCkBAIC0wLDAgKzEsMTE0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtE
YXRhVGFzay5oIgorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKworI2luY2x1ZGUgIk5ldHdv
cmtTZXNzaW9uLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworI2lmIFBMQVRGT1JN
KENPQ09BKQorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCisjZW5kaWYKKyNpZiBV
U0UoU09VUCkKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2tTb3VwLmgiCisjZW5kaWYKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWY8TmV0d29y
a0RhdGFUYXNrPiBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lv
biwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENvbnRlbnRTbmlm
ZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9u
SFRUUFNUb0hUVFBSZWRpcmVjdCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZXR1cm4g
TmV0d29ya0RhdGFUYXNrQ29jb2E6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIHN0
b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QpOworI2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAgcmV0dXJu
IE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIHN0
b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QpOworI2VuZGlmCit9CisKK05ldHdvcmtEYXRhVGFzazo6TmV0
d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGll
bnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxz
LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgYm9vbCBzaG91bGRDbGVhclJl
ZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQorICAgIDogbV9mYWlsdXJlVGltZXIoKnRoaXMs
ICZOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKQorICAgICwgbV9zZXNzaW9uKHNl
c3Npb24pCisgICAgLCBtX2NsaWVudCgmY2xpZW50KQorICAgICwgbV9zdG9yZWRDcmVkZW50aWFs
cyhzdG9yZWRDcmVkZW50aWFscykKKyAgICAsIG1fbGFzdEhUVFBNZXRob2QocmVxdWVzdFdpdGhD
cmVkZW50aWFscy5odHRwTWV0aG9kKCkpCisgICAgLCBtX2ZpcnN0UmVxdWVzdChyZXF1ZXN0V2l0
aENyZWRlbnRpYWxzKQorICAgICwgbV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJl
ZGlyZWN0KHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghcmVxdWVzdFdpdGhDcmVkZW50aWFs
cy51cmwoKS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxG
YWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcG9ydEFsbG93ZWQo
cmVxdWVzdFdpdGhDcmVkZW50aWFscy51cmwoKSkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJl
KEJsb2NrZWRGYWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworTmV0d29ya0Rh
dGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVCghbV9jbGllbnQpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2No
ZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlIHR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUgIT0gTm9G
YWlsdXJlKTsKKyAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gdHlwZTsKKyAgICBtX2ZhaWx1
cmVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpmYWls
dXJlVGltZXJGaXJlZCgpCit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKworICAgIHN3aXRjaCAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSkgeworICAg
IGNhc2UgQmxvY2tlZEZhaWx1cmU6CisgICAgICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBO
b0ZhaWx1cmU7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50LT53
YXNCbG9ja2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludmFsaWRVUkxGYWlsdXJl
OgorICAgICAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJlOworICAgICAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgICAgICBtX2NsaWVudC0+Y2Fubm90U2hvd1VSTCgpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBOb0ZhaWx1cmU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VT
U0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtE
YXRhVGFzay5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmgKaW5kZXggYjYyNzU4Yi4uNGRjMTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKQEAgLTM2LDI1ICszNiwxMSBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgog
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKENPQ09BKQotT0JK
Q19DTEFTUyBOU1VSTFNlc3Npb25EYXRhVGFzazsKLSNlbmRpZgotCi0jaWYgVVNFKFNPVVApCi0j
aW5jbHVkZSA8V2ViQ29yZS9Qcm90ZWN0aW9uU3BhY2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlUmVzcG9uc2UuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0
Zi9nbGliL0dSZWZQdHIuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLWNsYXNzIENyZWRlbnRpYWw7CiBjbGFzcyBSZXNvdXJj
ZUVycm9yOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIH0KQEAgLTg2LDE2ICs3MiwxNCBAQCBwdWJsaWM6CiB9Owog
CiBjbGFzcyBOZXR3b3JrRGF0YVRhc2sgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrRGF0YVRh
c2s+IHsKLSAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nlc3Npb247CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxOZXR3b3JrRGF0YVRhc2s+IGNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwg
TmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlh
bHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJv
b2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFzayhzZXNzaW9uLCBjbGllbnQs
IHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENs
ZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBzdXNwZW5kKCk7Ci0gICAgdm9pZCBjYW5jZWwoKTsKLSAgICB2b2lkIHJlc3VtZSgpOworICAg
IHN0YXRpYyBSZWY8TmV0d29ya0RhdGFUYXNrPiBjcmVhdGUoTmV0d29ya1Nlc3Npb24mLCBOZXR3
b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5LCBi
b29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOworCisgICAgdmly
dHVhbCB+TmV0d29ya0RhdGFUYXNrKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXN1
bWUoKSA9IDA7CiAKICAgICBlbnVtIGNsYXNzIFN0YXRlIHsKICAgICAgICAgUnVubmluZywKQEAg
LTEwMywyNiArODcsMTEgQEAgcHVibGljOgogICAgICAgICBDYW5jZWxpbmcsCiAgICAgICAgIENv
bXBsZXRlZAogICAgIH07Ci0gICAgU3RhdGUgc3RhdGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0
YXRlIHN0YXRlKCkgY29uc3QgPSAwOwogCi0gICAgdHlwZWRlZiB1aW50NjRfdCBUYXNrSWRlbnRp
ZmllcjsKLSAgICAKLSAgICB+TmV0d29ya0RhdGFUYXNrKCk7Ci0KLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICB2b2lkIGRpZFNlbmREYXRhKHVpbnQ2NF90IHRvdGFsQnl0ZXNTZW50LCB1aW50NjRf
dCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQpOwotICAgIHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5n
ZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIENoYWxsZW5nZUNvbXBs
ZXRpb25IYW5kbGVyJiYpOwotICAgIHZvaWQgZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYpOwotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmJiwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciYmKTsKLSAg
ICB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYpOwotICAg
IHZvaWQgZGlkQmVjb21lRG93bmxvYWQoKTsKLQotICAgIHZvaWQgd2lsbFBlcmZvcm1IVFRQUmVk
aXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmJiwgUmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlciYmKTsKLSAgICB2b2lkIHRyYW5zZmVy
U2FuZGJveEV4dGVuc2lvblRvRG93bmxvYWQoRG93bmxvYWQmKTsKLSNlbmRpZgogICAgIE5ldHdv
cmtEYXRhVGFza0NsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KICAg
ICB2b2lkIGNsZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IG51bGxwdHI7IH0KLSAgICAKKwogICAg
IERvd25sb2FkSUQgcGVuZGluZ0Rvd25sb2FkSUQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdE
b3dubG9hZElEOyB9CiAgICAgUGVuZGluZ0Rvd25sb2FkKiBwZW5kaW5nRG93bmxvYWQoKSBjb25z
dCB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZDsgfQogICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25s
b2FkSUQoRG93bmxvYWRJRCBkb3dubG9hZElEKQpAQCAtMTM2LDg3ICsxMDUsMzEgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlQoIW1fcGVuZGluZ0Rvd25sb2FkKTsKICAgICAgICAgbV9wZW5kaW5n
RG93bmxvYWQgPSAmcGVuZGluZ0Rvd25sb2FkOwogICAgIH0KLSAgICB2b2lkIHNldFBlbmRpbmdE
b3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSYsIGJvb2wgYWxsb3dPdmVyd3JpdGUpOworCisgICAgdmlydHVhbCB2b2lk
IHNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgLyphbGxvd092ZXJ3cml0ZSovKSB7IG1f
cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBmaWxlbmFtZTsgfQogICAgIGNvbnN0IFN0cmluZyYg
cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9h
ZExvY2F0aW9uOyB9CiAgICAgYm9vbCBpc0Rvd25sb2FkKCkgY29uc3QgeyByZXR1cm4gISFtX3Bl
bmRpbmdEb3dubG9hZElELmRvd25sb2FkSUQoKTsgfQogCiAgICAgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiBmaXJzdFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0UmVxdWVz
dDsgfQotICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpOwotICAgIHZvaWQgc2V0U3VnZ2Vz
dGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBhbGxvd3NTcGVjaWZpY0hUVFBT
Q2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Jik7Ci0gICAgCi1wcml2YXRlOgotICAgIE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYs
IE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xp
Y3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CisgICAg
dmlydHVhbCBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUoKSBjb25zdCB7IHJldHVybiBTdHJpbmco
KTsgfQorICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBzdWdnZXN0
ZWROYW1lKSB7IG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWROYW1lOyB9CisgICAgdmly
dHVhbCBib29sIGFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAg
Ym9vbCB0cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYpOwor
cHJvdGVjdGVkOgorICAgIE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYsIE5ldHdvcmtE
YXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6
OlN0b3JlZENyZWRlbnRpYWxzLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQ
UmVkaXJlY3QpOwogCi0jaWYgVVNFKFNPVVApCi0gICAgdm9pZCB0aW1lb3V0RmlyZWQoKTsKLSAg
ICB2b2lkIHN0YXJ0VGltZW91dCgpOwotICAgIHZvaWQgc3RvcFRpbWVvdXQoKTsKLSAgICB2b2lk
IGludmFsaWRhdGVBbmRDYW5jZWwoKTsKLSAgICB2b2lkIGNyZWF0ZVJlcXVlc3QoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBjbGVhclJlcXVlc3QoKTsKLSAgICBz
dGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiwgR0FzeW5jUmVzdWx0
KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCBkaWRTZW5kUmVxdWVzdChHUmVmUHRyPEdJ
bnB1dFN0cmVhbT4mJik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKLSAgICBzdGF0
aWMgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBHUGFyYW1TcGVj
KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkKCk7Ci0gICAg
dm9pZCBhcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYpOwotICAgIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZUNhbGxiYWNrKFNvdXBTZXNzaW9uKiwg
U291cE1lc3NhZ2UqLCBTb3VwQXV0aCosIGdib29sZWFuIHJldHJ5aW5nLCBOZXR3b3JrRGF0YVRh
c2sqKTsKLSAgICB2b2lkIGF1dGhlbnRpY2F0ZShXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYmKTsKLSAgICB2b2lkIGNvbnRpbnVlQXV0aGVudGljYXRlKFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiYpOwotICAgIHN0YXRpYyB2b2lkIHNraXBJbnB1dFN0cmVhbUZvclJl
ZGlyZWN0aW9uQ2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0Rh
dGFUYXNrKik7Ci0gICAgdm9pZCBza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOwotICAg
IHZvaWQgZGlkRmluaXNoU2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKLSAgICBib29s
IHNob3VsZFN0YXJ0SFRUUFJlZGlyZWN0aW9uKCk7Ci0gICAgdm9pZCBjb250aW51ZUhUVFBSZWRp
cmVjdGlvbigpOwotICAgIHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBH
QXN5bmNSZXN1bHQqLCBOZXR3b3JrRGF0YVRhc2sqKTsKLSAgICB2b2lkIHJlYWQoKTsKLSAgICB2
b2lkIGRpZFJlYWQoZ3NzaXplIGJ5dGVzUmVhZCk7Ci0gICAgdm9pZCBkaWRGaW5pc2hSZWFkKCk7
Ci0gICAgc3RhdGljIHZvaWQgcmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2soU291cE11bHRpcGFydElu
cHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCBy
ZXF1ZXN0TmV4dFBhcnQoKTsKLSAgICB2b2lkIGRpZFJlcXVlc3ROZXh0UGFydChHUmVmUHRyPEdJ
bnB1dFN0cmVhbT4mJik7Ci0gICAgdm9pZCBkaWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQoKTsKLSAg
ICBzdGF0aWMgdm9pZCBnb3RIZWFkZXJzQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0
YVRhc2sqKTsKLSAgICB2b2lkIGRpZEdldEhlYWRlcnMoKTsKLSAgICBzdGF0aWMgdm9pZCB3cm90
ZUJvZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBTb3VwQnVmZmVyKiwgTmV0d29ya0RhdGFU
YXNrKik7Ci0gICAgdm9pZCBkaWRXcml0ZUJvZHlEYXRhKHVpbnQ2NF90IGJ5dGVzU2VudCk7Ci0g
ICAgdm9pZCBkb3dubG9hZCgpOwotICAgIHN0YXRpYyB2b2lkIHdyaXRlRG93bmxvYWRDYWxsYmFj
ayhHT3V0cHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAg
dm9pZCB3cml0ZURvd25sb2FkKCk7Ci0gICAgdm9pZCBkaWRXcml0ZURvd25sb2FkKGdzaXplIGJ5
dGVzV3JpdHRlbik7Ci0gICAgdm9pZCBkaWRGYWlsRG93bmxvYWQoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciYpOwotICAgIHZvaWQgZGlkRmluaXNoRG93bmxvYWQoKTsKLSAgICB2b2lkIGNs
ZWFuRG93bmxvYWRGaWxlcygpOwotICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yJik7Ci0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgc3RhdGljIHZvaWQgbmV0
d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqLCBHU29ja2V0Q2xpZW50RXZlbnQsIEdJT1N0
cmVhbSosIE5ldHdvcmtEYXRhVGFzayopOwotICAgIHZvaWQgbmV0d29ya0V2ZW50KEdTb2NrZXRD
bGllbnRFdmVudCk7Ci0jaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKLSAgICBzdGF0
aWMgdm9pZCBzdGFydGluZ0NhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrKik7
Ci0jZWxzZQotICAgIHN0YXRpYyB2b2lkIHJlcXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Np
b24qLCBTb3VwTWVzc2FnZSosIFNvdXBTb2NrZXQqLCBOZXR3b3JrRGF0YVRhc2sqKTsKLSNlbmRp
ZgotICAgIHZvaWQgZGlkU3RhcnRSZXF1ZXN0KCk7Ci0gICAgc3RhdGljIHZvaWQgcmVzdGFydGVk
Q2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2sqKTsKLSAgICB2b2lkIGRpZFJl
c3RhcnQoKTsKLSNlbmRpZgotI2VuZGlmCi0gICAgCiAgICAgZW51bSBGYWlsdXJlVHlwZSB7CiAg
ICAgICAgIE5vRmFpbHVyZSwKICAgICAgICAgQmxvY2tlZEZhaWx1cmUsCiAgICAgICAgIEludmFs
aWRVUkxGYWlsdXJlCiAgICAgfTsKLSAgICBGYWlsdXJlVHlwZSBtX3NjaGVkdWxlZEZhaWx1cmVU
eXBlIHsgTm9GYWlsdXJlIH07Ci0gICAgV2ViQ29yZTo6VGltZXIgbV9mYWlsdXJlVGltZXI7CiAg
ICAgdm9pZCBmYWlsdXJlVGltZXJGaXJlZCgpOwogICAgIHZvaWQgc2NoZWR1bGVGYWlsdXJlKEZh
aWx1cmVUeXBlKTsKLSAgICAKLSAgICBSZWZQdHI8TmV0d29ya1Nlc3Npb24+IG1fc2Vzc2lvbjsK
LSAgICBOZXR3b3JrRGF0YVRhc2tDbGllbnQqIG1fY2xpZW50OworCisgICAgRmFpbHVyZVR5cGUg
bV9zY2hlZHVsZWRGYWlsdXJlVHlwZSB7IE5vRmFpbHVyZSB9OworICAgIFdlYkNvcmU6OlRpbWVy
IG1fZmFpbHVyZVRpbWVyOworICAgIFJlZjxOZXR3b3JrU2Vzc2lvbj4gbV9zZXNzaW9uOworICAg
IE5ldHdvcmtEYXRhVGFza0NsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07CiAgICAgUGVuZGlu
Z0Rvd25sb2FkKiBtX3BlbmRpbmdEb3dubG9hZCB7IG51bGxwdHIgfTsKICAgICBEb3dubG9hZElE
IG1fcGVuZGluZ0Rvd25sb2FkSUQ7CiAgICAgU3RyaW5nIG1fdXNlcjsKQEAgLTIyNCw0NiArMTM3
LDE0IEBAIHByaXZhdGU6CiAjaWYgVVNFKENSRURFTlRJQUxfU1RPUkFHRV9XSVRIX05FVFdPUktf
U0VTU0lPTikKICAgICBXZWJDb3JlOjpDcmVkZW50aWFsIG1faW5pdGlhbENyZWRlbnRpYWw7CiAj
ZW5kaWYKLSAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBtX3N0b3JlZENyZWRlbnRpYWxz
OworICAgIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIG1fc3RvcmVkQ3JlZGVudGlhbHMgeyBX
ZWJDb3JlOjpEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgfTsKICAgICBTdHJpbmcgbV9sYXN0
SFRUUE1ldGhvZDsKICAgICBTdHJpbmcgbV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbjsKICAgICBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9maXJzdFJlcXVlc3Q7Ci0gICAgYm9vbCBtX3Nob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Q7Ci0gICAgUmVmUHRyPFNhbmRib3hF
eHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBS
ZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+IG1fdGFzazsKLSNlbmRpZgotI2lmIFVTRShT
T1VQKQotICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07Ci0gICAgV2ViQ29y
ZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IG1fc2hvdWxkQ29udGVudFNuaWZmOwotICAgIEdSZWZQ
dHI8U291cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7Ci0gICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4g
bV9zb3VwTWVzc2FnZTsKLSAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsK
LSAgICBHUmVmUHRyPFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbT4gbV9tdWx0aXBhcnRJbnB1dFN0
cmVhbTsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKLSAgICBHUmVm
UHRyPEdBc3luY1Jlc3VsdD4gbV9wZW5kaW5nUmVzdWx0OwotICAgIFdlYkNvcmU6OlByb3RlY3Rp
b25TcGFjZSBtX3Byb3RlY3Rpb25TcGFjZUZvclBlcnNpc3RlbnRTdG9yYWdlOwotICAgIFdlYkNv
cmU6OkNyZWRlbnRpYWwgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2U7Ci0gICAgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgIFZlY3RvcjxjaGFyPiBtX3Jl
YWRCdWZmZXI7Ci0gICAgdW5zaWduZWQgbV9yZWRpcmVjdENvdW50IHsgMCB9OwotICAgIHVpbnQ2
NF90IG1fYm9keURhdGFUb3RhbEJ5dGVzU2VudCB7IDAgfTsKLSAgICBHUmVmUHRyPEdGaWxlPiBt
X2Rvd25sb2FkRGVzdGluYXRpb25GaWxlOwotICAgIEdSZWZQdHI8R0ZpbGU+IG1fZG93bmxvYWRJ
bnRlcm1lZGlhdGVGaWxlOwotICAgIEdSZWZQdHI8R091dHB1dFN0cmVhbT4gbV9kb3dubG9hZE91
dHB1dFN0cmVhbTsKLSAgICBib29sIG1fYWxsb3dPdmVyd3JpdGVEb3dubG9hZCB7IGZhbHNlIH07
Ci0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgZG91YmxlIG1fc3RhcnRUaW1lIHsgMCB9Owot
I2VuZGlmCi0gICAgUnVuTG9vcDo6VGltZXI8TmV0d29ya0RhdGFUYXNrPiBtX3RpbWVvdXRTb3Vy
Y2U7Ci0jZW5kaWYKKyAgICBib29sIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBS
ZWRpcmVjdCB7IHRydWUgfTsKICAgICBTdHJpbmcgbV9zdWdnZXN0ZWRGaWxlbmFtZTsKIH07CiAK
LSNpZiBQTEFURk9STShDT0NPQSkKLVdlYkNvcmU6OkNyZWRlbnRpYWwgc2VydmVyVHJ1c3RDcmVk
ZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0jZW5kaWYK
LSAgICAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gVVNFKE5FVFdPUktf
U0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNw
cAppbmRleCA4ZmQ0YWNkLi45NzkyOTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0xvYWQuY3BwCkBAIC0zOSw2ICszOSwxMCBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAorI2lmIFBM
QVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgKaW5kZXggM2IxYTA1Zi4uNGU0
NmU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xv
YWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCkBA
IC0zNCw3ICszNCw3IEBACiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogI2luY2x1ZGUgIkRv
d25sb2FkSUQuaCIKLSNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIk5ldHdv
cmtEYXRhVGFzay5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uu
aD4KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAKaW5kZXggOGU5N2YwNy4uMjBiNTZjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtNzQsNiArNzQsMTAgQEAK
ICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
Q09DT0EpCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Db2NvYS5oIgorI2VuZGlmCisKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwMiw3ICsxMDYs
NyBAQCBOZXR3b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MoKQogICAgIGFkZFN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlcj4oKTsKICAgICBhZGRTdXBwbGVtZW50PEN1c3RvbVByb3RvY29sTWFu
YWdlcj4oKTsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKSAmJiBQTEFURk9STShDT0NPQSkKLSAg
ICBOZXR3b3JrU2Vzc2lvbjo6c2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKHN1cHBsZW1lbnQ8Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyPigpKTsKKyAgICBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRDdXN0
b21Qcm90b2NvbE1hbmFnZXIoc3VwcGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCkpOwog
I2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtT
ZXNzaW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjgxODE5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nl
c3Npb24uY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKworI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCisKKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgorI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJO
ZXR3b3JrU2Vzc2lvbkNvY29hLmgiCisjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyNpbmNsdWRlICJO
ZXR3b3JrU2Vzc2lvblNvdXAuaCIKKyNlbmRpZgorCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVmPE5ldHdvcmtTZXNzaW9uPiBOZXR3b3JrU2Vz
c2lvbjo6Y3JlYXRlKFNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciog
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHJldHVy
biBOZXR3b3JrU2Vzc2lvbkNvY29hOjpjcmVhdGUoc2Vzc2lvbklELCBjdXN0b21Qcm90b2NvbE1h
bmFnZXIpOworI2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAgVU5VU0VEX1BBUkFNKGN1c3RvbVBy
b3RvY29sTWFuYWdlcik7CisgICAgcmV0dXJuIE5ldHdvcmtTZXNzaW9uU291cDo6Y3JlYXRlKHNl
c3Npb25JRCk7CisjZW5kaWYKK30KKworTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpk
ZWZhdWx0U2Vzc2lvbigpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJuIE5ldHdv
cmtTZXNzaW9uQ29jb2E6OmRlZmF1bHRTZXNzaW9uKCk7CisjZWxzZQorICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uID0gJk5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpLmxlYWtSZWYo
KTsKKyAgICByZXR1cm4gKnNlc3Npb247CisjZW5kaWYKK30KKworTmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29uc3QKK3sKKyAg
ICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNl
c3Npb24obV9zZXNzaW9uSUQpOworICAgIFJFTEVBU0VfQVNTRVJUKHN0b3JhZ2VTZXNzaW9uKTsK
KyAgICByZXR1cm4gKnN0b3JhZ2VTZXNzaW9uOworfQorCitOZXR3b3JrU2Vzc2lvbjo6TmV0d29y
a1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKKyAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25J
RCkKK3sKK30KKworTmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbigpCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCmluZGV4IGIw
ODgyZjIuLmZlZmQ3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Nlc3Npb24uaApAQCAtMjcsMjQgKzI3LDEwIEBACiAKICNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi1PQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbjsKLU9C
SkNfQ0xBU1MgTlNPcGVyYXRpb25RdWV1ZTsKLU9CSkNfQ0xBU1MgV0tOZXR3b3JrU2Vzc2lvbkRl
bGVnYXRlOwotI2VuZGlmCi0KLSNpbmNsdWRlICJEb3dubG9hZElELmgiCi0jaW5jbHVkZSAiTmV0
d29ya0RhdGFUYXNrLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKLSNpZiBVU0UoU09VUCkKLXR5
cGVkZWYgc3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb247CiB9CkBAIC01NCw2MyAr
NDAsMjEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXI7
CiAKIGNsYXNzIE5ldHdvcmtTZXNzaW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya1Nlc3Np
b24+IHsKLSAgICBmcmllbmQgY2xhc3MgTmV0d29ya0RhdGFUYXNrOwogcHVibGljOgotICAgIGVu
dW0gY2xhc3MgVHlwZSB7Ci0gICAgICAgIE5vcm1hbCwKLSAgICAgICAgRXBoZW1lcmFsCi0gICAg
fTsKLQotICAgIHN0YXRpYyBSZWY8TmV0d29ya1Nlc3Npb24+IGNyZWF0ZShUeXBlLCBXZWJDb3Jl
OjpTZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopOworICAgIHN0YXRpYyBSZWY8TmV0
d29ya1Nlc3Npb24+IGNyZWF0ZShXZWJDb3JlOjpTZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFu
YWdlciogPSBudWxscHRyKTsKICAgICBzdGF0aWMgTmV0d29ya1Nlc3Npb24mIGRlZmF1bHRTZXNz
aW9uKCk7Ci0gICAgfk5ldHdvcmtTZXNzaW9uKCk7CisgICAgdmlydHVhbCB+TmV0d29ya1Nlc3Np
b24oKTsKIAotICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpOworICAgIHZpcnR1YWwgdm9p
ZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBjbGVhckNyZWRl
bnRpYWxzKCkgeyB9OwogCiAgICAgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9Ci0KLSNpZiBVU0UoU09VUCkKLSAgICBTb3VwU2Vzc2lv
biogc291cFNlc3Npb24oKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBOZXR3b3JrU2Vzc2lvbiBoYXMgYmVlbiBj
cmVhdGVkLgotICAgIHN0YXRpYyB2b2lkIHNldEN1c3RvbVByb3RvY29sTWFuYWdlcihDdXN0b21Q
cm90b2NvbE1hbmFnZXIqKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvbkF1
ZGl0VG9rZW5EYXRhKFJldGFpblB0cjxDRkRhdGFSZWY+JiYpOwotICAgIHN0YXRpYyB2b2lkIHNl
dFNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKLSAgICBz
dGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJik7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHN0YXRpYyB2b2lkIHNldENURGF0YUNv
bm5lY3Rpb25TZXJ2aWNlVHlwZShjb25zdCBTdHJpbmcmKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAg
ICB2b2lkIGNsZWFyQ3JlZGVudGlhbHMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBOZXR3
b3JrRGF0YVRhc2sqIGRhdGFUYXNrRm9ySWRlbnRpZmllcihOZXR3b3JrRGF0YVRhc2s6OlRhc2tJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyk7Ci0KLSAgICB2b2lkIGFkZERv
d25sb2FkSUQoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgRG93bmxvYWRJRCk7Ci0g
ICAgRG93bmxvYWRJRCBkb3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIp
OwotICAgIERvd25sb2FkSUQgdGFrZURvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRl
bnRpZmllcik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBOZXR3b3JrU2Vzc2lvbihUeXBlLCBX
ZWJDb3JlOjpTZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopOwogICAgIFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAK
LSAgICBXZWJDb3JlOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7Citwcm90ZWN0ZWQ6CisgICAgTmV0
d29ya1Nlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklEKTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFU
YXNrKj4gbV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFsczsKLSAgICBIYXNoTWFwPE5ldHdvcmtE
YXRhVGFzazo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFzayo+IG1fZGF0YVRhc2tNYXBX
aXRob3V0Q3JlZGVudGlhbHM7Ci0gICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVu
dGlmaWVyLCBEb3dubG9hZElEPiBtX2Rvd25sb2FkTWFwOwotCi0gICAgUmV0YWluUHRyPE5TVVJM
U2Vzc2lvbj4gbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlOwotICAgIFJldGFpblB0cjxX
S05ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURl
bGVnYXRlOwotICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbldpdGhvdXRDcmVk
ZW50aWFsU3RvcmFnZTsKLSAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBt
X3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZTsKLSNlbGlmIFVTRShTT1VQ
KQotICAgIEhhc2hTZXQ8TmV0d29ya0RhdGFUYXNrKj4gbV9kYXRhVGFza1NldDsKLSNlbmRpZgor
ICAgIFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAKaW5kZXggZmM1NTUx
My4uNGFlYmYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtMb2FkLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24u
aCIKICNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjYwN2Q3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29j
b2EuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoTkVUV09SS19TRVNTSU9OKQorCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbkRhdGFUYXNr
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsKKwor
Y2xhc3MgTmV0d29ya0RhdGFUYXNrQ29jb2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya0RhdGFUYXNr
IHsKKyAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPE5ldHdvcmtEYXRhVGFzaz4gY3JlYXRlKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9u
LCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50
aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwg
Ym9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0RhdGFUYXNrQ29jb2Eoc2Vzc2lvbiwg
Y2xpZW50LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgc2hvdWxkQ29udGVudFNuaWZmLCBz
aG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KSk7CisgICAgfQorCisgICAg
fk5ldHdvcmtEYXRhVGFza0NvY29hKCk7CisKKyAgICB0eXBlZGVmIHVpbnQ2NF90IFRhc2tJZGVu
dGlmaWVyOworCisgICAgdm9pZCBkaWRTZW5kRGF0YSh1aW50NjRfdCB0b3RhbEJ5dGVzU2VudCwg
dWludDY0X3QgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVD
aGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDaGFsbGVu
Z2VDb21wbGV0aW9uSGFuZGxlciYmKTsKKyAgICB2b2lkIGRpZENvbXBsZXRlV2l0aEVycm9yKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25z
ZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIm
Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYm
KTsKKyAgICB2b2lkIGRpZEJlY29tZURvd25sb2FkKCk7CisKKyAgICB2b2lkIHdpbGxQZXJmb3Jt
SFRUUFJlZGlyZWN0aW9uKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiYsIFJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXImJik7CisgICAgdm9pZCB0
cmFuc2ZlclNhbmRib3hFeHRlbnNpb25Ub0Rvd25sb2FkKERvd25sb2FkJik7CisKK3ByaXZhdGU6
CisgICAgTmV0d29ya0RhdGFUYXNrQ29jb2EoTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRh
c2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9y
ZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5LCBib29sIHNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOworCisgICAgdm9pZCBzdXNwZW5k
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc3Vt
ZSgpIG92ZXJyaWRlOworICAgIE5ldHdvcmtEYXRhVGFzazo6U3RhdGUgc3RhdGUoKSBjb25zdCBv
dmVycmlkZTsKKworICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3Ry
aW5nJiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCAvKmFsbG93T3Zlcndy
aXRlKi8pIG92ZXJyaWRlOworICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgYm9vbCBhbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0
KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgb3ZlcnJpZGU7CisgICAg
Ym9vbCB0cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYpOwor
CisgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKKyAgICBS
ZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+IG1fdGFzazsKK307CisKK1dlYkNvcmU6OkNy
ZWRlbnRpYWwgc2VydmVyVHJ1c3RDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNF
KE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0KaW5kZXggNjJjYjBkNy4uMGQ4
OWVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0
d29ya0RhdGFUYXNrQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0KQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAj
aW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW1wb3J0ICJO
ZXR3b3JrRGF0YVRhc2tDb2NvYS5oIgogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKIApAQCAt
MzMsNiArMzMsNyBAQAogI2ltcG9ydCAiRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgiCiAjaW1wb3J0
ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJOZXR3b3JrUHJvY2Vzcy5oIgorI2ltcG9ydCAiTmV0d29y
a1Nlc3Npb25Db2NvYS5oIgogI2ltcG9ydCAiU2Vzc2lvblRyYWNrZXIuaCIKICNpbXBvcnQgIldl
YkNvcmVBcmd1bWVudENvZGVycy5oIgogI2ltcG9ydCA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oPgpAQCAtNTIsMjcgKzUzLDEyIEBAIHN0YXRpYyB2b2lkIGFwcGx5QmFzaWNBdXRo
b3JpemF0aW9uSGVhZGVyKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uCiB9
CiAjZW5kaWYKIAotTmV0d29ya0RhdGFUYXNrOjpOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Np
b24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIFdlYkNvcmU6OlN0b3Jl
ZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQ
b2xpY3kgc2hvdWxkQ29udGVudFNuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBT
VG9IVFRQUmVkaXJlY3QpCi0gICAgOiBtX2ZhaWx1cmVUaW1lcigqdGhpcywgJk5ldHdvcmtEYXRh
VGFzazo6ZmFpbHVyZVRpbWVyRmlyZWQpCi0gICAgLCBtX3Nlc3Npb24oJnNlc3Npb24pCi0gICAg
LCBtX2NsaWVudCgmY2xpZW50KQotICAgICwgbV9zdG9yZWRDcmVkZW50aWFscyhzdG9yZWRDcmVk
ZW50aWFscykKLSAgICAsIG1fbGFzdEhUVFBNZXRob2QocmVxdWVzdFdpdGhDcmVkZW50aWFscy5o
dHRwTWV0aG9kKCkpCi0gICAgLCBtX2ZpcnN0UmVxdWVzdChyZXF1ZXN0V2l0aENyZWRlbnRpYWxz
KQotICAgICwgbV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KHNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCitOZXR3b3JrRGF0YVRhc2tDb2Nv
YTo6TmV0d29ya0RhdGFUYXNrQ29jb2EoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtE
YXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3RXaXRoQ3JlZGVudGlhbHMsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENy
ZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxkQ29udGVudFNu
aWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCisgICAg
OiBOZXR3b3JrRGF0YVRhc2soc2Vzc2lvbiwgY2xpZW50LCByZXF1ZXN0V2l0aENyZWRlbnRpYWxz
LCBzdG9yZWRDcmVkZW50aWFscywgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIAotICAgIGlmICghcmVx
dWVzdFdpdGhDcmVkZW50aWFscy51cmwoKS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgc2NoZWR1bGVG
YWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICBpZiAoIXBvcnRBbGxvd2VkKHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMudXJsKCkpKSB7Ci0g
ICAgICAgIHNjaGVkdWxlRmFpbHVyZShCbG9ja2VkRmFpbHVyZSk7CisgICAgaWYgKG1fc2NoZWR1
bGVkRmFpbHVyZVR5cGUgIT0gTm9GYWlsdXJlKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAorCiAgICAgYXV0byByZXF1ZXN0ID0gcmVxdWVzdFdpdGhDcmVkZW50aWFsczsKICAgICBhdXRv
IHVybCA9IHJlcXVlc3QudXJsKCk7CiAgICAgaWYgKHN0b3JlZENyZWRlbnRpYWxzID09IFdlYkNv
cmU6OkFsbG93U3RvcmVkQ3JlZGVudGlhbHMgJiYgdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHko
KSkgewpAQCAtMTA0LDEzICs5MCwxMyBAQCBOZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFz
ayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JgogICAgIH0K
IAogICAgIGlmIChzdG9yZWRDcmVkZW50aWFscyA9PSBXZWJDb3JlOjpBbGxvd1N0b3JlZENyZWRl
bnRpYWxzKSB7Ci0gICAgICAgIG1fdGFzayA9IFttX3Nlc3Npb24tPm1fc2Vzc2lvbldpdGhDcmVk
ZW50aWFsU3RvcmFnZSBkYXRhVGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07Ci0gICAgICAgIEFT
U0VSVCghbV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLmNvbnRhaW5zKFtt
X3Rhc2sgdGFza0lkZW50aWZpZXJdKSk7Ci0gICAgICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFza01h
cFdpdGhDcmVkZW50aWFscy5hZGQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIHRoaXMpOworICAg
ICAgICBtX3Rhc2sgPSBbZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Db2NvYT4obV9zZXNzaW9uLmdl
dCgpKS5tX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UgZGF0YVRhc2tXaXRoUmVxdWVzdDpu
c1JlcXVlc3RdOworICAgICAgICBBU1NFUlQoIWRvd25jYXN0PE5ldHdvcmtTZXNzaW9uQ29jb2E+
KG1fc2Vzc2lvbi5nZXQoKSkubV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFscy5jb250YWlucyhb
bV90YXNrIHRhc2tJZGVudGlmaWVyXSkpOworICAgICAgICBkb3duY2FzdDxOZXR3b3JrU2Vzc2lv
bkNvY29hPihtX3Nlc3Npb24uZ2V0KCkpLm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMuYWRk
KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlzKTsKICAgICB9IGVsc2UgewotICAgICAgICBt
X3Rhc2sgPSBbbV9zZXNzaW9uLT5tX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UgZGF0
YVRhc2tXaXRoUmVxdWVzdDpuc1JlcXVlc3RdOwotICAgICAgICBBU1NFUlQoIW1fc2Vzc2lvbi0+
bV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFscy5jb250YWlucyhbbV90YXNrIHRhc2tJZGVu
dGlmaWVyXSkpOwotICAgICAgICBtX3Nlc3Npb24tPm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVu
dGlhbHMuYWRkKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlzKTsKKyAgICAgICAgbV90YXNr
ID0gW2Rvd25jYXN0PE5ldHdvcmtTZXNzaW9uQ29jb2E+KG1fc2Vzc2lvbi5nZXQoKSkubV9zZXNz
aW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlIGRhdGFUYXNrV2l0aFJlcXVlc3Q6bnNSZXF1ZXN0
XTsKKyAgICAgICAgQVNTRVJUKCFkb3duY2FzdDxOZXR3b3JrU2Vzc2lvbkNvY29hPihtX3Nlc3Np
b24uZ2V0KCkpLm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHMuY29udGFpbnMoW21fdGFz
ayB0YXNrSWRlbnRpZmllcl0pKTsKKyAgICAgICAgZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Db2Nv
YT4obV9zZXNzaW9uLmdldCgpKS5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmFkZChb
bV90YXNrIHRhc2tJZGVudGlmaWVyXSwgdGhpcyk7CiAgICAgfQogICAgIExPRyhOZXR3b3JrU2Vz
c2lvbiwgIiVsbHUgQ3JlYXRpbmcgTmV0d29ya0RhdGFUYXNrIHdpdGggVVJMICVzIiwgW21fdGFz
ayB0YXNrSWRlbnRpZmllcl0sIG5zUmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmlu
Zyk7CiAKQEAgLTEyMSwyNyArMTA3LDI3IEBAIE5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFU
YXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmCiAjZW5k
aWYKIH0KIAotTmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkKK05ldHdvcmtEYXRh
VGFza0NvY29hOjp+TmV0d29ya0RhdGFUYXNrQ29jb2EoKQogewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgaWYgKG1fdGFzaykgewotICAgICAgICBpZiAobV9zdG9yZWRDcmVkZW50
aWFscyA9PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsczo6QWxsb3dTdG9yZWRDcmVkZW50aWFs
cykgewotICAgICAgICAgICAgQVNTRVJUKG1fc2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhDcmVk
ZW50aWFscy5nZXQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pID09IHRoaXMpOwotICAgICAgICAg
ICAgbV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLnJlbW92ZShbbV90YXNr
IHRhc2tJZGVudGlmaWVyXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQo
bV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmdldChbbV90YXNrIHRh
c2tJZGVudGlmaWVyXSkgPT0gdGhpcyk7Ci0gICAgICAgICAgICBtX3Nlc3Npb24tPm1fZGF0YVRh
c2tNYXBXaXRob3V0Q3JlZGVudGlhbHMucmVtb3ZlKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsK
LSAgICAgICAgfQorICAgIGlmICghbV90YXNrKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9zdG9yZWRDcmVkZW50aWFscyA9PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsczo6QWxsb3dT
dG9yZWRDcmVkZW50aWFscykgeworICAgICAgICBBU1NFUlQoZG93bmNhc3Q8TmV0d29ya1Nlc3Np
b25Db2NvYT4obV9zZXNzaW9uLmdldCgpKS5tX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLmdl
dChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkgPT0gdGhpcyk7CisgICAgICAgIGRvd25jYXN0PE5l
dHdvcmtTZXNzaW9uQ29jb2E+KG1fc2Vzc2lvbi5nZXQoKSkubV9kYXRhVGFza01hcFdpdGhDcmVk
ZW50aWFscy5yZW1vdmUoW21fdGFzayB0YXNrSWRlbnRpZmllcl0pOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChkb3duY2FzdDxOZXR3b3JrU2Vzc2lvbkNvY29hPihtX3Nlc3Npb24uZ2V0
KCkpLm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHMuZ2V0KFttX3Rhc2sgdGFza0lkZW50
aWZpZXJdKSA9PSB0aGlzKTsKKyAgICAgICAgZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Db2NvYT4o
bV9zZXNzaW9uLmdldCgpKS5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLnJlbW92ZShb
bV90YXNrIHRhc2tJZGVudGlmaWVyXSk7CiAgICAgfQogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFz
azo6ZGlkU2VuZERhdGEodWludDY0X3QgdG90YWxCeXRlc1NlbnQsIHVpbnQ2NF90IHRvdGFsQnl0
ZXNFeHBlY3RlZFRvU2VuZCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OmRpZFNlbmREYXRh
KHVpbnQ2NF90IHRvdGFsQnl0ZXNTZW50LCB1aW50NjRfdCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1Nl
bmQpCiB7CiAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICBtX2NsaWVudC0+ZGlkU2VuZERhdGEo
dG90YWxCeXRlc1NlbnQsIHRvdGFsQnl0ZXNFeHBlY3RlZFRvU2VuZCk7CiB9CiAKLXZvaWQgTmV0
d29ya0RhdGFUYXNrOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJiYg
Y29tcGxldGlvbkhhbmRsZXIpCit2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjpkaWRSZWNlaXZl
Q2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVu
Z2UsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgLy8gUHJveHkgYXV0aGVudGljYXRpb24gaXMgaGFuZGxlZCBieSBDRk5ldHdvcmsgaW50ZXJu
YWxseS4gV2UgY2FuIGdldCBoZXJlIGlmIHRoZSB1c2VyIGNhbmNlbHMKICAgICAvLyBDRk5ldHdv
cmsgYXV0aGVudGljYXRpb24gZGlhbG9nLCBhbmQgd2Ugc2hvdWxkbid0IGFzayB0aGUgY2xpZW50
IHRvIGRpc3BsYXkgYW5vdGhlciBvbmUgaW4gdGhhdCBjYXNlLgpAQCAtMTYxLDEzICsxNDcsMTMg
QEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29y
ZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UKICAgICB9CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjpkaWRDb21wbGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBl
cnJvcikKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OmRpZENvbXBsZXRlV2l0aEVycm9yKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQogewogICAgIGlmIChtX2NsaWVudCkK
ICAgICAgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKGVycm9yKTsKIH0KIAotdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiYgcmVzcG9uc2UsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9u
SGFuZGxlcikKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OmRpZFJlY2VpdmVSZXNwb25zZShX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIFJlc3BvbnNlQ29tcGxldGlvbkhh
bmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAobV9jbGllbnQpCiAgICAgICAg
IG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbihXVEZNb3ZlKHJlc3Bv
bnNlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpAQCAtMTc3LDE5ICsxNjMsMTkgQEAg
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiYgcmVzcG9uc2UsIFIKICAgICB9CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNr
OjpkaWRSZWNlaXZlRGF0YShSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIGRhdGEpCit2b2lk
IE5ldHdvcmtEYXRhVGFza0NvY29hOjpkaWRSZWNlaXZlRGF0YShSZWY8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPiYmIGRhdGEpCiB7CiAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICBtX2NsaWVudC0+
ZGlkUmVjZWl2ZURhdGEoV1RGTW92ZShkYXRhKSk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNr
OjpkaWRCZWNvbWVEb3dubG9hZCgpCit2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjpkaWRCZWNv
bWVEb3dubG9hZCgpCiB7CiAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICBtX2NsaWVudC0+ZGlk
QmVjb21lRG93bmxvYWQoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OndpbGxQZXJmb3Jt
SFRUUFJlZGlyZWN0aW9uKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZWRpcmVjdFJlc3Bv
bnNlLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBSZWRpcmVjdENvbXBsZXRp
b25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29h
Ojp3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYg
cmVkaXJlY3RSZXNwb25zZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgUmVk
aXJlY3RDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmIChy
ZWRpcmVjdFJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMzA3IHx8IHJlZGlyZWN0UmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAzMDgpIHsKICAgICAgICAgQVNTRVJUKG1fbGFzdEhUVFBN
ZXRob2QgPT0gcmVxdWVzdC5odHRwTWV0aG9kKCkpOwpAQCAtMjQwLDUxICsyMjYsMjMgQEAgdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmJiByZWQKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKICAg
ICB9CiB9Ci0gICAgCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6c2NoZWR1bGVGYWlsdXJlKEZhaWx1
cmVUeXBlIHR5cGUpCi17Ci0gICAgQVNTRVJUKHR5cGUgIT0gTm9GYWlsdXJlKTsKLSAgICBtX3Nj
aGVkdWxlZEZhaWx1cmVUeXBlID0gdHlwZTsKLSAgICBtX2ZhaWx1cmVUaW1lci5zdGFydE9uZVNo
b3QoMCk7Ci19CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCgpCit2
b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25z
dCBXVEY6OlN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgYm9vbCBhbGxvd092ZXJ3cml0ZSkKIHsKLSAgICBSZWZQ
dHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0KHRoaXMpOwotICAgIAotICAgIHN3aXRjaCAobV9z
Y2hlZHVsZWRGYWlsdXJlVHlwZSkgewotICAgIGNhc2UgQmxvY2tlZEZhaWx1cmU6Ci0gICAgICAg
IG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBOb0ZhaWx1cmU7Ci0gICAgICAgIGlmIChtX2NsaWVu
dCkKLSAgICAgICAgICAgIG1fY2xpZW50LT53YXNCbG9ja2VkKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEludmFsaWRVUkxGYWlsdXJlOgotICAgICAgICBtX3NjaGVkdWxlZEZhaWx1cmVU
eXBlID0gTm9GYWlsdXJlOwotICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICBtX2Ns
aWVudC0+Y2Fubm90U2hvd1VSTCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBOb0ZhaWx1
cmU6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19CisgICAgTmV0d29ya0RhdGFUYXNrOjpzZXRQ
ZW5kaW5nRG93bmxvYWRMb2NhdGlvbihmaWxlbmFtZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwg
YWxsb3dPdmVyd3JpdGUpOwogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6c2V0UGVuZGluZ0Rvd25s
b2FkTG9jYXRpb24oY29uc3QgV1RGOjpTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGJvb2wgYWxsb3dPdmVyd3Jp
dGUpCi17CiAgICAgQVNTRVJUKCFtX3NhbmRib3hFeHRlbnNpb24pOwogICAgIG1fc2FuZGJveEV4
dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
KTsKICAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKQogICAgICAgICBtX3NhbmRib3hFeHRlbnNp
b24tPmNvbnN1bWUoKTsKIAotICAgIG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBmaWxlbmFt
ZTsKLSAgICBtX3Rhc2suZ2V0KCkuX3BhdGhUb0Rvd25sb2FkVGFza0ZpbGUgPSBmaWxlbmFtZTsK
KyAgICBtX3Rhc2suZ2V0KCkuX3BhdGhUb0Rvd25sb2FkVGFza0ZpbGUgPSBtX3BlbmRpbmdEb3du
bG9hZExvY2F0aW9uOwogCi0gICAgaWYgKGFsbG93T3ZlcndyaXRlICYmIFdlYkNvcmU6OmZpbGVF
eGlzdHMoZmlsZW5hbWUpKQorICAgIGlmIChhbGxvd092ZXJ3cml0ZSAmJiBXZWJDb3JlOjpmaWxl
RXhpc3RzKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24pKQogICAgICAgICBXZWJDb3JlOjpkZWxl
dGVGaWxlKGZpbGVuYW1lKTsKIH0KIAotYm9vbCBOZXR3b3JrRGF0YVRhc2s6OnRyeVBhc3N3b3Jk
QmFzZWRBdXRoZW50aWNhdGlvbihjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYgY2hhbGxlbmdlLCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYgY29tcGxldGlv
bkhhbmRsZXIpCitib29sIE5ldHdvcmtEYXRhVGFza0NvY29hOjp0cnlQYXNzd29yZEJhc2VkQXV0
aGVudGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxs
ZW5nZSwgY29uc3QgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXImIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIGlmICghY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLmlzUGFzc3dvcmRCYXNl
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMjksNyArMjg3LDcgQEAgYm9vbCBOZXR3
b3JrRGF0YVRhc2s6OnRyeVBhc3N3b3JkQmFzZWRBdXRoZW50aWNhdGlvbihjb25zdCBXZWJDb3Jl
OjpBdXRoZW50aWNhdGkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjp0cmFuc2ZlclNhbmRib3hFeHRlbnNpb25Ub0Rvd25sb2FkKERvd25sb2FkJiBkb3dubG9h
ZCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OnRyYW5zZmVyU2FuZGJveEV4dGVuc2lvblRv
RG93bmxvYWQoRG93bmxvYWQmIGRvd25sb2FkKQogewogICAgIGRvd25sb2FkLnNldFNhbmRib3hF
eHRlbnNpb24oV1RGTW92ZShtX3NhbmRib3hFeHRlbnNpb24pKTsKIH0KQEAgLTM1Niw3ICszMTQs
NyBAQCBzdGF0aWMgYm9vbCBjZXJ0aWZpY2F0ZXNNYXRjaChTZWNUcnVzdFJlZiB0cnVzdDEsIFNl
Y1RydXN0UmVmIHRydXN0MikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBOZXR3b3JrRGF0
YVRhc2s6OmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ29y
ZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKK2Jvb2wgTmV0d29ya0RhdGFU
YXNrQ29jb2E6OmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKIHsKICAgICBjb25zdCBT
dHJpbmcmIGhvc3QgPSBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkuaG9zdCgpOwogICAgIE5T
QXJyYXkgKmNlcnRpZmljYXRlcyA9IFtOU1VSTFJlcXVlc3QgYWxsb3dzU3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdDpob3N0XTsKQEAgLTM3NCwzOCArMzMyLDMzIEBAIGJvb2wgTmV0d29y
a0RhdGFUYXNrOjphbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdl
YkNvcmU6OkF1dGhlCiAgICAgcmV0dXJuIGNlcnRpZmljYXRlc01hdGNoKHRydXN0LmdldCgpLCBj
aGFsbGVuZ2UubnNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpLnByb3RlY3Rpb25TcGFjZS5z
ZXJ2ZXJUcnVzdCk7CiB9CiAKLVN0cmluZyBOZXR3b3JrRGF0YVRhc2s6OnN1Z2dlc3RlZEZpbGVu
YW1lKCkKK1N0cmluZyBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6c3VnZ2VzdGVkRmlsZW5hbWUoKSBj
b25zdAogewogICAgIGlmICghbV9zdWdnZXN0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBtX3N1Z2dlc3RlZEZpbGVuYW1lOwogICAgIHJldHVybiBtX3Rhc2suZ2V0KCkucmVz
cG9uc2Uuc3VnZ2VzdGVkRmlsZW5hbWU7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZXRT
dWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCi17Ci0gICAgbV9z
dWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZE5hbWU7Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjpjYW5jZWwoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6Y2FuY2VsKCkKIHsKICAg
ICBbbV90YXNrIGNhbmNlbF07CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXN1bWUoKQor
dm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6cmVzdW1lKCkKIHsKICAgICBpZiAobV9zY2hlZHVs
ZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpCiAgICAgICAgIG1fZmFpbHVyZVRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKICAgICBbbV90YXNrIHJlc3VtZV07CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjpzdXNwZW5kKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OnN1c3BlbmQoKQogewog
ICAgIGlmIChtX2ZhaWx1cmVUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX2ZhaWx1cmVUaW1l
ci5zdG9wKCk7CiAgICAgW21fdGFzayBzdXNwZW5kXTsKIH0KIAotTmV0d29ya0RhdGFUYXNrOjpT
dGF0ZSBOZXR3b3JrRGF0YVRhc2s6OnN0YXRlKCkgY29uc3QKK05ldHdvcmtEYXRhVGFzazo6U3Rh
dGUgTmV0d29ya0RhdGFUYXNrQ29jb2E6OnN0YXRlKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKFtt
X3Rhc2sgc3RhdGVdKSB7CiAgICAgY2FzZSBOU1VSTFNlc3Npb25UYXNrU3RhdGVSdW5uaW5nOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1By
b2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtQcm9jZXNzQ29jb2EubW0KaW5kZXggMTJjYjQ1MS4uY2ZjMjI2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0Nv
Y29hLm1tCkBAIC0yOSw3ICsyOSw3IEBACiAjaW1wb3J0ICJOZXR3b3JrQ2FjaGUuaCIKICNpbXBv
cnQgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW1wb3J0ICJOZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuaCIKLSNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW1wb3J0ICJO
ZXR3b3JrU2Vzc2lvbkNvY29hLmgiCiAjaW1wb3J0ICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW1w
b3J0ICJTZXNzaW9uVHJhY2tlci5oIgogI2ltcG9ydCA8V2ViQ29yZS9DRk5ldHdvcmtTUEkuaD4K
QEAgLTg1LDExICs4NSwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAgIFNlc3Npb25U
cmFja2VyOjpzZXRJZGVudGlmaWVyQmFzZShwYXJhbWV0ZXJzLnVpUHJvY2Vzc0J1bmRsZUlkZW50
aWZpZXIpOwogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAgICBOZXR3b3JrU2Vzc2lvbjo6
c2V0U291cmNlQXBwbGljYXRpb25BdWRpdFRva2VuRGF0YShzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0
RGF0YSgpKTsKLSAgICBOZXR3b3JrU2Vzc2lvbjo6c2V0U291cmNlQXBwbGljYXRpb25CdW5kbGVJ
ZGVudGlmaWVyKHBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsK
LSAgICBOZXR3b3JrU2Vzc2lvbjo6c2V0U291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlm
aWVyKHBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKTsKKyAg
ICBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvbkF1ZGl0VG9rZW5EYXRh
KHNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhKCkpOworICAgIE5ldHdvcmtTZXNzaW9uQ29jb2E6
OnNldFNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihwYXJhbWV0ZXJzLnNvdXJjZUFw
cGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7CisgICAgTmV0d29ya1Nlc3Npb25Db2NvYTo6c2V0
U291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKHBhcmFtZXRlcnMuc291cmNlQXBw
bGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKTsKICNpZiBQTEFURk9STShJT1MpCi0gICAgTmV0
d29ya1Nlc3Npb246OnNldENURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZShwYXJhbWV0ZXJzLmN0
RGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZSk7CisgICAgTmV0d29ya1Nlc3Npb25Db2NvYTo6c2V0
Q1REYXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlKHBhcmFtZXRlcnMuY3REYXRhQ29ubmVjdGlvblNl
cnZpY2VUeXBlKTsKICNlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EuaCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmIyZGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oCkBA
IC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShORVRX
T1JLX1NFU1NJT04pCisKK09CSkNfQ0xBU1MgTlNVUkxTZXNzaW9uOworT0JKQ19DTEFTUyBOU09w
ZXJhdGlvblF1ZXVlOworT0JKQ19DTEFTUyBXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGU7CisKKyNp
bmNsdWRlICJEb3dubG9hZElELmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrQ29jb2EuaCIK
KyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrU2Vzc2lvbkNvY29hIGZpbmFsIDog
cHVibGljIE5ldHdvcmtTZXNzaW9uIHsKKyAgICBmcmllbmQgY2xhc3MgTmV0d29ya0RhdGFUYXNr
Q29jb2E7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrU2Vzc2lvbj4gY3JlYXRlKFdl
YkNvcmU6OlNlc3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKik7CisgICAgc3RhdGljIE5l
dHdvcmtTZXNzaW9uJiBkZWZhdWx0U2Vzc2lvbigpOworICAgIH5OZXR3b3JrU2Vzc2lvbkNvY29h
KCk7CisKKyAgICAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IE5ldHdvcmtTZXNzaW9uIGhh
cyBiZWVuIGNyZWF0ZWQuCisgICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
KEN1c3RvbVByb3RvY29sTWFuYWdlciopOworICAgIHN0YXRpYyB2b2lkIHNldFNvdXJjZUFwcGxp
Y2F0aW9uQXVkaXRUb2tlbkRhdGEoUmV0YWluUHRyPENGRGF0YVJlZj4mJik7CisgICAgc3RhdGlj
IHZvaWQgc2V0U291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYp
OworICAgIHN0YXRpYyB2b2lkIHNldFNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmll
cihjb25zdCBTdHJpbmcmKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgc3RhdGljIHZvaWQgc2V0
Q1REYXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlKGNvbnN0IFN0cmluZyYpOworI2VuZGlmCisKKyAg
ICBOZXR3b3JrRGF0YVRhc2tDb2NvYSogZGF0YVRhc2tGb3JJZGVudGlmaWVyKE5ldHdvcmtEYXRh
VGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMpOwor
CisgICAgdm9pZCBhZGREb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRp
ZmllciwgRG93bmxvYWRJRCk7CisgICAgRG93bmxvYWRJRCBkb3dubG9hZElEKE5ldHdvcmtEYXRh
VGFza0NvY29hOjpUYXNrSWRlbnRpZmllcik7CisgICAgRG93bmxvYWRJRCB0YWtlRG93bmxvYWRJ
RChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIpOworCitwcml2YXRlOgorICAg
IE5ldHdvcmtTZXNzaW9uQ29jb2EoV2ViQ29yZTo6U2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1h
bmFnZXIqKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpIG92ZXJyaWRlOworICAg
IHZvaWQgY2xlYXJDcmVkZW50aWFscygpIG92ZXJyaWRlOworCisgICAgSGFzaE1hcDxOZXR3b3Jr
RGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFza0NvY29hKj4gbV9k
YXRhVGFza01hcFdpdGhDcmVkZW50aWFsczsKKyAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFza0Nv
Y29hOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqPiBtX2RhdGFUYXNrTWFw
V2l0aG91dENyZWRlbnRpYWxzOworICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRh
c2tJZGVudGlmaWVyLCBEb3dubG9hZElEPiBtX2Rvd25sb2FkTWFwOworCisgICAgUmV0YWluUHRy
PE5TVVJMU2Vzc2lvbj4gbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlOworICAgIFJldGFp
blB0cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3Rv
cmFnZURlbGVnYXRlOworICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbldpdGhv
dXRDcmVkZW50aWFsU3RvcmFnZTsKKyAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVn
YXRlPiBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNz
aW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
U2Vzc2lvbkNvY29hLm1tCmluZGV4IDAxZjJhMzkuLmYxMzQ1ODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2Nv
YS5tbQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9y
dCAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uQ29jb2EuaCIKIAog
I2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAKQEAgLTgyLDE3ICs4MiwxNyBAQCBzdGF0aWMgTlNV
UkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uIHRvTlNVUkxTZXNzaW9uQXV0aENoYWxs
ZW5nZURpc3Bvc2l0aQogfQogCiBAaW50ZXJmYWNlIFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSA6
IE5TT2JqZWN0IDxOU1VSTFNlc3Npb25EYXRhRGVsZWdhdGU+IHsKLSAgICBSZWZQdHI8V2ViS2l0
OjpOZXR3b3JrU2Vzc2lvbj4gX3Nlc3Npb247CisgICAgUmVmUHRyPFdlYktpdDo6TmV0d29ya1Nl
c3Npb25Db2NvYT4gX3Nlc3Npb247CiAgICAgYm9vbCBfd2l0aENyZWRlbnRpYWxzOwogfQogCi0t
IChpZClpbml0V2l0aE5ldHdvcmtTZXNzaW9uOihXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uJilzZXNz
aW9uIHdpdGhDcmVkZW50aWFsczooYm9vbCl3aXRoQ3JlZGVudGlhbHM7CistIChpZClpbml0V2l0
aE5ldHdvcmtTZXNzaW9uOihXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2EmKXNlc3Npb24gd2l0
aENyZWRlbnRpYWxzOihib29sKXdpdGhDcmVkZW50aWFsczsKIAogQGVuZAogCiBAaW1wbGVtZW50
YXRpb24gV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlCiAKLS0gKGlkKWluaXRXaXRoTmV0d29ya1Nl
c3Npb246KFdlYktpdDo6TmV0d29ya1Nlc3Npb24mKXNlc3Npb24gd2l0aENyZWRlbnRpYWxzOihi
b29sKXdpdGhDcmVkZW50aWFscworLSAoaWQpaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjooV2ViS2l0
OjpOZXR3b3JrU2Vzc2lvbkNvY29hJilzZXNzaW9uIHdpdGhDcmVkZW50aWFsczooYm9vbCl3aXRo
Q3JlZGVudGlhbHMKIHsKICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIGlmICghc2VsZikK
QEAgLTI5Niw3ICsyOTYsNyBAQCBzdGF0aWMgTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bv
c2l0aW9uIHRvTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aQogewogICAgIGF1dG8g
c3RvcmVkQ3JlZGVudGlhbHMgPSBfd2l0aENyZWRlbnRpYWxzID8gV2ViQ29yZTo6U3RvcmVkQ3Jl
ZGVudGlhbHM6OkFsbG93U3RvcmVkQ3JlZGVudGlhbHMgOiBXZWJDb3JlOjpTdG9yZWRDcmVkZW50
aWFsczo6RG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwogICAgIGlmIChhdXRvKiBuZXR3b3Jr
RGF0YVRhc2sgPSBfc2Vzc2lvbi0+ZGF0YVRhc2tGb3JJZGVudGlmaWVyKFtkYXRhVGFzayB0YXNr
SWRlbnRpZmllcl0sIHN0b3JlZENyZWRlbnRpYWxzKSkgewotICAgICAgICBSZWY8TmV0d29ya0Rh
dGFUYXNrPiBwcm90ZWN0ZWROZXR3b3JrRGF0YVRhc2soKm5ldHdvcmtEYXRhVGFzayk7CisgICAg
ICAgIFJlZjxOZXR3b3JrRGF0YVRhc2tDb2NvYT4gcHJvdGVjdGVkTmV0d29ya0RhdGFUYXNrKCpu
ZXR3b3JrRGF0YVRhc2spOwogICAgICAgICBhdXRvIGRvd25sb2FkSUQgPSBuZXR3b3JrRGF0YVRh
c2stPnBlbmRpbmdEb3dubG9hZElEKCk7CiAgICAgICAgIGF1dG8mIGRvd25sb2FkTWFuYWdlciA9
IFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpOwog
ICAgICAgICBhdXRvIGRvd25sb2FkID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJLaXQ6OkRvd25sb2Fk
Pihkb3dubG9hZE1hbmFnZXIsIGRvd25sb2FkSUQsIGRvd25sb2FkVGFzaywgX3Nlc3Npb24tPnNl
c3Npb25JRCgpLCBuZXR3b3JrRGF0YVRhc2stPnN1Z2dlc3RlZEZpbGVuYW1lKCkpOwpAQCAtMzE0
LDE0ICszMTQsMTEgQEAgc3RhdGljIE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlv
biB0b05TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGkKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAgICAgCi1zdGF0aWMgTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlv
bkZvclR5cGUoTmV0d29ya1Nlc3Npb246OlR5cGUgdHlwZSkKK3N0YXRpYyBOU1VSTFNlc3Npb25D
b25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uRm9yU2Vzc2lvbklEKGNvbnN0IFdlYkNvcmU6OlNl
c3Npb25JRCYgc2Vzc2lvbikKIHsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIE5ldHdv
cmtTZXNzaW9uOjpUeXBlOjpOb3JtYWw6Ci0gICAgICAgIHJldHVybiBbTlNVUkxTZXNzaW9uQ29u
ZmlndXJhdGlvbiBkZWZhdWx0U2Vzc2lvbkNvbmZpZ3VyYXRpb25dOwotICAgIGNhc2UgTmV0d29y
a1Nlc3Npb246OlR5cGU6OkVwaGVtZXJhbDoKKyAgICBpZiAoc2Vzc2lvbi5pc0VwaGVtZXJhbCgp
KQogICAgICAgICByZXR1cm4gW05TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gZXBoZW1lcmFsU2Vz
c2lvbkNvbmZpZ3VyYXRpb25dOwotICAgIH0KKyAgICByZXR1cm4gW05TVVJMU2Vzc2lvbkNvbmZp
Z3VyYXRpb24gZGVmYXVsdFNlc3Npb25Db25maWd1cmF0aW9uXTsKIH0KIAogc3RhdGljIFJlZlB0
cjxDdXN0b21Qcm90b2NvbE1hbmFnZXI+JiBnbG9iYWxDdXN0b21Qcm90b2NvbE1hbmFnZXIoKQpA
QCAtMzYwLDUyICszNTcsNTIgQEAgc3RhdGljIFN0cmluZyYgZ2xvYmFsQ1REYXRhQ29ubmVjdGlv
blNlcnZpY2VUeXBlKCkKIHN0YXRpYyBib29sIHNlc3Npb25zQ3JlYXRlZCA9IGZhbHNlOwogI2Vu
ZGlmCiAKLXZvaWQgTmV0d29ya1Nlc3Npb246OnNldEN1c3RvbVByb3RvY29sTWFuYWdlcihDdXN0
b21Qcm90b2NvbE1hbmFnZXIqIGN1c3RvbVByb3RvY29sTWFuYWdlcikKK3ZvaWQgTmV0d29ya1Nl
c3Npb25Db2NvYTo6c2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKEN1c3RvbVByb3RvY29sTWFuYWdl
ciogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKQogewogICAgIEFTU0VSVCghc2Vzc2lvbnNDcmVhdGVk
KTsKICAgICBnbG9iYWxDdXN0b21Qcm90b2NvbE1hbmFnZXIoKSA9IGN1c3RvbVByb3RvY29sTWFu
YWdlcjsKIH0KICAgICAKLXZvaWQgTmV0d29ya1Nlc3Npb246OnNldFNvdXJjZUFwcGxpY2F0aW9u
QXVkaXRUb2tlbkRhdGEoUmV0YWluUHRyPENGRGF0YVJlZj4mJiBkYXRhKQordm9pZCBOZXR3b3Jr
U2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvbkF1ZGl0VG9rZW5EYXRhKFJldGFpblB0
cjxDRkRhdGFSZWY+JiYgZGF0YSkKIHsKICAgICBBU1NFUlQoIXNlc3Npb25zQ3JlYXRlZCk7CiAg
ICAgZ2xvYmFsU291cmNlQXBwbGljYXRpb25BdWRpdFRva2VuRGF0YSgpID0gZGF0YTsKIH0KIAot
dm9pZCBOZXR3b3JrU2Vzc2lvbjo6c2V0U291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVy
KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcikKK3ZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6c2V0
U291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaWRlbnRpZmll
cikKIHsKICAgICBBU1NFUlQoIXNlc3Npb25zQ3JlYXRlZCk7CiAgICAgZ2xvYmFsU291cmNlQXBw
bGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCkgPSBpZGVudGlmaWVyOwogfQogCi12b2lkIE5ldHdv
cmtTZXNzaW9uOjpzZXRTb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJiBpZGVudGlmaWVyKQordm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VB
cHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQog
ewogICAgIEFTU0VSVCghc2Vzc2lvbnNDcmVhdGVkKTsKICAgICBnbG9iYWxTb3VyY2VBcHBsaWNh
dGlvblNlY29uZGFyeUlkZW50aWZpZXIoKSA9IGlkZW50aWZpZXI7CiB9CiAKICNpZiBQTEFURk9S
TShJT1MpCi12b2lkIE5ldHdvcmtTZXNzaW9uOjpzZXRDVERhdGFDb25uZWN0aW9uU2VydmljZVR5
cGUoY29uc3QgU3RyaW5nJiB0eXBlKQordm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRDVERh
dGFDb25uZWN0aW9uU2VydmljZVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIEFTU0VS
VCghc2Vzc2lvbnNDcmVhdGVkKTsKICAgICBnbG9iYWxDVERhdGFDb25uZWN0aW9uU2VydmljZVR5
cGUoKSA9IHR5cGU7CiB9CiAjZW5kaWYKIAotUmVmPE5ldHdvcmtTZXNzaW9uPiBOZXR3b3JrU2Vz
c2lvbjo6Y3JlYXRlKFR5cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyKiBjdXN0b21Qcm90b2NvbE1hbmFnZXIpCitSZWY8TmV0d29ya1Nl
c3Npb24+IE5ldHdvcmtTZXNzaW9uQ29jb2E6OmNyZWF0ZShXZWJDb3JlOjpTZXNzaW9uSUQgc2Vz
c2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIqIGN1c3RvbVByb3RvY29sTWFuYWdlcikKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrU2Vzc2lvbih0eXBlLCBzZXNzaW9uSUQs
IGN1c3RvbVByb3RvY29sTWFuYWdlcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdv
cmtTZXNzaW9uQ29jb2Eoc2Vzc2lvbklELCBjdXN0b21Qcm90b2NvbE1hbmFnZXIpKTsKIH0KIAot
TmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpCitOZXR3b3Jr
U2Vzc2lvbiYgTmV0d29ya1Nlc3Npb25Db2NvYTo6ZGVmYXVsdFNlc3Npb24oKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9u
ID0gJk5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Npb246OlR5cGU6Ok5vcm1hbCwg
V2ViQ29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIGdsb2JhbEN1c3RvbVByb3Rv
Y29sTWFuYWdlcigpLmdldCgpKS5sZWFrUmVmKCk7CisgICAgc3RhdGljIE5ldHdvcmtTZXNzaW9u
KiBzZXNzaW9uID0gJk5ldHdvcmtTZXNzaW9uQ29jb2E6OmNyZWF0ZShXZWJDb3JlOjpTZXNzaW9u
SUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgZ2xvYmFsQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKCkuZ2V0
KCkpLmxlYWtSZWYoKTsKICAgICByZXR1cm4gKnNlc3Npb247CiB9CiAKLU5ldHdvcmtTZXNzaW9u
OjpOZXR3b3JrU2Vzc2lvbihUeXBlIHR5cGUsIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IEN1c3RvbVByb3RvY29sTWFuYWdlciogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKQotICAgIDogbV9z
ZXNzaW9uSUQoc2Vzc2lvbklEKQorTmV0d29ya1Nlc3Npb25Db2NvYTo6TmV0d29ya1Nlc3Npb25D
b2NvYShXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIq
IGN1c3RvbVByb3RvY29sTWFuYWdlcikKKyAgICA6IE5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkK
IHsKICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKIApAQCAtNDEzLDcgKzQxMCw3IEBA
IE5ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihUeXBlIHR5cGUsIFdlYkNvcmU6OlNlc3Np
b25JRCBzZXNzaW9uSUQsIEN1c3RvbVByCiAgICAgc2Vzc2lvbnNDcmVhdGVkID0gdHJ1ZTsKICNl
bmRpZgogCi0gICAgTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IGNv
bmZpZ3VyYXRpb25Gb3JUeXBlKHR5cGUpOworICAgIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24g
KmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uRm9yU2Vzc2lvbklEKG1fc2Vzc2lvbklEKTsK
IAogICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgpKQogICAgICAg
ICBjb25maWd1cmF0aW9uLlVSTENhY2hlID0gbmlsOwpAQCAtNDQ1LDExICs0NDIsOSBAQCBOZXR3
b3JrU2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24oVHlwZSB0eXBlLCBXZWJDb3JlOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBDdXN0b21QcgogI2VuZGlmCiAKICAgICBpZiAoc2Vzc2lvbklEID09IFdlYkNv
cmU6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKSB7Ci0gICAgICAgIEFTU0VSVCh0eXBl
ID09IFR5cGU6Ok5vcm1hbCk7CiAgICAgICAgIGlmIChDRkhUVFBDb29raWVTdG9yYWdlUmVmIHN0
b3JhZ2UgPSBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmRlZmF1bHRTdG9yYWdlU2Vz
c2lvbigpLmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSkKICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24u
SFRUUENvb2tpZVN0b3JhZ2UgPSBbW1tOU0hUVFBDb29raWVTdG9yYWdlIGFsbG9jXSBfaW5pdFdp
dGhDRkhUVFBDb29raWVTdG9yYWdlOnN0b3JhZ2VdIGF1dG9yZWxlYXNlXTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBBU1NFUlQodHlwZSA9PSBUeXBlOjpFcGhlbWVyYWwpOwogICAgICAgICBhdXRv
KiBzdG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFn
ZVNlc3Npb24oc2Vzc2lvbklEKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RvcmFnZVNlc3Np
b24pOwogICAgICAgICBpZiAoQ0ZIVFRQQ29va2llU3RvcmFnZVJlZiBzdG9yYWdlID0gc3RvcmFn
ZVNlc3Npb24tPmNvb2tpZVN0b3JhZ2UoKS5nZXQoKSkKQEAgLTQ2NSwyNSArNDYwLDE4IEBAIE5l
dHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihUeXBlIHR5cGUsIFdlYkNvcmU6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIEN1c3RvbVByCiAgICAgTE9HKE5ldHdvcmtTZXNzaW9uLCAiQ3JlYXRlZCBO
ZXR3b3JrU2Vzc2lvbiB3aXRoIGNvb2tpZUFjY2VwdFBvbGljeSAlbHUiLCBjb25maWd1cmF0aW9u
LkhUVFBDb29raWVTdG9yYWdlLmNvb2tpZUFjY2VwdFBvbGljeSk7CiB9CiAKLU5ldHdvcmtTZXNz
aW9uOjp+TmV0d29ya1Nlc3Npb24oKQorTmV0d29ya1Nlc3Npb25Db2NvYTo6fk5ldHdvcmtTZXNz
aW9uKCkKIHsKIH0KIAotdm9pZCBOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCgp
Cit2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmludmFsaWRhdGVBbmRDYW5jZWwoKQogewogICAg
IFttX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2UgaW52YWxpZGF0ZUFuZENhbmNlbF07CiAg
ICAgW21fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZSBpbnZhbGlkYXRlQW5kQ2FuY2Vs
XTsKIH0KIAogCi1XZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtTZXNzaW9u
OjpuZXR3b3JrU3RvcmFnZVNlc3Npb24oKSBjb25zdAotewotICAgIGF1dG8qIHN0b3JhZ2VTZXNz
aW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihtX3Nl
c3Npb25JRCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3RvcmFnZVNlc3Npb24pOwotICAgIHJldHVy
biAqc3RvcmFnZVNlc3Npb247Ci19Ci0KLXZvaWQgTmV0d29ya1Nlc3Npb246OmNsZWFyQ3JlZGVu
dGlhbHMoKQordm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpjbGVhckNyZWRlbnRpYWxzKCkKIHsK
ICNpZiAhVVNFKENSRURFTlRJQUxfU1RPUkFHRV9XSVRIX05FVFdPUktfU0VTU0lPTikKICAgICBB
U1NFUlQobV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFscy5pc0VtcHR5KCkpOwpAQCAtNDk1LDcg
KzQ4Myw3IEBAIHZvaWQgTmV0d29ya1Nlc3Npb246OmNsZWFyQ3JlZGVudGlhbHMoKQogI2VuZGlm
CiB9CiAKLU5ldHdvcmtEYXRhVGFzayogTmV0d29ya1Nlc3Npb246OmRhdGFUYXNrRm9ySWRlbnRp
ZmllcihOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscykKK05ldHdvcmtEYXRhVGFz
a0NvY29hKiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpkYXRhVGFza0ZvcklkZW50aWZpZXIoTmV0d29y
a0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyLCBXZWJDb3JlOjpT
dG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscykKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIGlmIChzdG9yZWRDcmVkZW50aWFscyA9PSBXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFsczo6QWxsb3dTdG9yZWRDcmVkZW50aWFscykKQEAgLTUwMyw3ICs0OTEsNyBAQCBO
ZXR3b3JrRGF0YVRhc2sqIE5ldHdvcmtTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIoTmV0
d29ya0RhdGFUYXNrOjpUYXNrSWRlbgogICAgIHJldHVybiBtX2RhdGFUYXNrTWFwV2l0aG91dENy
ZWRlbnRpYWxzLmdldCh0YXNrSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgTmV0d29ya1Nlc3Npb246
OmFkZERvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRp
ZmllciwgRG93bmxvYWRJRCBkb3dubG9hZElEKQordm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjph
ZGREb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciB0YXNrSWRl
bnRpZmllciwgRG93bmxvYWRJRCBkb3dubG9hZElEKQogewogI2lmbmRlZiBOREVCVUcKICAgICBB
U1NFUlQoIW1fZG93bmxvYWRNYXAuY29udGFpbnModGFza0lkZW50aWZpZXIpKTsKQEAgLTUxMywx
MyArNTAxLDEzIEBAIHZvaWQgTmV0d29ya1Nlc3Npb246OmFkZERvd25sb2FkSUQoTmV0d29ya0Rh
dGFUYXNrOjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmllCiAgICAgbV9kb3dubG9hZE1hcC5h
ZGQodGFza0lkZW50aWZpZXIsIGRvd25sb2FkSUQpOwogfQogCi1Eb3dubG9hZElEIE5ldHdvcmtT
ZXNzaW9uOjpkb3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIgdGFza0lk
ZW50aWZpZXIpCitEb3dubG9hZElEIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmRvd25sb2FkSUQoTmV0
d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyKQogewogICAg
IEFTU0VSVChtX2Rvd25sb2FkTWFwLmdldCh0YXNrSWRlbnRpZmllcikuZG93bmxvYWRJRCgpKTsK
ICAgICByZXR1cm4gbV9kb3dubG9hZE1hcC5nZXQodGFza0lkZW50aWZpZXIpOwogfQogCi1Eb3du
bG9hZElEIE5ldHdvcmtTZXNzaW9uOjp0YWtlRG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2s6OlRh
c2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyKQorRG93bmxvYWRJRCBOZXR3b3JrU2Vzc2lvbkNv
Y29hOjp0YWtlRG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIg
dGFza0lkZW50aWZpZXIpCiB7CiAgICAgYXV0byBkb3dubG9hZElEID0gbV9kb3dubG9hZE1hcC50
YWtlKHRhc2tJZGVudGlmaWVyKTsKICAgICByZXR1cm4gZG93bmxvYWRJRDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4
dC5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5n
Q29udGV4dC5tbQppbmRleCBjZTBmNzNmLi44OWE3ZWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0
Lm1tCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3Vy
ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICBOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklELCBi
YXNlICsgJy4nICsgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklELnNlc3Npb25JRCgpKSk7CiAKICNp
ZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIGF1dG8gbmV0d29ya1Nlc3Npb24gPSBOZXR3b3Jr
U2Vzc2lvbjo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpFcGhlbWVyYWwsIHNlc3Npb25J
RCwgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyPigpKTsKKyAgICBhdXRvIG5ldHdvcmtTZXNzaW9uID0gTmV0d29ya1Nlc3Npb246OmNy
ZWF0ZShzZXNzaW9uSUQsIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PEN1
c3RvbVByb3RvY29sTWFuYWdlcj4oKSk7CiAgICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24o
c2Vzc2lvbklELCBXVEZNb3ZlKG5ldHdvcmtTZXNzaW9uKSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291
cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFz
a1NvdXAuY3BwCmluZGV4IGU2ODcyZTMuLjZiZGJiYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcApA
QCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJO
ZXR3b3JrRGF0YVRhc2suaCIKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2tTb3VwLmgiCiAKICNp
bmNsdWRlICJBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNl
LmgiCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiRG93bmxvYWRTb3VwRXJyb3JzLmgiCiAj
aW5jbHVkZSAiTmV0d29ya0xvYWQuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgotI2lu
Y2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Tb3VwLmgi
CiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRoZW50aWNhdGlv
bkNoYWxsZW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRUUFBhcnNlcnMuaD4KQEAgLTQ3LDMw
ICs0NywxNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIGNvbnN0IHNpemVfdCBnRGVm
YXVsdFJlYWRCdWZmZXJTaXplID0gODE5MjsKIAotTmV0d29ya0RhdGFUYXNrOjpOZXR3b3JrRGF0
YVRhc2soTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xp
ZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIFN0b3Jl
ZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDb250ZW50U25pZmZpbmdQb2xpY3kgc2hv
dWxkQ29udGVudFNuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVk
aXJlY3QpCi0gICAgOiBtX2ZhaWx1cmVUaW1lcigqdGhpcywgJk5ldHdvcmtEYXRhVGFzazo6ZmFp
bHVyZVRpbWVyRmlyZWQpCi0gICAgLCBtX3Nlc3Npb24oJnNlc3Npb24pCi0gICAgLCBtX2NsaWVu
dCgmY2xpZW50KQotICAgICwgbV9zdG9yZWRDcmVkZW50aWFscyhzdG9yZWRDcmVkZW50aWFscykK
LSAgICAsIG1fbGFzdEhUVFBNZXRob2QocmVxdWVzdFdpdGhDcmVkZW50aWFscy5odHRwTWV0aG9k
KCkpCi0gICAgLCBtX2ZpcnN0UmVxdWVzdChyZXF1ZXN0V2l0aENyZWRlbnRpYWxzKQotICAgICwg
bV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KHNob3VsZENsZWFyUmVm
ZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCitOZXR3b3JrRGF0YVRhc2tTb3VwOjpOZXR3b3Jr
RGF0YVRhc2tTb3VwKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGll
bnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxz
LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ29udGVudFNuaWZmaW5nUG9s
aWN5IHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1Rv
SFRUUFJlZGlyZWN0KQorICAgIDogTmV0d29ya0RhdGFUYXNrKHNlc3Npb24sIGNsaWVudCwgcmVx
dWVzdFdpdGhDcmVkZW50aWFscywgc3RvcmVkQ3JlZGVudGlhbHMsIHNob3VsZENsZWFyUmVmZXJy
ZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCiAgICAgLCBtX3Nob3VsZENvbnRlbnRTbmlmZihzaG91
bGRDb250ZW50U25pZmYpCi0gICAgLCBtX3RpbWVvdXRTb3VyY2UoUnVuTG9vcDo6bWFpbigpLCB0
aGlzLCAmTmV0d29ya0RhdGFUYXNrOjp0aW1lb3V0RmlyZWQpCisgICAgLCBtX3RpbWVvdXRTb3Vy
Y2UoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTmV0d29ya0RhdGFUYXNrU291cDo6dGltZW91dEZp
cmVkKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBtX3Nlc3Npb24tPm1f
ZGF0YVRhc2tTZXQuYWRkKHRoaXMpOwotCi0gICAgaWYgKCFyZXF1ZXN0V2l0aENyZWRlbnRpYWxz
LnVybCgpLmlzVmFsaWQoKSkgewotICAgICAgICBzY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZh
aWx1cmUpOworICAgIGRvd25jYXN0PE5ldHdvcmtTZXNzaW9uU291cD4obV9zZXNzaW9uLmdldCgp
KS5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhpcyk7CisgICAgaWYgKG1fc2NoZWR1bGVkRmFp
bHVyZVR5cGUgIT0gTm9GYWlsdXJlKQogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KCFwb3J0QWxsb3dlZChyZXF1ZXN0V2l0aENyZWRlbnRpYWxzLnVybCgpKSkgewotICAgICAgICBz
Y2hlZHVsZUZhaWx1cmUoQmxvY2tlZEZhaWx1cmUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQog
CiAgICAgYXV0byByZXF1ZXN0ID0gcmVxdWVzdFdpdGhDcmVkZW50aWFsczsKICAgICBpZiAocmVx
dWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKQEAgLTkzLDQ0ICs3NywxMyBA
QCBOZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lv
biwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JgogICAgIGNyZWF0ZVJlcXVlc3QocmVxdWVzdCk7CiB9
CiAKLU5ldHdvcmtEYXRhVGFzazo6fk5ldHdvcmtEYXRhVGFzaygpCitOZXR3b3JrRGF0YVRhc2tT
b3VwOjp+TmV0d29ya0RhdGFUYXNrU291cCgpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLSAgICBBU1NFUlQoIW1fY2xpZW50KTsKICAgICBjbGVhclJlcXVlc3QoKTsKLSAgICBtX3Nl
c3Npb24tPm1fZGF0YVRhc2tTZXQucmVtb3ZlKHRoaXMpOwotfQotCi12b2lkIE5ldHdvcmtEYXRh
VGFzazo6c2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlIHR5cGUpCi17Ci0gICAgQVNTRVJUKHR5
cGUgIT0gTm9GYWlsdXJlKTsKLSAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gdHlwZTsKLSAg
ICBtX2ZhaWx1cmVUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjpmYWlsdXJlVGltZXJGaXJlZCgpCi17Ci0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKLQotICAgIHN3aXRjaCAobV9zY2hlZHVsZWRGYWlsdXJlVHlw
ZSkgewotICAgIGNhc2UgQmxvY2tlZEZhaWx1cmU6Ci0gICAgICAgIG1fc2NoZWR1bGVkRmFpbHVy
ZVR5cGUgPSBOb0ZhaWx1cmU7Ci0gICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgIG1f
Y2xpZW50LT53YXNCbG9ja2VkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEludmFsaWRV
UkxGYWlsdXJlOgotICAgICAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJlOwot
ICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICBtX2NsaWVudC0+Y2Fubm90U2hvd1VS
TCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBOb0ZhaWx1cmU6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwPihtX3Nlc3Npb24uZ2V0
KCkpLnVucmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soKnRoaXMpOwogfQogCi1TdHJpbmcgTmV0d29y
a0RhdGFUYXNrOjpzdWdnZXN0ZWRGaWxlbmFtZSgpCitTdHJpbmcgTmV0d29ya0RhdGFUYXNrU291
cDo6c3VnZ2VzdGVkRmlsZW5hbWUoKSBjb25zdAogewogICAgIGlmICghbV9zdWdnZXN0ZWRGaWxl
bmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtX3N1Z2dlc3RlZEZpbGVuYW1lOwpAQCAt
MTQyLDIzICs5NSwxMyBAQCBTdHJpbmcgTmV0d29ya0RhdGFUYXNrOjpzdWdnZXN0ZWRGaWxlbmFt
ZSgpCiAgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhtX3Jlc3BvbnNlLnVybCgp
Lmxhc3RQYXRoQ29tcG9uZW50KCkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6c2V0U3Vn
Z2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQordm9pZCBOZXR3b3Jr
RGF0YVRhc2tTb3VwOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZp
bGVuYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25I
YW5kbGUsIGJvb2wgYWxsb3dPdmVyd3JpdGUpCiB7Ci0gICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9
IHN1Z2dlc3RlZE5hbWU7Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZXRQZW5kaW5nRG93
bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUmLCBib29sIGFsbG93T3ZlcndyaXRlKQotewotICAgIG1fcGVuZGluZ0Rvd25s
b2FkTG9jYXRpb24gPSBmaWxlbmFtZTsKKyAgICBOZXR3b3JrRGF0YVRhc2s6OnNldFBlbmRpbmdE
b3dubG9hZExvY2F0aW9uKGZpbGVuYW1lLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092
ZXJ3cml0ZSk7CiAgICAgbV9hbGxvd092ZXJ3cml0ZURvd25sb2FkID0gYWxsb3dPdmVyd3JpdGU7
CiB9CiAKLWJvb2wgTmV0d29ya0RhdGFUYXNrOjphbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNh
dGVGb3JIb3N0KGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpjcmVhdGVSZXF1ZXN0KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y3JlYXRl
UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgR1VuaXF1ZVB0
cjxTb3VwVVJJPiBzb3VwVVJJID0gcmVxdWVzdC5jcmVhdGVTb3VwVVJJKCk7CiAgICAgaWYgKCFz
b3VwVVJJKSB7CkBAIC0xNjYsNyArMTA5LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0
ZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgR1JlZlB0cjxTb3VwUmVxdWVzdD4gc291cFJlcXVlc3QgPSBhZG9wdEdS
ZWYoc291cF9zZXNzaW9uX3JlcXVlc3RfdXJpKG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgc291
cFVSSS5nZXQoKSwgbnVsbHB0cikpOworICAgIEdSZWZQdHI8U291cFJlcXVlc3Q+IHNvdXBSZXF1
ZXN0ID0gYWRvcHRHUmVmKHNvdXBfc2Vzc2lvbl9yZXF1ZXN0X3VyaShkb3duY2FzdDxOZXR3b3Jr
U2Vzc2lvblNvdXA+KG1fc2Vzc2lvbi5nZXQoKSkuc291cFNlc3Npb24oKSwgc291cFVSSS5nZXQo
KSwgbnVsbHB0cikpOwogICAgIGlmICghc291cFJlcXVlc3QpIHsKICAgICAgICAgc2NoZWR1bGVG
YWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjE4LDE5ICsx
NjEsMTkgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZVJlcXVlc3QoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9zb3VwTWVzc2FnZS5n
ZXQoKSwgIm5vdGlmeTo6dGxzLWVycm9ycyIsIEdfQ0FMTEJBQ0sodGxzRXJyb3JzQ2hhbmdlZENh
bGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgp
LCAiZ290LWhlYWRlcnMiLCBHX0NBTExCQUNLKGdvdEhlYWRlcnNDYWxsYmFjayksIHRoaXMpOwog
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9zb3VwTWVzc2FnZS5nZXQoKSwgIndyb3RlLWJvZHktZGF0
YSIsIEdfQ0FMTEJBQ0sod3JvdGVCb2R5RGF0YUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCksICJhdXRoZW50aWNhdGUiLCAgR19D
QUxMQkFDSyhhdXRoZW50aWNhdGVDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwPihtX3Nlc3Npb24uZ2V0KCkpLnNvdXBTZXNz
aW9uKCksICJhdXRoZW50aWNhdGUiLCAgR19DQUxMQkFDSyhhdXRoZW50aWNhdGVDYWxsYmFjayks
IHRoaXMpOwogI2lmIEVOQUJMRShXRUJfVElNSU5HKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9z
b3VwTWVzc2FnZS5nZXQoKSwgIm5ldHdvcmstZXZlbnQiLCBHX0NBTExCQUNLKG5ldHdvcmtFdmVu
dENhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdl
dCgpLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhyZXN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOwog
I2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA0OSwgOTEpCiAgICAgZ19zaWduYWxfY29ubmVjdCht
X3NvdXBNZXNzYWdlLmdldCgpLCAic3RhcnRpbmciLCBHX0NBTExCQUNLKHN0YXJ0aW5nQ2FsbGJh
Y2spLCB0aGlzKTsKICNlbHNlCi0gICAgZ19zaWduYWxfY29ubmVjdChtX3Nlc3Npb24tPnNvdXBT
ZXNzaW9uKCksICJyZXF1ZXN0LXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHJlcXVlc3RTdGFydGVkQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25jYXN0PE5ldHdvcmtTZXNz
aW9uU291cD4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpLCAicmVxdWVzdC1zdGFydGVk
IiwgR19DQUxMQkFDSyhyZXF1ZXN0U3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CiAjZW5kaWYKICNl
bmRpZgogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6Y2xlYXJSZXF1ZXN0KCkKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrU291cDo6Y2xlYXJSZXF1ZXN0KCkKIHsKICAgICBpZiAobV9zdGF0ZSA9PSBT
dGF0ZTo6Q29tcGxldGVkKQogICAgICAgICByZXR1cm47CkBAIC0yNDcsMTMgKzE5MCwxMyBAQCB2
b2lkIE5ldHdvcmtEYXRhVGFzazo6Y2xlYXJSZXF1ZXN0KCkKICAgICBtX2NhbmNlbGxhYmxlID0g
bnVsbHB0cjsKICAgICBpZiAobV9zb3VwTWVzc2FnZSkgewogICAgICAgICBnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9zb3VwTWVzc2FnZS5nZXQoKSwgR19TSUdOQUxfTUFU
Q0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7Ci0gICAgICAgIHNvdXBfc2Vz
c2lvbl9jYW5jZWxfbWVzc2FnZShtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3Nh
Z2UuZ2V0KCksIFNPVVBfU1RBVFVTX0NBTkNFTExFRCk7CisgICAgICAgIHNvdXBfc2Vzc2lvbl9j
YW5jZWxfbWVzc2FnZShkb3duY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXA+KG1fc2Vzc2lvbi5nZXQo
KSkuc291cFNlc3Npb24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSwgU09VUF9TVEFUVVNfQ0FOQ0VM
TEVEKTsKICAgICAgICAgbV9zb3VwTWVzc2FnZSA9IG51bGxwdHI7CiAgICAgfQotICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCks
IEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOworICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChkb3duY2FzdDxOZXR3b3JrU2Vz
c2lvblNvdXA+KG1fc2Vzc2lvbi5nZXQoKSkuc291cFNlc3Npb24oKSwgR19TSUdOQUxfTUFUQ0hf
REFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7CiB9CiAKLXZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpyZXN1bWUoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZXN1bWUoKQogewog
ICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpSdW5uaW5nKTsKICAgICBpZiAobV9zdGF0ZSA9
PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKQEAgLTI2
OCw3ICsyMTEsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVzdW1lKCkKIAogICAgIHN0YXJ0
VGltZW91dCgpOwogCi0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICBpZiAobV9zb3VwUmVxdWVzdCAmJiAhbV9jYW5jZWxsYWJsZSkgewogICAgICAgICBt
X2NhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOwogICAgICAgICBz
b3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhtX3NvdXBSZXF1ZXN0LmdldCgpLCBtX2NhbmNlbGxhYmxl
LmdldCgpLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHNlbmRSZXF1ZXN0
Q2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CkBAIC0yODgsNyArMjMxLDcgQEAg
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlc3VtZSgpCiAgICAgfQogfQogCi12b2lkIE5ldHdvcmtE
YXRhVGFzazo6c3VzcGVuZCgpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnN1c3BlbmQoKQog
ewogICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpTdXNwZW5kZWQpOwogICAgIGlmIChtX3N0
YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQpA
QCAtMjk4LDcgKzI0MSw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpzdXNwZW5kKCkKICAgICBz
dG9wVGltZW91dCgpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6Y2FuY2VsKCkKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrU291cDo6Y2FuY2VsKCkKIHsKICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0
ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKICAgICAgICAgcmV0
dXJuOwpAQCAtMzA2LDcgKzI0OSw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpjYW5jZWwoKQog
ICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q2FuY2VsaW5nOwogCiAgICAgaWYgKG1fc291cE1lc3NhZ2Up
Ci0gICAgICAgIHNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZShtX3Nlc3Npb24tPnNvdXBTZXNz
aW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfU1RBVFVTX0NBTkNFTExFRCk7CisgICAg
ICAgIHNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZShkb3duY2FzdDxOZXR3b3JrU2Vzc2lvblNv
dXA+KG1fc2Vzc2lvbi5nZXQoKSkuc291cFNlc3Npb24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSwg
U09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKIAogICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2Fu
Y2VsbGFibGUuZ2V0KCkpOwogCkBAIC0zMTQsNDMgKzI1Nyw0MyBAQCB2b2lkIE5ldHdvcmtEYXRh
VGFzazo6Y2FuY2VsKCkKICAgICAgICAgY2xlYW5Eb3dubG9hZEZpbGVzKCk7CiB9CiAKLXZvaWQg
TmV0d29ya0RhdGFUYXNrOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrU291cDo6aW52YWxpZGF0ZUFuZENhbmNlbCgpCiB7CiAgICAgY2FuY2VsKCk7CiAgICAgY2xl
YXJSZXF1ZXN0KCk7CiB9CiAKLU5ldHdvcmtEYXRhVGFzazo6U3RhdGUgTmV0d29ya0RhdGFUYXNr
OjpzdGF0ZSgpIGNvbnN0CitOZXR3b3JrRGF0YVRhc2s6OlN0YXRlIE5ldHdvcmtEYXRhVGFza1Nv
dXA6OnN0YXRlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdGF0ZTsKIH0KIAotdm9pZCBOZXR3
b3JrRGF0YVRhc2s6OnRpbWVvdXRGaXJlZCgpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnRp
bWVvdXRGaXJlZCgpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBt
X3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIW1fY2xpZW50KSB7CiAgICAgICAgIGNsZWFy
UmVxdWVzdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPE5ldHdvcmtE
YXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNr
U291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CiAg
ICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKFJlc291cmNlRXJyb3I6OnRpbWVvdXRF
cnJvcihtX2ZpcnN0UmVxdWVzdC51cmwoKSkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6
c3RhcnRUaW1lb3V0KCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c3RhcnRUaW1lb3V0KCkK
IHsKICAgICBpZiAobV9maXJzdFJlcXVlc3QudGltZW91dEludGVydmFsKCkgPiAwKQogICAgICAg
ICBtX3RpbWVvdXRTb3VyY2Uuc3RhcnRPbmVTaG90KG1fZmlyc3RSZXF1ZXN0LnRpbWVvdXRJbnRl
cnZhbCgpKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN0b3BUaW1lb3V0KCkKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrU291cDo6c3RvcFRpbWVvdXQoKQogewogICAgIG1fdGltZW91dFNvdXJj
ZS5zdG9wKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZW5kUmVxdWVzdENhbGxiYWNr
KFNvdXBSZXF1ZXN0KiBzb3VwUmVxdWVzdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdvcmtE
YXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c2VuZFJlcXVlc3RDYWxs
YmFjayhTb3VwUmVxdWVzdCogc291cFJlcXVlc3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3
b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewotICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHBy
b3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNr
U291cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOwogICAgIGlmICh0YXNrLT5zdGF0
ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxl
dGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewogICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMzcxLDcgKzMxNCw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNr
OjpzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiBzb3VwUmVxdWVzdCwgR0FzeW5jUmVz
dWx0CiAgICAgICAgIHRhc2stPmRpZFNlbmRSZXF1ZXN0KFdURk1vdmUoaW5wdXRTdHJlYW0pKTsK
IH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFNlbmRSZXF1ZXN0KEdSZWZQdHI8R0lucHV0
U3RyZWFtPiYmIGlucHV0U3RyZWFtKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRTZW5k
UmVxdWVzdChHUmVmUHRyPEdJbnB1dFN0cmVhbT4mJiBpbnB1dFN0cmVhbSkKIHsKICAgICBpZiAo
bV9zb3VwTWVzc2FnZSkgewogICAgICAgICBpZiAobV9zaG91bGRDb250ZW50U25pZmYgPT0gU25p
ZmZDb250ZW50ICYmIG1fc291cE1lc3NhZ2UtPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX05P
VF9NT0RJRklFRCkKQEAgLTQwNSw3ICszNDgsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlk
U2VuZFJlcXVlc3QoR1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYgaW5wdXRTdHJlYW0pCiAgICAgZGlk
UmVjZWl2ZVJlc3BvbnNlKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZWNlaXZl
UmVzcG9uc2UoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRSZWNlaXZlUmVzcG9uc2Uo
KQogewogICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7CiAKQEAgLTQzNiw3ICszNzks
NyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVjZWl2ZVJlc3BvbnNlKCkKICAgICB9KTsK
IH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnRsc0Vycm9yc0NoYW5nZWRDYWxsYmFjayhTb3Vw
TWVzc2FnZSogc291cE1lc3NhZ2UsIEdQYXJhbVNwZWMqLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2sp
Cit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnRsc0Vycm9yc0NoYW5nZWRDYWxsYmFjayhTb3Vw
TWVzc2FnZSogc291cE1lc3NhZ2UsIEdQYXJhbVNwZWMqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0
YXNrKQogewogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFz
ay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewogICAg
ICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKQEAgLTQ0NywyMCArMzkwLDIwIEBAIHZvaWQgTmV0
d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBN
ZXNzYWdlLCBHUGFyYW1TCiAgICAgdGFzay0+dGxzRXJyb3JzQ2hhbmdlZCgpOwogfQogCi12b2lk
IE5ldHdvcmtEYXRhVGFzazo6dGxzRXJyb3JzQ2hhbmdlZCgpCit2b2lkIE5ldHdvcmtEYXRhVGFz
a1NvdXA6OnRsc0Vycm9yc0NoYW5nZWQoKQogewogICAgIEFTU0VSVChtX3NvdXBSZXF1ZXN0KTsK
ICAgICBTb3VwTmV0d29ya1Nlc3Npb246OmNoZWNrVExTRXJyb3JzKG1fc291cFJlcXVlc3QuZ2V0
KCksIG1fc291cE1lc3NhZ2UuZ2V0KCksIFt0aGlzXSAoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpIHsKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXModGhpcyk7Cisg
ICAgICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwog
ICAgICAgICBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CiAgICAgICAgIG1fY2xpZW50LT5kaWRDb21w
bGV0ZVdpdGhFcnJvcihlcnJvcik7CiAgICAgfSk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNr
OjphcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6YXBwbHlBdXRoZW50aWNhdGlvblRvUmVxdWVzdChS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgLy8gV2UgYWx3YXlzIHB1dCB0aGUgY3Jl
ZGVudGlhbHMgaW50byB0aGUgVVJMLiBJbiB0aGUgQ29jYSBwb3J0IEhUVFAgZmFtaWx5IGNyZWRl
bnRpYWxzIGFyZSBhcHBsaWVkIGluCiAgICAgLy8gdGhlIGRpZFJlY2VpdmVDaGFsbGVuZ2UgY2Fs
bGJhY2ssIGJ1dCBsaWJzb3VwIHJlcXVpcmVzIHVzIHRvIHVzZSB0aGlzIG1ldGhvZCB0byBvdmVy
cmlkZQpAQCAtNDgwLDkgKzQyMyw5IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjphcHBseUF1dGhl
bnRpY2F0aW9uVG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKICAgICByZXF1ZXN0
LnNldFVSTCh1cmwpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRlQ2Fs
bGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291
cEF1dGgqIHNvdXBBdXRoLCBnYm9vbGVhbiByZXRyeWluZywgTmV0d29ya0RhdGFUYXNrKiB0YXNr
KQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjphdXRoZW50aWNhdGVDYWxsYmFjayhTb3VwU2Vz
c2lvbiogc2Vzc2lvbiwgU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBTb3VwQXV0aCogc291cEF1
dGgsIGdib29sZWFuIHJldHJ5aW5nLCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewotICAg
IEFTU0VSVChzZXNzaW9uID09IHRhc2stPm1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSk7CisgICAg
QVNTRVJUKHNlc3Npb24gPT0gdGFzay0+ZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwPihtX3Nl
c3Npb24uZ2V0KCkpLnNvdXBTZXNzaW9uKCkpOwogICAgIGlmIChzb3VwTWVzc2FnZSAhPSB0YXNr
LT5tX3NvdXBNZXNzYWdlLmdldCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ5OSw3ICs0NDIs
NyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNBdXRoZW50aWNhdGlvbkZhaWx1cmVTdGF0dXNDb2Rl
KGludCBodHRwU3RhdHVzQ29kZSkKICAgICByZXR1cm4gaHR0cFN0YXR1c0NvZGUgPT0gU09VUF9T
VEFUVVNfUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQgfHwgaHR0cFN0YXR1c0NvZGUgPT0g
U09VUF9TVEFUVVNfVU5BVVRIT1JJWkVEOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6YXV0
aGVudGljYXRlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYgY2hhbGxlbmdlKQordm9pZCBOZXR3
b3JrRGF0YVRhc2tTb3VwOjphdXRoZW50aWNhdGUoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBj
aGFsbGVuZ2UpCiB7CiAgICAgQVNTRVJUKG1fc291cE1lc3NhZ2UpOwogICAgIGlmIChtX3N0b3Jl
ZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsKQEAgLTUyNSw3ICs0Njgs
NyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRlKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJiYgY2hhbGxlbmdlKQogICAgICAgICB9CiAgICAgfQogCi0gICAgc291cF9zZXNzaW9u
X3BhdXNlX21lc3NhZ2UobV9zZXNzaW9uLT5zb3VwU2Vzc2lvbigpLCBtX3NvdXBNZXNzYWdlLmdl
dCgpKTsKKyAgICBzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZShkb3duY2FzdDxOZXR3b3JrU2Vz
c2lvblNvdXA+KG1fc2Vzc2lvbi5nZXQoKSkuc291cFNlc3Npb24oKSwgbV9zb3VwTWVzc2FnZS5n
ZXQoKSk7CiAKICAgICAvLyBXZSBjb3VsZCBhbHNvIGRvIHRoaXMgYmVmb3JlIHdlIGV2ZW4gc3Rh
cnQgdGhlIHJlcXVlc3QsIGJ1dCB0aGF0IHdvdWxkIGJlIGF0IHRoZSBleHBlbnNlCiAgICAgLy8g
b2YgYWxsIHJlcXVlc3QgbGF0ZW5jeSwgdmVyc3VzIGEgb25lLXRpbWUgbGF0ZW5jeSBmb3IgdGhl
IHNtYWxsIHN1YnNldCBvZiByZXF1ZXN0cyB0aGF0CkBAIC01NDcsNyArNDkwLDcgQEAgdm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OmF1dGhlbnRpY2F0ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGNo
YWxsZW5nZSkKICAgICAgICAgY29udGludWVBdXRoZW50aWNhdGUoV1RGTW92ZShjaGFsbGVuZ2Up
KTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNvbnRpbnVlQXV0aGVudGljYXRlKEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJiYgY2hhbGxlbmdlKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3Vw
Ojpjb250aW51ZUF1dGhlbnRpY2F0ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGNoYWxsZW5n
ZSkKIHsKICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUNoYWxsZW5nZShjaGFsbGVuZ2UsIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNoYWxsZW5nZV0oQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgY29uc3QgQ3JlZGVudGlhbCYgY3Jl
ZGVudGlhbCkgewogICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1f
c3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkgewpAQCAtNTc5LDEzICs1MjIsMTMgQEAgdm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OmNvbnRpbnVlQXV0aGVudGljYXRlKEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiYgY2hhbGxlbmdlKQogICAgICAgICAgICAgc291cF9hdXRoX2F1dGhlbnRpY2F0ZShjaGFs
bGVuZ2Uuc291cEF1dGgoKSwgY3JlZGVudGlhbC51c2VyKCkudXRmOCgpLmRhdGEoKSwgY3JlZGVu
dGlhbC5wYXNzd29yZCgpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgc291
cF9zZXNzaW9uX3VucGF1c2VfbWVzc2FnZShtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCksIG1fc291
cE1lc3NhZ2UuZ2V0KCkpOworICAgICAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKGRv
d25jYXN0PE5ldHdvcmtTZXNzaW9uU291cD4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigp
LCBtX3NvdXBNZXNzYWdlLmdldCgpKTsKICAgICB9KTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRh
c2s6OnNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uQ2FsbGJhY2soR0lucHV0U3RyZWFtKiBp
bnB1dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdvcmtEYXRhVGFzayogdGFzaykK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25D
YWxsYmFjayhHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
TmV0d29ya0RhdGFUYXNrU291cCogdGFzaykKIHsKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNr
PiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFzayk7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRh
VGFza1NvdXA+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKICAgICBpZiAodGFzay0+
c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNv
bXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpIHsKICAgICAgICAgdGFzay0+Y2xlYXJSZXF1ZXN0
KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTYwMiwxNSArNTQ1LDE1IEBAIHZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbkNhbGxiYWNrKEdJbnB1dFN0cmVh
bSogaW5wdXRTCiAgICAgICAgIHRhc2stPmRpZEZpbmlzaFNraXBJbnB1dFN0cmVhbUZvclJlZGly
ZWN0aW9uKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpza2lwSW5wdXRTdHJlYW1Gb3JS
ZWRpcmVjdGlvbigpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnNraXBJbnB1dFN0cmVhbUZv
clJlZGlyZWN0aW9uKCkKIHsKICAgICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7Ci0gICAgUmVmUHRy
PE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8TmV0d29y
a0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBnX2lucHV0X3N0cmVhbV9z
a2lwX2FzeW5jKG1faW5wdXRTdHJlYW0uZ2V0KCksIGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUsIEdf
UFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlv
bkNhbGxiYWNrKSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOwogfQogCi12b2lkIE5ldHdvcmtE
YXRhVGFzazo6ZGlkRmluaXNoU2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKQordm9pZCBO
ZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRGaW5pc2hTa2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlv
bigpCiB7CiAgICAgZ19pbnB1dF9zdHJlYW1fY2xvc2UobV9pbnB1dFN0cmVhbS5nZXQoKSwgbnVs
bHB0ciwgbnVsbHB0cik7CiAgICAgY29udGludWVIVFRQUmVkaXJlY3Rpb24oKTsKQEAgLTYzNyw3
ICs1ODAsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRSZWRpcmVjdEFzR0VUKFNvdXBNZXNzYWdlKiBt
ZXNzYWdlLCBib29sIGNyb3NzT3JpZ2luKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBO
ZXR3b3JrRGF0YVRhc2s6OnNob3VsZFN0YXJ0SFRUUFJlZGlyZWN0aW9uKCkKK2Jvb2wgTmV0d29y
a0RhdGFUYXNrU291cDo6c2hvdWxkU3RhcnRIVFRQUmVkaXJlY3Rpb24oKQogewogICAgIEFTU0VS
VChtX3NvdXBNZXNzYWdlKTsKICAgICBBU1NFUlQoIW1fcmVzcG9uc2UuaXNOdWxsKCkpOwpAQCAt
NjU2LDcgKzU5OSw3IEBAIGJvb2wgTmV0d29ya0RhdGFUYXNrOjpzaG91bGRTdGFydEhUVFBSZWRp
cmVjdGlvbigpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpj
b250aW51ZUhUVFBSZWRpcmVjdGlvbigpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNvbnRp
bnVlSFRUUFJlZGlyZWN0aW9uKCkKIHsKICAgICBBU1NFUlQobV9zb3VwTWVzc2FnZSk7CiAgICAg
QVNTRVJUKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKTsKQEAgLTcyNyw5ICs2NzAsOSBAQCB2b2lkIE5l
dHdvcmtEYXRhVGFzazo6Y29udGludWVIVFRQUmVkaXJlY3Rpb24oKQogICAgIH0pOwogfQogCi12
b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVhZENhbGxiYWNrKEdJbnB1dFN0cmVhbSogaW5wdXRTdHJl
YW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5l
dHdvcmtEYXRhVGFza1NvdXA6OnJlYWRDYWxsYmFjayhHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFt
LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNrU291cCogdGFzaykKIHsKLSAg
ICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFzayk7
CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFza1NvdXA+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJl
Zih0YXNrKTsKICAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRh
c2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAoIXRhc2stPm1fY2xpZW50ICYmICF0
YXNrLT5pc0Rvd25sb2FkKCkpKSB7CiAgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOwogICAg
ICAgICByZXR1cm47CkBAIC03NTIsMTYgKzY5NSwxNiBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6
cmVhZENhbGxiYWNrKEdJbnB1dFN0cmVhbSogaW5wdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVz
dQogICAgICAgICB0YXNrLT5kaWRGaW5pc2hSZWFkKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjpyZWFkKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6cmVhZCgpCiB7Ci0gICAgUmVm
UHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8TmV0
d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBBU1NFUlQobV9pbnB1
dFN0cmVhbSk7CiAgICAgbV9yZWFkQnVmZmVyLmdyb3coZ0RlZmF1bHRSZWFkQnVmZmVyU2l6ZSk7
CiAgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhtX2lucHV0U3RyZWFtLmdldCgpLCBtX3Jl
YWRCdWZmZXIuZGF0YSgpLCBtX3JlYWRCdWZmZXIuc2l6ZSgpLCBHX1BSSU9SSVRZX0RFRkFVTFQs
IG1fY2FuY2VsbGFibGUuZ2V0KCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVh
ZHlDYWxsYmFjaz4ocmVhZENhbGxiYWNrKSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOwogfQog
Ci12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVhZChnc3NpemUgYnl0ZXNSZWFkKQordm9pZCBO
ZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRSZWFkKGdzc2l6ZSBieXRlc1JlYWQpCiB7CiAgICAgbV9y
ZWFkQnVmZmVyLnNocmluayhieXRlc1JlYWQpOwogICAgIGlmIChtX2Rvd25sb2FkT3V0cHV0U3Ry
ZWFtKSB7CkBAIC03NzQsNyArNzE3LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlYWQo
Z3NzaXplIGJ5dGVzUmVhZCkKICAgICB9CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRG
aW5pc2hSZWFkKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkRmluaXNoUmVhZCgpCiB7
CiAgICAgQVNTRVJUKG1faW5wdXRTdHJlYW0pOwogICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlKG1f
aW5wdXRTdHJlYW0uZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwpAQCAtNzk0LDkgKzczNyw5IEBA
IHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hSZWFkKCkKICAgICBtX2NsaWVudC0+ZGlk
Q29tcGxldGVXaXRoRXJyb3IoeyB9KTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVl
c3ROZXh0UGFydENhbGxiYWNrKFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbSogbXVsdGlwYXJ0SW5w
dXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit2
b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKFNvdXBNdWx0
aXBhcnRJbnB1dFN0cmVhbSogbXVsdGlwYXJ0SW5wdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVz
dWx0LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewotICAgIFJlZlB0cjxOZXR3b3JrRGF0
YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBSZWZQdHI8TmV0d29y
a0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOwogICAgIGlmICh0
YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0
ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewogICAgICAgICB0YXNrLT5jbGVhclJl
cXVlc3QoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODE5LDE2ICs3NjIsMTYgQEAgdm9pZCBOZXR3
b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKFNvdXBNdWx0aXBhcnRJbnB1dFN0
cmVhbSogbXVsdGlwYXIKICAgICAgICAgdGFzay0+ZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KCk7
CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0TmV4dFBhcnQoKQordm9pZCBOZXR3
b3JrRGF0YVRhc2tTb3VwOjpyZXF1ZXN0TmV4dFBhcnQoKQogewotICAgIFJlZlB0cjxOZXR3b3Jr
RGF0YVRhc2s+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFz
a1NvdXA+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgQVNTRVJUKG1fbXVsdGlwYXJ0SW5wdXRT
dHJlYW0pOwogICAgIEFTU0VSVCghbV9pbnB1dFN0cmVhbSk7CiAgICAgc291cF9tdWx0aXBhcnRf
aW5wdXRfc3RyZWFtX25leHRfcGFydF9hc3luYyhtX211bHRpcGFydElucHV0U3RyZWFtLmdldCgp
LCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCiAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2sp
LCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpk
aWRSZXF1ZXN0TmV4dFBhcnQoR1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYgaW5wdXRTdHJlYW0pCit2
b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFJlcXVlc3ROZXh0UGFydChHUmVmUHRyPEdJbnB1
dFN0cmVhbT4mJiBpbnB1dFN0cmVhbSkKIHsKICAgICBBU1NFUlQoIW1faW5wdXRTdHJlYW0pOwog
ICAgIG1faW5wdXRTdHJlYW0gPSBXVEZNb3ZlKGlucHV0U3RyZWFtKTsKQEAgLTgzOCw3ICs3ODEs
NyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVxdWVzdE5leHRQYXJ0KEdSZWZQdHI8R0lu
cHV0U3RyZWFtPiYmIGlucHV0U3RyZWFtKQogICAgIGRpZFJlY2VpdmVSZXNwb25zZSgpOwogfQog
Ci12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KCkKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrU291cDo6ZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KCkKIHsKICAgICBB
U1NFUlQoIW1faW5wdXRTdHJlYW0pOwogICAgIEFTU0VSVChtX211bHRpcGFydElucHV0U3RyZWFt
KTsKQEAgLTg0Nyw3ICs3OTAsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoUmVx
dWVzdE5leHRQYXJ0KCkKICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoeyB9KTsK
IH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmdvdEhlYWRlcnNDYWxsYmFjayhTb3VwTWVzc2Fn
ZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrU291cDo6Z290SGVhZGVyc0NhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgTmV0
d29ya0RhdGFUYXNrU291cCogdGFzaykKIHsKICAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0
ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFz
ay0+bV9jbGllbnQpIHsKICAgICAgICAgdGFzay0+Y2xlYXJSZXF1ZXN0KCk7CkBAIC04NTcsNyAr
ODAwLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmdvdEhlYWRlcnNDYWxsYmFjayhTb3VwTWVz
c2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGEKICAgICB0YXNrLT5kaWRHZXRIZWFkZXJz
KCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRHZXRIZWFkZXJzKCkKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrU291cDo6ZGlkR2V0SGVhZGVycygpCiB7CiAgICAgLy8gV2UgYXJlIGEgYml0
IG1vcmUgY29uc2VydmF0aXZlIHdpdGggdGhlIHBlcnNpc3RlbnQgY3JlZGVudGlhbCBzdG9yYWdl
IHRoYW4gdGhlIHNlc3Npb24gc3RvcmUsCiAgICAgLy8gc2luY2Ugd2UgYXJlIHdhaXRpbmcgdW50
aWwgd2Uga25vdyB0aGF0IHRoaXMgYXV0aGVudGljYXRpb24gc3VjY2VlZGVkIGJlZm9yZSBhY3R1
YWxseSBzdG9yaW5nLgpAQCAtODcwLDcgKzgxMyw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpk
aWRHZXRIZWFkZXJzKCkKICAgICB9CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjp3cm90ZUJv
ZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBTb3VwQnVmZmVyKiBidWZm
ZXIsIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6d3Jv
dGVCb2R5RGF0YUNhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cEJ1ZmZlciog
YnVmZmVyLCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewogICAgIGlmICh0YXNrLT5zdGF0
ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxl
dGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewogICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsK
QEAgLTg4MCwxNCArODIzLDE0IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjp3cm90ZUJvZHlEYXRh
Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBTb3VwQnVmZmVyCiAgICAgdGFzay0+
ZGlkV3JpdGVCb2R5RGF0YShidWZmZXItPmxlbmd0aCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjpkaWRXcml0ZUJvZHlEYXRhKHVpbnQ2NF90IGJ5dGVzU2VudCkKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrU291cDo6ZGlkV3JpdGVCb2R5RGF0YSh1aW50NjRfdCBieXRlc1NlbnQpCiB7Ci0gICAg
UmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8
TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBtX2JvZHlEYXRh
VG90YWxCeXRlc1NlbnQgKz0gYnl0ZXNTZW50OwogICAgIG1fY2xpZW50LT5kaWRTZW5kRGF0YSht
X2JvZHlEYXRhVG90YWxCeXRlc1NlbnQsIG1fc291cE1lc3NhZ2UtPnJlcXVlc3RfYm9keS0+bGVu
Z3RoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRvd25sb2FkKCkKK3ZvaWQgTmV0d29y
a0RhdGFUYXNrU291cDo6ZG93bmxvYWQoKQogewogICAgIEFTU0VSVChpc0Rvd25sb2FkKCkpOwog
ICAgIEFTU0VSVChtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uKTsKQEAgLTkzMSw5ICs4NzQsOSBA
QCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZG93bmxvYWQoKQogICAgIHJlYWQoKTsKIH0KIAotdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OndyaXRlRG93bmxvYWRDYWxsYmFjayhHT3V0cHV0U3RyZWFtKiBv
dXRwdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0YVRhc2sqIHRhc2sp
Cit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OndyaXRlRG93bmxvYWRDYWxsYmFjayhHT3V0cHV0
U3RyZWFtKiBvdXRwdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0YVRh
c2tTb3VwKiB0YXNrKQogewotICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRo
aXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJv
dGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOwogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0
YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0
YXNrLT5pc0Rvd25sb2FkKCkpIHsKICAgICAgICAgdGFzay0+Y2xlYXJSZXF1ZXN0KCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTk1NSw5ICs4OTgsOSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6d3Jp
dGVEb3dubG9hZENhbGxiYWNrKEdPdXRwdXRTdHJlYW0qIG91dHB1dFN0cmVhbSwgR0FzeW5jUgog
ICAgICAgICB0YXNrLT5kaWRXcml0ZURvd25sb2FkKGJ5dGVzV3JpdHRlbik7CiB9CiAKLXZvaWQg
TmV0d29ya0RhdGFUYXNrOjp3cml0ZURvd25sb2FkKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291
cDo6d3JpdGVEb3dubG9hZCgpCiB7Ci0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKICNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwgNDQsIDApCiAgICAgZ19vdXRw
dXRfc3RyZWFtX3dyaXRlX2FsbF9hc3luYyhtX2Rvd25sb2FkT3V0cHV0U3RyZWFtLmdldCgpLCBt
X3JlYWRCdWZmZXIuZGF0YSgpLCBtX3JlYWRCdWZmZXIuc2l6ZSgpLCBHX1BSSU9SSVRZX0RFRkFV
TFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5j
UmVhZHlDYWxsYmFjaz4od3JpdGVEb3dubG9hZENhbGxiYWNrKSwgcHJvdGVjdGVkVGhpcy5sZWFr
UmVmKCkpOwpAQCAtOTY2LDcgKzkwOSw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjp3cml0ZURv
d25sb2FkKCkKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPih3
cml0ZURvd25sb2FkQ2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSkpOwogICAgIGdf
dGFza19zZXRfdGFza19kYXRhKHdyaXRlVGFzay5nZXQoKSwgdGhpcywgbnVsbHB0cik7CiAgICAg
Z190YXNrX3J1bl9pbl90aHJlYWQod3JpdGVUYXNrLmdldCgpLCBbXShHVGFzayogd3JpdGVUYXNr
LCBncG9pbnRlciBzb3VyY2UsIGdwb2ludGVyIHVzZXJEYXRhLCBHQ2FuY2VsbGFibGUqIGNhbmNl
bGxhYmxlKSB7Ci0gICAgICAgIGF1dG8qIHRhc2sgPSBzdGF0aWNfY2FzdDxOZXR3b3JrRGF0YVRh
c2sqPih1c2VyRGF0YSk7CisgICAgICAgIGF1dG8qIHRhc2sgPSBzdGF0aWNfY2FzdDxOZXR3b3Jr
RGF0YVRhc2tTb3VwKj4odXNlckRhdGEpOwogICAgICAgICBHT3V0cHV0U3RyZWFtKiBvdXRwdXRT
dHJlYW0gPSBHX09VVFBVVF9TVFJFQU0oc291cmNlKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
dGFzay0+bV9kb3dubG9hZE91dHB1dFN0cmVhbS5nZXQoKSA9PSBvdXRwdXRTdHJlYW0pOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh0YXNrLT5tX2NhbmNlbGxhYmxlLmdldCgpID09IGNhbmNlbGxh
YmxlKTsKQEAgLTk4NSw3ICs5MjgsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6d3JpdGVEb3du
bG9hZCgpCiAjZW5kaWYKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFdyaXRlRG93bmxv
YWQoZ3NpemUgYnl0ZXNXcml0dGVuKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRXcml0
ZURvd25sb2FkKGdzaXplIGJ5dGVzV3JpdHRlbikKIHsKICAgICBBU1NFUlQoYnl0ZXNXcml0dGVu
ID09IG1fcmVhZEJ1ZmZlci5zaXplKCkpOwogICAgIGF1dG8qIGRvd25sb2FkID0gTmV0d29ya1By
b2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2FkKG1fcGVuZGluZ0Rv
d25sb2FkSUQpOwpAQCAtOTk0LDcgKzkzNyw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRX
cml0ZURvd25sb2FkKGdzaXplIGJ5dGVzV3JpdHRlbikKICAgICByZWFkKCk7CiB9CiAKLXZvaWQg
TmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hEb3dubG9hZCgpCit2b2lkIE5ldHdvcmtEYXRhVGFz
a1NvdXA6OmRpZEZpbmlzaERvd25sb2FkKCkKIHsKICAgICBBU1NFUlQoIW1fcmVzcG9uc2UuaXNO
dWxsKCkpOwogICAgIEFTU0VSVChtX2Rvd25sb2FkT3V0cHV0U3RyZWFtKTsKQEAgLTEwMjEsNyAr
OTY0LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaERvd25sb2FkKCkKICAgICBk
b3dubG9hZC0+ZGlkRmluaXNoKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGYWls
RG93bmxvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lkIE5ldHdvcmtEYXRhVGFz
a1NvdXA6OmRpZEZhaWxEb3dubG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAg
ICBjbGVhclJlcXVlc3QoKTsKICAgICBjbGVhbkRvd25sb2FkRmlsZXMoKTsKQEAgLTEwMzQsNyAr
OTc3LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZhaWxEb3dubG9hZChjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikKICAgICB9CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpjbGVh
bkRvd25sb2FkRmlsZXMoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjbGVhbkRvd25sb2Fk
RmlsZXMoKQogewogICAgIGlmIChtX2Rvd25sb2FkRGVzdGluYXRpb25GaWxlKSB7CiAgICAgICAg
IGdfZmlsZV9kZWxldGUobV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZS5nZXQoKSwgbnVsbHB0ciwg
bnVsbHB0cik7CkBAIC0xMDQ2LDcgKzk4OSw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpjbGVh
bkRvd25sb2FkRmlsZXMoKQogICAgIH0KIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZh
aWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6
OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAgICAgaWYgKGlzRG93bmxv
YWQoKSkgewogICAgICAgICBkaWRGYWlsRG93bmxvYWQocGxhdGZvcm1Eb3dubG9hZE5ldHdvcmtF
cnJvcihlcnJvci5lcnJvckNvZGUoKSwgZXJyb3IuZmFpbGluZ1VSTCgpLCBlcnJvci5sb2NhbGl6
ZWREZXNjcmlwdGlvbigpKSk7CkBAIC0xMDU5LDcgKzEwMDIsNyBAQCB2b2lkIE5ldHdvcmtEYXRh
VGFzazo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIH0KIAogI2lmIEVOQUJM
RShXRUJfVElNSU5HKQotdm9pZCBOZXR3b3JrRGF0YVRhc2s6Om5ldHdvcmtFdmVudENhbGxiYWNr
KFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgR1NvY2tldENsaWVudEV2ZW50IGV2ZW50LCBHSU9T
dHJlYW0qLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6
Om5ldHdvcmtFdmVudENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgR1NvY2tldENs
aWVudEV2ZW50IGV2ZW50LCBHSU9TdHJlYW0qLCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQog
ewogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3Rh
dGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTA2OCw3ICsxMDExLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6Om5ldHdvcmtF
dmVudENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgR1NvY2tldENsaWUKICAgICB0
YXNrLT5uZXR3b3JrRXZlbnQoZXZlbnQpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6bmV0
d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCBldmVudCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
U291cDo6bmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCBldmVudCkKIHsKICAgICBkb3Vi
bGUgZGVsdGFUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSAtIG1fc3RhcnRU
aW1lOwogICAgIGF1dG8mIGxvYWRUaW1pbmcgPSBtX3Jlc3BvbnNlLm5ldHdvcmtMb2FkVGltaW5n
KCk7CkBAIC0xMTA1LDcgKzEwNDgsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6bmV0d29ya0V2
ZW50KEdTb2NrZXRDbGllbnRFdmVudCBldmVudCkKIH0KIAogI2lmIFNPVVBfQ0hFQ0tfVkVSU0lP
TigyLCA0OSwgOTEpCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6c3RhcnRpbmdDYWxsYmFjayhTb3Vw
TWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29y
a0RhdGFUYXNrU291cDo6c3RhcnRpbmdDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2Us
IE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCiB7CiAgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0g
U3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwg
IXRhc2stPm1fY2xpZW50KQogICAgICAgICByZXR1cm47CkBAIC0xMTE0LDkgKzEwNTcsOSBAQCB2
b2lkIE5ldHdvcmtEYXRhVGFzazo6c3RhcnRpbmdDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1l
c3NhZ2UsIE5ldHdvcmtEYXRhVGFzawogICAgIHRhc2stPmRpZFN0YXJ0UmVxdWVzdCgpOwogfQog
I2Vsc2UKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0U3RhcnRlZENhbGxiYWNrKFNvdXBT
ZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIFNvdXBTb2NrZXQqLCBO
ZXR3b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlcXVlc3RT
dGFydGVkQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBzb3VwTWVz
c2FnZSwgU291cFNvY2tldCosIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCiB7Ci0gICAgQVNT
RVJUKHNlc3Npb24gPT0gdGFzay0+bV9zZXNzaW9uLT5zb3VwU2Vzc2lvbigpKTsKKyAgICBBU1NF
UlQoc2Vzc2lvbiA9PSB0YXNrLT5kb3duY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXA+KG1fc2Vzc2lv
bi5nZXQoKSkuc291cFNlc3Npb24oKSk7CiAgICAgaWYgKHNvdXBNZXNzYWdlICE9IHRhc2stPm1f
c291cE1lc3NhZ2UuZ2V0KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTEyNywxMiArMTA3MCwx
MiBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVxdWVzdFN0YXJ0ZWRDYWxsYmFjayhTb3VwU2Vz
c2lvbiogc2Vzc2lvbiwgU291cE1lc3NhZ2UqCiB9CiAjZW5kaWYKIAotdm9pZCBOZXR3b3JrRGF0
YVRhc2s6OmRpZFN0YXJ0UmVxdWVzdCgpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFN0
YXJ0UmVxdWVzdCgpCiB7CiAgICAgbV9yZXNwb25zZS5uZXR3b3JrTG9hZFRpbWluZygpLnJlcXVl
c3RTdGFydCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCkgLSBtX3N0YXJ0VGltZTsK
IH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlc3RhcnRlZENhbGxiYWNrKFNvdXBNZXNzYWdl
KiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQordm9pZCBOZXR3b3JrRGF0YVRh
c2tTb3VwOjpyZXN0YXJ0ZWRDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdv
cmtEYXRhVGFza1NvdXAqIHRhc2spCiB7CiAgICAgLy8gQ2FsbGVkIGVhY2ggdGltZSB0aGUgbWVz
c2FnZSBpcyBnb2luZyB0byBiZSBzZW50IGFnYWluIGV4Y2VwdCB0aGUgZmlyc3QgdGltZS4KICAg
ICAvLyBUaGlzIGhhcHBlbnMgd2hlbiBsaWJzb3VwIGhhbmRsZXMgSFRUUCBhdXRoZW50aWNhdGlv
bi4KQEAgLTExNDMsNyArMTA4Niw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXN0YXJ0ZWRD
YWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFzCiAgICAgdGFz
ay0+ZGlkUmVzdGFydCgpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVzdGFydCgp
Cit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFJlc3RhcnQoKQogewogICAgIG1fc3RhcnRU
aW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmYTFhMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNr
U291cC5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxp
YSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTmV0d29ya0RhdGFU
YXNrLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Qcm90ZWN0aW9uU3BhY2UuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IE5ldHdvcmtEYXRhVGFza1NvdXAgZmluYWwgOiBwdWJsaWMgTmV0d29ya0RhdGFUYXNrIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdvcmtEYXRhVGFzaz4gY3JlYXRlKE5ldHdvcmtTZXNz
aW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBz
dG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENv
bnRlbnRTbmlmZiwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0RhdGFUYXNrU291
cChzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250
ZW50U25pZmYsIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpKTsKKyAg
ICB9CisKKyAgICB+TmV0d29ya0RhdGFUYXNrU291cCgpOworCisgICAgdm9pZCBpbnZhbGlkYXRl
QW5kQ2FuY2VsKCk7CisKK3ByaXZhdGU6CisgICAgTmV0d29ya0RhdGFUYXNrU291cChOZXR3b3Jr
U2Vzc2lvbiYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25p
ZmZpbmdQb2xpY3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVj
dCk7CisKKyAgICB2b2lkIHN1c3BlbmQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNhbmNlbCgpIG92
ZXJyaWRlOworICAgIHZvaWQgcmVzdW1lKCkgb3ZlcnJpZGU7CisgICAgTmV0d29ya0RhdGFUYXNr
OjpTdGF0ZSBzdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRQZW5kaW5nRG93
bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUmLCBib29sIC8qYWxsb3dPdmVyd3JpdGUqLykgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHN1Z2dl
c3RlZEZpbGVuYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHRpbWVvdXRGaXJlZCgp
OworICAgIHZvaWQgc3RhcnRUaW1lb3V0KCk7CisgICAgdm9pZCBzdG9wVGltZW91dCgpOworCisg
ICAgdm9pZCBjcmVhdGVSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwor
ICAgIHZvaWQgY2xlYXJSZXF1ZXN0KCk7CisgICAgc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxs
YmFjayhTb3VwUmVxdWVzdCosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsK
KyAgICB2b2lkIGRpZFNlbmRSZXF1ZXN0KEdSZWZQdHI8R0lucHV0U3RyZWFtPiYmKTsKKyAgICB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZSgpOworCisgICAgc3RhdGljIHZvaWQgdGxzRXJyb3JzQ2hh
bmdlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiwgR1BhcmFtU3BlYyosIE5ldHdvcmtEYXRhVGFza1Nv
dXAqKTsKKyAgICB2b2lkIHRsc0Vycm9yc0NoYW5nZWQoKTsKKworICAgIHZvaWQgYXBwbHlBdXRo
ZW50aWNhdGlvblRvUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBzdGF0
aWMgdm9pZCBhdXRoZW50aWNhdGVDYWxsYmFjayhTb3VwU2Vzc2lvbiosIFNvdXBNZXNzYWdlKiwg
U291cEF1dGgqLCBnYm9vbGVhbiByZXRyeWluZywgTmV0d29ya0RhdGFUYXNrU291cCopOworICAg
IHZvaWQgYXV0aGVudGljYXRlKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYpOwor
ICAgIHZvaWQgY29udGludWVBdXRoZW50aWNhdGUoV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmJik7CisKKyAgICBzdGF0aWMgdm9pZCBza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlv
bkNhbGxiYWNrKEdJbnB1dFN0cmVhbSosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFza1Nv
dXAqKTsKKyAgICB2b2lkIHNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCk7CisgICAgdm9p
ZCBkaWRGaW5pc2hTa2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOworICAgIGJvb2wgc2hv
dWxkU3RhcnRIVFRQUmVkaXJlY3Rpb24oKTsKKyAgICB2b2lkIGNvbnRpbnVlSFRUUFJlZGlyZWN0
aW9uKCk7CisKKyAgICBzdGF0aWMgdm9pZCByZWFkQ2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0Fz
eW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrU291cCopOworICAgIHZvaWQgcmVhZCgpOworICAg
IHZvaWQgZGlkUmVhZChnc3NpemUgYnl0ZXNSZWFkKTsKKyAgICB2b2lkIGRpZEZpbmlzaFJlYWQo
KTsKKworICAgIHN0YXRpYyB2b2lkIHJlcXVlc3ROZXh0UGFydENhbGxiYWNrKFNvdXBNdWx0aXBh
cnRJbnB1dFN0cmVhbSosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKKyAg
ICB2b2lkIHJlcXVlc3ROZXh0UGFydCgpOworICAgIHZvaWQgZGlkUmVxdWVzdE5leHRQYXJ0KEdS
ZWZQdHI8R0lucHV0U3RyZWFtPiYmKTsKKyAgICB2b2lkIGRpZEZpbmlzaFJlcXVlc3ROZXh0UGFy
dCgpOworCisgICAgc3RhdGljIHZvaWQgZ290SGVhZGVyc0NhbGxiYWNrKFNvdXBNZXNzYWdlKiwg
TmV0d29ya0RhdGFUYXNrU291cCopOworICAgIHZvaWQgZGlkR2V0SGVhZGVycygpOworCisgICAg
c3RhdGljIHZvaWQgd3JvdGVCb2R5RGF0YUNhbGxiYWNrKFNvdXBNZXNzYWdlKiwgU291cEJ1ZmZl
ciosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKKyAgICB2b2lkIGRpZFdyaXRlQm9keURhdGEodWlu
dDY0X3QgYnl0ZXNTZW50KTsKKworICAgIHZvaWQgZG93bmxvYWQoKTsKKyAgICBzdGF0aWMgdm9p
ZCB3cml0ZURvd25sb2FkQ2FsbGJhY2soR091dHB1dFN0cmVhbSosIEdBc3luY1Jlc3VsdCosIE5l
dHdvcmtEYXRhVGFza1NvdXAqKTsKKyAgICB2b2lkIHdyaXRlRG93bmxvYWQoKTsKKyAgICB2b2lk
IGRpZFdyaXRlRG93bmxvYWQoZ3NpemUgYnl0ZXNXcml0dGVuKTsKKyAgICB2b2lkIGRpZEZhaWxE
b3dubG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisgICAgdm9pZCBkaWRGaW5p
c2hEb3dubG9hZCgpOworICAgIHZvaWQgY2xlYW5Eb3dubG9hZEZpbGVzKCk7CisKKyAgICB2b2lk
IGRpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOworCisjaWYgRU5BQkxFKFdF
Ql9USU1JTkcpCisgICAgc3RhdGljIHZvaWQgbmV0d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3Nh
Z2UqLCBHU29ja2V0Q2xpZW50RXZlbnQsIEdJT1N0cmVhbSosIE5ldHdvcmtEYXRhVGFza1NvdXAq
KTsKKyAgICB2b2lkIG5ldHdvcmtFdmVudChHU29ja2V0Q2xpZW50RXZlbnQpOworI2lmIFNPVVBf
Q0hFQ0tfVkVSU0lPTigyLCA0OSwgOTEpCisgICAgc3RhdGljIHZvaWQgc3RhcnRpbmdDYWxsYmFj
ayhTb3VwTWVzc2FnZSosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKKyNlbHNlCisgICAgc3RhdGlj
IHZvaWQgcmVxdWVzdFN0YXJ0ZWRDYWxsYmFjayhTb3VwU2Vzc2lvbiosIFNvdXBNZXNzYWdlKiwg
U291cFNvY2tldCosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKKyNlbmRpZgorICAgIHZvaWQgZGlk
U3RhcnRSZXF1ZXN0KCk7CisgICAgc3RhdGljIHZvaWQgcmVzdGFydGVkQ2FsbGJhY2soU291cE1l
c3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCBkaWRSZXN0YXJ0KCk7Cisj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCisKKyAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6
OlN1c3BlbmRlZCB9OworICAgIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBtX3Nob3Vs
ZENvbnRlbnRTbmlmZjsKKyAgICBHUmVmUHRyPFNvdXBSZXF1ZXN0PiBtX3NvdXBSZXF1ZXN0Owor
ICAgIEdSZWZQdHI8U291cE1lc3NhZ2U+IG1fc291cE1lc3NhZ2U7CisgICAgR1JlZlB0cjxHSW5w
dXRTdHJlYW0+IG1faW5wdXRTdHJlYW07CisgICAgR1JlZlB0cjxTb3VwTXVsdGlwYXJ0SW5wdXRT
dHJlYW0+IG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW07CisgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+
IG1fY2FuY2VsbGFibGU7CisgICAgR1JlZlB0cjxHQXN5bmNSZXN1bHQ+IG1fcGVuZGluZ1Jlc3Vs
dDsKKyAgICBXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UgbV9wcm90ZWN0aW9uU3BhY2VGb3JQZXJz
aXN0ZW50U3RvcmFnZTsKKyAgICBXZWJDb3JlOjpDcmVkZW50aWFsIG1fY3JlZGVudGlhbEZvclBl
cnNpc3RlbnRTdG9yYWdlOworICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25z
ZTsKKyAgICBWZWN0b3I8Y2hhcj4gbV9yZWFkQnVmZmVyOworICAgIHVuc2lnbmVkIG1fcmVkaXJl
Y3RDb3VudCB7IDAgfTsKKyAgICB1aW50NjRfdCBtX2JvZHlEYXRhVG90YWxCeXRlc1NlbnQgeyAw
IH07CisgICAgR1JlZlB0cjxHRmlsZT4gbV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZTsKKyAgICBH
UmVmUHRyPEdGaWxlPiBtX2Rvd25sb2FkSW50ZXJtZWRpYXRlRmlsZTsKKyAgICBHUmVmUHRyPEdP
dXRwdXRTdHJlYW0+IG1fZG93bmxvYWRPdXRwdXRTdHJlYW07CisgICAgYm9vbCBtX2FsbG93T3Zl
cndyaXRlRG93bmxvYWQgeyBmYWxzZSB9OworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIGRv
dWJsZSBtX3N0YXJ0VGltZSB7IDAgfTsKKyNlbmRpZgorICAgIFJ1bkxvb3A6OlRpbWVyPE5ldHdv
cmtEYXRhVGFza1NvdXA+IG1fdGltZW91dFNvdXJjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3
b3JrU2Vzc2lvblNvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9O
ZXR3b3JrU2Vzc2lvblNvdXAuY3BwCmluZGV4IDM0YzJjNzcuLmFjODI4NzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9u
U291cC5jcHAKQEAgLTI0LDggKzI0LDkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvblNvdXAu
aCIKIAorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza1NvdXAuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU291cE5ldHdvcmtT
ZXNzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTM0LDQ3ICszNSwyNCBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVJlZjxO
ZXR3b3JrU2Vzc2lvbj4gTmV0d29ya1Nlc3Npb246OmNyZWF0ZShUeXBlIHR5cGUsIFNlc3Npb25J
RCBzZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopCitOZXR3b3JrU2Vzc2lvblNvdXA6
Ok5ldHdvcmtTZXNzaW9uU291cChTZXNzaW9uSUQgc2Vzc2lvbklEKQorICAgIDogTmV0d29ya1Nl
c3Npb24oc2Vzc2lvbklEKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtTZXNz
aW9uKHR5cGUsIHNlc3Npb25JRCwgbnVsbHB0cikpOwogfQogCi1OZXR3b3JrU2Vzc2lvbiYgTmV0
d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkKK05ldHdvcmtTZXNzaW9uU291cDo6fk5ldHdv
cmtTZXNzaW9uU291cCgpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBzdGF0
aWMgTmV0d29ya1Nlc3Npb24qIHNlc3Npb24gPSAmTmV0d29ya1Nlc3Npb246OmNyZWF0ZShOZXR3
b3JrU2Vzc2lvbjo6VHlwZTo6Tm9ybWFsLCBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwg
bnVsbHB0cikubGVha1JlZigpOwotICAgIHJldHVybiAqc2Vzc2lvbjsKIH0KIAotTmV0d29ya1N0
b3JhZ2VTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29u
c3QKLXsKLSAgICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6
c3RvcmFnZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAgIFJFTEVBU0VfQVNTRVJUKHN0b3JhZ2VT
ZXNzaW9uKTsKLSAgICByZXR1cm4gKnN0b3JhZ2VTZXNzaW9uOwotfQotCi1OZXR3b3JrU2Vzc2lv
bjo6TmV0d29ya1Nlc3Npb24oVHlwZSB0eXBlLCBTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0b21Q
cm90b2NvbE1hbmFnZXIqKQotICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQotewotfQotCi1O
ZXR3b3JrU2Vzc2lvbjo6fk5ldHdvcmtTZXNzaW9uKCkKLXsKLX0KLQotU291cFNlc3Npb24qIE5l
dHdvcmtTZXNzaW9uOjpzb3VwU2Vzc2lvbigpIGNvbnN0CitTb3VwU2Vzc2lvbiogTmV0d29ya1Nl
c3Npb25Tb3VwOjpzb3VwU2Vzc2lvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG5ldHdvcmtTdG9y
YWdlU2Vzc2lvbigpLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNvdXBTZXNzaW9uKCk7CiB9CiAKLXZv
aWQgTmV0d29ya1Nlc3Npb246OmludmFsaWRhdGVBbmRDYW5jZWwoKQordm9pZCBOZXR3b3JrU2Vz
c2lvblNvdXA6OmludmFsaWRhdGVBbmRDYW5jZWwoKQogewogICAgIGZvciAoYXV0byogdGFzayA6
IG1fZGF0YVRhc2tTZXQpCiAgICAgICAgIHRhc2stPmludmFsaWRhdGVBbmRDYW5jZWwoKTsKIH0K
IAotdm9pZCBOZXR3b3JrU2Vzc2lvbjo6Y2xlYXJDcmVkZW50aWFscygpCi17Ci19Ci0KIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZDc1ZmI4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmgKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KKwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9uIFNvdXBTZXNzaW9uOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya0RhdGFUYXNrU291cDsKKworY2xhc3MgTmV0d29y
a1Nlc3Npb25Tb3VwIGZpbmFsIDogcHVibGljIE5ldHdvcmtTZXNzaW9uIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPE5ldHdvcmtTZXNzaW9uPiBjcmVhdGUoV2ViQ29yZTo6U2Vzc2lvbklEIHNl
c3Npb25JRCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtTZXNz
aW9uU291cChzZXNzaW9uSUQpKTsKKyAgICB9CisgICAgfk5ldHdvcmtTZXNzaW9uU291cCgpOwor
CisgICAgU291cFNlc3Npb24qIHNvdXBTZXNzaW9uKCkgY29uc3Q7CisKKyAgICB2b2lkIHJlZ2lz
dGVyTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtEYXRhVGFza1NvdXAmIHRhc2spIHsgbV9kYXRhVGFz
a1NldC5hZGQoJnRhc2spOyB9CisgICAgdm9pZCB1bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKE5l
dHdvcmtEYXRhVGFza1NvdXAmIHRhc2spIHsgbV9kYXRhVGFza1NldC5yZW1vdmUoJnRhc2spOyB9
CisKK3ByaXZhdGU6CisgICAgTmV0d29ya1Nlc3Npb25Tb3VwKFdlYkNvcmU6OlNlc3Npb25JRCk7
CisKKyAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBvdmVycmlkZTsKKworICAgIEhhc2hT
ZXQ8TmV0d29ya0RhdGFUYXNrU291cCo+IG1fZGF0YVRhc2tTZXQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3Nv
dXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcAppbmRleCA4ZmI2
NGZhLi4yZGJhMTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9z
b3VwL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0U291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAuY3BwCkBAIC01
NSw3ICs1NSw3IEBAIHZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVC
cm93c2luZ1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKHNl
c3Npb25JRCwgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklELnNlc3Npb25JRCgpKSk7Ci0gICAgU2Vz
c2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRl
KE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpFcGhlbWVyYWwsIHNlc3Npb25JRCwgbnVsbHB0cikpOwor
ICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246
OmNyZWF0ZShzZXNzaW9uSUQpKTsKIH0KIAogTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBSZW1vdGVO
ZXR3b3JraW5nQ29udGV4dDo6c3RvcmFnZVNlc3Npb24oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVm
bC5jbWFrZQppbmRleCBiYWJmMmE3Li43ZDlhMDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQpAQCAtMjQ5LDYgKzI0OSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RP
UklFUwogICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMv
c291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAi
CiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL2VmbCIKKyAgICAiJHtXRUJLSVQy
X0RJUn0vTmV0d29ya1Byb2Nlc3Mvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1By
b2Nlc3MvdW5peCIKICAgICAiJHtXRUJLSVQyX0RJUn0vUGxhdGZvcm0vZWZsIgogICAgICIke1dF
QktJVDJfRElSfS9TaGFyZWQvQVBJL2MvZWZsIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRl
eCA2ZmJkYTIyLi43NTk1OWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdU
Sy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtODQ1LDYg
Kzg0NSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIk
e1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvc291cCIKICAgICAi
JHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAiCiAgICAgIiR7V0VC
S0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL2d0ayIKKyAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29y
a1Byb2Nlc3Mvc291cCIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvdW5peCIK
ICAgICAiJHtXRUJLSVQyX0RJUn0vUGxhdGZvcm0vSVBDL2dsaWIiCiAgICAgIiR7V0VCS0lUMl9E
SVJ9L1NoYXJlZC9BUEkvYy9ndGsiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTdlYTY3My4uMzRiMWRhZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA1NSwx
MyArMTA1NSwxNyBAQAogCQk1QzE0MjcxMzFDMjNGODlFMDBENDExODMgLyogRG93bmxvYWRDb2Nv
YS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQy
NzA5MUMyM0Y4NjkwMEQ0MTE4MyAvKiBEb3dubG9hZENvY29hLm1tICovOyB9OwogCQk1QzE0Mjcx
ODFDMjNGOEI3MDBENDExODMgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzE0MjcxNDFDMjNGOEIwMDBENDEx
ODMgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmggKi87IH07CiAJCTVDMTQyNzFEMUMyM0Y4Q0Yw
MEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQyNzFCMUMyM0Y4Q0MwMEQ0MTE4MyAv
KiBDdXN0b21Qcm90b2NvbE1hbmFnZXJDb2NvYS5tbSAqLzsgfTsKKwkJNUMyMENCQTAxQkIxRUNE
ODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMjBDQjlFMUJCMEREMTgwMDg5NUJCMSAvKiBOZXR3
b3JrU2Vzc2lvbkNvY29hLmggKi87IH07CiAJCTVDMjBDQjlEMUJCMERDRkEwMDg5NUJCMSAvKiBO
ZXR3b3JrU2Vzc2lvbkNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUMyMENCOUIxQkIwRENEMjAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29j
b2EubW0gKi87IH07CiAJCTVDMjBDQkEwMUJCMUVDRDgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMyMENC
OUUxQkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmggKi87IH07CisJCTVDMjBDQjlE
MUJCMERDRkEwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzIwQ0I5QjFCQjBEQ0QyMDA4OTVCQjEgLyog
TmV0d29ya1Nlc3Npb24uY3BwICovOyB9OwogCQk1QzI5OERBMDFDM0RGMDIxMDA0NzBBRkUgLyog
UGVuZGluZ0Rvd25sb2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1QzI5OEQ5RTFDM0RFRjI5MDA0NzBBRkUgLyogUGVuZGluZ0Rvd25sb2FkLmggKi87
IH07CiAJCTVDNzcwNjc0MUQxMTM4MzgwMDEyNzAwRiAvKiBXZWJTb2NrZXRQcm92aWRlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Qzc3MDY3MzFE
MTExRDhCMDAxMjcwMEYgLyogV2ViU29ja2V0UHJvdmlkZXIuY3BwICovOyB9OwogCQk1Qzc5NDM5
QjFENzYyRDYyMDAzMTAyRDQgLyogV2ViS2l0MkluaXRpYWxpemVDb2NvYS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNzk0MzlBMUQ3NjJDREYwMDMx
MDJENCAvKiBXZWJLaXQySW5pdGlhbGl6ZUNvY29hLm1tICovOyB9OwogCQk1Qzg1Qzc4ODFDM0Yy
M0NFMDA2MUE0RkEgLyogUGVuZGluZ0Rvd25sb2FkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDODVDNzg2MUMzRjIzQzUwMDYxQTRGQSAvKiBQZW5k
aW5nRG93bmxvYWQuY3BwICovOyB9OworCQk1Q0JDOUI4RDFDNjUyNzlDMDBBOEZEQ0YgLyogTmV0
d29ya0RhdGFUYXNrQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDQkM5Qjg5MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2Nv
YS5oICovOyB9OwogCQk1Q0JDOUI4RDFDNjUyNzlDMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNr
Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
Q0JDOUI4QjFDNjUyNTczMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gKi87IH07
CisJCTVDQkM5QjhEMUM2NTI3OUMwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNCQzlCOEIxQzY1MjU3
MzAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgKi87IH07CiAJCTVDQkM5QjhFMUM2NTJD
QTAwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQkM5Qjg5MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3b3Jr
RGF0YVRhc2suaCAqLzsgfTsKIAkJNUNFODVCMjAxQzg4RTY0QjAwNzBCRkNFIC8qIFBpbmdMb2Fk
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0U4NUIx
RjFDODhFNjQzMDA3MEJGQ0UgLyogUGluZ0xvYWQuaCAqLzsgfTsKIAkJNjUwMUJEMUExMkYxMjQz
NDAwRTlGMjQ4IC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjg2RjE3MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1
bmRsZUluc3BlY3Rvci5jcHAgKi87IH07CkBAIC0zMTM3LDE0ICszMTQxLDE4IEBACiAJCTVDMTQy
NzE0MUMyM0Y4QjAwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmg7IHBhdGggPSBO
ZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMTQyNzE1MUMyM0Y4QjAwMEQ0MTE4MyAvKiBD
dXN0b21Qcm90b2NvbE1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0g
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLm1lc3NhZ2VzLmluOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
Q3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMxNDI3MUIxQzIzRjhDQzAwRDQxMTgzIC8qIEN1c3Rv
bVByb3RvY29sTWFuYWdlckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW07IHBhdGggPSBOZXR3b3JrUHJv
Y2Vzcy9DdXN0b21Qcm90b2NvbHMvQ29jb2EvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDMjBDQjlFMUJCMEREMTgwMDg5NUJCMSAv
KiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IE5ldHdvcmtTZXNzaW9uQ29jb2EuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtTZXNzaW9uQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMyMENCOUIx
QkIwRENEMjAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBOZXR3b3JrU2Vzc2lvbkNvY29hLm1tOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUMyMENCOUUxQkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtTZXNz
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtTZXNzaW9uLmg7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1QzIwQ0I5QjFCQjBEQ0QyMDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0d29ya1Nlc3Np
b24uY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1QzI5OEQ5RTFDM0RFRjI5MDA0NzBBRkUgLyogUGVuZGlu
Z0Rvd25sb2FkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBlbmRpbmdEb3du
bG9hZC5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Qzc3MDY3MzFEMTExRDhCMDAxMjcwMEYg
LyogV2ViU29ja2V0UHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gV2ViU29ja2V0UHJvdmlkZXIuY3BwOyBwYXRoID0gTmV0d29yay9XZWJTb2NrZXRQcm92
aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNzk0MzlBMUQ3NjJDREYw
MDMxMDJENCAvKiBXZWJLaXQySW5pdGlhbGl6ZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViS2l0MkluaXRpYWxpemVDb2NvYS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM3Qzg4REMxRDBGNDFBMDAwOUQyRjZEIC8qIFdlYlNvY2tl
dFByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlNvY2tldFBy
b3ZpZGVyLmg7IHBhdGggPSBOZXR3b3JrL1dlYlNvY2tldFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVDODVDNzg2MUMzRjIzQzUwMDYxQTRGQSAvKiBQZW5kaW5nRG93
bmxvYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGVuZGluZ0Rv
d25sb2FkLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxv
YWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0JDOUI4QjFDNjUyNTczMDBB
OEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFzay5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrRGF0YVRhc2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0JDOUI4
OTFDNjUyNEE1MDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFzay5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0RhdGFUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQkM5Qjg5
MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oOyBwYXRoID0gTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUNCQzlCOEIxQzY1MjU3MzAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFza0Nv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0d29ya0Rh
dGFUYXNrQ29jb2EubW07IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRh
c2tDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNFODVCMUYxQzg4RTY0
MzAwNzBCRkNFIC8qIFBpbmdMb2FkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFBpbmdMb2FkLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1RDQ0MkE1NTE2RDU4NTY3MDBBQzMzMzEgLyogUGx1Z2luU2Vy
dmljZS5lbnRpdGxlbWVudHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9IFBsdWdpblNlcnZpY2UuZW50aXRsZW1lbnRzOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ1NCw2ICs1NDYyLDcgQEAKIAkJCQk1QzE0
MjZFNTFDMjNGODA1MDBENDExODMgLyogTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3Bw
ICovLAogCQkJCTVDMTQyNkU2MUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3b3JrUmVzb3VyY2VMb2Fk
UGFyYW1ldGVycy5oICovLAogCQkJCTVDMjBDQjlFMUJCMEREMTgwMDg5NUJCMSAvKiBOZXR3b3Jr
U2Vzc2lvbi5oICovLAorCQkJCTVDMjBDQjlFMUJCMEREMTgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vz
c2lvbi5jcHAgKi8sCiAJCQkJNUNFODVCMUYxQzg4RTY0MzAwNzBCRkNFIC8qIFBpbmdMb2FkLmgg
Ki8sCiAJCQkJRTFCNzg0NzAxNjNGMjQ2OTAwMDdCNjkyIC8qIFJlbW90ZU5ldHdvcmtpbmdDb250
ZXh0LmggKi8sCiAJCQkpOwpAQCAtNTg0NSw4ICs1ODU0LDEwIEBACiAJCTdFQzRGMEY4MThFNEE5
MjIwMDgwNTZBRiAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNUNCQzlCOEIxQzY1MjU3MzAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFza0Nv
Y29hLmggKi8sCiAJCQkJNUNCQzlCOEIxQzY1MjU3MzAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFz
a0NvY29hLm1tICovLAogCQkJCTdFQzRGMEY5MThFNEE5NDUwMDgwNTZBRiAvKiBOZXR3b3JrUHJv
Y2Vzc0NvY29hLm1tICovLAorCQkJCTVDMjBDQjlCMUJCMERDRDIwMDg5NUJCMSAvKiBOZXR3b3Jr
U2Vzc2lvbkNvY29hLmggKi8sCiAJCQkJNUMyMENCOUIxQkIwRENEMjAwODk1QkIxIC8qIE5ldHdv
cmtTZXNzaW9uQ29jb2EubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IGNvY29hOwpAQCAtNzcyOCw2
ICs3NzM5LDcgQEAKIAkJCQk1MTNBMTY0RDE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxREQ5RjI5MTYzNjdEQTIw
MDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1Q0JDOUI4RTFDNjUyQ0EwMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNr
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0JDOUI4RTFDNjUyQ0EwMDBBOEZEQ0YgLyogTmV0d29y
a0RhdGFUYXNrQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzOTkwMjAzMUJFOUEwMkIwMDBG
MzY1MyAvKiBOZXR3b3JrTG9hZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNENDU0RDcxQkU5RDND
NDAwNkM5M0JEIC8qIE5ldHdvcmtMb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Mzkx
NDk2NTFCRUE4Mzg1MDBEMkQ5NTMgLyogTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTc3NDMsNiArNzc1NSw3IEBACiAJCQkJRTE1MjU1MUIxNzAxMTgxOTAwM0Q3QURC
IC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
QzE0MjZGMDFDMjNGODA5MDBENDExODMgLyogTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDMjBDQkEwMUJCMUVDRDgwMDg5NUJCMSAvKiBOZXR3b3Jr
U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUMyMENCQTAxQkIxRUNEODAwODk1QkIxIC8q
IE5ldHdvcmtTZXNzaW9uQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxQTJFQzU2MTQ4OTlD
MDkwMDgxMEQ3MSAvKiBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzEzMTI2MUYxNDhGRjgyQzAwQkEyQTM5IC8qIE5vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBMkVDNTIxNDg5OTgxOTAw
ODEwRDcxIC8qIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmggaW4g
SGVhZGVycyAqLywKQEAgLTkyMDQsNiArOTIxNyw3IEBACiAJCQkJODMxMDQyOEMxQkQ2QjY2RjAw
QTcxNUU0IC8qIE5ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxM0ExNjRDMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUREOUYyODE2MzY3REEyMDAxNTc4RTkg
LyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNUNCQzlCOEQxQzY1Mjc5QzAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFz
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0JDOUI4RDFDNjUyNzlDMDBBOEZEQ0YgLyogTmV0
d29ya0RhdGFUYXNrQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk4Mzk5MDIwMjFCRTlBMDJC
MDAwRjM2NTMgLyogTmV0d29ya0xvYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODM2RUVCODAx
QkU5RUM5RTAwNkI0QjgyIC8qIE5ldHdvcmtMb2FkTWFjLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCAxY2MxNWM2
Li41OWM2MDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQubW0KQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpl
bnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQKIAogICAgIE5l
dHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihzZXNzaW9u
SUQsIGJhc2UgKyAnLicgKyBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsK
ICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotICAgIGF1dG8gbmV0d29ya1Nlc3Npb24gPSBOZXR3
b3JrU2Vzc2lvbjo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpFcGhlbWVyYWwsIHNlc3Np
b25JRCwgbnVsbHB0cik7CisgICAgYXV0byBuZXR3b3JrU2Vzc2lvbiA9IE5ldHdvcmtTZXNzaW9u
OjpjcmVhdGUoc2Vzc2lvbklEKTsKICAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNz
aW9uSUQsIFdURk1vdmUobmV0d29ya1Nlc3Npb24pKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0
d29ya2luZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCmluZGV4IDJmOTg3MWMuLmU2
YjU2NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Ojpl
bnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQKICAgICAgICAg
cmV0dXJuOwogCiAgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjplbnN1cmVQcml2YXRlQnJvd3Np
bmdTZXNzaW9uKHNlc3Npb25JRCwgU3RyaW5nOjpudW1iZXIoc2Vzc2lvbklELnNlc3Npb25JRCgp
KSk7Ci0gICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vz
c2lvbjo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpFcGhlbWVyYWwsIHNlc3Npb25JRCwg
bnVsbHB0cikpOworICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0
d29ya1Nlc3Npb246OmNyZWF0ZShzZXNzaW9uSUQpKTsKIH0KIAogdm9pZCBXZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0OjpzZXRDb29raWVBY2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyhIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292471</attachid>
            <date>2016-10-21 22:50:59 -0700</date>
            <delta_ts>2016-10-24 01:31:45 -0700</delta_ts>
            <desc>Patch to be applied after the main patch</desc>
            <filename>overlay.patch</filename>
            <type>text/plain</type>
            <size>21987</size>
            <attacher name="Keith Rollin">krollin</attacher>
            
              <data encoding="base64">ZGlmZiAtcHJ1TiB0ZW1wL09wZW5Tb3VyY2UvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaCBuZXR3b3JrX3Nlc3Npb24vT3BlblNvdXJjZS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5o
Ci0tLSB0ZW1wL09wZW5Tb3VyY2UvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya0RhdGFUYXNrQ29jb2EuaAkyMDE2LTEwLTIxIDE5OjI3OjE5LjAwMDAwMDAwMCAtMDcw
MAorKysgbmV0d29ya19zZXNzaW9uL09wZW5Tb3VyY2UvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaAkyMDE2LTEwLTIxIDE5OjIzOjM2LjAw
MDAwMDAwMCAtMDcwMApAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIE5l
dHdvcmtEYXRhVGFza0NvY29hKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50
JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVu
dGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSwgYm9vbCBzaG91bGRDbGVhclJl
ZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKIAorcHVibGljOgogICAgIHZvaWQgc3VzcGVu
ZCgpIG92ZXJyaWRlOwogICAgIHZvaWQgY2FuY2VsKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXN1
bWUoKSBvdmVycmlkZTsKQEAgLTcyLDYgKzczLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGFsbG93
c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKSBvdmVycmlkZTsKICAgICBib29sIHRyeVBhc3N3b3JkQmFzZWRBdXRo
ZW50aWNhdGlvbihjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0
IENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJik7CiAKK3ByaXZhdGU6CiAgICAgUmVmUHRyPFNh
bmRib3hFeHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKICAgICBSZXRhaW5QdHI8TlNVUkxT
ZXNzaW9uRGF0YVRhc2s+IG1fdGFzazsKIH07CmRpZmYgLXBydU4gdGVtcC9PcGVuU291cmNlL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1t
IG5ldHdvcmtfc2Vzc2lvbi9PcGVuU291cmNlL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCi0tLSB0ZW1wL09wZW5Tb3VyY2UvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0JMjAx
Ni0xMC0yMSAxOToyNzoxOS4wMDAwMDAwMDAgLTA3MDAKKysrIG5ldHdvcmtfc2Vzc2lvbi9PcGVu
U291cmNlL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFz
a0NvY29hLm1tCTIwMTYtMTAtMjEgMTk6MjM6MzYuMDAwMDAwMDAwIC0wNzAwCkBAIC04OSwxNCAr
ODksMTUgQEAgTmV0d29ya0RhdGFUYXNrQ29jb2E6Ok5ldHdvcmtEYXRhVGFza0NvYwogICAgICAg
ICBuc1JlcXVlc3QgPSBtdXRhYmxlUmVxdWVzdDsKICAgICB9CiAKKyAgICBhdXRvJiBjb2NvYVNl
c3Npb24gPSByZWludGVycHJldF9jYXN0PE5ldHdvcmtTZXNzaW9uQ29jb2EmPihtX3Nlc3Npb24u
Z2V0KCkpOyAvLyBkb3duY2FzdDxOZXR3b3JrU2Vzc2lvbkNvY29hPihtX3Nlc3Npb24uZ2V0KCkp
OwogICAgIGlmIChzdG9yZWRDcmVkZW50aWFscyA9PSBXZWJDb3JlOjpBbGxvd1N0b3JlZENyZWRl
bnRpYWxzKSB7Ci0gICAgICAgIG1fdGFzayA9IFtkb3duY2FzdDxOZXR3b3JrU2Vzc2lvbkNvY29h
PihtX3Nlc3Npb24uZ2V0KCkpLm1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSBkYXRhVGFz
a1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07Ci0gICAgICAgIEFTU0VSVCghZG93bmNhc3Q8TmV0d29y
a1Nlc3Npb25Db2NvYT4obV9zZXNzaW9uLmdldCgpKS5tX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRp
YWxzLmNvbnRhaW5zKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSk7Ci0gICAgICAgIGRvd25jYXN0
PE5ldHdvcmtTZXNzaW9uQ29jb2E+KG1fc2Vzc2lvbi5nZXQoKSkubV9kYXRhVGFza01hcFdpdGhD
cmVkZW50aWFscy5hZGQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIHRoaXMpOworICAgICAgICBt
X3Rhc2sgPSBbY29jb2FTZXNzaW9uLm1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZSBkYXRh
VGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07CisgICAgICAgIEFTU0VSVCghY29jb2FTZXNzaW9u
Lm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMuY29udGFpbnMoW21fdGFzayB0YXNrSWRlbnRp
Zmllcl0pKTsKKyAgICAgICAgY29jb2FTZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlh
bHMuYWRkKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlzKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBtX3Rhc2sgPSBbZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Db2NvYT4obV9zZXNzaW9uLmdl
dCgpKS5tX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UgZGF0YVRhc2tXaXRoUmVxdWVz
dDpuc1JlcXVlc3RdOwotICAgICAgICBBU1NFUlQoIWRvd25jYXN0PE5ldHdvcmtTZXNzaW9uQ29j
b2E+KG1fc2Vzc2lvbi5nZXQoKSkubV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFscy5jb250
YWlucyhbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkpOwotICAgICAgICBkb3duY2FzdDxOZXR3b3Jr
U2Vzc2lvbkNvY29hPihtX3Nlc3Npb24uZ2V0KCkpLm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVu
dGlhbHMuYWRkKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlzKTsKKyAgICAgICAgbV90YXNr
ID0gW2NvY29hU2Vzc2lvbi5tX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2UgZGF0YVRh
c2tXaXRoUmVxdWVzdDpuc1JlcXVlc3RdOworICAgICAgICBBU1NFUlQoIWNvY29hU2Vzc2lvbi5t
X2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmNvbnRhaW5zKFttX3Rhc2sgdGFza0lkZW50
aWZpZXJdKSk7CisgICAgICAgIGNvY29hU2Vzc2lvbi5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRl
bnRpYWxzLmFkZChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgdGhpcyk7CiAgICAgfQogICAgIExP
RyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUgQ3JlYXRpbmcgTmV0d29ya0RhdGFUYXNrIHdpdGggVVJM
ICVzIiwgW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIG5zUmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJp
bmcuVVRGOFN0cmluZyk7CiAKQEAgLTExMiwxMiArMTEzLDEzIEBAIE5ldHdvcmtEYXRhVGFza0Nv
Y29hOjp+TmV0d29ya0RhdGFUYXNrQ28KICAgICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0dXJu
OwogCisgICAgYXV0byYgY29jb2FTZXNzaW9uID0gcmVpbnRlcnByZXRfY2FzdDxOZXR3b3JrU2Vz
c2lvbkNvY29hJj4obV9zZXNzaW9uLmdldCgpKTsgLy8gZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25D
b2NvYT4obV9zZXNzaW9uLmdldCgpKTsKICAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFscyA9PSBX
ZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsczo6QWxsb3dTdG9yZWRDcmVkZW50aWFscykgewotICAg
ICAgICBBU1NFUlQoZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Db2NvYT4obV9zZXNzaW9uLmdldCgp
KS5tX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLmdldChbbV90YXNrIHRhc2tJZGVudGlmaWVy
XSkgPT0gdGhpcyk7Ci0gICAgICAgIGRvd25jYXN0PE5ldHdvcmtTZXNzaW9uQ29jb2E+KG1fc2Vz
c2lvbi5nZXQoKSkubV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFscy5yZW1vdmUoW21fdGFzayB0
YXNrSWRlbnRpZmllcl0pOworICAgICAgICBBU1NFUlQoY29jb2FTZXNzaW9uLm1fZGF0YVRhc2tN
YXBXaXRoQ3JlZGVudGlhbHMuZ2V0KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSA9PSB0aGlzKTsK
KyAgICAgICAgY29jb2FTZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMucmVtb3Zl
KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsKICAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQo
ZG93bmNhc3Q8TmV0d29ya1Nlc3Npb25Db2NvYT4obV9zZXNzaW9uLmdldCgpKS5tX2RhdGFUYXNr
TWFwV2l0aG91dENyZWRlbnRpYWxzLmdldChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkgPT0gdGhp
cyk7Ci0gICAgICAgIGRvd25jYXN0PE5ldHdvcmtTZXNzaW9uQ29jb2E+KG1fc2Vzc2lvbi5nZXQo
KSkubV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFscy5yZW1vdmUoW21fdGFzayB0YXNrSWRl
bnRpZmllcl0pOworICAgICAgICBBU1NFUlQoY29jb2FTZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRo
b3V0Q3JlZGVudGlhbHMuZ2V0KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSA9PSB0aGlzKTsKKyAg
ICAgICAgY29jb2FTZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHMucmVtb3Zl
KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsKICAgICB9CiB9CiAKZGlmZiAtcHJ1TiB0ZW1wL09w
ZW5Tb3VyY2UvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Np
b25Db2NvYS5tbSBuZXR3b3JrX3Nlc3Npb24vT3BlblNvdXJjZS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCi0tLSB0ZW1wL09wZW5Tb3Vy
Y2UvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2Nv
YS5tbQkyMDE2LTEwLTIxIDE5OjI3OjIwLjAwMDAwMDAwMCAtMDcwMAorKysgbmV0d29ya19zZXNz
aW9uL09wZW5Tb3VyY2UvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a1Nlc3Npb25Db2NvYS5tbQkyMDE2LTEwLTIxIDE5OjIzOjM2LjAwMDAwMDAwMCAtMDcwMApAQCAt
NDYwLDcgKzQ2MCw3IEBAIE5ldHdvcmtTZXNzaW9uQ29jb2E6Ok5ldHdvcmtTZXNzaW9uQ29jb2EK
ICAgICBMT0coTmV0d29ya1Nlc3Npb24sICJDcmVhdGVkIE5ldHdvcmtTZXNzaW9uIHdpdGggY29v
a2llQWNjZXB0UG9saWN5ICVsdSIsIGNvbmZpZ3VyYXRpb24uSFRUUENvb2tpZVN0b3JhZ2UuY29v
a2llQWNjZXB0UG9saWN5KTsKIH0KIAotTmV0d29ya1Nlc3Npb25Db2NvYTo6fk5ldHdvcmtTZXNz
aW9uKCkKK05ldHdvcmtTZXNzaW9uQ29jb2E6On5OZXR3b3JrU2Vzc2lvbkNvY29hKCkKIHsKIH0K
IApkaWZmIC1wcnVOIHRlbXAvT3BlblNvdXJjZS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogbmV0d29ya19zZXNzaW9uL09wZW5Tb3VyY2UvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCi0tLSB0ZW1wL09wZW5Tb3Vy
Y2UvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCTIwMTYt
MTAtMjEgMTk6Mjc6MjEuMDAwMDAwMDAwIC0wNzAwCisrKyBuZXR3b3JrX3Nlc3Npb24vT3BlblNv
dXJjZS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJMjAx
Ni0xMC0yMSAxOToyMzozNi4wMDAwMDAwMDAgLTA3MDAKQEAgLTEwMzksNiArMTAzOSwxMCBAQAog
CQk1MkQ1QTFCMDFDNTc0OTVBMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclBy
b3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1
QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lmgg
Ki87IH07CiAJCTUyRDVBMUIxMUM1NzQ5NjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkQ1QTFBQzFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
clByb3h5Lm1tICovOyB9OwogCQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogV2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyLm1tICovOyB9OworCQk1MzIxNTk1MzFEQkFFNzE4MDA1NEFBM0MgLyogTmV0d29ya1Nl
c3Npb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTMyMTU5NTIxREJBRTZGQzAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uLmNwcCAqLzsgfTsKKwkJ
NTMyMTU5NTQxREJBRTcxRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzIxNTk1MTFEQkFFNkZDMDA1
NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLzsgfTsKKwkJNTMyMTU5NTUxREJBRTcyOTAw
NTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjE1OTUwMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3b3Jr
U2Vzc2lvbkNvY29hLmggKi87IH07CisJCTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAvKiBOZXR3
b3JrRGF0YVRhc2tDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTMyMTU5NEYxREJBRTZENzAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29h
LmggKi87IH07CiAJCTVDMDUyRjI2MUM2RDNCRDMwMDc2RTkxOSAvKiBBdXRoZW50aWNhdGlvbk1h
bmFnZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVDMDUyRjI0MUM2RDNBQjYwMDc2RTkxOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2Nv
YS5tbSAqLzsgfTsKIAkJNUMxNDI2RUMxQzIzRjgwOTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDMTQyNkUyMUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5jcHAgKi87IH07CiAJCTVDMTQyNkVEMUMyM0Y4MDkwMEQ0MTE4MyAv
KiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMxNDI2RTMxQzIzRjgwNTAwRDQxMTgzIC8qIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggKi87IH07CkBAIC0xMDU1LDE3ICsxMDU5
LDEzIEBACiAJCTVDMTQyNzEzMUMyM0Y4OUUwMEQ0MTE4MyAvKiBEb3dubG9hZENvY29hLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMxNDI3MDkxQzIz
Rjg2OTAwRDQxMTgzIC8qIERvd25sb2FkQ29jb2EubW0gKi87IH07CiAJCTVDMTQyNzE4MUMyM0Y4
QjcwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQyNzE0MUMyM0Y4QjAwMEQ0MTE4MyAvKiBD
dXN0b21Qcm90b2NvbE1hbmFnZXIuaCAqLzsgfTsKIAkJNUMxNDI3MUQxQzIzRjhDRjAwRDQxMTgz
IC8qIEN1c3RvbVByb3RvY29sTWFuYWdlckNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMxNDI3MUIxQzIzRjhDQzAwRDQxMTgzIC8qIEN1c3Rv
bVByb3RvY29sTWFuYWdlckNvY29hLm1tICovOyB9OwotCQk1QzIwQ0JBMDFCQjFFQ0Q4MDA4OTVC
QjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUMyMENCOUUxQkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtTZXNz
aW9uQ29jb2EuaCAqLzsgfTsKIAkJNUMyMENCOUQxQkIwRENGQTAwODk1QkIxIC8qIE5ldHdvcmtT
ZXNzaW9uQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1QzIwQ0I5QjFCQjBEQ0QyMDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5tbSAq
LzsgfTsKIAkJNUMyMENCQTAxQkIxRUNEODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzIwQ0I5RTFCQjBE
RDE4MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb24uaCAqLzsgfTsKLQkJNUMyMENCOUQxQkIwRENG
QTAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMjBDQjlCMUJCMERDRDIwMDg5NUJCMSAvKiBOZXR3b3Jr
U2Vzc2lvbi5jcHAgKi87IH07CiAJCTVDMjk4REEwMUMzREYwMjEwMDQ3MEFGRSAvKiBQZW5kaW5n
RG93bmxvYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDMjk4RDlFMUMzREVGMjkwMDQ3MEFGRSAvKiBQZW5kaW5nRG93bmxvYWQuaCAqLzsgfTsKIAkJ
NUM3NzA2NzQxRDExMzgzODAwMTI3MDBGIC8qIFdlYlNvY2tldFByb3ZpZGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDNzcwNjczMUQxMTFEOEIw
MDEyNzAwRiAvKiBXZWJTb2NrZXRQcm92aWRlci5jcHAgKi87IH07CiAJCTVDNzk0MzlCMUQ3NjJE
NjIwMDMxMDJENCAvKiBXZWJLaXQySW5pdGlhbGl6ZUNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM3OTQzOUExRDc2MkNERjAwMzEwMkQ0IC8q
IFdlYktpdDJJbml0aWFsaXplQ29jb2EubW0gKi87IH07CiAJCTVDODVDNzg4MUMzRjIzQ0UwMDYx
QTRGQSAvKiBQZW5kaW5nRG93bmxvYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUM4NUM3ODYxQzNGMjNDNTAwNjFBNEZBIC8qIFBlbmRpbmdEb3du
bG9hZC5jcHAgKi87IH07Ci0JCTVDQkM5QjhEMUM2NTI3OUMwMEE4RkRDRiAvKiBOZXR3b3JrRGF0
YVRhc2tDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUNCQzlCODkxQzY1MjRBNTAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggKi87
IH07CiAJCTVDQkM5QjhEMUM2NTI3OUMwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQkM5QjhC
MUM2NTI1NzMwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5tbSAqLzsgfTsKLQkJNUNC
QzlCOEQxQzY1Mjc5QzAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0JDOUI4QjFDNjUyNTczMDBBOEZE
Q0YgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLzsgfTsKIAkJNUNCQzlCOEUxQzY1MkNBMDAwQThG
RENGIC8qIE5ldHdvcmtEYXRhVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUNCQzlCODkxQzY1MjRBNTAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFz
ay5oICovOyB9OwogCQk1Q0U4NUIyMDFDODhFNjRCMDA3MEJGQ0UgLyogUGluZ0xvYWQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDRTg1QjFGMUM4OEU2
NDMwMDcwQkZDRSAvKiBQaW5nTG9hZC5oICovOyB9OwogCQk2NTAxQkQxQTEyRjEyNDM0MDBFOUYy
NDggLyogV0tCdW5kbGVJbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjVCODZGMTcxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5z
cGVjdG9yLmNwcCAqLzsgfTsKQEAgLTMxMjMsNiArMzEyMywxMCBAQAogCQk1MkQ1QTFCMjFDNTc0
OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDVBMUIzMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMy
MTU5NEYxREJBRTZENzAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFza0NvY29hLmg7IHBhdGggPSBO
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MzIxNTk1MDFEQkFFNkQ3MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Np
b25Db2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrU2Vzc2lv
bkNvY29hLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29h
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMjE1OTUxMURCQUU2RkMwMDU0QUEz
QyAvKiBOZXR3b3JrRGF0YVRhc2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gTmV0d29ya0RhdGFUYXNrLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtE
YXRhVGFzay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMjE1OTUyMURCQUU2
RkMwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBOZXR3b3JrU2Vzc2lvbi5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrU2Vzc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3OUQxOEI3
MUNDRkUzNEIwMEIxOTc0QyAvKiBQaG90b3NTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGhvdG9zU1BJ
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMDUyRjI0MUM2RDNBQjYwMDc2RTkx
OSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IEF1dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1tOyBwYXRoID0g
QXV0aGVudGljYXRpb24vY29jb2EvQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMTQyNkUyMUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA7IHBhdGgg
PSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMTQxLDE4ICszMTQ1LDE0IEBACiAJCTVDMTQy
NzE0MUMyM0Y4QjAwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmg7IHBhdGggPSBO
ZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMTQyNzE1MUMyM0Y4QjAwMEQ0MTE4MyAvKiBD
dXN0b21Qcm90b2NvbE1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0g
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLm1lc3NhZ2VzLmluOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
Q3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3RvY29sTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMxNDI3MUIxQzIzRjhDQzAwRDQxMTgzIC8qIEN1c3Rv
bVByb3RvY29sTWFuYWdlckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW07IHBhdGggPSBOZXR3b3JrUHJv
Y2Vzcy9DdXN0b21Qcm90b2NvbHMvQ29jb2EvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ29jb2EubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDMjBDQjlFMUJCMEREMTgwMDg5NUJCMSAv
KiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IE5ldHdvcmtTZXNzaW9uQ29jb2EuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdv
cmtTZXNzaW9uQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUMyMENCOUIx
QkIwRENEMjAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBOZXR3b3JrU2Vzc2lvbkNvY29hLm1tOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUMyMENCOUUxQkIwREQxODAwODk1QkIxIC8qIE5ldHdvcmtTZXNz
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtTZXNzaW9uLmg7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1QzIwQ0I5QjFCQjBEQ0QyMDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0d29ya1Nlc3Np
b24uY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1QzI5OEQ5RTFDM0RFRjI5MDA0NzBBRkUgLyogUGVuZGlu
Z0Rvd25sb2FkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBlbmRpbmdEb3du
bG9hZC5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL1BlbmRpbmdEb3dubG9hZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Qzc3MDY3MzFEMTExRDhCMDAxMjcwMEYg
LyogV2ViU29ja2V0UHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gV2ViU29ja2V0UHJvdmlkZXIuY3BwOyBwYXRoID0gTmV0d29yay9XZWJTb2NrZXRQcm92
aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNzk0MzlBMUQ3NjJDREYw
MDMxMDJENCAvKiBXZWJLaXQySW5pdGlhbGl6ZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViS2l0MkluaXRpYWxpemVDb2NvYS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM3Qzg4REMxRDBGNDFBMDAwOUQyRjZEIC8qIFdlYlNvY2tl
dFByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlNvY2tldFBy
b3ZpZGVyLmg7IHBhdGggPSBOZXR3b3JrL1dlYlNvY2tldFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVDODVDNzg2MUMzRjIzQzUwMDYxQTRGQSAvKiBQZW5kaW5nRG93
bmxvYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGVuZGluZ0Rv
d25sb2FkLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9QZW5kaW5nRG93bmxv
YWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1Q0JDOUI4QjFDNjUyNTczMDBB
OEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFzay5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrRGF0YVRhc2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Q0JDOUI4
OTFDNjUyNEE1MDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFzay5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0RhdGFUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDQkM5Qjg5
MUM2NTI0QTUwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oOyBwYXRoID0gTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUNCQzlCOEIxQzY1MjU3MzAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFza0Nv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0d29ya0Rh
dGFUYXNrQ29jb2EubW07IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRh
c2tDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUNFODVCMUYxQzg4RTY0
MzAwNzBCRkNFIC8qIFBpbmdMb2FkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFBpbmdMb2FkLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1RDQ0MkE1NTE2RDU4NTY3MDBBQzMzMzEgLyogUGx1Z2luU2Vy
dmljZS5lbnRpdGxlbWVudHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnhtbDsgcGF0aCA9IFBsdWdpblNlcnZpY2UuZW50aXRsZW1lbnRzOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ0Myw2ICs1NDQzLDcgQEAKIAkJCQk1MTNB
MTY0OTE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3Bw
ICovLAogCQkJCTUxM0ExNjRBMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oICovLAogCQkJCTUxM0ExNjRCMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLywKKwkJCQk1MzIxNTk1MTFEQkFF
NkZDMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLywKIAkJCQk1Q0JDOUI4OTFDNjUy
NEE1MDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmggKi8sCiAJCQkJODM5OTAxRkYxQkU5QTAx
QjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmNwcCAqLywKIAkJCQk4Mzk5MDFGRTFCRTlBMDFCMDAw
RjM2NTMgLyogTmV0d29ya0xvYWQuaCAqLywKQEAgLTU0NjEsOCArNTQ2Miw4IEBACiAJCQkJRTE1
MjU1MTcxNzAxMDlGQjAwM0Q3QURCIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5p
biAqLywKIAkJCQk1QzE0MjZFNTFDMjNGODA1MDBENDExODMgLyogTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMuY3BwICovLAogCQkJCTVDMTQyNkU2MUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oICovLAorCQkJCTUzMjE1OTUyMURCQUU2RkMwMDU0
QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgKi8sCiAJCQkJNUMyMENCOUUxQkIwREQxODAwODk1
QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmggKi8sCi0JCQkJNUMyMENCOUUxQkIwREQxODAwODk1QkIx
IC8qIE5ldHdvcmtTZXNzaW9uLmNwcCAqLywKIAkJCQk1Q0U4NUIxRjFDODhFNjQzMDA3MEJGQ0Ug
LyogUGluZ0xvYWQuaCAqLywKIAkJCQlFMUI3ODQ3MDE2M0YyNDY5MDAwN0I2OTIgLyogUmVtb3Rl
TmV0d29ya2luZ0NvbnRleHQuaCAqLywKIAkJCSk7CkBAIC01ODU0LDEwICs1ODU1LDEwIEBACiAJ
CTdFQzRGMEY4MThFNEE5MjIwMDgwNTZBRiAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNUNCQzlCOEIxQzY1MjU3MzAwQThGRENGIC8qIE5l
dHdvcmtEYXRhVGFza0NvY29hLmggKi8sCisJCQkJNTMyMTU5NEYxREJBRTZENzAwNTRBQTNDIC8q
IE5ldHdvcmtEYXRhVGFza0NvY29hLmggKi8sCiAJCQkJNUNCQzlCOEIxQzY1MjU3MzAwQThGRENG
IC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLm1tICovLAogCQkJCTdFQzRGMEY5MThFNEE5NDUwMDgw
NTZBRiAvKiBOZXR3b3JrUHJvY2Vzc0NvY29hLm1tICovLAotCQkJCTVDMjBDQjlCMUJCMERDRDIw
MDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggKi8sCisJCQkJNTMyMTU5NTAxREJBRTZE
NzAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLywKIAkJCQk1QzIwQ0I5QjFCQjBE
Q0QyMDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5tbSAqLywKIAkJCSk7CiAJCQluYW1l
ID0gY29jb2E7CkBAIC03NzM5LDcgKzc3NDAsNiBAQAogCQkJCTUxM0ExNjREMTYzMEE5QkYwMDVE
N0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTFERDlGMjkxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQkM5QjhFMUM2NTJDQTAwMEE4RkRD
RiAvKiBOZXR3b3JrRGF0YVRhc2suaCBpbiBIZWFkZXJzICovLAotCQkJCTVDQkM5QjhFMUM2NTJD
QTAwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODM5OTAyMDMxQkU5QTAyQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4M0Q0NTRENzFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTgzOTE0OTY1MUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBh
cmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtNzc1NSw3ICs3NzU1LDYgQEAKIAkJCQlFMTUy
NTUxQjE3MDExODE5MDAzRDdBREIgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTVDMTQyNkYwMUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMyMENCQTAxQkIxRUNE
ODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1QzIwQ0JB
MDFCQjFFQ0Q4MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzFBMkVDNTYxNDg5OUMwOTAwODEwRDcxIC8qIE5vdGlmaWNhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTMxMjYxRjE0OEZGODJDMDBCQTJBMzkgLyog
Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMUEyRUM1MjE0ODk5ODE5MDA4MTBENzEgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtODEzNyw2ICs4MTM2LDcgQEAKIAkJ
CQlCQzdCNjMzRDEyQTQ1RDEyMDBEMTc0QTQgLyogV0tCdW5kbGVQYWdlR3JvdXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBQjQ3NEQ4MTg0RDQzRkQwMDUxQjYyMiAvKiBXS0J1bmRsZVBhZ2VMb2Fk
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUVEODJBN0YyMTI4QzZGQUYwMDQ0NzdCMyAv
KiBXS0J1bmRsZVBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzIxNTk1NjFEQkFF
NzJEMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBQjQ3NEVBMTg0RDQ1MTMwMDUxQjYyMiAvKiBXS0J1bmRsZVBhZ2VQb2xpY3lDbGllbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMUI0MTk4MTFENDFENTcwMDExRThERCAvKiBXS0J1bmRsZVBh
Z2VQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI0NzREQTE4NEQ0NDI1MDA1MUI2MjIg
LyogV0tCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTgy
MDYsNiArODIwNiw3IEBACiAJCQkJQkM1NENDMTIxMkQ2NzRFRTAwNUM2N0IwIC8qIFdLR2VvbG9j
YXRpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzA2RjQ0RTEyREJERjNGMDAyRDc4
REUgLyogV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzBFNjE5ODEyRDZDRDEyMDAxMkE3MkEgLyogV0tHZW9sb2NhdGlvblBvc2l0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1MzIxNTk1NTFEQkFFNzI5MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Np
b25Db2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDQjRFNEYxOEJCRTA0NDAwMEZDRkM5IC8q
IFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDOEIzNzQx
MjVGQjY5MDAwREU0NkE0IC8qIFdLR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNDIy
RjhCMThCMjlCNTQwMEQ4Q0Q5NiAvKiBXS0hpc3RvcnlEZWxlZ2F0ZVByaXZhdGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtOTIxNyw3ICs5MjE4LDYgQEAKIAkJCQk4MzEwNDI4QzFCRDZCNjZGMDBBNzE1
RTQgLyogTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTEzQTE2NEMxNjMwQTlCRjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxREQ5RjI4MTYzNjdEQTIwMDE1NzhFOSAvKiBO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk1Q0JDOUI4RDFDNjUyNzlDMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTVDQkM5QjhEMUM2NTI3OUMwMEE4RkRDRiAvKiBOZXR3b3Jr
RGF0YVRhc2tDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTgzOTkwMjAyMUJFOUEwMkIwMDBG
MzY1MyAvKiBOZXR3b3JrTG9hZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MzZFRUI4MDFCRTlF
QzlFMDA2QjRCODIgLyogTmV0d29ya0xvYWRNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTk2MjEs
NiArOTYyMSw3IEBACiAJCQkJMkRGQzdEQkMxQkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBs
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdERDExMjdBMjk4MDAwOEZGNEY0IC8qIFdlYldo
ZWVsRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4MTYwRDAxODc2NDU1NzAwMjFFNzlE
IC8qIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MzIxNTk1
MzFEQkFFNzE4MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMjlDRDU1QUIxMjhFMjk0RjAwMTMzQzg1IC8qIFdLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmpl
Y3RCYXNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjkyMzJERjgxOEIyQTlBRTAwRDA1OTZGIC8q
IFdLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQky
OTIzMkRGOTE4QjJBQjNBMDBEMDU5NkYgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1h
Yy5tbSBpbiBTb3VyY2VzICovLApAQCAtOTYzOSw2ICs5NjQwLDcgQEAKIAkJCQlCQ0JBQUNGNTE0
NTIzMjRGMDA1M0Y4MkYgLyogV0tCcm93c2luZ0NvbnRleHRHcm91cC5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTFBRTAwRDRDMTgyRDZFQjAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4dEhhbmRs
ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMjA0RUVFMTFDODNFQzgwMDhGMzM3NSAvKiBXS0J1
bmRsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzIxNTk1NDFEQkFFNzFEMDA1NEFBM0MgLyog
TmV0d29ya0RhdGFUYXNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzNUVFQjlFMTI3NzYxQUMw
MDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzVFRUJBMDEyNzc2MUFDMDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVt
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRkEyRDc3MTUyMTJFMjYwMEMxQkEwQiAvKiBXS0J1
bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292594</attachid>
            <date>2016-10-24 01:31:45 -0700</date>
            <delta_ts>2016-10-24 03:43:28 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>wk2-network-session-subclasses.diff</filename>
            <type>text/plain</type>
            <size>107271</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggMWFjMTA2Yy4uNmJkYTNiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTE4MiwxMCArMTgyLDEyIEBAIGVuZGlmICgpCiAKIHNldChOZXR3b3JrUHJvY2Vz
c19DT01NT05fU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKICAg
ICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3Jt
U3RyYXRlZ2llcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
Y3BwCisgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCiAKICAgICBOZXR3b3Jr
UHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZGE0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCkBAIC0wLDAgKzEsMTE0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtE
YXRhVGFzay5oIgorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKworI2luY2x1ZGUgIk5ldHdv
cmtTZXNzaW9uLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworI2lmIFBMQVRGT1JN
KENPQ09BKQorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCisjZW5kaWYKKyNpZiBV
U0UoU09VUCkKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2tTb3VwLmgiCisjZW5kaWYKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWY8TmV0d29y
a0RhdGFUYXNrPiBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lv
biwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENvbnRlbnRTbmlm
ZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9u
SFRUUFNUb0hUVFBSZWRpcmVjdCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZXR1cm4g
TmV0d29ya0RhdGFUYXNrQ29jb2E6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIHN0
b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QpOworI2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAgcmV0dXJu
IE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3QsIHN0
b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENsZWFyUmVmZXJyZXJP
bkhUVFBTVG9IVFRQUmVkaXJlY3QpOworI2VuZGlmCit9CisKK05ldHdvcmtEYXRhVGFzazo6TmV0
d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGll
bnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxz
LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgYm9vbCBzaG91bGRDbGVhclJl
ZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQorICAgIDogbV9mYWlsdXJlVGltZXIoKnRoaXMs
ICZOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKQorICAgICwgbV9zZXNzaW9uKHNl
c3Npb24pCisgICAgLCBtX2NsaWVudCgmY2xpZW50KQorICAgICwgbV9zdG9yZWRDcmVkZW50aWFs
cyhzdG9yZWRDcmVkZW50aWFscykKKyAgICAsIG1fbGFzdEhUVFBNZXRob2QocmVxdWVzdFdpdGhD
cmVkZW50aWFscy5odHRwTWV0aG9kKCkpCisgICAgLCBtX2ZpcnN0UmVxdWVzdChyZXF1ZXN0V2l0
aENyZWRlbnRpYWxzKQorICAgICwgbV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJl
ZGlyZWN0KHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghcmVxdWVzdFdpdGhDcmVkZW50aWFs
cy51cmwoKS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxG
YWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcG9ydEFsbG93ZWQo
cmVxdWVzdFdpdGhDcmVkZW50aWFscy51cmwoKSkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJl
KEJsb2NrZWRGYWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworTmV0d29ya0Rh
dGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVCghbV9jbGllbnQpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2No
ZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlIHR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUgIT0gTm9G
YWlsdXJlKTsKKyAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gdHlwZTsKKyAgICBtX2ZhaWx1
cmVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpmYWls
dXJlVGltZXJGaXJlZCgpCit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKworICAgIHN3aXRjaCAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSkgeworICAg
IGNhc2UgQmxvY2tlZEZhaWx1cmU6CisgICAgICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBO
b0ZhaWx1cmU7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50LT53
YXNCbG9ja2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludmFsaWRVUkxGYWlsdXJl
OgorICAgICAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJlOworICAgICAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgICAgICBtX2NsaWVudC0+Y2Fubm90U2hvd1VSTCgpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBOb0ZhaWx1cmU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VT
U0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtE
YXRhVGFzay5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmgKaW5kZXggYjYyNzU4Yi4uNGRjMTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKQEAgLTM2LDI1ICszNiwxMSBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgog
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKENPQ09BKQotT0JK
Q19DTEFTUyBOU1VSTFNlc3Npb25EYXRhVGFzazsKLSNlbmRpZgotCi0jaWYgVVNFKFNPVVApCi0j
aW5jbHVkZSA8V2ViQ29yZS9Qcm90ZWN0aW9uU3BhY2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlUmVzcG9uc2UuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0
Zi9nbGliL0dSZWZQdHIuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLWNsYXNzIENyZWRlbnRpYWw7CiBjbGFzcyBSZXNvdXJj
ZUVycm9yOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIH0KQEAgLTg2LDE2ICs3MiwxNCBAQCBwdWJsaWM6CiB9Owog
CiBjbGFzcyBOZXR3b3JrRGF0YVRhc2sgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrRGF0YVRh
c2s+IHsKLSAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nlc3Npb247CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxOZXR3b3JrRGF0YVRhc2s+IGNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwg
TmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlh
bHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJv
b2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFzayhzZXNzaW9uLCBjbGllbnQs
IHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENs
ZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBzdXNwZW5kKCk7Ci0gICAgdm9pZCBjYW5jZWwoKTsKLSAgICB2b2lkIHJlc3VtZSgpOworICAg
IHN0YXRpYyBSZWY8TmV0d29ya0RhdGFUYXNrPiBjcmVhdGUoTmV0d29ya1Nlc3Npb24mLCBOZXR3
b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5LCBi
b29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOworCisgICAgdmly
dHVhbCB+TmV0d29ya0RhdGFUYXNrKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXN1
bWUoKSA9IDA7CiAKICAgICBlbnVtIGNsYXNzIFN0YXRlIHsKICAgICAgICAgUnVubmluZywKQEAg
LTEwMywyNiArODcsMTEgQEAgcHVibGljOgogICAgICAgICBDYW5jZWxpbmcsCiAgICAgICAgIENv
bXBsZXRlZAogICAgIH07Ci0gICAgU3RhdGUgc3RhdGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0
YXRlIHN0YXRlKCkgY29uc3QgPSAwOwogCi0gICAgdHlwZWRlZiB1aW50NjRfdCBUYXNrSWRlbnRp
ZmllcjsKLSAgICAKLSAgICB+TmV0d29ya0RhdGFUYXNrKCk7Ci0KLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICB2b2lkIGRpZFNlbmREYXRhKHVpbnQ2NF90IHRvdGFsQnl0ZXNTZW50LCB1aW50NjRf
dCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQpOwotICAgIHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5n
ZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIENoYWxsZW5nZUNvbXBs
ZXRpb25IYW5kbGVyJiYpOwotICAgIHZvaWQgZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYpOwotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmJiwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciYmKTsKLSAg
ICB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYpOwotICAg
IHZvaWQgZGlkQmVjb21lRG93bmxvYWQoKTsKLQotICAgIHZvaWQgd2lsbFBlcmZvcm1IVFRQUmVk
aXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmJiwgUmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlciYmKTsKLSAgICB2b2lkIHRyYW5zZmVy
U2FuZGJveEV4dGVuc2lvblRvRG93bmxvYWQoRG93bmxvYWQmKTsKLSNlbmRpZgogICAgIE5ldHdv
cmtEYXRhVGFza0NsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KICAg
ICB2b2lkIGNsZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IG51bGxwdHI7IH0KLSAgICAKKwogICAg
IERvd25sb2FkSUQgcGVuZGluZ0Rvd25sb2FkSUQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdE
b3dubG9hZElEOyB9CiAgICAgUGVuZGluZ0Rvd25sb2FkKiBwZW5kaW5nRG93bmxvYWQoKSBjb25z
dCB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZDsgfQogICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25s
b2FkSUQoRG93bmxvYWRJRCBkb3dubG9hZElEKQpAQCAtMTM2LDg3ICsxMDUsMzEgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlQoIW1fcGVuZGluZ0Rvd25sb2FkKTsKICAgICAgICAgbV9wZW5kaW5n
RG93bmxvYWQgPSAmcGVuZGluZ0Rvd25sb2FkOwogICAgIH0KLSAgICB2b2lkIHNldFBlbmRpbmdE
b3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSYsIGJvb2wgYWxsb3dPdmVyd3JpdGUpOworCisgICAgdmlydHVhbCB2b2lk
IHNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgLyphbGxvd092ZXJ3cml0ZSovKSB7IG1f
cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBmaWxlbmFtZTsgfQogICAgIGNvbnN0IFN0cmluZyYg
cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9h
ZExvY2F0aW9uOyB9CiAgICAgYm9vbCBpc0Rvd25sb2FkKCkgY29uc3QgeyByZXR1cm4gISFtX3Bl
bmRpbmdEb3dubG9hZElELmRvd25sb2FkSUQoKTsgfQogCiAgICAgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiBmaXJzdFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0UmVxdWVz
dDsgfQotICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpOwotICAgIHZvaWQgc2V0U3VnZ2Vz
dGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBhbGxvd3NTcGVjaWZpY0hUVFBT
Q2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Jik7Ci0gICAgCi1wcml2YXRlOgotICAgIE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYs
IE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xp
Y3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CisgICAg
dmlydHVhbCBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUoKSBjb25zdCB7IHJldHVybiBTdHJpbmco
KTsgfQorICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBzdWdnZXN0
ZWROYW1lKSB7IG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWROYW1lOyB9CisgICAgdmly
dHVhbCBib29sIGFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAg
Ym9vbCB0cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYpOwor
cHJvdGVjdGVkOgorICAgIE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYsIE5ldHdvcmtE
YXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6
OlN0b3JlZENyZWRlbnRpYWxzLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQ
UmVkaXJlY3QpOwogCi0jaWYgVVNFKFNPVVApCi0gICAgdm9pZCB0aW1lb3V0RmlyZWQoKTsKLSAg
ICB2b2lkIHN0YXJ0VGltZW91dCgpOwotICAgIHZvaWQgc3RvcFRpbWVvdXQoKTsKLSAgICB2b2lk
IGludmFsaWRhdGVBbmRDYW5jZWwoKTsKLSAgICB2b2lkIGNyZWF0ZVJlcXVlc3QoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBjbGVhclJlcXVlc3QoKTsKLSAgICBz
dGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiwgR0FzeW5jUmVzdWx0
KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCBkaWRTZW5kUmVxdWVzdChHUmVmUHRyPEdJ
bnB1dFN0cmVhbT4mJik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKLSAgICBzdGF0
aWMgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBHUGFyYW1TcGVj
KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkKCk7Ci0gICAg
dm9pZCBhcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYpOwotICAgIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZUNhbGxiYWNrKFNvdXBTZXNzaW9uKiwg
U291cE1lc3NhZ2UqLCBTb3VwQXV0aCosIGdib29sZWFuIHJldHJ5aW5nLCBOZXR3b3JrRGF0YVRh
c2sqKTsKLSAgICB2b2lkIGF1dGhlbnRpY2F0ZShXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYmKTsKLSAgICB2b2lkIGNvbnRpbnVlQXV0aGVudGljYXRlKFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJiYpOwotICAgIHN0YXRpYyB2b2lkIHNraXBJbnB1dFN0cmVhbUZvclJl
ZGlyZWN0aW9uQ2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0Rh
dGFUYXNrKik7Ci0gICAgdm9pZCBza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOwotICAg
IHZvaWQgZGlkRmluaXNoU2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKLSAgICBib29s
IHNob3VsZFN0YXJ0SFRUUFJlZGlyZWN0aW9uKCk7Ci0gICAgdm9pZCBjb250aW51ZUhUVFBSZWRp
cmVjdGlvbigpOwotICAgIHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBH
QXN5bmNSZXN1bHQqLCBOZXR3b3JrRGF0YVRhc2sqKTsKLSAgICB2b2lkIHJlYWQoKTsKLSAgICB2
b2lkIGRpZFJlYWQoZ3NzaXplIGJ5dGVzUmVhZCk7Ci0gICAgdm9pZCBkaWRGaW5pc2hSZWFkKCk7
Ci0gICAgc3RhdGljIHZvaWQgcmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2soU291cE11bHRpcGFydElu
cHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCBy
ZXF1ZXN0TmV4dFBhcnQoKTsKLSAgICB2b2lkIGRpZFJlcXVlc3ROZXh0UGFydChHUmVmUHRyPEdJ
bnB1dFN0cmVhbT4mJik7Ci0gICAgdm9pZCBkaWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQoKTsKLSAg
ICBzdGF0aWMgdm9pZCBnb3RIZWFkZXJzQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0
YVRhc2sqKTsKLSAgICB2b2lkIGRpZEdldEhlYWRlcnMoKTsKLSAgICBzdGF0aWMgdm9pZCB3cm90
ZUJvZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBTb3VwQnVmZmVyKiwgTmV0d29ya0RhdGFU
YXNrKik7Ci0gICAgdm9pZCBkaWRXcml0ZUJvZHlEYXRhKHVpbnQ2NF90IGJ5dGVzU2VudCk7Ci0g
ICAgdm9pZCBkb3dubG9hZCgpOwotICAgIHN0YXRpYyB2b2lkIHdyaXRlRG93bmxvYWRDYWxsYmFj
ayhHT3V0cHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAg
dm9pZCB3cml0ZURvd25sb2FkKCk7Ci0gICAgdm9pZCBkaWRXcml0ZURvd25sb2FkKGdzaXplIGJ5
dGVzV3JpdHRlbik7Ci0gICAgdm9pZCBkaWRGYWlsRG93bmxvYWQoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciYpOwotICAgIHZvaWQgZGlkRmluaXNoRG93bmxvYWQoKTsKLSAgICB2b2lkIGNs
ZWFuRG93bmxvYWRGaWxlcygpOwotICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yJik7Ci0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgc3RhdGljIHZvaWQgbmV0
d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqLCBHU29ja2V0Q2xpZW50RXZlbnQsIEdJT1N0
cmVhbSosIE5ldHdvcmtEYXRhVGFzayopOwotICAgIHZvaWQgbmV0d29ya0V2ZW50KEdTb2NrZXRD
bGllbnRFdmVudCk7Ci0jaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKLSAgICBzdGF0
aWMgdm9pZCBzdGFydGluZ0NhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrKik7
Ci0jZWxzZQotICAgIHN0YXRpYyB2b2lkIHJlcXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Np
b24qLCBTb3VwTWVzc2FnZSosIFNvdXBTb2NrZXQqLCBOZXR3b3JrRGF0YVRhc2sqKTsKLSNlbmRp
ZgotICAgIHZvaWQgZGlkU3RhcnRSZXF1ZXN0KCk7Ci0gICAgc3RhdGljIHZvaWQgcmVzdGFydGVk
Q2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2sqKTsKLSAgICB2b2lkIGRpZFJl
c3RhcnQoKTsKLSNlbmRpZgotI2VuZGlmCi0gICAgCiAgICAgZW51bSBGYWlsdXJlVHlwZSB7CiAg
ICAgICAgIE5vRmFpbHVyZSwKICAgICAgICAgQmxvY2tlZEZhaWx1cmUsCiAgICAgICAgIEludmFs
aWRVUkxGYWlsdXJlCiAgICAgfTsKLSAgICBGYWlsdXJlVHlwZSBtX3NjaGVkdWxlZEZhaWx1cmVU
eXBlIHsgTm9GYWlsdXJlIH07Ci0gICAgV2ViQ29yZTo6VGltZXIgbV9mYWlsdXJlVGltZXI7CiAg
ICAgdm9pZCBmYWlsdXJlVGltZXJGaXJlZCgpOwogICAgIHZvaWQgc2NoZWR1bGVGYWlsdXJlKEZh
aWx1cmVUeXBlKTsKLSAgICAKLSAgICBSZWZQdHI8TmV0d29ya1Nlc3Npb24+IG1fc2Vzc2lvbjsK
LSAgICBOZXR3b3JrRGF0YVRhc2tDbGllbnQqIG1fY2xpZW50OworCisgICAgRmFpbHVyZVR5cGUg
bV9zY2hlZHVsZWRGYWlsdXJlVHlwZSB7IE5vRmFpbHVyZSB9OworICAgIFdlYkNvcmU6OlRpbWVy
IG1fZmFpbHVyZVRpbWVyOworICAgIFJlZjxOZXR3b3JrU2Vzc2lvbj4gbV9zZXNzaW9uOworICAg
IE5ldHdvcmtEYXRhVGFza0NsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07CiAgICAgUGVuZGlu
Z0Rvd25sb2FkKiBtX3BlbmRpbmdEb3dubG9hZCB7IG51bGxwdHIgfTsKICAgICBEb3dubG9hZElE
IG1fcGVuZGluZ0Rvd25sb2FkSUQ7CiAgICAgU3RyaW5nIG1fdXNlcjsKQEAgLTIyNCw0NiArMTM3
LDE0IEBAIHByaXZhdGU6CiAjaWYgVVNFKENSRURFTlRJQUxfU1RPUkFHRV9XSVRIX05FVFdPUktf
U0VTU0lPTikKICAgICBXZWJDb3JlOjpDcmVkZW50aWFsIG1faW5pdGlhbENyZWRlbnRpYWw7CiAj
ZW5kaWYKLSAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBtX3N0b3JlZENyZWRlbnRpYWxz
OworICAgIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIG1fc3RvcmVkQ3JlZGVudGlhbHMgeyBX
ZWJDb3JlOjpEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgfTsKICAgICBTdHJpbmcgbV9sYXN0
SFRUUE1ldGhvZDsKICAgICBTdHJpbmcgbV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbjsKICAgICBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9maXJzdFJlcXVlc3Q7Ci0gICAgYm9vbCBtX3Nob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Q7Ci0gICAgUmVmUHRyPFNhbmRib3hF
eHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBS
ZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+IG1fdGFzazsKLSNlbmRpZgotI2lmIFVTRShT
T1VQKQotICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07Ci0gICAgV2ViQ29y
ZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IG1fc2hvdWxkQ29udGVudFNuaWZmOwotICAgIEdSZWZQ
dHI8U291cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7Ci0gICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4g
bV9zb3VwTWVzc2FnZTsKLSAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsK
LSAgICBHUmVmUHRyPFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbT4gbV9tdWx0aXBhcnRJbnB1dFN0
cmVhbTsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKLSAgICBHUmVm
UHRyPEdBc3luY1Jlc3VsdD4gbV9wZW5kaW5nUmVzdWx0OwotICAgIFdlYkNvcmU6OlByb3RlY3Rp
b25TcGFjZSBtX3Byb3RlY3Rpb25TcGFjZUZvclBlcnNpc3RlbnRTdG9yYWdlOwotICAgIFdlYkNv
cmU6OkNyZWRlbnRpYWwgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2U7Ci0gICAgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgIFZlY3RvcjxjaGFyPiBtX3Jl
YWRCdWZmZXI7Ci0gICAgdW5zaWduZWQgbV9yZWRpcmVjdENvdW50IHsgMCB9OwotICAgIHVpbnQ2
NF90IG1fYm9keURhdGFUb3RhbEJ5dGVzU2VudCB7IDAgfTsKLSAgICBHUmVmUHRyPEdGaWxlPiBt
X2Rvd25sb2FkRGVzdGluYXRpb25GaWxlOwotICAgIEdSZWZQdHI8R0ZpbGU+IG1fZG93bmxvYWRJ
bnRlcm1lZGlhdGVGaWxlOwotICAgIEdSZWZQdHI8R091dHB1dFN0cmVhbT4gbV9kb3dubG9hZE91
dHB1dFN0cmVhbTsKLSAgICBib29sIG1fYWxsb3dPdmVyd3JpdGVEb3dubG9hZCB7IGZhbHNlIH07
Ci0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgZG91YmxlIG1fc3RhcnRUaW1lIHsgMCB9Owot
I2VuZGlmCi0gICAgUnVuTG9vcDo6VGltZXI8TmV0d29ya0RhdGFUYXNrPiBtX3RpbWVvdXRTb3Vy
Y2U7Ci0jZW5kaWYKKyAgICBib29sIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBS
ZWRpcmVjdCB7IHRydWUgfTsKICAgICBTdHJpbmcgbV9zdWdnZXN0ZWRGaWxlbmFtZTsKIH07CiAK
LSNpZiBQTEFURk9STShDT0NPQSkKLVdlYkNvcmU6OkNyZWRlbnRpYWwgc2VydmVyVHJ1c3RDcmVk
ZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0jZW5kaWYK
LSAgICAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gVVNFKE5FVFdPUktf
U0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNw
cAppbmRleCA4ZmQ0YWNkLi45NzkyOTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0xvYWQuY3BwCkBAIC0zOSw2ICszOSwxMCBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAorI2lmIFBM
QVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgKaW5kZXggM2IxYTA1Zi4uNGU0
NmU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xv
YWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCkBA
IC0zNCw3ICszNCw3IEBACiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogI2luY2x1ZGUgIkRv
d25sb2FkSUQuaCIKLSNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIk5ldHdv
cmtEYXRhVGFzay5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uu
aD4KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAKaW5kZXggOGU5N2YwNy4uMjBiNTZjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtNzQsNiArNzQsMTAgQEAK
ICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
Q09DT0EpCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Db2NvYS5oIgorI2VuZGlmCisKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwMiw3ICsxMDYs
NyBAQCBOZXR3b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MoKQogICAgIGFkZFN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlcj4oKTsKICAgICBhZGRTdXBwbGVtZW50PEN1c3RvbVByb3RvY29sTWFu
YWdlcj4oKTsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKSAmJiBQTEFURk9STShDT0NPQSkKLSAg
ICBOZXR3b3JrU2Vzc2lvbjo6c2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKHN1cHBsZW1lbnQ8Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyPigpKTsKKyAgICBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRDdXN0
b21Qcm90b2NvbE1hbmFnZXIoc3VwcGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCkpOwog
I2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtT
ZXNzaW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjgxODE5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nl
c3Npb24uY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKworI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCisKKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgorI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJO
ZXR3b3JrU2Vzc2lvbkNvY29hLmgiCisjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyNpbmNsdWRlICJO
ZXR3b3JrU2Vzc2lvblNvdXAuaCIKKyNlbmRpZgorCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVmPE5ldHdvcmtTZXNzaW9uPiBOZXR3b3JrU2Vz
c2lvbjo6Y3JlYXRlKFNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciog
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHJldHVy
biBOZXR3b3JrU2Vzc2lvbkNvY29hOjpjcmVhdGUoc2Vzc2lvbklELCBjdXN0b21Qcm90b2NvbE1h
bmFnZXIpOworI2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAgVU5VU0VEX1BBUkFNKGN1c3RvbVBy
b3RvY29sTWFuYWdlcik7CisgICAgcmV0dXJuIE5ldHdvcmtTZXNzaW9uU291cDo6Y3JlYXRlKHNl
c3Npb25JRCk7CisjZW5kaWYKK30KKworTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpk
ZWZhdWx0U2Vzc2lvbigpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJuIE5ldHdv
cmtTZXNzaW9uQ29jb2E6OmRlZmF1bHRTZXNzaW9uKCk7CisjZWxzZQorICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uID0gJk5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpLmxlYWtSZWYo
KTsKKyAgICByZXR1cm4gKnNlc3Npb247CisjZW5kaWYKK30KKworTmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29uc3QKK3sKKyAg
ICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNl
c3Npb24obV9zZXNzaW9uSUQpOworICAgIFJFTEVBU0VfQVNTRVJUKHN0b3JhZ2VTZXNzaW9uKTsK
KyAgICByZXR1cm4gKnN0b3JhZ2VTZXNzaW9uOworfQorCitOZXR3b3JrU2Vzc2lvbjo6TmV0d29y
a1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKKyAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25J
RCkKK3sKK30KKworTmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbigpCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCmluZGV4IGIw
ODgyZjIuLmZlZmQ3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Nlc3Npb24uaApAQCAtMjcsMjQgKzI3LDEwIEBACiAKICNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi1PQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbjsKLU9C
SkNfQ0xBU1MgTlNPcGVyYXRpb25RdWV1ZTsKLU9CSkNfQ0xBU1MgV0tOZXR3b3JrU2Vzc2lvbkRl
bGVnYXRlOwotI2VuZGlmCi0KLSNpbmNsdWRlICJEb3dubG9hZElELmgiCi0jaW5jbHVkZSAiTmV0
d29ya0RhdGFUYXNrLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKLSNpZiBVU0UoU09VUCkKLXR5
cGVkZWYgc3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb247CiB9CkBAIC01NCw2MyAr
NDAsMjEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFnZXI7
CiAKIGNsYXNzIE5ldHdvcmtTZXNzaW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya1Nlc3Np
b24+IHsKLSAgICBmcmllbmQgY2xhc3MgTmV0d29ya0RhdGFUYXNrOwogcHVibGljOgotICAgIGVu
dW0gY2xhc3MgVHlwZSB7Ci0gICAgICAgIE5vcm1hbCwKLSAgICAgICAgRXBoZW1lcmFsCi0gICAg
fTsKLQotICAgIHN0YXRpYyBSZWY8TmV0d29ya1Nlc3Npb24+IGNyZWF0ZShUeXBlLCBXZWJDb3Jl
OjpTZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopOworICAgIHN0YXRpYyBSZWY8TmV0
d29ya1Nlc3Npb24+IGNyZWF0ZShXZWJDb3JlOjpTZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFu
YWdlciogPSBudWxscHRyKTsKICAgICBzdGF0aWMgTmV0d29ya1Nlc3Npb24mIGRlZmF1bHRTZXNz
aW9uKCk7Ci0gICAgfk5ldHdvcmtTZXNzaW9uKCk7CisgICAgdmlydHVhbCB+TmV0d29ya1Nlc3Np
b24oKTsKIAotICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpOworICAgIHZpcnR1YWwgdm9p
ZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBjbGVhckNyZWRl
bnRpYWxzKCkgeyB9OwogCiAgICAgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9Ci0KLSNpZiBVU0UoU09VUCkKLSAgICBTb3VwU2Vzc2lv
biogc291cFNlc3Npb24oKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBOZXR3b3JrU2Vzc2lvbiBoYXMgYmVlbiBj
cmVhdGVkLgotICAgIHN0YXRpYyB2b2lkIHNldEN1c3RvbVByb3RvY29sTWFuYWdlcihDdXN0b21Q
cm90b2NvbE1hbmFnZXIqKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvbkF1
ZGl0VG9rZW5EYXRhKFJldGFpblB0cjxDRkRhdGFSZWY+JiYpOwotICAgIHN0YXRpYyB2b2lkIHNl
dFNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKLSAgICBz
dGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJik7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHN0YXRpYyB2b2lkIHNldENURGF0YUNv
bm5lY3Rpb25TZXJ2aWNlVHlwZShjb25zdCBTdHJpbmcmKTsKLSNlbmRpZgotI2VuZGlmCi0KLSAg
ICB2b2lkIGNsZWFyQ3JlZGVudGlhbHMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBOZXR3
b3JrRGF0YVRhc2sqIGRhdGFUYXNrRm9ySWRlbnRpZmllcihOZXR3b3JrRGF0YVRhc2s6OlRhc2tJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyk7Ci0KLSAgICB2b2lkIGFkZERv
d25sb2FkSUQoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgRG93bmxvYWRJRCk7Ci0g
ICAgRG93bmxvYWRJRCBkb3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIp
OwotICAgIERvd25sb2FkSUQgdGFrZURvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRl
bnRpZmllcik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBOZXR3b3JrU2Vzc2lvbihUeXBlLCBX
ZWJDb3JlOjpTZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopOwogICAgIFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAK
LSAgICBXZWJDb3JlOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7Citwcm90ZWN0ZWQ6CisgICAgTmV0
d29ya1Nlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklEKTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFU
YXNrKj4gbV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFsczsKLSAgICBIYXNoTWFwPE5ldHdvcmtE
YXRhVGFzazo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFzayo+IG1fZGF0YVRhc2tNYXBX
aXRob3V0Q3JlZGVudGlhbHM7Ci0gICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVu
dGlmaWVyLCBEb3dubG9hZElEPiBtX2Rvd25sb2FkTWFwOwotCi0gICAgUmV0YWluUHRyPE5TVVJM
U2Vzc2lvbj4gbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlOwotICAgIFJldGFpblB0cjxX
S05ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZURl
bGVnYXRlOwotICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbldpdGhvdXRDcmVk
ZW50aWFsU3RvcmFnZTsKLSAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBt
X3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZTsKLSNlbGlmIFVTRShTT1VQ
KQotICAgIEhhc2hTZXQ8TmV0d29ya0RhdGFUYXNrKj4gbV9kYXRhVGFza1NldDsKLSNlbmRpZgor
ICAgIFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAKaW5kZXggZmM1NTUx
My4uNGFlYmYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtDYWNo
ZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtMb2FkLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24u
aCIKICNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYThlZGJiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29j
b2EuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoTkVUV09SS19TRVNTSU9OKQorCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbkRhdGFUYXNr
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsKKwor
Y2xhc3MgTmV0d29ya0RhdGFUYXNrQ29jb2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya0RhdGFUYXNr
IHsKKyAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPE5ldHdvcmtEYXRhVGFzaz4gY3JlYXRlKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9u
LCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50
aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwg
Ym9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0RhdGFUYXNrQ29jb2Eoc2Vzc2lvbiwg
Y2xpZW50LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgc2hvdWxkQ29udGVudFNuaWZmLCBz
aG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KSk7CisgICAgfQorCisgICAg
fk5ldHdvcmtEYXRhVGFza0NvY29hKCk7CisKKyAgICB0eXBlZGVmIHVpbnQ2NF90IFRhc2tJZGVu
dGlmaWVyOworCisgICAgdm9pZCBkaWRTZW5kRGF0YSh1aW50NjRfdCB0b3RhbEJ5dGVzU2VudCwg
dWludDY0X3QgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVD
aGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDaGFsbGVu
Z2VDb21wbGV0aW9uSGFuZGxlciYmKTsKKyAgICB2b2lkIGRpZENvbXBsZXRlV2l0aEVycm9yKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25z
ZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXIm
Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYm
KTsKKyAgICB2b2lkIGRpZEJlY29tZURvd25sb2FkKCk7CisKKyAgICB2b2lkIHdpbGxQZXJmb3Jt
SFRUUFJlZGlyZWN0aW9uKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiYsIFJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXImJik7CisgICAgdm9pZCB0
cmFuc2ZlclNhbmRib3hFeHRlbnNpb25Ub0Rvd25sb2FkKERvd25sb2FkJik7CisKKyAgICB2b2lk
IHN1c3BlbmQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNhbmNlbCgpIG92ZXJyaWRlOworICAgIHZv
aWQgcmVzdW1lKCkgb3ZlcnJpZGU7CisgICAgTmV0d29ya0RhdGFUYXNrOjpTdGF0ZSBzdGF0ZSgp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihj
b25zdCBTdHJpbmcmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIC8qYWxs
b3dPdmVyd3JpdGUqLykgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0
ZUZvckhvc3QoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBOZXR3b3JrRGF0YVRhc2tDb2NvYShOZXR3b3JrU2Vzc2lvbiYs
IE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYs
IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xp
Y3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CisKKyAg
ICBib29sIHRyeVBhc3N3b3JkQmFzZWRBdXRoZW50aWNhdGlvbihjb25zdCBXZWJDb3JlOjpBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJik7
CisKKyAgICBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gbV9zYW5kYm94RXh0ZW5zaW9uOworICAg
IFJldGFpblB0cjxOU1VSTFNlc3Npb25EYXRhVGFzaz4gbV90YXNrOworfTsKKworV2ViQ29yZTo6
Q3JlZGVudGlhbCBzZXJ2ZXJUcnVzdENyZWRlbnRpYWwoY29uc3QgV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBV
U0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQppbmRleCA2MmNiMGQ3Li4w
ZGRiNDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAK
ICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbXBvcnQg
Ik5ldHdvcmtEYXRhVGFza0NvY29hLmgiCiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogCkBA
IC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJEb3dubG9hZFByb3h5TWVzc2FnZXMuaCIKICNpbXBv
cnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzLmgiCisjaW1wb3J0ICJOZXR3
b3JrU2Vzc2lvbkNvY29hLmgiCiAjaW1wb3J0ICJTZXNzaW9uVHJhY2tlci5oIgogI2ltcG9ydCAi
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLmg+CkBAIC01MiwyNyArNTMsMTIgQEAgc3RhdGljIHZvaWQgYXBwbHlCYXNpY0F1
dGhvcml6YXRpb25IZWFkZXIoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb24K
IH0KICNlbmRpZgogCi1OZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vz
c2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgV2ViQ29yZTo6U3Rv
cmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmlu
Z1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRU
UFNUb0hUVFBSZWRpcmVjdCkKLSAgICA6IG1fZmFpbHVyZVRpbWVyKCp0aGlzLCAmTmV0d29ya0Rh
dGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCkKLSAgICAsIG1fc2Vzc2lvbigmc2Vzc2lvbikKLSAg
ICAsIG1fY2xpZW50KCZjbGllbnQpCi0gICAgLCBtX3N0b3JlZENyZWRlbnRpYWxzKHN0b3JlZENy
ZWRlbnRpYWxzKQotICAgICwgbV9sYXN0SFRUUE1ldGhvZChyZXF1ZXN0V2l0aENyZWRlbnRpYWxz
Lmh0dHBNZXRob2QoKSkKLSAgICAsIG1fZmlyc3RSZXF1ZXN0KHJlcXVlc3RXaXRoQ3JlZGVudGlh
bHMpCi0gICAgLCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Qoc2hv
dWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKK05ldHdvcmtEYXRhVGFza0Nv
Y29hOjpOZXR3b3JrRGF0YVRhc2tDb2NvYShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29y
a0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdFdpdGhDcmVkZW50aWFscywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVk
Q3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50
U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKKyAg
ICA6IE5ldHdvcmtEYXRhVGFzayhzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3RXaXRoQ3JlZGVudGlh
bHMsIHN0b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJl
ZGlyZWN0KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgCi0gICAgaWYgKCFy
ZXF1ZXN0V2l0aENyZWRlbnRpYWxzLnVybCgpLmlzVmFsaWQoKSkgewotICAgICAgICBzY2hlZHVs
ZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIGlmICghcG9ydEFsbG93ZWQocmVxdWVzdFdpdGhDcmVkZW50aWFscy51cmwoKSkpIHsK
LSAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEJsb2NrZWRGYWlsdXJlKTsKKyAgICBpZiAobV9zY2hl
ZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCisKICAgICBhdXRvIHJlcXVlc3QgPSByZXF1ZXN0V2l0aENyZWRlbnRpYWxzOwogICAgIGF1
dG8gdXJsID0gcmVxdWVzdC51cmwoKTsKICAgICBpZiAoc3RvcmVkQ3JlZGVudGlhbHMgPT0gV2Vi
Q29yZTo6QWxsb3dTdG9yZWRDcmVkZW50aWFscyAmJiB1cmwucHJvdG9jb2xJc0luSFRUUEZhbWls
eSgpKSB7CkBAIC0xMDMsMTQgKzg5LDE1IEBAIE5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFU
YXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmCiAgICAg
ICAgIG5zUmVxdWVzdCA9IG11dGFibGVSZXF1ZXN0OwogICAgIH0KIAorICAgIGF1dG8mIGNvY29h
U2Vzc2lvbiA9IHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uQ29jb2EmPihtX3Nlc3Npb24uZ2V0
KCkpOwogICAgIGlmIChzdG9yZWRDcmVkZW50aWFscyA9PSBXZWJDb3JlOjpBbGxvd1N0b3JlZENy
ZWRlbnRpYWxzKSB7Ci0gICAgICAgIG1fdGFzayA9IFttX3Nlc3Npb24tPm1fc2Vzc2lvbldpdGhD
cmVkZW50aWFsU3RvcmFnZSBkYXRhVGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07Ci0gICAgICAg
IEFTU0VSVCghbV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLmNvbnRhaW5z
KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSk7Ci0gICAgICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFz
a01hcFdpdGhDcmVkZW50aWFscy5hZGQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIHRoaXMpOwor
ICAgICAgICBtX3Rhc2sgPSBbY29jb2FTZXNzaW9uLm1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3Rv
cmFnZSBkYXRhVGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07CisgICAgICAgIEFTU0VSVCghY29j
b2FTZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMuY29udGFpbnMoW21fdGFzayB0
YXNrSWRlbnRpZmllcl0pKTsKKyAgICAgICAgY29jb2FTZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRo
Q3JlZGVudGlhbHMuYWRkKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlzKTsKICAgICB9IGVs
c2UgewotICAgICAgICBtX3Rhc2sgPSBbbV9zZXNzaW9uLT5tX3Nlc3Npb25XaXRob3V0Q3JlZGVu
dGlhbFN0b3JhZ2UgZGF0YVRhc2tXaXRoUmVxdWVzdDpuc1JlcXVlc3RdOwotICAgICAgICBBU1NF
UlQoIW1fc2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFscy5jb250YWlucyhb
bV90YXNrIHRhc2tJZGVudGlmaWVyXSkpOwotICAgICAgICBtX3Nlc3Npb24tPm1fZGF0YVRhc2tN
YXBXaXRob3V0Q3JlZGVudGlhbHMuYWRkKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlzKTsK
KyAgICAgICAgbV90YXNrID0gW2NvY29hU2Vzc2lvbi5tX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlh
bFN0b3JhZ2UgZGF0YVRhc2tXaXRoUmVxdWVzdDpuc1JlcXVlc3RdOworICAgICAgICBBU1NFUlQo
IWNvY29hU2Vzc2lvbi5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmNvbnRhaW5zKFtt
X3Rhc2sgdGFza0lkZW50aWZpZXJdKSk7CisgICAgICAgIGNvY29hU2Vzc2lvbi5tX2RhdGFUYXNr
TWFwV2l0aG91dENyZWRlbnRpYWxzLmFkZChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgdGhpcyk7
CiAgICAgfQogICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUgQ3JlYXRpbmcgTmV0d29ya0Rh
dGFUYXNrIHdpdGggVVJMICVzIiwgW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIG5zUmVxdWVzdC5V
UkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmluZyk7CiAKQEAgLTEyMSwyNyArMTA4LDI4IEBAIE5l
dHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBO
ZXR3b3JrRGF0YVRhc2tDbGllbnQmCiAjZW5kaWYKIH0KIAotTmV0d29ya0RhdGFUYXNrOjp+TmV0
d29ya0RhdGFUYXNrKCkKK05ldHdvcmtEYXRhVGFza0NvY29hOjp+TmV0d29ya0RhdGFUYXNrQ29j
b2EoKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fdGFzaykgewot
ICAgICAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFscyA9PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50
aWFsczo6QWxsb3dTdG9yZWRDcmVkZW50aWFscykgewotICAgICAgICAgICAgQVNTRVJUKG1fc2Vz
c2lvbi0+bV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFscy5nZXQoW21fdGFzayB0YXNrSWRlbnRp
Zmllcl0pID09IHRoaXMpOwotICAgICAgICAgICAgbV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0
aENyZWRlbnRpYWxzLnJlbW92ZShbbV90YXNrIHRhc2tJZGVudGlmaWVyXSk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aG91
dENyZWRlbnRpYWxzLmdldChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkgPT0gdGhpcyk7Ci0gICAg
ICAgICAgICBtX3Nlc3Npb24tPm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHMucmVtb3Zl
KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsKLSAgICAgICAgfQorICAgIGlmICghbV90YXNrKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBjb2NvYVNlc3Npb24gPSBzdGF0aWNfY2FzdDxO
ZXR3b3JrU2Vzc2lvbkNvY29hJj4obV9zZXNzaW9uLmdldCgpKTsKKyAgICBpZiAobV9zdG9yZWRD
cmVkZW50aWFscyA9PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsczo6QWxsb3dTdG9yZWRDcmVk
ZW50aWFscykgeworICAgICAgICBBU1NFUlQoY29jb2FTZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRo
Q3JlZGVudGlhbHMuZ2V0KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSA9PSB0aGlzKTsKKyAgICAg
ICAgY29jb2FTZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMucmVtb3ZlKFttX3Rh
c2sgdGFza0lkZW50aWZpZXJdKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoY29jb2FT
ZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHMuZ2V0KFttX3Rhc2sgdGFza0lk
ZW50aWZpZXJdKSA9PSB0aGlzKTsKKyAgICAgICAgY29jb2FTZXNzaW9uLm1fZGF0YVRhc2tNYXBX
aXRob3V0Q3JlZGVudGlhbHMucmVtb3ZlKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsKICAgICB9
CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRTZW5kRGF0YSh1aW50NjRfdCB0b3RhbEJ5
dGVzU2VudCwgdWludDY0X3QgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kKQordm9pZCBOZXR3b3Jr
RGF0YVRhc2tDb2NvYTo6ZGlkU2VuZERhdGEodWludDY0X3QgdG90YWxCeXRlc1NlbnQsIHVpbnQ2
NF90IHRvdGFsQnl0ZXNFeHBlY3RlZFRvU2VuZCkKIHsKICAgICBpZiAobV9jbGllbnQpCiAgICAg
ICAgIG1fY2xpZW50LT5kaWRTZW5kRGF0YSh0b3RhbEJ5dGVzU2VudCwgdG90YWxCeXRlc0V4cGVj
dGVkVG9TZW5kKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVDaGFsbGVu
Z2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgQ2hh
bGxlbmdlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgTmV0d29y
a0RhdGFUYXNrQ29jb2E6OmRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXIm
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICAvLyBQcm94eSBhdXRoZW50aWNhdGlvbiBpcyBo
YW5kbGVkIGJ5IENGTmV0d29yayBpbnRlcm5hbGx5LiBXZSBjYW4gZ2V0IGhlcmUgaWYgdGhlIHVz
ZXIgY2FuY2VscwogICAgIC8vIENGTmV0d29yayBhdXRoZW50aWNhdGlvbiBkaWFsb2csIGFuZCB3
ZSBzaG91bGRuJ3QgYXNrIHRoZSBjbGllbnQgdG8gZGlzcGxheSBhbm90aGVyIG9uZSBpbiB0aGF0
IGNhc2UuCkBAIC0xNjEsMTMgKzE0OSwxMyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVj
ZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZQogICAg
IH0KIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZENvbXBsZXRlV2l0aEVycm9yKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQordm9pZCBOZXR3b3JrRGF0YVRhc2tDb2Nv
YTo6ZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJy
b3IpCiB7CiAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVX
aXRoRXJyb3IoZXJyb3IpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSwgUmVzcG9uc2VDb21w
bGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3b3JrRGF0YVRhc2tD
b2NvYTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZXNw
b25zZSwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIGlmIChtX2NsaWVudCkKICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZU5l
dHdvcmtTZXNzaW9uKFdURk1vdmUocmVzcG9uc2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CkBAIC0xNzcsMTkgKzE2NSwxOSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSwgUgogICAgIH0K
IH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVEYXRhKFJlZjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+JiYgZGF0YSkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OmRpZFJlY2Vp
dmVEYXRhKFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgZGF0YSkKIHsKICAgICBpZiAobV9j
bGllbnQpCiAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShXVEZNb3ZlKGRhdGEpKTsK
IH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEJlY29tZURvd25sb2FkKCkKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrQ29jb2E6OmRpZEJlY29tZURvd25sb2FkKCkKIHsKICAgICBpZiAobV9jbGll
bnQpCiAgICAgICAgIG1fY2xpZW50LT5kaWRCZWNvbWVEb3dubG9hZCgpOwogfQogCi12b2lkIE5l
dHdvcmtEYXRhVGFzazo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYmIHJlZGlyZWN0UmVzcG9uc2UsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYm
IHJlcXVlc3QsIFJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZWRpcmVjdFJlc3BvbnNlLCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKHJlZGlyZWN0UmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUo
KSA9PSAzMDcgfHwgcmVkaXJlY3RSZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMwOCkgewog
ICAgICAgICBBU1NFUlQobV9sYXN0SFRUUE1ldGhvZCA9PSByZXF1ZXN0Lmh0dHBNZXRob2QoKSk7
CkBAIC0yNDAsNTEgKzIyOCwyMyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6d2lsbFBlcmZvcm1I
VFRQUmVkaXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlZAogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcih7IH0pOwogICAgIH0KIH0KLSAgICAKLXZvaWQgTmV0d29ya0RhdGFU
YXNrOjpzY2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5cGUgdHlwZSkKLXsKLSAgICBBU1NFUlQodHlw
ZSAhPSBOb0ZhaWx1cmUpOwotICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSB0eXBlOwotICAg
IG1fZmFpbHVyZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KIAotdm9pZCBOZXR3b3JrRGF0YVRh
c2s6OmZhaWx1cmVUaW1lckZpcmVkKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OnNldFBl
bmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFdURjo6U3RyaW5nJiBmaWxlbmFtZSwgY29uc3Qg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBib29sIGFs
bG93T3ZlcndyaXRlKQogewotICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3QodGhp
cyk7Ci0gICAgCi0gICAgc3dpdGNoIChtX3NjaGVkdWxlZEZhaWx1cmVUeXBlKSB7Ci0gICAgY2Fz
ZSBCbG9ja2VkRmFpbHVyZToKLSAgICAgICAgbV9zY2hlZHVsZWRGYWlsdXJlVHlwZSA9IE5vRmFp
bHVyZTsKLSAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgbV9jbGllbnQtPndhc0Js
b2NrZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW52YWxpZFVSTEZhaWx1cmU6Ci0g
ICAgICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBOb0ZhaWx1cmU7Ci0gICAgICAgIGlmICht
X2NsaWVudCkKLSAgICAgICAgICAgIG1fY2xpZW50LT5jYW5ub3RTaG93VVJMKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICBjYXNlIE5vRmFpbHVyZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0K
KyAgICBOZXR3b3JrRGF0YVRhc2s6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGZpbGVuYW1l
LCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSk7CiAKLXZvaWQgTmV0d29y
a0RhdGFUYXNrOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBXVEY6OlN0cmluZyYg
ZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lv
bkhhbmRsZSwgYm9vbCBhbGxvd092ZXJ3cml0ZSkKLXsKICAgICBBU1NFUlQoIW1fc2FuZGJveEV4
dGVuc2lvbik7CiAgICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlKHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogICAgIGlmIChtX3NhbmRib3hFeHRlbnNpb24p
CiAgICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbi0+Y29uc3VtZSgpOwogCi0gICAgbV9wZW5kaW5n
RG93bmxvYWRMb2NhdGlvbiA9IGZpbGVuYW1lOwotICAgIG1fdGFzay5nZXQoKS5fcGF0aFRvRG93
bmxvYWRUYXNrRmlsZSA9IGZpbGVuYW1lOworICAgIG1fdGFzay5nZXQoKS5fcGF0aFRvRG93bmxv
YWRUYXNrRmlsZSA9IG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb247CiAKLSAgICBpZiAoYWxsb3dP
dmVyd3JpdGUgJiYgV2ViQ29yZTo6ZmlsZUV4aXN0cyhmaWxlbmFtZSkpCisgICAgaWYgKGFsbG93
T3ZlcndyaXRlICYmIFdlYkNvcmU6OmZpbGVFeGlzdHMobV9wZW5kaW5nRG93bmxvYWRMb2NhdGlv
bikpCiAgICAgICAgIFdlYkNvcmU6OmRlbGV0ZUZpbGUoZmlsZW5hbWUpOwogfQogCi1ib29sIE5l
dHdvcmtEYXRhVGFzazo6dHJ5UGFzc3dvcmRCYXNlZEF1dGhlbnRpY2F0aW9uKGNvbnN0IFdlYkNv
cmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIGNvbnN0IENoYWxsZW5nZUNv
bXBsZXRpb25IYW5kbGVyJiBjb21wbGV0aW9uSGFuZGxlcikKK2Jvb2wgTmV0d29ya0RhdGFUYXNr
Q29jb2E6OnRyeVBhc3N3b3JkQmFzZWRBdXRoZW50aWNhdGlvbihjb25zdCBXZWJDb3JlOjpBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0aW9u
SGFuZGxlciYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFjaGFsbGVuZ2UucHJvdGVj
dGlvblNwYWNlKCkuaXNQYXNzd29yZEJhc2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTMyOSw3ICsyODksNyBAQCBib29sIE5ldHdvcmtEYXRhVGFzazo6dHJ5UGFzc3dvcmRCYXNlZEF1
dGhlbnRpY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnRyYW5zZmVyU2FuZGJveEV4dGVuc2lvblRv
RG93bmxvYWQoRG93bmxvYWQmIGRvd25sb2FkKQordm9pZCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6
dHJhbnNmZXJTYW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9hZChEb3dubG9hZCYgZG93bmxvYWQpCiB7
CiAgICAgZG93bmxvYWQuc2V0U2FuZGJveEV4dGVuc2lvbihXVEZNb3ZlKG1fc2FuZGJveEV4dGVu
c2lvbikpOwogfQpAQCAtMzU2LDcgKzMxNiw3IEBAIHN0YXRpYyBib29sIGNlcnRpZmljYXRlc01h
dGNoKFNlY1RydXN0UmVmIHRydXN0MSwgU2VjVHJ1c3RSZWYgdHJ1c3QyKQogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIE5ldHdvcmtEYXRhVGFzazo6YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRp
ZmljYXRlRm9ySG9zdChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hh
bGxlbmdlKQorYm9vbCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6YWxsb3dzU3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlKQogewogICAgIGNvbnN0IFN0cmluZyYgaG9zdCA9IGNoYWxsZW5nZS5wcm90ZWN0
aW9uU3BhY2UoKS5ob3N0KCk7CiAgICAgTlNBcnJheSAqY2VydGlmaWNhdGVzID0gW05TVVJMUmVx
dWVzdCBhbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0Omhvc3RdOwpAQCAtMzc0
LDM4ICszMzQsMzMgQEAgYm9vbCBOZXR3b3JrRGF0YVRhc2s6OmFsbG93c1NwZWNpZmljSFRUUFND
ZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ29yZTo6QXV0aGUKICAgICByZXR1cm4gY2VydGlm
aWNhdGVzTWF0Y2godHJ1c3QuZ2V0KCksIGNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKCkucHJvdGVjdGlvblNwYWNlLnNlcnZlclRydXN0KTsKIH0KIAotU3RyaW5nIE5ldHdv
cmtEYXRhVGFzazo6c3VnZ2VzdGVkRmlsZW5hbWUoKQorU3RyaW5nIE5ldHdvcmtEYXRhVGFza0Nv
Y29hOjpzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3N1Z2dlc3RlZEZp
bGVuYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1fc3VnZ2VzdGVkRmlsZW5hbWU7CiAg
ICAgcmV0dXJuIG1fdGFzay5nZXQoKS5yZXNwb25zZS5zdWdnZXN0ZWRGaWxlbmFtZTsKIH0KIAot
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OnNldFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYg
c3VnZ2VzdGVkTmFtZSkKLXsKLSAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkTmFt
ZTsKLX0KLQotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNhbmNlbCgpCit2b2lkIE5ldHdvcmtEYXRh
VGFza0NvY29hOjpjYW5jZWwoKQogewogICAgIFttX3Rhc2sgY2FuY2VsXTsKIH0KIAotdm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OnJlc3VtZSgpCit2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjpyZXN1
bWUoKQogewogICAgIGlmIChtX3NjaGVkdWxlZEZhaWx1cmVUeXBlICE9IE5vRmFpbHVyZSkKICAg
ICAgICAgbV9mYWlsdXJlVGltZXIuc3RhcnRPbmVTaG90KDApOwogICAgIFttX3Rhc2sgcmVzdW1l
XTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN1c3BlbmQoKQordm9pZCBOZXR3b3JrRGF0
YVRhc2tDb2NvYTo6c3VzcGVuZCgpCiB7CiAgICAgaWYgKG1fZmFpbHVyZVRpbWVyLmlzQWN0aXZl
KCkpCiAgICAgICAgIG1fZmFpbHVyZVRpbWVyLnN0b3AoKTsKICAgICBbbV90YXNrIHN1c3BlbmRd
OwogfQogCi1OZXR3b3JrRGF0YVRhc2s6OlN0YXRlIE5ldHdvcmtEYXRhVGFzazo6c3RhdGUoKSBj
b25zdAorTmV0d29ya0RhdGFUYXNrOjpTdGF0ZSBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6c3RhdGUo
KSBjb25zdAogewogICAgIHN3aXRjaCAoW21fdGFzayBzdGF0ZV0pIHsKICAgICBjYXNlIE5TVVJM
U2Vzc2lvblRhc2tTdGF0ZVJ1bm5pbmc6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQppbmRleCAxMmNiNDUx
Li5jZmMyMjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2Nv
YS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KQEAgLTI5LDcgKzI5LDcgQEAKICNpbXBv
cnQgIk5ldHdvcmtDYWNoZS5oIgogI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaCIKICNpbXBvcnQgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgotI2ltcG9ydCAiTmV0
d29ya1Nlc3Npb24uaCIKKyNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uQ29jb2EuaCIKICNpbXBvcnQg
IlNhbmRib3hFeHRlbnNpb24uaCIKICNpbXBvcnQgIlNlc3Npb25UcmFja2VyLmgiCiAjaW1wb3J0
IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgpAQCAtODUsMTEgKzg1LDExIEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0
d29ya1Byb2Nlc3NDCiAgICAgU2Vzc2lvblRyYWNrZXI6OnNldElkZW50aWZpZXJCYXNlKHBhcmFt
ZXRlcnMudWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcik7CiAKICNpZiBVU0UoTkVUV09SS19TRVNT
SU9OKQotICAgIE5ldHdvcmtTZXNzaW9uOjpzZXRTb3VyY2VBcHBsaWNhdGlvbkF1ZGl0VG9rZW5E
YXRhKHNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhKCkpOwotICAgIE5ldHdvcmtTZXNzaW9uOjpz
ZXRTb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIocGFyYW1ldGVycy5zb3VyY2VBcHBs
aWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOwotICAgIE5ldHdvcmtTZXNzaW9uOjpzZXRTb3VyY2VB
cHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIocGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlv
blNlY29uZGFyeUlkZW50aWZpZXIpOworICAgIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNldFNvdXJj
ZUFwcGxpY2F0aW9uQXVkaXRUb2tlbkRhdGEoc291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSk7
CisgICAgTmV0d29ya1Nlc3Npb25Db2NvYTo6c2V0U291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVu
dGlmaWVyKHBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKKyAg
ICBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50
aWZpZXIocGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIpOwog
I2lmIFBMQVRGT1JNKElPUykKLSAgICBOZXR3b3JrU2Vzc2lvbjo6c2V0Q1REYXRhQ29ubmVjdGlv
blNlcnZpY2VUeXBlKHBhcmFtZXRlcnMuY3REYXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlKTsKKyAg
ICBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRDVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUocGFy
YW1ldGVycy5jdERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUpOwogI2VuZGlmCiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nl
c3Npb25Db2NvYS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a1Nlc3Npb25Db2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YjJk
ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2Nv
YS9OZXR3b3JrU2Vzc2lvbkNvY29hLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKworT0JKQ19DTEFTUyBOU1VS
TFNlc3Npb247CitPQkpDX0NMQVNTIE5TT3BlcmF0aW9uUXVldWU7CitPQkpDX0NMQVNTIFdLTmV0
d29ya1Nlc3Npb25EZWxlZ2F0ZTsKKworI2luY2x1ZGUgIkRvd25sb2FkSUQuaCIKKyNpbmNsdWRl
ICJOZXR3b3JrRGF0YVRhc2tDb2NvYS5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5l
dHdvcmtTZXNzaW9uQ29jb2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya1Nlc3Npb24geworICAgIGZy
aWVuZCBjbGFzcyBOZXR3b3JrRGF0YVRhc2tDb2NvYTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PE5ldHdvcmtTZXNzaW9uPiBjcmVhdGUoV2ViQ29yZTo6U2Vzc2lvbklELCBDdXN0b21Qcm90b2Nv
bE1hbmFnZXIqKTsKKyAgICBzdGF0aWMgTmV0d29ya1Nlc3Npb24mIGRlZmF1bHRTZXNzaW9uKCk7
CisgICAgfk5ldHdvcmtTZXNzaW9uQ29jb2EoKTsKKworICAgIC8vIE11c3QgYmUgY2FsbGVkIGJl
Zm9yZSBhbnkgTmV0d29ya1Nlc3Npb24gaGFzIGJlZW4gY3JlYXRlZC4KKyAgICBzdGF0aWMgdm9p
ZCBzZXRDdXN0b21Qcm90b2NvbE1hbmFnZXIoQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKik7CisgICAg
c3RhdGljIHZvaWQgc2V0U291cmNlQXBwbGljYXRpb25BdWRpdFRva2VuRGF0YShSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvbkJ1bmRs
ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIHZvaWQgc2V0U291cmNlQXBw
bGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOworI2lmIFBMQVRGT1JN
KElPUykKKyAgICBzdGF0aWMgdm9pZCBzZXRDVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUoY29u
c3QgU3RyaW5nJik7CisjZW5kaWYKKworICAgIE5ldHdvcmtEYXRhVGFza0NvY29hKiBkYXRhVGFz
a0ZvcklkZW50aWZpZXIoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFscyk7CisKKyAgICB2b2lkIGFkZERvd25sb2FkSUQoTmV0d29y
a0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEKTsKKyAgICBEb3dubG9h
ZElEIGRvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyKTsKKyAg
ICBEb3dubG9hZElEIHRha2VEb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRl
bnRpZmllcik7CisKK3ByaXZhdGU6CisgICAgTmV0d29ya1Nlc3Npb25Db2NvYShXZWJDb3JlOjpT
ZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopOworCisgICAgdm9pZCBpbnZhbGlkYXRl
QW5kQ2FuY2VsKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhckNyZWRlbnRpYWxzKCkgb3ZlcnJp
ZGU7CisKKyAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmllciwg
TmV0d29ya0RhdGFUYXNrQ29jb2EqPiBtX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzOworICAg
IEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0
YVRhc2tDb2NvYSo+IG1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHM7CisgICAgSGFzaE1h
cDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQ+IG1fZG93
bmxvYWRNYXA7CisKKyAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX3Nlc3Npb25XaXRoQ3Jl
ZGVudGlhbFN0b3JhZ2U7CisgICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4g
bV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGU7CisgICAgUmV0YWluUHRyPE5T
VVJMU2Vzc2lvbj4gbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlOworICAgIFJldGFp
blB0cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFs
U3RvcmFnZURlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KaW5kZXggMDFmMmEzOS4u
YmE2OTcxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Nlc3Npb25Db2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAog
I2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJOZXR3b3JrU2Vzc2lvbi5oIgorI2ltcG9ydCAi
TmV0d29ya1Nlc3Npb25Db2NvYS5oIgogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKIApAQCAt
ODIsMTcgKzgyLDE3IEBAIHN0YXRpYyBOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRp
b24gdG9OU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpCiB9CiAKIEBpbnRlcmZhY2Ug
V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIDogTlNPYmplY3QgPE5TVVJMU2Vzc2lvbkRhdGFEZWxl
Z2F0ZT4gewotICAgIFJlZlB0cjxXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uPiBfc2Vzc2lvbjsKKyAg
ICBSZWZQdHI8V2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hPiBfc2Vzc2lvbjsKICAgICBib29s
IF93aXRoQ3JlZGVudGlhbHM7CiB9CiAKLS0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdl
YktpdDo6TmV0d29ya1Nlc3Npb24mKXNlc3Npb24gd2l0aENyZWRlbnRpYWxzOihib29sKXdpdGhD
cmVkZW50aWFsczsKKy0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdlYktpdDo6TmV0d29y
a1Nlc3Npb25Db2NvYSYpc2Vzc2lvbiB3aXRoQ3JlZGVudGlhbHM6KGJvb2wpd2l0aENyZWRlbnRp
YWxzOwogCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUK
IAotLSAoaWQpaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjooV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbiYp
c2Vzc2lvbiB3aXRoQ3JlZGVudGlhbHM6KGJvb2wpd2l0aENyZWRlbnRpYWxzCistIChpZClpbml0
V2l0aE5ldHdvcmtTZXNzaW9uOihXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2EmKXNlc3Npb24g
d2l0aENyZWRlbnRpYWxzOihib29sKXdpdGhDcmVkZW50aWFscwogewogICAgIHNlbGYgPSBbc3Vw
ZXIgaW5pdF07CiAgICAgaWYgKCFzZWxmKQpAQCAtMjk2LDcgKzI5Niw3IEBAIHN0YXRpYyBOU1VS
TFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gdG9OU1VSTFNlc3Npb25BdXRoQ2hhbGxl
bmdlRGlzcG9zaXRpCiB7CiAgICAgYXV0byBzdG9yZWRDcmVkZW50aWFscyA9IF93aXRoQ3JlZGVu
dGlhbHMgPyBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsczo6QWxsb3dTdG9yZWRDcmVkZW50aWFs
cyA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzOjpEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlh
bHM7CiAgICAgaWYgKGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IF9zZXNzaW9uLT5kYXRhVGFza0Zv
cklkZW50aWZpZXIoW2RhdGFUYXNrIHRhc2tJZGVudGlmaWVyXSwgc3RvcmVkQ3JlZGVudGlhbHMp
KSB7Ci0gICAgICAgIFJlZjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZE5ldHdvcmtEYXRhVGFz
aygqbmV0d29ya0RhdGFUYXNrKTsKKyAgICAgICAgUmVmPE5ldHdvcmtEYXRhVGFza0NvY29hPiBw
cm90ZWN0ZWROZXR3b3JrRGF0YVRhc2soKm5ldHdvcmtEYXRhVGFzayk7CiAgICAgICAgIGF1dG8g
ZG93bmxvYWRJRCA9IG5ldHdvcmtEYXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsKICAgICAg
ICAgYXV0byYgZG93bmxvYWRNYW5hZ2VyID0gV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2luZ2xl
dG9uKCkuZG93bmxvYWRNYW5hZ2VyKCk7CiAgICAgICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6Om1h
a2VfdW5pcXVlPFdlYktpdDo6RG93bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgZG93bmxvYWRJRCwg
ZG93bmxvYWRUYXNrLCBfc2Vzc2lvbi0+c2Vzc2lvbklEKCksIG5ldHdvcmtEYXRhVGFzay0+c3Vn
Z2VzdGVkRmlsZW5hbWUoKSk7CkBAIC0zMTQsMTQgKzMxNCwxMSBAQCBzdGF0aWMgTlNVUkxTZXNz
aW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uIHRvTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5nZURp
c3Bvc2l0aQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAKLXN0YXRpYyBOU1VSTFNlc3Npb25D
b25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uRm9yVHlwZShOZXR3b3JrU2Vzc2lvbjo6VHlwZSB0
eXBlKQorc3RhdGljIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb25Gb3JT
ZXNzaW9uSUQoY29uc3QgV2ViQ29yZTo6U2Vzc2lvbklEJiBzZXNzaW9uKQogewotICAgIHN3aXRj
aCAodHlwZSkgewotICAgIGNhc2UgTmV0d29ya1Nlc3Npb246OlR5cGU6Ok5vcm1hbDoKLSAgICAg
ICAgcmV0dXJuIFtOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uIGRlZmF1bHRTZXNzaW9uQ29uZmln
dXJhdGlvbl07Ci0gICAgY2FzZSBOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsOgorICAg
IGlmIChzZXNzaW9uLmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHJldHVybiBbTlNVUkxTZXNzaW9u
Q29uZmlndXJhdGlvbiBlcGhlbWVyYWxTZXNzaW9uQ29uZmlndXJhdGlvbl07Ci0gICAgfQorICAg
IHJldHVybiBbTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiBkZWZhdWx0U2Vzc2lvbkNvbmZpZ3Vy
YXRpb25dOwogfQogCiBzdGF0aWMgUmVmUHRyPEN1c3RvbVByb3RvY29sTWFuYWdlcj4mIGdsb2Jh
bEN1c3RvbVByb3RvY29sTWFuYWdlcigpCkBAIC0zNjAsNTIgKzM1Nyw1MiBAQCBzdGF0aWMgU3Ry
aW5nJiBnbG9iYWxDVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUoKQogc3RhdGljIGJvb2wgc2Vz
c2lvbnNDcmVhdGVkID0gZmFsc2U7CiAjZW5kaWYKIAotdm9pZCBOZXR3b3JrU2Vzc2lvbjo6c2V0
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKEN1c3RvbVByb3RvY29sTWFuYWdlciogY3VzdG9tUHJvdG9j
b2xNYW5hZ2VyKQordm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRDdXN0b21Qcm90b2NvbE1h
bmFnZXIoQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBjdXN0b21Qcm90b2NvbE1hbmFnZXIpCiB7CiAg
ICAgQVNTRVJUKCFzZXNzaW9uc0NyZWF0ZWQpOwogICAgIGdsb2JhbEN1c3RvbVByb3RvY29sTWFu
YWdlcigpID0gY3VzdG9tUHJvdG9jb2xNYW5hZ2VyOwogfQogICAgIAotdm9pZCBOZXR3b3JrU2Vz
c2lvbjo6c2V0U291cmNlQXBwbGljYXRpb25BdWRpdFRva2VuRGF0YShSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiYmIGRhdGEpCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNldFNvdXJjZUFwcGxpY2F0
aW9uQXVkaXRUb2tlbkRhdGEoUmV0YWluUHRyPENGRGF0YVJlZj4mJiBkYXRhKQogewogICAgIEFT
U0VSVCghc2Vzc2lvbnNDcmVhdGVkKTsKICAgICBnbG9iYWxTb3VyY2VBcHBsaWNhdGlvbkF1ZGl0
VG9rZW5EYXRhKCkgPSBkYXRhOwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uOjpzZXRTb3VyY2VB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQordm9p
ZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZp
ZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghc2Vzc2lvbnNDcmVh
dGVkKTsKICAgICBnbG9iYWxTb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKSA9IGlk
ZW50aWZpZXI7CiB9CiAKLXZvaWQgTmV0d29ya1Nlc3Npb246OnNldFNvdXJjZUFwcGxpY2F0aW9u
U2Vjb25kYXJ5SWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit2b2lkIE5ldHdv
cmtTZXNzaW9uQ29jb2E6OnNldFNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcihj
b25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFzZXNzaW9uc0NyZWF0ZWQp
OwogICAgIGdsb2JhbFNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigpID0gaWRl
bnRpZmllcjsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKLXZvaWQgTmV0d29ya1Nlc3Npb246OnNl
dENURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit2b2lkIE5l
dHdvcmtTZXNzaW9uQ29jb2E6OnNldENURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZShjb25zdCBT
dHJpbmcmIHR5cGUpCiB7CiAgICAgQVNTRVJUKCFzZXNzaW9uc0NyZWF0ZWQpOwogICAgIGdsb2Jh
bENURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZSgpID0gdHlwZTsKIH0KICNlbmRpZgogCi1SZWY8
TmV0d29ya1Nlc3Npb24+IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoVHlwZSB0eXBlLCBXZWJDb3Jl
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIqIGN1c3RvbVByb3Rv
Y29sTWFuYWdlcikKK1JlZjxOZXR3b3JrU2Vzc2lvbj4gTmV0d29ya1Nlc3Npb25Db2NvYTo6Y3Jl
YXRlKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciog
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdv
cmtTZXNzaW9uKHR5cGUsIHNlc3Npb25JRCwgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya1Nlc3Npb25Db2NvYShzZXNzaW9uSUQsIGN1c3Rv
bVByb3RvY29sTWFuYWdlcikpOwogfQogCi1OZXR3b3JrU2Vzc2lvbiYgTmV0d29ya1Nlc3Npb246
OmRlZmF1bHRTZXNzaW9uKCkKK05ldHdvcmtTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpk
ZWZhdWx0U2Vzc2lvbigpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBzdGF0
aWMgTmV0d29ya1Nlc3Npb24qIHNlc3Npb24gPSAmTmV0d29ya1Nlc3Npb246OmNyZWF0ZShOZXR3
b3JrU2Vzc2lvbjo6VHlwZTo6Tm9ybWFsLCBXZWJDb3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNz
aW9uSUQoKSwgZ2xvYmFsQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKCkuZ2V0KCkpLmxlYWtSZWYoKTsK
KyAgICBzdGF0aWMgTmV0d29ya1Nlc3Npb24qIHNlc3Npb24gPSAmTmV0d29ya1Nlc3Npb25Db2Nv
YTo6Y3JlYXRlKFdlYkNvcmU6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBnbG9iYWxD
dXN0b21Qcm90b2NvbE1hbmFnZXIoKS5nZXQoKSkubGVha1JlZigpOwogICAgIHJldHVybiAqc2Vz
c2lvbjsKIH0KIAotTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZSwgV2Vi
Q29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBjdXN0b21Q
cm90b2NvbE1hbmFnZXIpCi0gICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCitOZXR3b3JrU2Vz
c2lvbkNvY29hOjpOZXR3b3JrU2Vzc2lvbkNvY29hKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKQorICAgIDog
TmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKQogewogICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVu
dCgpOwogCkBAIC00MTMsNyArNDEwLDcgQEAgTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9u
KFR5cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHIKICAgICBz
ZXNzaW9uc0NyZWF0ZWQgPSB0cnVlOwogI2VuZGlmCiAKLSAgICBOU1VSTFNlc3Npb25Db25maWd1
cmF0aW9uICpjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbkZvclR5cGUodHlwZSk7CisgICAg
TlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25G
b3JTZXNzaW9uSUQobV9zZXNzaW9uSUQpOwogCiAgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xl
dG9uKCkuaXNFbmFibGVkKCkpCiAgICAgICAgIGNvbmZpZ3VyYXRpb24uVVJMQ2FjaGUgPSBuaWw7
CkBAIC00NDUsMTEgKzQ0Miw5IEBAIE5ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihUeXBl
IHR5cGUsIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByCiAjZW5kaWYKIAog
ICAgIGlmIChzZXNzaW9uSUQgPT0gV2ViQ29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCkpIHsKLSAgICAgICAgQVNTRVJUKHR5cGUgPT0gVHlwZTo6Tm9ybWFsKTsKICAgICAgICAgaWYg
KENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgc3RvcmFnZSA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY29va2llU3RvcmFnZSgpLmdldCgpKQog
ICAgICAgICAgICAgY29uZmlndXJhdGlvbi5IVFRQQ29va2llU3RvcmFnZSA9IFtbW05TSFRUUENv
b2tpZVN0b3JhZ2UgYWxsb2NdIF9pbml0V2l0aENGSFRUUENvb2tpZVN0b3JhZ2U6c3RvcmFnZV0g
YXV0b3JlbGVhc2VdOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVCh0eXBlID09IFR5cGU6
OkVwaGVtZXJhbCk7CiAgICAgICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdG9yYWdlU2Vzc2lvbik7CiAgICAgICAgIGlmIChDRkhUVFBDb29raWVT
dG9yYWdlUmVmIHN0b3JhZ2UgPSBzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFnZSgpLmdldCgp
KQpAQCAtNDY1LDI1ICs0NjAsMTggQEAgTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5
cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHIKICAgICBMT0co
TmV0d29ya1Nlc3Npb24sICJDcmVhdGVkIE5ldHdvcmtTZXNzaW9uIHdpdGggY29va2llQWNjZXB0
UG9saWN5ICVsdSIsIGNvbmZpZ3VyYXRpb24uSFRUUENvb2tpZVN0b3JhZ2UuY29va2llQWNjZXB0
UG9saWN5KTsKIH0KIAotTmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbigpCitOZXR3b3Jr
U2Vzc2lvbkNvY29hOjp+TmV0d29ya1Nlc3Npb25Db2NvYSgpCiB7CiB9CiAKLXZvaWQgTmV0d29y
a1Nlc3Npb246OmludmFsaWRhdGVBbmRDYW5jZWwoKQordm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29h
OjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKIHsKICAgICBbbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxT
dG9yYWdlIGludmFsaWRhdGVBbmRDYW5jZWxdOwogICAgIFttX3Nlc3Npb25XaXRob3V0Q3JlZGVu
dGlhbFN0b3JhZ2UgaW52YWxpZGF0ZUFuZENhbmNlbF07CiB9CiAKIAotV2ViQ29yZTo6TmV0d29y
a1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKLXsKLSAgICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAgIFJFTEVBU0VfQVNT
RVJUKHN0b3JhZ2VTZXNzaW9uKTsKLSAgICByZXR1cm4gKnN0b3JhZ2VTZXNzaW9uOwotfQotCi12
b2lkIE5ldHdvcmtTZXNzaW9uOjpjbGVhckNyZWRlbnRpYWxzKCkKK3ZvaWQgTmV0d29ya1Nlc3Np
b25Db2NvYTo6Y2xlYXJDcmVkZW50aWFscygpCiB7CiAjaWYgIVVTRShDUkVERU5USUFMX1NUT1JB
R0VfV0lUSF9ORVRXT1JLX1NFU1NJT04pCiAgICAgQVNTRVJUKG1fZGF0YVRhc2tNYXBXaXRoQ3Jl
ZGVudGlhbHMuaXNFbXB0eSgpKTsKQEAgLTQ5NSw3ICs0ODMsNyBAQCB2b2lkIE5ldHdvcmtTZXNz
aW9uOjpjbGVhckNyZWRlbnRpYWxzKCkKICNlbmRpZgogfQogCi1OZXR3b3JrRGF0YVRhc2sqIE5l
dHdvcmtTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIoTmV0d29ya0RhdGFUYXNrOjpUYXNr
SWRlbnRpZmllciB0YXNrSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgc3Rv
cmVkQ3JlZGVudGlhbHMpCitOZXR3b3JrRGF0YVRhc2tDb2NvYSogTmV0d29ya1Nlc3Npb25Db2Nv
YTo6ZGF0YVRhc2tGb3JJZGVudGlmaWVyKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRp
ZmllciB0YXNrSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3Jl
ZGVudGlhbHMpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAoc3RvcmVk
Q3JlZGVudGlhbHMgPT0gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHM6OkFsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMpCkBAIC01MDMsNyArNDkxLDcgQEAgTmV0d29ya0RhdGFUYXNrKiBOZXR3b3JrU2Vz
c2lvbjo6ZGF0YVRhc2tGb3JJZGVudGlmaWVyKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW4KICAg
ICByZXR1cm4gbV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFscy5nZXQodGFza0lkZW50aWZp
ZXIpOwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uOjphZGREb3dubG9hZElEKE5ldHdvcmtEYXRh
VGFzazo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQgZG93bmxvYWRJ
RCkKK3ZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6YWRkRG93bmxvYWRJRChOZXR3b3JrRGF0YVRh
c2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQgZG93bmxv
YWRJRCkKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgQVNTRVJUKCFtX2Rvd25sb2FkTWFwLmNvbnRh
aW5zKHRhc2tJZGVudGlmaWVyKSk7CkBAIC01MTMsMTMgKzUwMSwxMyBAQCB2b2lkIE5ldHdvcmtT
ZXNzaW9uOjphZGREb3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIgdGFz
a0lkZW50aWZpZQogICAgIG1fZG93bmxvYWRNYXAuYWRkKHRhc2tJZGVudGlmaWVyLCBkb3dubG9h
ZElEKTsKIH0KIAotRG93bmxvYWRJRCBOZXR3b3JrU2Vzc2lvbjo6ZG93bmxvYWRJRChOZXR3b3Jr
RGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyKQorRG93bmxvYWRJRCBOZXR3
b3JrU2Vzc2lvbkNvY29hOjpkb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRl
bnRpZmllciB0YXNrSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQobV9kb3dubG9hZE1hcC5nZXQo
dGFza0lkZW50aWZpZXIpLmRvd25sb2FkSUQoKSk7CiAgICAgcmV0dXJuIG1fZG93bmxvYWRNYXAu
Z2V0KHRhc2tJZGVudGlmaWVyKTsKIH0KIAotRG93bmxvYWRJRCBOZXR3b3JrU2Vzc2lvbjo6dGFr
ZURvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmll
cikKK0Rvd25sb2FkSUQgTmV0d29ya1Nlc3Npb25Db2NvYTo6dGFrZURvd25sb2FkSUQoTmV0d29y
a0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyKQogewogICAgIGF1
dG8gZG93bmxvYWRJRCA9IG1fZG93bmxvYWRNYXAudGFrZSh0YXNrSWRlbnRpZmllcik7CiAgICAg
cmV0dXJuIGRvd25sb2FkSUQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KaW5kZXggY2UwZjczZi4u
ODlhN2ViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1Jl
bW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtOTUsNyArOTUsNyBAQCB2b2lk
IFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNl
c3Npb25JRCBzZXNzaW9uSUQpCiAgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjplbnN1cmVQcml2
YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25JRCwgYmFzZSArICcuJyArIFN0cmluZzo6bnVtYmVy
KHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpOwogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLSAg
ICBhdXRvIG5ldHdvcmtTZXNzaW9uID0gTmV0d29ya1Nlc3Npb246OmNyZWF0ZShOZXR3b3JrU2Vz
c2lvbjo6VHlwZTo6RXBoZW1lcmFsLCBzZXNzaW9uSUQsIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0
b24oKS5zdXBwbGVtZW50PEN1c3RvbVByb3RvY29sTWFuYWdlcj4oKSk7CisgICAgYXV0byBuZXR3
b3JrU2Vzc2lvbiA9IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoc2Vzc2lvbklELCBOZXR3b3JrUHJv
Y2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCkpOwog
ICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgV1RGTW92ZShuZXR3b3Jr
U2Vzc2lvbikpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcAppbmRleCBlNjg3MmUzLi5j
Yzc2MTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtEYXRhVGFza1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCisjaW5jbHVk
ZSAiTmV0d29ya0RhdGFUYXNrU291cC5oIgogCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25NYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgpAQCAtMzIsNyArMzIsNyBAQAogI2lu
Y2x1ZGUgIkRvd25sb2FkU291cEVycm9ycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtMb2FkLmgiCiAj
aW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKLSNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgor
I2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uU291cC5oIgogI2luY2x1ZGUgIldlYkVycm9ycy5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0hUVFBQYXJzZXJzLmg+CkBAIC00NywzMCArNDcsMTQgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIHN0YXRpYyBjb25zdCBzaXplX3QgZ0RlZmF1bHRSZWFkQnVmZmVyU2l6ZSA9IDgxOTI7
CiAKLU5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNz
aW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50
aWFscywgQ29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91
bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQotICAgIDogbV9mYWlsdXJlVGlt
ZXIoKnRoaXMsICZOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKQotICAgICwgbV9z
ZXNzaW9uKCZzZXNzaW9uKQotICAgICwgbV9jbGllbnQoJmNsaWVudCkKLSAgICAsIG1fc3RvcmVk
Q3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVudGlhbHMpCi0gICAgLCBtX2xhc3RIVFRQTWV0aG9kKHJl
cXVlc3RXaXRoQ3JlZGVudGlhbHMuaHR0cE1ldGhvZCgpKQotICAgICwgbV9maXJzdFJlcXVlc3Qo
cmVxdWVzdFdpdGhDcmVkZW50aWFscykKLSAgICAsIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRU
UFNUb0hUVFBSZWRpcmVjdChzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0
KQorTmV0d29ya0RhdGFUYXNrU291cDo6TmV0d29ya0RhdGFUYXNrU291cChOZXR3b3JrU2Vzc2lv
biYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVk
Q3JlZGVudGlhbHMsIENvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJv
b2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKKyAgICA6IE5ldHdv
cmtEYXRhVGFzayhzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIHN0b3Jl
ZENyZWRlbnRpYWxzLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQog
ICAgICwgbV9zaG91bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNuaWZmKQotICAgICwgbV90
aW1lb3V0U291cmNlKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJk5ldHdvcmtEYXRhVGFzazo6dGlt
ZW91dEZpcmVkKQorICAgICwgbV90aW1lb3V0U291cmNlKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywg
Jk5ldHdvcmtEYXRhVGFza1NvdXA6OnRpbWVvdXRGaXJlZCkKIHsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotCi0gICAgbV9zZXNzaW9uLT5tX2RhdGFUYXNrU2V0LmFkZCh0aGlzKTsKLQot
ICAgIGlmICghcmVxdWVzdFdpdGhDcmVkZW50aWFscy51cmwoKS5pc1ZhbGlkKCkpIHsKLSAgICAg
ICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKKyAgICBzdGF0aWNfY2FzdDxO
ZXR3b3JrU2Vzc2lvblNvdXAmPihtX3Nlc3Npb24uZ2V0KCkpLnJlZ2lzdGVyTmV0d29ya0RhdGFU
YXNrKCp0aGlzKTsKKyAgICBpZiAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUp
CiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXBvcnRBbGxvd2VkKHJlcXVlc3RX
aXRoQ3JlZGVudGlhbHMudXJsKCkpKSB7Ci0gICAgICAgIHNjaGVkdWxlRmFpbHVyZShCbG9ja2Vk
RmFpbHVyZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBhdXRvIHJlcXVlc3QgPSBy
ZXF1ZXN0V2l0aENyZWRlbnRpYWxzOwogICAgIGlmIChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNJ
bkhUVFBGYW1pbHkoKSkgewpAQCAtOTMsNDQgKzc3LDEzIEBAIE5ldHdvcmtEYXRhVGFzazo6TmV0
d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGll
bnQmCiAgICAgY3JlYXRlUmVxdWVzdChyZXF1ZXN0KTsKIH0KIAotTmV0d29ya0RhdGFUYXNrOjp+
TmV0d29ya0RhdGFUYXNrKCkKK05ldHdvcmtEYXRhVGFza1NvdXA6On5OZXR3b3JrRGF0YVRhc2tT
b3VwKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9jbGll
bnQpOwogICAgIGNsZWFyUmVxdWVzdCgpOwotICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFza1NldC5y
ZW1vdmUodGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpzY2hlZHVsZUZhaWx1cmUo
RmFpbHVyZVR5cGUgdHlwZSkKLXsKLSAgICBBU1NFUlQodHlwZSAhPSBOb0ZhaWx1cmUpOwotICAg
IG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSB0eXBlOwotICAgIG1fZmFpbHVyZVRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKLX0KLQotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVk
KCkKLXsKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwot
Ci0gICAgc3dpdGNoIChtX3NjaGVkdWxlZEZhaWx1cmVUeXBlKSB7Ci0gICAgY2FzZSBCbG9ja2Vk
RmFpbHVyZToKLSAgICAgICAgbV9zY2hlZHVsZWRGYWlsdXJlVHlwZSA9IE5vRmFpbHVyZTsKLSAg
ICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgbV9jbGllbnQtPndhc0Jsb2NrZWQoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW52YWxpZFVSTEZhaWx1cmU6Ci0gICAgICAgIG1f
c2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBOb0ZhaWx1cmU7Ci0gICAgICAgIGlmIChtX2NsaWVudCkK
LSAgICAgICAgICAgIG1fY2xpZW50LT5jYW5ub3RTaG93VVJMKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIE5vRmFpbHVyZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBzdGF0aWNf
Y2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAmPihtX3Nlc3Npb24uZ2V0KCkpLnVucmVnaXN0ZXJOZXR3
b3JrRGF0YVRhc2soKnRoaXMpOwogfQogCi1TdHJpbmcgTmV0d29ya0RhdGFUYXNrOjpzdWdnZXN0
ZWRGaWxlbmFtZSgpCitTdHJpbmcgTmV0d29ya0RhdGFUYXNrU291cDo6c3VnZ2VzdGVkRmlsZW5h
bWUoKSBjb25zdAogewogICAgIGlmICghbV9zdWdnZXN0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBtX3N1Z2dlc3RlZEZpbGVuYW1lOwpAQCAtMTQyLDIzICs5NSwxMyBAQCBT
dHJpbmcgTmV0d29ya0RhdGFUYXNrOjpzdWdnZXN0ZWRGaWxlbmFtZSgpCiAgICAgcmV0dXJuIGRl
Y29kZVVSTEVzY2FwZVNlcXVlbmNlcyhtX3Jlc3BvbnNlLnVybCgpLmxhc3RQYXRoQ29tcG9uZW50
KCkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6c2V0U3VnZ2VzdGVkRmlsZW5hbWUoY29u
c3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzZXRQ
ZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGJvb2wgYWxsb3dP
dmVyd3JpdGUpCiB7Ci0gICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZE5hbWU7Ci19
Ci0KLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29s
IGFsbG93T3ZlcndyaXRlKQotewotICAgIG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBmaWxl
bmFtZTsKKyAgICBOZXR3b3JrRGF0YVRhc2s6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGZp
bGVuYW1lLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSk7CiAgICAgbV9h
bGxvd092ZXJ3cml0ZURvd25sb2FkID0gYWxsb3dPdmVyd3JpdGU7CiB9CiAKLWJvb2wgTmV0d29y
a0RhdGFUYXNrOjphbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
TmV0d29ya0RhdGFUYXNrOjpjcmVhdGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y3JlYXRlUmVxdWVzdChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiBzb3VwVVJJ
ID0gcmVxdWVzdC5jcmVhdGVTb3VwVVJJKCk7CiAgICAgaWYgKCFzb3VwVVJJKSB7CkBAIC0xNjYs
NyArMTA5LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZVJlcXVlc3QoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR1Jl
ZlB0cjxTb3VwUmVxdWVzdD4gc291cFJlcXVlc3QgPSBhZG9wdEdSZWYoc291cF9zZXNzaW9uX3Jl
cXVlc3RfdXJpKG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgc291cFVSSS5nZXQoKSwgbnVsbHB0
cikpOworICAgIEdSZWZQdHI8U291cFJlcXVlc3Q+IHNvdXBSZXF1ZXN0ID0gYWRvcHRHUmVmKHNv
dXBfc2Vzc2lvbl9yZXF1ZXN0X3VyaShzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAmPiht
X3Nlc3Npb24uZ2V0KCkpLnNvdXBTZXNzaW9uKCksIHNvdXBVUkkuZ2V0KCksIG51bGxwdHIpKTsK
ICAgICBpZiAoIXNvdXBSZXF1ZXN0KSB7CiAgICAgICAgIHNjaGVkdWxlRmFpbHVyZShJbnZhbGlk
VVJMRmFpbHVyZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTIxOCwxOSArMTYxLDE5IEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrOjpjcmVhdGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJub3RpZnk6
OnRscy1lcnJvcnMiLCBHX0NBTExCQUNLKHRsc0Vycm9yc0NoYW5nZWRDYWxsYmFjayksIHRoaXMp
OwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9zb3VwTWVzc2FnZS5nZXQoKSwgImdvdC1oZWFkZXJz
IiwgR19DQUxMQkFDSyhnb3RIZWFkZXJzQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJ3cm90ZS1ib2R5LWRhdGEiLCBHX0NBTExCQUNL
KHdyb3RlQm9keURhdGFDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9z
ZXNzaW9uLT5zb3VwU2Vzc2lvbigpLCAiYXV0aGVudGljYXRlIiwgIEdfQ0FMTEJBQ0soYXV0aGVu
dGljYXRlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHN0YXRpY19jYXN0
PE5ldHdvcmtTZXNzaW9uU291cCY+KG1fc2Vzc2lvbi5nZXQoKSkuc291cFNlc3Npb24oKSwgImF1
dGhlbnRpY2F0ZSIsICBHX0NBTExCQUNLKGF1dGhlbnRpY2F0ZUNhbGxiYWNrKSwgdGhpcyk7CiAj
aWYgRU5BQkxFKFdFQl9USU1JTkcpCiAgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdl
LmdldCgpLCAibmV0d29yay1ldmVudCIsIEdfQ0FMTEJBQ0sobmV0d29ya0V2ZW50Q2FsbGJhY2sp
LCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJyZXN0
YXJ0ZWQiLCBHX0NBTExCQUNLKHJlc3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CiAjaWYgU09VUF9D
SEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3Nh
Z2UuZ2V0KCksICJzdGFydGluZyIsIEdfQ0FMTEJBQ0soc3RhcnRpbmdDYWxsYmFjayksIHRoaXMp
OwogI2Vsc2UKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwg
InJlcXVlc3Qtc3RhcnRlZCIsIEdfQ0FMTEJBQ0socmVxdWVzdFN0YXJ0ZWRDYWxsYmFjayksIHRo
aXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3Vw
Jj4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpLCAicmVxdWVzdC1zdGFydGVkIiwgR19D
QUxMQkFDSyhyZXF1ZXN0U3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CiAjZW5kaWYKICNlbmRpZgog
fQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6Y2xlYXJSZXF1ZXN0KCkKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrU291cDo6Y2xlYXJSZXF1ZXN0KCkKIHsKICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6
Q29tcGxldGVkKQogICAgICAgICByZXR1cm47CkBAIC0yNDcsMTMgKzE5MCwxMyBAQCB2b2lkIE5l
dHdvcmtEYXRhVGFzazo6Y2xlYXJSZXF1ZXN0KCkKICAgICBtX2NhbmNlbGxhYmxlID0gbnVsbHB0
cjsKICAgICBpZiAobV9zb3VwTWVzc2FnZSkgewogICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X21hdGNoZWQobV9zb3VwTWVzc2FnZS5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFU
QSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7Ci0gICAgICAgIHNvdXBfc2Vzc2lvbl9j
YW5jZWxfbWVzc2FnZShtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0
KCksIFNPVVBfU1RBVFVTX0NBTkNFTExFRCk7CisgICAgICAgIHNvdXBfc2Vzc2lvbl9jYW5jZWxf
bWVzc2FnZShzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAmPihtX3Nlc3Npb24uZ2V0KCkp
LnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfU1RBVFVTX0NBTkNFTExF
RCk7CiAgICAgICAgIG1fc291cE1lc3NhZ2UgPSBudWxscHRyOwogICAgIH0KLSAgICBnX3NpZ25h
bF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9zZXNzaW9uLT5zb3VwU2Vzc2lvbigpLCBH
X1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKKyAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQoc3RhdGljX2Nhc3Q8TmV0d29ya1Nl
c3Npb25Tb3VwJj4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpLCBHX1NJR05BTF9NQVRD
SF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OnJlc3VtZSgpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlc3VtZSgpCiB7
CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlJ1bm5pbmcpOwogICAgIGlmIChtX3N0YXRl
ID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQpAQCAt
MjY4LDcgKzIxMSw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXN1bWUoKQogCiAgICAgc3Rh
cnRUaW1lb3V0KCk7CiAKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwogICAgIGlmIChtX3NvdXBSZXF1ZXN0ICYmICFtX2NhbmNlbGxhYmxlKSB7CiAgICAgICAg
IG1fY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7CiAgICAgICAg
IHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKG1fc291cFJlcXVlc3QuZ2V0KCksIG1fY2FuY2VsbGFi
bGUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oc2VuZFJlcXVl
c3RDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKQEAgLTI4OCw3ICsyMzEsNyBA
QCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVzdW1lKCkKICAgICB9CiB9CiAKLXZvaWQgTmV0d29y
a0RhdGFUYXNrOjpzdXNwZW5kKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c3VzcGVuZCgp
CiB7CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlN1c3BlbmRlZCk7CiAgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQp
CkBAIC0yOTgsNyArMjQxLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN1c3BlbmQoKQogICAg
IHN0b3BUaW1lb3V0KCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpjYW5jZWwoKQordm9p
ZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjYW5jZWwoKQogewogICAgIGlmIChtX3N0YXRlID09IFN0
YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQogICAgICAgICBy
ZXR1cm47CkBAIC0zMDYsNyArMjQ5LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNhbmNlbCgp
CiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDYW5jZWxpbmc7CiAKICAgICBpZiAobV9zb3VwTWVzc2Fn
ZSkKLSAgICAgICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlKG1fc2Vzc2lvbi0+c291cFNl
c3Npb24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSwgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKKyAg
ICAgICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlKHN0YXRpY19jYXN0PE5ldHdvcmtTZXNz
aW9uU291cCY+KG1fc2Vzc2lvbi5nZXQoKSkuc291cFNlc3Npb24oKSwgbV9zb3VwTWVzc2FnZS5n
ZXQoKSwgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKIAogICAgIGdfY2FuY2VsbGFibGVfY2FuY2Vs
KG1fY2FuY2VsbGFibGUuZ2V0KCkpOwogCkBAIC0zMTQsNDMgKzI1Nyw0MyBAQCB2b2lkIE5ldHdv
cmtEYXRhVGFzazo6Y2FuY2VsKCkKICAgICAgICAgY2xlYW5Eb3dubG9hZEZpbGVzKCk7CiB9CiAK
LXZvaWQgTmV0d29ya0RhdGFUYXNrOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKK3ZvaWQgTmV0d29y
a0RhdGFUYXNrU291cDo6aW52YWxpZGF0ZUFuZENhbmNlbCgpCiB7CiAgICAgY2FuY2VsKCk7CiAg
ICAgY2xlYXJSZXF1ZXN0KCk7CiB9CiAKLU5ldHdvcmtEYXRhVGFzazo6U3RhdGUgTmV0d29ya0Rh
dGFUYXNrOjpzdGF0ZSgpIGNvbnN0CitOZXR3b3JrRGF0YVRhc2s6OlN0YXRlIE5ldHdvcmtEYXRh
VGFza1NvdXA6OnN0YXRlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdGF0ZTsKIH0KIAotdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OnRpbWVvdXRGaXJlZCgpCit2b2lkIE5ldHdvcmtEYXRhVGFza1Nv
dXA6OnRpbWVvdXRGaXJlZCgpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGlu
ZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIW1fY2xpZW50KSB7CiAgICAgICAg
IGNsZWFyUmVxdWVzdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPE5l
dHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8TmV0d29ya0Rh
dGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBpbnZhbGlkYXRlQW5kQ2FuY2Vs
KCk7CiAgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKFJlc291cmNlRXJyb3I6OnRp
bWVvdXRFcnJvcihtX2ZpcnN0UmVxdWVzdC51cmwoKSkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRh
VGFzazo6c3RhcnRUaW1lb3V0KCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c3RhcnRUaW1l
b3V0KCkKIHsKICAgICBpZiAobV9maXJzdFJlcXVlc3QudGltZW91dEludGVydmFsKCkgPiAwKQog
ICAgICAgICBtX3RpbWVvdXRTb3VyY2Uuc3RhcnRPbmVTaG90KG1fZmlyc3RSZXF1ZXN0LnRpbWVv
dXRJbnRlcnZhbCgpKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN0b3BUaW1lb3V0KCkK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c3RvcFRpbWVvdXQoKQogewogICAgIG1fdGltZW91
dFNvdXJjZS5zdG9wKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZW5kUmVxdWVzdENh
bGxiYWNrKFNvdXBSZXF1ZXN0KiBzb3VwUmVxdWVzdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5l
dHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c2VuZFJlcXVl
c3RDYWxsYmFjayhTb3VwUmVxdWVzdCogc291cFJlcXVlc3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0
LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewotICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRh
c2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBSZWZQdHI8TmV0d29ya0Rh
dGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOwogICAgIGlmICh0YXNr
LT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6
Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewogICAgICAgICB0YXNrLT5jbGVhclJlcXVl
c3QoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzcxLDcgKzMxNCw3IEBAIHZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiBzb3VwUmVxdWVzdCwgR0Fz
eW5jUmVzdWx0CiAgICAgICAgIHRhc2stPmRpZFNlbmRSZXF1ZXN0KFdURk1vdmUoaW5wdXRTdHJl
YW0pKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFNlbmRSZXF1ZXN0KEdSZWZQdHI8
R0lucHV0U3RyZWFtPiYmIGlucHV0U3RyZWFtKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpk
aWRTZW5kUmVxdWVzdChHUmVmUHRyPEdJbnB1dFN0cmVhbT4mJiBpbnB1dFN0cmVhbSkKIHsKICAg
ICBpZiAobV9zb3VwTWVzc2FnZSkgewogICAgICAgICBpZiAobV9zaG91bGRDb250ZW50U25pZmYg
PT0gU25pZmZDb250ZW50ICYmIG1fc291cE1lc3NhZ2UtPnN0YXR1c19jb2RlICE9IFNPVVBfU1RB
VFVTX05PVF9NT0RJRklFRCkKQEAgLTQwNSw3ICszNDgsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFz
azo6ZGlkU2VuZFJlcXVlc3QoR1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYgaW5wdXRTdHJlYW0pCiAg
ICAgZGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRS
ZWNlaXZlUmVzcG9uc2UoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRSZWNlaXZlUmVz
cG9uc2UoKQogewogICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7CiAKQEAgLTQzNiw3
ICszNzksNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVjZWl2ZVJlc3BvbnNlKCkKICAg
ICB9KTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnRsc0Vycm9yc0NoYW5nZWRDYWxsYmFj
ayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIEdQYXJhbVNwZWMqLCBOZXR3b3JrRGF0YVRhc2sq
IHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnRsc0Vycm9yc0NoYW5nZWRDYWxsYmFj
ayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIEdQYXJhbVNwZWMqLCBOZXR3b3JrRGF0YVRhc2tT
b3VwKiB0YXNrKQogewogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcg
fHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkg
ewogICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKQEAgLTQ0NywyMCArMzkwLDIwIEBAIHZv
aWQgTmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2soU291cE1lc3NhZ2Uq
IHNvdXBNZXNzYWdlLCBHUGFyYW1TCiAgICAgdGFzay0+dGxzRXJyb3JzQ2hhbmdlZCgpOwogfQog
Ci12b2lkIE5ldHdvcmtEYXRhVGFzazo6dGxzRXJyb3JzQ2hhbmdlZCgpCit2b2lkIE5ldHdvcmtE
YXRhVGFza1NvdXA6OnRsc0Vycm9yc0NoYW5nZWQoKQogewogICAgIEFTU0VSVChtX3NvdXBSZXF1
ZXN0KTsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OmNoZWNrVExTRXJyb3JzKG1fc291cFJlcXVl
c3QuZ2V0KCksIG1fc291cE1lc3NhZ2UuZ2V0KCksIFt0aGlzXSAoY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IpIHsKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXModGhp
cyk7CisgICAgICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlzKHRo
aXMpOwogICAgICAgICBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CiAgICAgICAgIG1fY2xpZW50LT5k
aWRDb21wbGV0ZVdpdGhFcnJvcihlcnJvcik7CiAgICAgfSk7CiB9CiAKLXZvaWQgTmV0d29ya0Rh
dGFUYXNrOjphcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6YXBwbHlBdXRoZW50aWNhdGlvblRvUmVx
dWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgLy8gV2UgYWx3YXlzIHB1dCB0
aGUgY3JlZGVudGlhbHMgaW50byB0aGUgVVJMLiBJbiB0aGUgQ29jYSBwb3J0IEhUVFAgZmFtaWx5
IGNyZWRlbnRpYWxzIGFyZSBhcHBsaWVkIGluCiAgICAgLy8gdGhlIGRpZFJlY2VpdmVDaGFsbGVu
Z2UgY2FsbGJhY2ssIGJ1dCBsaWJzb3VwIHJlcXVpcmVzIHVzIHRvIHVzZSB0aGlzIG1ldGhvZCB0
byBvdmVycmlkZQpAQCAtNDgwLDkgKzQyMyw5IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjphcHBs
eUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKICAgICBy
ZXF1ZXN0LnNldFVSTCh1cmwpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGlj
YXRlQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2Fn
ZSwgU291cEF1dGgqIHNvdXBBdXRoLCBnYm9vbGVhbiByZXRyeWluZywgTmV0d29ya0RhdGFUYXNr
KiB0YXNrKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjphdXRoZW50aWNhdGVDYWxsYmFjayhT
b3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBTb3VwQXV0aCog
c291cEF1dGgsIGdib29sZWFuIHJldHJ5aW5nLCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQog
ewotICAgIEFTU0VSVChzZXNzaW9uID09IHRhc2stPm1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSk7
CisgICAgQVNTRVJUKHNlc3Npb24gPT0gdGFzay0+c3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25T
b3VwJj4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpKTsKICAgICBpZiAoc291cE1lc3Nh
Z2UgIT0gdGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00
OTksNyArNDQyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzQXV0aGVudGljYXRpb25GYWlsdXJl
U3RhdHVzQ29kZShpbnQgaHR0cFN0YXR1c0NvZGUpCiAgICAgcmV0dXJuIGh0dHBTdGF0dXNDb2Rl
ID09IFNPVVBfU1RBVFVTX1BST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEIHx8IGh0dHBTdGF0
dXNDb2RlID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRDsKIH0KIAotdm9pZCBOZXR3b3JrRGF0
YVRhc2s6OmF1dGhlbnRpY2F0ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGNoYWxsZW5nZSkK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6YXV0aGVudGljYXRlKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJiYgY2hhbGxlbmdlKQogewogICAgIEFTU0VSVChtX3NvdXBNZXNzYWdlKTsKICAgICBp
ZiAobV9zdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKSB7CkBAIC01
MjUsNyArNDY4LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmF1dGhlbnRpY2F0ZShBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYmIGNoYWxsZW5nZSkKICAgICAgICAgfQogICAgIH0KIAotICAgIHNv
dXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlKG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgbV9zb3Vw
TWVzc2FnZS5nZXQoKSk7CisgICAgc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2Uoc3RhdGljX2Nh
c3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpLCBt
X3NvdXBNZXNzYWdlLmdldCgpKTsKIAogICAgIC8vIFdlIGNvdWxkIGFsc28gZG8gdGhpcyBiZWZv
cmUgd2UgZXZlbiBzdGFydCB0aGUgcmVxdWVzdCwgYnV0IHRoYXQgd291bGQgYmUgYXQgdGhlIGV4
cGVuc2UKICAgICAvLyBvZiBhbGwgcmVxdWVzdCBsYXRlbmN5LCB2ZXJzdXMgYSBvbmUtdGltZSBs
YXRlbmN5IGZvciB0aGUgc21hbGwgc3Vic2V0IG9mIHJlcXVlc3RzIHRoYXQKQEAgLTU0Nyw3ICs0
OTAsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRlKEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiYgY2hhbGxlbmdlKQogICAgICAgICBjb250aW51ZUF1dGhlbnRpY2F0ZShXVEZN
b3ZlKGNoYWxsZW5nZSkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6Y29udGludWVBdXRo
ZW50aWNhdGUoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBjaGFsbGVuZ2UpCit2b2lkIE5ldHdv
cmtEYXRhVGFza1NvdXA6OmNvbnRpbnVlQXV0aGVudGljYXRlKEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiYgY2hhbGxlbmdlKQogewogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQ2hhbGxlbmdlKGNo
YWxsZW5nZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2hhbGxlbmdl
XShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uLCBjb25zdCBD
cmVkZW50aWFsJiBjcmVkZW50aWFsKSB7CiAgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpD
YW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKSB7CkBAIC01NzksMTMgKzUy
MiwxMyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y29udGludWVBdXRoZW50aWNhdGUoQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmJiBjaGFsbGVuZ2UpCiAgICAgICAgICAgICBzb3VwX2F1dGhfYXV0
aGVudGljYXRlKGNoYWxsZW5nZS5zb3VwQXV0aCgpLCBjcmVkZW50aWFsLnVzZXIoKS51dGY4KCku
ZGF0YSgpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIH0K
IAotICAgICAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKG1fc2Vzc2lvbi0+c291cFNl
c3Npb24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSk7CisgICAgICAgIHNvdXBfc2Vzc2lvbl91bnBh
dXNlX21lc3NhZ2Uoc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4obV9zZXNzaW9uLmdl
dCgpKS5zb3VwU2Vzc2lvbigpLCBtX3NvdXBNZXNzYWdlLmdldCgpKTsKICAgICB9KTsKIH0KIAot
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OnNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uQ2FsbGJh
Y2soR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdv
cmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c2tpcElucHV0U3Ry
ZWFtRm9yUmVkaXJlY3Rpb25DYWxsYmFjayhHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCBHQXN5
bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNrU291cCogdGFzaykKIHsKLSAgICBSZWZQ
dHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFzayk7CisgICAg
UmVmUHRyPE5ldHdvcmtEYXRhVGFza1NvdXA+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNr
KTsKICAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0
YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpIHsKICAgICAgICAg
dGFzay0+Y2xlYXJSZXF1ZXN0KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTYwMiwxNSArNTQ1LDE1
IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbkNh
bGxiYWNrKEdJbnB1dFN0cmVhbSogaW5wdXRTCiAgICAgICAgIHRhc2stPmRpZEZpbmlzaFNraXBJ
bnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpz
a2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6
OnNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCkKIHsKICAgICBBU1NFUlQobV9pbnB1dFN0
cmVhbSk7Ci0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAg
ICBnX2lucHV0X3N0cmVhbV9za2lwX2FzeW5jKG1faW5wdXRTdHJlYW0uZ2V0KCksIGdEZWZhdWx0
UmVhZEJ1ZmZlclNpemUsIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwK
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihza2lwSW5wdXRT
dHJlYW1Gb3JSZWRpcmVjdGlvbkNhbGxiYWNrKSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOwog
fQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoU2tpcElucHV0U3RyZWFtRm9yUmVk
aXJlY3Rpb24oKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRGaW5pc2hTa2lwSW5wdXRT
dHJlYW1Gb3JSZWRpcmVjdGlvbigpCiB7CiAgICAgZ19pbnB1dF9zdHJlYW1fY2xvc2UobV9pbnB1
dFN0cmVhbS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgY29udGludWVIVFRQUmVkaXJl
Y3Rpb24oKTsKQEAgLTYzNyw3ICs1ODAsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRSZWRpcmVjdEFz
R0VUKFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBib29sIGNyb3NzT3JpZ2luKQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBOZXR3b3JrRGF0YVRhc2s6OnNob3VsZFN0YXJ0SFRUUFJlZGlyZWN0
aW9uKCkKK2Jvb2wgTmV0d29ya0RhdGFUYXNrU291cDo6c2hvdWxkU3RhcnRIVFRQUmVkaXJlY3Rp
b24oKQogewogICAgIEFTU0VSVChtX3NvdXBNZXNzYWdlKTsKICAgICBBU1NFUlQoIW1fcmVzcG9u
c2UuaXNOdWxsKCkpOwpAQCAtNjU2LDcgKzU5OSw3IEBAIGJvb2wgTmV0d29ya0RhdGFUYXNrOjpz
aG91bGRTdGFydEhUVFBSZWRpcmVjdGlvbigpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
TmV0d29ya0RhdGFUYXNrOjpjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpCit2b2lkIE5ldHdvcmtE
YXRhVGFza1NvdXA6OmNvbnRpbnVlSFRUUFJlZGlyZWN0aW9uKCkKIHsKICAgICBBU1NFUlQobV9z
b3VwTWVzc2FnZSk7CiAgICAgQVNTRVJUKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKTsKQEAgLTcyNyw5
ICs2NzAsOSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y29udGludWVIVFRQUmVkaXJlY3Rpb24o
KQogICAgIH0pOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVhZENhbGxiYWNrKEdJbnB1
dFN0cmVhbSogaW5wdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0YVRh
c2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlYWRDYWxsYmFjayhHSW5wdXRT
dHJlYW0qIGlucHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNr
U291cCogdGFzaykKIHsKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlz
ID0gYWRvcHRSZWYodGFzayk7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFza1NvdXA+IHByb3Rl
Y3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKICAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0
ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAoIXRh
c2stPm1fY2xpZW50ICYmICF0YXNrLT5pc0Rvd25sb2FkKCkpKSB7CiAgICAgICAgIHRhc2stPmNs
ZWFyUmVxdWVzdCgpOwogICAgICAgICByZXR1cm47CkBAIC03NTIsMTYgKzY5NSwxNiBAQCB2b2lk
IE5ldHdvcmtEYXRhVGFzazo6cmVhZENhbGxiYWNrKEdJbnB1dFN0cmVhbSogaW5wdXRTdHJlYW0s
IEdBc3luY1Jlc3VsdCogcmVzdQogICAgICAgICB0YXNrLT5kaWRGaW5pc2hSZWFkKCk7CiB9CiAK
LXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZWFkKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6
cmVhZCgpCiB7Ci0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
ICAgICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7CiAgICAgbV9yZWFkQnVmZmVyLmdyb3coZ0RlZmF1
bHRSZWFkQnVmZmVyU2l6ZSk7CiAgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhtX2lucHV0
U3RyZWFtLmdldCgpLCBtX3JlYWRCdWZmZXIuZGF0YSgpLCBtX3JlYWRCdWZmZXIuc2l6ZSgpLCBH
X1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCiAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVhZENhbGxiYWNrKSwgcHJvdGVjdGVkVGhp
cy5sZWFrUmVmKCkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVhZChnc3NpemUg
Ynl0ZXNSZWFkKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRSZWFkKGdzc2l6ZSBieXRl
c1JlYWQpCiB7CiAgICAgbV9yZWFkQnVmZmVyLnNocmluayhieXRlc1JlYWQpOwogICAgIGlmICht
X2Rvd25sb2FkT3V0cHV0U3RyZWFtKSB7CkBAIC03NzQsNyArNzE3LDcgQEAgdm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OmRpZFJlYWQoZ3NzaXplIGJ5dGVzUmVhZCkKICAgICB9CiB9CiAKLXZvaWQgTmV0
d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hSZWFkKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6
ZGlkRmluaXNoUmVhZCgpCiB7CiAgICAgQVNTRVJUKG1faW5wdXRTdHJlYW0pOwogICAgIGdfaW5w
dXRfc3RyZWFtX2Nsb3NlKG1faW5wdXRTdHJlYW0uZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwpA
QCAtNzk0LDkgKzczNyw5IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hSZWFkKCkK
ICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoeyB9KTsKIH0KIAotdm9pZCBOZXR3
b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKFNvdXBNdWx0aXBhcnRJbnB1dFN0
cmVhbSogbXVsdGlwYXJ0SW5wdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3Jr
RGF0YVRhc2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlcXVlc3ROZXh0UGFy
dENhbGxiYWNrKFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbSogbXVsdGlwYXJ0SW5wdXRTdHJlYW0s
IEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewotICAg
IFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsK
KyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVm
KHRhc2spOwogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFz
ay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewogICAg
ICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODE5LDE2ICs3
NjIsMTYgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKFNv
dXBNdWx0aXBhcnRJbnB1dFN0cmVhbSogbXVsdGlwYXIKICAgICAgICAgdGFzay0+ZGlkRmluaXNo
UmVxdWVzdE5leHRQYXJ0KCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0TmV4
dFBhcnQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZXF1ZXN0TmV4dFBhcnQoKQogewot
ICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgUmVm
UHRyPE5ldHdvcmtEYXRhVGFza1NvdXA+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgQVNTRVJU
KG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0pOwogICAgIEFTU0VSVCghbV9pbnB1dFN0cmVhbSk7CiAg
ICAgc291cF9tdWx0aXBhcnRfaW5wdXRfc3RyZWFtX25leHRfcGFydF9hc3luYyhtX211bHRpcGFy
dElucHV0U3RyZWFtLmdldCgpLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0
KCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVxdWVz
dE5leHRQYXJ0Q2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CiB9CiAKLXZvaWQg
TmV0d29ya0RhdGFUYXNrOjpkaWRSZXF1ZXN0TmV4dFBhcnQoR1JlZlB0cjxHSW5wdXRTdHJlYW0+
JiYgaW5wdXRTdHJlYW0pCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFJlcXVlc3ROZXh0
UGFydChHUmVmUHRyPEdJbnB1dFN0cmVhbT4mJiBpbnB1dFN0cmVhbSkKIHsKICAgICBBU1NFUlQo
IW1faW5wdXRTdHJlYW0pOwogICAgIG1faW5wdXRTdHJlYW0gPSBXVEZNb3ZlKGlucHV0U3RyZWFt
KTsKQEAgLTgzOCw3ICs3ODEsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVxdWVzdE5l
eHRQYXJ0KEdSZWZQdHI8R0lucHV0U3RyZWFtPiYmIGlucHV0U3RyZWFtKQogICAgIGRpZFJlY2Vp
dmVSZXNwb25zZSgpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoUmVxdWVz
dE5leHRQYXJ0KCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkRmluaXNoUmVxdWVzdE5l
eHRQYXJ0KCkKIHsKICAgICBBU1NFUlQoIW1faW5wdXRTdHJlYW0pOwogICAgIEFTU0VSVChtX211
bHRpcGFydElucHV0U3RyZWFtKTsKQEAgLTg0Nyw3ICs3OTAsNyBAQCB2b2lkIE5ldHdvcmtEYXRh
VGFzazo6ZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KCkKICAgICBtX2NsaWVudC0+ZGlkQ29tcGxl
dGVXaXRoRXJyb3IoeyB9KTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmdvdEhlYWRlcnND
YWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFzayogdGFzaykK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Z290SGVhZGVyc0NhbGxiYWNrKFNvdXBNZXNzYWdl
KiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYXNrU291cCogdGFzaykKIHsKICAgICBpZiAodGFz
ay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6
OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpIHsKICAgICAgICAgdGFzay0+Y2xlYXJSZXF1
ZXN0KCk7CkBAIC04NTcsNyArODAwLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmdvdEhlYWRl
cnNDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGEKICAgICB0
YXNrLT5kaWRHZXRIZWFkZXJzKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRHZXRI
ZWFkZXJzKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkR2V0SGVhZGVycygpCiB7CiAg
ICAgLy8gV2UgYXJlIGEgYml0IG1vcmUgY29uc2VydmF0aXZlIHdpdGggdGhlIHBlcnNpc3RlbnQg
Y3JlZGVudGlhbCBzdG9yYWdlIHRoYW4gdGhlIHNlc3Npb24gc3RvcmUsCiAgICAgLy8gc2luY2Ug
d2UgYXJlIHdhaXRpbmcgdW50aWwgd2Uga25vdyB0aGF0IHRoaXMgYXV0aGVudGljYXRpb24gc3Vj
Y2VlZGVkIGJlZm9yZSBhY3R1YWxseSBzdG9yaW5nLgpAQCAtODcwLDcgKzgxMyw3IEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrOjpkaWRHZXRIZWFkZXJzKCkKICAgICB9CiB9CiAKLXZvaWQgTmV0d29y
a0RhdGFUYXNrOjp3cm90ZUJvZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdl
LCBTb3VwQnVmZmVyKiBidWZmZXIsIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29y
a0RhdGFUYXNrU291cDo6d3JvdGVCb2R5RGF0YUNhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVz
c2FnZSwgU291cEJ1ZmZlciogYnVmZmVyLCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewog
ICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUo
KSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewogICAgICAgICB0YXNr
LT5jbGVhclJlcXVlc3QoKTsKQEAgLTg4MCwxNCArODIzLDE0IEBAIHZvaWQgTmV0d29ya0RhdGFU
YXNrOjp3cm90ZUJvZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBTb3Vw
QnVmZmVyCiAgICAgdGFzay0+ZGlkV3JpdGVCb2R5RGF0YShidWZmZXItPmxlbmd0aCk7CiB9CiAK
LXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRXcml0ZUJvZHlEYXRhKHVpbnQ2NF90IGJ5dGVzU2Vu
dCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkV3JpdGVCb2R5RGF0YSh1aW50NjRfdCBi
eXRlc1NlbnQpCiB7Ci0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICBtX2JvZHlEYXRhVG90YWxCeXRlc1NlbnQgKz0gYnl0ZXNTZW50OwogICAgIG1fY2xp
ZW50LT5kaWRTZW5kRGF0YShtX2JvZHlEYXRhVG90YWxCeXRlc1NlbnQsIG1fc291cE1lc3NhZ2Ut
PnJlcXVlc3RfYm9keS0+bGVuZ3RoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRvd25s
b2FkKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZG93bmxvYWQoKQogewogICAgIEFTU0VS
VChpc0Rvd25sb2FkKCkpOwogICAgIEFTU0VSVChtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uKTsK
QEAgLTkzMSw5ICs4NzQsOSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZG93bmxvYWQoKQogICAg
IHJlYWQoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OndyaXRlRG93bmxvYWRDYWxsYmFj
ayhHT3V0cHV0U3RyZWFtKiBvdXRwdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3
b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OndyaXRlRG93bmxv
YWRDYWxsYmFjayhHT3V0cHV0U3RyZWFtKiBvdXRwdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVz
dWx0LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewotICAgIFJlZlB0cjxOZXR3b3JrRGF0
YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBSZWZQdHI8TmV0d29y
a0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOwogICAgIGlmICh0
YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0
ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5pc0Rvd25sb2FkKCkpIHsKICAgICAgICAgdGFzay0+Y2xl
YXJSZXF1ZXN0KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTk1NSw5ICs4OTgsOSBAQCB2b2lkIE5l
dHdvcmtEYXRhVGFzazo6d3JpdGVEb3dubG9hZENhbGxiYWNrKEdPdXRwdXRTdHJlYW0qIG91dHB1
dFN0cmVhbSwgR0FzeW5jUgogICAgICAgICB0YXNrLT5kaWRXcml0ZURvd25sb2FkKGJ5dGVzV3Jp
dHRlbik7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjp3cml0ZURvd25sb2FkKCkKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrU291cDo6d3JpdGVEb3dubG9hZCgpCiB7Ci0gICAgUmVmUHRyPE5ldHdv
cmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFU
YXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwg
NDQsIDApCiAgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FsbF9hc3luYyhtX2Rvd25sb2FkT3V0
cHV0U3RyZWFtLmdldCgpLCBtX3JlYWRCdWZmZXIuZGF0YSgpLCBtX3JlYWRCdWZmZXIuc2l6ZSgp
LCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCiAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4od3JpdGVEb3dubG9hZENhbGxiYWNrKSwg
cHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOwpAQCAtOTY2LDcgKzkwOSw3IEBAIHZvaWQgTmV0d29y
a0RhdGFUYXNrOjp3cml0ZURvd25sb2FkKCkKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5
bmNSZWFkeUNhbGxiYWNrPih3cml0ZURvd25sb2FkQ2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxl
YWtSZWYoKSkpOwogICAgIGdfdGFza19zZXRfdGFza19kYXRhKHdyaXRlVGFzay5nZXQoKSwgdGhp
cywgbnVsbHB0cik7CiAgICAgZ190YXNrX3J1bl9pbl90aHJlYWQod3JpdGVUYXNrLmdldCgpLCBb
XShHVGFzayogd3JpdGVUYXNrLCBncG9pbnRlciBzb3VyY2UsIGdwb2ludGVyIHVzZXJEYXRhLCBH
Q2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlKSB7Ci0gICAgICAgIGF1dG8qIHRhc2sgPSBzdGF0aWNf
Y2FzdDxOZXR3b3JrRGF0YVRhc2sqPih1c2VyRGF0YSk7CisgICAgICAgIGF1dG8qIHRhc2sgPSBz
dGF0aWNfY2FzdDxOZXR3b3JrRGF0YVRhc2tTb3VwKj4odXNlckRhdGEpOwogICAgICAgICBHT3V0
cHV0U3RyZWFtKiBvdXRwdXRTdHJlYW0gPSBHX09VVFBVVF9TVFJFQU0oc291cmNlKTsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodGFzay0+bV9kb3dubG9hZE91dHB1dFN0cmVhbS5nZXQoKSA9PSBv
dXRwdXRTdHJlYW0pOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YXNrLT5tX2NhbmNlbGxhYmxl
LmdldCgpID09IGNhbmNlbGxhYmxlKTsKQEAgLTk4NSw3ICs5MjgsNyBAQCB2b2lkIE5ldHdvcmtE
YXRhVGFzazo6d3JpdGVEb3dubG9hZCgpCiAjZW5kaWYKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRh
c2s6OmRpZFdyaXRlRG93bmxvYWQoZ3NpemUgYnl0ZXNXcml0dGVuKQordm9pZCBOZXR3b3JrRGF0
YVRhc2tTb3VwOjpkaWRXcml0ZURvd25sb2FkKGdzaXplIGJ5dGVzV3JpdHRlbikKIHsKICAgICBB
U1NFUlQoYnl0ZXNXcml0dGVuID09IG1fcmVhZEJ1ZmZlci5zaXplKCkpOwogICAgIGF1dG8qIGRv
d25sb2FkID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpLmRv
d25sb2FkKG1fcGVuZGluZ0Rvd25sb2FkSUQpOwpAQCAtOTk0LDcgKzkzNyw3IEBAIHZvaWQgTmV0
d29ya0RhdGFUYXNrOjpkaWRXcml0ZURvd25sb2FkKGdzaXplIGJ5dGVzV3JpdHRlbikKICAgICBy
ZWFkKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hEb3dubG9hZCgpCit2
b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZEZpbmlzaERvd25sb2FkKCkKIHsKICAgICBBU1NF
UlQoIW1fcmVzcG9uc2UuaXNOdWxsKCkpOwogICAgIEFTU0VSVChtX2Rvd25sb2FkT3V0cHV0U3Ry
ZWFtKTsKQEAgLTEwMjEsNyArOTY0LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlz
aERvd25sb2FkKCkKICAgICBkb3dubG9hZC0+ZGlkRmluaXNoKCk7CiB9CiAKLXZvaWQgTmV0d29y
a0RhdGFUYXNrOjpkaWRGYWlsRG93bmxvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit2
b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZEZhaWxEb3dubG9hZChjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcikKIHsKICAgICBjbGVhclJlcXVlc3QoKTsKICAgICBjbGVhbkRvd25sb2FkRmls
ZXMoKTsKQEAgLTEwMzQsNyArOTc3LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZhaWxE
b3dubG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICB9CiB9CiAKLXZvaWQgTmV0
d29ya0RhdGFUYXNrOjpjbGVhbkRvd25sb2FkRmlsZXMoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tT
b3VwOjpjbGVhbkRvd25sb2FkRmlsZXMoKQogewogICAgIGlmIChtX2Rvd25sb2FkRGVzdGluYXRp
b25GaWxlKSB7CiAgICAgICAgIGdfZmlsZV9kZWxldGUobV9kb3dubG9hZERlc3RpbmF0aW9uRmls
ZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CkBAIC0xMDQ2LDcgKzk4OSw3IEBAIHZvaWQgTmV0
d29ya0RhdGFUYXNrOjpjbGVhbkRvd25sb2FkRmlsZXMoKQogICAgIH0KIH0KIAotdm9pZCBOZXR3
b3JrRGF0YVRhc2s6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lkIE5l
dHdvcmtEYXRhVGFza1NvdXA6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7
CiAgICAgaWYgKGlzRG93bmxvYWQoKSkgewogICAgICAgICBkaWRGYWlsRG93bmxvYWQocGxhdGZv
cm1Eb3dubG9hZE5ldHdvcmtFcnJvcihlcnJvci5lcnJvckNvZGUoKSwgZXJyb3IuZmFpbGluZ1VS
TCgpLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpKSk7CkBAIC0xMDU5LDcgKzEwMDIsNyBA
QCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJv
cikKIH0KIAogI2lmIEVOQUJMRShXRUJfVElNSU5HKQotdm9pZCBOZXR3b3JrRGF0YVRhc2s6Om5l
dHdvcmtFdmVudENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgR1NvY2tldENsaWVu
dEV2ZW50IGV2ZW50LCBHSU9TdHJlYW0qLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5l
dHdvcmtEYXRhVGFza1NvdXA6Om5ldHdvcmtFdmVudENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3Vw
TWVzc2FnZSwgR1NvY2tldENsaWVudEV2ZW50IGV2ZW50LCBHSU9TdHJlYW0qLCBOZXR3b3JrRGF0
YVRhc2tTb3VwKiB0YXNrKQogewogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5j
ZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2Ns
aWVudCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA2OCw3ICsxMDExLDcgQEAgdm9pZCBOZXR3b3Jr
RGF0YVRhc2s6Om5ldHdvcmtFdmVudENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwg
R1NvY2tldENsaWUKICAgICB0YXNrLT5uZXR3b3JrRXZlbnQoZXZlbnQpOwogfQogCi12b2lkIE5l
dHdvcmtEYXRhVGFzazo6bmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCBldmVudCkKK3Zv
aWQgTmV0d29ya0RhdGFUYXNrU291cDo6bmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCBl
dmVudCkKIHsKICAgICBkb3VibGUgZGVsdGFUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lTVMoKSAtIG1fc3RhcnRUaW1lOwogICAgIGF1dG8mIGxvYWRUaW1pbmcgPSBtX3Jlc3BvbnNl
Lm5ldHdvcmtMb2FkVGltaW5nKCk7CkBAIC0xMTA1LDcgKzEwNDgsNyBAQCB2b2lkIE5ldHdvcmtE
YXRhVGFzazo6bmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCBldmVudCkKIH0KIAogI2lm
IFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA0OSwgOTEpCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6c3Rh
cnRpbmdDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFzayog
dGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c3RhcnRpbmdDYWxsYmFjayhTb3VwTWVz
c2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCiB7CiAgICAgaWYg
KHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0
YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KQogICAgICAgICByZXR1cm47CkBAIC0x
MTE0LDkgKzEwNTcsOSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6c3RhcnRpbmdDYWxsYmFjayhT
b3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFzawogICAgIHRhc2stPmRpZFN0
YXJ0UmVxdWVzdCgpOwogfQogI2Vsc2UKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0U3Rh
cnRlZENhbGxiYWNrKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogc291cE1lc3Nh
Z2UsIFNvdXBTb2NrZXQqLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRh
VGFza1NvdXA6OnJlcXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNv
dXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cFNvY2tldCosIE5ldHdvcmtEYXRhVGFza1NvdXAq
IHRhc2spCiB7Ci0gICAgQVNTRVJUKHNlc3Npb24gPT0gdGFzay0+bV9zZXNzaW9uLT5zb3VwU2Vz
c2lvbigpKTsKKyAgICBBU1NFUlQoc2Vzc2lvbiA9PSB0YXNrLT5zdGF0aWNfY2FzdDxOZXR3b3Jr
U2Vzc2lvblNvdXAmPihtX3Nlc3Npb24uZ2V0KCkpLnNvdXBTZXNzaW9uKCkpOwogICAgIGlmIChz
b3VwTWVzc2FnZSAhPSB0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpKQogICAgICAgICByZXR1cm47
CiAKQEAgLTExMjcsMTIgKzEwNzAsMTIgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3RT
dGFydGVkQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKgogfQogI2Vu
ZGlmCiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRTdGFydFJlcXVlc3QoKQordm9pZCBOZXR3
b3JrRGF0YVRhc2tTb3VwOjpkaWRTdGFydFJlcXVlc3QoKQogewogICAgIG1fcmVzcG9uc2UubmV0
d29ya0xvYWRUaW1pbmcoKS5yZXF1ZXN0U3RhcnQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Rp
bWVNUygpIC0gbV9zdGFydFRpbWU7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXN0YXJ0
ZWRDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFzayogdGFz
aykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6cmVzdGFydGVkQ2FsbGJhY2soU291cE1lc3Nh
Z2UqIHNvdXBNZXNzYWdlLCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewogICAgIC8vIENh
bGxlZCBlYWNoIHRpbWUgdGhlIG1lc3NhZ2UgaXMgZ29pbmcgdG8gYmUgc2VudCBhZ2FpbiBleGNl
cHQgdGhlIGZpcnN0IHRpbWUuCiAgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gbGlic291cCBoYW5k
bGVzIEhUVFAgYXV0aGVudGljYXRpb24uCkBAIC0xMTQzLDcgKzEwODYsNyBAQCB2b2lkIE5ldHdv
cmtEYXRhVGFzazo6cmVzdGFydGVkQ2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBO
ZXR3b3JrRGF0YVRhcwogICAgIHRhc2stPmRpZFJlc3RhcnQoKTsKIH0KIAotdm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OmRpZFJlc3RhcnQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRSZXN0
YXJ0KCkKIHsKICAgICBtX3N0YXJ0VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1T
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtEYXRhVGFza1NvdXAuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAv
TmV0d29ya0RhdGFUYXNrU291cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmM4ZmExYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaApAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUHJvdGVjdGlv
blNwYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5jbHVk
ZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrRGF0YVRhc2tTb3VwIGZpbmFsIDogcHVibGlj
IE5ldHdvcmtEYXRhVGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrRGF0YVRh
c2s+IGNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50
JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2ViQ29y
ZTo6U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRT
bmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJl
ck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IE5ldHdvcmtEYXRhVGFza1NvdXAoc2Vzc2lvbiwgY2xpZW50LCByZXF1ZXN0LCBzdG9yZWRD
cmVkZW50aWFscywgc2hvdWxkQ29udGVudFNuaWZmLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQ
U1RvSFRUUFJlZGlyZWN0KSk7CisgICAgfQorCisgICAgfk5ldHdvcmtEYXRhVGFza1NvdXAoKTsK
KworICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpOworCitwcml2YXRlOgorICAgIE5ldHdv
cmtEYXRhVGFza1NvdXAoTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFs
cywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5LCBib29sIHNob3VsZENsZWFyUmVmZXJy
ZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOworCisgICAgdm9pZCBzdXNwZW5kKCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc3VtZSgpIG92ZXJyaWRl
OworICAgIE5ldHdvcmtEYXRhVGFzazo6U3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3Qg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCAvKmFsbG93T3ZlcndyaXRlKi8pIG92ZXJy
aWRlOworICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgdm9pZCB0aW1lb3V0RmlyZWQoKTsKKyAgICB2b2lkIHN0YXJ0VGltZW91dCgpOworICAgIHZv
aWQgc3RvcFRpbWVvdXQoKTsKKworICAgIHZvaWQgY3JlYXRlUmVxdWVzdChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIGNsZWFyUmVxdWVzdCgpOworICAgIHN0YXRp
YyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soU291cFJlcXVlc3QqLCBHQXN5bmNSZXN1bHQqLCBO
ZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCBkaWRTZW5kUmVxdWVzdChHUmVmUHRyPEdJ
bnB1dFN0cmVhbT4mJik7CisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKKworICAgIHN0
YXRpYyB2b2lkIHRsc0Vycm9yc0NoYW5nZWRDYWxsYmFjayhTb3VwTWVzc2FnZSosIEdQYXJhbVNw
ZWMqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkKCk7
CisKKyAgICB2b2lkIGFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Jik7CisgICAgc3RhdGljIHZvaWQgYXV0aGVudGljYXRlQ2FsbGJhY2soU291cFNl
c3Npb24qLCBTb3VwTWVzc2FnZSosIFNvdXBBdXRoKiwgZ2Jvb2xlYW4gcmV0cnlpbmcsIE5ldHdv
cmtEYXRhVGFza1NvdXAqKTsKKyAgICB2b2lkIGF1dGhlbnRpY2F0ZShXZWJDb3JlOjpBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYmKTsKKyAgICB2b2lkIGNvbnRpbnVlQXV0aGVudGljYXRlKFdlYkNv
cmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYpOworCisgICAgc3RhdGljIHZvaWQgc2tpcElu
cHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25DYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5bmNSZXN1
bHQqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCBza2lwSW5wdXRTdHJlYW1Gb3JS
ZWRpcmVjdGlvbigpOworICAgIHZvaWQgZGlkRmluaXNoU2tpcElucHV0U3RyZWFtRm9yUmVkaXJl
Y3Rpb24oKTsKKyAgICBib29sIHNob3VsZFN0YXJ0SFRUUFJlZGlyZWN0aW9uKCk7CisgICAgdm9p
ZCBjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpOworCisgICAgc3RhdGljIHZvaWQgcmVhZENhbGxi
YWNrKEdJbnB1dFN0cmVhbSosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsK
KyAgICB2b2lkIHJlYWQoKTsKKyAgICB2b2lkIGRpZFJlYWQoZ3NzaXplIGJ5dGVzUmVhZCk7Cisg
ICAgdm9pZCBkaWRGaW5pc2hSZWFkKCk7CisKKyAgICBzdGF0aWMgdm9pZCByZXF1ZXN0TmV4dFBh
cnRDYWxsYmFjayhTb3VwTXVsdGlwYXJ0SW5wdXRTdHJlYW0qLCBHQXN5bmNSZXN1bHQqLCBOZXR3
b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCByZXF1ZXN0TmV4dFBhcnQoKTsKKyAgICB2b2lk
IGRpZFJlcXVlc3ROZXh0UGFydChHUmVmUHRyPEdJbnB1dFN0cmVhbT4mJik7CisgICAgdm9pZCBk
aWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQoKTsKKworICAgIHN0YXRpYyB2b2lkIGdvdEhlYWRlcnND
YWxsYmFjayhTb3VwTWVzc2FnZSosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKKyAgICB2b2lkIGRp
ZEdldEhlYWRlcnMoKTsKKworICAgIHN0YXRpYyB2b2lkIHdyb3RlQm9keURhdGFDYWxsYmFjayhT
b3VwTWVzc2FnZSosIFNvdXBCdWZmZXIqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9p
ZCBkaWRXcml0ZUJvZHlEYXRhKHVpbnQ2NF90IGJ5dGVzU2VudCk7CisKKyAgICB2b2lkIGRvd25s
b2FkKCk7CisgICAgc3RhdGljIHZvaWQgd3JpdGVEb3dubG9hZENhbGxiYWNrKEdPdXRwdXRTdHJl
YW0qLCBHQXN5bmNSZXN1bHQqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCB3cml0
ZURvd25sb2FkKCk7CisgICAgdm9pZCBkaWRXcml0ZURvd25sb2FkKGdzaXplIGJ5dGVzV3JpdHRl
bik7CisgICAgdm9pZCBkaWRGYWlsRG93bmxvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJv
ciYpOworICAgIHZvaWQgZGlkRmluaXNoRG93bmxvYWQoKTsKKyAgICB2b2lkIGNsZWFuRG93bmxv
YWRGaWxlcygpOworCisgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJy
b3ImKTsKKworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIHN0YXRpYyB2b2lkIG5ldHdvcmtF
dmVudENhbGxiYWNrKFNvdXBNZXNzYWdlKiwgR1NvY2tldENsaWVudEV2ZW50LCBHSU9TdHJlYW0q
LCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCBuZXR3b3JrRXZlbnQoR1NvY2tldENs
aWVudEV2ZW50KTsKKyNpZiBTT1VQX0NIRUNLX1ZFUlNJT04oMiwgNDksIDkxKQorICAgIHN0YXRp
YyB2b2lkIHN0YXJ0aW5nQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2tTb3Vw
Kik7CisjZWxzZQorICAgIHN0YXRpYyB2b2lkIHJlcXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNl
c3Npb24qLCBTb3VwTWVzc2FnZSosIFNvdXBTb2NrZXQqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7
CisjZW5kaWYKKyAgICB2b2lkIGRpZFN0YXJ0UmVxdWVzdCgpOworICAgIHN0YXRpYyB2b2lkIHJl
c3RhcnRlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrU291cCopOworICAg
IHZvaWQgZGlkUmVzdGFydCgpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5HKQorCisgICAg
U3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpTdXNwZW5kZWQgfTsKKyAgICBXZWJDb3JlOjpDb250ZW50
U25pZmZpbmdQb2xpY3kgbV9zaG91bGRDb250ZW50U25pZmY7CisgICAgR1JlZlB0cjxTb3VwUmVx
dWVzdD4gbV9zb3VwUmVxdWVzdDsKKyAgICBHUmVmUHRyPFNvdXBNZXNzYWdlPiBtX3NvdXBNZXNz
YWdlOworICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFtOworICAgIEdSZWZQ
dHI8U291cE11bHRpcGFydElucHV0U3RyZWFtPiBtX211bHRpcGFydElucHV0U3RyZWFtOworICAg
IEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOworICAgIEdSZWZQdHI8R0FzeW5j
UmVzdWx0PiBtX3BlbmRpbmdSZXN1bHQ7CisgICAgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNlIG1f
cHJvdGVjdGlvblNwYWNlRm9yUGVyc2lzdGVudFN0b3JhZ2U7CisgICAgV2ViQ29yZTo6Q3JlZGVu
dGlhbCBtX2NyZWRlbnRpYWxGb3JQZXJzaXN0ZW50U3RvcmFnZTsKKyAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CisgICAgVmVjdG9yPGNoYXI+IG1fcmVhZEJ1ZmZlcjsK
KyAgICB1bnNpZ25lZCBtX3JlZGlyZWN0Q291bnQgeyAwIH07CisgICAgdWludDY0X3QgbV9ib2R5
RGF0YVRvdGFsQnl0ZXNTZW50IHsgMCB9OworICAgIEdSZWZQdHI8R0ZpbGU+IG1fZG93bmxvYWRE
ZXN0aW5hdGlvbkZpbGU7CisgICAgR1JlZlB0cjxHRmlsZT4gbV9kb3dubG9hZEludGVybWVkaWF0
ZUZpbGU7CisgICAgR1JlZlB0cjxHT3V0cHV0U3RyZWFtPiBtX2Rvd25sb2FkT3V0cHV0U3RyZWFt
OworICAgIGJvb2wgbV9hbGxvd092ZXJ3cml0ZURvd25sb2FkIHsgZmFsc2UgfTsKKyNpZiBFTkFC
TEUoV0VCX1RJTUlORykKKyAgICBkb3VibGUgbV9zdGFydFRpbWUgeyAwIH07CisjZW5kaWYKKyAg
ICBSdW5Mb29wOjpUaW1lcjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBtX3RpbWVvdXRTb3VyY2U7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcAppbmRleCAzNGMyYzc3
Li5hYzgyODcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtTZXNzaW9uU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCkBAIC0yNCw4ICsyNCw5IEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVk
ZSAiTmV0d29ya1Nlc3Npb25Tb3VwLmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2tTb3Vw
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CkBAIC0zNCw0NyArMzUsMjQgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi1SZWY8TmV0d29ya1Nlc3Npb24+IE5ldHdvcmtTZXNzaW9uOjpjcmVh
dGUoVHlwZSB0eXBlLCBTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIq
KQorTmV0d29ya1Nlc3Npb25Tb3VwOjpOZXR3b3JrU2Vzc2lvblNvdXAoU2Vzc2lvbklEIHNlc3Np
b25JRCkKKyAgICA6IE5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBOZXR3b3JrU2Vzc2lvbih0eXBlLCBzZXNzaW9uSUQsIG51bGxwdHIpKTsKIH0K
IAotTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpCitOZXR3
b3JrU2Vzc2lvblNvdXA6On5OZXR3b3JrU2Vzc2lvblNvdXAoKQogewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uID0gJk5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Npb246OlR5cGU6Ok5vcm1hbCwgU2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCksIG51bGxwdHIpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4gKnNl
c3Npb247CiB9CiAKLU5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29ya1Nlc3Npb246Om5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgYXV0byogc3RvcmFnZVNlc3Npb24gPSBO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAgICBS
RUxFQVNFX0FTU0VSVChzdG9yYWdlU2Vzc2lvbik7Ci0gICAgcmV0dXJuICpzdG9yYWdlU2Vzc2lv
bjsKLX0KLQotTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZSwgU2Vzc2lv
bklEIHNlc3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKikKLSAgICA6IG1fc2Vzc2lvbklE
KHNlc3Npb25JRCkKLXsKLX0KLQotTmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbigpCi17
Ci19Ci0KLVNvdXBTZXNzaW9uKiBOZXR3b3JrU2Vzc2lvbjo6c291cFNlc3Npb24oKSBjb25zdAor
U291cFNlc3Npb24qIE5ldHdvcmtTZXNzaW9uU291cDo6c291cFNlc3Npb24oKSBjb25zdAogewog
ICAgIHJldHVybiBuZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5z
b3VwU2Vzc2lvbigpOwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uOjppbnZhbGlkYXRlQW5kQ2Fu
Y2VsKCkKK3ZvaWQgTmV0d29ya1Nlc3Npb25Tb3VwOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKIHsK
ICAgICBmb3IgKGF1dG8qIHRhc2sgOiBtX2RhdGFUYXNrU2V0KQogICAgICAgICB0YXNrLT5pbnZh
bGlkYXRlQW5kQ2FuY2VsKCk7CiB9CiAKLXZvaWQgTmV0d29ya1Nlc3Npb246OmNsZWFyQ3JlZGVu
dGlhbHMoKQotewotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NWZiODgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5o
CkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgor
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK3R5cGVkZWYgc3RydWN0IF9Tb3VwU2Vzc2lvbiBT
b3VwU2Vzc2lvbjsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtEYXRhVGFz
a1NvdXA7CisKK2NsYXNzIE5ldHdvcmtTZXNzaW9uU291cCBmaW5hbCA6IHB1YmxpYyBOZXR3b3Jr
U2Vzc2lvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrU2Vzc2lvbj4gY3JlYXRl
KFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBOZXR3b3JrU2Vzc2lvblNvdXAoc2Vzc2lvbklEKSk7CisgICAgfQorICAgIH5O
ZXR3b3JrU2Vzc2lvblNvdXAoKTsKKworICAgIFNvdXBTZXNzaW9uKiBzb3VwU2Vzc2lvbigpIGNv
bnN0OworCisgICAgdm9pZCByZWdpc3Rlck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tT
b3VwJiB0YXNrKSB7IG1fZGF0YVRhc2tTZXQuYWRkKCZ0YXNrKTsgfQorICAgIHZvaWQgdW5yZWdp
c3Rlck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tTb3VwJiB0YXNrKSB7IG1fZGF0YVRh
c2tTZXQucmVtb3ZlKCZ0YXNrKTsgfQorCitwcml2YXRlOgorICAgIE5ldHdvcmtTZXNzaW9uU291
cChXZWJDb3JlOjpTZXNzaW9uSUQpOworCisgICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkg
b3ZlcnJpZGU7CisKKyAgICBIYXNoU2V0PE5ldHdvcmtEYXRhVGFza1NvdXAqPiBtX2RhdGFUYXNr
U2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0U291cC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250
ZXh0U291cC5jcHAKaW5kZXggOGZiNjRmYS4uMmRiYTEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2lu
Z0NvbnRleHRTb3VwLmNwcApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIFJlbW90ZU5ldHdvcmtpbmdD
b250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZW5zdXJlUHJp
dmF0ZUJyb3dzaW5nU2Vzc2lvbihzZXNzaW9uSUQsIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5z
ZXNzaW9uSUQoKSkpOwotICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwg
TmV0d29ya1Nlc3Npb246OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsLCBz
ZXNzaW9uSUQsIG51bGxwdHIpKTsKKyAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNz
aW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoc2Vzc2lvbklEKSk7CiB9CiAKIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiYgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggYmFiZjJhNy4uN2Q5YTAzNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTI0OSw2ICsyNDksNyBAQCBsaXN0KEFQUEVORCBX
ZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1By
b2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9zb3VwIgogICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vz
cy9lZmwiCisgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL3NvdXAiCiAgICAgIiR7
V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL3VuaXgiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1Bs
YXRmb3JtL2VmbCIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0FQSS9jL2VmbCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNmZiZGEyMi4uNzU5NTlhMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1HVEsuY21ha2UKQEAgLTg0NSw2ICs4NDUsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX0lOQ0xV
REVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvQ3VzdG9t
UHJvdG9jb2xzL3NvdXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9zb3VwIgogICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9ndGsiCisgICAg
IiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL3NvdXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9
L05ldHdvcmtQcm9jZXNzL3VuaXgiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1BsYXRmb3JtL0lQQy9n
bGliIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvQVBJL2MvZ3RrIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE3ZWE2NzMu
LjU2YThiY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTEwMzksNiArMTAzOSwxMCBAQAogCQk1MkQ1QTFCMDFDNTc0OTVBMDBE
RTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi87IH07CiAJCTUyRDVBMUIxMUM1
NzQ5NjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQzFDNTc0OTRF
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovOyB9OwogCQk1
MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUI0MUM1
NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovOyB9OworCQk1
MzIxNTk1MzFEQkFFNzE4MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NTIxREJBRTZGQzAwNTRB
QTNDIC8qIE5ldHdvcmtTZXNzaW9uLmNwcCAqLzsgfTsKKwkJNTMyMTU5NTQxREJBRTcxRDAwNTRB
QTNDIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzIxNTk1MTFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya0RhdGFU
YXNrLmNwcCAqLzsgfTsKKwkJNTMyMTU5NTUxREJBRTcyOTAwNTRBQTNDIC8qIE5ldHdvcmtTZXNz
aW9uQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzMjE1OTUwMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggKi87IH07
CisJCTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NEYxREJB
RTZENzAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggKi87IH07CiAJCTVDMDUyRjI2
MUM2RDNCRDMwMDc2RTkxOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMDUyRjI0MUM2RDNBQjYw
MDc2RTkxOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSAqLzsgfTsKIAkJNUMxNDI2
RUMxQzIzRjgwOTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQyNkUy
MUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAg
Ki87IH07CiAJCTVDMTQyNkVEMUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUMxNDI2RTMxQzIzRjgwNTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmggKi87IH07CkBAIC0zMTE5LDYgKzMxMjMsMTAgQEAKIAkJNTJENUExQjIxQzU3
NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQ1QTFCMzFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUz
MjE1OTRGMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTMyMTU5NTAxREJBRTZENzAwNTRBQTNDIC8qIE5ldHdvcmtTZXNz
aW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Nlc3Np
b25Db2NvYS5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2Nv
YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzIxNTk1MTFEQkFFNkZDMDA1NEFB
M0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IE5ldHdvcmtEYXRhVGFzay5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
RGF0YVRhc2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzIxNTk1MjFEQkFF
NkZDMDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gTmV0d29ya1Nlc3Npb24uY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Nlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzlEMThC
NzFDQ0ZFMzRCMDBCMTk3NEMgLyogUGhvdG9zU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBob3Rvc1NQ
SS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzA1MkYyNDFDNkQzQUI2MDA3NkU5
MTkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbTsgcGF0aCA9
IEF1dGhlbnRpY2F0aW9uL2NvY29hL0F1dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzE0MjZFMjFDMjNGODA1MDBENDExODMgLyogTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOyBwYXRo
ID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQzNSw2ICs1NDQzLDcgQEAKIAkJCQk1MTNB
MTY0OTE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3Bw
ICovLAogCQkJCTUxM0ExNjRBMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oICovLAogCQkJCTUxM0ExNjRCMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLywKKwkJCQk1MzIxNTk1MTFEQkFF
NkZDMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLywKIAkJCQk1Q0JDOUI4OTFDNjUy
NEE1MDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmggKi8sCiAJCQkJODM5OTAxRkYxQkU5QTAx
QjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmNwcCAqLywKIAkJCQk4Mzk5MDFGRTFCRTlBMDFCMDAw
RjM2NTMgLyogTmV0d29ya0xvYWQuaCAqLywKQEAgLTU0NTMsNiArNTQ2Miw3IEBACiAJCQkJRTE1
MjU1MTcxNzAxMDlGQjAwM0Q3QURCIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5p
biAqLywKIAkJCQk1QzE0MjZFNTFDMjNGODA1MDBENDExODMgLyogTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMuY3BwICovLAogCQkJCTVDMTQyNkU2MUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oICovLAorCQkJCTUzMjE1OTUyMURCQUU2RkMwMDU0
QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgKi8sCiAJCQkJNUMyMENCOUUxQkIwREQxODAwODk1
QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmggKi8sCiAJCQkJNUNFODVCMUYxQzg4RTY0MzAwNzBCRkNF
IC8qIFBpbmdMb2FkLmggKi8sCiAJCQkJRTFCNzg0NzAxNjNGMjQ2OTAwMDdCNjkyIC8qIFJlbW90
ZU5ldHdvcmtpbmdDb250ZXh0LmggKi8sCkBAIC01ODQ1LDggKzU4NTUsMTAgQEAKIAkJN0VDNEYw
RjgxOEU0QTkyMjAwODA1NkFGIC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQk1MzIxNTk0RjFEQkFFNkQ3MDA1NEFBM0MgLyogTmV0d29ya0Rh
dGFUYXNrQ29jb2EuaCAqLywKIAkJCQk1Q0JDOUI4QjFDNjUyNTczMDBBOEZEQ0YgLyogTmV0d29y
a0RhdGFUYXNrQ29jb2EubW0gKi8sCiAJCQkJN0VDNEYwRjkxOEU0QTk0NTAwODA1NkFGIC8qIE5l
dHdvcmtQcm9jZXNzQ29jb2EubW0gKi8sCisJCQkJNTMyMTU5NTAxREJBRTZENzAwNTRBQTNDIC8q
IE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLywKIAkJCQk1QzIwQ0I5QjFCQjBEQ0QyMDA4OTVCQjEg
LyogTmV0d29ya1Nlc3Npb25Db2NvYS5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gY29jb2E7CkBA
IC04MTI0LDYgKzgxMzYsNyBAQAogCQkJCUJDN0I2MzNEMTJBNDVEMTIwMEQxNzRBNCAvKiBXS0J1
bmRsZVBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCNDc0RDgxODRENDNGRDAwNTFC
NjIyIC8qIFdLQnVuZGxlUGFnZUxvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRUQ4
MkE3RjIxMjhDNkZBRjAwNDQ3N0IzIC8qIFdLQnVuZGxlUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2Nv
YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCNDc0RUExODRENDUxMzAwNTFCNjIyIC8qIFdLQnVu
ZGxlUGFnZVBvbGljeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxQjQxOTgxMUQ0MUQ1
NzAwMTFFOEREIC8qIFdLQnVuZGxlUGFnZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
QjQ3NERBMTg0RDQ0MjUwMDUxQjYyMiAvKiBXS0J1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQu
aCBpbiBIZWFkZXJzICovLApAQCAtODE5Myw2ICs4MjA2LDcgQEAKIAkJCQlCQzU0Q0MxMjEyRDY3
NEVFMDA1QzY3QjAgLyogV0tHZW9sb2NhdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMDZGNDRFMTJEQkRGM0YwMDJENzhERSAvKiBXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMEU2MTk4MTJENkNEMTIwMDEyQTcyQSAvKiBXS0dl
b2xvY2F0aW9uUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMjE1OTU1MURCQUU3Mjkw
MDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNC
NEU0RjE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0M4QjM3NDEyNUZCNjkwMDBERTQ2QTQgLyogV0tHZW9tZXRyeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUE0MjJGOEIxOEIyOUI1NDAwRDhDRDk2IC8qIFdLSGlzdG9yeURl
bGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NjA3LDYgKzk2MjEsNyBAQAogCQkJ
CTJERkM3REJDMUJDQ0MxOTUwMEMxNTQ4QyAvKiBXZWJWaWV3SW1wbC5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUMwMzM3REQxMTI3QTI5ODAwMDhGRjRGNCAvKiBXZWJXaGVlbEV2ZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2ODE2MEQwMTg3NjQ1NTcwMDIxRTc5RCAvKiBXaW5kb3dTZXJ2ZXJD
b25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTMyMTU5NTMxREJBRTcxODAwNTRBQTND
IC8qIE5ldHdvcmtTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5Q0Q1NUFCMTI4RTI5
NEYwMDEzM0M4NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0QmFzZS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTI5MjMyREY4MThCMkE5QUUwMEQwNTk2RiAvKiBXS0FjY2Vzc2liaWxpdHlX
ZWJQYWdlT2JqZWN0SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjkyMzJERjkxOEIyQUIzQTAw
RDA1OTZGIC8qIFdLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0gaW4gU291cmNlcyAq
LywKQEAgLTk2MjUsNiArOTY0MCw3IEBACiAJCQkJQkNCQUFDRjUxNDUyMzI0RjAwNTNGODJGIC8q
IFdLQnJvd3NpbmdDb250ZXh0R3JvdXAubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUUwMEQ0QzE4
MkQ2RUIwMDAwODdERDcgLyogV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW0gaW4gU291cmNlcyAq
LywKIAkJCQlCQzIwNEVFRTExQzgzRUM4MDA4RjMzNzUgLyogV0tCdW5kbGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNTMyMTU5NTQxREJBRTcxRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFzay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzVFRUI5RTEyNzc2MUFDMDAzMzIyQjggLyogV0tCdW5k
bGVCYWNrRm9yd2FyZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1RUVCQTAxMjc3NjFB
QzAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MUZBMkQ3NzE1MjEyRTI2MDBDMUJBMEIgLyogV0tCdW5kbGVET01XaW5kb3dFeHRl
bnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dC5tbQppbmRleCAxY2MxNWM2Li41OWM2MDljIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0KQEAgLTYwLDcgKzYwLDcgQEAgdm9p
ZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9u
KFNlc3Npb25JRCBzZXNzaW9uSUQKIAogICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZW5zdXJl
UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihzZXNzaW9uSUQsIGJhc2UgKyAnLicgKyBTdHJpbmc6Om51
bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQot
ICAgIGF1dG8gbmV0d29ya1Nlc3Npb24gPSBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKE5ldHdvcmtT
ZXNzaW9uOjpUeXBlOjpFcGhlbWVyYWwsIHNlc3Npb25JRCwgbnVsbHB0cik7CisgICAgYXV0byBu
ZXR3b3JrU2Vzc2lvbiA9IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoc2Vzc2lvbklEKTsKICAgICBT
ZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIFdURk1vdmUobmV0d29ya1Nlc3Np
b24pKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQuY3BwCmluZGV4IDJmOTg3MWMuLmU2YjU2NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgdm9p
ZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9u
KFNlc3Npb25JRCBzZXNzaW9uSUQKICAgICAgICAgcmV0dXJuOwogCiAgICAgTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25JRCwgU3RyaW5n
OjpudW1iZXIoc2Vzc2lvbklELnNlc3Npb25JRCgpKSk7Ci0gICAgU2Vzc2lvblRyYWNrZXI6OnNl
dFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9u
OjpUeXBlOjpFcGhlbWVyYWwsIHNlc3Npb25JRCwgbnVsbHB0cikpOworICAgIFNlc3Npb25UcmFj
a2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShzZXNzaW9u
SUQpKTsKIH0KIAogdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVBY2Nl
cHRQb2xpY3lGb3JBbGxDb250ZXh0cyhIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292600</attachid>
            <date>2016-10-24 03:43:28 -0700</date>
            <delta_ts>2016-10-24 18:57:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-network-session-subclasses.diff</filename>
            <type>text/plain</type>
            <size>117420</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggMWFjMTA2Yy4uNmJkYTNiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTE4MiwxMCArMTgyLDEyIEBAIGVuZGlmICgpCiAKIHNldChOZXR3b3JrUHJvY2Vz
c19DT01NT05fU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAKICAg
ICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc1BsYXRmb3Jt
U3RyYXRlZ2llcy5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
Y3BwCisgICAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwCiAKICAgICBOZXR3b3Jr
UHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAy
YTI0ODZiLi5mMDBiMDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYwIEBACisyMDE2LTEwLTI0
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBO
ZXR3b3JrU2Vzc2lvbjogc3dpdGNoIHRvIHVzZSBzdWJjbGFzc2VzIGZvciBOZXR3b3JrU2Vzc2lv
biBhbmQgTmV0d29ya0RhdGFUYXNrIGltcGxlbWVudGF0aW9ucworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNzc3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIHN1YmNsYXNzIG1vZGVsIGFsbG93cyB1
cyB0byBjaG9vc2UgdGhlIGltcGxlbWVudGF0aW9uIGF0IHJ1biB0aW1lLCBzbyB3ZSBjb3VsZCBh
ZGQgb3RoZXIgaW1wbGVtZW50YXRpb25zCisgICAgICAgIGxpa2UgYSBtb2NrIG5ldHdvcmsgY2xh
c3MgdG8gbWVhc3VyZSBwZXJmb3JtYW5jZSwgYW5kIGV2ZW4gb25lIGZvciBibG9icyBhbmQgZmlu
YWxseSBnZXQgcmlkIG9mIFJlc291cmNlSGFuZGxlCisgICAgICAgIGluIFdlYktpdDIuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpjcmVhdGUpOiBDcmVhdGUgYSBOZXR3b3JrRGF0
YVRhc2tDb2NvYSBvciBOZXR3b3JrRGF0YVRhc2tTb3VwLgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFzayk6IE1vdmUgY29tbW9uIGNvZGUgZnJvbSBOZXR3
b3JrRGF0YVRhc2tDb2NvYSBhbmQgTmV0d29ya0RhdGFUYXNrU291cAorICAgICAgICBoZXJlIHRv
IGhhbmRsZSB0aGUgZWFybHkgZmFpbHVyZXMuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFzazo6fk5ldHdvcmtEYXRhVGFzayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFz
azo6c2NoZWR1bGVGYWlsdXJlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpm
YWlsdXJlVGltZXJGaXJlZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFU
YXNrLmg6IFJlbW92ZSBwbGF0Zm9ybSBzcGVjaWZpYyBtZW1iZXJzLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2s6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKTogTWFrZSBpdCB2
aXJ0dWFsIGFuZCBzZXQgdGhlIG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24uCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c3VnZ2VzdGVkRmlsZW5hbWUpOiBNYWtlIGl0IHZpcnR1
YWwgYW5kIGNvbnN0IHdpdGggYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2s6OnNldFN1Z2dlc3RlZEZpbGVuYW1lKTogRGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRpZmlj
YXRlRm9ySG9zdCk6IERpdHRvLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2Fk
LmNwcDogSW5jbHVkZSBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtMb2FkLmg6IEluY2x1ZGUgTmV0d29ya0RhdGFUYXNrLmggaW5zdGVhZCBv
ZiBOZXR3b3JrU2Vzc2lvbi5oLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6Ok5ldHdvcmtQcm9jZXNz
KTogVXNlIE5ldHdvcmtTZXNzaW9uQ29jb2EuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Nlc3Npb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRl
KTogQ3JlYXRlIGEgTmV0d29ya1Nlc3Npb25Db2NvYSBvciBOZXR3b3JrU2Vzc2lvblNvdXAuCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbik6IEluIGNhc2Ug
b2YgY29jb2EgdXNlIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmRlZmF1bHRTZXNzaW9uKCkgYmVjYXVz
ZSBvZgorICAgICAgICB0aGUgY3VzdG9tIHByb3RvY29sIG1hbmFnZXIsIG90aGVyd2lzZSBzaW1w
bHkgY3JlYXRlIGEgZGVmYXVsdCBzZXNzaW9uLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vz
c2lvbjo6bmV0d29ya1N0b3JhZ2VTZXNzaW9uKTogTW92ZSBjb21tb24gY29kZSBmcm9tIE5ldHdv
cmtTZXNzaW9uQ29jb2EgYW5kCisgICAgICAgIE5ldHdvcmtTZXNzaW9uU291cCBoZXJlLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6TmV0d29ya1Nlc3Npb24pOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6fk5ldHdvcmtTZXNzaW9uKToKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOiBSZW1vdmUgcGxhdGZvcm0gc3BlY2lmaWMgbWVt
YmVycy4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmludmFsaWRhdGVBbmRDYW5j
ZWwpOiBNYWtlIGl0IHZpcnR1YWwuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpj
bGVhckNyZWRlbnRpYWxzKTogRGl0dG8uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcDogSW5jbHVkZSBOZXR3b3JrU2Vzc2lvbi5o
LgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLmg6
IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0Nv
Y29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDb2NvYTo6TmV0d29ya0Rh
dGFUYXNrQ29jb2EpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDb2NvYTo6fk5l
dHdvcmtEYXRhVGFza0NvY29hKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ29j
b2E6OmRpZFNlbmREYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ29jb2E6
OmRpZFJlY2VpdmVDaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tD
b2NvYTo6ZGlkQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0
YVRhc2tDb2NvYTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0RhdGFUYXNrQ29jb2E6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0RhdGFUYXNrQ29jb2E6OmRpZEJlY29tZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0RhdGFUYXNrQ29jb2E6OndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ29jb2E6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ29jb2E6OnRyeVBhc3N3b3JkQmFz
ZWRBdXRoZW50aWNhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0NvY29h
Ojp0cmFuc2ZlclNhbmRib3hFeHRlbnNpb25Ub0Rvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrQ29jb2E6OmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhv
c3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDb2NvYTo6c3VnZ2VzdGVkRmls
ZW5hbWUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tDb2NvYTo6Y2FuY2VsKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrQ29jb2E6OnJlc3VtZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza0NvY29hOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrQ29jb2E6OnN0YXRlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYSk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tOgorICAg
ICAgICAoLVtXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGUgaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjp3
aXRoQ3JlZGVudGlhbHM6XSk6CisgICAgICAgICgtW1dLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZSBV
UkxTZXNzaW9uOmRhdGFUYXNrOmRpZEJlY29tZURvd25sb2FkVGFzazpdKToKKyAgICAgICAgKFdl
YktpdDo6Y29uZmlndXJhdGlvbkZvclNlc3Npb25JRCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtTZXNzaW9uQ29jb2E6OnNldEN1c3RvbVByb3RvY29sTWFuYWdlcik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OnNldFNvdXJjZUFwcGxpY2F0aW9uQXVkaXRUb2tlbkRh
dGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VBcHBs
aWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lv
bkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRDVERhdGFDb25uZWN0aW9uU2Vydmlj
ZVR5cGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpkZWZhdWx0U2Vzc2lvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6Ok5ldHdvcmtTZXNzaW9uQ29jb2Ep
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjp+TmV0d29ya1Nlc3Npb25D
b2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmludmFsaWRhdGVB
bmRDYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjpjbGVhckNy
ZWRlbnRpYWxzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6ZGF0YVRh
c2tGb3JJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6
YWRkRG93bmxvYWRJRCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6OmRv
d25sb2FkSUQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hOjp0YWtlRG93
bmxvYWRJRCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdD
b250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5z
dXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbik6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFU
YXNrU291cDo6TmV0d29ya0RhdGFUYXNrU291cCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtE
YXRhVGFza1NvdXA6On5OZXR3b3JrRGF0YVRhc2tTb3VwKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0RhdGFUYXNrU291cDo6c3VnZ2VzdGVkRmlsZW5hbWUpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2tTb3VwOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbik6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZVJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpjbGVhclJlcXVlc3QpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZXN1bWUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrRGF0YVRhc2tTb3VwOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFU
YXNrU291cDo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6
aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1Nv
dXA6OnN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6dGltZW91
dEZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6c3RhcnRUaW1l
b3V0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6c3RvcFRpbWVvdXQp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpzZW5kUmVxdWVzdENhbGxi
YWNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6ZGlkU2VuZFJlcXVl
c3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRSZWNlaXZlUmVz
cG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjp0bHNFcnJvcnND
aGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjp0
bHNFcnJvcnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6
YXBwbHlBdXRoZW50aWNhdGlvblRvUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtE
YXRhVGFza1NvdXA6OmF1dGhlbnRpY2F0ZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0RhdGFUYXNrU291cDo6YXV0aGVudGljYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0RhdGFUYXNrU291cDo6Y29udGludWVBdXRoZW50aWNhdGUpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2tTb3VwOjpza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbkNhbGxiYWNr
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6c2tpcElucHV0U3RyZWFt
Rm9yUmVkaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpk
aWRGaW5pc2hTa2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFza1NvdXA6OnNob3VsZFN0YXJ0SFRUUFJlZGlyZWN0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6Y29udGludWVIVFRQUmVkaXJlY3Rpb24p
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZWFkQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZWFkKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6ZGlkUmVhZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtEYXRhVGFza1NvdXA6OmRpZEZpbmlzaFJlYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrRGF0YVRhc2tTb3VwOjpyZXF1ZXN0TmV4dFBhcnRDYWxsYmFjayk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OnJlcXVlc3ROZXh0UGFydCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFJlcXVlc3ROZXh0UGFydCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZEZpbmlzaFJlcXVlc3ROZXh0UGFydCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmdvdEhlYWRlcnNDYWxsYmFjayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZEdldEhlYWRlcnMpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjp3cm90ZUJvZHlEYXRhQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRXcml0ZUJvZHlE
YXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6ZG93bmxvYWQpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjp3cml0ZURvd25sb2FkQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjp3cml0ZURvd25sb2Fk
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6ZGlkV3JpdGVEb3dubG9h
ZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZEZpbmlzaERvd25s
b2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6ZGlkRmFpbERvd25s
b2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6Y2xlYW5Eb3dubG9h
ZEZpbGVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6ZGlkRmFpbCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6Om5ldHdvcmtFdmVudENhbGxi
YWNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6bmV0d29ya0V2ZW50
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6c3RhcnRpbmdDYWxsYmFj
ayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OnJlcXVlc3RTdGFydGVk
Q2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRTdGFy
dFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZXN0YXJ0
ZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFJl
c3RhcnQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291
cC5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9u
U291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uU291cDo6TmV0d29ya1Nl
c3Npb25Tb3VwKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Tb3VwOjp+TmV0d29y
a1Nlc3Npb25Tb3VwKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Tb3VwOjpzb3Vw
U2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uU291cDo6aW52YWxpZGF0
ZUFuZENhbmNlbCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lv
blNvdXAuaDogQWRkZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3
b3JraW5nQ29udGV4dFNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5n
Q29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbik6IFVwZGF0ZSB0byBuZXcgTmV0
d29ya1Nlc3Npb246OmNyZWF0ZSgpIEFQSS4KKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZTog
QWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFr
ZTogRGl0dG8uCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBE
aXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5ldHdvcmtpbmdD
b250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKTogVXBkYXRlIHRvIG5ldyBOZXR3
b3JrU2Vzc2lvbjo6Y3JlYXRlKCkgQVBJLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lv
bik6IERpdHRvLgorCiAyMDE2LTEwLTIzICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9A
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBSZW1vdmUgRE8gTk9UIE1PRElGWSBoZWFkZXJz
IGZyb20gZmlsZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGF1dG9nZW5lcmF0ZWQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZGE0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwCkBAIC0wLDAgKzEs
MTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdv
cmtEYXRhVGFzay5oIgorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKworI2luY2x1ZGUgIk5l
dHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworI2lmIFBMQVRG
T1JNKENPQ09BKQorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCisjZW5kaWYKKyNp
ZiBVU0UoU09VUCkKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2tTb3VwLmgiCisjZW5kaWYKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWY8TmV0
d29ya0RhdGFUYXNrPiBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vz
c2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENvbnRlbnRT
bmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJl
ck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZXR1
cm4gTmV0d29ya0RhdGFUYXNrQ29jb2E6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3Qs
IHN0b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENsZWFyUmVmZXJy
ZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOworI2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAgcmV0
dXJuIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3Qs
IHN0b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3VsZENsZWFyUmVmZXJy
ZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOworI2VuZGlmCit9CisKK05ldHdvcmtEYXRhVGFzazo6
TmV0d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tD
bGllbnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRp
YWxzLCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgYm9vbCBzaG91bGRDbGVh
clJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQorICAgIDogbV9mYWlsdXJlVGltZXIoKnRo
aXMsICZOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKQorICAgICwgbV9zZXNzaW9u
KHNlc3Npb24pCisgICAgLCBtX2NsaWVudCgmY2xpZW50KQorICAgICwgbV9zdG9yZWRDcmVkZW50
aWFscyhzdG9yZWRDcmVkZW50aWFscykKKyAgICAsIG1fbGFzdEhUVFBNZXRob2QocmVxdWVzdFdp
dGhDcmVkZW50aWFscy5odHRwTWV0aG9kKCkpCisgICAgLCBtX2ZpcnN0UmVxdWVzdChyZXF1ZXN0
V2l0aENyZWRlbnRpYWxzKQorICAgICwgbV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRU
UFJlZGlyZWN0KHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghcmVxdWVzdFdpdGhDcmVkZW50
aWFscy51cmwoKS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRV
UkxGYWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcG9ydEFsbG93
ZWQocmVxdWVzdFdpdGhDcmVkZW50aWFscy51cmwoKSkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWls
dXJlKEJsb2NrZWRGYWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworTmV0d29y
a0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIEFTU0VSVCghbV9jbGllbnQpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6
c2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlIHR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUgIT0g
Tm9GYWlsdXJlKTsKKyAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gdHlwZTsKKyAgICBtX2Zh
aWx1cmVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpm
YWlsdXJlVGltZXJGaXJlZCgpCit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVj
dGVkVGhpcyh0aGlzKTsKKworICAgIHN3aXRjaCAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSkgewor
ICAgIGNhc2UgQmxvY2tlZEZhaWx1cmU6CisgICAgICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUg
PSBOb0ZhaWx1cmU7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50
LT53YXNCbG9ja2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludmFsaWRVUkxGYWls
dXJlOgorICAgICAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJlOworICAgICAg
ICBpZiAobV9jbGllbnQpCisgICAgICAgICAgICBtX2NsaWVudC0+Y2Fubm90U2hvd1VSTCgpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBOb0ZhaWx1cmU6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktf
U0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtEYXRhVGFzay5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFU
YXNrLmgKaW5kZXggYjYyNzU4Yi4uNGRjMTI5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKQEAgLTM2LDI1ICszNiwxMSBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5o
PgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKENPQ09BKQot
T0JKQ19DTEFTUyBOU1VSTFNlc3Npb25EYXRhVGFzazsKLSNlbmRpZgotCi0jaWYgVVNFKFNPVVAp
Ci0jaW5jbHVkZSA8V2ViQ29yZS9Qcm90ZWN0aW9uU3BhY2UuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlUmVzcG9uc2UuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUg
PHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLWNsYXNzIENyZWRlbnRpYWw7CiBjbGFzcyBSZXNv
dXJjZUVycm9yOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogY2xhc3MgUmVzb3VyY2VSZXNwb25z
ZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIH0KQEAgLTg2LDE2ICs3MiwxNCBAQCBwdWJsaWM6CiB9
OwogCiBjbGFzcyBOZXR3b3JrRGF0YVRhc2sgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrRGF0
YVRhc2s+IHsKLSAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nlc3Npb247CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxOZXR3b3JrRGF0YVRhc2s+IGNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lv
biwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVu
dGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYs
IGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFzayhzZXNzaW9uLCBjbGll
bnQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDb250ZW50U25pZmYsIHNob3Vs
ZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBzdXNwZW5kKCk7Ci0gICAgdm9pZCBjYW5jZWwoKTsKLSAgICB2b2lkIHJlc3VtZSgpOwor
ICAgIHN0YXRpYyBSZWY8TmV0d29ya0RhdGFUYXNrPiBjcmVhdGUoTmV0d29ya1Nlc3Npb24mLCBO
ZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBX
ZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5
LCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOworCisgICAg
dmlydHVhbCB+TmV0d29ya0RhdGFUYXNrKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBy
ZXN1bWUoKSA9IDA7CiAKICAgICBlbnVtIGNsYXNzIFN0YXRlIHsKICAgICAgICAgUnVubmluZywK
QEAgLTEwMywyNiArODcsMTEgQEAgcHVibGljOgogICAgICAgICBDYW5jZWxpbmcsCiAgICAgICAg
IENvbXBsZXRlZAogICAgIH07Ci0gICAgU3RhdGUgc3RhdGUoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFN0YXRlIHN0YXRlKCkgY29uc3QgPSAwOwogCi0gICAgdHlwZWRlZiB1aW50NjRfdCBUYXNrSWRl
bnRpZmllcjsKLSAgICAKLSAgICB+TmV0d29ya0RhdGFUYXNrKCk7Ci0KLSNpZiBQTEFURk9STShD
T0NPQSkKLSAgICB2b2lkIGRpZFNlbmREYXRhKHVpbnQ2NF90IHRvdGFsQnl0ZXNTZW50LCB1aW50
NjRfdCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQpOwotICAgIHZvaWQgZGlkUmVjZWl2ZUNoYWxs
ZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIENoYWxsZW5nZUNv
bXBsZXRpb25IYW5kbGVyJiYpOwotICAgIHZvaWQgZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciYmKTsK
LSAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYpOwot
ICAgIHZvaWQgZGlkQmVjb21lRG93bmxvYWQoKTsKLQotICAgIHZvaWQgd2lsbFBlcmZvcm1IVFRQ
UmVkaXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmJiwgUmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlciYmKTsKLSAgICB2b2lkIHRyYW5z
ZmVyU2FuZGJveEV4dGVuc2lvblRvRG93bmxvYWQoRG93bmxvYWQmKTsKLSNlbmRpZgogICAgIE5l
dHdvcmtEYXRhVGFza0NsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0K
ICAgICB2b2lkIGNsZWFyQ2xpZW50KCkgeyBtX2NsaWVudCA9IG51bGxwdHI7IH0KLSAgICAKKwog
ICAgIERvd25sb2FkSUQgcGVuZGluZ0Rvd25sb2FkSUQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRp
bmdEb3dubG9hZElEOyB9CiAgICAgUGVuZGluZ0Rvd25sb2FkKiBwZW5kaW5nRG93bmxvYWQoKSBj
b25zdCB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZDsgfQogICAgIHZvaWQgc2V0UGVuZGluZ0Rv
d25sb2FkSUQoRG93bmxvYWRJRCBkb3dubG9hZElEKQpAQCAtMTM2LDg3ICsxMDUsMzEgQEAgcHVi
bGljOgogICAgICAgICBBU1NFUlQoIW1fcGVuZGluZ0Rvd25sb2FkKTsKICAgICAgICAgbV9wZW5k
aW5nRG93bmxvYWQgPSAmcGVuZGluZ0Rvd25sb2FkOwogICAgIH0KLSAgICB2b2lkIHNldFBlbmRp
bmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSYsIGJvb2wgYWxsb3dPdmVyd3JpdGUpOworCisgICAgdmlydHVhbCB2
b2lkIHNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNv
bnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgLyphbGxvd092ZXJ3cml0ZSovKSB7
IG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBmaWxlbmFtZTsgfQogICAgIGNvbnN0IFN0cmlu
ZyYgcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdEb3du
bG9hZExvY2F0aW9uOyB9CiAgICAgYm9vbCBpc0Rvd25sb2FkKCkgY29uc3QgeyByZXR1cm4gISFt
X3BlbmRpbmdEb3dubG9hZElELmRvd25sb2FkSUQoKTsgfQogCiAgICAgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiBmaXJzdFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0UmVx
dWVzdDsgfQotICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpOwotICAgIHZvaWQgc2V0U3Vn
Z2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBhbGxvd3NTcGVjaWZpY0hU
VFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJik7Ci0gICAgCi1wcml2YXRlOgotICAgIE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lv
biYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQ
b2xpY3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7Cisg
ICAgdmlydHVhbCBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUoKSBjb25zdCB7IHJldHVybiBTdHJp
bmcoKTsgfQorICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBzdWdn
ZXN0ZWROYW1lKSB7IG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWROYW1lOyB9CisgICAg
dmlydHVhbCBib29sIGFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3Qg
V2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IHJldHVybiBmYWxzZTsgfQogCi0g
ICAgYm9vbCB0cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYp
OworcHJvdGVjdGVkOgorICAgIE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYsIE5ldHdv
cmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNv
cmU6OlN0b3JlZENyZWRlbnRpYWxzLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9I
VFRQUmVkaXJlY3QpOwogCi0jaWYgVVNFKFNPVVApCi0gICAgdm9pZCB0aW1lb3V0RmlyZWQoKTsK
LSAgICB2b2lkIHN0YXJ0VGltZW91dCgpOwotICAgIHZvaWQgc3RvcFRpbWVvdXQoKTsKLSAgICB2
b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKTsKLSAgICB2b2lkIGNyZWF0ZVJlcXVlc3QoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBjbGVhclJlcXVlc3QoKTsKLSAg
ICBzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiwgR0FzeW5jUmVz
dWx0KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCBkaWRTZW5kUmVxdWVzdChHUmVmUHRy
PEdJbnB1dFN0cmVhbT4mJik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKLSAgICBz
dGF0aWMgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBHUGFyYW1T
cGVjKiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkKCk7Ci0g
ICAgdm9pZCBhcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYpOwotICAgIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZUNhbGxiYWNrKFNvdXBTZXNzaW9u
KiwgU291cE1lc3NhZ2UqLCBTb3VwQXV0aCosIGdib29sZWFuIHJldHJ5aW5nLCBOZXR3b3JrRGF0
YVRhc2sqKTsKLSAgICB2b2lkIGF1dGhlbnRpY2F0ZShXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYmKTsKLSAgICB2b2lkIGNvbnRpbnVlQXV0aGVudGljYXRlKFdlYkNvcmU6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJiYpOwotICAgIHN0YXRpYyB2b2lkIHNraXBJbnB1dFN0cmVhbUZv
clJlZGlyZWN0aW9uQ2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29y
a0RhdGFUYXNrKik7Ci0gICAgdm9pZCBza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOwot
ICAgIHZvaWQgZGlkRmluaXNoU2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKLSAgICBi
b29sIHNob3VsZFN0YXJ0SFRUUFJlZGlyZWN0aW9uKCk7Ci0gICAgdm9pZCBjb250aW51ZUhUVFBS
ZWRpcmVjdGlvbigpOwotICAgIHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHSW5wdXRTdHJlYW0q
LCBHQXN5bmNSZXN1bHQqLCBOZXR3b3JrRGF0YVRhc2sqKTsKLSAgICB2b2lkIHJlYWQoKTsKLSAg
ICB2b2lkIGRpZFJlYWQoZ3NzaXplIGJ5dGVzUmVhZCk7Ci0gICAgdm9pZCBkaWRGaW5pc2hSZWFk
KCk7Ci0gICAgc3RhdGljIHZvaWQgcmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2soU291cE11bHRpcGFy
dElucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0gICAgdm9p
ZCByZXF1ZXN0TmV4dFBhcnQoKTsKLSAgICB2b2lkIGRpZFJlcXVlc3ROZXh0UGFydChHUmVmUHRy
PEdJbnB1dFN0cmVhbT4mJik7Ci0gICAgdm9pZCBkaWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQoKTsK
LSAgICBzdGF0aWMgdm9pZCBnb3RIZWFkZXJzQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3Jr
RGF0YVRhc2sqKTsKLSAgICB2b2lkIGRpZEdldEhlYWRlcnMoKTsKLSAgICBzdGF0aWMgdm9pZCB3
cm90ZUJvZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBTb3VwQnVmZmVyKiwgTmV0d29ya0Rh
dGFUYXNrKik7Ci0gICAgdm9pZCBkaWRXcml0ZUJvZHlEYXRhKHVpbnQ2NF90IGJ5dGVzU2VudCk7
Ci0gICAgdm9pZCBkb3dubG9hZCgpOwotICAgIHN0YXRpYyB2b2lkIHdyaXRlRG93bmxvYWRDYWxs
YmFjayhHT3V0cHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7Ci0g
ICAgdm9pZCB3cml0ZURvd25sb2FkKCk7Ci0gICAgdm9pZCBkaWRXcml0ZURvd25sb2FkKGdzaXpl
IGJ5dGVzV3JpdHRlbik7Ci0gICAgdm9pZCBkaWRGYWlsRG93bmxvYWQoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VFcnJvciYpOwotICAgIHZvaWQgZGlkRmluaXNoRG93bmxvYWQoKTsKLSAgICB2b2lk
IGNsZWFuRG93bmxvYWRGaWxlcygpOwotICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZUVycm9yJik7Ci0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgc3RhdGljIHZvaWQg
bmV0d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqLCBHU29ja2V0Q2xpZW50RXZlbnQsIEdJ
T1N0cmVhbSosIE5ldHdvcmtEYXRhVGFzayopOwotICAgIHZvaWQgbmV0d29ya0V2ZW50KEdTb2Nr
ZXRDbGllbnRFdmVudCk7Ci0jaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKLSAgICBz
dGF0aWMgdm9pZCBzdGFydGluZ0NhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNr
Kik7Ci0jZWxzZQotICAgIHN0YXRpYyB2b2lkIHJlcXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNl
c3Npb24qLCBTb3VwTWVzc2FnZSosIFNvdXBTb2NrZXQqLCBOZXR3b3JrRGF0YVRhc2sqKTsKLSNl
bmRpZgotICAgIHZvaWQgZGlkU3RhcnRSZXF1ZXN0KCk7Ci0gICAgc3RhdGljIHZvaWQgcmVzdGFy
dGVkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2sqKTsKLSAgICB2b2lkIGRp
ZFJlc3RhcnQoKTsKLSNlbmRpZgotI2VuZGlmCi0gICAgCiAgICAgZW51bSBGYWlsdXJlVHlwZSB7
CiAgICAgICAgIE5vRmFpbHVyZSwKICAgICAgICAgQmxvY2tlZEZhaWx1cmUsCiAgICAgICAgIElu
dmFsaWRVUkxGYWlsdXJlCiAgICAgfTsKLSAgICBGYWlsdXJlVHlwZSBtX3NjaGVkdWxlZEZhaWx1
cmVUeXBlIHsgTm9GYWlsdXJlIH07Ci0gICAgV2ViQ29yZTo6VGltZXIgbV9mYWlsdXJlVGltZXI7
CiAgICAgdm9pZCBmYWlsdXJlVGltZXJGaXJlZCgpOwogICAgIHZvaWQgc2NoZWR1bGVGYWlsdXJl
KEZhaWx1cmVUeXBlKTsKLSAgICAKLSAgICBSZWZQdHI8TmV0d29ya1Nlc3Npb24+IG1fc2Vzc2lv
bjsKLSAgICBOZXR3b3JrRGF0YVRhc2tDbGllbnQqIG1fY2xpZW50OworCisgICAgRmFpbHVyZVR5
cGUgbV9zY2hlZHVsZWRGYWlsdXJlVHlwZSB7IE5vRmFpbHVyZSB9OworICAgIFdlYkNvcmU6OlRp
bWVyIG1fZmFpbHVyZVRpbWVyOworICAgIFJlZjxOZXR3b3JrU2Vzc2lvbj4gbV9zZXNzaW9uOwor
ICAgIE5ldHdvcmtEYXRhVGFza0NsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07CiAgICAgUGVu
ZGluZ0Rvd25sb2FkKiBtX3BlbmRpbmdEb3dubG9hZCB7IG51bGxwdHIgfTsKICAgICBEb3dubG9h
ZElEIG1fcGVuZGluZ0Rvd25sb2FkSUQ7CiAgICAgU3RyaW5nIG1fdXNlcjsKQEAgLTIyNCw0NiAr
MTM3LDE0IEBAIHByaXZhdGU6CiAjaWYgVVNFKENSRURFTlRJQUxfU1RPUkFHRV9XSVRIX05FVFdP
UktfU0VTU0lPTikKICAgICBXZWJDb3JlOjpDcmVkZW50aWFsIG1faW5pdGlhbENyZWRlbnRpYWw7
CiAjZW5kaWYKLSAgICBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBtX3N0b3JlZENyZWRlbnRp
YWxzOworICAgIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIG1fc3RvcmVkQ3JlZGVudGlhbHMg
eyBXZWJDb3JlOjpEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMgfTsKICAgICBTdHJpbmcgbV9s
YXN0SFRUUE1ldGhvZDsKICAgICBTdHJpbmcgbV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbjsKICAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9maXJzdFJlcXVlc3Q7Ci0gICAgYm9vbCBtX3No
b3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Q7Ci0gICAgUmVmUHRyPFNhbmRi
b3hFeHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+IG1fdGFzazsKLSNlbmRpZgotI2lmIFVT
RShTT1VQKQotICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07Ci0gICAgV2Vi
Q29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IG1fc2hvdWxkQ29udGVudFNuaWZmOwotICAgIEdS
ZWZQdHI8U291cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7Ci0gICAgR1JlZlB0cjxTb3VwTWVzc2Fn
ZT4gbV9zb3VwTWVzc2FnZTsKLSAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVh
bTsKLSAgICBHUmVmUHRyPFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbT4gbV9tdWx0aXBhcnRJbnB1
dFN0cmVhbTsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKLSAgICBH
UmVmUHRyPEdBc3luY1Jlc3VsdD4gbV9wZW5kaW5nUmVzdWx0OwotICAgIFdlYkNvcmU6OlByb3Rl
Y3Rpb25TcGFjZSBtX3Byb3RlY3Rpb25TcGFjZUZvclBlcnNpc3RlbnRTdG9yYWdlOwotICAgIFdl
YkNvcmU6OkNyZWRlbnRpYWwgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2U7Ci0gICAg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgIFZlY3RvcjxjaGFyPiBt
X3JlYWRCdWZmZXI7Ci0gICAgdW5zaWduZWQgbV9yZWRpcmVjdENvdW50IHsgMCB9OwotICAgIHVp
bnQ2NF90IG1fYm9keURhdGFUb3RhbEJ5dGVzU2VudCB7IDAgfTsKLSAgICBHUmVmUHRyPEdGaWxl
PiBtX2Rvd25sb2FkRGVzdGluYXRpb25GaWxlOwotICAgIEdSZWZQdHI8R0ZpbGU+IG1fZG93bmxv
YWRJbnRlcm1lZGlhdGVGaWxlOwotICAgIEdSZWZQdHI8R091dHB1dFN0cmVhbT4gbV9kb3dubG9h
ZE91dHB1dFN0cmVhbTsKLSAgICBib29sIG1fYWxsb3dPdmVyd3JpdGVEb3dubG9hZCB7IGZhbHNl
IH07Ci0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgZG91YmxlIG1fc3RhcnRUaW1lIHsgMCB9
OwotI2VuZGlmCi0gICAgUnVuTG9vcDo6VGltZXI8TmV0d29ya0RhdGFUYXNrPiBtX3RpbWVvdXRT
b3VyY2U7Ci0jZW5kaWYKKyAgICBib29sIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hU
VFBSZWRpcmVjdCB7IHRydWUgfTsKICAgICBTdHJpbmcgbV9zdWdnZXN0ZWRGaWxlbmFtZTsKIH07
CiAKLSNpZiBQTEFURk9STShDT0NPQSkKLVdlYkNvcmU6OkNyZWRlbnRpYWwgc2VydmVyVHJ1c3RD
cmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0jZW5k
aWYKLSAgICAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gVVNFKE5FVFdP
UktfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2Fk
LmNwcAppbmRleCA4ZmQ0YWNkLi45NzkyOTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCkBAIC0zOSw2ICszOSwxMCBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAorI2lm
IFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaCBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgKaW5kZXggM2IxYTA1Zi4u
NGU0NmU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0xvYWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5o
CkBAIC0zNCw3ICszNCw3IEBACiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogI2luY2x1ZGUg
IkRvd25sb2FkSUQuaCIKLSNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIk5l
dHdvcmtEYXRhVGFzay5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UuaD4KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKaW5kZXggOGU5N2YwNy4uMjBiNTZjMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtNzQsNiArNzQsMTAg
QEAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKICNlbmRpZgogCisjaWYgUExBVEZP
Uk0oQ09DT0EpCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Db2NvYS5oIgorI2VuZGlmCisKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTEwMiw3ICsx
MDYsNyBAQCBOZXR3b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MoKQogICAgIGFkZFN1cHBsZW1l
bnQ8V2ViQ29va2llTWFuYWdlcj4oKTsKICAgICBhZGRTdXBwbGVtZW50PEN1c3RvbVByb3RvY29s
TWFuYWdlcj4oKTsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKSAmJiBQTEFURk9STShDT0NPQSkK
LSAgICBOZXR3b3JrU2Vzc2lvbjo6c2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKHN1cHBsZW1lbnQ8
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyPigpKTsKKyAgICBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRD
dXN0b21Qcm90b2NvbE1hbmFnZXIoc3VwcGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCkp
OwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtTZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtTZXNzaW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjgxODE5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Nlc3Npb24uY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKworI2lmIFVTRShORVRXT1JLX1NF
U1NJT04pCisKKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRl
ICJOZXR3b3JrU2Vzc2lvbkNvY29hLmgiCisjZW5kaWYKKyNpZiBVU0UoU09VUCkKKyNpbmNsdWRl
ICJOZXR3b3JrU2Vzc2lvblNvdXAuaCIKKyNlbmRpZgorCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVmPE5ldHdvcmtTZXNzaW9uPiBOZXR3b3Jr
U2Vzc2lvbjo6Y3JlYXRlKFNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdl
ciogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHJl
dHVybiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpjcmVhdGUoc2Vzc2lvbklELCBjdXN0b21Qcm90b2Nv
bE1hbmFnZXIpOworI2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAgVU5VU0VEX1BBUkFNKGN1c3Rv
bVByb3RvY29sTWFuYWdlcik7CisgICAgcmV0dXJuIE5ldHdvcmtTZXNzaW9uU291cDo6Y3JlYXRl
KHNlc3Npb25JRCk7CisjZW5kaWYKK30KKworTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTZXNzaW9u
OjpkZWZhdWx0U2Vzc2lvbigpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJuIE5l
dHdvcmtTZXNzaW9uQ29jb2E6OmRlZmF1bHRTZXNzaW9uKCk7CisjZWxzZQorICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uID0gJk5l
dHdvcmtTZXNzaW9uOjpjcmVhdGUoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpLmxlYWtS
ZWYoKTsKKyAgICByZXR1cm4gKnNlc3Npb247CisjZW5kaWYKK30KKworTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29uc3QKK3sK
KyAgICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFn
ZVNlc3Npb24obV9zZXNzaW9uSUQpOworICAgIFJFTEVBU0VfQVNTRVJUKHN0b3JhZ2VTZXNzaW9u
KTsKKyAgICByZXR1cm4gKnN0b3JhZ2VTZXNzaW9uOworfQorCitOZXR3b3JrU2Vzc2lvbjo6TmV0
d29ya1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKKyAgICA6IG1fc2Vzc2lvbklEKHNlc3Np
b25JRCkKK3sKK30KKworTmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbigpCit7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9u
LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCmluZGV4
IGIwODgyZjIuLmZlZmQ3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Nlc3Npb24uaApAQCAtMjcsMjQgKzI3LDEwIEBACiAKICNpZiBVU0UoTkVUV09SS19T
RVNTSU9OKQogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi1PQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbjsK
LU9CSkNfQ0xBU1MgTlNPcGVyYXRpb25RdWV1ZTsKLU9CSkNfQ0xBU1MgV0tOZXR3b3JrU2Vzc2lv
bkRlbGVnYXRlOwotI2VuZGlmCi0KLSNpbmNsdWRlICJEb3dubG9hZElELmgiCi0jaW5jbHVkZSAi
TmV0d29ya0RhdGFUYXNrLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KLSNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKLSNpZiBVU0UoU09VUCkK
LXR5cGVkZWYgc3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKLSNlbmRpZgotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb247CiB9CkBAIC01NCw2
MyArNDAsMjEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBDdXN0b21Qcm90b2NvbE1hbmFn
ZXI7CiAKIGNsYXNzIE5ldHdvcmtTZXNzaW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya1Nl
c3Npb24+IHsKLSAgICBmcmllbmQgY2xhc3MgTmV0d29ya0RhdGFUYXNrOwogcHVibGljOgotICAg
IGVudW0gY2xhc3MgVHlwZSB7Ci0gICAgICAgIE5vcm1hbCwKLSAgICAgICAgRXBoZW1lcmFsCi0g
ICAgfTsKLQotICAgIHN0YXRpYyBSZWY8TmV0d29ya1Nlc3Npb24+IGNyZWF0ZShUeXBlLCBXZWJD
b3JlOjpTZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopOworICAgIHN0YXRpYyBSZWY8
TmV0d29ya1Nlc3Npb24+IGNyZWF0ZShXZWJDb3JlOjpTZXNzaW9uSUQsIEN1c3RvbVByb3RvY29s
TWFuYWdlciogPSBudWxscHRyKTsKICAgICBzdGF0aWMgTmV0d29ya1Nlc3Npb24mIGRlZmF1bHRT
ZXNzaW9uKCk7Ci0gICAgfk5ldHdvcmtTZXNzaW9uKCk7CisgICAgdmlydHVhbCB+TmV0d29ya1Nl
c3Npb24oKTsKIAotICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpOworICAgIHZpcnR1YWwg
dm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgeyB9OworICAgIHZpcnR1YWwgdm9pZCBjbGVhckNy
ZWRlbnRpYWxzKCkgeyB9OwogCiAgICAgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9Ci0KLSNpZiBVU0UoU09VUCkKLSAgICBTb3VwU2Vz
c2lvbiogc291cFNlc3Npb24oKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBOZXR3b3JrU2Vzc2lvbiBoYXMgYmVl
biBjcmVhdGVkLgotICAgIHN0YXRpYyB2b2lkIHNldEN1c3RvbVByb3RvY29sTWFuYWdlcihDdXN0
b21Qcm90b2NvbE1hbmFnZXIqKTsKLSAgICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlv
bkF1ZGl0VG9rZW5EYXRhKFJldGFpblB0cjxDRkRhdGFSZWY+JiYpOwotICAgIHN0YXRpYyB2b2lk
IHNldFNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKLSAg
ICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoY29u
c3QgU3RyaW5nJik7Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHN0YXRpYyB2b2lkIHNldENURGF0
YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZShjb25zdCBTdHJpbmcmKTsKLSNlbmRpZgotI2VuZGlmCi0K
LSAgICB2b2lkIGNsZWFyQ3JlZGVudGlhbHMoKTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBO
ZXR3b3JrRGF0YVRhc2sqIGRhdGFUYXNrRm9ySWRlbnRpZmllcihOZXR3b3JrRGF0YVRhc2s6OlRh
c2tJZGVudGlmaWVyLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyk7Ci0KLSAgICB2b2lkIGFk
ZERvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgRG93bmxvYWRJRCk7
Ci0gICAgRG93bmxvYWRJRCBkb3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZp
ZXIpOwotICAgIERvd25sb2FkSUQgdGFrZURvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrOjpUYXNr
SWRlbnRpZmllcik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBOZXR3b3JrU2Vzc2lvbihUeXBl
LCBXZWJDb3JlOjpTZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopOwogICAgIFdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7
CiAKLSAgICBXZWJDb3JlOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7Citwcm90ZWN0ZWQ6CisgICAg
TmV0d29ya1Nlc3Npb24oV2ViQ29yZTo6U2Vzc2lvbklEKTsKIAotI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0Rh
dGFUYXNrKj4gbV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFsczsKLSAgICBIYXNoTWFwPE5ldHdv
cmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFzayo+IG1fZGF0YVRhc2tN
YXBXaXRob3V0Q3JlZGVudGlhbHM7Ci0gICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2s6OlRhc2tJ
ZGVudGlmaWVyLCBEb3dubG9hZElEPiBtX2Rvd25sb2FkTWFwOwotCi0gICAgUmV0YWluUHRyPE5T
VVJMU2Vzc2lvbj4gbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlOwotICAgIFJldGFpblB0
cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFn
ZURlbGVnYXRlOwotICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbldpdGhvdXRD
cmVkZW50aWFsU3RvcmFnZTsKLSAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRl
PiBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZTsKLSNlbGlmIFVTRShT
T1VQKQotICAgIEhhc2hTZXQ8TmV0d29ya0RhdGFUYXNrKj4gbV9kYXRhVGFza1NldDsKLSNlbmRp
ZgorICAgIFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAKaW5kZXggZmM1
NTUxMy4uNGFlYmYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWQuY3BwCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtD
YWNoZS5oIgogI2luY2x1ZGUgIk5ldHdvcmtMb2FkLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Np
b24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYThlZGJiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNr
Q29jb2EuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoTkVUV09SS19TRVNTSU9OKQorCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbkRhdGFU
YXNrOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsK
KworY2xhc3MgTmV0d29ya0RhdGFUYXNrQ29jb2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya0RhdGFU
YXNrIHsKKyAgICBmcmllbmQgY2xhc3MgTmV0d29ya1Nlc3Npb25Db2NvYTsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPE5ldHdvcmtEYXRhVGFzaz4gY3JlYXRlKE5ldHdvcmtTZXNzaW9uJiBzZXNz
aW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVk
ZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlm
ZiwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0RhdGFUYXNrQ29jb2Eoc2Vzc2lv
biwgY2xpZW50LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgc2hvdWxkQ29udGVudFNuaWZm
LCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KSk7CisgICAgfQorCisg
ICAgfk5ldHdvcmtEYXRhVGFza0NvY29hKCk7CisKKyAgICB0eXBlZGVmIHVpbnQ2NF90IFRhc2tJ
ZGVudGlmaWVyOworCisgICAgdm9pZCBkaWRTZW5kRGF0YSh1aW50NjRfdCB0b3RhbEJ5dGVzU2Vu
dCwgdWludDY0X3QgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kKTsKKyAgICB2b2lkIGRpZFJlY2Vp
dmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBDaGFs
bGVuZ2VDb21wbGV0aW9uSGFuZGxlciYmKTsKKyAgICB2b2lkIGRpZENvbXBsZXRlV2l0aEVycm9y
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNw
b25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRs
ZXImJik7CisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
PiYmKTsKKyAgICB2b2lkIGRpZEJlY29tZURvd25sb2FkKCk7CisKKyAgICB2b2lkIHdpbGxQZXJm
b3JtSFRUUFJlZGlyZWN0aW9uKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiYsIFJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXImJik7CisgICAgdm9p
ZCB0cmFuc2ZlclNhbmRib3hFeHRlbnNpb25Ub0Rvd25sb2FkKERvd25sb2FkJik7CisKKyAgICB2
b2lkIHN1c3BlbmQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNhbmNlbCgpIG92ZXJyaWRlOworICAg
IHZvaWQgcmVzdW1lKCkgb3ZlcnJpZGU7CisgICAgTmV0d29ya0RhdGFUYXNrOjpTdGF0ZSBzdGF0
ZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlv
bihjb25zdCBTdHJpbmcmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIC8q
YWxsb3dPdmVyd3JpdGUqLykgb3ZlcnJpZGU7CisgICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1l
KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBib29sIGFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZp
Y2F0ZUZvckhvc3QoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBOZXR3b3JrRGF0YVRhc2tDb2NvYShOZXR3b3JrU2Vzc2lv
biYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQ
b2xpY3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CisK
KyAgICBib29sIHRyeVBhc3N3b3JkQmFzZWRBdXRoZW50aWNhdGlvbihjb25zdCBXZWJDb3JlOjpB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVy
Jik7CisKKyAgICBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gbV9zYW5kYm94RXh0ZW5zaW9uOwor
ICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb25EYXRhVGFzaz4gbV90YXNrOworfTsKKworV2ViQ29y
ZTo6Q3JlZGVudGlhbCBzZXJ2ZXJUcnVzdENyZWRlbnRpYWwoY29uc3QgV2ViQ29yZTo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQppbmRleCA2MmNiMGQ3
Li4wZGRiNDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2Nv
YS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQpAQCAtMjQsNyArMjQsNyBAQAogICov
CiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbXBv
cnQgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQog
CkBAIC0zMyw2ICszMyw3IEBACiAjaW1wb3J0ICJEb3dubG9hZFByb3h5TWVzc2FnZXMuaCIKICNp
bXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzLmgiCisjaW1wb3J0ICJO
ZXR3b3JrU2Vzc2lvbkNvY29hLmgiCiAjaW1wb3J0ICJTZXNzaW9uVHJhY2tlci5oIgogI2ltcG9y
dCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlLmg+CkBAIC01MiwyNyArNTMsMTIgQEAgc3RhdGljIHZvaWQgYXBwbHlCYXNp
Y0F1dGhvcml6YXRpb25IZWFkZXIoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b24KIH0KICNlbmRpZgogCi1OZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFzayhOZXR3b3Jr
U2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgV2ViQ29yZTo6
U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlm
ZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9u
SFRUUFNUb0hUVFBSZWRpcmVjdCkKLSAgICA6IG1fZmFpbHVyZVRpbWVyKCp0aGlzLCAmTmV0d29y
a0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCkKLSAgICAsIG1fc2Vzc2lvbigmc2Vzc2lvbikK
LSAgICAsIG1fY2xpZW50KCZjbGllbnQpCi0gICAgLCBtX3N0b3JlZENyZWRlbnRpYWxzKHN0b3Jl
ZENyZWRlbnRpYWxzKQotICAgICwgbV9sYXN0SFRUUE1ldGhvZChyZXF1ZXN0V2l0aENyZWRlbnRp
YWxzLmh0dHBNZXRob2QoKSkKLSAgICAsIG1fZmlyc3RSZXF1ZXN0KHJlcXVlc3RXaXRoQ3JlZGVu
dGlhbHMpCi0gICAgLCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Qo
c2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKK05ldHdvcmtEYXRhVGFz
a0NvY29hOjpOZXR3b3JrRGF0YVRhc2tDb2NvYShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0
d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgc3Rv
cmVkQ3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250
ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkK
KyAgICA6IE5ldHdvcmtEYXRhVGFzayhzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3RXaXRoQ3JlZGVu
dGlhbHMsIHN0b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRU
UFJlZGlyZWN0KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgCi0gICAgaWYg
KCFyZXF1ZXN0V2l0aENyZWRlbnRpYWxzLnVybCgpLmlzVmFsaWQoKSkgewotICAgICAgICBzY2hl
ZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIGlmICghcG9ydEFsbG93ZWQocmVxdWVzdFdpdGhDcmVkZW50aWFscy51cmwoKSkp
IHsKLSAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEJsb2NrZWRGYWlsdXJlKTsKKyAgICBpZiAobV9z
Y2hlZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpCiAgICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCisKICAgICBhdXRvIHJlcXVlc3QgPSByZXF1ZXN0V2l0aENyZWRlbnRpYWxzOwogICAg
IGF1dG8gdXJsID0gcmVxdWVzdC51cmwoKTsKICAgICBpZiAoc3RvcmVkQ3JlZGVudGlhbHMgPT0g
V2ViQ29yZTo6QWxsb3dTdG9yZWRDcmVkZW50aWFscyAmJiB1cmwucHJvdG9jb2xJc0luSFRUUEZh
bWlseSgpKSB7CkBAIC0xMDMsMTQgKzg5LDE1IEBAIE5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0Rh
dGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmCiAg
ICAgICAgIG5zUmVxdWVzdCA9IG11dGFibGVSZXF1ZXN0OwogICAgIH0KIAorICAgIGF1dG8mIGNv
Y29hU2Vzc2lvbiA9IHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uQ29jb2EmPihtX3Nlc3Npb24u
Z2V0KCkpOwogICAgIGlmIChzdG9yZWRDcmVkZW50aWFscyA9PSBXZWJDb3JlOjpBbGxvd1N0b3Jl
ZENyZWRlbnRpYWxzKSB7Ci0gICAgICAgIG1fdGFzayA9IFttX3Nlc3Npb24tPm1fc2Vzc2lvbldp
dGhDcmVkZW50aWFsU3RvcmFnZSBkYXRhVGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07Ci0gICAg
ICAgIEFTU0VSVCghbV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzLmNvbnRh
aW5zKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSk7Ci0gICAgICAgIG1fc2Vzc2lvbi0+bV9kYXRh
VGFza01hcFdpdGhDcmVkZW50aWFscy5hZGQoW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIHRoaXMp
OworICAgICAgICBtX3Rhc2sgPSBbY29jb2FTZXNzaW9uLm1fc2Vzc2lvbldpdGhDcmVkZW50aWFs
U3RvcmFnZSBkYXRhVGFza1dpdGhSZXF1ZXN0Om5zUmVxdWVzdF07CisgICAgICAgIEFTU0VSVCgh
Y29jb2FTZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMuY29udGFpbnMoW21fdGFz
ayB0YXNrSWRlbnRpZmllcl0pKTsKKyAgICAgICAgY29jb2FTZXNzaW9uLm1fZGF0YVRhc2tNYXBX
aXRoQ3JlZGVudGlhbHMuYWRkKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlzKTsKICAgICB9
IGVsc2UgewotICAgICAgICBtX3Rhc2sgPSBbbV9zZXNzaW9uLT5tX3Nlc3Npb25XaXRob3V0Q3Jl
ZGVudGlhbFN0b3JhZ2UgZGF0YVRhc2tXaXRoUmVxdWVzdDpuc1JlcXVlc3RdOwotICAgICAgICBB
U1NFUlQoIW1fc2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFscy5jb250YWlu
cyhbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkpOwotICAgICAgICBtX3Nlc3Npb24tPm1fZGF0YVRh
c2tNYXBXaXRob3V0Q3JlZGVudGlhbHMuYWRkKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdLCB0aGlz
KTsKKyAgICAgICAgbV90YXNrID0gW2NvY29hU2Vzc2lvbi5tX3Nlc3Npb25XaXRob3V0Q3JlZGVu
dGlhbFN0b3JhZ2UgZGF0YVRhc2tXaXRoUmVxdWVzdDpuc1JlcXVlc3RdOworICAgICAgICBBU1NF
UlQoIWNvY29hU2Vzc2lvbi5tX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmNvbnRhaW5z
KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSk7CisgICAgICAgIGNvY29hU2Vzc2lvbi5tX2RhdGFU
YXNrTWFwV2l0aG91dENyZWRlbnRpYWxzLmFkZChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSwgdGhp
cyk7CiAgICAgfQogICAgIExPRyhOZXR3b3JrU2Vzc2lvbiwgIiVsbHUgQ3JlYXRpbmcgTmV0d29y
a0RhdGFUYXNrIHdpdGggVVJMICVzIiwgW21fdGFzayB0YXNrSWRlbnRpZmllcl0sIG5zUmVxdWVz
dC5VUkwuYWJzb2x1dGVTdHJpbmcuVVRGOFN0cmluZyk7CiAKQEAgLTEyMSwyNyArMTA4LDI4IEBA
IE5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9u
LCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmCiAjZW5kaWYKIH0KIAotTmV0d29ya0RhdGFUYXNrOjp+
TmV0d29ya0RhdGFUYXNrKCkKK05ldHdvcmtEYXRhVGFza0NvY29hOjp+TmV0d29ya0RhdGFUYXNr
Q29jb2EoKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fdGFzaykg
ewotICAgICAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFscyA9PSBXZWJDb3JlOjpTdG9yZWRDcmVk
ZW50aWFsczo6QWxsb3dTdG9yZWRDcmVkZW50aWFscykgewotICAgICAgICAgICAgQVNTRVJUKG1f
c2Vzc2lvbi0+bV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFscy5nZXQoW21fdGFzayB0YXNrSWRl
bnRpZmllcl0pID09IHRoaXMpOwotICAgICAgICAgICAgbV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFw
V2l0aENyZWRlbnRpYWxzLnJlbW92ZShbbV90YXNrIHRhc2tJZGVudGlmaWVyXSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9zZXNzaW9uLT5tX2RhdGFUYXNrTWFwV2l0
aG91dENyZWRlbnRpYWxzLmdldChbbV90YXNrIHRhc2tJZGVudGlmaWVyXSkgPT0gdGhpcyk7Ci0g
ICAgICAgICAgICBtX3Nlc3Npb24tPm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHMucmVt
b3ZlKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsKLSAgICAgICAgfQorICAgIGlmICghbV90YXNr
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBjb2NvYVNlc3Npb24gPSBzdGF0aWNfY2Fz
dDxOZXR3b3JrU2Vzc2lvbkNvY29hJj4obV9zZXNzaW9uLmdldCgpKTsKKyAgICBpZiAobV9zdG9y
ZWRDcmVkZW50aWFscyA9PSBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsczo6QWxsb3dTdG9yZWRD
cmVkZW50aWFscykgeworICAgICAgICBBU1NFUlQoY29jb2FTZXNzaW9uLm1fZGF0YVRhc2tNYXBX
aXRoQ3JlZGVudGlhbHMuZ2V0KFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKSA9PSB0aGlzKTsKKyAg
ICAgICAgY29jb2FTZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHMucmVtb3ZlKFtt
X3Rhc2sgdGFza0lkZW50aWZpZXJdKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoY29j
b2FTZXNzaW9uLm1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHMuZ2V0KFttX3Rhc2sgdGFz
a0lkZW50aWZpZXJdKSA9PSB0aGlzKTsKKyAgICAgICAgY29jb2FTZXNzaW9uLm1fZGF0YVRhc2tN
YXBXaXRob3V0Q3JlZGVudGlhbHMucmVtb3ZlKFttX3Rhc2sgdGFza0lkZW50aWZpZXJdKTsKICAg
ICB9CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRTZW5kRGF0YSh1aW50NjRfdCB0b3Rh
bEJ5dGVzU2VudCwgdWludDY0X3QgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5kKQordm9pZCBOZXR3
b3JrRGF0YVRhc2tDb2NvYTo6ZGlkU2VuZERhdGEodWludDY0X3QgdG90YWxCeXRlc1NlbnQsIHVp
bnQ2NF90IHRvdGFsQnl0ZXNFeHBlY3RlZFRvU2VuZCkKIHsKICAgICBpZiAobV9jbGllbnQpCiAg
ICAgICAgIG1fY2xpZW50LT5kaWRTZW5kRGF0YSh0b3RhbEJ5dGVzU2VudCwgdG90YWxCeXRlc0V4
cGVjdGVkVG9TZW5kKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVDaGFs
bGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwg
Q2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrQ29jb2E6OmRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRs
ZXImJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICAvLyBQcm94eSBhdXRoZW50aWNhdGlvbiBp
cyBoYW5kbGVkIGJ5IENGTmV0d29yayBpbnRlcm5hbGx5LiBXZSBjYW4gZ2V0IGhlcmUgaWYgdGhl
IHVzZXIgY2FuY2VscwogICAgIC8vIENGTmV0d29yayBhdXRoZW50aWNhdGlvbiBkaWFsb2csIGFu
ZCB3ZSBzaG91bGRuJ3QgYXNrIHRoZSBjbGllbnQgdG8gZGlzcGxheSBhbm90aGVyIG9uZSBpbiB0
aGF0IGNhc2UuCkBAIC0xNjEsMTMgKzE0OSwxMyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlk
UmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZQog
ICAgIH0KIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZENvbXBsZXRlV2l0aEVycm9yKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQordm9pZCBOZXR3b3JrRGF0YVRhc2tD
b2NvYTo6ZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYg
ZXJyb3IpCiB7CiAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICBtX2NsaWVudC0+ZGlkQ29tcGxl
dGVXaXRoRXJyb3IoZXJyb3IpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSwgUmVzcG9uc2VD
b21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3b3JrRGF0YVRh
c2tDb2NvYTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiBy
ZXNwb25zZSwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIGlmIChtX2NsaWVudCkKICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25z
ZU5ldHdvcmtTZXNzaW9uKFdURk1vdmUocmVzcG9uc2UpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CkBAIC0xNzcsMTkgKzE2NSwxOSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSwgUgogICAg
IH0KIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVEYXRhKFJlZjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+JiYgZGF0YSkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OmRpZFJl
Y2VpdmVEYXRhKFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiYgZGF0YSkKIHsKICAgICBpZiAo
bV9jbGllbnQpCiAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShXVEZNb3ZlKGRhdGEp
KTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEJlY29tZURvd25sb2FkKCkKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrQ29jb2E6OmRpZEJlY29tZURvd25sb2FkKCkKIHsKICAgICBpZiAobV9j
bGllbnQpCiAgICAgICAgIG1fY2xpZW50LT5kaWRCZWNvbWVEb3dubG9hZCgpOwogfQogCi12b2lk
IE5ldHdvcmtEYXRhVGFzazo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYmIHJlZGlyZWN0UmVzcG9uc2UsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYmIHJlcXVlc3QsIFJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxl
cikKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9u
KFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZWRpcmVjdFJlc3BvbnNlLCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyJiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKHJlZGlyZWN0UmVzcG9uc2UuaHR0cFN0YXR1c0Nv
ZGUoKSA9PSAzMDcgfHwgcmVkaXJlY3RSZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMwOCkg
ewogICAgICAgICBBU1NFUlQobV9sYXN0SFRUUE1ldGhvZCA9PSByZXF1ZXN0Lmh0dHBNZXRob2Qo
KSk7CkBAIC0yNDAsNTEgKzIyOCwyMyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6d2lsbFBlcmZv
cm1IVFRQUmVkaXJlY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlZAogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogICAgIH0KIH0KLSAgICAKLXZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpzY2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5cGUgdHlwZSkKLXsKLSAgICBBU1NFUlQo
dHlwZSAhPSBOb0ZhaWx1cmUpOwotICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSB0eXBlOwot
ICAgIG1fZmFpbHVyZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KIAotdm9pZCBOZXR3b3JrRGF0
YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrQ29jb2E6OnNl
dFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFdURjo6U3RyaW5nJiBmaWxlbmFtZSwgY29u
c3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBib29s
IGFsbG93T3ZlcndyaXRlKQogewotICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3Qo
dGhpcyk7Ci0gICAgCi0gICAgc3dpdGNoIChtX3NjaGVkdWxlZEZhaWx1cmVUeXBlKSB7Ci0gICAg
Y2FzZSBCbG9ja2VkRmFpbHVyZToKLSAgICAgICAgbV9zY2hlZHVsZWRGYWlsdXJlVHlwZSA9IE5v
RmFpbHVyZTsKLSAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgbV9jbGllbnQtPndh
c0Jsb2NrZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW52YWxpZFVSTEZhaWx1cmU6
Ci0gICAgICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBOb0ZhaWx1cmU7Ci0gICAgICAgIGlm
IChtX2NsaWVudCkKLSAgICAgICAgICAgIG1fY2xpZW50LT5jYW5ub3RTaG93VVJMKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIE5vRmFpbHVyZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LX0KKyAgICBOZXR3b3JrRGF0YVRhc2s6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGZpbGVu
YW1lLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSk7CiAKLXZvaWQgTmV0
d29ya0RhdGFUYXNrOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBXVEY6OlN0cmlu
ZyYgZmlsZW5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVu
c2lvbkhhbmRsZSwgYm9vbCBhbGxvd092ZXJ3cml0ZSkKLXsKICAgICBBU1NFUlQoIW1fc2FuZGJv
eEV4dGVuc2lvbik7CiAgICAgbV9zYW5kYm94RXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlKHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwogICAgIGlmIChtX3NhbmRib3hFeHRlbnNp
b24pCiAgICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbi0+Y29uc3VtZSgpOwogCi0gICAgbV9wZW5k
aW5nRG93bmxvYWRMb2NhdGlvbiA9IGZpbGVuYW1lOwotICAgIG1fdGFzay5nZXQoKS5fcGF0aFRv
RG93bmxvYWRUYXNrRmlsZSA9IGZpbGVuYW1lOworICAgIG1fdGFzay5nZXQoKS5fcGF0aFRvRG93
bmxvYWRUYXNrRmlsZSA9IG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb247CiAKLSAgICBpZiAoYWxs
b3dPdmVyd3JpdGUgJiYgV2ViQ29yZTo6ZmlsZUV4aXN0cyhmaWxlbmFtZSkpCisgICAgaWYgKGFs
bG93T3ZlcndyaXRlICYmIFdlYkNvcmU6OmZpbGVFeGlzdHMobV9wZW5kaW5nRG93bmxvYWRMb2Nh
dGlvbikpCiAgICAgICAgIFdlYkNvcmU6OmRlbGV0ZUZpbGUoZmlsZW5hbWUpOwogfQogCi1ib29s
IE5ldHdvcmtEYXRhVGFzazo6dHJ5UGFzc3dvcmRCYXNlZEF1dGhlbnRpY2F0aW9uKGNvbnN0IFdl
YkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIGNvbnN0IENoYWxsZW5n
ZUNvbXBsZXRpb25IYW5kbGVyJiBjb21wbGV0aW9uSGFuZGxlcikKK2Jvb2wgTmV0d29ya0RhdGFU
YXNrQ29jb2E6OnRyeVBhc3N3b3JkQmFzZWRBdXRoZW50aWNhdGlvbihjb25zdCBXZWJDb3JlOjpB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0
aW9uSGFuZGxlciYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFjaGFsbGVuZ2UucHJv
dGVjdGlvblNwYWNlKCkuaXNQYXNzd29yZEJhc2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTMyOSw3ICsyODksNyBAQCBib29sIE5ldHdvcmtEYXRhVGFzazo6dHJ5UGFzc3dvcmRCYXNl
ZEF1dGhlbnRpY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnRyYW5zZmVyU2FuZGJveEV4dGVuc2lv
blRvRG93bmxvYWQoRG93bmxvYWQmIGRvd25sb2FkKQordm9pZCBOZXR3b3JrRGF0YVRhc2tDb2Nv
YTo6dHJhbnNmZXJTYW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9hZChEb3dubG9hZCYgZG93bmxvYWQp
CiB7CiAgICAgZG93bmxvYWQuc2V0U2FuZGJveEV4dGVuc2lvbihXVEZNb3ZlKG1fc2FuZGJveEV4
dGVuc2lvbikpOwogfQpAQCAtMzU2LDcgKzMxNiw3IEBAIHN0YXRpYyBib29sIGNlcnRpZmljYXRl
c01hdGNoKFNlY1RydXN0UmVmIHRydXN0MSwgU2VjVHJ1c3RSZWYgdHJ1c3QyKQogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIE5ldHdvcmtEYXRhVGFzazo6YWxsb3dzU3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYg
Y2hhbGxlbmdlKQorYm9vbCBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6YWxsb3dzU3BlY2lmaWNIVFRQ
U0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYgY2hhbGxlbmdlKQogewogICAgIGNvbnN0IFN0cmluZyYgaG9zdCA9IGNoYWxsZW5nZS5wcm90
ZWN0aW9uU3BhY2UoKS5ob3N0KCk7CiAgICAgTlNBcnJheSAqY2VydGlmaWNhdGVzID0gW05TVVJM
UmVxdWVzdCBhbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0Omhvc3RdOwpAQCAt
Mzc0LDM4ICszMzQsMzMgQEAgYm9vbCBOZXR3b3JrRGF0YVRhc2s6OmFsbG93c1NwZWNpZmljSFRU
UFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ29yZTo6QXV0aGUKICAgICByZXR1cm4gY2Vy
dGlmaWNhdGVzTWF0Y2godHJ1c3QuZ2V0KCksIGNoYWxsZW5nZS5uc1VSTEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKCkucHJvdGVjdGlvblNwYWNlLnNlcnZlclRydXN0KTsKIH0KIAotU3RyaW5nIE5l
dHdvcmtEYXRhVGFzazo6c3VnZ2VzdGVkRmlsZW5hbWUoKQorU3RyaW5nIE5ldHdvcmtEYXRhVGFz
a0NvY29hOjpzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3N1Z2dlc3Rl
ZEZpbGVuYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG1fc3VnZ2VzdGVkRmlsZW5hbWU7
CiAgICAgcmV0dXJuIG1fdGFzay5nZXQoKS5yZXNwb25zZS5zdWdnZXN0ZWRGaWxlbmFtZTsKIH0K
IAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnNldFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkTmFtZSkKLXsKLSAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVk
TmFtZTsKLX0KLQotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNhbmNlbCgpCit2b2lkIE5ldHdvcmtE
YXRhVGFza0NvY29hOjpjYW5jZWwoKQogewogICAgIFttX3Rhc2sgY2FuY2VsXTsKIH0KIAotdm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OnJlc3VtZSgpCit2b2lkIE5ldHdvcmtEYXRhVGFza0NvY29hOjpy
ZXN1bWUoKQogewogICAgIGlmIChtX3NjaGVkdWxlZEZhaWx1cmVUeXBlICE9IE5vRmFpbHVyZSkK
ICAgICAgICAgbV9mYWlsdXJlVGltZXIuc3RhcnRPbmVTaG90KDApOwogICAgIFttX3Rhc2sgcmVz
dW1lXTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN1c3BlbmQoKQordm9pZCBOZXR3b3Jr
RGF0YVRhc2tDb2NvYTo6c3VzcGVuZCgpCiB7CiAgICAgaWYgKG1fZmFpbHVyZVRpbWVyLmlzQWN0
aXZlKCkpCiAgICAgICAgIG1fZmFpbHVyZVRpbWVyLnN0b3AoKTsKICAgICBbbV90YXNrIHN1c3Bl
bmRdOwogfQogCi1OZXR3b3JrRGF0YVRhc2s6OlN0YXRlIE5ldHdvcmtEYXRhVGFzazo6c3RhdGUo
KSBjb25zdAorTmV0d29ya0RhdGFUYXNrOjpTdGF0ZSBOZXR3b3JrRGF0YVRhc2tDb2NvYTo6c3Rh
dGUoKSBjb25zdAogewogICAgIHN3aXRjaCAoW21fdGFzayBzdGF0ZV0pIHsKICAgICBjYXNlIE5T
VVJMU2Vzc2lvblRhc2tTdGF0ZVJ1bm5pbmc6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQppbmRleCAxMmNi
NDUxLi5jZmMyMjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KQEAgLTI5LDcgKzI5LDcgQEAKICNp
bXBvcnQgIk5ldHdvcmtDYWNoZS5oIgogI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuaCIKICNpbXBvcnQgIk5ldHdvcmtSZXNvdXJjZUxvYWRlci5oIgotI2ltcG9ydCAi
TmV0d29ya1Nlc3Npb24uaCIKKyNpbXBvcnQgIk5ldHdvcmtTZXNzaW9uQ29jb2EuaCIKICNpbXBv
cnQgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbXBvcnQgIlNlc3Npb25UcmFja2VyLmgiCiAjaW1w
b3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgpAQCAtODUsMTEgKzg1LDExIEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3Qg
TmV0d29ya1Byb2Nlc3NDCiAgICAgU2Vzc2lvblRyYWNrZXI6OnNldElkZW50aWZpZXJCYXNlKHBh
cmFtZXRlcnMudWlQcm9jZXNzQnVuZGxlSWRlbnRpZmllcik7CiAKICNpZiBVU0UoTkVUV09SS19T
RVNTSU9OKQotICAgIE5ldHdvcmtTZXNzaW9uOjpzZXRTb3VyY2VBcHBsaWNhdGlvbkF1ZGl0VG9r
ZW5EYXRhKHNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhKCkpOwotICAgIE5ldHdvcmtTZXNzaW9u
OjpzZXRTb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIocGFyYW1ldGVycy5zb3VyY2VB
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOwotICAgIE5ldHdvcmtTZXNzaW9uOjpzZXRTb3Vy
Y2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIocGFyYW1ldGVycy5zb3VyY2VBcHBsaWNh
dGlvblNlY29uZGFyeUlkZW50aWZpZXIpOworICAgIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNldFNv
dXJjZUFwcGxpY2F0aW9uQXVkaXRUb2tlbkRhdGEoc291cmNlQXBwbGljYXRpb25BdWRpdERhdGEo
KSk7CisgICAgTmV0d29ya1Nlc3Npb25Db2NvYTo6c2V0U291cmNlQXBwbGljYXRpb25CdW5kbGVJ
ZGVudGlmaWVyKHBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsK
KyAgICBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlk
ZW50aWZpZXIocGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIp
OwogI2lmIFBMQVRGT1JNKElPUykKLSAgICBOZXR3b3JrU2Vzc2lvbjo6c2V0Q1REYXRhQ29ubmVj
dGlvblNlcnZpY2VUeXBlKHBhcmFtZXRlcnMuY3REYXRhQ29ubmVjdGlvblNlcnZpY2VUeXBlKTsK
KyAgICBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRDVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUo
cGFyYW1ldGVycy5jdERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUpOwogI2VuZGlmCiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a1Nlc3Npb25Db2NvYS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0
d29ya1Nlc3Npb25Db2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2
YjJkZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKworT0JKQ19DTEFTUyBO
U1VSTFNlc3Npb247CitPQkpDX0NMQVNTIE5TT3BlcmF0aW9uUXVldWU7CitPQkpDX0NMQVNTIFdL
TmV0d29ya1Nlc3Npb25EZWxlZ2F0ZTsKKworI2luY2x1ZGUgIkRvd25sb2FkSUQuaCIKKyNpbmNs
dWRlICJOZXR3b3JrRGF0YVRhc2tDb2NvYS5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IE5ldHdvcmtTZXNzaW9uQ29jb2EgZmluYWwgOiBwdWJsaWMgTmV0d29ya1Nlc3Npb24geworICAg
IGZyaWVuZCBjbGFzcyBOZXR3b3JrRGF0YVRhc2tDb2NvYTsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPE5ldHdvcmtTZXNzaW9uPiBjcmVhdGUoV2ViQ29yZTo6U2Vzc2lvbklELCBDdXN0b21Qcm90
b2NvbE1hbmFnZXIqKTsKKyAgICBzdGF0aWMgTmV0d29ya1Nlc3Npb24mIGRlZmF1bHRTZXNzaW9u
KCk7CisgICAgfk5ldHdvcmtTZXNzaW9uQ29jb2EoKTsKKworICAgIC8vIE11c3QgYmUgY2FsbGVk
IGJlZm9yZSBhbnkgTmV0d29ya1Nlc3Npb24gaGFzIGJlZW4gY3JlYXRlZC4KKyAgICBzdGF0aWMg
dm9pZCBzZXRDdXN0b21Qcm90b2NvbE1hbmFnZXIoQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKik7Cisg
ICAgc3RhdGljIHZvaWQgc2V0U291cmNlQXBwbGljYXRpb25BdWRpdFRva2VuRGF0YShSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiYmKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvbkJ1
bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIHZvaWQgc2V0U291cmNl
QXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOworI2lmIFBMQVRG
T1JNKElPUykKKyAgICBzdGF0aWMgdm9pZCBzZXRDVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUo
Y29uc3QgU3RyaW5nJik7CisjZW5kaWYKKworICAgIE5ldHdvcmtEYXRhVGFza0NvY29hKiBkYXRh
VGFza0ZvcklkZW50aWZpZXIoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBX
ZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscyk7CisKKyAgICB2b2lkIGFkZERvd25sb2FkSUQoTmV0
d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEKTsKKyAgICBEb3du
bG9hZElEIGRvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyKTsK
KyAgICBEb3dubG9hZElEIHRha2VEb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNr
SWRlbnRpZmllcik7CisKK3ByaXZhdGU6CisgICAgTmV0d29ya1Nlc3Npb25Db2NvYShXZWJDb3Jl
OjpTZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopOworCisgICAgdm9pZCBpbnZhbGlk
YXRlQW5kQ2FuY2VsKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhckNyZWRlbnRpYWxzKCkgb3Zl
cnJpZGU7CisKKyAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRlbnRpZmll
ciwgTmV0d29ya0RhdGFUYXNrQ29jb2EqPiBtX2RhdGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzOwor
ICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3Jr
RGF0YVRhc2tDb2NvYSo+IG1fZGF0YVRhc2tNYXBXaXRob3V0Q3JlZGVudGlhbHM7CisgICAgSGFz
aE1hcDxOZXR3b3JrRGF0YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQ+IG1f
ZG93bmxvYWRNYXA7CisKKyAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX3Nlc3Npb25XaXRo
Q3JlZGVudGlhbFN0b3JhZ2U7CisgICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0
ZT4gbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGU7CisgICAgUmV0YWluUHRy
PE5TVVJMU2Vzc2lvbj4gbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlOworICAgIFJl
dGFpblB0cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50
aWFsU3RvcmFnZURlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KaW5kZXggMDFmMmEz
OS4uYmE2OTcxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8K
IAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJOZXR3b3JrU2Vzc2lvbi5oIgorI2ltcG9y
dCAiTmV0d29ya1Nlc3Npb25Db2NvYS5oIgogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKIApA
QCAtODIsMTcgKzgyLDE3IEBAIHN0YXRpYyBOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9z
aXRpb24gdG9OU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpCiB9CiAKIEBpbnRlcmZh
Y2UgV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlIDogTlNPYmplY3QgPE5TVVJMU2Vzc2lvbkRhdGFE
ZWxlZ2F0ZT4gewotICAgIFJlZlB0cjxXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uPiBfc2Vzc2lvbjsK
KyAgICBSZWZQdHI8V2ViS2l0OjpOZXR3b3JrU2Vzc2lvbkNvY29hPiBfc2Vzc2lvbjsKICAgICBi
b29sIF93aXRoQ3JlZGVudGlhbHM7CiB9CiAKLS0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246
KFdlYktpdDo6TmV0d29ya1Nlc3Npb24mKXNlc3Npb24gd2l0aENyZWRlbnRpYWxzOihib29sKXdp
dGhDcmVkZW50aWFsczsKKy0gKGlkKWluaXRXaXRoTmV0d29ya1Nlc3Npb246KFdlYktpdDo6TmV0
d29ya1Nlc3Npb25Db2NvYSYpc2Vzc2lvbiB3aXRoQ3JlZGVudGlhbHM6KGJvb2wpd2l0aENyZWRl
bnRpYWxzOwogCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS05ldHdvcmtTZXNzaW9uRGVsZWdh
dGUKIAotLSAoaWQpaW5pdFdpdGhOZXR3b3JrU2Vzc2lvbjooV2ViS2l0OjpOZXR3b3JrU2Vzc2lv
biYpc2Vzc2lvbiB3aXRoQ3JlZGVudGlhbHM6KGJvb2wpd2l0aENyZWRlbnRpYWxzCistIChpZClp
bml0V2l0aE5ldHdvcmtTZXNzaW9uOihXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2EmKXNlc3Np
b24gd2l0aENyZWRlbnRpYWxzOihib29sKXdpdGhDcmVkZW50aWFscwogewogICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07CiAgICAgaWYgKCFzZWxmKQpAQCAtMjk2LDcgKzI5Niw3IEBAIHN0YXRpYyBO
U1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gdG9OU1VSTFNlc3Npb25BdXRoQ2hh
bGxlbmdlRGlzcG9zaXRpCiB7CiAgICAgYXV0byBzdG9yZWRDcmVkZW50aWFscyA9IF93aXRoQ3Jl
ZGVudGlhbHMgPyBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsczo6QWxsb3dTdG9yZWRDcmVkZW50
aWFscyA6IFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzOjpEb05vdEFsbG93U3RvcmVkQ3JlZGVu
dGlhbHM7CiAgICAgaWYgKGF1dG8qIG5ldHdvcmtEYXRhVGFzayA9IF9zZXNzaW9uLT5kYXRhVGFz
a0ZvcklkZW50aWZpZXIoW2RhdGFUYXNrIHRhc2tJZGVudGlmaWVyXSwgc3RvcmVkQ3JlZGVudGlh
bHMpKSB7Ci0gICAgICAgIFJlZjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZE5ldHdvcmtEYXRh
VGFzaygqbmV0d29ya0RhdGFUYXNrKTsKKyAgICAgICAgUmVmPE5ldHdvcmtEYXRhVGFza0NvY29h
PiBwcm90ZWN0ZWROZXR3b3JrRGF0YVRhc2soKm5ldHdvcmtEYXRhVGFzayk7CiAgICAgICAgIGF1
dG8gZG93bmxvYWRJRCA9IG5ldHdvcmtEYXRhVGFzay0+cGVuZGluZ0Rvd25sb2FkSUQoKTsKICAg
ICAgICAgYXV0byYgZG93bmxvYWRNYW5hZ2VyID0gV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCk7CiAgICAgICAgIGF1dG8gZG93bmxvYWQgPSBzdGQ6
Om1ha2VfdW5pcXVlPFdlYktpdDo6RG93bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgZG93bmxvYWRJ
RCwgZG93bmxvYWRUYXNrLCBfc2Vzc2lvbi0+c2Vzc2lvbklEKCksIG5ldHdvcmtEYXRhVGFzay0+
c3VnZ2VzdGVkRmlsZW5hbWUoKSk7CkBAIC0zMTQsMTQgKzMxNCwxMSBAQCBzdGF0aWMgTlNVUkxT
ZXNzaW9uQXV0aENoYWxsZW5nZURpc3Bvc2l0aW9uIHRvTlNVUkxTZXNzaW9uQXV0aENoYWxsZW5n
ZURpc3Bvc2l0aQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICAKLXN0YXRpYyBOU1VSTFNlc3Np
b25Db25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uRm9yVHlwZShOZXR3b3JrU2Vzc2lvbjo6VHlw
ZSB0eXBlKQorc3RhdGljIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb25G
b3JTZXNzaW9uSUQoY29uc3QgV2ViQ29yZTo6U2Vzc2lvbklEJiBzZXNzaW9uKQogewotICAgIHN3
aXRjaCAodHlwZSkgewotICAgIGNhc2UgTmV0d29ya1Nlc3Npb246OlR5cGU6Ok5vcm1hbDoKLSAg
ICAgICAgcmV0dXJuIFtOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uIGRlZmF1bHRTZXNzaW9uQ29u
ZmlndXJhdGlvbl07Ci0gICAgY2FzZSBOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsOgor
ICAgIGlmIChzZXNzaW9uLmlzRXBoZW1lcmFsKCkpCiAgICAgICAgIHJldHVybiBbTlNVUkxTZXNz
aW9uQ29uZmlndXJhdGlvbiBlcGhlbWVyYWxTZXNzaW9uQ29uZmlndXJhdGlvbl07Ci0gICAgfQor
ICAgIHJldHVybiBbTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiBkZWZhdWx0U2Vzc2lvbkNvbmZp
Z3VyYXRpb25dOwogfQogCiBzdGF0aWMgUmVmUHRyPEN1c3RvbVByb3RvY29sTWFuYWdlcj4mIGds
b2JhbEN1c3RvbVByb3RvY29sTWFuYWdlcigpCkBAIC0zNjAsNTIgKzM1Nyw1MiBAQCBzdGF0aWMg
U3RyaW5nJiBnbG9iYWxDVERhdGFDb25uZWN0aW9uU2VydmljZVR5cGUoKQogc3RhdGljIGJvb2wg
c2Vzc2lvbnNDcmVhdGVkID0gZmFsc2U7CiAjZW5kaWYKIAotdm9pZCBOZXR3b3JrU2Vzc2lvbjo6
c2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKEN1c3RvbVByb3RvY29sTWFuYWdlciogY3VzdG9tUHJv
dG9jb2xNYW5hZ2VyKQordm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRDdXN0b21Qcm90b2Nv
bE1hbmFnZXIoQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBjdXN0b21Qcm90b2NvbE1hbmFnZXIpCiB7
CiAgICAgQVNTRVJUKCFzZXNzaW9uc0NyZWF0ZWQpOwogICAgIGdsb2JhbEN1c3RvbVByb3RvY29s
TWFuYWdlcigpID0gY3VzdG9tUHJvdG9jb2xNYW5hZ2VyOwogfQogICAgIAotdm9pZCBOZXR3b3Jr
U2Vzc2lvbjo6c2V0U291cmNlQXBwbGljYXRpb25BdWRpdFRva2VuRGF0YShSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiYmIGRhdGEpCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNldFNvdXJjZUFwcGxp
Y2F0aW9uQXVkaXRUb2tlbkRhdGEoUmV0YWluUHRyPENGRGF0YVJlZj4mJiBkYXRhKQogewogICAg
IEFTU0VSVCghc2Vzc2lvbnNDcmVhdGVkKTsKICAgICBnbG9iYWxTb3VyY2VBcHBsaWNhdGlvbkF1
ZGl0VG9rZW5EYXRhKCkgPSBkYXRhOwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uOjpzZXRTb3Vy
Y2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQor
dm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXRTb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50
aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghc2Vzc2lvbnND
cmVhdGVkKTsKICAgICBnbG9iYWxTb3VyY2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKSA9
IGlkZW50aWZpZXI7CiB9CiAKLXZvaWQgTmV0d29ya1Nlc3Npb246OnNldFNvdXJjZUFwcGxpY2F0
aW9uU2Vjb25kYXJ5SWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCit2b2lkIE5l
dHdvcmtTZXNzaW9uQ29jb2E6OnNldFNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmll
cihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFzZXNzaW9uc0NyZWF0
ZWQpOwogICAgIGdsb2JhbFNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcigpID0g
aWRlbnRpZmllcjsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKLXZvaWQgTmV0d29ya1Nlc3Npb246
OnNldENURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit2b2lk
IE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNldENURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZShjb25z
dCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgQVNTRVJUKCFzZXNzaW9uc0NyZWF0ZWQpOwogICAgIGds
b2JhbENURGF0YUNvbm5lY3Rpb25TZXJ2aWNlVHlwZSgpID0gdHlwZTsKIH0KICNlbmRpZgogCi1S
ZWY8TmV0d29ya1Nlc3Npb24+IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoVHlwZSB0eXBlLCBXZWJD
b3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIqIGN1c3RvbVBy
b3RvY29sTWFuYWdlcikKK1JlZjxOZXR3b3JrU2Vzc2lvbj4gTmV0d29ya1Nlc3Npb25Db2NvYTo6
Y3JlYXRlKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdl
ciogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5l
dHdvcmtTZXNzaW9uKHR5cGUsIHNlc3Npb25JRCwgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya1Nlc3Npb25Db2NvYShzZXNzaW9uSUQsIGN1
c3RvbVByb3RvY29sTWFuYWdlcikpOwogfQogCi1OZXR3b3JrU2Vzc2lvbiYgTmV0d29ya1Nlc3Np
b246OmRlZmF1bHRTZXNzaW9uKCkKK05ldHdvcmtTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbkNvY29h
OjpkZWZhdWx0U2Vzc2lvbigpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBz
dGF0aWMgTmV0d29ya1Nlc3Npb24qIHNlc3Npb24gPSAmTmV0d29ya1Nlc3Npb246OmNyZWF0ZShO
ZXR3b3JrU2Vzc2lvbjo6VHlwZTo6Tm9ybWFsLCBXZWJDb3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRT
ZXNzaW9uSUQoKSwgZ2xvYmFsQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKCkuZ2V0KCkpLmxlYWtSZWYo
KTsKKyAgICBzdGF0aWMgTmV0d29ya1Nlc3Npb24qIHNlc3Npb24gPSAmTmV0d29ya1Nlc3Npb25D
b2NvYTo6Y3JlYXRlKFdlYkNvcmU6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBnbG9i
YWxDdXN0b21Qcm90b2NvbE1hbmFnZXIoKS5nZXQoKSkubGVha1JlZigpOwogICAgIHJldHVybiAq
c2Vzc2lvbjsKIH0KIAotTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZSwg
V2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKiBjdXN0
b21Qcm90b2NvbE1hbmFnZXIpCi0gICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCitOZXR3b3Jr
U2Vzc2lvbkNvY29hOjpOZXR3b3JrU2Vzc2lvbkNvY29hKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKQorICAg
IDogTmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKQogewogICAgIHJlbGF4QWRvcHRpb25SZXF1aXJl
bWVudCgpOwogCkBAIC00MTMsNyArNDEwLDcgQEAgTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNz
aW9uKFR5cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHIKICAg
ICBzZXNzaW9uc0NyZWF0ZWQgPSB0cnVlOwogI2VuZGlmCiAKLSAgICBOU1VSTFNlc3Npb25Db25m
aWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbkZvclR5cGUodHlwZSk7Cisg
ICAgTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRp
b25Gb3JTZXNzaW9uSUQobV9zZXNzaW9uSUQpOwogCiAgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2lu
Z2xldG9uKCkuaXNFbmFibGVkKCkpCiAgICAgICAgIGNvbmZpZ3VyYXRpb24uVVJMQ2FjaGUgPSBu
aWw7CkBAIC00NDUsMTEgKzQ0Miw5IEBAIE5ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihU
eXBlIHR5cGUsIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByCiAjZW5kaWYK
IAogICAgIGlmIChzZXNzaW9uSUQgPT0gV2ViQ29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lv
bklEKCkpIHsKLSAgICAgICAgQVNTRVJUKHR5cGUgPT0gVHlwZTo6Tm9ybWFsKTsKICAgICAgICAg
aWYgKENGSFRUUENvb2tpZVN0b3JhZ2VSZWYgc3RvcmFnZSA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCkuY29va2llU3RvcmFnZSgpLmdldCgp
KQogICAgICAgICAgICAgY29uZmlndXJhdGlvbi5IVFRQQ29va2llU3RvcmFnZSA9IFtbW05TSFRU
UENvb2tpZVN0b3JhZ2UgYWxsb2NdIF9pbml0V2l0aENGSFRUUENvb2tpZVN0b3JhZ2U6c3RvcmFn
ZV0gYXV0b3JlbGVhc2VdOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVCh0eXBlID09IFR5
cGU6OkVwaGVtZXJhbCk7CiAgICAgICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpOwogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzdG9yYWdlU2Vzc2lvbik7CiAgICAgICAgIGlmIChDRkhUVFBDb29r
aWVTdG9yYWdlUmVmIHN0b3JhZ2UgPSBzdG9yYWdlU2Vzc2lvbi0+Y29va2llU3RvcmFnZSgpLmdl
dCgpKQpAQCAtNDY1LDI1ICs0NjAsMTggQEAgTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9u
KFR5cGUgdHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHIKICAgICBM
T0coTmV0d29ya1Nlc3Npb24sICJDcmVhdGVkIE5ldHdvcmtTZXNzaW9uIHdpdGggY29va2llQWNj
ZXB0UG9saWN5ICVsdSIsIGNvbmZpZ3VyYXRpb24uSFRUUENvb2tpZVN0b3JhZ2UuY29va2llQWNj
ZXB0UG9saWN5KTsKIH0KIAotTmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbigpCitOZXR3
b3JrU2Vzc2lvbkNvY29hOjp+TmV0d29ya1Nlc3Npb25Db2NvYSgpCiB7CiB9CiAKLXZvaWQgTmV0
d29ya1Nlc3Npb246OmludmFsaWRhdGVBbmRDYW5jZWwoKQordm9pZCBOZXR3b3JrU2Vzc2lvbkNv
Y29hOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKIHsKICAgICBbbV9zZXNzaW9uV2l0aENyZWRlbnRp
YWxTdG9yYWdlIGludmFsaWRhdGVBbmRDYW5jZWxdOwogICAgIFttX3Nlc3Npb25XaXRob3V0Q3Jl
ZGVudGlhbFN0b3JhZ2UgaW52YWxpZGF0ZUFuZENhbmNlbF07CiB9CiAKIAotV2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0b3JhZ2VTZXNzaW9u
KCkgY29uc3QKLXsKLSAgICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24obV9zZXNzaW9uSUQpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKHN0b3JhZ2VTZXNzaW9uKTsKLSAgICByZXR1cm4gKnN0b3JhZ2VTZXNzaW9uOwotfQot
Ci12b2lkIE5ldHdvcmtTZXNzaW9uOjpjbGVhckNyZWRlbnRpYWxzKCkKK3ZvaWQgTmV0d29ya1Nl
c3Npb25Db2NvYTo6Y2xlYXJDcmVkZW50aWFscygpCiB7CiAjaWYgIVVTRShDUkVERU5USUFMX1NU
T1JBR0VfV0lUSF9ORVRXT1JLX1NFU1NJT04pCiAgICAgQVNTRVJUKG1fZGF0YVRhc2tNYXBXaXRo
Q3JlZGVudGlhbHMuaXNFbXB0eSgpKTsKQEAgLTQ5NSw3ICs0ODMsNyBAQCB2b2lkIE5ldHdvcmtT
ZXNzaW9uOjpjbGVhckNyZWRlbnRpYWxzKCkKICNlbmRpZgogfQogCi1OZXR3b3JrRGF0YVRhc2sq
IE5ldHdvcmtTZXNzaW9uOjpkYXRhVGFza0ZvcklkZW50aWZpZXIoTmV0d29ya0RhdGFUYXNrOjpU
YXNrSWRlbnRpZmllciB0YXNrSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMg
c3RvcmVkQ3JlZGVudGlhbHMpCitOZXR3b3JrRGF0YVRhc2tDb2NvYSogTmV0d29ya1Nlc3Npb25D
b2NvYTo6ZGF0YVRhc2tGb3JJZGVudGlmaWVyKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNrSWRl
bnRpZmllciB0YXNrSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVk
Q3JlZGVudGlhbHMpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAoc3Rv
cmVkQ3JlZGVudGlhbHMgPT0gV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHM6OkFsbG93U3RvcmVk
Q3JlZGVudGlhbHMpCkBAIC01MDMsNyArNDkxLDcgQEAgTmV0d29ya0RhdGFUYXNrKiBOZXR3b3Jr
U2Vzc2lvbjo6ZGF0YVRhc2tGb3JJZGVudGlmaWVyKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW4K
ICAgICByZXR1cm4gbV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFscy5nZXQodGFza0lkZW50
aWZpZXIpOwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uOjphZGREb3dubG9hZElEKE5ldHdvcmtE
YXRhVGFzazo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQgZG93bmxv
YWRJRCkKK3ZvaWQgTmV0d29ya1Nlc3Npb25Db2NvYTo6YWRkRG93bmxvYWRJRChOZXR3b3JrRGF0
YVRhc2tDb2NvYTo6VGFza0lkZW50aWZpZXIgdGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQgZG93
bmxvYWRJRCkKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgQVNTRVJUKCFtX2Rvd25sb2FkTWFwLmNv
bnRhaW5zKHRhc2tJZGVudGlmaWVyKSk7CkBAIC01MTMsMTMgKzUwMSwxMyBAQCB2b2lkIE5ldHdv
cmtTZXNzaW9uOjphZGREb3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIg
dGFza0lkZW50aWZpZQogICAgIG1fZG93bmxvYWRNYXAuYWRkKHRhc2tJZGVudGlmaWVyLCBkb3du
bG9hZElEKTsKIH0KIAotRG93bmxvYWRJRCBOZXR3b3JrU2Vzc2lvbjo6ZG93bmxvYWRJRChOZXR3
b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyKQorRG93bmxvYWRJRCBO
ZXR3b3JrU2Vzc2lvbkNvY29hOjpkb3dubG9hZElEKE5ldHdvcmtEYXRhVGFza0NvY29hOjpUYXNr
SWRlbnRpZmllciB0YXNrSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQobV9kb3dubG9hZE1hcC5n
ZXQodGFza0lkZW50aWZpZXIpLmRvd25sb2FkSUQoKSk7CiAgICAgcmV0dXJuIG1fZG93bmxvYWRN
YXAuZ2V0KHRhc2tJZGVudGlmaWVyKTsKIH0KIAotRG93bmxvYWRJRCBOZXR3b3JrU2Vzc2lvbjo6
dGFrZURvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciB0YXNrSWRlbnRp
ZmllcikKK0Rvd25sb2FkSUQgTmV0d29ya1Nlc3Npb25Db2NvYTo6dGFrZURvd25sb2FkSUQoTmV0
d29ya0RhdGFUYXNrQ29jb2E6OlRhc2tJZGVudGlmaWVyIHRhc2tJZGVudGlmaWVyKQogewogICAg
IGF1dG8gZG93bmxvYWRJRCA9IG1fZG93bmxvYWRNYXAudGFrZSh0YXNrSWRlbnRpZmllcik7CiAg
ICAgcmV0dXJuIGRvd25sb2FkSUQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KaW5kZXggY2UwZjcz
Zi4uODlhN2ViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFj
L1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtOTUsNyArOTUsNyBAQCB2
b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9u
KFNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjplbnN1cmVQ
cml2YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25JRCwgYmFzZSArICcuJyArIFN0cmluZzo6bnVt
YmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpOwogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikK
LSAgICBhdXRvIG5ldHdvcmtTZXNzaW9uID0gTmV0d29ya1Nlc3Npb246OmNyZWF0ZShOZXR3b3Jr
U2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsLCBzZXNzaW9uSUQsIE5ldHdvcmtQcm9jZXNzOjpzaW5n
bGV0b24oKS5zdXBwbGVtZW50PEN1c3RvbVByb3RvY29sTWFuYWdlcj4oKSk7CisgICAgYXV0byBu
ZXR3b3JrU2Vzc2lvbiA9IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoc2Vzc2lvbklELCBOZXR3b3Jr
UHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCkp
OwogICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgV1RGTW92ZShuZXR3
b3JrU2Vzc2lvbikpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcAppbmRleCBlNjg3MmUz
Li5jYzc2MTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCisjaW5j
bHVkZSAiTmV0d29ya0RhdGFUYXNrU291cC5oIgogCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25N
YW5hZ2VyLmgiCiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgpAQCAtMzIsNyArMzIsNyBAQAog
I2luY2x1ZGUgIkRvd25sb2FkU291cEVycm9ycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtMb2FkLmgi
CiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKLSNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5o
IgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uU291cC5oIgogI2luY2x1ZGUgIldlYkVycm9ycy5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0hUVFBQYXJzZXJzLmg+CkBAIC00NywzMCArNDcsMTQgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAKIHN0YXRpYyBjb25zdCBzaXplX3QgZ0RlZmF1bHRSZWFkQnVmZmVyU2l6ZSA9IDgx
OTI7CiAKLU5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBz
ZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVk
ZW50aWFscywgQ29udGVudFNuaWZmaW5nUG9saWN5IHNob3VsZENvbnRlbnRTbmlmZiwgYm9vbCBz
aG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQotICAgIDogbV9mYWlsdXJl
VGltZXIoKnRoaXMsICZOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKQotICAgICwg
bV9zZXNzaW9uKCZzZXNzaW9uKQotICAgICwgbV9jbGllbnQoJmNsaWVudCkKLSAgICAsIG1fc3Rv
cmVkQ3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVudGlhbHMpCi0gICAgLCBtX2xhc3RIVFRQTWV0aG9k
KHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMuaHR0cE1ldGhvZCgpKQotICAgICwgbV9maXJzdFJlcXVl
c3QocmVxdWVzdFdpdGhDcmVkZW50aWFscykKLSAgICAsIG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9u
SFRUUFNUb0hUVFBSZWRpcmVjdChzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGly
ZWN0KQorTmV0d29ya0RhdGFUYXNrU291cDo6TmV0d29ya0RhdGFUYXNrU291cChOZXR3b3JrU2Vz
c2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgU3RvcmVkQ3JlZGVudGlhbHMgc3Rv
cmVkQ3JlZGVudGlhbHMsIENvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYs
IGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKKyAgICA6IE5l
dHdvcmtEYXRhVGFzayhzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIHN0
b3JlZENyZWRlbnRpYWxzLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0
KQogICAgICwgbV9zaG91bGRDb250ZW50U25pZmYoc2hvdWxkQ29udGVudFNuaWZmKQotICAgICwg
bV90aW1lb3V0U291cmNlKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJk5ldHdvcmtEYXRhVGFzazo6
dGltZW91dEZpcmVkKQorICAgICwgbV90aW1lb3V0U291cmNlKFJ1bkxvb3A6Om1haW4oKSwgdGhp
cywgJk5ldHdvcmtEYXRhVGFza1NvdXA6OnRpbWVvdXRGaXJlZCkKIHsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotCi0gICAgbV9zZXNzaW9uLT5tX2RhdGFUYXNrU2V0LmFkZCh0aGlzKTsK
LQotICAgIGlmICghcmVxdWVzdFdpdGhDcmVkZW50aWFscy51cmwoKS5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKKyAgICBzdGF0aWNfY2Fz
dDxOZXR3b3JrU2Vzc2lvblNvdXAmPihtX3Nlc3Npb24uZ2V0KCkpLnJlZ2lzdGVyTmV0d29ya0Rh
dGFUYXNrKCp0aGlzKTsKKyAgICBpZiAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1
cmUpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXBvcnRBbGxvd2VkKHJlcXVl
c3RXaXRoQ3JlZGVudGlhbHMudXJsKCkpKSB7Ci0gICAgICAgIHNjaGVkdWxlRmFpbHVyZShCbG9j
a2VkRmFpbHVyZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBhdXRvIHJlcXVlc3Qg
PSByZXF1ZXN0V2l0aENyZWRlbnRpYWxzOwogICAgIGlmIChyZXF1ZXN0LnVybCgpLnByb3RvY29s
SXNJbkhUVFBGYW1pbHkoKSkgewpAQCAtOTMsNDQgKzc3LDEzIEBAIE5ldHdvcmtEYXRhVGFzazo6
TmV0d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tD
bGllbnQmCiAgICAgY3JlYXRlUmVxdWVzdChyZXF1ZXN0KTsKIH0KIAotTmV0d29ya0RhdGFUYXNr
Ojp+TmV0d29ya0RhdGFUYXNrKCkKK05ldHdvcmtEYXRhVGFza1NvdXA6On5OZXR3b3JrRGF0YVRh
c2tTb3VwKCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9j
bGllbnQpOwogICAgIGNsZWFyUmVxdWVzdCgpOwotICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFza1Nl
dC5yZW1vdmUodGhpcyk7Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpzY2hlZHVsZUZhaWx1
cmUoRmFpbHVyZVR5cGUgdHlwZSkKLXsKLSAgICBBU1NFUlQodHlwZSAhPSBOb0ZhaWx1cmUpOwot
ICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSB0eXBlOwotICAgIG1fZmFpbHVyZVRpbWVyLnN0
YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZp
cmVkKCkKLXsKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OwotCi0gICAgc3dpdGNoIChtX3NjaGVkdWxlZEZhaWx1cmVUeXBlKSB7Ci0gICAgY2FzZSBCbG9j
a2VkRmFpbHVyZToKLSAgICAgICAgbV9zY2hlZHVsZWRGYWlsdXJlVHlwZSA9IE5vRmFpbHVyZTsK
LSAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgbV9jbGllbnQtPndhc0Jsb2NrZWQo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSW52YWxpZFVSTEZhaWx1cmU6Ci0gICAgICAg
IG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBOb0ZhaWx1cmU7Ci0gICAgICAgIGlmIChtX2NsaWVu
dCkKLSAgICAgICAgICAgIG1fY2xpZW50LT5jYW5ub3RTaG93VVJMKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIE5vRmFpbHVyZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBzdGF0
aWNfY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAmPihtX3Nlc3Npb24uZ2V0KCkpLnVucmVnaXN0ZXJO
ZXR3b3JrRGF0YVRhc2soKnRoaXMpOwogfQogCi1TdHJpbmcgTmV0d29ya0RhdGFUYXNrOjpzdWdn
ZXN0ZWRGaWxlbmFtZSgpCitTdHJpbmcgTmV0d29ya0RhdGFUYXNrU291cDo6c3VnZ2VzdGVkRmls
ZW5hbWUoKSBjb25zdAogewogICAgIGlmICghbV9zdWdnZXN0ZWRGaWxlbmFtZS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBtX3N1Z2dlc3RlZEZpbGVuYW1lOwpAQCAtMTQyLDIzICs5NSwxMyBA
QCBTdHJpbmcgTmV0d29ya0RhdGFUYXNrOjpzdWdnZXN0ZWRGaWxlbmFtZSgpCiAgICAgcmV0dXJu
IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhtX3Jlc3BvbnNlLnVybCgpLmxhc3RQYXRoQ29tcG9u
ZW50KCkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6c2V0U3VnZ2VzdGVkRmlsZW5hbWUo
Y29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpz
ZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGJvb2wgYWxs
b3dPdmVyd3JpdGUpCiB7Ci0gICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZE5hbWU7
Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihj
b25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBi
b29sIGFsbG93T3ZlcndyaXRlKQotewotICAgIG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBm
aWxlbmFtZTsKKyAgICBOZXR3b3JrRGF0YVRhc2s6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9u
KGZpbGVuYW1lLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBhbGxvd092ZXJ3cml0ZSk7CiAgICAg
bV9hbGxvd092ZXJ3cml0ZURvd25sb2FkID0gYWxsb3dPdmVyd3JpdGU7CiB9CiAKLWJvb2wgTmV0
d29ya0RhdGFUYXNrOjphbGxvd3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgTmV0d29ya0RhdGFUYXNrOjpjcmVhdGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y3JlYXRlUmVxdWVzdChjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiBzb3Vw
VVJJID0gcmVxdWVzdC5jcmVhdGVTb3VwVVJJKCk7CiAgICAgaWYgKCFzb3VwVVJJKSB7CkBAIC0x
NjYsNyArMTA5LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZVJlcXVlc3QoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
R1JlZlB0cjxTb3VwUmVxdWVzdD4gc291cFJlcXVlc3QgPSBhZG9wdEdSZWYoc291cF9zZXNzaW9u
X3JlcXVlc3RfdXJpKG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgc291cFVSSS5nZXQoKSwgbnVs
bHB0cikpOworICAgIEdSZWZQdHI8U291cFJlcXVlc3Q+IHNvdXBSZXF1ZXN0ID0gYWRvcHRHUmVm
KHNvdXBfc2Vzc2lvbl9yZXF1ZXN0X3VyaShzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAm
PihtX3Nlc3Npb24uZ2V0KCkpLnNvdXBTZXNzaW9uKCksIHNvdXBVUkkuZ2V0KCksIG51bGxwdHIp
KTsKICAgICBpZiAoIXNvdXBSZXF1ZXN0KSB7CiAgICAgICAgIHNjaGVkdWxlRmFpbHVyZShJbnZh
bGlkVVJMRmFpbHVyZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTIxOCwxOSArMTYxLDE5IEBAIHZv
aWQgTmV0d29ya0RhdGFUYXNrOjpjcmVhdGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJub3Rp
Znk6OnRscy1lcnJvcnMiLCBHX0NBTExCQUNLKHRsc0Vycm9yc0NoYW5nZWRDYWxsYmFjayksIHRo
aXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9zb3VwTWVzc2FnZS5nZXQoKSwgImdvdC1oZWFk
ZXJzIiwgR19DQUxMQkFDSyhnb3RIZWFkZXJzQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJ3cm90ZS1ib2R5LWRhdGEiLCBHX0NBTExC
QUNLKHdyb3RlQm9keURhdGFDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9zZXNzaW9uLT5zb3VwU2Vzc2lvbigpLCAiYXV0aGVudGljYXRlIiwgIEdfQ0FMTEJBQ0soYXV0
aGVudGljYXRlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHN0YXRpY19j
YXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KG1fc2Vzc2lvbi5nZXQoKSkuc291cFNlc3Npb24oKSwg
ImF1dGhlbnRpY2F0ZSIsICBHX0NBTExCQUNLKGF1dGhlbnRpY2F0ZUNhbGxiYWNrKSwgdGhpcyk7
CiAjaWYgRU5BQkxFKFdFQl9USU1JTkcpCiAgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNz
YWdlLmdldCgpLCAibmV0d29yay1ldmVudCIsIEdfQ0FMTEJBQ0sobmV0d29ya0V2ZW50Q2FsbGJh
Y2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJy
ZXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHJlc3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CiAjaWYgU09V
UF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1l
c3NhZ2UuZ2V0KCksICJzdGFydGluZyIsIEdfQ0FMTEJBQ0soc3RhcnRpbmdDYWxsYmFjayksIHRo
aXMpOwogI2Vsc2UKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fc2Vzc2lvbi0+c291cFNlc3Npb24o
KSwgInJlcXVlc3Qtc3RhcnRlZCIsIEdfQ0FMTEJBQ0socmVxdWVzdFN0YXJ0ZWRDYWxsYmFjayks
IHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25T
b3VwJj4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpLCAicmVxdWVzdC1zdGFydGVkIiwg
R19DQUxMQkFDSyhyZXF1ZXN0U3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CiAjZW5kaWYKICNlbmRp
ZgogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6Y2xlYXJSZXF1ZXN0KCkKK3ZvaWQgTmV0d29y
a0RhdGFUYXNrU291cDo6Y2xlYXJSZXF1ZXN0KCkKIHsKICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0
ZTo6Q29tcGxldGVkKQogICAgICAgICByZXR1cm47CkBAIC0yNDcsMTMgKzE5MCwxMyBAQCB2b2lk
IE5ldHdvcmtEYXRhVGFzazo6Y2xlYXJSZXF1ZXN0KCkKICAgICBtX2NhbmNlbGxhYmxlID0gbnVs
bHB0cjsKICAgICBpZiAobV9zb3VwTWVzc2FnZSkgewogICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X21hdGNoZWQobV9zb3VwTWVzc2FnZS5nZXQoKSwgR19TSUdOQUxfTUFUQ0hf
REFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7Ci0gICAgICAgIHNvdXBfc2Vzc2lv
bl9jYW5jZWxfbWVzc2FnZShtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2Uu
Z2V0KCksIFNPVVBfU1RBVFVTX0NBTkNFTExFRCk7CisgICAgICAgIHNvdXBfc2Vzc2lvbl9jYW5j
ZWxfbWVzc2FnZShzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAmPihtX3Nlc3Npb24uZ2V0
KCkpLnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfU1RBVFVTX0NBTkNF
TExFRCk7CiAgICAgICAgIG1fc291cE1lc3NhZ2UgPSBudWxscHRyOwogICAgIH0KLSAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9zZXNzaW9uLT5zb3VwU2Vzc2lvbigp
LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQoc3RhdGljX2Nhc3Q8TmV0d29y
a1Nlc3Npb25Tb3VwJj4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpLCBHX1NJR05BTF9N
QVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3
b3JrRGF0YVRhc2s6OnJlc3VtZSgpCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlc3VtZSgp
CiB7CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlJ1bm5pbmcpOwogICAgIGlmIChtX3N0
YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQpA
QCAtMjY4LDcgKzIxMSw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXN1bWUoKQogCiAgICAg
c3RhcnRUaW1lb3V0KCk7CiAKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOwogICAgIGlmIChtX3NvdXBSZXF1ZXN0ICYmICFtX2NhbmNlbGxhYmxlKSB7CiAgICAg
ICAgIG1fY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7CiAgICAg
ICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKG1fc291cFJlcXVlc3QuZ2V0KCksIG1fY2FuY2Vs
bGFibGUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oc2VuZFJl
cXVlc3RDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKQEAgLTI4OCw3ICsyMzEs
NyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVzdW1lKCkKICAgICB9CiB9CiAKLXZvaWQgTmV0
d29ya0RhdGFUYXNrOjpzdXNwZW5kKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c3VzcGVu
ZCgpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlN1c3BlbmRlZCk7CiAgICAgaWYg
KG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0
ZWQpCkBAIC0yOTgsNyArMjQxLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN1c3BlbmQoKQog
ICAgIHN0b3BUaW1lb3V0KCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpjYW5jZWwoKQor
dm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjYW5jZWwoKQogewogICAgIGlmIChtX3N0YXRlID09
IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQogICAgICAg
ICByZXR1cm47CkBAIC0zMDYsNyArMjQ5LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNhbmNl
bCgpCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDYW5jZWxpbmc7CiAKICAgICBpZiAobV9zb3VwTWVz
c2FnZSkKLSAgICAgICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlKG1fc2Vzc2lvbi0+c291
cFNlc3Npb24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSwgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsK
KyAgICAgICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlKHN0YXRpY19jYXN0PE5ldHdvcmtT
ZXNzaW9uU291cCY+KG1fc2Vzc2lvbi5nZXQoKSkuc291cFNlc3Npb24oKSwgbV9zb3VwTWVzc2Fn
ZS5nZXQoKSwgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKIAogICAgIGdfY2FuY2VsbGFibGVfY2Fu
Y2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOwogCkBAIC0zMTQsNDMgKzI1Nyw0MyBAQCB2b2lkIE5l
dHdvcmtEYXRhVGFzazo6Y2FuY2VsKCkKICAgICAgICAgY2xlYW5Eb3dubG9hZEZpbGVzKCk7CiB9
CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrU291cDo6aW52YWxpZGF0ZUFuZENhbmNlbCgpCiB7CiAgICAgY2FuY2VsKCk7
CiAgICAgY2xlYXJSZXF1ZXN0KCk7CiB9CiAKLU5ldHdvcmtEYXRhVGFzazo6U3RhdGUgTmV0d29y
a0RhdGFUYXNrOjpzdGF0ZSgpIGNvbnN0CitOZXR3b3JrRGF0YVRhc2s6OlN0YXRlIE5ldHdvcmtE
YXRhVGFza1NvdXA6OnN0YXRlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdGF0ZTsKIH0KIAot
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OnRpbWVvdXRGaXJlZCgpCit2b2lkIE5ldHdvcmtEYXRhVGFz
a1NvdXA6OnRpbWVvdXRGaXJlZCgpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNl
bGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIW1fY2xpZW50KSB7CiAgICAg
ICAgIGNsZWFyUmVxdWVzdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRy
PE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8TmV0d29y
a0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBpbnZhbGlkYXRlQW5kQ2Fu
Y2VsKCk7CiAgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKFJlc291cmNlRXJyb3I6
OnRpbWVvdXRFcnJvcihtX2ZpcnN0UmVxdWVzdC51cmwoKSkpOwogfQogCi12b2lkIE5ldHdvcmtE
YXRhVGFzazo6c3RhcnRUaW1lb3V0KCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c3RhcnRU
aW1lb3V0KCkKIHsKICAgICBpZiAobV9maXJzdFJlcXVlc3QudGltZW91dEludGVydmFsKCkgPiAw
KQogICAgICAgICBtX3RpbWVvdXRTb3VyY2Uuc3RhcnRPbmVTaG90KG1fZmlyc3RSZXF1ZXN0LnRp
bWVvdXRJbnRlcnZhbCgpKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN0b3BUaW1lb3V0
KCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c3RvcFRpbWVvdXQoKQogewogICAgIG1fdGlt
ZW91dFNvdXJjZS5zdG9wKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZW5kUmVxdWVz
dENhbGxiYWNrKFNvdXBSZXF1ZXN0KiBzb3VwUmVxdWVzdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQs
IE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c2VuZFJl
cXVlc3RDYWxsYmFjayhTb3VwUmVxdWVzdCogc291cFJlcXVlc3QsIEdBc3luY1Jlc3VsdCogcmVz
dWx0LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewotICAgIFJlZlB0cjxOZXR3b3JrRGF0
YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBSZWZQdHI8TmV0d29y
a0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOwogICAgIGlmICh0
YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0
ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewogICAgICAgICB0YXNrLT5jbGVhclJl
cXVlc3QoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzcxLDcgKzMxNCw3IEBAIHZvaWQgTmV0d29y
a0RhdGFUYXNrOjpzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiBzb3VwUmVxdWVzdCwg
R0FzeW5jUmVzdWx0CiAgICAgICAgIHRhc2stPmRpZFNlbmRSZXF1ZXN0KFdURk1vdmUoaW5wdXRT
dHJlYW0pKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFNlbmRSZXF1ZXN0KEdSZWZQ
dHI8R0lucHV0U3RyZWFtPiYmIGlucHV0U3RyZWFtKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3Vw
OjpkaWRTZW5kUmVxdWVzdChHUmVmUHRyPEdJbnB1dFN0cmVhbT4mJiBpbnB1dFN0cmVhbSkKIHsK
ICAgICBpZiAobV9zb3VwTWVzc2FnZSkgewogICAgICAgICBpZiAobV9zaG91bGRDb250ZW50U25p
ZmYgPT0gU25pZmZDb250ZW50ICYmIG1fc291cE1lc3NhZ2UtPnN0YXR1c19jb2RlICE9IFNPVVBf
U1RBVFVTX05PVF9NT0RJRklFRCkKQEAgLTQwNSw3ICszNDgsNyBAQCB2b2lkIE5ldHdvcmtEYXRh
VGFzazo6ZGlkU2VuZFJlcXVlc3QoR1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYgaW5wdXRTdHJlYW0p
CiAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpk
aWRSZWNlaXZlUmVzcG9uc2UoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRSZWNlaXZl
UmVzcG9uc2UoKQogewogICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7CiAKQEAgLTQz
Niw3ICszNzksNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVjZWl2ZVJlc3BvbnNlKCkK
ICAgICB9KTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnRsc0Vycm9yc0NoYW5nZWRDYWxs
YmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIEdQYXJhbVNwZWMqLCBOZXR3b3JrRGF0YVRh
c2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnRsc0Vycm9yc0NoYW5nZWRDYWxs
YmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIEdQYXJhbVNwZWMqLCBOZXR3b3JrRGF0YVRh
c2tTb3VwKiB0YXNrKQogewogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxp
bmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVu
dCkgewogICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKQEAgLTQ0NywyMCArMzkwLDIwIEBA
IHZvaWQgTmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2soU291cE1lc3Nh
Z2UqIHNvdXBNZXNzYWdlLCBHUGFyYW1TCiAgICAgdGFzay0+dGxzRXJyb3JzQ2hhbmdlZCgpOwog
fQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6dGxzRXJyb3JzQ2hhbmdlZCgpCit2b2lkIE5ldHdv
cmtEYXRhVGFza1NvdXA6OnRsc0Vycm9yc0NoYW5nZWQoKQogewogICAgIEFTU0VSVChtX3NvdXBS
ZXF1ZXN0KTsKICAgICBTb3VwTmV0d29ya1Nlc3Npb246OmNoZWNrVExTRXJyb3JzKG1fc291cFJl
cXVlc3QuZ2V0KCksIG1fc291cE1lc3NhZ2UuZ2V0KCksIFt0aGlzXSAoY29uc3QgUmVzb3VyY2VF
cnJvciYgZXJyb3IpIHsKICAgICAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CisgICAgICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOwogICAgICAgICBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CiAgICAgICAgIG1fY2xpZW50
LT5kaWRDb21wbGV0ZVdpdGhFcnJvcihlcnJvcik7CiAgICAgfSk7CiB9CiAKLXZvaWQgTmV0d29y
a0RhdGFUYXNrOjphcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6YXBwbHlBdXRoZW50aWNhdGlvblRv
UmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgLy8gV2UgYWx3YXlzIHB1
dCB0aGUgY3JlZGVudGlhbHMgaW50byB0aGUgVVJMLiBJbiB0aGUgQ29jYSBwb3J0IEhUVFAgZmFt
aWx5IGNyZWRlbnRpYWxzIGFyZSBhcHBsaWVkIGluCiAgICAgLy8gdGhlIGRpZFJlY2VpdmVDaGFs
bGVuZ2UgY2FsbGJhY2ssIGJ1dCBsaWJzb3VwIHJlcXVpcmVzIHVzIHRvIHVzZSB0aGlzIG1ldGhv
ZCB0byBvdmVycmlkZQpAQCAtNDgwLDkgKzQyMyw5IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjph
cHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKICAg
ICByZXF1ZXN0LnNldFVSTCh1cmwpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6YXV0aGVu
dGljYXRlQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBzb3VwTWVz
c2FnZSwgU291cEF1dGgqIHNvdXBBdXRoLCBnYm9vbGVhbiByZXRyeWluZywgTmV0d29ya0RhdGFU
YXNrKiB0YXNrKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjphdXRoZW50aWNhdGVDYWxsYmFj
ayhTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBTb3VwQXV0
aCogc291cEF1dGgsIGdib29sZWFuIHJldHJ5aW5nLCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNr
KQogewotICAgIEFTU0VSVChzZXNzaW9uID09IHRhc2stPm1fc2Vzc2lvbi0+c291cFNlc3Npb24o
KSk7CisgICAgQVNTRVJUKHNlc3Npb24gPT0gdGFzay0+c3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Np
b25Tb3VwJj4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigpKTsKICAgICBpZiAoc291cE1l
c3NhZ2UgIT0gdGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC00OTksNyArNDQyLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzQXV0aGVudGljYXRpb25GYWls
dXJlU3RhdHVzQ29kZShpbnQgaHR0cFN0YXR1c0NvZGUpCiAgICAgcmV0dXJuIGh0dHBTdGF0dXND
b2RlID09IFNPVVBfU1RBVFVTX1BST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEIHx8IGh0dHBT
dGF0dXNDb2RlID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRDsKIH0KIAotdm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OmF1dGhlbnRpY2F0ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGNoYWxsZW5n
ZSkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6YXV0aGVudGljYXRlKEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiYgY2hhbGxlbmdlKQogewogICAgIEFTU0VSVChtX3NvdXBNZXNzYWdlKTsKICAg
ICBpZiAobV9zdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKSB7CkBA
IC01MjUsNyArNDY4LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmF1dGhlbnRpY2F0ZShBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYmIGNoYWxsZW5nZSkKICAgICAgICAgfQogICAgIH0KIAotICAg
IHNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlKG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgbV9z
b3VwTWVzc2FnZS5nZXQoKSk7CisgICAgc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2Uoc3RhdGlj
X2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4obV9zZXNzaW9uLmdldCgpKS5zb3VwU2Vzc2lvbigp
LCBtX3NvdXBNZXNzYWdlLmdldCgpKTsKIAogICAgIC8vIFdlIGNvdWxkIGFsc28gZG8gdGhpcyBi
ZWZvcmUgd2UgZXZlbiBzdGFydCB0aGUgcmVxdWVzdCwgYnV0IHRoYXQgd291bGQgYmUgYXQgdGhl
IGV4cGVuc2UKICAgICAvLyBvZiBhbGwgcmVxdWVzdCBsYXRlbmN5LCB2ZXJzdXMgYSBvbmUtdGlt
ZSBsYXRlbmN5IGZvciB0aGUgc21hbGwgc3Vic2V0IG9mIHJlcXVlc3RzIHRoYXQKQEAgLTU0Nyw3
ICs0OTAsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRlKEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJiYgY2hhbGxlbmdlKQogICAgICAgICBjb250aW51ZUF1dGhlbnRpY2F0ZShX
VEZNb3ZlKGNoYWxsZW5nZSkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6Y29udGludWVB
dXRoZW50aWNhdGUoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBjaGFsbGVuZ2UpCit2b2lkIE5l
dHdvcmtEYXRhVGFza1NvdXA6OmNvbnRpbnVlQXV0aGVudGljYXRlKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJiYgY2hhbGxlbmdlKQogewogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQ2hhbGxlbmdl
KGNoYWxsZW5nZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2hhbGxl
bmdlXShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uLCBjb25z
dCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKSB7CiAgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRl
OjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKSB7CkBAIC01NzksMTMg
KzUyMiwxMyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y29udGludWVBdXRoZW50aWNhdGUoQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmJiBjaGFsbGVuZ2UpCiAgICAgICAgICAgICBzb3VwX2F1dGhf
YXV0aGVudGljYXRlKGNoYWxsZW5nZS5zb3VwQXV0aCgpLCBjcmVkZW50aWFsLnVzZXIoKS51dGY4
KCkuZGF0YSgpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAg
IH0KIAotICAgICAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKG1fc2Vzc2lvbi0+c291
cFNlc3Npb24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSk7CisgICAgICAgIHNvdXBfc2Vzc2lvbl91
bnBhdXNlX21lc3NhZ2Uoc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4obV9zZXNzaW9u
LmdldCgpKS5zb3VwU2Vzc2lvbigpLCBtX3NvdXBNZXNzYWdlLmdldCgpKTsKICAgICB9KTsKIH0K
IAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uQ2Fs
bGJhY2soR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5l
dHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c2tpcElucHV0
U3RyZWFtRm9yUmVkaXJlY3Rpb25DYWxsYmFjayhHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCBH
QXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNrU291cCogdGFzaykKIHsKLSAgICBS
ZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFzayk7Cisg
ICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFza1NvdXA+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0
YXNrKTsKICAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2st
PnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpIHsKICAgICAg
ICAgdGFzay0+Y2xlYXJSZXF1ZXN0KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTYwMiwxNSArNTQ1
LDE1IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlv
bkNhbGxiYWNrKEdJbnB1dFN0cmVhbSogaW5wdXRTCiAgICAgICAgIHRhc2stPmRpZEZpbmlzaFNr
aXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNr
Ojpza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpCit2b2lkIE5ldHdvcmtEYXRhVGFza1Nv
dXA6OnNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCkKIHsKICAgICBBU1NFUlQobV9pbnB1
dFN0cmVhbSk7Ci0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
ICAgICBnX2lucHV0X3N0cmVhbV9za2lwX2FzeW5jKG1faW5wdXRTdHJlYW0uZ2V0KCksIGdEZWZh
dWx0UmVhZEJ1ZmZlclNpemUsIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQo
KSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihza2lwSW5w
dXRTdHJlYW1Gb3JSZWRpcmVjdGlvbkNhbGxiYWNrKSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkp
OwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoU2tpcElucHV0U3RyZWFtRm9y
UmVkaXJlY3Rpb24oKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRGaW5pc2hTa2lwSW5w
dXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpCiB7CiAgICAgZ19pbnB1dF9zdHJlYW1fY2xvc2UobV9p
bnB1dFN0cmVhbS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgY29udGludWVIVFRQUmVk
aXJlY3Rpb24oKTsKQEAgLTYzNyw3ICs1ODAsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRSZWRpcmVj
dEFzR0VUKFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBib29sIGNyb3NzT3JpZ2luKQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBOZXR3b3JrRGF0YVRhc2s6OnNob3VsZFN0YXJ0SFRUUFJlZGly
ZWN0aW9uKCkKK2Jvb2wgTmV0d29ya0RhdGFUYXNrU291cDo6c2hvdWxkU3RhcnRIVFRQUmVkaXJl
Y3Rpb24oKQogewogICAgIEFTU0VSVChtX3NvdXBNZXNzYWdlKTsKICAgICBBU1NFUlQoIW1fcmVz
cG9uc2UuaXNOdWxsKCkpOwpAQCAtNjU2LDcgKzU5OSw3IEBAIGJvb2wgTmV0d29ya0RhdGFUYXNr
OjpzaG91bGRTdGFydEhUVFBSZWRpcmVjdGlvbigpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgTmV0d29ya0RhdGFUYXNrOjpjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpCit2b2lkIE5ldHdv
cmtEYXRhVGFza1NvdXA6OmNvbnRpbnVlSFRUUFJlZGlyZWN0aW9uKCkKIHsKICAgICBBU1NFUlQo
bV9zb3VwTWVzc2FnZSk7CiAgICAgQVNTRVJUKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKTsKQEAgLTcy
Nyw5ICs2NzAsOSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y29udGludWVIVFRQUmVkaXJlY3Rp
b24oKQogICAgIH0pOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVhZENhbGxiYWNrKEdJ
bnB1dFN0cmVhbSogaW5wdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0
YVRhc2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlYWRDYWxsYmFjayhHSW5w
dXRTdHJlYW0qIGlucHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFU
YXNrU291cCogdGFzaykKIHsKLSAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRU
aGlzID0gYWRvcHRSZWYodGFzayk7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFza1NvdXA+IHBy
b3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKICAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBT
dGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAo
IXRhc2stPm1fY2xpZW50ICYmICF0YXNrLT5pc0Rvd25sb2FkKCkpKSB7CiAgICAgICAgIHRhc2st
PmNsZWFyUmVxdWVzdCgpOwogICAgICAgICByZXR1cm47CkBAIC03NTIsMTYgKzY5NSwxNiBAQCB2
b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVhZENhbGxiYWNrKEdJbnB1dFN0cmVhbSogaW5wdXRTdHJl
YW0sIEdBc3luY1Jlc3VsdCogcmVzdQogICAgICAgICB0YXNrLT5kaWRGaW5pc2hSZWFkKCk7CiB9
CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZWFkKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291
cDo6cmVhZCgpCiB7Ci0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKICAgICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7CiAgICAgbV9yZWFkQnVmZmVyLmdyb3coZ0Rl
ZmF1bHRSZWFkQnVmZmVyU2l6ZSk7CiAgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhtX2lu
cHV0U3RyZWFtLmdldCgpLCBtX3JlYWRCdWZmZXIuZGF0YSgpLCBtX3JlYWRCdWZmZXIuc2l6ZSgp
LCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCiAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVhZENhbGxiYWNrKSwgcHJvdGVjdGVk
VGhpcy5sZWFrUmVmKCkpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVhZChnc3Np
emUgYnl0ZXNSZWFkKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRSZWFkKGdzc2l6ZSBi
eXRlc1JlYWQpCiB7CiAgICAgbV9yZWFkQnVmZmVyLnNocmluayhieXRlc1JlYWQpOwogICAgIGlm
IChtX2Rvd25sb2FkT3V0cHV0U3RyZWFtKSB7CkBAIC03NzQsNyArNzE3LDcgQEAgdm9pZCBOZXR3
b3JrRGF0YVRhc2s6OmRpZFJlYWQoZ3NzaXplIGJ5dGVzUmVhZCkKICAgICB9CiB9CiAKLXZvaWQg
TmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hSZWFkKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291
cDo6ZGlkRmluaXNoUmVhZCgpCiB7CiAgICAgQVNTRVJUKG1faW5wdXRTdHJlYW0pOwogICAgIGdf
aW5wdXRfc3RyZWFtX2Nsb3NlKG1faW5wdXRTdHJlYW0uZ2V0KCksIG51bGxwdHIsIG51bGxwdHIp
OwpAQCAtNzk0LDkgKzczNyw5IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hSZWFk
KCkKICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoeyB9KTsKIH0KIAotdm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKFNvdXBNdWx0aXBhcnRJbnB1
dFN0cmVhbSogbXVsdGlwYXJ0SW5wdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3
b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlcXVlc3ROZXh0
UGFydENhbGxiYWNrKFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbSogbXVsdGlwYXJ0SW5wdXRTdHJl
YW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewot
ICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNr
KTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0
UmVmKHRhc2spOwogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwg
dGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewog
ICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODE5LDE2
ICs3NjIsMTYgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNr
KFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbSogbXVsdGlwYXIKICAgICAgICAgdGFzay0+ZGlkRmlu
aXNoUmVxdWVzdE5leHRQYXJ0KCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0
TmV4dFBhcnQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZXF1ZXN0TmV4dFBhcnQoKQog
ewotICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAg
UmVmUHRyPE5ldHdvcmtEYXRhVGFza1NvdXA+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgQVNT
RVJUKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0pOwogICAgIEFTU0VSVCghbV9pbnB1dFN0cmVhbSk7
CiAgICAgc291cF9tdWx0aXBhcnRfaW5wdXRfc3RyZWFtX25leHRfcGFydF9hc3luYyhtX211bHRp
cGFydElucHV0U3RyZWFtLmdldCgpLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUu
Z2V0KCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVx
dWVzdE5leHRQYXJ0Q2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CiB9CiAKLXZv
aWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZXF1ZXN0TmV4dFBhcnQoR1JlZlB0cjxHSW5wdXRTdHJl
YW0+JiYgaW5wdXRTdHJlYW0pCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFJlcXVlc3RO
ZXh0UGFydChHUmVmUHRyPEdJbnB1dFN0cmVhbT4mJiBpbnB1dFN0cmVhbSkKIHsKICAgICBBU1NF
UlQoIW1faW5wdXRTdHJlYW0pOwogICAgIG1faW5wdXRTdHJlYW0gPSBXVEZNb3ZlKGlucHV0U3Ry
ZWFtKTsKQEAgLTgzOCw3ICs3ODEsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVxdWVz
dE5leHRQYXJ0KEdSZWZQdHI8R0lucHV0U3RyZWFtPiYmIGlucHV0U3RyZWFtKQogICAgIGRpZFJl
Y2VpdmVSZXNwb25zZSgpOwogfQogCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoUmVx
dWVzdE5leHRQYXJ0KCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkRmluaXNoUmVxdWVz
dE5leHRQYXJ0KCkKIHsKICAgICBBU1NFUlQoIW1faW5wdXRTdHJlYW0pOwogICAgIEFTU0VSVCht
X211bHRpcGFydElucHV0U3RyZWFtKTsKQEAgLTg0Nyw3ICs3OTAsNyBAQCB2b2lkIE5ldHdvcmtE
YXRhVGFzazo6ZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KCkKICAgICBtX2NsaWVudC0+ZGlkQ29t
cGxldGVXaXRoRXJyb3IoeyB9KTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmdvdEhlYWRl
cnNDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFzayogdGFz
aykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Z290SGVhZGVyc0NhbGxiYWNrKFNvdXBNZXNz
YWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYXNrU291cCogdGFzaykKIHsKICAgICBpZiAo
dGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3Rh
dGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpIHsKICAgICAgICAgdGFzay0+Y2xlYXJS
ZXF1ZXN0KCk7CkBAIC04NTcsNyArODAwLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmdvdEhl
YWRlcnNDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGEKICAg
ICB0YXNrLT5kaWRHZXRIZWFkZXJzKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRH
ZXRIZWFkZXJzKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkR2V0SGVhZGVycygpCiB7
CiAgICAgLy8gV2UgYXJlIGEgYml0IG1vcmUgY29uc2VydmF0aXZlIHdpdGggdGhlIHBlcnNpc3Rl
bnQgY3JlZGVudGlhbCBzdG9yYWdlIHRoYW4gdGhlIHNlc3Npb24gc3RvcmUsCiAgICAgLy8gc2lu
Y2Ugd2UgYXJlIHdhaXRpbmcgdW50aWwgd2Uga25vdyB0aGF0IHRoaXMgYXV0aGVudGljYXRpb24g
c3VjY2VlZGVkIGJlZm9yZSBhY3R1YWxseSBzdG9yaW5nLgpAQCAtODcwLDcgKzgxMyw3IEBAIHZv
aWQgTmV0d29ya0RhdGFUYXNrOjpkaWRHZXRIZWFkZXJzKCkKICAgICB9CiB9CiAKLXZvaWQgTmV0
d29ya0RhdGFUYXNrOjp3cm90ZUJvZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNz
YWdlLCBTb3VwQnVmZmVyKiBidWZmZXIsIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrU291cDo6d3JvdGVCb2R5RGF0YUNhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3Vw
TWVzc2FnZSwgU291cEJ1ZmZlciogYnVmZmVyLCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQog
ewogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3Rh
dGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewogICAgICAgICB0
YXNrLT5jbGVhclJlcXVlc3QoKTsKQEAgLTg4MCwxNCArODIzLDE0IEBAIHZvaWQgTmV0d29ya0Rh
dGFUYXNrOjp3cm90ZUJvZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBT
b3VwQnVmZmVyCiAgICAgdGFzay0+ZGlkV3JpdGVCb2R5RGF0YShidWZmZXItPmxlbmd0aCk7CiB9
CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRXcml0ZUJvZHlEYXRhKHVpbnQ2NF90IGJ5dGVz
U2VudCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZGlkV3JpdGVCb2R5RGF0YSh1aW50NjRf
dCBieXRlc1NlbnQpCiB7Ci0gICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhp
cyh0aGlzKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKICAgICBtX2JvZHlEYXRhVG90YWxCeXRlc1NlbnQgKz0gYnl0ZXNTZW50OwogICAgIG1f
Y2xpZW50LT5kaWRTZW5kRGF0YShtX2JvZHlEYXRhVG90YWxCeXRlc1NlbnQsIG1fc291cE1lc3Nh
Z2UtPnJlcXVlc3RfYm9keS0+bGVuZ3RoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRv
d25sb2FkKCkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6ZG93bmxvYWQoKQogewogICAgIEFT
U0VSVChpc0Rvd25sb2FkKCkpOwogICAgIEFTU0VSVChtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9u
KTsKQEAgLTkzMSw5ICs4NzQsOSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZG93bmxvYWQoKQog
ICAgIHJlYWQoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2s6OndyaXRlRG93bmxvYWRDYWxs
YmFjayhHT3V0cHV0U3RyZWFtKiBvdXRwdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBO
ZXR3b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OndyaXRlRG93
bmxvYWRDYWxsYmFjayhHT3V0cHV0U3RyZWFtKiBvdXRwdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCog
cmVzdWx0LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewotICAgIFJlZlB0cjxOZXR3b3Jr
RGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBSZWZQdHI8TmV0
d29ya0RhdGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOwogICAgIGlm
ICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBT
dGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5pc0Rvd25sb2FkKCkpIHsKICAgICAgICAgdGFzay0+
Y2xlYXJSZXF1ZXN0KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTk1NSw5ICs4OTgsOSBAQCB2b2lk
IE5ldHdvcmtEYXRhVGFzazo6d3JpdGVEb3dubG9hZENhbGxiYWNrKEdPdXRwdXRTdHJlYW0qIG91
dHB1dFN0cmVhbSwgR0FzeW5jUgogICAgICAgICB0YXNrLT5kaWRXcml0ZURvd25sb2FkKGJ5dGVz
V3JpdHRlbik7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjp3cml0ZURvd25sb2FkKCkKK3Zv
aWQgTmV0d29ya0RhdGFUYXNrU291cDo6d3JpdGVEb3dubG9hZCgpCiB7Ci0gICAgUmVmUHRyPE5l
dHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWZQdHI8TmV0d29ya0Rh
dGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICNpZiBHTElCX0NIRUNLX1ZFUlNJT04o
MiwgNDQsIDApCiAgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FsbF9hc3luYyhtX2Rvd25sb2Fk
T3V0cHV0U3RyZWFtLmdldCgpLCBtX3JlYWRCdWZmZXIuZGF0YSgpLCBtX3JlYWRCdWZmZXIuc2l6
ZSgpLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCiAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4od3JpdGVEb3dubG9hZENhbGxiYWNr
KSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOwpAQCAtOTY2LDcgKzkwOSw3IEBAIHZvaWQgTmV0
d29ya0RhdGFUYXNrOjp3cml0ZURvd25sb2FkKCkKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxH
QXN5bmNSZWFkeUNhbGxiYWNrPih3cml0ZURvd25sb2FkQ2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlz
LmxlYWtSZWYoKSkpOwogICAgIGdfdGFza19zZXRfdGFza19kYXRhKHdyaXRlVGFzay5nZXQoKSwg
dGhpcywgbnVsbHB0cik7CiAgICAgZ190YXNrX3J1bl9pbl90aHJlYWQod3JpdGVUYXNrLmdldCgp
LCBbXShHVGFzayogd3JpdGVUYXNrLCBncG9pbnRlciBzb3VyY2UsIGdwb2ludGVyIHVzZXJEYXRh
LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlKSB7Ci0gICAgICAgIGF1dG8qIHRhc2sgPSBzdGF0
aWNfY2FzdDxOZXR3b3JrRGF0YVRhc2sqPih1c2VyRGF0YSk7CisgICAgICAgIGF1dG8qIHRhc2sg
PSBzdGF0aWNfY2FzdDxOZXR3b3JrRGF0YVRhc2tTb3VwKj4odXNlckRhdGEpOwogICAgICAgICBH
T3V0cHV0U3RyZWFtKiBvdXRwdXRTdHJlYW0gPSBHX09VVFBVVF9TVFJFQU0oc291cmNlKTsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodGFzay0+bV9kb3dubG9hZE91dHB1dFN0cmVhbS5nZXQoKSA9
PSBvdXRwdXRTdHJlYW0pOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YXNrLT5tX2NhbmNlbGxh
YmxlLmdldCgpID09IGNhbmNlbGxhYmxlKTsKQEAgLTk4NSw3ICs5MjgsNyBAQCB2b2lkIE5ldHdv
cmtEYXRhVGFzazo6d3JpdGVEb3dubG9hZCgpCiAjZW5kaWYKIH0KIAotdm9pZCBOZXR3b3JrRGF0
YVRhc2s6OmRpZFdyaXRlRG93bmxvYWQoZ3NpemUgYnl0ZXNXcml0dGVuKQordm9pZCBOZXR3b3Jr
RGF0YVRhc2tTb3VwOjpkaWRXcml0ZURvd25sb2FkKGdzaXplIGJ5dGVzV3JpdHRlbikKIHsKICAg
ICBBU1NFUlQoYnl0ZXNXcml0dGVuID09IG1fcmVhZEJ1ZmZlci5zaXplKCkpOwogICAgIGF1dG8q
IGRvd25sb2FkID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigp
LmRvd25sb2FkKG1fcGVuZGluZ0Rvd25sb2FkSUQpOwpAQCAtOTk0LDcgKzkzNyw3IEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrOjpkaWRXcml0ZURvd25sb2FkKGdzaXplIGJ5dGVzV3JpdHRlbikKICAg
ICByZWFkKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hEb3dubG9hZCgp
Cit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZEZpbmlzaERvd25sb2FkKCkKIHsKICAgICBB
U1NFUlQoIW1fcmVzcG9uc2UuaXNOdWxsKCkpOwogICAgIEFTU0VSVChtX2Rvd25sb2FkT3V0cHV0
U3RyZWFtKTsKQEAgLTEwMjEsNyArOTY0LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZp
bmlzaERvd25sb2FkKCkKICAgICBkb3dubG9hZC0+ZGlkRmluaXNoKCk7CiB9CiAKLXZvaWQgTmV0
d29ya0RhdGFUYXNrOjpkaWRGYWlsRG93bmxvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Ip
Cit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZEZhaWxEb3dubG9hZChjb25zdCBSZXNvdXJj
ZUVycm9yJiBlcnJvcikKIHsKICAgICBjbGVhclJlcXVlc3QoKTsKICAgICBjbGVhbkRvd25sb2Fk
RmlsZXMoKTsKQEAgLTEwMzQsNyArOTc3LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZh
aWxEb3dubG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICB9CiB9CiAKLXZvaWQg
TmV0d29ya0RhdGFUYXNrOjpjbGVhbkRvd25sb2FkRmlsZXMoKQordm9pZCBOZXR3b3JrRGF0YVRh
c2tTb3VwOjpjbGVhbkRvd25sb2FkRmlsZXMoKQogewogICAgIGlmIChtX2Rvd25sb2FkRGVzdGlu
YXRpb25GaWxlKSB7CiAgICAgICAgIGdfZmlsZV9kZWxldGUobV9kb3dubG9hZERlc3RpbmF0aW9u
RmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CkBAIC0xMDQ2LDcgKzk4OSw3IEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrOjpjbGVhbkRvd25sb2FkRmlsZXMoKQogICAgIH0KIH0KIAotdm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lk
IE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Ip
CiB7CiAgICAgaWYgKGlzRG93bmxvYWQoKSkgewogICAgICAgICBkaWRGYWlsRG93bmxvYWQocGxh
dGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihlcnJvci5lcnJvckNvZGUoKSwgZXJyb3IuZmFpbGlu
Z1VSTCgpLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpKSk7CkBAIC0xMDU5LDcgKzEwMDIs
NyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKIH0KIAogI2lmIEVOQUJMRShXRUJfVElNSU5HKQotdm9pZCBOZXR3b3JrRGF0YVRhc2s6
Om5ldHdvcmtFdmVudENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgR1NvY2tldENs
aWVudEV2ZW50IGV2ZW50LCBHSU9TdHJlYW0qLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit2b2lk
IE5ldHdvcmtEYXRhVGFza1NvdXA6Om5ldHdvcmtFdmVudENhbGxiYWNrKFNvdXBNZXNzYWdlKiBz
b3VwTWVzc2FnZSwgR1NvY2tldENsaWVudEV2ZW50IGV2ZW50LCBHSU9TdHJlYW0qLCBOZXR3b3Jr
RGF0YVRhc2tTb3VwKiB0YXNrKQogewogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpD
YW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5t
X2NsaWVudCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA2OCw3ICsxMDExLDcgQEAgdm9pZCBOZXR3
b3JrRGF0YVRhc2s6Om5ldHdvcmtFdmVudENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2Fn
ZSwgR1NvY2tldENsaWUKICAgICB0YXNrLT5uZXR3b3JrRXZlbnQoZXZlbnQpOwogfQogCi12b2lk
IE5ldHdvcmtEYXRhVGFzazo6bmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCBldmVudCkK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6bmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVu
dCBldmVudCkKIHsKICAgICBkb3VibGUgZGVsdGFUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNp
bmdUaW1lTVMoKSAtIG1fc3RhcnRUaW1lOwogICAgIGF1dG8mIGxvYWRUaW1pbmcgPSBtX3Jlc3Bv
bnNlLm5ldHdvcmtMb2FkVGltaW5nKCk7CkBAIC0xMTA1LDcgKzEwNDgsNyBAQCB2b2lkIE5ldHdv
cmtEYXRhVGFzazo6bmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCBldmVudCkKIH0KIAog
I2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA0OSwgOTEpCi12b2lkIE5ldHdvcmtEYXRhVGFzazo6
c3RhcnRpbmdDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFz
ayogdGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c3RhcnRpbmdDYWxsYmFjayhTb3Vw
TWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFza1NvdXAqIHRhc2spCiB7CiAgICAg
aWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09
IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KQogICAgICAgICByZXR1cm47CkBA
IC0xMTE0LDkgKzEwNTcsOSBAQCB2b2lkIE5ldHdvcmtEYXRhVGFzazo6c3RhcnRpbmdDYWxsYmFj
ayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFzawogICAgIHRhc2stPmRp
ZFN0YXJ0UmVxdWVzdCgpOwogfQogI2Vsc2UKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0
U3RhcnRlZENhbGxiYWNrKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogc291cE1l
c3NhZ2UsIFNvdXBTb2NrZXQqLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit2b2lkIE5ldHdvcmtE
YXRhVGFza1NvdXA6OnJlcXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24s
IFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cFNvY2tldCosIE5ldHdvcmtEYXRhVGFza1Nv
dXAqIHRhc2spCiB7Ci0gICAgQVNTRVJUKHNlc3Npb24gPT0gdGFzay0+bV9zZXNzaW9uLT5zb3Vw
U2Vzc2lvbigpKTsKKyAgICBBU1NFUlQoc2Vzc2lvbiA9PSB0YXNrLT5zdGF0aWNfY2FzdDxOZXR3
b3JrU2Vzc2lvblNvdXAmPihtX3Nlc3Npb24uZ2V0KCkpLnNvdXBTZXNzaW9uKCkpOwogICAgIGlm
IChzb3VwTWVzc2FnZSAhPSB0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpKQogICAgICAgICByZXR1
cm47CiAKQEAgLTExMjcsMTIgKzEwNzAsMTIgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVl
c3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKgogfQog
I2VuZGlmCiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRTdGFydFJlcXVlc3QoKQordm9pZCBO
ZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRTdGFydFJlcXVlc3QoKQogewogICAgIG1fcmVzcG9uc2Uu
bmV0d29ya0xvYWRUaW1pbmcoKS5yZXF1ZXN0U3RhcnQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWVNUygpIC0gbV9zdGFydFRpbWU7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXN0
YXJ0ZWRDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFzayog
dGFzaykKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6cmVzdGFydGVkQ2FsbGJhY2soU291cE1l
c3NhZ2UqIHNvdXBNZXNzYWdlLCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQogewogICAgIC8v
IENhbGxlZCBlYWNoIHRpbWUgdGhlIG1lc3NhZ2UgaXMgZ29pbmcgdG8gYmUgc2VudCBhZ2FpbiBl
eGNlcHQgdGhlIGZpcnN0IHRpbWUuCiAgICAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gbGlic291cCBo
YW5kbGVzIEhUVFAgYXV0aGVudGljYXRpb24uCkBAIC0xMTQzLDcgKzEwODYsNyBAQCB2b2lkIE5l
dHdvcmtEYXRhVGFzazo6cmVzdGFydGVkQ2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdl
LCBOZXR3b3JrRGF0YVRhcwogICAgIHRhc2stPmRpZFJlc3RhcnQoKTsKIH0KIAotdm9pZCBOZXR3
b3JrRGF0YVRhc2s6OmRpZFJlc3RhcnQoKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRS
ZXN0YXJ0KCkKIHsKICAgICBtX3N0YXJ0VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZU1TKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtEYXRhVGFza1NvdXAuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya0RhdGFUYXNrU291cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmM4ZmExYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaApAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUHJvdGVj
dGlvblNwYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5j
bHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBOZXR3b3JrRGF0YVRhc2tTb3VwIGZpbmFsIDogcHVi
bGljIE5ldHdvcmtEYXRhVGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrRGF0
YVRhc2s+IGNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xp
ZW50JiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2Vi
Q29yZTo6U3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRl
bnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZl
cnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE5ldHdvcmtEYXRhVGFza1NvdXAoc2Vzc2lvbiwgY2xpZW50LCByZXF1ZXN0LCBzdG9y
ZWRDcmVkZW50aWFscywgc2hvdWxkQ29udGVudFNuaWZmLCBzaG91bGRDbGVhclJlZmVycmVyT25I
VFRQU1RvSFRUUFJlZGlyZWN0KSk7CisgICAgfQorCisgICAgfk5ldHdvcmtEYXRhVGFza1NvdXAo
KTsKKworICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbCgpOworCitwcml2YXRlOgorICAgIE5l
dHdvcmtEYXRhVGFza1NvdXAoTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQm
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50
aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5LCBib29sIHNob3VsZENsZWFyUmVm
ZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOworCisgICAgdm9pZCBzdXNwZW5kKCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlc3VtZSgpIG92ZXJy
aWRlOworICAgIE5ldHdvcmtEYXRhVGFzazo6U3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZTsK
KworICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5nJiwgY29u
c3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCAvKmFsbG93T3ZlcndyaXRlKi8pIG92
ZXJyaWRlOworICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgdm9pZCB0aW1lb3V0RmlyZWQoKTsKKyAgICB2b2lkIHN0YXJ0VGltZW91dCgpOworICAg
IHZvaWQgc3RvcFRpbWVvdXQoKTsKKworICAgIHZvaWQgY3JlYXRlUmVxdWVzdChjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIGNsZWFyUmVxdWVzdCgpOworICAgIHN0
YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soU291cFJlcXVlc3QqLCBHQXN5bmNSZXN1bHQq
LCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCBkaWRTZW5kUmVxdWVzdChHUmVmUHRy
PEdJbnB1dFN0cmVhbT4mJik7CisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKKworICAg
IHN0YXRpYyB2b2lkIHRsc0Vycm9yc0NoYW5nZWRDYWxsYmFjayhTb3VwTWVzc2FnZSosIEdQYXJh
bVNwZWMqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCB0bHNFcnJvcnNDaGFuZ2Vk
KCk7CisKKyAgICB2b2lkIGFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QoV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Jik7CisgICAgc3RhdGljIHZvaWQgYXV0aGVudGljYXRlQ2FsbGJhY2soU291
cFNlc3Npb24qLCBTb3VwTWVzc2FnZSosIFNvdXBBdXRoKiwgZ2Jvb2xlYW4gcmV0cnlpbmcsIE5l
dHdvcmtEYXRhVGFza1NvdXAqKTsKKyAgICB2b2lkIGF1dGhlbnRpY2F0ZShXZWJDb3JlOjpBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYmKTsKKyAgICB2b2lkIGNvbnRpbnVlQXV0aGVudGljYXRlKFdl
YkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYpOworCisgICAgc3RhdGljIHZvaWQgc2tp
cElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25DYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5bmNS
ZXN1bHQqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCBza2lwSW5wdXRTdHJlYW1G
b3JSZWRpcmVjdGlvbigpOworICAgIHZvaWQgZGlkRmluaXNoU2tpcElucHV0U3RyZWFtRm9yUmVk
aXJlY3Rpb24oKTsKKyAgICBib29sIHNob3VsZFN0YXJ0SFRUUFJlZGlyZWN0aW9uKCk7CisgICAg
dm9pZCBjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpOworCisgICAgc3RhdGljIHZvaWQgcmVhZENh
bGxiYWNrKEdJbnB1dFN0cmVhbSosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFza1NvdXAq
KTsKKyAgICB2b2lkIHJlYWQoKTsKKyAgICB2b2lkIGRpZFJlYWQoZ3NzaXplIGJ5dGVzUmVhZCk7
CisgICAgdm9pZCBkaWRGaW5pc2hSZWFkKCk7CisKKyAgICBzdGF0aWMgdm9pZCByZXF1ZXN0TmV4
dFBhcnRDYWxsYmFjayhTb3VwTXVsdGlwYXJ0SW5wdXRTdHJlYW0qLCBHQXN5bmNSZXN1bHQqLCBO
ZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCByZXF1ZXN0TmV4dFBhcnQoKTsKKyAgICB2
b2lkIGRpZFJlcXVlc3ROZXh0UGFydChHUmVmUHRyPEdJbnB1dFN0cmVhbT4mJik7CisgICAgdm9p
ZCBkaWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQoKTsKKworICAgIHN0YXRpYyB2b2lkIGdvdEhlYWRl
cnNDYWxsYmFjayhTb3VwTWVzc2FnZSosIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKKyAgICB2b2lk
IGRpZEdldEhlYWRlcnMoKTsKKworICAgIHN0YXRpYyB2b2lkIHdyb3RlQm9keURhdGFDYWxsYmFj
ayhTb3VwTWVzc2FnZSosIFNvdXBCdWZmZXIqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAg
dm9pZCBkaWRXcml0ZUJvZHlEYXRhKHVpbnQ2NF90IGJ5dGVzU2VudCk7CisKKyAgICB2b2lkIGRv
d25sb2FkKCk7CisgICAgc3RhdGljIHZvaWQgd3JpdGVEb3dubG9hZENhbGxiYWNrKEdPdXRwdXRT
dHJlYW0qLCBHQXN5bmNSZXN1bHQqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCB3
cml0ZURvd25sb2FkKCk7CisgICAgdm9pZCBkaWRXcml0ZURvd25sb2FkKGdzaXplIGJ5dGVzV3Jp
dHRlbik7CisgICAgdm9pZCBkaWRGYWlsRG93bmxvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciYpOworICAgIHZvaWQgZGlkRmluaXNoRG93bmxvYWQoKTsKKyAgICB2b2lkIGNsZWFuRG93
bmxvYWRGaWxlcygpOworCisgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImKTsKKworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIHN0YXRpYyB2b2lkIG5ldHdv
cmtFdmVudENhbGxiYWNrKFNvdXBNZXNzYWdlKiwgR1NvY2tldENsaWVudEV2ZW50LCBHSU9TdHJl
YW0qLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAgdm9pZCBuZXR3b3JrRXZlbnQoR1NvY2tl
dENsaWVudEV2ZW50KTsKKyNpZiBTT1VQX0NIRUNLX1ZFUlNJT04oMiwgNDksIDkxKQorICAgIHN0
YXRpYyB2b2lkIHN0YXJ0aW5nQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2tT
b3VwKik7CisjZWxzZQorICAgIHN0YXRpYyB2b2lkIHJlcXVlc3RTdGFydGVkQ2FsbGJhY2soU291
cFNlc3Npb24qLCBTb3VwTWVzc2FnZSosIFNvdXBTb2NrZXQqLCBOZXR3b3JrRGF0YVRhc2tTb3Vw
Kik7CisjZW5kaWYKKyAgICB2b2lkIGRpZFN0YXJ0UmVxdWVzdCgpOworICAgIHN0YXRpYyB2b2lk
IHJlc3RhcnRlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrU291cCopOwor
ICAgIHZvaWQgZGlkUmVzdGFydCgpOworI2VuZGlmIC8vIEVOQUJMRShXRUJfVElNSU5HKQorCisg
ICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpTdXNwZW5kZWQgfTsKKyAgICBXZWJDb3JlOjpDb250
ZW50U25pZmZpbmdQb2xpY3kgbV9zaG91bGRDb250ZW50U25pZmY7CisgICAgR1JlZlB0cjxTb3Vw
UmVxdWVzdD4gbV9zb3VwUmVxdWVzdDsKKyAgICBHUmVmUHRyPFNvdXBNZXNzYWdlPiBtX3NvdXBN
ZXNzYWdlOworICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFtOworICAgIEdS
ZWZQdHI8U291cE11bHRpcGFydElucHV0U3RyZWFtPiBtX211bHRpcGFydElucHV0U3RyZWFtOwor
ICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOworICAgIEdSZWZQdHI8R0Fz
eW5jUmVzdWx0PiBtX3BlbmRpbmdSZXN1bHQ7CisgICAgV2ViQ29yZTo6UHJvdGVjdGlvblNwYWNl
IG1fcHJvdGVjdGlvblNwYWNlRm9yUGVyc2lzdGVudFN0b3JhZ2U7CisgICAgV2ViQ29yZTo6Q3Jl
ZGVudGlhbCBtX2NyZWRlbnRpYWxGb3JQZXJzaXN0ZW50U3RvcmFnZTsKKyAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CisgICAgVmVjdG9yPGNoYXI+IG1fcmVhZEJ1ZmZl
cjsKKyAgICB1bnNpZ25lZCBtX3JlZGlyZWN0Q291bnQgeyAwIH07CisgICAgdWludDY0X3QgbV9i
b2R5RGF0YVRvdGFsQnl0ZXNTZW50IHsgMCB9OworICAgIEdSZWZQdHI8R0ZpbGU+IG1fZG93bmxv
YWREZXN0aW5hdGlvbkZpbGU7CisgICAgR1JlZlB0cjxHRmlsZT4gbV9kb3dubG9hZEludGVybWVk
aWF0ZUZpbGU7CisgICAgR1JlZlB0cjxHT3V0cHV0U3RyZWFtPiBtX2Rvd25sb2FkT3V0cHV0U3Ry
ZWFtOworICAgIGJvb2wgbV9hbGxvd092ZXJ3cml0ZURvd25sb2FkIHsgZmFsc2UgfTsKKyNpZiBF
TkFCTEUoV0VCX1RJTUlORykKKyAgICBkb3VibGUgbV9zdGFydFRpbWUgeyAwIH07CisjZW5kaWYK
KyAgICBSdW5Mb29wOjpUaW1lcjxOZXR3b3JrRGF0YVRhc2tTb3VwPiBtX3RpbWVvdXRTb3VyY2U7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcAppbmRleCAzNGMy
Yzc3Li5hYzgyODcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCkBAIC0yNCw4ICsyNCw5IEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5j
bHVkZSAiTmV0d29ya1Nlc3Npb25Tb3VwLmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2tT
b3VwLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CkBAIC0zNCw0NyArMzUsMjQgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1SZWY8TmV0d29ya1Nlc3Npb24+IE5ldHdvcmtTZXNzaW9uOjpj
cmVhdGUoVHlwZSB0eXBlLCBTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFn
ZXIqKQorTmV0d29ya1Nlc3Npb25Tb3VwOjpOZXR3b3JrU2Vzc2lvblNvdXAoU2Vzc2lvbklEIHNl
c3Npb25JRCkKKyAgICA6IE5ldHdvcmtTZXNzaW9uKHNlc3Npb25JRCkKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBOZXR3b3JrU2Vzc2lvbih0eXBlLCBzZXNzaW9uSUQsIG51bGxwdHIpKTsK
IH0KIAotTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpkZWZhdWx0U2Vzc2lvbigpCitO
ZXR3b3JrU2Vzc2lvblNvdXA6On5OZXR3b3JrU2Vzc2lvblNvdXAoKQogewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uID0gJk5l
dHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Npb246OlR5cGU6Ok5vcm1hbCwgU2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIG51bGxwdHIpLmxlYWtSZWYoKTsKLSAgICByZXR1cm4g
KnNlc3Npb247CiB9CiAKLU5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29ya1Nlc3Npb246Om5l
dHdvcmtTdG9yYWdlU2Vzc2lvbigpIGNvbnN0Ci17Ci0gICAgYXV0byogc3RvcmFnZVNlc3Npb24g
PSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9uKG1fc2Vzc2lvbklEKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChzdG9yYWdlU2Vzc2lvbik7Ci0gICAgcmV0dXJuICpzdG9yYWdlU2Vz
c2lvbjsKLX0KLQotTmV0d29ya1Nlc3Npb246Ok5ldHdvcmtTZXNzaW9uKFR5cGUgdHlwZSwgU2Vz
c2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKikKLSAgICA6IG1fc2Vzc2lv
bklEKHNlc3Npb25JRCkKLXsKLX0KLQotTmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lvbigp
Ci17Ci19Ci0KLVNvdXBTZXNzaW9uKiBOZXR3b3JrU2Vzc2lvbjo6c291cFNlc3Npb24oKSBjb25z
dAorU291cFNlc3Npb24qIE5ldHdvcmtTZXNzaW9uU291cDo6c291cFNlc3Npb24oKSBjb25zdAog
ewogICAgIHJldHVybiBuZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5zb3VwTmV0d29ya1Nlc3Npb24o
KS5zb3VwU2Vzc2lvbigpOwogfQogCi12b2lkIE5ldHdvcmtTZXNzaW9uOjppbnZhbGlkYXRlQW5k
Q2FuY2VsKCkKK3ZvaWQgTmV0d29ya1Nlc3Npb25Tb3VwOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkK
IHsKICAgICBmb3IgKGF1dG8qIHRhc2sgOiBtX2RhdGFUYXNrU2V0KQogICAgICAgICB0YXNrLT5p
bnZhbGlkYXRlQW5kQ2FuY2VsKCk7CiB9CiAKLXZvaWQgTmV0d29ya1Nlc3Npb246OmNsZWFyQ3Jl
ZGVudGlhbHMoKQotewotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmggYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NWZiODgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291
cC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK3R5cGVkZWYgc3RydWN0IF9Tb3VwU2Vzc2lv
biBTb3VwU2Vzc2lvbjsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtEYXRh
VGFza1NvdXA7CisKK2NsYXNzIE5ldHdvcmtTZXNzaW9uU291cCBmaW5hbCA6IHB1YmxpYyBOZXR3
b3JrU2Vzc2lvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrU2Vzc2lvbj4gY3Jl
YXRlKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBOZXR3b3JrU2Vzc2lvblNvdXAoc2Vzc2lvbklEKSk7CisgICAgfQorICAg
IH5OZXR3b3JrU2Vzc2lvblNvdXAoKTsKKworICAgIFNvdXBTZXNzaW9uKiBzb3VwU2Vzc2lvbigp
IGNvbnN0OworCisgICAgdm9pZCByZWdpc3Rlck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRh
c2tTb3VwJiB0YXNrKSB7IG1fZGF0YVRhc2tTZXQuYWRkKCZ0YXNrKTsgfQorICAgIHZvaWQgdW5y
ZWdpc3Rlck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2tTb3VwJiB0YXNrKSB7IG1fZGF0
YVRhc2tTZXQucmVtb3ZlKCZ0YXNrKTsgfQorCitwcml2YXRlOgorICAgIE5ldHdvcmtTZXNzaW9u
U291cChXZWJDb3JlOjpTZXNzaW9uSUQpOworCisgICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2Vs
KCkgb3ZlcnJpZGU7CisKKyAgICBIYXNoU2V0PE5ldHdvcmtEYXRhVGFza1NvdXAqPiBtX2RhdGFU
YXNrU2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0U291cC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdD
b250ZXh0U291cC5jcHAKaW5kZXggOGZiNjRmYS4uMmRiYTEwNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29y
a2luZ0NvbnRleHRTb3VwLmNwcApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIFJlbW90ZU5ldHdvcmtp
bmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9u
SUQpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZW5zdXJl
UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihzZXNzaW9uSUQsIFN0cmluZzo6bnVtYmVyKHNlc3Npb25J
RC5zZXNzaW9uSUQoKSkpOwotICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25J
RCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFs
LCBzZXNzaW9uSUQsIG51bGxwdHIpKTsKKyAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihz
ZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoc2Vzc2lvbklEKSk7CiB9CiAKIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9u
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggYmFiZjJhNy4uN2Q5YTAzNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTI0OSw2ICsyNDksNyBAQCBsaXN0KEFQUEVO
RCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29y
a1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL3NvdXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwIgogICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJv
Y2Vzcy9lZmwiCisgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL3NvdXAiCiAgICAg
IiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL3VuaXgiCiAgICAgIiR7V0VCS0lUMl9ESVJ9
L1BsYXRmb3JtL2VmbCIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0FQSS9jL2VmbCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggNmZiZGEyMi4uNzU5NTlhMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1HVEsuY21ha2UKQEAgLTg0NSw2ICs4NDUsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX0lO
Q0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvQ3Vz
dG9tUHJvdG9jb2xzL3NvdXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9zb3VwIgogICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9ndGsiCisg
ICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL3NvdXAiCiAgICAgIiR7V0VCS0lUMl9E
SVJ9L05ldHdvcmtQcm9jZXNzL3VuaXgiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1BsYXRmb3JtL0lQ
Qy9nbGliIgogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvQVBJL2MvZ3RrIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE3ZWE2
NzMuLjU2YThiY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTEwMzksNiArMTAzOSwxMCBAQAogCQk1MkQ1QTFCMDFDNTc0OTVB
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQTFDNTc0OTRFMDBERTM0
QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi87IH07CiAJCTUyRDVBMUIx
MUM1NzQ5NjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQzFDNTc0
OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovOyB9Owog
CQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUI0
MUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovOyB9Owor
CQk1MzIxNTk1MzFEQkFFNzE4MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NTIxREJBRTZGQzAw
NTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uLmNwcCAqLzsgfTsKKwkJNTMyMTU5NTQxREJBRTcxRDAw
NTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzIxNTk1MTFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya0Rh
dGFUYXNrLmNwcCAqLzsgfTsKKwkJNTMyMTU5NTUxREJBRTcyOTAwNTRBQTNDIC8qIE5ldHdvcmtT
ZXNzaW9uQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzMjE1OTUwMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggKi87
IH07CisJCTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NEYx
REJBRTZENzAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggKi87IH07CiAJCTVDMDUy
RjI2MUM2RDNCRDMwMDc2RTkxOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMDUyRjI0MUM2RDNB
QjYwMDc2RTkxOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSAqLzsgfTsKIAkJNUMx
NDI2RUMxQzIzRjgwOTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQy
NkUyMUMyM0Y4MDUwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHAgKi87IH07CiAJCTVDMTQyNkVEMUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUMxNDI2RTMxQzIzRjgwNTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmggKi87IH07CkBAIC0zMTE5LDYgKzMxMjMsMTAgQEAKIAkJNTJENUExQjIx
QzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQ1QTFCMzFDNTc0OUYyMDBERTM0QTMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2Ny
ZWVuTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUzMjE1OTRGMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oOyBwYXRo
ID0gTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMyMTU5NTAxREJBRTZENzAwNTRBQTNDIC8qIE5ldHdvcmtT
ZXNzaW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Nl
c3Npb25Db2NvYS5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25D
b2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzIxNTk1MTFEQkFFNkZDMDA1
NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFzay5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrRGF0YVRhc2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzIxNTk1MjFE
QkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya1Nlc3Npb24uY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Nlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzlE
MThCNzFDQ0ZFMzRCMDBCMTk3NEMgLyogUGhvdG9zU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBob3Rv
c1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzA1MkYyNDFDNkQzQUI2MDA3
NkU5MTkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbTsgcGF0
aCA9IEF1dGhlbnRpY2F0aW9uL2NvY29hL0F1dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzE0MjZFMjFDMjNGODA1MDBENDExODMgLyog
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOyBw
YXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQzNSw2ICs1NDQzLDcgQEAKIAkJCQk1
MTNBMTY0OTE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwICovLAogCQkJCTUxM0ExNjRBMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oICovLAogCQkJCTUxM0ExNjRCMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLywKKwkJCQk1MzIxNTk1MTFE
QkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLywKIAkJCQk1Q0JDOUI4OTFD
NjUyNEE1MDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmggKi8sCiAJCQkJODM5OTAxRkYxQkU5
QTAxQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmNwcCAqLywKIAkJCQk4Mzk5MDFGRTFCRTlBMDFC
MDAwRjM2NTMgLyogTmV0d29ya0xvYWQuaCAqLywKQEAgLTU0NTMsNiArNTQ2Miw3IEBACiAJCQkJ
RTE1MjU1MTcxNzAxMDlGQjAwM0Q3QURCIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlci5tZXNzYWdl
cy5pbiAqLywKIAkJCQk1QzE0MjZFNTFDMjNGODA1MDBENDExODMgLyogTmV0d29ya1Jlc291cmNl
TG9hZFBhcmFtZXRlcnMuY3BwICovLAogCQkJCTVDMTQyNkU2MUMyM0Y4MDUwMEQ0MTE4MyAvKiBO
ZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oICovLAorCQkJCTUzMjE1OTUyMURCQUU2RkMw
MDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgKi8sCiAJCQkJNUMyMENCOUUxQkIwREQxODAw
ODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uLmggKi8sCiAJCQkJNUNFODVCMUYxQzg4RTY0MzAwNzBC
RkNFIC8qIFBpbmdMb2FkLmggKi8sCiAJCQkJRTFCNzg0NzAxNjNGMjQ2OTAwMDdCNjkyIC8qIFJl
bW90ZU5ldHdvcmtpbmdDb250ZXh0LmggKi8sCkBAIC01ODQ1LDggKzU4NTUsMTAgQEAKIAkJN0VD
NEYwRjgxOEU0QTkyMjAwODA1NkFGIC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1MzIxNTk0RjFEQkFFNkQ3MDA1NEFBM0MgLyogTmV0d29y
a0RhdGFUYXNrQ29jb2EuaCAqLywKIAkJCQk1Q0JDOUI4QjFDNjUyNTczMDBBOEZEQ0YgLyogTmV0
d29ya0RhdGFUYXNrQ29jb2EubW0gKi8sCiAJCQkJN0VDNEYwRjkxOEU0QTk0NTAwODA1NkFGIC8q
IE5ldHdvcmtQcm9jZXNzQ29jb2EubW0gKi8sCisJCQkJNTMyMTU5NTAxREJBRTZENzAwNTRBQTND
IC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLywKIAkJCQk1QzIwQ0I5QjFCQjBEQ0QyMDA4OTVC
QjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5tbSAqLywKIAkJCSk7CiAJCQluYW1lID0gY29jb2E7
CkBAIC04MTI0LDYgKzgxMzYsNyBAQAogCQkJCUJDN0I2MzNEMTJBNDVEMTIwMEQxNzRBNCAvKiBX
S0J1bmRsZVBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCNDc0RDgxODRENDNGRDAw
NTFCNjIyIC8qIFdLQnVuZGxlUGFnZUxvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RUQ4MkE3RjIxMjhDNkZBRjAwNDQ3N0IzIC8qIFdLQnVuZGxlUGFnZU92ZXJsYXkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tD
b2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCNDc0RUExODRENDUxMzAwNTFCNjIyIC8qIFdL
QnVuZGxlUGFnZVBvbGljeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxQjQxOTgxMUQ0
MUQ1NzAwMTFFOEREIC8qIFdLQnVuZGxlUGFnZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBQjQ3NERBMTg0RDQ0MjUwMDUxQjYyMiAvKiBXS0J1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGll
bnQuaCBpbiBIZWFkZXJzICovLApAQCAtODE5Myw2ICs4MjA2LDcgQEAKIAkJCQlCQzU0Q0MxMjEy
RDY3NEVFMDA1QzY3QjAgLyogV0tHZW9sb2NhdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMDZGNDRFMTJEQkRGM0YwMDJENzhERSAvKiBXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMEU2MTk4MTJENkNEMTIwMDEyQTcyQSAvKiBX
S0dlb2xvY2F0aW9uUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMjE1OTU1MURCQUU3
MjkwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkNCNEU0RjE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0M4QjM3NDEyNUZCNjkwMDBERTQ2QTQgLyogV0tHZW9tZXRyeS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0MjJGOEIxOEIyOUI1NDAwRDhDRDk2IC8qIFdLSGlzdG9y
eURlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NjA3LDYgKzk2MjEsNyBAQAog
CQkJCTJERkM3REJDMUJDQ0MxOTUwMEMxNTQ4QyAvKiBXZWJWaWV3SW1wbC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUMwMzM3REQxMTI3QTI5ODAwMDhGRjRGNCAvKiBXZWJXaGVlbEV2ZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2ODE2MEQwMTg3NjQ1NTcwMDIxRTc5RCAvKiBXaW5kb3dTZXJ2
ZXJDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTMyMTU5NTMxREJBRTcxODAwNTRB
QTNDIC8qIE5ldHdvcmtTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5Q0Q1NUFCMTI4
RTI5NEYwMDEzM0M4NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0QmFzZS5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTI5MjMyREY4MThCMkE5QUUwMEQwNTk2RiAvKiBXS0FjY2Vzc2liaWxp
dHlXZWJQYWdlT2JqZWN0SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjkyMzJERjkxOEIyQUIz
QTAwRDA1OTZGIC8qIFdLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0gaW4gU291cmNl
cyAqLywKQEAgLTk2MjUsNiArOTY0MCw3IEBACiAJCQkJQkNCQUFDRjUxNDUyMzI0RjAwNTNGODJG
IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXAubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUUwMEQ0
QzE4MkQ2RUIwMDAwODdERDcgLyogV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW0gaW4gU291cmNl
cyAqLywKIAkJCQlCQzIwNEVFRTExQzgzRUM4MDA4RjMzNzUgLyogV0tCdW5kbGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNTMyMTU5NTQxREJBRTcxRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFz
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzVFRUI5RTEyNzc2MUFDMDAzMzIyQjggLyogV0tC
dW5kbGVCYWNrRm9yd2FyZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1RUVCQTAxMjc3
NjFBQzAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MUZBMkQ3NzE1MjEyRTI2MDBDMUJBMEIgLyogV0tCdW5kbGVET01XaW5kb3dF
eHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1t
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCAxY2MxNWM2Li41OWM2MDljIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0KQEAgLTYwLDcgKzYwLDcgQEAg
dm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNz
aW9uKFNlc3Npb25JRCBzZXNzaW9uSUQKIAogICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZW5z
dXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihzZXNzaW9uSUQsIGJhc2UgKyAnLicgKyBTdHJpbmc6
Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKICNpZiBVU0UoTkVUV09SS19TRVNTSU9O
KQotICAgIGF1dG8gbmV0d29ya1Nlc3Npb24gPSBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKE5ldHdv
cmtTZXNzaW9uOjpUeXBlOjpFcGhlbWVyYWwsIHNlc3Npb25JRCwgbnVsbHB0cik7CisgICAgYXV0
byBuZXR3b3JrU2Vzc2lvbiA9IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoc2Vzc2lvbklEKTsKICAg
ICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIFdURk1vdmUobmV0d29ya1Nl
c3Npb24pKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQuY3BwCmluZGV4IDJmOTg3MWMuLmU2YjU2NGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAg
dm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNz
aW9uKFNlc3Npb25JRCBzZXNzaW9uSUQKICAgICAgICAgcmV0dXJuOwogCiAgICAgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25JRCwgU3Ry
aW5nOjpudW1iZXIoc2Vzc2lvbklELnNlc3Npb25JRCgpKSk7Ci0gICAgU2Vzc2lvblRyYWNrZXI6
OnNldFNlc3Npb24oc2Vzc2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKE5ldHdvcmtTZXNz
aW9uOjpUeXBlOjpFcGhlbWVyYWwsIHNlc3Npb25JRCwgbnVsbHB0cikpOworICAgIFNlc3Npb25U
cmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShzZXNz
aW9uSUQpKTsKIH0KIAogdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVB
Y2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyhIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkK
</data>
<flag name="review"
          id="315634"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>