<?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>173991</bug_id>
          
          <creation_ts>2017-06-29 14:30:23 -0700</creation_ts>
          <short_desc>[Curl] Unify ResourceHandleManager into CurlJobManager.</short_desc>
          <delta_ts>2017-07-18 11:49:22 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>70229</blocked>
    
    <blocked>117300</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Basuke Suzuki">basuke</assigned_to>
          <cc>achristensen</cc>
    
    <cc>basuke</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1324101</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-29 14:30:23 -0700</bug_when>
    <thetext>CurlJobManager, based on former CurlDownloadManager, manages job in background using Thread.
ResourceHandleManager manages job in foreground using timer.
Apparently those two have similar responsibility and should be unified into one.
CurlJobManager has better architecture, so usage of ResourceHandleManager will switch to CurlJobManager and it should be gone.

Some missing implementations to manage both download job and ResourceHandle are required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1328959</commentid>
    <comment_count>1</comment_count>
      <attachid>315477</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-07-14 13:03:21 -0700</bug_when>
    <thetext>Created attachment 315477
Curl ResourceHandle is now run in background</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329053</commentid>
    <comment_count>2</comment_count>
      <attachid>315477</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-14 16:01:18 -0700</bug_when>
    <thetext>Comment on attachment 315477
Curl ResourceHandle is now run in background

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

Hooray!

&gt; Source/WebCore/ChangeLog:6
&gt; +        Use CurlJobManager to make ResourceHandle run in background.

Hooray!

&gt; Source/WebCore/platform/network/ResourceHandle.h:297
&gt; +    Vector&lt;Vector&lt;char&gt;&gt; m_receivedQueue;

This is...interesting.

&gt; Source/WebCore/platform/network/curl/CurlContext.cpp:302
&gt; +    void* that;

handle

&gt; Source/WebCore/platform/network/curl/CurlContext.cpp:314
&gt; +    return (m_errorCode = curl_easy_perform(m_handle));

unnecessary parentheses?
Please just put on two lines to make it clear that this is an assignment then returning, not a forgotten ==

&gt; Source/WebCore/platform/network/curl/CurlContext.h:174
&gt; +class CurlSList {

Please put this in its own header.

&gt; Source/WebCore/platform/network/curl/CurlDownload.cpp:94
&gt; +            callOnMainThread([this] {

protectedThis = makeRef(*this) to prevent use-after-free bugs if the last reference goes out of scope before the lambda is called on the main thread.

&gt; Source/WebCore/platform/network/curl/CurlJobManager.cpp:45
&gt; +    using Predicate = std::function&lt;bool(const CurlJob&amp;)&gt;;
&gt; +    using Action = std::function&lt;void(CurlJob&amp;)&gt;;

Let&apos;s use WTF::Function unless it needs to be copyable.

&gt; Source/WebCore/platform/network/curl/CurlJobManager.cpp:88
&gt; +    std::map&lt;CurlJobTicket, CurlJob&gt; m_jobs;

We typically use WTF data structures in WebKit instead of stl, such as HashMap in this case.  They&apos;re more optimized for WebKit, and using the same data structures everywhere makes it easier to put things into different places without copying between WTF/stl types.

&gt; Source/WebCore/platform/network/curl/CurlJobManager.cpp:152
&gt; +void CurlJobManager::stopThreadIfNoMore()

No more what?

&gt; Source/WebCore/platform/network/curl/CurlJobManager.cpp:172
&gt; +template&lt;typename C&gt;

T is more common, or a more descriptive name.

&gt; Source/WebCore/platform/network/curl/CurlJobManager.cpp:199
&gt; +    std::vector&lt;CurlJob&gt; pendingJobs;

Vector

&gt; Source/WebCore/platform/network/curl/CurlJobManager.h:99
&gt; +        return std::count(m_activeJobs.begin(), m_activeJobs.end(), job) &gt; 0;

If you make m_activeJobs is a HashMap, you could probably use contains here.

&gt; Source/WebCore/platform/network/curl/CurlJobManager.h:106
&gt; +    std::set&lt;CurlJobTicket&gt; m_activeJobs;

HashSet

&gt; Source/WebCore/platform/network/curl/CurlJobManager.h:109
&gt; +    std::map&lt;CurlJobTicket, std::vector&lt;CurlJobTask&gt;&gt; m_taskQueue;

MessageQueue?

&gt; Source/WebCore/platform/network/curl/ResourceError.h:27
&gt;  #ifndef ResourceError_h
&gt;  #define ResourceError_h

#pragma once

&gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:74
&gt; +    CurlJobManager::singleton().add(d-&gt;m_curlHandle, [this](CurlJobResult result) {

protectedThis = makeRef(*this)

&gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:99
&gt; +            callOnMainThread([this] {

protectedThis = makeRef(*this)

&gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:710
&gt; +    if (splitPos != -1) {

notFound

&gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:731
&gt; +        if (statusCodePos != -1) {

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329058</commentid>
    <comment_count>3</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-07-14 16:04:38 -0700</bug_when>
    <thetext>Thanks for review!
I&apos;ve worried about the size of patch, but it seems okay about that. I&apos;ll fix&apos;em pretty soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329063</commentid>
    <comment_count>4</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-07-14 16:35:27 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #2)
&gt; &gt; Source/WebCore/platform/network/ResourceHandle.h:297
&gt; &gt; +    Vector&lt;Vector&lt;char&gt;&gt; m_receivedQueue;
&gt; 
&gt; This is...interesting.

Ah... actually. I&apos;ll change to simple Vector&lt;char&gt; and append new data on it.


&gt; &gt; Source/WebCore/platform/network/curl/CurlContext.h:174
&gt; &gt; +class CurlSList {
&gt; 
&gt; Please put this in its own header.

Okay, but only this one? Or also others, such as CurlHandle, CurlMultiHandle, CurlShareHandle? I prefer every thin wrapper sit inside CurlContext until the purpose of the class is clear. CurlSList will be replaced with standard list or vector to return list of items in really near future.



&gt; &gt; Source/WebCore/platform/network/curl/CurlDownload.cpp:94
&gt; &gt; +            callOnMainThread([this] {
&gt; 
&gt; protectedThis = makeRef(*this) to prevent use-after-free bugs if the last
&gt; reference goes out of scope before the lambda is called on the main thread.

I am not good at this idiom yet. Is this what you meant? Do I need internal protectThis? It seems I cannot pass by copy and passing by reference is also not right, I define same var again from this.
 

bool CurlDownload::start()
{
    m_job = CurlJobManager::singleton().add(m_curlHandle, 
        [this, protectThis = makeRef(*this)](CurlJobResult result) {
        
        switch (result) {
        case CurlJobResult::Done:
            callOnMainThread([this, protectThis = makeRef(*this)] {
                didFinish();
                deref();
            });
            break;
        }
    });
    return true;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329617</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-17 11:02:25 -0700</bug_when>
    <thetext>(In reply to Basuke Suzuki from comment #4)
&gt; &gt; &gt; Source/WebCore/platform/network/curl/CurlContext.h:174
&gt; &gt; &gt; +class CurlSList {
&gt; &gt; 
&gt; &gt; Please put this in its own header.
&gt; 
&gt; Okay, but only this one? Or also others, such as CurlHandle,
&gt; CurlMultiHandle, CurlShareHandle? I prefer every thin wrapper sit inside
&gt; CurlContext until the purpose of the class is clear. CurlSList will be
&gt; replaced with standard list or vector to return list of items in really near
&gt; future.
We should be moving towards one class per header.  If there&apos;s a thin wrapper only used in a certain context, use nested classes.

&gt; &gt; &gt; Source/WebCore/platform/network/curl/CurlDownload.cpp:94
&gt; &gt; &gt; +            callOnMainThread([this] {
&gt; &gt; 
&gt; &gt; protectedThis = makeRef(*this) to prevent use-after-free bugs if the last
&gt; &gt; reference goes out of scope before the lambda is called on the main thread.
&gt; 
&gt; I am not good at this idiom yet. Is this what you meant? Do I need internal
&gt; protectThis? It seems I cannot pass by copy and passing by reference is also
&gt; not right, I define same var again from this.
&gt;  
&gt; 
&gt; bool CurlDownload::start()
&gt; {
&gt;     m_job = CurlJobManager::singleton().add(m_curlHandle, 
&gt;         [this, protectThis = makeRef(*this)](CurlJobResult result) {
&gt;         
&gt;         switch (result) {
&gt;         case CurlJobResult::Done:
&gt;             callOnMainThread([this, protectThis = makeRef(*this)] {
&gt;                 didFinish();
&gt;                 deref();
&gt;             });
&gt;             break;
&gt;         }
&gt;     });
&gt;     return true;
&gt; }
When using callOnMainThread, you save a this pointer but there is no guarantee that when the lambda is actually called, this hasn&apos;t been deleted.  As it stands now, it could easily use this memory after its freed, which is *very* bad.  replacing [this] with [this, protectedThis = makeRef(*this)] with RefCounted types makes it so there is guaranteed to be at least one reference to this, so it won&apos;t be deleted before the lambda is called.  The object might be disconnected by then, which is why we null out pointers and check if clients still exist when calling client functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329622</commentid>
    <comment_count>6</comment_count>
      <attachid>315682</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-07-17 11:08:40 -0700</bug_when>
    <thetext>Created attachment 315682
PATCH with reviewed advices</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329625</commentid>
    <comment_count>7</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-07-17 11:13:20 -0700</bug_when>
    <thetext>
&gt; We should be moving towards one class per header.  If there&apos;s a thin wrapper
&gt; only used in a certain context, use nested classes.

Got it. Can I make this change as a separate bug? We wanna keep our code base maintainable and easy to improve.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329630</commentid>
    <comment_count>8</comment_count>
      <attachid>315682</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-17 11:26:31 -0700</bug_when>
    <thetext>Comment on attachment 315682
PATCH with reviewed advices

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

Cool.  Let&apos;s do another iteration.

&gt; Source/WebCore/platform/network/curl/CurlContext.cpp:300
&gt; +CurlHandle* CurlHandle::recovery(CURL* h)

This isn&apos;t used, is it?  I also don&apos;t think it&apos;s well named.  Maybe fromCURL?

&gt; Source/WebCore/platform/network/curl/CurlContext.cpp:348
&gt; +    if (headers.size() &gt; 0) {

I don&apos;t think the &gt; 0 is necessary.

&gt; Source/WebCore/platform/network/curl/CurlContext.h:178
&gt; +    using native = struct curl_slist*;

I don&apos;t think this alias improves anything.

&gt; Source/WebCore/platform/network/curl/CurlContext.h:184
&gt; +    CurlSList(CurlSList&amp;&amp; other) { std::swap(m_list, other.m_list); }
&gt; +    CurlSList&amp; operator=(CurlSList&amp;&amp; other) { std::swap(m_list, other.m_list); return *this; }

I don&apos;t think this is a proper use of std::swap.  We don&apos;t need other to get the current pointer from this.

&gt; Source/WebCore/platform/network/curl/CurlDownload.cpp:90
&gt; +    m_job = CurlJobManager::singleton().add(m_curlHandle, 
&gt; +        [protectedThis = makeRef(*this)](CurlJobResult result) mutable {

This can be on one line.

&gt; Source/WebCore/platform/network/curl/CurlDownload.cpp:226
&gt; +    callOnMainThread([protectedThis = makeRef(*this)]() mutable {
&gt; +        if (protectedThis-&gt;m_listener)

You can also capture this so you don&apos;t need all the protectedThis-&gt;

&gt; Source/WebCore/platform/network/curl/CurlDownload.cpp:242
&gt; +        if (protectedThis-&gt;m_listener)

ditto

&gt; Source/WebCore/platform/network/curl/CurlJobManager.h:80
&gt; +        std::swap(m_curl, other.m_curl);
&gt; +        std::swap(m_job, other.m_job);

Again, other doesn&apos;t need to get the pointer from this.

&gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:74
&gt; +        [protectedThis = makeRef(*this)](CurlJobResult result) {

Capture this, too

&gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:156
&gt; +    if (firstRequest().httpHeaderFields().size() &gt; 0) {

&gt; 0 unnecessary

&gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:898
&gt; +        callOnMainThread([job, httpCode, contentLength] {

It would prevent some use-after-free bugs to make a RefPtr for job, too.  Right now there is no guarantee the ResourceHandle still exists when the lambda is called on the main thread.
job = RefPtr&lt;ResourceHandle&gt;(job)

&gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:941
&gt; +        callOnMainThread([job] {

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329631</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-17 11:27:23 -0700</bug_when>
    <thetext>(In reply to Basuke Suzuki from comment #7)
&gt; &gt; We should be moving towards one class per header.  If there&apos;s a thin wrapper
&gt; &gt; only used in a certain context, use nested classes.
&gt; 
&gt; Got it. Can I make this change as a separate bug? We wanna keep our code
&gt; base maintainable and easy to improve.
Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329650</commentid>
    <comment_count>10</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-07-17 12:09:33 -0700</bug_when>
    <thetext>I&apos;ve observed the crash caused by calling method of the deleted ResourceHandle over the thread boundary. protectedThis = makeRef(*this) helps a lot. Thanks for the very good advice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329778</commentid>
    <comment_count>11</comment_count>
      <attachid>315732</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-07-17 17:02:39 -0700</bug_when>
    <thetext>Created attachment 315732
PATCH with reviewed advices</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329900</commentid>
    <comment_count>12</comment_count>
      <attachid>315732</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-17 23:52:40 -0700</bug_when>
    <thetext>Comment on attachment 315732
PATCH with reviewed advices

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

Let&apos;s land this.

&gt; Source/WebCore/platform/network/curl/CurlJobManager.cpp:91
&gt; +        return withJob(ticket, [&amp;callback](JobMap::iterator it) {

Here we just call the callback immediately, but if we needed to do anything interesting with the callback, we would want to move it into the lambda capture list, not just capturing it by reference.
[callback = WTFMove(callback)]
This can be done in a future patch if needed.

&gt; Source/WebCore/platform/network/curl/CurlJobManager.h:60
&gt; +        : m_curl { curl }, m_job { WTFMove(job) } { }

These could be on different lines.

&gt; Source/WebCore/platform/network/curl/CurlJobManager.h:64
&gt; +        other.m_curl = nullptr;

It&apos;s probably not necessary to null out a pointer of something that was moved into this constructor.

&gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:712
&gt; +    int splitPos = header.find(&quot;:&quot;);

auto or size_t.
Also please rename splitPos to splitPosition in a followup patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329906</commentid>
    <comment_count>13</comment_count>
      <attachid>315732</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-18 00:20:42 -0700</bug_when>
    <thetext>Comment on attachment 315732
PATCH with reviewed advices

Clearing flags on attachment: 315732

Committed r219606: &lt;http://trac.webkit.org/changeset/219606&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329907</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-18 00:20:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330040</commentid>
    <comment_count>15</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-07-18 11:49:22 -0700</bug_when>
    <thetext>
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=315732&amp;action=review
&gt; 
&gt; Let&apos;s land this.

Thank you!


&gt; &gt; Source/WebCore/platform/network/curl/CurlJobManager.cpp:91
&gt; &gt; +        return withJob(ticket, [&amp;callback](JobMap::iterator it) {
&gt; 
&gt; Here we just call the callback immediately, but if we needed to do anything
&gt; interesting with the callback, we would want to move it into the lambda
&gt; capture list, not just capturing it by reference.
&gt; [callback = WTFMove(callback)]
&gt; This can be done in a future patch if needed.


The purpose of that is to change configuration of CurlHandle safely, but nobody knows what will be required in the future. I make that point in my mind. Thanks.


&gt; &gt; Source/WebCore/platform/network/curl/CurlJobManager.h:60
&gt; &gt; +        : m_curl { curl }, m_job { WTFMove(job) } { }
&gt; 
&gt; These could be on different lines.

Okay.

&gt; &gt; Source/WebCore/platform/network/curl/CurlJobManager.h:64
&gt; &gt; +        other.m_curl = nullptr;
&gt; 
&gt; It&apos;s probably not necessary to null out a pointer of something that was
&gt; moved into this constructor.

Not necessary, but it is safe to clear that because move semantics doesn&apos;t prevent accessing old instance:

auto job2 = WTFMove(job);
job.curlHandle(); // &lt;-- still accessible 

At least VS2015 allow this. I think it is still safe and worth clearing out the value will make the future problem clear.

&gt; &gt; Source/WebCore/platform/network/curl/ResourceHandleCurl.cpp:712
&gt; &gt; +    int splitPos = header.find(&quot;:&quot;);
&gt; 
&gt; auto or size_t.
&gt; Also please rename splitPos to splitPosition in a followup patch.

got it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315477</attachid>
            <date>2017-07-14 13:03:21 -0700</date>
            <delta_ts>2017-07-17 11:08:40 -0700</delta_ts>
            <desc>Curl ResourceHandle is now run in background</desc>
            <filename>173991-2.diff</filename>
            <type>text/plain</type>
            <size>90716</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZTJjMWYzZWYwMy4uMzIzY2U1ODUxYTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzAgQEAKKzIwMTctMDctMTQgIEJhc3VrZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNv
bnkuY29tPgorCisgICAgICAgIFtDdXJsXSBVbmlmeSBSZXNvdXJjZUhhbmRsZU1hbmFnZXIgaW50
byBDdXJsSm9iTWFuYWdlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3Mzk5MQorCisgICAgICAgIFVzZSBDdXJsSm9iTWFuYWdlciB0byBtYWtlIFJl
c291cmNlSGFuZGxlIHJ1biBpbiBiYWNrZ3JvdW5kLgorICAgICAgICBDdXJsSm9iTWFuYWdlcjo6
c3RhcnQoKSBub3cgYWNjZXB0IGNhbGxiYWNrIHRvIG1hbmFnZSBsaWZlIGN5Y2xlCisgICAgICAg
IG9mIHRoZSByZXNvdXJjZSBlYXNpbHkgaW4gYSBzYW1lIGNvbnRleHQuCisgICAgICAgIEFjdHVh
bCBtYW5hZ2VtZW50IHRhc2tzIG9mIEN1cmxKb2JNYW5hZ2VyIGlzIG5vdyBwcml2YXRlIGNsYXNz
CisgICAgICAgIGluIEN1cmxKb2JNYW5hZ2VyIHdoaWNoIGlzIGJldHRlciB0aHJlYWQgc2FmZW5l
c3MuCisgICAgICAgIFJlc291cmNlSGFuZGxlTWFuYWdlciBpcyBkZWxldGVkIGF0IGFsbC4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3Jt
L0N1cmwuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpDdXJsSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxIYW5kbGU6On5DdXJsSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6
OnJlY292ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVycm9yRGVzY3JpcHRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6cGVyZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJsSGFuZGxlOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxl
OjphcHBlbmRSZXF1ZXN0SGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjph
cHBlbmRSZXF1ZXN0SGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVuYWJs
ZVJlcXVlc3RIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmdldENvb2tp
ZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6Z2V0RWZmZWN0aXZlVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OnNldFByaXZhdGVEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmNsZWFyUmVxdWVzdEhlYWRlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6Y2xlYXJDb29raWVMaXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxTTGlzdDo6Q3VybFNMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxTTGlzdDo6fkN1cmxTTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU0xpc3Q6Om9w
ZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU0xpc3Q6Om9wZXJhdG9yIGNvbnN0IG5h
dGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU0xpc3Q6Om9wZXJhdG9yIG5hdGl2ZSogKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxTTGlzdDo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsU0xpc3Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTTGlzdDo6YXBwZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVycm9yQ29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJsSGFuZGxlOjpzZXRFcnJvckNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bEhhbmRsZTo6cHJpdmF0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6c2V0
UHJpdmF0ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxv
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpzdGFydCk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
RG93bmxvYWQ6OmFkZEhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpo
YW5kbGVDdXJsTXNnKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybERvd25sb2FkLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JN
YW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JMaXN0OjphcHBlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybEpvYkxpc3Q6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsSm9iTGlzdDo6Y29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYkxpc3Q6Omlz
RW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYkxpc3Q6OndpdGhKb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
Sm9iTWFuYWdlcjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpj
YWxsT25Kb2JUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnN0YXJ0
VGhyZWFkSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnN0b3BU
aHJlYWRJZk5vTW9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6c3RvcFRo
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5QW5kQ2xlYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEpvYk1hbmFnZXI6OnVwZGF0ZUpvYnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpv
Yk1hbmFnZXI6OndvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdl
cjo6Q3VybEpvYk1hbmFnZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1h
bmFnZXI6On5DdXJsSm9iTWFuYWdlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJs
Sm9iTWFuYWdlcjo6cmVtb3ZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JN
YW5hZ2VyOjpnZXRBY3RpdmVDb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJs
Sm9iTWFuYWdlcjo6Z2V0UGVuZGluZ0NvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxKb2JNYW5hZ2VyOjpzdG9wVGhyZWFkSWZJZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjp1cGRhdGVIYW5kbGVMaXN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjphZGRUb0N1cmwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnJlbW92ZUZyb21DdXJsKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxKb2I6OkN1cmxKb2IpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYjo6
fkN1cmxKb2IpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYjo6Y3VybEhhbmRsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJsSm9iOjp0aWNrZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpv
Yjo6ZmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYjo6ZXJyb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybEpvYjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JN
YW5hZ2VyOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6On5D
dXJsSm9iTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6aXNBY3Rp
dmVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnJ1blRocmVhZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6c2V0UnVuVGhyZWFkKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VFcnJvci5o
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VFcnJvcjo6UmVzb3VyY2VFcnJvcik6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjphcHBseUF1dGhl
bnRpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEZvcm1FbGVtZW50c0NvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXR1cFBVVCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0dXBQT1NUKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlOjpzZXR1cEZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGVJbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvYWRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50
aWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RU
b0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlOjpjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OmhhbmRsZUxvY2FsUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp3aWxsUHJlcGFyZVNlbmREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlSGVhZGVyTGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUFsbEhlYWRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVDb250ZW50RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cmVhZENhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpoZWFkZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZTo6d3JpdGVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkaXNwYXRjaFN5bmNocm9ub3VzSm9iKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhbGN1bGF0ZVdlYlRpbWluZ0luZm9ybWF0aW9ucyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjp3cml0ZUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmhlYWRlckNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlYWRDYWxs
YmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXR1cEZvcm1EYXRhKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpoYW5kbGVDdXJsTXNnKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5h
Z2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyLmg6IFJlbW92ZWQuCisKIDIwMTctMDctMTQgIEJyYWR5IEVpZHNvbiAg
PGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2Ugc3VyZSBhbGwgQ0ZIVFRQQ29va2ll
U3RvcmFnZVJlZnMgd2UgY3JlYXRlIGFyZSBzY2hlZHVsZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Vy
bC5jbWFrZQppbmRleCA3MmM2ODM0YzZlMS4uNzY1ZGY4MTc1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ3VybC5jbWFrZQpAQCAtMTUsNyArMTUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvTXVsdGlwYXJ0SGFuZGxlLmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9Qcm94eVNlcnZlckN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9T
U0xIYW5kbGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGxDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9TeW5jaHJvbm91c0xvYWRl
ckNsaWVudEN1cmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlSGFuZGxlLmgKaW5kZXggMmMwYjQxYzEzZmUuLjJkZjk0MWViZjM1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCkBAIC03MCw2
ICs3MCw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZVUkxTdG9yYWdlU2Vzc2lvbiogQ0ZV
UkxTdG9yYWdlU2Vzc2lvblJlZjsKIAogI2lmIFVTRShDVVJMKQogI2luY2x1ZGUgIkN1cmxKb2JN
YW5hZ2VyLmgiCisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNlbmRpZgogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTE4Niw4ICsxODcsNiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShDVVJMKQot
ICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwotICAgIHZvaWQgaGFuZGxlRGF0YVVSTCgpOwogICAgIHZv
aWQgaGFuZGxlQ3VybE1zZyhDVVJMTXNnKik7CiAjZW5kaWYKIApAQCAtMjkzLDEyICsyOTIsMzUg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgVVNFKENVUkwpCi0gICAgdm9pZCBkaXNwYXRjaFN5
bmNocm9ub3VzSm9iKCk7CisgICAgQ3VybEpvYlRpY2tldCBtX2pvYjsKKworICAgIFZlY3RvcjxW
ZWN0b3I8Y2hhcj4+IG1fcmVjZWl2ZWRRdWV1ZTsKKyAgICBMb2NrIG1fcmVjZWl2ZWRRdWV1ZU11
dGV4OwogCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdm9pZCBhcHBseUF1dGhlbnRpY2F0
aW9uKCk7CiAgICAgdm9pZCBzZXR1cFBPU1QoKTsKICAgICB2b2lkIHNldHVwUFVUKCk7CisgICAg
dm9pZCBzZXR1cEZvcm1EYXRhKGJvb2wgaXNQb3N0UmVxdWVzdCk7CisKKyAgICBzaXplX3Qgd2ls
bFByZXBhcmVTZW5kRGF0YShjaGFyKiBwdHIsIHNpemVfdCBibG9ja1NpemUsIHNpemVfdCBudW1i
ZXJPZkJsb2Nrcyk7CisgICAgdm9pZCBkaWRSZWNlaXZlSGVhZGVyTGluZShjb25zdCBTdHJpbmcm
IGhlYWRlcik7CisgICAgdm9pZCBkaWRSZWNlaXZlQWxsSGVhZGVycyhsb25nIGh0dHBDb2RlLCBs
b25nIGxvbmcgY29udGVudExlbmd0aCk7CisgICAgdm9pZCBkaWRSZWNlaXZlQ29udGVudERhdGEo
KTsKKworICAgIHZvaWQgaGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UoKTsKKworICAgIHN0YXRp
YyBzaXplX3QgcmVhZENhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90
IG51bWJlck9mQmxvY2tzLCB2b2lkKiBkYXRhKTsKKyAgICBzdGF0aWMgc2l6ZV90IGhlYWRlckNh
bGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tz
LCB2b2lkKiBkYXRhKTsKKyAgICBzdGF0aWMgc2l6ZV90IHdyaXRlQ2FsbGJhY2soY2hhciogcHRy
LCBzaXplX3QgYmxvY2tTaXplLCBzaXplX3QgbnVtYmVyT2ZCbG9ja3MsIHZvaWQqIGRhdGEpOwor
CisgICAgdm9pZCBkaXNwYXRjaFN5bmNocm9ub3VzSm9iKCk7CisgICAgdm9pZCBoYW5kbGVEYXRh
VVJMKCk7CisKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICB2b2lkIGNhbGN1bGF0ZVdlYlRp
bWluZ0luZm9ybWF0aW9ucygpOworI2VuZGlmCiAKLSAgICB2b2lkIGFwcGx5QXV0aGVudGljYXRp
b24oKTsKICNlbmRpZgogCiAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlSGFuZGxlSW50ZXJuYWw7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250
ZXh0LmNwcAppbmRleCBlYzJiZTBlYTVkMy4uNDg0YmQ1Nzk2MDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcApAQCAtMjgs
NyArMjgsNyBAQAogCiAjaWYgVVNFKENVUkwpCiAjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKLQor
I2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMTAxLDYgKzEwMSw4IEBAIHN0YXRp
YyBDU3RyaW5nIGNvb2tpZUphclBhdGgoKQogCiAvLyBDdXJsQ29udGV4dCAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
K2NvbnN0IGNoYXIqIGNvbnN0IEN1cmxDb250ZXh0OjplcnJvckRvbWFpbiA9ICJDdXJsRXJyb3JE
b21haW4iOworCiBDdXJsQ29udGV4dDo6Q3VybENvbnRleHQoKQogOiBtX2Nvb2tpZUphckZpbGVO
YW1lIHsgY29va2llSmFyUGF0aCgpIH0KICwgbV9jZXJ0aWZpY2F0ZVBhdGggeyBjZXJ0aWZpY2F0
ZVBhdGgoKSB9CkBAIC0yODUsMjggKzI4NywzNiBAQCBDdXJsSGFuZGxlOjpDdXJsSGFuZGxlKCkK
IAogICAgIG1faGFuZGxlID0gY3VybF9lYXN5X2luaXQoKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0
KG1faGFuZGxlLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBtX2Vycm9yQnVmZmVyKTsKKyAgICBjdXJs
X2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BSSVZBVEUsIHRoaXMpOwogfQogCiBDdXJs
SGFuZGxlOjp+Q3VybEhhbmRsZSgpCiB7Ci0gICAgY2xlYXJDb29raWVMaXN0KCk7CiAgICAgY2xl
YXJVcmwoKTsKLSAgICBjbGVhclJlcXVlc3RIZWFkZXJzKCk7CiAKLSAgICBpZiAobV9oYW5kbGUp
IHsKLSAgICAgICAgY3VybF9lYXN5X2NsZWFudXAobV9oYW5kbGUpOwotICAgICAgICBtX2hhbmRs
ZSA9IG51bGxwdHI7Ci0gICAgfQorICAgIGN1cmxfZWFzeV9jbGVhbnVwKG1faGFuZGxlKTsKK30K
KworQ3VybEhhbmRsZSogQ3VybEhhbmRsZTo6cmVjb3ZlcnkoQ1VSTCogaCkKK3sKKyAgICB2b2lk
KiB0aGF0OworICAgIGN1cmxfZWFzeV9nZXRpbmZvKGgsIENVUkxJTkZPX1BSSVZBVEUsICZ0aGF0
KTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDdXJsSGFuZGxlKj4odGhhdCk7Cit9CisK
K2NvbnN0IFN0cmluZyBDdXJsSGFuZGxlOjplcnJvckRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gU3RyaW5nKGN1cmxfZWFzeV9zdHJlcnJvcihtX2Vycm9yQ29kZSkpOwogfQogCiBD
VVJMY29kZSBDdXJsSGFuZGxlOjpwZXJmb3JtKCkKIHsKLSAgICByZXR1cm4gY3VybF9lYXN5X3Bl
cmZvcm0obV9oYW5kbGUpOworICAgIHJldHVybiAobV9lcnJvckNvZGUgPSBjdXJsX2Vhc3lfcGVy
Zm9ybShtX2hhbmRsZSkpOwogfQogCiBDVVJMY29kZSBDdXJsSGFuZGxlOjpwYXVzZShpbnQgYml0
bWFzaykKIHsKLSAgICByZXR1cm4gY3VybF9lYXN5X3BhdXNlKG1faGFuZGxlLCBDVVJMUEFVU0Vf
QUxMKTsKKyAgICByZXR1cm4gKG1fZXJyb3JDb2RlID0gY3VybF9lYXN5X3BhdXNlKG1faGFuZGxl
LCBDVVJMUEFVU0VfQUxMKSk7CiB9CiAKIHZvaWQgQ3VybEhhbmRsZTo6ZW5hYmxlU2hhcmVIYW5k
bGUoKQpAQCAtMzE0LDExICszMjQsNiBAQCB2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZVNoYXJlSGFu
ZGxlKCkKICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1NIQVJFLCBDdXJs
Q29udGV4dDo6c2luZ2xldG9uKCkuc2hhcmVIYW5kbGUoKS5oYW5kbGUoKSk7CiB9CiAKLXZvaWQg
Q3VybEhhbmRsZTo6c2V0UHJpdmF0ZURhdGEodm9pZCogdXNlckRhdGEpCi17Ci0gICAgY3VybF9l
YXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9QUklWQVRFLCB1c2VyRGF0YSk7Ci19Ci0KIHZv
aWQgQ3VybEhhbmRsZTo6c2V0VXJsKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIGNsZWFyVXJs
KCk7CkBAIC0zMzYsMTEgKzM0MSwxNSBAQCB2b2lkIEN1cmxIYW5kbGU6OmNsZWFyVXJsKCkKICAg
ICB9CiB9CiAKLXZvaWQgQ3VybEhhbmRsZTo6Y2xlYXJSZXF1ZXN0SGVhZGVycygpCit2b2lkIEN1
cmxIYW5kbGU6OmFwcGVuZFJlcXVlc3RIZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRl
cnMpCiB7Ci0gICAgaWYgKG1fcmVxdWVzdEhlYWRlcnMpIHsKLSAgICAgICAgY3VybF9zbGlzdF9m
cmVlX2FsbChtX3JlcXVlc3RIZWFkZXJzKTsKLSAgICAgICAgbV9yZXF1ZXN0SGVhZGVycyA9IG51
bGxwdHI7CisgICAgaWYgKGhlYWRlcnMuc2l6ZSgpID4gMCkgeworICAgICAgICBmb3IgKGF1dG8m
IGVudHJ5IDogaGVhZGVycykgeworICAgICAgICAgICAgYXV0byYgdmFsdWUgPSBlbnRyeS52YWx1
ZTsKKyAgICAgICAgICAgIGFwcGVuZFJlcXVlc3RIZWFkZXIoZW50cnkua2V5LCBlbnRyeS52YWx1
ZSk7CisgICAgICAgIH0KKworICAgICAgICBlbmFibGVSZXF1ZXN0SGVhZGVycygpOwogICAgIH0K
IH0KIApAQCAtMzYxLDEzICszNzAsMTUgQEAgdm9pZCBDdXJsSGFuZGxlOjphcHBlbmRSZXF1ZXN0
SGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIAogdm9pZCBD
dXJsSGFuZGxlOjphcHBlbmRSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyKQogewot
ICAgIG1fcmVxdWVzdEhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChtX3JlcXVlc3RIZWFkZXJz
LCBoZWFkZXIubGF0aW4xKCkuZGF0YSgpKTsKKyAgICBtX3JlcXVlc3RIZWFkZXJzLmFwcGVuZCho
ZWFkZXIpOwogfQogCiB2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZVJlcXVlc3RIZWFkZXJzKCkKIHsK
LSAgICBpZiAobV9yZXF1ZXN0SGVhZGVycykKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hh
bmRsZSwgQ1VSTE9QVF9IVFRQSEVBREVSLCBtX3JlcXVlc3RIZWFkZXJzKTsKKyAgICBpZiAoIW1f
cmVxdWVzdEhlYWRlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbnN0IEN1cmxTTGlzdDo6bmF0
aXZlIGhlYWRlcnMgPSBtX3JlcXVlc3RIZWFkZXJzOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0
KG1faGFuZGxlLCBDVVJMT1BUX0hUVFBIRUFERVIsIGhlYWRlcnMpOworICAgIH0KIH0KIAogdm9p
ZCBDdXJsSGFuZGxlOjplbmFibGVIdHRwR2V0UmVxdWVzdCgpCkBAIC01MDgsMTkgKzUxOSwxMyBA
QCB2b2lkIEN1cmxIYW5kbGU6OnNldENvb2tpZUxpc3QoY29uc3QgY2hhciogY29va2llTGlzdCkK
ICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0NPT0tJRUxJU1QsIGNvb2tp
ZUxpc3QpOwogfQogCi1zdHJ1Y3QgY3VybF9zbGlzdCogQ3VybEhhbmRsZTo6Z2V0Q29va2llTGlz
dCgpCitDdXJsU0xpc3QmJiBDdXJsSGFuZGxlOjpnZXRDb29raWVMaXN0KCkgY29uc3QKIHsKLSAg
ICBjbGVhckNvb2tpZUxpc3QoKTsKLQotICAgIGN1cmxfZWFzeV9nZXRpbmZvKG1faGFuZGxlLCBD
VVJMSU5GT19DT09LSUVMSVNULCAmbV9jb29raWVMaXN0KTsKKyAgICBDdXJsU0xpc3QgY29va2ll
czsKIAotICAgIHJldHVybiBtX2Nvb2tpZUxpc3Q7Ci19CisgICAgY3VybF9lYXN5X2dldGluZm8o
bV9oYW5kbGUsIENVUkxJTkZPX0NPT0tJRUxJU1QsIHN0YXRpY19jYXN0PEN1cmxTTGlzdDo6bmF0
aXZlKj4oY29va2llcykpOwogCi12b2lkIEN1cmxIYW5kbGU6OmNsZWFyQ29va2llTGlzdCgpCi17
Ci0gICAgaWYgKCFtX2Nvb2tpZUxpc3QpCi0gICAgICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwobV9j
b29raWVMaXN0KTsKKyAgICByZXR1cm4gV1RGTW92ZShjb29raWVzKTsKIH0KIAogdm9pZCBDdXJs
SGFuZGxlOjplbmFibGVQcm94eUlmRXhpc3RzKCkKQEAgLTU2NCw3ICs1NjksNyBAQCB2b2lkIEN1
cmxIYW5kbGU6OnNldFNzbEN0eENhbGxiYWNrRnVuY3Rpb24oY3VybF9zc2xfY3R4X2NhbGxiYWNr
IGNhbGxiYWNrRnVuYywgdgogICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRf
U1NMX0NUWF9GVU5DVElPTiwgY2FsbGJhY2tGdW5jKTsKIH0KIAotVVJMIEN1cmxIYW5kbGU6Omdl
dEVmZmVjdGl2ZVVSTCgpCitVUkwgQ3VybEhhbmRsZTo6Z2V0RWZmZWN0aXZlVVJMKCkgY29uc3QK
IHsKICAgICBDVVJMY29kZSBlcnJDZCA9IENVUkxFX0ZBSUxFRF9JTklUOwogICAgIGNoYXIqIHVy
bCA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsQ29udGV4dC5oCmluZGV4IGNhMThiOThkMmYxLi45NmE2YTZkNjczNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmgKQEAg
LTEwMiw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFN0cmluZyB1cmwoKSBjb25z
dDsKICAgICB9OwogCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluOwor
CiAgICAgc3RhdGljIEN1cmxDb250ZXh0JiBzaW5nbGV0b24oKQogICAgIHsKICAgICAgICAgc3Rh
dGljIEN1cmxDb250ZXh0IHNoYXJlZDsKQEAgLTE2NywxMCArMTY5LDQzIEBAIHByaXZhdGU6CiAg
ICAgQ1VSTE0qIG1fbXVsdGlIYW5kbGUgeyBudWxscHRyIH07CiB9OwogCisvLyBDdXJsU0xpc3Qg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFz
cyBDdXJsU0xpc3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1cmxTTGlzdCk7CisKK3B1
YmxpYzoKKyAgICB1c2luZyBuYXRpdmUgPSBzdHJ1Y3QgY3VybF9zbGlzdCo7CisKKyAgICBDdXJs
U0xpc3QoKSB7IH0KKyAgICB+Q3VybFNMaXN0KCkgeyBjbGVhcigpOyB9CisKKyAgICBDdXJsU0xp
c3QoQ3VybFNMaXN0JiYgb3RoZXIpIHsgc3RkOjpzd2FwKG1fbGlzdCwgb3RoZXIubV9saXN0KTsg
fQorICAgIEN1cmxTTGlzdCYgb3BlcmF0b3I9KEN1cmxTTGlzdCYmIG90aGVyKSB7IHN0ZDo6c3dh
cChtX2xpc3QsIG90aGVyLm1fbGlzdCk7IHJldHVybiAqdGhpczsgfQorCisgICAgb3BlcmF0b3Ig
Y29uc3QgbmF0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9saXN0OyB9CisgICAgb3BlcmF0b3IgbmF0
aXZlKiAoKSB7IHJldHVybiAmbV9saXN0OyB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX2xpc3Q7IH0KKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIGlmICht
X2xpc3QpIHsKKyAgICAgICAgICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwobV9saXN0KTsKKyAgICAg
ICAgICAgIG1fbGlzdCA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGFw
cGVuZChjb25zdCBjaGFyKiBzdHIpIHsgbV9saXN0ID0gY3VybF9zbGlzdF9hcHBlbmQobV9saXN0
LCBzdHIpOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBzdHIpIHsgYXBwZW5kKHN0
ci5sYXRpbjEoKS5kYXRhKCkpOyB9CiAKK3ByaXZhdGU6CisgICAgbmF0aXZlIG1fbGlzdCB7IG51
bGxwdHIgfTsKK307CiAKIC8vIEN1cmxIYW5kbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitjbGFzcyBIVFRQSGVhZGVyTWFwOworCiBjbGFzcyBD
dXJsSGFuZGxlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXJsSGFuZGxlKTsKIApAQCAt
MTg4LDE4ICsyMjMsMjcgQEAgcHVibGljOgogICAgIEN1cmxIYW5kbGUoKTsKICAgICB+Q3VybEhh
bmRsZSgpOwogCisgICAgc3RhdGljIEN1cmxIYW5kbGUqIEN1cmxIYW5kbGU6OnJlY292ZXJ5KENV
UkwqIGgpOworCiAgICAgQ1VSTCogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGU7IH0K
IAogICAgIENVUkxjb2RlIHBlcmZvcm0oKTsKICAgICBDVVJMY29kZSBwYXVzZShpbnQpOwogCisg
ICAgQ1VSTGNvZGUgZXJyb3JDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvckNvZGU7IH0KKyAg
ICB2b2lkIHNldEVycm9yQ29kZShDVVJMY29kZSBlcnJvckNvZGUpIHsgbV9lcnJvckNvZGUgPSBl
cnJvckNvZGU7IH0KKworICAgIGNvbnN0IFN0cmluZyBlcnJvckRlc2NyaXB0aW9uKCkgY29uc3Q7
CisKICAgICB2b2lkIGVuYWJsZVNoYXJlSGFuZGxlKCk7Ci0gICAgdm9pZCBzZXRQcml2YXRlRGF0
YSh2b2lkKiB1c2VyRGF0YSk7CisKKyAgICB2b2lkKiBwcml2YXRlRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpdmF0ZURhdGE7IH0KKyAgICB2b2lkIHNldFByaXZhdGVEYXRhKHZvaWQqIHVzZXJE
YXRhKSB7IG1fcHJpdmF0ZURhdGEgPSB1c2VyRGF0YTsgfQogCiAgICAgdm9pZCBzZXRVcmwoY29u
c3QgU3RyaW5nJik7CiAgICAgY29uc3QgY2hhciogdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7
IH0KIAotICAgIHZvaWQgY2xlYXJSZXF1ZXN0SGVhZGVycygpOworICAgIHZvaWQgYXBwZW5kUmVx
dWVzdEhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYpOwogICAgIHZvaWQgYXBwZW5kUmVxdWVz
dEhlYWRlcihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZFJl
cXVlc3RIZWFkZXIoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBlbmFibGVSZXF1ZXN0SGVhZGVy
cygpOwpAQCAtMjMxLDcgKzI3NSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZW5hYmxlQ29va2ll
SmFySWZFeGlzdHMoKTsKICAgICB2b2lkIHNldENvb2tpZUxpc3QoY29uc3QgY2hhciopOwotICAg
IHN0cnVjdCBjdXJsX3NsaXN0KiBnZXRDb29raWVMaXN0KCk7CisgICAgQ3VybFNMaXN0JiYgZ2V0
Q29va2llTGlzdCgpIGNvbnN0OwogCiAgICAgdm9pZCBlbmFibGVQcm94eUlmRXhpc3RzKCk7CiAK
QEAgLTI0NCw3ICsyODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTc2xDdHhDYWxsYmFja0Z1
bmN0aW9uKGN1cmxfc3NsX2N0eF9jYWxsYmFjaywgdm9pZCopOwogCiAgICAgLy8gU3RhdHVzCi0g
ICAgVVJMIGdldEVmZmVjdGl2ZVVSTCgpOworICAgIFVSTCBnZXRFZmZlY3RpdmVVUkwoKSBjb25z
dDsKICAgICBDVVJMY29kZSBnZXRQcmltYXJ5UG9ydChsb25nJik7CiAgICAgQ1VSTGNvZGUgZ2V0
UmVzcG9uc2VDb2RlKGxvbmcmKTsKICAgICBDVVJMY29kZSBnZXRDb250ZW50TGVuZ2h0RG93bmxv
YWQobG9uZyBsb25nJik7CkBAIC0yNjAsMTYgKzMwNCwxNiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6
CiAgICAgdm9pZCBjbGVhclVybCgpOwotICAgIHZvaWQgY2xlYXJDb29raWVMaXN0KCk7CiAKICAg
ICBzdGF0aWMgaW50IGV4cGVjdGVkU2l6ZU9mQ3VybE9mZlQoKTsKIAogICAgIENVUkwqIG1faGFu
ZGxlIHsgbnVsbHB0ciB9OwogICAgIGNoYXIgbV9lcnJvckJ1ZmZlcltDVVJMX0VSUk9SX1NJWkVd
IHsgfTsKKyAgICBDVVJMY29kZSBtX2Vycm9yQ29kZTsKIAogICAgIGNoYXIqIG1fdXJsIHsgbnVs
bHB0ciB9OwotICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBtX3JlcXVlc3RIZWFkZXJzIHsgbnVsbHB0
ciB9OwotICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBtX2Nvb2tpZUxpc3QgeyBudWxscHRyIH07Cisg
ICAgdm9pZCogbV9wcml2YXRlRGF0YSB7IG51bGxwdHIgfTsKKyAgICBDdXJsU0xpc3QgbV9yZXF1
ZXN0SGVhZGVyczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKaW5kZXggMDk4ZDhjNDRlOTQuLmU5MmFlZmNk
MTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bERvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybERvd25sb2FkLmNwcApAQCAtODYsMTMgKzg2LDM2IEBAIHZvaWQgQ3VybERvd25sb2FkOjpp
bml0KEN1cmxEb3dubG9hZExpc3RlbmVyKiBsaXN0ZW5lciwgUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBSCiAKIGJvb2wgQ3VybERvd25sb2FkOjpzdGFydCgpCiB7Ci0gICAgcmVmKCk7IC8vIEN1cmxK
b2JNYW5hZ2VyIHdpbGwgY2FsbCBkZXJlZiB3aGVuIHRoZSBkb3dubG9hZCBoYXMgZmluaXNoZWQu
Ci0gICAgcmV0dXJuIEN1cmxKb2JNYW5hZ2VyOjpzaW5nbGV0b24oKS5hZGQobV9jdXJsSGFuZGxl
LmhhbmRsZSgpKTsKKyAgICByZWYoKTsKKworICAgIG1fam9iID0gQ3VybEpvYk1hbmFnZXI6OnNp
bmdsZXRvbigpLmFkZChtX2N1cmxIYW5kbGUsIFt0aGlzXShDdXJsSm9iUmVzdWx0IHJlc3VsdCkg
eworICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgICAgICBjYXNlIEN1cmxKb2JSZXN1bHQ6
OkRvbmU6CisgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSB7CisgICAgICAgICAg
ICAgICAgZGlkRmluaXNoKCk7CisgICAgICAgICAgICAgICAgZGVyZWYoKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDdXJsSm9iUmVzdWx0OjpF
cnJvcjoKKyAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKKyAgICAgICAgICAg
ICAgICBkaWRGYWlsKCk7CisgICAgICAgICAgICAgICAgZGVyZWYoKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDdXJsSm9iUmVzdWx0OjpDYW5j
ZWxsZWQ6CisgICAgICAgICAgICBkZXJlZigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBDdXJsRG93bmxvYWQ6OmNh
bmNlbCgpCiB7Ci0gICAgcmV0dXJuIEN1cmxKb2JNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZW1vdmUo
bV9jdXJsSGFuZGxlLmhhbmRsZSgpKTsKKyAgICBDdXJsSm9iTWFuYWdlcjo6c2luZ2xldG9uKCku
Y2FuY2VsKG1fam9iKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogU3RyaW5nIEN1cmxEb3dubG9h
ZDo6Z2V0VGVtcFBhdGgoKSBjb25zdApAQCAtMTQ1LDI4ICsxNjgsNyBAQCB2b2lkIEN1cmxEb3du
bG9hZDo6d3JpdGVEYXRhVG9GaWxlKGNvbnN0IGNoYXIqIGRhdGEsIGludCBzaXplKQogdm9pZCBD
dXJsRG93bmxvYWQ6OmFkZEhlYWRlcnMoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQog
ewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOwotCi0gICAgbV9jdXJsSGFuZGxlLmNs
ZWFyUmVxdWVzdEhlYWRlcnMoKTsKLQotICAgIGlmIChyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMo
KS5zaXplKCkgPiAwKSB7Ci0gICAgICAgIEhUVFBIZWFkZXJNYXAgY3VzdG9tSGVhZGVycyA9IHJl
cXVlc3QuaHR0cEhlYWRlckZpZWxkcygpOwotICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBjdXN0b21IZWFkZXJzLmVuZCgpOwotICAgICAgICBmb3IgKEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VzdG9tSGVhZGVycy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBpdC0+dmFsdWU7
Ci0gICAgICAgICAgICBTdHJpbmcgaGVhZGVyU3RyaW5nKGl0LT5rZXkpOwotICAgICAgICAgICAg
aWYgKHZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIDsgdG8g
dGVsbCBjdXJsIHRoYXQgdGhpcyBoZWFkZXIgaGFzIGFuIGVtcHR5IHZhbHVlLgotICAgICAgICAg
ICAgICAgIGhlYWRlclN0cmluZy5hcHBlbmQoIjsiKTsKLSAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgIGhlYWRlclN0cmluZy5hcHBlbmQoIjogIik7Ci0gICAgICAgICAgICAgICAg
aGVhZGVyU3RyaW5nLmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IG1fY3VybEhhbmRsZS5hcHBlbmRSZXF1ZXN0SGVhZGVyKGhlYWRlclN0cmluZyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBtX2N1cmxIYW5kbGUuZW5hYmxlUmVxdWVzdEhlYWRlcnMoKTsKLSAgICB9
CisgICAgbV9jdXJsSGFuZGxlLmFwcGVuZFJlcXVlc3RIZWFkZXJzKHJlcXVlc3QuaHR0cEhlYWRl
ckZpZWxkcygpKTsKIH0KIAogdm9pZCBDdXJsRG93bmxvYWQ6OmRpZFJlY2VpdmVIZWFkZXIoY29u
c3QgU3RyaW5nJiBoZWFkZXIpCkBAIC0yOTIsMjkgKzI5NCw2IEBAIHZvaWQgQ3VybERvd25sb2Fk
OjpyZWNlaXZlZFJlc3BvbnNlQ2FsbGJhY2soQ3VybERvd25sb2FkKiBkb3dubG9hZCkKICAgICAg
ICAgZG93bmxvYWQtPmRpZFJlY2VpdmVSZXNwb25zZSgpOwogfQogCi1DdXJsSm9iQWN0aW9uIEN1
cmxEb3dubG9hZDo6aGFuZGxlQ3VybE1zZyhDVVJMTXNnKiBtc2cpCi17Ci0gICAgc3dpdGNoICht
c2ctPm1zZykgewotICAgIGNhc2UgQ1VSTE1TR19ET05FOiB7Ci0gICAgICAgIGlmIChtc2ctPmRh
dGEucmVzdWx0ID09IENVUkxFX09LKSB7Ci0gICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0
aGlzXSB7Ci0gICAgICAgICAgICAgICAgZGlkRmluaXNoKCk7Ci0gICAgICAgICAgICAgICAgZGVy
ZWYoKTsgLy8gVGhpcyBtYXRjaGVzIHRoZSByZWYoKSBpbiBDdXJsRG93bmxvYWQ6OnN0YXJ0KCku
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3RoaXNdIHsKLSAgICAgICAgICAgICAgICBkaWRGYWlsKCk7Ci0gICAgICAgICAg
ICAgICAgZGVyZWYoKTsgLy8gVGhpcyBtYXRjaGVzIHRoZSByZWYoKSBpbiBDdXJsRG93bmxvYWQ6
OnN0YXJ0KCkuCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQ3Vy
bEpvYkFjdGlvbjo6RmluaXNoZWQ7Ci0gICAgfQotICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgcmV0
dXJuIEN1cmxKb2JBY3Rpb246Ok5vbmU7Ci0gICAgfQotICAgIH0KLX0KLQogfQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93
bmxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxv
YWQuaAppbmRleCA2NzYyNjhhN2NhYi4uM2RhNTRhZTc4MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgKQEAgLTUwLDcgKzUw
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKCkgeyB9CiB9OwogCi1jbGFz
cyBDdXJsRG93bmxvYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q3VybERvd25sb2Fk
PiwgcHVibGljIEN1cmxKb2IgeworY2xhc3MgQ3VybERvd25sb2FkIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPEN1cmxEb3dubG9hZD4gewogcHVibGljOgogICAgIEN1cmxEb3dubG9hZCgp
OwogICAgIH5DdXJsRG93bmxvYWQoKTsKQEAgLTcyLDggKzcyLDYgQEAgcHVibGljOgogCiAgICAg
dm9pZCBzZXREZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKSB7IG1fZGVzdGlu
YXRpb24gPSBkZXN0aW5hdGlvbjsgfQogCi0gICAgdmlydHVhbCBDdXJsSm9iQWN0aW9uIGhhbmRs
ZUN1cmxNc2coQ1VSTE1zZyopOwotCiBwcml2YXRlOgogICAgIHZvaWQgY2xvc2VGaWxlKCk7CiAg
ICAgdm9pZCBtb3ZlRmlsZVRvRGVzdGluYXRpb24oKTsKQEAgLTEwMCw3ICs5OCw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIHZvaWQgcmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKEN1cmxEb3dubG9h
ZCopOwogCiAgICAgQ3VybEhhbmRsZSBtX2N1cmxIYW5kbGU7Ci0KKyAgICBDdXJsSm9iVGlja2V0
IG1fam9iOwogICAgIFN0cmluZyBtX3RlbXBQYXRoOwogICAgIFN0cmluZyBtX2Rlc3RpbmF0aW9u
OwogICAgIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBtX3RlbXBIYW5kbGUgeyBpbnZhbGlk
UGxhdGZvcm1GaWxlSGFuZGxlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcAppbmRleCA0MmNmOTAwMTc1Zi4uOGI2
OGVjMDkwNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsSm9iTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIFVTRShDVVJM
KQogI2luY2x1ZGUgIkN1cmxKb2JNYW5hZ2VyLmgiCiAKKyNpbmNsdWRlIDxpdGVyYXRvcj4KICNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IApAQCAtMzYsNjggKzM3LDEzMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1DdXJsSm9iTWFuYWdlcjo6Q3VybEpvYk1hbmFnZXIoKQoteworLyoK
KyAqIEN1cmxKb2JMaXN0IGlzIHVzZWQgb25seSBpbiBiYWNrZ3JvdW5kIHNvIHRoYXQgbm8gbmVl
ZCB0byBtYW5hZ2UgbXV0ZXgKKyAqLworY2xhc3MgQ3VybEpvYkxpc3QgOiBwdWJsaWMgQ3VybE11
bHRpSGFuZGxlIHsKKyAgICB1c2luZyBQcmVkaWNhdGUgPSBzdGQ6OmZ1bmN0aW9uPGJvb2woY29u
c3QgQ3VybEpvYiYpPjsKKyAgICB1c2luZyBBY3Rpb24gPSBzdGQ6OmZ1bmN0aW9uPHZvaWQoQ3Vy
bEpvYiYpPjsKIAotfQorcHVibGljOgorICAgIHZvaWQgYXBwZW5kKGNvbnN0IEN1cmxKb2ImIGpv
YikKKyAgICB7CisgICAgICAgIEN1cmxIYW5kbGUqIGN1cmwgPSBqb2IuY3VybEhhbmRsZSgpOwog
Ci1DdXJsSm9iTWFuYWdlcjo6fkN1cmxKb2JNYW5hZ2VyKCkKLXsKLSAgICBzdG9wVGhyZWFkKCk7
Ci19CisgICAgICAgIENVUkxNY29kZSByZXR2YWwgPSBhZGRIYW5kbGUoY3VybC0+aGFuZGxlKCkp
OworICAgICAgICAgICAgLy8gQEZJWE1FIGVycm9yIGxvZ2dpbmcKKyAgICAgICAgaWYgKHJldHZh
bCA9PSBDVVJMTV9PSykKKyAgICAgICAgICAgIG1fam9ic1tqb2IudGlja2V0KCldID0gam9iOwor
ICAgIH0KKworICAgIHZvaWQgY2FuY2VsKEN1cmxKb2JUaWNrZXQgdGlja2V0KQorICAgIHsKKyAg
ICAgICAgY29tcGxldGUodGlja2V0LCBbXShhdXRvJiBqb2IpIHsgam9iLmNhbmNlbCgpOyB9KTsK
KyAgICB9CisKKyAgICB2b2lkIGNvbXBsZXRlKEN1cmxKb2JUaWNrZXQgdGlja2V0LCBBY3Rpb24g
YWN0aW9uKQorICAgIHsKKyAgICAgICAgd2l0aEpvYih0aWNrZXQsIFt0aGlzLCAmYWN0aW9uXShh
dXRvJiBmb3VuZCkgeworICAgICAgICAgICAgYXV0byYgam9iID0gZm91bmQtPnNlY29uZDsKKwor
ICAgICAgICAgICAgcmVtb3ZlSGFuZGxlKGpvYi5jdXJsSGFuZGxlKCktPmhhbmRsZSgpKTsKKyAg
ICAgICAgICAgIGFjdGlvbihqb2IpOworCisgICAgICAgICAgICBtX2pvYnMuZXJhc2UoZm91bmQp
OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2pvYnMuZW1wdHkoKTsgfQogCi1ib29sIEN1cmxKb2JNYW5hZ2VyOjphZGQoQ1VSTCogY3Vy
bEhhbmRsZSkKKyAgICBib29sIHdpdGhKb2IoQ3VybEpvYlRpY2tldCB0aWNrZXQsIHN0ZDo6ZnVu
Y3Rpb248dm9pZChzdGQ6Om1hcDxDdXJsSm9iVGlja2V0LCBDdXJsSm9iPjo6aXRlcmF0b3IpPiBk
b0l0KQorICAgIHsKKyAgICAgICAgYXV0byBmb3VuZCA9IG1fam9icy5maW5kKHRpY2tldCk7Cisg
ICAgICAgIGlmIChmb3VuZCA9PSBtX2pvYnMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBkb0l0KGZvdW5kKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCitwcml2YXRlOgorICAgIHN0ZDo6bWFwPEN1cmxKb2JUaWNrZXQsIEN1cmxKb2I+
IG1fam9iczsKK307CisKK0N1cmxKb2JUaWNrZXQgQ3VybEpvYk1hbmFnZXI6OmFkZChDdXJsSGFu
ZGxlJiBjdXJsLCBDYWxsYmFjayBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogCisgICAgQ3VybEpvYlRpY2tldCB0aWNrZXQgPSBzdGF0aWNfY2FzdDxDdXJsSm9iVGlj
a2V0PihjdXJsLmhhbmRsZSgpKTsKKwogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9tdXRleCk7Ci0gICAgICAgIG1fcGVuZGluZ0hhbmRsZUxpc3QuYXBwZW5kKGN1cmxIYW5kbGUp
OworCisgICAgICAgIGlmIChpc0FjdGl2ZUpvYih0aWNrZXQpKQorICAgICAgICAgICAgcmV0dXJu
IHRpY2tldDsKKworCisgICAgICAgIG1fcGVuZGluZ0pvYnMucHVzaF9iYWNrKEN1cmxKb2IgeyAm
Y3VybCwgY2FsbGJhY2sgfSk7CisgICAgICAgIG1fYWN0aXZlSm9icy5pbnNlcnQodGlja2V0KTsK
ICAgICB9CiAKICAgICBzdGFydFRocmVhZElmTmVlZGVkKCk7CiAKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gdGlja2V0OwogfQogCi1ib29sIEN1cmxKb2JNYW5hZ2VyOjpyZW1vdmUoQ1VS
TCogY3VybEhhbmRsZSkKK2Jvb2wgQ3VybEpvYk1hbmFnZXI6OmNhbmNlbChDdXJsSm9iVGlja2V0
IGpvYikKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogCi0gICAgbV9yZW1vdmVkSGFuZGxlTGlzdC5hcHBlbmQoY3VybEhhbmRs
ZSk7CisgICAgaWYgKG1fcnVuVGhyZWFkKSB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
bXV0ZXgpOwogCi0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgICAgIGlmICghaXNBY3RpdmVKb2Io
am9iKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1fY2Fu
Y2VsbGVkVGlja2V0cy5wdXNoX2JhY2soam9iKTsKKyAgICAgICAgbV9hY3RpdmVKb2JzLmVyYXNl
KGpvYik7CisgICAgfQogCi1pbnQgQ3VybEpvYk1hbmFnZXI6OmdldEFjdGl2ZUNvdW50KCkgY29u
c3QKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKLSAgICByZXR1cm4gbV9hY3Rp
dmVIYW5kbGVMaXN0LnNpemUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IEN1cmxKb2JN
YW5hZ2VyOjpnZXRQZW5kaW5nQ291bnQoKSBjb25zdAordm9pZCBDdXJsSm9iTWFuYWdlcjo6Y2Fs
bE9uSm9iVGhyZWFkKEN1cmxKb2JUaWNrZXQgdGlja2V0LCBDdXJsSm9iVGFzayYmIHRhc2spCiB7
Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgcmV0dXJuIG1fcGVuZGluZ0hh
bmRsZUxpc3Quc2l6ZSgpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fdGFza1F1ZXVlTXV0ZXgp
OworICAgIG1fdGFza1F1ZXVlW3RpY2tldF0ucHVzaF9iYWNrKHRhc2spOwogfQogCiB2b2lkIEN1
cmxKb2JNYW5hZ2VyOjpzdGFydFRocmVhZElmTmVlZGVkKCkKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogCi0gICAgaWYgKCFydW5UaHJlYWQoKSkgeworICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fbXV0ZXgpOworICAgIGlmICghbV9ydW5UaHJlYWQpIHsKICAgICAgICAgaWYgKG1fdGhy
ZWFkKQogICAgICAgICAgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7Ci0gICAgICAg
IHNldFJ1blRocmVhZCh0cnVlKTsKKworICAgICAgICBtX3J1blRocmVhZCA9IHRydWU7CiAgICAg
ICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoImN1cmxUaHJlYWQiLCBbdGhpc10gewogICAg
ICAgICAgICAgd29ya2VyVGhyZWFkKCk7CiAgICAgICAgIH0pOwogICAgIH0KIH0KIAordm9pZCBD
dXJsSm9iTWFuYWdlcjo6c3RvcFRocmVhZElmTm9Nb3JlKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKKworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworCisgICAgaWYg
KG1fcGVuZGluZ0pvYnMuZW1wdHkoKSkKKyAgICAgICAgbV9ydW5UaHJlYWQgPSBmYWxzZTsKK30K
Kwogdm9pZCBDdXJsSm9iTWFuYWdlcjo6c3RvcFRocmVhZCgpCiB7Ci0gICAgc2V0UnVuVGhyZWFk
KGZhbHNlKTsKKyAgICBtX3J1blRocmVhZCA9IGZhbHNlOwogCiAgICAgaWYgKG1fdGhyZWFkKSB7
CiAgICAgICAgIG1fdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwpAQCAtMTA1LDY0ICsxNjks
NjEgQEAgdm9pZCBDdXJsSm9iTWFuYWdlcjo6c3RvcFRocmVhZCgpCiAgICAgfQogfQogCi12b2lk
IEN1cmxKb2JNYW5hZ2VyOjpzdG9wVGhyZWFkSWZJZGxlKCkKK3RlbXBsYXRlPHR5cGVuYW1lIEM+
CitzdGF0aWMgdm9pZCBjb3B5QW5kQ2xlYXIoQyYgc3JjLCBDJiBkZXN0KQogewotICAgIGlmICgh
Z2V0QWN0aXZlQ291bnQoKSAmJiAhZ2V0UGVuZGluZ0NvdW50KCkpCi0gICAgICAgIHNldFJ1blRo
cmVhZChmYWxzZSk7CisgICAgZGVzdC5yZXNlcnZlKHNyYy5zaXplKCkpOworICAgIHN0ZDo6Y29w
eShzcmMuYmVnaW4oKSwgc3JjLmVuZCgpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIoZGVzdCkpOworICAg
IHNyYy5jbGVhcigpOwogfQogCi12b2lkIEN1cmxKb2JNYW5hZ2VyOjp1cGRhdGVIYW5kbGVMaXN0
KCkKK2Jvb2wgQ3VybEpvYk1hbmFnZXI6OnVwZGF0ZUpvYnMoQ3VybEpvYkxpc3QmIGpvYnMpCiB7
Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CiAKLSAgICAvLyBSZW1vdmUgY3VybCBlYXN5IGhhbmRsZXMgZnJvbSBtdWx0aSBsaXN0
IAotICAgIGludCBzaXplID0gbV9yZW1vdmVkSGFuZGxlTGlzdC5zaXplKCk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgcmVtb3ZlRnJvbUN1cmwobV9yZW1v
dmVkSGFuZGxlTGlzdFswXSk7Ci0gICAgICAgIG1fcmVtb3ZlZEhhbmRsZUxpc3QucmVtb3ZlKDAp
OworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV90YXNrUXVldWVNdXRleCk7Cisg
ICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fdGFza1F1ZXVlKSB7CisgICAgICAgICAgICBhdXRv
IHRpY2tldCA9IHBhaXIuZmlyc3Q7CisgICAgICAgICAgICBhdXRvIHRhc2tzID0gcGFpci5zZWNv
bmQ7CisKKyAgICAgICAgICAgIGpvYnMud2l0aEpvYih0aWNrZXQsIFsmdGFza3NdKGF1dG8mIGZv
dW5kKSB7CisgICAgICAgICAgICAgICAgYXV0byBjdXJsID0gZm91bmQtPnNlY29uZC5jdXJsSGFu
ZGxlKCk7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIHRhc2sgOiB0YXNrcykKKyAgICAgICAg
ICAgICAgICAgICAgdGFzaygqY3VybCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
ICAgICBtX3Rhc2tRdWV1ZS5jbGVhcigpOwogICAgIH0KIAotICAgIC8vIEFkZCBwZW5kaW5nIGN1
cmwgZWFzeSBoYW5kbGVzIHRvIG11bHRpIGxpc3QgCi0gICAgc2l6ZSA9IG1fcGVuZGluZ0hhbmRs
ZUxpc3Quc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAg
ICAgIGFkZFRvQ3VybChtX3BlbmRpbmdIYW5kbGVMaXN0WzBdKTsKLSAgICAgICAgbV9wZW5kaW5n
SGFuZGxlTGlzdC5yZW1vdmUoMCk7Ci0gICAgfQotfQorICAgIHN0ZDo6dmVjdG9yPEN1cmxKb2I+
IHBlbmRpbmdKb2JzOworICAgIHN0ZDo6dmVjdG9yPEN1cmxKb2JUaWNrZXQ+IGNhbmNlbGxlZFRp
Y2tldHM7CiAKLWJvb2wgQ3VybEpvYk1hbmFnZXI6OmFkZFRvQ3VybChDVVJMKiBjdXJsSGFuZGxl
KQotewotICAgIENVUkxNY29kZSByZXR2YWwgPSBtX2N1cmxNdWx0aUhhbmRsZS5hZGRIYW5kbGUo
Y3VybEhhbmRsZSk7Ci0gICAgaWYgKHJldHZhbCA9PSBDVVJMTV9PSykgewotICAgICAgICBtX2Fj
dGl2ZUhhbmRsZUxpc3QuYXBwZW5kKGN1cmxIYW5kbGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9tdXRleCk7CisgICAgICAgIGlmICghbV9ydW5UaHJlYWQpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLWJvb2wgQ3VybEpvYk1hbmFnZXI6OnJlbW92ZUZyb21DdXJsKENVUkwq
IGN1cmxIYW5kbGUpCi17Ci0gICAgaW50IGhhbmRsZVBvcyA9IG1fYWN0aXZlSGFuZGxlTGlzdC5m
aW5kKGN1cmxIYW5kbGUpOworICAgICAgICBjb3B5QW5kQ2xlYXIobV9wZW5kaW5nSm9icywgcGVu
ZGluZ0pvYnMpOworICAgICAgICBjb3B5QW5kQ2xlYXIobV9jYW5jZWxsZWRUaWNrZXRzLCBjYW5j
ZWxsZWRUaWNrZXRzKTsKKyAgICB9CiAKLSAgICBpZiAoaGFuZGxlUG9zIDwgMCkKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgZm9yIChhdXRvJiBqb2IgOiBwZW5kaW5nSm9icykKKyAgICAgICAg
am9icy5hcHBlbmQoam9iKTsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHRpY2tldCA6IGNhbmNlbGxl
ZFRpY2tldHMpCisgICAgICAgIGpvYnMuY2FuY2VsKHRpY2tldCk7CiAKLSAgICBDVVJMTWNvZGUg
cmV0dmFsID0gbV9jdXJsTXVsdGlIYW5kbGUucmVtb3ZlSGFuZGxlKGN1cmxIYW5kbGUpOwotICAg
IGlmIChyZXR2YWwgPT0gQ1VSTE1fT0spIHsKLSAgICAgICAgbV9hY3RpdmVIYW5kbGVMaXN0LnJl
bW92ZShoYW5kbGVQb3MpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEN1cmxKb2JNYW5hZ2VyOjp3b3Jr
ZXJUaHJlYWQoKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAgd2hpbGUg
KHJ1blRocmVhZCgpKSB7Ci0KLSAgICAgICAgdXBkYXRlSGFuZGxlTGlzdCgpOworICAgIEN1cmxK
b2JMaXN0IGpvYnM7CiAKKyAgICB3aGlsZSAodXBkYXRlSm9icyhqb2JzKSkgewogICAgICAgICAv
LyBSZXRyeSAnc2VsZWN0JyBpZiBpdCB3YXMgaW50ZXJydXB0ZWQgYnkgYSBwcm9jZXNzIHNpZ25h
bC4KICAgICAgICAgaW50IHJjID0gMDsKICAgICAgICAgZG8gewpAQCAtMTc3LDcgKzIzOCw3IEBA
IHZvaWQgQ3VybEpvYk1hbmFnZXI6OndvcmtlclRocmVhZCgpCiAgICAgICAgICAgICB0aW1lb3V0
LnR2X3NlYyA9IDA7CiAgICAgICAgICAgICB0aW1lb3V0LnR2X3VzZWMgPSBzZWxlY3RUaW1lb3V0
TVMgKiAxMDAwOyAvLyBzZWxlY3Qgd2FpdHMgbWljcm9zZWNvbmRzCiAKLSAgICAgICAgICAgIG1f
Y3VybE11bHRpSGFuZGxlLmdldEZkU2V0KGZkcmVhZCwgZmR3cml0ZSwgZmRleGNlcCwgbWF4ZmQp
OworICAgICAgICAgICAgam9icy5nZXRGZFNldChmZHJlYWQsIGZkd3JpdGUsIGZkZXhjZXAsIG1h
eGZkKTsKIAogICAgICAgICAgICAgLy8gV2hlbiB0aGUgMyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBl
bXB0eSwgd2luc29jayB3aWxsIHJldHVybiAtMQogICAgICAgICAgICAgLy8gYW5kIGJhaWwgb3V0
LCBzdG9wcGluZyB0aGUgZmlsZSBkb3dubG9hZC4gU28gbWFrZSBzdXJlIHdlCkBAIC0xODYsMjYg
KzI0Nyw0OSBAQCB2b2lkIEN1cmxKb2JNYW5hZ2VyOjp3b3JrZXJUaHJlYWQoKQogICAgICAgICAg
ICAgICAgIHJjID0gOjpzZWxlY3QobWF4ZmQgKyAxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhj
ZXAsICZ0aW1lb3V0KTsKICAgICAgICAgfSB3aGlsZSAocmMgPT0gLTEgJiYgZXJybm8gPT0gRUlO
VFIpOwogCi0gICAgICAgIGludCBydW5uaW5nSGFuZGxlcyA9IDA7Ci0gICAgICAgIHdoaWxlICht
X2N1cmxNdWx0aUhhbmRsZS5wZXJmb3JtKHJ1bm5pbmdIYW5kbGVzKSA9PSBDVVJMTV9DQUxMX01V
TFRJX1BFUkZPUk0pIHsgfQotCi0gICAgICAgIGludCBtZXNzYWdlc0luUXVldWUgPSAwOwotICAg
ICAgICBDVVJMTXNnKiBtc2cgPSBtX2N1cmxNdWx0aUhhbmRsZS5yZWFkSW5mbyhtZXNzYWdlc0lu
UXVldWUpOwotICAgICAgICBpZiAoIW1zZykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0KLSAg
ICAgICAgQ3VybEpvYiogam9iID0gbnVsbHB0cjsKLSAgICAgICAgQ1VSTGNvZGUgZXJyID0gY3Vy
bF9lYXN5X2dldGluZm8obXNnLT5lYXN5X2hhbmRsZSwgQ1VSTElORk9fUFJJVkFURSwgJmpvYik7
Ci0gICAgICAgIFVOVVNFRF9QQVJBTShlcnIpOwotICAgICAgICBBU1NFUlQoam9iKTsKLQotICAg
ICAgICBDdXJsSm9iQWN0aW9uIGFjdGlvbiA9IGpvYi0+aGFuZGxlQ3VybE1zZyhtc2cpOwotCi0g
ICAgICAgIGlmIChhY3Rpb24gPT0gQ3VybEpvYkFjdGlvbjo6RmluaXNoZWQpCi0gICAgICAgICAg
ICByZW1vdmVGcm9tQ3VybChtc2ctPmVhc3lfaGFuZGxlKTsKLQotICAgICAgICBzdG9wVGhyZWFk
SWZJZGxlKCk7CisgICAgICAgIGludCBhY3RpdmVDb3VudCA9IDA7CisgICAgICAgIHdoaWxlIChq
b2JzLnBlcmZvcm0oYWN0aXZlQ291bnQpID09IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkgeyB9
CisKKyAgICAgICAgLy8gY2hlY2sgdGhlIGN1cmwgbWVzc2FnZXMgaW5kaWNhdGluZyBjb21wbGV0
ZWQgdHJhbnNmZXJzCisgICAgICAgIC8vIGFuZCBmcmVlIHRoZWlyIHJlc291cmNlcworICAgICAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaW50IG1lc3NhZ2VzSW5RdWV1ZSA9IDA7Cisg
ICAgICAgICAgICBDVVJMTXNnKiBtc2cgPSBqb2JzLnJlYWRJbmZvKG1lc3NhZ2VzSW5RdWV1ZSk7
CisgICAgICAgICAgICBpZiAoIW1zZykKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgaWYgKG1zZy0+bXNnID09IENVUkxNU0dfRE9ORSkgeworICAgICAgICAgICAgICAgIGF1
dG8gdGlja2V0ID0gc3RhdGljX2Nhc3Q8Q3VybEpvYlRpY2tldD4obXNnLT5lYXN5X2hhbmRsZSk7
CisgICAgICAgICAgICAgICAgQ1VSTGNvZGUgcmVzdWx0ID0gbXNnLT5kYXRhLnJlc3VsdDsKKwor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9tdXRleCk7CisgICAgICAgICAgICAgICAgICAgIG1fYWN0aXZlSm9icy5lcmFzZSh0aWNrZXQp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGpvYnMuY29tcGxldGUodGlj
a2V0LCBbcmVzdWx0XShhdXRvJiBqb2IpIHsKKyAgICAgICAgICAgICAgICAgICAgam9iLmN1cmxI
YW5kbGUoKS0+c2V0RXJyb3JDb2RlKHJlc3VsdCk7CisKKyAgICAgICAgICAgICAgICAgICAgYm9v
bCBkb25lID0gcmVzdWx0ID09IENVUkxFX09LOworICAgICAgICAgICAgICAgICAgICBpZiAoZG9u
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGpvYi5maW5pc2hlZCgpOworICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVSTCB1cmwgPSBqb2IuY3Vy
bEhhbmRsZSgpLT5nZXRFZmZlY3RpdmVVUkwoKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAg
ICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkN1cmwgRVJST1IgZm9yIHVybD0nJXMnLCBl
cnJvcjogJyVzJ1xuIiwgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGpvYi5jdXJsSGFuZGxl
KCktPmVycm9yRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgICAgICAgICAgam9iLmVycm9yKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGpvYnMuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBzdG9wVGhyZWFkSWZOb01vcmUoKTsKKyAgICAgICAgICAgIGlmICgh
bV9ydW5UaHJlYWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
Sm9iTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxK
b2JNYW5hZ2VyLmgKaW5kZXggZmMyZjBmODQwYTEuLmQ0NWQwNGZlMzc4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuaApA
QCAtMjgsMTEgKzI4LDE0IEBACiAKICNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgogCisjaW5jbHVk
ZSA8bWFwPgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgUExBVEZPUk0oV0lOKQor
I2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHdpbnNvY2sy
Lmg+CiAjZW5kaWYKQEAgLTQwLDU5ICs0Myw3MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWVudW0gY2xhc3MgQ3VybEpvYkFjdGlvbiB7IE5vbmUsIEZpbmlzaGVkIH07CitlbnVtIGNsYXNz
IEN1cmxKb2JSZXN1bHQgeyBEb25lLCBFcnJvciwgQ2FuY2VsbGVkIH07Cit1c2luZyBDdXJsSm9i
VGlja2V0ID0gdm9pZCo7Cit1c2luZyBDdXJsSm9iQ2FsbGJhY2sgPSBzdGQ6OmZ1bmN0aW9uPHZv
aWQoQ3VybEpvYlJlc3VsdCk+OwordXNpbmcgQ3VybEpvYlRhc2sgPSBzdGQ6OmZ1bmN0aW9uPHZv
aWQoQ3VybEhhbmRsZSYpPjsKIAotY2xhc3MgQ3VybEpvYiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCBDdXJsSm9iQWN0aW9uIGhhbmRsZUN1cmxNc2coQ1VSTE1zZyopID0gMDsKK2NsYXNzIEN1cmxK
b2JMaXN0OworCitzdHJ1Y3QgQ3VybEpvYiB7CisgICAgQ3VybEpvYigpIHsgfQorICAgIEN1cmxK
b2IoQ3VybEhhbmRsZSogY3VybCwgQ3VybEpvYkNhbGxiYWNrIGpvYikKKyAgICAgICAgOiBtX2N1
cmwgeyBjdXJsIH0sIG1fam9iIHsgam9iIH0geyB9CisgICAgfkN1cmxKb2IoKSB7IH0KKworICAg
IEN1cmxIYW5kbGUqIGN1cmxIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2N1cmw7IH0KKyAgICBD
dXJsSm9iVGlja2V0IHRpY2tldCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEN1cmxKb2JU
aWNrZXQ+KG1fY3VybC0+aGFuZGxlKCkpOyB9CisKKyAgICB2b2lkIGZpbmlzaGVkKCkgeyBtX2pv
YihDdXJsSm9iUmVzdWx0OjpEb25lKTsgfQorICAgIHZvaWQgZXJyb3IoKSB7IG1fam9iKEN1cmxK
b2JSZXN1bHQ6OkVycm9yKTsgfQorICAgIHZvaWQgY2FuY2VsKCkgeyBtX2pvYihDdXJsSm9iUmVz
dWx0OjpDYW5jZWxsZWQpOyB9CisKK3ByaXZhdGU6CisgICAgQ3VybEhhbmRsZSogbV9jdXJsOwor
ICAgIEN1cmxKb2JDYWxsYmFjayBtX2pvYjsKIH07CiAKKwogY2xhc3MgQ3VybEpvYk1hbmFnZXIg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1cmxKb2JNYW5hZ2VyKTsKKyAgICB1c2luZyBD
YWxsYmFjayA9IEN1cmxKb2JDYWxsYmFjazsKKwogcHVibGljOgorCiAgICAgc3RhdGljIEN1cmxK
b2JNYW5hZ2VyJiBzaW5nbGV0b24oKQogICAgIHsKLSAgICAgICAgLy8gU2luY2UgaXQncyBhIHN0
YXRpYyB2YXJpYWJsZSwgaWYgdGhlIGNsYXNzIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCwKLSAg
ICAgICAgLy8gSXQgd29uJ3QgYmUgY3JlYXRlZCBhZ2Fpbi4KLSAgICAgICAgLy8gQW5kIGl0ICoq
aXMqKiB0aHJlYWQtc2FmZSBpbiBDKysxMS4KLQogICAgICAgICBzdGF0aWMgQ3VybEpvYk1hbmFn
ZXIgc2hhcmVkOwogICAgICAgICByZXR1cm4gc2hhcmVkOwogICAgIH0KIAotICAgIEN1cmxKb2JN
YW5hZ2VyKCk7Ci0gICAgdmlydHVhbCB+Q3VybEpvYk1hbmFnZXIoKTsKLQotICAgIGJvb2wgYWRk
KENVUkwqIGN1cmxIYW5kbGUpOwotICAgIGJvb2wgcmVtb3ZlKENVUkwqIGN1cmxIYW5kbGUpOwor
ICAgIEN1cmxKb2JNYW5hZ2VyKCkgPSBkZWZhdWx0OworICAgIH5DdXJsSm9iTWFuYWdlcigpIHsg
c3RvcFRocmVhZCgpOyB9CiAKLSAgICBpbnQgZ2V0QWN0aXZlQ291bnQoKSBjb25zdDsKLSAgICBp
bnQgZ2V0UGVuZGluZ0NvdW50KCkgY29uc3Q7CisgICAgQ3VybEpvYlRpY2tldCBhZGQoQ3VybEhh
bmRsZSYsIENhbGxiYWNrKTsKKyAgICBib29sIGNhbmNlbChDdXJsSm9iVGlja2V0KTsKKyAgICB2
b2lkIGNhbGxPbkpvYlRocmVhZChDdXJsSm9iVGlja2V0LCBDdXJsSm9iVGFzayYmKTsKIAogcHJp
dmF0ZToKICAgICB2b2lkIHN0YXJ0VGhyZWFkSWZOZWVkZWQoKTsKKyAgICB2b2lkIHN0b3BUaHJl
YWRJZk5vTW9yZSgpOwogICAgIHZvaWQgc3RvcFRocmVhZCgpOwotICAgIHZvaWQgc3RvcFRocmVh
ZElmSWRsZSgpOwotCi0gICAgdm9pZCB1cGRhdGVIYW5kbGVMaXN0KCk7Ci0KLSAgICBib29sIHJ1
blRocmVhZCgpIGNvbnN0IHsgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7IHJldHVybiBtX3J1
blRocmVhZDsgfQotICAgIHZvaWQgc2V0UnVuVGhyZWFkKGJvb2wgcnVuVGhyZWFkKSB7IExvY2tI
b2xkZXIgbG9ja2VyKG1fbXV0ZXgpOyBtX3J1blRocmVhZCA9IHJ1blRocmVhZDsgfQogCi0gICAg
Ym9vbCBhZGRUb0N1cmwoQ1VSTCogY3VybEhhbmRsZSk7Ci0gICAgYm9vbCByZW1vdmVGcm9tQ3Vy
bChDVVJMKiBjdXJsSGFuZGxlKTsKKyAgICBib29sIHVwZGF0ZUpvYnMoQ3VybEpvYkxpc3QmIGpv
YnMpOworICAgIGJvb2wgaXNBY3RpdmVKb2IoQ3VybEpvYlRpY2tldCBqb2IpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gc3RkOjpjb3VudChtX2FjdGl2ZUpvYnMuYmVnaW4oKSwgbV9hY3Rp
dmVKb2JzLmVuZCgpLCBqb2IpID4gMDsKKyAgICB9CiAKICAgICB2b2lkIHdvcmtlclRocmVhZCgp
OwogCiAgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7Ci0gICAgVmVjdG9yPENVUkwqPiBtX3Bl
bmRpbmdIYW5kbGVMaXN0OwotICAgIFZlY3RvcjxDVVJMKj4gbV9hY3RpdmVIYW5kbGVMaXN0Owot
ICAgIFZlY3RvcjxDVVJMKj4gbV9yZW1vdmVkSGFuZGxlTGlzdDsKKyAgICBzdGQ6OnZlY3RvcjxD
dXJsSm9iPiBtX3BlbmRpbmdKb2JzOworICAgIHN0ZDo6c2V0PEN1cmxKb2JUaWNrZXQ+IG1fYWN0
aXZlSm9iczsKKyAgICBzdGQ6OnZlY3RvcjxDdXJsSm9iVGlja2V0PiBtX2NhbmNlbGxlZFRpY2tl
dHM7CisgICAgbXV0YWJsZSBMb2NrIG1fdGFza1F1ZXVlTXV0ZXg7CisgICAgc3RkOjptYXA8Q3Vy
bEpvYlRpY2tldCwgc3RkOjp2ZWN0b3I8Q3VybEpvYlRhc2s+PiBtX3Rhc2tRdWV1ZTsKICAgICBt
dXRhYmxlIExvY2sgbV9tdXRleDsKLSAgICBib29sIG1fcnVuVGhyZWFkIHsgZmFsc2UgfTsKLQot
ICAgIEN1cmxNdWx0aUhhbmRsZSBtX2N1cmxNdWx0aUhhbmRsZTsKLQotICAgIGZyaWVuZCBjbGFz
cyBDdXJsSm9iOworICAgIGJvb2wgbV9ydW5UaHJlYWQgeyB9OwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlRXJyb3IuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUVycm9yLmgKaW5k
ZXggMDAzZjliNjk1MDIuLjMyNTk1MDY5ZDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VFcnJvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUVycm9yLmgKQEAgLTI2LDYgKzI2LDcgQEAK
ICNpZm5kZWYgUmVzb3VyY2VFcnJvcl9oCiAjZGVmaW5lIFJlc291cmNlRXJyb3JfaAogCisjaW5j
bHVkZSAiQ3VybENvbnRleHQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yQmFzZS5oIgogCiAj
aWYgUExBVEZPUk0oV0lOKQpAQCAtMzMsOCArMzQsNiBAQAogI2luY2x1ZGUgPHdpbnNvY2syLmg+
CiAjZW5kaWYKIAotI2luY2x1ZGUgPGN1cmwvY3VybC5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIFJlc291cmNlRXJyb3IgOiBwdWJsaWMgUmVzb3VyY2VFcnJvckJhc2UKQEAgLTQy
LDEzICs0MSwxNyBAQCBjbGFzcyBSZXNvdXJjZUVycm9yIDogcHVibGljIFJlc291cmNlRXJyb3JC
YXNlCiBwdWJsaWM6CiAgICAgUmVzb3VyY2VFcnJvcihUeXBlIHR5cGUgPSBUeXBlOjpOdWxsKQog
ICAgICAgICA6IFJlc291cmNlRXJyb3JCYXNlKHR5cGUpCi0gICAgICAgICwgbV9zc2xFcnJvcnMo
MCkKICAgICB7CiAgICAgfQogCiAgICAgUmVzb3VyY2VFcnJvcihjb25zdCBTdHJpbmcmIGRvbWFp
biwgaW50IGVycm9yQ29kZSwgY29uc3QgVVJMJiBmYWlsaW5nVVJMLCBjb25zdCBTdHJpbmcmIGxv
Y2FsaXplZERlc2NyaXB0aW9uLCBUeXBlIHR5cGUgPSBUeXBlOjpHZW5lcmFsKQogICAgICAgICA6
IFJlc291cmNlRXJyb3JCYXNlKGRvbWFpbiwgZXJyb3JDb2RlLCBmYWlsaW5nVVJMLCBsb2NhbGl6
ZWREZXNjcmlwdGlvbiwgdHlwZSkKLSAgICAgICAgLCBtX3NzbEVycm9ycygwKQorICAgIHsKKyAg
ICB9CisKKyAgICBSZXNvdXJjZUVycm9yKGNvbnN0IEN1cmxIYW5kbGUmIGN1cmwsIHVuc2lnbmVk
IHNzbEVycm9ycykKKyAgICAgICAgOiBSZXNvdXJjZUVycm9yQmFzZShDdXJsQ29udGV4dDo6ZXJy
b3JEb21haW4sIGN1cmwuZXJyb3JDb2RlKCksIGN1cmwuZ2V0RWZmZWN0aXZlVVJMKCksIGN1cmwu
ZXJyb3JEZXNjcmlwdGlvbigpLCBUeXBlOjpHZW5lcmFsKQorICAgICAgICAsIG1fc3NsRXJyb3Jz
IHsgc3NsRXJyb3JzIH0KICAgICB7CiAgICAgfQogCkBAIC02MCw3ICs2Myw3IEBAIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlRXJyb3JCYXNlOwogICAgIHZvaWQgZG9QbGF0Zm9y
bUlzb2xhdGVkQ29weShjb25zdCBSZXNvdXJjZUVycm9yJikgeyB9CiAKLSAgICB1bnNpZ25lZCBt
X3NzbEVycm9yczsKKyAgICB1bnNpZ25lZCBtX3NzbEVycm9ycyB7IDAgfTsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhh
bmRsZUN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291
cmNlSGFuZGxlQ3VybC5jcHAKaW5kZXggZjNmZWI3OWNlM2UuLmI0YjZkZGZmOTJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVD
dXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3Vy
Y2VIYW5kbGVDdXJsLmNwcApAQCAtMzUsMTMgKzM1LDEyIEBACiAjaW5jbHVkZSAiQ3JlZGVudGlh
bFN0b3JhZ2UuaCIKICNpbmNsdWRlICJDdXJsQ2FjaGVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiQ3Vy
bENvbnRleHQuaCIKKyNpbmNsdWRlICJDdXJsSm9iTWFuYWdlci5oIgogI2luY2x1ZGUgIkZpbGVT
eXN0ZW0uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCi0jaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiU1NMSGFuZGxlLmgiCiAjaW5jbHVk
ZSAiU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KQEAgLTU1LDExICs1NCwxMiBAQCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VI
YW5kbGVJbnRlcm5hbCgpCiAKIFJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQogewot
ICAgIGNhbmNlbCgpOwogfQogCiBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydCgpCiB7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwogICAgIC8vIFRoZSBmcmFtZSBjb3VsZCBiZSBudWxs
IGlmIHRoZSBSZXNvdXJjZUhhbmRsZSBpcyBub3QgYXNzb2NpYXRlZCB0byBhbnkKICAgICAvLyBG
cmFtZSwgZS5nLiBpZiB3ZSBhcmUgZG93bmxvYWRpbmcgYSBmaWxlLgogICAgIC8vIElmIHRoZSBm
cmFtZSBpcyBub3QgbnVsbCBidXQgdGhlIHBhZ2UgaXMgbnVsbCB0aGlzIG11c3QgYmUgYW4gYXR0
ZW1wdGVkCkBAIC02OCwyNCArNjgsMjk2IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KCkK
ICAgICBpZiAoZC0+bV9jb250ZXh0ICYmICFkLT5tX2NvbnRleHQtPmlzVmFsaWQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzaGFyZWRJbnN0
YW5jZSgpLT5hZGQodGhpcyk7CisgICAgaW5pdGlhbGl6ZSgpOworICAgIHJlZigpOworCisgICAg
Q3VybEpvYk1hbmFnZXI6OnNpbmdsZXRvbigpLmFkZChkLT5tX2N1cmxIYW5kbGUsIFt0aGlzXShD
dXJsSm9iUmVzdWx0IHJlc3VsdCkgeworICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgICAg
ICBjYXNlIEN1cmxKb2JSZXN1bHQ6OkRvbmU6CisgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFk
KFt0aGlzXSB7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgICAgICAgICAgICAgY2FsY3Vs
YXRlV2ViVGltaW5nSW5mb3JtYXRpb25zKCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAo
IWQtPm1fcmVzcG9uc2UucmVzcG9uc2VGaXJlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGhh
bmRsZUxvY2FsUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkLT5t
X2NhbmNlbGxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZC0+bV9tdWx0aXBhcnRIYW5kbGUpCisgICAg
ICAgICAgICAgICAgICAgIGQtPm1fbXVsdGlwYXJ0SGFuZGxlLT5jb250ZW50RW5kZWQoKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChjbGllbnQoKSkgeworICAgICAgICAgICAgICAgICAgICBjbGll
bnQoKS0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgQ3VybENh
Y2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRGaW5pc2hMb2FkaW5nKCp0aGlzKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVyZWYoKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDdXJsSm9iUmVzdWx0OjpFcnJvcjog
eworICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10geworICAgICAgICAgICAgICAg
IFVSTCB1cmwgPSBkLT5tX2N1cmxIYW5kbGUuZ2V0RWZmZWN0aXZlVVJMKCk7CisgICAgICAgICAg
ICAgICAgaWYgKGNsaWVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRG
YWlsKHRoaXMsIFJlc291cmNlRXJyb3IoZC0+bV9jdXJsSGFuZGxlLCBkLT5tX3NzbEVycm9ycykp
OworICAgICAgICAgICAgICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRp
ZEZhaWwoKnRoaXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZXJlZigp
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIEN1cmxKb2JSZXN1bHQ6OkNhbmNlbGxlZDoKKyAgICAgICAgICAgIGRlcmVmKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0pOwogICAgIHJldHVybiB0cnVlOwog
fQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQogewotICAgIFJlc291cmNlSGFuZGxl
TWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKS0+Y2FuY2VsKHRoaXMpOworICAgIEN1cmxKb2JNYW5h
Z2VyOjpzaW5nbGV0b24oKS5jYW5jZWwobV9qb2IpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxl
Ojppbml0aWFsaXplKCkKK3sKKyAgICBDdXJsQ29udGV4dCYgY29udGV4dCA9IEN1cmxDb250ZXh0
OjpzaW5nbGV0b24oKTsKKworICAgIFVSTCB1cmwgPSBmaXJzdFJlcXVlc3QoKS51cmwoKTsKKwor
ICAgIC8vIFJlbW92ZSBhbnkgZnJhZ21lbnQgcGFydCwgb3RoZXJ3aXNlIGN1cmwgd2lsbCBzZW5k
IGl0IGFzIHBhcnQgb2YgdGhlIHJlcXVlc3QuCisgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRp
ZmllcigpOworCisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGdldEludGVybmFsKCk7
CisgICAgU3RyaW5nIHVybFN0cmluZyA9IHVybC5zdHJpbmcoKTsKKworICAgIGlmICh1cmwuaXNM
b2NhbEZpbGUoKSkgeworICAgICAgICAvLyBSZW1vdmUgYW55IHF1ZXJ5IHBhcnQgc2VudCB0byBh
IGxvY2FsIGZpbGUuCisgICAgICAgIGlmICghdXJsLnF1ZXJ5KCkuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICAvLyBCeSBzZXR0aW5nIHRoZSBxdWVyeSB0byBhIG51bGwgc3RyaW5nIGl0J2xsIGJl
IHJlbW92ZWQuCisgICAgICAgICAgICB1cmwuc2V0UXVlcnkoU3RyaW5nKCkpOworICAgICAgICAg
ICAgdXJsU3RyaW5nID0gdXJsLnN0cmluZygpOworICAgICAgICB9CisgICAgICAgIC8vIERldGVy
bWluZSB0aGUgTUlNRSB0eXBlIGJhc2VkIG9uIHRoZSBwYXRoLgorICAgICAgICBkLT5tX3Jlc3Bv
bnNlLnNldE1pbWVUeXBlKE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aCh1cmwp
KTsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9kZWZlcnNMb2FkaW5nKSB7CisgICAgICAgIENVUkxj
b2RlIGVycm9yID0gZC0+bV9jdXJsSGFuZGxlLnBhdXNlKENVUkxQQVVTRV9BTEwpOworICAgICAg
ICAvLyBJZiB3ZSBkaWQgbm90IHBhdXNlIHRoZSBoYW5kbGUsIHdlIHdvdWxkIEFTU0VSVCBpbiB0
aGUKKyAgICAgICAgLy8gaGVhZGVyIGNhbGxiYWNrLiBTbyBqdXN0IGFzc2VydCBoZXJlLgorICAg
ICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCBlcnJvciA9PSBDVVJMRV9PSyk7CisgICAgfQorCisj
aWZuZGVmIE5ERUJVRworICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVWZXJib3NlSWZVc2VkKCk7
CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZVN0ZEVycklmVXNlZCgpOworI2VuZGlmCisKKyAg
ICBkLT5tX2N1cmxIYW5kbGUuc2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVy
RW5hYmxlKTsKKyAgICBkLT5tX2N1cmxIYW5kbGUuc2V0U3NsVmVyaWZ5SG9zdChDdXJsSGFuZGxl
OjpWZXJpZnlIb3N0U3RyaWN0TmFtZUNoZWNrKTsKKyAgICBkLT5tX2N1cmxIYW5kbGUuc2V0UHJp
dmF0ZURhdGEodGhpcyk7CisgICAgZC0+bV9jdXJsSGFuZGxlLnNldFdyaXRlQ2FsbGJhY2tGdW5j
dGlvbih3cml0ZUNhbGxiYWNrLCB0aGlzKTsKKyAgICBkLT5tX2N1cmxIYW5kbGUuc2V0SGVhZGVy
Q2FsbGJhY2tGdW5jdGlvbihoZWFkZXJDYWxsYmFjaywgdGhpcyk7CisgICAgZC0+bV9jdXJsSGFu
ZGxlLmVuYWJsZUF1dG9SZWZlcmVyKCk7CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUZvbGxv
d0xvY2F0aW9uKCk7CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBBdXRoZW50aWNhdGlv
bihDVVJMQVVUSF9BTlkpOworICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVTaGFyZUhhbmRsZSgp
OworICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVUaW1lb3V0KCk7CisgICAgZC0+bV9jdXJsSGFu
ZGxlLmVuYWJsZUFsbG93ZWRQcm90b2NvbHMoKTsKKyAgICBzZXRTU0xDbGllbnRDZXJ0aWZpY2F0
ZSh0aGlzKTsKKworICAgIGlmIChDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc2hvdWxkSWdub3Jl
U1NMRXJyb3JzKCkpCisgICAgICAgIGQtPm1fY3VybEhhbmRsZS5zZXRTc2xWZXJpZnlQZWVyKEN1
cmxIYW5kbGU6OlZlcmlmeVBlZXJEaXNhYmxlKTsKKyAgICBlbHNlCisgICAgICAgIHNldFNTTFZl
cmlmeU9wdGlvbnModGhpcyk7CisKKyAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlQ0FJbmZvSWZF
eGlzdHMoKTsKKworICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVBY2NlcHRFbmNvZGluZygpOwor
ICAgIGQtPm1fY3VybEhhbmRsZS5zZXRVcmwodXJsU3RyaW5nKTsKKyAgICBkLT5tX2N1cmxIYW5k
bGUuZW5hYmxlQ29va2llSmFySWZFeGlzdHMoKTsKKworICAgIGlmIChmaXJzdFJlcXVlc3QoKS5o
dHRwSGVhZGVyRmllbGRzKCkuc2l6ZSgpID4gMCkgeworICAgICAgICBhdXRvIGN1c3RvbUhlYWRl
cnMgPSBmaXJzdFJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCk7CisgICAgICAgIGF1dG8mIGNh
Y2hlID0gQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKTsKKworICAgICAgICBib29sIGhh
c0NhY2hlSGVhZGVycyA9IGN1c3RvbUhlYWRlcnMuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6Oklm
TW9kaWZpZWRTaW5jZSkgfHwgY3VzdG9tSGVhZGVycy5jb250YWlucyhIVFRQSGVhZGVyTmFtZTo6
SWZOb25lTWF0Y2gpOworICAgICAgICBpZiAoIWhhc0NhY2hlSGVhZGVycyAmJiBjYWNoZS5pc0Nh
Y2hlZCh1cmwpKSB7CisgICAgICAgICAgICBjYWNoZS5hZGRDYWNoZUVudHJ5Q2xpZW50KHVybCwg
dGhpcyk7CisKKyAgICAgICAgICAgIC8vIGFwcGVuZCBhZGRpdGlvbmFsIGNhY2hlIGluZm9ybWF0
aW9uCisgICAgICAgICAgICBmb3IgKGF1dG8gZW50cnkgOiBjYWNoZS5yZXF1ZXN0SGVhZGVycyh1
cmwpKQorICAgICAgICAgICAgICAgIGN1c3RvbUhlYWRlcnMuc2V0KGVudHJ5LmtleSwgZW50cnku
dmFsdWUpOworCisgICAgICAgICAgICBkLT5tX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycyA9
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBkLT5tX2N1cmxIYW5kbGUuYXBwZW5kUmVxdWVz
dEhlYWRlcnMoY3VzdG9tSGVhZGVycyk7CisgICAgfQorCisgICAgU3RyaW5nIG1ldGhvZCA9IGZp
cnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKTsKKyAgICBpZiAoIkdFVCIgPT0gbWV0aG9kKQorICAg
ICAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlSHR0cEdldFJlcXVlc3QoKTsKKyAgICBlbHNlIGlm
ICgiUE9TVCIgPT0gbWV0aG9kKQorICAgICAgICBzZXR1cFBPU1QoKTsKKyAgICBlbHNlIGlmICgi
UFVUIiA9PSBtZXRob2QpCisgICAgICAgIHNldHVwUFVUKCk7CisgICAgZWxzZSBpZiAoIkhFQUQi
ID09IG1ldGhvZCkKKyAgICAgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBIZWFkUmVxdWVz
dCgpOworICAgIGVsc2UgeworICAgICAgICBkLT5tX2N1cmxIYW5kbGUuc2V0SHR0cEN1c3RvbVJl
cXVlc3QobWV0aG9kKTsKKyAgICAgICAgc2V0dXBQVVQoKTsKKyAgICB9CisKKyAgICBkLT5tX2N1
cmxIYW5kbGUuZW5hYmxlUmVxdWVzdEhlYWRlcnMoKTsKKworICAgIGFwcGx5QXV0aGVudGljYXRp
b24oKTsKKworICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVQcm94eUlmRXhpc3RzKCk7Cit9CisK
K3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmFwcGx5QXV0aGVudGljYXRpb24oKQoreworICAgIFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCA9IGZpcnN0UmVxdWVzdCgpOworICAgIC8vIG1fdXNlci9tX3Bh
c3MgYXJlIGNyZWRlbnRpYWxzIGdpdmVuIG1hbnVhbGx5LCBmb3IgaW5zdGFuY2UsIGJ5IHRoZSBh
cmd1bWVudHMgcGFzc2VkIHRvIFhNTEh0dHBSZXF1ZXN0Lm9wZW4oKS4KKyAgICBSZXNvdXJjZUhh
bmRsZUludGVybmFsKiBkID0gZ2V0SW50ZXJuYWwoKTsKKworICAgIFN0cmluZyBwYXJ0aXRpb24g
PSByZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCk7CisKKyAgICBpZiAoc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UoKSkgeworICAgICAgICBpZiAoZC0+bV91c2VyLmlzRW1wdHkoKSAmJiBkLT5tX3Bh
c3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4g
LSBGb3IgVVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxs
ZW5nZWQgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24sIAorICAgICAgICAgICAgLy8gdHJ5
IGFuZCByZXVzZSB0aGUgY3JlZGVudGlhbCBwcmVlbXB0aXZlbHksIGFzIGFsbG93ZWQgYnkgUkZD
IDI2MTcuCisgICAgICAgICAgICBkLT5tX2luaXRpYWxDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0
b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLmdldChwYXJ0aXRpb24sIHJlcXVlc3Qu
dXJsKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxy
ZWFkeSBhIHByb3RlY3Rpb24gc3BhY2Uga25vd24gZm9yIHRoZSBVUkwsIHVwZGF0ZSBzdG9yZWQg
Y3JlZGVudGlhbHMKKyAgICAgICAgICAgIC8vIGJlZm9yZSBzZW5kaW5nIGEgcmVxdWVzdC4gVGhp
cyBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgbG9nb3V0IGJ5IHNlbmRpbmcgYW4KKyAg
ICAgICAgICAgIC8vIFhNTEh0dHBSZXF1ZXN0IHdpdGgga25vd24gaW5jb3JyZWN0IGNyZWRlbnRp
YWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1tZWRpYXRlbHkgKHNvIHRoYXQKKyAgICAgICAgICAgIC8v
IGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBkb2Vzbid0IHBvcCB1cCkuCisgICAgICAgICAgICBD
cmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRpdGlv
biwgQ3JlZGVudGlhbChkLT5tX3VzZXIsIGQtPm1fcGFzcywgQ3JlZGVudGlhbFBlcnNpc3RlbmNl
Tm9uZSksIHJlcXVlc3QudXJsKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgU3RyaW5nIHVz
ZXIgPSBkLT5tX3VzZXI7CisgICAgU3RyaW5nIHBhc3N3b3JkID0gZC0+bV9wYXNzOworCisgICAg
aWYgKCFkLT5tX2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSkgeworICAgICAgICB1c2VyID0g
ZC0+bV9pbml0aWFsQ3JlZGVudGlhbC51c2VyKCk7CisgICAgICAgIHBhc3N3b3JkID0gZC0+bV9p
bml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgpOworICAgICAgICBkLT5tX2N1cmxIYW5kbGUuZW5h
YmxlSHR0cEF1dGhlbnRpY2F0aW9uKENVUkxBVVRIX0JBU0lDKTsKKyAgICB9CisKKyAgICAvLyBJ
dCBzZWVtcyB3ZSBuZWVkIHRvIHNldCBDVVJMT1BUX1VTRVJQV0QgZXZlbiBpZiB1c2VybmFtZSBh
bmQgcGFzc3dvcmQgaXMgZW1wdHkuCisgICAgLy8gT3RoZXJ3aXNlIGNVUkwgd2lsbCBub3QgYXV0
b21hdGljYWxseSBjb250aW51ZSB3aXRoIGEgbmV3IHJlcXVlc3QgYWZ0ZXIgYSA0MDEgcmVzcG9u
c2UuCisKKyAgICAvLyBjdXJsIENVUkxPUFRfVVNFUlBXRCBleHBlY3RzIHVzZXJuYW1lOnBhc3N3
b3JkCisgICAgZC0+bV9jdXJsSGFuZGxlLnNldEh0dHBBdXRoVXNlclBhc3ModXNlciwgcGFzc3dv
cmQpOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdCBnZXRGb3JtRWxlbWVudHNDb3VudChSZXNv
dXJjZUhhbmRsZSogam9iKQoreworICAgIFJlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEgPSBqb2It
PmZpcnN0UmVxdWVzdCgpLmh0dHBCb2R5KCk7CisKKyAgICBpZiAoIWZvcm1EYXRhKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIC8vIFJlc29sdmUgdGhlIGJsb2IgZWxlbWVudHMgc28gdGhlIGZv
cm1EYXRhIGNhbiBjb3JyZWN0bHkgcmVwb3J0IGl0J3Mgc2l6ZS4KKyAgICBmb3JtRGF0YSA9IGZv
cm1EYXRhLT5yZXNvbHZlQmxvYlJlZmVyZW5jZXMoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGZvcm1E
YXRhLT5lbGVtZW50cygpLnNpemUoKTsKKyAgICBqb2ItPmZpcnN0UmVxdWVzdCgpLnNldEhUVFBC
b2R5KFdURk1vdmUoZm9ybURhdGEpKTsKKworICAgIHJldHVybiBzaXplOworfQorCit2b2lkIFJl
c291cmNlSGFuZGxlOjpzZXR1cFBVVCgpCit7CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUh0
dHBQdXRSZXF1ZXN0KCk7CisKKyAgICAvLyBEaXNhYmxlIHRoZSBFeHBlY3Q6IDEwMCBjb250aW51
ZSBoZWFkZXIKKyAgICBkLT5tX2N1cmxIYW5kbGUuYXBwZW5kUmVxdWVzdEhlYWRlcigiRXhwZWN0
OiIpOworCisgICAgc2l6ZV90IG51bUVsZW1lbnRzID0gZ2V0Rm9ybUVsZW1lbnRzQ291bnQodGhp
cyk7CisgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0dXBG
b3JtRGF0YShmYWxzZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldHVwUE9TVCgpCit7
CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBQb3N0UmVxdWVzdCgpOworCisgICAgc2l6
ZV90IG51bUVsZW1lbnRzID0gZ2V0Rm9ybUVsZW1lbnRzQ291bnQodGhpcyk7CisgICAgaWYgKCFu
dW1FbGVtZW50cykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRG8gbm90IHN0cmVhbSBmb3Ig
c2ltcGxlIFBPU1QgZGF0YQorICAgIGlmIChudW1FbGVtZW50cyA9PSAxKSB7CisgICAgICAgIGZp
cnN0UmVxdWVzdCgpLmh0dHBCb2R5KCktPmZsYXR0ZW4oZC0+bV9wb3N0Qnl0ZXMpOworICAgICAg
ICBpZiAoZC0+bV9wb3N0Qnl0ZXMuc2l6ZSgpKQorICAgICAgICAgICAgZC0+bV9jdXJsSGFuZGxl
LnNldFBvc3RGaWVsZHMoZC0+bV9wb3N0Qnl0ZXMuZGF0YSgpLCBkLT5tX3Bvc3RCeXRlcy5zaXpl
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2V0dXBGb3JtRGF0YSh0cnVlKTsK
K30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0dXBGb3JtRGF0YShib29sIGlzUG9zdFJlcXVl
c3QpCit7CisgICAgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4gZWxlbWVudHMgPSBmaXJzdFJlcXVl
c3QoKS5odHRwQm9keSgpLT5lbGVtZW50cygpOworICAgIHNpemVfdCBudW1FbGVtZW50cyA9IGVs
ZW1lbnRzLnNpemUoKTsKKworICAgIHN0YXRpYyBjb25zdCBsb25nIGxvbmcgbWF4Q3VybE9mZlQg
PSBkLT5tX2N1cmxIYW5kbGUubWF4Q3VybE9mZlQoKTsKKworICAgIC8vIE9idGFpbiB0aGUgdG90
YWwgc2l6ZSBvZiB0aGUgZm9ybSBkYXRhCisgICAgY3VybF9vZmZfdCBzaXplID0gMDsKKyAgICBi
b29sIGNodW5rZWRUcmFuc2ZlciA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtRWxlbWVudHM7IGkrKykgeworICAgICAgICBGb3JtRGF0YUVsZW1lbnQgZWxlbWVudCA9IGVs
ZW1lbnRzW2ldOworICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50
OjpUeXBlOjpFbmNvZGVkRmlsZSkgeworICAgICAgICAgICAgbG9uZyBsb25nIGZpbGVTaXplUmVz
dWx0OworICAgICAgICAgICAgaWYgKGdldEZpbGVTaXplKGVsZW1lbnQubV9maWxlbmFtZSwgZmls
ZVNpemVSZXN1bHQpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZpbGVTaXplUmVzdWx0ID4gbWF4
Q3VybE9mZlQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmlsZSBzaXplIGlzIHRvbyBiaWcg
Zm9yIHNwZWNpZnlpbmcgaXQgdG8gY1VSTAorICAgICAgICAgICAgICAgICAgICBjaHVua2VkVHJh
bnNmZXIgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgc2l6ZSArPSBmaWxlU2l6ZVJlc3VsdDsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2h1bmtlZFRyYW5zZmVyID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBzaXplICs9IGVsZW1lbnRzW2ldLm1fZGF0YS5zaXplKCk7CisgICAgfQorCisgICAgLy8g
Y1VSTCBndWVzc2VzIHRoYXQgd2Ugd2FudCBjaHVua2VkIGVuY29kaW5nIGFzIGxvbmcgYXMgd2Ug
c3BlY2lmeSB0aGUgaGVhZGVyCisgICAgaWYgKGNodW5rZWRUcmFuc2ZlcikKKyAgICAgICAgZC0+
bV9jdXJsSGFuZGxlLmFwcGVuZFJlcXVlc3RIZWFkZXIoIlRyYW5zZmVyLUVuY29kaW5nOiBjaHVu
a2VkIik7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChpc1Bvc3RSZXF1ZXN0KQorICAgICAgICAg
ICAgZC0+bV9jdXJsSGFuZGxlLnNldFBvc3RGaWVsZExhcmdlKHNpemUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBkLT5tX2N1cmxIYW5kbGUuc2V0SW5GaWxlU2l6ZUxhcmdlKHNpemUpOwor
ICAgIH0KKworICAgIGQtPm1fY3VybEhhbmRsZS5zZXRSZWFkQ2FsbGJhY2tGdW5jdGlvbihyZWFk
Q2FsbGJhY2ssIHRoaXMpOwogfQogCiAjaWYgT1MoV0lORE9XUykKIAogdm9pZCBSZXNvdXJjZUhh
bmRsZTo6c2V0SG9zdEFsbG93c0FueUhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0
KQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKICAgICBhbGxvd3NBbnlIVFRQU0Nl
cnRpZmljYXRlSG9zdHMoaG9zdCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVu
dENlcnRpZmljYXRlSW5mbyhjb25zdCBTdHJpbmcmIGhvc3QsIGNvbnN0IFN0cmluZyYgY2VydGlm
aWNhdGUsIGNvbnN0IFN0cmluZyYga2V5KQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKICAgICBpZiAoZmlsZUV4aXN0cyhjZXJ0aWZpY2F0ZSkpCiAgICAgICAgIGFkZEFsbG93ZWRD
bGllbnRDZXJ0aWZpY2F0ZShob3N0LCBjZXJ0aWZpY2F0ZSwga2V5KTsKICAgICBlbHNlCkBAIC0x
MDQsMTkgKzM3NiwzNiBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0
ZShjb25zdCBTdHJpbmcmLCBDRkRhdGFSZWYpCiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRm
b3JtU2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKIHsKLSAgICBpZiAoIWQtPm1fY3VybEhh
bmRsZS5oYW5kbGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRlZmVycykgewotICAg
ICAgICBDVVJMY29kZSBlcnJvciA9IGQtPm1fY3VybEhhbmRsZS5wYXVzZShDVVJMUEFVU0VfQUxM
KTsKLSAgICAgICAgLy8gSWYgd2UgY291bGQgbm90IGRlZmVyIHRoZSBoYW5kbGUsIHNvIGRvbid0
IGRvIGl0LgotICAgICAgICBpZiAoZXJyb3IgIT0gQ1VSTEVfT0spCi0gICAgICAgICAgICByZXR1
cm47CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChtX2pvYikgeworICAg
ICAgICBDdXJsSm9iTWFuYWdlcjo6c2luZ2xldG9uKCkuY2FsbE9uSm9iVGhyZWFkKG1fam9iLCBb
ZGVmZXJzLCB0aGlzXShhdXRvJiBjKSB7CisgICAgICAgICAgICBpZiAoZGVmZXJzKSB7CisgICAg
ICAgICAgICAgICAgQ1VSTGNvZGUgZXJyb3IgPSBjLnBhdXNlKENVUkxQQVVTRV9BTEwpOworICAg
ICAgICAgICAgICAgIC8vIElmIHdlIGNvdWxkIG5vdCBkZWZlciB0aGUgaGFuZGxlLCBzbyBkb24n
dCBkbyBpdC4KKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gQ1VSTEVfT0spCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgQ1VSTGNvZGUgZXJyb3IgPSBjLnBhdXNlKENVUkxQQVVTRV9DT05UKTsKKyAgICAgICAgICAg
ICAgICBpZiAoZXJyb3IgIT0gQ1VSTEVfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVz
dGFydGluZyB0aGUgaGFuZGxlIGhhcyBmYWlsZWQgc28ganVzdCBjYW5jZWwgaXQuCisgICAgICAg
ICAgICAgICAgICAgIGNhbmNlbCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQ1VSTGNvZGUgZXJyb3IgPSBkLT5t
X2N1cmxIYW5kbGUucGF1c2UoQ1VSTFBBVVNFX0NPTlQpOwotICAgICAgICBpZiAoZXJyb3IgIT0g
Q1VSTEVfT0spCi0gICAgICAgICAgICAvLyBSZXN0YXJ0aW5nIHRoZSBoYW5kbGUgaGFzIGZhaWxl
ZCBzbyBqdXN0IGNhbmNlbCBpdC4KLSAgICAgICAgICAgIGNhbmNlbCgpOworICAgICAgICBpZiAo
ZGVmZXJzKSB7CisgICAgICAgICAgICBDVVJMY29kZSBlcnJvciA9IGQtPm1fY3VybEhhbmRsZS5w
YXVzZShDVVJMUEFVU0VfQUxMKTsKKyAgICAgICAgICAgIC8vIElmIHdlIGNvdWxkIG5vdCBkZWZl
ciB0aGUgaGFuZGxlLCBzbyBkb24ndCBkbyBpdC4KKyAgICAgICAgICAgIGlmIChlcnJvciAhPSBD
VVJMRV9PSykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBDVVJMY29kZSBlcnJvciA9IGQtPm1fY3VybEhhbmRsZS5wYXVzZShDVVJMUEFVU0Vf
Q09OVCk7CisgICAgICAgICAgICBpZiAoZXJyb3IgIT0gQ1VSTEVfT0spIHsKKyAgICAgICAgICAg
ICAgICAvLyBSZXN0YXJ0aW5nIHRoZSBoYW5kbGUgaGFzIGZhaWxlZCBzbyBqdXN0IGNhbmNlbCBp
dC4KKyAgICAgICAgICAgICAgICBjYW5jZWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
ICAgIH0KIH0KIApAQCAtMTI1LDIwICs0MTQsMTAgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c2hv
dWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKQogICAgIHJldHVybiAoIWNsaWVudCgpIHx8IGNsaWVu
dCgpLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKSkgJiYgZmlyc3RSZXF1ZXN0KCku
dXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxl
OjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMs
IFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9y
PGNoYXI+JiBkYXRhKQotewotICAgIFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50IGNsaWVudDsKLSAg
ICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhh
bmRsZShjb250ZXh0LCByZXF1ZXN0LCAmY2xpZW50LCBmYWxzZSwgZmFsc2UpKTsKLQotICAgIGhh
bmRsZS5nZXQoKS0+ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigpOwotCi0gICAgZXJyb3IgPSBjbGll
bnQuZXJyb3IoKTsKLSAgICBkYXRhLnN3YXAoY2xpZW50Lm11dGFibGVEYXRhKCkpOwotICAgIHJl
c3BvbnNlID0gY2xpZW50LnJlc3BvbnNlKCk7Ci19Ci0KIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYgY2hhbGxlbmdlKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKICAgICBT
dHJpbmcgcGFydGl0aW9uID0gZmlyc3RSZXF1ZXN0KCkuY2FjaGVQYXJ0aXRpb24oKTsKIAogICAg
IGlmICghZC0+bV91c2VyLmlzTnVsbCgpICYmICFkLT5tX3Bhc3MuaXNOdWxsKCkpIHsKQEAgLTE4
OCw2ICs0NjcsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbAogCiB2b2lkIFJlc291cmNlSGFu
ZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNo
YWxsZW5nZSwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkKIHsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworCiAgICAgaWYgKGNoYWxsZW5nZSAhPSBkLT5tX2N1cnJlbnRXZWJDaGFs
bGVuZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjExLDYgKzQ5Miw4IEBAIHZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYgY2hhbGxlbmdlCiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkUmVxdWVzdFRvQ29u
dGludWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hh
bGxlbmdlKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKICAgICBpZiAoY2hhbGxl
bmdlICE9IGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0y
MjAsNiArNTAzLDggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRSZXF1ZXN0VG9Db250
aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2EKIAogdm9pZCBSZXNvdXJjZUhh
bmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
IGNoYWxsZW5nZSkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCiAgICAgaWYgKGNo
YWxsZW5nZSAhPSBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMjM3LDEwICs1MjIsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENoYWxsZW5n
ZVJlamVjdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKLWNvbnN0IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluQ3VybCA9ICJD
dXJsRXJyb3JEb21haW4iOwotCiAjaWYgRU5BQkxFKFdFQl9USU1JTkcpCi1zdGF0aWMgdm9pZCBj
YWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMoUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCkK
K3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhbGN1bGF0ZVdlYlRpbWluZ0luZm9ybWF0aW9ucygpCiB7
CiAgICAgZG91YmxlIHByZVRyYW5zZmVyVGltZSA9IDA7CiAgICAgZG91YmxlIGRuc2xvb2t1cFRp
bWUgPSAwOwpAQCAtMjYzLDggKzU0NiwxMCBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVXZWJUaW1p
bmdJbmZvcm1hdGlvbnMoUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCkKIH0KICNlbmRpZgogCi1z
dGF0aWMgdm9pZCBoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSogam9i
LCBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6aGFuZGxl
TG9jYWxSZWNlaXZlUmVzcG9uc2UoKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
ICAgICAvLyBzaW5jZSB0aGUgY29kZSBpbiBoZWFkZXJDYWxsYmFjayB3aWxsIG5vdCBoYXZlIHJ1
biBmb3IgbG9jYWwgZmlsZXMKICAgICAvLyB0aGUgY29kZSB0byBzZXQgdGhlIFVSTCBhbmQgZmly
ZSBkaWRSZWNlaXZlUmVzcG9uc2UgaXMgbmV2ZXIgcnVuLAogICAgIC8vIHdoaWNoIG1lYW5zIHRo
ZSBSZXNvdXJjZUxvYWRlcidzIHJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gdGhlIFVSTC4KQEAg
LTI3Myw0OCArNTU4LDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZUxvY2FsUmVjZWl2ZVJlc3BvbnNl
KFJlc291cmNlSGFuZGxlKiBqb2IsIFJlc291cmNlSGFuZGxlSW50ZXJuCiAgICAgVVJMIHVybCA9
IGQtPm1fY3VybEhhbmRsZS5nZXRFZmZlY3RpdmVVUkwoKTsKICAgICBBU1NFUlQodXJsLmlzVmFs
aWQoKSk7CiAgICAgZC0+bV9yZXNwb25zZS5zZXRVUkwodXJsKTsKLSAgICBpZiAoZC0+Y2xpZW50
KCkpCi0gICAgICAgIGQtPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2Uoam9iLCBSZXNvdXJj
ZVJlc3BvbnNlKGQtPm1fcmVzcG9uc2UpKTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNs
aWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywgUmVzb3VyY2VSZXNwb25zZShkLT5tX3Jl
c3BvbnNlKSk7CiAgICAgZC0+bV9yZXNwb25zZS5zZXRSZXNwb25zZUZpcmVkKHRydWUpOwogfQog
Ci0vLyBjYWxsZWQgd2l0aCBkYXRhIGFmdGVyIGFsbCBoZWFkZXJzIGhhdmUgYmVlbiBwcm9jZXNz
ZWQgdmlhIGhlYWRlckNhbGxiYWNrCi1zdGF0aWMgc2l6ZV90IHdyaXRlQ2FsbGJhY2soY2hhciog
cHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQotewotICAgIFJlc291
cmNlSGFuZGxlKiBqb2IgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGRhdGEpOwotICAg
IFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7Ci0gICAgaWYg
KGQtPm1fY2FuY2VsbGVkKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIFdlIHNob3VsZCBu
ZXZlciBiZSBjYWxsZWQgd2hlbiBkZWZlcnJlZCBsb2FkaW5nIGlzIGFjdGl2YXRlZC4KLSAgICBB
U1NFUlQoIWQtPm1fZGVmZXJzTG9hZGluZyk7Ci0KLSAgICBzaXplX3QgdG90YWxTaXplID0gc2l6
ZSAqIG5tZW1iOwotCi0gICAgLy8gdGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IGJ1dCBhcHBh
cmVudGx5IGlzLiBDVVJMIHdyaXRlcyB0aGUgZGF0YQotICAgIC8vIG9mIGh0bWwgcGFnZSBldmVu
IGlmIGl0IGlzIGEgcmVkaXJlY3QgdGhhdCB3YXMgaGFuZGxlZCBpbnRlcm5hbGx5Ci0gICAgLy8g
Y2FuIGJlIG9ic2VydmVkIGUuZy4gb24gZ21haWwuY29tCi0gICAgbG9uZyBodHRwQ29kZSA9IDA7
Ci0gICAgQ1VSTGNvZGUgZXJyQ2QgPSBkLT5tX2N1cmxIYW5kbGUuZ2V0UmVzcG9uc2VDb2RlKGh0
dHBDb2RlKTsKLSAgICBpZiAoQ1VSTEVfT0sgPT0gZXJyQ2QgJiYgaHR0cENvZGUgPj0gMzAwICYm
IGh0dHBDb2RlIDwgNDAwKQotICAgICAgICByZXR1cm4gdG90YWxTaXplOwotCi0gICAgaWYgKCFk
LT5tX3Jlc3BvbnNlLnJlc3BvbnNlRmlyZWQoKSkgewotICAgICAgICBoYW5kbGVMb2NhbFJlY2Vp
dmVSZXNwb25zZShqb2IsIGQpOwotICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQpCi0gICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+bV9tdWx0aXBhcnRIYW5kbGUpCi0g
ICAgICAgIGQtPm1fbXVsdGlwYXJ0SGFuZGxlLT5jb250ZW50UmVjZWl2ZWQoc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7Ci0gICAgZWxzZSBpZiAoZC0+Y2xpZW50KCkp
IHsKLSAgICAgICAgZC0+Y2xpZW50KCktPmRpZFJlY2VpdmVEYXRhKGpvYiwgcHRyLCB0b3RhbFNp
emUsIDApOwotICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZFJlY2Vp
dmVEYXRhKCpqb2IsIHB0ciwgdG90YWxTaXplKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG90YWxT
aXplOwotfQotCiBpbmxpbmUgc3RhdGljIGJvb2wgaXNIdHRwSW5mbyhpbnQgc3RhdHVzQ29kZSkK
IHsKICAgICByZXR1cm4gMTAwIDw9IHN0YXR1c0NvZGUgJiYgc3RhdHVzQ29kZSA8IDIwMDsKQEAg
LTQzOSw2ICs2ODcsMTY4IEBAIHN0YXRpYyBib29sIGdldFByb3RlY3Rpb25TcGFjZShSZXNvdXJj
ZUhhbmRsZSogam9iLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK3NpemVfdCBSZXNvdXJjZUhhbmRsZTo6d2lsbFByZXBhcmVTZW5kRGF0YShjaGFy
KiBwdHIsIHNpemVfdCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2NrcykKK3sKKyAgICBp
ZiAoIWQtPm1fZm9ybURhdGFTdHJlYW0uaGFzTW9yZUVsZW1lbnRzKCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgc2l6ZV90IHNpemUgPSBkLT5tX2Zvcm1EYXRhU3RyZWFtLnJlYWQocHRyLCBi
bG9ja1NpemUsIG51bWJlck9mQmxvY2tzKTsKKworICAgIC8vIFNvbWV0aGluZyB3ZW50IHdyb25n
IHNvIGNhbmNlbCB0aGUgam9iLgorICAgIGlmICghc2l6ZSkgeworICAgICAgICBjYW5jZWwoKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHNpemU7CisKK30KKwordm9p
ZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUhlYWRlckxpbmUoY29uc3QgU3RyaW5nJiBoZWFk
ZXIpCit7CisgICAgaW50IHNwbGl0UG9zID0gaGVhZGVyLmZpbmQoIjoiKTsKKyAgICBpZiAoc3Bs
aXRQb3MgIT0gLTEpIHsKKyAgICAgICAgU3RyaW5nIGtleSA9IGhlYWRlci5sZWZ0KHNwbGl0UG9z
KS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gaGVhZGVyLnN1YnN0
cmluZyhzcGxpdFBvcyArIDEpLnN0cmlwV2hpdGVTcGFjZSgpOworCisgICAgICAgIGlmIChpc0Fw
cGVuZGFibGVIZWFkZXIoa2V5KSkKKyAgICAgICAgICAgIGQtPm1fcmVzcG9uc2UuYWRkSFRUUEhl
YWRlckZpZWxkKGtleSwgdmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkLT5tX3Jl
c3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChrZXksIHZhbHVlKTsKKyAgICB9IGVsc2UgaWYgKGhl
YWRlci5zdGFydHNXaXRoKCJIVFRQIiwgZmFsc2UpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhl
IGZpcnN0IGxpbmUgb2YgdGhlIHJlc3BvbnNlLgorICAgICAgICAvLyBFeHRyYWN0IHRoZSBodHRw
IHN0YXR1cyB0ZXh0IGZyb20gdGhpcy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhlIEZP
TExPV0xPQ0FUSU9OIG9wdGlvbiBpcyBlbmFibGVkIGZvciB0aGUgY3VybCBoYW5kbGUgdGhlbgor
ICAgICAgICAvLyBjdXJsIHdpbGwgZm9sbG93IHRoZSByZWRpcmVjdGlvbnMgaW50ZXJuYWxseS4g
VGh1cyB0aGlzIGhlYWRlciBjYWxsYmFjaworICAgICAgICAvLyB3aWxsIGJlIGNhbGxlZCBtb3Jl
IHRoYW4gb25lIHRpbWUgd2l0aCB0aGUgbGluZSBzdGFydGluZyAiSFRUUCIgZm9yIG9uZSBqb2Iu
CisgICAgICAgIGxvbmcgaHR0cENvZGUgPSAwOworICAgICAgICBkLT5tX2N1cmxIYW5kbGUuZ2V0
UmVzcG9uc2VDb2RlKGh0dHBDb2RlKTsKKworICAgICAgICBTdHJpbmcgaHR0cENvZGVTdHJpbmcg
PSBTdHJpbmc6Om51bWJlcihodHRwQ29kZSk7CisgICAgICAgIGludCBzdGF0dXNDb2RlUG9zID0g
aGVhZGVyLmZpbmQoaHR0cENvZGVTdHJpbmcpOworCisgICAgICAgIGlmIChzdGF0dXNDb2RlUG9z
ICE9IC0xKSB7CisgICAgICAgICAgICAvLyBUaGUgc3RhdHVzIHRleHQgaXMgYWZ0ZXIgdGhlIHN0
YXR1cyBjb2RlLgorICAgICAgICAgICAgU3RyaW5nIHN0YXR1cyA9IGhlYWRlci5zdWJzdHJpbmco
c3RhdHVzQ29kZVBvcyArIGh0dHBDb2RlU3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGQt
Pm1fcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQoc3RhdHVzLnN0cmlwV2hpdGVTcGFjZSgpKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUFs
bEhlYWRlcnMobG9uZyBodHRwQ29kZSwgbG9uZyBsb25nIGNvbnRlbnRMZW5ndGgpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGQtPm1fcmVzcG9uc2Uuc2V0RXhwZWN0ZWRD
b250ZW50TGVuZ3RoKGNvbnRlbnRMZW5ndGgpOworCisgICAgZC0+bV9yZXNwb25zZS5zZXRVUkwo
ZC0+bV9jdXJsSGFuZGxlLmdldEVmZmVjdGl2ZVVSTCgpKTsKKworICAgIGQtPm1fcmVzcG9uc2Uu
c2V0SFRUUFN0YXR1c0NvZGUoaHR0cENvZGUpOworICAgIGQtPm1fcmVzcG9uc2Uuc2V0TWltZVR5
cGUoZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2Fz
ZSgpKTsKKyAgICBkLT5tX3Jlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoZXh0cmFjdENoYXJz
ZXRGcm9tTWVkaWFUeXBlKGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJO
YW1lOjpDb250ZW50VHlwZSkpKTsKKworICAgIGlmIChkLT5tX3Jlc3BvbnNlLmlzTXVsdGlwYXJ0
KCkpIHsKKyAgICAgICAgU3RyaW5nIGJvdW5kYXJ5OworICAgICAgICBib29sIHBhcnNlZCA9IE11
bHRpcGFydEhhbmRsZTo6ZXh0cmFjdEJvdW5kYXJ5KGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSksIGJvdW5kYXJ5KTsKKyAgICAgICAgaWYg
KHBhcnNlZCkKKyAgICAgICAgICAgIGQtPm1fbXVsdGlwYXJ0SGFuZGxlID0gc3RkOjptYWtlX3Vu
aXF1ZTxNdWx0aXBhcnRIYW5kbGU+KHRoaXMsIGJvdW5kYXJ5KTsKKyAgICB9CisKKyAgICAvLyBI
VFRQIHJlZGlyZWN0aW9uCisgICAgaWYgKGlzSHR0cFJlZGlyZWN0KGh0dHBDb2RlKSkgeworICAg
ICAgICBTdHJpbmcgbG9jYXRpb24gPSBkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQ
SGVhZGVyTmFtZTo6TG9jYXRpb24pOworICAgICAgICBpZiAoIWxvY2F0aW9uLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgVVJMIG5ld1VSTCA9IFVSTChmaXJzdFJlcXVlc3QoKS51cmwoKSwgbG9j
YXRpb24pOworCisgICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVkaXJlY3RlZFJlcXVlc3Qg
PSBmaXJzdFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHJlZGlyZWN0ZWRSZXF1ZXN0LnNldFVSTChu
ZXdVUkwpOworICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSA9IGQtPm1fcmVz
cG9uc2U7CisgICAgICAgICAgICBpZiAoY2xpZW50KCkpCisgICAgICAgICAgICAgICAgY2xpZW50
KCktPndpbGxTZW5kUmVxdWVzdCh0aGlzLCBXVEZNb3ZlKHJlZGlyZWN0ZWRSZXF1ZXN0KSwgV1RG
TW92ZShyZXNwb25zZSkpOworCisgICAgICAgICAgICBmaXJzdFJlcXVlc3QoKS5zZXRVUkwobmV3
VVJMKTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChp
c0h0dHBBdXRoZW50aWNhdGlvbihodHRwQ29kZSkpIHsKKyAgICAgICAgUHJvdGVjdGlvblNwYWNl
IHByb3RlY3Rpb25TcGFjZTsKKyAgICAgICAgaWYgKGdldFByb3RlY3Rpb25TcGFjZSh0aGlzLCBk
LT5tX3Jlc3BvbnNlLCBwcm90ZWN0aW9uU3BhY2UpKSB7CisgICAgICAgICAgICBDcmVkZW50aWFs
IGNyZWRlbnRpYWw7CisgICAgICAgICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVu
Z2UocHJvdGVjdGlvblNwYWNlLCBjcmVkZW50aWFsLCBkLT5tX2F1dGhGYWlsdXJlQ291bnQsIGQt
Pm1fcmVzcG9uc2UsIFJlc291cmNlRXJyb3IoKSk7CisgICAgICAgICAgICBjaGFsbGVuZ2Uuc2V0
QXV0aGVudGljYXRpb25DbGllbnQodGhpcyk7CisgICAgICAgICAgICB0aGlzLT5kaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY2hhbGxlbmdlKTsKKyAgICAgICAgICAgIGQtPm1fYXV0
aEZhaWx1cmVDb3VudCsrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKGNsaWVudCgpKSB7CisgICAgICAgIGlmIChpc0h0dHBOb3RNb2RpZmllZChodHRw
Q29kZSkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXJsID0gZmlyc3RSZXF1ZXN0KCku
dXJsKCkuc3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5z
dGFuY2UoKS5nZXRDYWNoZWRSZXNwb25zZSh1cmwsIGQtPm1fcmVzcG9uc2UpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGQtPm1fYWRkZWRDYWNoZVZhbGlkYXRpb25IZWFkZXJzKSB7CisgICAgICAg
ICAgICAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dCgiT0siKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2xpZW50
KCktPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCBSZXNvdXJjZVJlc3BvbnNlKGQtPm1fcmVzcG9u
c2UpKTsKKyAgICAgICAgQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRSZWNlaXZl
UmVzcG9uc2UoKnRoaXMsIGQtPm1fcmVzcG9uc2UpOworICAgIH0KKworICAgIGQtPm1fcmVzcG9u
c2Uuc2V0UmVzcG9uc2VGaXJlZCh0cnVlKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlk
UmVjZWl2ZUNvbnRlbnREYXRhKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisg
ICAgaWYgKCFkLT5tX3Jlc3BvbnNlLnJlc3BvbnNlRmlyZWQoKSkKKyAgICAgICAgaGFuZGxlTG9j
YWxSZWNlaXZlUmVzcG9uc2UoKTsKKworICAgIFZlY3RvcjxWZWN0b3I8Y2hhcj4+IHF1ZXVlOwor
ICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIgeyBtX3JlY2VpdmVkUXVldWVNdXRleCB9
OworICAgICAgICBxdWV1ZSA9IFdURk1vdmUobV9yZWNlaXZlZFF1ZXVlKTsKKyAgICB9CisKKyAg
ICBmb3IgKGF1dG8gYnVmZmVyIDogcXVldWUpIHsKKyAgICAgICAgY2hhciogcHRyID0gYnVmZmVy
LmJlZ2luKCk7CisgICAgICAgIHNpemVfdCBzaXplID0gYnVmZmVyLnNpemUoKTsKKworICAgICAg
ICBpZiAoZC0+bV9tdWx0aXBhcnRIYW5kbGUpCisgICAgICAgICAgICBkLT5tX211bHRpcGFydEhh
bmRsZS0+Y29udGVudFJlY2VpdmVkKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwdHIpLCBzaXpl
KTsKKyAgICAgICAgZWxzZSBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgICAgIGNsaWVudCgpLT5k
aWRSZWNlaXZlRGF0YSh0aGlzLCBwdHIsIHNpemUsIDApOworICAgICAgICAgICAgQ3VybENhY2hl
TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRSZWNlaXZlRGF0YSgqdGhpcywgcHRyLCBzaXplKTsK
KyAgICAgICAgfQorICAgIH0KK30KKworLyogVGhpcyBpcyBjYWxsZWQgdG8gb2J0YWluIEhUVFAg
UE9TVCBvciBQVVQgZGF0YS4KK0l0ZXJhdGUgdGhyb3VnaCBGb3JtRGF0YSBlbGVtZW50cyBhbmQg
dXBsb2FkIGZpbGVzLgorQ2FyZWZ1bGx5IHJlc3BlY3QgdGhlIGdpdmVuIGJ1ZmZlciBzaXplIGFu
ZCBmaWxsIHRoZSByZXN0IG9mIHRoZSBkYXRhIGF0IHRoZSBuZXh0IGNhbGxzLgorKi8KK3NpemVf
dCBSZXNvdXJjZUhhbmRsZTo6cmVhZENhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUsIHNp
emVfdCBubWVtYiwgdm9pZCogZGF0YSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
KworICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+
KGRhdGEpOworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFs
KCk7CisKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Ly8gV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIGRlZmVycmVkIGxvYWRpbmcgaXMgYWN0
aXZhdGVkLgorICAgIEFTU0VSVCghZC0+bV9kZWZlcnNMb2FkaW5nKTsKKworICAgIGlmICghc2l6
ZSB8fCAhbm1lbWIpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGpvYi0+d2lsbFBy
ZXBhcmVTZW5kRGF0YShwdHIsIHNpemUsIG5tZW1iKTsKK30KKwogLyoKICogVGhpcyBpcyBiZWlu
ZyBjYWxsZWQgZm9yIGVhY2ggSFRUUCBoZWFkZXIgaW4gdGhlIHJlc3BvbnNlLiBUaGlzIGluY2x1
ZGVzICdcclxuJwogKiBmb3IgdGhlIGxhc3QgbGluZSBvZiB0aGUgaGVhZGVyLgpAQCAtNDQ4LDgg
Kzg1OCwxMCBAQCBzdGF0aWMgYm9vbCBnZXRQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VIYW5kbGUq
IGpvYiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcAogKiB1cGRhdGUgdGhlIFJlc291cmNl
UmVzcG9uc2UgYW5kIHRoZW4gc2VuZCBpdCBhd2F5LgogKgogKi8KLXN0YXRpYyBzaXplX3QgaGVh
ZGVyQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBk
YXRhKQorc2l6ZV90IFJlc291cmNlSGFuZGxlOjpoZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIsIHNp
emVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCiB7CisgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CisKICAgICBSZXNvdXJjZUhhbmRsZSogam9iID0gc3RhdGljX2Nhc3Q8UmVz
b3VyY2VIYW5kbGUqPihkYXRhKTsKICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gam9i
LT5nZXRJbnRlcm5hbCgpOwogICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKQEAgLTQ1OSw3ICs4NzEs
NiBAQCBzdGF0aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUs
IHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKICAgICBBU1NFUlQoIWQtPm1fZGVmZXJzTG9hZGlu
Zyk7CiAKICAgICBzaXplX3QgdG90YWxTaXplID0gc2l6ZSAqIG5tZW1iOwotICAgIFJlc291cmNl
SGFuZGxlQ2xpZW50KiBjbGllbnQgPSBkLT5jbGllbnQoKTsKIAogICAgIFN0cmluZyBoZWFkZXIo
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7CiAKQEAgLTQ3MCw3ICs4
ODEsNyBAQCBzdGF0aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNp
emUsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKICAgICAqIFRoZSBIVFRQIHN0YW5kYXJkIHJl
cXVpcmVzIHRvIHVzZSBcclxuIGJ1dCBmb3IgY29tcGF0aWJpbGl0eSBpdCByZWNvbW1lbmRzIHRv
CiAgICAgKiBhY2NlcHQgYWxzbyBcbi4KICAgICAqLwotICAgIGlmIChoZWFkZXIgPT0gU3RyaW5n
KCJcclxuIikgfHwgaGVhZGVyID09IFN0cmluZygiXG4iKSkgeworICAgIGlmIChoZWFkZXIgPT0g
QXRvbWljU3RyaW5nKCJcclxuIikgfHwgaGVhZGVyID09IEF0b21pY1N0cmluZygiXG4iKSkgewog
ICAgICAgICBsb25nIGh0dHBDb2RlID0gMDsKICAgICAgICAgZC0+bV9jdXJsSGFuZGxlLmdldFJl
c3BvbnNlQ29kZShodHRwQ29kZSk7CiAKQEAgLTQ4NiwyMjAgKzg5NywxMDkgQEAgc3RhdGljIHNp
emVfdCBoZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIs
IHZvaWQqIGRhdGEpCiAKICAgICAgICAgbG9uZyBsb25nIGNvbnRlbnRMZW5ndGggPSAwOwogICAg
ICAgICBkLT5tX2N1cmxIYW5kbGUuZ2V0Q29udGVudExlbmdodERvd25sb2FkKGNvbnRlbnRMZW5n
dGgpOwotICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChjb250
ZW50TGVuZ3RoKTsKLQotICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTChkLT5tX2N1cmxIYW5k
bGUuZ2V0RWZmZWN0aXZlVVJMKCkpOwotCi0gICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0SFRUUFN0
YXR1c0NvZGUoaHR0cENvZGUpOwotICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4
dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoZC0+bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQo
SFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7
Ci0gICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShleHRyYWN0Q2hhcnNl
dEZyb21NZWRpYVR5cGUoZC0+bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OkNvbnRlbnRUeXBlKSkpOwotCi0gICAgICAgIGlmIChkLT5tX3Jlc3BvbnNlLmlzTXVsdGlw
YXJ0KCkpIHsKLSAgICAgICAgICAgIFN0cmluZyBib3VuZGFyeTsKLSAgICAgICAgICAgIGJvb2wg
cGFyc2VkID0gTXVsdGlwYXJ0SGFuZGxlOjpleHRyYWN0Qm91bmRhcnkoZC0+bV9yZXNwb25zZS5o
dHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSwgYm91bmRhcnkpOwot
ICAgICAgICAgICAgaWYgKHBhcnNlZCkKLSAgICAgICAgICAgICAgICBkLT5tX211bHRpcGFydEhh
bmRsZSA9IHN0ZDo6bWFrZV91bmlxdWU8TXVsdGlwYXJ0SGFuZGxlPihqb2IsIGJvdW5kYXJ5KTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIEhUVFAgcmVkaXJlY3Rpb24KLSAgICAgICAgaWYgKGlz
SHR0cFJlZGlyZWN0KGh0dHBDb2RlKSkgewotICAgICAgICAgICAgU3RyaW5nIGxvY2F0aW9uID0g
ZC0+bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkxvY2F0aW9uKTsK
LSAgICAgICAgICAgIGlmICghbG9jYXRpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
VVJMIG5ld1VSTCA9IFVSTChqb2ItPmZpcnN0UmVxdWVzdCgpLnVybCgpLCBsb2NhdGlvbik7Ci0K
LSAgICAgICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVkaXJlY3RlZFJlcXVlc3QgPSBqb2It
PmZpcnN0UmVxdWVzdCgpOwotICAgICAgICAgICAgICAgIHJlZGlyZWN0ZWRSZXF1ZXN0LnNldFVS
TChuZXdVUkwpOwotICAgICAgICAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UgPSBk
LT5tX3Jlc3BvbnNlOwotICAgICAgICAgICAgICAgIGlmIChjbGllbnQpCi0gICAgICAgICAgICAg
ICAgICAgIGNsaWVudC0+d2lsbFNlbmRSZXF1ZXN0KGpvYiwgV1RGTW92ZShyZWRpcmVjdGVkUmVx
dWVzdCksIFdURk1vdmUocmVzcG9uc2UpKTsKLQotICAgICAgICAgICAgICAgIGQtPm1fZmlyc3RS
ZXF1ZXN0LnNldFVSTChuZXdVUkwpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsU2l6
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChpc0h0dHBBdXRoZW50aWNhdGlv
bihodHRwQ29kZSkpIHsKLSAgICAgICAgICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0aW9uU3Bh
Y2U7Ci0gICAgICAgICAgICBpZiAoZ2V0UHJvdGVjdGlvblNwYWNlKGpvYiwgZC0+bV9yZXNwb25z
ZSwgcHJvdGVjdGlvblNwYWNlKSkgewotICAgICAgICAgICAgICAgIENyZWRlbnRpYWwgY3JlZGVu
dGlhbDsKLSAgICAgICAgICAgICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBjaGFsbGVuZ2Uo
cHJvdGVjdGlvblNwYWNlLCBjcmVkZW50aWFsLCBkLT5tX2F1dGhGYWlsdXJlQ291bnQsIGQtPm1f
cmVzcG9uc2UsIFJlc291cmNlRXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgY2hhbGxlbmdlLnNl
dEF1dGhlbnRpY2F0aW9uQ2xpZW50KGpvYik7Ci0gICAgICAgICAgICAgICAgam9iLT5kaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY2hhbGxlbmdlKTsKLSAgICAgICAgICAgICAgICBk
LT5tX2F1dGhGYWlsdXJlQ291bnQrKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG90YWxTaXpl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNsaWVudCkgewotICAg
ICAgICAgICAgaWYgKGlzSHR0cE5vdE1vZGlmaWVkKGh0dHBDb2RlKSkgewotICAgICAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyYgdXJsID0gam9iLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmco
KTsKLSAgICAgICAgICAgICAgICBpZiAoQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5n
ZXRDYWNoZWRSZXNwb25zZSh1cmwsIGQtPm1fcmVzcG9uc2UpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChkLT5tX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSgyMDApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dCgiT0siKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGpvYiwgUmVzb3VyY2VSZXNw
b25zZShkLT5tX3Jlc3BvbnNlKSk7Ci0gICAgICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJ
bnN0YW5jZSgpLmRpZFJlY2VpdmVSZXNwb25zZSgqam9iLCBkLT5tX3Jlc3BvbnNlKTsKLSAgICAg
ICAgfQotICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFJlc3BvbnNlRmlyZWQodHJ1ZSk7CiAKKyAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChbam9iLCBodHRwQ29kZSwgY29udGVudExlbmd0aF0gewor
ICAgICAgICAgICAgam9iLT5kaWRSZWNlaXZlQWxsSGVhZGVycyhodHRwQ29kZSwgY29udGVudExl
bmd0aCk7CisgICAgICAgIH0pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBzcGxpdFBvcyA9
IGhlYWRlci5maW5kKCI6Iik7Ci0gICAgICAgIGlmIChzcGxpdFBvcyAhPSAtMSkgewotICAgICAg
ICAgICAgU3RyaW5nIGtleSA9IGhlYWRlci5sZWZ0KHNwbGl0UG9zKS5zdHJpcFdoaXRlU3BhY2Uo
KTsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGhlYWRlci5zdWJzdHJpbmcoc3BsaXRQb3Mg
KyAxKS5zdHJpcFdoaXRlU3BhY2UoKTsKLQotICAgICAgICAgICAgaWYgKGlzQXBwZW5kYWJsZUhl
YWRlcihrZXkpKQotICAgICAgICAgICAgICAgIGQtPm1fcmVzcG9uc2UuYWRkSFRUUEhlYWRlckZp
ZWxkKGtleSwgdmFsdWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGQtPm1f
cmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGtleSwgdmFsdWUpOwotICAgICAgICB9IGVsc2Ug
aWYgKGhlYWRlci5zdGFydHNXaXRoKCJIVFRQIiwgZmFsc2UpKSB7Ci0gICAgICAgICAgICAvLyBU
aGlzIGlzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSByZXNwb25zZS4KLSAgICAgICAgICAgIC8vIEV4
dHJhY3QgdGhlIGh0dHAgc3RhdHVzIHRleHQgZnJvbSB0aGlzLgotICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgIC8vIElmIHRoZSBGT0xMT1dMT0NBVElPTiBvcHRpb24gaXMgZW5hYmxlZCBmb3Ig
dGhlIGN1cmwgaGFuZGxlIHRoZW4KLSAgICAgICAgICAgIC8vIGN1cmwgd2lsbCBmb2xsb3cgdGhl
IHJlZGlyZWN0aW9ucyBpbnRlcm5hbGx5LiBUaHVzIHRoaXMgaGVhZGVyIGNhbGxiYWNrCi0gICAg
ICAgICAgICAvLyB3aWxsIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25lIHRpbWUgd2l0aCB0aGUgbGlu
ZSBzdGFydGluZyAiSFRUUCIgZm9yIG9uZSBqb2IuCi0gICAgICAgICAgICBsb25nIGh0dHBDb2Rl
ID0gMDsKLSAgICAgICAgICAgIGQtPm1fY3VybEhhbmRsZS5nZXRSZXNwb25zZUNvZGUoaHR0cENv
ZGUpOwotCi0gICAgICAgICAgICBTdHJpbmcgaHR0cENvZGVTdHJpbmcgPSBTdHJpbmc6Om51bWJl
cihodHRwQ29kZSk7Ci0gICAgICAgICAgICBpbnQgc3RhdHVzQ29kZVBvcyA9IGhlYWRlci5maW5k
KGh0dHBDb2RlU3RyaW5nKTsKLQotICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGVQb3MgIT0gLTEp
IHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgc3RhdHVzIHRleHQgaXMgYWZ0ZXIgdGhlIHN0YXR1
cyBjb2RlLgotICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBoZWFkZXIuc3Vic3RyaW5n
KHN0YXR1c0NvZGVQb3MgKyBodHRwQ29kZVN0cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAg
ICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChzdGF0dXMuc3RyaXBXaGl0ZVNwYWNl
KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KKyAgICAgICAgam9iLT5kaWRSZWNlaXZl
SGVhZGVyTGluZShoZWFkZXIpOwogICAgIH0KIAogICAgIHJldHVybiB0b3RhbFNpemU7CiB9CiAK
LS8qIFRoaXMgaXMgY2FsbGVkIHRvIG9idGFpbiBIVFRQIFBPU1Qgb3IgUFVUIGRhdGEuCi1JdGVy
YXRlIHRocm91Z2ggRm9ybURhdGEgZWxlbWVudHMgYW5kIHVwbG9hZCBmaWxlcy4KLUNhcmVmdWxs
eSByZXNwZWN0IHRoZSBnaXZlbiBidWZmZXIgc2l6ZSBhbmQgZmlsbCB0aGUgcmVzdCBvZiB0aGUg
ZGF0YSBhdCB0aGUgbmV4dCBjYWxscy4KLSovCi1zaXplX3QgcmVhZENhbGxiYWNrKGNoYXIqIHB0
ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKKy8vIGNhbGxlZCB3aXRo
IGRhdGEgYWZ0ZXIgYWxsIGhlYWRlcnMgaGF2ZSBiZWVuIHByb2Nlc3NlZCB2aWEgaGVhZGVyQ2Fs
bGJhY2sKK3NpemVfdCBSZXNvdXJjZUhhbmRsZTo6d3JpdGVDYWxsYmFjayhjaGFyKiBwdHIsIHNp
emVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCiB7CisgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CisKICAgICBSZXNvdXJjZUhhbmRsZSogam9iID0gc3RhdGljX2Nhc3Q8UmVz
b3VyY2VIYW5kbGUqPihkYXRhKTsKICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gam9i
LT5nZXRJbnRlcm5hbCgpOwotCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQogICAgICAgICByZXR1
cm4gMDsKIAogICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiBkZWZlcnJlZCBs
b2FkaW5nIGlzIGFjdGl2YXRlZC4KICAgICBBU1NFUlQoIWQtPm1fZGVmZXJzTG9hZGluZyk7CiAK
LSAgICBpZiAoIXNpemUgfHwgIW5tZW1iKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICgh
ZC0+bV9mb3JtRGF0YVN0cmVhbS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IHNpemUgKiBubWVtYjsKIAotICAgIHNpemVfdCBzZW50
ID0gZC0+bV9mb3JtRGF0YVN0cmVhbS5yZWFkKHB0ciwgc2l6ZSwgbm1lbWIpOworICAgIC8vIHRo
aXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBidXQgYXBwYXJlbnRseSBpcy4gQ1VSTCB3cml0ZXMg
dGhlIGRhdGEKKyAgICAvLyBvZiBodG1sIHBhZ2UgZXZlbiBpZiBpdCBpcyBhIHJlZGlyZWN0IHRo
YXQgd2FzIGhhbmRsZWQgaW50ZXJuYWxseQorICAgIC8vIGNhbiBiZSBvYnNlcnZlZCBlLmcuIG9u
IGdtYWlsLmNvbQorICAgIGxvbmcgaHR0cENvZGUgPSAwOworICAgIENVUkxjb2RlIGVyckNkID0g
ZC0+bV9jdXJsSGFuZGxlLmdldFJlc3BvbnNlQ29kZShodHRwQ29kZSk7CisgICAgaWYgKENVUkxF
X09LID09IGVyckNkICYmIGh0dHBDb2RlID49IDMwMCAmJiBodHRwQ29kZSA8IDQwMCkKKyAgICAg
ICAgcmV0dXJuIHRvdGFsU2l6ZTsKIAotICAgIC8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHNvIGNh
bmNlbCB0aGUgam9iLgotICAgIGlmICghc2VudCkKLSAgICAgICAgam9iLT5jYW5jZWwoKTsKKyAg
ICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIGJ1ZmZlci5hcHBlbmQocHRyLCB0b3RhbFNpemUp
OwogCi0gICAgcmV0dXJuIHNlbnQ7Ci19CisgICAgYm9vbCBzaG91bGRDYWxsIHsgZmFsc2UgfTsK
KyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGpvYi0+bV9yZWNlaXZlZFF1ZXVlTXV0
ZXgpOwogCi1zdGF0aWMgaW5saW5lIHNpemVfdCBnZXRGb3JtRWxlbWVudHNDb3VudChSZXNvdXJj
ZUhhbmRsZSogam9iKQotewotICAgIFJlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEgPSBqb2ItPmZp
cnN0UmVxdWVzdCgpLmh0dHBCb2R5KCk7CisgICAgICAgIGlmIChqb2ItPm1fcmVjZWl2ZWRRdWV1
ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBzaG91bGRDYWxsID0gdHJ1ZTsKIAotICAgIGlmICgh
Zm9ybURhdGEpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICBqb2ItPm1fcmVjZWl2ZWRRdWV1
ZS5hcHBlbmQoYnVmZmVyKTsKKyAgICB9CiAKLSAgICAvLyBSZXNvbHZlIHRoZSBibG9iIGVsZW1l
bnRzIHNvIHRoZSBmb3JtRGF0YSBjYW4gY29ycmVjdGx5IHJlcG9ydCBpdCdzIHNpemUuCi0gICAg
Zm9ybURhdGEgPSBmb3JtRGF0YS0+cmVzb2x2ZUJsb2JSZWZlcmVuY2VzKCk7Ci0gICAgc2l6ZV90
IHNpemUgPSBmb3JtRGF0YS0+ZWxlbWVudHMoKS5zaXplKCk7Ci0gICAgam9iLT5maXJzdFJlcXVl
c3QoKS5zZXRIVFRQQm9keShXVEZNb3ZlKGZvcm1EYXRhKSk7CisgICAgaWYgKHNob3VsZENhbGwp
IHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbam9iXSB7CisgICAgICAgICAgICBqb2ItPmRp
ZFJlY2VpdmVDb250ZW50RGF0YSgpOworICAgICAgICB9KTsKKyAgICB9CiAKLSAgICByZXR1cm4g
c2l6ZTsKKyAgICByZXR1cm4gdG90YWxTaXplOwogfQogCi1zdGF0aWMgdm9pZCBzZXR1cEZvcm1E
YXRhKFJlc291cmNlSGFuZGxlKiBqb2IsIGJvb2wgaXNQb3N0UmVxdWVzdCkKLXsKLSAgICBSZXNv
dXJjZUhhbmRsZUludGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOwotICAgIFZlY3RvcjxG
b3JtRGF0YUVsZW1lbnQ+IGVsZW1lbnRzID0gam9iLT5maXJzdFJlcXVlc3QoKS5odHRwQm9keSgp
LT5lbGVtZW50cygpOwotICAgIHNpemVfdCBudW1FbGVtZW50cyA9IGVsZW1lbnRzLnNpemUoKTsK
Ky8vIHN5bmMgbG9hZGVyCiAKLSAgICBzdGF0aWMgY29uc3QgbG9uZyBsb25nIG1heEN1cmxPZmZU
ID0gZC0+bV9jdXJsSGFuZGxlLm1heEN1cmxPZmZUKCk7Cit2b2lkIFJlc291cmNlSGFuZGxlOjpw
bGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMsIFJl
c291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNo
YXI+JiBkYXRhKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICAvLyBPYnRh
aW4gdGhlIHRvdGFsIHNpemUgb2YgdGhlIGZvcm0gZGF0YQotICAgIGN1cmxfb2ZmX3Qgc2l6ZSA9
IDA7Ci0gICAgYm9vbCBjaHVua2VkVHJhbnNmZXIgPSBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHsKLSAgICAgICAgRm9ybURhdGFFbGVtZW50IGVs
ZW1lbnQgPSBlbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1E
YXRhRWxlbWVudDo6VHlwZTo6RW5jb2RlZEZpbGUpIHsKLSAgICAgICAgICAgIGxvbmcgbG9uZyBm
aWxlU2l6ZVJlc3VsdDsKLSAgICAgICAgICAgIGlmIChnZXRGaWxlU2l6ZShlbGVtZW50Lm1fZmls
ZW5hbWUsIGZpbGVTaXplUmVzdWx0KSkgewotICAgICAgICAgICAgICAgIGlmIChmaWxlU2l6ZVJl
c3VsdCA+IG1heEN1cmxPZmZUKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZpbGUgc2l6ZSBp
cyB0b28gYmlnIGZvciBzcGVjaWZ5aW5nIGl0IHRvIGNVUkwKLSAgICAgICAgICAgICAgICAgICAg
Y2h1bmtlZFRyYW5zZmVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNpemUgKz0gZmlsZVNpemVSZXN1bHQ7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNodW5rZWRUcmFuc2ZlciA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgc2l6ZSArPSBlbGVtZW50c1tpXS5tX2RhdGEuc2l6ZSgpOwotICAgIH0K
KyAgICBTeW5jaHJvbm91c0xvYWRlckNsaWVudCBjbGllbnQ7CisgICAgUmVmUHRyPFJlc291cmNl
SGFuZGxlPiBoYW5kbGUgPSBhZG9wdFJlZihuZXcgUmVzb3VyY2VIYW5kbGUoY29udGV4dCwgcmVx
dWVzdCwgJmNsaWVudCwgZmFsc2UsIGZhbHNlKSk7CiAKLSAgICAvLyBjVVJMIGd1ZXNzZXMgdGhh
dCB3ZSB3YW50IGNodW5rZWQgZW5jb2RpbmcgYXMgbG9uZyBhcyB3ZSBzcGVjaWZ5IHRoZSBoZWFk
ZXIKLSAgICBpZiAoY2h1bmtlZFRyYW5zZmVyKQotICAgICAgICBkLT5tX2N1cmxIYW5kbGUuYXBw
ZW5kUmVxdWVzdEhlYWRlcigiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgaWYgKGlzUG9zdFJlcXVlc3QpCi0gICAgICAgICAgICBkLT5tX2N1cmxIYW5k
bGUuc2V0UG9zdEZpZWxkTGFyZ2Uoc2l6ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGQt
Pm1fY3VybEhhbmRsZS5zZXRJbkZpbGVTaXplTGFyZ2Uoc2l6ZSk7Ci0gICAgfQorICAgIGhhbmRs
ZS5nZXQoKS0+ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigpOwogCi0gICAgZC0+bV9jdXJsSGFuZGxl
LnNldFJlYWRDYWxsYmFja0Z1bmN0aW9uKHJlYWRDYWxsYmFjaywgam9iKTsKKyAgICBlcnJvciA9
IGNsaWVudC5lcnJvcigpOworICAgIGRhdGEuc3dhcChjbGllbnQubXV0YWJsZURhdGEoKSk7Cisg
ICAgcmVzcG9uc2UgPSBjbGllbnQucmVzcG9uc2UoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6c2V0dXBQVVQoKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlzcGF0Y2hTeW5jaHJvbm91c0pv
YigpCiB7Ci0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGdldEludGVybmFsKCk7Ci0g
ICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBQdXRSZXF1ZXN0KCk7Ci0KLSAgICAvLyBEaXNh
YmxlIHRoZSBFeHBlY3Q6IDEwMCBjb250aW51ZSBoZWFkZXIKLSAgICBkLT5tX2N1cmxIYW5kbGUu
YXBwZW5kUmVxdWVzdEhlYWRlcigiRXhwZWN0OiIpOworICAgIFVSTCBrdXJsID0gZmlyc3RSZXF1
ZXN0KCkudXJsKCk7CiAKLSAgICBzaXplX3QgbnVtRWxlbWVudHMgPSBnZXRGb3JtRWxlbWVudHND
b3VudCh0aGlzKTsKLSAgICBpZiAoIW51bUVsZW1lbnRzKQorICAgIGlmIChrdXJsLnByb3RvY29s
SXNEYXRhKCkpIHsKKyAgICAgICAgaGFuZGxlRGF0YVVSTCgpOwogICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgc2V0dXBGb3JtRGF0YSh0aGlzLCBmYWxzZSk7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OnNldHVwUE9TVCgpCi17CiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9
IGdldEludGVybmFsKCk7Ci0gICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBQb3N0UmVxdWVz
dCgpOwogCi0gICAgc2l6ZV90IG51bUVsZW1lbnRzID0gZ2V0Rm9ybUVsZW1lbnRzQ291bnQodGhp
cyk7Ci0gICAgaWYgKCFudW1FbGVtZW50cykKLSAgICAgICAgcmV0dXJuOworICAgIC8vIElmIGRl
ZmVyc0xvYWRpbmcgaXMgdHJ1ZSBhbmQgd2UgY2FsbCBjdXJsX2Vhc3lfcGVyZm9ybQorICAgIC8v
IG9uIGEgcGF1c2VkIGhhbmRsZSwgbGliY1VSTCB3b3VsZCBkbyB0aGUgdHJhbnNmZXJ0IGFueXdh
eQorICAgIC8vIGFuZCB3ZSB3b3VsZCBhc3NlcnQgc28gZm9yY2UgZGVmZXJzTG9hZGluZyB0byBi
ZSBmYWxzZS4KKyAgICBkLT5tX2RlZmVyc0xvYWRpbmcgPSBmYWxzZTsKIAotICAgIC8vIERvIG5v
dCBzdHJlYW0gZm9yIHNpbXBsZSBQT1NUIGRhdGEKLSAgICBpZiAobnVtRWxlbWVudHMgPT0gMSkg
ewotICAgICAgICBmaXJzdFJlcXVlc3QoKS5odHRwQm9keSgpLT5mbGF0dGVuKGQtPm1fcG9zdEJ5
dGVzKTsKLSAgICAgICAgaWYgKGQtPm1fcG9zdEJ5dGVzLnNpemUoKSkKLSAgICAgICAgICAgIGQt
Pm1fY3VybEhhbmRsZS5zZXRQb3N0RmllbGRzKGQtPm1fcG9zdEJ5dGVzLmRhdGEoKSwgZC0+bV9w
b3N0Qnl0ZXMuc2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbml0aWFsaXpl
KCk7CiAKLSAgICBzZXR1cEZvcm1EYXRhKHRoaXMsIHRydWUpOworICAgIC8vIGN1cmxfZWFzeV9w
ZXJmb3JtIGJsb2NrcyB1bnRpbCB0aGUgdHJhbnNmZXJ0IGlzIGZpbmlzaGVkLgorICAgIENVUkxj
b2RlIHJldCA9IGQtPm1fY3VybEhhbmRsZS5wZXJmb3JtKCk7CisKKyNpZiBFTkFCTEUoV0VCX1RJ
TUlORykKKyAgICBjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMoKTsKKyNlbmRpZgorCisg
ICAgaWYgKGNsaWVudCgpKSB7CisgICAgICAgIGlmIChyZXQgIT0gQ1VSTEVfT0spCisgICAgICAg
ICAgICBjbGllbnQoKS0+ZGlkRmFpbCh0aGlzLCBSZXNvdXJjZUVycm9yKGQtPm1fY3VybEhhbmRs
ZSwgZC0+bV9zc2xFcnJvcnMpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2xpZW50KCkt
PmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCBSZXNvdXJjZVJlc3BvbnNlKGQtPm1fcmVzcG9uc2Up
KTsKKyAgICB9CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwoKQpAQCAt
NzYzLDIxOCArMTA2Myw2IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwoKQog
ICAgICAgICBjbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKIH0KIAotdm9pZCBSZXNv
dXJjZUhhbmRsZTo6ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigpCi17Ci0gICAgVVJMIGt1cmwgPSBm
aXJzdFJlcXVlc3QoKS51cmwoKTsKLQotICAgIGlmIChrdXJsLnByb3RvY29sSXNEYXRhKCkpIHsK
LSAgICAgICAgaGFuZGxlRGF0YVVSTCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGdldEludGVybmFsKCk7Ci0KLSAgICAvLyBJZiBk
ZWZlcnNMb2FkaW5nIGlzIHRydWUgYW5kIHdlIGNhbGwgY3VybF9lYXN5X3BlcmZvcm0KLSAgICAv
LyBvbiBhIHBhdXNlZCBoYW5kbGUsIGxpYmNVUkwgd291bGQgZG8gdGhlIHRyYW5zZmVydCBhbnl3
YXkKLSAgICAvLyBhbmQgd2Ugd291bGQgYXNzZXJ0IHNvIGZvcmNlIGRlZmVyc0xvYWRpbmcgdG8g
YmUgZmFsc2UuCi0gICAgZC0+bV9kZWZlcnNMb2FkaW5nID0gZmFsc2U7Ci0KLSAgICBpbml0aWFs
aXplKCk7Ci0KLSAgICAvLyBjdXJsX2Vhc3lfcGVyZm9ybSBibG9ja3MgdW50aWwgdGhlIHRyYW5z
ZmVydCBpcyBmaW5pc2hlZC4KLSAgICBDVVJMY29kZSByZXQgPSBkLT5tX2N1cmxIYW5kbGUucGVy
Zm9ybSgpOwotCi0gICAgaWYgKHJldCAhPSBDVVJMRV9PSykgewotICAgICAgICBSZXNvdXJjZUVy
cm9yIGVycm9yKEFTQ0lJTGl0ZXJhbChlcnJvckRvbWFpbkN1cmwpLCByZXQsIGt1cmwsIFN0cmlu
ZyhjdXJsX2Vhc3lfc3RyZXJyb3IocmV0KSkpOwotICAgICAgICBlcnJvci5zZXRTU0xFcnJvcnMo
ZC0+bV9zc2xFcnJvcnMpOwotICAgICAgICBkLT5jbGllbnQoKS0+ZGlkRmFpbCh0aGlzLCBlcnJv
cik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGQtPmNsaWVudCgpKQotICAgICAgICAgICAg
ZC0+Y2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCBSZXNvdXJjZVJlc3BvbnNlKGQt
Pm1fcmVzcG9uc2UpKTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoV0VCX1RJTUlORykKLSAgICBjYWxj
dWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMoZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6YXBwbHlBdXRoZW50aWNhdGlvbigpCi17Ci0gICAgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0ID0gZmlyc3RSZXF1ZXN0KCk7Ci0gICAgLy8gbV91c2VyL21fcGFzcyBhcmUgY3JlZGVu
dGlhbHMgZ2l2ZW4gbWFudWFsbHksIGZvciBpbnN0YW5jZSwgYnkgdGhlIGFyZ3VtZW50cyBwYXNz
ZWQgdG8gWE1MSHR0cFJlcXVlc3Qub3BlbigpLgotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwq
IGQgPSBnZXRJbnRlcm5hbCgpOwotCi0gICAgU3RyaW5nIHBhcnRpdGlvbiA9IHJlcXVlc3QuY2Fj
aGVQYXJ0aXRpb24oKTsKLQotICAgIGlmIChzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpKSB7
Ci0gICAgICAgIGlmIChkLT5tX3VzZXIuaXNFbXB0eSgpICYmIGQtPm1fcGFzcy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83MTc0MDUwPiAtIEZvciBVUkxzIHRo
YXQgbWF0Y2ggdGhlIHBhdGhzIG9mIHRob3NlIHByZXZpb3VzbHkgY2hhbGxlbmdlZCBmb3IgSFRU
UCBCYXNpYyBhdXRoZW50aWNhdGlvbiwgCi0gICAgICAgICAgICAvLyB0cnkgYW5kIHJldXNlIHRo
ZSBjcmVkZW50aWFsIHByZWVtcHRpdmVseSwgYXMgYWxsb3dlZCBieSBSRkMgMjYxNy4KLSAgICAg
ICAgICAgIGQtPm1faW5pdGlhbENyZWRlbnRpYWwgPSBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVs
dENyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KHBhcnRpdGlvbiwgcmVxdWVzdC51cmwoKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcHJvdGVj
dGlvbiBzcGFjZSBrbm93biBmb3IgdGhlIFVSTCwgdXBkYXRlIHN0b3JlZCBjcmVkZW50aWFscwot
ICAgICAgICAgICAgLy8gYmVmb3JlIHNlbmRpbmcgYSByZXF1ZXN0LiBUaGlzIG1ha2VzIGl0IHBv
c3NpYmxlIHRvIGltcGxlbWVudCBsb2dvdXQgYnkgc2VuZGluZyBhbgotICAgICAgICAgICAgLy8g
WE1MSHR0cFJlcXVlc3Qgd2l0aCBrbm93biBpbmNvcnJlY3QgY3JlZGVudGlhbHMsIGFuZCBhYm9y
dGluZyBpdCBpbW1lZGlhdGVseSAoc28gdGhhdAotICAgICAgICAgICAgLy8gYW4gYXV0aGVudGlj
YXRpb24gZGlhbG9nIGRvZXNuJ3QgcG9wIHVwKS4KLSAgICAgICAgICAgIENyZWRlbnRpYWxTdG9y
YWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQocGFydGl0aW9uLCBDcmVkZW50aWFs
KGQtPm1fdXNlciwgZC0+bV9wYXNzLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSwgcmVxdWVz
dC51cmwoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBTdHJpbmcgdXNlciA9IGQtPm1fdXNl
cjsKLSAgICBTdHJpbmcgcGFzc3dvcmQgPSBkLT5tX3Bhc3M7Ci0KLSAgICBpZiAoIWQtPm1faW5p
dGlhbENyZWRlbnRpYWwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHVzZXIgPSBkLT5tX2luaXRpYWxD
cmVkZW50aWFsLnVzZXIoKTsKLSAgICAgICAgcGFzc3dvcmQgPSBkLT5tX2luaXRpYWxDcmVkZW50
aWFsLnBhc3N3b3JkKCk7Ci0gICAgICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVIdHRwQXV0aGVu
dGljYXRpb24oQ1VSTEFVVEhfQkFTSUMpOwotICAgIH0KLQotICAgIC8vIEl0IHNlZW1zIHdlIG5l
ZWQgdG8gc2V0IENVUkxPUFRfVVNFUlBXRCBldmVuIGlmIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBp
cyBlbXB0eS4KLSAgICAvLyBPdGhlcndpc2UgY1VSTCB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGNv
bnRpbnVlIHdpdGggYSBuZXcgcmVxdWVzdCBhZnRlciBhIDQwMSByZXNwb25zZS4KLQotICAgIC8v
IGN1cmwgQ1VSTE9QVF9VU0VSUFdEIGV4cGVjdHMgdXNlcm5hbWU6cGFzc3dvcmQKLSAgICBkLT5t
X2N1cmxIYW5kbGUuc2V0SHR0cEF1dGhVc2VyUGFzcyh1c2VyLCBwYXNzd29yZCk7Ci19Ci0KLXZv
aWQgUmVzb3VyY2VIYW5kbGU6OmluaXRpYWxpemUoKQotewotICAgIEN1cmxDb250ZXh0JiBjb250
ZXh0ID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpOwotCi0gICAgVVJMIHVybCA9IGZpcnN0UmVx
dWVzdCgpLnVybCgpOwotCi0gICAgLy8gUmVtb3ZlIGFueSBmcmFnbWVudCBwYXJ0LCBvdGhlcndp
c2UgY3VybCB3aWxsIHNlbmQgaXQgYXMgcGFydCBvZiB0aGUgcmVxdWVzdC4KLSAgICB1cmwucmVt
b3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0KLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBk
ID0gZ2V0SW50ZXJuYWwoKTsKLSAgICBTdHJpbmcgdXJsU3RyaW5nID0gdXJsLnN0cmluZygpOwot
Ci0gICAgaWYgKHVybC5pc0xvY2FsRmlsZSgpKSB7Ci0gICAgICAgIC8vIFJlbW92ZSBhbnkgcXVl
cnkgcGFydCBzZW50IHRvIGEgbG9jYWwgZmlsZS4KLSAgICAgICAgaWYgKCF1cmwucXVlcnkoKS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIEJ5IHNldHRpbmcgdGhlIHF1ZXJ5IHRvIGEgbnVs
bCBzdHJpbmcgaXQnbGwgYmUgcmVtb3ZlZC4KLSAgICAgICAgICAgIHVybC5zZXRRdWVyeShTdHJp
bmcoKSk7Ci0gICAgICAgICAgICB1cmxTdHJpbmcgPSB1cmwuc3RyaW5nKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBNSU1FIHR5cGUgYmFzZWQgb24gdGhlIHBhdGguCi0g
ICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlN
RVR5cGVGb3JQYXRoKHVybCkpOwotICAgIH0KLQotICAgIGlmIChkLT5tX2RlZmVyc0xvYWRpbmcp
IHsKLSAgICAgICAgQ1VSTGNvZGUgZXJyb3IgPSBkLT5tX2N1cmxIYW5kbGUucGF1c2UoQ1VSTFBB
VVNFX0FMTCk7Ci0gICAgICAgIC8vIElmIHdlIGRpZCBub3QgcGF1c2UgdGhlIGhhbmRsZSwgd2Ug
d291bGQgQVNTRVJUIGluIHRoZQotICAgICAgICAvLyBoZWFkZXIgY2FsbGJhY2suIFNvIGp1c3Qg
YXNzZXJ0IGhlcmUuCi0gICAgICAgIEFTU0VSVF9VTlVTRUQoZXJyb3IsIGVycm9yID09IENVUkxF
X09LKTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJs
ZVZlcmJvc2VJZlVzZWQoKTsKLSAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlU3RkRXJySWZVc2Vk
KCk7Ci0jZW5kaWYKLQotICAgIGQtPm1fY3VybEhhbmRsZS5zZXRTc2xWZXJpZnlQZWVyKEN1cmxI
YW5kbGU6OlZlcmlmeVBlZXJFbmFibGUpOwotICAgIGQtPm1fY3VybEhhbmRsZS5zZXRTc2xWZXJp
ZnlIb3N0KEN1cmxIYW5kbGU6OlZlcmlmeUhvc3RTdHJpY3ROYW1lQ2hlY2spOwotICAgIGQtPm1f
Y3VybEhhbmRsZS5zZXRQcml2YXRlRGF0YSh0aGlzKTsKLSAgICBkLT5tX2N1cmxIYW5kbGUuc2V0
V3JpdGVDYWxsYmFja0Z1bmN0aW9uKHdyaXRlQ2FsbGJhY2ssIHRoaXMpOwotICAgIGQtPm1fY3Vy
bEhhbmRsZS5zZXRIZWFkZXJDYWxsYmFja0Z1bmN0aW9uKGhlYWRlckNhbGxiYWNrLCB0aGlzKTsK
LSAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlQXV0b1JlZmVyZXIoKTsKLSAgICBkLT5tX2N1cmxI
YW5kbGUuZW5hYmxlRm9sbG93TG9jYXRpb24oKTsKLSAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxl
SHR0cEF1dGhlbnRpY2F0aW9uKENVUkxBVVRIX0FOWSk7Ci0gICAgZC0+bV9jdXJsSGFuZGxlLmVu
YWJsZVNoYXJlSGFuZGxlKCk7Ci0gICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZVRpbWVvdXQoKTsK
LSAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlQWxsb3dlZFByb3RvY29scygpOwotICAgIHNldFNT
TENsaWVudENlcnRpZmljYXRlKHRoaXMpOwotCi0gICAgaWYgKEN1cmxDb250ZXh0OjpzaW5nbGV0
b24oKS5zaG91bGRJZ25vcmVTU0xFcnJvcnMoKSkKLSAgICAgICAgZC0+bV9jdXJsSGFuZGxlLnNl
dFNzbFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlckRpc2FibGUpOwotICAgIGVsc2UK
LSAgICAgICAgc2V0U1NMVmVyaWZ5T3B0aW9ucyh0aGlzKTsKLQotICAgIGQtPm1fY3VybEhhbmRs
ZS5lbmFibGVDQUluZm9JZkV4aXN0cygpOwotCi0gICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUFj
Y2VwdEVuY29kaW5nKCk7Ci0gICAgZC0+bV9jdXJsSGFuZGxlLnNldFVybCh1cmxTdHJpbmcpOwot
ICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVDb29raWVKYXJJZkV4aXN0cygpOwotCi0gICAgZC0+
bV9jdXJsSGFuZGxlLmNsZWFyUmVxdWVzdEhlYWRlcnMoKTsKLQotICAgIGlmIChmaXJzdFJlcXVl
c3QoKS5odHRwSGVhZGVyRmllbGRzKCkuc2l6ZSgpID4gMCkgewotICAgICAgICBIVFRQSGVhZGVy
TWFwIGN1c3RvbUhlYWRlcnMgPSBmaXJzdFJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCk7Ci0K
LSAgICAgICAgYm9vbCBoYXNDYWNoZUhlYWRlcnMgPSBjdXN0b21IZWFkZXJzLmNvbnRhaW5zKEhU
VFBIZWFkZXJOYW1lOjpJZk1vZGlmaWVkU2luY2UpIHx8IGN1c3RvbUhlYWRlcnMuY29udGFpbnMo
SFRUUEhlYWRlck5hbWU6OklmTm9uZU1hdGNoKTsKLSAgICAgICAgaWYgKCFoYXNDYWNoZUhlYWRl
cnMgJiYgQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5pc0NhY2hlZCh1cmwpKSB7Ci0g
ICAgICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmFkZENhY2hlRW50cnlD
bGllbnQodXJsLCB0aGlzKTsKLSAgICAgICAgICAgIEhUVFBIZWFkZXJNYXAmIHJlcXVlc3RIZWFk
ZXJzID0gQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5yZXF1ZXN0SGVhZGVycyh1cmwp
OwotCi0gICAgICAgICAgICAvLyBhcHBlbmQgYWRkaXRpb25hbCBjYWNoZSBpbmZvcm1hdGlvbgot
ICAgICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVh
ZGVycy5iZWdpbigpOwotICAgICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gcmVxdWVzdEhlYWRlcnMuZW5kKCk7Ci0gICAgICAgICAgICB3aGlsZSAoaXQgIT0gZW5k
KSB7Ci0gICAgICAgICAgICAgICAgY3VzdG9tSGVhZGVycy5zZXQoaXQtPmtleSwgaXQtPnZhbHVl
KTsKLSAgICAgICAgICAgICAgICArK2l0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZC0+
bV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZm9yIChhdXRvIGN1c3RvbUhlYWRlciA6IGN1c3RvbUhlYWRlcnMpCi0gICAgICAgICAgICBk
LT5tX2N1cmxIYW5kbGUuYXBwZW5kUmVxdWVzdEhlYWRlcihjdXN0b21IZWFkZXIua2V5LCBjdXN0
b21IZWFkZXIudmFsdWUpOwotICAgIH0KLQotICAgIFN0cmluZyBtZXRob2QgPSBmaXJzdFJlcXVl
c3QoKS5odHRwTWV0aG9kKCk7Ci0gICAgaWYgKCJHRVQiID09IG1ldGhvZCkKLSAgICAgICAgZC0+
bV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBHZXRSZXF1ZXN0KCk7Ci0gICAgZWxzZSBpZiAoIlBPU1Qi
ID09IG1ldGhvZCkKLSAgICAgICAgc2V0dXBQT1NUKCk7Ci0gICAgZWxzZSBpZiAoIlBVVCIgPT0g
bWV0aG9kKQotICAgICAgICBzZXR1cFBVVCgpOwotICAgIGVsc2UgaWYgKCJIRUFEIiA9PSBtZXRo
b2QpCi0gICAgICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVIdHRwSGVhZFJlcXVlc3QoKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgZC0+bV9jdXJsSGFuZGxlLnNldEh0dHBDdXN0b21SZXF1ZXN0KG1l
dGhvZCk7Ci0gICAgICAgIHNldHVwUFVUKCk7Ci0gICAgfQotCi0gICAgZC0+bV9jdXJsSGFuZGxl
LmVuYWJsZVJlcXVlc3RIZWFkZXJzKCk7Ci0KLSAgICBhcHBseUF1dGhlbnRpY2F0aW9uKCk7Ci0K
LSAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlUHJveHlJZkV4aXN0cygpOwotfQotCi12b2lkIFJl
c291cmNlSGFuZGxlOjpoYW5kbGVDdXJsTXNnKENVUkxNc2cqIG1zZykKLXsKLSAgICBSZXNvdXJj
ZUhhbmRsZUludGVybmFsKiBkID0gZ2V0SW50ZXJuYWwoKTsKLQotICAgIGlmIChDVVJMRV9PSyA9
PSBtc2ctPmRhdGEucmVzdWx0KSB7Ci0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgICAgIGNh
bGN1bGF0ZVdlYlRpbWluZ0luZm9ybWF0aW9ucyhkKTsKLSNlbmRpZgotICAgICAgICBpZiAoIWQt
Pm1fcmVzcG9uc2UucmVzcG9uc2VGaXJlZCgpKSB7Ci0gICAgICAgICAgICBoYW5kbGVMb2NhbFJl
Y2VpdmVSZXNwb25zZSh0aGlzLCBkKTsKLSAgICAgICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZC0+bV9t
dWx0aXBhcnRIYW5kbGUpCi0gICAgICAgICAgICBkLT5tX211bHRpcGFydEhhbmRsZS0+Y29udGVu
dEVuZGVkKCk7Ci0KLSAgICAgICAgaWYgKGQtPmNsaWVudCgpKSB7Ci0gICAgICAgICAgICBkLT5j
bGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKLSAgICAgICAgICAgIEN1cmxDYWNoZU1h
bmFnZXI6OmdldEluc3RhbmNlKCkuZGlkRmluaXNoTG9hZGluZygqdGhpcyk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgICBVUkwgdXJsID0gZC0+bV9jdXJsSGFuZGxlLmdldEVmZmVj
dGl2ZVVSTCgpOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDdXJs
IEVSUk9SIGZvciB1cmw9JyVzJywgZXJyb3I6ICclcydcbiIsIHVybC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBjdXJsX2Vhc3lfc3RyZXJyb3IobXNnLT5kYXRhLnJlc3VsdCkpOwotI2VuZGlmCi0g
ICAgICAgIGlmIChkLT5jbGllbnQoKSkgewotICAgICAgICAgICAgUmVzb3VyY2VFcnJvciByZXNv
dXJjZUVycm9yKEFTQ0lJTGl0ZXJhbChlcnJvckRvbWFpbkN1cmwpLCBtc2ctPmRhdGEucmVzdWx0
LCB1cmwsIFN0cmluZyhjdXJsX2Vhc3lfc3RyZXJyb3IobXNnLT5kYXRhLnJlc3VsdCkpKTsKLSAg
ICAgICAgICAgIHJlc291cmNlRXJyb3Iuc2V0U1NMRXJyb3JzKGQtPm1fc3NsRXJyb3JzKTsKLSAg
ICAgICAgICAgIGQtPmNsaWVudCgpLT5kaWRGYWlsKHRoaXMsIHJlc291cmNlRXJyb3IpOwotICAg
ICAgICAgICAgQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRGYWlsKCp0aGlzKTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQ3YmQxOWJmMzE2Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDI1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8
YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLgotICogQ29weXJp
Z2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwY2VsZXJh
dG9yIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBCcmVudCBGdWxnaGFtIDxiZnVsZ2hhbUB3
ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJv
Z2FAcGFyb2dhLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBQZXRlciBHYWwgPGdhbHBldGVy
QGluZi51LXN6ZWdlZC5odT4sIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQWxleCBDaHJpc3RlbnNlbiA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZU1hbmFnZXIuaCIKLQotI2lmIFVT
RShDVVJMKQotCi0jaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJIVFRQ
SGVhZGVyTmFtZXMuaCIKLSNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgotI2luY2x1ZGUgIk11bHRp
cGFydEhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCi0jaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5o
IgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTU0xIYW5kbGUuaCIK
LSNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgotCi0jaWYgT1MoV0lORE9XUykKLSNl
bHNlCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZGVmaW5lIE1BWF9QQVRIIE1BWFBBVEhMRU4K
LSNlbmRpZgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2lmIEVO
QUJMRShXRUJfVElNSU5HKQotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2VuZGlmCi0j
aW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGludCBzZWxl
Y3RUaW1lb3V0TVMgPSA1Owotc3RhdGljIGNvbnN0IFNlY29uZHMgcG9sbFRpbWUgeyA1MF9tcyB9
OwotY29uc3QgaW50IG1heFJ1bm5pbmdKb2JzID0gMTI4OwotCi1SZXNvdXJjZUhhbmRsZU1hbmFn
ZXI6OlJlc291cmNlSGFuZGxlTWFuYWdlcigpCi0gICAgOiBtX2Rvd25sb2FkVGltZXIoKnRoaXMs
ICZSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjaykKLSAgICAsIG1f
cnVubmluZ0pvYnMoMCkKLXsKLQotfQotCi1SZXNvdXJjZUhhbmRsZU1hbmFnZXI6On5SZXNvdXJj
ZUhhbmRsZU1hbmFnZXIoKQotewotCi19Ci0KLVJlc291cmNlSGFuZGxlTWFuYWdlciogUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpCi17Ci0gICAgc3RhdGljIFJlc291cmNl
SGFuZGxlTWFuYWdlciogc2hhcmVkSW5zdGFuY2UgPSAwOwotICAgIGlmICghc2hhcmVkSW5zdGFu
Y2UpCi0gICAgICAgIHNoYXJlZEluc3RhbmNlID0gbmV3IFJlc291cmNlSGFuZGxlTWFuYWdlcigp
OwotICAgIHJldHVybiBzaGFyZWRJbnN0YW5jZTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZU1h
bmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjaygpCi17Ci0gICAgc3RhcnRTY2hlZHVsZWRKb2Jz
KCk7Ci0KLSAgICBmZF9zZXQgZmRyZWFkOwotICAgIGZkX3NldCBmZHdyaXRlOwotICAgIGZkX3Nl
dCBmZGV4Y2VwOwotICAgIGludCBtYXhmZCA9IDA7Ci0KLSAgICBzdHJ1Y3QgdGltZXZhbCB0aW1l
b3V0OwotICAgIHRpbWVvdXQudHZfc2VjID0gMDsKLSAgICB0aW1lb3V0LnR2X3VzZWMgPSBzZWxl
Y3RUaW1lb3V0TVMgKiAxMDAwOyAgICAgICAvLyBzZWxlY3Qgd2FpdHMgbWljcm9zZWNvbmRzCi0K
LSAgICAvLyBSZXRyeSAnc2VsZWN0JyBpZiBpdCB3YXMgaW50ZXJydXB0ZWQgYnkgYSBwcm9jZXNz
IHNpZ25hbC4KLSAgICBpbnQgcmMgPSAwOwotICAgIGRvIHsKLSAgICAgICAgbV9jdXJsTXVsdGlI
YW5kbGUuZ2V0RmRTZXQoZmRyZWFkLCBmZHdyaXRlLCBmZGV4Y2VwLCBtYXhmZCk7Ci0KLSAgICAg
ICAgLy8gV2hlbiB0aGUgMyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBlbXB0eSwgd2luc29jayB3aWxs
IHJldHVybiAtMQotICAgICAgICAvLyBhbmQgYmFpbCBvdXQsIHN0b3BwaW5nIHRoZSBmaWxlIGRv
d25sb2FkLiBTbyBtYWtlIHN1cmUgd2UKLSAgICAgICAgLy8gaGF2ZSB2YWxpZCBmaWxlIGRlc2Ny
aXB0b3JzIGJlZm9yZSBjYWxsaW5nIHNlbGVjdC4KLSAgICAgICAgaWYgKG1heGZkID49IDApCi0g
ICAgICAgICAgICByYyA9IDo6c2VsZWN0KG1heGZkICsgMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZm
ZGV4Y2VwLCAmdGltZW91dCk7Ci0gICAgfSB3aGlsZSAocmMgPT0gLTEgJiYgZXJybm8gPT0gRUlO
VFIpOwotCi0gICAgaWYgKC0xID09IHJjKSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBwZXJy
b3IoImJhZDogc2VsZWN0KCkgcmV0dXJuZWQgLTE6ICIpOwotI2VuZGlmCi0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpbnQgcnVubmluZ0hhbmRsZXMgPSAwOwotICAgIHdoaWxlIChtX2N1
cmxNdWx0aUhhbmRsZS5wZXJmb3JtKHJ1bm5pbmdIYW5kbGVzKSA9PSBDVVJMTV9DQUxMX01VTFRJ
X1BFUkZPUk0pIHsgfQotCi0gICAgLy8gY2hlY2sgdGhlIGN1cmwgbWVzc2FnZXMgaW5kaWNhdGlu
ZyBjb21wbGV0ZWQgdHJhbnNmZXJzCi0gICAgLy8gYW5kIGZyZWUgdGhlaXIgcmVzb3VyY2VzCi0g
ICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgaW50IG1lc3NhZ2VzSW5RdWV1ZSA9IDA7Ci0gICAg
ICAgIENVUkxNc2cqIG1zZyA9IG1fY3VybE11bHRpSGFuZGxlLnJlYWRJbmZvKG1lc3NhZ2VzSW5R
dWV1ZSk7Ci0gICAgICAgIGlmICghbXNnKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Ly8gZmluZCB0aGUgbm9kZSB3aGljaCBoYXMgc2FtZSBkLT5tX2hhbmRsZSBhcyBjb21wbGV0ZWQg
dHJhbnNmZXIKLSAgICAgICAgQ1VSTCogaGFuZGxlID0gbXNnLT5lYXN5X2hhbmRsZTsKLSAgICAg
ICAgQVNTRVJUKGhhbmRsZSk7Ci0gICAgICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSBudWxscHRy
OwotICAgICAgICBDVVJMY29kZSBlcnIgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhoYW5kbGUsIENVUkxJ
TkZPX1BSSVZBVEUsICZqb2IpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGVyciwgQ1VSTEVfT0sg
PT0gZXJyKTsKLSAgICAgICAgQVNTRVJUKGpvYik7Ci0gICAgICAgIGlmICgham9iKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2It
PmdldEludGVybmFsKCk7Ci0KLSAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7Ci0gICAgICAg
ICAgICByZW1vdmVGcm9tQ3VybChqb2IpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoQ1VSTE1TR19ET05FICE9IG1zZy0+bXNnKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgam9iLT5oYW5kbGVDdXJsTXNnKG1zZyk7Ci0gICAgICAgIHJl
bW92ZUZyb21DdXJsKGpvYik7Ci0gICAgfQotCi0gICAgYm9vbCBzdGFydGVkID0gc3RhcnRTY2hl
ZHVsZWRKb2JzKCk7IC8vIG5ldyBqb2JzIG1pZ2h0IGhhdmUgYmVlbiBhZGRlZCBpbiB0aGUgbWVh
bnRpbWUKLQotICAgIGlmICghbV9kb3dubG9hZFRpbWVyLmlzQWN0aXZlKCkgJiYgKHN0YXJ0ZWQg
fHwgKHJ1bm5pbmdIYW5kbGVzID4gMCkpKQotICAgICAgICBtX2Rvd25sb2FkVGltZXIuc3RhcnRP
bmVTaG90KHBvbGxUaW1lKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnJlbW92
ZUZyb21DdXJsKFJlc291cmNlSGFuZGxlKiBqb2IpCi17Ci0gICAgUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAgICBBU1NFUlQoZC0+bV9jdXJsSGFuZGxl
LmhhbmRsZSgpKTsKLSAgICBpZiAoIWQtPm1fY3VybEhhbmRsZS5oYW5kbGUoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fcnVubmluZ0pvYnMtLTsKLQotICAgIG1fY3VybE11bHRpSGFuZGxlLnJl
bW92ZUhhbmRsZShkLT5tX2N1cmxIYW5kbGUuaGFuZGxlKCkpOwotICAgIGpvYi0+ZGVyZWYoKTsK
LX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmFkZChSZXNvdXJjZUhhbmRsZSogam9i
KQotewotICAgIC8vIHdlIGNhbiBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gY3VybCwgc28gdG8gYXZv
aWQgcmUtZW50cmFuY3kgaXNzdWVzCi0gICAgLy8gc2NoZWR1bGUgdGhpcyBqb2IgdG8gYmUgYWRk
ZWQgdGhlIG5leHQgdGltZSB3ZSBlbnRlciBjdXJsIGRvd25sb2FkIGxvb3AKLSAgICBqb2ItPnJl
ZigpOwotICAgIG1fcmVzb3VyY2VIYW5kbGVMaXN0LmFwcGVuZChqb2IpOwotICAgIGlmICghbV9k
b3dubG9hZFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fZG93bmxvYWRUaW1lci5zdGFydE9u
ZVNob3QocG9sbFRpbWUpOwotfQotCi1ib29sIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6cmVtb3Zl
U2NoZWR1bGVkSm9iKFJlc291cmNlSGFuZGxlKiBqb2IpCi17Ci0gICAgaW50IHNpemUgPSBtX3Jl
c291cmNlSGFuZGxlTGlzdC5zaXplKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKLSAgICAgICAgaWYgKGpvYiA9PSBtX3Jlc291cmNlSGFuZGxlTGlzdFtpXSkgewotICAg
ICAgICAgICAgbV9yZXNvdXJjZUhhbmRsZUxpc3QucmVtb3ZlKGkpOwotICAgICAgICAgICAgam9i
LT5kZXJlZigpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c3RhcnRT
Y2hlZHVsZWRKb2JzKCkKLXsKLSAgICAvLyBUT0RPOiBDcmVhdGUgYSBzZXBhcmF0ZSBzdGFjayBv
ZiBqb2JzIGZvciBlYWNoIGRvbWFpbi4KLQotICAgIGJvb2wgc3RhcnRlZCA9IGZhbHNlOwotICAg
IHdoaWxlICghbV9yZXNvdXJjZUhhbmRsZUxpc3QuaXNFbXB0eSgpICYmIG1fcnVubmluZ0pvYnMg
PCBtYXhSdW5uaW5nSm9icykgewotICAgICAgICBSZXNvdXJjZUhhbmRsZSogam9iID0gbV9yZXNv
dXJjZUhhbmRsZUxpc3RbMF07Ci0gICAgICAgIG1fcmVzb3VyY2VIYW5kbGVMaXN0LnJlbW92ZSgw
KTsKLSAgICAgICAgc3RhcnRKb2Ioam9iKTsKLSAgICAgICAgc3RhcnRlZCA9IHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBzdGFydGVkOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6
c3RhcnRKb2IoUmVzb3VyY2VIYW5kbGUqIGpvYikKLXsKLSAgICBqb2ItPmluaXRpYWxpemUoKTsK
LQotICAgIG1fcnVubmluZ0pvYnMrKzsKLQotICAgIENVUkxNY29kZSByZXQgPSBtX2N1cmxNdWx0
aUhhbmRsZS5hZGRIYW5kbGUoam9iLT5nZXRJbnRlcm5hbCgpLT5tX2N1cmxIYW5kbGUuaGFuZGxl
KCkpOwotCi0gICAgLy8gZG9uJ3QgY2FsbCBwZXJmb3JtLCBiZWNhdXNlIGV2ZW50cyBtdXN0IGJl
IGFzeW5jCi0gICAgLy8gdGltZW91dCB3aWxsIG9jY3VyIGFuZCBkbyBjdXJsX211bHRpX3BlcmZv
cm0KLSAgICBpZiAocmV0ICYmIHJldCAhPSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0pIHsKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgJWQgc3RhcnRpbmcg
am9iICVzXG4iLCByZXQsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMoam9iLT5maXJzdFJl
cXVlc3QoKS51cmwoKS5zdHJpbmcoKSkubGF0aW4xKCkuZGF0YSgpKTsKLSNlbmRpZgotICAgICAg
ICBqb2ItPmNhbmNlbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIFJlc291
cmNlSGFuZGxlTWFuYWdlcjo6Y2FuY2VsKFJlc291cmNlSGFuZGxlKiBqb2IpCi17Ci0gICAgaWYg
KHJlbW92ZVNjaGVkdWxlZEpvYihqb2IpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXNvdXJj
ZUhhbmRsZUludGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOwotICAgIGQtPm1fY2FuY2Vs
bGVkID0gdHJ1ZTsKLSAgICBpZiAoIW1fZG93bmxvYWRUaW1lci5pc0FjdGl2ZSgpKQotICAgICAg
ICBtX2Rvd25sb2FkVGltZXIuc3RhcnRPbmVTaG90KHBvbGxUaW1lKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZWM4ZjUxMmU5OTYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBN
aWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFJl
c291cmNlSGFuZGxlTWFuYWdlcl9oCi0jZGVmaW5lIFJlc291cmNlSGFuZGxlTWFuYWdlcl9oCi0K
LSNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAi
VGltZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgotCi0jaWYgUExBVEZP
Uk0oV0lOKQotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2Vu
ZGlmCi0KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFJlc291cmNlSGFuZGxlTWFuYWdlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlc291cmNlSGFuZGxlTWFuYWdlciogc2hhcmVkSW5zdGFuY2UoKTsKLSAgICB2b2lkIGFkZChS
ZXNvdXJjZUhhbmRsZSopOwotICAgIHZvaWQgY2FuY2VsKFJlc291cmNlSGFuZGxlKik7Ci0KLXBy
aXZhdGU6Ci0gICAgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCk7Ci0gICAgflJlc291cmNlSGFuZGxl
TWFuYWdlcigpOwotICAgIHZvaWQgZG93bmxvYWRUaW1lckNhbGxiYWNrKCk7Ci0gICAgdm9pZCBy
ZW1vdmVGcm9tQ3VybChSZXNvdXJjZUhhbmRsZSopOwotICAgIGJvb2wgcmVtb3ZlU2NoZWR1bGVk
Sm9iKFJlc291cmNlSGFuZGxlKik7Ci0gICAgdm9pZCBzdGFydEpvYihSZXNvdXJjZUhhbmRsZSop
OwotICAgIGJvb2wgc3RhcnRTY2hlZHVsZWRKb2JzKCk7Ci0KLSAgICBUaW1lciBtX2Rvd25sb2Fk
VGltZXI7Ci0gICAgVmVjdG9yPFJlc291cmNlSGFuZGxlKj4gbV9yZXNvdXJjZUhhbmRsZUxpc3Q7
Ci0gICAgaW50IG1fcnVubmluZ0pvYnM7Ci0KLSAgICBDdXJsTXVsdGlIYW5kbGUgbV9jdXJsTXVs
dGlIYW5kbGU7Ci19OwotCi19Ci0KLSNlbmRpZgo=
</data>
<flag name="review"
          id="336318"
          type_id="1"
          status="-"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315682</attachid>
            <date>2017-07-17 11:08:40 -0700</date>
            <delta_ts>2017-07-17 17:02:39 -0700</delta_ts>
            <desc>PATCH with reviewed advices</desc>
            <filename>173991-5.diff</filename>
            <type>text/plain</type>
            <size>93408</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZTJjMWYzZWYwMy4uN2YzZTMxNDczNDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzcgQEAKKzIwMTctMDctMTcgIEJhc3VrZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNv
bnkuY29tPgorCisgICAgICAgIFtDdXJsXSBVbmlmeSBSZXNvdXJjZUhhbmRsZU1hbmFnZXIgaW50
byBDdXJsSm9iTWFuYWdlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3Mzk5MQorCisgICAgICAgIFVzZSBDdXJsSm9iTWFuYWdlciB0byBtYWtlIFJl
c291cmNlSGFuZGxlIHJ1biBpbiBiYWNrZ3JvdW5kLgorICAgICAgICBDdXJsSm9iTWFuYWdlcjo6
c3RhcnQoKSBub3cgYWNjZXB0IGNhbGxiYWNrIHRvIG1hbmFnZSBsaWZlIGN5Y2xlCisgICAgICAg
IG9mIHRoZSByZXNvdXJjZSBlYXNpbHkgaW4gYSBzYW1lIGNvbnRleHQuCisgICAgICAgIEFjdHVh
bCBtYW5hZ2VtZW50IHRhc2tzIG9mIEN1cmxKb2JNYW5hZ2VyIGlzIG5vdyBwcml2YXRlIGNsYXNz
CisgICAgICAgIGluIEN1cmxKb2JNYW5hZ2VyIHdoaWNoIGlzIGJldHRlciB0aHJlYWQgc2FmZW5l
c3MuCisgICAgICAgIFJlc291cmNlSGFuZGxlTWFuYWdlciBpcyBkZWxldGVkIGF0IGFsbC4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3Jt
L0N1cmwuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpDdXJsSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxIYW5kbGU6On5DdXJsSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6
OnJlY292ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVycm9yRGVzY3JpcHRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6cGVyZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJsSGFuZGxlOjpwYXVzZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxl
OjphcHBlbmRSZXF1ZXN0SGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjph
cHBlbmRSZXF1ZXN0SGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVuYWJs
ZVJlcXVlc3RIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmdldENvb2tp
ZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6Z2V0RWZmZWN0aXZlVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OnNldFByaXZhdGVEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmNsZWFyUmVxdWVzdEhlYWRlcnMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6Y2xlYXJDb29raWVMaXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxTTGlzdDo6Q3VybFNMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxTTGlzdDo6fkN1cmxTTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU0xpc3Q6Om9w
ZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU0xpc3Q6Om9wZXJhdG9yIGNvbnN0IG5h
dGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU0xpc3Q6Om9wZXJhdG9yIG5hdGl2ZSogKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxTTGlzdDo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsU0xpc3Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTTGlzdDo6YXBwZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVycm9yQ29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJsSGFuZGxlOjpzZXRFcnJvckNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bEhhbmRsZTo6cHJpdmF0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6c2V0
UHJpdmF0ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxv
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpzdGFydCk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
RG93bmxvYWQ6OmFkZEhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpk
aWRGaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpkaWRGYWlsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZDo6aGFuZGxlQ3VybE1zZyk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5oOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsSm9iTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsSm9iTGlzdDo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JMaXN0
OjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYkxpc3Q6OmNvbXBsZXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxKb2JMaXN0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxKb2JMaXN0Ojp3aXRoSm9iKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JMaXN0Ojp3
aXRoQ3VybEhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6YWRkKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpjYW5jZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybEpvYk1hbmFnZXI6OmNhbGxPbkpvYlRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsSm9iTWFuYWdlcjo6c3RhcnRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsSm9iTWFuYWdlcjo6c3RvcFRocmVhZElmTm9Nb3JlSm9iUnVubmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6c3RvcFRocmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsSm9iTWFuYWdlcjo6dXBkYXRlSm9icyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9i
TWFuYWdlcjo6d29ya2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2Vy
OjpDdXJsSm9iTWFuYWdlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFu
YWdlcjo6fkN1cmxKb2JNYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxK
b2JNYW5hZ2VyOjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1h
bmFnZXI6OmdldEFjdGl2ZUNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxK
b2JNYW5hZ2VyOjpnZXRQZW5kaW5nQ291bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q3VybEpvYk1hbmFnZXI6OnN0b3BUaHJlYWRJZklkbGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybEpvYk1hbmFnZXI6OnVwZGF0ZUhhbmRsZUxpc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OmFkZFRvQ3VybCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsSm9iTWFuYWdlci5oOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybEpvYjo6Q3VybEpvYik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iOjp+
Q3VybEpvYik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iOjpvcGVyYXRvcj0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybEpvYjo6Y3VybEhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
Sm9iOjp0aWNrZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYjo6ZmluaXNoZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybEpvYjo6ZXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpv
Yjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2I6OnN3YXApOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsSm9iTWFuYWdlcjo6fkN1cmxKb2JNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxK
b2JNYW5hZ2VyOjppc0FjdGl2ZUpvYik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdl
cjo6cnVuVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2Vy
OjpzZXRSdW5UaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9SZXNvdXJjZUVycm9yLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUVycm9yOjpSZXNv
dXJjZUVycm9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5k
bGVDdXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VI
YW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnN0YXJ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OmFwcGx5QXV0aGVudGljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Rm9ybUVs
ZW1lbnRzQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldHVwUFVU
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXR1cFBPU1QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldHVwRm9ybURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZUlu
Zm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJz
TG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGlkRmluaXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkaWRGYWlsKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENyZWRl
bnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkUmVxdWVz
dFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGU6OmNhbGN1bGF0ZVdlYlRpbWluZ0luZm9ybWF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6aGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OndpbGxQcmVwYXJlU2VuZERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVIZWFkZXJMaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQWxsSGVhZGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUNvbnRlbnREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZWFkQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmhlYWRlckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlOjp3cml0ZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpc3BhdGNoU3luY2hyb25vdXNKb2IpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25zKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUxvY2FsUmVjZWl2ZVJlc3BvbnNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OndyaXRlQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6aGVhZGVyQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cmVhZENh
bGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldHVwRm9ybURhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmhhbmRsZUN1cmxNc2cpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1h
bmFnZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNv
dXJjZUhhbmRsZU1hbmFnZXIuaDogUmVtb3ZlZC4KKwogMjAxNy0wNy0xNCAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBzdXJlIGFsbCBDRkhUVFBDb29r
aWVTdG9yYWdlUmVmcyB3ZSBjcmVhdGUgYXJlIHNjaGVkdWxlZC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9D
dXJsLmNtYWtlCmluZGV4IDcyYzY4MzRjNmUxLi43NjVkZjgxNzU3MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9DdXJsLmNtYWtlCkBAIC0xNSw3ICsxNSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9NdWx0aXBhcnRIYW5kbGUuY3BwCiAgICAg
cGxhdGZvcm0vbmV0d29yay9jdXJsL1Byb3h5U2VydmVyQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L1NTTEhhbmRsZS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbEN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1N5bmNocm9ub3VzTG9h
ZGVyQ2xpZW50Q3VybC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaAppbmRleCAyYzBiNDFjMTNmZS4uMjA2OTMxMDM1M2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKQEAgLTcw
LDYgKzcwLDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DRlVSTFN0b3JhZ2VTZXNzaW9uKiBD
RlVSTFN0b3JhZ2VTZXNzaW9uUmVmOwogCiAjaWYgVVNFKENVUkwpCiAjaW5jbHVkZSAiQ3VybEpv
Yk1hbmFnZXIuaCIKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBX
VEYgewpAQCAtMTg1LDEyICsxODYsNiBAQCBwdWJsaWM6CiAgICAgTW9ub3RvbmljVGltZSBtX3Jl
cXVlc3RUaW1lOwogI2VuZGlmCiAKLSNpZiBVU0UoQ1VSTCkKLSAgICB2b2lkIGluaXRpYWxpemUo
KTsKLSAgICB2b2lkIGhhbmRsZURhdGFVUkwoKTsKLSAgICB2b2lkIGhhbmRsZUN1cmxNc2coQ1VS
TE1zZyopOwotI2VuZGlmCi0KICAgICBib29sIGhhc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCkg
Y29uc3Q7CiAgICAgdm9pZCBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGNhbmNlbCgpOwpAQCAtMjkzLDEyICsyODgsMzggQEAgcHJpdmF0ZToK
ICNlbmRpZgogCiAjaWYgVVNFKENVUkwpCi0gICAgdm9pZCBkaXNwYXRjaFN5bmNocm9ub3VzSm9i
KCk7CisgICAgQ3VybEpvYlRpY2tldCBtX2pvYjsKKworICAgIFZlY3RvcjxjaGFyPiBtX3JlY2Vp
dmVkQnVmZmVyOworICAgIExvY2sgbV9yZWNlaXZlZEJ1ZmZlck11dGV4OwogCisgICAgdm9pZCBp
bml0aWFsaXplKCk7CisgICAgdm9pZCBhcHBseUF1dGhlbnRpY2F0aW9uKCk7CiAgICAgdm9pZCBz
ZXR1cFBPU1QoKTsKICAgICB2b2lkIHNldHVwUFVUKCk7CisgICAgdm9pZCBzZXR1cEZvcm1EYXRh
KGJvb2wgaXNQb3N0UmVxdWVzdCk7CisKKyAgICB2b2lkIGRpZEZpbmlzaCgpOworICAgIHZvaWQg
ZGlkRmFpbCgpOworCisgICAgc2l6ZV90IHdpbGxQcmVwYXJlU2VuZERhdGEoY2hhciogcHRyLCBz
aXplX3QgYmxvY2tTaXplLCBzaXplX3QgbnVtYmVyT2ZCbG9ja3MpOworICAgIHZvaWQgZGlkUmVj
ZWl2ZUhlYWRlckxpbmUoY29uc3QgU3RyaW5nJiBoZWFkZXIpOworICAgIHZvaWQgZGlkUmVjZWl2
ZUFsbEhlYWRlcnMobG9uZyBodHRwQ29kZSwgbG9uZyBsb25nIGNvbnRlbnRMZW5ndGgpOworICAg
IHZvaWQgZGlkUmVjZWl2ZUNvbnRlbnREYXRhKCk7CisKKyAgICB2b2lkIGhhbmRsZUxvY2FsUmVj
ZWl2ZVJlc3BvbnNlKCk7CisKKyAgICBzdGF0aWMgc2l6ZV90IHJlYWRDYWxsYmFjayhjaGFyKiBw
dHIsIHNpemVfdCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2Nrcywgdm9pZCogZGF0YSk7
CisgICAgc3RhdGljIHNpemVfdCBoZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVfdCBibG9j
a1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2Nrcywgdm9pZCogZGF0YSk7CisgICAgc3RhdGljIHNp
emVfdCB3cml0ZUNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51
bWJlck9mQmxvY2tzLCB2b2lkKiBkYXRhKTsKKworICAgIHZvaWQgZGlzcGF0Y2hTeW5jaHJvbm91
c0pvYigpOworICAgIHZvaWQgaGFuZGxlRGF0YVVSTCgpOworCisjaWYgRU5BQkxFKFdFQl9USU1J
TkcpCisgICAgdm9pZCBjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMoKTsKKyNlbmRpZgog
Ci0gICAgdm9pZCBhcHBseUF1dGhlbnRpY2F0aW9uKCk7CiAjZW5kaWYKIAogICAgIGZyaWVuZCBj
bGFzcyBSZXNvdXJjZUhhbmRsZUludGVybmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKaW5kZXggZWMyYmUwZWE1ZDMuLjQ2
MGM5M2YzNzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsQ29udGV4dC5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIFVTRShDVVJMKQog
I2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCi0KKyNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCiAj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKQEAgLTEwMSw2ICsxMDEsOCBAQCBzdGF0aWMgQ1N0cmluZyBjb29raWVKYXJQYXRoKCkKIAog
Ly8gQ3VybENvbnRleHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitjb25zdCBjaGFyKiBjb25zdCBDdXJsQ29udGV4
dDo6ZXJyb3JEb21haW4gPSAiQ3VybEVycm9yRG9tYWluIjsKKwogQ3VybENvbnRleHQ6OkN1cmxD
b250ZXh0KCkKIDogbV9jb29raWVKYXJGaWxlTmFtZSB7IGNvb2tpZUphclBhdGgoKSB9CiAsIG1f
Y2VydGlmaWNhdGVQYXRoIHsgY2VydGlmaWNhdGVQYXRoKCkgfQpAQCAtMjg1LDI4ICsyODcsMzgg
QEAgQ3VybEhhbmRsZTo6Q3VybEhhbmRsZSgpCiAKICAgICBtX2hhbmRsZSA9IGN1cmxfZWFzeV9p
bml0KCk7CiAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9FUlJPUkJVRkZF
UiwgbV9lcnJvckJ1ZmZlcik7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9Q
VF9QUklWQVRFLCB0aGlzKTsKIH0KIAogQ3VybEhhbmRsZTo6fkN1cmxIYW5kbGUoKQogewotICAg
IGNsZWFyQ29va2llTGlzdCgpOwogICAgIGNsZWFyVXJsKCk7Ci0gICAgY2xlYXJSZXF1ZXN0SGVh
ZGVycygpOwogCi0gICAgaWYgKG1faGFuZGxlKSB7Ci0gICAgICAgIGN1cmxfZWFzeV9jbGVhbnVw
KG1faGFuZGxlKTsKLSAgICAgICAgbV9oYW5kbGUgPSBudWxscHRyOwotICAgIH0KKyAgICBjdXJs
X2Vhc3lfY2xlYW51cChtX2hhbmRsZSk7Cit9CisKK0N1cmxIYW5kbGUqIEN1cmxIYW5kbGU6OnJl
Y292ZXJ5KENVUkwqIGgpCit7CisgICAgdm9pZCogaGFuZGxlOworICAgIGN1cmxfZWFzeV9nZXRp
bmZvKGgsIENVUkxJTkZPX1BSSVZBVEUsICZoYW5kbGUpOworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PEN1cmxIYW5kbGUqPihoYW5kbGUpOworfQorCitjb25zdCBTdHJpbmcgQ3VybEhhbmRs
ZTo6ZXJyb3JEZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZyhjdXJsX2Vh
c3lfc3RyZXJyb3IobV9lcnJvckNvZGUpKTsKIH0KIAogQ1VSTGNvZGUgQ3VybEhhbmRsZTo6cGVy
Zm9ybSgpCiB7Ci0gICAgcmV0dXJuIGN1cmxfZWFzeV9wZXJmb3JtKG1faGFuZGxlKTsKKyAgICBt
X2Vycm9yQ29kZSA9IGN1cmxfZWFzeV9wZXJmb3JtKG1faGFuZGxlKTsKKyAgICByZXR1cm4gbV9l
cnJvckNvZGU7CiB9CiAKIENVUkxjb2RlIEN1cmxIYW5kbGU6OnBhdXNlKGludCBiaXRtYXNrKQog
ewotICAgIHJldHVybiBjdXJsX2Vhc3lfcGF1c2UobV9oYW5kbGUsIENVUkxQQVVTRV9BTEwpOwor
ICAgIG1fZXJyb3JDb2RlID0gY3VybF9lYXN5X3BhdXNlKG1faGFuZGxlLCBDVVJMUEFVU0VfQUxM
KTsKKyAgICByZXR1cm4gbV9lcnJvckNvZGU7CiB9CiAKIHZvaWQgQ3VybEhhbmRsZTo6ZW5hYmxl
U2hhcmVIYW5kbGUoKQpAQCAtMzE0LDExICszMjYsNiBAQCB2b2lkIEN1cmxIYW5kbGU6OmVuYWJs
ZVNoYXJlSGFuZGxlKCkKICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1NI
QVJFLCBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc2hhcmVIYW5kbGUoKS5oYW5kbGUoKSk7CiB9
CiAKLXZvaWQgQ3VybEhhbmRsZTo6c2V0UHJpdmF0ZURhdGEodm9pZCogdXNlckRhdGEpCi17Ci0g
ICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9QUklWQVRFLCB1c2VyRGF0YSk7
Ci19Ci0KIHZvaWQgQ3VybEhhbmRsZTo6c2V0VXJsKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAg
IGNsZWFyVXJsKCk7CkBAIC0zMzYsMTEgKzM0MywxNSBAQCB2b2lkIEN1cmxIYW5kbGU6OmNsZWFy
VXJsKCkKICAgICB9CiB9CiAKLXZvaWQgQ3VybEhhbmRsZTo6Y2xlYXJSZXF1ZXN0SGVhZGVycygp
Cit2b2lkIEN1cmxIYW5kbGU6OmFwcGVuZFJlcXVlc3RIZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJN
YXAmIGhlYWRlcnMpCiB7Ci0gICAgaWYgKG1fcmVxdWVzdEhlYWRlcnMpIHsKLSAgICAgICAgY3Vy
bF9zbGlzdF9mcmVlX2FsbChtX3JlcXVlc3RIZWFkZXJzKTsKLSAgICAgICAgbV9yZXF1ZXN0SGVh
ZGVycyA9IG51bGxwdHI7CisgICAgaWYgKGhlYWRlcnMuc2l6ZSgpID4gMCkgeworICAgICAgICBm
b3IgKGF1dG8mIGVudHJ5IDogaGVhZGVycykgeworICAgICAgICAgICAgYXV0byYgdmFsdWUgPSBl
bnRyeS52YWx1ZTsKKyAgICAgICAgICAgIGFwcGVuZFJlcXVlc3RIZWFkZXIoZW50cnkua2V5LCBl
bnRyeS52YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBlbmFibGVSZXF1ZXN0SGVhZGVycygp
OwogICAgIH0KIH0KIApAQCAtMzYxLDEzICszNzIsMTUgQEAgdm9pZCBDdXJsSGFuZGxlOjphcHBl
bmRSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
IAogdm9pZCBDdXJsSGFuZGxlOjphcHBlbmRSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYgaGVh
ZGVyKQogewotICAgIG1fcmVxdWVzdEhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChtX3JlcXVl
c3RIZWFkZXJzLCBoZWFkZXIubGF0aW4xKCkuZGF0YSgpKTsKKyAgICBtX3JlcXVlc3RIZWFkZXJz
LmFwcGVuZChoZWFkZXIpOwogfQogCiB2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZVJlcXVlc3RIZWFk
ZXJzKCkKIHsKLSAgICBpZiAobV9yZXF1ZXN0SGVhZGVycykKLSAgICAgICAgY3VybF9lYXN5X3Nl
dG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9IVFRQSEVBREVSLCBtX3JlcXVlc3RIZWFkZXJzKTsKKyAg
ICBpZiAoIW1fcmVxdWVzdEhlYWRlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNvbnN0IEN1cmxT
TGlzdDo6bmF0aXZlIGhlYWRlcnMgPSBtX3JlcXVlc3RIZWFkZXJzOworICAgICAgICBjdXJsX2Vh
c3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0hUVFBIRUFERVIsIGhlYWRlcnMpOworICAgIH0K
IH0KIAogdm9pZCBDdXJsSGFuZGxlOjplbmFibGVIdHRwR2V0UmVxdWVzdCgpCkBAIC01MDgsMTkg
KzUyMSwxMyBAQCB2b2lkIEN1cmxIYW5kbGU6OnNldENvb2tpZUxpc3QoY29uc3QgY2hhciogY29v
a2llTGlzdCkKICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0NPT0tJRUxJ
U1QsIGNvb2tpZUxpc3QpOwogfQogCi1zdHJ1Y3QgY3VybF9zbGlzdCogQ3VybEhhbmRsZTo6Z2V0
Q29va2llTGlzdCgpCitDdXJsU0xpc3QmJiBDdXJsSGFuZGxlOjpnZXRDb29raWVMaXN0KCkgY29u
c3QKIHsKLSAgICBjbGVhckNvb2tpZUxpc3QoKTsKLQotICAgIGN1cmxfZWFzeV9nZXRpbmZvKG1f
aGFuZGxlLCBDVVJMSU5GT19DT09LSUVMSVNULCAmbV9jb29raWVMaXN0KTsKKyAgICBDdXJsU0xp
c3QgY29va2llczsKIAotICAgIHJldHVybiBtX2Nvb2tpZUxpc3Q7Ci19CisgICAgY3VybF9lYXN5
X2dldGluZm8obV9oYW5kbGUsIENVUkxJTkZPX0NPT0tJRUxJU1QsIHN0YXRpY19jYXN0PEN1cmxT
TGlzdDo6bmF0aXZlKj4oY29va2llcykpOwogCi12b2lkIEN1cmxIYW5kbGU6OmNsZWFyQ29va2ll
TGlzdCgpCi17Ci0gICAgaWYgKCFtX2Nvb2tpZUxpc3QpCi0gICAgICAgIGN1cmxfc2xpc3RfZnJl
ZV9hbGwobV9jb29raWVMaXN0KTsKKyAgICByZXR1cm4gV1RGTW92ZShjb29raWVzKTsKIH0KIAog
dm9pZCBDdXJsSGFuZGxlOjplbmFibGVQcm94eUlmRXhpc3RzKCkKQEAgLTU2NCw3ICs1NzEsNyBA
QCB2b2lkIEN1cmxIYW5kbGU6OnNldFNzbEN0eENhbGxiYWNrRnVuY3Rpb24oY3VybF9zc2xfY3R4
X2NhbGxiYWNrIGNhbGxiYWNrRnVuYywgdgogICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUs
IENVUkxPUFRfU1NMX0NUWF9GVU5DVElPTiwgY2FsbGJhY2tGdW5jKTsKIH0KIAotVVJMIEN1cmxI
YW5kbGU6OmdldEVmZmVjdGl2ZVVSTCgpCitVUkwgQ3VybEhhbmRsZTo6Z2V0RWZmZWN0aXZlVVJM
KCkgY29uc3QKIHsKICAgICBDVVJMY29kZSBlcnJDZCA9IENVUkxFX0ZBSUxFRF9JTklUOwogICAg
IGNoYXIqIHVybCA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsQ29udGV4dC5oCmluZGV4IGNhMThiOThkMmYxLi45NmE2YTZkNjczNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250
ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250
ZXh0LmgKQEAgLTEwMiw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFN0cmluZyB1
cmwoKSBjb25zdDsKICAgICB9OwogCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVycm9y
RG9tYWluOworCiAgICAgc3RhdGljIEN1cmxDb250ZXh0JiBzaW5nbGV0b24oKQogICAgIHsKICAg
ICAgICAgc3RhdGljIEN1cmxDb250ZXh0IHNoYXJlZDsKQEAgLTE2NywxMCArMTY5LDQzIEBAIHBy
aXZhdGU6CiAgICAgQ1VSTE0qIG1fbXVsdGlIYW5kbGUgeyBudWxscHRyIH07CiB9OwogCisvLyBD
dXJsU0xpc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitjbGFzcyBDdXJsU0xpc3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1cmxTTGlz
dCk7CisKK3B1YmxpYzoKKyAgICB1c2luZyBuYXRpdmUgPSBzdHJ1Y3QgY3VybF9zbGlzdCo7CisK
KyAgICBDdXJsU0xpc3QoKSB7IH0KKyAgICB+Q3VybFNMaXN0KCkgeyBjbGVhcigpOyB9CisKKyAg
ICBDdXJsU0xpc3QoQ3VybFNMaXN0JiYgb3RoZXIpIHsgc3RkOjpzd2FwKG1fbGlzdCwgb3RoZXIu
bV9saXN0KTsgfQorICAgIEN1cmxTTGlzdCYgb3BlcmF0b3I9KEN1cmxTTGlzdCYmIG90aGVyKSB7
IHN0ZDo6c3dhcChtX2xpc3QsIG90aGVyLm1fbGlzdCk7IHJldHVybiAqdGhpczsgfQorCisgICAg
b3BlcmF0b3IgY29uc3QgbmF0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9saXN0OyB9CisgICAgb3Bl
cmF0b3IgbmF0aXZlKiAoKSB7IHJldHVybiAmbV9saXN0OyB9CisKKyAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiBtX2xpc3Q7IH0KKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAg
ICAgIGlmIChtX2xpc3QpIHsKKyAgICAgICAgICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwobV9saXN0
KTsKKyAgICAgICAgICAgIG1fbGlzdCA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIGFwcGVuZChjb25zdCBjaGFyKiBzdHIpIHsgbV9saXN0ID0gY3VybF9zbGlzdF9hcHBl
bmQobV9saXN0LCBzdHIpOyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBzdHIpIHsg
YXBwZW5kKHN0ci5sYXRpbjEoKS5kYXRhKCkpOyB9CiAKK3ByaXZhdGU6CisgICAgbmF0aXZlIG1f
bGlzdCB7IG51bGxwdHIgfTsKK307CiAKIC8vIEN1cmxIYW5kbGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitjbGFzcyBIVFRQSGVhZGVyTWFwOwor
CiBjbGFzcyBDdXJsSGFuZGxlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXJsSGFuZGxl
KTsKIApAQCAtMTg4LDE4ICsyMjMsMjcgQEAgcHVibGljOgogICAgIEN1cmxIYW5kbGUoKTsKICAg
ICB+Q3VybEhhbmRsZSgpOwogCisgICAgc3RhdGljIEN1cmxIYW5kbGUqIEN1cmxIYW5kbGU6OnJl
Y292ZXJ5KENVUkwqIGgpOworCiAgICAgQ1VSTCogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9o
YW5kbGU7IH0KIAogICAgIENVUkxjb2RlIHBlcmZvcm0oKTsKICAgICBDVVJMY29kZSBwYXVzZShp
bnQpOwogCisgICAgQ1VSTGNvZGUgZXJyb3JDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvckNv
ZGU7IH0KKyAgICB2b2lkIHNldEVycm9yQ29kZShDVVJMY29kZSBlcnJvckNvZGUpIHsgbV9lcnJv
ckNvZGUgPSBlcnJvckNvZGU7IH0KKworICAgIGNvbnN0IFN0cmluZyBlcnJvckRlc2NyaXB0aW9u
KCkgY29uc3Q7CisKICAgICB2b2lkIGVuYWJsZVNoYXJlSGFuZGxlKCk7Ci0gICAgdm9pZCBzZXRQ
cml2YXRlRGF0YSh2b2lkKiB1c2VyRGF0YSk7CisKKyAgICB2b2lkKiBwcml2YXRlRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJpdmF0ZURhdGE7IH0KKyAgICB2b2lkIHNldFByaXZhdGVEYXRhKHZv
aWQqIHVzZXJEYXRhKSB7IG1fcHJpdmF0ZURhdGEgPSB1c2VyRGF0YTsgfQogCiAgICAgdm9pZCBz
ZXRVcmwoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgY2hhciogdXJsKCkgY29uc3QgeyByZXR1
cm4gbV91cmw7IH0KIAotICAgIHZvaWQgY2xlYXJSZXF1ZXN0SGVhZGVycygpOworICAgIHZvaWQg
YXBwZW5kUmVxdWVzdEhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYpOwogICAgIHZvaWQgYXBw
ZW5kUmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lk
IGFwcGVuZFJlcXVlc3RIZWFkZXIoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBlbmFibGVSZXF1
ZXN0SGVhZGVycygpOwpAQCAtMjMxLDcgKzI3NSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZW5h
YmxlQ29va2llSmFySWZFeGlzdHMoKTsKICAgICB2b2lkIHNldENvb2tpZUxpc3QoY29uc3QgY2hh
ciopOwotICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBnZXRDb29raWVMaXN0KCk7CisgICAgQ3VybFNM
aXN0JiYgZ2V0Q29va2llTGlzdCgpIGNvbnN0OwogCiAgICAgdm9pZCBlbmFibGVQcm94eUlmRXhp
c3RzKCk7CiAKQEAgLTI0NCw3ICsyODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTc2xDdHhD
YWxsYmFja0Z1bmN0aW9uKGN1cmxfc3NsX2N0eF9jYWxsYmFjaywgdm9pZCopOwogCiAgICAgLy8g
U3RhdHVzCi0gICAgVVJMIGdldEVmZmVjdGl2ZVVSTCgpOworICAgIFVSTCBnZXRFZmZlY3RpdmVV
UkwoKSBjb25zdDsKICAgICBDVVJMY29kZSBnZXRQcmltYXJ5UG9ydChsb25nJik7CiAgICAgQ1VS
TGNvZGUgZ2V0UmVzcG9uc2VDb2RlKGxvbmcmKTsKICAgICBDVVJMY29kZSBnZXRDb250ZW50TGVu
Z2h0RG93bmxvYWQobG9uZyBsb25nJik7CkBAIC0yNjAsMTYgKzMwNCwxNiBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBjbGVhclVybCgpOwotICAgIHZvaWQgY2xlYXJDb29raWVMaXN0
KCk7CiAKICAgICBzdGF0aWMgaW50IGV4cGVjdGVkU2l6ZU9mQ3VybE9mZlQoKTsKIAogICAgIENV
UkwqIG1faGFuZGxlIHsgbnVsbHB0ciB9OwogICAgIGNoYXIgbV9lcnJvckJ1ZmZlcltDVVJMX0VS
Uk9SX1NJWkVdIHsgfTsKKyAgICBDVVJMY29kZSBtX2Vycm9yQ29kZTsKIAogICAgIGNoYXIqIG1f
dXJsIHsgbnVsbHB0ciB9OwotICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBtX3JlcXVlc3RIZWFkZXJz
IHsgbnVsbHB0ciB9OwotICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBtX2Nvb2tpZUxpc3QgeyBudWxs
cHRyIH07CisgICAgdm9pZCogbV9wcml2YXRlRGF0YSB7IG51bGxwdHIgfTsKKyAgICBDdXJsU0xp
c3QgbV9yZXF1ZXN0SGVhZGVyczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKaW5kZXggMDk4ZDhjNDRlOTQu
LjM1ZDI5ZGQ0MDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybERvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcApAQCAtODYsMTMgKzg2LDI5IEBAIHZvaWQgQ3VybERv
d25sb2FkOjppbml0KEN1cmxEb3dubG9hZExpc3RlbmVyKiBsaXN0ZW5lciwgUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBSCiAKIGJvb2wgQ3VybERvd25sb2FkOjpzdGFydCgpCiB7Ci0gICAgcmVmKCk7
IC8vIEN1cmxKb2JNYW5hZ2VyIHdpbGwgY2FsbCBkZXJlZiB3aGVuIHRoZSBkb3dubG9hZCBoYXMg
ZmluaXNoZWQuCi0gICAgcmV0dXJuIEN1cmxKb2JNYW5hZ2VyOjpzaW5nbGV0b24oKS5hZGQobV9j
dXJsSGFuZGxlLmhhbmRsZSgpKTsKKyAgICBtX2pvYiA9IEN1cmxKb2JNYW5hZ2VyOjpzaW5nbGV0
b24oKS5hZGQobV9jdXJsSGFuZGxlLCAKKyAgICAgICAgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKV0oQ3VybEpvYlJlc3VsdCByZXN1bHQpIG11dGFibGUgeworICAgICAgICAKKyAgICAg
ICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgICAgY2FzZSBDdXJsSm9iUmVzdWx0OjpEb25lOgor
ICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlkRmluaXNoKCk7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEN1cmxKb2JSZXN1bHQ6OkVycm9yOgorICAgICAgICAgICAgcHJv
dGVjdGVkVGhpcy0+ZGlkRmFpbCgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBDdXJsSm9iUmVzdWx0OjpDYW5jZWxsZWQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0pOworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEN1cmxEb3dubG9hZDo6Y2Fu
Y2VsKCkKIHsKLSAgICByZXR1cm4gQ3VybEpvYk1hbmFnZXI6OnNpbmdsZXRvbigpLnJlbW92ZSht
X2N1cmxIYW5kbGUuaGFuZGxlKCkpOworICAgIEN1cmxKb2JNYW5hZ2VyOjpzaW5nbGV0b24oKS5j
YW5jZWwobV9qb2IpOworICAgIHJldHVybiB0cnVlOwogfQogCiBTdHJpbmcgQ3VybERvd25sb2Fk
OjpnZXRUZW1wUGF0aCgpIGNvbnN0CkBAIC0xNDUsMjggKzE2MSw3IEBAIHZvaWQgQ3VybERvd25s
b2FkOjp3cml0ZURhdGFUb0ZpbGUoY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUpCiB2b2lkIEN1
cmxEb3dubG9hZDo6YWRkSGVhZGVycyhjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7
CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Ci0KLSAgICBtX2N1cmxIYW5kbGUuY2xl
YXJSZXF1ZXN0SGVhZGVycygpOwotCi0gICAgaWYgKHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygp
LnNpemUoKSA+IDApIHsKLSAgICAgICAgSFRUUEhlYWRlck1hcCBjdXN0b21IZWFkZXJzID0gcmVx
dWVzdC5odHRwSGVhZGVyRmllbGRzKCk7Ci0gICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGN1c3RvbUhlYWRlcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXN0b21IZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGl0LT52YWx1ZTsK
LSAgICAgICAgICAgIFN0cmluZyBoZWFkZXJTdHJpbmcoaXQtPmtleSk7Ci0gICAgICAgICAgICBp
ZiAodmFsdWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgOyB0byB0
ZWxsIGN1cmwgdGhhdCB0aGlzIGhlYWRlciBoYXMgYW4gZW1wdHkgdmFsdWUuCi0gICAgICAgICAg
ICAgICAgaGVhZGVyU3RyaW5nLmFwcGVuZCgiOyIpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaGVhZGVyU3RyaW5nLmFwcGVuZCgiOiAiKTsKLSAgICAgICAgICAgICAgICBo
ZWFkZXJTdHJpbmcuYXBwZW5kKHZhbHVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
bV9jdXJsSGFuZGxlLmFwcGVuZFJlcXVlc3RIZWFkZXIoaGVhZGVyU3RyaW5nKTsKLSAgICAgICAg
fQotCi0gICAgICAgIG1fY3VybEhhbmRsZS5lbmFibGVSZXF1ZXN0SGVhZGVycygpOwotICAgIH0K
KyAgICBtX2N1cmxIYW5kbGUuYXBwZW5kUmVxdWVzdEhlYWRlcnMocmVxdWVzdC5odHRwSGVhZGVy
RmllbGRzKCkpOwogfQogCiB2b2lkIEN1cmxEb3dubG9hZDo6ZGlkUmVjZWl2ZUhlYWRlcihjb25z
dCBTdHJpbmcmIGhlYWRlcikKQEAgLTIyNywyMSArMjIyLDI2IEBAIHZvaWQgQ3VybERvd25sb2Fk
OjpkaWRGaW5pc2goKQogICAgIGNsb3NlRmlsZSgpOwogICAgIG1vdmVGaWxlVG9EZXN0aW5hdGlv
bigpOwogCi0gICAgaWYgKG1fbGlzdGVuZXIpCi0gICAgICAgIG1fbGlzdGVuZXItPmRpZEZpbmlz
aCgpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fbGlzdGVuZXIpCisg
ICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX2xpc3RlbmVyLT5kaWRGaW5pc2goKTsKKyAgICB9
KTsKIH0KIAogdm9pZCBDdXJsRG93bmxvYWQ6OmRpZEZhaWwoKQogewogICAgIGNsb3NlRmlsZSgp
OworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CiAKLSAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX211dGV4KTsKLQotICAgIGlmIChtX2RlbGV0ZXNGaWxlVXBvbkZhaWx1
cmUpCi0gICAgICAgIGRlbGV0ZUZpbGUobV90ZW1wUGF0aCk7CisgICAgICAgIGlmIChtX2RlbGV0
ZXNGaWxlVXBvbkZhaWx1cmUpCisgICAgICAgICAgICBkZWxldGVGaWxlKG1fdGVtcFBhdGgpOwor
ICAgIH0KIAotICAgIGlmIChtX2xpc3RlbmVyKQotICAgICAgICBtX2xpc3RlbmVyLT5kaWRGYWls
KCk7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
XSgpIG11dGFibGUgeworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9saXN0ZW5lcikKKyAg
ICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fbGlzdGVuZXItPmRpZEZhaWwoKTsKKyAgICB9KTsK
IH0KIAogc2l6ZV90IEN1cmxEb3dubG9hZDo6d3JpdGVDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVf
dCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCkBAIC0yOTIsMjkgKzI5Miw2IEBAIHZv
aWQgQ3VybERvd25sb2FkOjpyZWNlaXZlZFJlc3BvbnNlQ2FsbGJhY2soQ3VybERvd25sb2FkKiBk
b3dubG9hZCkKICAgICAgICAgZG93bmxvYWQtPmRpZFJlY2VpdmVSZXNwb25zZSgpOwogfQogCi1D
dXJsSm9iQWN0aW9uIEN1cmxEb3dubG9hZDo6aGFuZGxlQ3VybE1zZyhDVVJMTXNnKiBtc2cpCi17
Ci0gICAgc3dpdGNoIChtc2ctPm1zZykgewotICAgIGNhc2UgQ1VSTE1TR19ET05FOiB7Ci0gICAg
ICAgIGlmIChtc2ctPmRhdGEucmVzdWx0ID09IENVUkxFX09LKSB7Ci0gICAgICAgICAgICBjYWxs
T25NYWluVGhyZWFkKFt0aGlzXSB7Ci0gICAgICAgICAgICAgICAgZGlkRmluaXNoKCk7Ci0gICAg
ICAgICAgICAgICAgZGVyZWYoKTsgLy8gVGhpcyBtYXRjaGVzIHRoZSByZWYoKSBpbiBDdXJsRG93
bmxvYWQ6OnN0YXJ0KCkuCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKLSAgICAgICAgICAgICAgICBkaWRGYWls
KCk7Ci0gICAgICAgICAgICAgICAgZGVyZWYoKTsgLy8gVGhpcyBtYXRjaGVzIHRoZSByZWYoKSBp
biBDdXJsRG93bmxvYWQ6OnN0YXJ0KCkuCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gQ3VybEpvYkFjdGlvbjo6RmluaXNoZWQ7Ci0gICAgfQotICAgIGRlZmF1bHQ6
IHsKLSAgICAgICAgcmV0dXJuIEN1cmxKb2JBY3Rpb246Ok5vbmU7Ci0gICAgfQotICAgIH0KLX0K
LQogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsRG93bmxvYWQuaAppbmRleCA2NzYyNjhhN2NhYi4uM2RhNTRhZTc4MjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2Fk
LmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKCkg
eyB9CiB9OwogCi1jbGFzcyBDdXJsRG93bmxvYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8Q3VybERvd25sb2FkPiwgcHVibGljIEN1cmxKb2IgeworY2xhc3MgQ3VybERvd25sb2FkIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEN1cmxEb3dubG9hZD4gewogcHVibGljOgogICAg
IEN1cmxEb3dubG9hZCgpOwogICAgIH5DdXJsRG93bmxvYWQoKTsKQEAgLTcyLDggKzcyLDYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBzZXREZXN0aW5hdGlvbihjb25zdCBTdHJpbmcmIGRlc3RpbmF0
aW9uKSB7IG1fZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsgfQogCi0gICAgdmlydHVhbCBDdXJs
Sm9iQWN0aW9uIGhhbmRsZUN1cmxNc2coQ1VSTE1zZyopOwotCiBwcml2YXRlOgogICAgIHZvaWQg
Y2xvc2VGaWxlKCk7CiAgICAgdm9pZCBtb3ZlRmlsZVRvRGVzdGluYXRpb24oKTsKQEAgLTEwMCw3
ICs5OCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcmVjZWl2ZWRSZXNwb25zZUNhbGxi
YWNrKEN1cmxEb3dubG9hZCopOwogCiAgICAgQ3VybEhhbmRsZSBtX2N1cmxIYW5kbGU7Ci0KKyAg
ICBDdXJsSm9iVGlja2V0IG1fam9iOwogICAgIFN0cmluZyBtX3RlbXBQYXRoOwogICAgIFN0cmlu
ZyBtX2Rlc3RpbmF0aW9uOwogICAgIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBtX3RlbXBI
YW5kbGUgeyBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcAppbmRleCA0
MmNmOTAwMTc1Zi4uZjlmZDY0MWNlMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsSm9iTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcApAQCAtMjksNiArMjksNyBA
QAogI2lmIFVTRShDVVJMKQogI2luY2x1ZGUgIkN1cmxKb2JNYW5hZ2VyLmgiCiAKKyNpbmNsdWRl
IDxpdGVyYXRvcj4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIApAQCAtMzYsNjggKzM3LDE0MSBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DdXJsSm9iTWFuYWdlcjo6Q3VybEpvYk1h
bmFnZXIoKQoteworLyoKKyAqIEN1cmxKb2JMaXN0IGlzIHVzZWQgb25seSBpbiBiYWNrZ3JvdW5k
IHNvIHRoYXQgbm8gbmVlZCB0byBtYW5hZ2UgbXV0ZXgKKyAqLworY2xhc3MgQ3VybEpvYkxpc3Qg
OiBwdWJsaWMgQ3VybE11bHRpSGFuZGxlIHsKKyAgICB1c2luZyBQcmVkaWNhdGUgPSBXVEY6OkZ1
bmN0aW9uPGJvb2woY29uc3QgQ3VybEpvYiYpPjsKKyAgICB1c2luZyBBY3Rpb24gPSBXVEY6OkZ1
bmN0aW9uPHZvaWQoQ3VybEpvYiYpPjsKKyAgICB1c2luZyBKb2JNYXAgPSBIYXNoTWFwPEN1cmxK
b2JUaWNrZXQsIEN1cmxKb2I+OwogCi19CitwdWJsaWM6CisgICAgdm9pZCBhcHBlbmQoQ3VybEpv
YiYgam9iKQorICAgIHsKKyAgICAgICAgQ3VybEhhbmRsZSogY3VybCA9IGpvYi5jdXJsSGFuZGxl
KCk7CiAKLUN1cmxKb2JNYW5hZ2VyOjp+Q3VybEpvYk1hbmFnZXIoKQotewotICAgIHN0b3BUaHJl
YWQoKTsKLX0KKyAgICAgICAgQ1VSTE1jb2RlIHJldHZhbCA9IGFkZEhhbmRsZShjdXJsLT5oYW5k
bGUoKSk7CisgICAgICAgICAgICAvLyBARklYTUUgZXJyb3IgbG9nZ2luZworICAgICAgICBpZiAo
cmV0dmFsID09IENVUkxNX09LKQorICAgICAgICAgICAgbV9qb2JzLnNldChqb2IudGlja2V0KCks
IFdURk1vdmUoam9iKSk7CisgICAgfQorCisgICAgdm9pZCBjYW5jZWwoQ3VybEpvYlRpY2tldCB0
aWNrZXQpCisgICAgeworICAgICAgICBjb21wbGV0ZSh0aWNrZXQsIFtdKGF1dG8mIGpvYikgeyBq
b2IuY2FuY2VsKCk7IH0pOworICAgIH0KKworICAgIHZvaWQgY29tcGxldGUoQ3VybEpvYlRpY2tl
dCB0aWNrZXQsIEFjdGlvbiBhY3Rpb24pCisgICAgeworICAgICAgICBhdXRvIGZvdW5kID0gbV9q
b2JzLmZpbmQodGlja2V0KTsKKyAgICAgICAgaWYgKGZvdW5kICE9IG1fam9icy5lbmQoKSkgewor
ICAgICAgICAgICAgYXV0byYgam9iID0gZm91bmQtPnZhbHVlOworCisgICAgICAgICAgICByZW1v
dmVIYW5kbGUoam9iLmN1cmxIYW5kbGUoKS0+aGFuZGxlKCkpOworICAgICAgICAgICAgYWN0aW9u
KGpvYik7CisKKyAgICAgICAgICAgIG1fam9icy5yZW1vdmUoZm91bmQpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9qb2JzLmlzRW1wdHko
KTsgfQorCisgICAgYm9vbCB3aXRoSm9iKEN1cmxKb2JUaWNrZXQgdGlja2V0LCBXVEY6OkZ1bmN0
aW9uPHZvaWQoSm9iTWFwOjppdGVyYXRvcik+IGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgYXV0
byBmb3VuZCA9IG1fam9icy5maW5kKHRpY2tldCk7CisgICAgICAgIGlmIChmb3VuZCA9PSBtX2pv
YnMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBj
YWxsYmFjayhmb3VuZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wg
d2l0aEN1cmxIYW5kbGUoQ3VybEpvYlRpY2tldCB0aWNrZXQsIFdURjo6RnVuY3Rpb248dm9pZChD
dXJsSGFuZGxlJik+IGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpdGhKb2IodGlj
a2V0LCBbJmNhbGxiYWNrXShKb2JNYXA6Oml0ZXJhdG9yIGl0KSB7CisgICAgICAgICAgICBjYWxs
YmFjaygqaXQtPnZhbHVlLmN1cmxIYW5kbGUoKSk7CisgICAgICAgIH0pOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBKb2JNYXAgbV9qb2JzOworfTsKIAotYm9vbCBDdXJsSm9iTWFuYWdlcjo6YWRk
KENVUkwqIGN1cmxIYW5kbGUpCitDdXJsSm9iVGlja2V0IEN1cmxKb2JNYW5hZ2VyOjphZGQoQ3Vy
bEhhbmRsZSYgY3VybCwgQ2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKIAorICAgIEN1cmxKb2JUaWNrZXQgdGlja2V0ID0gc3RhdGljX2Nhc3Q8Q3VybEpv
YlRpY2tldD4oY3VybC5oYW5kbGUoKSk7CisKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fbXV0ZXgpOwotICAgICAgICBtX3BlbmRpbmdIYW5kbGVMaXN0LmFwcGVuZChjdXJsSGFu
ZGxlKTsKKworICAgICAgICBpZiAoaXNBY3RpdmVKb2IodGlja2V0KSkKKyAgICAgICAgICAgIHJl
dHVybiB0aWNrZXQ7CisKKworICAgICAgICBtX3BlbmRpbmdKb2JzLmFwcGVuZChDdXJsSm9iIHsg
JmN1cmwsIFdURk1vdmUoY2FsbGJhY2spIH0pOworICAgICAgICBtX2FjdGl2ZUpvYnMuYWRkKHRp
Y2tldCk7CiAgICAgfQogCiAgICAgc3RhcnRUaHJlYWRJZk5lZWRlZCgpOwogCi0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHRpY2tldDsKIH0KIAotYm9vbCBDdXJsSm9iTWFuYWdlcjo6cmVt
b3ZlKENVUkwqIGN1cmxIYW5kbGUpCitib29sIEN1cmxKb2JNYW5hZ2VyOjpjYW5jZWwoQ3VybEpv
YlRpY2tldCBqb2IpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIG1fcmVtb3ZlZEhhbmRsZUxpc3QuYXBwZW5kKGN1
cmxIYW5kbGUpOworICAgIGlmIChtX3J1blRocmVhZCkgeworICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX211dGV4KTsKKworICAgICAgICBpZiAoIWlzQWN0aXZlSm9iKGpvYikpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBtX2NhbmNlbGxlZFRpY2tldHMu
YXBwZW5kKGpvYik7CisgICAgICAgIG1fYWN0aXZlSm9icy5yZW1vdmUoam9iKTsKKyAgICB9CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IEN1cmxKb2JNYW5hZ2VyOjpnZXRBY3RpdmVDb3Vu
dCgpIGNvbnN0Cit2b2lkIEN1cmxKb2JNYW5hZ2VyOjpjYWxsT25Kb2JUaHJlYWQoV1RGOjpGdW5j
dGlvbjx2b2lkKCk+JiYgY2FsbGJhY2spCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRl
eCk7Ci0gICAgcmV0dXJuIG1fYWN0aXZlSGFuZGxlTGlzdC5zaXplKCk7Ci19CisgICAgTG9ja0hv
bGRlciBsb2NrZXIgeyBtX211dGV4IH07CiAKLWludCBDdXJsSm9iTWFuYWdlcjo6Z2V0UGVuZGlu
Z0NvdW50KCkgY29uc3QKLXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKLSAgICBy
ZXR1cm4gbV9wZW5kaW5nSGFuZGxlTGlzdC5zaXplKCk7CisgICAgbV90YXNrUXVldWUuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PihXVEZNb3ZlKGNhbGxiYWNr
KSkpOwogfQogCiB2b2lkIEN1cmxKb2JNYW5hZ2VyOjpzdGFydFRocmVhZElmTmVlZGVkKCkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKCFydW5UaHJlYWQoKSkgewor
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIGlmICghbV9ydW5UaHJlYWQpIHsK
ICAgICAgICAgaWYgKG1fdGhyZWFkKQogICAgICAgICAgICAgbV90aHJlYWQtPndhaXRGb3JDb21w
bGV0aW9uKCk7Ci0gICAgICAgIHNldFJ1blRocmVhZCh0cnVlKTsKKworICAgICAgICBtX3J1blRo
cmVhZCA9IHRydWU7CiAgICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoImN1cmxUaHJl
YWQiLCBbdGhpc10gewogICAgICAgICAgICAgd29ya2VyVGhyZWFkKCk7CiAgICAgICAgIH0pOwog
ICAgIH0KIH0KIAordm9pZCBDdXJsSm9iTWFuYWdlcjo6c3RvcFRocmVhZElmTm9Nb3JlSm9iUnVu
bmluZygpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX211dGV4KTsKKworICAgIGlmIChtX3BlbmRpbmdKb2JzLmlzRW1wdHkoKSkKKyAg
ICAgICAgbV9ydW5UaHJlYWQgPSBmYWxzZTsKK30KKwogdm9pZCBDdXJsSm9iTWFuYWdlcjo6c3Rv
cFRocmVhZCgpCiB7Ci0gICAgc2V0UnVuVGhyZWFkKGZhbHNlKTsKKyAgICBtX3J1blRocmVhZCA9
IGZhbHNlOwogCiAgICAgaWYgKG1fdGhyZWFkKSB7CiAgICAgICAgIG1fdGhyZWFkLT53YWl0Rm9y
Q29tcGxldGlvbigpOwpAQCAtMTA1LDY0ICsxNzksNDEgQEAgdm9pZCBDdXJsSm9iTWFuYWdlcjo6
c3RvcFRocmVhZCgpCiAgICAgfQogfQogCi12b2lkIEN1cmxKb2JNYW5hZ2VyOjpzdG9wVGhyZWFk
SWZJZGxlKCkKK2Jvb2wgQ3VybEpvYk1hbmFnZXI6OnVwZGF0ZUpvYnMoQ3VybEpvYkxpc3QmIGpv
YnMpCiB7Ci0gICAgaWYgKCFnZXRBY3RpdmVDb3VudCgpICYmICFnZXRQZW5kaW5nQ291bnQoKSkK
LSAgICAgICAgc2V0UnVuVGhyZWFkKGZhbHNlKTsKLX0KLQotdm9pZCBDdXJsSm9iTWFuYWdlcjo6
dXBkYXRlSGFuZGxlTGlzdCgpCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Ci0K
LSAgICAvLyBSZW1vdmUgY3VybCBlYXN5IGhhbmRsZXMgZnJvbSBtdWx0aSBsaXN0IAotICAgIGlu
dCBzaXplID0gbV9yZW1vdmVkSGFuZGxlTGlzdC5zaXplKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgcmVtb3ZlRnJvbUN1cmwobV9yZW1vdmVkSGFuZGxl
TGlzdFswXSk7Ci0gICAgICAgIG1fcmVtb3ZlZEhhbmRsZUxpc3QucmVtb3ZlKDApOwotICAgIH0K
KyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgIC8vIEFkZCBwZW5kaW5nIGN1cmwg
ZWFzeSBoYW5kbGVzIHRvIG11bHRpIGxpc3QgCi0gICAgc2l6ZSA9IG1fcGVuZGluZ0hhbmRsZUxp
c3Quc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAg
IGFkZFRvQ3VybChtX3BlbmRpbmdIYW5kbGVMaXN0WzBdKTsKLSAgICAgICAgbV9wZW5kaW5nSGFu
ZGxlTGlzdC5yZW1vdmUoMCk7Ci0gICAgfQotfQorICAgIFZlY3RvcjxDdXJsSm9iPiBwZW5kaW5n
Sm9iczsKKyAgICBWZWN0b3I8Q3VybEpvYlRpY2tldD4gY2FuY2VsbGVkVGlja2V0czsKKyAgICB7
CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAoIW1fcnVu
VGhyZWFkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi1ib29sIEN1cmxKb2JNYW5hZ2Vy
OjphZGRUb0N1cmwoQ1VSTCogY3VybEhhbmRsZSkKLXsKLSAgICBDVVJMTWNvZGUgcmV0dmFsID0g
bV9jdXJsTXVsdGlIYW5kbGUuYWRkSGFuZGxlKGN1cmxIYW5kbGUpOwotICAgIGlmIChyZXR2YWwg
PT0gQ1VSTE1fT0spIHsKLSAgICAgICAgbV9hY3RpdmVIYW5kbGVMaXN0LmFwcGVuZChjdXJsSGFu
ZGxlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHBlbmRpbmdKb2JzID0gV1RGTW92
ZShtX3BlbmRpbmdKb2JzKTsKKyAgICAgICAgY2FuY2VsbGVkVGlja2V0cyA9IFdURk1vdmUobV9j
YW5jZWxsZWRUaWNrZXRzKTsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQogCi1ib29sIEN1
cmxKb2JNYW5hZ2VyOjpyZW1vdmVGcm9tQ3VybChDVVJMKiBjdXJsSGFuZGxlKQotewotICAgIGlu
dCBoYW5kbGVQb3MgPSBtX2FjdGl2ZUhhbmRsZUxpc3QuZmluZChjdXJsSGFuZGxlKTsKKyAgICBm
b3IgKGF1dG8mIGpvYiA6IHBlbmRpbmdKb2JzKQorICAgICAgICBqb2JzLmFwcGVuZChqb2IpOwog
Ci0gICAgaWYgKGhhbmRsZVBvcyA8IDApCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGZvciAo
YXV0byYgdGlja2V0IDogY2FuY2VsbGVkVGlja2V0cykKKyAgICAgICAgam9icy5jYW5jZWwodGlj
a2V0KTsKIAotICAgIENVUkxNY29kZSByZXR2YWwgPSBtX2N1cmxNdWx0aUhhbmRsZS5yZW1vdmVI
YW5kbGUoY3VybEhhbmRsZSk7Ci0gICAgaWYgKHJldHZhbCA9PSBDVVJMTV9PSykgewotICAgICAg
ICBtX2FjdGl2ZUhhbmRsZUxpc3QucmVtb3ZlKGhhbmRsZVBvcyk7Ci0gICAgICAgIHJldHVybiB0
cnVlOworICAgIGZvciAoYXV0byYgY2FsbGJhY2sgOiBtX3Rhc2tRdWV1ZS50YWtlQWxsTWVzc2Fn
ZXMoKSkgeworICAgICAgICAoKmNhbGxiYWNrKSgpOwogICAgIH0KLSAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBDdXJsSm9iTWFuYWdlcjo6d29ya2VyVGhy
ZWFkKCkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgIHdoaWxlIChydW5U
aHJlYWQoKSkgewotCi0gICAgICAgIHVwZGF0ZUhhbmRsZUxpc3QoKTsKKyAgICBDdXJsSm9iTGlz
dCBqb2JzOwogCisgICAgd2hpbGUgKHVwZGF0ZUpvYnMoam9icykpIHsKICAgICAgICAgLy8gUmV0
cnkgJ3NlbGVjdCcgaWYgaXQgd2FzIGludGVycnVwdGVkIGJ5IGEgcHJvY2VzcyBzaWduYWwuCiAg
ICAgICAgIGludCByYyA9IDA7CiAgICAgICAgIGRvIHsKQEAgLTE3Nyw3ICsyMjgsNyBAQCB2b2lk
IEN1cmxKb2JNYW5hZ2VyOjp3b3JrZXJUaHJlYWQoKQogICAgICAgICAgICAgdGltZW91dC50dl9z
ZWMgPSAwOwogICAgICAgICAgICAgdGltZW91dC50dl91c2VjID0gc2VsZWN0VGltZW91dE1TICog
MTAwMDsgLy8gc2VsZWN0IHdhaXRzIG1pY3Jvc2Vjb25kcwogCi0gICAgICAgICAgICBtX2N1cmxN
dWx0aUhhbmRsZS5nZXRGZFNldChmZHJlYWQsIGZkd3JpdGUsIGZkZXhjZXAsIG1heGZkKTsKKyAg
ICAgICAgICAgIGpvYnMuZ2V0RmRTZXQoZmRyZWFkLCBmZHdyaXRlLCBmZGV4Y2VwLCBtYXhmZCk7
CiAKICAgICAgICAgICAgIC8vIFdoZW4gdGhlIDMgZmlsZSBkZXNjcmlwdG9ycyBhcmUgZW1wdHks
IHdpbnNvY2sgd2lsbCByZXR1cm4gLTEKICAgICAgICAgICAgIC8vIGFuZCBiYWlsIG91dCwgc3Rv
cHBpbmcgdGhlIGZpbGUgZG93bmxvYWQuIFNvIG1ha2Ugc3VyZSB3ZQpAQCAtMTg2LDI2ICsyMzcs
NDkgQEAgdm9pZCBDdXJsSm9iTWFuYWdlcjo6d29ya2VyVGhyZWFkKCkKICAgICAgICAgICAgICAg
ICByYyA9IDo6c2VsZWN0KG1heGZkICsgMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAm
dGltZW91dCk7CiAgICAgICAgIH0gd2hpbGUgKHJjID09IC0xICYmIGVycm5vID09IEVJTlRSKTsK
IAotICAgICAgICBpbnQgcnVubmluZ0hhbmRsZXMgPSAwOwotICAgICAgICB3aGlsZSAobV9jdXJs
TXVsdGlIYW5kbGUucGVyZm9ybShydW5uaW5nSGFuZGxlcykgPT0gQ1VSTE1fQ0FMTF9NVUxUSV9Q
RVJGT1JNKSB7IH0KLQotICAgICAgICBpbnQgbWVzc2FnZXNJblF1ZXVlID0gMDsKLSAgICAgICAg
Q1VSTE1zZyogbXNnID0gbV9jdXJsTXVsdGlIYW5kbGUucmVhZEluZm8obWVzc2FnZXNJblF1ZXVl
KTsKLSAgICAgICAgaWYgKCFtc2cpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotCi0gICAgICAg
IEN1cmxKb2IqIGpvYiA9IG51bGxwdHI7Ci0gICAgICAgIENVUkxjb2RlIGVyciA9IGN1cmxfZWFz
eV9nZXRpbmZvKG1zZy0+ZWFzeV9oYW5kbGUsIENVUkxJTkZPX1BSSVZBVEUsICZqb2IpOwotICAg
ICAgICBVTlVTRURfUEFSQU0oZXJyKTsKLSAgICAgICAgQVNTRVJUKGpvYik7Ci0KLSAgICAgICAg
Q3VybEpvYkFjdGlvbiBhY3Rpb24gPSBqb2ItPmhhbmRsZUN1cmxNc2cobXNnKTsKLQotICAgICAg
ICBpZiAoYWN0aW9uID09IEN1cmxKb2JBY3Rpb246OkZpbmlzaGVkKQotICAgICAgICAgICAgcmVt
b3ZlRnJvbUN1cmwobXNnLT5lYXN5X2hhbmRsZSk7Ci0KLSAgICAgICAgc3RvcFRocmVhZElmSWRs
ZSgpOworICAgICAgICBpbnQgYWN0aXZlQ291bnQgPSAwOworICAgICAgICB3aGlsZSAoam9icy5w
ZXJmb3JtKGFjdGl2ZUNvdW50KSA9PSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0pIHsgfQorCisg
ICAgICAgIC8vIGNoZWNrIHRoZSBjdXJsIG1lc3NhZ2VzIGluZGljYXRpbmcgY29tcGxldGVkIHRy
YW5zZmVycworICAgICAgICAvLyBhbmQgZnJlZSB0aGVpciByZXNvdXJjZXMKKyAgICAgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgICAgIGludCBtZXNzYWdlc0luUXVldWUgPSAwOworICAgICAg
ICAgICAgQ1VSTE1zZyogbXNnID0gam9icy5yZWFkSW5mbyhtZXNzYWdlc0luUXVldWUpOworICAg
ICAgICAgICAgaWYgKCFtc2cpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGlmIChtc2ctPm1zZyA9PSBDVVJMTVNHX0RPTkUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRp
Y2tldCA9IHN0YXRpY19jYXN0PEN1cmxKb2JUaWNrZXQ+KG1zZy0+ZWFzeV9oYW5kbGUpOworICAg
ICAgICAgICAgICAgIENVUkxjb2RlIHJlc3VsdCA9IG1zZy0+ZGF0YS5yZXN1bHQ7CisKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0
ZXgpOworICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUpvYnMucmVtb3ZlKHRpY2tldCk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgam9icy5jb21wbGV0ZSh0aWNrZXQs
IFtyZXN1bHRdKGF1dG8mIGpvYikgeworICAgICAgICAgICAgICAgICAgICBqb2IuY3VybEhhbmRs
ZSgpLT5zZXRFcnJvckNvZGUocmVzdWx0KTsKKworICAgICAgICAgICAgICAgICAgICBib29sIGRv
bmUgPSByZXN1bHQgPT0gQ1VSTEVfT0s7CisgICAgICAgICAgICAgICAgICAgIGlmIChkb25lKQor
ICAgICAgICAgICAgICAgICAgICAgICAgam9iLmZpbmlzaGVkKCk7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgVVJMIHVybCA9IGpvYi5jdXJsSGFu
ZGxlKCktPmdldEVmZmVjdGl2ZVVSTCgpOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ3VybCBFUlJPUiBmb3IgdXJsPSclcycsIGVycm9y
OiAnJXMnXG4iLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgam9iLmN1cmxIYW5kbGUoKS0+
ZXJyb3JEZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgICAgICAgICAg
ICAgICAgICAgICBqb2IuZXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoam9icy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIHN0b3BUaHJlYWRJZk5vTW9yZUpvYlJ1bm5pbmcoKTsKKyAgICAgICAgICAg
IGlmICghbV9ydW5UaHJlYWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsSm9iTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxKb2JNYW5hZ2VyLmgKaW5kZXggZmMyZjBmODQwYTEuLmZkYjY1OTYwZTA0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFn
ZXIuaApAQCAtMjgsMTEgKzI4LDE3IEBACiAKICNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgogCisj
aW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KKyNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAotI2lmIFBMQVRGT1JNKFdJTikKKyNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHdp
bmRvd3MuaD4KICNpbmNsdWRlIDx3aW5zb2NrMi5oPgogI2VuZGlmCkBAIC00MCw1OSArNDYsODEg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1lbnVtIGNsYXNzIEN1cmxKb2JBY3Rpb24geyBO
b25lLCBGaW5pc2hlZCB9OworZW51bSBjbGFzcyBDdXJsSm9iUmVzdWx0IHsgRG9uZSwgRXJyb3Is
IENhbmNlbGxlZCB9OwordXNpbmcgQ3VybEpvYlRpY2tldCA9IHZvaWQqOwordXNpbmcgQ3VybEpv
YkNhbGxiYWNrID0gV1RGOjpGdW5jdGlvbjx2b2lkKEN1cmxKb2JSZXN1bHQpPjsKK3VzaW5nIEN1
cmxKb2JUYXNrID0gV1RGOjpGdW5jdGlvbjx2b2lkKEN1cmxIYW5kbGUmKT47CiAKLWNsYXNzIEN1
cmxKb2IgewotcHVibGljOgotICAgIHZpcnR1YWwgQ3VybEpvYkFjdGlvbiBoYW5kbGVDdXJsTXNn
KENVUkxNc2cqKSA9IDA7CitjbGFzcyBDdXJsSm9iTGlzdDsKKworc3RydWN0IEN1cmxKb2Igewor
ICAgIEN1cmxKb2IoKSB7IH0KKyAgICBDdXJsSm9iKEN1cmxIYW5kbGUqIGN1cmwsIEN1cmxKb2JD
YWxsYmFjayBqb2IpCisgICAgICAgIDogbV9jdXJsIHsgY3VybCB9LCBtX2pvYiB7IFdURk1vdmUo
am9iKSB9IHsgfQorICAgIEN1cmxKb2IoQ3VybEpvYiYmIG90aGVyKSB7IHN3YXAoV1RGTW92ZShv
dGhlcikpOyB9CisgICAgfkN1cmxKb2IoKSB7IH0KKworICAgIEN1cmxKb2ImIG9wZXJhdG9yPShD
dXJsSm9iJiYgb3RoZXIpCisgICAgeworICAgICAgICBzd2FwKFdURk1vdmUob3RoZXIpKTsKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEN1cmxIYW5kbGUqIGN1cmxIYW5kbGUo
KSBjb25zdCB7IHJldHVybiBtX2N1cmw7IH0KKyAgICBDdXJsSm9iVGlja2V0IHRpY2tldCgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEN1cmxKb2JUaWNrZXQ+KG1fY3VybC0+aGFuZGxlKCkp
OyB9CisKKyAgICB2b2lkIGZpbmlzaGVkKCkgeyBtX2pvYihDdXJsSm9iUmVzdWx0OjpEb25lKTsg
fQorICAgIHZvaWQgZXJyb3IoKSB7IG1fam9iKEN1cmxKb2JSZXN1bHQ6OkVycm9yKTsgfQorICAg
IHZvaWQgY2FuY2VsKCkgeyBtX2pvYihDdXJsSm9iUmVzdWx0OjpDYW5jZWxsZWQpOyB9CisKK3By
aXZhdGU6CisgICAgdm9pZCBzd2FwKEN1cmxKb2ImJiBvdGhlcikKKyAgICB7CisgICAgICAgIHN0
ZDo6c3dhcChtX2N1cmwsIG90aGVyLm1fY3VybCk7CisgICAgICAgIHN0ZDo6c3dhcChtX2pvYiwg
b3RoZXIubV9qb2IpOworICAgIH0KKworICAgIEN1cmxIYW5kbGUqIG1fY3VybDsKKyAgICBDdXJs
Sm9iQ2FsbGJhY2sgbV9qb2I7CiB9OwogCisKIGNsYXNzIEN1cmxKb2JNYW5hZ2VyIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDdXJsSm9iTWFuYWdlcik7CisgICAgdXNpbmcgQ2FsbGJhY2sg
PSBDdXJsSm9iQ2FsbGJhY2s7CisKIHB1YmxpYzoKKwogICAgIHN0YXRpYyBDdXJsSm9iTWFuYWdl
ciYgc2luZ2xldG9uKCkKICAgICB7Ci0gICAgICAgIC8vIFNpbmNlIGl0J3MgYSBzdGF0aWMgdmFy
aWFibGUsIGlmIHRoZSBjbGFzcyBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQsCi0gICAgICAgIC8v
IEl0IHdvbid0IGJlIGNyZWF0ZWQgYWdhaW4uCi0gICAgICAgIC8vIEFuZCBpdCAqKmlzKiogdGhy
ZWFkLXNhZmUgaW4gQysrMTEuCi0KICAgICAgICAgc3RhdGljIEN1cmxKb2JNYW5hZ2VyIHNoYXJl
ZDsKICAgICAgICAgcmV0dXJuIHNoYXJlZDsKICAgICB9CiAKLSAgICBDdXJsSm9iTWFuYWdlcigp
OwotICAgIHZpcnR1YWwgfkN1cmxKb2JNYW5hZ2VyKCk7CisgICAgQ3VybEpvYk1hbmFnZXIoKSA9
IGRlZmF1bHQ7CisgICAgfkN1cmxKb2JNYW5hZ2VyKCkgeyBzdG9wVGhyZWFkKCk7IH0KIAotICAg
IGJvb2wgYWRkKENVUkwqIGN1cmxIYW5kbGUpOwotICAgIGJvb2wgcmVtb3ZlKENVUkwqIGN1cmxI
YW5kbGUpOwotCi0gICAgaW50IGdldEFjdGl2ZUNvdW50KCkgY29uc3Q7Ci0gICAgaW50IGdldFBl
bmRpbmdDb3VudCgpIGNvbnN0OworICAgIEN1cmxKb2JUaWNrZXQgYWRkKEN1cmxIYW5kbGUmLCBD
YWxsYmFjayk7CisgICAgYm9vbCBjYW5jZWwoQ3VybEpvYlRpY2tldCk7CisgICAgdm9pZCBjYWxs
T25Kb2JUaHJlYWQoV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOwogCiBwcml2YXRlOgogICAgIHZv
aWQgc3RhcnRUaHJlYWRJZk5lZWRlZCgpOworICAgIHZvaWQgc3RvcFRocmVhZElmTm9Nb3JlSm9i
UnVubmluZygpOwogICAgIHZvaWQgc3RvcFRocmVhZCgpOwotICAgIHZvaWQgc3RvcFRocmVhZElm
SWRsZSgpOwotCi0gICAgdm9pZCB1cGRhdGVIYW5kbGVMaXN0KCk7Ci0KLSAgICBib29sIHJ1blRo
cmVhZCgpIGNvbnN0IHsgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7IHJldHVybiBtX3J1blRo
cmVhZDsgfQotICAgIHZvaWQgc2V0UnVuVGhyZWFkKGJvb2wgcnVuVGhyZWFkKSB7IExvY2tIb2xk
ZXIgbG9ja2VyKG1fbXV0ZXgpOyBtX3J1blRocmVhZCA9IHJ1blRocmVhZDsgfQogCi0gICAgYm9v
bCBhZGRUb0N1cmwoQ1VSTCogY3VybEhhbmRsZSk7Ci0gICAgYm9vbCByZW1vdmVGcm9tQ3VybChD
VVJMKiBjdXJsSGFuZGxlKTsKKyAgICBib29sIHVwZGF0ZUpvYnMoQ3VybEpvYkxpc3QmIGpvYnMp
OworICAgIGJvb2wgaXNBY3RpdmVKb2IoQ3VybEpvYlRpY2tldCBqb2IpIGNvbnN0IHsgcmV0dXJu
IG1fYWN0aXZlSm9icy5jb250YWlucyhqb2IpOyB9CiAKICAgICB2b2lkIHdvcmtlclRocmVhZCgp
OwogCiAgICAgUmVmUHRyPFRocmVhZD4gbV90aHJlYWQ7Ci0gICAgVmVjdG9yPENVUkwqPiBtX3Bl
bmRpbmdIYW5kbGVMaXN0OwotICAgIFZlY3RvcjxDVVJMKj4gbV9hY3RpdmVIYW5kbGVMaXN0Owot
ICAgIFZlY3RvcjxDVVJMKj4gbV9yZW1vdmVkSGFuZGxlTGlzdDsKKyAgICBWZWN0b3I8Q3VybEpv
Yj4gbV9wZW5kaW5nSm9iczsKKyAgICBIYXNoU2V0PEN1cmxKb2JUaWNrZXQ+IG1fYWN0aXZlSm9i
czsKKyAgICBWZWN0b3I8Q3VybEpvYlRpY2tldD4gbV9jYW5jZWxsZWRUaWNrZXRzOworICAgIE1l
c3NhZ2VRdWV1ZTxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+IG1fdGFza1F1ZXVlOwogICAgIG11dGFi
bGUgTG9jayBtX211dGV4OwotICAgIGJvb2wgbV9ydW5UaHJlYWQgeyBmYWxzZSB9OwotCi0gICAg
Q3VybE11bHRpSGFuZGxlIG1fY3VybE11bHRpSGFuZGxlOwotCi0gICAgZnJpZW5kIGNsYXNzIEN1
cmxKb2I7CisgICAgYm9vbCBtX3J1blRocmVhZCB7IH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VFcnJvci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlRXJyb3IuaAppbmRleCAw
MDNmOWI2OTUwMi4uZTVkYWRkMmFhYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUVycm9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlRXJyb3IuaApAQCAtMjMsOSArMjMsOSBAQAogICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBSZXNvdXJjZUVycm9yX2gKLSNkZWZpbmUgUmVz
b3VyY2VFcnJvcl9oCisjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VFcnJvckJhc2UuaCIKIAogI2lmIFBMQVRGT1JNKFdJTikKQEAgLTMz
LDggKzMzLDYgQEAKICNpbmNsdWRlIDx3aW5zb2NrMi5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxj
dXJsL2N1cmwuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZXNvdXJjZUVycm9y
IDogcHVibGljIFJlc291cmNlRXJyb3JCYXNlCkBAIC00MiwxMyArNDAsMTcgQEAgY2xhc3MgUmVz
b3VyY2VFcnJvciA6IHB1YmxpYyBSZXNvdXJjZUVycm9yQmFzZQogcHVibGljOgogICAgIFJlc291
cmNlRXJyb3IoVHlwZSB0eXBlID0gVHlwZTo6TnVsbCkKICAgICAgICAgOiBSZXNvdXJjZUVycm9y
QmFzZSh0eXBlKQotICAgICAgICAsIG1fc3NsRXJyb3JzKDApCiAgICAgewogICAgIH0KIAogICAg
IFJlc291cmNlRXJyb3IoY29uc3QgU3RyaW5nJiBkb21haW4sIGludCBlcnJvckNvZGUsIGNvbnN0
IFVSTCYgZmFpbGluZ1VSTCwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXNjcmlwdGlvbiwgVHlw
ZSB0eXBlID0gVHlwZTo6R2VuZXJhbCkKICAgICAgICAgOiBSZXNvdXJjZUVycm9yQmFzZShkb21h
aW4sIGVycm9yQ29kZSwgZmFpbGluZ1VSTCwgbG9jYWxpemVkRGVzY3JpcHRpb24sIHR5cGUpCi0g
ICAgICAgICwgbV9zc2xFcnJvcnMoMCkKKyAgICB7CisgICAgfQorCisgICAgUmVzb3VyY2VFcnJv
cihjb25zdCBDdXJsSGFuZGxlJiBjdXJsLCB1bnNpZ25lZCBzc2xFcnJvcnMpCisgICAgICAgIDog
UmVzb3VyY2VFcnJvckJhc2UoQ3VybENvbnRleHQ6OmVycm9yRG9tYWluLCBjdXJsLmVycm9yQ29k
ZSgpLCBjdXJsLmdldEVmZmVjdGl2ZVVSTCgpLCBjdXJsLmVycm9yRGVzY3JpcHRpb24oKSwgVHlw
ZTo6R2VuZXJhbCkKKyAgICAgICAgLCBtX3NzbEVycm9ycyB7IHNzbEVycm9ycyB9CiAgICAgewog
ICAgIH0KIApAQCAtNjAsOSArNjIsOCBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBSZXNv
dXJjZUVycm9yQmFzZTsKICAgICB2b2lkIGRvUGxhdGZvcm1Jc29sYXRlZENvcHkoY29uc3QgUmVz
b3VyY2VFcnJvciYpIHsgfQogCi0gICAgdW5zaWduZWQgbV9zc2xFcnJvcnM7CisgICAgdW5zaWdu
ZWQgbV9zc2xFcnJvcnMgeyAwIH07CiB9OwogCiB9CiAKLSNlbmRpZiAvLyBSZXNvdXJjZUVycm9y
X2hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VIYW5kbGVDdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCmluZGV4IGYzZmViNzljZTNlLi42ODdkMDdlMDI4YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNl
SGFuZGxlQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKQEAgLTM1LDEzICszNSwxMiBAQAogI2luY2x1ZGUgIkNy
ZWRlbnRpYWxTdG9yYWdlLmgiCiAjaW5jbHVkZSAiQ3VybENhY2hlTWFuYWdlci5oIgogI2luY2x1
ZGUgIkN1cmxDb250ZXh0LmgiCisjaW5jbHVkZSAiQ3VybEpvYk1hbmFnZXIuaCIKICNpbmNsdWRl
ICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgotI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlTWFuYWdlci5oIgogI2luY2x1ZGUgIlNTTEhhbmRsZS5oIgog
I2luY2x1ZGUgIlN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
QmFzZTY0Lmg+CkBAIC01NSwxMSArNTQsMTIgQEAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJl
c291cmNlSGFuZGxlSW50ZXJuYWwoKQogCiBSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxl
KCkKIHsKLSAgICBjYW5jZWwoKTsKIH0KIAogYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoKQog
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKICAgICAvLyBUaGUgZnJhbWUgY291bGQg
YmUgbnVsbCBpZiB0aGUgUmVzb3VyY2VIYW5kbGUgaXMgbm90IGFzc29jaWF0ZWQgdG8gYW55CiAg
ICAgLy8gRnJhbWUsIGUuZy4gaWYgd2UgYXJlIGRvd25sb2FkaW5nIGEgZmlsZS4KICAgICAvLyBJ
ZiB0aGUgZnJhbWUgaXMgbm90IG51bGwgYnV0IHRoZSBwYWdlIGlzIG51bGwgdGhpcyBtdXN0IGJl
IGFuIGF0dGVtcHRlZApAQCAtNjgsMjQgKzY4LDI3MSBAQCBib29sIFJlc291cmNlSGFuZGxlOjpz
dGFydCgpCiAgICAgaWYgKGQtPm1fY29udGV4dCAmJiAhZC0+bV9jb250ZXh0LT5pc1ZhbGlkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2hh
cmVkSW5zdGFuY2UoKS0+YWRkKHRoaXMpOworICAgIGluaXRpYWxpemUoKTsKKworICAgIEN1cmxK
b2JNYW5hZ2VyOjpzaW5nbGV0b24oKS5hZGQoZC0+bV9jdXJsSGFuZGxlLAorICAgICAgICBbcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShDdXJsSm9iUmVzdWx0IHJlc3VsdCkgeworICAg
ICAgICAKKyAgICAgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgICAgY2FzZSBDdXJsSm9iUmVz
dWx0OjpEb25lOgorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlkRmluaXNoKCk7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEN1cmxKb2JSZXN1bHQ6OkVycm9yOgorICAg
ICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlkRmFpbCgpOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBDdXJsSm9iUmVzdWx0OjpDYW5jZWxsZWQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFJlc291
cmNlSGFuZGxlOjpjYW5jZWwoKQogewotICAgIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2hhcmVk
SW5zdGFuY2UoKS0+Y2FuY2VsKHRoaXMpOworICAgIEN1cmxKb2JNYW5hZ2VyOjpzaW5nbGV0b24o
KS5jYW5jZWwobV9qb2IpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjppbml0aWFsaXplKCkK
K3sKKyAgICBDdXJsQ29udGV4dCYgY29udGV4dCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKTsK
KworICAgIFVSTCB1cmwgPSBmaXJzdFJlcXVlc3QoKS51cmwoKTsKKworICAgIC8vIFJlbW92ZSBh
bnkgZnJhZ21lbnQgcGFydCwgb3RoZXJ3aXNlIGN1cmwgd2lsbCBzZW5kIGl0IGFzIHBhcnQgb2Yg
dGhlIHJlcXVlc3QuCisgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOworCisgICAg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGdldEludGVybmFsKCk7CisgICAgU3RyaW5nIHVy
bFN0cmluZyA9IHVybC5zdHJpbmcoKTsKKworICAgIGlmICh1cmwuaXNMb2NhbEZpbGUoKSkgewor
ICAgICAgICAvLyBSZW1vdmUgYW55IHF1ZXJ5IHBhcnQgc2VudCB0byBhIGxvY2FsIGZpbGUuCisg
ICAgICAgIGlmICghdXJsLnF1ZXJ5KCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyBCeSBz
ZXR0aW5nIHRoZSBxdWVyeSB0byBhIG51bGwgc3RyaW5nIGl0J2xsIGJlIHJlbW92ZWQuCisgICAg
ICAgICAgICB1cmwuc2V0UXVlcnkoU3RyaW5nKCkpOworICAgICAgICAgICAgdXJsU3RyaW5nID0g
dXJsLnN0cmluZygpOworICAgICAgICB9CisgICAgICAgIC8vIERldGVybWluZSB0aGUgTUlNRSB0
eXBlIGJhc2VkIG9uIHRoZSBwYXRoLgorICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldE1pbWVUeXBl
KE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aCh1cmwpKTsKKyAgICB9CisKKyAg
ICBpZiAoZC0+bV9kZWZlcnNMb2FkaW5nKSB7CisgICAgICAgIENVUkxjb2RlIGVycm9yID0gZC0+
bV9jdXJsSGFuZGxlLnBhdXNlKENVUkxQQVVTRV9BTEwpOworICAgICAgICAvLyBJZiB3ZSBkaWQg
bm90IHBhdXNlIHRoZSBoYW5kbGUsIHdlIHdvdWxkIEFTU0VSVCBpbiB0aGUKKyAgICAgICAgLy8g
aGVhZGVyIGNhbGxiYWNrLiBTbyBqdXN0IGFzc2VydCBoZXJlLgorICAgICAgICBBU1NFUlRfVU5V
U0VEKGVycm9yLCBlcnJvciA9PSBDVVJMRV9PSyk7CisgICAgfQorCisjaWZuZGVmIE5ERUJVRwor
ICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVWZXJib3NlSWZVc2VkKCk7CisgICAgZC0+bV9jdXJs
SGFuZGxlLmVuYWJsZVN0ZEVycklmVXNlZCgpOworI2VuZGlmCisKKyAgICBkLT5tX2N1cmxIYW5k
bGUuc2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyRW5hYmxlKTsKKyAgICBk
LT5tX2N1cmxIYW5kbGUuc2V0U3NsVmVyaWZ5SG9zdChDdXJsSGFuZGxlOjpWZXJpZnlIb3N0U3Ry
aWN0TmFtZUNoZWNrKTsKKyAgICBkLT5tX2N1cmxIYW5kbGUuc2V0UHJpdmF0ZURhdGEodGhpcyk7
CisgICAgZC0+bV9jdXJsSGFuZGxlLnNldFdyaXRlQ2FsbGJhY2tGdW5jdGlvbih3cml0ZUNhbGxi
YWNrLCB0aGlzKTsKKyAgICBkLT5tX2N1cmxIYW5kbGUuc2V0SGVhZGVyQ2FsbGJhY2tGdW5jdGlv
bihoZWFkZXJDYWxsYmFjaywgdGhpcyk7CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUF1dG9S
ZWZlcmVyKCk7CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUZvbGxvd0xvY2F0aW9uKCk7Cisg
ICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBBdXRoZW50aWNhdGlvbihDVVJMQVVUSF9BTlkp
OworICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVTaGFyZUhhbmRsZSgpOworICAgIGQtPm1fY3Vy
bEhhbmRsZS5lbmFibGVUaW1lb3V0KCk7CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUFsbG93
ZWRQcm90b2NvbHMoKTsKKyAgICBzZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZSh0aGlzKTsKKworICAg
IGlmIChDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc2hvdWxkSWdub3JlU1NMRXJyb3JzKCkpCisg
ICAgICAgIGQtPm1fY3VybEhhbmRsZS5zZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5kbGU6OlZlcmlm
eVBlZXJEaXNhYmxlKTsKKyAgICBlbHNlCisgICAgICAgIHNldFNTTFZlcmlmeU9wdGlvbnModGhp
cyk7CisKKyAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlQ0FJbmZvSWZFeGlzdHMoKTsKKworICAg
IGQtPm1fY3VybEhhbmRsZS5lbmFibGVBY2NlcHRFbmNvZGluZygpOworICAgIGQtPm1fY3VybEhh
bmRsZS5zZXRVcmwodXJsU3RyaW5nKTsKKyAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlQ29va2ll
SmFySWZFeGlzdHMoKTsKKworICAgIGlmIChmaXJzdFJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGRz
KCkuc2l6ZSgpID4gMCkgeworICAgICAgICBhdXRvIGN1c3RvbUhlYWRlcnMgPSBmaXJzdFJlcXVl
c3QoKS5odHRwSGVhZGVyRmllbGRzKCk7CisgICAgICAgIGF1dG8mIGNhY2hlID0gQ3VybENhY2hl
TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKTsKKworICAgICAgICBib29sIGhhc0NhY2hlSGVhZGVycyA9
IGN1c3RvbUhlYWRlcnMuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6OklmTW9kaWZpZWRTaW5jZSkg
fHwgY3VzdG9tSGVhZGVycy5jb250YWlucyhIVFRQSGVhZGVyTmFtZTo6SWZOb25lTWF0Y2gpOwor
ICAgICAgICBpZiAoIWhhc0NhY2hlSGVhZGVycyAmJiBjYWNoZS5pc0NhY2hlZCh1cmwpKSB7Cisg
ICAgICAgICAgICBjYWNoZS5hZGRDYWNoZUVudHJ5Q2xpZW50KHVybCwgdGhpcyk7CisKKyAgICAg
ICAgICAgIC8vIGFwcGVuZCBhZGRpdGlvbmFsIGNhY2hlIGluZm9ybWF0aW9uCisgICAgICAgICAg
ICBmb3IgKGF1dG8gZW50cnkgOiBjYWNoZS5yZXF1ZXN0SGVhZGVycyh1cmwpKQorICAgICAgICAg
ICAgICAgIGN1c3RvbUhlYWRlcnMuc2V0KGVudHJ5LmtleSwgZW50cnkudmFsdWUpOworCisgICAg
ICAgICAgICBkLT5tX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycyA9IHRydWU7CisgICAgICAg
IH0KKworICAgICAgICBkLT5tX2N1cmxIYW5kbGUuYXBwZW5kUmVxdWVzdEhlYWRlcnMoY3VzdG9t
SGVhZGVycyk7CisgICAgfQorCisgICAgU3RyaW5nIG1ldGhvZCA9IGZpcnN0UmVxdWVzdCgpLmh0
dHBNZXRob2QoKTsKKyAgICBpZiAoIkdFVCIgPT0gbWV0aG9kKQorICAgICAgICBkLT5tX2N1cmxI
YW5kbGUuZW5hYmxlSHR0cEdldFJlcXVlc3QoKTsKKyAgICBlbHNlIGlmICgiUE9TVCIgPT0gbWV0
aG9kKQorICAgICAgICBzZXR1cFBPU1QoKTsKKyAgICBlbHNlIGlmICgiUFVUIiA9PSBtZXRob2Qp
CisgICAgICAgIHNldHVwUFVUKCk7CisgICAgZWxzZSBpZiAoIkhFQUQiID09IG1ldGhvZCkKKyAg
ICAgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBIZWFkUmVxdWVzdCgpOworICAgIGVsc2Ug
eworICAgICAgICBkLT5tX2N1cmxIYW5kbGUuc2V0SHR0cEN1c3RvbVJlcXVlc3QobWV0aG9kKTsK
KyAgICAgICAgc2V0dXBQVVQoKTsKKyAgICB9CisKKyAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxl
UmVxdWVzdEhlYWRlcnMoKTsKKworICAgIGFwcGx5QXV0aGVudGljYXRpb24oKTsKKworICAgIGQt
Pm1fY3VybEhhbmRsZS5lbmFibGVQcm94eUlmRXhpc3RzKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VI
YW5kbGU6OmFwcGx5QXV0aGVudGljYXRpb24oKQoreworICAgIFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCA9IGZpcnN0UmVxdWVzdCgpOworICAgIC8vIG1fdXNlci9tX3Bhc3MgYXJlIGNyZWRlbnRp
YWxzIGdpdmVuIG1hbnVhbGx5LCBmb3IgaW5zdGFuY2UsIGJ5IHRoZSBhcmd1bWVudHMgcGFzc2Vk
IHRvIFhNTEh0dHBSZXF1ZXN0Lm9wZW4oKS4KKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBk
ID0gZ2V0SW50ZXJuYWwoKTsKKworICAgIFN0cmluZyBwYXJ0aXRpb24gPSByZXF1ZXN0LmNhY2hl
UGFydGl0aW9uKCk7CisKKyAgICBpZiAoc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSkgewor
ICAgICAgICBpZiAoZC0+bV91c2VyLmlzRW1wdHkoKSAmJiBkLT5tX3Bhc3MuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0
IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAg
QmFzaWMgYXV0aGVudGljYXRpb24sIAorICAgICAgICAgICAgLy8gdHJ5IGFuZCByZXVzZSB0aGUg
Y3JlZGVudGlhbCBwcmVlbXB0aXZlbHksIGFzIGFsbG93ZWQgYnkgUkZDIDI2MTcuCisgICAgICAg
ICAgICBkLT5tX2luaXRpYWxDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRD
cmVkZW50aWFsU3RvcmFnZSgpLmdldChwYXJ0aXRpb24sIHJlcXVlc3QudXJsKCkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHByb3RlY3Rp
b24gc3BhY2Uga25vd24gZm9yIHRoZSBVUkwsIHVwZGF0ZSBzdG9yZWQgY3JlZGVudGlhbHMKKyAg
ICAgICAgICAgIC8vIGJlZm9yZSBzZW5kaW5nIGEgcmVxdWVzdC4gVGhpcyBtYWtlcyBpdCBwb3Nz
aWJsZSB0byBpbXBsZW1lbnQgbG9nb3V0IGJ5IHNlbmRpbmcgYW4KKyAgICAgICAgICAgIC8vIFhN
TEh0dHBSZXF1ZXN0IHdpdGgga25vd24gaW5jb3JyZWN0IGNyZWRlbnRpYWxzLCBhbmQgYWJvcnRp
bmcgaXQgaW1tZWRpYXRlbHkgKHNvIHRoYXQKKyAgICAgICAgICAgIC8vIGFuIGF1dGhlbnRpY2F0
aW9uIGRpYWxvZyBkb2Vzbid0IHBvcCB1cCkuCisgICAgICAgICAgICBDcmVkZW50aWFsU3RvcmFn
ZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRpdGlvbiwgQ3JlZGVudGlhbChk
LT5tX3VzZXIsIGQtPm1fcGFzcywgQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSksIHJlcXVlc3Qu
dXJsKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgU3RyaW5nIHVzZXIgPSBkLT5tX3VzZXI7
CisgICAgU3RyaW5nIHBhc3N3b3JkID0gZC0+bV9wYXNzOworCisgICAgaWYgKCFkLT5tX2luaXRp
YWxDcmVkZW50aWFsLmlzRW1wdHkoKSkgeworICAgICAgICB1c2VyID0gZC0+bV9pbml0aWFsQ3Jl
ZGVudGlhbC51c2VyKCk7CisgICAgICAgIHBhc3N3b3JkID0gZC0+bV9pbml0aWFsQ3JlZGVudGlh
bC5wYXNzd29yZCgpOworICAgICAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlSHR0cEF1dGhlbnRp
Y2F0aW9uKENVUkxBVVRIX0JBU0lDKTsKKyAgICB9CisKKyAgICAvLyBJdCBzZWVtcyB3ZSBuZWVk
IHRvIHNldCBDVVJMT1BUX1VTRVJQV0QgZXZlbiBpZiB1c2VybmFtZSBhbmQgcGFzc3dvcmQgaXMg
ZW1wdHkuCisgICAgLy8gT3RoZXJ3aXNlIGNVUkwgd2lsbCBub3QgYXV0b21hdGljYWxseSBjb250
aW51ZSB3aXRoIGEgbmV3IHJlcXVlc3QgYWZ0ZXIgYSA0MDEgcmVzcG9uc2UuCisKKyAgICAvLyBj
dXJsIENVUkxPUFRfVVNFUlBXRCBleHBlY3RzIHVzZXJuYW1lOnBhc3N3b3JkCisgICAgZC0+bV9j
dXJsSGFuZGxlLnNldEh0dHBBdXRoVXNlclBhc3ModXNlciwgcGFzc3dvcmQpOworfQorCitzdGF0
aWMgaW5saW5lIHNpemVfdCBnZXRGb3JtRWxlbWVudHNDb3VudChSZXNvdXJjZUhhbmRsZSogam9i
KQoreworICAgIFJlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEgPSBqb2ItPmZpcnN0UmVxdWVzdCgp
Lmh0dHBCb2R5KCk7CisKKyAgICBpZiAoIWZvcm1EYXRhKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIC8vIFJlc29sdmUgdGhlIGJsb2IgZWxlbWVudHMgc28gdGhlIGZvcm1EYXRhIGNhbiBjb3Jy
ZWN0bHkgcmVwb3J0IGl0J3Mgc2l6ZS4KKyAgICBmb3JtRGF0YSA9IGZvcm1EYXRhLT5yZXNvbHZl
QmxvYlJlZmVyZW5jZXMoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGZvcm1EYXRhLT5lbGVtZW50cygp
LnNpemUoKTsKKyAgICBqb2ItPmZpcnN0UmVxdWVzdCgpLnNldEhUVFBCb2R5KFdURk1vdmUoZm9y
bURhdGEpKTsKKworICAgIHJldHVybiBzaXplOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpz
ZXR1cFBVVCgpCit7CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBQdXRSZXF1ZXN0KCk7
CisKKyAgICAvLyBEaXNhYmxlIHRoZSBFeHBlY3Q6IDEwMCBjb250aW51ZSBoZWFkZXIKKyAgICBk
LT5tX2N1cmxIYW5kbGUuYXBwZW5kUmVxdWVzdEhlYWRlcigiRXhwZWN0OiIpOworCisgICAgc2l6
ZV90IG51bUVsZW1lbnRzID0gZ2V0Rm9ybUVsZW1lbnRzQ291bnQodGhpcyk7CisgICAgaWYgKCFu
dW1FbGVtZW50cykKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0dXBGb3JtRGF0YShmYWxzZSk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldHVwUE9TVCgpCit7CisgICAgZC0+bV9jdXJs
SGFuZGxlLmVuYWJsZUh0dHBQb3N0UmVxdWVzdCgpOworCisgICAgc2l6ZV90IG51bUVsZW1lbnRz
ID0gZ2V0Rm9ybUVsZW1lbnRzQ291bnQodGhpcyk7CisgICAgaWYgKCFudW1FbGVtZW50cykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gRG8gbm90IHN0cmVhbSBmb3Igc2ltcGxlIFBPU1QgZGF0
YQorICAgIGlmIChudW1FbGVtZW50cyA9PSAxKSB7CisgICAgICAgIGZpcnN0UmVxdWVzdCgpLmh0
dHBCb2R5KCktPmZsYXR0ZW4oZC0+bV9wb3N0Qnl0ZXMpOworICAgICAgICBpZiAoZC0+bV9wb3N0
Qnl0ZXMuc2l6ZSgpKQorICAgICAgICAgICAgZC0+bV9jdXJsSGFuZGxlLnNldFBvc3RGaWVsZHMo
ZC0+bV9wb3N0Qnl0ZXMuZGF0YSgpLCBkLT5tX3Bvc3RCeXRlcy5zaXplKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgc2V0dXBGb3JtRGF0YSh0cnVlKTsKK30KKwordm9pZCBSZXNv
dXJjZUhhbmRsZTo6c2V0dXBGb3JtRGF0YShib29sIGlzUG9zdFJlcXVlc3QpCit7CisgICAgVmVj
dG9yPEZvcm1EYXRhRWxlbWVudD4gZWxlbWVudHMgPSBmaXJzdFJlcXVlc3QoKS5odHRwQm9keSgp
LT5lbGVtZW50cygpOworICAgIHNpemVfdCBudW1FbGVtZW50cyA9IGVsZW1lbnRzLnNpemUoKTsK
KworICAgIHN0YXRpYyBjb25zdCBsb25nIGxvbmcgbWF4Q3VybE9mZlQgPSBkLT5tX2N1cmxIYW5k
bGUubWF4Q3VybE9mZlQoKTsKKworICAgIC8vIE9idGFpbiB0aGUgdG90YWwgc2l6ZSBvZiB0aGUg
Zm9ybSBkYXRhCisgICAgY3VybF9vZmZfdCBzaXplID0gMDsKKyAgICBib29sIGNodW5rZWRUcmFu
c2ZlciA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkr
KykgeworICAgICAgICBGb3JtRGF0YUVsZW1lbnQgZWxlbWVudCA9IGVsZW1lbnRzW2ldOworICAg
ICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpUeXBlOjpFbmNvZGVk
RmlsZSkgeworICAgICAgICAgICAgbG9uZyBsb25nIGZpbGVTaXplUmVzdWx0OworICAgICAgICAg
ICAgaWYgKGdldEZpbGVTaXplKGVsZW1lbnQubV9maWxlbmFtZSwgZmlsZVNpemVSZXN1bHQpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGZpbGVTaXplUmVzdWx0ID4gbWF4Q3VybE9mZlQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gRmlsZSBzaXplIGlzIHRvbyBiaWcgZm9yIHNwZWNpZnlpbmcg
aXQgdG8gY1VSTAorICAgICAgICAgICAgICAgICAgICBjaHVua2VkVHJhbnNmZXIgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgc2l6ZSArPSBmaWxlU2l6ZVJlc3VsdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgY2h1bmtlZFRyYW5zZmVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzaXplICs9IGVs
ZW1lbnRzW2ldLm1fZGF0YS5zaXplKCk7CisgICAgfQorCisgICAgLy8gY1VSTCBndWVzc2VzIHRo
YXQgd2Ugd2FudCBjaHVua2VkIGVuY29kaW5nIGFzIGxvbmcgYXMgd2Ugc3BlY2lmeSB0aGUgaGVh
ZGVyCisgICAgaWYgKGNodW5rZWRUcmFuc2ZlcikKKyAgICAgICAgZC0+bV9jdXJsSGFuZGxlLmFw
cGVuZFJlcXVlc3RIZWFkZXIoIlRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIik7CisgICAgZWxz
ZSB7CisgICAgICAgIGlmIChpc1Bvc3RSZXF1ZXN0KQorICAgICAgICAgICAgZC0+bV9jdXJsSGFu
ZGxlLnNldFBvc3RGaWVsZExhcmdlKHNpemUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBk
LT5tX2N1cmxIYW5kbGUuc2V0SW5GaWxlU2l6ZUxhcmdlKHNpemUpOworICAgIH0KKworICAgIGQt
Pm1fY3VybEhhbmRsZS5zZXRSZWFkQ2FsbGJhY2tGdW5jdGlvbihyZWFkQ2FsbGJhY2ssIHRoaXMp
OwogfQogCiAjaWYgT1MoV0lORE9XUykKIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0SG9zdEFs
bG93c0FueUhUVFBTQ2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0KQogeworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisKICAgICBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMo
aG9zdCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlSW5m
byhjb25zdCBTdHJpbmcmIGhvc3QsIGNvbnN0IFN0cmluZyYgY2VydGlmaWNhdGUsIGNvbnN0IFN0
cmluZyYga2V5KQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKICAgICBpZiAoZmls
ZUV4aXN0cyhjZXJ0aWZpY2F0ZSkpCiAgICAgICAgIGFkZEFsbG93ZWRDbGllbnRDZXJ0aWZpY2F0
ZShob3N0LCBjZXJ0aWZpY2F0ZSwga2V5KTsKICAgICBlbHNlCkBAIC0xMDQsNDEgKzM1MSw3MiBA
QCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcm
LCBDRkRhdGFSZWYpCiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG9h
ZGluZyhib29sIGRlZmVycykKIHsKLSAgICBpZiAoIWQtPm1fY3VybEhhbmRsZS5oYW5kbGUoKSkK
LSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBpZiAo
ZGVmZXJzKSB7Ci0gICAgICAgIENVUkxjb2RlIGVycm9yID0gZC0+bV9jdXJsSGFuZGxlLnBhdXNl
KENVUkxQQVVTRV9BTEwpOwotICAgICAgICAvLyBJZiB3ZSBjb3VsZCBub3QgZGVmZXIgdGhlIGhh
bmRsZSwgc28gZG9uJ3QgZG8gaXQuCi0gICAgICAgIGlmIChlcnJvciAhPSBDVVJMRV9PSykKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGFjdGlvbiA9IFtkZWZlcnMsIHRoaXNdKCkgewor
ICAgICAgICBpZiAoZGVmZXJzKSB7CisgICAgICAgICAgICBDVVJMY29kZSBlcnJvciA9IGQtPm1f
Y3VybEhhbmRsZS5wYXVzZShDVVJMUEFVU0VfQUxMKTsKKyAgICAgICAgICAgIC8vIElmIHdlIGNv
dWxkIG5vdCBkZWZlciB0aGUgaGFuZGxlLCBzbyBkb24ndCBkbyBpdC4KKyAgICAgICAgICAgIGlm
IChlcnJvciAhPSBDVVJMRV9PSykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBDVVJMY29kZSBlcnJvciA9IGQtPm1fY3VybEhhbmRsZS5wYXVz
ZShDVVJMUEFVU0VfQ09OVCk7CisgICAgICAgICAgICBpZiAoZXJyb3IgIT0gQ1VSTEVfT0spIHsK
KyAgICAgICAgICAgICAgICAvLyBSZXN0YXJ0aW5nIHRoZSBoYW5kbGUgaGFzIGZhaWxlZCBzbyBq
dXN0IGNhbmNlbCBpdC4KKyAgICAgICAgICAgICAgICBjYW5jZWwoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH07CisKKyAgICBpZiAobV9qb2IpIHsKKyAgICAgICAgQ3VybEpvYk1h
bmFnZXI6OnNpbmdsZXRvbigpLmNhbGxPbkpvYlRocmVhZChXVEZNb3ZlKGFjdGlvbikpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIENVUkxjb2RlIGVycm9yID0gZC0+bV9jdXJsSGFuZGxlLnBhdXNl
KENVUkxQQVVTRV9DT05UKTsKLSAgICAgICAgaWYgKGVycm9yICE9IENVUkxFX09LKQotICAgICAg
ICAgICAgLy8gUmVzdGFydGluZyB0aGUgaGFuZGxlIGhhcyBmYWlsZWQgc28ganVzdCBjYW5jZWwg
aXQuCi0gICAgICAgICAgICBjYW5jZWwoKTsKKyAgICAgICAgYWN0aW9uKCk7CiAgICAgfQogfQog
Ci1ib29sIFJlc291cmNlSGFuZGxlOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpCit2b2lk
IFJlc291cmNlSGFuZGxlOjpkaWRGaW5pc2goKQogewotICAgIHJldHVybiAoIWNsaWVudCgpIHx8
IGNsaWVudCgpLT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKSkgJiYgZmlyc3RSZXF1
ZXN0KCkudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpOworICAgIGNhbGxPbk1haW5UaHJl
YWQoW3RoaXMsIHByb3RlY3RUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyNpZiBFTkFCTEUoV0VC
X1RJTUlORykKKyAgICAgICAgY2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25zKCk7CisjZW5k
aWYKKyAgICAgICAgaWYgKCFkLT5tX3Jlc3BvbnNlLnJlc3BvbnNlRmlyZWQoKSkgeworICAgICAg
ICAgICAgaGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICAgICAgICAgIGlmIChkLT5t
X2NhbmNlbGxlZCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoZC0+bV9tdWx0aXBhcnRIYW5kbGUpCisgICAgICAgICAgICBkLT5tX211bHRpcGFydEhh
bmRsZS0+Y29udGVudEVuZGVkKCk7CisKKyAgICAgICAgaWYgKGNsaWVudCgpKSB7CisgICAgICAg
ICAgICBjbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKKyAgICAgICAgICAgIEN1cmxD
YWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZGlkRmluaXNoTG9hZGluZygqdGhpcyk7CisgICAg
ICAgIH0KKyAgICB9KTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBl
cnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKK3Zv
aWQgUmVzb3VyY2VIYW5kbGU6OmRpZEZhaWwoKQogewotICAgIFN5bmNocm9ub3VzTG9hZGVyQ2xp
ZW50IGNsaWVudDsKLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVm
KG5ldyBSZXNvdXJjZUhhbmRsZShjb250ZXh0LCByZXF1ZXN0LCAmY2xpZW50LCBmYWxzZSwgZmFs
c2UpKTsKLQotICAgIGhhbmRsZS5nZXQoKS0+ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigpOworICAg
IGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RUaGlzID0gbWFrZVJlZigqdGhpcyldIHsK
KyAgICAgICAgVVJMIHVybCA9IGQtPm1fY3VybEhhbmRsZS5nZXRFZmZlY3RpdmVVUkwoKTsKKyAg
ICAgICAgaWYgKGNsaWVudCgpKSB7CisgICAgICAgICAgICBjbGllbnQoKS0+ZGlkRmFpbCh0aGlz
LCBSZXNvdXJjZUVycm9yKGQtPm1fY3VybEhhbmRsZSwgZC0+bV9zc2xFcnJvcnMpKTsKKyAgICAg
ICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZGlkRmFpbCgqdGhpcyk7Cisg
ICAgICAgIH0KKyAgICB9KTsKK30KIAotICAgIGVycm9yID0gY2xpZW50LmVycm9yKCk7Ci0gICAg
ZGF0YS5zd2FwKGNsaWVudC5tdXRhYmxlRGF0YSgpKTsKLSAgICByZXNwb25zZSA9IGNsaWVudC5y
ZXNwb25zZSgpOworYm9vbCBSZXNvdXJjZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UoKQoreworICAgIHJldHVybiAoIWNsaWVudCgpIHx8IGNsaWVudCgpLT5zaG91bGRVc2VDcmVk
ZW50aWFsU3RvcmFnZSh0aGlzKSkgJiYgZmlyc3RSZXF1ZXN0KCkudXJsKCkucHJvdG9jb2xJc0lu
SFRUUEZhbWlseSgpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5n
ZSkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCiAgICAgU3RyaW5nIHBhcnRpdGlv
biA9IGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7CiAKICAgICBpZiAoIWQtPm1fdXNl
ci5pc051bGwoKSAmJiAhZC0+bV9wYXNzLmlzTnVsbCgpKSB7CkBAIC0xODgsNiArNDY2LDggQEAg
dm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGwKIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRD
cmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIGNvbnN0
IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KwogICAgIGlmIChjaGFsbGVuZ2UgIT0gZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTIxMSw2ICs0OTEsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNl
aXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZQog
CiB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENy
ZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKIHsKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCiAgICAgaWYgKGNoYWxsZW5nZSAhPSBkLT5tX2N1
cnJlbnRXZWJDaGFsbGVuZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjIwLDYgKzUwMiw4IEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3Jl
ZGVudGlhbChjb25zdCBBdXRoZW50aWNhCiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVk
Q2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCiB7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwogICAgIGlmIChjaGFsbGVuZ2UgIT0gZC0+
bV9jdXJyZW50V2ViQ2hhbGxlbmdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzNywxMCArNTIx
LDggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDaGFsbGVuZ2VSZWplY3Rpb24oY29u
c3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCi1jb25zdCBjaGFyKiBjb25zdCBlcnJvckRvbWFpbkN1cmwgPSAiQ3VybEVycm9yRG9tYWlu
IjsKLQogI2lmIEVOQUJMRShXRUJfVElNSU5HKQotc3RhdGljIHZvaWQgY2FsY3VsYXRlV2ViVGlt
aW5nSW5mb3JtYXRpb25zKFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQpCit2b2lkIFJlc291cmNl
SGFuZGxlOjpjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMoKQogewogICAgIGRvdWJsZSBw
cmVUcmFuc2ZlclRpbWUgPSAwOwogICAgIGRvdWJsZSBkbnNsb29rdXBUaW1lID0gMDsKQEAgLTI2
Myw4ICs1NDUsMTAgQEAgc3RhdGljIHZvaWQgY2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25z
KFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQpCiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgaGFu
ZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqIGpvYiwgUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbCogZCkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmhhbmRsZUxvY2FsUmVjZWl2ZVJl
c3BvbnNlKCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCiAgICAgLy8gc2luY2Ug
dGhlIGNvZGUgaW4gaGVhZGVyQ2FsbGJhY2sgd2lsbCBub3QgaGF2ZSBydW4gZm9yIGxvY2FsIGZp
bGVzCiAgICAgLy8gdGhlIGNvZGUgdG8gc2V0IHRoZSBVUkwgYW5kIGZpcmUgZGlkUmVjZWl2ZVJl
c3BvbnNlIGlzIG5ldmVyIHJ1biwKICAgICAvLyB3aGljaCBtZWFucyB0aGUgUmVzb3VyY2VMb2Fk
ZXIncyByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIHRoZSBVUkwuCkBAIC0yNzMsNDggKzU1Nywx
MSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRs
ZSogam9iLCBSZXNvdXJjZUhhbmRsZUludGVybgogICAgIFVSTCB1cmwgPSBkLT5tX2N1cmxIYW5k
bGUuZ2V0RWZmZWN0aXZlVVJMKCk7CiAgICAgQVNTRVJUKHVybC5pc1ZhbGlkKCkpOwogICAgIGQt
Pm1fcmVzcG9uc2Uuc2V0VVJMKHVybCk7Ci0gICAgaWYgKGQtPmNsaWVudCgpKQotICAgICAgICBk
LT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGpvYiwgUmVzb3VyY2VSZXNwb25zZShkLT5t
X3Jlc3BvbnNlKSk7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+ZGlkUmVj
ZWl2ZVJlc3BvbnNlKHRoaXMsIFJlc291cmNlUmVzcG9uc2UoZC0+bV9yZXNwb25zZSkpOwogICAg
IGQtPm1fcmVzcG9uc2Uuc2V0UmVzcG9uc2VGaXJlZCh0cnVlKTsKIH0KIAotLy8gY2FsbGVkIHdp
dGggZGF0YSBhZnRlciBhbGwgaGVhZGVycyBoYXZlIGJlZW4gcHJvY2Vzc2VkIHZpYSBoZWFkZXJD
YWxsYmFjawotc3RhdGljIHNpemVfdCB3cml0ZUNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNp
emUsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKLXsKLSAgICBSZXNvdXJjZUhhbmRsZSogam9i
ID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihkYXRhKTsKLSAgICBSZXNvdXJjZUhhbmRs
ZUludGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOwotICAgIGlmIChkLT5tX2NhbmNlbGxl
ZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVk
IHdoZW4gZGVmZXJyZWQgbG9hZGluZyBpcyBhY3RpdmF0ZWQuCi0gICAgQVNTRVJUKCFkLT5tX2Rl
ZmVyc0xvYWRpbmcpOwotCi0gICAgc2l6ZV90IHRvdGFsU2l6ZSA9IHNpemUgKiBubWVtYjsKLQot
ICAgIC8vIHRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBidXQgYXBwYXJlbnRseSBpcy4gQ1VS
TCB3cml0ZXMgdGhlIGRhdGEKLSAgICAvLyBvZiBodG1sIHBhZ2UgZXZlbiBpZiBpdCBpcyBhIHJl
ZGlyZWN0IHRoYXQgd2FzIGhhbmRsZWQgaW50ZXJuYWxseQotICAgIC8vIGNhbiBiZSBvYnNlcnZl
ZCBlLmcuIG9uIGdtYWlsLmNvbQotICAgIGxvbmcgaHR0cENvZGUgPSAwOwotICAgIENVUkxjb2Rl
IGVyckNkID0gZC0+bV9jdXJsSGFuZGxlLmdldFJlc3BvbnNlQ29kZShodHRwQ29kZSk7Ci0gICAg
aWYgKENVUkxFX09LID09IGVyckNkICYmIGh0dHBDb2RlID49IDMwMCAmJiBodHRwQ29kZSA8IDQw
MCkKLSAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKLQotICAgIGlmICghZC0+bV9yZXNwb25zZS5y
ZXNwb25zZUZpcmVkKCkpIHsKLSAgICAgICAgaGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2Uoam9i
LCBkKTsKLSAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotCi0gICAgaWYgKGQtPm1fbXVsdGlwYXJ0SGFuZGxlKQotICAgICAgICBkLT5tX211
bHRpcGFydEhhbmRsZS0+Y29udGVudFJlY2VpdmVkKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihw
dHIpLCB0b3RhbFNpemUpOwotICAgIGVsc2UgaWYgKGQtPmNsaWVudCgpKSB7Ci0gICAgICAgIGQt
PmNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YShqb2IsIHB0ciwgdG90YWxTaXplLCAwKTsKLSAgICAg
ICAgQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRSZWNlaXZlRGF0YSgqam9iLCBw
dHIsIHRvdGFsU2l6ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvdGFsU2l6ZTsKLX0KLQogaW5s
aW5lIHN0YXRpYyBib29sIGlzSHR0cEluZm8oaW50IHN0YXR1c0NvZGUpCiB7CiAgICAgcmV0dXJu
IDEwMCA8PSBzdGF0dXNDb2RlICYmIHN0YXR1c0NvZGUgPCAyMDA7CkBAIC00MzksMTUyICs2ODYs
MTUxIEBAIHN0YXRpYyBib29sIGdldFByb3RlY3Rpb25TcGFjZShSZXNvdXJjZUhhbmRsZSogam9i
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8q
Ci0qIFRoaXMgaXMgYmVpbmcgY2FsbGVkIGZvciBlYWNoIEhUVFAgaGVhZGVyIGluIHRoZSByZXNw
b25zZS4gVGhpcyBpbmNsdWRlcyAnXHJcbicKLSogZm9yIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGhl
YWRlci4KLSoKLSogV2Ugd2lsbCBhZGQgZWFjaCBIVFRQIEhlYWRlciB0byB0aGUgUmVzb3VyY2VS
ZXNwb25zZSBhbmQgb24gdGhlIHRlcm1pbmF0aW9uCi0qIG9mIHRoZSBoZWFkZXIgKFxyXG4pIHdl
IHdpbGwgcGFyc2UgQ29udGVudC1UeXBlIGFuZCBDb250ZW50LURpc3Bvc2l0aW9uIGFuZAotKiB1
cGRhdGUgdGhlIFJlc291cmNlUmVzcG9uc2UgYW5kIHRoZW4gc2VuZCBpdCBhd2F5LgotKgotKi8K
LXN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6
ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQorc2l6ZV90IFJlc291cmNlSGFuZGxlOjp3aWxsUHJlcGFy
ZVNlbmREYXRhKGNoYXIqIHB0ciwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxv
Y2tzKQogewotICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhh
bmRsZSo+KGRhdGEpOwotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2ItPmdldElu
dGVybmFsKCk7Ci0gICAgaWYgKGQtPm1fY2FuY2VsbGVkKQorICAgIGlmICghZC0+bV9mb3JtRGF0
YVN0cmVhbS5oYXNNb3JlRWxlbWVudHMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAvLyBX
ZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gZGVmZXJyZWQgbG9hZGluZyBpcyBhY3RpdmF0
ZWQuCi0gICAgQVNTRVJUKCFkLT5tX2RlZmVyc0xvYWRpbmcpOworICAgIHNpemVfdCBzaXplID0g
ZC0+bV9mb3JtRGF0YVN0cmVhbS5yZWFkKHB0ciwgYmxvY2tTaXplLCBudW1iZXJPZkJsb2Nrcyk7
CiAKLSAgICBzaXplX3QgdG90YWxTaXplID0gc2l6ZSAqIG5tZW1iOwotICAgIFJlc291cmNlSGFu
ZGxlQ2xpZW50KiBjbGllbnQgPSBkLT5jbGllbnQoKTsKKyAgICAvLyBTb21ldGhpbmcgd2VudCB3
cm9uZyBzbyBjYW5jZWwgdGhlIGpvYi4KKyAgICBpZiAoIXNpemUpIHsKKyAgICAgICAgY2FuY2Vs
KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIFN0cmluZyBoZWFkZXIoc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7CisgICAgcmV0dXJuIHNpemU7CiAK
LSAgICAvKgotICAgICogYSkgV2UgY2FuIGZpbmlzaCBhbmQgc2VuZCB0aGUgUmVzb3VyY2VSZXNw
b25zZQotICAgICogYikgV2Ugd2lsbCBhZGQgdGhlIGN1cnJlbnQgaGVhZGVyIHRvIHRoZSBIVFRQ
SGVhZGVyTWFwIG9mIHRoZSBSZXNvdXJjZVJlc3BvbnNlCi0gICAgKgotICAgICogVGhlIEhUVFAg
c3RhbmRhcmQgcmVxdWlyZXMgdG8gdXNlIFxyXG4gYnV0IGZvciBjb21wYXRpYmlsaXR5IGl0IHJl
Y29tbWVuZHMgdG8KLSAgICAqIGFjY2VwdCBhbHNvIFxuLgotICAgICovCi0gICAgaWYgKGhlYWRl
ciA9PSBTdHJpbmcoIlxyXG4iKSB8fCBoZWFkZXIgPT0gU3RyaW5nKCJcbiIpKSB7Cit9CisKK3Zv
aWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVIZWFkZXJMaW5lKGNvbnN0IFN0cmluZyYgaGVh
ZGVyKQoreworICAgIGludCBzcGxpdFBvcyA9IGhlYWRlci5maW5kKCI6Iik7CisgICAgaWYgKHNw
bGl0UG9zICE9IG5vdEZvdW5kKSB7CisgICAgICAgIFN0cmluZyBrZXkgPSBoZWFkZXIubGVmdChz
cGxpdFBvcykuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IGhlYWRl
ci5zdWJzdHJpbmcoc3BsaXRQb3MgKyAxKS5zdHJpcFdoaXRlU3BhY2UoKTsKKworICAgICAgICBp
ZiAoaXNBcHBlbmRhYmxlSGVhZGVyKGtleSkpCisgICAgICAgICAgICBkLT5tX3Jlc3BvbnNlLmFk
ZEhUVFBIZWFkZXJGaWVsZChrZXksIHZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZC0+bV9yZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoa2V5LCB2YWx1ZSk7CisgICAgfSBlbHNl
IGlmIChoZWFkZXIuc3RhcnRzV2l0aCgiSFRUUCIsIGZhbHNlKSkgeworICAgICAgICAvLyBUaGlz
IGlzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSByZXNwb25zZS4KKyAgICAgICAgLy8gRXh0cmFjdCB0
aGUgaHR0cCBzdGF0dXMgdGV4dCBmcm9tIHRoaXMuCisgICAgICAgIC8vCisgICAgICAgIC8vIElm
IHRoZSBGT0xMT1dMT0NBVElPTiBvcHRpb24gaXMgZW5hYmxlZCBmb3IgdGhlIGN1cmwgaGFuZGxl
IHRoZW4KKyAgICAgICAgLy8gY3VybCB3aWxsIGZvbGxvdyB0aGUgcmVkaXJlY3Rpb25zIGludGVy
bmFsbHkuIFRodXMgdGhpcyBoZWFkZXIgY2FsbGJhY2sKKyAgICAgICAgLy8gd2lsbCBiZSBjYWxs
ZWQgbW9yZSB0aGFuIG9uZSB0aW1lIHdpdGggdGhlIGxpbmUgc3RhcnRpbmcgIkhUVFAiIGZvciBv
bmUgam9iLgogICAgICAgICBsb25nIGh0dHBDb2RlID0gMDsKICAgICAgICAgZC0+bV9jdXJsSGFu
ZGxlLmdldFJlc3BvbnNlQ29kZShodHRwQ29kZSk7CiAKLSAgICAgICAgaWYgKCFodHRwQ29kZSkg
ewotICAgICAgICAgICAgLy8gQ29tZXMgaGVyZSB3aGVuIHJlY2VpdmluZyAyMDAgQ29ubmVjdGlv
biBFc3RhYmxpc2hlZC4gSnVzdCByZXR1cm4uCi0gICAgICAgICAgICByZXR1cm4gdG90YWxTaXpl
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc0h0dHBJbmZvKGh0dHBDb2RlKSkgewotICAgICAg
ICAgICAgLy8gSnVzdCByZXR1cm4gd2hlbiByZWNlaXZpbmcgaHR0cCBpbmZvLCBlLmcuIEhUVFAv
MS4xIDEwMCBDb250aW51ZS4KLSAgICAgICAgICAgIC8vIElmIG5vdCwgdGhlIHJlcXVlc3QgbWln
aHQgYmUgY2FuY2VsbGVkLCBiZWNhdXNlIHRoZSBNSU1FIHR5cGUgd2lsbCBiZSBlbXB0eSBmb3Ig
dGhpcyByZXNwb25zZS4KLSAgICAgICAgICAgIHJldHVybiB0b3RhbFNpemU7CisgICAgICAgIFN0
cmluZyBodHRwQ29kZVN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGh0dHBDb2RlKTsKKyAgICAgICAg
aW50IHN0YXR1c0NvZGVQb3MgPSBoZWFkZXIuZmluZChodHRwQ29kZVN0cmluZyk7CisKKyAgICAg
ICAgaWYgKHN0YXR1c0NvZGVQb3MgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgIC8vIFRoZSBz
dGF0dXMgdGV4dCBpcyBhZnRlciB0aGUgc3RhdHVzIGNvZGUuCisgICAgICAgICAgICBTdHJpbmcg
c3RhdHVzID0gaGVhZGVyLnN1YnN0cmluZyhzdGF0dXNDb2RlUG9zICsgaHR0cENvZGVTdHJpbmcu
bGVuZ3RoKCkpOworICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChz
dGF0dXMuc3RyaXBXaGl0ZVNwYWNlKCkpOwogICAgICAgICB9CisgICAgfQorfQogCi0gICAgICAg
IGxvbmcgbG9uZyBjb250ZW50TGVuZ3RoID0gMDsKLSAgICAgICAgZC0+bV9jdXJsSGFuZGxlLmdl
dENvbnRlbnRMZW5naHREb3dubG9hZChjb250ZW50TGVuZ3RoKTsKLSAgICAgICAgZC0+bV9yZXNw
b25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoY29udGVudExlbmd0aCk7Cit2b2lkIFJlc291
cmNlSGFuZGxlOjpkaWRSZWNlaXZlQWxsSGVhZGVycyhsb25nIGh0dHBDb2RlLCBsb25nIGxvbmcg
Y29udGVudExlbmd0aCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgICAg
IGQtPm1fcmVzcG9uc2Uuc2V0VVJMKGQtPm1fY3VybEhhbmRsZS5nZXRFZmZlY3RpdmVVUkwoKSk7
CisgICAgZC0+bV9yZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoY29udGVudExlbmd0
aCk7CiAKLSAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShodHRwQ29kZSk7
Ci0gICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBlRnJvbU1l
ZGlhVHlwZShkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29u
dGVudFR5cGUpKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKLSAgICAgICAgZC0+bV9yZXNw
b25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShkLT5t
X3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpKSk7
CisgICAgZC0+bV9yZXNwb25zZS5zZXRVUkwoZC0+bV9jdXJsSGFuZGxlLmdldEVmZmVjdGl2ZVVS
TCgpKTsKIAotICAgICAgICBpZiAoZC0+bV9yZXNwb25zZS5pc011bHRpcGFydCgpKSB7Ci0gICAg
ICAgICAgICBTdHJpbmcgYm91bmRhcnk7Ci0gICAgICAgICAgICBib29sIHBhcnNlZCA9IE11bHRp
cGFydEhhbmRsZTo6ZXh0cmFjdEJvdW5kYXJ5KGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
KEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSksIGJvdW5kYXJ5KTsKLSAgICAgICAgICAgIGlm
IChwYXJzZWQpCi0gICAgICAgICAgICAgICAgZC0+bV9tdWx0aXBhcnRIYW5kbGUgPSBzdGQ6Om1h
a2VfdW5pcXVlPE11bHRpcGFydEhhbmRsZT4oam9iLCBib3VuZGFyeSk7Ci0gICAgICAgIH0KKyAg
ICBkLT5tX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBDb2RlKTsKKyAgICBkLT5tX3Jl
c3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoZC0+bV9yZXNw
b25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSkuY29udmVy
dFRvQVNDSUlMb3dlcmNhc2UoKSk7CisgICAgZC0+bV9yZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdO
YW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpKSk7CiAKLSAgICAgICAgLy8gSFRUUCBy
ZWRpcmVjdGlvbgotICAgICAgICBpZiAoaXNIdHRwUmVkaXJlY3QoaHR0cENvZGUpKSB7Ci0gICAg
ICAgICAgICBTdHJpbmcgbG9jYXRpb24gPSBkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChI
VFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pOwotICAgICAgICAgICAgaWYgKCFsb2NhdGlvbi5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgICAgICBVUkwgbmV3VVJMID0gVVJMKGpvYi0+Zmlyc3RSZXF1
ZXN0KCkudXJsKCksIGxvY2F0aW9uKTsKKyAgICBpZiAoZC0+bV9yZXNwb25zZS5pc011bHRpcGFy
dCgpKSB7CisgICAgICAgIFN0cmluZyBib3VuZGFyeTsKKyAgICAgICAgYm9vbCBwYXJzZWQgPSBN
dWx0aXBhcnRIYW5kbGU6OmV4dHJhY3RCb3VuZGFyeShkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpLCBib3VuZGFyeSk7CisgICAgICAgIGlm
IChwYXJzZWQpCisgICAgICAgICAgICBkLT5tX211bHRpcGFydEhhbmRsZSA9IHN0ZDo6bWFrZV91
bmlxdWU8TXVsdGlwYXJ0SGFuZGxlPih0aGlzLCBib3VuZGFyeSk7CisgICAgfQogCi0gICAgICAg
ICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlZGlyZWN0ZWRSZXF1ZXN0ID0gam9iLT5maXJzdFJl
cXVlc3QoKTsKLSAgICAgICAgICAgICAgICByZWRpcmVjdGVkUmVxdWVzdC5zZXRVUkwobmV3VVJM
KTsKLSAgICAgICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlID0gZC0+bV9yZXNw
b25zZTsKLSAgICAgICAgICAgICAgICBpZiAoY2xpZW50KQotICAgICAgICAgICAgICAgICAgICBj
bGllbnQtPndpbGxTZW5kUmVxdWVzdChqb2IsIFdURk1vdmUocmVkaXJlY3RlZFJlcXVlc3QpLCBX
VEZNb3ZlKHJlc3BvbnNlKSk7CisgICAgLy8gSFRUUCByZWRpcmVjdGlvbgorICAgIGlmIChpc0h0
dHBSZWRpcmVjdChodHRwQ29kZSkpIHsKKyAgICAgICAgU3RyaW5nIGxvY2F0aW9uID0gZC0+bV9y
ZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkxvY2F0aW9uKTsKKyAgICAg
ICAgaWYgKCFsb2NhdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFVSTCBuZXdVUkwgPSBV
UkwoZmlyc3RSZXF1ZXN0KCkudXJsKCksIGxvY2F0aW9uKTsKIAotICAgICAgICAgICAgICAgIGQt
Pm1fZmlyc3RSZXF1ZXN0LnNldFVSTChuZXdVUkwpOworICAgICAgICAgICAgUmVzb3VyY2VSZXF1
ZXN0IHJlZGlyZWN0ZWRSZXF1ZXN0ID0gZmlyc3RSZXF1ZXN0KCk7CisgICAgICAgICAgICByZWRp
cmVjdGVkUmVxdWVzdC5zZXRVUkwobmV3VVJMKTsKKyAgICAgICAgICAgIFJlc291cmNlUmVzcG9u
c2UgcmVzcG9uc2UgPSBkLT5tX3Jlc3BvbnNlOworICAgICAgICAgICAgaWYgKGNsaWVudCgpKQor
ICAgICAgICAgICAgICAgIGNsaWVudCgpLT53aWxsU2VuZFJlcXVlc3QodGhpcywgV1RGTW92ZShy
ZWRpcmVjdGVkUmVxdWVzdCksIFdURk1vdmUocmVzcG9uc2UpKTsKIAotICAgICAgICAgICAgICAg
IHJldHVybiB0b3RhbFNpemU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNI
dHRwQXV0aGVudGljYXRpb24oaHR0cENvZGUpKSB7Ci0gICAgICAgICAgICBQcm90ZWN0aW9uU3Bh
Y2UgcHJvdGVjdGlvblNwYWNlOwotICAgICAgICAgICAgaWYgKGdldFByb3RlY3Rpb25TcGFjZShq
b2IsIGQtPm1fcmVzcG9uc2UsIHByb3RlY3Rpb25TcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBD
cmVkZW50aWFsIGNyZWRlbnRpYWw7Ci0gICAgICAgICAgICAgICAgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UgY2hhbGxlbmdlKHByb3RlY3Rpb25TcGFjZSwgY3JlZGVudGlhbCwgZC0+bV9hdXRoRmFp
bHVyZUNvdW50LCBkLT5tX3Jlc3BvbnNlLCBSZXNvdXJjZUVycm9yKCkpOwotICAgICAgICAgICAg
ICAgIGNoYWxsZW5nZS5zZXRBdXRoZW50aWNhdGlvbkNsaWVudChqb2IpOwotICAgICAgICAgICAg
ICAgIGpvYi0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7Ci0g
ICAgICAgICAgICAgICAgZC0+bV9hdXRoRmFpbHVyZUNvdW50Kys7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRvdGFsU2l6ZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpcnN0UmVxdWVz
dCgpLnNldFVSTChuZXdVUkwpOworCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAg
ICB9IGVsc2UgaWYgKGlzSHR0cEF1dGhlbnRpY2F0aW9uKGh0dHBDb2RlKSkgeworICAgICAgICBQ
cm90ZWN0aW9uU3BhY2UgcHJvdGVjdGlvblNwYWNlOworICAgICAgICBpZiAoZ2V0UHJvdGVjdGlv
blNwYWNlKHRoaXMsIGQtPm1fcmVzcG9uc2UsIHByb3RlY3Rpb25TcGFjZSkpIHsKKyAgICAgICAg
ICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbDsKKyAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlIGNoYWxsZW5nZShwcm90ZWN0aW9uU3BhY2UsIGNyZWRlbnRpYWwsIGQtPm1fYXV0aEZh
aWx1cmVDb3VudCwgZC0+bV9yZXNwb25zZSwgUmVzb3VyY2VFcnJvcigpKTsKKyAgICAgICAgICAg
IGNoYWxsZW5nZS5zZXRBdXRoZW50aWNhdGlvbkNsaWVudCh0aGlzKTsKKyAgICAgICAgICAgIHRo
aXMtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVuZ2UpOworICAgICAg
ICAgICAgZC0+bV9hdXRoRmFpbHVyZUNvdW50Kys7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CiAKLSAgICAgICAgaWYgKGNsaWVudCkgewotICAgICAgICAgICAgaWYgKGlz
SHR0cE5vdE1vZGlmaWVkKGh0dHBDb2RlKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgdXJsID0gam9iLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5nZXRDYWNoZWRSZXNwb25z
ZSh1cmwsIGQtPm1fcmVzcG9uc2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkLT5tX2Fk
ZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycykgewotICAgICAgICAgICAgICAgICAgICAgICAgZC0+
bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSgyMDApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dCgiT0siKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQorICAgIGlmIChjbGllbnQoKSkgeworICAgICAgICBpZiAoaXNIdHRwTm90TW9kaWZp
ZWQoaHR0cENvZGUpKSB7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVybCA9IGZpcnN0UmVx
dWVzdCgpLnVybCgpLnN0cmluZygpOworICAgICAgICAgICAgaWYgKEN1cmxDYWNoZU1hbmFnZXI6
OmdldEluc3RhbmNlKCkuZ2V0Q2FjaGVkUmVzcG9uc2UodXJsLCBkLT5tX3Jlc3BvbnNlKSkgewor
ICAgICAgICAgICAgICAgIGlmIChkLT5tX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycykgewor
ICAgICAgICAgICAgICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKDIwMCk7
CisgICAgICAgICAgICAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQoIk9L
Iik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2xpZW50
LT5kaWRSZWNlaXZlUmVzcG9uc2Uoam9iLCBSZXNvdXJjZVJlc3BvbnNlKGQtPm1fcmVzcG9uc2Up
KTsKLSAgICAgICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZGlkUmVjZWl2
ZVJlc3BvbnNlKCpqb2IsIGQtPm1fcmVzcG9uc2UpOwogICAgICAgICB9Ci0gICAgICAgIGQtPm1f
cmVzcG9uc2Uuc2V0UmVzcG9uc2VGaXJlZCh0cnVlKTsKKyAgICAgICAgY2xpZW50KCktPmRpZFJl
Y2VpdmVSZXNwb25zZSh0aGlzLCBSZXNvdXJjZVJlc3BvbnNlKGQtPm1fcmVzcG9uc2UpKTsKKyAg
ICAgICAgQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRSZWNlaXZlUmVzcG9uc2Uo
KnRoaXMsIGQtPm1fcmVzcG9uc2UpOworICAgIH0KIAotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlu
dCBzcGxpdFBvcyA9IGhlYWRlci5maW5kKCI6Iik7Ci0gICAgICAgIGlmIChzcGxpdFBvcyAhPSAt
MSkgewotICAgICAgICAgICAgU3RyaW5nIGtleSA9IGhlYWRlci5sZWZ0KHNwbGl0UG9zKS5zdHJp
cFdoaXRlU3BhY2UoKTsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGhlYWRlci5zdWJzdHJp
bmcoc3BsaXRQb3MgKyAxKS5zdHJpcFdoaXRlU3BhY2UoKTsKLQotICAgICAgICAgICAgaWYgKGlz
QXBwZW5kYWJsZUhlYWRlcihrZXkpKQotICAgICAgICAgICAgICAgIGQtPm1fcmVzcG9uc2UuYWRk
SFRUUEhlYWRlckZpZWxkKGtleSwgdmFsdWUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGtleSwgdmFsdWUpOwotICAg
ICAgICB9IGVsc2UgaWYgKGhlYWRlci5zdGFydHNXaXRoKCJIVFRQIiwgZmFsc2UpKSB7Ci0gICAg
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSByZXNwb25zZS4KLSAgICAg
ICAgICAgIC8vIEV4dHJhY3QgdGhlIGh0dHAgc3RhdHVzIHRleHQgZnJvbSB0aGlzLgotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIC8vIElmIHRoZSBGT0xMT1dMT0NBVElPTiBvcHRpb24gaXMg
ZW5hYmxlZCBmb3IgdGhlIGN1cmwgaGFuZGxlIHRoZW4KLSAgICAgICAgICAgIC8vIGN1cmwgd2ls
bCBmb2xsb3cgdGhlIHJlZGlyZWN0aW9ucyBpbnRlcm5hbGx5LiBUaHVzIHRoaXMgaGVhZGVyIGNh
bGxiYWNrCi0gICAgICAgICAgICAvLyB3aWxsIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25lIHRpbWUg
d2l0aCB0aGUgbGluZSBzdGFydGluZyAiSFRUUCIgZm9yIG9uZSBqb2IuCi0gICAgICAgICAgICBs
b25nIGh0dHBDb2RlID0gMDsKLSAgICAgICAgICAgIGQtPm1fY3VybEhhbmRsZS5nZXRSZXNwb25z
ZUNvZGUoaHR0cENvZGUpOwotCi0gICAgICAgICAgICBTdHJpbmcgaHR0cENvZGVTdHJpbmcgPSBT
dHJpbmc6Om51bWJlcihodHRwQ29kZSk7Ci0gICAgICAgICAgICBpbnQgc3RhdHVzQ29kZVBvcyA9
IGhlYWRlci5maW5kKGh0dHBDb2RlU3RyaW5nKTsKLQotICAgICAgICAgICAgaWYgKHN0YXR1c0Nv
ZGVQb3MgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgc3RhdHVzIHRleHQgaXMgYWZ0
ZXIgdGhlIHN0YXR1cyBjb2RlLgotICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBoZWFk
ZXIuc3Vic3RyaW5nKHN0YXR1c0NvZGVQb3MgKyBodHRwQ29kZVN0cmluZy5sZW5ndGgoKSk7Ci0g
ICAgICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChzdGF0dXMuc3Ry
aXBXaGl0ZVNwYWNlKCkpOwotICAgICAgICAgICAgfQorICAgIGQtPm1fcmVzcG9uc2Uuc2V0UmVz
cG9uc2VGaXJlZCh0cnVlKTsKK30KIAotICAgICAgICB9Cit2b2lkIFJlc291cmNlSGFuZGxlOjpk
aWRSZWNlaXZlQ29udGVudERhdGEoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
KyAgICBpZiAoIWQtPm1fcmVzcG9uc2UucmVzcG9uc2VGaXJlZCgpKQorICAgICAgICBoYW5kbGVM
b2NhbFJlY2VpdmVSZXNwb25zZSgpOworCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICB7
CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyIHsgbV9yZWNlaXZlZEJ1ZmZlck11dGV4IH07Cisg
ICAgICAgIGJ1ZmZlciA9IFdURk1vdmUobV9yZWNlaXZlZEJ1ZmZlcik7CiAgICAgfQogCi0gICAg
cmV0dXJuIHRvdGFsU2l6ZTsKKyAgICBjaGFyKiBwdHIgPSBidWZmZXIuYmVnaW4oKTsKKyAgICBz
aXplX3Qgc2l6ZSA9IGJ1ZmZlci5zaXplKCk7CisKKyAgICBpZiAoZC0+bV9tdWx0aXBhcnRIYW5k
bGUpCisgICAgICAgIGQtPm1fbXVsdGlwYXJ0SGFuZGxlLT5jb250ZW50UmVjZWl2ZWQoc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KHB0ciksIHNpemUpOworICAgIGVsc2UgaWYgKGNsaWVudCgpKSB7
CisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBwdHIsIHNpemUsIDApOwor
ICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZFJlY2VpdmVEYXRhKCp0
aGlzLCBwdHIsIHNpemUpOworICAgIH0KIH0KIAogLyogVGhpcyBpcyBjYWxsZWQgdG8gb2J0YWlu
IEhUVFAgUE9TVCBvciBQVVQgZGF0YS4KIEl0ZXJhdGUgdGhyb3VnaCBGb3JtRGF0YSBlbGVtZW50
cyBhbmQgdXBsb2FkIGZpbGVzLgogQ2FyZWZ1bGx5IHJlc3BlY3QgdGhlIGdpdmVuIGJ1ZmZlciBz
aXplIGFuZCBmaWxsIHRoZSByZXN0IG9mIHRoZSBkYXRhIGF0IHRoZSBuZXh0IGNhbGxzLgogKi8K
LXNpemVfdCByZWFkQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1i
LCB2b2lkKiBkYXRhKQorc2l6ZV90IFJlc291cmNlSGFuZGxlOjpyZWFkQ2FsbGJhY2soY2hhciog
cHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQogeworICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOworCiAgICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9IHN0YXRpY19j
YXN0PFJlc291cmNlSGFuZGxlKj4oZGF0YSk7CiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCog
ZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKIApAQCAtNTk3LDEwOSArODQzLDE1NiBAQCBzaXplX3Qg
cmVhZENhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCog
ZGF0YSkKICAgICBpZiAoIXNpemUgfHwgIW5tZW1iKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IGlmICghZC0+bV9mb3JtRGF0YVN0cmVhbS5oYXNNb3JlRWxlbWVudHMoKSkKKyAgICByZXR1cm4g
am9iLT53aWxsUHJlcGFyZVNlbmREYXRhKHB0ciwgc2l6ZSwgbm1lbWIpOworfQorCisvKgorKiBU
aGlzIGlzIGJlaW5nIGNhbGxlZCBmb3IgZWFjaCBIVFRQIGhlYWRlciBpbiB0aGUgcmVzcG9uc2Uu
IFRoaXMgaW5jbHVkZXMgJ1xyXG4nCisqIGZvciB0aGUgbGFzdCBsaW5lIG9mIHRoZSBoZWFkZXIu
CisqCisqIFdlIHdpbGwgYWRkIGVhY2ggSFRUUCBIZWFkZXIgdG8gdGhlIFJlc291cmNlUmVzcG9u
c2UgYW5kIG9uIHRoZSB0ZXJtaW5hdGlvbgorKiBvZiB0aGUgaGVhZGVyIChcclxuKSB3ZSB3aWxs
IHBhcnNlIENvbnRlbnQtVHlwZSBhbmQgQ29udGVudC1EaXNwb3NpdGlvbiBhbmQKKyogdXBkYXRl
IHRoZSBSZXNvdXJjZVJlc3BvbnNlIGFuZCB0aGVuIHNlbmQgaXQgYXdheS4KKyoKKyovCitzaXpl
X3QgUmVzb3VyY2VIYW5kbGU6OmhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUs
IHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKKworICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRs
ZSo+KGRhdGEpOworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVy
bmFsKCk7CisgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHNpemVfdCBzZW50ID0gZC0+bV9mb3JtRGF0YVN0cmVhbS5yZWFkKHB0ciwgc2l6ZSwgbm1lbWIp
OworICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiBkZWZlcnJlZCBsb2FkaW5n
IGlzIGFjdGl2YXRlZC4KKyAgICBBU1NFUlQoIWQtPm1fZGVmZXJzTG9hZGluZyk7CiAKLSAgICAv
LyBTb21ldGhpbmcgd2VudCB3cm9uZyBzbyBjYW5jZWwgdGhlIGpvYi4KLSAgICBpZiAoIXNlbnQp
Ci0gICAgICAgIGpvYi0+Y2FuY2VsKCk7CisgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IHNpemUgKiBu
bWVtYjsKIAotICAgIHJldHVybiBzZW50OwotfQorICAgIFN0cmluZyBoZWFkZXIoc3RhdGljX2Nh
c3Q8Y29uc3QgY2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7CiAKLXN0YXRpYyBpbmxpbmUgc2l6ZV90
IGdldEZvcm1FbGVtZW50c0NvdW50KFJlc291cmNlSGFuZGxlKiBqb2IpCi17Ci0gICAgUmVmUHRy
PEZvcm1EYXRhPiBmb3JtRGF0YSA9IGpvYi0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEJvZHkoKTsKKyAg
ICAvKgorICAgICogYSkgV2UgY2FuIGZpbmlzaCBhbmQgc2VuZCB0aGUgUmVzb3VyY2VSZXNwb25z
ZQorICAgICogYikgV2Ugd2lsbCBhZGQgdGhlIGN1cnJlbnQgaGVhZGVyIHRvIHRoZSBIVFRQSGVh
ZGVyTWFwIG9mIHRoZSBSZXNvdXJjZVJlc3BvbnNlCisgICAgKgorICAgICogVGhlIEhUVFAgc3Rh
bmRhcmQgcmVxdWlyZXMgdG8gdXNlIFxyXG4gYnV0IGZvciBjb21wYXRpYmlsaXR5IGl0IHJlY29t
bWVuZHMgdG8KKyAgICAqIGFjY2VwdCBhbHNvIFxuLgorICAgICovCisgICAgaWYgKGhlYWRlciA9
PSBBdG9taWNTdHJpbmcoIlxyXG4iKSB8fCBoZWFkZXIgPT0gQXRvbWljU3RyaW5nKCJcbiIpKSB7
CisgICAgICAgIGxvbmcgaHR0cENvZGUgPSAwOworICAgICAgICBkLT5tX2N1cmxIYW5kbGUuZ2V0
UmVzcG9uc2VDb2RlKGh0dHBDb2RlKTsKIAotICAgIGlmICghZm9ybURhdGEpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICBpZiAoIWh0dHBDb2RlKSB7CisgICAgICAgICAgICAvLyBDb21lcyBo
ZXJlIHdoZW4gcmVjZWl2aW5nIDIwMCBDb25uZWN0aW9uIEVzdGFibGlzaGVkLiBKdXN0IHJldHVy
bi4KKyAgICAgICAgICAgIHJldHVybiB0b3RhbFNpemU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGlzSHR0cEluZm8oaHR0cENvZGUpKSB7CisgICAgICAgICAgICAvLyBKdXN0IHJldHVybiB3aGVu
IHJlY2VpdmluZyBodHRwIGluZm8sIGUuZy4gSFRUUC8xLjEgMTAwIENvbnRpbnVlLgorICAgICAg
ICAgICAgLy8gSWYgbm90LCB0aGUgcmVxdWVzdCBtaWdodCBiZSBjYW5jZWxsZWQsIGJlY2F1c2Ug
dGhlIE1JTUUgdHlwZSB3aWxsIGJlIGVtcHR5IGZvciB0aGlzIHJlc3BvbnNlLgorICAgICAgICAg
ICAgcmV0dXJuIHRvdGFsU2l6ZTsKKyAgICAgICAgfQogCi0gICAgLy8gUmVzb2x2ZSB0aGUgYmxv
YiBlbGVtZW50cyBzbyB0aGUgZm9ybURhdGEgY2FuIGNvcnJlY3RseSByZXBvcnQgaXQncyBzaXpl
LgotICAgIGZvcm1EYXRhID0gZm9ybURhdGEtPnJlc29sdmVCbG9iUmVmZXJlbmNlcygpOwotICAg
IHNpemVfdCBzaXplID0gZm9ybURhdGEtPmVsZW1lbnRzKCkuc2l6ZSgpOwotICAgIGpvYi0+Zmly
c3RSZXF1ZXN0KCkuc2V0SFRUUEJvZHkoV1RGTW92ZShmb3JtRGF0YSkpOworICAgICAgICBsb25n
IGxvbmcgY29udGVudExlbmd0aCA9IDA7CisgICAgICAgIGQtPm1fY3VybEhhbmRsZS5nZXRDb250
ZW50TGVuZ2h0RG93bmxvYWQoY29udGVudExlbmd0aCk7CiAKLSAgICByZXR1cm4gc2l6ZTsKKyAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChbam9iLCBodHRwQ29kZSwgY29udGVudExlbmd0aF0gewor
ICAgICAgICAgICAgam9iLT5kaWRSZWNlaXZlQWxsSGVhZGVycyhodHRwQ29kZSwgY29udGVudExl
bmd0aCk7CisgICAgICAgIH0pOworICAgIH0gZWxzZQorICAgICAgICBqb2ItPmRpZFJlY2VpdmVI
ZWFkZXJMaW5lKGhlYWRlcik7CisKKyAgICByZXR1cm4gdG90YWxTaXplOwogfQogCi1zdGF0aWMg
dm9pZCBzZXR1cEZvcm1EYXRhKFJlc291cmNlSGFuZGxlKiBqb2IsIGJvb2wgaXNQb3N0UmVxdWVz
dCkKKy8vIGNhbGxlZCB3aXRoIGRhdGEgYWZ0ZXIgYWxsIGhlYWRlcnMgaGF2ZSBiZWVuIHByb2Nl
c3NlZCB2aWEgaGVhZGVyQ2FsbGJhY2sKK3NpemVfdCBSZXNvdXJjZUhhbmRsZTo6d3JpdGVDYWxs
YmFjayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCiB7
Ci0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAg
ICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiBlbGVtZW50cyA9IGpvYi0+Zmlyc3RSZXF1ZXN0KCku
aHR0cEJvZHkoKS0+ZWxlbWVudHMoKTsKLSAgICBzaXplX3QgbnVtRWxlbWVudHMgPSBlbGVtZW50
cy5zaXplKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgbG9uZyBsb25nIG1heEN1cmxPZmZUID0gZC0+
bV9jdXJsSGFuZGxlLm1heEN1cmxPZmZUKCk7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
CiAKLSAgICAvLyBPYnRhaW4gdGhlIHRvdGFsIHNpemUgb2YgdGhlIGZvcm0gZGF0YQotICAgIGN1
cmxfb2ZmX3Qgc2l6ZSA9IDA7Ci0gICAgYm9vbCBjaHVua2VkVHJhbnNmZXIgPSBmYWxzZTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHsKLSAgICAgICAgRm9y
bURhdGFFbGVtZW50IGVsZW1lbnQgPSBlbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGVsZW1lbnQu
bV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2RlZEZpbGUpIHsKLSAgICAgICAg
ICAgIGxvbmcgbG9uZyBmaWxlU2l6ZVJlc3VsdDsKLSAgICAgICAgICAgIGlmIChnZXRGaWxlU2l6
ZShlbGVtZW50Lm1fZmlsZW5hbWUsIGZpbGVTaXplUmVzdWx0KSkgewotICAgICAgICAgICAgICAg
IGlmIChmaWxlU2l6ZVJlc3VsdCA+IG1heEN1cmxPZmZUKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIEZpbGUgc2l6ZSBpcyB0b28gYmlnIGZvciBzcGVjaWZ5aW5nIGl0IHRvIGNVUkwKLSAgICAg
ICAgICAgICAgICAgICAgY2h1bmtlZFRyYW5zZmVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNpemUgKz0gZmls
ZVNpemVSZXN1bHQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNodW5r
ZWRUcmFuc2ZlciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc2l6ZSArPSBlbGVtZW50c1tpXS5tX2RhdGEu
c2l6ZSgpOworICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhh
bmRsZSo+KGRhdGEpOworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2ItPmdldElu
dGVybmFsKCk7CisgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiBkZWZlcnJlZCBsb2FkaW5nIGlz
IGFjdGl2YXRlZC4KKyAgICBBU1NFUlQoIWQtPm1fZGVmZXJzTG9hZGluZyk7CisKKyAgICBzaXpl
X3QgdG90YWxTaXplID0gc2l6ZSAqIG5tZW1iOworCisgICAgLy8gdGhpcyBzaG91bGRuJ3QgYmUg
bmVjZXNzYXJ5IGJ1dCBhcHBhcmVudGx5IGlzLiBDVVJMIHdyaXRlcyB0aGUgZGF0YQorICAgIC8v
IG9mIGh0bWwgcGFnZSBldmVuIGlmIGl0IGlzIGEgcmVkaXJlY3QgdGhhdCB3YXMgaGFuZGxlZCBp
bnRlcm5hbGx5CisgICAgLy8gY2FuIGJlIG9ic2VydmVkIGUuZy4gb24gZ21haWwuY29tCisgICAg
bG9uZyBodHRwQ29kZSA9IDA7CisgICAgQ1VSTGNvZGUgZXJyQ2QgPSBkLT5tX2N1cmxIYW5kbGUu
Z2V0UmVzcG9uc2VDb2RlKGh0dHBDb2RlKTsKKyAgICBpZiAoQ1VSTEVfT0sgPT0gZXJyQ2QgJiYg
aHR0cENvZGUgPj0gMzAwICYmIGh0dHBDb2RlIDwgNDAwKQorICAgICAgICByZXR1cm4gdG90YWxT
aXplOworCisgICAgYm9vbCBzaG91bGRDYWxsIHsgZmFsc2UgfTsKKyAgICB7CisgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKGpvYi0+bV9yZWNlaXZlZEJ1ZmZlck11dGV4KTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChqb2ItPm1fcmVjZWl2ZWRCdWZmZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAg
c2hvdWxkQ2FsbCA9IHRydWU7CisgICAgICAgIAorICAgICAgICBqb2ItPm1fcmVjZWl2ZWRCdWZm
ZXIuYXBwZW5kKHB0ciwgdG90YWxTaXplKTsKICAgICB9CiAKLSAgICAvLyBjVVJMIGd1ZXNzZXMg
dGhhdCB3ZSB3YW50IGNodW5rZWQgZW5jb2RpbmcgYXMgbG9uZyBhcyB3ZSBzcGVjaWZ5IHRoZSBo
ZWFkZXIKLSAgICBpZiAoY2h1bmtlZFRyYW5zZmVyKQotICAgICAgICBkLT5tX2N1cmxIYW5kbGUu
YXBwZW5kUmVxdWVzdEhlYWRlcigiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgaWYgKGlzUG9zdFJlcXVlc3QpCi0gICAgICAgICAgICBkLT5tX2N1cmxI
YW5kbGUuc2V0UG9zdEZpZWxkTGFyZ2Uoc2l6ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGQtPm1fY3VybEhhbmRsZS5zZXRJbkZpbGVTaXplTGFyZ2Uoc2l6ZSk7CisgICAgaWYgKHNob3Vs
ZENhbGwpIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbam9iXSB7CisgICAgICAgICAgICBq
b2ItPmRpZFJlY2VpdmVDb250ZW50RGF0YSgpOworICAgICAgICB9KTsKICAgICB9CiAKLSAgICBk
LT5tX2N1cmxIYW5kbGUuc2V0UmVhZENhbGxiYWNrRnVuY3Rpb24ocmVhZENhbGxiYWNrLCBqb2Ip
OworICAgIHJldHVybiB0b3RhbFNpemU7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldHVw
UFVUKCkKKy8vIHN5bmMgbG9hZGVyCisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJv
ciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEp
CiB7Ci0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGdldEludGVybmFsKCk7Ci0gICAg
ZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBQdXRSZXF1ZXN0KCk7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKIAotICAgIC8vIERpc2FibGUgdGhlIEV4cGVjdDogMTAwIGNvbnRpbnVlIGhl
YWRlcgotICAgIGQtPm1fY3VybEhhbmRsZS5hcHBlbmRSZXF1ZXN0SGVhZGVyKCJFeHBlY3Q6Iik7
CisgICAgU3luY2hyb25vdXNMb2FkZXJDbGllbnQgY2xpZW50OworICAgIFJlZlB0cjxSZXNvdXJj
ZUhhbmRsZT4gaGFuZGxlID0gYWRvcHRSZWYobmV3IFJlc291cmNlSGFuZGxlKGNvbnRleHQsIHJl
cXVlc3QsICZjbGllbnQsIGZhbHNlLCBmYWxzZSkpOwogCi0gICAgc2l6ZV90IG51bUVsZW1lbnRz
ID0gZ2V0Rm9ybUVsZW1lbnRzQ291bnQodGhpcyk7Ci0gICAgaWYgKCFudW1FbGVtZW50cykKLSAg
ICAgICAgcmV0dXJuOworICAgIGhhbmRsZS5nZXQoKS0+ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigp
OwogCi0gICAgc2V0dXBGb3JtRGF0YSh0aGlzLCBmYWxzZSk7CisgICAgZXJyb3IgPSBjbGllbnQu
ZXJyb3IoKTsKKyAgICBkYXRhLnN3YXAoY2xpZW50Lm11dGFibGVEYXRhKCkpOworICAgIHJlc3Bv
bnNlID0gY2xpZW50LnJlc3BvbnNlKCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldHVw
UE9TVCgpCit2b2lkIFJlc291cmNlSGFuZGxlOjpkaXNwYXRjaFN5bmNocm9ub3VzSm9iKCkKIHsK
LSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gZ2V0SW50ZXJuYWwoKTsKLSAgICBkLT5t
X2N1cmxIYW5kbGUuZW5hYmxlSHR0cFBvc3RSZXF1ZXN0KCk7Ci0KLSAgICBzaXplX3QgbnVtRWxl
bWVudHMgPSBnZXRGb3JtRWxlbWVudHNDb3VudCh0aGlzKTsKLSAgICBpZiAoIW51bUVsZW1lbnRz
KQotICAgICAgICByZXR1cm47CisgICAgVVJMIGt1cmwgPSBmaXJzdFJlcXVlc3QoKS51cmwoKTsK
IAotICAgIC8vIERvIG5vdCBzdHJlYW0gZm9yIHNpbXBsZSBQT1NUIGRhdGEKLSAgICBpZiAobnVt
RWxlbWVudHMgPT0gMSkgewotICAgICAgICBmaXJzdFJlcXVlc3QoKS5odHRwQm9keSgpLT5mbGF0
dGVuKGQtPm1fcG9zdEJ5dGVzKTsKLSAgICAgICAgaWYgKGQtPm1fcG9zdEJ5dGVzLnNpemUoKSkK
LSAgICAgICAgICAgIGQtPm1fY3VybEhhbmRsZS5zZXRQb3N0RmllbGRzKGQtPm1fcG9zdEJ5dGVz
LmRhdGEoKSwgZC0+bV9wb3N0Qnl0ZXMuc2l6ZSgpKTsKKyAgICBpZiAoa3VybC5wcm90b2NvbElz
RGF0YSgpKSB7CisgICAgICAgIGhhbmRsZURhdGFVUkwoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIHNldHVwRm9ybURhdGEodGhpcywgdHJ1ZSk7CisgICAgUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbCogZCA9IGdldEludGVybmFsKCk7CisKKyAgICAvLyBJZiBkZWZlcnNMb2FkaW5nIGlz
IHRydWUgYW5kIHdlIGNhbGwgY3VybF9lYXN5X3BlcmZvcm0KKyAgICAvLyBvbiBhIHBhdXNlZCBo
YW5kbGUsIGxpYmNVUkwgd291bGQgZG8gdGhlIHRyYW5zZmVydCBhbnl3YXkKKyAgICAvLyBhbmQg
d2Ugd291bGQgYXNzZXJ0IHNvIGZvcmNlIGRlZmVyc0xvYWRpbmcgdG8gYmUgZmFsc2UuCisgICAg
ZC0+bV9kZWZlcnNMb2FkaW5nID0gZmFsc2U7CisKKyAgICBpbml0aWFsaXplKCk7CisKKyAgICAv
LyBjdXJsX2Vhc3lfcGVyZm9ybSBibG9ja3MgdW50aWwgdGhlIHRyYW5zZmVydCBpcyBmaW5pc2hl
ZC4KKyAgICBDVVJMY29kZSByZXQgPSBkLT5tX2N1cmxIYW5kbGUucGVyZm9ybSgpOworCisjaWYg
RU5BQkxFKFdFQl9USU1JTkcpCisgICAgY2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25zKCk7
CisjZW5kaWYKKworICAgIGlmIChjbGllbnQoKSkgeworICAgICAgICBpZiAocmV0ICE9IENVUkxF
X09LKQorICAgICAgICAgICAgY2xpZW50KCktPmRpZEZhaWwodGhpcywgUmVzb3VyY2VFcnJvcihk
LT5tX2N1cmxIYW5kbGUsIGQtPm1fc3NsRXJyb3JzKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywgUmVzb3VyY2VSZXNwb25zZShk
LT5tX3Jlc3BvbnNlKSk7CisgICAgfQogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpoYW5kbGVE
YXRhVVJMKCkKQEAgLTc2MywyMTggKzEwNTYsNiBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpoYW5k
bGVEYXRhVVJMKCkKICAgICAgICAgY2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcodGhpcyk7CiB9
CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpc3BhdGNoU3luY2hyb25vdXNKb2IoKQotewotICAg
IFVSTCBrdXJsID0gZmlyc3RSZXF1ZXN0KCkudXJsKCk7Ci0KLSAgICBpZiAoa3VybC5wcm90b2Nv
bElzRGF0YSgpKSB7Ci0gICAgICAgIGhhbmRsZURhdGFVUkwoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBnZXRJbnRlcm5hbCgpOwot
Ci0gICAgLy8gSWYgZGVmZXJzTG9hZGluZyBpcyB0cnVlIGFuZCB3ZSBjYWxsIGN1cmxfZWFzeV9w
ZXJmb3JtCi0gICAgLy8gb24gYSBwYXVzZWQgaGFuZGxlLCBsaWJjVVJMIHdvdWxkIGRvIHRoZSB0
cmFuc2ZlcnQgYW55d2F5Ci0gICAgLy8gYW5kIHdlIHdvdWxkIGFzc2VydCBzbyBmb3JjZSBkZWZl
cnNMb2FkaW5nIHRvIGJlIGZhbHNlLgotICAgIGQtPm1fZGVmZXJzTG9hZGluZyA9IGZhbHNlOwot
Ci0gICAgaW5pdGlhbGl6ZSgpOwotCi0gICAgLy8gY3VybF9lYXN5X3BlcmZvcm0gYmxvY2tzIHVu
dGlsIHRoZSB0cmFuc2ZlcnQgaXMgZmluaXNoZWQuCi0gICAgQ1VSTGNvZGUgcmV0ID0gZC0+bV9j
dXJsSGFuZGxlLnBlcmZvcm0oKTsKLQotICAgIGlmIChyZXQgIT0gQ1VSTEVfT0spIHsKLSAgICAg
ICAgUmVzb3VyY2VFcnJvciBlcnJvcihBU0NJSUxpdGVyYWwoZXJyb3JEb21haW5DdXJsKSwgcmV0
LCBrdXJsLCBTdHJpbmcoY3VybF9lYXN5X3N0cmVycm9yKHJldCkpKTsKLSAgICAgICAgZXJyb3Iu
c2V0U1NMRXJyb3JzKGQtPm1fc3NsRXJyb3JzKTsKLSAgICAgICAgZC0+Y2xpZW50KCktPmRpZEZh
aWwodGhpcywgZXJyb3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChkLT5jbGllbnQoKSkK
LSAgICAgICAgICAgIGQtPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywgUmVzb3Vy
Y2VSZXNwb25zZShkLT5tX3Jlc3BvbnNlKSk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKFdFQl9USU1J
TkcpCi0gICAgY2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25zKGQpOwotI2VuZGlmCi19Ci0K
LXZvaWQgUmVzb3VyY2VIYW5kbGU6OmFwcGx5QXV0aGVudGljYXRpb24oKQotewotICAgIFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCA9IGZpcnN0UmVxdWVzdCgpOwotICAgIC8vIG1fdXNlci9tX3Bh
c3MgYXJlIGNyZWRlbnRpYWxzIGdpdmVuIG1hbnVhbGx5LCBmb3IgaW5zdGFuY2UsIGJ5IHRoZSBh
cmd1bWVudHMgcGFzc2VkIHRvIFhNTEh0dHBSZXF1ZXN0Lm9wZW4oKS4KLSAgICBSZXNvdXJjZUhh
bmRsZUludGVybmFsKiBkID0gZ2V0SW50ZXJuYWwoKTsKLQotICAgIFN0cmluZyBwYXJ0aXRpb24g
PSByZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCk7Ci0KLSAgICBpZiAoc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UoKSkgewotICAgICAgICBpZiAoZC0+bV91c2VyLmlzRW1wdHkoKSAmJiBkLT5tX3Bh
c3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4g
LSBGb3IgVVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxs
ZW5nZWQgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24sIAotICAgICAgICAgICAgLy8gdHJ5
IGFuZCByZXVzZSB0aGUgY3JlZGVudGlhbCBwcmVlbXB0aXZlbHksIGFzIGFsbG93ZWQgYnkgUkZD
IDI2MTcuCi0gICAgICAgICAgICBkLT5tX2luaXRpYWxDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0
b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLmdldChwYXJ0aXRpb24sIHJlcXVlc3Qu
dXJsKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxy
ZWFkeSBhIHByb3RlY3Rpb24gc3BhY2Uga25vd24gZm9yIHRoZSBVUkwsIHVwZGF0ZSBzdG9yZWQg
Y3JlZGVudGlhbHMKLSAgICAgICAgICAgIC8vIGJlZm9yZSBzZW5kaW5nIGEgcmVxdWVzdC4gVGhp
cyBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgbG9nb3V0IGJ5IHNlbmRpbmcgYW4KLSAg
ICAgICAgICAgIC8vIFhNTEh0dHBSZXF1ZXN0IHdpdGgga25vd24gaW5jb3JyZWN0IGNyZWRlbnRp
YWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1tZWRpYXRlbHkgKHNvIHRoYXQKLSAgICAgICAgICAgIC8v
IGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBkb2Vzbid0IHBvcCB1cCkuCi0gICAgICAgICAgICBD
cmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRpdGlv
biwgQ3JlZGVudGlhbChkLT5tX3VzZXIsIGQtPm1fcGFzcywgQ3JlZGVudGlhbFBlcnNpc3RlbmNl
Tm9uZSksIHJlcXVlc3QudXJsKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU3RyaW5nIHVz
ZXIgPSBkLT5tX3VzZXI7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gZC0+bV9wYXNzOwotCi0gICAg
aWYgKCFkLT5tX2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSkgewotICAgICAgICB1c2VyID0g
ZC0+bV9pbml0aWFsQ3JlZGVudGlhbC51c2VyKCk7Ci0gICAgICAgIHBhc3N3b3JkID0gZC0+bV9p
bml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgpOwotICAgICAgICBkLT5tX2N1cmxIYW5kbGUuZW5h
YmxlSHR0cEF1dGhlbnRpY2F0aW9uKENVUkxBVVRIX0JBU0lDKTsKLSAgICB9Ci0KLSAgICAvLyBJ
dCBzZWVtcyB3ZSBuZWVkIHRvIHNldCBDVVJMT1BUX1VTRVJQV0QgZXZlbiBpZiB1c2VybmFtZSBh
bmQgcGFzc3dvcmQgaXMgZW1wdHkuCi0gICAgLy8gT3RoZXJ3aXNlIGNVUkwgd2lsbCBub3QgYXV0
b21hdGljYWxseSBjb250aW51ZSB3aXRoIGEgbmV3IHJlcXVlc3QgYWZ0ZXIgYSA0MDEgcmVzcG9u
c2UuCi0KLSAgICAvLyBjdXJsIENVUkxPUFRfVVNFUlBXRCBleHBlY3RzIHVzZXJuYW1lOnBhc3N3
b3JkCi0gICAgZC0+bV9jdXJsSGFuZGxlLnNldEh0dHBBdXRoVXNlclBhc3ModXNlciwgcGFzc3dv
cmQpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlOjppbml0aWFsaXplKCkKLXsKLSAgICBDdXJs
Q29udGV4dCYgY29udGV4dCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKTsKLQotICAgIFVSTCB1
cmwgPSBmaXJzdFJlcXVlc3QoKS51cmwoKTsKLQotICAgIC8vIFJlbW92ZSBhbnkgZnJhZ21lbnQg
cGFydCwgb3RoZXJ3aXNlIGN1cmwgd2lsbCBzZW5kIGl0IGFzIHBhcnQgb2YgdGhlIHJlcXVlc3Qu
Ci0gICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotCi0gICAgUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbCogZCA9IGdldEludGVybmFsKCk7Ci0gICAgU3RyaW5nIHVybFN0cmluZyA9IHVy
bC5zdHJpbmcoKTsKLQotICAgIGlmICh1cmwuaXNMb2NhbEZpbGUoKSkgewotICAgICAgICAvLyBS
ZW1vdmUgYW55IHF1ZXJ5IHBhcnQgc2VudCB0byBhIGxvY2FsIGZpbGUuCi0gICAgICAgIGlmICgh
dXJsLnF1ZXJ5KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBCeSBzZXR0aW5nIHRoZSBx
dWVyeSB0byBhIG51bGwgc3RyaW5nIGl0J2xsIGJlIHJlbW92ZWQuCi0gICAgICAgICAgICB1cmwu
c2V0UXVlcnkoU3RyaW5nKCkpOwotICAgICAgICAgICAgdXJsU3RyaW5nID0gdXJsLnN0cmluZygp
OwotICAgICAgICB9Ci0gICAgICAgIC8vIERldGVybWluZSB0aGUgTUlNRSB0eXBlIGJhc2VkIG9u
IHRoZSBwYXRoLgotICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldE1pbWVUeXBlKE1JTUVUeXBlUmVn
aXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aCh1cmwpKTsKLSAgICB9Ci0KLSAgICBpZiAoZC0+bV9k
ZWZlcnNMb2FkaW5nKSB7Ci0gICAgICAgIENVUkxjb2RlIGVycm9yID0gZC0+bV9jdXJsSGFuZGxl
LnBhdXNlKENVUkxQQVVTRV9BTEwpOwotICAgICAgICAvLyBJZiB3ZSBkaWQgbm90IHBhdXNlIHRo
ZSBoYW5kbGUsIHdlIHdvdWxkIEFTU0VSVCBpbiB0aGUKLSAgICAgICAgLy8gaGVhZGVyIGNhbGxi
YWNrLiBTbyBqdXN0IGFzc2VydCBoZXJlLgotICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCBl
cnJvciA9PSBDVVJMRV9PSyk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIGQtPm1fY3Vy
bEhhbmRsZS5lbmFibGVWZXJib3NlSWZVc2VkKCk7Ci0gICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJs
ZVN0ZEVycklmVXNlZCgpOwotI2VuZGlmCi0KLSAgICBkLT5tX2N1cmxIYW5kbGUuc2V0U3NsVmVy
aWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyRW5hYmxlKTsKLSAgICBkLT5tX2N1cmxIYW5k
bGUuc2V0U3NsVmVyaWZ5SG9zdChDdXJsSGFuZGxlOjpWZXJpZnlIb3N0U3RyaWN0TmFtZUNoZWNr
KTsKLSAgICBkLT5tX2N1cmxIYW5kbGUuc2V0UHJpdmF0ZURhdGEodGhpcyk7Ci0gICAgZC0+bV9j
dXJsSGFuZGxlLnNldFdyaXRlQ2FsbGJhY2tGdW5jdGlvbih3cml0ZUNhbGxiYWNrLCB0aGlzKTsK
LSAgICBkLT5tX2N1cmxIYW5kbGUuc2V0SGVhZGVyQ2FsbGJhY2tGdW5jdGlvbihoZWFkZXJDYWxs
YmFjaywgdGhpcyk7Ci0gICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUF1dG9SZWZlcmVyKCk7Ci0g
ICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUZvbGxvd0xvY2F0aW9uKCk7Ci0gICAgZC0+bV9jdXJs
SGFuZGxlLmVuYWJsZUh0dHBBdXRoZW50aWNhdGlvbihDVVJMQVVUSF9BTlkpOwotICAgIGQtPm1f
Y3VybEhhbmRsZS5lbmFibGVTaGFyZUhhbmRsZSgpOwotICAgIGQtPm1fY3VybEhhbmRsZS5lbmFi
bGVUaW1lb3V0KCk7Ci0gICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUFsbG93ZWRQcm90b2NvbHMo
KTsKLSAgICBzZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZSh0aGlzKTsKLQotICAgIGlmIChDdXJsQ29u
dGV4dDo6c2luZ2xldG9uKCkuc2hvdWxkSWdub3JlU1NMRXJyb3JzKCkpCi0gICAgICAgIGQtPm1f
Y3VybEhhbmRsZS5zZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5kbGU6OlZlcmlmeVBlZXJEaXNhYmxl
KTsKLSAgICBlbHNlCi0gICAgICAgIHNldFNTTFZlcmlmeU9wdGlvbnModGhpcyk7Ci0KLSAgICBk
LT5tX2N1cmxIYW5kbGUuZW5hYmxlQ0FJbmZvSWZFeGlzdHMoKTsKLQotICAgIGQtPm1fY3VybEhh
bmRsZS5lbmFibGVBY2NlcHRFbmNvZGluZygpOwotICAgIGQtPm1fY3VybEhhbmRsZS5zZXRVcmwo
dXJsU3RyaW5nKTsKLSAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlQ29va2llSmFySWZFeGlzdHMo
KTsKLQotICAgIGQtPm1fY3VybEhhbmRsZS5jbGVhclJlcXVlc3RIZWFkZXJzKCk7Ci0KLSAgICBp
ZiAoZmlyc3RSZXF1ZXN0KCkuaHR0cEhlYWRlckZpZWxkcygpLnNpemUoKSA+IDApIHsKLSAgICAg
ICAgSFRUUEhlYWRlck1hcCBjdXN0b21IZWFkZXJzID0gZmlyc3RSZXF1ZXN0KCkuaHR0cEhlYWRl
ckZpZWxkcygpOwotCi0gICAgICAgIGJvb2wgaGFzQ2FjaGVIZWFkZXJzID0gY3VzdG9tSGVhZGVy
cy5jb250YWlucyhIVFRQSGVhZGVyTmFtZTo6SWZNb2RpZmllZFNpbmNlKSB8fCBjdXN0b21IZWFk
ZXJzLmNvbnRhaW5zKEhUVFBIZWFkZXJOYW1lOjpJZk5vbmVNYXRjaCk7Ci0gICAgICAgIGlmICgh
aGFzQ2FjaGVIZWFkZXJzICYmIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuaXNDYWNo
ZWQodXJsKSkgewotICAgICAgICAgICAgQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5h
ZGRDYWNoZUVudHJ5Q2xpZW50KHVybCwgdGhpcyk7Ci0gICAgICAgICAgICBIVFRQSGVhZGVyTWFw
JiByZXF1ZXN0SGVhZGVycyA9IEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkucmVxdWVz
dEhlYWRlcnModXJsKTsKLQotICAgICAgICAgICAgLy8gYXBwZW5kIGFkZGl0aW9uYWwgY2FjaGUg
aW5mb3JtYXRpb24KLSAgICAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gcmVxdWVzdEhlYWRlcnMuYmVnaW4oKTsKLSAgICAgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHJlcXVlc3RIZWFkZXJzLmVuZCgpOwotICAgICAgICAgICAgd2hp
bGUgKGl0ICE9IGVuZCkgewotICAgICAgICAgICAgICAgIGN1c3RvbUhlYWRlcnMuc2V0KGl0LT5r
ZXksIGl0LT52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGQtPm1fYWRkZWRDYWNoZVZhbGlkYXRpb25IZWFkZXJzID0gdHJ1ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGZvciAoYXV0byBjdXN0b21IZWFkZXIgOiBjdXN0b21IZWFkZXJzKQot
ICAgICAgICAgICAgZC0+bV9jdXJsSGFuZGxlLmFwcGVuZFJlcXVlc3RIZWFkZXIoY3VzdG9tSGVh
ZGVyLmtleSwgY3VzdG9tSGVhZGVyLnZhbHVlKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbWV0aG9k
ID0gZmlyc3RSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpOwotICAgIGlmICgiR0VUIiA9PSBtZXRob2Qp
Ci0gICAgICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVIdHRwR2V0UmVxdWVzdCgpOwotICAgIGVs
c2UgaWYgKCJQT1NUIiA9PSBtZXRob2QpCi0gICAgICAgIHNldHVwUE9TVCgpOwotICAgIGVsc2Ug
aWYgKCJQVVQiID09IG1ldGhvZCkKLSAgICAgICAgc2V0dXBQVVQoKTsKLSAgICBlbHNlIGlmICgi
SEVBRCIgPT0gbWV0aG9kKQotICAgICAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlSHR0cEhlYWRS
ZXF1ZXN0KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGQtPm1fY3VybEhhbmRsZS5zZXRIdHRwQ3Vz
dG9tUmVxdWVzdChtZXRob2QpOwotICAgICAgICBzZXR1cFBVVCgpOwotICAgIH0KLQotICAgIGQt
Pm1fY3VybEhhbmRsZS5lbmFibGVSZXF1ZXN0SGVhZGVycygpOwotCi0gICAgYXBwbHlBdXRoZW50
aWNhdGlvbigpOwotCi0gICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZVByb3h5SWZFeGlzdHMoKTsK
LX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZTo6aGFuZGxlQ3VybE1zZyhDVVJMTXNnKiBtc2cpCi17
Ci0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGdldEludGVybmFsKCk7Ci0KLSAgICBp
ZiAoQ1VSTEVfT0sgPT0gbXNnLT5kYXRhLnJlc3VsdCkgewotI2lmIEVOQUJMRShXRUJfVElNSU5H
KQotICAgICAgICBjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMoZCk7Ci0jZW5kaWYKLSAg
ICAgICAgaWYgKCFkLT5tX3Jlc3BvbnNlLnJlc3BvbnNlRmlyZWQoKSkgewotICAgICAgICAgICAg
aGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UodGhpcywgZCk7Ci0gICAgICAgICAgICBpZiAoZC0+
bV9jYW5jZWxsZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGQtPm1fbXVsdGlwYXJ0SGFuZGxlKQotICAgICAgICAgICAgZC0+bV9tdWx0aXBhcnRI
YW5kbGUtPmNvbnRlbnRFbmRlZCgpOwotCi0gICAgICAgIGlmIChkLT5jbGllbnQoKSkgewotICAg
ICAgICAgICAgZC0+Y2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcodGhpcyk7Ci0gICAgICAgICAg
ICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZEZpbmlzaExvYWRpbmcoKnRoaXMp
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgVVJMIHVybCA9IGQtPm1fY3VybEhh
bmRsZS5nZXRFZmZlY3RpdmVVUkwoKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIGZwcmludGYo
c3RkZXJyLCAiQ3VybCBFUlJPUiBmb3IgdXJsPSclcycsIGVycm9yOiAnJXMnXG4iLCB1cmwuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgY3VybF9lYXN5X3N0cmVycm9yKG1zZy0+ZGF0YS5yZXN1bHQp
KTsKLSNlbmRpZgotICAgICAgICBpZiAoZC0+Y2xpZW50KCkpIHsKLSAgICAgICAgICAgIFJlc291
cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihBU0NJSUxpdGVyYWwoZXJyb3JEb21haW5DdXJsKSwgbXNn
LT5kYXRhLnJlc3VsdCwgdXJsLCBTdHJpbmcoY3VybF9lYXN5X3N0cmVycm9yKG1zZy0+ZGF0YS5y
ZXN1bHQpKSk7Ci0gICAgICAgICAgICByZXNvdXJjZUVycm9yLnNldFNTTEVycm9ycyhkLT5tX3Nz
bEVycm9ycyk7Ci0gICAgICAgICAgICBkLT5jbGllbnQoKS0+ZGlkRmFpbCh0aGlzLCByZXNvdXJj
ZUVycm9yKTsKLSAgICAgICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZGlk
RmFpbCgqdGhpcyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA0N2JkMTliZjMxNi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2
IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIENvcHlyaWdodCAoQykgMjAw
NyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGNlbGVyYXRvciBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQnJlbnQgRnVsZ2hh
bSA8YmZ1bGdoYW1Ad2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdh
bnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgUGV0ZXIg
R2FsIDxnYWxwZXRlckBpbmYudS1zemVnZWQuaHU+LCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFsZXggQ2hyaXN0ZW5zZW4gPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
LmgiCi0KLSNpZiBVU0UoQ1VSTCkKLQotI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCi0j
aW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCi0jaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKLSNp
bmNsdWRlICJNdWx0aXBhcnRIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCi0j
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVu
dC5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJSZXNv
dXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCi0jaW5jbHVkZSAi
U1NMSGFuZGxlLmgiCi0jaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KLQotI2lmIE9T
KFdJTkRPV1MpCi0jZWxzZQotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2RlZmluZSBNQVhfUEFU
SCBNQVhQQVRITEVOCi0jZW5kaWYKLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3Rk
aW8uaD4KLSNpZiBFTkFCTEUoV0VCX1RJTUlORykKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KLSNlbmRpZgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
b25zdCBpbnQgc2VsZWN0VGltZW91dE1TID0gNTsKLXN0YXRpYyBjb25zdCBTZWNvbmRzIHBvbGxU
aW1lIHsgNTBfbXMgfTsKLWNvbnN0IGludCBtYXhSdW5uaW5nSm9icyA9IDEyODsKLQotUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXIoKQotICAgIDogbV9kb3dubG9h
ZFRpbWVyKCp0aGlzLCAmUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJh
Y2spCi0gICAgLCBtX3J1bm5pbmdKb2JzKDApCi17Ci0KLX0KLQotUmVzb3VyY2VIYW5kbGVNYW5h
Z2VyOjp+UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCkKLXsKLQotfQotCi1SZXNvdXJjZUhhbmRsZU1h
bmFnZXIqIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKQotewotICAgIHN0
YXRpYyBSZXNvdXJjZUhhbmRsZU1hbmFnZXIqIHNoYXJlZEluc3RhbmNlID0gMDsKLSAgICBpZiAo
IXNoYXJlZEluc3RhbmNlKQotICAgICAgICBzaGFyZWRJbnN0YW5jZSA9IG5ldyBSZXNvdXJjZUhh
bmRsZU1hbmFnZXIoKTsKLSAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7Ci19Ci0KLXZvaWQgUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2soKQotewotICAgIHN0YXJ0
U2NoZWR1bGVkSm9icygpOwotCi0gICAgZmRfc2V0IGZkcmVhZDsKLSAgICBmZF9zZXQgZmR3cml0
ZTsKLSAgICBmZF9zZXQgZmRleGNlcDsKLSAgICBpbnQgbWF4ZmQgPSAwOwotCi0gICAgc3RydWN0
IHRpbWV2YWwgdGltZW91dDsKLSAgICB0aW1lb3V0LnR2X3NlYyA9IDA7Ci0gICAgdGltZW91dC50
dl91c2VjID0gc2VsZWN0VGltZW91dE1TICogMTAwMDsgICAgICAgLy8gc2VsZWN0IHdhaXRzIG1p
Y3Jvc2Vjb25kcwotCi0gICAgLy8gUmV0cnkgJ3NlbGVjdCcgaWYgaXQgd2FzIGludGVycnVwdGVk
IGJ5IGEgcHJvY2VzcyBzaWduYWwuCi0gICAgaW50IHJjID0gMDsKLSAgICBkbyB7Ci0gICAgICAg
IG1fY3VybE11bHRpSGFuZGxlLmdldEZkU2V0KGZkcmVhZCwgZmR3cml0ZSwgZmRleGNlcCwgbWF4
ZmQpOwotCi0gICAgICAgIC8vIFdoZW4gdGhlIDMgZmlsZSBkZXNjcmlwdG9ycyBhcmUgZW1wdHks
IHdpbnNvY2sgd2lsbCByZXR1cm4gLTEKLSAgICAgICAgLy8gYW5kIGJhaWwgb3V0LCBzdG9wcGlu
ZyB0aGUgZmlsZSBkb3dubG9hZC4gU28gbWFrZSBzdXJlIHdlCi0gICAgICAgIC8vIGhhdmUgdmFs
aWQgZmlsZSBkZXNjcmlwdG9ycyBiZWZvcmUgY2FsbGluZyBzZWxlY3QuCi0gICAgICAgIGlmICht
YXhmZCA+PSAwKQotICAgICAgICAgICAgcmMgPSA6OnNlbGVjdChtYXhmZCArIDEsICZmZHJlYWQs
ICZmZHdyaXRlLCAmZmRleGNlcCwgJnRpbWVvdXQpOwotICAgIH0gd2hpbGUgKHJjID09IC0xICYm
IGVycm5vID09IEVJTlRSKTsKLQotICAgIGlmICgtMSA9PSByYykgewotI2lmbmRlZiBOREVCVUcK
LSAgICAgICAgcGVycm9yKCJiYWQ6IHNlbGVjdCgpIHJldHVybmVkIC0xOiAiKTsKLSNlbmRpZgot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IHJ1bm5pbmdIYW5kbGVzID0gMDsKLSAg
ICB3aGlsZSAobV9jdXJsTXVsdGlIYW5kbGUucGVyZm9ybShydW5uaW5nSGFuZGxlcykgPT0gQ1VS
TE1fQ0FMTF9NVUxUSV9QRVJGT1JNKSB7IH0KLQotICAgIC8vIGNoZWNrIHRoZSBjdXJsIG1lc3Nh
Z2VzIGluZGljYXRpbmcgY29tcGxldGVkIHRyYW5zZmVycwotICAgIC8vIGFuZCBmcmVlIHRoZWly
IHJlc291cmNlcwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGludCBtZXNzYWdlc0luUXVl
dWUgPSAwOwotICAgICAgICBDVVJMTXNnKiBtc2cgPSBtX2N1cmxNdWx0aUhhbmRsZS5yZWFkSW5m
byhtZXNzYWdlc0luUXVldWUpOwotICAgICAgICBpZiAoIW1zZykKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIC8vIGZpbmQgdGhlIG5vZGUgd2hpY2ggaGFzIHNhbWUgZC0+bV9oYW5kbGUg
YXMgY29tcGxldGVkIHRyYW5zZmVyCi0gICAgICAgIENVUkwqIGhhbmRsZSA9IG1zZy0+ZWFzeV9o
YW5kbGU7Ci0gICAgICAgIEFTU0VSVChoYW5kbGUpOwotICAgICAgICBSZXNvdXJjZUhhbmRsZSog
am9iID0gbnVsbHB0cjsKLSAgICAgICAgQ1VSTGNvZGUgZXJyID0gY3VybF9lYXN5X2dldGluZm8o
aGFuZGxlLCBDVVJMSU5GT19QUklWQVRFLCAmam9iKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChl
cnIsIENVUkxFX09LID09IGVycik7Ci0gICAgICAgIEFTU0VSVChqb2IpOwotICAgICAgICBpZiAo
IWpvYikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBSZXNvdXJjZUhhbmRsZUludGVy
bmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOwotCi0gICAgICAgIGlmIChkLT5tX2NhbmNlbGxl
ZCkgewotICAgICAgICAgICAgcmVtb3ZlRnJvbUN1cmwoam9iKTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKENVUkxNU0dfRE9ORSAhPSBtc2ctPm1zZykK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGpvYi0+aGFuZGxlQ3VybE1zZyhtc2cp
OwotICAgICAgICByZW1vdmVGcm9tQ3VybChqb2IpOwotICAgIH0KLQotICAgIGJvb2wgc3RhcnRl
ZCA9IHN0YXJ0U2NoZWR1bGVkSm9icygpOyAvLyBuZXcgam9icyBtaWdodCBoYXZlIGJlZW4gYWRk
ZWQgaW4gdGhlIG1lYW50aW1lCi0KLSAgICBpZiAoIW1fZG93bmxvYWRUaW1lci5pc0FjdGl2ZSgp
ICYmIChzdGFydGVkIHx8IChydW5uaW5nSGFuZGxlcyA+IDApKSkKLSAgICAgICAgbV9kb3dubG9h
ZFRpbWVyLnN0YXJ0T25lU2hvdChwb2xsVGltZSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjpyZW1vdmVGcm9tQ3VybChSZXNvdXJjZUhhbmRsZSogam9iKQotewotICAgIFJlc291
cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7Ci0gICAgQVNTRVJUKGQt
Pm1fY3VybEhhbmRsZS5oYW5kbGUoKSk7Ci0gICAgaWYgKCFkLT5tX2N1cmxIYW5kbGUuaGFuZGxl
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3J1bm5pbmdKb2JzLS07Ci0KLSAgICBtX2N1cmxN
dWx0aUhhbmRsZS5yZW1vdmVIYW5kbGUoZC0+bV9jdXJsSGFuZGxlLmhhbmRsZSgpKTsKLSAgICBq
b2ItPmRlcmVmKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjphZGQoUmVzb3Vy
Y2VIYW5kbGUqIGpvYikKLXsKLSAgICAvLyB3ZSBjYW4gYmUgY2FsbGVkIGZyb20gd2l0aGluIGN1
cmwsIHNvIHRvIGF2b2lkIHJlLWVudHJhbmN5IGlzc3VlcwotICAgIC8vIHNjaGVkdWxlIHRoaXMg
am9iIHRvIGJlIGFkZGVkIHRoZSBuZXh0IHRpbWUgd2UgZW50ZXIgY3VybCBkb3dubG9hZCBsb29w
Ci0gICAgam9iLT5yZWYoKTsKLSAgICBtX3Jlc291cmNlSGFuZGxlTGlzdC5hcHBlbmQoam9iKTsK
LSAgICBpZiAoIW1fZG93bmxvYWRUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX2Rvd25sb2Fk
VGltZXIuc3RhcnRPbmVTaG90KHBvbGxUaW1lKTsKLX0KLQotYm9vbCBSZXNvdXJjZUhhbmRsZU1h
bmFnZXI6OnJlbW92ZVNjaGVkdWxlZEpvYihSZXNvdXJjZUhhbmRsZSogam9iKQotewotICAgIGlu
dCBzaXplID0gbV9yZXNvdXJjZUhhbmRsZUxpc3Quc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIGlmIChqb2IgPT0gbV9yZXNvdXJjZUhhbmRsZUxp
c3RbaV0pIHsKLSAgICAgICAgICAgIG1fcmVzb3VyY2VIYW5kbGVMaXN0LnJlbW92ZShpKTsKLSAg
ICAgICAgICAgIGpvYi0+ZGVyZWYoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZXNvdXJjZUhhbmRsZU1h
bmFnZXI6OnN0YXJ0U2NoZWR1bGVkSm9icygpCi17Ci0gICAgLy8gVE9ETzogQ3JlYXRlIGEgc2Vw
YXJhdGUgc3RhY2sgb2Ygam9icyBmb3IgZWFjaCBkb21haW4uCi0KLSAgICBib29sIHN0YXJ0ZWQg
PSBmYWxzZTsKLSAgICB3aGlsZSAoIW1fcmVzb3VyY2VIYW5kbGVMaXN0LmlzRW1wdHkoKSAmJiBt
X3J1bm5pbmdKb2JzIDwgbWF4UnVubmluZ0pvYnMpIHsKLSAgICAgICAgUmVzb3VyY2VIYW5kbGUq
IGpvYiA9IG1fcmVzb3VyY2VIYW5kbGVMaXN0WzBdOwotICAgICAgICBtX3Jlc291cmNlSGFuZGxl
TGlzdC5yZW1vdmUoMCk7Ci0gICAgICAgIHN0YXJ0Sm9iKGpvYik7Ci0gICAgICAgIHN0YXJ0ZWQg
PSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gc3RhcnRlZDsKLX0KLQotdm9pZCBSZXNvdXJjZUhh
bmRsZU1hbmFnZXI6OnN0YXJ0Sm9iKFJlc291cmNlSGFuZGxlKiBqb2IpCi17Ci0gICAgam9iLT5p
bml0aWFsaXplKCk7Ci0KLSAgICBtX3J1bm5pbmdKb2JzKys7Ci0KLSAgICBDVVJMTWNvZGUgcmV0
ID0gbV9jdXJsTXVsdGlIYW5kbGUuYWRkSGFuZGxlKGpvYi0+Z2V0SW50ZXJuYWwoKS0+bV9jdXJs
SGFuZGxlLmhhbmRsZSgpKTsKLQotICAgIC8vIGRvbid0IGNhbGwgcGVyZm9ybSwgYmVjYXVzZSBl
dmVudHMgbXVzdCBiZSBhc3luYwotICAgIC8vIHRpbWVvdXQgd2lsbCBvY2N1ciBhbmQgZG8gY3Vy
bF9tdWx0aV9wZXJmb3JtCi0gICAgaWYgKHJldCAmJiByZXQgIT0gQ1VSTE1fQ0FMTF9NVUxUSV9Q
RVJGT1JNKSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9y
ICVkIHN0YXJ0aW5nIGpvYiAlc1xuIiwgcmV0LCBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2Vz
KGpvYi0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkpLmxhdGluMSgpLmRhdGEoKSk7Ci0j
ZW5kaWYKLSAgICAgICAgam9iLT5jYW5jZWwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0K
LQotdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmNhbmNlbChSZXNvdXJjZUhhbmRsZSogam9i
KQotewotICAgIGlmIChyZW1vdmVTY2hlZHVsZWRKb2Ioam9iKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAg
ICBkLT5tX2NhbmNlbGxlZCA9IHRydWU7Ci0gICAgaWYgKCFtX2Rvd25sb2FkVGltZXIuaXNBY3Rp
dmUoKSkKLSAgICAgICAgbV9kb3dubG9hZFRpbWVyLnN0YXJ0T25lU2hvdChwb2xsVGltZSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjOGY1MTJlOTk2Li4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5k
bGVNYW5hZ2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQotICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBSZXNvdXJjZUhhbmRsZU1hbmFnZXJfaAotI2RlZmluZSBSZXNvdXJjZUhhbmRs
ZU1hbmFnZXJfaAotCi0jaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKLSNpbmNsdWRlICJGcmFtZS5o
IgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIK
LQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdp
bmRvd3MuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZXNvdXJjZUhhbmRsZU1hbmFnZXIgewotcHVibGlj
OgotICAgIHN0YXRpYyBSZXNvdXJjZUhhbmRsZU1hbmFnZXIqIHNoYXJlZEluc3RhbmNlKCk7Ci0g
ICAgdm9pZCBhZGQoUmVzb3VyY2VIYW5kbGUqKTsKLSAgICB2b2lkIGNhbmNlbChSZXNvdXJjZUhh
bmRsZSopOwotCi1wcml2YXRlOgotICAgIFJlc291cmNlSGFuZGxlTWFuYWdlcigpOwotICAgIH5S
ZXNvdXJjZUhhbmRsZU1hbmFnZXIoKTsKLSAgICB2b2lkIGRvd25sb2FkVGltZXJDYWxsYmFjaygp
OwotICAgIHZvaWQgcmVtb3ZlRnJvbUN1cmwoUmVzb3VyY2VIYW5kbGUqKTsKLSAgICBib29sIHJl
bW92ZVNjaGVkdWxlZEpvYihSZXNvdXJjZUhhbmRsZSopOwotICAgIHZvaWQgc3RhcnRKb2IoUmVz
b3VyY2VIYW5kbGUqKTsKLSAgICBib29sIHN0YXJ0U2NoZWR1bGVkSm9icygpOwotCi0gICAgVGlt
ZXIgbV9kb3dubG9hZFRpbWVyOwotICAgIFZlY3RvcjxSZXNvdXJjZUhhbmRsZSo+IG1fcmVzb3Vy
Y2VIYW5kbGVMaXN0OwotICAgIGludCBtX3J1bm5pbmdKb2JzOwotCi0gICAgQ3VybE11bHRpSGFu
ZGxlIG1fY3VybE11bHRpSGFuZGxlOwotfTsKLQotfQotCi0jZW5kaWYK
</data>
<flag name="review"
          id="336474"
          type_id="1"
          status="-"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315732</attachid>
            <date>2017-07-17 17:02:39 -0700</date>
            <delta_ts>2017-07-18 00:20:42 -0700</delta_ts>
            <desc>PATCH with reviewed advices</desc>
            <filename>173991-8.diff</filename>
            <type>text/plain</type>
            <size>94081</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZTJjMWYzZWYwMy4uYzVlNmIyM2VkMTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzggQEAKKzIwMTctMDctMTcgIEJhc3VrZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNv
bnkuY29tPgorCisgICAgICAgIFtDdXJsXSBVbmlmeSBSZXNvdXJjZUhhbmRsZU1hbmFnZXIgaW50
byBDdXJsSm9iTWFuYWdlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3Mzk5MQorCisgICAgICAgIFVzZSBDdXJsSm9iTWFuYWdlciB0byBtYWtlIFJl
c291cmNlSGFuZGxlIHJ1biBpbiBiYWNrZ3JvdW5kLgorICAgICAgICBDdXJsSm9iTWFuYWdlcjo6
c3RhcnQoKSBub3cgYWNjZXB0IGNhbGxiYWNrIHRvIG1hbmFnZSBsaWZlIGN5Y2xlCisgICAgICAg
IG9mIHRoZSByZXNvdXJjZSBlYXNpbHkgaW4gYSBzYW1lIGNvbnRleHQuCisgICAgICAgIEFjdHVh
bCBtYW5hZ2VtZW50IHRhc2tzIG9mIEN1cmxKb2JNYW5hZ2VyIGlzIG5vdyBwcml2YXRlIGNsYXNz
CisgICAgICAgIGluIEN1cmxKb2JNYW5hZ2VyIHdoaWNoIGlzIGJldHRlciB0aHJlYWQgc2FmZW5l
c3MuCisgICAgICAgIFJlc291cmNlSGFuZGxlTWFuYWdlciBpcyBkZWxldGVkIGF0IGFsbC4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3Jt
L0N1cmwuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JTZXNzaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRs
ZTo6Q3VybEhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjp+Q3VybEhhbmRs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjplcnJvckRlc2NyaXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybEhhbmRsZTo6cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6YXBwZW5k
UmVxdWVzdEhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6YXBwZW5kUmVx
dWVzdEhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjplbmFibGVSZXF1ZXN0
SGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpmZXRjaENvb2tpZUxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6Z2V0RWZmZWN0aXZlVVJMKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OnNldFByaXZhdGVEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmNsZWFyUmVxdWVzdEhlYWRlcnMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6Z2V0Q29va2llTGlzdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpjbGVhckNvb2tpZUxpc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybFNMaXN0OjpDdXJsU0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNM
aXN0Ojp+Q3VybFNMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTTGlzdDo6b3BlcmF0b3Ig
c3RydWN0IGN1cmxfc2xpc3QqKiApOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNMaXN0OjpoZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTTGlzdDo6aXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsU0xpc3Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTTGlzdDo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVycm9yQ29kZSk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsSGFuZGxlOjpzZXRFcnJvckNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybEhhbmRsZTo6cHJpdmF0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6
c2V0UHJpdmF0ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93
bmxvYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpzdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsRG93bmxvYWQ6OmFkZEhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2Fk
OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OmRpZEZh
aWwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpoYW5kbGVDdXJsTXNnKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxKb2JMaXN0OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bEpvYkxpc3Q6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTGlzdDo6Y29tcGxl
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYkxpc3Q6OmlzRW1wdHkpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybEpvYkxpc3Q6OndpdGhKb2IpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpv
Ykxpc3Q6OndpdGhDdXJsSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2I6Omludm9r
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6YWRkKToKKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpv
Yk1hbmFnZXI6OmNhbGxPbkpvYlRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFu
YWdlcjo6c3RhcnRUaHJlYWRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFu
YWdlcjo6c3RvcFRocmVhZElmTm9Nb3JlSm9iUnVubmluZyk6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsSm9iTWFuYWdlcjo6c3RvcFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFu
YWdlcjo6dXBkYXRlSm9icyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6d29y
a2VyVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpDdXJsSm9iTWFu
YWdlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6fkN1cmxK
b2JNYW5hZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpy
ZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OmdldEFj
dGl2ZUNvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpn
ZXRQZW5kaW5nQ291bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFn
ZXI6OnN0b3BUaHJlYWRJZklkbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpv
Yk1hbmFnZXI6OnVwZGF0ZUhhbmRsZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q3VybEpvYk1hbmFnZXI6OmFkZFRvQ3VybCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
dXJsSm9iTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsSm9iTWFuYWdlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bEpvYjo6Q3VybEpvYik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iOjp+Q3VybEpvYik6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsSm9iOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybEpvYjo6Y3VybEhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iOjp0aWNrZXQp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYjo6ZmluaXNoZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEpvYjo6ZXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYjo6Y2FuY2VsKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2VyOjpzaW5nbGV0b24pOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6On5DdXJsSm9iTWFuYWdlcik6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsSm9iTWFuYWdlcjo6aXNBY3RpdmVKb2IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bEpvYk1hbmFnZXI6OnJ1blRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJs
Sm9iTWFuYWdlcjo6c2V0UnVuVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VFcnJvci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VF
cnJvcjo6UmVzb3VyY2VFcnJvcik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6
flJlc291cmNlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjphcHBseUF1dGhlbnRpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldEZvcm1FbGVtZW50c0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
OjpzZXR1cFBVVCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0dXBQT1NU
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXR1cEZvcm1EYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXRIb3N0QWxsb3dzQW55SFRUUFNDZXJ0
aWZpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2Vy
dGlmaWNhdGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9y
bVNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRp
ZEZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGlkRmFpbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cmVj
ZWl2ZWRDcmVkZW50aWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZWNl
aXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlOjpjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmhhbmRsZUxvY2FsUmVjZWl2ZVJlc3BvbnNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp3aWxsUHJlcGFyZVNlbmREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlSGVhZGVyTGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUFsbEhlYWRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVDb250ZW50
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cmVhZENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpoZWFkZXJDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6d3JpdGVDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkaXNwYXRjaFN5bmNocm9ub3Vz
Sm9iKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZVdlYlRpbWluZ0luZm9ybWF0aW9ucyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp3cml0ZUNhbGxiYWNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmhlYWRlckNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OnJlYWRDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXR1cEZvcm1E
YXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpoYW5kbGVD
dXJsTXNnKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmg6IFJlbW92ZWQuCisKIDIwMTctMDctMTQgIEJy
YWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2Ugc3VyZSBhbGwg
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZnMgd2UgY3JlYXRlIGFyZSBzY2hlZHVsZWQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ3VybC5jbWFrZQppbmRleCA3MmM2ODM0YzZlMS4uNzY1ZGY4MTc1NzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZQpAQCAtMTUsNyArMTUsNiBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvTXVsdGlwYXJ0SGFuZGxl
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Qcm94eVNlcnZlckN1cmwuY3BwCiAgICAg
cGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKLSAgICBwbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAogICAgIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9TU0xIYW5kbGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9TeW5j
aHJvbm91c0xvYWRlckNsaWVudEN1cmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKaW5kZXggMmMwYjQxYzEzZmUuLjIwNjkzMTAzNTNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRs
ZS5oCkBAIC03MCw2ICs3MCw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZVUkxTdG9yYWdl
U2Vzc2lvbiogQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZjsKIAogI2lmIFVTRShDVVJMKQogI2luY2x1
ZGUgIkN1cmxKb2JNYW5hZ2VyLmgiCisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNlbmRpZgogCiBu
YW1lc3BhY2UgV1RGIHsKQEAgLTE4NSwxMiArMTg2LDYgQEAgcHVibGljOgogICAgIE1vbm90b25p
Y1RpbWUgbV9yZXF1ZXN0VGltZTsKICNlbmRpZgogCi0jaWYgVVNFKENVUkwpCi0gICAgdm9pZCBp
bml0aWFsaXplKCk7Ci0gICAgdm9pZCBoYW5kbGVEYXRhVVJMKCk7Ci0gICAgdm9pZCBoYW5kbGVD
dXJsTXNnKENVUkxNc2cqKTsKLSNlbmRpZgotCiAgICAgYm9vbCBoYXNBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSgpIGNvbnN0OwogICAgIHZvaWQgY2xlYXJBdXRoZW50aWNhdGlvbigpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjYW5jZWwoKTsKQEAgLTI5MywxMiArMjg4LDM4IEBA
IHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFVTRShDVVJMKQotICAgIHZvaWQgZGlzcGF0Y2hTeW5j
aHJvbm91c0pvYigpOworICAgIEN1cmxKb2JUaWNrZXQgbV9qb2I7CisKKyAgICBWZWN0b3I8Y2hh
cj4gbV9yZWNlaXZlZEJ1ZmZlcjsKKyAgICBMb2NrIG1fcmVjZWl2ZWRCdWZmZXJNdXRleDsKIAor
ICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZvaWQgYXBwbHlBdXRoZW50aWNhdGlvbigpOwog
ICAgIHZvaWQgc2V0dXBQT1NUKCk7CiAgICAgdm9pZCBzZXR1cFBVVCgpOworICAgIHZvaWQgc2V0
dXBGb3JtRGF0YShib29sIGlzUG9zdFJlcXVlc3QpOworCisgICAgdm9pZCBkaWRGaW5pc2goKTsK
KyAgICB2b2lkIGRpZEZhaWwoKTsKKworICAgIHNpemVfdCB3aWxsUHJlcGFyZVNlbmREYXRhKGNo
YXIqIHB0ciwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzKTsKKyAgICB2
b2lkIGRpZFJlY2VpdmVIZWFkZXJMaW5lKGNvbnN0IFN0cmluZyYgaGVhZGVyKTsKKyAgICB2b2lk
IGRpZFJlY2VpdmVBbGxIZWFkZXJzKGxvbmcgaHR0cENvZGUsIGxvbmcgbG9uZyBjb250ZW50TGVu
Z3RoKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVDb250ZW50RGF0YSgpOworCisgICAgdm9pZCBoYW5k
bGVMb2NhbFJlY2VpdmVSZXNwb25zZSgpOworCisgICAgc3RhdGljIHNpemVfdCByZWFkQ2FsbGJh
Y2soY2hhciogcHRyLCBzaXplX3QgYmxvY2tTaXplLCBzaXplX3QgbnVtYmVyT2ZCbG9ja3MsIHZv
aWQqIGRhdGEpOworICAgIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2soY2hhciogcHRyLCBz
aXplX3QgYmxvY2tTaXplLCBzaXplX3QgbnVtYmVyT2ZCbG9ja3MsIHZvaWQqIGRhdGEpOworICAg
IHN0YXRpYyBzaXplX3Qgd3JpdGVDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVfdCBibG9ja1NpemUs
IHNpemVfdCBudW1iZXJPZkJsb2Nrcywgdm9pZCogZGF0YSk7CisKKyAgICB2b2lkIGRpc3BhdGNo
U3luY2hyb25vdXNKb2IoKTsKKyAgICB2b2lkIGhhbmRsZURhdGFVUkwoKTsKKworI2lmIEVOQUJM
RShXRUJfVElNSU5HKQorICAgIHZvaWQgY2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25zKCk7
CisjZW5kaWYKIAotICAgIHZvaWQgYXBwbHlBdXRoZW50aWNhdGlvbigpOwogI2VuZGlmCiAKICAg
ICBmcmllbmQgY2xhc3MgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAppbmRleCAy
OTAxN2E1NmFmNC4uM2ZhNzdlODc1MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKQEAgLTI2OCwxNyArMjY4LDE4
IEBAIHN0YXRpYyBTdHJpbmcgY29va2llc0ZvclNlc3Npb24oY29uc3QgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJiwgY29uc3QgVVJMJiwgY29uc3QKICAgICBDdXJsSGFuZGxlIGN1cmxIYW5kbGU7CiAg
ICAgY3VybEhhbmRsZS5lbmFibGVTaGFyZUhhbmRsZSgpOwogCi0gICAgc3RydWN0IGN1cmxfc2xp
c3QqIGxpc3QgPSBjdXJsSGFuZGxlLmdldENvb2tpZUxpc3QoKTsKKyAgICBDdXJsU0xpc3QgY29v
a2llTGlzdDsKKyAgICBjdXJsSGFuZGxlLmZldGNoQ29va2llTGlzdChjb29raWVMaXN0KTsKKyAg
ICBjb25zdCBzdHJ1Y3QgY3VybF9zbGlzdCogbGlzdCA9IGNvb2tpZUxpc3QuaGVhZCgpOwogICAg
IGlmIChsaXN0KSB7CiAgICAgICAgIFN0cmluZyBkb21haW4gPSB1cmwuaG9zdCgpOwogICAgICAg
ICBTdHJpbmcgcGF0aCA9IHVybC5wYXRoKCk7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgY29va2ll
c0J1aWxkZXI7CiAKLSAgICAgICAgc3RydWN0IGN1cmxfc2xpc3QqIGl0ZW0gPSBsaXN0OwotICAg
ICAgICB3aGlsZSAoaXRlbSkgewotICAgICAgICAgICAgY29uc3QgY2hhciogY29va2llID0gaXRl
bS0+ZGF0YTsKKyAgICAgICAgd2hpbGUgKGxpc3QpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGNvb2tpZSA9IGxpc3QtPmRhdGE7CiAgICAgICAgICAgICBhZGRNYXRjaGluZ0N1cmxDb29raWUo
Y29va2llLCBkb21haW4sIHBhdGgsIGNvb2tpZXNCdWlsZGVyLCBodHRwb25seSk7Ci0gICAgICAg
ICAgICBpdGVtID0gaXRlbS0+bmV4dDsKKyAgICAgICAgICAgIGxpc3QgPSBsaXN0LT5uZXh0Owog
ICAgICAgICB9CiAKICAgICAgICAgY29va2llcyA9IGNvb2tpZXNCdWlsZGVyLnRvU3RyaW5nKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250
ZXh0LmNwcAppbmRleCBlYzJiZTBlYTVkMy4uZGQ2NGFmOTU3YjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcApAQCAtMjgs
NyArMjgsNyBAQAogCiAjaWYgVVNFKENVUkwpCiAjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKLQor
I2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMTAxLDYgKzEwMSw4IEBAIHN0YXRp
YyBDU3RyaW5nIGNvb2tpZUphclBhdGgoKQogCiAvLyBDdXJsQ29udGV4dCAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
K2NvbnN0IGNoYXIqIGNvbnN0IEN1cmxDb250ZXh0OjplcnJvckRvbWFpbiA9ICJDdXJsRXJyb3JE
b21haW4iOworCiBDdXJsQ29udGV4dDo6Q3VybENvbnRleHQoKQogOiBtX2Nvb2tpZUphckZpbGVO
YW1lIHsgY29va2llSmFyUGF0aCgpIH0KICwgbV9jZXJ0aWZpY2F0ZVBhdGggeyBjZXJ0aWZpY2F0
ZVBhdGgoKSB9CkBAIC0yODUsMjggKzI4NywzMSBAQCBDdXJsSGFuZGxlOjpDdXJsSGFuZGxlKCkK
IAogICAgIG1faGFuZGxlID0gY3VybF9lYXN5X2luaXQoKTsKICAgICBjdXJsX2Vhc3lfc2V0b3B0
KG1faGFuZGxlLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBtX2Vycm9yQnVmZmVyKTsKKyAgICBjdXJs
X2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BSSVZBVEUsIHRoaXMpOwogfQogCiBDdXJs
SGFuZGxlOjp+Q3VybEhhbmRsZSgpCiB7Ci0gICAgY2xlYXJDb29raWVMaXN0KCk7CiAgICAgY2xl
YXJVcmwoKTsKLSAgICBjbGVhclJlcXVlc3RIZWFkZXJzKCk7CiAKLSAgICBpZiAobV9oYW5kbGUp
IHsKLSAgICAgICAgY3VybF9lYXN5X2NsZWFudXAobV9oYW5kbGUpOwotICAgICAgICBtX2hhbmRs
ZSA9IG51bGxwdHI7Ci0gICAgfQorICAgIGN1cmxfZWFzeV9jbGVhbnVwKG1faGFuZGxlKTsKK30K
KworY29uc3QgU3RyaW5nIEN1cmxIYW5kbGU6OmVycm9yRGVzY3JpcHRpb24oKSBjb25zdAorewor
ICAgIHJldHVybiBTdHJpbmcoY3VybF9lYXN5X3N0cmVycm9yKG1fZXJyb3JDb2RlKSk7CiB9CiAK
IENVUkxjb2RlIEN1cmxIYW5kbGU6OnBlcmZvcm0oKQogewotICAgIHJldHVybiBjdXJsX2Vhc3lf
cGVyZm9ybShtX2hhbmRsZSk7CisgICAgbV9lcnJvckNvZGUgPSBjdXJsX2Vhc3lfcGVyZm9ybSht
X2hhbmRsZSk7CisgICAgcmV0dXJuIG1fZXJyb3JDb2RlOwogfQogCiBDVVJMY29kZSBDdXJsSGFu
ZGxlOjpwYXVzZShpbnQgYml0bWFzaykKIHsKLSAgICByZXR1cm4gY3VybF9lYXN5X3BhdXNlKG1f
aGFuZGxlLCBDVVJMUEFVU0VfQUxMKTsKKyAgICBtX2Vycm9yQ29kZSA9IGN1cmxfZWFzeV9wYXVz
ZShtX2hhbmRsZSwgQ1VSTFBBVVNFX0FMTCk7CisgICAgcmV0dXJuIG1fZXJyb3JDb2RlOwogfQog
CiB2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZVNoYXJlSGFuZGxlKCkKQEAgLTMxNCwxMSArMzE5LDYg
QEAgdm9pZCBDdXJsSGFuZGxlOjplbmFibGVTaGFyZUhhbmRsZSgpCiAgICAgY3VybF9lYXN5X3Nl
dG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9TSEFSRSwgQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLnNo
YXJlSGFuZGxlKCkuaGFuZGxlKCkpOwogfQogCi12b2lkIEN1cmxIYW5kbGU6OnNldFByaXZhdGVE
YXRhKHZvaWQqIHVzZXJEYXRhKQotewotICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENV
UkxPUFRfUFJJVkFURSwgdXNlckRhdGEpOwotfQotCiB2b2lkIEN1cmxIYW5kbGU6OnNldFVybChj
b25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBjbGVhclVybCgpOwpAQCAtMzM2LDExICszMzYsMTUg
QEAgdm9pZCBDdXJsSGFuZGxlOjpjbGVhclVybCgpCiAgICAgfQogfQogCi12b2lkIEN1cmxIYW5k
bGU6OmNsZWFyUmVxdWVzdEhlYWRlcnMoKQordm9pZCBDdXJsSGFuZGxlOjphcHBlbmRSZXF1ZXN0
SGVhZGVycyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQogewotICAgIGlmIChtX3JlcXVl
c3RIZWFkZXJzKSB7Ci0gICAgICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwobV9yZXF1ZXN0SGVhZGVy
cyk7Ci0gICAgICAgIG1fcmVxdWVzdEhlYWRlcnMgPSBudWxscHRyOworICAgIGlmIChoZWFkZXJz
LnNpemUoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogaGVhZGVycykgeworICAgICAg
ICAgICAgYXV0byYgdmFsdWUgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgICAgIGFwcGVuZFJlcXVl
c3RIZWFkZXIoZW50cnkua2V5LCBlbnRyeS52YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBl
bmFibGVSZXF1ZXN0SGVhZGVycygpOwogICAgIH0KIH0KIApAQCAtMzYxLDEzICszNjUsMTUgQEAg
dm9pZCBDdXJsSGFuZGxlOjphcHBlbmRSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKIAogdm9pZCBDdXJsSGFuZGxlOjphcHBlbmRSZXF1ZXN0SGVh
ZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyKQogewotICAgIG1fcmVxdWVzdEhlYWRlcnMgPSBjdXJs
X3NsaXN0X2FwcGVuZChtX3JlcXVlc3RIZWFkZXJzLCBoZWFkZXIubGF0aW4xKCkuZGF0YSgpKTsK
KyAgICBtX3JlcXVlc3RIZWFkZXJzLmFwcGVuZChoZWFkZXIpOwogfQogCiB2b2lkIEN1cmxIYW5k
bGU6OmVuYWJsZVJlcXVlc3RIZWFkZXJzKCkKIHsKLSAgICBpZiAobV9yZXF1ZXN0SGVhZGVycykK
LSAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9IVFRQSEVBREVSLCBt
X3JlcXVlc3RIZWFkZXJzKTsKKyAgICBpZiAoIW1fcmVxdWVzdEhlYWRlcnMuaXNFbXB0eSgpKSB7
CisgICAgICAgIGNvbnN0IHN0cnVjdCBjdXJsX3NsaXN0KiBoZWFkZXJzID0gbV9yZXF1ZXN0SGVh
ZGVycy5oZWFkKCk7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRf
SFRUUEhFQURFUiwgaGVhZGVycyk7CisgICAgfQogfQogCiB2b2lkIEN1cmxIYW5kbGU6OmVuYWJs
ZUh0dHBHZXRSZXF1ZXN0KCkKQEAgLTUwOCwxOSArNTE0LDkgQEAgdm9pZCBDdXJsSGFuZGxlOjpz
ZXRDb29raWVMaXN0KGNvbnN0IGNoYXIqIGNvb2tpZUxpc3QpCiAgICAgY3VybF9lYXN5X3NldG9w
dChtX2hhbmRsZSwgQ1VSTE9QVF9DT09LSUVMSVNULCBjb29raWVMaXN0KTsKIH0KIAotc3RydWN0
IGN1cmxfc2xpc3QqIEN1cmxIYW5kbGU6OmdldENvb2tpZUxpc3QoKQotewotICAgIGNsZWFyQ29v
a2llTGlzdCgpOwotCi0gICAgY3VybF9lYXN5X2dldGluZm8obV9oYW5kbGUsIENVUkxJTkZPX0NP
T0tJRUxJU1QsICZtX2Nvb2tpZUxpc3QpOwotCi0gICAgcmV0dXJuIG1fY29va2llTGlzdDsKLX0K
LQotdm9pZCBDdXJsSGFuZGxlOjpjbGVhckNvb2tpZUxpc3QoKQordm9pZCBDdXJsSGFuZGxlOjpm
ZXRjaENvb2tpZUxpc3QoQ3VybFNMaXN0ICZjb29raWVzKSBjb25zdAogewotICAgIGlmICghbV9j
b29raWVMaXN0KQotICAgICAgICBjdXJsX3NsaXN0X2ZyZWVfYWxsKG1fY29va2llTGlzdCk7Cisg
ICAgY3VybF9lYXN5X2dldGluZm8obV9oYW5kbGUsIENVUkxJTkZPX0NPT0tJRUxJU1QsIHN0YXRp
Y19jYXN0PHN0cnVjdCBjdXJsX3NsaXN0Kio+KGNvb2tpZXMpKTsKIH0KIAogdm9pZCBDdXJsSGFu
ZGxlOjplbmFibGVQcm94eUlmRXhpc3RzKCkKQEAgLTU2NCw3ICs1NjAsNyBAQCB2b2lkIEN1cmxI
YW5kbGU6OnNldFNzbEN0eENhbGxiYWNrRnVuY3Rpb24oY3VybF9zc2xfY3R4X2NhbGxiYWNrIGNh
bGxiYWNrRnVuYywgdgogICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfU1NM
X0NUWF9GVU5DVElPTiwgY2FsbGJhY2tGdW5jKTsKIH0KIAotVVJMIEN1cmxIYW5kbGU6OmdldEVm
ZmVjdGl2ZVVSTCgpCitVUkwgQ3VybEhhbmRsZTo6Z2V0RWZmZWN0aXZlVVJMKCkgY29uc3QKIHsK
ICAgICBDVVJMY29kZSBlcnJDZCA9IENVUkxFX0ZBSUxFRF9JTklUOwogICAgIGNoYXIqIHVybCA9
IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsQ29udGV4dC5oCmluZGV4IGNhMThiOThkMmYxLi41MzM2OWMwYTFiNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmgKQEAgLTEw
Miw2ICsxMDIsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFN0cmluZyB1cmwoKSBjb25zdDsK
ICAgICB9OwogCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVycm9yRG9tYWluOworCiAg
ICAgc3RhdGljIEN1cmxDb250ZXh0JiBzaW5nbGV0b24oKQogICAgIHsKICAgICAgICAgc3RhdGlj
IEN1cmxDb250ZXh0IHNoYXJlZDsKQEAgLTE2NywxMCArMTY5LDM2IEBAIHByaXZhdGU6CiAgICAg
Q1VSTE0qIG1fbXVsdGlIYW5kbGUgeyBudWxscHRyIH07CiB9OwogCisvLyBDdXJsU0xpc3QgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBD
dXJsU0xpc3QgeworcHVibGljOgorICAgIEN1cmxTTGlzdCgpIHsgfQorICAgIH5DdXJsU0xpc3Qo
KSB7IGNsZWFyKCk7IH0KKworICAgIG9wZXJhdG9yIHN0cnVjdCBjdXJsX3NsaXN0KiogKCkgeyBy
ZXR1cm4gJm1fbGlzdDsgfQorCisgICAgY29uc3Qgc3RydWN0IGN1cmxfc2xpc3QqIGhlYWQoKSBj
b25zdCB7IHJldHVybiBtX2xpc3Q7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2xpc3Q7IH0KKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIGlmIChtX2xpc3Qp
IHsKKyAgICAgICAgICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwobV9saXN0KTsKKyAgICAgICAgICAg
IG1fbGlzdCA9IG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZChj
b25zdCBjaGFyKiBzdHIpIHsgbV9saXN0ID0gY3VybF9zbGlzdF9hcHBlbmQobV9saXN0LCBzdHIp
OyB9CisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBzdHIpIHsgYXBwZW5kKHN0ci5sYXRp
bjEoKS5kYXRhKCkpOyB9CiAKK3ByaXZhdGU6CisgICAgc3RydWN0IGN1cmxfc2xpc3QqIG1fbGlz
dCB7IG51bGxwdHIgfTsKK307CiAKIC8vIEN1cmxIYW5kbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitjbGFzcyBIVFRQSGVhZGVyTWFwOworCiBj
bGFzcyBDdXJsSGFuZGxlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXJsSGFuZGxlKTsK
IApAQCAtMTkzLDEzICsyMjEsMjAgQEAgcHVibGljOgogICAgIENVUkxjb2RlIHBlcmZvcm0oKTsK
ICAgICBDVVJMY29kZSBwYXVzZShpbnQpOwogCisgICAgQ1VSTGNvZGUgZXJyb3JDb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9lcnJvckNvZGU7IH0KKyAgICB2b2lkIHNldEVycm9yQ29kZShDVVJMY29k
ZSBlcnJvckNvZGUpIHsgbV9lcnJvckNvZGUgPSBlcnJvckNvZGU7IH0KKworICAgIGNvbnN0IFN0
cmluZyBlcnJvckRlc2NyaXB0aW9uKCkgY29uc3Q7CisKICAgICB2b2lkIGVuYWJsZVNoYXJlSGFu
ZGxlKCk7Ci0gICAgdm9pZCBzZXRQcml2YXRlRGF0YSh2b2lkKiB1c2VyRGF0YSk7CisKKyAgICB2
b2lkKiBwcml2YXRlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpdmF0ZURhdGE7IH0KKyAgICB2
b2lkIHNldFByaXZhdGVEYXRhKHZvaWQqIHVzZXJEYXRhKSB7IG1fcHJpdmF0ZURhdGEgPSB1c2Vy
RGF0YTsgfQogCiAgICAgdm9pZCBzZXRVcmwoY29uc3QgU3RyaW5nJik7CiAgICAgY29uc3QgY2hh
ciogdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KIAotICAgIHZvaWQgY2xlYXJSZXF1ZXN0
SGVhZGVycygpOworICAgIHZvaWQgYXBwZW5kUmVxdWVzdEhlYWRlcnMoY29uc3QgSFRUUEhlYWRl
ck1hcCYpOwogICAgIHZvaWQgYXBwZW5kUmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZFJlcXVlc3RIZWFkZXIoY29uc3QgU3RyaW5nJik7
CiAgICAgdm9pZCBlbmFibGVSZXF1ZXN0SGVhZGVycygpOwpAQCAtMjMxLDcgKzI2Niw3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgZW5hYmxlQ29va2llSmFySWZFeGlzdHMoKTsKICAgICB2b2lkIHNl
dENvb2tpZUxpc3QoY29uc3QgY2hhciopOwotICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBnZXRDb29r
aWVMaXN0KCk7CisgICAgdm9pZCBmZXRjaENvb2tpZUxpc3QoQ3VybFNMaXN0ICZjb29raWVzKSBj
b25zdDsKIAogICAgIHZvaWQgZW5hYmxlUHJveHlJZkV4aXN0cygpOwogCkBAIC0yNDQsNyArMjc5
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3NsQ3R4Q2FsbGJhY2tGdW5jdGlvbihjdXJsX3Nz
bF9jdHhfY2FsbGJhY2ssIHZvaWQqKTsKIAogICAgIC8vIFN0YXR1cwotICAgIFVSTCBnZXRFZmZl
Y3RpdmVVUkwoKTsKKyAgICBVUkwgZ2V0RWZmZWN0aXZlVVJMKCkgY29uc3Q7CiAgICAgQ1VSTGNv
ZGUgZ2V0UHJpbWFyeVBvcnQobG9uZyYpOwogICAgIENVUkxjb2RlIGdldFJlc3BvbnNlQ29kZShs
b25nJik7CiAgICAgQ1VSTGNvZGUgZ2V0Q29udGVudExlbmdodERvd25sb2FkKGxvbmcgbG9uZyYp
OwpAQCAtMjYwLDE2ICsyOTUsMTYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgY2xl
YXJVcmwoKTsKLSAgICB2b2lkIGNsZWFyQ29va2llTGlzdCgpOwogCiAgICAgc3RhdGljIGludCBl
eHBlY3RlZFNpemVPZkN1cmxPZmZUKCk7CiAKICAgICBDVVJMKiBtX2hhbmRsZSB7IG51bGxwdHIg
fTsKICAgICBjaGFyIG1fZXJyb3JCdWZmZXJbQ1VSTF9FUlJPUl9TSVpFXSB7IH07CisgICAgQ1VS
TGNvZGUgbV9lcnJvckNvZGU7CiAKICAgICBjaGFyKiBtX3VybCB7IG51bGxwdHIgfTsKLSAgICBz
dHJ1Y3QgY3VybF9zbGlzdCogbV9yZXF1ZXN0SGVhZGVycyB7IG51bGxwdHIgfTsKLSAgICBzdHJ1
Y3QgY3VybF9zbGlzdCogbV9jb29raWVMaXN0IHsgbnVsbHB0ciB9OworICAgIHZvaWQqIG1fcHJp
dmF0ZURhdGEgeyBudWxscHRyIH07CisgICAgQ3VybFNMaXN0IG1fcmVxdWVzdEhlYWRlcnM7CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybERvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsRG93bmxvYWQuY3BwCmluZGV4IDA5OGQ4YzQ0ZTk0Li4xZWY5Njg1MjA0MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5j
cHAKQEAgLTg2LDEzICs4NiwyNyBAQCB2b2lkIEN1cmxEb3dubG9hZDo6aW5pdChDdXJsRG93bmxv
YWRMaXN0ZW5lciogbGlzdGVuZXIsIFJlc291cmNlSGFuZGxlKiwgY29uc3QgUgogCiBib29sIEN1
cmxEb3dubG9hZDo6c3RhcnQoKQogewotICAgIHJlZigpOyAvLyBDdXJsSm9iTWFuYWdlciB3aWxs
IGNhbGwgZGVyZWYgd2hlbiB0aGUgZG93bmxvYWQgaGFzIGZpbmlzaGVkLgotICAgIHJldHVybiBD
dXJsSm9iTWFuYWdlcjo6c2luZ2xldG9uKCkuYWRkKG1fY3VybEhhbmRsZS5oYW5kbGUoKSk7Cisg
ICAgbV9qb2IgPSBDdXJsSm9iTWFuYWdlcjo6c2luZ2xldG9uKCkuYWRkKG1fY3VybEhhbmRsZSwg
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oQ3VybEpvYlJlc3VsdCByZXN1
bHQpIG11dGFibGUgeworICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgICAgICBjYXNlIEN1
cmxKb2JSZXN1bHQ6OkRvbmU6CisgICAgICAgICAgICBkaWRGaW5pc2goKTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgQ3VybEpvYlJlc3VsdDo6RXJyb3I6CisgICAgICAgICAg
ICBkaWRGYWlsKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEN1cmxKb2JS
ZXN1bHQ6OkNhbmNlbGxlZDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSk7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgQ3VybERvd25sb2FkOjpjYW5jZWwoKQogewot
ICAgIHJldHVybiBDdXJsSm9iTWFuYWdlcjo6c2luZ2xldG9uKCkucmVtb3ZlKG1fY3VybEhhbmRs
ZS5oYW5kbGUoKSk7CisgICAgQ3VybEpvYk1hbmFnZXI6OnNpbmdsZXRvbigpLmNhbmNlbChtX2pv
Yik7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFN0cmluZyBDdXJsRG93bmxvYWQ6OmdldFRlbXBQ
YXRoKCkgY29uc3QKQEAgLTE0NSwyOCArMTU5LDcgQEAgdm9pZCBDdXJsRG93bmxvYWQ6OndyaXRl
RGF0YVRvRmlsZShjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSkKIHZvaWQgQ3VybERvd25sb2Fk
OjphZGRIZWFkZXJzKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX211dGV4KTsKLQotICAgIG1fY3VybEhhbmRsZS5jbGVhclJlcXVlc3RI
ZWFkZXJzKCk7Ci0KLSAgICBpZiAocmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkuc2l6ZSgpID4g
MCkgewotICAgICAgICBIVFRQSGVhZGVyTWFwIGN1c3RvbUhlYWRlcnMgPSByZXF1ZXN0Lmh0dHBI
ZWFkZXJGaWVsZHMoKTsKLSAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gY3VzdG9tSGVhZGVycy5lbmQoKTsKLSAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGN1c3RvbUhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gaXQtPnZhbHVlOwotICAgICAgICAg
ICAgU3RyaW5nIGhlYWRlclN0cmluZyhpdC0+a2V5KTsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5p
c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSA7IHRvIHRlbGwgY3VybCB0
aGF0IHRoaXMgaGVhZGVyIGhhcyBhbiBlbXB0eSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBoZWFk
ZXJTdHJpbmcuYXBwZW5kKCI7Iik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBoZWFkZXJTdHJpbmcuYXBwZW5kKCI6ICIpOwotICAgICAgICAgICAgICAgIGhlYWRlclN0cmlu
Zy5hcHBlbmQodmFsdWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX2N1cmxIYW5k
bGUuYXBwZW5kUmVxdWVzdEhlYWRlcihoZWFkZXJTdHJpbmcpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgbV9jdXJsSGFuZGxlLmVuYWJsZVJlcXVlc3RIZWFkZXJzKCk7Ci0gICAgfQorICAgIG1fY3Vy
bEhhbmRsZS5hcHBlbmRSZXF1ZXN0SGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSk7
CiB9CiAKIHZvaWQgQ3VybERvd25sb2FkOjpkaWRSZWNlaXZlSGVhZGVyKGNvbnN0IFN0cmluZyYg
aGVhZGVyKQpAQCAtMjAxLDkgKzE5NCw3IEBAIHZvaWQgQ3VybERvd25sb2FkOjpkaWRSZWNlaXZl
RGF0YSh2b2lkKiBkYXRhLCBpbnQgc2l6ZSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211
dGV4KTsKIAotICAgIFJlZlB0cjxDdXJsRG93bmxvYWQ+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0K
LSAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBzaXplLCBwcm90ZWN0ZWRUaGlzXSB7CisgICAg
Y2FsbE9uTWFpblRocmVhZChbdGhpcywgc2l6ZSwgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpXSB7CiAgICAgICAgIGRpZFJlY2VpdmVEYXRhT2ZMZW5ndGgoc2l6ZSk7CiAgICAgfSk7CiAK
QEAgLTIzNCwxMSArMjI1LDEyIEBAIHZvaWQgQ3VybERvd25sb2FkOjpkaWRGaW5pc2goKQogdm9p
ZCBDdXJsRG93bmxvYWQ6OmRpZEZhaWwoKQogewogICAgIGNsb3NlRmlsZSgpOworICAgIHsKKyAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CiAKLSAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX211dGV4KTsKLQotICAgIGlmIChtX2RlbGV0ZXNGaWxlVXBvbkZhaWx1cmUpCi0gICAgICAg
IGRlbGV0ZUZpbGUobV90ZW1wUGF0aCk7CisgICAgICAgIGlmIChtX2RlbGV0ZXNGaWxlVXBvbkZh
aWx1cmUpCisgICAgICAgICAgICBkZWxldGVGaWxlKG1fdGVtcFBhdGgpOworICAgIH0KIAogICAg
IGlmIChtX2xpc3RlbmVyKQogICAgICAgICBtX2xpc3RlbmVyLT5kaWRGYWlsKCk7CkBAIC0yOTIs
MjkgKzI4NCw2IEBAIHZvaWQgQ3VybERvd25sb2FkOjpyZWNlaXZlZFJlc3BvbnNlQ2FsbGJhY2so
Q3VybERvd25sb2FkKiBkb3dubG9hZCkKICAgICAgICAgZG93bmxvYWQtPmRpZFJlY2VpdmVSZXNw
b25zZSgpOwogfQogCi1DdXJsSm9iQWN0aW9uIEN1cmxEb3dubG9hZDo6aGFuZGxlQ3VybE1zZyhD
VVJMTXNnKiBtc2cpCi17Ci0gICAgc3dpdGNoIChtc2ctPm1zZykgewotICAgIGNhc2UgQ1VSTE1T
R19ET05FOiB7Ci0gICAgICAgIGlmIChtc2ctPmRhdGEucmVzdWx0ID09IENVUkxFX09LKSB7Ci0g
ICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSB7Ci0gICAgICAgICAgICAgICAgZGlk
RmluaXNoKCk7Ci0gICAgICAgICAgICAgICAgZGVyZWYoKTsgLy8gVGhpcyBtYXRjaGVzIHRoZSBy
ZWYoKSBpbiBDdXJsRG93bmxvYWQ6OnN0YXJ0KCkuCi0gICAgICAgICAgICB9KTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKLSAgICAgICAg
ICAgICAgICBkaWRGYWlsKCk7Ci0gICAgICAgICAgICAgICAgZGVyZWYoKTsgLy8gVGhpcyBtYXRj
aGVzIHRoZSByZWYoKSBpbiBDdXJsRG93bmxvYWQ6OnN0YXJ0KCkuCi0gICAgICAgICAgICB9KTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gQ3VybEpvYkFjdGlvbjo6RmluaXNoZWQ7Ci0gICAg
fQotICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgcmV0dXJuIEN1cmxKb2JBY3Rpb246Ok5vbmU7Ci0g
ICAgfQotICAgIH0KLX0KLQogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaAppbmRleCA2NzYyNjhhN2NhYi4uM2Rh
NTRhZTc4MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsRG93bmxvYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybERvd25sb2FkLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBkaWRGYWlsKCkgeyB9CiB9OwogCi1jbGFzcyBDdXJsRG93bmxvYWQgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8Q3VybERvd25sb2FkPiwgcHVibGljIEN1cmxKb2IgeworY2xhc3Mg
Q3VybERvd25sb2FkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEN1cmxEb3dubG9hZD4g
ewogcHVibGljOgogICAgIEN1cmxEb3dubG9hZCgpOwogICAgIH5DdXJsRG93bmxvYWQoKTsKQEAg
LTcyLDggKzcyLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXREZXN0aW5hdGlvbihjb25zdCBT
dHJpbmcmIGRlc3RpbmF0aW9uKSB7IG1fZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsgfQogCi0g
ICAgdmlydHVhbCBDdXJsSm9iQWN0aW9uIGhhbmRsZUN1cmxNc2coQ1VSTE1zZyopOwotCiBwcml2
YXRlOgogICAgIHZvaWQgY2xvc2VGaWxlKCk7CiAgICAgdm9pZCBtb3ZlRmlsZVRvRGVzdGluYXRp
b24oKTsKQEAgLTEwMCw3ICs5OCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcmVjZWl2
ZWRSZXNwb25zZUNhbGxiYWNrKEN1cmxEb3dubG9hZCopOwogCiAgICAgQ3VybEhhbmRsZSBtX2N1
cmxIYW5kbGU7Ci0KKyAgICBDdXJsSm9iVGlja2V0IG1fam9iOwogICAgIFN0cmluZyBtX3RlbXBQ
YXRoOwogICAgIFN0cmluZyBtX2Rlc3RpbmF0aW9uOwogICAgIFdlYkNvcmU6OlBsYXRmb3JtRmls
ZUhhbmRsZSBtX3RlbXBIYW5kbGUgeyBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFn
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5h
Z2VyLmNwcAppbmRleCA0MmNmOTAwMTc1Zi4uN2U5NDM2N2I0OTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsSm9iTWFuYWdlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmNwcApA
QCAtMjksNiArMjksNyBAQAogI2lmIFVTRShDVVJMKQogI2luY2x1ZGUgIkN1cmxKb2JNYW5hZ2Vy
LmgiCiAKKyNpbmNsdWRlIDxpdGVyYXRvcj4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMzYsNjggKzM3LDE0OCBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DdXJsSm9iTWFu
YWdlcjo6Q3VybEpvYk1hbmFnZXIoKQoteworLyoKKyAqIEN1cmxKb2JMaXN0IGlzIHVzZWQgb25s
eSBpbiBiYWNrZ3JvdW5kIHNvIHRoYXQgbm8gbmVlZCB0byBtYW5hZ2UgbXV0ZXgKKyAqLworY2xh
c3MgQ3VybEpvYkxpc3QgOiBwdWJsaWMgQ3VybE11bHRpSGFuZGxlIHsKKyAgICB1c2luZyBQcmVk
aWNhdGUgPSBXVEY6OkZ1bmN0aW9uPGJvb2woY29uc3QgQ3VybEpvYiYpPjsKKyAgICB1c2luZyBB
Y3Rpb24gPSBXVEY6OkZ1bmN0aW9uPHZvaWQoQ3VybEpvYiYpPjsKKyAgICB1c2luZyBKb2JNYXAg
PSBIYXNoTWFwPEN1cmxKb2JUaWNrZXQsIEN1cmxKb2I+OwogCi19CitwdWJsaWM6CisgICAgdm9p
ZCBhcHBlbmQoQ3VybEpvYiYgam9iKQorICAgIHsKKyAgICAgICAgQ3VybEhhbmRsZSogY3VybCA9
IGpvYi5jdXJsSGFuZGxlKCk7CisKKyAgICAgICAgQ1VSTE1jb2RlIHJldHZhbCA9IGFkZEhhbmRs
ZShjdXJsLT5oYW5kbGUoKSk7CisgICAgICAgICAgICAvLyBARklYTUUgZXJyb3IgbG9nZ2luZwor
ICAgICAgICBpZiAocmV0dmFsID09IENVUkxNX09LKQorICAgICAgICAgICAgbV9qb2JzLnNldChq
b2IudGlja2V0KCksIFdURk1vdmUoam9iKSk7CisgICAgfQorCisgICAgdm9pZCBjYW5jZWwoQ3Vy
bEpvYlRpY2tldCB0aWNrZXQpCisgICAgeworICAgICAgICBjb21wbGV0ZSh0aWNrZXQsIFtdKGF1
dG8mJiBqb2IpIHsgam9iLmNhbmNlbCgpOyB9KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBsZXRl
KEN1cmxKb2JUaWNrZXQgdGlja2V0LCBBY3Rpb24gYWN0aW9uKQorICAgIHsKKyAgICAgICAgYXV0
byBmb3VuZCA9IG1fam9icy5maW5kKHRpY2tldCk7CisgICAgICAgIGlmIChmb3VuZCAhPSBtX2pv
YnMuZW5kKCkpIHsKKyAgICAgICAgICAgIGF1dG8gam9iID0gV1RGTW92ZShmb3VuZC0+dmFsdWUp
OworCisgICAgICAgICAgICByZW1vdmVIYW5kbGUoam9iLmN1cmxIYW5kbGUoKS0+aGFuZGxlKCkp
OworICAgICAgICAgICAgYWN0aW9uKGpvYik7CisKKyAgICAgICAgICAgIG1fam9icy5yZW1vdmUo
Zm91bmQpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9qb2JzLmlzRW1wdHkoKTsgfQorCisgICAgYm9vbCB3aXRoSm9iKEN1cmxKb2JUaWNr
ZXQgdGlja2V0LCBXVEY6OkZ1bmN0aW9uPHZvaWQoSm9iTWFwOjppdGVyYXRvcik+IGNhbGxiYWNr
KQorICAgIHsKKyAgICAgICAgYXV0byBmb3VuZCA9IG1fam9icy5maW5kKHRpY2tldCk7CisgICAg
ICAgIGlmIChmb3VuZCA9PSBtX2pvYnMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICBjYWxsYmFjayhmb3VuZCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGJvb2wgd2l0aEN1cmxIYW5kbGUoQ3VybEpvYlRpY2tldCB0aWNrZXQs
IFdURjo6RnVuY3Rpb248dm9pZChDdXJsSGFuZGxlJik+IGNhbGxiYWNrKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHdpdGhKb2IodGlja2V0LCBbJmNhbGxiYWNrXShKb2JNYXA6Oml0ZXJhdG9yIGl0
KSB7CisgICAgICAgICAgICBjYWxsYmFjaygqaXQtPnZhbHVlLmN1cmxIYW5kbGUoKSk7CisgICAg
ICAgIH0pOworICAgIH0KIAotQ3VybEpvYk1hbmFnZXI6On5DdXJsSm9iTWFuYWdlcigpCitwcml2
YXRlOgorICAgIEpvYk1hcCBtX2pvYnM7Cit9OworCit2b2lkIEN1cmxKb2I6Omludm9rZShDdXJs
Sm9iUmVzdWx0IHJlc3VsdCkKIHsKLSAgICBzdG9wVGhyZWFkKCk7CisgICAgY2FsbE9uTWFpblRo
cmVhZChbam9iID0gV1RGTW92ZShtX2pvYiksIHJlc3VsdF0geworICAgICAgICBqb2IocmVzdWx0
KTsKKyAgICB9KTsKIH0KIAotYm9vbCBDdXJsSm9iTWFuYWdlcjo6YWRkKENVUkwqIGN1cmxIYW5k
bGUpCitDdXJsSm9iVGlja2V0IEN1cmxKb2JNYW5hZ2VyOjphZGQoQ3VybEhhbmRsZSYgY3VybCwg
Q2FsbGJhY2sgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAorICAg
IEN1cmxKb2JUaWNrZXQgdGlja2V0ID0gc3RhdGljX2Nhc3Q8Q3VybEpvYlRpY2tldD4oY3VybC5o
YW5kbGUoKSk7CisKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOwot
ICAgICAgICBtX3BlbmRpbmdIYW5kbGVMaXN0LmFwcGVuZChjdXJsSGFuZGxlKTsKKworICAgICAg
ICBpZiAoaXNBY3RpdmVKb2IodGlja2V0KSkKKyAgICAgICAgICAgIHJldHVybiB0aWNrZXQ7CisK
KworICAgICAgICBtX3BlbmRpbmdKb2JzLmFwcGVuZChDdXJsSm9iIHsgJmN1cmwsIFdURk1vdmUo
Y2FsbGJhY2spIH0pOworICAgICAgICBtX2FjdGl2ZUpvYnMuYWRkKHRpY2tldCk7CiAgICAgfQog
CiAgICAgc3RhcnRUaHJlYWRJZk5lZWRlZCgpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHRpY2tldDsKIH0KIAotYm9vbCBDdXJsSm9iTWFuYWdlcjo6cmVtb3ZlKENVUkwqIGN1cmxI
YW5kbGUpCitib29sIEN1cmxKb2JNYW5hZ2VyOjpjYW5jZWwoQ3VybEpvYlRpY2tldCBqb2IpCiB7
Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKIAotICAgIG1fcmVtb3ZlZEhhbmRsZUxpc3QuYXBwZW5kKGN1cmxIYW5kbGUpOworICAg
IGlmIChtX3J1blRocmVhZCkgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsK
KworICAgICAgICBpZiAoIWlzQWN0aXZlSm9iKGpvYikpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBtX2NhbmNlbGxlZFRpY2tldHMuYXBwZW5kKGpvYik7Cisg
ICAgICAgIG1fYWN0aXZlSm9icy5yZW1vdmUoam9iKTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotaW50IEN1cmxKb2JNYW5hZ2VyOjpnZXRBY3RpdmVDb3VudCgpIGNvbnN0Cit2b2lk
IEN1cmxKb2JNYW5hZ2VyOjpjYWxsT25Kb2JUaHJlYWQoV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYg
Y2FsbGJhY2spCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Ci0gICAgcmV0dXJu
IG1fYWN0aXZlSGFuZGxlTGlzdC5zaXplKCk7Ci19CisgICAgTG9ja0hvbGRlciBsb2NrZXIgeyBt
X211dGV4IH07CiAKLWludCBDdXJsSm9iTWFuYWdlcjo6Z2V0UGVuZGluZ0NvdW50KCkgY29uc3QK
LXsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsKLSAgICByZXR1cm4gbV9wZW5kaW5n
SGFuZGxlTGlzdC5zaXplKCk7CisgICAgbV90YXNrUXVldWUuYXBwZW5kKHN0ZDo6bWFrZV91bmlx
dWU8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PihXVEZNb3ZlKGNhbGxiYWNrKSkpOwogfQogCiB2b2lk
IEN1cmxKb2JNYW5hZ2VyOjpzdGFydFRocmVhZElmTmVlZGVkKCkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogCi0gICAgaWYgKCFydW5UaHJlYWQoKSkgeworICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fbXV0ZXgpOworICAgIGlmICghbV9ydW5UaHJlYWQpIHsKICAgICAgICAgaWYgKG1f
dGhyZWFkKQogICAgICAgICAgICAgbV90aHJlYWQtPndhaXRGb3JDb21wbGV0aW9uKCk7Ci0gICAg
ICAgIHNldFJ1blRocmVhZCh0cnVlKTsKKworICAgICAgICBtX3J1blRocmVhZCA9IHRydWU7CiAg
ICAgICAgIG1fdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoImN1cmxUaHJlYWQiLCBbdGhpc10gewog
ICAgICAgICAgICAgd29ya2VyVGhyZWFkKCk7CiAgICAgICAgIH0pOwogICAgIH0KIH0KIAordm9p
ZCBDdXJsSm9iTWFuYWdlcjo6c3RvcFRocmVhZElmTm9Nb3JlSm9iUnVubmluZygpCit7CisgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4
KTsKKworICAgIGlmIChtX3BlbmRpbmdKb2JzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9ydW5UaHJl
YWQgPSBmYWxzZTsKK30KKwogdm9pZCBDdXJsSm9iTWFuYWdlcjo6c3RvcFRocmVhZCgpCiB7Ci0g
ICAgc2V0UnVuVGhyZWFkKGZhbHNlKTsKKyAgICBtX3J1blRocmVhZCA9IGZhbHNlOwogCiAgICAg
aWYgKG1fdGhyZWFkKSB7CiAgICAgICAgIG1fdGhyZWFkLT53YWl0Rm9yQ29tcGxldGlvbigpOwpA
QCAtMTA1LDY0ICsxODYsNDEgQEAgdm9pZCBDdXJsSm9iTWFuYWdlcjo6c3RvcFRocmVhZCgpCiAg
ICAgfQogfQogCi12b2lkIEN1cmxKb2JNYW5hZ2VyOjpzdG9wVGhyZWFkSWZJZGxlKCkKK2Jvb2wg
Q3VybEpvYk1hbmFnZXI6OnVwZGF0ZUpvYnMoQ3VybEpvYkxpc3QmIGpvYnMpCiB7Ci0gICAgaWYg
KCFnZXRBY3RpdmVDb3VudCgpICYmICFnZXRQZW5kaW5nQ291bnQoKSkKLSAgICAgICAgc2V0UnVu
VGhyZWFkKGZhbHNlKTsKLX0KLQotdm9pZCBDdXJsSm9iTWFuYWdlcjo6dXBkYXRlSGFuZGxlTGlz
dCgpCi17Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7Ci0KLSAgICAvLyBSZW1vdmUg
Y3VybCBlYXN5IGhhbmRsZXMgZnJvbSBtdWx0aSBsaXN0IAotICAgIGludCBzaXplID0gbV9yZW1v
dmVkSGFuZGxlTGlzdC5zaXplKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKysp
IHsKLSAgICAgICAgcmVtb3ZlRnJvbUN1cmwobV9yZW1vdmVkSGFuZGxlTGlzdFswXSk7Ci0gICAg
ICAgIG1fcmVtb3ZlZEhhbmRsZUxpc3QucmVtb3ZlKDApOwotICAgIH0KKyAgICBBU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKIAotICAgIC8vIEFkZCBwZW5kaW5nIGN1cmwgZWFzeSBoYW5kbGVzIHRv
IG11bHRpIGxpc3QgCi0gICAgc2l6ZSA9IG1fcGVuZGluZ0hhbmRsZUxpc3Quc2l6ZSgpOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIGFkZFRvQ3VybChtX3Bl
bmRpbmdIYW5kbGVMaXN0WzBdKTsKLSAgICAgICAgbV9wZW5kaW5nSGFuZGxlTGlzdC5yZW1vdmUo
MCk7Ci0gICAgfQotfQorICAgIFZlY3RvcjxDdXJsSm9iPiBwZW5kaW5nSm9iczsKKyAgICBWZWN0
b3I8Q3VybEpvYlRpY2tldD4gY2FuY2VsbGVkVGlja2V0czsKKyAgICB7CisgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAoIW1fcnVuVGhyZWFkKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi1ib29sIEN1cmxKb2JNYW5hZ2VyOjphZGRUb0N1cmwoQ1VS
TCogY3VybEhhbmRsZSkKLXsKLSAgICBDVVJMTWNvZGUgcmV0dmFsID0gbV9jdXJsTXVsdGlIYW5k
bGUuYWRkSGFuZGxlKGN1cmxIYW5kbGUpOwotICAgIGlmIChyZXR2YWwgPT0gQ1VSTE1fT0spIHsK
LSAgICAgICAgbV9hY3RpdmVIYW5kbGVMaXN0LmFwcGVuZChjdXJsSGFuZGxlKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIHBlbmRpbmdKb2JzID0gV1RGTW92ZShtX3BlbmRpbmdKb2Jz
KTsKKyAgICAgICAgY2FuY2VsbGVkVGlja2V0cyA9IFdURk1vdmUobV9jYW5jZWxsZWRUaWNrZXRz
KTsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQogCi1ib29sIEN1cmxKb2JNYW5hZ2VyOjpy
ZW1vdmVGcm9tQ3VybChDVVJMKiBjdXJsSGFuZGxlKQotewotICAgIGludCBoYW5kbGVQb3MgPSBt
X2FjdGl2ZUhhbmRsZUxpc3QuZmluZChjdXJsSGFuZGxlKTsKKyAgICBmb3IgKGF1dG8mIGpvYiA6
IHBlbmRpbmdKb2JzKQorICAgICAgICBqb2JzLmFwcGVuZChqb2IpOwogCi0gICAgaWYgKGhhbmRs
ZVBvcyA8IDApCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGZvciAoYXV0byYgdGlja2V0IDog
Y2FuY2VsbGVkVGlja2V0cykKKyAgICAgICAgam9icy5jYW5jZWwodGlja2V0KTsKIAotICAgIENV
UkxNY29kZSByZXR2YWwgPSBtX2N1cmxNdWx0aUhhbmRsZS5yZW1vdmVIYW5kbGUoY3VybEhhbmRs
ZSk7Ci0gICAgaWYgKHJldHZhbCA9PSBDVVJMTV9PSykgewotICAgICAgICBtX2FjdGl2ZUhhbmRs
ZUxpc3QucmVtb3ZlKGhhbmRsZVBvcyk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIGZvciAo
YXV0byYgY2FsbGJhY2sgOiBtX3Rhc2tRdWV1ZS50YWtlQWxsTWVzc2FnZXMoKSkgeworICAgICAg
ICAoKmNhbGxiYWNrKSgpOwogICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogdm9pZCBDdXJsSm9iTWFuYWdlcjo6d29ya2VyVGhyZWFkKCkKIHsKICAgICBB
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgIHdoaWxlIChydW5UaHJlYWQoKSkgewotCi0g
ICAgICAgIHVwZGF0ZUhhbmRsZUxpc3QoKTsKKyAgICBDdXJsSm9iTGlzdCBqb2JzOwogCisgICAg
d2hpbGUgKHVwZGF0ZUpvYnMoam9icykpIHsKICAgICAgICAgLy8gUmV0cnkgJ3NlbGVjdCcgaWYg
aXQgd2FzIGludGVycnVwdGVkIGJ5IGEgcHJvY2VzcyBzaWduYWwuCiAgICAgICAgIGludCByYyA9
IDA7CiAgICAgICAgIGRvIHsKQEAgLTE3Nyw3ICsyMzUsNyBAQCB2b2lkIEN1cmxKb2JNYW5hZ2Vy
Ojp3b3JrZXJUaHJlYWQoKQogICAgICAgICAgICAgdGltZW91dC50dl9zZWMgPSAwOwogICAgICAg
ICAgICAgdGltZW91dC50dl91c2VjID0gc2VsZWN0VGltZW91dE1TICogMTAwMDsgLy8gc2VsZWN0
IHdhaXRzIG1pY3Jvc2Vjb25kcwogCi0gICAgICAgICAgICBtX2N1cmxNdWx0aUhhbmRsZS5nZXRG
ZFNldChmZHJlYWQsIGZkd3JpdGUsIGZkZXhjZXAsIG1heGZkKTsKKyAgICAgICAgICAgIGpvYnMu
Z2V0RmRTZXQoZmRyZWFkLCBmZHdyaXRlLCBmZGV4Y2VwLCBtYXhmZCk7CiAKICAgICAgICAgICAg
IC8vIFdoZW4gdGhlIDMgZmlsZSBkZXNjcmlwdG9ycyBhcmUgZW1wdHksIHdpbnNvY2sgd2lsbCBy
ZXR1cm4gLTEKICAgICAgICAgICAgIC8vIGFuZCBiYWlsIG91dCwgc3RvcHBpbmcgdGhlIGZpbGUg
ZG93bmxvYWQuIFNvIG1ha2Ugc3VyZSB3ZQpAQCAtMTg2LDI2ICsyNDQsNDkgQEAgdm9pZCBDdXJs
Sm9iTWFuYWdlcjo6d29ya2VyVGhyZWFkKCkKICAgICAgICAgICAgICAgICByYyA9IDo6c2VsZWN0
KG1heGZkICsgMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmdGltZW91dCk7CiAgICAg
ICAgIH0gd2hpbGUgKHJjID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKIAotICAgICAgICBpbnQg
cnVubmluZ0hhbmRsZXMgPSAwOwotICAgICAgICB3aGlsZSAobV9jdXJsTXVsdGlIYW5kbGUucGVy
Zm9ybShydW5uaW5nSGFuZGxlcykgPT0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNKSB7IH0KLQot
ICAgICAgICBpbnQgbWVzc2FnZXNJblF1ZXVlID0gMDsKLSAgICAgICAgQ1VSTE1zZyogbXNnID0g
bV9jdXJsTXVsdGlIYW5kbGUucmVhZEluZm8obWVzc2FnZXNJblF1ZXVlKTsKLSAgICAgICAgaWYg
KCFtc2cpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotCi0gICAgICAgIEN1cmxKb2IqIGpvYiA9
IG51bGxwdHI7Ci0gICAgICAgIENVUkxjb2RlIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKG1zZy0+
ZWFzeV9oYW5kbGUsIENVUkxJTkZPX1BSSVZBVEUsICZqb2IpOwotICAgICAgICBVTlVTRURfUEFS
QU0oZXJyKTsKLSAgICAgICAgQVNTRVJUKGpvYik7Ci0KLSAgICAgICAgQ3VybEpvYkFjdGlvbiBh
Y3Rpb24gPSBqb2ItPmhhbmRsZUN1cmxNc2cobXNnKTsKLQotICAgICAgICBpZiAoYWN0aW9uID09
IEN1cmxKb2JBY3Rpb246OkZpbmlzaGVkKQotICAgICAgICAgICAgcmVtb3ZlRnJvbUN1cmwobXNn
LT5lYXN5X2hhbmRsZSk7Ci0KLSAgICAgICAgc3RvcFRocmVhZElmSWRsZSgpOworICAgICAgICBp
bnQgYWN0aXZlQ291bnQgPSAwOworICAgICAgICB3aGlsZSAoam9icy5wZXJmb3JtKGFjdGl2ZUNv
dW50KSA9PSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0pIHsgfQorCisgICAgICAgIC8vIGNoZWNr
IHRoZSBjdXJsIG1lc3NhZ2VzIGluZGljYXRpbmcgY29tcGxldGVkIHRyYW5zZmVycworICAgICAg
ICAvLyBhbmQgZnJlZSB0aGVpciByZXNvdXJjZXMKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgICAgIGludCBtZXNzYWdlc0luUXVldWUgPSAwOworICAgICAgICAgICAgQ1VSTE1zZyog
bXNnID0gam9icy5yZWFkSW5mbyhtZXNzYWdlc0luUXVldWUpOworICAgICAgICAgICAgaWYgKCFt
c2cpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmIChtc2ctPm1zZyA9
PSBDVVJMTVNHX0RPTkUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRpY2tldCA9IHN0YXRpY19j
YXN0PEN1cmxKb2JUaWNrZXQ+KG1zZy0+ZWFzeV9oYW5kbGUpOworICAgICAgICAgICAgICAgIENV
Ukxjb2RlIHJlc3VsdCA9IG1zZy0+ZGF0YS5yZXN1bHQ7CisKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICAg
ICAgICAgICAgICBtX2FjdGl2ZUpvYnMucmVtb3ZlKHRpY2tldCk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgam9icy5jb21wbGV0ZSh0aWNrZXQsIFtyZXN1bHRdKGF1dG8m
IGpvYikgeworICAgICAgICAgICAgICAgICAgICBqb2IuY3VybEhhbmRsZSgpLT5zZXRFcnJvckNv
ZGUocmVzdWx0KTsKKworICAgICAgICAgICAgICAgICAgICBib29sIGRvbmUgPSByZXN1bHQgPT0g
Q1VSTEVfT0s7CisgICAgICAgICAgICAgICAgICAgIGlmIChkb25lKQorICAgICAgICAgICAgICAg
ICAgICAgICAgam9iLmZpbmlzaGVkKCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMIHVybCA9IGpvYi5jdXJsSGFuZGxlKCktPmdldEVmZmVj
dGl2ZVVSTCgpOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiQ3VybCBFUlJPUiBmb3IgdXJsPSclcycsIGVycm9yOiAnJXMnXG4iLCB1cmwu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgam9iLmN1cmxIYW5kbGUoKS0+ZXJyb3JEZXNjcmlwdGlv
bigpLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICBqb2Iu
ZXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoam9icy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHN0
b3BUaHJlYWRJZk5vTW9yZUpvYlJ1bm5pbmcoKTsKKyAgICAgICAgICAgIGlmICghbV9ydW5UaHJl
YWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsSm9iTWFuYWdl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2Vy
LmgKaW5kZXggZmMyZjBmODQwYTEuLjBmNDMxYzRiNDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuaApAQCAtMjgsMTEg
KzI4LDE2IEBACiAKICNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgogCisjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5o
PgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBQTEFURk9STShXSU4pCisjaWYgT1Mo
V0lORE9XUykKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8d2luc29jazIuaD4KICNl
bmRpZgpAQCAtNDAsNTkgKzQ1LDg2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBj
bGFzcyBDdXJsSm9iQWN0aW9uIHsgTm9uZSwgRmluaXNoZWQgfTsKK2VudW0gY2xhc3MgQ3VybEpv
YlJlc3VsdCB7IERvbmUsIEVycm9yLCBDYW5jZWxsZWQgfTsKK3VzaW5nIEN1cmxKb2JUaWNrZXQg
PSB2b2lkKjsKK3VzaW5nIEN1cmxKb2JDYWxsYmFjayA9IFdURjo6RnVuY3Rpb248dm9pZChDdXJs
Sm9iUmVzdWx0KT47Cit1c2luZyBDdXJsSm9iVGFzayA9IFdURjo6RnVuY3Rpb248dm9pZChDdXJs
SGFuZGxlJik+OworCitjbGFzcyBDdXJsSm9iTGlzdDsKIAogY2xhc3MgQ3VybEpvYiB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VybEpvYik7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCBDdXJs
Sm9iQWN0aW9uIGhhbmRsZUN1cmxNc2coQ1VSTE1zZyopID0gMDsKKyAgICBDdXJsSm9iKCkgeyB9
CisgICAgQ3VybEpvYihDdXJsSGFuZGxlKiBjdXJsLCBDdXJsSm9iQ2FsbGJhY2sgam9iKQorICAg
ICAgICA6IG1fY3VybCB7IGN1cmwgfSwgbV9qb2IgeyBXVEZNb3ZlKGpvYikgfSB7IH0KKyAgICBD
dXJsSm9iKEN1cmxKb2ImJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fY3VybCA9IG90aGVyLm1f
Y3VybDsKKyAgICAgICAgb3RoZXIubV9jdXJsID0gbnVsbHB0cjsKKyAgICAgICAgbV9qb2IgPSBX
VEZNb3ZlKG90aGVyLm1fam9iKTsKKyAgICB9CisgICAgfkN1cmxKb2IoKSB7IH0KKworICAgIEN1
cmxKb2ImIG9wZXJhdG9yPShDdXJsSm9iJiYgb3RoZXIpCisgICAgeworICAgICAgICBtX2N1cmwg
PSBvdGhlci5tX2N1cmw7CisgICAgICAgIG90aGVyLm1fY3VybCA9IG51bGxwdHI7CisgICAgICAg
IG1fam9iID0gV1RGTW92ZShvdGhlci5tX2pvYik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CisKKyAgICBDdXJsSGFuZGxlKiBjdXJsSGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJs
OyB9CisgICAgQ3VybEpvYlRpY2tldCB0aWNrZXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxDdXJsSm9iVGlja2V0PihtX2N1cmwtPmhhbmRsZSgpKTsgfQorCisgICAgdm9pZCBmaW5pc2hl
ZCgpIHsgaW52b2tlKEN1cmxKb2JSZXN1bHQ6OkRvbmUpOyB9CisgICAgdm9pZCBlcnJvcigpIHsg
aW52b2tlKEN1cmxKb2JSZXN1bHQ6OkVycm9yKTsgfQorICAgIHZvaWQgY2FuY2VsKCkgeyBpbnZv
a2UoQ3VybEpvYlJlc3VsdDo6Q2FuY2VsbGVkKTsgfQorCitwcml2YXRlOgorICAgIEN1cmxIYW5k
bGUqIG1fY3VybDsKKyAgICBDdXJsSm9iQ2FsbGJhY2sgbV9qb2I7CisKKyAgICB2b2lkIGludm9r
ZShDdXJsSm9iUmVzdWx0KTsKIH07CiAKKwogY2xhc3MgQ3VybEpvYk1hbmFnZXIgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEN1cmxKb2JNYW5hZ2VyKTsKKyAgICB1c2luZyBDYWxsYmFjayA9
IEN1cmxKb2JDYWxsYmFjazsKKwogcHVibGljOgorCiAgICAgc3RhdGljIEN1cmxKb2JNYW5hZ2Vy
JiBzaW5nbGV0b24oKQogICAgIHsKLSAgICAgICAgLy8gU2luY2UgaXQncyBhIHN0YXRpYyB2YXJp
YWJsZSwgaWYgdGhlIGNsYXNzIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCwKLSAgICAgICAgLy8g
SXQgd29uJ3QgYmUgY3JlYXRlZCBhZ2Fpbi4KLSAgICAgICAgLy8gQW5kIGl0ICoqaXMqKiB0aHJl
YWQtc2FmZSBpbiBDKysxMS4KLQogICAgICAgICBzdGF0aWMgQ3VybEpvYk1hbmFnZXIgc2hhcmVk
OwogICAgICAgICByZXR1cm4gc2hhcmVkOwogICAgIH0KIAotICAgIEN1cmxKb2JNYW5hZ2VyKCk7
Ci0gICAgdmlydHVhbCB+Q3VybEpvYk1hbmFnZXIoKTsKKyAgICBDdXJsSm9iTWFuYWdlcigpID0g
ZGVmYXVsdDsKKyAgICB+Q3VybEpvYk1hbmFnZXIoKSB7IHN0b3BUaHJlYWQoKTsgfQogCi0gICAg
Ym9vbCBhZGQoQ1VSTCogY3VybEhhbmRsZSk7Ci0gICAgYm9vbCByZW1vdmUoQ1VSTCogY3VybEhh
bmRsZSk7Ci0KLSAgICBpbnQgZ2V0QWN0aXZlQ291bnQoKSBjb25zdDsKLSAgICBpbnQgZ2V0UGVu
ZGluZ0NvdW50KCkgY29uc3Q7CisgICAgQ3VybEpvYlRpY2tldCBhZGQoQ3VybEhhbmRsZSYsIENh
bGxiYWNrKTsKKyAgICBib29sIGNhbmNlbChDdXJsSm9iVGlja2V0KTsKKyAgICB2b2lkIGNhbGxP
bkpvYlRocmVhZChXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJik7CiAKIHByaXZhdGU6CiAgICAgdm9p
ZCBzdGFydFRocmVhZElmTmVlZGVkKCk7CisgICAgdm9pZCBzdG9wVGhyZWFkSWZOb01vcmVKb2JS
dW5uaW5nKCk7CiAgICAgdm9pZCBzdG9wVGhyZWFkKCk7Ci0gICAgdm9pZCBzdG9wVGhyZWFkSWZJ
ZGxlKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZUhhbmRsZUxpc3QoKTsKLQotICAgIGJvb2wgcnVuVGhy
ZWFkKCkgY29uc3QgeyBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsgcmV0dXJuIG1fcnVuVGhy
ZWFkOyB9Ci0gICAgdm9pZCBzZXRSdW5UaHJlYWQoYm9vbCBydW5UaHJlYWQpIHsgTG9ja0hvbGRl
ciBsb2NrZXIobV9tdXRleCk7IG1fcnVuVGhyZWFkID0gcnVuVGhyZWFkOyB9CiAKLSAgICBib29s
IGFkZFRvQ3VybChDVVJMKiBjdXJsSGFuZGxlKTsKLSAgICBib29sIHJlbW92ZUZyb21DdXJsKENV
UkwqIGN1cmxIYW5kbGUpOworICAgIGJvb2wgdXBkYXRlSm9icyhDdXJsSm9iTGlzdCYgam9icyk7
CisgICAgYm9vbCBpc0FjdGl2ZUpvYihDdXJsSm9iVGlja2V0IGpvYikgY29uc3QgeyByZXR1cm4g
bV9hY3RpdmVKb2JzLmNvbnRhaW5zKGpvYik7IH0KIAogICAgIHZvaWQgd29ya2VyVGhyZWFkKCk7
CiAKICAgICBSZWZQdHI8VGhyZWFkPiBtX3RocmVhZDsKLSAgICBWZWN0b3I8Q1VSTCo+IG1fcGVu
ZGluZ0hhbmRsZUxpc3Q7Ci0gICAgVmVjdG9yPENVUkwqPiBtX2FjdGl2ZUhhbmRsZUxpc3Q7Ci0g
ICAgVmVjdG9yPENVUkwqPiBtX3JlbW92ZWRIYW5kbGVMaXN0OworICAgIFZlY3RvcjxDdXJsSm9i
PiBtX3BlbmRpbmdKb2JzOworICAgIEhhc2hTZXQ8Q3VybEpvYlRpY2tldD4gbV9hY3RpdmVKb2Jz
OworICAgIFZlY3RvcjxDdXJsSm9iVGlja2V0PiBtX2NhbmNlbGxlZFRpY2tldHM7CisgICAgTWVz
c2FnZVF1ZXVlPFdURjo6RnVuY3Rpb248dm9pZCgpPj4gbV90YXNrUXVldWU7CiAgICAgbXV0YWJs
ZSBMb2NrIG1fbXV0ZXg7Ci0gICAgYm9vbCBtX3J1blRocmVhZCB7IGZhbHNlIH07Ci0KLSAgICBD
dXJsTXVsdGlIYW5kbGUgbV9jdXJsTXVsdGlIYW5kbGU7Ci0KLSAgICBmcmllbmQgY2xhc3MgQ3Vy
bEpvYjsKKyAgICBib29sIG1fcnVuVGhyZWFkIHsgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUVycm9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VFcnJvci5oCmluZGV4IDAw
M2Y5YjY5NTAyLi5lNWRhZGQyYWFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL1Jlc291cmNlRXJyb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VFcnJvci5oCkBAIC0yMyw5ICsyMyw5IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFJlc291cmNlRXJyb3JfaAotI2RlZmluZSBSZXNv
dXJjZUVycm9yX2gKKyNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKICNp
bmNsdWRlICJSZXNvdXJjZUVycm9yQmFzZS5oIgogCiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtMzMs
OCArMzMsNiBAQAogI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPGN1
cmwvY3VybC5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlc291cmNlRXJyb3Ig
OiBwdWJsaWMgUmVzb3VyY2VFcnJvckJhc2UKQEAgLTQyLDEzICs0MCwxNyBAQCBjbGFzcyBSZXNv
dXJjZUVycm9yIDogcHVibGljIFJlc291cmNlRXJyb3JCYXNlCiBwdWJsaWM6CiAgICAgUmVzb3Vy
Y2VFcnJvcihUeXBlIHR5cGUgPSBUeXBlOjpOdWxsKQogICAgICAgICA6IFJlc291cmNlRXJyb3JC
YXNlKHR5cGUpCi0gICAgICAgICwgbV9zc2xFcnJvcnMoMCkKICAgICB7CiAgICAgfQogCiAgICAg
UmVzb3VyY2VFcnJvcihjb25zdCBTdHJpbmcmIGRvbWFpbiwgaW50IGVycm9yQ29kZSwgY29uc3Qg
VVJMJiBmYWlsaW5nVVJMLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERlc2NyaXB0aW9uLCBUeXBl
IHR5cGUgPSBUeXBlOjpHZW5lcmFsKQogICAgICAgICA6IFJlc291cmNlRXJyb3JCYXNlKGRvbWFp
biwgZXJyb3JDb2RlLCBmYWlsaW5nVVJMLCBsb2NhbGl6ZWREZXNjcmlwdGlvbiwgdHlwZSkKLSAg
ICAgICAgLCBtX3NzbEVycm9ycygwKQorICAgIHsKKyAgICB9CisKKyAgICBSZXNvdXJjZUVycm9y
KGNvbnN0IEN1cmxIYW5kbGUmIGN1cmwsIHVuc2lnbmVkIHNzbEVycm9ycykKKyAgICAgICAgOiBS
ZXNvdXJjZUVycm9yQmFzZShDdXJsQ29udGV4dDo6ZXJyb3JEb21haW4sIGN1cmwuZXJyb3JDb2Rl
KCksIGN1cmwuZ2V0RWZmZWN0aXZlVVJMKCksIGN1cmwuZXJyb3JEZXNjcmlwdGlvbigpLCBUeXBl
OjpHZW5lcmFsKQorICAgICAgICAsIG1fc3NsRXJyb3JzIHsgc3NsRXJyb3JzIH0KICAgICB7CiAg
ICAgfQogCkBAIC02MCw5ICs2Miw4IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFJlc291
cmNlRXJyb3JCYXNlOwogICAgIHZvaWQgZG9QbGF0Zm9ybUlzb2xhdGVkQ29weShjb25zdCBSZXNv
dXJjZUVycm9yJikgeyB9CiAKLSAgICB1bnNpZ25lZCBtX3NzbEVycm9yczsKKyAgICB1bnNpZ25l
ZCBtX3NzbEVycm9ycyB7IDAgfTsKIH07CiAKIH0KIAotI2VuZGlmIC8vIFJlc291cmNlRXJyb3Jf
aF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNv
dXJjZUhhbmRsZUN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKaW5kZXggZjNmZWI3OWNlM2UuLmU2MzMyMjM5NDMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VI
YW5kbGVDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
UmVzb3VyY2VIYW5kbGVDdXJsLmNwcApAQCAtMzUsMTMgKzM1LDEyIEBACiAjaW5jbHVkZSAiQ3Jl
ZGVudGlhbFN0b3JhZ2UuaCIKICNpbmNsdWRlICJDdXJsQ2FjaGVNYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAiQ3VybENvbnRleHQuaCIKKyNpbmNsdWRlICJDdXJsSm9iTWFuYWdlci5oIgogI2luY2x1ZGUg
IkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCi0jaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiU1NMSGFuZGxlLmgiCiAj
aW5jbHVkZSAiU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9C
YXNlNjQuaD4KQEAgLTU1LDExICs1NCwxMiBAQCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVz
b3VyY2VIYW5kbGVJbnRlcm5hbCgpCiAKIFJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUo
KQogewotICAgIGNhbmNlbCgpOwogfQogCiBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydCgpCiB7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwogICAgIC8vIFRoZSBmcmFtZSBjb3VsZCBi
ZSBudWxsIGlmIHRoZSBSZXNvdXJjZUhhbmRsZSBpcyBub3QgYXNzb2NpYXRlZCB0byBhbnkKICAg
ICAvLyBGcmFtZSwgZS5nLiBpZiB3ZSBhcmUgZG93bmxvYWRpbmcgYSBmaWxlLgogICAgIC8vIElm
IHRoZSBmcmFtZSBpcyBub3QgbnVsbCBidXQgdGhlIHBhZ2UgaXMgbnVsbCB0aGlzIG11c3QgYmUg
YW4gYXR0ZW1wdGVkCkBAIC02OCwyNCArNjgsMjc0IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0
YXJ0KCkKICAgICBpZiAoZC0+bV9jb250ZXh0ICYmICFkLT5tX2NvbnRleHQtPmlzVmFsaWQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzaGFy
ZWRJbnN0YW5jZSgpLT5hZGQodGhpcyk7CisgICAgaW5pdGlhbGl6ZSgpOworCisgICAgbV9qb2Ig
PSBDdXJsSm9iTWFuYWdlcjo6c2luZ2xldG9uKCkuYWRkKGQtPm1fY3VybEhhbmRsZSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oQ3VybEpvYlJlc3VsdCByZXN1bHQpIHsK
KyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgICAgICBzd2l0Y2ggKHJlc3Vs
dCkgeworICAgICAgICBjYXNlIEN1cmxKb2JSZXN1bHQ6OkRvbmU6CisgICAgICAgICAgICBkaWRG
aW5pc2goKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ3VybEpvYlJlc3Vs
dDo6RXJyb3I6CisgICAgICAgICAgICBkaWRGYWlsKCk7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIEN1cmxKb2JSZXN1bHQ6OkNhbmNlbGxlZDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfSk7CisgICAgQVNTRVJUKG1fam9iKTsKKwogICAgIHJldHVybiB0
cnVlOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQogewotICAgIFJlc291cmNl
SGFuZGxlTWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKS0+Y2FuY2VsKHRoaXMpOworICAgIGQtPm1f
Y2FuY2VsbGVkID0gdHJ1ZTsKKyAgICBDdXJsSm9iTWFuYWdlcjo6c2luZ2xldG9uKCkuY2FuY2Vs
KG1fam9iKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6aW5pdGlhbGl6ZSgpCit7CisgICAg
Q3VybENvbnRleHQmIGNvbnRleHQgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCk7CisKKyAgICBV
UkwgdXJsID0gZmlyc3RSZXF1ZXN0KCkudXJsKCk7CisKKyAgICAvLyBSZW1vdmUgYW55IGZyYWdt
ZW50IHBhcnQsIG90aGVyd2lzZSBjdXJsIHdpbGwgc2VuZCBpdCBhcyBwYXJ0IG9mIHRoZSByZXF1
ZXN0LgorICAgIHVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKKworICAgIFJlc291cmNl
SGFuZGxlSW50ZXJuYWwqIGQgPSBnZXRJbnRlcm5hbCgpOworICAgIFN0cmluZyB1cmxTdHJpbmcg
PSB1cmwuc3RyaW5nKCk7CisKKyAgICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpIHsKKyAgICAgICAg
Ly8gUmVtb3ZlIGFueSBxdWVyeSBwYXJ0IHNlbnQgdG8gYSBsb2NhbCBmaWxlLgorICAgICAgICBp
ZiAoIXVybC5xdWVyeSgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gQnkgc2V0dGluZyB0
aGUgcXVlcnkgdG8gYSBudWxsIHN0cmluZyBpdCdsbCBiZSByZW1vdmVkLgorICAgICAgICAgICAg
dXJsLnNldFF1ZXJ5KFN0cmluZygpKTsKKyAgICAgICAgICAgIHVybFN0cmluZyA9IHVybC5zdHJp
bmcoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIE1JTUUgdHlwZSBiYXNl
ZCBvbiB0aGUgcGF0aC4KKyAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1lVHlwZShNSU1FVHlw
ZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgodXJsKSk7CisgICAgfQorCisgICAgaWYgKGQt
Pm1fZGVmZXJzTG9hZGluZykgeworICAgICAgICBDVVJMY29kZSBlcnJvciA9IGQtPm1fY3VybEhh
bmRsZS5wYXVzZShDVVJMUEFVU0VfQUxMKTsKKyAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCBwYXVz
ZSB0aGUgaGFuZGxlLCB3ZSB3b3VsZCBBU1NFUlQgaW4gdGhlCisgICAgICAgIC8vIGhlYWRlciBj
YWxsYmFjay4gU28ganVzdCBhc3NlcnQgaGVyZS4KKyAgICAgICAgQVNTRVJUX1VOVVNFRChlcnJv
ciwgZXJyb3IgPT0gQ1VSTEVfT0spOworICAgIH0KKworI2lmbmRlZiBOREVCVUcKKyAgICBkLT5t
X2N1cmxIYW5kbGUuZW5hYmxlVmVyYm9zZUlmVXNlZCgpOworICAgIGQtPm1fY3VybEhhbmRsZS5l
bmFibGVTdGRFcnJJZlVzZWQoKTsKKyNlbmRpZgorCisgICAgZC0+bV9jdXJsSGFuZGxlLnNldFNz
bFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlckVuYWJsZSk7CisgICAgZC0+bV9jdXJs
SGFuZGxlLnNldFNzbFZlcmlmeUhvc3QoQ3VybEhhbmRsZTo6VmVyaWZ5SG9zdFN0cmljdE5hbWVD
aGVjayk7CisgICAgZC0+bV9jdXJsSGFuZGxlLnNldFByaXZhdGVEYXRhKHRoaXMpOworICAgIGQt
Pm1fY3VybEhhbmRsZS5zZXRXcml0ZUNhbGxiYWNrRnVuY3Rpb24od3JpdGVDYWxsYmFjaywgdGhp
cyk7CisgICAgZC0+bV9jdXJsSGFuZGxlLnNldEhlYWRlckNhbGxiYWNrRnVuY3Rpb24oaGVhZGVy
Q2FsbGJhY2ssIHRoaXMpOworICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVBdXRvUmVmZXJlcigp
OworICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVGb2xsb3dMb2NhdGlvbigpOworICAgIGQtPm1f
Y3VybEhhbmRsZS5lbmFibGVIdHRwQXV0aGVudGljYXRpb24oQ1VSTEFVVEhfQU5ZKTsKKyAgICBk
LT5tX2N1cmxIYW5kbGUuZW5hYmxlU2hhcmVIYW5kbGUoKTsKKyAgICBkLT5tX2N1cmxIYW5kbGUu
ZW5hYmxlVGltZW91dCgpOworICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVBbGxvd2VkUHJvdG9j
b2xzKCk7CisgICAgc2V0U1NMQ2xpZW50Q2VydGlmaWNhdGUodGhpcyk7CisKKyAgICBpZiAoQ3Vy
bENvbnRleHQ6OnNpbmdsZXRvbigpLnNob3VsZElnbm9yZVNTTEVycm9ycygpKQorICAgICAgICBk
LT5tX2N1cmxIYW5kbGUuc2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyRGlz
YWJsZSk7CisgICAgZWxzZQorICAgICAgICBzZXRTU0xWZXJpZnlPcHRpb25zKHRoaXMpOworCisg
ICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUNBSW5mb0lmRXhpc3RzKCk7CisKKyAgICBkLT5tX2N1
cmxIYW5kbGUuZW5hYmxlQWNjZXB0RW5jb2RpbmcoKTsKKyAgICBkLT5tX2N1cmxIYW5kbGUuc2V0
VXJsKHVybFN0cmluZyk7CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUNvb2tpZUphcklmRXhp
c3RzKCk7CisKKyAgICBpZiAoZmlyc3RSZXF1ZXN0KCkuaHR0cEhlYWRlckZpZWxkcygpLnNpemUo
KSkgeworICAgICAgICBhdXRvIGN1c3RvbUhlYWRlcnMgPSBmaXJzdFJlcXVlc3QoKS5odHRwSGVh
ZGVyRmllbGRzKCk7CisgICAgICAgIGF1dG8mIGNhY2hlID0gQ3VybENhY2hlTWFuYWdlcjo6Z2V0
SW5zdGFuY2UoKTsKKworICAgICAgICBib29sIGhhc0NhY2hlSGVhZGVycyA9IGN1c3RvbUhlYWRl
cnMuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6OklmTW9kaWZpZWRTaW5jZSkgfHwgY3VzdG9tSGVh
ZGVycy5jb250YWlucyhIVFRQSGVhZGVyTmFtZTo6SWZOb25lTWF0Y2gpOworICAgICAgICBpZiAo
IWhhc0NhY2hlSGVhZGVycyAmJiBjYWNoZS5pc0NhY2hlZCh1cmwpKSB7CisgICAgICAgICAgICBj
YWNoZS5hZGRDYWNoZUVudHJ5Q2xpZW50KHVybCwgdGhpcyk7CisKKyAgICAgICAgICAgIC8vIGFw
cGVuZCBhZGRpdGlvbmFsIGNhY2hlIGluZm9ybWF0aW9uCisgICAgICAgICAgICBmb3IgKGF1dG8g
ZW50cnkgOiBjYWNoZS5yZXF1ZXN0SGVhZGVycyh1cmwpKQorICAgICAgICAgICAgICAgIGN1c3Rv
bUhlYWRlcnMuc2V0KGVudHJ5LmtleSwgZW50cnkudmFsdWUpOworCisgICAgICAgICAgICBkLT5t
X2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycyA9IHRydWU7CisgICAgICAgIH0KKworICAgICAg
ICBkLT5tX2N1cmxIYW5kbGUuYXBwZW5kUmVxdWVzdEhlYWRlcnMoY3VzdG9tSGVhZGVycyk7Cisg
ICAgfQorCisgICAgU3RyaW5nIG1ldGhvZCA9IGZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKTsK
KyAgICBpZiAoIkdFVCIgPT0gbWV0aG9kKQorICAgICAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxl
SHR0cEdldFJlcXVlc3QoKTsKKyAgICBlbHNlIGlmICgiUE9TVCIgPT0gbWV0aG9kKQorICAgICAg
ICBzZXR1cFBPU1QoKTsKKyAgICBlbHNlIGlmICgiUFVUIiA9PSBtZXRob2QpCisgICAgICAgIHNl
dHVwUFVUKCk7CisgICAgZWxzZSBpZiAoIkhFQUQiID09IG1ldGhvZCkKKyAgICAgICAgZC0+bV9j
dXJsSGFuZGxlLmVuYWJsZUh0dHBIZWFkUmVxdWVzdCgpOworICAgIGVsc2UgeworICAgICAgICBk
LT5tX2N1cmxIYW5kbGUuc2V0SHR0cEN1c3RvbVJlcXVlc3QobWV0aG9kKTsKKyAgICAgICAgc2V0
dXBQVVQoKTsKKyAgICB9CisKKyAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlUmVxdWVzdEhlYWRl
cnMoKTsKKworICAgIGFwcGx5QXV0aGVudGljYXRpb24oKTsKKworICAgIGQtPm1fY3VybEhhbmRs
ZS5lbmFibGVQcm94eUlmRXhpc3RzKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmFwcGx5
QXV0aGVudGljYXRpb24oKQoreworICAgIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCA9IGZpcnN0
UmVxdWVzdCgpOworICAgIC8vIG1fdXNlci9tX3Bhc3MgYXJlIGNyZWRlbnRpYWxzIGdpdmVuIG1h
bnVhbGx5LCBmb3IgaW5zdGFuY2UsIGJ5IHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIFhNTEh0dHBS
ZXF1ZXN0Lm9wZW4oKS4KKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gZ2V0SW50ZXJu
YWwoKTsKKworICAgIFN0cmluZyBwYXJ0aXRpb24gPSByZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCk7
CisKKyAgICBpZiAoc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSkgeworICAgICAgICBpZiAo
ZC0+bV91c2VyLmlzRW1wdHkoKSAmJiBkLT5tX3Bhc3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0IG1hdGNoIHRoZSBw
YXRocyBvZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAgQmFzaWMgYXV0aGVu
dGljYXRpb24sIAorICAgICAgICAgICAgLy8gdHJ5IGFuZCByZXVzZSB0aGUgY3JlZGVudGlhbCBw
cmVlbXB0aXZlbHksIGFzIGFsbG93ZWQgYnkgUkZDIDI2MTcuCisgICAgICAgICAgICBkLT5tX2lu
aXRpYWxDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3Rv
cmFnZSgpLmdldChwYXJ0aXRpb24sIHJlcXVlc3QudXJsKCkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHByb3RlY3Rpb24gc3BhY2Uga25v
d24gZm9yIHRoZSBVUkwsIHVwZGF0ZSBzdG9yZWQgY3JlZGVudGlhbHMKKyAgICAgICAgICAgIC8v
IGJlZm9yZSBzZW5kaW5nIGEgcmVxdWVzdC4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBs
ZW1lbnQgbG9nb3V0IGJ5IHNlbmRpbmcgYW4KKyAgICAgICAgICAgIC8vIFhNTEh0dHBSZXF1ZXN0
IHdpdGgga25vd24gaW5jb3JyZWN0IGNyZWRlbnRpYWxzLCBhbmQgYWJvcnRpbmcgaXQgaW1tZWRp
YXRlbHkgKHNvIHRoYXQKKyAgICAgICAgICAgIC8vIGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBk
b2Vzbid0IHBvcCB1cCkuCisgICAgICAgICAgICBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENy
ZWRlbnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRpdGlvbiwgQ3JlZGVudGlhbChkLT5tX3VzZXIsIGQt
Pm1fcGFzcywgQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSksIHJlcXVlc3QudXJsKCkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgU3RyaW5nIHVzZXIgPSBkLT5tX3VzZXI7CisgICAgU3RyaW5n
IHBhc3N3b3JkID0gZC0+bV9wYXNzOworCisgICAgaWYgKCFkLT5tX2luaXRpYWxDcmVkZW50aWFs
LmlzRW1wdHkoKSkgeworICAgICAgICB1c2VyID0gZC0+bV9pbml0aWFsQ3JlZGVudGlhbC51c2Vy
KCk7CisgICAgICAgIHBhc3N3b3JkID0gZC0+bV9pbml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgp
OworICAgICAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlSHR0cEF1dGhlbnRpY2F0aW9uKENVUkxB
VVRIX0JBU0lDKTsKKyAgICB9CisKKyAgICAvLyBJdCBzZWVtcyB3ZSBuZWVkIHRvIHNldCBDVVJM
T1BUX1VTRVJQV0QgZXZlbiBpZiB1c2VybmFtZSBhbmQgcGFzc3dvcmQgaXMgZW1wdHkuCisgICAg
Ly8gT3RoZXJ3aXNlIGNVUkwgd2lsbCBub3QgYXV0b21hdGljYWxseSBjb250aW51ZSB3aXRoIGEg
bmV3IHJlcXVlc3QgYWZ0ZXIgYSA0MDEgcmVzcG9uc2UuCisKKyAgICAvLyBjdXJsIENVUkxPUFRf
VVNFUlBXRCBleHBlY3RzIHVzZXJuYW1lOnBhc3N3b3JkCisgICAgZC0+bV9jdXJsSGFuZGxlLnNl
dEh0dHBBdXRoVXNlclBhc3ModXNlciwgcGFzc3dvcmQpOworfQorCitzdGF0aWMgaW5saW5lIHNp
emVfdCBnZXRGb3JtRWxlbWVudHNDb3VudChSZXNvdXJjZUhhbmRsZSogam9iKQoreworICAgIFJl
ZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEgPSBqb2ItPmZpcnN0UmVxdWVzdCgpLmh0dHBCb2R5KCk7
CisKKyAgICBpZiAoIWZvcm1EYXRhKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFJlc29s
dmUgdGhlIGJsb2IgZWxlbWVudHMgc28gdGhlIGZvcm1EYXRhIGNhbiBjb3JyZWN0bHkgcmVwb3J0
IGl0J3Mgc2l6ZS4KKyAgICBmb3JtRGF0YSA9IGZvcm1EYXRhLT5yZXNvbHZlQmxvYlJlZmVyZW5j
ZXMoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGZvcm1EYXRhLT5lbGVtZW50cygpLnNpemUoKTsKKyAg
ICBqb2ItPmZpcnN0UmVxdWVzdCgpLnNldEhUVFBCb2R5KFdURk1vdmUoZm9ybURhdGEpKTsKKwor
ICAgIHJldHVybiBzaXplOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpzZXR1cFBVVCgpCit7
CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBQdXRSZXF1ZXN0KCk7CisKKyAgICAvLyBE
aXNhYmxlIHRoZSBFeHBlY3Q6IDEwMCBjb250aW51ZSBoZWFkZXIKKyAgICBkLT5tX2N1cmxIYW5k
bGUuYXBwZW5kUmVxdWVzdEhlYWRlcigiRXhwZWN0OiIpOworCisgICAgc2l6ZV90IG51bUVsZW1l
bnRzID0gZ2V0Rm9ybUVsZW1lbnRzQ291bnQodGhpcyk7CisgICAgaWYgKCFudW1FbGVtZW50cykK
KyAgICAgICAgcmV0dXJuOworCisgICAgc2V0dXBGb3JtRGF0YShmYWxzZSk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VIYW5kbGU6OnNldHVwUE9TVCgpCit7CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJs
ZUh0dHBQb3N0UmVxdWVzdCgpOworCisgICAgc2l6ZV90IG51bUVsZW1lbnRzID0gZ2V0Rm9ybUVs
ZW1lbnRzQ291bnQodGhpcyk7CisgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gRG8gbm90IHN0cmVhbSBmb3Igc2ltcGxlIFBPU1QgZGF0YQorICAgIGlmIChu
dW1FbGVtZW50cyA9PSAxKSB7CisgICAgICAgIGZpcnN0UmVxdWVzdCgpLmh0dHBCb2R5KCktPmZs
YXR0ZW4oZC0+bV9wb3N0Qnl0ZXMpOworICAgICAgICBpZiAoZC0+bV9wb3N0Qnl0ZXMuc2l6ZSgp
KQorICAgICAgICAgICAgZC0+bV9jdXJsSGFuZGxlLnNldFBvc3RGaWVsZHMoZC0+bV9wb3N0Qnl0
ZXMuZGF0YSgpLCBkLT5tX3Bvc3RCeXRlcy5zaXplKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgc2V0dXBGb3JtRGF0YSh0cnVlKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6
c2V0dXBGb3JtRGF0YShib29sIGlzUG9zdFJlcXVlc3QpCit7CisgICAgVmVjdG9yPEZvcm1EYXRh
RWxlbWVudD4gZWxlbWVudHMgPSBmaXJzdFJlcXVlc3QoKS5odHRwQm9keSgpLT5lbGVtZW50cygp
OworICAgIHNpemVfdCBudW1FbGVtZW50cyA9IGVsZW1lbnRzLnNpemUoKTsKKworICAgIHN0YXRp
YyBjb25zdCBsb25nIGxvbmcgbWF4Q3VybE9mZlQgPSBkLT5tX2N1cmxIYW5kbGUubWF4Q3VybE9m
ZlQoKTsKKworICAgIC8vIE9idGFpbiB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgZm9ybSBkYXRhCisg
ICAgY3VybF9vZmZfdCBzaXplID0gMDsKKyAgICBib29sIGNodW5rZWRUcmFuc2ZlciA9IGZhbHNl
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgeworICAgICAg
ICBGb3JtRGF0YUVsZW1lbnQgZWxlbWVudCA9IGVsZW1lbnRzW2ldOworICAgICAgICBpZiAoZWxl
bWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpUeXBlOjpFbmNvZGVkRmlsZSkgeworICAg
ICAgICAgICAgbG9uZyBsb25nIGZpbGVTaXplUmVzdWx0OworICAgICAgICAgICAgaWYgKGdldEZp
bGVTaXplKGVsZW1lbnQubV9maWxlbmFtZSwgZmlsZVNpemVSZXN1bHQpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGZpbGVTaXplUmVzdWx0ID4gbWF4Q3VybE9mZlQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRmlsZSBzaXplIGlzIHRvbyBiaWcgZm9yIHNwZWNpZnlpbmcgaXQgdG8gY1VSTAor
ICAgICAgICAgICAgICAgICAgICBjaHVua2VkVHJhbnNmZXIgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2l6ZSAr
PSBmaWxlU2l6ZVJlc3VsdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
Y2h1bmtlZFRyYW5zZmVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzaXplICs9IGVsZW1lbnRzW2ldLm1f
ZGF0YS5zaXplKCk7CisgICAgfQorCisgICAgLy8gY1VSTCBndWVzc2VzIHRoYXQgd2Ugd2FudCBj
aHVua2VkIGVuY29kaW5nIGFzIGxvbmcgYXMgd2Ugc3BlY2lmeSB0aGUgaGVhZGVyCisgICAgaWYg
KGNodW5rZWRUcmFuc2ZlcikKKyAgICAgICAgZC0+bV9jdXJsSGFuZGxlLmFwcGVuZFJlcXVlc3RI
ZWFkZXIoIlRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIik7CisgICAgZWxzZSB7CisgICAgICAg
IGlmIChpc1Bvc3RSZXF1ZXN0KQorICAgICAgICAgICAgZC0+bV9jdXJsSGFuZGxlLnNldFBvc3RG
aWVsZExhcmdlKHNpemUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkLT5tX2N1cmxIYW5k
bGUuc2V0SW5GaWxlU2l6ZUxhcmdlKHNpemUpOworICAgIH0KKworICAgIGQtPm1fY3VybEhhbmRs
ZS5zZXRSZWFkQ2FsbGJhY2tGdW5jdGlvbihyZWFkQ2FsbGJhY2ssIHRoaXMpOwogfQogCiAjaWYg
T1MoV0lORE9XUykKIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0SG9zdEFsbG93c0FueUhUVFBT
Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiBob3N0KQogeworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisKICAgICBhbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlSG9zdHMoaG9zdCk7CiB9CiAK
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldENsaWVudENlcnRpZmljYXRlSW5mbyhjb25zdCBTdHJp
bmcmIGhvc3QsIGNvbnN0IFN0cmluZyYgY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYga2V5KQog
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKICAgICBpZiAoZmlsZUV4aXN0cyhjZXJ0
aWZpY2F0ZSkpCiAgICAgICAgIGFkZEFsbG93ZWRDbGllbnRDZXJ0aWZpY2F0ZShob3N0LCBjZXJ0
aWZpY2F0ZSwga2V5KTsKICAgICBlbHNlCkBAIC0xMDQsNDEgKzM1NCw3MyBAQCB2b2lkIFJlc291
cmNlSGFuZGxlOjpzZXRDbGllbnRDZXJ0aWZpY2F0ZShjb25zdCBTdHJpbmcmLCBDRkRhdGFSZWYp
CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG9hZGluZyhib29sIGRl
ZmVycykKIHsKLSAgICBpZiAoIWQtPm1fY3VybEhhbmRsZS5oYW5kbGUoKSkKLSAgICAgICAgcmV0
dXJuOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBpZiAoZGVmZXJzKSB7Ci0g
ICAgICAgIENVUkxjb2RlIGVycm9yID0gZC0+bV9jdXJsSGFuZGxlLnBhdXNlKENVUkxQQVVTRV9B
TEwpOwotICAgICAgICAvLyBJZiB3ZSBjb3VsZCBub3QgZGVmZXIgdGhlIGhhbmRsZSwgc28gZG9u
J3QgZG8gaXQuCi0gICAgICAgIGlmIChlcnJvciAhPSBDVVJMRV9PSykKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICBhdXRvIGFjdGlvbiA9IFtkZWZlcnMsIHRoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKV0oKSB7CisgICAgICAgIGlmIChkZWZlcnMpIHsKKyAgICAgICAgICAgIENV
Ukxjb2RlIGVycm9yID0gZC0+bV9jdXJsSGFuZGxlLnBhdXNlKENVUkxQQVVTRV9BTEwpOworICAg
ICAgICAgICAgLy8gSWYgd2UgY291bGQgbm90IGRlZmVyIHRoZSBoYW5kbGUsIHNvIGRvbid0IGRv
IGl0LgorICAgICAgICAgICAgaWYgKGVycm9yICE9IENVUkxFX09LKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENVUkxjb2RlIGVycm9yID0g
ZC0+bV9jdXJsSGFuZGxlLnBhdXNlKENVUkxQQVVTRV9DT05UKTsKKyAgICAgICAgICAgIGlmIChl
cnJvciAhPSBDVVJMRV9PSykgeworICAgICAgICAgICAgICAgIC8vIFJlc3RhcnRpbmcgdGhlIGhh
bmRsZSBoYXMgZmFpbGVkIHNvIGp1c3QgY2FuY2VsIGl0LgorICAgICAgICAgICAgICAgIGNhbmNl
bCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIGlmIChtX2pvYikg
eworICAgICAgICBDdXJsSm9iTWFuYWdlcjo6c2luZ2xldG9uKCkuY2FsbE9uSm9iVGhyZWFkKFdU
Rk1vdmUoYWN0aW9uKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQ1VSTGNvZGUgZXJyb3IgPSBk
LT5tX2N1cmxIYW5kbGUucGF1c2UoQ1VSTFBBVVNFX0NPTlQpOwotICAgICAgICBpZiAoZXJyb3Ig
IT0gQ1VSTEVfT0spCi0gICAgICAgICAgICAvLyBSZXN0YXJ0aW5nIHRoZSBoYW5kbGUgaGFzIGZh
aWxlZCBzbyBqdXN0IGNhbmNlbCBpdC4KLSAgICAgICAgICAgIGNhbmNlbCgpOworICAgICAgICBh
Y3Rpb24oKTsKICAgICB9CiB9CiAKLWJvb2wgUmVzb3VyY2VIYW5kbGU6OnNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKCkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZEZpbmlzaCgpCiB7Ci0gICAg
cmV0dXJuICghY2xpZW50KCkgfHwgY2xpZW50KCktPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KHRoaXMpKSAmJiBmaXJzdFJlcXVlc3QoKS51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCk7
CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgY2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRp
b25zKCk7CisjZW5kaWYKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghZC0+bV9yZXNwb25zZS5yZXNwb25zZUZpcmVkKCkpIHsKKyAgICAgICAgaGFu
ZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkLT5tX211bHRpcGFydEhhbmRs
ZSkKKyAgICAgICAgZC0+bV9tdWx0aXBhcnRIYW5kbGUtPmNvbnRlbnRFbmRlZCgpOworCisgICAg
aWYgKGNsaWVudCgpKSB7CisgICAgICAgIGNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMp
OworICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZEZpbmlzaExvYWRp
bmcoKnRoaXMpOworICAgIH0KIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1Mb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9y
JiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkK
K3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZEZhaWwoKQogewotICAgIFN5bmNocm9ub3VzTG9hZGVy
Q2xpZW50IGNsaWVudDsKLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGFkb3B0
UmVmKG5ldyBSZXNvdXJjZUhhbmRsZShjb250ZXh0LCByZXF1ZXN0LCAmY2xpZW50LCBmYWxzZSwg
ZmFsc2UpKTsKLQotICAgIGhhbmRsZS5nZXQoKS0+ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigpOwor
ICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIFVSTCB1cmwgPSBk
LT5tX2N1cmxIYW5kbGUuZ2V0RWZmZWN0aXZlVVJMKCk7CisgICAgaWYgKGNsaWVudCgpKSB7Cisg
ICAgICAgIGNsaWVudCgpLT5kaWRGYWlsKHRoaXMsIFJlc291cmNlRXJyb3IoZC0+bV9jdXJsSGFu
ZGxlLCBkLT5tX3NzbEVycm9ycykpOworICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0
YW5jZSgpLmRpZEZhaWwoKnRoaXMpOworICAgIH0KK30KIAotICAgIGVycm9yID0gY2xpZW50LmVy
cm9yKCk7Ci0gICAgZGF0YS5zd2FwKGNsaWVudC5tdXRhYmxlRGF0YSgpKTsKLSAgICByZXNwb25z
ZSA9IGNsaWVudC5yZXNwb25zZSgpOworYm9vbCBSZXNvdXJjZUhhbmRsZTo6c2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UoKQoreworICAgIHJldHVybiAoIWNsaWVudCgpIHx8IGNsaWVudCgpLT5z
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSh0aGlzKSkgJiYgZmlyc3RSZXF1ZXN0KCkudXJsKCku
cHJvdG9jb2xJc0luSFRUUEZhbWlseSgpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmIGNoYWxsZW5nZSkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCiAgICAgU3Ry
aW5nIHBhcnRpdGlvbiA9IGZpcnN0UmVxdWVzdCgpLmNhY2hlUGFydGl0aW9uKCk7CiAKICAgICBp
ZiAoIWQtPm1fdXNlci5pc051bGwoKSAmJiAhZC0+bV9wYXNzLmlzTnVsbCgpKSB7CkBAIC0xODgs
NiArNDcwLDggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGwKIAogdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFs
bGVuZ2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCiB7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKwogICAgIGlmIChjaGFsbGVuZ2UgIT0gZC0+bV9jdXJyZW50V2ViQ2hhbGxl
bmdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTIxMSw2ICs0OTUsOCBAQCB2b2lkIFJlc291cmNl
SGFuZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
IGNoYWxsZW5nZQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb0NvbnRp
bnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxs
ZW5nZSkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCiAgICAgaWYgKGNoYWxsZW5n
ZSAhPSBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjIw
LDYgKzUwNiw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkUmVxdWVzdFRvQ29udGlu
dWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhCiAKIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBj
aGFsbGVuZ2UpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKwogICAgIGlmIChjaGFs
bGVuZ2UgIT0gZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlKQogICAgICAgICByZXR1cm47CiAKQEAg
LTIzNywxMCArNTI1LDggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDaGFsbGVuZ2VS
ZWplY3Rpb24oY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCi1jb25zdCBjaGFyKiBjb25zdCBlcnJvckRvbWFpbkN1cmwgPSAiQ3Vy
bEVycm9yRG9tYWluIjsKLQogI2lmIEVOQUJMRShXRUJfVElNSU5HKQotc3RhdGljIHZvaWQgY2Fs
Y3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25zKFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQpCit2
b2lkIFJlc291cmNlSGFuZGxlOjpjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMoKQogewog
ICAgIGRvdWJsZSBwcmVUcmFuc2ZlclRpbWUgPSAwOwogICAgIGRvdWJsZSBkbnNsb29rdXBUaW1l
ID0gMDsKQEAgLTI2Myw4ICs1NDksMTAgQEAgc3RhdGljIHZvaWQgY2FsY3VsYXRlV2ViVGltaW5n
SW5mb3JtYXRpb25zKFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQpCiB9CiAjZW5kaWYKIAotc3Rh
dGljIHZvaWQgaGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqIGpvYiwg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCkKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmhhbmRsZUxv
Y2FsUmVjZWl2ZVJlc3BvbnNlKCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCiAg
ICAgLy8gc2luY2UgdGhlIGNvZGUgaW4gaGVhZGVyQ2FsbGJhY2sgd2lsbCBub3QgaGF2ZSBydW4g
Zm9yIGxvY2FsIGZpbGVzCiAgICAgLy8gdGhlIGNvZGUgdG8gc2V0IHRoZSBVUkwgYW5kIGZpcmUg
ZGlkUmVjZWl2ZVJlc3BvbnNlIGlzIG5ldmVyIHJ1biwKICAgICAvLyB3aGljaCBtZWFucyB0aGUg
UmVzb3VyY2VMb2FkZXIncyByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIHRoZSBVUkwuCkBAIC0y
NzMsNDggKzU2MSwxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZShS
ZXNvdXJjZUhhbmRsZSogam9iLCBSZXNvdXJjZUhhbmRsZUludGVybgogICAgIFVSTCB1cmwgPSBk
LT5tX2N1cmxIYW5kbGUuZ2V0RWZmZWN0aXZlVVJMKCk7CiAgICAgQVNTRVJUKHVybC5pc1ZhbGlk
KCkpOwogICAgIGQtPm1fcmVzcG9uc2Uuc2V0VVJMKHVybCk7Ci0gICAgaWYgKGQtPmNsaWVudCgp
KQotICAgICAgICBkLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGpvYiwgUmVzb3VyY2VS
ZXNwb25zZShkLT5tX3Jlc3BvbnNlKSk7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGll
bnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHRoaXMsIFJlc291cmNlUmVzcG9uc2UoZC0+bV9yZXNw
b25zZSkpOwogICAgIGQtPm1fcmVzcG9uc2Uuc2V0UmVzcG9uc2VGaXJlZCh0cnVlKTsKIH0KIAot
Ly8gY2FsbGVkIHdpdGggZGF0YSBhZnRlciBhbGwgaGVhZGVycyBoYXZlIGJlZW4gcHJvY2Vzc2Vk
IHZpYSBoZWFkZXJDYWxsYmFjawotc3RhdGljIHNpemVfdCB3cml0ZUNhbGxiYWNrKGNoYXIqIHB0
ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKLXsKLSAgICBSZXNvdXJj
ZUhhbmRsZSogam9iID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihkYXRhKTsKLSAgICBS
ZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOwotICAgIGlmIChk
LT5tX2NhbmNlbGxlZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBXZSBzaG91bGQgbmV2
ZXIgYmUgY2FsbGVkIHdoZW4gZGVmZXJyZWQgbG9hZGluZyBpcyBhY3RpdmF0ZWQuCi0gICAgQVNT
RVJUKCFkLT5tX2RlZmVyc0xvYWRpbmcpOwotCi0gICAgc2l6ZV90IHRvdGFsU2l6ZSA9IHNpemUg
KiBubWVtYjsKLQotICAgIC8vIHRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBidXQgYXBwYXJl
bnRseSBpcy4gQ1VSTCB3cml0ZXMgdGhlIGRhdGEKLSAgICAvLyBvZiBodG1sIHBhZ2UgZXZlbiBp
ZiBpdCBpcyBhIHJlZGlyZWN0IHRoYXQgd2FzIGhhbmRsZWQgaW50ZXJuYWxseQotICAgIC8vIGNh
biBiZSBvYnNlcnZlZCBlLmcuIG9uIGdtYWlsLmNvbQotICAgIGxvbmcgaHR0cENvZGUgPSAwOwot
ICAgIENVUkxjb2RlIGVyckNkID0gZC0+bV9jdXJsSGFuZGxlLmdldFJlc3BvbnNlQ29kZShodHRw
Q29kZSk7Ci0gICAgaWYgKENVUkxFX09LID09IGVyckNkICYmIGh0dHBDb2RlID49IDMwMCAmJiBo
dHRwQ29kZSA8IDQwMCkKLSAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKLQotICAgIGlmICghZC0+
bV9yZXNwb25zZS5yZXNwb25zZUZpcmVkKCkpIHsKLSAgICAgICAgaGFuZGxlTG9jYWxSZWNlaXZl
UmVzcG9uc2Uoam9iLCBkKTsKLSAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKGQtPm1fbXVsdGlwYXJ0SGFuZGxlKQotICAg
ICAgICBkLT5tX211bHRpcGFydEhhbmRsZS0+Y29udGVudFJlY2VpdmVkKHN0YXRpY19jYXN0PGNv
bnN0IGNoYXIqPihwdHIpLCB0b3RhbFNpemUpOwotICAgIGVsc2UgaWYgKGQtPmNsaWVudCgpKSB7
Ci0gICAgICAgIGQtPmNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YShqb2IsIHB0ciwgdG90YWxTaXpl
LCAwKTsKLSAgICAgICAgQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRSZWNlaXZl
RGF0YSgqam9iLCBwdHIsIHRvdGFsU2l6ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvdGFsU2l6
ZTsKLX0KLQogaW5saW5lIHN0YXRpYyBib29sIGlzSHR0cEluZm8oaW50IHN0YXR1c0NvZGUpCiB7
CiAgICAgcmV0dXJuIDEwMCA8PSBzdGF0dXNDb2RlICYmIHN0YXR1c0NvZGUgPCAyMDA7CkBAIC00
MzksMTUyICs2OTAsMTUxIEBAIHN0YXRpYyBib29sIGdldFByb3RlY3Rpb25TcGFjZShSZXNvdXJj
ZUhhbmRsZSogam9iLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLS8qCi0qIFRoaXMgaXMgYmVpbmcgY2FsbGVkIGZvciBlYWNoIEhUVFAgaGVhZGVy
IGluIHRoZSByZXNwb25zZS4gVGhpcyBpbmNsdWRlcyAnXHJcbicKLSogZm9yIHRoZSBsYXN0IGxp
bmUgb2YgdGhlIGhlYWRlci4KLSoKLSogV2Ugd2lsbCBhZGQgZWFjaCBIVFRQIEhlYWRlciB0byB0
aGUgUmVzb3VyY2VSZXNwb25zZSBhbmQgb24gdGhlIHRlcm1pbmF0aW9uCi0qIG9mIHRoZSBoZWFk
ZXIgKFxyXG4pIHdlIHdpbGwgcGFyc2UgQ29udGVudC1UeXBlIGFuZCBDb250ZW50LURpc3Bvc2l0
aW9uIGFuZAotKiB1cGRhdGUgdGhlIFJlc291cmNlUmVzcG9uc2UgYW5kIHRoZW4gc2VuZCBpdCBh
d2F5LgotKgotKi8KLXN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2soY2hhciogcHRyLCBzaXpl
X3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQorc2l6ZV90IFJlc291cmNlSGFuZGxl
Ojp3aWxsUHJlcGFyZVNlbmREYXRhKGNoYXIqIHB0ciwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90
IG51bWJlck9mQmxvY2tzKQogewotICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSBzdGF0aWNfY2Fz
dDxSZXNvdXJjZUhhbmRsZSo+KGRhdGEpOwotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQg
PSBqb2ItPmdldEludGVybmFsKCk7Ci0gICAgaWYgKGQtPm1fY2FuY2VsbGVkKQorICAgIGlmICgh
ZC0+bV9mb3JtRGF0YVN0cmVhbS5oYXNNb3JlRWxlbWVudHMoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICAvLyBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gZGVmZXJyZWQgbG9hZGlu
ZyBpcyBhY3RpdmF0ZWQuCi0gICAgQVNTRVJUKCFkLT5tX2RlZmVyc0xvYWRpbmcpOworICAgIHNp
emVfdCBzaXplID0gZC0+bV9mb3JtRGF0YVN0cmVhbS5yZWFkKHB0ciwgYmxvY2tTaXplLCBudW1i
ZXJPZkJsb2Nrcyk7CiAKLSAgICBzaXplX3QgdG90YWxTaXplID0gc2l6ZSAqIG5tZW1iOwotICAg
IFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBkLT5jbGllbnQoKTsKKyAgICAvLyBTb21l
dGhpbmcgd2VudCB3cm9uZyBzbyBjYW5jZWwgdGhlIGpvYi4KKyAgICBpZiAoIXNpemUpIHsKKyAg
ICAgICAgY2FuY2VsKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIFN0cmluZyBo
ZWFkZXIoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7CisgICAgcmV0
dXJuIHNpemU7CiAKLSAgICAvKgotICAgICogYSkgV2UgY2FuIGZpbmlzaCBhbmQgc2VuZCB0aGUg
UmVzb3VyY2VSZXNwb25zZQotICAgICogYikgV2Ugd2lsbCBhZGQgdGhlIGN1cnJlbnQgaGVhZGVy
IHRvIHRoZSBIVFRQSGVhZGVyTWFwIG9mIHRoZSBSZXNvdXJjZVJlc3BvbnNlCi0gICAgKgotICAg
ICogVGhlIEhUVFAgc3RhbmRhcmQgcmVxdWlyZXMgdG8gdXNlIFxyXG4gYnV0IGZvciBjb21wYXRp
YmlsaXR5IGl0IHJlY29tbWVuZHMgdG8KLSAgICAqIGFjY2VwdCBhbHNvIFxuLgotICAgICovCi0g
ICAgaWYgKGhlYWRlciA9PSBTdHJpbmcoIlxyXG4iKSB8fCBoZWFkZXIgPT0gU3RyaW5nKCJcbiIp
KSB7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVIZWFkZXJMaW5lKGNvbnN0
IFN0cmluZyYgaGVhZGVyKQoreworICAgIGludCBzcGxpdFBvcyA9IGhlYWRlci5maW5kKCI6Iik7
CisgICAgaWYgKHNwbGl0UG9zICE9IG5vdEZvdW5kKSB7CisgICAgICAgIFN0cmluZyBrZXkgPSBo
ZWFkZXIubGVmdChzcGxpdFBvcykuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgIFN0cmluZyB2
YWx1ZSA9IGhlYWRlci5zdWJzdHJpbmcoc3BsaXRQb3MgKyAxKS5zdHJpcFdoaXRlU3BhY2UoKTsK
KworICAgICAgICBpZiAoaXNBcHBlbmRhYmxlSGVhZGVyKGtleSkpCisgICAgICAgICAgICBkLT5t
X3Jlc3BvbnNlLmFkZEhUVFBIZWFkZXJGaWVsZChrZXksIHZhbHVlKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoa2V5LCB2YWx1ZSk7
CisgICAgfSBlbHNlIGlmIChoZWFkZXIuc3RhcnRzV2l0aCgiSFRUUCIsIGZhbHNlKSkgeworICAg
ICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSByZXNwb25zZS4KKyAgICAgICAg
Ly8gRXh0cmFjdCB0aGUgaHR0cCBzdGF0dXMgdGV4dCBmcm9tIHRoaXMuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIElmIHRoZSBGT0xMT1dMT0NBVElPTiBvcHRpb24gaXMgZW5hYmxlZCBmb3IgdGhl
IGN1cmwgaGFuZGxlIHRoZW4KKyAgICAgICAgLy8gY3VybCB3aWxsIGZvbGxvdyB0aGUgcmVkaXJl
Y3Rpb25zIGludGVybmFsbHkuIFRodXMgdGhpcyBoZWFkZXIgY2FsbGJhY2sKKyAgICAgICAgLy8g
d2lsbCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uZSB0aW1lIHdpdGggdGhlIGxpbmUgc3RhcnRpbmcg
IkhUVFAiIGZvciBvbmUgam9iLgogICAgICAgICBsb25nIGh0dHBDb2RlID0gMDsKICAgICAgICAg
ZC0+bV9jdXJsSGFuZGxlLmdldFJlc3BvbnNlQ29kZShodHRwQ29kZSk7CiAKLSAgICAgICAgaWYg
KCFodHRwQ29kZSkgewotICAgICAgICAgICAgLy8gQ29tZXMgaGVyZSB3aGVuIHJlY2VpdmluZyAy
MDAgQ29ubmVjdGlvbiBFc3RhYmxpc2hlZC4gSnVzdCByZXR1cm4uCi0gICAgICAgICAgICByZXR1
cm4gdG90YWxTaXplOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc0h0dHBJbmZvKGh0dHBDb2Rl
KSkgewotICAgICAgICAgICAgLy8gSnVzdCByZXR1cm4gd2hlbiByZWNlaXZpbmcgaHR0cCBpbmZv
LCBlLmcuIEhUVFAvMS4xIDEwMCBDb250aW51ZS4KLSAgICAgICAgICAgIC8vIElmIG5vdCwgdGhl
IHJlcXVlc3QgbWlnaHQgYmUgY2FuY2VsbGVkLCBiZWNhdXNlIHRoZSBNSU1FIHR5cGUgd2lsbCBi
ZSBlbXB0eSBmb3IgdGhpcyByZXNwb25zZS4KLSAgICAgICAgICAgIHJldHVybiB0b3RhbFNpemU7
CisgICAgICAgIFN0cmluZyBodHRwQ29kZVN0cmluZyA9IFN0cmluZzo6bnVtYmVyKGh0dHBDb2Rl
KTsKKyAgICAgICAgaW50IHN0YXR1c0NvZGVQb3MgPSBoZWFkZXIuZmluZChodHRwQ29kZVN0cmlu
Zyk7CisKKyAgICAgICAgaWYgKHN0YXR1c0NvZGVQb3MgIT0gbm90Rm91bmQpIHsKKyAgICAgICAg
ICAgIC8vIFRoZSBzdGF0dXMgdGV4dCBpcyBhZnRlciB0aGUgc3RhdHVzIGNvZGUuCisgICAgICAg
ICAgICBTdHJpbmcgc3RhdHVzID0gaGVhZGVyLnN1YnN0cmluZyhzdGF0dXNDb2RlUG9zICsgaHR0
cENvZGVTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQ
U3RhdHVzVGV4dChzdGF0dXMuc3RyaXBXaGl0ZVNwYWNlKCkpOwogICAgICAgICB9CisgICAgfQor
fQogCi0gICAgICAgIGxvbmcgbG9uZyBjb250ZW50TGVuZ3RoID0gMDsKLSAgICAgICAgZC0+bV9j
dXJsSGFuZGxlLmdldENvbnRlbnRMZW5naHREb3dubG9hZChjb250ZW50TGVuZ3RoKTsKLSAgICAg
ICAgZC0+bV9yZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoY29udGVudExlbmd0aCk7
Cit2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQWxsSGVhZGVycyhsb25nIGh0dHBDb2Rl
LCBsb25nIGxvbmcgY29udGVudExlbmd0aCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogCi0gICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0VVJMKGQtPm1fY3VybEhhbmRsZS5nZXRFZmZl
Y3RpdmVVUkwoKSk7CisgICAgZC0+bV9yZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgo
Y29udGVudExlbmd0aCk7CiAKLSAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29k
ZShodHRwQ29kZSk7Ci0gICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoZXh0cmFjdE1J
TUVUeXBlRnJvbU1lZGlhVHlwZShkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVh
ZGVyTmFtZTo6Q29udGVudFR5cGUpKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKLSAgICAg
ICAgZC0+bV9yZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1l
ZGlhVHlwZShkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29u
dGVudFR5cGUpKSk7CisgICAgZC0+bV9yZXNwb25zZS5zZXRVUkwoZC0+bV9jdXJsSGFuZGxlLmdl
dEVmZmVjdGl2ZVVSTCgpKTsKIAotICAgICAgICBpZiAoZC0+bV9yZXNwb25zZS5pc011bHRpcGFy
dCgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgYm91bmRhcnk7Ci0gICAgICAgICAgICBib29sIHBh
cnNlZCA9IE11bHRpcGFydEhhbmRsZTo6ZXh0cmFjdEJvdW5kYXJ5KGQtPm1fcmVzcG9uc2UuaHR0
cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSksIGJvdW5kYXJ5KTsKLSAg
ICAgICAgICAgIGlmIChwYXJzZWQpCi0gICAgICAgICAgICAgICAgZC0+bV9tdWx0aXBhcnRIYW5k
bGUgPSBzdGQ6Om1ha2VfdW5pcXVlPE11bHRpcGFydEhhbmRsZT4oam9iLCBib3VuZGFyeSk7Ci0g
ICAgICAgIH0KKyAgICBkLT5tX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBDb2RlKTsK
KyAgICBkLT5tX3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5
cGUoZC0+bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRU
eXBlKSkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CisgICAgZC0+bV9yZXNwb25zZS5zZXRU
ZXh0RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShkLT5tX3Jlc3BvbnNl
Lmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpKSk7CiAKLSAgICAg
ICAgLy8gSFRUUCByZWRpcmVjdGlvbgotICAgICAgICBpZiAoaXNIdHRwUmVkaXJlY3QoaHR0cENv
ZGUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbG9jYXRpb24gPSBkLT5tX3Jlc3BvbnNlLmh0dHBI
ZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pOwotICAgICAgICAgICAgaWYgKCFs
b2NhdGlvbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBVUkwgbmV3VVJMID0gVVJMKGpv
Yi0+Zmlyc3RSZXF1ZXN0KCkudXJsKCksIGxvY2F0aW9uKTsKKyAgICBpZiAoZC0+bV9yZXNwb25z
ZS5pc011bHRpcGFydCgpKSB7CisgICAgICAgIFN0cmluZyBib3VuZGFyeTsKKyAgICAgICAgYm9v
bCBwYXJzZWQgPSBNdWx0aXBhcnRIYW5kbGU6OmV4dHJhY3RCb3VuZGFyeShkLT5tX3Jlc3BvbnNl
Lmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpLCBib3VuZGFyeSk7
CisgICAgICAgIGlmIChwYXJzZWQpCisgICAgICAgICAgICBkLT5tX211bHRpcGFydEhhbmRsZSA9
IHN0ZDo6bWFrZV91bmlxdWU8TXVsdGlwYXJ0SGFuZGxlPih0aGlzLCBib3VuZGFyeSk7CisgICAg
fQogCi0gICAgICAgICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlZGlyZWN0ZWRSZXF1ZXN0ID0g
am9iLT5maXJzdFJlcXVlc3QoKTsKLSAgICAgICAgICAgICAgICByZWRpcmVjdGVkUmVxdWVzdC5z
ZXRVUkwobmV3VVJMKTsKLSAgICAgICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNl
ID0gZC0+bV9yZXNwb25zZTsKLSAgICAgICAgICAgICAgICBpZiAoY2xpZW50KQotICAgICAgICAg
ICAgICAgICAgICBjbGllbnQtPndpbGxTZW5kUmVxdWVzdChqb2IsIFdURk1vdmUocmVkaXJlY3Rl
ZFJlcXVlc3QpLCBXVEZNb3ZlKHJlc3BvbnNlKSk7CisgICAgLy8gSFRUUCByZWRpcmVjdGlvbgor
ICAgIGlmIChpc0h0dHBSZWRpcmVjdChodHRwQ29kZSkpIHsKKyAgICAgICAgU3RyaW5nIGxvY2F0
aW9uID0gZC0+bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkxvY2F0
aW9uKTsKKyAgICAgICAgaWYgKCFsb2NhdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFVS
TCBuZXdVUkwgPSBVUkwoZmlyc3RSZXF1ZXN0KCkudXJsKCksIGxvY2F0aW9uKTsKIAotICAgICAg
ICAgICAgICAgIGQtPm1fZmlyc3RSZXF1ZXN0LnNldFVSTChuZXdVUkwpOworICAgICAgICAgICAg
UmVzb3VyY2VSZXF1ZXN0IHJlZGlyZWN0ZWRSZXF1ZXN0ID0gZmlyc3RSZXF1ZXN0KCk7CisgICAg
ICAgICAgICByZWRpcmVjdGVkUmVxdWVzdC5zZXRVUkwobmV3VVJMKTsKKyAgICAgICAgICAgIFJl
c291cmNlUmVzcG9uc2UgcmVzcG9uc2UgPSBkLT5tX3Jlc3BvbnNlOworICAgICAgICAgICAgaWYg
KGNsaWVudCgpKQorICAgICAgICAgICAgICAgIGNsaWVudCgpLT53aWxsU2VuZFJlcXVlc3QodGhp
cywgV1RGTW92ZShyZWRpcmVjdGVkUmVxdWVzdCksIFdURk1vdmUocmVzcG9uc2UpKTsKIAotICAg
ICAgICAgICAgICAgIHJldHVybiB0b3RhbFNpemU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSBpZiAoaXNIdHRwQXV0aGVudGljYXRpb24oaHR0cENvZGUpKSB7Ci0gICAgICAgICAgICBQ
cm90ZWN0aW9uU3BhY2UgcHJvdGVjdGlvblNwYWNlOwotICAgICAgICAgICAgaWYgKGdldFByb3Rl
Y3Rpb25TcGFjZShqb2IsIGQtPm1fcmVzcG9uc2UsIHByb3RlY3Rpb25TcGFjZSkpIHsKLSAgICAg
ICAgICAgICAgICBDcmVkZW50aWFsIGNyZWRlbnRpYWw7Ci0gICAgICAgICAgICAgICAgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgY2hhbGxlbmdlKHByb3RlY3Rpb25TcGFjZSwgY3JlZGVudGlhbCwg
ZC0+bV9hdXRoRmFpbHVyZUNvdW50LCBkLT5tX3Jlc3BvbnNlLCBSZXNvdXJjZUVycm9yKCkpOwot
ICAgICAgICAgICAgICAgIGNoYWxsZW5nZS5zZXRBdXRoZW50aWNhdGlvbkNsaWVudChqb2IpOwot
ICAgICAgICAgICAgICAgIGpvYi0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNo
YWxsZW5nZSk7Ci0gICAgICAgICAgICAgICAgZC0+bV9hdXRoRmFpbHVyZUNvdW50Kys7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZpcnN0UmVxdWVzdCgpLnNldFVSTChuZXdVUkwpOworCisgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGlzSHR0cEF1dGhlbnRpY2F0aW9uKGh0dHBDb2RlKSkg
eworICAgICAgICBQcm90ZWN0aW9uU3BhY2UgcHJvdGVjdGlvblNwYWNlOworICAgICAgICBpZiAo
Z2V0UHJvdGVjdGlvblNwYWNlKHRoaXMsIGQtPm1fcmVzcG9uc2UsIHByb3RlY3Rpb25TcGFjZSkp
IHsKKyAgICAgICAgICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbDsKKyAgICAgICAgICAgIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlIGNoYWxsZW5nZShwcm90ZWN0aW9uU3BhY2UsIGNyZWRlbnRpYWws
IGQtPm1fYXV0aEZhaWx1cmVDb3VudCwgZC0+bV9yZXNwb25zZSwgUmVzb3VyY2VFcnJvcigpKTsK
KyAgICAgICAgICAgIGNoYWxsZW5nZS5zZXRBdXRoZW50aWNhdGlvbkNsaWVudCh0aGlzKTsKKyAg
ICAgICAgICAgIHRoaXMtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVu
Z2UpOworICAgICAgICAgICAgZC0+bV9hdXRoRmFpbHVyZUNvdW50Kys7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgaWYgKGNsaWVudCkgewotICAgICAg
ICAgICAgaWYgKGlzSHR0cE5vdE1vZGlmaWVkKGh0dHBDb2RlKSkgewotICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgdXJsID0gam9iLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKTsK
LSAgICAgICAgICAgICAgICBpZiAoQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5nZXRD
YWNoZWRSZXNwb25zZSh1cmwsIGQtPm1fcmVzcG9uc2UpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChkLT5tX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSgyMDApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dCgiT0siKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQorICAgIGlmIChjbGllbnQoKSkgeworICAgICAgICBpZiAoaXNI
dHRwTm90TW9kaWZpZWQoaHR0cENvZGUpKSB7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVy
bCA9IGZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpOworICAgICAgICAgICAgaWYgKEN1cmxD
YWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZ2V0Q2FjaGVkUmVzcG9uc2UodXJsLCBkLT5tX3Jl
c3BvbnNlKSkgeworICAgICAgICAgICAgICAgIGlmIChkLT5tX2FkZGVkQ2FjaGVWYWxpZGF0aW9u
SGVhZGVycykgeworICAgICAgICAgICAgICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEhUVFBTdGF0
dXNDb2RlKDIwMCk7CisgICAgICAgICAgICAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0SFRUUFN0
YXR1c1RleHQoIk9LIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2Uoam9iLCBSZXNvdXJjZVJlc3BvbnNlKGQt
Pm1fcmVzcG9uc2UpKTsKLSAgICAgICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNl
KCkuZGlkUmVjZWl2ZVJlc3BvbnNlKCpqb2IsIGQtPm1fcmVzcG9uc2UpOwogICAgICAgICB9Ci0g
ICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0UmVzcG9uc2VGaXJlZCh0cnVlKTsKKyAgICAgICAgY2xp
ZW50KCktPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCBSZXNvdXJjZVJlc3BvbnNlKGQtPm1fcmVz
cG9uc2UpKTsKKyAgICAgICAgQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRSZWNl
aXZlUmVzcG9uc2UoKnRoaXMsIGQtPm1fcmVzcG9uc2UpOworICAgIH0KIAotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGludCBzcGxpdFBvcyA9IGhlYWRlci5maW5kKCI6Iik7Ci0gICAgICAgIGlmIChz
cGxpdFBvcyAhPSAtMSkgewotICAgICAgICAgICAgU3RyaW5nIGtleSA9IGhlYWRlci5sZWZ0KHNw
bGl0UG9zKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGhl
YWRlci5zdWJzdHJpbmcoc3BsaXRQb3MgKyAxKS5zdHJpcFdoaXRlU3BhY2UoKTsKLQotICAgICAg
ICAgICAgaWYgKGlzQXBwZW5kYWJsZUhlYWRlcihrZXkpKQotICAgICAgICAgICAgICAgIGQtPm1f
cmVzcG9uc2UuYWRkSFRUUEhlYWRlckZpZWxkKGtleSwgdmFsdWUpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGtleSwg
dmFsdWUpOwotICAgICAgICB9IGVsc2UgaWYgKGhlYWRlci5zdGFydHNXaXRoKCJIVFRQIiwgZmFs
c2UpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSByZXNw
b25zZS4KLSAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIGh0dHAgc3RhdHVzIHRleHQgZnJvbSB0
aGlzLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIElmIHRoZSBGT0xMT1dMT0NBVElP
TiBvcHRpb24gaXMgZW5hYmxlZCBmb3IgdGhlIGN1cmwgaGFuZGxlIHRoZW4KLSAgICAgICAgICAg
IC8vIGN1cmwgd2lsbCBmb2xsb3cgdGhlIHJlZGlyZWN0aW9ucyBpbnRlcm5hbGx5LiBUaHVzIHRo
aXMgaGVhZGVyIGNhbGxiYWNrCi0gICAgICAgICAgICAvLyB3aWxsIGJlIGNhbGxlZCBtb3JlIHRo
YW4gb25lIHRpbWUgd2l0aCB0aGUgbGluZSBzdGFydGluZyAiSFRUUCIgZm9yIG9uZSBqb2IuCi0g
ICAgICAgICAgICBsb25nIGh0dHBDb2RlID0gMDsKLSAgICAgICAgICAgIGQtPm1fY3VybEhhbmRs
ZS5nZXRSZXNwb25zZUNvZGUoaHR0cENvZGUpOwotCi0gICAgICAgICAgICBTdHJpbmcgaHR0cENv
ZGVTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihodHRwQ29kZSk7Ci0gICAgICAgICAgICBpbnQgc3Rh
dHVzQ29kZVBvcyA9IGhlYWRlci5maW5kKGh0dHBDb2RlU3RyaW5nKTsKLQotICAgICAgICAgICAg
aWYgKHN0YXR1c0NvZGVQb3MgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgc3RhdHVz
IHRleHQgaXMgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLgotICAgICAgICAgICAgICAgIFN0cmluZyBz
dGF0dXMgPSBoZWFkZXIuc3Vic3RyaW5nKHN0YXR1c0NvZGVQb3MgKyBodHRwQ29kZVN0cmluZy5s
ZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4
dChzdGF0dXMuc3RyaXBXaGl0ZVNwYWNlKCkpOwotICAgICAgICAgICAgfQorICAgIGQtPm1fcmVz
cG9uc2Uuc2V0UmVzcG9uc2VGaXJlZCh0cnVlKTsKK30KIAotICAgICAgICB9Cit2b2lkIFJlc291
cmNlSGFuZGxlOjpkaWRSZWNlaXZlQ29udGVudERhdGEoKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisKKyAgICBpZiAoIWQtPm1fcmVzcG9uc2UucmVzcG9uc2VGaXJlZCgpKQorICAg
ICAgICBoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZSgpOworCisgICAgVmVjdG9yPGNoYXI+IGJ1
ZmZlcjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyIHsgbV9yZWNlaXZlZEJ1ZmZl
ck11dGV4IH07CisgICAgICAgIGJ1ZmZlciA9IFdURk1vdmUobV9yZWNlaXZlZEJ1ZmZlcik7CiAg
ICAgfQogCi0gICAgcmV0dXJuIHRvdGFsU2l6ZTsKKyAgICBjaGFyKiBwdHIgPSBidWZmZXIuYmVn
aW4oKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGJ1ZmZlci5zaXplKCk7CisKKyAgICBpZiAoZC0+bV9t
dWx0aXBhcnRIYW5kbGUpCisgICAgICAgIGQtPm1fbXVsdGlwYXJ0SGFuZGxlLT5jb250ZW50UmVj
ZWl2ZWQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHB0ciksIHNpemUpOworICAgIGVsc2UgaWYg
KGNsaWVudCgpKSB7CisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBwdHIs
IHNpemUsIDApOworICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZFJl
Y2VpdmVEYXRhKCp0aGlzLCBwdHIsIHNpemUpOworICAgIH0KIH0KIAogLyogVGhpcyBpcyBjYWxs
ZWQgdG8gb2J0YWluIEhUVFAgUE9TVCBvciBQVVQgZGF0YS4KIEl0ZXJhdGUgdGhyb3VnaCBGb3Jt
RGF0YSBlbGVtZW50cyBhbmQgdXBsb2FkIGZpbGVzLgogQ2FyZWZ1bGx5IHJlc3BlY3QgdGhlIGdp
dmVuIGJ1ZmZlciBzaXplIGFuZCBmaWxsIHRoZSByZXN0IG9mIHRoZSBkYXRhIGF0IHRoZSBuZXh0
IGNhbGxzLgogKi8KLXNpemVfdCByZWFkQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwg
c2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQorc2l6ZV90IFJlc291cmNlSGFuZGxlOjpyZWFkQ2Fs
bGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQog
eworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCiAgICAgUmVzb3VyY2VIYW5kbGUqIGpv
YiA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZGF0YSk7CiAgICAgUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKIApAQCAtNTk3LDEwOSArODQ3LDE1
OCBAQCBzaXplX3QgcmVhZENhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBu
bWVtYiwgdm9pZCogZGF0YSkKICAgICBpZiAoIXNpemUgfHwgIW5tZW1iKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIGlmICghZC0+bV9mb3JtRGF0YVN0cmVhbS5oYXNNb3JlRWxlbWVudHMoKSkK
KyAgICByZXR1cm4gam9iLT53aWxsUHJlcGFyZVNlbmREYXRhKHB0ciwgc2l6ZSwgbm1lbWIpOwor
fQorCisvKgorKiBUaGlzIGlzIGJlaW5nIGNhbGxlZCBmb3IgZWFjaCBIVFRQIGhlYWRlciBpbiB0
aGUgcmVzcG9uc2UuIFRoaXMgaW5jbHVkZXMgJ1xyXG4nCisqIGZvciB0aGUgbGFzdCBsaW5lIG9m
IHRoZSBoZWFkZXIuCisqCisqIFdlIHdpbGwgYWRkIGVhY2ggSFRUUCBIZWFkZXIgdG8gdGhlIFJl
c291cmNlUmVzcG9uc2UgYW5kIG9uIHRoZSB0ZXJtaW5hdGlvbgorKiBvZiB0aGUgaGVhZGVyIChc
clxuKSB3ZSB3aWxsIHBhcnNlIENvbnRlbnQtVHlwZSBhbmQgQ29udGVudC1EaXNwb3NpdGlvbiBh
bmQKKyogdXBkYXRlIHRoZSBSZXNvdXJjZVJlc3BvbnNlIGFuZCB0aGVuIHNlbmQgaXQgYXdheS4K
KyoKKyovCitzaXplX3QgUmVzb3VyY2VIYW5kbGU6OmhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwg
c2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKK3sKKyAgICBBU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKKworICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSBzdGF0aWNfY2FzdDxS
ZXNvdXJjZUhhbmRsZSo+KGRhdGEpOworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBq
b2ItPmdldEludGVybmFsKCk7CisgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIHNpemVfdCBzZW50ID0gZC0+bV9mb3JtRGF0YVN0cmVhbS5yZWFkKHB0ciwg
c2l6ZSwgbm1lbWIpOworICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiBkZWZl
cnJlZCBsb2FkaW5nIGlzIGFjdGl2YXRlZC4KKyAgICBBU1NFUlQoIWQtPm1fZGVmZXJzTG9hZGlu
Zyk7CiAKLSAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyBzbyBjYW5jZWwgdGhlIGpvYi4KLSAg
ICBpZiAoIXNlbnQpCi0gICAgICAgIGpvYi0+Y2FuY2VsKCk7CisgICAgc2l6ZV90IHRvdGFsU2l6
ZSA9IHNpemUgKiBubWVtYjsKIAotICAgIHJldHVybiBzZW50OwotfQorICAgIFN0cmluZyBoZWFk
ZXIoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7CiAKLXN0YXRpYyBp
bmxpbmUgc2l6ZV90IGdldEZvcm1FbGVtZW50c0NvdW50KFJlc291cmNlSGFuZGxlKiBqb2IpCi17
Ci0gICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSA9IGpvYi0+Zmlyc3RSZXF1ZXN0KCkuaHR0
cEJvZHkoKTsKKyAgICAvKgorICAgICogYSkgV2UgY2FuIGZpbmlzaCBhbmQgc2VuZCB0aGUgUmVz
b3VyY2VSZXNwb25zZQorICAgICogYikgV2Ugd2lsbCBhZGQgdGhlIGN1cnJlbnQgaGVhZGVyIHRv
IHRoZSBIVFRQSGVhZGVyTWFwIG9mIHRoZSBSZXNvdXJjZVJlc3BvbnNlCisgICAgKgorICAgICog
VGhlIEhUVFAgc3RhbmRhcmQgcmVxdWlyZXMgdG8gdXNlIFxyXG4gYnV0IGZvciBjb21wYXRpYmls
aXR5IGl0IHJlY29tbWVuZHMgdG8KKyAgICAqIGFjY2VwdCBhbHNvIFxuLgorICAgICovCisgICAg
aWYgKGhlYWRlciA9PSBBdG9taWNTdHJpbmcoIlxyXG4iKSB8fCBoZWFkZXIgPT0gQXRvbWljU3Ry
aW5nKCJcbiIpKSB7CisgICAgICAgIGxvbmcgaHR0cENvZGUgPSAwOworICAgICAgICBkLT5tX2N1
cmxIYW5kbGUuZ2V0UmVzcG9uc2VDb2RlKGh0dHBDb2RlKTsKIAotICAgIGlmICghZm9ybURhdGEp
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoIWh0dHBDb2RlKSB7CisgICAgICAgICAg
ICAvLyBDb21lcyBoZXJlIHdoZW4gcmVjZWl2aW5nIDIwMCBDb25uZWN0aW9uIEVzdGFibGlzaGVk
LiBKdXN0IHJldHVybi4KKyAgICAgICAgICAgIHJldHVybiB0b3RhbFNpemU7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGlzSHR0cEluZm8oaHR0cENvZGUpKSB7CisgICAgICAgICAgICAvLyBKdXN0
IHJldHVybiB3aGVuIHJlY2VpdmluZyBodHRwIGluZm8sIGUuZy4gSFRUUC8xLjEgMTAwIENvbnRp
bnVlLgorICAgICAgICAgICAgLy8gSWYgbm90LCB0aGUgcmVxdWVzdCBtaWdodCBiZSBjYW5jZWxs
ZWQsIGJlY2F1c2UgdGhlIE1JTUUgdHlwZSB3aWxsIGJlIGVtcHR5IGZvciB0aGlzIHJlc3BvbnNl
LgorICAgICAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKKyAgICAgICAgfQogCi0gICAgLy8gUmVz
b2x2ZSB0aGUgYmxvYiBlbGVtZW50cyBzbyB0aGUgZm9ybURhdGEgY2FuIGNvcnJlY3RseSByZXBv
cnQgaXQncyBzaXplLgotICAgIGZvcm1EYXRhID0gZm9ybURhdGEtPnJlc29sdmVCbG9iUmVmZXJl
bmNlcygpOwotICAgIHNpemVfdCBzaXplID0gZm9ybURhdGEtPmVsZW1lbnRzKCkuc2l6ZSgpOwot
ICAgIGpvYi0+Zmlyc3RSZXF1ZXN0KCkuc2V0SFRUUEJvZHkoV1RGTW92ZShmb3JtRGF0YSkpOwor
ICAgICAgICBsb25nIGxvbmcgY29udGVudExlbmd0aCA9IDA7CisgICAgICAgIGQtPm1fY3VybEhh
bmRsZS5nZXRDb250ZW50TGVuZ2h0RG93bmxvYWQoY29udGVudExlbmd0aCk7CiAKLSAgICByZXR1
cm4gc2l6ZTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbam9iID0gUmVmUHRyPFJlc291cmNl
SGFuZGxlPihqb2IpLCBodHRwQ29kZSwgY29udGVudExlbmd0aF0geworICAgICAgICAgICAgaWYg
KCFqb2ItPmQtPm1fY2FuY2VsbGVkKQorICAgICAgICAgICAgICAgIGpvYi0+ZGlkUmVjZWl2ZUFs
bEhlYWRlcnMoaHR0cENvZGUsIGNvbnRlbnRMZW5ndGgpOworICAgICAgICB9KTsKKyAgICB9IGVs
c2UKKyAgICAgICAgam9iLT5kaWRSZWNlaXZlSGVhZGVyTGluZShoZWFkZXIpOworCisgICAgcmV0
dXJuIHRvdGFsU2l6ZTsKIH0KIAotc3RhdGljIHZvaWQgc2V0dXBGb3JtRGF0YShSZXNvdXJjZUhh
bmRsZSogam9iLCBib29sIGlzUG9zdFJlcXVlc3QpCisvLyBjYWxsZWQgd2l0aCBkYXRhIGFmdGVy
IGFsbCBoZWFkZXJzIGhhdmUgYmVlbiBwcm9jZXNzZWQgdmlhIGhlYWRlckNhbGxiYWNrCitzaXpl
X3QgUmVzb3VyY2VIYW5kbGU6OndyaXRlQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwg
c2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQogeworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkp
OworCisgICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxl
Kj4oZGF0YSk7CiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJu
YWwoKTsKLSAgICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiBlbGVtZW50cyA9IGpvYi0+Zmlyc3RS
ZXF1ZXN0KCkuaHR0cEJvZHkoKS0+ZWxlbWVudHMoKTsKLSAgICBzaXplX3QgbnVtRWxlbWVudHMg
PSBlbGVtZW50cy5zaXplKCk7CisgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQorICAgICAgICByZXR1
cm4gMDsKIAotICAgIHN0YXRpYyBjb25zdCBsb25nIGxvbmcgbWF4Q3VybE9mZlQgPSBkLT5tX2N1
cmxIYW5kbGUubWF4Q3VybE9mZlQoKTsKKyAgICAvLyBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVk
IHdoZW4gZGVmZXJyZWQgbG9hZGluZyBpcyBhY3RpdmF0ZWQuCisgICAgQVNTRVJUKCFkLT5tX2Rl
ZmVyc0xvYWRpbmcpOworCisgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IHNpemUgKiBubWVtYjsKKwor
ICAgIC8vIHRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBidXQgYXBwYXJlbnRseSBpcy4gQ1VS
TCB3cml0ZXMgdGhlIGRhdGEKKyAgICAvLyBvZiBodG1sIHBhZ2UgZXZlbiBpZiBpdCBpcyBhIHJl
ZGlyZWN0IHRoYXQgd2FzIGhhbmRsZWQgaW50ZXJuYWxseQorICAgIC8vIGNhbiBiZSBvYnNlcnZl
ZCBlLmcuIG9uIGdtYWlsLmNvbQorICAgIGxvbmcgaHR0cENvZGUgPSAwOworICAgIENVUkxjb2Rl
IGVyckNkID0gZC0+bV9jdXJsSGFuZGxlLmdldFJlc3BvbnNlQ29kZShodHRwQ29kZSk7CisgICAg
aWYgKENVUkxFX09LID09IGVyckNkICYmIGh0dHBDb2RlID49IDMwMCAmJiBodHRwQ29kZSA8IDQw
MCkKKyAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKIAotICAgIC8vIE9idGFpbiB0aGUgdG90YWwg
c2l6ZSBvZiB0aGUgZm9ybSBkYXRhCi0gICAgY3VybF9vZmZfdCBzaXplID0gMDsKLSAgICBib29s
IGNodW5rZWRUcmFuc2ZlciA9IGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
RWxlbWVudHM7IGkrKykgewotICAgICAgICBGb3JtRGF0YUVsZW1lbnQgZWxlbWVudCA9IGVsZW1l
bnRzW2ldOwotICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpU
eXBlOjpFbmNvZGVkRmlsZSkgewotICAgICAgICAgICAgbG9uZyBsb25nIGZpbGVTaXplUmVzdWx0
OwotICAgICAgICAgICAgaWYgKGdldEZpbGVTaXplKGVsZW1lbnQubV9maWxlbmFtZSwgZmlsZVNp
emVSZXN1bHQpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZpbGVTaXplUmVzdWx0ID4gbWF4Q3Vy
bE9mZlQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmlsZSBzaXplIGlzIHRvbyBiaWcgZm9y
IHNwZWNpZnlpbmcgaXQgdG8gY1VSTAotICAgICAgICAgICAgICAgICAgICBjaHVua2VkVHJhbnNm
ZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgc2l6ZSArPSBmaWxlU2l6ZVJlc3VsdDsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2h1bmtlZFRyYW5zZmVyID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBzaXplICs9IGVsZW1lbnRzW2ldLm1fZGF0YS5zaXplKCk7CisgICAgYm9vbCBzaG91bGRDYWxs
IHsgZmFsc2UgfTsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKGpvYi0+bV9yZWNl
aXZlZEJ1ZmZlck11dGV4KTsKKyAgICAgICAgCisgICAgICAgIGlmIChqb2ItPm1fcmVjZWl2ZWRC
dWZmZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2hvdWxkQ2FsbCA9IHRydWU7CisgICAgICAg
IAorICAgICAgICBqb2ItPm1fcmVjZWl2ZWRCdWZmZXIuYXBwZW5kKHB0ciwgdG90YWxTaXplKTsK
ICAgICB9CiAKLSAgICAvLyBjVVJMIGd1ZXNzZXMgdGhhdCB3ZSB3YW50IGNodW5rZWQgZW5jb2Rp
bmcgYXMgbG9uZyBhcyB3ZSBzcGVjaWZ5IHRoZSBoZWFkZXIKLSAgICBpZiAoY2h1bmtlZFRyYW5z
ZmVyKQotICAgICAgICBkLT5tX2N1cmxIYW5kbGUuYXBwZW5kUmVxdWVzdEhlYWRlcigiVHJhbnNm
ZXItRW5jb2Rpbmc6IGNodW5rZWQiKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKGlzUG9zdFJl
cXVlc3QpCi0gICAgICAgICAgICBkLT5tX2N1cmxIYW5kbGUuc2V0UG9zdEZpZWxkTGFyZ2Uoc2l6
ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGQtPm1fY3VybEhhbmRsZS5zZXRJbkZpbGVT
aXplTGFyZ2Uoc2l6ZSk7CisgICAgaWYgKHNob3VsZENhbGwpIHsKKyAgICAgICAgY2FsbE9uTWFp
blRocmVhZChbam9iID0gUmVmUHRyPFJlc291cmNlSGFuZGxlPihqb2IpXSB7CisgICAgICAgICAg
ICBpZiAoIWpvYi0+ZC0+bV9jYW5jZWxsZWQpCisgICAgICAgICAgICAgICAgam9iLT5kaWRSZWNl
aXZlQ29udGVudERhdGEoKTsKKyAgICAgICAgfSk7CiAgICAgfQogCi0gICAgZC0+bV9jdXJsSGFu
ZGxlLnNldFJlYWRDYWxsYmFja0Z1bmN0aW9uKHJlYWRDYWxsYmFjaywgam9iKTsKKyAgICByZXR1
cm4gdG90YWxTaXplOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpzZXR1cFBVVCgpCisvLyBz
eW5jIGxvYWRlcgorCit2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybUxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQogewotICAgIFJl
c291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBnZXRJbnRlcm5hbCgpOwotICAgIGQtPm1fY3VybEhh
bmRsZS5lbmFibGVIdHRwUHV0UmVxdWVzdCgpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAKLSAgICAvLyBEaXNhYmxlIHRoZSBFeHBlY3Q6IDEwMCBjb250aW51ZSBoZWFkZXIKLSAgICBk
LT5tX2N1cmxIYW5kbGUuYXBwZW5kUmVxdWVzdEhlYWRlcigiRXhwZWN0OiIpOworICAgIFN5bmNo
cm9ub3VzTG9hZGVyQ2xpZW50IGNsaWVudDsKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhh
bmRsZSA9IGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRsZShjb250ZXh0LCByZXF1ZXN0LCAmY2xp
ZW50LCBmYWxzZSwgZmFsc2UpKTsKIAotICAgIHNpemVfdCBudW1FbGVtZW50cyA9IGdldEZvcm1F
bGVtZW50c0NvdW50KHRoaXMpOwotICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgIHJldHVy
bjsKKyAgICBoYW5kbGUuZ2V0KCktPmRpc3BhdGNoU3luY2hyb25vdXNKb2IoKTsKIAotICAgIHNl
dHVwRm9ybURhdGEodGhpcywgZmFsc2UpOworICAgIGVycm9yID0gY2xpZW50LmVycm9yKCk7Cisg
ICAgZGF0YS5zd2FwKGNsaWVudC5tdXRhYmxlRGF0YSgpKTsKKyAgICByZXNwb25zZSA9IGNsaWVu
dC5yZXNwb25zZSgpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlOjpzZXR1cFBPU1QoKQordm9p
ZCBSZXNvdXJjZUhhbmRsZTo6ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigpCiB7Ci0gICAgUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbCogZCA9IGdldEludGVybmFsKCk7Ci0gICAgZC0+bV9jdXJsSGFuZGxl
LmVuYWJsZUh0dHBQb3N0UmVxdWVzdCgpOwotCi0gICAgc2l6ZV90IG51bUVsZW1lbnRzID0gZ2V0
Rm9ybUVsZW1lbnRzQ291bnQodGhpcyk7Ci0gICAgaWYgKCFudW1FbGVtZW50cykKLSAgICAgICAg
cmV0dXJuOworICAgIFVSTCBrdXJsID0gZmlyc3RSZXF1ZXN0KCkudXJsKCk7CiAKLSAgICAvLyBE
byBub3Qgc3RyZWFtIGZvciBzaW1wbGUgUE9TVCBkYXRhCi0gICAgaWYgKG51bUVsZW1lbnRzID09
IDEpIHsKLSAgICAgICAgZmlyc3RSZXF1ZXN0KCkuaHR0cEJvZHkoKS0+ZmxhdHRlbihkLT5tX3Bv
c3RCeXRlcyk7Ci0gICAgICAgIGlmIChkLT5tX3Bvc3RCeXRlcy5zaXplKCkpCi0gICAgICAgICAg
ICBkLT5tX2N1cmxIYW5kbGUuc2V0UG9zdEZpZWxkcyhkLT5tX3Bvc3RCeXRlcy5kYXRhKCksIGQt
Pm1fcG9zdEJ5dGVzLnNpemUoKSk7CisgICAgaWYgKGt1cmwucHJvdG9jb2xJc0RhdGEoKSkgewor
ICAgICAgICBoYW5kbGVEYXRhVVJMKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBz
ZXR1cEZvcm1EYXRhKHRoaXMsIHRydWUpOworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQg
PSBnZXRJbnRlcm5hbCgpOworCisgICAgLy8gSWYgZGVmZXJzTG9hZGluZyBpcyB0cnVlIGFuZCB3
ZSBjYWxsIGN1cmxfZWFzeV9wZXJmb3JtCisgICAgLy8gb24gYSBwYXVzZWQgaGFuZGxlLCBsaWJj
VVJMIHdvdWxkIGRvIHRoZSB0cmFuc2ZlcnQgYW55d2F5CisgICAgLy8gYW5kIHdlIHdvdWxkIGFz
c2VydCBzbyBmb3JjZSBkZWZlcnNMb2FkaW5nIHRvIGJlIGZhbHNlLgorICAgIGQtPm1fZGVmZXJz
TG9hZGluZyA9IGZhbHNlOworCisgICAgaW5pdGlhbGl6ZSgpOworCisgICAgLy8gY3VybF9lYXN5
X3BlcmZvcm0gYmxvY2tzIHVudGlsIHRoZSB0cmFuc2ZlcnQgaXMgZmluaXNoZWQuCisgICAgQ1VS
TGNvZGUgcmV0ID0gZC0+bV9jdXJsSGFuZGxlLnBlcmZvcm0oKTsKKworI2lmIEVOQUJMRShXRUJf
VElNSU5HKQorICAgIGNhbGN1bGF0ZVdlYlRpbWluZ0luZm9ybWF0aW9ucygpOworI2VuZGlmCisK
KyAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgaWYgKHJldCAhPSBDVVJMRV9PSykKKyAgICAg
ICAgICAgIGNsaWVudCgpLT5kaWRGYWlsKHRoaXMsIFJlc291cmNlRXJyb3IoZC0+bV9jdXJsSGFu
ZGxlLCBkLT5tX3NzbEVycm9ycykpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjbGllbnQo
KS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHRoaXMsIFJlc291cmNlUmVzcG9uc2UoZC0+bV9yZXNwb25z
ZSkpOworICAgIH0KIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6aGFuZGxlRGF0YVVSTCgpCkBA
IC03NjMsMjE4ICsxMDYyLDYgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6aGFuZGxlRGF0YVVSTCgp
CiAgICAgICAgIGNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMpOwogfQogCi12b2lkIFJl
c291cmNlSGFuZGxlOjpkaXNwYXRjaFN5bmNocm9ub3VzSm9iKCkKLXsKLSAgICBVUkwga3VybCA9
IGZpcnN0UmVxdWVzdCgpLnVybCgpOwotCi0gICAgaWYgKGt1cmwucHJvdG9jb2xJc0RhdGEoKSkg
ewotICAgICAgICBoYW5kbGVEYXRhVVJMKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gZ2V0SW50ZXJuYWwoKTsKLQotICAgIC8vIElm
IGRlZmVyc0xvYWRpbmcgaXMgdHJ1ZSBhbmQgd2UgY2FsbCBjdXJsX2Vhc3lfcGVyZm9ybQotICAg
IC8vIG9uIGEgcGF1c2VkIGhhbmRsZSwgbGliY1VSTCB3b3VsZCBkbyB0aGUgdHJhbnNmZXJ0IGFu
eXdheQotICAgIC8vIGFuZCB3ZSB3b3VsZCBhc3NlcnQgc28gZm9yY2UgZGVmZXJzTG9hZGluZyB0
byBiZSBmYWxzZS4KLSAgICBkLT5tX2RlZmVyc0xvYWRpbmcgPSBmYWxzZTsKLQotICAgIGluaXRp
YWxpemUoKTsKLQotICAgIC8vIGN1cmxfZWFzeV9wZXJmb3JtIGJsb2NrcyB1bnRpbCB0aGUgdHJh
bnNmZXJ0IGlzIGZpbmlzaGVkLgotICAgIENVUkxjb2RlIHJldCA9IGQtPm1fY3VybEhhbmRsZS5w
ZXJmb3JtKCk7Ci0KLSAgICBpZiAocmV0ICE9IENVUkxFX09LKSB7Ci0gICAgICAgIFJlc291cmNl
RXJyb3IgZXJyb3IoQVNDSUlMaXRlcmFsKGVycm9yRG9tYWluQ3VybCksIHJldCwga3VybCwgU3Ry
aW5nKGN1cmxfZWFzeV9zdHJlcnJvcihyZXQpKSk7Ci0gICAgICAgIGVycm9yLnNldFNTTEVycm9y
cyhkLT5tX3NzbEVycm9ycyk7Ci0gICAgICAgIGQtPmNsaWVudCgpLT5kaWRGYWlsKHRoaXMsIGVy
cm9yKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoZC0+Y2xpZW50KCkpCi0gICAgICAgICAg
ICBkLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHRoaXMsIFJlc291cmNlUmVzcG9uc2Uo
ZC0+bV9yZXNwb25zZSkpOwotICAgIH0KLQotI2lmIEVOQUJMRShXRUJfVElNSU5HKQotICAgIGNh
bGN1bGF0ZVdlYlRpbWluZ0luZm9ybWF0aW9ucyhkKTsKLSNlbmRpZgotfQotCi12b2lkIFJlc291
cmNlSGFuZGxlOjphcHBseUF1dGhlbnRpY2F0aW9uKCkKLXsKLSAgICBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QgPSBmaXJzdFJlcXVlc3QoKTsKLSAgICAvLyBtX3VzZXIvbV9wYXNzIGFyZSBjcmVk
ZW50aWFscyBnaXZlbiBtYW51YWxseSwgZm9yIGluc3RhbmNlLCBieSB0aGUgYXJndW1lbnRzIHBh
c3NlZCB0byBYTUxIdHRwUmVxdWVzdC5vcGVuKCkuCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bCogZCA9IGdldEludGVybmFsKCk7Ci0KLSAgICBTdHJpbmcgcGFydGl0aW9uID0gcmVxdWVzdC5j
YWNoZVBhcnRpdGlvbigpOwotCi0gICAgaWYgKHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkp
IHsKLSAgICAgICAgaWYgKGQtPm1fdXNlci5pc0VtcHR5KCkgJiYgZC0+bV9wYXNzLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzcxNzQwNTA+IC0gRm9yIFVSTHMg
dGhhdCBtYXRjaCB0aGUgcGF0aHMgb2YgdGhvc2UgcHJldmlvdXNseSBjaGFsbGVuZ2VkIGZvciBI
VFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uLCAKLSAgICAgICAgICAgIC8vIHRyeSBhbmQgcmV1c2Ug
dGhlIGNyZWRlbnRpYWwgcHJlZW1wdGl2ZWx5LCBhcyBhbGxvd2VkIGJ5IFJGQyAyNjE3LgotICAg
ICAgICAgICAgZC0+bV9pbml0aWFsQ3JlZGVudGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpkZWZh
dWx0Q3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQocGFydGl0aW9uLCByZXF1ZXN0LnVybCgpKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBwcm90
ZWN0aW9uIHNwYWNlIGtub3duIGZvciB0aGUgVVJMLCB1cGRhdGUgc3RvcmVkIGNyZWRlbnRpYWxz
Ci0gICAgICAgICAgICAvLyBiZWZvcmUgc2VuZGluZyBhIHJlcXVlc3QuIFRoaXMgbWFrZXMgaXQg
cG9zc2libGUgdG8gaW1wbGVtZW50IGxvZ291dCBieSBzZW5kaW5nIGFuCi0gICAgICAgICAgICAv
LyBYTUxIdHRwUmVxdWVzdCB3aXRoIGtub3duIGluY29ycmVjdCBjcmVkZW50aWFscywgYW5kIGFi
b3J0aW5nIGl0IGltbWVkaWF0ZWx5IChzbyB0aGF0Ci0gICAgICAgICAgICAvLyBhbiBhdXRoZW50
aWNhdGlvbiBkaWFsb2cgZG9lc24ndCBwb3AgdXApLgotICAgICAgICAgICAgQ3JlZGVudGlhbFN0
b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLnNldChwYXJ0aXRpb24sIENyZWRlbnRp
YWwoZC0+bV91c2VyLCBkLT5tX3Bhc3MsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpLCByZXF1
ZXN0LnVybCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFN0cmluZyB1c2VyID0gZC0+bV91
c2VyOwotICAgIFN0cmluZyBwYXNzd29yZCA9IGQtPm1fcGFzczsKLQotICAgIGlmICghZC0+bV9p
bml0aWFsQ3JlZGVudGlhbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgdXNlciA9IGQtPm1faW5pdGlh
bENyZWRlbnRpYWwudXNlcigpOwotICAgICAgICBwYXNzd29yZCA9IGQtPm1faW5pdGlhbENyZWRl
bnRpYWwucGFzc3dvcmQoKTsKLSAgICAgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBBdXRo
ZW50aWNhdGlvbihDVVJMQVVUSF9CQVNJQyk7Ci0gICAgfQotCi0gICAgLy8gSXQgc2VlbXMgd2Ug
bmVlZCB0byBzZXQgQ1VSTE9QVF9VU0VSUFdEIGV2ZW4gaWYgdXNlcm5hbWUgYW5kIHBhc3N3b3Jk
IGlzIGVtcHR5LgotICAgIC8vIE90aGVyd2lzZSBjVVJMIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkg
Y29udGludWUgd2l0aCBhIG5ldyByZXF1ZXN0IGFmdGVyIGEgNDAxIHJlc3BvbnNlLgotCi0gICAg
Ly8gY3VybCBDVVJMT1BUX1VTRVJQV0QgZXhwZWN0cyB1c2VybmFtZTpwYXNzd29yZAotICAgIGQt
Pm1fY3VybEhhbmRsZS5zZXRIdHRwQXV0aFVzZXJQYXNzKHVzZXIsIHBhc3N3b3JkKTsKLX0KLQot
dm9pZCBSZXNvdXJjZUhhbmRsZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgQ3VybENvbnRleHQmIGNv
bnRleHQgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCk7Ci0KLSAgICBVUkwgdXJsID0gZmlyc3RS
ZXF1ZXN0KCkudXJsKCk7Ci0KLSAgICAvLyBSZW1vdmUgYW55IGZyYWdtZW50IHBhcnQsIG90aGVy
d2lzZSBjdXJsIHdpbGwgc2VuZCBpdCBhcyBwYXJ0IG9mIHRoZSByZXF1ZXN0LgotICAgIHVybC5y
ZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLQotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwq
IGQgPSBnZXRJbnRlcm5hbCgpOwotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB1cmwuc3RyaW5nKCk7
Ci0KLSAgICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpIHsKLSAgICAgICAgLy8gUmVtb3ZlIGFueSBx
dWVyeSBwYXJ0IHNlbnQgdG8gYSBsb2NhbCBmaWxlLgotICAgICAgICBpZiAoIXVybC5xdWVyeSgp
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gQnkgc2V0dGluZyB0aGUgcXVlcnkgdG8gYSBu
dWxsIHN0cmluZyBpdCdsbCBiZSByZW1vdmVkLgotICAgICAgICAgICAgdXJsLnNldFF1ZXJ5KFN0
cmluZygpKTsKLSAgICAgICAgICAgIHVybFN0cmluZyA9IHVybC5zdHJpbmcoKTsKLSAgICAgICAg
fQotICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIE1JTUUgdHlwZSBiYXNlZCBvbiB0aGUgcGF0aC4K
LSAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1lVHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRN
SU1FVHlwZUZvclBhdGgodXJsKSk7Ci0gICAgfQotCi0gICAgaWYgKGQtPm1fZGVmZXJzTG9hZGlu
ZykgewotICAgICAgICBDVVJMY29kZSBlcnJvciA9IGQtPm1fY3VybEhhbmRsZS5wYXVzZShDVVJM
UEFVU0VfQUxMKTsKLSAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCBwYXVzZSB0aGUgaGFuZGxlLCB3
ZSB3b3VsZCBBU1NFUlQgaW4gdGhlCi0gICAgICAgIC8vIGhlYWRlciBjYWxsYmFjay4gU28ganVz
dCBhc3NlcnQgaGVyZS4KLSAgICAgICAgQVNTRVJUX1VOVVNFRChlcnJvciwgZXJyb3IgPT0gQ1VS
TEVfT0spOwotICAgIH0KLQotI2lmbmRlZiBOREVCVUcKLSAgICBkLT5tX2N1cmxIYW5kbGUuZW5h
YmxlVmVyYm9zZUlmVXNlZCgpOwotICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVTdGRFcnJJZlVz
ZWQoKTsKLSNlbmRpZgotCi0gICAgZC0+bV9jdXJsSGFuZGxlLnNldFNzbFZlcmlmeVBlZXIoQ3Vy
bEhhbmRsZTo6VmVyaWZ5UGVlckVuYWJsZSk7Ci0gICAgZC0+bV9jdXJsSGFuZGxlLnNldFNzbFZl
cmlmeUhvc3QoQ3VybEhhbmRsZTo6VmVyaWZ5SG9zdFN0cmljdE5hbWVDaGVjayk7Ci0gICAgZC0+
bV9jdXJsSGFuZGxlLnNldFByaXZhdGVEYXRhKHRoaXMpOwotICAgIGQtPm1fY3VybEhhbmRsZS5z
ZXRXcml0ZUNhbGxiYWNrRnVuY3Rpb24od3JpdGVDYWxsYmFjaywgdGhpcyk7Ci0gICAgZC0+bV9j
dXJsSGFuZGxlLnNldEhlYWRlckNhbGxiYWNrRnVuY3Rpb24oaGVhZGVyQ2FsbGJhY2ssIHRoaXMp
OwotICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVBdXRvUmVmZXJlcigpOwotICAgIGQtPm1fY3Vy
bEhhbmRsZS5lbmFibGVGb2xsb3dMb2NhdGlvbigpOwotICAgIGQtPm1fY3VybEhhbmRsZS5lbmFi
bGVIdHRwQXV0aGVudGljYXRpb24oQ1VSTEFVVEhfQU5ZKTsKLSAgICBkLT5tX2N1cmxIYW5kbGUu
ZW5hYmxlU2hhcmVIYW5kbGUoKTsKLSAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlVGltZW91dCgp
OwotICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVBbGxvd2VkUHJvdG9jb2xzKCk7Ci0gICAgc2V0
U1NMQ2xpZW50Q2VydGlmaWNhdGUodGhpcyk7Ci0KLSAgICBpZiAoQ3VybENvbnRleHQ6OnNpbmds
ZXRvbigpLnNob3VsZElnbm9yZVNTTEVycm9ycygpKQotICAgICAgICBkLT5tX2N1cmxIYW5kbGUu
c2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyRGlzYWJsZSk7Ci0gICAgZWxz
ZQotICAgICAgICBzZXRTU0xWZXJpZnlPcHRpb25zKHRoaXMpOwotCi0gICAgZC0+bV9jdXJsSGFu
ZGxlLmVuYWJsZUNBSW5mb0lmRXhpc3RzKCk7Ci0KLSAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxl
QWNjZXB0RW5jb2RpbmcoKTsKLSAgICBkLT5tX2N1cmxIYW5kbGUuc2V0VXJsKHVybFN0cmluZyk7
Ci0gICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUNvb2tpZUphcklmRXhpc3RzKCk7Ci0KLSAgICBk
LT5tX2N1cmxIYW5kbGUuY2xlYXJSZXF1ZXN0SGVhZGVycygpOwotCi0gICAgaWYgKGZpcnN0UmVx
dWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKS5zaXplKCkgPiAwKSB7Ci0gICAgICAgIEhUVFBIZWFk
ZXJNYXAgY3VzdG9tSGVhZGVycyA9IGZpcnN0UmVxdWVzdCgpLmh0dHBIZWFkZXJGaWVsZHMoKTsK
LQotICAgICAgICBib29sIGhhc0NhY2hlSGVhZGVycyA9IGN1c3RvbUhlYWRlcnMuY29udGFpbnMo
SFRUUEhlYWRlck5hbWU6OklmTW9kaWZpZWRTaW5jZSkgfHwgY3VzdG9tSGVhZGVycy5jb250YWlu
cyhIVFRQSGVhZGVyTmFtZTo6SWZOb25lTWF0Y2gpOwotICAgICAgICBpZiAoIWhhc0NhY2hlSGVh
ZGVycyAmJiBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmlzQ2FjaGVkKHVybCkpIHsK
LSAgICAgICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuYWRkQ2FjaGVFbnRy
eUNsaWVudCh1cmwsIHRoaXMpOwotICAgICAgICAgICAgSFRUUEhlYWRlck1hcCYgcmVxdWVzdEhl
YWRlcnMgPSBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLnJlcXVlc3RIZWFkZXJzKHVy
bCk7Ci0KLSAgICAgICAgICAgIC8vIGFwcGVuZCBhZGRpdGlvbmFsIGNhY2hlIGluZm9ybWF0aW9u
Ci0gICAgICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlcXVlc3RI
ZWFkZXJzLmJlZ2luKCk7Ci0gICAgICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSByZXF1ZXN0SGVhZGVycy5lbmQoKTsKLSAgICAgICAgICAgIHdoaWxlIChpdCAhPSBl
bmQpIHsKLSAgICAgICAgICAgICAgICBjdXN0b21IZWFkZXJzLnNldChpdC0+a2V5LCBpdC0+dmFs
dWUpOwotICAgICAgICAgICAgICAgICsraXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBk
LT5tX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycyA9IHRydWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmb3IgKGF1dG8gY3VzdG9tSGVhZGVyIDogY3VzdG9tSGVhZGVycykKLSAgICAgICAgICAg
IGQtPm1fY3VybEhhbmRsZS5hcHBlbmRSZXF1ZXN0SGVhZGVyKGN1c3RvbUhlYWRlci5rZXksIGN1
c3RvbUhlYWRlci52YWx1ZSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIG1ldGhvZCA9IGZpcnN0UmVx
dWVzdCgpLmh0dHBNZXRob2QoKTsKLSAgICBpZiAoIkdFVCIgPT0gbWV0aG9kKQotICAgICAgICBk
LT5tX2N1cmxIYW5kbGUuZW5hYmxlSHR0cEdldFJlcXVlc3QoKTsKLSAgICBlbHNlIGlmICgiUE9T
VCIgPT0gbWV0aG9kKQotICAgICAgICBzZXR1cFBPU1QoKTsKLSAgICBlbHNlIGlmICgiUFVUIiA9
PSBtZXRob2QpCi0gICAgICAgIHNldHVwUFVUKCk7Ci0gICAgZWxzZSBpZiAoIkhFQUQiID09IG1l
dGhvZCkKLSAgICAgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBIZWFkUmVxdWVzdCgpOwot
ICAgIGVsc2UgewotICAgICAgICBkLT5tX2N1cmxIYW5kbGUuc2V0SHR0cEN1c3RvbVJlcXVlc3Qo
bWV0aG9kKTsKLSAgICAgICAgc2V0dXBQVVQoKTsKLSAgICB9Ci0KLSAgICBkLT5tX2N1cmxIYW5k
bGUuZW5hYmxlUmVxdWVzdEhlYWRlcnMoKTsKLQotICAgIGFwcGx5QXV0aGVudGljYXRpb24oKTsK
LQotICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVQcm94eUlmRXhpc3RzKCk7Ci19Ci0KLXZvaWQg
UmVzb3VyY2VIYW5kbGU6OmhhbmRsZUN1cmxNc2coQ1VSTE1zZyogbXNnKQotewotICAgIFJlc291
cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBnZXRJbnRlcm5hbCgpOwotCi0gICAgaWYgKENVUkxFX09L
ID09IG1zZy0+ZGF0YS5yZXN1bHQpIHsKLSNpZiBFTkFCTEUoV0VCX1RJTUlORykKLSAgICAgICAg
Y2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25zKGQpOwotI2VuZGlmCi0gICAgICAgIGlmICgh
ZC0+bV9yZXNwb25zZS5yZXNwb25zZUZpcmVkKCkpIHsKLSAgICAgICAgICAgIGhhbmRsZUxvY2Fs
UmVjZWl2ZVJlc3BvbnNlKHRoaXMsIGQpOwotICAgICAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVk
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkLT5t
X211bHRpcGFydEhhbmRsZSkKLSAgICAgICAgICAgIGQtPm1fbXVsdGlwYXJ0SGFuZGxlLT5jb250
ZW50RW5kZWQoKTsKLQotICAgICAgICBpZiAoZC0+Y2xpZW50KCkpIHsKLSAgICAgICAgICAgIGQt
PmNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMpOwotICAgICAgICAgICAgQ3VybENhY2hl
TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRGaW5pc2hMb2FkaW5nKCp0aGlzKTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFVSTCB1cmwgPSBkLT5tX2N1cmxIYW5kbGUuZ2V0RWZm
ZWN0aXZlVVJMKCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkN1
cmwgRVJST1IgZm9yIHVybD0nJXMnLCBlcnJvcjogJyVzJ1xuIiwgdXJsLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCksIGN1cmxfZWFzeV9zdHJlcnJvcihtc2ctPmRhdGEucmVzdWx0KSk7Ci0jZW5kaWYK
LSAgICAgICAgaWYgKGQtPmNsaWVudCgpKSB7Ci0gICAgICAgICAgICBSZXNvdXJjZUVycm9yIHJl
c291cmNlRXJyb3IoQVNDSUlMaXRlcmFsKGVycm9yRG9tYWluQ3VybCksIG1zZy0+ZGF0YS5yZXN1
bHQsIHVybCwgU3RyaW5nKGN1cmxfZWFzeV9zdHJlcnJvcihtc2ctPmRhdGEucmVzdWx0KSkpOwot
ICAgICAgICAgICAgcmVzb3VyY2VFcnJvci5zZXRTU0xFcnJvcnMoZC0+bV9zc2xFcnJvcnMpOwot
ICAgICAgICAgICAgZC0+Y2xpZW50KCktPmRpZEZhaWwodGhpcywgcmVzb3VyY2VFcnJvcik7Ci0g
ICAgICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZEZhaWwoKnRoaXMp
OwotICAgICAgICB9Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291
cmNlSGFuZGxlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNDdiZDE5YmYzMTYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVt
bWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2Vy
IDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBjZWxl
cmF0b3IgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0gPGJmdWxnaGFt
QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBh
cm9nYUBwYXJvZ2EuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEzIFBldGVyIEdhbCA8Z2FscGV0
ZXJAaW5mLnUtc3plZ2VkLmh1PiwgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBbGV4IENocmlzdGVuc2VuIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAxMyBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlTWFuYWdlci5oIgotCi0jaWYg
VVNFKENVUkwpCi0KLSNpbmNsdWRlICJDcmVkZW50aWFsU3RvcmFnZS5oIgotI2luY2x1ZGUgIkhU
VFBIZWFkZXJOYW1lcy5oIgotI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCi0jaW5jbHVkZSAiTXVs
dGlwYXJ0SGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgotI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKLSNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgotI2luY2x1ZGUgIlNTTEhhbmRsZS5o
IgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+Ci0KLSNpZiBPUyhXSU5ET1dTKQot
I2Vsc2UKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNkZWZpbmUgTUFYX1BBVEggTUFYUEFUSExF
TgotI2VuZGlmCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWYg
RU5BQkxFKFdFQl9USU1JTkcpCi0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jZW5kaWYK
LSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgaW50IHNl
bGVjdFRpbWVvdXRNUyA9IDU7Ci1zdGF0aWMgY29uc3QgU2Vjb25kcyBwb2xsVGltZSB7IDUwX21z
IH07Ci1jb25zdCBpbnQgbWF4UnVubmluZ0pvYnMgPSAxMjg7Ci0KLVJlc291cmNlSGFuZGxlTWFu
YWdlcjo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCkKLSAgICA6IG1fZG93bmxvYWRUaW1lcigqdGhp
cywgJlJlc291cmNlSGFuZGxlTWFuYWdlcjo6ZG93bmxvYWRUaW1lckNhbGxiYWNrKQotICAgICwg
bV9ydW5uaW5nSm9icygwKQotewotCi19Ci0KLVJlc291cmNlSGFuZGxlTWFuYWdlcjo6flJlc291
cmNlSGFuZGxlTWFuYWdlcigpCi17Ci0KLX0KLQotUmVzb3VyY2VIYW5kbGVNYW5hZ2VyKiBSZXNv
dXJjZUhhbmRsZU1hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCkKLXsKLSAgICBzdGF0aWMgUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyKiBzaGFyZWRJbnN0YW5jZSA9IDA7Ci0gICAgaWYgKCFzaGFyZWRJbnN0
YW5jZSkKLSAgICAgICAgc2hhcmVkSW5zdGFuY2UgPSBuZXcgUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
KCk7Ci0gICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxl
TWFuYWdlcjo6ZG93bmxvYWRUaW1lckNhbGxiYWNrKCkKLXsKLSAgICBzdGFydFNjaGVkdWxlZEpv
YnMoKTsKLQotICAgIGZkX3NldCBmZHJlYWQ7Ci0gICAgZmRfc2V0IGZkd3JpdGU7Ci0gICAgZmRf
c2V0IGZkZXhjZXA7Ci0gICAgaW50IG1heGZkID0gMDsKLQotICAgIHN0cnVjdCB0aW1ldmFsIHRp
bWVvdXQ7Ci0gICAgdGltZW91dC50dl9zZWMgPSAwOwotICAgIHRpbWVvdXQudHZfdXNlYyA9IHNl
bGVjdFRpbWVvdXRNUyAqIDEwMDA7ICAgICAgIC8vIHNlbGVjdCB3YWl0cyBtaWNyb3NlY29uZHMK
LQotICAgIC8vIFJldHJ5ICdzZWxlY3QnIGlmIGl0IHdhcyBpbnRlcnJ1cHRlZCBieSBhIHByb2Nl
c3Mgc2lnbmFsLgotICAgIGludCByYyA9IDA7Ci0gICAgZG8gewotICAgICAgICBtX2N1cmxNdWx0
aUhhbmRsZS5nZXRGZFNldChmZHJlYWQsIGZkd3JpdGUsIGZkZXhjZXAsIG1heGZkKTsKLQotICAg
ICAgICAvLyBXaGVuIHRoZSAzIGZpbGUgZGVzY3JpcHRvcnMgYXJlIGVtcHR5LCB3aW5zb2NrIHdp
bGwgcmV0dXJuIC0xCi0gICAgICAgIC8vIGFuZCBiYWlsIG91dCwgc3RvcHBpbmcgdGhlIGZpbGUg
ZG93bmxvYWQuIFNvIG1ha2Ugc3VyZSB3ZQotICAgICAgICAvLyBoYXZlIHZhbGlkIGZpbGUgZGVz
Y3JpcHRvcnMgYmVmb3JlIGNhbGxpbmcgc2VsZWN0LgotICAgICAgICBpZiAobWF4ZmQgPj0gMCkK
LSAgICAgICAgICAgIHJjID0gOjpzZWxlY3QobWF4ZmQgKyAxLCAmZmRyZWFkLCAmZmR3cml0ZSwg
JmZkZXhjZXAsICZ0aW1lb3V0KTsKLSAgICB9IHdoaWxlIChyYyA9PSAtMSAmJiBlcnJubyA9PSBF
SU5UUik7Ci0KLSAgICBpZiAoLTEgPT0gcmMpIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIHBl
cnJvcigiYmFkOiBzZWxlY3QoKSByZXR1cm5lZCAtMTogIik7Ci0jZW5kaWYKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGludCBydW5uaW5nSGFuZGxlcyA9IDA7Ci0gICAgd2hpbGUgKG1f
Y3VybE11bHRpSGFuZGxlLnBlcmZvcm0ocnVubmluZ0hhbmRsZXMpID09IENVUkxNX0NBTExfTVVM
VElfUEVSRk9STSkgeyB9Ci0KLSAgICAvLyBjaGVjayB0aGUgY3VybCBtZXNzYWdlcyBpbmRpY2F0
aW5nIGNvbXBsZXRlZCB0cmFuc2ZlcnMKLSAgICAvLyBhbmQgZnJlZSB0aGVpciByZXNvdXJjZXMK
LSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpbnQgbWVzc2FnZXNJblF1ZXVlID0gMDsKLSAg
ICAgICAgQ1VSTE1zZyogbXNnID0gbV9jdXJsTXVsdGlIYW5kbGUucmVhZEluZm8obWVzc2FnZXNJ
blF1ZXVlKTsKLSAgICAgICAgaWYgKCFtc2cpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAvLyBmaW5kIHRoZSBub2RlIHdoaWNoIGhhcyBzYW1lIGQtPm1faGFuZGxlIGFzIGNvbXBsZXRl
ZCB0cmFuc2ZlcgotICAgICAgICBDVVJMKiBoYW5kbGUgPSBtc2ctPmVhc3lfaGFuZGxlOwotICAg
ICAgICBBU1NFUlQoaGFuZGxlKTsKLSAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9IG51bGxw
dHI7Ci0gICAgICAgIENVUkxjb2RlIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKGhhbmRsZSwgQ1VS
TElORk9fUFJJVkFURSwgJmpvYik7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoZXJyLCBDVVJMRV9P
SyA9PSBlcnIpOwotICAgICAgICBBU1NFUlQoam9iKTsKLSAgICAgICAgaWYgKCFqb2IpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpv
Yi0+Z2V0SW50ZXJuYWwoKTsKLQotICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKLSAgICAg
ICAgICAgIHJlbW92ZUZyb21DdXJsKGpvYik7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChDVVJMTVNHX0RPTkUgIT0gbXNnLT5tc2cpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBqb2ItPmhhbmRsZUN1cmxNc2cobXNnKTsKLSAgICAgICAg
cmVtb3ZlRnJvbUN1cmwoam9iKTsKLSAgICB9Ci0KLSAgICBib29sIHN0YXJ0ZWQgPSBzdGFydFNj
aGVkdWxlZEpvYnMoKTsgLy8gbmV3IGpvYnMgbWlnaHQgaGF2ZSBiZWVuIGFkZGVkIGluIHRoZSBt
ZWFudGltZQotCi0gICAgaWYgKCFtX2Rvd25sb2FkVGltZXIuaXNBY3RpdmUoKSAmJiAoc3RhcnRl
ZCB8fCAocnVubmluZ0hhbmRsZXMgPiAwKSkpCi0gICAgICAgIG1fZG93bmxvYWRUaW1lci5zdGFy
dE9uZVNob3QocG9sbFRpbWUpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6cmVt
b3ZlRnJvbUN1cmwoUmVzb3VyY2VIYW5kbGUqIGpvYikKLXsKLSAgICBSZXNvdXJjZUhhbmRsZUlu
dGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOwotICAgIEFTU0VSVChkLT5tX2N1cmxIYW5k
bGUuaGFuZGxlKCkpOwotICAgIGlmICghZC0+bV9jdXJsSGFuZGxlLmhhbmRsZSgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9ydW5uaW5nSm9icy0tOwotCi0gICAgbV9jdXJsTXVsdGlIYW5kbGUu
cmVtb3ZlSGFuZGxlKGQtPm1fY3VybEhhbmRsZS5oYW5kbGUoKSk7Ci0gICAgam9iLT5kZXJlZigp
OwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6YWRkKFJlc291cmNlSGFuZGxlKiBq
b2IpCi17Ci0gICAgLy8gd2UgY2FuIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBjdXJsLCBzbyB0byBh
dm9pZCByZS1lbnRyYW5jeSBpc3N1ZXMKLSAgICAvLyBzY2hlZHVsZSB0aGlzIGpvYiB0byBiZSBh
ZGRlZCB0aGUgbmV4dCB0aW1lIHdlIGVudGVyIGN1cmwgZG93bmxvYWQgbG9vcAotICAgIGpvYi0+
cmVmKCk7Ci0gICAgbV9yZXNvdXJjZUhhbmRsZUxpc3QuYXBwZW5kKGpvYik7Ci0gICAgaWYgKCFt
X2Rvd25sb2FkVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9kb3dubG9hZFRpbWVyLnN0YXJ0
T25lU2hvdChwb2xsVGltZSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpyZW1v
dmVTY2hlZHVsZWRKb2IoUmVzb3VyY2VIYW5kbGUqIGpvYikKLXsKLSAgICBpbnQgc2l6ZSA9IG1f
cmVzb3VyY2VIYW5kbGVMaXN0LnNpemUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7
IGkrKykgewotICAgICAgICBpZiAoam9iID09IG1fcmVzb3VyY2VIYW5kbGVMaXN0W2ldKSB7Ci0g
ICAgICAgICAgICBtX3Jlc291cmNlSGFuZGxlTGlzdC5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBq
b2ItPmRlcmVmKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzdGFy
dFNjaGVkdWxlZEpvYnMoKQotewotICAgIC8vIFRPRE86IENyZWF0ZSBhIHNlcGFyYXRlIHN0YWNr
IG9mIGpvYnMgZm9yIGVhY2ggZG9tYWluLgotCi0gICAgYm9vbCBzdGFydGVkID0gZmFsc2U7Ci0g
ICAgd2hpbGUgKCFtX3Jlc291cmNlSGFuZGxlTGlzdC5pc0VtcHR5KCkgJiYgbV9ydW5uaW5nSm9i
cyA8IG1heFJ1bm5pbmdKb2JzKSB7Ci0gICAgICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSBtX3Jl
c291cmNlSGFuZGxlTGlzdFswXTsKLSAgICAgICAgbV9yZXNvdXJjZUhhbmRsZUxpc3QucmVtb3Zl
KDApOwotICAgICAgICBzdGFydEpvYihqb2IpOwotICAgICAgICBzdGFydGVkID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHN0YXJ0ZWQ7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
OjpzdGFydEpvYihSZXNvdXJjZUhhbmRsZSogam9iKQotewotICAgIGpvYi0+aW5pdGlhbGl6ZSgp
OwotCi0gICAgbV9ydW5uaW5nSm9icysrOwotCi0gICAgQ1VSTE1jb2RlIHJldCA9IG1fY3VybE11
bHRpSGFuZGxlLmFkZEhhbmRsZShqb2ItPmdldEludGVybmFsKCktPm1fY3VybEhhbmRsZS5oYW5k
bGUoKSk7Ci0KLSAgICAvLyBkb24ndCBjYWxsIHBlcmZvcm0sIGJlY2F1c2UgZXZlbnRzIG11c3Qg
YmUgYXN5bmMKLSAgICAvLyB0aW1lb3V0IHdpbGwgb2NjdXIgYW5kIGRvIGN1cmxfbXVsdGlfcGVy
Zm9ybQotICAgIGlmIChyZXQgJiYgcmV0ICE9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkgewot
I2lmbmRlZiBOREVCVUcKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciAlZCBzdGFydGlu
ZyBqb2IgJXNcbiIsIHJldCwgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhqb2ItPmZpcnN0
UmVxdWVzdCgpLnVybCgpLnN0cmluZygpKS5sYXRpbjEoKS5kYXRhKCkpOwotI2VuZGlmCi0gICAg
ICAgIGpvYi0+Y2FuY2VsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyOjpjYW5jZWwoUmVzb3VyY2VIYW5kbGUqIGpvYikKLXsKLSAgICBp
ZiAocmVtb3ZlU2NoZWR1bGVkSm9iKGpvYikpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlc291
cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7Ci0gICAgZC0+bV9jYW5j
ZWxsZWQgPSB0cnVlOwotICAgIGlmICghbV9kb3dubG9hZFRpbWVyLmlzQWN0aXZlKCkpCi0gICAg
ICAgIG1fZG93bmxvYWRUaW1lci5zdGFydE9uZVNob3QocG9sbFRpbWUpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzhmNTEyZTk5Ni4uMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5o
CisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2
IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KLSAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
UmVzb3VyY2VIYW5kbGVNYW5hZ2VyX2gKLSNkZWZpbmUgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyX2gK
LQotI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRl
ICJUaW1lci5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCi0KLSNpZiBQTEFU
Rk9STShXSU4pCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0j
ZW5kaWYKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyKiBzaGFyZWRJbnN0YW5jZSgpOwotICAgIHZvaWQgYWRk
KFJlc291cmNlSGFuZGxlKik7Ci0gICAgdm9pZCBjYW5jZWwoUmVzb3VyY2VIYW5kbGUqKTsKLQot
cHJpdmF0ZToKLSAgICBSZXNvdXJjZUhhbmRsZU1hbmFnZXIoKTsKLSAgICB+UmVzb3VyY2VIYW5k
bGVNYW5hZ2VyKCk7Ci0gICAgdm9pZCBkb3dubG9hZFRpbWVyQ2FsbGJhY2soKTsKLSAgICB2b2lk
IHJlbW92ZUZyb21DdXJsKFJlc291cmNlSGFuZGxlKik7Ci0gICAgYm9vbCByZW1vdmVTY2hlZHVs
ZWRKb2IoUmVzb3VyY2VIYW5kbGUqKTsKLSAgICB2b2lkIHN0YXJ0Sm9iKFJlc291cmNlSGFuZGxl
Kik7Ci0gICAgYm9vbCBzdGFydFNjaGVkdWxlZEpvYnMoKTsKLQotICAgIFRpbWVyIG1fZG93bmxv
YWRUaW1lcjsKLSAgICBWZWN0b3I8UmVzb3VyY2VIYW5kbGUqPiBtX3Jlc291cmNlSGFuZGxlTGlz
dDsKLSAgICBpbnQgbV9ydW5uaW5nSm9iczsKLQotICAgIEN1cmxNdWx0aUhhbmRsZSBtX2N1cmxN
dWx0aUhhbmRsZTsKLX07Ci0KLX0KLQotI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>